From c67dc96d57f7b330b97bd9f3ca05df208b5e5d76 Mon Sep 17 00:00:00 2001 From: Marcus Hoffmann Date: Mon, 16 Mar 2020 15:52:46 +0100 Subject: [PATCH] fix crash on converter dialogue This vendors the jscience javax.measure package, extracted from https://repo1.maven.org/maven2/org/jscience/jscience/4.3.1/jscience-4.3.1-sources.jar Using this package as a dependency leads to conflicting classes, which we can't solve from gradle. Instead of repackaging the jar file the easiest solution seems to be to vendor the sources we need. --- app/build.gradle | 2 +- measure/.gitignore | 1 + measure/build.gradle | 9 + .../java/javax/measure/DecimalMeasure.java | 178 ++++ .../main/java/javax/measure/Measurable.java | 76 ++ .../src/main/java/javax/measure/Measure.java | 449 +++++++++ .../java/javax/measure/MeasureFormat.java | 169 ++++ .../java/javax/measure/VectorMeasure.java | 273 +++++ .../javax/measure/converter/AddConverter.java | 80 ++ .../converter/ConversionException.java | 38 + .../javax/measure/converter/LogConverter.java | 107 ++ .../measure/converter/MultiplyConverter.java | 86 ++ .../measure/converter/RationalConverter.java | 127 +++ .../measure/converter/UnitConverter.java | 188 ++++ .../measure/converter/doc-files/converter.png | Bin 0 -> 110953 bytes .../java/javax/measure/converter/package.html | 5 + .../src/main/java/javax/measure/package.html | 77 ++ .../javax/measure/quantity/Acceleration.java | 27 + .../measure/quantity/AmountOfSubstance.java | 27 + .../java/javax/measure/quantity/Angle.java | 28 + .../measure/quantity/AngularAcceleration.java | 30 + .../measure/quantity/AngularVelocity.java | 30 + .../java/javax/measure/quantity/Area.java | 28 + .../measure/quantity/CatalyticActivity.java | 27 + .../javax/measure/quantity/DataAmount.java | 27 + .../java/javax/measure/quantity/DataRate.java | 28 + .../javax/measure/quantity/Dimensionless.java | 25 + .../java/javax/measure/quantity/Duration.java | 27 + .../measure/quantity/DynamicViscosity.java | 32 + .../measure/quantity/ElectricCapacitance.java | 27 + .../measure/quantity/ElectricCharge.java | 27 + .../measure/quantity/ElectricConductance.java | 27 + .../measure/quantity/ElectricCurrent.java | 28 + .../measure/quantity/ElectricInductance.java | 27 + .../measure/quantity/ElectricPotential.java | 27 + .../measure/quantity/ElectricResistance.java | 27 + .../java/javax/measure/quantity/Energy.java | 27 + .../java/javax/measure/quantity/Force.java | 28 + .../javax/measure/quantity/Frequency.java | 28 + .../javax/measure/quantity/Illuminance.java | 27 + .../measure/quantity/KinematicViscosity.java | 31 + .../java/javax/measure/quantity/Length.java | 28 + .../javax/measure/quantity/LuminousFlux.java | 27 + .../measure/quantity/LuminousIntensity.java | 28 + .../javax/measure/quantity/MagneticFlux.java | 27 + .../measure/quantity/MagneticFluxDensity.java | 27 + .../java/javax/measure/quantity/Mass.java | 29 + .../javax/measure/quantity/MassFlowRate.java | 31 + .../java/javax/measure/quantity/Power.java | 27 + .../java/javax/measure/quantity/Pressure.java | 27 + .../java/javax/measure/quantity/Quantity.java | 31 + .../quantity/RadiationDoseAbsorbed.java | 27 + .../quantity/RadiationDoseEffective.java | 28 + .../measure/quantity/RadioactiveActivity.java | 27 + .../javax/measure/quantity/SolidAngle.java | 28 + .../javax/measure/quantity/Temperature.java | 27 + .../java/javax/measure/quantity/Torque.java | 34 + .../java/javax/measure/quantity/Velocity.java | 27 + .../java/javax/measure/quantity/Volume.java | 28 + .../measure/quantity/VolumetricDensity.java | 30 + .../measure/quantity/VolumetricFlowRate.java | 32 + .../java/javax/measure/quantity/package.html | 6 + .../javax/measure/unit/AlternateUnit.java | 126 +++ .../java/javax/measure/unit/BaseUnit.java | 112 +++ .../java/javax/measure/unit/CompoundUnit.java | 109 ++ .../java/javax/measure/unit/DerivedUnit.java | 27 + .../java/javax/measure/unit/Dimension.java | 259 +++++ .../main/java/javax/measure/unit/NonSI.java | 758 ++++++++++++++ .../java/javax/measure/unit/ProductUnit.java | 471 +++++++++ .../src/main/java/javax/measure/unit/SI.java | 719 ++++++++++++++ .../javax/measure/unit/SystemOfUnits.java | 32 + .../javax/measure/unit/TransformedUnit.java | 121 +++ .../main/java/javax/measure/unit/Unit.java | 501 ++++++++++ .../java/javax/measure/unit/UnitFormat.java | 940 ++++++++++++++++++ .../javax/measure/unit/doc-files/momey.png | Bin 0 -> 151854 bytes .../javax/measure/unit/doc-files/unit.png | Bin 0 -> 215249 bytes .../main/java/javax/measure/unit/package.html | 61 ++ settings.gradle | 1 + 78 files changed, 7344 insertions(+), 1 deletion(-) create mode 100644 measure/.gitignore create mode 100644 measure/build.gradle create mode 100644 measure/src/main/java/javax/measure/DecimalMeasure.java create mode 100644 measure/src/main/java/javax/measure/Measurable.java create mode 100644 measure/src/main/java/javax/measure/Measure.java create mode 100644 measure/src/main/java/javax/measure/MeasureFormat.java create mode 100644 measure/src/main/java/javax/measure/VectorMeasure.java create mode 100644 measure/src/main/java/javax/measure/converter/AddConverter.java create mode 100644 measure/src/main/java/javax/measure/converter/ConversionException.java create mode 100644 measure/src/main/java/javax/measure/converter/LogConverter.java create mode 100644 measure/src/main/java/javax/measure/converter/MultiplyConverter.java create mode 100644 measure/src/main/java/javax/measure/converter/RationalConverter.java create mode 100644 measure/src/main/java/javax/measure/converter/UnitConverter.java create mode 100644 measure/src/main/java/javax/measure/converter/doc-files/converter.png create mode 100644 measure/src/main/java/javax/measure/converter/package.html create mode 100644 measure/src/main/java/javax/measure/package.html create mode 100644 measure/src/main/java/javax/measure/quantity/Acceleration.java create mode 100644 measure/src/main/java/javax/measure/quantity/AmountOfSubstance.java create mode 100644 measure/src/main/java/javax/measure/quantity/Angle.java create mode 100644 measure/src/main/java/javax/measure/quantity/AngularAcceleration.java create mode 100644 measure/src/main/java/javax/measure/quantity/AngularVelocity.java create mode 100644 measure/src/main/java/javax/measure/quantity/Area.java create mode 100644 measure/src/main/java/javax/measure/quantity/CatalyticActivity.java create mode 100644 measure/src/main/java/javax/measure/quantity/DataAmount.java create mode 100644 measure/src/main/java/javax/measure/quantity/DataRate.java create mode 100644 measure/src/main/java/javax/measure/quantity/Dimensionless.java create mode 100644 measure/src/main/java/javax/measure/quantity/Duration.java create mode 100644 measure/src/main/java/javax/measure/quantity/DynamicViscosity.java create mode 100644 measure/src/main/java/javax/measure/quantity/ElectricCapacitance.java create mode 100644 measure/src/main/java/javax/measure/quantity/ElectricCharge.java create mode 100644 measure/src/main/java/javax/measure/quantity/ElectricConductance.java create mode 100644 measure/src/main/java/javax/measure/quantity/ElectricCurrent.java create mode 100644 measure/src/main/java/javax/measure/quantity/ElectricInductance.java create mode 100644 measure/src/main/java/javax/measure/quantity/ElectricPotential.java create mode 100644 measure/src/main/java/javax/measure/quantity/ElectricResistance.java create mode 100644 measure/src/main/java/javax/measure/quantity/Energy.java create mode 100644 measure/src/main/java/javax/measure/quantity/Force.java create mode 100644 measure/src/main/java/javax/measure/quantity/Frequency.java create mode 100644 measure/src/main/java/javax/measure/quantity/Illuminance.java create mode 100644 measure/src/main/java/javax/measure/quantity/KinematicViscosity.java create mode 100644 measure/src/main/java/javax/measure/quantity/Length.java create mode 100644 measure/src/main/java/javax/measure/quantity/LuminousFlux.java create mode 100644 measure/src/main/java/javax/measure/quantity/LuminousIntensity.java create mode 100644 measure/src/main/java/javax/measure/quantity/MagneticFlux.java create mode 100644 measure/src/main/java/javax/measure/quantity/MagneticFluxDensity.java create mode 100644 measure/src/main/java/javax/measure/quantity/Mass.java create mode 100644 measure/src/main/java/javax/measure/quantity/MassFlowRate.java create mode 100644 measure/src/main/java/javax/measure/quantity/Power.java create mode 100644 measure/src/main/java/javax/measure/quantity/Pressure.java create mode 100644 measure/src/main/java/javax/measure/quantity/Quantity.java create mode 100644 measure/src/main/java/javax/measure/quantity/RadiationDoseAbsorbed.java create mode 100644 measure/src/main/java/javax/measure/quantity/RadiationDoseEffective.java create mode 100644 measure/src/main/java/javax/measure/quantity/RadioactiveActivity.java create mode 100644 measure/src/main/java/javax/measure/quantity/SolidAngle.java create mode 100644 measure/src/main/java/javax/measure/quantity/Temperature.java create mode 100644 measure/src/main/java/javax/measure/quantity/Torque.java create mode 100644 measure/src/main/java/javax/measure/quantity/Velocity.java create mode 100644 measure/src/main/java/javax/measure/quantity/Volume.java create mode 100644 measure/src/main/java/javax/measure/quantity/VolumetricDensity.java create mode 100644 measure/src/main/java/javax/measure/quantity/VolumetricFlowRate.java create mode 100644 measure/src/main/java/javax/measure/quantity/package.html create mode 100644 measure/src/main/java/javax/measure/unit/AlternateUnit.java create mode 100644 measure/src/main/java/javax/measure/unit/BaseUnit.java create mode 100644 measure/src/main/java/javax/measure/unit/CompoundUnit.java create mode 100644 measure/src/main/java/javax/measure/unit/DerivedUnit.java create mode 100644 measure/src/main/java/javax/measure/unit/Dimension.java create mode 100644 measure/src/main/java/javax/measure/unit/NonSI.java create mode 100644 measure/src/main/java/javax/measure/unit/ProductUnit.java create mode 100644 measure/src/main/java/javax/measure/unit/SI.java create mode 100644 measure/src/main/java/javax/measure/unit/SystemOfUnits.java create mode 100644 measure/src/main/java/javax/measure/unit/TransformedUnit.java create mode 100644 measure/src/main/java/javax/measure/unit/Unit.java create mode 100644 measure/src/main/java/javax/measure/unit/UnitFormat.java create mode 100644 measure/src/main/java/javax/measure/unit/doc-files/momey.png create mode 100644 measure/src/main/java/javax/measure/unit/doc-files/unit.png create mode 100644 measure/src/main/java/javax/measure/unit/package.html diff --git a/app/build.gradle b/app/build.gradle index 0755b9a8..2bf0e75b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -74,7 +74,7 @@ dependencies { implementation "com.android.support:support-v4:${versions.supportLib}" implementation "com.android.support:appcompat-v7:${versions.supportLib}" implementation "com.android.support:design:${versions.supportLib}" - implementation "javax.measure:jsr-275:0.9.1" + implementation project(":measure") implementation 'com.squareup:otto:1.3.9-SNAPSHOT' annotationProcessor 'com.squareup:otto:1.3.9-SNAPSHOT' annotationProcessor 'com.squareup:otto-compiler:1.3.9-SNAPSHOT' diff --git a/measure/.gitignore b/measure/.gitignore new file mode 100644 index 00000000..796b96d1 --- /dev/null +++ b/measure/.gitignore @@ -0,0 +1 @@ +/build diff --git a/measure/build.gradle b/measure/build.gradle new file mode 100644 index 00000000..c367e675 --- /dev/null +++ b/measure/build.gradle @@ -0,0 +1,9 @@ +apply plugin: 'java-library' + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + +} + +sourceCompatibility = "7" +targetCompatibility = "7" diff --git a/measure/src/main/java/javax/measure/DecimalMeasure.java b/measure/src/main/java/javax/measure/DecimalMeasure.java new file mode 100644 index 00000000..05f337a9 --- /dev/null +++ b/measure/src/main/java/javax/measure/DecimalMeasure.java @@ -0,0 +1,178 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2007 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure; + +import java.math.BigDecimal; +import java.math.MathContext; + +import javax.measure.converter.AddConverter; +import javax.measure.converter.RationalConverter; +import javax.measure.converter.UnitConverter; +import javax.measure.quantity.Quantity; +import javax.measure.unit.Unit; + +/** + *

This class represents a measure whose value is an arbitrary-precision + * decimal number.

+ * + *

When converting, applications may supply the + * java.math.Context:[code] + * DecimalMeasure c = DecimalMeasure.valueOf("299792458 m/s"); + * DecimalMeasure milesPerHour = c.to(MILES_PER_HOUR, MathContext.DECIMAL128); + * System.out.println(milesPerHour); + * + * > 670616629.3843951324266284896206156 mph + * [/code] + * + * @author Jean-Marie Dautelle + * @version 4.3, October 3, 2007 + */ +public class DecimalMeasure extends Measure { + + /** + * Holds the BigDecimal value. + */ + private final BigDecimal _value; + + /** + * Holds the unit. + */ + private final Unit _unit; + + /** + * Creates a decimal measure for the specified number stated in the + * specified unit. + */ + public DecimalMeasure(BigDecimal value, Unit unit) { + _value = value; + _unit = unit; + } + + /** + * Returns the decimal measure for the specified number stated in the + * specified unit. + * + * @param decimal the measurement value. + * @param unit the measurement unit. + */ + public static DecimalMeasure valueOf( + BigDecimal decimal, Unit unit) { + return new DecimalMeasure(decimal, unit); + } + + /** + * Returns the decimal measure for the specified textual representation. + * This method first reads the BigDecimal value, then + * the unit if any (value and unit should be separated by white spaces). + * + * @param csq the decimal measure representation (including unit if any). + * @throws NumberFormatException if the specified character sequence is + * not a valid representation of decimal measure. + */ + @SuppressWarnings("unchecked") + public static DecimalMeasure valueOf(CharSequence csq) { + String str = csq.toString(); + int numberLength = str.length(); + int unitStartIndex = -1; + for (int i=0; i < str.length(); i++) { + if (Character.isWhitespace(str.charAt(i))) { + for (int j=i+1; j < str.length(); j++) { + if (!Character.isWhitespace(str.charAt(j))) { + unitStartIndex = j; + break; + } + } + numberLength = i; + break; + } + } + BigDecimal decimal = new BigDecimal(str.substring(0, numberLength)); + Unit unit = Unit.ONE; + if (unitStartIndex > 0) { + unit = Unit.valueOf(str.substring(unitStartIndex)); + } + return new DecimalMeasure(decimal, unit); + } + + @Override + public Unit getUnit() { + return _unit; + } + + @Override + public BigDecimal getValue() { + return _value; + } + + /** + * Returns the decimal measure equivalent to this measure but stated in the + * specified unit. This method will raise an ArithmeticException if the + * resulting measure does not have a terminating decimal expansion. + * + * @param unit the new measurement unit. + * @return the measure stated in the specified unit. + * @throws ArithmeticException if the converted measure value does not have + * a terminating decimal expansion + * @see #to(Unit, MathContext) + */ + @Override + public DecimalMeasure to(Unit unit) { + return to(unit, null); + } + + /** + * Returns the decimal measure equivalent to this measure but stated in the + * specified unit, the conversion is performed using the specified math + * context. + * + * @param unit the new measurement unit. + * @param mathContext the mathContext used to convert + * BigDecimal values or null if none. + * @return the measure stated in the specified unit. + * @throws ArithmeticException if the result is inexact but the + * rounding mode is MathContext.UNNECESSARY or + * mathContext.precision == 0 and the quotient has a + * non-terminating decimal expansion. + */ + public DecimalMeasure to(Unit unit, MathContext mathContext) { + if ((unit == _unit) || (unit.equals(_unit))) + return this; + UnitConverter cvtr = _unit.getConverterTo(unit); + if (cvtr instanceof RationalConverter) { + RationalConverter factor = (RationalConverter) cvtr; + BigDecimal dividend = BigDecimal.valueOf(factor.getDividend()); + BigDecimal divisor = BigDecimal.valueOf(factor.getDivisor()); + BigDecimal result = mathContext == null ? + _value.multiply(dividend).divide(divisor) : + _value.multiply(dividend, mathContext).divide(divisor, mathContext); + return new DecimalMeasure(result, unit); + } else if (cvtr.isLinear()) { + BigDecimal factor = BigDecimal.valueOf(cvtr.convert(1.0)); + BigDecimal result = mathContext == null ? + _value.multiply(factor) : _value.multiply(factor, mathContext); + return new DecimalMeasure(result, unit); + } else if (cvtr instanceof AddConverter) { + BigDecimal offset = BigDecimal.valueOf(((AddConverter)cvtr).getOffset()); + BigDecimal result = mathContext == null ? + _value.add(offset) : _value.add(offset, mathContext); + return new DecimalMeasure(result, unit); + } else { // Non-linear and not an offset, convert the double value. + BigDecimal result = BigDecimal.valueOf(cvtr.convert(_value.doubleValue())); + return new DecimalMeasure(result, unit); + } + } + + public double doubleValue(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return _value.doubleValue(); + return _unit.getConverterTo(unit).convert(_value.doubleValue()); + } + + private static final long serialVersionUID = 1L; +} diff --git a/measure/src/main/java/javax/measure/Measurable.java b/measure/src/main/java/javax/measure/Measurable.java new file mode 100644 index 00000000..6d632b48 --- /dev/null +++ b/measure/src/main/java/javax/measure/Measurable.java @@ -0,0 +1,76 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2007 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure; + +import javax.measure.quantity.Quantity; +import javax.measure.unit.Unit; + +/** + *

This interface represents the measurable, countable, or comparable + * property or aspect of a thing.

+ * + *

Implementing instances are typically the result of a measurement:[code] + * Measurable weight = Measure.valueOf(180.0, POUND); + * [/code] + * They can also be created from custom classes:[code] + * class Delay implements Measurable { + * private long nanoSeconds; // Implicit internal unit. + * public double doubleValue(Unit unit) { ... } + * public long longValue(Unit unit) { ... } + * } + * Thread.wait(new Delay(24, HOUR)); // Assuming Thread.wait(Measurable) method. + * [/code]

+ * + *

Although measurable instances are for the most part scalar quantities; + * more complex implementations (e.g. vectors, data set) are allowed as + * long as an aggregate magnitude can be determined. For example:[code] + * class Velocity3D implements Measurable { + * private double x, y, z; // Meter per seconds. + * public double doubleValue(Unit unit) { ... } // Returns vector norm. + * ... + * } + * class Sensors extends Measure { + * public doubleValue(Unit unit) { ... } // Returns median value. + * ... + * } [/code]

+ * + * @author Jean-Marie Dautelle + * @version 4.1, June 8, 2007 + */ +public interface Measurable extends Comparable> { + + /** + * Returns the value of this measurable stated in the specified unit as + * a double. If the measurable has too great a magnitude to + * be represented as a double, it will be converted to + * Double.NEGATIVE_INFINITY or + * Double.POSITIVE_INFINITY as appropriate. + * + * @param unit the unit in which this measurable value is stated. + * @return the numeric value after conversion to type double. + */ + double doubleValue(Unit unit); + + /** + * Returns the estimated integral value of this measurable stated in + * the specified unit as a long. + * + *

Note: This method differs from the Number.longValue() + * in the sense that the closest integer value is returned + * and an ArithmeticException is raised instead + * of a bit truncation in case of overflow (safety critical).

+ * + * @param unit the unit in which the measurable value is stated. + * @return the numeric value after conversion to type long. + * @throws ArithmeticException if this quantity cannot be represented + * as a long number in the specified unit. + */ + long longValue(Unit unit) throws ArithmeticException; + +} diff --git a/measure/src/main/java/javax/measure/Measure.java b/measure/src/main/java/javax/measure/Measure.java new file mode 100644 index 00000000..610727a9 --- /dev/null +++ b/measure/src/main/java/javax/measure/Measure.java @@ -0,0 +1,449 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2007 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.math.MathContext; + +import javax.measure.quantity.Quantity; +import javax.measure.unit.CompoundUnit; +import javax.measure.unit.Unit; + +/** + *

This class represents the result of a measurement stated in a + * known unit.

+ * + *

There is no constraint upon the measurement value itself: scalars, + * vectors, or even data sets are valid values as long as + * an aggregate magnitude can be determined (see {@link Measurable}).

+ * + * @author Jean-Marie Dautelle + * @version 4.2, August 26, 2007 + */ +public abstract class Measure implements Measurable, + Serializable { + + /** + * Default constructor. + */ + protected Measure() { + } + + /** + * Returns the scalar measure for the specified double + * stated in the specified unit. + * + * @param doubleValue the measurement value. + * @param unit the measurement unit. + */ + public static Measure valueOf( + double doubleValue, Unit unit) { + return new Double(doubleValue, unit); + } + + /** + * Returns the scalar measure for the specified double + * stated in the specified unit. + * + * @param longValue the measurement value. + * @param unit the measurement unit. + */ + public static Measure valueOf( + long longValue, Unit unit) { + return new Long(longValue, unit); + } + + /** + * Returns the scalar measure for the specified float + * stated in the specified unit. + * + * @param floatValue the measurement value. + * @param unit the measurement unit. + */ + public static Measure valueOf( + float floatValue, Unit unit) { + return new Float(floatValue, unit); + } + + /** + * Returns the scalar measure for the specified int + * stated in the specified unit. + * + * @param intValue the measurement value. + * @param unit the measurement unit. + */ + public static Measure valueOf( + int intValue, Unit unit) { + return new Integer(intValue, unit); + } + + /** + * Returns the measurement value of this measure. + * + * @return the measurement value. + */ + public abstract V getValue(); + + /** + * Returns the measurement unit of this measure. + * + * @return the measurement unit. + */ + public abstract Unit getUnit(); + + /** + * Returns the measure equivalent to this measure but stated in the + * specified unit. This method may result in lost of precision + * (e.g. measure of integral value). + * + * @param unit the new measurement unit. + * @return the measure stated in the specified unit. + */ + public abstract Measure to(Unit unit); + + /** + * Returns the value of this measure stated in the specified unit as + * a double. If the measure has too great a magnitude to + * be represented as a double, it will be converted to + * Double.NEGATIVE_INFINITY or + * Double.POSITIVE_INFINITY as appropriate. + * + * @param unit the unit in which this measure is stated. + * @return the numeric value after conversion to type double. + */ + public abstract double doubleValue(Unit unit); + + /** + * Returns the estimated integral value of this measure stated in + * the specified unit as a long. + * + *

Note: This method differs from the Number.longValue() + * in the sense that the closest integer value is returned + * and an ArithmeticException is raised instead + * of a bit truncation in case of overflow (safety critical).

+ * + * @param unit the unit in which the measurable value is stated. + * @return the numeric value after conversion to type long. + * @throws ArithmeticException if this quantity cannot be represented + * as a long number in the specified unit. + */ + public long longValue(Unit unit) throws ArithmeticException { + double doubleValue = doubleValue(unit); + if (java.lang.Double.isNaN(doubleValue) + || (doubleValue < java.lang.Long.MIN_VALUE) + || (doubleValue > java.lang.Long.MAX_VALUE)) + throw new ArithmeticException(doubleValue + " " + unit + + " cannot be represented as long"); + return Math.round(doubleValue); + } + + /** + * Returns the value of this measure stated in the specified unit as a + * float. If the measure has too great a magnitude to be + * represented as a float, it will be converted to + * Float.NEGATIVE_INFINITY or + * Float.POSITIVE_INFINITY as appropriate. + * + * @param unit the unit in which the measure is stated. + * @return the numeric value after conversion to type float. + */ + public float floatValue(Unit unit) { + return (float) doubleValue(unit); + } + + /** + * Returns the estimated integral value of this measure stated in + * the specified unit as a int. + * + *

Note: This method differs from the Number.intValue() + * in the sense that the closest integer value is returned + * and an ArithmeticException is raised instead + * of a bit truncation in case of overflow (safety critical).

+ * + * @param unit the unit in which the measurable value is stated. + * @return the numeric value after conversion to type int. + * @throws ArithmeticException if this quantity cannot be represented + * as a int number in the specified unit. + */ + public int intValue(Unit unit) { + long longValue = longValue(unit); + if ((longValue > java.lang.Integer.MAX_VALUE) + || (longValue < java.lang.Integer.MIN_VALUE)) + throw new ArithmeticException("Overflow"); + return (int) longValue; + } + + /** + * Compares this measure against the specified object for + * strict equality (same unit and amount). + * To compare measures stated using different units the + * {@link #compareTo} method should be used. + * + * @param obj the object to compare with. + * @return true if both objects are identical (same + * unit and same amount); false otherwise. + */ + @SuppressWarnings("unchecked") + public boolean equals(Object obj) { + if (!(obj instanceof Measure)) + return false; + Measure that = (Measure) obj; + return this.getUnit().equals(that.getUnit()) + && this.getValue().equals(that.getValue()); + } + + /** + * Returns the hash code for this scalar. + * + * @return the hash code value. + */ + public int hashCode() { + return getUnit().hashCode() + getValue().hashCode(); + } + + /** + * Returns the String representation of this measure + * The string produced for a given measure is always the same; + * it is not affected by locale. This means that it can be used + * as a canonical string representation for exchanging data, + * or as a key for a Hashtable, etc. Locale-sensitive + * measure formatting and parsing is handled by the {@link + * MeasureFormat} class and its subclasses. + * + * @return the string representation of this measure. + */ + public String toString() { + if (getUnit() instanceof CompoundUnit) + return MeasureFormat.DEFAULT.formatCompound(doubleValue(getUnit()), + getUnit(), new StringBuffer(), null).toString(); + return getValue() + " " + getUnit(); + } + + /** + * Compares this measure to the specified measurable quantity. + * This method compares the {@link Measurable#doubleValue(Unit)} of + * both this measure and the specified measurable stated in the + * same unit (this measure's {@link #getUnit() unit}). + * + * @return a negative integer, zero, or a positive integer as this measure + * is less than, equal to, or greater than the specified measurable + * quantity. + * @return Double.compare(this.doubleValue(getUnit()), + * that.doubleValue(getUnit())) + */ + public int compareTo(Measurable that) { + return java.lang.Double.compare(doubleValue(getUnit()), that + .doubleValue(getUnit())); + } + + /** + * Holds scalar implementation for double values. + */ + private static final class Double extends + Measure { + + private final double _value; + + private final Unit _unit; + + public Double(double value, Unit unit) { + _value = value; + _unit = unit; + } + + @Override + public Unit getUnit() { + return _unit; + } + + @Override + public java.lang.Double getValue() { + return _value; + } + + @Override + public Measure to(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return this; + return new Double(doubleValue(unit), unit); + } + + public double doubleValue(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return _value; + return _unit.getConverterTo(unit).convert(_value); + } + + private static final long serialVersionUID = 1L; + } + + /** + * Holds scalar implementation for long values. + */ + private static final class Long extends + Measure { + + private final long _value; + + private final Unit _unit; + + public Long(long value, Unit unit) { + _value = value; + _unit = unit; + } + + @Override + public Unit getUnit() { + return _unit; + } + + @Override + public java.lang.Long getValue() { + return _value; + } + + @Override + public Measure to(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return this; + return new Long(longValue(unit), unit); + } + + public double doubleValue(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return _value; + return _unit.getConverterTo(unit).convert(_value); + } + + public long longValue(Unit unit) throws ArithmeticException { + if ((unit == _unit) || (unit.equals(_unit))) + return _value; // No conversion, returns value directly. + return super.longValue(unit); + } + + private static final long serialVersionUID = 1L; + + } + + /** + * Holds scalar implementation for float values. + */ + private static final class Float extends + Measure { + + private final float _value; + + private final Unit _unit; + + public Float(float value, Unit unit) { + _value = value; + _unit = unit; + } + + @Override + public Unit getUnit() { + return _unit; + } + + @Override + public java.lang.Float getValue() { + return _value; + } + + @Override + public Measure to(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return this; + return new Float(floatValue(unit), unit); + } + + public double doubleValue(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return _value; + return _unit.getConverterTo(unit).convert(_value); + } + + private static final long serialVersionUID = 1L; + } + + /** + * Holds scalar implementation for long values. + */ + private static final class Integer extends + Measure { + + private final int _value; + + private final Unit _unit; + + public Integer(int value, Unit unit) { + _value = value; + _unit = unit; + } + + @Override + public Unit getUnit() { + return _unit; + } + + @Override + public java.lang.Integer getValue() { + return _value; + } + + @Override + public Measure to(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return this; + return new Integer(intValue(unit), unit); + } + + public double doubleValue(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return _value; + return _unit.getConverterTo(unit).convert(_value); + } + + public long longValue(Unit unit) throws ArithmeticException { + if ((unit == _unit) || (unit.equals(_unit))) + return _value; // No conversion, returns value directly. + return super.longValue(unit); + } + + private static final long serialVersionUID = 1L; + + } + + /** + * @deprecated {@link DecimalMeasure} should be used directly. + */ + public static Measure valueOf( + BigDecimal decimal, Unit unit) { + return DecimalMeasure.valueOf(decimal, unit); + } + + /** + * @deprecated {@link DecimalMeasure} should be used directly and + * MathContext specified explicitly when + * {@link DecimalMeasure#to(Unit, MathContext) converting}. + */ + public static Measure valueOf( + BigDecimal decimal, Unit unit, MathContext mathContext) { + return DecimalMeasure.valueOf(decimal, unit); + } + + /** + * @deprecated {@link VectorMeasure} should be used directly. + */ + public static Measure valueOf( + double[] components, Unit unit) { + return VectorMeasure.valueOf(components, unit); + } +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/MeasureFormat.java b/measure/src/main/java/javax/measure/MeasureFormat.java new file mode 100644 index 00000000..cd6bb68a --- /dev/null +++ b/measure/src/main/java/javax/measure/MeasureFormat.java @@ -0,0 +1,169 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2007 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure; + +import java.math.BigDecimal; +import java.text.FieldPosition; +import java.text.Format; +import java.text.NumberFormat; +import java.text.ParseException; +import java.text.ParsePosition; + +import javax.measure.unit.CompoundUnit; +import javax.measure.unit.Unit; +import javax.measure.unit.UnitFormat; + +/** + *

This class provides the interface for formatting and parsing {@link + * Measure measures}.

+ * + *

As a minimum, instances of this class should be able to parse/format + * measure using {@link CompoundUnit}.

+ * + * @author Jean-Marie Dautelle + * @version 4.2, August 26, 2007 + */ +public abstract class MeasureFormat extends Format { + + /** + * Returns the measure format for the default locale. + * + * @return getInstance(Number.getInstance(), Unit.getInstance()) + */ + public static MeasureFormat getInstance() { + return DEFAULT; + } + + static final NumberUnit DEFAULT = new NumberUnit(NumberFormat + .getInstance(), UnitFormat.getInstance()); + + /** + * Returns the measure format using the specified number format and + * unit format (the number and unit are separated by a space). + * + * @param numberFormat the number format. + * @param unitFormat the unit format. + * @return the corresponding format. + */ + public static MeasureFormat getInstance(NumberFormat numberFormat, + UnitFormat unitFormat) { + return new NumberUnit(numberFormat, unitFormat); + } + + // Holds default implementation. + static final class NumberUnit extends MeasureFormat { + private final NumberFormat _numberFormat; + + private final UnitFormat _unitFormat; + + private NumberUnit(NumberFormat numberFormat, UnitFormat unitFormat) { + _numberFormat = numberFormat; + _unitFormat = unitFormat; + } + + @Override + public StringBuffer format(Object obj, StringBuffer toAppendTo, + FieldPosition pos) { + Measure measure = (Measure) obj; + Object value = measure.getValue(); + Unit unit = measure.getUnit(); + if (value instanceof Number) { + if (unit instanceof CompoundUnit) + return formatCompound(((Number) value).doubleValue(), + (CompoundUnit) unit, toAppendTo, pos); + _numberFormat.format(value, toAppendTo, pos); + } else { + toAppendTo.append(value); + } + if (!measure.getUnit().equals(Unit.ONE)) { + toAppendTo.append(' '); + _unitFormat.format(unit, toAppendTo, pos); + } + return toAppendTo; + } + + // Measure using Compound unit have no separators in their representation. + StringBuffer formatCompound(double value, Unit unit, + StringBuffer toAppendTo, FieldPosition pos) { + if (!(unit instanceof CompoundUnit)) { + toAppendTo.append((long) value); + return _unitFormat.format(unit, toAppendTo, pos); + } + Unit high = ((CompoundUnit) unit).getHigher(); + Unit low = ((CompoundUnit) unit).getLower(); // The unit in which the value is stated. + long highValue = (long) low.getConverterTo(high).convert(value); + double lowValue = value + - high.getConverterTo(low).convert(highValue); + formatCompound(highValue, high, toAppendTo, pos); + formatCompound(lowValue, low, toAppendTo, pos); + return toAppendTo; + } + + @Override + public Object parseObject(String source, ParsePosition pos) { + int start = pos.getIndex(); + try { + int i = start; + Number value = _numberFormat.parse(source, pos); + if (i == pos.getIndex()) + return null; // Cannot parse. + i = pos.getIndex(); + if (i >= source.length()) + return measureOf(value, Unit.ONE); // No unit. + boolean isCompound = !Character.isWhitespace(source.charAt(i)); + if (isCompound) + return parseCompound(value, source, pos); + if (++i >= source.length()) + return measureOf(value, Unit.ONE); // No unit. + pos.setIndex(i); // Skips separator. + Unit unit = _unitFormat.parseProductUnit(source, pos); + return measureOf(value, unit); + } catch (ParseException e) { + pos.setIndex(start); + pos.setErrorIndex(e.getErrorOffset()); + return null; + } + } + + @SuppressWarnings("unchecked") + private Object parseCompound(Number highValue, String source, + ParsePosition pos) throws ParseException { + Unit high = _unitFormat.parseSingleUnit(source, pos); + int i = pos.getIndex(); + if (i >= source.length() + || Character.isWhitespace(source.charAt(i))) + return measureOf(highValue, high); + Measure lowMeasure = (Measure) parseObject(source, pos); + Unit unit = lowMeasure.getUnit(); + long l = lowMeasure.longValue(unit) + + (long) high.getConverterTo(unit).convert( + highValue.longValue()); + return Measure.valueOf(l, unit); + } + + @SuppressWarnings("unchecked") + private static Measure measureOf(Number value, Unit unit) { + if (value instanceof Double) { + return Measure.valueOf(value.doubleValue(), unit); + } else if (value instanceof Long) { + return Measure.valueOf(value.longValue(), unit); + } else if (value instanceof Float) { + return Measure.valueOf(value.floatValue(), unit); + } else if (value instanceof Integer) { + return Measure.valueOf(value.intValue(), unit); + } else if (value instanceof BigDecimal) { + return DecimalMeasure.valueOf((BigDecimal) value, unit); + } else { + return Measure.valueOf(value.doubleValue(), unit); + } + } + + private static final long serialVersionUID = 1L; + } +} diff --git a/measure/src/main/java/javax/measure/VectorMeasure.java b/measure/src/main/java/javax/measure/VectorMeasure.java new file mode 100644 index 00000000..1fd4f322 --- /dev/null +++ b/measure/src/main/java/javax/measure/VectorMeasure.java @@ -0,0 +1,273 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2007 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure; + +import javax.measure.converter.UnitConverter; +import javax.measure.quantity.Quantity; +import javax.measure.unit.CompoundUnit; +import javax.measure.unit.Unit; + +/** + *

This class represents a measurement vector of two or more dimensions. + * For example:[code] + * VectorMeasure dimension = VectorMeasure.valueOf(12.0, 30.0, 40.0, MILLIMETER); + * VectorMeasure v2d = VectorMeasure.valueOf(-2.2, -3.0, KNOTS); + * VectorMeasure c2d = VectorMeasure.valueOf(-7.3, 3.5, NANOAMPERE); + * [/code] + *

+ * + *

Subclasses may provide fixed dimensions specializations:[code] + * class Velocity2D extends VectorMeasure { + * public Velocity2D(double x, double y, Unit unit) { + * ... + * } + * } + * [/code]

+ * + *

Measurement vectors may use {@link CompoundUnit compound units}:[code] + * VectorMeasure latLong = VectorMeasure.valueOf(12.345, 22.23, DEGREE_ANGLE); + * Unit HOUR_MINUTE_SECOND_ANGLE = DEGREE_ANGLE.compound(MINUTE_ANGLE).compound(SECOND_ANGLE); + * System.out.println(latLong.to(HOUR_MINUTE_SECOND_ANGLE)); + * + * > [12°19'42", 22°12'48"] [/code]

+ * + *

Instances of this class (and sub-classes) are immutable.

+ * + * @author Jean-Marie Dautelle + * @version 4.3, October 3, 2007 + */ +public abstract class VectorMeasure extends Measure { + + /** + * Default constructor (for sub-classes). + */ + protected VectorMeasure() { + } + + /** + * Returns a 2-dimensional measurement vector. + * + * @param x the first vector component value. + * @param y the second vector component value. + * @param unit the measurement unit. + */ + public static VectorMeasure valueOf( + double x, double y, Unit unit) { + return new TwoDimensional(x, y, unit); + } + + /** + * Returns a 3-dimensional measurement vector. + * + * @param x the first vector component value. + * @param y the second vector component value. + * @param z the third vector component value. + * @param unit the measurement unit. + */ + public static VectorMeasure valueOf( + double x, double y, double z, Unit unit) { + return new ThreeDimensional(x, y, z, unit); + } + + /** + * Returns a multi-dimensional measurement vector. + * + * @param components the vector component values. + * @param unit the measurement unit. + */ + public static VectorMeasure valueOf(double[] components, + Unit unit) { + return new MultiDimensional(components, unit); + } + + /** + * Returns the measurement vector equivalent to this one but stated in the + * specified unit. + * + * @param unit the new measurement unit. + * @return the vector measure stated in the specified unit. + */ + public abstract VectorMeasure to(Unit unit); + + /** + * Returns the norm of this measurement vector stated in the specified + * unit. + * + * @param unit the unit in which the norm is stated. + * @return |this| + */ + public abstract double doubleValue(Unit unit); + + /** + * Returns the String representation of this measurement + * vector (for example [2.3 m/s, 5.6 m/s]). + * + * @return the textual representation of the measurement vector. + */ + public String toString() { + double[] values = getValue(); + Unit unit = getUnit(); + StringBuffer tmp = new StringBuffer(); + tmp.append('['); + for (double v : values) { + if (tmp.length() > 1) { + tmp.append(", "); + } + if (unit instanceof CompoundUnit) { + MeasureFormat.DEFAULT.formatCompound(v, unit, tmp, null); + } else { + tmp.append(v).append(" ").append(unit); + } + } + tmp.append("] "); + return tmp.toString(); + } + + // Holds 2-dimensional implementation. + private static class TwoDimensional extends VectorMeasure { + + private final double _x; + + private final double _y; + + private final Unit _unit; + + private TwoDimensional(double x, double y, Unit unit) { + _x = x; + _y = y; + _unit = unit; + + } + @Override + public double doubleValue(Unit unit) { + double norm = Math.sqrt(_x * _x + _y * _y); + if ((unit == _unit) || (unit.equals(_unit))) + return norm; + return _unit.getConverterTo(unit).convert(norm); + } + + @Override + public Unit getUnit() { + return _unit; + } + + @Override + public double[] getValue() { + return new double[] { _x, _y }; + } + + @Override + public TwoDimensional to(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return this; + UnitConverter cvtr = _unit.getConverterTo(unit); + return new TwoDimensional(cvtr.convert(_x), cvtr.convert(_y), unit); + } + + private static final long serialVersionUID = 1L; + + } + + // Holds 3-dimensional implementation. + private static class ThreeDimensional extends VectorMeasure { + + private final double _x; + + private final double _y; + + private final double _z; + + private final Unit _unit; + + private ThreeDimensional(double x, double y, double z, Unit unit) { + _x = x; + _y = y; + _z = z; + _unit = unit; + + } + @Override + public double doubleValue(Unit unit) { + double norm = Math.sqrt(_x * _x + _y * _y + _z * _z); + if ((unit == _unit) || (unit.equals(_unit))) + return norm; + return _unit.getConverterTo(unit).convert(norm); + } + + @Override + public Unit getUnit() { + return _unit; + } + + @Override + public double[] getValue() { + return new double[] { _x, _y, _z }; + } + + @Override + public ThreeDimensional to(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return this; + UnitConverter cvtr = _unit.getConverterTo(unit); + return new ThreeDimensional(cvtr.convert(_x), cvtr.convert(_y), cvtr.convert(_z), unit); + } + + private static final long serialVersionUID = 1L; + + } + // Holds multi-dimensional implementation. + private static class MultiDimensional extends VectorMeasure { + + private final double[] _components; + + private final Unit _unit; + + private MultiDimensional(double[] components, Unit unit) { + _components = components.clone(); + _unit = unit; + } + + @Override + public double doubleValue(Unit unit) { + double normSquare = _components[0] * _components[0]; + for (int i=1, n=_components.length; i < n;) { + double d = _components[i++]; + normSquare += d * d; + } + if ((unit == _unit) || (unit.equals(_unit))) + return Math.sqrt(normSquare); + return _unit.getConverterTo(unit).convert(Math.sqrt(normSquare)); + } + + @Override + public Unit getUnit() { + return _unit; + } + + @Override + public double[] getValue() { + return _components.clone(); + } + + @Override + public MultiDimensional to(Unit unit) { + if ((unit == _unit) || (unit.equals(_unit))) + return this; + UnitConverter cvtr = _unit.getConverterTo(unit); + double[] newValues = new double[_components.length]; + for (int i=0; i < _components.length; i++) { + newValues[i] = cvtr.convert(_components[i]); + } + return new MultiDimensional(newValues, unit); + } + + private static final long serialVersionUID = 1L; + + } +} diff --git a/measure/src/main/java/javax/measure/converter/AddConverter.java b/measure/src/main/java/javax/measure/converter/AddConverter.java new file mode 100644 index 00000000..2c0b8d35 --- /dev/null +++ b/measure/src/main/java/javax/measure/converter/AddConverter.java @@ -0,0 +1,80 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.converter; + + +/** + *

This class represents a converter adding a constant offset + * (approximated as a double) to numeric values.

+ * + *

Instances of this class are immutable.

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + */ +public final class AddConverter extends UnitConverter { + + /** + * Holds the offset. + */ + private final double _offset; + + /** + * Creates an add converter with the specified offset. + * + * @param offset the offset value. + * @throws IllegalArgumentException if offset is zero (or close to zero). + */ + public AddConverter(double offset) { + if ((float)offset == 0.0) + throw new IllegalArgumentException("Identity converter not allowed"); + _offset = offset; + } + + /** + * Returns the offset value for this add converter. + * + * @return the offset value. + */ + public double getOffset() { + return _offset; + } + + @Override + public UnitConverter inverse() { + return new AddConverter(- _offset); + } + + @Override + public double convert(double amount) { + return amount + _offset; + } + + @Override + public boolean isLinear() { + return false; + } + + @Override + public UnitConverter concatenate(UnitConverter converter) { + if (converter instanceof AddConverter) { + double offset = _offset + ((AddConverter)converter)._offset; + return valueOf(offset); + } else { + return super.concatenate(converter); + } + } + + private static UnitConverter valueOf(double offset) { + float asFloat = (float) offset; + return asFloat == 0.0f ? UnitConverter.IDENTITY : new AddConverter(offset); + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/converter/ConversionException.java b/measure/src/main/java/javax/measure/converter/ConversionException.java new file mode 100644 index 00000000..39bd2eba --- /dev/null +++ b/measure/src/main/java/javax/measure/converter/ConversionException.java @@ -0,0 +1,38 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.converter; + +/** + * Signals that a problem of some sort has occurred either when creating a + * converter between two units or during the conversion itself. + * + * @author Jean-Marie Dautelle + * @version 3.1, April 2, 2006 + */ +public class ConversionException extends RuntimeException { + + /** + * Constructs a ConversionException with no detail message. + */ + public ConversionException() { + super(); + } + + /** + * Constructs a ConversionException with the specified detail + * message. + * + * @param message the detail message. + */ + public ConversionException(String message) { + super(message); + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/converter/LogConverter.java b/measure/src/main/java/javax/measure/converter/LogConverter.java new file mode 100644 index 00000000..f10c30b9 --- /dev/null +++ b/measure/src/main/java/javax/measure/converter/LogConverter.java @@ -0,0 +1,107 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.converter; + +/** + *

This class represents a logarithmic converter. Such converter + * is typically used to create logarithmic unit. For example:[code] + * Unit BEL = Unit.ONE.transform(new LogConverter(10).inverse()); + * [/code]

+ * + *

Instances of this class are immutable.

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + */ +public final class LogConverter extends UnitConverter { + + /** + * Holds the logarithmic base. + */ + private final double _base; + + /** + * Holds the natural logarithm of the base. + */ + private final double _logBase; + + /** + * Holds the inverse of the natural logarithm of the base. + */ + private final double _invLogBase; + + /** + * Holds the inverse of this converter. + */ + private final Inverse _inverse = new Inverse(); + + /** + * Creates a logarithmic converter having the specified base. + * + * @param base the logarithmic base (e.g. Math.E for + * the Natural Logarithm). + */ + public LogConverter(double base) { + _base = base; + _logBase = Math.log(base); + _invLogBase = 1.0 / _logBase; + } + + /** + * Returns the logarithmic base of this converter. + * + * @return the logarithmic base (e.g. Math.E for + * the Natural Logarithm). + */ + public double getBase() { + return _base; + } + + @Override + public UnitConverter inverse() { + return _inverse; + } + + @Override + public double convert(double amount) { + return _invLogBase * Math.log(amount); + } + + @Override + public boolean isLinear() { + return false; + } + + /** + * This inner class represents the inverse of the logarithmic converter + * (exponentiation converter). + */ + private class Inverse extends UnitConverter { + + + @Override + public UnitConverter inverse() { + return LogConverter.this; + } + + @Override + public double convert(double amount) { + return Math.exp(_logBase * amount); + } + + @Override + public boolean isLinear() { + return false; + } + + private static final long serialVersionUID = 1L; + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/converter/MultiplyConverter.java b/measure/src/main/java/javax/measure/converter/MultiplyConverter.java new file mode 100644 index 00000000..2dfa32af --- /dev/null +++ b/measure/src/main/java/javax/measure/converter/MultiplyConverter.java @@ -0,0 +1,86 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.converter; + +/** + *

This class represents a converter multiplying numeric values by a + * constant scaling factor (approximated as a double). + * For exact scaling conversions {@link RationalConverter} is preferred.

+ * + *

Instances of this class are immutable.

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + */ +public final class MultiplyConverter extends UnitConverter { + + /** + * Holds the scale factor. + */ + private final double _factor; + + /** + * Creates a multiply converter with the specified scale factor. + * + * @param factor the scale factor. + * @throws IllegalArgumentException if offset is one (or close to one). + */ + public MultiplyConverter(double factor) { + if ((float)factor == 1.0) + throw new IllegalArgumentException("Identity converter not allowed"); + _factor = factor; + } + + /** + * Returns the scale factor. + * + * @return the scale factor. + */ + public double getFactor() { + return _factor; + } + + @Override + public UnitConverter inverse() { + return new MultiplyConverter(1.0 / _factor); + } + + @Override + public double convert(double amount) { + return _factor * amount; + } + + @Override + public boolean isLinear() { + return true; + } + + @Override + public UnitConverter concatenate(UnitConverter converter) { + if (converter instanceof MultiplyConverter) { + double factor = _factor * ((MultiplyConverter) converter)._factor; + return valueOf(factor); + } else if (converter instanceof RationalConverter) { + double factor = _factor + * ((RationalConverter) converter).getDividend() + / ((RationalConverter) converter).getDivisor(); + return valueOf(factor); + } else { + return super.concatenate(converter); + } + } + + private static UnitConverter valueOf(double factor) { + float asFloat = (float) factor; + return asFloat == 1.0f ? UnitConverter.IDENTITY + : new MultiplyConverter(factor); + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/converter/RationalConverter.java b/measure/src/main/java/javax/measure/converter/RationalConverter.java new file mode 100644 index 00000000..0186683b --- /dev/null +++ b/measure/src/main/java/javax/measure/converter/RationalConverter.java @@ -0,0 +1,127 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.converter; + +/** + *

This class represents a converter multiplying numeric values by an + * exact scaling factor (represented as the quotient of two + * long numbers).

+ * + *

Instances of this class are immutable.

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + */ +public final class RationalConverter extends UnitConverter { + + /** + * Holds the converter dividend. + */ + private final long _dividend; + + /** + * Holds the converter divisor (always positive). + */ + private final long _divisor; + + /** + * Creates a rational converter with the specified dividend and + * divisor. + * + * @param dividend the dividend. + * @param divisor the positive divisor. + * @throws IllegalArgumentException if divisor < 0 + * @throws IllegalArgumentException if dividend == divisor + */ + public RationalConverter(long dividend, long divisor) { + if (divisor < 0) + throw new IllegalArgumentException("Negative divisor"); + if (dividend == divisor) + throw new IllegalArgumentException("Identity converter not allowed"); + _dividend = dividend; + _divisor = divisor; + } + + /** + * Returns the dividend for this rational converter. + * + * @return this converter dividend. + */ + public long getDividend() { + return _dividend; + } + + /** + * Returns the positive divisor for this rational converter. + * + * @return this converter divisor. + */ + public long getDivisor() { + return _divisor; + } + + @Override + public UnitConverter inverse() { + return _dividend < 0 ? new RationalConverter(-_divisor, -_dividend) + : new RationalConverter(_divisor, _dividend); + } + + @Override + public double convert(double amount) { + return amount * _dividend / _divisor; + } + + @Override + public boolean isLinear() { + return true; + } + + @Override + public UnitConverter concatenate(UnitConverter converter) { + if (converter instanceof RationalConverter) { + RationalConverter that = (RationalConverter) converter; + long dividendLong = this._dividend * that._dividend; + long divisorLong = this._divisor * that._divisor; + double dividendDouble = ((double)this._dividend) * that._dividend; + double divisorDouble = ((double)this._divisor) * that._divisor; + if ((dividendLong != dividendDouble) || + (divisorLong != divisorDouble)) { // Long overflows. + return new MultiplyConverter(dividendDouble / divisorDouble); + } + long gcd = gcd(dividendLong, divisorLong); + return RationalConverter.valueOf(dividendLong / gcd, divisorLong / gcd); + } else if (converter instanceof MultiplyConverter) { + return converter.concatenate(this); + } else { + return super.concatenate(converter); + } + } + + private static UnitConverter valueOf(long dividend, long divisor) { + return (dividend == 1L) && (divisor == 1L) ? UnitConverter.IDENTITY + : new RationalConverter(dividend, divisor); + } + + /** + * Returns the greatest common divisor (Euclid's algorithm). + * + * @param m the first number. + * @param nn the second number. + * @return the greatest common divisor. + */ + private static long gcd(long m, long n) { + if (n == 0L) { + return m; + } else { + return gcd(n, m % n); + } + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/converter/UnitConverter.java b/measure/src/main/java/javax/measure/converter/UnitConverter.java new file mode 100644 index 00000000..03dcd05e --- /dev/null +++ b/measure/src/main/java/javax/measure/converter/UnitConverter.java @@ -0,0 +1,188 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.converter; + +import java.io.Serializable; + +/** + *

This class represents a converter of numeric values.

+ * + *

It is not required for sub-classes to be immutable + * (e.g. currency converter).

+ * + *

Sub-classes must ensure unicity of the {@link #IDENTITY identity} + * converter. In other words, if the result of an operation is equivalent + * to the identity converter, then the unique {@link #IDENTITY} instance + * should be returned.

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + */ +public abstract class UnitConverter implements Serializable { + + /** + * Holds the identity converter (unique). This converter does nothing + * (ONE.convert(x) == x). + */ + public static final UnitConverter IDENTITY = new Identity(); + + /** + * Default constructor. + */ + protected UnitConverter() { + } + + /** + * Returns the inverse of this converter. If x is a valid + * value, then x == inverse().convert(convert(x)) to within + * the accuracy of computer arithmetic. + * + * @return the inverse of this converter. + */ + public abstract UnitConverter inverse(); + + /** + * Converts a double value. + * + * @param x the numeric value to convert. + * @return the converted numeric value. + * @throws ConversionException if an error occurs during conversion. + */ + public abstract double convert(double x) throws ConversionException; + + /** + * Indicates if this converter is linear. A converter is linear if + * convert(u + v) == convert(u) + convert(v) and + * convert(r * u) == r * convert(u). + * For linear converters the following property always hold:[code] + * y1 = c1.convert(x1); + * y2 = c2.convert(x2); + * then y1*y2 = c1.concatenate(c2).convert(x1*x2)[/code] + * + * @return true if this converter is linear; + * false otherwise. + */ + public abstract boolean isLinear(); + + /** + * Indicates whether this converter is considered the same as the + * converter specified. To be considered equal this converter + * concatenated with the one specified must returns the {@link #IDENTITY}. + * + * @param cvtr the converter with which to compare. + * @return true if the specified object is a converter + * considered equals to this converter;false otherwise. + */ + public boolean equals(Object cvtr) { + if (!(cvtr instanceof UnitConverter)) return false; + return this.concatenate(((UnitConverter)cvtr).inverse()) == IDENTITY; + } + + /** + * Returns a hash code value for this converter. Equals object have equal + * hash codes. + * + * @return this converter hash code value. + * @see #equals + */ + public int hashCode() { + return Float.floatToIntBits((float)convert(1.0)); + } + + /** + * Concatenates this converter with another converter. The resulting + * converter is equivalent to first converting by the specified converter, + * and then converting by this converter. + * + *

Note: Implementations must ensure that the {@link #IDENTITY} instance + * is returned if the resulting converter is an identity + * converter.

+ * + * @param converter the other converter. + * @return the concatenation of this converter with the other converter. + */ + public UnitConverter concatenate(UnitConverter converter) { + return (converter == IDENTITY) ? this : new Compound(converter, this); + } + + /** + * This inner class represents the identity converter (singleton). + */ + private static final class Identity extends UnitConverter { + + @Override + public UnitConverter inverse() { + return this; + } + + @Override + public double convert(double x) { + return x; + } + + @Override + public boolean isLinear() { + return true; + } + + @Override + public UnitConverter concatenate(UnitConverter converter) { + return converter; + } + + private static final long serialVersionUID = 1L; + + } + + /** + * This inner class represents a compound converter. + */ + private static final class Compound extends UnitConverter { + + /** + * Holds the first converter. + */ + private final UnitConverter _first; + + /** + * Holds the second converter. + */ + private final UnitConverter _second; + + /** + * Creates a compound converter resulting from the combined + * transformation of the specified converters. + * + * @param first the first converter. + * @param second the second converter. + */ + private Compound(UnitConverter first, UnitConverter second) { + _first = first; + _second = second; + } + + @Override + public UnitConverter inverse() { + return new Compound(_second.inverse(), _first.inverse()); + } + + @Override + public double convert(double x) { + return _second.convert(_first.convert(x)); + } + + @Override + public boolean isLinear() { + return _first.isLinear() && _second.isLinear(); + } + + private static final long serialVersionUID = 1L; + + } +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/converter/doc-files/converter.png b/measure/src/main/java/javax/measure/converter/doc-files/converter.png new file mode 100644 index 0000000000000000000000000000000000000000..4a2fdba45581f2027e0e8e7ea2f260352650812f GIT binary patch literal 110953 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 +

Provides support for unit conversion.

+

UML Diagram

+ UML Diagram + \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/package.html b/measure/src/main/java/javax/measure/package.html new file mode 100644 index 00000000..3579c941 --- /dev/null +++ b/measure/src/main/java/javax/measure/package.html @@ -0,0 +1,77 @@ + +

Provides strongly typed measurements to enforce compile-time + check of parameters consistency and avoid interface errors.

+ +

Let's take the following example:[code] + class Person { + void setWeight(double weight); + }[/code] + Should the weight be in pound, kilogram ??
+ Using measures there is no room for error:[code] + class Person { + void setWeight(Measurable weight); + }[/code] + Not only the interface is cleaner (the weight has to be of mass type); + but also there is no confusion on the measurement unit:[code] + double weightInKg = weight.doubleValue(KILOGRAM); + double weightInLb = weight.doubleValue(POUND);[/code] + Measurable work hand-in-hand with units (also parameterized). + For example, the following would result in compile-time error:[code] + double weightInLiter = weight.doubleValue(LITER); // Compile error, Unit required. + [/code]

+ +

Users may create their own {@link javax.measure.Measurable + Measurable} implementation:[code] + + public class Period implements Measurable { + long nanoseconds; + ... + } + + public class Distance implements Measurable { + double meters; + ... + } + + public class Velocity3D implements Measurable { + double x, y, z; // In meters. + ... + } + + +[/code]

+ +

Users may also combine a definite amount (scalar, vector, collection, etc.) + to a unit and make it a {@link javax.measure.Measure Measure} (and + a {@link javax.measure.Measurable Measurable} instance). For example: + [code] + + // Scalar measurement (numerical). + person.setWeight(Measure.valueOf(180.0, POUND)); // Measure + timer.setPeriod(Measure.valueOf(20, MILLI(SECOND)); // Measure + circuit.setCurrent(Measure.valueOf(Complex.valueOf(2, -3), AMPERE); // (2 - 3i) A + bottle.setPression(Measure.valueOf(Rational.valueOf(20, 100), ATMOSPHERE)); // (20/100) Atm + + // Vector measurement. + abstract class MeasureVector extends Measure { + ... // doubleValue(Unit) returns vector norm. + } + MeasureVector v = MeasureVector.valueOf(METRE_PER_SECOND, 1.0, 2.0, 3.0); + plane.setVelocity(v); + + // Statistical measurement. + class Average extends Measure{ + ... // doubleValue(Unit) returns average value. + } + sea.setTemperature(Average.valueOf(new double[] { 33.4, 44.55, 32.33} , CELCIUS)); + + // Measurement with uncertainty (and additional operations). + public class Amount extends Measurable { + public Amount(double value, double error, Unit unit) { ... } + public Amount plus(Amount that) {...} + public Amount times(Amount that) {...} + ... // doubleValue(Unit) returns estimated value. + } + [/code]

+ + \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Acceleration.java b/measure/src/main/java/javax/measure/quantity/Acceleration.java new file mode 100644 index 00000000..ab58ecf1 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Acceleration.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the rate of change of velocity with respect to + * time. The system unit for this quantity is "m/s²" (meter per square second). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Acceleration extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.METRES_PER_SQUARE_SECOND; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/AmountOfSubstance.java b/measure/src/main/java/javax/measure/quantity/AmountOfSubstance.java new file mode 100644 index 00000000..f95658d9 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/AmountOfSubstance.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the number of elementary entities (molecules, for + * example) of a substance. The system unit for this quantity is "mol" (mole). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface AmountOfSubstance extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.MOLE; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Angle.java b/measure/src/main/java/javax/measure/quantity/Angle.java new file mode 100644 index 00000000..e0463957 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Angle.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the figure formed by two lines diverging from a + * common point. The system unit for this quantity is "rad" (radian). + * This quantity is dimensionless. + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Angle extends Dimensionless { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.RADIAN; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/AngularAcceleration.java b/measure/src/main/java/javax/measure/quantity/AngularAcceleration.java new file mode 100644 index 00000000..f951a265 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/AngularAcceleration.java @@ -0,0 +1,30 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.ProductUnit; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the rate of change of angular velocity with respect + * to time. The system unit for this quantity is "rad/s²" (radian per + * square second). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface AngularAcceleration extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT + = new ProductUnit(SI.RADIAN.divide(SI.SECOND.pow(2))); + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/AngularVelocity.java b/measure/src/main/java/javax/measure/quantity/AngularVelocity.java new file mode 100644 index 00000000..d12e9090 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/AngularVelocity.java @@ -0,0 +1,30 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.ProductUnit; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the rate of change of angular displacement + * with respect to time. The system unit for this quantity is "rad/s" + * (radian per second). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface AngularVelocity extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT + = new ProductUnit(SI.RADIAN.divide(SI.SECOND)); + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Area.java b/measure/src/main/java/javax/measure/quantity/Area.java new file mode 100644 index 00000000..da6998b7 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Area.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the extent of a planar region or of the surface of + * a solid measured in square units. The system unit for this quantity + * is "m²" (square meter). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Area extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.SQUARE_METRE; + +} diff --git a/measure/src/main/java/javax/measure/quantity/CatalyticActivity.java b/measure/src/main/java/javax/measure/quantity/CatalyticActivity.java new file mode 100644 index 00000000..de71c9f4 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/CatalyticActivity.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a catalytic activity. The system unit for this + * quantity is "kat" (katal). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface CatalyticActivity extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.KATAL; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/DataAmount.java b/measure/src/main/java/javax/measure/quantity/DataAmount.java new file mode 100644 index 00000000..5669b0a3 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/DataAmount.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a measure of data amount. + * The system unit for this quantity is "bit". This quantity is dimensionless. + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface DataAmount extends Dimensionless { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.BIT; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/DataRate.java b/measure/src/main/java/javax/measure/quantity/DataRate.java new file mode 100644 index 00000000..357cbac1 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/DataRate.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.ProductUnit; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the speed of data-transmission. + * The system unit for this quantity is "bit/s" (bit per second). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface DataRate extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = new ProductUnit(SI.BIT.divide(SI.SECOND)); + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Dimensionless.java b/measure/src/main/java/javax/measure/quantity/Dimensionless.java new file mode 100644 index 00000000..64b8b59e --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Dimensionless.java @@ -0,0 +1,25 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.Unit; + +/** + * This interface represents a dimensionless quantity. + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Dimensionless extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = Unit.ONE; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Duration.java b/measure/src/main/java/javax/measure/quantity/Duration.java new file mode 100644 index 00000000..d2b3e7f0 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Duration.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a period of existence or persistence. The system + * unit for this quantity is "s" (second). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Duration extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.SECOND; + +} diff --git a/measure/src/main/java/javax/measure/quantity/DynamicViscosity.java b/measure/src/main/java/javax/measure/quantity/DynamicViscosity.java new file mode 100644 index 00000000..614fc96e --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/DynamicViscosity.java @@ -0,0 +1,32 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; + +import javax.measure.unit.ProductUnit; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the dynamic viscosity. + * The system unit for this quantity is "Pa·s" (Pascal-Second). + * + * @author Jean-Marie Dautelle + * @version 3.0, March 2, 2006 + * @see + * Wikipedia: Viscosity + */ +public interface DynamicViscosity extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT + = new ProductUnit(SI.PASCAL.times(SI.SECOND)); + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/ElectricCapacitance.java b/measure/src/main/java/javax/measure/quantity/ElectricCapacitance.java new file mode 100644 index 00000000..9fdba372 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/ElectricCapacitance.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents an electric capacitance. The system unit for this + * quantity is "F" (Farad). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface ElectricCapacitance extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.FARAD; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/ElectricCharge.java b/measure/src/main/java/javax/measure/quantity/ElectricCharge.java new file mode 100644 index 00000000..c530d5b3 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/ElectricCharge.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents an electric charge. The system unit for this + * quantity is "C" (Coulomb). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface ElectricCharge extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.COULOMB; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/ElectricConductance.java b/measure/src/main/java/javax/measure/quantity/ElectricConductance.java new file mode 100644 index 00000000..7b59bce9 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/ElectricConductance.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents an electric conductance. The system unit for this + * quantity "S" (Siemens). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface ElectricConductance extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.SIEMENS; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/ElectricCurrent.java b/measure/src/main/java/javax/measure/quantity/ElectricCurrent.java new file mode 100644 index 00000000..3c43eea4 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/ElectricCurrent.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the amount of electric charge flowing past + * a specified circuit point per unit time. The system unit for + * this quantity is "A" (Ampere). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface ElectricCurrent extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.AMPERE; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/ElectricInductance.java b/measure/src/main/java/javax/measure/quantity/ElectricInductance.java new file mode 100644 index 00000000..1dccb736 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/ElectricInductance.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents an electric inductance. The system unit for this + * quantity is "H" (Henry). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface ElectricInductance extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.HENRY; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/ElectricPotential.java b/measure/src/main/java/javax/measure/quantity/ElectricPotential.java new file mode 100644 index 00000000..f09d9864 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/ElectricPotential.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents an electric potential or electromotive force. + * The system unit for this quantity is "V" (Volt). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface ElectricPotential extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.VOLT; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/ElectricResistance.java b/measure/src/main/java/javax/measure/quantity/ElectricResistance.java new file mode 100644 index 00000000..a468e641 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/ElectricResistance.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents an electric resistance. + * The system unit for this quantity is "Ω" (Ohm). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface ElectricResistance extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.OHM; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Energy.java b/measure/src/main/java/javax/measure/quantity/Energy.java new file mode 100644 index 00000000..23ab2232 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Energy.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the capacity of a physical system to do work. + * The system unit for this quantity "J" (Joule). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Energy extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.JOULE; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Force.java b/measure/src/main/java/javax/measure/quantity/Force.java new file mode 100644 index 00000000..a3f966fc --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Force.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a quantity that tends to produce an acceleration + * of a body in the direction of its application. The system unit for + * this quantity is "N" (Newton). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Force extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.NEWTON; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Frequency.java b/measure/src/main/java/javax/measure/quantity/Frequency.java new file mode 100644 index 00000000..76534615 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Frequency.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the number of times a specified phenomenon occurs + * within a specified interval. The system unit for this quantity is "Hz" + * (Hertz). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Frequency extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.HERTZ; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Illuminance.java b/measure/src/main/java/javax/measure/quantity/Illuminance.java new file mode 100644 index 00000000..86ca46a0 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Illuminance.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents an illuminance. The system unit for this quantity + * is "lx" (lux). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Illuminance extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.LUX; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/KinematicViscosity.java b/measure/src/main/java/javax/measure/quantity/KinematicViscosity.java new file mode 100644 index 00000000..9ff9f7f6 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/KinematicViscosity.java @@ -0,0 +1,31 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.ProductUnit; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the diffusion of momentum. + * The system unit for this quantity is "m²/s". + * + * @author Jean-Marie Dautelle + * @version 3.0, March 2, 2006 + * @see + * Wikipedia: Viscosity + */ +public interface KinematicViscosity extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT + = new ProductUnit(SI.METRE.pow(2).divide(SI.SECOND)); + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Length.java b/measure/src/main/java/javax/measure/quantity/Length.java new file mode 100644 index 00000000..75d70daa --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Length.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the extent of something along its greatest + * dimension or the extent of space between two objects or places. + * The system unit for this quantity is "m" (meter). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Length extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.METRE; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/LuminousFlux.java b/measure/src/main/java/javax/measure/quantity/LuminousFlux.java new file mode 100644 index 00000000..81ab143d --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/LuminousFlux.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a luminous flux. The system unit for this quantity + * is "lm" (lumen). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface LuminousFlux extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.LUMEN; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/LuminousIntensity.java b/measure/src/main/java/javax/measure/quantity/LuminousIntensity.java new file mode 100644 index 00000000..cbe6ee35 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/LuminousIntensity.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the luminous flux density per solid angle as + * measured in a given direction relative to the emitting source. + * The system unit for this quantity is "cd" (candela). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface LuminousIntensity extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.CANDELA; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/MagneticFlux.java b/measure/src/main/java/javax/measure/quantity/MagneticFlux.java new file mode 100644 index 00000000..855ccb4c --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/MagneticFlux.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a magnetic flux. The system unit for this quantity + * is "Wb" (Weber). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface MagneticFlux extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.WEBER; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/MagneticFluxDensity.java b/measure/src/main/java/javax/measure/quantity/MagneticFluxDensity.java new file mode 100644 index 00000000..d23986ce --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/MagneticFluxDensity.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a magnetic flux density. The system unit for this + * quantity is "T" (Tesla). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface MagneticFluxDensity extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.TESLA; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Mass.java b/measure/src/main/java/javax/measure/quantity/Mass.java new file mode 100644 index 00000000..d3e68959 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Mass.java @@ -0,0 +1,29 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the measure of the quantity of matter that a body + * or an object contains. The mass of the body is not dependent on gravity + * and therefore is different from but proportional to its weight. + * The system unit for this quantity is "kg" (kilogram). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Mass extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.KILOGRAM; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/MassFlowRate.java b/measure/src/main/java/javax/measure/quantity/MassFlowRate.java new file mode 100644 index 00000000..5b91682f --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/MassFlowRate.java @@ -0,0 +1,31 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; + +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the movement of mass per time. + * The system unit for this quantity is "kg/s" (kilogram per second). + * + * @author Jean-Marie Dautelle + * @version 3.0, March 2, 2006 + * @see + * Wikipedia: Mass Flow Rate + */ +public interface MassFlowRate extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + @SuppressWarnings("unchecked") + public final static Unit UNIT + = (Unit) SI.KILOGRAM.divide(SI.SECOND); +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Power.java b/measure/src/main/java/javax/measure/quantity/Power.java new file mode 100644 index 00000000..14eef502 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Power.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the rate at which work is done. The system unit + * for this quantity is "W" (Watt). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Power extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.WATT; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Pressure.java b/measure/src/main/java/javax/measure/quantity/Pressure.java new file mode 100644 index 00000000..758438e1 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Pressure.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a force applied uniformly over a surface. + * The system unit for this quantity is "Pa" (Pascal). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Pressure extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.PASCAL; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Quantity.java b/measure/src/main/java/javax/measure/quantity/Quantity.java new file mode 100644 index 00000000..0272c0a9 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Quantity.java @@ -0,0 +1,31 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; + +/** + *

This interface represents any type of quantitative properties or + * attributes of thing. Mass, time, distance, heat, and angular separation + * are among the familiar examples of quantitative properties.

+ * + *

Distinct quantities have usually different physical dimensions; although + * it is not required nor necessary, for example {@link Torque} and + * {@link Energy} have same dimension but are of different nature + * (vector for torque, scalar for energy).

+ * + * @author Jean-Marie Dautelle + * @version 4.0, February 25, 2007 + * @see Wikipedia: Quantity + * @see + * Wikipedia: Dimensional Analysis + */ +public interface Quantity { + + // No method - Tagging interface. + +} diff --git a/measure/src/main/java/javax/measure/quantity/RadiationDoseAbsorbed.java b/measure/src/main/java/javax/measure/quantity/RadiationDoseAbsorbed.java new file mode 100644 index 00000000..21cd2651 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/RadiationDoseAbsorbed.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the amount of energy deposited per unit of + * mass. The system unit for this quantity is "Gy" (Gray). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface RadiationDoseAbsorbed extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.GRAY; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/RadiationDoseEffective.java b/measure/src/main/java/javax/measure/quantity/RadiationDoseEffective.java new file mode 100644 index 00000000..e34ca927 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/RadiationDoseEffective.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the effective (or "equivalent") dose of radiation + * received by a human or some other living organism. The system unit for + * this quantity is "Sv" (Sievert). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface RadiationDoseEffective extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.SIEVERT; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/RadioactiveActivity.java b/measure/src/main/java/javax/measure/quantity/RadioactiveActivity.java new file mode 100644 index 00000000..e5423611 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/RadioactiveActivity.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a radioactive activity. The system unit for + * this quantity is "Bq" (Becquerel). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface RadioactiveActivity extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.BECQUEREL; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/SolidAngle.java b/measure/src/main/java/javax/measure/quantity/SolidAngle.java new file mode 100644 index 00000000..bcdd5af4 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/SolidAngle.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the angle formed by three or more planes intersecting + * at a common point. The system unit for this quantity is "sr" (steradian). + * This quantity is dimensionless. + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface SolidAngle extends Dimensionless { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.STERADIAN; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Temperature.java b/measure/src/main/java/javax/measure/quantity/Temperature.java new file mode 100644 index 00000000..1b4e600d --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Temperature.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This class represents the degree of hotness or coldness of a body or + * an environment. The system unit for this quantity is "K" (Kelvin). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Temperature extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.KELVIN; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Torque.java b/measure/src/main/java/javax/measure/quantity/Torque.java new file mode 100644 index 00000000..d12ac674 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Torque.java @@ -0,0 +1,34 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.ProductUnit; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the moment of a force. The system unit for this + * quantity is "N·m" (Newton-Meter). + * + *

Note: The Newton-metre ("N·m") is also a way of exressing a Joule (unit + * of energy). However, torque is not energy. So, to avoid confusion, we + * will use the units "N·m" for torque and not "J". This distinction occurs + * due to the scalar nature of energy and the vector nature of torque.

+ * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Torque extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = + new ProductUnit(SI.NEWTON.times(SI.METRE)); + +} diff --git a/measure/src/main/java/javax/measure/quantity/Velocity.java b/measure/src/main/java/javax/measure/quantity/Velocity.java new file mode 100644 index 00000000..29fbbea9 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Velocity.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a distance traveled divided by the time of travel. + * The system unit for this quantity is "m/s" (meter per second). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Velocity extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.METRES_PER_SECOND; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/Volume.java b/measure/src/main/java/javax/measure/quantity/Volume.java new file mode 100644 index 00000000..7a76371e --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/Volume.java @@ -0,0 +1,28 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the amount of space occupied by a three-dimensional + * object or region of space, expressed in cubic units. The system unit for + * this quantity is "m³" (cubic meter). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface Volume extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = SI.CUBIC_METRE; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/VolumetricDensity.java b/measure/src/main/java/javax/measure/quantity/VolumetricDensity.java new file mode 100644 index 00000000..72873f68 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/VolumetricDensity.java @@ -0,0 +1,30 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; + +import javax.measure.unit.ProductUnit; +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents a mass per unit volume of a substance under + * specified conditions of pressure and temperature. The system unit for + * this quantity is "kg/m³" (kilogram per cubic meter). + * + * @author Jean-Marie Dautelle + * @version 1.0, January 14, 2006 + */ +public interface VolumetricDensity extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + public final static Unit UNIT = new ProductUnit( + SI.KILOGRAM.divide(SI.METRE.pow(3))); +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/VolumetricFlowRate.java b/measure/src/main/java/javax/measure/quantity/VolumetricFlowRate.java new file mode 100644 index 00000000..2d288072 --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/VolumetricFlowRate.java @@ -0,0 +1,32 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.quantity; + +import javax.measure.unit.SI; +import javax.measure.unit.Unit; + +/** + * This interface represents the volume of fluid passing a point in a system + * per unit of time. The system unit for this quantity is "m³/s" + * (cubic meter per second). + * + * @author Jean-Marie Dautelle + * @version 3.0, March 2, 2006 + * @see + * Wikipedia: Volumetric Flow Rate + */ +public interface VolumetricFlowRate extends Quantity { + + /** + * Holds the SI unit (Système International d'Unités) for this quantity. + */ + @SuppressWarnings("unchecked") + public final static Unit UNIT + = (Unit) SI.METRE.pow(3).divide(SI.SECOND); +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/quantity/package.html b/measure/src/main/java/javax/measure/quantity/package.html new file mode 100644 index 00000000..b6994cac --- /dev/null +++ b/measure/src/main/java/javax/measure/quantity/package.html @@ -0,0 +1,6 @@ + +

Provides quantitative properties or attributes of thing such as + mass, time, distance, heat, and angular separation.

+

Each quantity sub-interface holds a static UNIT field + holding the standard unit for the quantity.

+ \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/AlternateUnit.java b/measure/src/main/java/javax/measure/unit/AlternateUnit.java new file mode 100644 index 00000000..39aca239 --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/AlternateUnit.java @@ -0,0 +1,126 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import javax.measure.converter.UnitConverter; +import javax.measure.quantity.Quantity; + +/** + *

This class represents the units used in expressions to distinguish + * between quantities of a different nature but of the same dimensions.

+ * + *

Instances of this class are created through the + * {@link Unit#alternate(String)} method.

+ * + * @author Jean-Marie Dautelle + * @version 4.2, August 26, 2007 + */ +public final class AlternateUnit extends DerivedUnit { + + /** + * Holds the symbol. + */ + private final String _symbol; + + /** + * Holds the parent unit (a system unit). + */ + private final Unit _parent; + + /** + * Creates an alternate unit for the specified unit identified by the + * specified symbol. + * + * @param symbol the symbol for this alternate unit. + * @param parent the system unit from which this alternate unit is + * derived. + * @throws UnsupportedOperationException if the source is not + * a standard unit. + * @throws IllegalArgumentException if the specified symbol is + * associated to a different unit. + */ + AlternateUnit(String symbol, Unit parent) { + if (!parent.isStandardUnit()) + throw new UnsupportedOperationException(this + + " is not a standard unit"); + _symbol = symbol; + _parent = parent; + // Checks if the symbol is associated to a different unit. + synchronized (Unit.SYMBOL_TO_UNIT) { + Unit unit = Unit.SYMBOL_TO_UNIT.get(symbol); + if (unit == null) { + Unit.SYMBOL_TO_UNIT.put(symbol, this); + return; + } + if (unit instanceof AlternateUnit) { + AlternateUnit existingUnit = (AlternateUnit) unit; + if (symbol.equals(existingUnit._symbol) + && _parent.equals(existingUnit._parent)) + return; // OK, same unit. + } + throw new IllegalArgumentException("Symbol " + symbol + + " is associated to a different unit"); + } + } + + /** + * Returns the symbol for this alternate unit. + * + * @return this alternate unit symbol. + */ + public final String getSymbol() { + return _symbol; + } + + /** + * Returns the parent unit from which this alternate unit is derived + * (a system unit itself). + * + * @return the parent of the alternate unit. + */ + @SuppressWarnings("unchecked") + public final Unit getParent() { + return (Unit) _parent; + } + + @Override + public final Unit getStandardUnit() { + return this; + } + + @Override + public final UnitConverter toStandardUnit() { + return UnitConverter.IDENTITY; + } + + /** + * Indicates if this alternate unit is considered equals to the specified + * object (both are alternate units with equal symbol, equal base units + * and equal converter to base units). + * + * @param that the object to compare for equality. + * @return true if this and that + * are considered equals; falseotherwise. + */ + public boolean equals(Object that) { + if (this == that) + return true; + if (!(that instanceof AlternateUnit)) + return false; + AlternateUnit thatUnit = (AlternateUnit) that; + return this._symbol.equals(thatUnit._symbol); // Symbols are unique. + } + + // Implements abstract method. + public int hashCode() { + return _symbol.hashCode(); + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/BaseUnit.java b/measure/src/main/java/javax/measure/unit/BaseUnit.java new file mode 100644 index 00000000..96403b83 --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/BaseUnit.java @@ -0,0 +1,112 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import javax.measure.converter.UnitConverter; +import javax.measure.quantity.Quantity; + +/** + *

This class represents the building blocks on top of which all others + * units are created. Base units are typically dimensionally independent. + * The actual unit dimension is determinated by the current + * {@link Dimension.Model model}. For example using the {@link + * Dimension.Model#STANDARD standard} model, {@link SI#CANDELA} + * has the dimension of {@link SI#WATT watt}:[code] + * // Standard model. + * BaseUnit METER = new BaseUnit("m"); + * BaseUnit CANDELA = new BaseUnit("cd"); + * System.out.println(METER.getDimension()); + * System.out.println(CANDELA.getDimension()); + * + * > [L] + * > [L]²·[M]/[T]³ + * [/code]

+ *

This class represents the "standard base units" which includes SI base + * units and possibly others user-defined base units. It does not represent + * the base units of any specific {@link SystemOfUnits} (they would have + * be base units accross all possible systems otherwise).

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + * @see + * Wikipedia: SI base unit + */ +public class BaseUnit extends Unit { + + /** + * Holds the symbol. + */ + private final String _symbol; + + /** + * Creates a base unit having the specified symbol. + * + * @param symbol the symbol of this base unit. + * @throws IllegalArgumentException if the specified symbol is + * associated to a different unit. + */ + public BaseUnit(String symbol) { + _symbol = symbol; + // Checks if the symbol is associated to a different unit. + synchronized (Unit.SYMBOL_TO_UNIT) { + Unit unit = Unit.SYMBOL_TO_UNIT.get(symbol); + if (unit == null) { + Unit.SYMBOL_TO_UNIT.put(symbol, this); + return; + } + if (!(unit instanceof BaseUnit)) + throw new IllegalArgumentException("Symbol " + symbol + + " is associated to a different unit"); + } + } + + /** + * Returns the unique symbol for this base unit. + * + * @return this base unit symbol. + */ + public final String getSymbol() { + return _symbol; + } + + /** + * Indicates if this base unit is considered equals to the specified + * object (both are base units with equal symbol, standard dimension and + * standard transform). + * + * @param that the object to compare for equality. + * @return true if this and that + * are considered equals; falseotherwise. + */ + public boolean equals(Object that) { + if (this == that) + return true; + if (!(that instanceof BaseUnit)) + return false; + BaseUnit thatUnit = (BaseUnit) that; + return this._symbol.equals(thatUnit._symbol); + } + + @Override + public int hashCode() { + return _symbol.hashCode(); + } + + @Override + public Unit getStandardUnit() { + return this; + } + + @Override + public UnitConverter toStandardUnit() { + return UnitConverter.IDENTITY; + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/CompoundUnit.java b/measure/src/main/java/javax/measure/unit/CompoundUnit.java new file mode 100644 index 00000000..82bc88dd --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/CompoundUnit.java @@ -0,0 +1,109 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import javax.measure.converter.UnitConverter; +import javax.measure.quantity.Quantity; + +/** + *

This class represents the multi-radix units (such as "hour:min:sec"). + * Instances of this class are created using the {@link Unit#compound + * Unit.compound} method.

+ * + *

Examples of compound units:[code] + * Unit HOUR_MINUTE_SECOND = HOUR.compound(MINUTE).compound(SECOND); + * Unit DEGREE_MINUTE_ANGLE = DEGREE_ANGLE.compound(MINUTE_ANGLE); + * [/code]

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + */ +public final class CompoundUnit extends DerivedUnit { + + /** + * Holds the higher unit. + */ + private final Unit _high; + + /** + * Holds the lower unit. + */ + private final Unit _low; + + /** + * Creates a compound unit from the specified units. + * + * @param high the high unit. + * @param low the lower unit(s) + * @throws IllegalArgumentException if both units do not the same system + * unit. + */ + CompoundUnit(Unit high, Unit low) { + if (!high.getStandardUnit().equals(low.getStandardUnit())) + throw new IllegalArgumentException( + "Both units do not have the same system unit"); + _high = high; + _low = low; + + } + + /** + * Returns the lower unit of this compound unit. + * + * @return the lower unit. + */ + public Unit getLower() { + return _low; + } + + /** + * Returns the higher unit of this compound unit. + * + * @return the higher unit. + */ + public Unit getHigher() { + return _high; + } + + /** + * Indicates if this compound unit is considered equals to the specified + * object (both are compound units with same composing units in the + * same order). + * + * @param that the object to compare for equality. + * @return true if this and that + * are considered equals; falseotherwise. + */ + public boolean equals(Object that) { + if (this == that) + return true; + if (!(that instanceof CompoundUnit)) + return false; + CompoundUnit thatUnit = (CompoundUnit) that; + return this._high.equals(thatUnit._high) + && this._low.equals(thatUnit._low); + } + + @Override + public int hashCode() { + return _high.hashCode() ^ _low.hashCode(); + } + + @Override + public Unit getStandardUnit() { + return _low.getStandardUnit(); + } + + @Override + public UnitConverter toStandardUnit() { + return _low.toStandardUnit(); + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/DerivedUnit.java b/measure/src/main/java/javax/measure/unit/DerivedUnit.java new file mode 100644 index 00000000..5dd1d51f --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/DerivedUnit.java @@ -0,0 +1,27 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import javax.measure.quantity.Quantity; + +/** + *

This class identifies the units created by combining or transforming + * other units.

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + */ +public abstract class DerivedUnit extends Unit { + + /** + * Default constructor. + */ + protected DerivedUnit() { + } +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/Dimension.java b/measure/src/main/java/javax/measure/unit/Dimension.java new file mode 100644 index 00000000..094f22d8 --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/Dimension.java @@ -0,0 +1,259 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import java.io.Serializable; + +import javax.measure.converter.RationalConverter; +import javax.measure.converter.UnitConverter; +import javax.measure.quantity.Dimensionless; + +/** + *

This class represents the dimension of an unit. Two units u1 + * and u2 are {@link Unit#isCompatible compatible} if and + * only if (u1.getDimension().equals(u2.getDimension()))) + *

+ * + *

Instances of this class are immutable.

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + * @see + * Wikipedia: Dimensional Analysis + */ +public final class Dimension implements Serializable { + + /** + * Holds the current physical model. + */ + private static Model CurrentModel = Model.STANDARD; + + /** + * Holds dimensionless. + */ + public static final Dimension NONE = new Dimension(Unit.ONE); + + /** + * Holds length dimension (L). + */ + public static final Dimension LENGTH = new Dimension('L'); + + /** + * Holds mass dimension (M). + */ + public static final Dimension MASS = new Dimension('M'); + + /** + * Holds time dimension (T). + */ + public static final Dimension TIME = new Dimension('T'); + + /** + * Holds electric current dimension (I). + */ + public static final Dimension ELECTRIC_CURRENT = new Dimension('I'); + + /** + * Holds temperature dimension (θ). + */ + public static final Dimension TEMPERATURE = new Dimension('θ'); + + /** + * Holds amount of substance dimension (N). + */ + public static final Dimension AMOUNT_OF_SUBSTANCE = new Dimension('N'); + + /** + * Holds the pseudo unit associated to this dimension. + */ + private final Unit _pseudoUnit; + + /** + * Creates a new dimension associated to the specified symbol. + * + * @param symbol the associated symbol. + */ + public Dimension(char symbol) { + _pseudoUnit = new BaseUnit("[" + symbol + "]"); + } + + /** + * Creates a dimension having the specified pseudo-unit + * (base unit or product of base unit). + * + * @param pseudoUnit the pseudo-unit identifying this dimension. + */ + private Dimension(Unit pseudoUnit) { + _pseudoUnit = pseudoUnit; + } + + /** + * Returns the product of this dimension with the one specified. + * + * @param that the dimension multiplicand. + * @return this * that + */ + public final Dimension times(Dimension that) { + return new Dimension(this._pseudoUnit.times(that._pseudoUnit)); + } + + /** + * Returns the quotient of this dimension with the one specified. + * + * @param that the dimension divisor. + * @return this / that + */ + public final Dimension divide(Dimension that) { + return new Dimension(this._pseudoUnit.divide(that._pseudoUnit)); + } + + /** + * Returns this dimension raised to an exponent. + * + * @param n the exponent. + * @return the result of raising this dimension to the exponent. + */ + public final Dimension pow(int n) { + return new Dimension(this._pseudoUnit.pow(n)); + } + + /** + * Returns the given root of this dimension. + * + * @param n the root's order. + * @return the result of taking the given root of this dimension. + * @throws ArithmeticException if n == 0. + */ + public final Dimension root(int n) { + return new Dimension(this._pseudoUnit.root(n)); + } + + /** + * Returns the representation of this dimension. + * + * @return the representation of this dimension. + */ + public String toString() { + return _pseudoUnit.toString(); + } + + /** + * Indicates if the specified dimension is equals to the one specified. + * + * @param that the object to compare to. + * @return true if this dimension is equals to that dimension; + * false otherwise. + */ + public boolean equals(Object that) { + if (this == that) + return true; + return (that instanceof Dimension) + && _pseudoUnit.equals(((Dimension) that)._pseudoUnit); + } + + /** + * Returns the hash code for this dimension. + * + * @return this dimension hashcode value. + */ + public int hashCode() { + return _pseudoUnit.hashCode(); + } + + /** + * Sets the model used to determinate the units dimensions. + * + * @param model the new model to be used when calculating unit dimensions. + */ + public static void setModel(Model model) { + Dimension.CurrentModel = model; + } + + /** + * Returns the model used to determinate the units dimensions + * (default {@link Model#STANDARD STANDARD}). + * + * @return the model used when calculating unit dimensions. + */ + public static Model getModel() { + return Dimension.CurrentModel; + } + + /** + * This interface represents the mapping between {@link BaseUnit base units} + * and {@link Dimension dimensions}. Custom models may allow + * conversions not possible using the {@link #STANDARD standard} model. + * For example:[code] + * public static void main(String[] args) { + * Dimension.Model relativistic = new Dimension.Model() { + * RationalConverter meterToSecond = new RationalConverter(1, 299792458); // 1/c + * + * public Dimension getDimension(BaseUnit unit) { + * if (unit.equals(SI.METER)) return Dimension.TIME; + * return Dimension.Model.STANDARD.getDimension(unit); + * } + * + * public UnitConverter getTransform(BaseUnit unit) { + * if (unit.equals(SI.METER)) return meterToSecond; + * return Dimension.Model.STANDARD.getTransform(unit); + * }}; + * Dimension.setModel(relativistic); + * + * // Converts 1.0 GeV (energy) to kg (mass). + * System.out.println(Unit.valueOf("GeV").getConverterTo(KILOGRAM).convert(1.0)); + * } + * + * > 1.7826617302520883E-27[/code] + */ + public interface Model { + + /** + * Holds the standard model (default). + */ + public Model STANDARD = new Model() { + + public Dimension getDimension(BaseUnit unit) { + if (unit.equals(SI.METRE)) return Dimension.LENGTH; + if (unit.equals(SI.KILOGRAM)) return Dimension.MASS; + if (unit.equals(SI.KELVIN)) return Dimension.TEMPERATURE; + if (unit.equals(SI.SECOND)) return Dimension.TIME; + if (unit.equals(SI.AMPERE)) return Dimension.ELECTRIC_CURRENT; + if (unit.equals(SI.MOLE)) return Dimension.AMOUNT_OF_SUBSTANCE; + if (unit.equals(SI.CANDELA)) return SI.WATT.getDimension(); + return new Dimension(new BaseUnit("[" + unit.getSymbol() + "]")); + } + + public UnitConverter getTransform(BaseUnit unit) { + if (unit.equals(SI.CANDELA)) return new RationalConverter(1, 683); + return UnitConverter.IDENTITY; + } + }; + + /** + * Returns the dimension of the specified base unit (a dimension + * particular to the base unit if the base unit is not recognized). + * + * @param unit the base unit for which the dimension is returned. + * @return the dimension of the specified unit. + */ + Dimension getDimension(BaseUnit unit); + + /** + * Returns the normalization transform of the specified base unit + * ({@link UnitConverter#IDENTITY IDENTITY} if the base unit is + * not recognized). + * + * @param unit the base unit for which the transform is returned. + * @return the normalization transform. + */ + UnitConverter getTransform(BaseUnit unit); + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/NonSI.java b/measure/src/main/java/javax/measure/unit/NonSI.java new file mode 100644 index 00000000..14fb2f73 --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/NonSI.java @@ -0,0 +1,758 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import javax.measure.converter.LogConverter; +import javax.measure.converter.RationalConverter; +import javax.measure.quantity.*; + +import static javax.measure.unit.SI.*; + +/** + *

This class contains units that are not part of the International + * System of Units, that is, they are outside the SI, but are important + * and widely used.

+ * + * @author Jean-Marie Dautelle + * @version 4.2, August 26, 2007 + */ +public final class NonSI extends SystemOfUnits { + + /** + * Holds collection of NonSI units. + */ + private static HashSet> UNITS = new HashSet>(); + + /** + * Holds the standard gravity constant: 9.80665 m/s² exact. + */ + private static final int STANDARD_GRAVITY_DIVIDEND = 980665; + private static final int STANDARD_GRAVITY_DIVISOR = 100000; + + /** + * Holds the international foot: 0.3048 m exact. + */ + private static final int INTERNATIONAL_FOOT_DIVIDEND = 3048; + private static final int INTERNATIONAL_FOOT_DIViSOR = 10000; + + /** + * Holds the avoirdupois pound: 0.45359237 kg exact + */ + private static final int AVOIRDUPOIS_POUND_DIVIDEND = 45359237; + private static final int AVOIRDUPOIS_POUND_DIVISOR = 100000000; + + /** + * Holds the Avogadro constant. + */ + private static final double AVOGADRO_CONSTANT = 6.02214199e23; // (1/mol). + + /** + * Holds the electric charge of one electron. + */ + private static final double ELEMENTARY_CHARGE = 1.602176462e-19; // (C). + + /** + * Default constructor (prevents this class from being instantiated). + */ + private NonSI() { + } + + /** + * Returns the unique instance of this class. + * + * @return the NonSI instance. + */ + public static NonSI getInstance() { + return INSTANCE; + } + private static final NonSI INSTANCE = new NonSI(); + + /////////////////// + // Dimensionless // + /////////////////// + + /** + * A dimensionless unit equals to 0.01 + * (standard name %). + */ + public static final Unit PERCENT = nonSI(Unit.ONE.divide(100)); + + /** + * A logarithmic unit used to describe a ratio + * (standard name dB). + */ + public static final Unit DECIBEL = nonSI(Unit.ONE + .transform(new LogConverter(10).inverse().concatenate( + new RationalConverter(1, 10)))); + + ///////////////////////// + // Amount of substance // + ///////////////////////// + + /** + * A unit of amount of substance equals to one atom + * (standard name atom). + */ + public static final Unit ATOM = nonSI(MOLE + .divide(AVOGADRO_CONSTANT)); + + //////////// + // Length // + //////////// + + /** + * A unit of length equal to 0.3048 m + * (standard name ft). + */ + public static final Unit FOOT = nonSI(METRE.times(INTERNATIONAL_FOOT_DIVIDEND).divide(INTERNATIONAL_FOOT_DIViSOR)); + + /** + * A unit of length equal to 1200/3937 m + * (standard name foot_survey_us). + * See also: foot + */ + public static final Unit FOOT_SURVEY_US = nonSI(METRE + .times(1200).divide(3937)); + + /** + * A unit of length equal to 0.9144 m + * (standard name yd). + */ + public static final Unit YARD = nonSI(FOOT.times(3)); + + /** + * A unit of length equal to 0.0254 m + * (standard name in). + */ + public static final Unit INCH = nonSI(FOOT.divide(12)); + + /** + * A unit of length equal to 1609.344 m + * (standard name mi). + */ + public static final Unit MILE = nonSI(METRE.times(1609344).divide(1000)); + + /** + * A unit of length equal to 1852.0 m + * (standard name nmi). + */ + public static final Unit NAUTICAL_MILE = nonSI(METRE.times(1852)); + + /** + * A unit of length equal to 1E-10 m + * (standard name Å). + */ + public static final Unit ANGSTROM = nonSI(METRE.divide(10000000000L)); + + /** + * A unit of length equal to the average distance from the center of the + * Earth to the center of the Sun (standard name ua). + */ + public static final Unit ASTRONOMICAL_UNIT = nonSI(METRE + .times(149597870691.0)); + + /** + * A unit of length equal to the distance that light travels in one year + * through a vacuum (standard name ly). + */ + public static final Unit LIGHT_YEAR = nonSI(METRE.times(9.460528405e15)); + + /** + * A unit of length equal to the distance at which a star would appear to + * shift its position by one arcsecond over the course the time + * (about 3 months) in which the Earth moves a distance of + * {@link #ASTRONOMICAL_UNIT} in the direction perpendicular to the + * direction to the star (standard name pc). + */ + public static final Unit PARSEC = nonSI(METRE.times(30856770e9)); + + /** + * A unit of length equal to 0.013837 {@link #INCH} exactly + * (standard name pt). + * @see #PIXEL + */ + public static final Unit POINT = nonSI(INCH.times(13837).divide(1000000)); + + /** + * A unit of length equal to 1/72 {@link #INCH} + * (standard name pixel). + * It is the American point rounded to an even 1/72 inch. + * @see #POINT + */ + public static final Unit PIXEL = nonSI(INCH.divide(72)); + + /** + * Equivalent {@link #PIXEL} + */ + public static final Unit COMPUTER_POINT = PIXEL; + + ////////////// + // Duration // + ////////////// + + /** + * A unit of duration equal to 60 s + * (standard name min). + */ + public static final Unit MINUTE = nonSI(SI.SECOND.times(60)); + + /** + * A unit of duration equal to 60 {@link #MINUTE} + * (standard name h). + */ + public static final Unit HOUR = nonSI(MINUTE.times(60)); + + /** + * A unit of duration equal to 24 {@link #HOUR} + * (standard name d). + */ + public static final Unit DAY = nonSI(HOUR.times(24)); + + /** + * A unit of duration equal to 7 {@link #DAY} + * (standard name week). + */ + public static final Unit WEEK = nonSI(DAY.times(7)); + + /** + * A unit of duration equal to 365 days, 5 hours, 49 minutes, + * and 12 seconds (standard name year). + */ + public static final Unit YEAR = nonSI(SECOND.times(31556952)); + + /** + * A unit of duration equal to one twelfth of a year + * (standard name month). + */ + public static final Unit MONTH = nonSI(YEAR.divide(12)); + + /** + * A unit of duration equal to the time required for a complete rotation of + * the earth in reference to any star or to the vernal equinox at the + * meridian, equal to 23 hours, 56 minutes, 4.09 seconds + * (standard name day_sidereal). + */ + public static final Unit DAY_SIDEREAL = nonSI(SECOND.times(86164.09)); + + /** + * A unit of duration equal to one complete revolution of the + * earth about the sun, relative to the fixed stars, or 365 days, 6 hours, + * 9 minutes, 9.54 seconds (standard name year_sidereal). + */ + public static final Unit YEAR_SIDEREAL = nonSI(SECOND + .times(31558149.54)); + + /** + * A unit of duration equal to 365 {@link #DAY} + * (standard name year_calendar). + */ + public static final Unit YEAR_CALENDAR = nonSI(DAY.times(365)); + + ////////// + // Mass // + ////////// + + /** + * A unit of mass equal to 1/12 the mass of the carbon-12 atom + * (standard name u). + */ + public static final Unit ATOMIC_MASS = nonSI(KILOGRAM + .times(1e-3 / AVOGADRO_CONSTANT)); + + /** + * A unit of mass equal to the mass of the electron + * (standard name me). + */ + public static final Unit ELECTRON_MASS = nonSI(KILOGRAM + .times(9.10938188e-31)); + + /** + * A unit of mass equal to 453.59237 grams (avoirdupois pound, + * standard name lb). + */ + public static final Unit POUND = nonSI(KILOGRAM.times(AVOIRDUPOIS_POUND_DIVIDEND).divide(AVOIRDUPOIS_POUND_DIVISOR)); + + /** + * A unit of mass equal to 1 / 16 {@link #POUND} + * (standard name oz). + */ + public static final Unit OUNCE = nonSI(POUND.divide(16)); + + /** + * A unit of mass equal to 2000 {@link #POUND} (short ton, + * standard name ton_us). + */ + public static final Unit TON_US = nonSI(POUND.times(2000)); + + /** + * A unit of mass equal to 2240 {@link #POUND} (long ton, + * standard name ton_uk). + */ + public static final Unit TON_UK = nonSI(POUND.times(2240)); + + /** + * A unit of mass equal to 1000 kg (metric ton, + * standard name t). + */ + public static final Unit METRIC_TON = nonSI(KILOGRAM.times(1000)); + + ///////////////////// + // Electric charge // + ///////////////////// + + /** + * A unit of electric charge equal to the charge on one electron + * (standard name e). + */ + public static final Unit E = nonSI(COULOMB + .times(ELEMENTARY_CHARGE)); + + /** + * A unit of electric charge equal to equal to the product of Avogadro's + * number (see {@link SI#MOLE}) and the charge (1 e) on a single electron + * (standard name Fd). + */ + public static final Unit FARADAY = nonSI(COULOMB + .times(ELEMENTARY_CHARGE * AVOGADRO_CONSTANT)); // e/mol + + /** + * A unit of electric charge which exerts a force of one dyne on an equal + * charge at a distance of one centimeter + * (standard name Fr). + */ + public static final Unit FRANKLIN = nonSI(COULOMB + .times(3.3356e-10)); + + ///////////////// + // Temperature // + ///////////////// + + /** + * A unit of temperature equal to 5/9 °K + * (standard name °R). + */ + public static final Unit RANKINE = nonSI(KELVIN.times(5).divide(9)); + + /** + * A unit of temperature equal to degree Rankine minus + * 459.67 °R (standard name °F). + * @see #RANKINE + */ + public static final Unit FAHRENHEIT = nonSI(RANKINE.plus(459.67)); + + /////////// + // Angle // + /////////// + + /** + * A unit of angle equal to a full circle or 2π + * {@link SI#RADIAN} (standard name rev). + */ + public static final Unit REVOLUTION = nonSI(RADIAN.times(2.0 * Math.PI)); + + /** + * A unit of angle equal to 1/360 {@link #REVOLUTION} + * (standard name °). + */ + public static final Unit DEGREE_ANGLE = nonSI(REVOLUTION.divide(360)); + + /** + * A unit of angle equal to 1/60 {@link #DEGREE_ANGLE} + * (standard name ). + */ + public static final Unit MINUTE_ANGLE = nonSI(DEGREE_ANGLE.divide(60)); + + /** + * A unit of angle equal to 1/60 {@link #MINUTE_ANGLE} + * (standard name "). + */ + public static final Unit SECOND_ANGLE = nonSI(MINUTE_ANGLE.divide(60)); + + /** + * A unit of angle equal to 0.01 {@link SI#RADIAN} + * (standard name centiradian). + */ + public static final Unit CENTIRADIAN = nonSI(RADIAN.divide(100)); + + /** + * A unit of angle measure equal to 1/400 {@link #REVOLUTION} + * (standard name grade). + */ + public static final Unit GRADE = nonSI(REVOLUTION.divide(400)); + + ////////////// + // Velocity // + ////////////// + + /** + * A unit of velocity expressing the number of international {@link + * #MILE miles} per {@link #HOUR hour} (abbreviation mph). + */ + public static final Unit MILES_PER_HOUR + = nonSI(NonSI.MILE.divide(NonSI.HOUR)).asType(Velocity.class); + + /** + * A unit of velocity expressing the number of {@link SI#KILOMETRE} per + * {@link #HOUR hour}. + */ + public static final Unit KILOMETRES_PER_HOUR + = nonSI(SI.KILOMETRE.divide(NonSI.HOUR)).asType(Velocity.class); + + /** + * Equivalent to {@link #KILOMETRES_PER_HOUR}. + */ + public static final Unit KILOMETERS_PER_HOUR = KILOMETRES_PER_HOUR; + + /** + * A unit of velocity expressing the number of {@link #NAUTICAL_MILE + * nautical miles} per {@link #HOUR hour} (abbreviation kn). + */ + public static final Unit KNOT + = nonSI(NonSI.NAUTICAL_MILE.divide(NonSI.HOUR)).asType(Velocity.class); + + /** + * A unit of velocity to express the speed of an aircraft relative to + * the speed of sound (standard name Mach). + */ + public static final Unit MACH = nonSI(METRES_PER_SECOND.times(331.6)); + + /** + * A unit of velocity relative to the speed of light + * (standard name c). + */ + public static final Unit C = nonSI(METRES_PER_SECOND.times(299792458)); + + ////////////////// + // Acceleration // + ////////////////// + + /** + * A unit of acceleration equal to the gravity at the earth's surface + * (standard name grav). + */ + public static final Unit G = nonSI(METRES_PER_SQUARE_SECOND + .times(STANDARD_GRAVITY_DIVIDEND).divide(STANDARD_GRAVITY_DIVISOR)); + + ////////// + // Area // + ////////// + + /** + * A unit of area equal to 100 m² + * (standard name a). + */ + public static final Unit ARE = nonSI(SQUARE_METRE.times(100)); + + /** + * A unit of area equal to 100 {@link #ARE} + * (standard name ha). + */ + public static final Unit HECTARE = nonSI(ARE.times(100)); // Exact. + + ///////////////// + // Data Amount // + ///////////////// + + /** + * A unit of data amount equal to 8 {@link SI#BIT} + * (BinarY TErm, standard name byte). + */ + public static final Unit BYTE = nonSI(BIT.times(8)); + + /** + * Equivalent {@link #BYTE} + */ + public static final Unit OCTET = BYTE; + + + ////////////////////// + // Electric current // + ////////////////////// + + /** + * A unit of electric charge equal to the centimeter-gram-second + * electromagnetic unit of magnetomotive force, equal to 10/4 + * πampere-turn (standard name Gi). + */ + public static final Unit GILBERT = nonSI(SI.AMPERE + .times(10.0 / (4.0 * Math.PI))); + + //////////// + // Energy // + //////////// + + /** + * A unit of energy equal to 1E-7 J + * (standard name erg). + */ + public static final Unit ERG = nonSI(JOULE.divide(10000000)); + + /** + * A unit of energy equal to one electron-volt (standard name + * eV, also recognized keV, MeV, GeV). + */ + public static final Unit ELECTRON_VOLT = nonSI(JOULE + .times(ELEMENTARY_CHARGE)); + + ///////////////// + // Illuminance // + ///////////////// + + /** + * A unit of illuminance equal to 1E4 Lx + * (standard name La). + */ + public static final Unit LAMBERT = nonSI(LUX.times(10000)); + + /////////////////// + // Magnetic Flux // + /////////////////// + + /** + * A unit of magnetic flux equal 1E-8 Wb + * (standard name Mx). + */ + public static final Unit MAXWELL = nonSI(WEBER.divide(100000000)); + + /////////////////////////// + // Magnetic Flux Density // + /////////////////////////// + + /** + * A unit of magnetic flux density equal 1000 A/m + * (standard name G). + */ + public static final Unit GAUSS = nonSI(TESLA.divide(10000)); + + /////////// + // Force // + /////////// + + /** + * A unit of force equal to 1E-5 N + * (standard name dyn). + */ + public static final Unit DYNE = nonSI(NEWTON.divide(100000)); + + /** + * A unit of force equal to 9.80665 N + * (standard name kgf). + */ + public static final Unit KILOGRAM_FORCE = nonSI(NEWTON + .times(STANDARD_GRAVITY_DIVIDEND).divide(STANDARD_GRAVITY_DIVISOR)); + + /** + * A unit of force equal to {@link #POUND}·{@link #G} + * (standard name lbf). + */ + public static final Unit POUND_FORCE = nonSI(NEWTON + .times(1L * AVOIRDUPOIS_POUND_DIVIDEND * STANDARD_GRAVITY_DIVIDEND).divide( + 1L * AVOIRDUPOIS_POUND_DIVISOR * STANDARD_GRAVITY_DIVISOR)); + + /////////// + // Power // + /////////// + + /** + * A unit of power equal to the power required to raise a mass of 75 + * kilograms at a velocity of 1 meter per second (metric, + * standard name hp). + */ + public static final Unit HORSEPOWER = nonSI(WATT.times(735.499)); + + ////////////// + // Pressure // + ////////////// + + /** + * A unit of pressure equal to the average pressure of the Earth's + * atmosphere at sea level (standard name atm). + */ + public static final Unit ATMOSPHERE = nonSI(PASCAL.times(101325)); + + /** + * A unit of pressure equal to 100 kPa + * (standard name bar). + */ + public static final Unit BAR = nonSI(PASCAL.times(100000)); + + /** + * A unit of pressure equal to the pressure exerted at the Earth's + * surface by a column of mercury 1 millimeter high + * (standard name mmHg). + */ + public static final Unit MILLIMETER_OF_MERCURY =nonSI(PASCAL + .times(133.322)); + + /** + * A unit of pressure equal to the pressure exerted at the Earth's + * surface by a column of mercury 1 inch high + * (standard name inHg). + */ + public static final Unit INCH_OF_MERCURY = nonSI(PASCAL.times(3386.388)); + + ///////////////////////////// + // Radiation dose absorbed // + ///////////////////////////// + + /** + * A unit of radiation dose absorbed equal to a dose of 0.01 joule of + * energy per kilogram of mass (J/kg) (standard name rd). + */ + public static final Unit RAD = nonSI(GRAY.divide(100)); + + /** + * A unit of radiation dose effective equal to 0.01 Sv + * (standard name rem). + */ + public static final Unit REM = nonSI(SIEVERT.divide(100)); + + ////////////////////////// + // Radioactive activity // + ////////////////////////// + + /** + * A unit of radioctive activity equal to the activity of a gram of radium + * (standard name Ci). + */ + public static final Unit CURIE = nonSI(BECQUEREL + .times(37000000000L)); + + /** + * A unit of radioctive activity equal to 1 million radioactive + * disintegrations per second (standard name Rd). + */ + public static final Unit RUTHERFORD = nonSI(SI.BECQUEREL + .times(1000000)); + + ///////////////// + // Solid angle // + ///////////////// + + /** + * A unit of solid angle equal to 4 π steradians + * (standard name sphere). + */ + public static final Unit SPHERE = nonSI(STERADIAN + .times(4.0 * Math.PI)); + + //////////// + // Volume // + //////////// + + /** + * A unit of volume equal to one cubic decimeter (default label + * L, also recognized µL, mL, cL, dL). + */ + public static final Unit LITRE = nonSI(CUBIC_METRE.divide(1000)); + + /** + * Equivalent to {@link #LITRE} (American spelling). + */ + public static final Unit LITER = LITRE; + + /** + * A unit of volume equal to one cubic inch (in³). + */ + public static final Unit CUBIC_INCH = nonSI( + INCH.pow(3).asType(Volume.class)); + + /** + * A unit of volume equal to one US gallon, Liquid Unit. The U.S. liquid + * gallon is based on the Queen Anne or Wine gallon occupying 231 cubic + * inches (standard name gal). + */ + public static final Unit GALLON_LIQUID_US = nonSI(CUBIC_INCH.times(231)); + + /** + * A unit of volume equal to 1 / 128 {@link #GALLON_LIQUID_US} + * (standard name oz_fl). + */ + public static final Unit OUNCE_LIQUID_US = nonSI(GALLON_LIQUID_US + .divide(128)); + + /** + * A unit of volume equal to one US dry gallon. + * (standard name gallon_dry_us). + */ + public static final Unit GALLON_DRY_US = nonSI(CUBIC_INCH.times(2688025).divide(10000)); + + /** + * A unit of volume equal to 4.546 09 {@link #LITRE} + * (standard name gal_uk). + */ + public static final Unit GALLON_UK = nonSI(LITRE.times(454609).divide(100000)); + + /** + * A unit of volume equal to 1 / 160 {@link #GALLON_UK} + * (standard name oz_fl_uk). + */ + public static final Unit OUNCE_LIQUID_UK = nonSI(GALLON_UK.divide(160)); + + /////////////// + // Viscosity // + /////////////// + + /** + * A unit of dynamic viscosity equal to 1 g/(cm·s) + * (cgs unit). + */ + @SuppressWarnings("unchecked") + public static final Unit + POISE = nonSI((Unit) GRAM.divide(CENTI(METRE).times(SECOND))); + + /** + * A unit of kinematic viscosity equal to 1 cm²/s + * (cgs unit). + */ + @SuppressWarnings("unchecked") + public static final Unit + STOKE = nonSI((Unit) CENTI(METRE).pow(2).divide(SECOND)); + + + //////////// + // Others // + //////////// + + /** + * A unit used to measure the ionizing ability of radiation + * (standard name Roentgen). + */ + public static final Unit ROENTGEN = nonSI(COULOMB.divide(KILOGRAM).times(2.58e-4)); + + + ///////////////////// + // Collection View // + ///////////////////// + + /** + * Returns a read only view over the units defined in this class. + * + * @return the collection of NonSI units. + */ + public Set> getUnits() { + return Collections.unmodifiableSet(UNITS); + } + + /** + * Adds a new unit to the collection. + * + * @param unit the unit being added. + * @return unit. + */ + private static > U nonSI(U unit) { + UNITS.add(unit); + return unit; + } + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/ProductUnit.java b/measure/src/main/java/javax/measure/unit/ProductUnit.java new file mode 100644 index 00000000..5f673085 --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/ProductUnit.java @@ -0,0 +1,471 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import java.io.Serializable; + +import javax.measure.converter.ConversionException; +import javax.measure.converter.UnitConverter; +import javax.measure.quantity.Quantity; + +/** + *

This class represents units formed by the product of rational powers of + * existing units.

+ * + *

This class maintains the canonical form of this product (simplest + * form after factorization). For example: + * METER.pow(2).divide(METER) returns + * METER.

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + * @see Unit#times(Unit) + * @see Unit#divide(Unit) + * @see Unit#pow(int) + * @see Unit#root(int) + */ +public final class ProductUnit extends DerivedUnit { + + /** + * Holds the units composing this product unit. + */ + private final Element[] _elements; + + /** + * Holds the hashcode (optimization). + */ + private int _hashCode; + + /** + * Default constructor (used solely to create ONE instance). + */ + ProductUnit() { + _elements = new Element[0]; + } + + /** + * Copy constructor (allows for parameterization of product units). + * + * @param productUnit the product unit source. + * @throws ClassCastException if the specified unit is not + * a product unit. + */ + public ProductUnit(Unit productUnit) { + _elements = ((ProductUnit)productUnit)._elements; + } + + /** + * Product unit constructor. + * + * @param elements the product elements. + */ + private ProductUnit(Element[] elements) { + _elements = elements; + } + + /** + * Returns the unit defined from the product of the specifed elements. + * + * @param leftElems left multiplicand elements. + * @param rightElems right multiplicand elements. + * @return the corresponding unit. + */ + @SuppressWarnings("unchecked") + private static Unit getInstance(Element[] leftElems, + Element[] rightElems) { + + // Merges left elements with right elements. + Element[] result = new Element[leftElems.length + rightElems.length]; + int resultIndex = 0; + for (int i = 0; i < leftElems.length; i++) { + Unit unit = leftElems[i]._unit; + int p1 = leftElems[i]._pow; + int r1 = leftElems[i]._root; + int p2 = 0; + int r2 = 1; + for (int j = 0; j < rightElems.length; j++) { + if (unit.equals(rightElems[j]._unit)) { + p2 = rightElems[j]._pow; + r2 = rightElems[j]._root; + break; // No duplicate. + } + } + int pow = (p1 * r2) + (p2 * r1); + int root = r1 * r2; + if (pow != 0) { + int gcd = gcd(Math.abs(pow), root); + result[resultIndex++] = new Element(unit, pow / gcd, root / gcd); + } + } + + // Appends remaining right elements not merged. + for (int i = 0; i < rightElems.length; i++) { + Unit unit = rightElems[i]._unit; + boolean hasBeenMerged = false; + for (int j = 0; j < leftElems.length; j++) { + if (unit.equals(leftElems[j]._unit)) { + hasBeenMerged = true; + break; + } + } + if (!hasBeenMerged) { + result[resultIndex++] = rightElems[i]; + } + } + + // Returns or creates instance. + if (resultIndex == 0) { + return ONE; + } else if ((resultIndex == 1) && (result[0]._pow == result[0]._root)) { + return result[0]._unit; + } else { + Element[] elems = new Element[resultIndex]; + for (int i = 0; i < resultIndex; i++) { + elems[i] = result[i]; + } + return new ProductUnit(elems); + } + } + + /** + * Returns the product of the specified units. + * + * @param left the left unit operand. + * @param right the right unit operand. + * @return left * right + */ + static Unit getProductInstance(Unit left, Unit right) { + Element[] leftElems; + if (left instanceof ProductUnit) { + leftElems = ((ProductUnit) left)._elements; + } else { + leftElems = new Element[] { new Element(left, 1, 1) }; + } + Element[] rightElems; + if (right instanceof ProductUnit) { + rightElems = ((ProductUnit) right)._elements; + } else { + rightElems = new Element[] { new Element(right, 1, 1) }; + } + return getInstance(leftElems, rightElems); + } + + /** + * Returns the quotient of the specified units. + * + * @param left the dividend unit operand. + * @param right the divisor unit operand. + * @return dividend / divisor + */ + static Unit getQuotientInstance(Unit left, Unit right) { + Element[] leftElems; + if (left instanceof ProductUnit) { + leftElems = ((ProductUnit) left)._elements; + } else { + leftElems = new Element[] { new Element(left, 1, 1) }; + } + Element[] rightElems; + if (right instanceof ProductUnit) { + Element[] elems = ((ProductUnit) right)._elements; + rightElems = new Element[elems.length]; + for (int i = 0; i < elems.length; i++) { + rightElems[i] = new Element(elems[i]._unit, -elems[i]._pow, + elems[i]._root); + } + } else { + rightElems = new Element[] { new Element(right, -1, 1) }; + } + return getInstance(leftElems, rightElems); + } + + /** + * Returns the product unit corresponding to the specified root of + * the specified unit. + * + * @param unit the unit. + * @param n the root's order (n > 0). + * @return unit^(1/nn) + * @throws ArithmeticException if n == 0. + */ + static Unit getRootInstance(Unit unit, int n) { + Element[] unitElems; + if (unit instanceof ProductUnit) { + Element[] elems = ((ProductUnit) unit)._elements; + unitElems = new Element[elems.length]; + for (int i = 0; i < elems.length; i++) { + int gcd = gcd(Math.abs(elems[i]._pow), elems[i]._root * n); + unitElems[i] = new Element(elems[i]._unit, elems[i]._pow / gcd, + elems[i]._root * n / gcd); + } + } else { + unitElems = new Element[] { new Element(unit, 1, n) }; + } + return getInstance(unitElems, new Element[0]); + } + + /** + * Returns the product unit corresponding to this unit raised to + * the specified exponent. + * + * @param unit the unit. + * @param nn the exponent (nn > 0). + * @return unit^n + */ + static Unit getPowInstance(Unit unit, int n) { + Element[] unitElems; + if (unit instanceof ProductUnit) { + Element[] elems = ((ProductUnit) unit)._elements; + unitElems = new Element[elems.length]; + for (int i = 0; i < elems.length; i++) { + int gcd = gcd(Math.abs(elems[i]._pow * n), elems[i]._root); + unitElems[i] = new Element(elems[i]._unit, elems[i]._pow * n + / gcd, elems[i]._root / gcd); + } + } else { + unitElems = new Element[] { new Element(unit, n, 1) }; + } + return getInstance(unitElems, new Element[0]); + } + + /** + * Returns the number of units in this product. + * + * @return the number of units being multiplied. + */ + public int getUnitCount() { + return _elements.length; + } + + /** + * Returns the unit at the specified position. + * + * @param index the index of the unit to return. + * @return the unit at the specified position. + * @throws IndexOutOfBoundsException if index is out of range + * (index < 0 || index >= size()). + */ + @SuppressWarnings("unchecked") + public Unit getUnit(int index) { + return _elements[index].getUnit(); + } + + /** + * Returns the power exponent of the unit at the specified position. + * + * @param index the index of the unit to return. + * @return the unit power exponent at the specified position. + * @throws IndexOutOfBoundsException if index is out of range + * (index < 0 || index >= size()). + */ + public int getUnitPow(int index) { + return _elements[index].getPow(); + } + + /** + * Returns the root exponent of the unit at the specified position. + * + * @param index the index of the unit to return. + * @return the unit root exponent at the specified position. + * @throws IndexOutOfBoundsException if index is out of range + * (index < 0 || index >= size()). + */ + public int getUnitRoot(int index) { + return _elements[index].getRoot(); + } + + /** + * Indicates if this product unit is considered equals to the specified + * object. + * + * @param that the object to compare for equality. + * @return true if this and that + * are considered equals; falseotherwise. + */ + public boolean equals(Object that) { + if (this == that) + return true; + if (that instanceof ProductUnit) { + // Two products are equals if they have the same elements + // regardless of the elements' order. + Element[] elems = ((ProductUnit) that)._elements; + if (_elements.length == elems.length) { + for (int i = 0; i < _elements.length; i++) { + boolean unitFound = false; + for (int j = 0; j < elems.length; j++) { + if (_elements[i]._unit.equals(elems[j]._unit)) { + if ((_elements[i]._pow != elems[j]._pow) + || (_elements[i]._root != elems[j]._root)) { + return false; + } else { + unitFound = true; + break; + } + } + } + if (!unitFound) { + return false; + } + } + return true; + } + } + return false; + } + + @Override + // Implements abstract method. + public int hashCode() { + if (_hashCode != 0) + return _hashCode; + int code = 0; + for (int i = 0; i < _elements.length; i++) { + code += _elements[i]._unit.hashCode() + * (_elements[i]._pow * 3 - _elements[i]._root * 2); + } + _hashCode = code; + return code; + } + + @Override + @SuppressWarnings("unchecked") + public Unit getStandardUnit() { + if (hasOnlyStandardUnit()) + return this; + Unit systemUnit = ONE; + for (int i = 0; i < _elements.length; i++) { + Unit unit = _elements[i]._unit.getStandardUnit(); + unit = unit.pow(_elements[i]._pow); + unit = unit.root(_elements[i]._root); + systemUnit = systemUnit.times(unit); + } + return systemUnit; + } + + @Override + public UnitConverter toStandardUnit() { + if (hasOnlyStandardUnit()) + return UnitConverter.IDENTITY; + UnitConverter converter = UnitConverter.IDENTITY; + for (int i = 0; i < _elements.length; i++) { + UnitConverter cvtr = _elements[i]._unit.toStandardUnit(); + if (!cvtr.isLinear()) + throw new ConversionException(_elements[i]._unit + + " is non-linear, cannot convert"); + if (_elements[i]._root != 1) + throw new ConversionException(_elements[i]._unit + + " holds a base unit with fractional exponent"); + int pow = _elements[i]._pow; + if (pow < 0) { // Negative power. + pow = -pow; + cvtr = cvtr.inverse(); + } + for (int j = 0; j < pow; j++) { + converter = converter.concatenate(cvtr); + } + } + return converter; + } + + /** + * Indicates if this product unit is a standard unit. + * + * @return true if all elements are standard units; + * false otherwise. + */ + private boolean hasOnlyStandardUnit() { + for (int i = 0; i < _elements.length; i++) { + Unit u = _elements[i]._unit; + if (!u.isStandardUnit()) + return false; + } + return true; + } + + /** + * Returns the greatest common divisor (Euclid's algorithm). + * + * @param m the first number. + * @param nn the second number. + * @return the greatest common divisor. + */ + private static int gcd(int m, int n) { + if (n == 0) { + return m; + } else { + return gcd(n, m % n); + } + } + + /** + * Inner product element represents a rational power of a single unit. + */ + private final static class Element implements Serializable { + + /** + * Holds the single unit. + */ + private final Unit _unit; + + /** + * Holds the power exponent. + */ + private final int _pow; + + /** + * Holds the root exponent. + */ + private final int _root; + + /** + * Structural constructor. + * + * @param unit the unit. + * @param pow the power exponent. + * @param root the root exponent. + */ + private Element(Unit unit, int pow, int root) { + _unit = unit; + _pow = pow; + _root = root; + } + + /** + * Returns this element's unit. + * + * @return the single unit. + */ + public Unit getUnit() { + return _unit; + } + + /** + * Returns the power exponent. The power exponent can be negative + * but is always different from zero. + * + * @return the power exponent of the single unit. + */ + public int getPow() { + return _pow; + } + + /** + * Returns the root exponent. The root exponent is always greater + * than zero. + * + * @return the root exponent of the single unit. + */ + public int getRoot() { + return _root; + } + + private static final long serialVersionUID = 1L; + } + + private static final long serialVersionUID = 1L; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/SI.java b/measure/src/main/java/javax/measure/unit/SI.java new file mode 100644 index 00000000..b856035c --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/SI.java @@ -0,0 +1,719 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; + +import javax.measure.converter.MultiplyConverter; +import javax.measure.converter.RationalConverter; +import javax.measure.quantity.*; + +/** + *

This class contains SI (Système International d'Unités) base units, + * and derived units.

+ * + *

It also defines the 20 SI prefixes used to form decimal multiples and + * submultiples of SI units. For example:[code] + * import static org.jscience.physics.units.SI.*; // Static import. + * ... + * Unit HECTO_PASCAL = HECTO(PASCAL); + * Unit KILO_METER = KILO(METER); + * [/code]

+ * + * @author Jean-Marie Dautelle + * @version 4.2, August 26, 2006 + * @see Wikipedia: SI + * @see Wikipedia: SI prefix + */ +public final class SI extends SystemOfUnits { + + /** + * Holds collection of SI units. + */ + private static HashSet> UNITS = new HashSet>(); + + /** + * Default constructor (prevents this class from being instantiated). + */ + private SI() { + } + + + /** + * Returns the unique instance of this class. + * + * @return the SI instance. + */ + public static SI getInstance() { + return INSTANCE; + } + private static final SI INSTANCE = new SI(); + + //////////////// + // BASE UNITS // + //////////////// + + /** + * The base unit for electric current quantities (A). + * The Ampere is that constant current which, if maintained in two straight + * parallel conductors of infinite length, of negligible circular + * cross-section, and placed 1 metre apart in vacuum, would produce between + * these conductors a force equal to 2 × 10-7 newton per metre of length. + * It is named after the French physicist Andre Ampere (1775-1836). + */ + public static final BaseUnit AMPERE = si(new BaseUnit( + "A")); + + /** + * The base unit for luminous intensity quantities (cd). + * The candela is the luminous intensity, in a given direction, + * of a source that emits monochromatic radiation of frequency + * 540 × 1012 hertz and that has a radiant intensity in that + * direction of 1/683 watt per steradian + * @see + * Wikipedia: Candela + */ + public static final BaseUnit CANDELA = si(new BaseUnit( + "cd")); + + /** + * The base unit for thermodynamic temperature quantities (K). + * The kelvin is the 1/273.16th of the thermodynamic temperature of the + * triple point of water. It is named after the Scottish mathematician and + * physicist William Thomson 1st Lord Kelvin (1824-1907) + */ + public static final BaseUnit KELVIN = si(new BaseUnit( + "K")); + + /** + * The base unit for mass quantities (kg). + * It is the only SI unit with a prefix as part of its name and symbol. + * The kilogram is equal to the mass of an international prototype in the + * form of a platinum-iridium cylinder kept at Sevres in France. + * @see #GRAM + */ + public static final BaseUnit KILOGRAM = si(new BaseUnit("kg")); + + /** + * The base unit for length quantities (m). + * One meter was redefined in 1983 as the distance traveled by light in + * a vacuum in 1/299,792,458 of a second. + */ + public static final BaseUnit METRE = si(new BaseUnit("m")); + + /** + * Equivalent to {@link #METRE} (American spelling). + */ + public static final Unit METER = METRE; + + /** + * The base unit for amount of substance quantities (mol). + * The mole is the amount of substance of a system which contains as many + * elementary entities as there are atoms in 0.012 kilogram of carbon 12. + */ + public static final BaseUnit MOLE = si(new BaseUnit( + "mol")); + + /** + * The base unit for duration quantities (s). + * It is defined as the duration of 9,192,631,770 cycles of radiation + * corresponding to the transition between two hyperfine levels of + * the ground state of cesium (1967 Standard). + */ + public static final BaseUnit SECOND = si(new BaseUnit( + "s")); + + //////////////////////////////// + // SI DERIVED ALTERNATE UNITS // + //////////////////////////////// + + /** + * The derived unit for mass quantities (g). + * The base unit for mass quantity is {@link #KILOGRAM}. + */ + public static final Unit GRAM = KILOGRAM.divide(1000); + + /** + * The unit for plane angle quantities (rad). + * One radian is the angle between two radii of a circle such that the + * length of the arc between them is equal to the radius. + */ + public static final AlternateUnit RADIAN = si(new AlternateUnit( + "rad", Unit.ONE)); + + /** + * The unit for solid angle quantities (sr). + * One steradian is the solid angle subtended at the center of a sphere by + * an area on the surface of the sphere that is equal to the radius squared. + * The total solid angle of a sphere is 4*Pi steradians. + */ + public static final AlternateUnit STERADIAN = si(new AlternateUnit( + "sr", Unit.ONE)); + + /** + * The unit for binary information (bit). + */ + public static final AlternateUnit BIT = si(new AlternateUnit( + "bit", Unit.ONE)); + + /** + * The derived unit for frequency (Hz). + * A unit of frequency equal to one cycle per second. + * After Heinrich Rudolf Hertz (1857-1894), German physicist who was the + * first to produce radio waves artificially. + */ + public static final AlternateUnit HERTZ = si(new AlternateUnit( + "Hz", Unit.ONE.divide(SECOND))); + + /** + * The derived unit for force (N). + * One newton is the force required to give a mass of 1 kilogram an Force + * of 1 metre per second per second. It is named after the English + * mathematician and physicist Sir Isaac Newton (1642-1727). + */ + public static final AlternateUnit NEWTON = si(new AlternateUnit( + "N", METRE.times(KILOGRAM).divide(SECOND.pow(2)))); + + /** + * The derived unit for pressure, stress (Pa). + * One pascal is equal to one newton per square meter. It is named after + * the French philosopher and mathematician Blaise Pascal (1623-1662). + */ + public static final AlternateUnit PASCAL = si(new AlternateUnit( + "Pa", NEWTON.divide(METRE.pow(2)))); + + /** + * The derived unit for energy, work, quantity of heat (J). + * One joule is the amount of work done when an applied force of 1 newton + * moves through a distance of 1 metre in the direction of the force. + * It is named after the English physicist James Prescott Joule (1818-1889). + */ + public static final AlternateUnit JOULE = si(new AlternateUnit( + "J", NEWTON.times(METRE))); + + /** + * The derived unit for power, radiant, flux (W). + * One watt is equal to one joule per second. It is named after the British + * scientist James Watt (1736-1819). + */ + public static final AlternateUnit WATT = si(new AlternateUnit( + "W", JOULE.divide(SECOND))); + + /** + * The derived unit for electric charge, quantity of electricity + * (C). + * One Coulomb is equal to the quantity of charge transferred in one second + * by a steady current of one ampere. It is named after the French physicist + * Charles Augustin de Coulomb (1736-1806). + */ + public static final AlternateUnit COULOMB = si(new AlternateUnit( + "C", SECOND.times(AMPERE))); + + /** + * The derived unit for electric potential difference, electromotive force + * (V). + * One Volt is equal to the difference of electric potential between two + * points on a conducting wire carrying a constant current of one ampere + * when the power dissipated between the points is one watt. It is named + * after the Italian physicist Count Alessandro Volta (1745-1827). + */ + public static final AlternateUnit VOLT = si(new AlternateUnit( + "V", WATT.divide(AMPERE))); + + /** + * The derived unit for capacitance (F). + * One Farad is equal to the capacitance of a capacitor having an equal + * and opposite charge of 1 coulomb on each plate and a potential difference + * of 1 volt between the plates. It is named after the British physicist + * and chemist Michael Faraday (1791-1867). + */ + public static final AlternateUnit FARAD = si(new AlternateUnit( + "F", COULOMB.divide(VOLT))); + + /** + * The derived unit for electric resistance (Ω or + * Ohm). + * One Ohm is equal to the resistance of a conductor in which a current of + * one ampere is produced by a potential of one volt across its terminals. + * It is named after the German physicist Georg Simon Ohm (1789-1854). + */ + public static final AlternateUnit OHM = si(new AlternateUnit( + "Ω", VOLT.divide(AMPERE))); + + /** + * The derived unit for electric conductance (S). + * One Siemens is equal to one ampere per volt. It is named after + * the German engineer Ernst Werner von Siemens (1816-1892). + */ + public static final AlternateUnit SIEMENS = si(new AlternateUnit( + "S", AMPERE.divide(VOLT))); + + /** + * The derived unit for magnetic flux (Wb). + * One Weber is equal to the magnetic flux that in linking a circuit of one + * turn produces in it an electromotive force of one volt as it is uniformly + * reduced to zero within one second. It is named after the German physicist + * Wilhelm Eduard Weber (1804-1891). + */ + public static final AlternateUnit WEBER = si(new AlternateUnit( + "Wb", VOLT.times(SECOND))); + + /** + * The derived unit for magnetic flux density (T). + * One Tesla is equal equal to one weber per square meter. It is named + * after the Serbian-born American electrical engineer and physicist + * Nikola Tesla (1856-1943). + */ + public static final AlternateUnit TESLA = si(new AlternateUnit( + "T", WEBER.divide(METRE.pow(2)))); + + /** + * The derived unit for inductance (H). + * One Henry is equal to the inductance for which an induced electromotive + * force of one volt is produced when the current is varied at the rate of + * one ampere per second. It is named after the American physicist + * Joseph Henry (1791-1878). + */ + public static final AlternateUnit HENRY = si(new AlternateUnit( + "H", WEBER.divide(AMPERE))); + + /** + * The derived unit for Celsius temperature (). + * This is a unit of temperature such as the freezing point of water + * (at one atmosphere of pressure) is 0 ℃, while the boiling point is + * 100 ℃. + */ + public static final Unit CELSIUS = si(KELVIN.plus(273.15)); + + /** + * The derived unit for luminous flux (lm). + * One Lumen is equal to the amount of light given out through a solid angle + * by a source of one candela intensity radiating equally in all directions. + */ + public static final AlternateUnit LUMEN = si(new AlternateUnit( + "lm", CANDELA.times(STERADIAN))); + + /** + * The derived unit for illuminance (lx). + * One Lux is equal to one lumen per square meter. + */ + public static final AlternateUnit LUX = si(new AlternateUnit( + "lx", LUMEN.divide(METRE.pow(2)))); + + /** + * The derived unit for activity of a radionuclide (Bq). + * One becquerel is the radiation caused by one disintegration per second. + * It is named after the French physicist, Antoine-Henri Becquerel + * (1852-1908). + */ + public static final AlternateUnit BECQUEREL = si(new AlternateUnit( + "Bq", Unit.ONE.divide(SECOND))); + + /** + * The derived unit for absorbed dose, specific energy (imparted), kerma + * (Gy). + * One gray is equal to the dose of one joule of energy absorbed per one + * kilogram of matter. It is named after the British physician + * L. H. Gray (1905-1965). + */ + public static final AlternateUnit GRAY = si(new AlternateUnit( + "Gy", JOULE.divide(KILOGRAM))); + + /** + * The derived unit for dose equivalent (Sv). + * One Sievert is equal is equal to the actual dose, in grays, multiplied + * by a "quality factor" which is larger for more dangerous forms of + * radiation. It is named after the Swedish physicist Rolf Sievert + * (1898-1966). + */ + public static final AlternateUnit SIEVERT = si(new AlternateUnit( + "Sv", JOULE.divide(KILOGRAM))); + + /** + * The derived unit for catalytic activity (kat). + */ + public static final AlternateUnit KATAL = si(new AlternateUnit( + "kat", MOLE.divide(SECOND))); + + ////////////////////////////// + // SI DERIVED PRODUCT UNITS // + ////////////////////////////// + + /** + * The metric unit for velocity quantities (m/s). + */ + public static final Unit METRES_PER_SECOND = si(new ProductUnit( + METRE.divide(SECOND))); + + /** + * Equivalent to {@link #METRES_PER_SECOND}. + */ + public static final Unit METERS_PER_SECOND = METRES_PER_SECOND; + + /** + * The metric unit for acceleration quantities (m/s²). + */ + public static final Unit METRES_PER_SQUARE_SECOND = si(new ProductUnit( + METRES_PER_SECOND.divide(SECOND))); + + /** + * Equivalent to {@link #METRES_PER_SQUARE_SECOND}. + */ + public static final Unit METERS_PER_SQUARE_SECOND = METRES_PER_SQUARE_SECOND; + + /** + * The metric unit for area quantities (). + */ + public static final Unit SQUARE_METRE = si(new ProductUnit( + METRE.times(METRE))); + + /** + * The metric unit for volume quantities (). + */ + public static final Unit CUBIC_METRE = si(new ProductUnit( + SQUARE_METRE.times(METRE))); + + /** + * Equivalent to KILO(METRE). + */ + public static final Unit KILOMETRE = METER.times(1000); + + /** + * Equivalent to {@link #KILOMETRE}. + */ + public static final Unit KILOMETER = KILOMETRE; + + /** + * Equivalent to CENTI(METRE). + */ + public static final Unit CENTIMETRE = METRE.divide(100); + + /** + * Equivalent to {@link #CENTIMETRE}. + */ + public static final Unit CENTIMETER = CENTIMETRE; + + /** + * Equivalent to MILLI(METRE). + */ + public static final Unit MILLIMETRE = METRE.divide(1000); + + /** + * Equivalent to {@link #MILLIMETRE}. + */ + public static final Unit MILLIMETER = MILLIMETRE; + + ///////////////// + // SI PREFIXES // + ///////////////// + + /** + * Returns the specified unit multiplied by the factor + * 1024 + * + * @param unit any unit. + * @return unit.multiply(1e24). + */ + public static Unit YOTTA(Unit unit) { + return unit.transform(E24); + } + + /** + * Returns the specified unit multiplied by the factor + * 1021 + * + * @param unit any unit. + * @return unit.multiply(1e21). + */ + public static Unit ZETTA(Unit unit) { + return unit.transform(E21); + } + + /** + * Returns the specified unit multiplied by the factor + * 1018 + * + * @param unit any unit. + * @return unit.multiply(1e18). + */ + public static Unit EXA(Unit unit) { + return unit.transform(E18); + } + + /** + * Returns the specified unit multiplied by the factor + * 1015 + * + * @param unit any unit. + * @return unit.multiply(1e15). + */ + public static Unit PETA(Unit unit) { + return unit.transform(E15); + } + + /** + * Returns the specified unit multiplied by the factor + * 1012 + * + * @param unit any unit. + * @return unit.multiply(1e12). + */ + public static Unit TERA(Unit unit) { + return unit.transform(E12); + } + + /** + * Returns the specified unit multiplied by the factor + * 109 + * + * @param unit any unit. + * @return unit.multiply(1e9). + */ + public static Unit GIGA(Unit unit) { + return unit.transform(E9); + } + + /** + * Returns the specified unit multiplied by the factor + * 106 + * + * @param unit any unit. + * @return unit.multiply(1e6). + */ + public static Unit MEGA(Unit unit) { + return unit.transform(E6); + } + + /** + * Returns the specified unit multiplied by the factor + * 103 + * + * @param unit any unit. + * @return unit.multiply(1e3). + */ + public static Unit KILO(Unit unit) { + return unit.transform(E3); + } + + /** + * Returns the specified unit multiplied by the factor + * 102 + * + * @param unit any unit. + * @return unit.multiply(1e2). + */ + public static Unit HECTO(Unit unit) { + return unit.transform(E2); + } + + /** + * Returns the specified unit multiplied by the factor + * 101 + * + * @param unit any unit. + * @return unit.multiply(1e1). + */ + public static Unit DEKA(Unit unit) { + return unit.transform(E1); + } + + /** + * Returns the specified unit multiplied by the factor + * 10-1 + * + * @param unit any unit. + * @return unit.multiply(1e-1). + */ + public static Unit DECI(Unit unit) { + return unit.transform(Em1); + } + + /** + * Returns the specified unit multiplied by the factor + * 10-2 + * + * @param unit any unit. + * @return unit.multiply(1e-2). + */ + public static Unit CENTI(Unit unit) { + return unit.transform(Em2); + } + + /** + * Returns the specified unit multiplied by the factor + * 10-3 + * + * @param unit any unit. + * @return unit.multiply(1e-3). + */ + public static Unit MILLI(Unit unit) { + return unit.transform(Em3); + } + + /** + * Returns the specified unit multiplied by the factor + * 10-6 + * + * @param unit any unit. + * @return unit.multiply(1e-6). + */ + public static Unit MICRO(Unit unit) { + return unit.transform(Em6); + } + + /** + * Returns the specified unit multiplied by the factor + * 10-9 + * + * @param unit any unit. + * @return unit.multiply(1e-9). + */ + public static Unit NANO(Unit unit) { + return unit.transform(Em9); + } + + /** + * Returns the specified unit multiplied by the factor + * 10-12 + * + * @param unit any unit. + * @return unit.multiply(1e-12). + */ + public static Unit PICO(Unit unit) { + return unit.transform(Em12); + } + + /** + * Returns the specified unit multiplied by the factor + * 10-15 + * + * @param unit any unit. + * @return unit.multiply(1e-15). + */ + public static Unit FEMTO(Unit unit) { + return unit.transform(Em15); + } + + /** + * Returns the specified unit multiplied by the factor + * 10-18 + * + * @param unit any unit. + * @return unit.multiply(1e-18). + */ + public static Unit ATTO(Unit unit) { + return unit.transform(Em18); + } + + /** + * Returns the specified unit multiplied by the factor + * 10-21 + * + * @param unit any unit. + * @return unit.multiply(1e-21). + */ + public static Unit ZEPTO(Unit unit) { + return unit.transform(Em21); + } + + /** + * Returns the specified unit multiplied by the factor + * 10-24 + * + * @param unit any unit. + * @return unit.multiply(1e-24). + */ + public static Unit YOCTO(Unit unit) { + return unit.transform(Em24); + } + + ///////////////////// + // Collection View // + ///////////////////// + + /** + * Returns a read only view over theunits defined in this class. + * + * @return the collection of SI units. + */ + public Set> getUnits() { + return Collections.unmodifiableSet(UNITS); + } + + /** + * Adds a new unit to the collection. + * + * @param unit the unit being added. + * @return unit. + */ + private static > U si(U unit) { + UNITS.add(unit); + return unit; + } + + // Holds prefix converters (optimization). + + static final MultiplyConverter E24 = new MultiplyConverter(1E24); + + static final MultiplyConverter E21 = new MultiplyConverter(1E21); + + static final RationalConverter E18 = new RationalConverter( + 1000000000000000000L, 1); + + static final RationalConverter E15 = new RationalConverter( + 1000000000000000L, 1); + + static final RationalConverter E12 = new RationalConverter(1000000000000L, + 1); + + static final RationalConverter E9 = new RationalConverter(1000000000L, 1); + + static final RationalConverter E6 = new RationalConverter(1000000L, 1); + + static final RationalConverter E3 = new RationalConverter(1000L, 1); + + static final RationalConverter E2 = new RationalConverter(100L, 1); + + static final RationalConverter E1 = new RationalConverter(10L, 1); + + static final RationalConverter Em1 = new RationalConverter(1, 10L); + + static final RationalConverter Em2 = new RationalConverter(1, 100L); + + static final RationalConverter Em3 = new RationalConverter(1, 1000L); + + static final RationalConverter Em6 = new RationalConverter(1, 1000000L); + + static final RationalConverter Em9 = new RationalConverter(1, 1000000000L); + + static final RationalConverter Em12 = new RationalConverter(1, + 1000000000000L); + + static final RationalConverter Em15 = new RationalConverter(1, + 1000000000000000L); + + static final RationalConverter Em18 = new RationalConverter(1, + 1000000000000000000L); + + static final MultiplyConverter Em21 = new MultiplyConverter(1E-21); + + static final MultiplyConverter Em24 = new MultiplyConverter(1E-24); + + /** + * @deprecated replaced by {@link #METRES_PER_SECOND}. + */ + public static final Unit METRE_PER_SECOND = METRES_PER_SECOND; + + /** + * @deprecated replaced by {@link #METRES_PER_SQUARE_SECOND}. + */ + public static final Unit METRE_PER_SQUARE_SECOND = METRES_PER_SQUARE_SECOND; +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/SystemOfUnits.java b/measure/src/main/java/javax/measure/unit/SystemOfUnits.java new file mode 100644 index 00000000..843e9663 --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/SystemOfUnits.java @@ -0,0 +1,32 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import java.util.Set; + +/** + *

This class represents a system of units, it groups units together + * for historical or cultural reasons. Nothing prevents a unit from + * belonging to several system of units at the same time + * (for example an imperial system would have many of the units + * held by {@link NonSI}).

+ * + * @author Jean-Marie Dautelle + * @version 4.2, August 26, 2007 + */ +public abstract class SystemOfUnits { + + /** + * Returns a read only view over the units defined in this system. + * + * @return the collection of units. + */ + public abstract Set> getUnits(); + +} diff --git a/measure/src/main/java/javax/measure/unit/TransformedUnit.java b/measure/src/main/java/javax/measure/unit/TransformedUnit.java new file mode 100644 index 00000000..1026b8f8 --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/TransformedUnit.java @@ -0,0 +1,121 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import javax.measure.converter.UnitConverter; +import javax.measure.quantity.Quantity; + +/** + *

This class represents the units derived from other units using + * {@link UnitConverter converters}.

+ * + *

Examples of transformed units:[code] + * CELSIUS = KELVIN.add(273.15); + * FOOT = METER.multiply(0.3048); + * MILLISECOND = MILLI(SECOND); + * [/code]

+ * + *

Transformed units have no label. But like any other units, + * they may have labels attached to them:[code] + * UnitFormat.getStandardInstance().label(FOOT, "ft"); + * [/code] + * or aliases: [code] + * UnitFormat.getStandardInstance().alias(CENTI(METER)), "centimeter"); + * UnitFormat.getStandardInstance().alias(CENTI(METER)), "centimetre"); + * [/code]

+ * + * @author Jean-Marie Dautelle + * @version 3.1, April 22, 2006 + * @see Unit#plus(double) + * @see Unit#times(double) + * @see Unit#transform(UnitConverter) + * @see UnitFormat + */ +public final class TransformedUnit extends DerivedUnit { + + /** + * Holds the parent unit (not a transformed unit). + */ + private final Unit _parentUnit; + + /** + * Holds the converter to the parent unit. + */ + private final UnitConverter _toParentUnit; + + /** + * Creates a transformed unit from the specified parent unit. + * + * @param parentUnit the untransformed unit from which this unit is + * derived. + * @param toParentUnit the converter to the parent units. + * @throws IllegalArgumentException if toParentUnit == + * {@link UnitConverter#IDENTITY UnitConverter.IDENTITY} + */ + TransformedUnit(Unit parentUnit, UnitConverter toParentUnit) { + if (toParentUnit == UnitConverter.IDENTITY) + throw new IllegalArgumentException("Identity not allowed"); + _parentUnit = parentUnit; + _toParentUnit = toParentUnit; + } + + /** + * Returns the parent unit for this unit. The parent unit is the + * untransformed unit from which this unit is derived. + * + * @return the untransformed unit from which this unit is derived. + */ + public Unit getParentUnit() { + return _parentUnit; + } + + /** + * Returns the converter to the parent unit. + * + * @return the converter to the parent unit. + */ + public UnitConverter toParentUnit() { + return _toParentUnit; + } + + /** + * Indicates if this transformed unit is considered equals to the specified + * object (both are transformed units with equal parent unit and equal + * converter to parent unit). + * + * @param that the object to compare for equality. + * @return true if this and that + * are considered equals; falseotherwise. + */ + public boolean equals(Object that) { + if (this == that) return true; + if (!(that instanceof TransformedUnit)) return false; + TransformedUnit thatUnit = (TransformedUnit) that; + return this._parentUnit.equals(thatUnit._parentUnit) && + this._toParentUnit.equals(thatUnit._toParentUnit); + } + + // Implements abstract method. + public int hashCode() { + return _parentUnit.hashCode() + _toParentUnit.hashCode(); + } + + // Implements abstract method. + public Unit getStandardUnit() { + return _parentUnit.getStandardUnit(); + } + + // Implements abstract method. + public UnitConverter toStandardUnit() { + return _parentUnit.toStandardUnit().concatenate(_toParentUnit); + } + + private static final long serialVersionUID = 1L; + +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/Unit.java b/measure/src/main/java/javax/measure/unit/Unit.java new file mode 100644 index 00000000..520d682d --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/Unit.java @@ -0,0 +1,501 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import java.io.Serializable; +import java.text.ParseException; +import java.text.ParsePosition; +import java.util.HashMap; + +import javax.measure.MeasureFormat; +import javax.measure.converter.AddConverter; +import javax.measure.converter.ConversionException; +import javax.measure.converter.MultiplyConverter; +import javax.measure.converter.RationalConverter; +import javax.measure.converter.UnitConverter; +import javax.measure.quantity.Dimensionless; +import javax.measure.quantity.Quantity; + +/** + *

This class represents a determinate {@link javax.measure.quantity.Quantity + * quantity} (as of length, time, heat, or value) adopted as a standard + * of measurement.

+ * + *

It is helpful to think of instances of this class as recording the + * history by which they are created. Thus, for example, the string + * "g/kg" (which is a dimensionless unit) would result from invoking + * the method toString() on a unit that was created by dividing a + * gram unit by a kilogram unit. Yet, "kg" divided by "kg" returns + * {@link #ONE} and not "kg/kg" due to automatic unit factorization.

+ * + *

This class supports the multiplication of offsets units. The result is + * usually a unit not convertible to its {@link #getStandardUnit standard unit}. + * Such units may appear in derivative quantities. For example °C/m is an + * unit of gradient, which is common in atmospheric and oceanographic + * research.

+ * + *

Units raised at rational powers are also supported. For example + * the cubic root of "liter" is a unit compatible with meter.

+ * + *

Instances of this class are immutable.

+ * + * @author Jean-Marie Dautelle + * @author Steve Emmerson + * @author Martin Desruisseaux + * @version 3.2, August 28, 2006 + * @see + * Wikipedia: Units of measurement + */ +public abstract class Unit implements Serializable { + + /** + * Holds the dimensionless unit ONE. + */ + public static final Unit ONE = new ProductUnit(); + + /** + * Holds the unique symbols collection (base unit or alternate units). + */ + static final HashMap> SYMBOL_TO_UNIT = new HashMap>(); + + /** + * Default constructor. + */ + protected Unit() { + } + + ////////////////////////////////////////////////////// + // Contract methods (for sub-classes to implement). // + ////////////////////////////////////////////////////// + + /** + * Returns the {@link BaseUnit base unit}, {@link AlternateUnit alternate + * unit} or product of base units and alternate units this unit is derived + * from. The standard unit identifies the "type" of + * {@link javax.measure.quantity.Quantity quantity} for which this unit is employed. + * For example:[code] + * boolean isAngularVelocity(Unit u) { + * return u.getStandardUnit().equals(RADIAN.divide(SECOND)); + * } + * assert(REVOLUTION.divide(MINUTE).isAngularVelocity()); + * [/code] + * + *

Note: Having the same system unit is not sufficient to ensure + * that a converter exists between the two units + * (e.g. °C/m and K/m).

+ * @return the system unit this unit is derived from. + */ + public abstract Unit getStandardUnit(); + + + /** + * Returns the converter from this unit to its system unit. + * + * @return this.getConverterTo(this.getSystemUnit()) + */ + public abstract UnitConverter toStandardUnit(); + + /** + * Returns the hash code for this unit. + * + * @return this unit hashcode value. + */ + public abstract int hashCode(); + + /** + * Indicates if the specified unit can be considered equals to + * the one specified. + * + * @param that the object to compare to. + * @return true if this unit is considered equal to + * that unit; false otherwise. + */ + public abstract boolean equals(Object that); + + /** + * Indicates if this unit is a standard unit (base units and + * alternate units are standard units). The standard unit identifies + * the "type" of {@link javax.measure.quantity.Quantity quantity} for + * which the unit is employed. + * + * @return getStandardUnit().equals(this) + */ + public boolean isStandardUnit() { + return getStandardUnit().equals(this); + } + + /** + * Indicates if this unit is compatible with the unit specified. + * Units don't need to be equals to be compatible. For example:[code] + * RADIAN.equals(ONE) == false + * RADIAN.isCompatible(ONE) == true + * [/code] + * @param that the other unit. + * @return this.getDimension().equals(that.getDimension()) + * @see #getDimension() + */ + public final boolean isCompatible(Unit that) { + return (this == that) + || this.getStandardUnit().equals(that.getStandardUnit()) + || this.getDimension().equals(that.getDimension()); + } + + /** + * Casts this unit to a parameterized unit of specified nature or + * throw a ClassCastException if the dimension of the + * specified quantity and this unit's dimension do not match. + * For example:[code] + * Unit LIGHT_YEAR = NonSI.C.times(NonSI.YEAR).asType(Length.class); + * [/code] + * + * @param type the quantity class identifying the nature of the unit. + * @return this unit parameterized with the specified type. + * @throws ClassCastException if the dimension of this unit is different + * from the specified quantity dimension. + * @throws UnsupportedOperationException if the specified quantity class + * does not have a public static field named "UNIT" holding the + * standard unit for the quantity. + */ + @SuppressWarnings("unchecked") + public final Unit asType(Class type) throws ClassCastException { + Dimension dim1 = this.getDimension(); + Unit u = null; + try { + u = (Unit)type.getField("UNIT").get(null); + } catch (Exception e) { + throw new Error(e); + } + Dimension dim2 = u.getDimension(); + if (!dim1.equals(dim2)) + throw new ClassCastException(); + return (Unit)this; + } + + /** + * Returns the dimension of this unit (depends upon the current + * dimensional {@link Dimension.Model model}). + * + * @return the dimension of this unit for the current model. + */ + public final Dimension getDimension() { + Unit systemUnit = this.getStandardUnit(); + if (systemUnit instanceof BaseUnit) + return Dimension.getModel().getDimension((BaseUnit) systemUnit); + if (systemUnit instanceof AlternateUnit) + return ((AlternateUnit) systemUnit).getParent().getDimension(); + // Product of units. + ProductUnit productUnit = (ProductUnit) systemUnit; + Dimension dimension = Dimension.NONE; + for (int i = 0; i < productUnit.getUnitCount(); i++) { + Unit unit = productUnit.getUnit(i); + Dimension d = unit.getDimension().pow(productUnit.getUnitPow(i)) + .root(productUnit.getUnitRoot(i)); + dimension = dimension.times(d); + } + return dimension; + } + + /** + * Returns a converter of numeric values from this unit to another unit. + * + * @param that the unit to which to convert the numeric values. + * @return the converter from this unit to that unit. + * @throws ConversionException if the conveter cannot be constructed + * (e.g. !this.isCompatible(that)). + */ + public final UnitConverter getConverterTo(Unit that) + throws ConversionException { + if (this.equals(that)) + return UnitConverter.IDENTITY; + Unit thisSystemUnit = this.getStandardUnit(); + Unit thatSystemUnit = that.getStandardUnit(); + if (thisSystemUnit.equals(thatSystemUnit)) + return that.toStandardUnit().inverse().concatenate( + this.toStandardUnit()); + // Use dimensional transforms. + if (!thisSystemUnit.getDimension() + .equals(thatSystemUnit.getDimension())) + throw new ConversionException(this + " is not compatible with " + + that); + // Transform between SystemUnit and BaseUnits is Identity. + UnitConverter thisTransform = this.toStandardUnit().concatenate( + transformOf(this.getBaseUnits())); + UnitConverter thatTransform = that.toStandardUnit().concatenate( + transformOf(that.getBaseUnits())); + return thatTransform.inverse().concatenate(thisTransform); + } + + private Unit getBaseUnits() { + Unit systemUnit = this.getStandardUnit(); + if (systemUnit instanceof BaseUnit) return systemUnit; + if (systemUnit instanceof AlternateUnit) + return ((AlternateUnit)systemUnit).getParent().getBaseUnits(); + if (systemUnit instanceof ProductUnit) { + ProductUnit productUnit = (ProductUnit)systemUnit; + Unit baseUnits = ONE; + for (int i = 0; i < productUnit.getUnitCount(); i++) { + Unit unit = productUnit.getUnit(i).getBaseUnits(); + unit = unit.pow(productUnit.getUnitPow(i)); + unit = unit.root(productUnit.getUnitRoot(i)); + baseUnits = baseUnits.times(unit); + } + return baseUnits; + } else { + throw new InternalError( + "System Unit cannot be an instance of " + this.getClass()); + } + } + private static UnitConverter transformOf(Unit baseUnits) { + if (baseUnits instanceof BaseUnit) + return Dimension.getModel().getTransform((BaseUnit) baseUnits); + // Product of units. + ProductUnit productUnit = (ProductUnit) baseUnits; + UnitConverter converter = UnitConverter.IDENTITY; + for (int i = 0; i < productUnit.getUnitCount(); i++) { + Unit unit = productUnit.getUnit(i); + UnitConverter cvtr = transformOf(unit); + if (!cvtr.isLinear()) + throw new ConversionException(baseUnits + + " is non-linear, cannot convert"); + if (productUnit.getUnitRoot(i) != 1) + throw new ConversionException(productUnit + + " holds a base unit with fractional exponent"); + int pow = productUnit.getUnitPow(i); + if (pow < 0) { // Negative power. + pow = -pow; + cvtr = cvtr.inverse(); + } + for (int j = 0; j < pow; j++) { + converter = converter.concatenate(cvtr); + } + } + return converter; + } + + /** + * Returns a unit equivalent to this unit but used in expressions to + * distinguish between quantities of a different nature but of the same + * dimensions. + * + *

Examples of alternate units:[code] + * Unit RADIAN = ONE.alternate("rad"); + * Unit NEWTON = METER.times(KILOGRAM).divide(SECOND.pow(2)).alternate("N"); + * Unit PASCAL = NEWTON.divide(METER.pow(2)).alternate("Pa"); + * [/code]

+ * + * @param symbol the new symbol for the alternate unit. + * @return the alternate unit. + * @throws UnsupportedOperationException if this unit is not a standard unit. + * @throws IllegalArgumentException if the specified symbol is already + * associated to a different unit. + */ + public final AlternateUnit alternate(String symbol) { + return new AlternateUnit(symbol, this); + } + + /** + * Returns the combination of this unit with the specified sub-unit. + * Compound units are typically used for formatting purpose. + * Examples of compound units:[code] + * HOUR_MINUTE = NonSI.HOUR.compound(NonSI.MINUTE); + * DEGREE_MINUTE_SECOND_ANGLE = NonSI.DEGREE_ANGLE.compound( + * NonSI.DEGREE_MINUTE).compound(NonSI.SECOND_ANGLE); + * [/code] + * + * @param subunit the sub-unit to combine with this unit. + * @return the corresponding compound unit. + */ + public final CompoundUnit compound(Unit subunit) { + return new CompoundUnit(this, subunit); + } + + /** + * Returns the unit derived from this unit using the specified converter. + * The converter does not need to be linear. For example:[code] + * Unit DECIBEL = Unit.ONE.transform( + * new LogConverter(10).inverse().concatenate( + * new RationalConverter(1, 10)));[/code] + * + * @param operation the converter from the transformed unit to this unit. + * @return the unit after the specified transformation. + */ + public final Unit transform(UnitConverter operation) { + if (this instanceof TransformedUnit) { + TransformedUnit tf = (TransformedUnit) this; + Unit parent = tf.getParentUnit(); + UnitConverter toParent = tf.toParentUnit().concatenate(operation); + if (toParent == UnitConverter.IDENTITY) + return parent; + return new TransformedUnit(parent, toParent); + } + if (operation == UnitConverter.IDENTITY) + return this; + return new TransformedUnit(this, operation); + } + + /** + * Returns the result of adding an offset to this unit. The returned unit + * is convertible with all units that are convertible with this unit. + * + * @param offset the offset added (expressed in this unit, + * e.g. CELSIUS = KELVIN.plus(273.15)). + * @return this.transform(new AddConverter(offset)) + */ + public final Unit plus(double offset) { + return transform(new AddConverter(offset)); + } + + /** + * Returns the result of multiplying this unit by an exact factor. + * + * @param factor the exact scale factor + * (e.g. KILOMETER = METER.times(1000)). + * @return this.transform(new RationalConverter(factor, 1)) + */ + public final Unit times(long factor) { + return transform(new RationalConverter(factor, 1)); + } + + /** + * Returns the result of multiplying this unit by a an approximate factor + * + * @param factor the approximate factor (e.g. + * ELECTRON_MASS = KILOGRAM.times(9.10938188e-31)). + * @return this.transform(new MultiplyConverter(factor)) + */ + public final Unit times(double factor) { + return transform(new MultiplyConverter(factor)); + } + + /** + * Returns the product of this unit with the one specified. + * + * @param that the unit multiplicand. + * @return this * that + */ + public final Unit times(Unit that) { + return ProductUnit.getProductInstance(this, that); + } + + /** + * Returns the inverse of this unit. + * + * @return 1 / this + */ + public final Unit inverse() { + return ProductUnit.getQuotientInstance(ONE, this); + } + + /** + * Returns the result of dividing this unit by an exact divisor. + * + * @param divisor the exact divisor. + * (e.g. QUART = GALLON_LIQUID_US.divide(4)). + * @return this.transform(new RationalConverter(1 , divisor)) + */ + public final Unit divide(long divisor) { + return transform(new RationalConverter(1, divisor)); + } + + /** + * Returns the result of dividing this unit by an approximate divisor. + * + * @param divisor the approximate divisor. + * @return this.transform(new MultiplyConverter(1.0 / divisor)) + */ + public final Unit divide(double divisor) { + return transform(new MultiplyConverter(1.0 / divisor)); + } + + /** + * Returns the quotient of this unit with the one specified. + * + * @param that the unit divisor. + * @return this / that + */ + public final Unit divide(Unit that) { + return this.times(that.inverse()); + } + + /** + * Returns a unit equals to the given root of this unit. + * + * @param n the root's order. + * @return the result of taking the given root of this unit. + * @throws ArithmeticException if n == 0. + */ + public final Unit root(int n) { + if (n > 0) { + return ProductUnit.getRootInstance(this, n); + } else if (n == 0) { + throw new ArithmeticException("Root's order of zero"); + } else { // n < 0 + return ONE.divide(this.root(-n)); + } + } + + /** + * Returns a unit equals to this unit raised to an exponent. + * + * @param n the exponent. + * @return the result of raising this unit to the exponent. + */ + public final Unit pow(int n) { + if (n > 0) { + return this.times(this.pow(n - 1)); + } else if (n == 0) { + return ONE; + } else { // n < 0 + return ONE.divide(this.pow(-n)); + } + } + + /** + * Returns a unit instance that is defined from the specified + * character sequence using the {@link UnitFormat#getInstance() + * standard unit format}. + *

Examples of valid entries (all for meters per second squared) are: + *

    + *
  • m*s-2
  • + *
  • m/s²
  • + *
  • m·s-²
  • + *
  • m*s**-2
  • + *
  • m^+1 s^-2
  • + *

+ * + * @param csq the character sequence to parse. + * @return UnitFormat.getStandardInstance().parse(csq, new ParsePosition(0)) + * @throws IllegalArgumentException if the specified character sequence + * cannot be correctly parsed (e.g. symbol unknown). + */ + public static Unit valueOf(CharSequence csq) { + try { + return UnitFormat.getInstance() + .parseProductUnit(csq, new ParsePosition(0)); + } catch (ParseException e) { + throw new IllegalArgumentException(e); + } + } + + ////////////////////// + // GENERAL CONTRACT // + ////////////////////// + + /** + * Returns the standard String representation of this unit. + * This representation is not affected by locale. Locale-sensitive + * unit formatting and parsing is handled by the {@link MeasureFormat} + * class and its subclasses. + * + * @return UnitFormat.getStandardInstance().format(this) + */ + public final String toString() { + return UnitFormat.getInstance().format(this); + } +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/UnitFormat.java b/measure/src/main/java/javax/measure/unit/UnitFormat.java new file mode 100644 index 00000000..24446562 --- /dev/null +++ b/measure/src/main/java/javax/measure/unit/UnitFormat.java @@ -0,0 +1,940 @@ +/* + * JScience - Java(TM) Tools and Libraries for the Advancement of Sciences. + * Copyright (C) 2006 - JScience (http://jscience.org/) + * All rights reserved. + * + * Permission to use, copy, modify, and distribute this software is + * freely granted, provided that this notice is preserved. + */ +package javax.measure.unit; + +import java.io.IOException; +import java.lang.CharSequence; +import java.text.FieldPosition; +import java.text.Format; +import java.text.ParseException; +import java.text.ParsePosition; +import java.util.HashMap; +import java.util.Locale; +//@RETROWEAVER import javolution.text.Appendable; +import javax.measure.converter.AddConverter; +import javax.measure.converter.MultiplyConverter; +import javax.measure.converter.RationalConverter; +import javax.measure.converter.UnitConverter; +import javax.measure.quantity.Quantity; + +import static javax.measure.unit.SI.*; + +/** + *

This class provides the interface for formatting and parsing {@link + * Unit units}.

+ * + *

For all {@link SI} units, the 20 SI prefixes used to form decimal + * multiples and sub-multiples of SI units are recognized. + * {@link NonSI} units are directly recognized. For example:[code] + * Unit.valueOf("m°C").equals(SI.MILLI(SI.CELSIUS)) + * Unit.valueOf("kW").equals(SI.KILO(SI.WATT)) + * Unit.valueOf("ft").equals(SI.METER.multiply(0.3048))[/code]

+ * + * @author
Jean-Marie Dautelle + * @author Eric Russell + * @version 1.3, August 29, 2006 + */ +public abstract class UnitFormat extends Format { + + /** + * Holds the standard unit format. + */ + private static final DefaultFormat DEFAULT = new DefaultFormat(); + + /** + * Holds the ASCIIFormat unit format. + */ + private static final ASCIIFormat ASCII = new ASCIIFormat(); + + /** + * Returns the unit format for the default locale (format used by + * {@link Unit#valueOf(CharSequence) Unit.valueOf(CharSequence)} and + * {@link Unit#toString() Unit.toString()}). + * + * @return the default unit format (locale sensitive). + */ + public static UnitFormat getInstance() { + return UnitFormat.getInstance(Locale.getDefault()); + } + + /** + * Returns the unit format for the specified locale. + * + * @return the unit format for the specified locale. + */ + public static UnitFormat getInstance(Locale inLocale) { + return DEFAULT; // TBD: Implement Locale Format. + } + + /** + * Returns the UCUM + * international unit format; this format uses characters range + * 0000-007F exclusively and is not locale-sensitive. + * For example: kg.m/s2 + * + * @return the UCUM international format. + */ + public static UnitFormat getUCUMInstance() { + return UnitFormat.ASCII; // TBD - Provide UCUM implementation. + } + + /** + * Base constructor. + */ + protected UnitFormat() { + } + + /** + * Formats the specified unit. + * + * @param unit the unit to format. + * @param appendable the appendable destination. + * @throws IOException if an error occurs. + */ + public abstract Appendable format(Unit unit, Appendable appendable) + throws IOException; + + /** + * Parses a sequence of character to produce a unit or a rational product + * of unit. + * + * @param csq the CharSequence to parse. + * @param pos an object holding the parsing index and error position. + * @return an {@link Unit} parsed from the character sequence. + * @throws IllegalArgumentException if the character sequence contains + * an illegal syntax. + */ + public abstract Unit parseProductUnit(CharSequence csq, ParsePosition pos) + throws ParseException; + + /** + * Parses a sequence of character to produce a single unit. + * + * @param csq the CharSequence to parse. + * @param pos an object holding the parsing index and error position. + * @return an {@link Unit} parsed from the character sequence. + * @throws IllegalArgumentException if the character sequence does not contain + * a valid unit identifier. + */ + public abstract Unit parseSingleUnit(CharSequence csq, ParsePosition pos) + throws ParseException; + + /** + * Attaches a system-wide label to the specified unit. For example: + * [code] + * UnitFormat.getInstance().label(DAY.multiply(365), "year"); + * UnitFormat.getInstance().label(METER.multiply(0.3048), "ft"); + * [/code] + * If the specified label is already associated to an unit the previous + * association is discarded or ignored. + * + * @param unit the unit being labelled. + * @param label the new label for this unit. + * @throws IllegalArgumentException if the label is not a + * {@link UnitFormat#isValidIdentifier(String)} valid identifier. + */ + public abstract void label(Unit unit, String label); + + /** + * Attaches a system-wide alias to this unit. Multiple aliases may + * be attached to the same unit. Aliases are used during parsing to + * recognize different variants of the same unit. For example: + * [code] + * UnitFormat.getLocaleInstance().alias(METER.multiply(0.3048), "foot"); + * UnitFormat.getLocaleInstance().alias(METER.multiply(0.3048), "feet"); + * UnitFormat.getLocaleInstance().alias(METER, "meter"); + * UnitFormat.getLocaleInstance().alias(METER, "metre"); + * [/code] + * If the specified label is already associated to an unit the previous + * association is discarded or ignored. + * + * @param unit the unit being aliased. + * @param alias the alias attached to this unit. + * @throws IllegalArgumentException if the label is not a + * {@link UnitFormat#isValidIdentifier(String)} valid identifier. + */ + public abstract void alias(Unit unit, String alias); + + /** + * Indicates if the specified name can be used as unit identifier. + * + * @param name the identifier to be tested. + * @return true if the name specified can be used as + * label or alias for this format;false otherwise. + */ + public abstract boolean isValidIdentifier(String name); + + /** + * Formats an unit and appends the resulting text to a given string + * buffer (implements java.text.Format). + * + * @param unit the unit to format. + * @param toAppendTo where the text is to be appended + * @param pos the field position (not used). + * @return toAppendTo + */ + public final StringBuffer format(Object unit, final StringBuffer toAppendTo, + FieldPosition pos) { + try { + Object dest = toAppendTo; + if (dest instanceof Appendable) { + format((Unit) unit, (Appendable)dest); + } else { // When retroweaver is used to produce 1.4 binaries. + format((Unit) unit, new Appendable() { + + public Appendable append(char arg0) throws IOException { + toAppendTo.append(arg0); + return null; + } + + public Appendable append(CharSequence arg0) throws IOException { + toAppendTo.append(arg0); + return null; + } + + public Appendable append(CharSequence arg0, int arg1, int arg2) throws IOException { + toAppendTo.append(arg0.subSequence(arg1, arg2)); + return null; + }}); + } + return toAppendTo; + } catch (IOException e) { + throw new Error(e); // Should never happen. + } + } + + /** + * Parses the text from a string to produce an object + * (implements java.text.Format). + * + * @param source the string source, part of which should be parsed. + * @param pos the cursor position. + * @return the corresponding unit or null if the string + * cannot be parsed. + */ + public final Unit parseObject(String source, ParsePosition pos) { + int start = pos.getIndex(); + try { + return parseProductUnit(source, pos); + } catch (ParseException e) { + pos.setIndex(start); + pos.setErrorIndex(e.getErrorOffset()); + return null; + } + } + + + /** + * This class represents an exponent with both a power (numerator) + * and a root (denominator). + */ + private static class Exponent { + public final int pow; + public final int root; + public Exponent (int pow, int root) { + this.pow = pow; + this.root = root; + } + } + + /** + * This class represents the standard format. + */ + protected static class DefaultFormat extends UnitFormat { + + /** + * Holds the name to unit mapping. + */ + final HashMap> _nameToUnit = new HashMap>(); + + /** + * Holds the unit to name mapping. + */ + final HashMap, String> _unitToName = new HashMap, String>(); + + @Override + public void label(Unit unit, String label) { + if (!isValidIdentifier(label)) + throw new IllegalArgumentException("Label: " + label + + " is not a valid identifier."); + synchronized (this) { + _nameToUnit.put(label, unit); + _unitToName.put(unit, label); + } + } + + @Override + public void alias(Unit unit, String alias) { + if (!isValidIdentifier(alias)) + throw new IllegalArgumentException("Alias: " + alias + + " is not a valid identifier."); + synchronized (this) { + _nameToUnit.put(alias, unit); + } + } + + @Override + public boolean isValidIdentifier(String name) { + if ((name == null) || (name.length() == 0)) + return false; + for (int i = 0; i < name.length(); i++) { + if (!isUnitIdentifierPart(name.charAt(i))) + return false; + } + return true; + } + + static boolean isUnitIdentifierPart(char ch) { + return Character.isLetter(ch) || + (!Character.isWhitespace(ch) && !Character.isDigit(ch) + && (ch != '·') && (ch != '*') && (ch != '/') + && (ch != '(') && (ch != ')') && (ch != '[') && (ch != ']') + && (ch != '¹') && (ch != '²') && (ch != '³') + && (ch != '^') && (ch != '+') && (ch != '-')); + } + + // Returns the name for the specified unit or null if product unit. + public String nameFor(Unit unit) { + // Searches label database. + String label = _unitToName.get(unit); + if (label != null) + return label; + if (unit instanceof BaseUnit) + return ((BaseUnit) unit).getSymbol(); + if (unit instanceof AlternateUnit) + return ((AlternateUnit) unit).getSymbol(); + if (unit instanceof TransformedUnit) { + TransformedUnit tfmUnit = (TransformedUnit) unit; + Unit baseUnits = tfmUnit.getStandardUnit(); + UnitConverter cvtr = tfmUnit.toStandardUnit(); + StringBuffer result = new StringBuffer(); + String baseUnitName = baseUnits.toString(); + if ((baseUnitName.indexOf('·') >= 0) || + (baseUnitName.indexOf('*') >= 0) || + (baseUnitName.indexOf('/') >= 0)) { + // We could use parentheses whenever baseUnits is an + // instanceof ProductUnit, but most ProductUnits have aliases, + // so we'd end up with a lot of unnecessary parentheses. + result.append('('); + result.append(baseUnitName); + result.append(')'); + } else { + result.append(baseUnitName); + } + if (cvtr instanceof AddConverter) { + result.append('+'); + result.append(((AddConverter) cvtr).getOffset()); + } else if (cvtr instanceof RationalConverter) { + long dividend = ((RationalConverter) cvtr).getDividend(); + if (dividend != 1) { + result.append('*'); + result.append(dividend); + } + long divisor = ((RationalConverter) cvtr).getDivisor(); + if (divisor != 1) { + result.append('/'); + result.append(divisor); + } ; + } else if (cvtr instanceof MultiplyConverter) { + result.append('*'); + result.append(((MultiplyConverter) cvtr).getFactor()); + } else { // Other converters. + return "[" + baseUnits + "?]"; + } + return result.toString(); + } + // Compound unit. + if (unit instanceof CompoundUnit) { + CompoundUnit cpdUnit = (CompoundUnit) unit; + return nameFor(cpdUnit.getHigher()).toString() + ":" + + nameFor(cpdUnit.getLower()); + } + return null; // Product unit. + } + + // Returns the unit for the specified name. + public Unit unitFor(String name) { + Unit unit = _nameToUnit.get(name); + if (unit != null) + return unit; + unit = Unit.SYMBOL_TO_UNIT.get(name); + return unit; + } + + //////////////////////////// + // Parsing. + + @SuppressWarnings("unchecked") + public Unit parseSingleUnit(CharSequence csq, ParsePosition pos) + throws ParseException { + int startIndex = pos.getIndex(); + String name = readIdentifier(csq, pos); + Unit unit = unitFor(name); + check(unit != null, name + " not recognized", csq, startIndex); + return unit; + } + + @SuppressWarnings("unchecked") + @Override + public Unit parseProductUnit(CharSequence csq, ParsePosition pos) + throws ParseException { + Unit result = Unit.ONE; + int token = nextToken(csq, pos); + switch (token) { + case IDENTIFIER: + result = parseSingleUnit(csq, pos); + break; + case OPEN_PAREN: + pos.setIndex(pos.getIndex() + 1); + result = parseProductUnit(csq, pos); + token = nextToken(csq, pos); + check(token == CLOSE_PAREN, "')' expected", csq, pos.getIndex()); + pos.setIndex(pos.getIndex() + 1); + break; + } + token = nextToken(csq, pos); + while (true) { + switch (token) { + case EXPONENT: + Exponent e = readExponent(csq, pos); + if (e.pow != 1) { + result = result.pow(e.pow); + } + if (e.root != 1) { + result = result.root(e.root); + } + break; + case MULTIPLY: + pos.setIndex(pos.getIndex() + 1); + token = nextToken(csq, pos); + if (token == INTEGER) { + long n = readLong(csq, pos); + if (n != 1) { + result = result.times(n); + } + } else if (token == FLOAT) { + double d = readDouble(csq, pos); + if (d != 1.0) { + result = result.times(d); + } + } else { + result = result.times(parseProductUnit(csq, pos)); + } + break; + case DIVIDE: + pos.setIndex(pos.getIndex() + 1); + token = nextToken(csq, pos); + if (token == INTEGER) { + long n = readLong(csq, pos); + if (n != 1) { + result = result.divide(n); + } + } else if (token == FLOAT) { + double d = readDouble(csq, pos); + if (d != 1.0) { + result = result.divide(d); + } + } else { + result = result.divide(parseProductUnit(csq, pos)); + } + break; + case PLUS: + pos.setIndex(pos.getIndex() + 1); + token = nextToken(csq, pos); + if (token == INTEGER) { + long n = readLong(csq, pos); + if (n != 1) { + result = result.plus(n); + } + } else if (token == FLOAT) { + double d = readDouble(csq, pos); + if (d != 1.0) { + result = result.plus(d); + } + } else { + throw new ParseException("not a number", pos.getIndex()); + } + break; + case EOF: + case CLOSE_PAREN: + return result; + default: + throw new ParseException("unexpected token " + token, pos.getIndex()); + } + token = nextToken(csq, pos); + } + } + + private static final int EOF = 0; + private static final int IDENTIFIER = 1; + private static final int OPEN_PAREN= 2; + private static final int CLOSE_PAREN= 3; + private static final int EXPONENT = 4; + private static final int MULTIPLY = 5; + private static final int DIVIDE = 6; + private static final int PLUS = 7; + private static final int INTEGER = 8; + private static final int FLOAT = 9; + + private int nextToken(CharSequence csq, ParsePosition pos) { + final int length = csq.length(); + while (pos.getIndex() < length) { + char c = csq.charAt(pos.getIndex()); + if (isUnitIdentifierPart(c)) { + return IDENTIFIER; + } else if (c == '(') { + return OPEN_PAREN; + } else if (c == ')') { + return CLOSE_PAREN; + } else if ((c == '^') || (c == '¹') || (c == '²') || (c == '³')) { + return EXPONENT; + } else if (c == '*') { + char c2 = csq.charAt(pos.getIndex() + 1); + if (c2 == '*') { + return EXPONENT; + } else { + return MULTIPLY; + } + } else if (c == '·') { + return MULTIPLY; + } else if (c == '/') { + return DIVIDE; + } else if (c == '+') { + return PLUS; + } else if ((c == '-') || Character.isDigit(c)) { + int index = pos.getIndex()+1; + while ((index < length) && + (Character.isDigit(c) || (c == '-') || (c == '.') || (c == 'E'))) { + c = csq.charAt(index++); + if (c == '.') { + return FLOAT; + } + } + return INTEGER; + } + pos.setIndex(pos.getIndex() + 1); + } + return EOF; + } + + private void check(boolean expr, String message, CharSequence csq, + int index) throws ParseException { + if (!expr) { + throw new ParseException(message + " (in " + csq + + " at index " + index + ")", index); + } + } + + private Exponent readExponent (CharSequence csq, ParsePosition pos) { + char c = csq.charAt(pos.getIndex()); + if (c == '^') { + pos.setIndex(pos.getIndex()+1); + } else if (c == '*') { + pos.setIndex(pos.getIndex()+2); + } + final int length = csq.length(); + int pow = 0; + boolean isPowNegative = false; + int root = 0; + boolean isRootNegative = false; + boolean isRoot = false; + while (pos.getIndex() < length) { + c = csq.charAt(pos.getIndex()); + if (c == '¹') { + if (isRoot) { + root = root * 10 + 1; + } else { + pow = pow * 10 + 1; + } + } else if (c == '²') { + if (isRoot) { + root = root * 10 + 2; + } else { + pow = pow * 10 + 2; + } + } else if (c == '³') { + if (isRoot) { + root = root * 10 + 3; + } else { + pow = pow * 10 + 3; + } + } else if (c == '-') { + if (isRoot) { + isRootNegative = true; + } else { + isPowNegative = true; + } + } else if ((c >= '0') && (c <= '9')) { + if (isRoot) { + root = root * 10 + (c - '0'); + } else { + pow = pow * 10 + (c - '0'); + } + } else if (c == ':') { + isRoot = true; + } else { + break; + } + pos.setIndex(pos.getIndex()+1); + } + if (pow == 0) pow = 1; + if (root == 0) root = 1; + return new Exponent(isPowNegative ? -pow : pow, + isRootNegative ? -root : root); + } + + private long readLong (CharSequence csq, ParsePosition pos) { + final int length = csq.length(); + int result = 0; + boolean isNegative = false; + while (pos.getIndex() < length) { + char c = csq.charAt(pos.getIndex()); + if (c == '-') { + isNegative = true; + } else if ((c >= '0') && (c <= '9')) { + result = result * 10 + (c - '0'); + } else { + break; + } + pos.setIndex(pos.getIndex()+1); + } + return isNegative ? -result : result; + } + + private double readDouble (CharSequence csq, ParsePosition pos) { + final int length = csq.length(); + int start = pos.getIndex(); + int end = start+1; + while (end < length) { + if ("012356789+-.E".indexOf(csq.charAt(end)) < 0) { + break; + } + end += 1; + } + pos.setIndex(end+1); + return Double.parseDouble(csq.subSequence(start,end).toString()); + } + + private String readIdentifier(CharSequence csq, ParsePosition pos) { + final int length = csq.length(); + int start = pos.getIndex(); + int i = start; + while ((++i < length) && isUnitIdentifierPart(csq.charAt(i))) { } + pos.setIndex(i); + return csq.subSequence(start, i).toString(); + } + + //////////////////////////// + // Formatting. + + @Override + public Appendable format(Unit unit, Appendable appendable) + throws IOException { + String name = nameFor(unit); + if (name != null) + return appendable.append(name); + if (!(unit instanceof ProductUnit)) + throw new IllegalArgumentException("Cannot format given Object as a Unit"); + + // Product unit. + ProductUnit productUnit = (ProductUnit) unit; + int invNbr = 0; + + // Write positive exponents first. + boolean start = true; + for (int i = 0; i < productUnit.getUnitCount(); i++) { + int pow = productUnit.getUnitPow(i); + if (pow >= 0) { + if (!start) { + appendable.append('·'); // Separator. + } + name = nameFor(productUnit.getUnit(i)); + int root = productUnit.getUnitRoot(i); + append(appendable, name, pow, root); + start = false; + } else { + invNbr++; + } + } + + // Write negative exponents. + if (invNbr != 0) { + if (start) { + appendable.append('1'); // e.g. 1/s + } + appendable.append('/'); + if (invNbr > 1) { + appendable.append('('); + } + start = true; + for (int i = 0; i < productUnit.getUnitCount(); i++) { + int pow = productUnit.getUnitPow(i); + if (pow < 0) { + name = nameFor(productUnit.getUnit(i)); + int root = productUnit.getUnitRoot(i); + if (!start) { + appendable.append('·'); // Separator. + } + append(appendable, name, -pow, root); + start = false; + } + } + if (invNbr > 1) { + appendable.append(')'); + } + } + return appendable; + } + + private void append(Appendable appendable, CharSequence symbol, + int pow, int root) throws IOException { + appendable.append(symbol); + if ((pow != 1) || (root != 1)) { + // Write exponent. + if ((pow == 2) && (root == 1)) { + appendable.append('²'); // Square + } else if ((pow == 3) && (root == 1)) { + appendable.append('³'); // Cubic + } else { + // Use general exponent form. + appendable.append('^'); + appendable.append(String.valueOf(pow)); + if (root != 1) { + appendable.append(':'); + appendable.append(String.valueOf(root)); + } + } + } + } + + private static final long serialVersionUID = 1L; + } + + /** + * This class represents the ASCIIFormat format. + */ + protected static class ASCIIFormat extends DefaultFormat { + + @Override + public String nameFor(Unit unit) { + // First search if specific ASCII name should be used. + String name = _unitToName.get(unit); + if (name != null) + return name; + // Else returns default name. + return DEFAULT.nameFor(unit); + } + + @Override + public Unit unitFor(String name) { + // First search if specific ASCII name. + Unit unit = _nameToUnit.get(name); + if (unit != null) + return unit; + // Else returns default mapping. + return DEFAULT.unitFor(name); + } + + @Override + public Appendable format(Unit unit, Appendable appendable) + throws IOException { + String name = nameFor(unit); + if (name != null) + return appendable.append(name); + if (!(unit instanceof ProductUnit)) + throw new IllegalArgumentException( + "Cannot format given Object as a Unit"); + + ProductUnit productUnit = (ProductUnit) unit; + for (int i = 0; i < productUnit.getUnitCount(); i++) { + if (i != 0) { + appendable.append('*'); // Separator. + } + name = nameFor(productUnit.getUnit(i)); + int pow = productUnit.getUnitPow(i); + int root = productUnit.getUnitRoot(i); + appendable.append(name); + if ((pow != 1) || (root != 1)) { + // Use general exponent form. + appendable.append('^'); + appendable.append(String.valueOf(pow)); + if (root != 1) { + appendable.append(':'); + appendable.append(String.valueOf(root)); + } + } + } + return appendable; + } + + private static final long serialVersionUID = 1L; + } + + + //////////////////////////////////////////////////////////////////////////// + // Initializes the standard unit database for SI units. + + private static final Unit[] SI_UNITS = { SI.AMPERE, SI.BECQUEREL, + SI.CANDELA, SI.COULOMB, SI.FARAD, SI.GRAY, SI.HENRY, SI.HERTZ, + SI.JOULE, SI.KATAL, SI.KELVIN, SI.LUMEN, SI.LUX, SI.METRE, SI.MOLE, + SI.NEWTON, SI.OHM, SI.PASCAL, SI.RADIAN, SI.SECOND, SI.SIEMENS, + SI.SIEVERT, SI.STERADIAN, SI.TESLA, SI.VOLT, SI.WATT, SI.WEBER }; + + private static final String[] PREFIXES = { "Y", "Z", "E", "P", "T", "G", + "M", "k", "h", "da", "d", "c", "m", "µ", "n", "p", "f", "a", "z", + "y" }; + + private static final UnitConverter[] CONVERTERS = { E24, E21, E18, E15, E12, + E9, E6, E3, E2, E1, Em1, Em2, Em3, Em6, Em9, Em12, + Em15, Em18, Em21, Em24 }; + + private static String asciiPrefix(String prefix) { + return prefix == "µ" ? "micro" : prefix; + } + + static { + for (int i = 0; i < SI_UNITS.length; i++) { + for (int j = 0; j < PREFIXES.length; j++) { + Unit si = SI_UNITS[i]; + Unit u = si.transform(CONVERTERS[j]); + String symbol = (si instanceof BaseUnit) ? ((BaseUnit) si) + .getSymbol() : ((AlternateUnit) si).getSymbol(); + DEFAULT.label(u, PREFIXES[j] + symbol); + if (PREFIXES[j] == "µ") { + ASCII.label(u, "micro" + symbol); + } + } + } + // Special case for KILOGRAM. + DEFAULT.label(SI.GRAM, "g"); + for (int i = 0; i < PREFIXES.length; i++) { + if (CONVERTERS[i] == E3) continue; // kg is already defined. + DEFAULT.label(SI.KILOGRAM.transform(CONVERTERS[i].concatenate(Em3)), + PREFIXES[i] + "g"); + if (PREFIXES[i] == "µ") { + ASCII.label(SI.KILOGRAM.transform(CONVERTERS[i].concatenate(Em3)), "microg"); + } + } + + // Alias and ASCIIFormat for Ohm + DEFAULT.alias(SI.OHM, "Ohm"); + ASCII.label(SI.OHM, "Ohm"); + for (int i = 0; i < PREFIXES.length; i++) { + DEFAULT.alias(SI.OHM.transform(CONVERTERS[i]), PREFIXES[i] + "Ohm"); + ASCII.label(SI.OHM.transform(CONVERTERS[i]), asciiPrefix(PREFIXES[i]) + "Ohm"); + } + + // Special case for DEGREE_CElSIUS. + DEFAULT.label(SI.CELSIUS, "℃"); + DEFAULT.alias(SI.CELSIUS, "°C"); + ASCII.label(SI.CELSIUS, "Celsius"); + for (int i = 0; i < PREFIXES.length; i++) { + DEFAULT.label(SI.CELSIUS.transform(CONVERTERS[i]), PREFIXES[i] + "℃"); + DEFAULT.alias(SI.CELSIUS.transform(CONVERTERS[i]), PREFIXES[i] + "°C"); + ASCII.label(SI.CELSIUS.transform(CONVERTERS[i]), asciiPrefix(PREFIXES[i]) + "Celsius"); + } + } + + //////////////////////////////////////////////////////////////////////////// + // To be moved in resource bundle in future release (locale dependent). + static { + DEFAULT.label(NonSI.PERCENT, "%"); + DEFAULT.label(NonSI.DECIBEL, "dB"); + DEFAULT.label(NonSI.G, "grav"); + DEFAULT.label(NonSI.ATOM, "atom"); + DEFAULT.label(NonSI.REVOLUTION, "rev"); + DEFAULT.label(NonSI.DEGREE_ANGLE, "°"); + ASCII.label(NonSI.DEGREE_ANGLE, "degree_angle"); + DEFAULT.label(NonSI.MINUTE_ANGLE, "'"); + DEFAULT.label(NonSI.SECOND_ANGLE, "\""); + DEFAULT.label(NonSI.CENTIRADIAN, "centiradian"); + DEFAULT.label(NonSI.GRADE, "grade"); + DEFAULT.label(NonSI.ARE, "a"); + DEFAULT.label(NonSI.HECTARE, "ha"); + DEFAULT.label(NonSI.BYTE, "byte"); + DEFAULT.label(NonSI.MINUTE, "min"); + DEFAULT.label(NonSI.HOUR, "h"); + DEFAULT.label(NonSI.DAY, "day"); + DEFAULT.label(NonSI.WEEK, "week"); + DEFAULT.label(NonSI.YEAR, "year"); + DEFAULT.label(NonSI.MONTH, "month"); + DEFAULT.label(NonSI.DAY_SIDEREAL, "day_sidereal"); + DEFAULT.label(NonSI.YEAR_SIDEREAL, "year_sidereal"); + DEFAULT.label(NonSI.YEAR_CALENDAR, "year_calendar"); + DEFAULT.label(NonSI.E, "e"); + DEFAULT.label(NonSI.FARADAY, "Fd"); + DEFAULT.label(NonSI.FRANKLIN, "Fr"); + DEFAULT.label(NonSI.GILBERT, "Gi"); + DEFAULT.label(NonSI.ERG, "erg"); + DEFAULT.label(NonSI.ELECTRON_VOLT, "eV"); + DEFAULT.label(SI.KILO(NonSI.ELECTRON_VOLT), "keV"); + DEFAULT.label(SI.MEGA(NonSI.ELECTRON_VOLT), "MeV"); + DEFAULT.label(SI.GIGA(NonSI.ELECTRON_VOLT), "GeV"); + DEFAULT.label(NonSI.LAMBERT, "La"); + DEFAULT.label(NonSI.FOOT, "ft"); + DEFAULT.label(NonSI.FOOT_SURVEY_US, "foot_survey_us"); + DEFAULT.label(NonSI.YARD, "yd"); + DEFAULT.label(NonSI.INCH, "in"); + DEFAULT.label(NonSI.MILE, "mi"); + DEFAULT.label(NonSI.NAUTICAL_MILE, "nmi"); + DEFAULT.label(NonSI.MILES_PER_HOUR, "mph"); + DEFAULT.label(NonSI.ANGSTROM, "Å"); + ASCII.label(NonSI.ANGSTROM, "Angstrom"); + DEFAULT.label(NonSI.ASTRONOMICAL_UNIT, "ua"); + DEFAULT.label(NonSI.LIGHT_YEAR, "ly"); + DEFAULT.label(NonSI.PARSEC, "pc"); + DEFAULT.label(NonSI.POINT, "pt"); + DEFAULT.label(NonSI.PIXEL, "pixel"); + DEFAULT.label(NonSI.MAXWELL, "Mx"); + DEFAULT.label(NonSI.GAUSS, "G"); + DEFAULT.label(NonSI.ATOMIC_MASS, "u"); + DEFAULT.label(NonSI.ELECTRON_MASS, "me"); + DEFAULT.label(NonSI.POUND, "lb"); + DEFAULT.label(NonSI.OUNCE, "oz"); + DEFAULT.label(NonSI.TON_US, "ton_us"); + DEFAULT.label(NonSI.TON_UK, "ton_uk"); + DEFAULT.label(NonSI.METRIC_TON, "t"); + DEFAULT.label(NonSI.DYNE, "dyn"); + DEFAULT.label(NonSI.KILOGRAM_FORCE, "kgf"); + DEFAULT.label(NonSI.POUND_FORCE, "lbf"); + DEFAULT.label(NonSI.HORSEPOWER, "hp"); + DEFAULT.label(NonSI.ATMOSPHERE, "atm"); + DEFAULT.label(NonSI.BAR, "bar"); + DEFAULT.label(NonSI.MILLIMETER_OF_MERCURY, "mmHg"); + DEFAULT.label(NonSI.INCH_OF_MERCURY, "inHg"); + DEFAULT.label(NonSI.RAD, "rd"); + DEFAULT.label(NonSI.REM, "rem"); + DEFAULT.label(NonSI.CURIE, "Ci"); + DEFAULT.label(NonSI.RUTHERFORD, "Rd"); + DEFAULT.label(NonSI.SPHERE, "sphere"); + DEFAULT.label(NonSI.RANKINE, "°R"); + ASCII.label(NonSI.RANKINE, "degree_rankine"); + DEFAULT.label(NonSI.FAHRENHEIT, "°F"); + ASCII.label(NonSI.FAHRENHEIT, "degree_fahrenheit"); + DEFAULT.label(NonSI.KNOT, "kn"); + DEFAULT.label(NonSI.MACH, "Mach"); + DEFAULT.label(NonSI.C, "c"); + DEFAULT.label(NonSI.LITRE, "L"); + DEFAULT.label(SI.MICRO(NonSI.LITRE), "µL"); + ASCII.label(SI.MICRO(NonSI.LITRE), "microL"); + DEFAULT.label(SI.MILLI(NonSI.LITRE), "mL"); + DEFAULT.label(SI.CENTI(NonSI.LITRE), "cL"); + DEFAULT.label(SI.DECI(NonSI.LITRE), "dL"); + DEFAULT.label(NonSI.GALLON_LIQUID_US, "gal"); + DEFAULT.label(NonSI.OUNCE_LIQUID_US, "oz"); + DEFAULT.label(NonSI.GALLON_DRY_US, "gallon_dry_us"); + DEFAULT.label(NonSI.GALLON_UK, "gallon_uk"); + DEFAULT.label(NonSI.OUNCE_LIQUID_UK, "oz_uk"); + DEFAULT.label(NonSI.ROENTGEN, "Roentgen"); + if (Locale.getDefault().getCountry().equals("GB")) { + DEFAULT.label(NonSI.GALLON_UK, "gal"); + DEFAULT.label(NonSI.OUNCE_LIQUID_UK, "oz"); + } + } +} \ No newline at end of file diff --git a/measure/src/main/java/javax/measure/unit/doc-files/momey.png b/measure/src/main/java/javax/measure/unit/doc-files/momey.png new file mode 100644 index 0000000000000000000000000000000000000000..e9209f8be8827dfc95e51e102038185ee7912069 GIT binary patch literal 151854 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
;lze1;qOH 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 KQhLKI^nU;pjXntg literal 0 HcmV?d00001 diff --git a/measure/src/main/java/javax/measure/unit/doc-files/unit.png b/measure/src/main/java/javax/measure/unit/doc-files/unit.png new file mode 100644 index 0000000000000000000000000000000000000000..072dd8ee567474369edc42cea90d6c23487d87d6 GIT binary patch literal 215249 zcmX`S1yoy2v^I-Vw79gm1b25RZl$=p7I#wIwYa;x6}RF}@F2zQ=e_rS|H{fr z)+BRgpJ&VL+50&W%8F7LsKlr+FfbT0(&DNxFz`|^FmQ6nNbe&|SZDI@A4n#0QsOXg z|GjcMOOoD4P#mOnoMB+l@cw(l!lY*c-UmOp$S6pBSVF=6$jYZ`5Hs*TMCKx)?ILDx zYin-j0wd;RZtP-iM(J+tVnwNLWlkw2qo52mqqBp7p@fkU7ghIIIqh7IGlzJd-#ry` zLk%(hf)Lo$Pc@ z3Pz9J-oBTnSBOwk%S>Ni;6CddvL734{$9WQBazQx;Gl*)_q#@A=iSN)$)jRrT;of+b_Z2tn2cz`XgAggS)&?tC zHXdLw-32Q4$@Z*{1`+QtFNH&CeDaqro?3B`{HV)Ug5tLRvg|e*^$z2Vj~Uc#;dKu{ z9bhBe6BJW+ot|srE?;Ekl&-Fibi1#Dbq<`K9U#yr#W9Hv-I}f4$U&!u_lY03*Rgi^ zwdz}5I-!@@h-l|HJKfXbv_kAQ_lA_xtS1jNj5;q;=c{NRneL^HBY5AZ;xYSfyw+g4 zV_6yMpL|>^Xa(-Pb(^;`*vTC-!o~~#25Sr#{l{KPE$+4 z_=g)h8C~)g-5SDwUT~0srm&|3Ab$dUD z+xy~sR_}_S;8VeE#w%#ml&zuU7Dodyom%w@T1Z`C2C{Ex($JG-VKM%K4GcFSWs*qP z*6%rtYj*%{$KGxz7~PVCg8(#Cy5NxT9Ia}@;#tAq%?VRsjNcsrjA@c`$r(l7?>E>Y zl$D(NF0IgHiyY4ADz9p0jUDAUK6Y9tITZpus~w&)AyZ4r-d5J$p<8)E6ecrA=xDx6 zU@|WyFE8)z*sm9*>C?_R-D0XfHjhXU4qS9WQ3X01+{ZWx<7951DQrvgq;yCvH6Oq> zm+^b3Um@dl`;U6LKQlpyXz#!p^(tLnk{(z>4Mq|io>%>!4C{3XJ6?~+=UrjhO`<_I z6AuSLfAA4tIqFDLcEh|n3{3EG^1~_NME~@ef(ICpRaEydb`S42-;UozMl+2YtSV=Y zlR)U_F2Cg9+%M{3J-%(&`cL}bZTkPL5|*%z$b520Q@S&G4Vn$w64)Y8|Kw{$cwc711rcj{F3QMJhJ=!1D z;<;VqMOQ9`pICVQ58b|T{hb7papU4`VY}ufu$3J0ny^G)H~0?xpR?>|)OqLTlg#(| z!`!t7c$n6kje0?`|M~kiPJx`$UOW$Z$J-}1cJvan*8B>QaF`!BCRCDW=j-~vE}I_s z^rC0&BgAo$=gnmd4y=BCTVItU_T=ZSJ59PmMst78+R?5+ETEbaJ%R%qwV`3&X=d8m zPpc!EjPCnRDJLh6x_MAsC_3C&#bpfJ2Sl1V{pSWo|G~m^KZ2q^#5i;WSD_|KJ864{&oCgkK6eb#AbV~WR zX5SC^YsV~MJT1A?C!YM73I0hTxFiElo9X)K8!3b3sJzUQq4F;&5i|d4SpD?T9lOT(-!b-t6NVbXN0bPibV&lwCU>%U-2%2bVTj01Q?}m9tholke4*}@Vq|+0F z!s(}oB~OrN*lz@7Wjg8^i_(zfG<~ibug$HM>lZ4Z?ch>Yba88y85)OipEfC}f~23{ zNG|fs5Bb{c(0T*^2pO5Bc>Mn>=fG{e!M3k|Q~roJ&G8ovRShP{cujfl$sPNX=W5*U z6IyF zB2)H|beFWdt(i{;VU+=o(?q11E4?2gv->MutQ?UO8o}~!eN2v#xG?pC=;q?^6m}JsU2Qb0PI1o)^ z2lccfb480~3i|_<0U&Joqz_J%B{mF37+fAD$TP6y6r{?cjI&rsCz6zZdUuHy`6&B8 zL|IbDf5V#LScb(8Ike1U=+_B|Jo8j?FcE^d-68SzvrTp;aK_F(lO0`KYZK%WeGv8^ z+G6rxxKM=MKW{eyi~MXfeyu1z@nYc&FFHB6K9PZu9j3jCo{JX}E?c)`S!H{l{9=CW zZGVA>@L9Dx4-kgKcE5E1RXRic#t{QM;wXALV*PmDs=yMXf*!fG&ot25D(tjkH_oM# zo4)Gh{ba|$ie$6yBPeKCjxhE>jvAicK$?h63_|$66<~Mm=1ncM&Tyo=QS_)Qq}?<1 zQUsYgu%F_U_hlZ7b**$;v&+a#<^o?8+@%p zFIwav%g>?4g^Y{$Jk&7!v8nnrA;Svro-;5s{Vjv3;qD1cHY0V3#w|ZpBg-~Q?5BVy zG~lY%2K0aH$!ps3T|=wn{I2*C@bU=NBEaZUt5we9Hrb$uzxnyJteDCsA-^dR-~zGr zsVnmemRG}4L+EWa5teAc!z+RL(sx_FO4(oQYyQ&E4KRi~iUY;I;SXS6Y!oPn{Ugug z+E8RHzyVQ-4^11!?;}xhtlWazgkTWn=HcSaKQ}CT*w65ZAl!(S`kYWEaHf?K9C7xTc7N8)m2bS#;MY+PM~OLP>FvbtS8`sUJ6l$P=D2$ zb8Y7|A=Ozp5l<|R)o@0Xq4rIWWW*2`-Q*uDqnaw#vEC17C&02>MJpTuehyB*djbfi z0b#}3J9F(8v1!tPD1M+%!Cw@p!%gMBft`g53jvZ^9u!26flPC$@@M!~Ae*a>K7Qp# zyMg~Qv-kWZ9A}cZVG&^Z*RI)2=St$Wy!){{t|s8+NOZMHU89kvc2U>wA;mwf`+2-u z960#3`$3`Oj+P2mKwl~EPKVnN3B~OZD_2nUb4Rm&=cB!q z-rpau=}dYmds?t@V=VC7y?~_e57yC#lK1NybMOb7_|$8r=uN_6v%Y6DuF-3Kgs zeZ1hPt1wDOGLk2HYsjKoMk?%i9O1c9-~W;@jvj4262(e|`0oX))^D7POfALRW2vCQ z7@%01&OM4Th8HZEMqtaYx`bssPXj&8A?SD=y55tJ9b_r&Zw*)+`~lk-U|I*CR*F(P zY?hueT#BS5g&aj`$wI={u23|OZ`J|JkxVB(DmXve@OML7Kvi$Gu ztEz1Jfsp)dJZ-8$VfYY2*T;!vYsGl$@X^{H+E?` zjgM7=QefRg9W5+))RX2t z4N38xj(+brb{z9D7r_rJdsazI;0)XGvR2SiPF?d`)Za^J0tc>yF2$UOXnh+8w19z; zptKC>LYqIx!AvK@8D95m^e)jvS+C;9QZ7{lA8ddtA`L2mGl7uX(+-&&JXvcjx6ak_ zmr5dZAU;JnCmVjQ-h*|<0?V{3pmC~pz3JVRAk1l{zey5z!Z5H$>r9#@8Auo#eXtTg zyQ4_|mtf9-vp+uLZ+A-BC~V#h0Ibt37y@iM9p=0-s1Ow9I)VX2rr4m1|H3xZ7wYZv zw7RKSC?Y%LSXlO{qLCs`vf~Z+ZpN{VH*b1^{~y(&5_tUYBF{JG%9J3n;4{4vL)tQ9fs)zm;rPf zbT}1Y3qGeGC(wSIs8d&oe}wc-Q7xqBL1AMS5ydQL9gtRq_IJuK zVSH(N6WKdh3~9w&QX$fXy^1wXLRH3kxQphp1V#+io5(x$p1Ceed0f}`jAmm5@ zs*iF-`qOCrR9*M01P4X}Dim!E@TV!ZjB6_3$keeN~p$p`Y@TVdG zJ&BAXT5Kh!!}3r-QcyBgjPRsRTeTx9DqxFlXf2FHmX=7Capf{q?`yY`8fY^p z5d$=jzzTSTg>%vCv7zM_4~+ku&-#8ga04SyyTQqfvLT=TLp{6wAR?LOA3^;D=Zd(o z&$ZAm?MZ-hYt{Vmt5*}D9xWnnurnrvlpSGAwX5J@4Ku}m$o!S%-I6r~neR)fLjqJI z>zIg!6PU)4sf?nRb-*9jyy5uK;dPR!iq=~B{Z8~Y^R0=yp4Oopu{7P+{M};N5FUt7 z`bXi*b3E6^d?*8^=G|_75&x!0hz7i_2H=-F@xUKH-w{(^QyUN1hRezirz>KA)l$Hgf7T54&9ld-?YJ!8shy^))ZCZd~jFW{a<-Lm`k}0+7 zMdWQ>foHgW7)wI`II!{ohPSsN2w3w4Wwz8882iKiM*aIH$yCv8OzF_%(ek@Ww7=#o zCp55u?EGMD{Qs2sp;Nbbd`_r`F-KYK^}4xsen$E?$7z)?XGiDltwf!eqF-krSu)byUdSYbO^Aj1R}9=>sgIU zY^)p&arNHPf+++yT za(*5H&dwVKA+MfGL_XIetT0ArpHI2tpo!WcVAg;?^JZ7Fs6Cny_|as02UL=8 z#2Ok2L_GXIi(g3-#5uka=H3)U?{eqnSCRLp(&Ft)CS`nJ=XF`PvAUsD$O>UbI3$h5 z^iLqMe2c9EOXrSh-LuWOt2q&+_bgMu;(f{73AV_rN=o}c*~cS~oInS+1Tvrib@cG} zP8YG4l|O~|ny6E=J8D`C!+73e7qp9Nj5n_?`M^?}5uYNv-XP5V`?%PZ1ut)X0c$dk zEn^pK5C+o_>KCh%k_gtO63_gF+~*T_)Tr0|8X-mTK(xY)zg!@0^p90l(;LVx;$wN+ zgvh@@5-iN1Hj2?`)7yqg;RROhxI7Rx6#9ux9pgHt%*#NBf{j2*N^4T6K|IwK%H)j? zu}idMi?xnH$CO7hSarT(n<%IY=?be0=v?UUxIGZA-Qdr+huAMFC795zQ}^sn;C)|2BohADCwgORDu3D|oA_2~ITmX6OHvntIY!sc>6#goyqY{}%(q z>0uL(bkeN&%|P@bTu?aBM&%hc5FVd0aLAFdWsBN4l2~Wg8}yUZ*X!N3$Lq4#vUXU< zvi7%Uvut`hNpi+p*ld_Rvy&jat_DzCcAu9MLn-9moR{SsX|EFem+T+BF4LR7O zs-WHH3qgU7v8J=%C+J1!?6g;j5V{q83-z(f>nDchLH^O18Q8CJN}_$E59J6c^}6d} zAI92x+SmulCH^+S2d|o_i=l5l+XRT8gvG;wLP&;LspdnHBO+2O=sDw(%t!0yTD90# zIA&Bb;O(-y+Gw=N+vjDbA+2#mv(pKMP zbcA8xD!efrIxc281s>8^=diYRP}q$Azz^^)8mDFt^GX@`;81LvIREilU|SLYw?cmU z&opQ$b%&}Du1L0!4`c%nL~ti7C8r#p^Ucm~Mwqo+y=1WoF4fUuCaAc2s12k92K$!L7Ke}gL3n(G1tlYWA2$=nH!YVT3p^W%Y`?-XN~?- z8;{796cR+!twW)()<%Hs4qrToq3GDKrO7Qv#w++`fmM0wVl2+Tr>zvwF4C#%So^?! zvOqjin*`a}iN4vOg8q>uOaXTMPiYs%d5A$2InX+taU2&yTD}ko*iEcFC+`Q;N1?U< z(RY{8EdsZ*Kdvlwg*wMVeIWeWHV>VfPn~fv?2nW|v}wgCl^CUzKT;vI1C%vx@<;In zgQx#*Mu28%<7whGm*uI* z8AVElAPUMtV!2?2TBS4=z>7%b?WMHl1i>k|VcE95sDfsax9lq5FmD}{Ei<{2q9Th^ zXi=ZW_E6Mk+}A3yX;?BsA@T`u#tla(ZRGEtb2NLk&p_WyHJN^)W!N5?n2@`cd4{=I z?km|Y8eV9defs&{$Z;mgoK5F2G*Ccp<*v#*+f9J(UagSN$jQO{E#8rbYO317VgJ?4 zIEwAzwUPAPw zM+r0_IsT4SNfDTO5a2vIOBi_bJo_#6TK?735Jw0%6XejHRwB$aq;+p--gsnhRpbt3G2ptcFv>(~P?SxbdBZ+= zTJO4E)MGW__@#dd2Y%qwv7@m{GnGM6L{(!)$J71AlcKM+`uZ`gE3QpukBoXFjxlR- zbA#^#^{&~Rv#Z-OcnsHi`A5>tlgTx;F0Z6_KiMe|h$3G4^9+q++`J{9dX`<*o3HyS>1cip`=+&=hUd}!ZV%_3iV%E~Z9 z-X`M)pA%Fx;(G?Veq=uZCH63}7gM*80>@}!Mph3h5X>oO^T7q{c53nw!PKm(=%Z^L zdBP=SYDhzlK>}Jr6B9v*V4PvC*~3EkNVUZ$x-D9^)xihUM~PT+mmn zc4&Pz4WafniiM8EQ=2;AX*dR?b838cL>wfz)p|oJ?G6anDvcVBAkS={g?5@?E|h!CYULE!NZ-rcnUBt4F=d_5d?R?So+W`#&K%op;BA7#Q|V~We7 zZgKQoIUnYi;3W1VzI%&cXlnTF#;Y0v zO7AOPLLj}Nqu1lJ?G%%Cb+^3mO><>R;Wri81oP>pX|6aGe5{0t(&k^Xkx2rd-B_&I zC8IgoT@%cS1HJg|&fKawZMs?C*lkR-8of|fk1~^ zq3cU>v2{2V)8)YbwM&&)I^GKw?+3lj=ZVd|6T>$?|4TyuUW%6)iq2hFkF?{bMAG$Z zbEZBYVIYmVnODaB_R$J+n)S$^0+=7otlI?;qqitvQ*L)CtwUGqd#cc{{wtT_TkeVX zV)=&=boAYF{G!5&s=mxJVmJeTq`q0KC5P9W!u{Kt?l-X;=AF#WdqAF|8 zUssl0Xq!Zm1dbqu+bgq}bF0w2JA3Rnn;dlx{t`JiXVY@Ycf!q|NI%L3md=Y%IYp2! zAYozA4SnSs!2gPyfcz&mPc|V$=tQz3hjHvCwu4W2r!%*d6>%}5*xC(YVkJ;uidVoV z-BC91TBZdIUhuVock{|_67Eke$4Auv@l8onCXa{jaqWkJN5Z6?=S43oESmzeYM+F= zByy~EQ0IYAkkVq~C)S##{n4pcrUbJ=K3>nzCSRnQaJg;;km}5)V)y_k9wA7dg1UZ6 zMMG)w8)~FLIp7h0Rc!<}qL4!ELMMS+o^$!^IeB8*Y32rCfOm>fd`Xb0z~Z6N6t@VJ zJm1@+LqM{mnM<9u@OF=?@{XzUHkIt)m6Gvyc?r;ohu0I6j9t)}Ao zX>>2$IEbxl=yJl+Z5ehLxG+*aW>LcB4WTi@X?$;s@EEJuzSrJFLE+fYnrGjea>Ms{ z(%k)GTL|{qCE5IIPWgOsLfJ{kZbEO33Gp85_?v|VdwZ8Nz#HzD%!z1atxRp2c@iys z#Iw0!=6@sN6o-a`L)Qwd+3g6ligO-CWa6x`%O3Kqxz(X2lTD7^MKpaQos65G@DEBR zE}-qdr@>szDS>Wnf5?$$VJqYzM$q<0ckD4k%tm{>3@YX^abgZHWbT4?F%X66w5U$E zn?9a@)WYnJuHQOEnL&%Z3MhUSSnM9*xeZ4)#gZhW4Z^OPvJL4E{*dZZ7aNZ3>m6m? z@$dKI^>~q>j8j?(-ND3FHd5JVwKvnN9t(I`nb$akZ;Y{ei8(i9HThqeGitQbZ8515(vJ{vuGpk#~tgkJ0j`J|gUlRFeG-U&VWCumOZ2dTW z4JZ4bG%leVSds*h=JH$c$yBaJx?U()+>3MvDVU%rrq-~AZPBOb2qEGJ%bNor|NZ9;9Kwqzm}hHUL8Z!p}p zEH>ogYswX#ZNvIT6DRmj4%zAW`7&!fOC5;Qchmf8NQ+cJ4cEdGH}9GhIhy?R*H}~f zkRefTD>Fg`nA(>4y)lkLjX08{x@Jy1?+(Z@yAep)77&fibP9bh+1XQDp8J}=V5=rc zn|naW%PpG)9MsMGn*;|xM2$wS-a^JbKcBZr{SQ4TOd_k+sQ0OdHw>IeMSw~bB9d(W z{8;_Q_ul&G9?N-q$hjW&e}1ntKyAqi+r2Ij8#M2Yh}M&58nyj>-7;iXp4i4yzvwFk z&ew`%?Cr7+41B8}X3L^Em~UNy=}RO$f@1UM18UCAD-@vCn$sAT+MC8NL@F-GRF^`t zjhj-yej}y8*!p@c(PBW7U&yFnN+KU{WSmCQJJ6LmGWrj`2<05xBjh5x*`SN|NBc>D zY3Ci6P=G7z?h6t{(l1n$ehHg$$7n*VC?JVB&ZUd*lM zHO~#`gs+)Hd2xtLL;F#6xBc%F1FX8%^1$S$s5|4%7DK4+8Yzk+kM0&#&x$R5X}uUI z&K^rhnOlbEDX#5v`g<(W@$mx~^GCBKCp$5ZprB-F=AiHSi?MH1hF_}wcpZKM3bk`DZ)$T9-{zS*? z$~kerN6bs7@0WGv!j?7vo+svsGWr2n5vVFFe4YcQ9uA3N)%;R8o&A%R3~lw6y@+l0Lzo+S%3>;6iZu>b3*Bd8)uCvC4 zvx_22G|B2G5{(0dTa1am1)OBl@Ps+ztsoR8-cK9XrAJ+#R4j$HH~fiY*42^p54vWZ zy>D!`_U+ZNjFAUQRHbQ)}7*ySrb1vJASIl@HN~% ziI^R3ijRn7FRk%B*hE$!P!Bg(IlJ7$*xtoi6-8(dR4lpsjkED)`hKKf>TfCfMB+e4 zSYlr*^cz-A4YdajqV76r73X-av+^2J$0hBR`Qlx-W9WQ+zlpOu;pvzBuisy~n36Ue zRz{$|clzL_vDg%aDF>K!k=riOsqoD; zYnq!)4ksDQ5`%+37kU)5A6*aF`unHfc*7PTB=HX`2%7--uhu9>(uM+N$%Q5836H+O z7mcQ#4qT3MUkU8K$MAHGSZCI0yAQ_}adUHDmxX`hAaCL4Y5r(>i=K@)Ct5Txa+zrI zreFApr)Kihkh$iS_Bkv}`w89zIm81VhhgZ_{z4J2H6q?<{ca90gkmx|y-v;g>4%SF z_7lzsZ122b{I7J41-9tnfBjf6Vh->#af~Q4aUHLZ!qZ$Bp!YVi%=+o}I!f z=dtRGET~VI@N>T~?GS#$a~{%em(s=u8>t>+@uACQ5}Dtus1;`keMu?A5If_m9y7h3 zqWMl>6kA_fG+%+x5YDxLy#}ZV>1E5t#h7MtS8MpiuzNXU~+j6M?z}dOyA-w z4}WJMJ2&4FOPiiJ_1r~VMFuzJ`)`UWU}+tre|+Zs95TPo^vAifRpyCH zrN+wONLA@HTGW#rJATei-+YA`eto4fVox(ox64yN*jD4)J|j8&F&Ppt_`p2I^Y{vY zOeMLsAn$n&@nlinAZtr{kIii3)KE=xK42``FUMBTt&)gKmerZ8u7gHJ3=SGzP!a-f zddW)|?BOseEGR@J>Aj=YtlBQ=U3DlE^cxt&ndUCADl*b1ZV@Um0)SfvoMleksJv!%#okX_*-ItEToWaR^5~1Mq(QKSFz_4k>dcHaB z9B!b|Iu|kmxm-9+uy0h`7aod{KPl`7wc<76PD@;$3P|+II*LcQ3f8e5@il_8@c4Ly zH-6$zgfJfOUrLBji+W^IOzTpo9uAY3dFE2sC7ScPzHsF{tyvNkN5E9va_@Tl@iL(K zIs8-YSaSOr_~8RVP{e4?)=uaM5$MJ&4d#oL;H;8;zz>`{nt@p378H4X-nCtmYb4vd zk039fj@0@goe)xNjxArgXtIrFN_r3}V_7uiWPmCC)5mGfnBnM`OL?oN5FXV%f&>gp z%WCRIN$EJ{Kx01h#vH1DA$JV4SUV^ogZK`Px2AQfMkSo!kMg&0sn`vS)|W0JJVm~$ z!SjM&evG=%I>k=vy_XN-7*5HozO1Gk4V|PiQM=Sd-iXQB$u`JeMiD|F&1Vx=S-R!p z!h@Y7Qwq0nH#Ti-jkgXDQG;!d zPI;xC!Wijba=veG1(HLhLKsJ`eM9s5+tuF~?@9TIa{IiMEI33=OQeNq19fF4xNecR zXO>5J=-}WIw+K|ZM!l$+=3LPDv+DgF%s=`u=&wyK=OWZt7zj$bd=8rPfE=|u-(q1} z#?;ZYB&^Ldw#Jb$%YFn-w2)xWZvBXBr15l<-nWz+A{EbZRY$$$rH zLqs_GD%V|zB|tF=P6ValqG1&;QlP)pnVO917ObO~P-N1j`Vn9X2*tqGu0B`#sKO+v z6>S=a&#eoQpGyWHg22+HD8|%7A6rCZ;XrU|1dNP>6Ai6@;`8>(5^3B4xlpAUkg=J} zY8HDegEVPt!oV~fN&1lLFB}_twtvHg2&_ni{5?3A6?eC)ID78ly3G-KXzcGv1Wn9f z<$DhTtH<0?Tl%M=8sF*GfKjR zF{4|I1*j$MW9)i>vLTGXgfyvmCVt;d)#Qb$-&Pk10D3SJHe<-*z!tEaV8b1#Sh^W+ zNf#b;Hi$Cuh>VT?f+&%O2g+e`1MU1!(jmt-m9sdeeFkzeECnnaqf*IBrxkH^P@$-~ z&TaXon2dm_J)+_xlx2WA)k^_I&<|sELr)KF9F)IA)bMJ>g^lYH0nO;9QaT%9&dj>r z97&uCflN`zzt}M>@ih<~O#pn6b?L)nI0c}L^es4cMaEwoiPpb%O=%Ir?r4Vgz(ugM zX9r*}R}tiO0Y7H?`gS2{&DzX1#a@F^433NwW8M&H$QhRrN6aGdc36i$Nn(Ph;XSn8 zm9oU#B`_J9o*{z78(3=8qQXOGx+Bh5*~}#!NT`#`%EEhtz%4v^5|SGD&O1MQyj%y& zz5>)H%nsFp+$;C*qy^a9OEd=wDr^$i#mosN?PlnU#^P!Rb;o&pDf%+q)0bar<3s+^ z{LCvWR9G9fVDzP_Kk6D2svsN9R;Q!uFWBrVTEOVApw?|BYE6^2-oeE}Z~}8?qjhkjAgTXFCI}G zn+0dF@ARYS1ebN@va;S?>!**E1nhicvaDW*|HpS8)@Q*9awLTiiyXX}LKT8t$0r}V zHi>WVF)dqs?KZQm8?C5T;7&QzkO2rt5)wG*nuVzJEF_~mis2w3x+-;C2z)6m#YMc) z?>;IGDzJg^Cq##3#b2gclpZ~*R;6?y>5_sQt9RMnq3(a@h_8&HjZ=P8f+hA?$6dbA z<+n2DTmI9|4Z*6L=cQ|bw=gWfi{R!7vP9K9a(tw2m)!>u zCD_V>m=|QonrqG0*S;5VOG{c7M)S3k3- z)=T@ul>5XdtAZbBU!ssy$lapXt^`X*Ia;^46)P@Jf>a{fl+6UYWdOajmMOMb*oI+D zn=CQVi?^`la4F9}4@4qs>|P*#^fQu1{Hu7d=CaXHQ+c-WWY@id-JUeH;yc>ri;~@f z_q5Qwr`SmS0mNA60;g`}YeG3#dnz4CrMSBD3z?foG9GjX(Yt;6>$24Ly*e&esVNMp z!;~W?ppL&Qzuk{{+gg|;lJxJnzH2^u%ejDVzP9^GBktju*Vz;8Lh$vDa{6s^J{y(M z%9$^07qu*`VZ(N8P_G~kRY;%fO>|-IW;f5+MaV_#xe#9QgySWl@!|Js6_u*dL{IO= zPh#m7>%QwBjbdCD#}pq2w}=~`sbV#}4Uv~{mGZC)*Y6naOw*6f`S=T^+lo%JKl2*d z#Y%rzesaM0-VporTGPpz@0a1$sR`WM`)Y94YRR#D1bw58T6w|7k(CN*m-&6(^^0LD zZNC5I`yE{@ZV;r+cLQ;5)a^}&ba?%wp?r1WmJBqz|DoyWOOE{=ggvJD@fu8LE7-WW z`rS%iB3r3cULwC_z)>6@m}!`|x2K8s`QKFFMI7cd4vnM}m&rgohQb`S1kMlutlAlN zsFw4nUe4!|0jdHaYnBrv$=J+SX@2(Glk!7=3YzPIL7Cz~3F+?w6h^y3+M^4KGD4w&EZO^#;prgX%f8A2|9_#90BUF?i)nri!4 z?JBn7e5=qkdVTLTIc(G5xOze5I>hU2>A$)3ZL7AiN!=pxS-lr{w%TID}YY!@J6`TM=KvH+#nB1y+z9 zwc610y@85t|9(DaHyP-RogT(Nsk`>-+1MaA*P%xFmVXJId=9(|8oVT?v(Wx*_1$A{ z`>sL4=!J-WQ90W94?i*cjzQFnGuKXELDk8|1vcpYptOWnytK;;#~2wzE3-0iQ^jm^ z#-HN;j(@l}rmA#BJ*`ZTI@~7DJLaB3CEvf%MeJPCuD6y4V-v|#1R{6z>x?>2bp|Zz zJP~Dj#CXMR9jzGblHP>l(D44ZTBwLcfRMOdt3F4TqJ6t9rO0ICXt%0tQ*-lIq%TIt?xqS~TXw~as+)fD7rm<9h;cArbQ>!FirLce1fyD{-};tU^+olH zc-zG^bN&A<@Xp1OnZt+Zvo2u7Lu_YjovXNIuGP8=Q5zbD?QqchR!~z_e zjY{dchOYu4*y1Yl-hq8rH}Riy4Yh36{lB~;gkz5=lWFvQ^%H`ZcC{Ye$dGzNkiDt) zVpgE|cLf9W0UcR`D(QM&S(FNP#;lDYQ7+kqnE$(M5!=u|Du=++5Qo;)eNseRuC*%W zPb-u68;Ynt?-!<-42J%Da4poOvxA*G!ngTcM{7&hA*D1x7R*iH_@#geOSz6&=<_cr z>%c~Z&(`PmbQ-(dB6&`s1P=uUSBS*i>+67k{f2{K*;ZIwC&r5VYGXr z^Si7pr4n=X19X%v?4aSdNPO4%hcMU(04}VleD@UeG0dnY=Up^Yzs^02LqS#97!&k& z81Ex<%RbHW*hS$iiIuvAL65~^S~!*Y;5D_il8W)tiwFMJeg2!-v?Mt)LG0pEL@;10 z%l3}qe=&`N!g0S7Q@{sw1hhkIx?;At=fc+x(CJkdf@*MMkhr++m(~&2U!NAdr>dx=oeN z(rUKS@4_3;Ut>^kqJO}DFYKx2OH+S29?gPh9Uf`>pP;fck!zivZG|o<+snV5X=C|u z4!;Qh$NBvzaNWXTlX5|uNzSdP;aR zsaPN@n&A+WI@VNvE?#_91a1H<0neDov!g$ifILH7U}-%Noqx!NjI?UYh#rgZe{zYvo1%W3OQ}D_&O{QeC~zT)0%6oX zVAL!KJ0Gi@Urvz4BLXf0CFFAmgj-?GJ3L@Rj$oL5U`Sj3agEKywP! zrMQBPg2o~5?inJi%@5T|BUGp+D1m?94T9+0IHusjTXk$B1D`Et>dBYfE4-}iI6{Te zj%GtBd_$Rcc=F2jT&IwlxS28$*ODaDW?Drntbn!eQu3{*fcJC!w@jNKKRd~Tp;DP$ zXahz->z@^RyQ`_hHY5m`P@9l=9!SE~H}XDOqg7{Y#h8!c2?y^9hiix~6^@9kns$RM zPVLZwO=0Zs@gSZhE^`Td!@dPfB9vT{P9gdng+Qc^exeyk>fg7^F2y3p$kLa^qKrxg zl@W6lzUMJw@c|DC{=IqusHKVTdY1J;b%VsR{`fA|l1Rh|fqi z664=5w=`2wKW{Cel&YkMC{)4rtqJG;b@Gyo$O-<6$*Q7PM*;Vp@mw=W8Sg==TIPKj z(n0S_Dqs{)U?*#GR*RX>Wa)U1TYtvOqm;>jf08nKMOGtcmcBbd1(Lhck=N*o#E#@i zqony+s`Xp3lxv*hf?!fJK-?o74^|t~u4`=aJlI3eh$J|f*i`e75f)#;Hv}KpR4U^X zV~rV6kJ7?D30lXeM4NR%(jNOB7%L!a$%s+DfI*)`G?^B2d9c0=ja=kp#m`*{s_rD5 z*bKdoCI9!o+ruf^w5JwGTQ`0ivsEZCK)yt+EN8_u3Q?)a1$B!HNVZH_;-XJa=j@0;zcVLT0eQI=qR9>e9HPpKkmc%heJ1vfOJbE-5_1k-QC^IeB<-3@5d~D%`Db^pR>=tVqfP>VlxPE*Vzf{ zWFWu@SU;5kI=PGlV+)C)aK&x%o{GRqfsq5TIMF2p?m(9%xvc>R-U}9_w+f~VYV3|v zl>$ull%~mp-D`WziyM)yhY)`bljbq*;!0=o`_n`B{1LDD=+;xEqcA zer3H}(1Ffrh}Uh4zV%OE+g(YUWotmYX6i8%JT3`Bltj*9?=wkF1&)T(x^9e78PfhR zZEKcGvdJ%F8_n6F)YT(x$+p*2oP0`gU=&@5Ph^TN2GL5FfO!cyU856Fj&2eTe3Ylk zE=-lm%pj?1S|Pj(Zw0R&xHGx>W+lI(`b8vsx(v^MkI8O7qg2nAU>;e>626Iko>Ev? zEVQuAq15(gk-)k>nhW7*2Is*X%~290pQiU;Q%T3ytcvU@onvJ~-v9T@r?NUBKI>?u zHSaHOZf#cooqcI$ff47cu=7$S2zCYxi+bfl+J1f2z5-6`CaB%! z5GhSvOEMdC{JgG%bsFmM2glgaoN4T7_Hiza z>5xk&9h(uP^=8?$jZOiVmcEKOf9#JXr;=2H0WD3JI&E07Qt(wo7;&r=P>Fj`yOL=8 z0TM=PQ!<;zwUEOcBU{sYqSZIu^S^bsX;MVWgKmN*??eLyhOvdQFbFD5VVH!Jl)zRY z*^qPR79I>srmU*tqYfa7<4b{5#)I_T&(#pl)Ul(HhfRbEHiW@vDy3V|9#80h2`x#& z6AG>GPeqX%*7TmSvD@k1mgf zO|ptAZzH!g{2BJ34Bk@V9HjJKBvg7{9(leFvzoo64r>YjDSd*nW~L5JZx2#>zT!u2 zS;{5go1vO!7%$^Q>m?piOl}K(b{zyL=p-94$g7pHj*FW`( zw@$J0jX&e^4%*4erbMT?8>VlG4A4;DRFp`{q(gd@_J`tYT@Z-D`&)? zd25}JlP}3;R<~&Bs$W%86YXrRQ1(7{h6|LwkuE-jfA&#a*5w*o=|u{ReS9V|Vt&ck z=y`P~TTRjj0j?yhUpYs^Fy%j7b9Z_^8{CL+rZ~k(Y&K9`MkIzzSx{)r9oBEly=3(P zI}=-+vEW#Umqw7qBVYVf)k+{P1ACDOaxlrca;_gd*Xiui9A>LpNmjB3J8&`buhzB8 z346lryLBW5x@~>Dp+!Ih!rH+(hw9OIDp^moHGl71OUAKPBb?deR>aNeji_O?-{h+j z6(hc6Ay%lmP4;WGQWa*wcZf`hAj+mRE0}MD{x0XHn>i`VGSin}R*y9A=NM%#%%a+^ zNGc+$u>w$Huxjd^^@+^eqWkLn1BvQhx0;htY4`I8&FG)z5;ih*=a38qEw+(l zw)Q`e7|skwmupUMZz|XrO%gRDJ-DrBQ2(x%}AQV4LTn{ zmm-9%D`%gOx{$KEHg_O)o@h@K~yknz@P*w9Bdl{o^lDSu7lGuYo${H8oclT{R1bJelMlbTJBBPf;3_XWl0>tdp-We7l z8JG{JmG?Qsi9lDrwWfSNqXv0H4A}Y!dEqq88b*X6B9{MpKL@a0C8=XC)X$s3KPO&# z5A1v2yQ+2!a&vPiGMkiJk7;aNHYD~sFk@F`yUun6*C3Ab&Q&l1$i_y4gOk@ejAI<* z3Sv!0f~xhMp*u1!tB!GHFx5Z?kuOd|v=q|eKf*UH z6`t(k+izA&?aOr)sMj-VRzrnBLytQpq3Fgf7%B>-@=JleBeEXYY2q50T6iF*L`^=t zQ_YjAC!yo$;xgT!HRnpTMuESroS1=~)L>XCmylm+$N9MpO%i2Mzev@+m|5XVjgCz83Le(%l>UGMSspdA{AVtk9&o!l00y&dL?Tm$(;`|esQiS&&CUJih-JRD0J}O5 zW`P(`%pkBPLUIhJmhab*E03lHpNveuER%IqFLzwel0mKb_gTC7n~QI98a^Z>BAq*J zl_quiQz?i{w3@?i{D7I%lJ{YgBr{%t*wm1|RKx~I#G60{1xs>@wc~zC z{}3DXqeQv>c;aZ{i__kFmv)7yz5hh|u_f`)&TbA#WN)->+M+>(*o3>x^73-Or5sgp zy8;(W@p&PT3v49Q7oUPol)Te6%h}R;+pYZHsF>LDD-ptd4jd7K!HmmBcXA zQD87!iz$x2@tjh|WM1T%)4EnBpYlsnvvfML{b`4!@LL*;K9(lv>xa)8Q#(JrNNZwM zfAb0(bFY~;Y5%SxP}len#ja>s-fyq53>cxk1Te;A1Cu@EA>1CU=gRfTJwY`Hpv~eT zII&r z$OS$MW|_>(Vw(`RVoAfzfD*4~$Z z4aa1m;)98a$t_7%JKN*5>>U`?P-30xw^UN%PC?yQJ)d9DvLP*g;)u~bTDNsnxH9|%_)xD;&Lqt$P#XR?to ziw&ohIw1waXCQ;GkB$5Tec)teQl)wZzr#+u?$m^tM}pH1pJ1{%2h)$oe{X?*-wrW{ zZ!syUPjUv7h9@!&_hJ;*47R+Y_FO=CLtLAvRn8H#>!p-ESv~!Cx z=5cjn8}9$dR;A(vWT-7;2U3%m$xgX^R|MZk_>Hmk$Rms4OW{jRct?h;1&`OS$2*S3 z1LRb^LcsL40_ZJhhS@n2ejXn4Fb0{MrUPYBu)t)=t{i>ByWsR8w2Ut2-(LPp7c1E1 zBfOW^evsy|9WT=eeSKP3Tr}m+xSgXLXh5o5WpiMr#$O4ZjbyZ#E_4V}wX9QTl-wxK zFG8yplmenns*{r^j_mHsq3#4B-Ms=>+pZn3AMhPvZ_>~Z=8Te60{!v5^ZodA#46qv zQu2gh2f}SX4_0ZYdAvgRS@CV^nyRHN?>w$RhkAEYo6oj5d2S>*Rv7o|WMSEudh(Gb z6QiRECUocdM_*Ou{^*$xGJPQzSTYJmD!HVux5UbUSU~$e01ha15Rc$Ahu4r$TSEmi zYV_L%OfS%}1kY#4sU*sBN{pL4l5RUgfgHSZ*fJ<`h*B4*8t;;Czf2?6u6Cvn6_r^2 z9LW+zWy5H_-Xw|x&G5s8gJ>C*_vV`!z()3vkDldLbetnK%-FrTXb--Il^vBoH;hhwVg3P*0+Y@L<32 zZ52jAXHL5J6empY*dk`?jol9qjk3aYtYt5Hzww*nE$!vK<_>DM= z5G(Zh%k$y!?7MU0430RmVe^A0%h>8zX{bt#VK?Xnfn_XnduD4a5L+9KIoVd}ZLvv$ zn7YZF%{22{rU}|kP?nRXvNxvmL49PCpuwB_^l>IuW$ueyv>LK0i>0@MU9yqVCca8D z#G6(j#$6v+p*T*oz}cgun8%F=unG3TPcV`zlD=$i%^|QG&z+&;Tb9TbN&MQ-mErRU(wWEs9S$bz(FY(~B{ zne%7Z19LDeTDEvkKgZ;*O5lL0y1YjDs+o_jeg+`{BXZkQ%Ines^aZu3jy5dAPLLz2Z|5y7^3HNOBnq$If4Fe)sp&*tvJdU1cM*Q;5>%T#VB5 zzBFa59w+yToJI_Jlb3#o;r=q^iA6{*Ni^Y)gq}(^z94kdavW9mn-%l4owokB0}h^w zcZ8VsL5qt!J2ooL(CZg{JwF_qfJJPn^WNkRbZhtuuxtQRJpUnb+Ryq6 zSYEVa6^&rSE?sAN_}#BIsXMDRr(u%}+UTwTwwF&odi5YTB`0eZ@-t=QU20{SGK@_1 zI@CX;tln{Iqn4CVE9@fEu-DVf;>6%;=a^xYF@2Z|R!!~!Db6rAv&(F;mzA1b0`g4c zBqOkKW2s{}W_K{EIeQz;Ad0eTC=kg-b#AmxtDrc((i`V>g^IO%PTAP=q-I0+jrH0nfgQaHuQM6vNRh3hGKL0H~XDLt7%(FKMFi~E9K650H+w%T9)w6Q@*;9KgQKo;e z(aVg{4x|4iICiqT4KhJDn9+{KI0Qfk?b7qz)3| z8YAwsWaw!px_?S=xg_HFPAoV_iwS$MMw~2EoaC)e5)9dQcRa87cXoEt@Z81XND7|+ z`3|eeT34%#lxAn`Oz(r5bvI8UUS{^Hj_6~BE~8uTCoQQn#5EF>vvtW6kB>8d|EQ+U znjqX)t?lJ2pdJh??DP1;rHvw4&t+PRL~k`jFgsV|FqXW~tyD;I< zzo3$ex|GCpnjyNblw^nnx?%M|2l5-;Om!*Kxpu?<-c7(k47tQqF2N4x^Vy;k zeJ>{>1(UM*_S&*hk}}iKyXtG)_*suLwt7TzH4k(A@1Y;GD$WO0US*!=`=PinV{q1H zO_p!SugphLk&upfl=_@;wG=jij6E_2jT<15@IMvvR2qJZXTT;DQ_#Z-qE@C^ih*(h z<3admrYKWPiuBHDVHFm;Nz^nX7c1vG#x^rG*dO*P6D!s?U>LBFsdT1SFWdmXT&Zd zoBB)+u3!0{SDnv1W0k!Hf*MFR8*j9kHTxyQ3*8XQP0Jkq{OrWr?M&08mJ&_-4@f#nk5{K@qcdnY%8jSMjkvkiJ>K#nFc# z;V6EqUUy|#HENM=xf!<6m>!t?7*D=((|4wW=!k8CyiGG;iiD-G&m3sT;^pn#!l;__ zojf6Hy*y40mX9|-x5CHIf7qtby+(=32tJW$qc{^nLP8RHAf@bfoPB@1^t+s#GoC(9MDWfj@E66l01H1;>cjmY1u044|XNhusfH9Bj38aU5ho`BPKL+P3RL@^T ze;ZN;Rt{Kxs-W^~ZbQ7Xv-&EFXUP9bi#3`B2+#hy{-fK{xDE^~V0lBY3kMl%bbCgi zTzVkY{wQnaVSeW8v2e&y_I2J!c;su{m^nx9#QKGA{XjWlwpp383&^RNxNM1YI(R#Y z_IKOjO0O7*Gv68<1JFrQPvX)ol(Z_-rk?&Y1tv}B3AB^1ucz#4;hN>IjX0kS2m_Yv zWM{6f01?(^Wm^*a9TX+XxC+^O7Qlm?3}e6SEcX#W;YNX}DUe7>!RT&=!6Y zR|*GqJa+3UBmiKVW~Dkc)6>(_-#zEqBiAe*^C%M=o5=3&?shW_M2{lScH1vt1jbEW zoCH4dv<$_e5IVtC(A@`YIy3Z|g{U+hhua7BoEMzyxsTXG8xOWKhs|+4(VYb8 zT+|qznd&?U4=$@C^Q0xFO1VP&MKxSpWoU-&x15|9Rv7$H~OVm>2q*TRct0Y0RfG8U&o5tCWk=QURIjS{U)lyn?!Jg&Jgp z3!E5ExHuj#J716W^c+wy@((<2Elh%sXbufaV2i;NlKge0CiBlT2CGD?RaIBW=-r1Q zp8SEF!ECkJhHm_fze?UG02Wk((OknrT))BW5<*P*tQbxK6X#jOk+kI2j(UxbB)zX)fUm7lcfigB^ZdSPiSz?qPSPYfQfv5gAqJD&+v zME)eQ;=caS+Rxv8ddlLejw8b^(+@Se8}L4d#gPvkX|^l(tClS~VlVwMpKXtw;?BoJ z88(yU7{_&QwM~qU4q~>sqO^^+mUqc*e$G?wtl)7QOQlHuZZ8`HlW?~2alYx>{Y;XB+^ZzR{ zTD0Jt6^_{X9SqnQ4=mY|hFgC(#~Gc%jG8c~$VNcDfQNq|+a(Wj*v6-!VK+U8BKZN| zW8|uJZH#&x`w)QbJ;Cj@zPB*^L+TS;1 zPXaj*moaJ}RL=FSY@oRF&0}c~sPC(9v|J{L2yIjHyCSG6VBova#_&7IOo=uti>49b zOw7MZ*E7liNHI7Y3wvfQH3F%?bHU_qsiG-5d(#OI z8^=98WyGqKYI*9Y{20zal=R%0iOu!-#a(6_{L&pNqkXIz%r z|B@Av%A_g-BO`$Fan%L|^wM@<>9Ra$iPeyyd~a`WpG~~1br^tw&w4qweE1hM;kQBL z7gz~>tlUHLTSxLZuIh(Xh90L@_EV&p`Tr2ienn55F*=G0@^>^zt9>25j}s)VvNU4O z#0*4Tn=oJ^up*ibmxBtwv%VgXkwK9TGp)^(P6ekIs%9}Bn;|2hXI!#zI%;oo##J|0 z$W7I*%~69W1EN~JW}@C`+cx~a7XUSXAD_}={jK3jN8gTu z9&getdnYUM!)OTW%$?)#tU`p$Egxf=@nvYeC#gvhLfle37t( zTKlu0^Bu!u&nq3>{!eSqu{|I-%G}1Q&DHX6kL{)CuKh9opU#weL1zT9iOPa|pQr3T zOM8#d`Fh7bsFriCZ-i3q%J^T)JWNo%fHM6at=-(+dBoRLVyj+OGfR^3X(d9;PS{W_ z@SXqXOqE_vM5alMKsmZZ^yH@>;V8LbmlN)7#Dy~8Eq%;hmLuAfWZYvJEfjC)IYyf! z<-8xIV`E{R#tm-?#zy}(DTs_<&5xi4iFzYvps}sv7Mm!o41O7X%8Y|9R4gsFVu*A4 zY+$`&sQ90{Kg2>4vo<^)IH(?1u`cyGZuES157xHG+E4YI?jmYt*9NzeD^)ZMTW7g^ zY+y_bBllOz=FY$j240$HA>dlb00hRJr^?ZY(}PE1|Np;tK3{EUvWcfrVGQ_HBwy`= zqze3*Zj#+@I3-$JN7yn>I1x|l9@C304h^9R_i0<0>`!i>(V zgy$}!xsbj^yqO;F2<$eN?nm>N?(U$Ij3glUEphqRug*QtR|Wsrj^~S5S}8H^3;bJt zk&D6DtF@PD|FN-`6(h+bYZaE$-D*&%%-Q6Yf9UD(RTyZADl%Fyf8BsoIvQQU0n8l& zC;C4RW*E-h>bnXqk!uMNNdt=NwnXQXLyg@lrb(MyEJE`ILd=`l;FPxG?H^;6HvWsA zZ?ao0$wOG*lPjl0FG_v$K=KTaP@@$xY2uhJ5S2$zGfVXjCti6K%#g{fcjpkKv{9g) z*|qR}`~*d$5n4OPFd8e-Wml@#PC{FKy4Sk6_om!!@ZW>(rgc0B$R!?xM+M}O=PDaH(nz!OQlMZh2ZVH*`M(9iE#nW&v_Vpz4FCXX{7)8rKOk6 zu!Gj_Mf?-1`Lgw?s%z?^|GZ-=kL~ZUe%jXD8o@Y5_l%@)`q12!LWgLKA6lk$MNMm4r{yJZjjSsEo4iV%T_u<@14Oav4t-TeF$ms5_`eR`Y0h(p+ zDxcsgbCb`k=vxzcgSBh?uPheN1(r&DdJhojq%HCCbG73wP@;@-+SLy zsP9^sGaS8hOpHTrZkQamg}cC(K*!bh=NJETh36+2r`A~aI=@n9s{uNjzUY{B6?l0( zp_8)={u4Zw0O-^mzVjKoJ2zOnF?hc6e;s>R$a>L9E!Kq4vNg1$1pv3&oh~ zKrH6?7XQCz61S~vntQ7k`yUcK`Fl6#7gzHtV#4u)djgRb*niG-p!Y3}Cj-1IyOI*n{|m$+{8_ zB0U@g+esC@I4$0P&M2QH2*5CqjWZ_vh2E4YIv99ygv0>0Ia;utZZXNWDpa9J6qs@S z+1W&V+@O`V+@8sl~Iy;yn1x%t376is^empS#)t=FW`B2CvCe* zC9wt7+)}p*7FE?O9UVXVtGqXU<{{j3bVKe_kh!rT$G?_ZQ4+!%gH7r8&?B&R)-IZP54LSZZhpPu8{N4Y^~;Dng8r8x4h#AqT)UuH>x4-Y?3=uOx&pUK z|K@HsDXQOrVLtzS2u!*_61nf3u=7o(D|!NVHD5iDmvfCaxikEn86M&F=&+Ve`O*tW z|$_UFS}k1ld5_O!q0Z9J$f}@NePV{N4nk7TGC7quT%LV zB~C(Evkq--Z#4rh9yaa~`K%|cPyrAfSt^MsO32lsdi4@ z1@}5`tX@9we>mHB$@nv6SaAOG@AU{@#>ZZNba7fSJCY93bRLJHr zB_XzUX(L&=xo2(my`JI8kj!d{%IkbqWNJa)i(Bd=sQU!n`y2j;{BJaP*Co!6&I$D0|} z3C*Lj# zMeRx!^leD{I``_^Digs+_t*9nllxDNg=fg=XXtLRyooFKJWcpynF$Tw@!Q<=UNNbl zOA=jc5A3$UH6Z|K)jNuvcP}hA3?TP-QC?w_4|y@Cc8q*n;e8PJZ^A`#pSf$&dn}ra zXMSlZucSopi;48If#c}S2AbFgW6VEVGI4O5f_On0quNwEMU`W4kDQh0@2^i0C6eKg z=IUvs5tnAElbEo)Vc-L{NAE})E8Ci~+~=X@GP!9?+(9qj?|`2PDy$8ejCr81(&QpT zoA(HisIV#cy;;c#3Fg>JPz6miOCI=(0qNyn)Yeuhkba#1OTzJ6guWls(PsQjR7DrW zsm*}sy=<;N-h6l_Mu>(Kxr5WyE_+K$GBDC?(>!e_mtkZV869){8qsljM5#A67g!@keO;zZ|~&ZLx!3`?(n;^ zNG@cFOv5gdu&q0@Lsrmd8GZkosh$hG=^N+i5x6~t1Z^|@kz1d%#NU5#&R7OMq0hId zx)|QOZA!YBE8kC1^e@R9uJVF-OOgM0g2mevVxSq+vPK7vqw3{Z>T?5pb4x%N(PHc1 z@XmIgMG6G-5vdKmUWsPI>ipnDm@{b3HES6NHg<5RWK_)C+h^g)$v>{NGnfMwSfzf+ z8(;lLyb>JK>afiH{gupKL9I~VDPucAWeVM;GKrQr`UsFyU=Sqk0E`uqvu4t%xQEYB z>J&N=!{kqnyOY0RwG3mFIc4pCT~OswHUV4b>-=FMg-x9WCrIoVe=TFH^$qFN_;hWZ zA70Z-N<1!twXCrJHc)LBB#Vq}8Qm~mP*xZ`;X0*bAEop9!7~}xc?FlitIOms5b9k$ z70JtfYJ5FJll|!gUG*g=f5ll^TI=(A;2f6fEXe2wk;1;m}YtMwm9O^=6rjXn=Hj)6k{55s4y}X0`UK9pz-*3?zub*f=FW?jL3OOoYe#DH$1j%!xjWTI+ zDPhQeK`vlZ>YhE7AijfB`Z!@aF?DUTi7c>aV$@!cmO z(j_{bBqnuyDZ;_`ni^mFzBSa0c1QmmdQZSKr2ko?-H4il?h~DTpU_>Vv)|g<4Mym|TW1@nB7cu+ZKMHEVdnOWXPhDX=934Mfr-9;iA(AM?iXXF z>Mpi#45x8a?vYB-kWCn8yg&g0oK(_|KK_ZFj$SfiNDp$$SQ8Ko#M=g+5Cf+8XT^kI-pN5yY%@m?A8*W zoexGPH4DG>S(qY%rl!;}v9K&nIn5YkKCM!8v#H|uN^QJ)mS|{b5QSVv$#}q7`>NPY z>;%okRswHUa$|!=z6^IBdO$rh3;$9}1BZXb;o7fweQ$q9%&s#!FOd2OyQ3==ap)3x zFPr5TvfNt5LFj-fXlp72!g0FnNpQ9?H1o?!fH?FB-hmAf95t=fStyjp#w9GOqa>|_ z93vRYW7rYS?d@3%i$*6w8W<)p>)1U$jw<0#fu~OYN8K1KIXT8nxrYntQIFp@?mVVJ zSyhBRql>);vN2j84@-S6@kD~z`P{%2b&$Hg{fK?ICMFcjA&#v_Jytx4o^6E^HB|^& zYiM%?Y>l7X1+AQBS*2S3CM@#}ZTH6rq(OAl9LHp2CJHIh=ZN_zFK$?FwREOFmzc1+ z@3#HrR8(XOr$3Zg;bj$m{Uv`zsHEqq?eV>@%l6(%n5lf?{m70`1?<{^+qy~`@cMsg zl{Z@cy)Z^B>-^tD{eJ|bipa}9emZIknJpRPZ_40A6w;Pp+hOawn;pk1ayP$gr&Xor zbn*-bPAZ4dIuEVP&q)Y0y6H8?i^)uXBmN48WAHd`g$*V{Frv~oq?HmyhKcF&s7M5l zAGId%m-$Hev<;++!7QCsy^rxjocTrUh1+#=hJ|GSn1{gK-Z#qx{x_I6Zg0%Azd=kJ ztZ2TAXD&ru$!WRtse+u9Z)F)!NnMEw30$#P(2=t}cEo9}$}6tKRj2Nw7}bl>)QbOB z@)R^sGuHaXqZR4wqpx@0w>r}XG~{?>9KvCG;{|&jh|b`?t|{q0|FCJ3af3k~fp+r# zqWYtWE|Wx9?FptGt%Z)0+wD6DGjN#Ex zn3O{W9HM9AQ1F2QF3e`}3XqgqLOn55mNnWEmp|k|aUL!G%DRWCt{g7=iSJ?$o<%;> z0@wEDeUJtEy(Py-dqYOUCp?AXA+TvIqX$?f{AF^--_pwVp{&<~tjiMz|FpH2m9-t1 zpDsggBC5a3fPKr1E&E?8SvMQHEEDTC$5>j!NUY3NPF=ey9eMvn(6gUU&;Dh|d%t-$ z?D%$AxKae|Se3nuVHaY@)GJh_yt{j$duB1e8SE0nLO89ObqXi zn1hSib`xcPPPl*6STJ@8bXJ|=QVT>A`WbId0+7yE-0o$>#s#C>jtXkUU|k&Z>a*-4 zg$*hL@+JYyu2-Ck0fWX>f9LJbj17i=lxkhPbs-c5kjEpGZmp(XX z)Is!}i&x7Ba)7JN`M}eY%sEG=xCh)n^g)lf+W_*_vJ(#@@;GQM%?+ z)zw2&wytP4z8PFMjdwkqnY<^tzy2jMLiOB9WgN9J27Mm8iz(sz@TD&=n(y1S6Z&Pr zb;*_NKj-<18Y?ZkR|$W2KPCOgMXTAgWSq%FH5qwKk@oP3u{gM% zxN&)EtBczwa%N$-q*Ck!M-~Vkckh~4VwV3@ zKQJ$yxbHWUnLo-w5CvN0<2z*K@Zak7jFq7p6Ov8$3-%$7eMJd?MlXr_j{FF zwhC(!hT1-k9x#tLc5c5ea7Yq4&SK2u%x)b_pt7h%hUj)Z3;G5Xbb) z+>j14LF0v7qrZgY>c8z4^rSR}8Y6FXp_rab$A}dd->IFyy^8xK6%q&I-LWVA>~KA( zCLW)kkc>*DkH&RXd&|%Uc)?(`DMMcLq}%~NP82Vy10SmX2Y;*leX)rK zc$&ht5w;B5IgHOU{fzg{52V5a2k!RW&wUQhi2nDX{sU*vqh~%ocFbS?D?}upR@2CZ zjPr;nk*OKvYBBDwt4mXB>`qam2XG4AFQ?*5EBr~yfY?F1A5pDf7!SnFKUHZ=hxU=GWWM6 zAA|_Ran7~{;b$87i}U!PF-iOUzTWyEYay3wR`Y}yPhpwn-(}U=+#;sV1>CvV;9qeh zEC2I!rUG@J=ZLAy!3T5Zg5S*AE^&3=8yNQl$K(pG&z_u(W4IHC_`l&F<%a%&e4L~s zs9h1kkqG`wN#nrrh*#zvT>DI(xNsigSdcqI#n4A>zN*Xr7fGB8^ee0Si99py4}=F^MzuRb z3Ox76pm_|+-RtbqdD8}$pMT)7N8nI~l=++q^%28to~+nr+YZoMhlk1Jc22x}l23f8 z>}Gx4qH(AFO+5{3iMbxdI%NoOxMEX2@!j;cvr{2U7?q|gWS<{U4H$#kqB$}X6M6Xf zOTufxZ=?ypyo#Btt%x{9HcBG)C>!XBa^Ms-=K3YP)JJ0nV+OZ>x8BiC;B>{jAGQwV zlGiOU6$`^;`qPV{q{G%sI4vuWn5R&-hLhV%9K2qk+Er3Q(v3-@u(*PvL5F-0MT}2_ z9AVnY>jtz?rQO_uMbu(qk!72mTblDT<`Xi}ThJ`r@K_Hq4t$fmU@GO z!kh3r>J(yskLmiNvv|8iUhaozW7HXIldxYDf%|*=fuKHZi8*P;=SX-u#mhE${nnKz zhItA(K8&4uvfIwsh8_eL6NX~__3!as6Ok%r?K378)G3U|JtmHi$nqGu zd|}%DPv84@)5JvqtFQHF#839bJd#ge1fQiTy)haNnvigDB5VBn*~H_iHp^tl0t@q< zd4SQh)Sxa$ms&X5SqyWAcg*srhwm9TkS8|ORhrJ$Y8FTg=(NItd~R5wA_LVE5_C6IHE;OBxDLd0dT?QF7KKG3-#INKgyFtB|v7((T^AL zhBgDh2n4{-2w&enw)^fuX&Drj{FAGURIHO37^`!rybil+v{?e!)>5%<(tqa4sJ}=` z4g_FFq;##a`8GZs^9o?+N?1nVGs;M59+M@=#HwDti&YVUMdqWxKjttFe}jBJD?Pmw z^gR{)QK5s6{+)gdLmc_Eu9EfcF&?Y)!QU|qsotdVY1vx^85StbB=0+>Eri~v7~s}I z@!wUChguy&H%D`(W=yj= z5Q$c4hUK%3$)zt%r5Kz6fhK~zGEzF6ylKG8pw)6GZMEObX#~Gbc$RaSDma?)z9r_k z7}t0w7Fx&g!t>RiVRwP>6##Tiqq5pTSdaypRre?}6$2jLh8!j=;{K1G_5qUWRBtJR zspHSxA_q~^*G%nH3=C+%F@F_ta=-Yeuii2r(KY9+$+*(yQH|q%Q^#4TKC++stQBt_ z^$OA7JAQ=iu&{}GYQd%w;_f7;ee1795npMuizQ0JIQZNI>4rZY<_2+!Pf}Z+9d;{5 zy%Bc-^6hY0^sRS?IoqosdlaEm48ku0)JSojfD-aCkjczt-}5Jj)bH^+q+G!HIsSSE|=V-@B$+I9R6CV_TehGqtqu+S*jW4Wm?y zcna8h^ojd*dF+MU2>LkpaI*G#;z{!JV!%|{D~o-rihY}MTuA679Hi!LG{7gO7Lb3| zFnz;L?c^t;xjh|;VA{b+tg*iJXPXO&M>3!POUsJdwnFM9X(s{x13@bhWH)ZItSG|F zhddmRYAW|9J}tfG1OpIcp-zK?{F69@!opJ$L_Sr2)W)A6Lycp~(F);!{X9x6JHpm{ z!d_$>N5Yo|K6CDp?BM+&@#lPs-eo892e z+n^|Hv4om3%y_F&?uJ2EsXtQ?BuQq^!T}{|THNo(I!0o&Z(^O_vGXY=;rXZ}CI7)y zjoNy{!9MIEvV2uSr3-NZl*A|_Qka^z?_`}315C&RIa9s*D7=G_5d2rO+Vqy7U(w* z(j+kE6Ks@^5Qv~fdLLr)eJ~06TL?{+u5Z$WAC{SL?_h=lY!u{vnmy*DMGl{~VGfx? zUNr6GR(jr$f_>KN_RxkiL`N>F8=%PU2I+;sICO!_=YV}7w__%GDML=}7KY)}1(_S{ zJZ5=mfq!g;2wvhZJH5yDf5^^>ypVY)G-bWsZn$Plc(~)~u0wRGUJ&|x)%tR~1hE)| zP2L1IK(mhYq5&n<3wIZ3UUzm4A64{y6JUy%5i}Y4{Vrk@Ie!1~W8{}WW3N}Lj!UYd zqf`jo>?wvV4%I&VBZ$k0>I7D?08Y>sXX`e^TJGzYfm|K-7&_>K2-E>06`mYO)gm(| z6W~07Km!lEdUKBJp9KLHBAjgG_mkD{BJzrs;~!Z5^7md&3C5~rf7+(N{C_Wiob2xM zd%m^R-xB$J9+Ys~!PH6m90rEUSU3~bpyc&rF9!M{ND9sxS&dz9L&>Mn2Sxu>t z&--n8KrEEmJVm)nl-%{%^0S<1%l&%%8!qISYA;lqv4QG$unCDaFvMypso4|G5|5#j zkKZfA=~?3Md~m4@L`oZ?wMPv~x~MgATM{QF9&2?R=1% zrWs=tXZ(?0L-lB=RQaI>dL!cG;(-j`Y@(24Bl%3M ze%Rx^jCLlDn-Ad?S!qy{tzSy&H63KT#+On;zWv^00hY|(Z;olsq-|+2zsc%V=Qcols@qaXWO)1Ir>RX|gPM#Votcp8$^%J?syx@1xE~yho zbv<~NiO2=?Y;InMMqNrR1`19{piND)ceTp%#2KWN6YV}r(&hxB2y%0l7e*clewHQaX40dOL zf9jI^D`ld!Eoq#TQkzFYdoZy(zSQ@+%B_T*p$Ua~97tfzlmPk17-I3w`(oC~n>iA? z6b=qdGM7xJy=`s_SA->ZpaIUaYsurUeRmkZFrt3MnB|Ybisch(3H*$9Ow1?ffw{+E zz1V5LkiN2UVCk1yQ`2BI^ovQ}WVQ#)L7@l6QX20cD=B@1pGs2OM{B%@dOPINS`DKJ}J zUgxZ@w4VJRQEwU0WY|7#1A;V+?ik(ONY`i>f^>IxBi%?2P`VKbDe3M|LXeaO2h!c_ zozL%i{_ppF*zRlhb)DB4$KffJiN86+)@aYbo1acP&Ywt_Dp``l8*qPljJ>rP6zop0 zY>U9Kvy=fMCi1Z^Y z#!F!0U+d$Z8p*pRC$vmI(aqI7@GeaSP)VSsS@dz&J?~jhplMMM^)2G93emKyc}))V zMh;Y@$ThI_Be@D4(8s!DgjuzT1ynQciI{{YdPFkmwO!7&Msgr=l6{cJfFyon9iTCk zj>dvjbPKiFk6AMfpM!hLP!hEnc@4|vvy&-KKQu6+)6u{FKubSOz#7oZ1|m89u1S4A zzp+V;n7r{&yOEQf_1}nH6R`aPJ*TGc;BZvzjYf_ZwLJn(r_{U3**eO5jE_$6>c;f zu)N3bFD%)`54Y`H1q)-2c&K*k&zvl(M={k$g_CNl% zXrHCoWbpNz3;aveK+gj@CBAEue3>)6tz07xRGj%z^u-ZQxQlNoSHtSTGJ zN;LssWp20lRw0^~XjUQT;kR@^{c_-9Sp2D{%&v*2m+Phpo#tH7GcL`kNs9PRDNr%{ zk7`FSIwRB)GaX@oKI&Bj+@6YEtKfpq) zrPR%$+|dHdL{btuRSOHB0~9RD$JN^3l_WX~F>_?2szu;9U3}NF&3WG?^GP_&wpF~; zA^D(F&_!1=& z?SXAeTo7{hVa(He!W)FSeZPzz z1cBfkfQ^#5W8;mYn^(wro&CO@@X&wZkZL`sIqPUeP(?#P?!(8mI$ic?Q0cg zLiY85QT&qf!wrk}TfRb<^*_#+V!GNtZ*^ub{sIE;JLxFdP46j!f ztoVj~Lm~jF2kB~&*Akx=${gT+@PHszV<*V36B$?yaN*` zMR4l0_;P>DhA!kKC+w$c*Rd9uex?S;bcJFx+4WXPw+X?sgodS>J?S~-pPD0<4;teg z$gwEJTA76elrKr-$W{u=|M}Q>Ij;wIwE;>Llu?5p(mAP7AVhjt8cu%N-&CnH(-QQ6W=lL5(Cdo~(E9 zo0+G8)ku<33Z;p^1dTu@%H&=`(>0k&P*PA7YRG~3?ZEE$LTTPGz_`(*zyyzvdwNVvy-MS*2t0veeKQUX96k_Wc5x?(AJ zZyEl)_x|NTg0;gfIK4|Cbk78J?7c`+S2*O%x9oFPbEmk!RJ~YRV`vKV9Vm%@ELvMQizL>r3-G){9HW>jOq{4syEo4Cdm(f<8nToLDBUG5cg4QN*IN z1Am<1BKWr`NrO4xNr^L=P?TK5cs%$1Vw`H;I{4798mQCutE96Bf`Na^T}c4y;4&B=ajGllh%r= z0)#5E*IWv&+mXtX0SRFITYRb|iY{C_aR)PDkN4O+-KRljyY@^P@Sq(378BbzXHJ>+ zZSvBjWG>RfmY9w9PfAjAZ2PuxxN*%JK zvGtGk$1WIEMxXx%zk8AyXY5Zwdu~&_{$C>Qz2)xy&)ZALy=suloPcwSpFWpBw}cGi zbglSTo~2cRYsA&H+&gy_CJM{+J5qg4lxO#hQ`jcOo9B7vgP>Fl-{ae{#-xu$HD)C) zFe&3OyMmwuui>@h6LrXemSKY!az09P_?}GorIQ+BqVB-5IMzZ&{nen6y&$VzEsh0T z+p~O-yN{KmcjYVhi3kn-* zV{wP7iyD@VC=R3u>N---oiRKj2EyGLG_ilh%resMH9YjzBK3I#{QT7bB z$NG6Yd1f@Yz-aPVcjyx3328sG=yBoXy}P-K59t zePQW%84@X%i}Al-@Q{_)o%RzhEsrmIKRqUyhdLZ&4n5MT-V$2FQu)>*$ClMTQXjW> zrrenV{`%vF7m%aMnMfk`l$myc&H!)T3VOeCZrLc~z$^=&2&N9>4aS5TCQY3%?m;J< zNqjs~ZqSl@n9JoYvIuoQ@N#Pty9Yi8k~#Wva-?#h3GWCV|Up3foU2H=$Dum2r5WSDJw^O@(5&KPoOsEww-TgKjN zngx*Vl$ZZVQtZ5s;J-71?9^h@zBW#ufhS7PfXTxmv67z8@;Syyvs=D^H7k}3HI`9$ z<38w1N#BT|!Ru#t3M*uDQSqRRFLmx7vH18Ti#1u;6aF>gjAhu0qHp~47eu*SSv({0 z!};cD4bzwKL{Mg}Eab#bqfLz+6B5d)ShISq^SD4X=kgK#oJ@t|g-%O{AF zyD5J;Jxymq3|Mw9g79w_gpM)~*RR_y5L3utmZ?ay%*|6{mn7$|bc$fv4H;YW_B*=g znG);pc6Yx&EIwSt&v$IOWcfND$w`6|oY5V~v-h@jkhzt$2_i>6Ky|p7@c^WU%wa2#(|qcj5`PQ2FPY|)m4_Arq|a}_dRT*f3hon1U{W~w z9BR}&0euXDKW;)V_?0P1i5QCC8YUuK&rP;FuoJ03=Pu8uo0{IYEU&xZy%WP`=KeU< z$|JU2DmTgg`?oB`WV?VD;278ofl zZJ$@*aoU~>>-nSN1(tN$Pn=q&0orn<&q>!0ud9FQHYYI{mc`lgm-p^g(D|#@rJz|b zR7A;db<I&FahwEU%B1*mfvN;;^vB%M{H=xE_7JNJ>=% zka4vHX=6op&}v|yHLnU@TcRX=_v}d#d+NOU+EHx@wd}K(8^9-GL79TR5)x^i7{Ahd zrA3VS&|~90=k#EqZeUD|89;fMT=BZO=+lb&0c*8LM3dG#Zn$>v)Ruxd3=68*%tlLo z@uZV_^ZaW>*u9RK|Mekq^&a#L$GGjo?7JIltcAnV(n~}jzOw9E-{E4fj0p)Xox%%B z)JJ(+KAmkU9gO<@8;20YQj$lX^WPR1A3Yx-a1e$K*;IQ_Ag~+)urwXCeN$6C`EPfN zb&2cj7CWh!f!IvdnOTh~Gn9?7Os229R$Va0$IZr%v6l7@zAdF?X~dv-&9E7nKPIbk zw8GzYOSp`rfC9nlX8uatR?IlkwsD431n>m+zxpu~M2pJT;Yx?J3164;s`xShl$9e5 zfW+%lqnDT%6CZ&E#CK_B8VcX+R7PZD>>>a$;u)6m%XNy=b0^a(L&n{GKU}^7@1gjVy+Gg%gOH)hUW6tf=ZMg0JJmXZDDu-|Zo}@TLGB zG{VjsEU8-r?)!8h|~7jjX10j6|PAgya`bqoc8(TUmfu#MMDcEdbH^VUP+G!-L5pph-ku257cyz7h<8z^lcK+qmKU2FE{f=POX zptmKTe5&HIMa6@>niN^Ax^jbg|B>3t6Y_=iLKArN#PE9TyO*_XPNG3e-|9glsRs(3 zJ-VWd?tA=jCiOLE2P1vXI@&0Cj1R4_C@M1rv}f-1A^04w4cP`;?089MCUe+&6 z4gD`Yp{;J_bx_=%TOvqiynyr8rr%dYp?KL@6F_>w0d@Av03~7@A;*a2c9p`52hy4q zo<-8*5g!>0xg7phBTMbAyZJK1*Dm49$O`tpbk@6Ox#@YJq-98~CN&L`O#m`!hez3G zHadE)*N}0%5;{5$61+5wa*A|N*hnlT5C_d4DZZm40z#%TxW6bb5a0nSDy6F9zcZRw z7fg!-G`x=-XHaCPGeV*_M6WqSh^3%Y4*{(nYtcdP?$|^%i~nJR=r#T0e^}V=T^S$&*-@u*DUH6{Zu85R?^c^{yiAguUhI zBJyTaq%{h%Q<0gffq@-s#CD_c?mzsSp>7jg5>ut(@4tlLg}-6n4^%ZU?ia6r1z9E; z+k=h|RgO1RBBG6F$TJ)fZOM_J&6*lApKSace$4n7IyTD9C_~raoE*n$ifmz=^Ohy| z4_QnLJwJgc+a%GBIqyTevH<>mM^&8`JN)>u&qpNx#*L~&ZtS0Nd?MI!sb(awuD%Om zP2EPx`P*c@-9)&o*-=@Ao2FI14cYo* z0Q!ILnZbnO)8(e(2eH^dRz~#x5|O@&aVPQ&C9wMpWoexC#HQTH!6y{YFO5vcbAb>2 zR`b9egq{5Zqv@@FlAG7#yt?g37e=*icIcfLcJ3?8~gzY(a$t881l0q@ziGN8(YZuj@22FW}aCG-im`9TJ z@}+mJT(0I%h|=5P^i(Ev_gc?{Cod5S>0R$moU#hXfQpn9Y zk26bxBl##iy!V0Jh;$B~I<Rsj6S? z=QAs)w$O}1kULLuDQQB|jD&jx1@G0e2!o>1%l1!nkqgh`w!op)47b-x(7;5H=Kg+(^Y;Su^gdnFy;S;6h73**uX0u${ zrBdR9W%5nrs+q^HBRYbSY6}#+hFsZs{*u*Ec86sxx?2s5p&0gKPQ$S54mp)#r)T}# ztQwO5iZ#c}E@oCC9pyF2ynh|O{LOefEcld4>Kk4?%8f{-dygMmUC1=Y-WC1pqDflg zijkH4%Qo4Fj8^8fv+;_3WCSH$7*fls~XNMaheV@+v3Yi1|{&5SVmkQmeMLdh5 zt9I`hy-%ySr_{ZsQ#ZidmNp=j{pgs)AtB2YkwO@4zL=jL|FkB-b}+l~K(9rlN}CQg z$LeG)=aJSX4c?!5?aL{G%Byh@W9ZZzV-eQ)gat%S5|wv~b4U=fF?gS*2aRCd{CpWm z-Z3<<>foIA2VD=fP?{};uJ{VFf~KXLi0a?CUH)e#ebnUb-kTf}+0Axn!H!+%jotmf zKFUv|Km7N3mEdIq|M?H>9=+r4evX&|Q!34dK+&S_#8}-7%k+73A3YUJ-$dfN@!`}P zQ#RFPW0?$BN}fC9QIVmlnnLZLL{fq18pVt)z7w>$ zhqxh-Hg`q%8BG{kekZC4p#mo_ES{YspB5h%)fLdbj=!WG1{xaokIFYA9{Q37gk6f4 zMKKrLoi4eqE0#O$t2K%TBwGCb37O{i7MCtf1ZnGGJyTp!!2v9q=MUGtsFdZbq&4ML zSy8Dx0Wn@_k&%V{9l}elQ~DgZRgHEBM?Nh^fC{D#MA@Nz)@x1L+XRExz=}d3vqGFj z2XW%XN8eivc(0qpj~}^ii0*+Ma$k~2UF#2B0dt_WBl_Uy@UQpTIuaL*8fK?1*!CaDCj zt&U$&9pTVWDF9~(%a9Yx&6_z_u^J1!mfMTaxFv0#!aGW`4}DSIO^{D1!#jG>mjIH zx4pq#>O5B8qg71M!b2b3V4U!I&CsFj-X|N&q@ebDc(g3}Jq_L}LT!+z8X$ghGu19U z%{5Y$*adlATTsNI`lY0Zg{{ssAZM2ZS(s|_9{cc`_1IOuET#^d6h2B=#b{{DL7W4q zFb;;kPSTD-Q`g~HBA%JIk+a1Z@#rHZ9U*o??V=g?lvZ5f`g#2|6;0nsRP1MSCuirH z(Hl6TLPS*5rad^_qAi**r(^U7W#bm}xSwvAhbSNBp)#Jv#R7{0|<==Prtt@zMLwb**;%K&h7l1U~j38S2wSU(Ul~dU3l7Pxz;)XYDscdBH0G z+JfSL*bYu|_r4)0CBqf`zruaFw(k2E(9;)OsgjfomYb>T%X^2^?$kSs6pr z;MdHz)q}#gkRK^vokC19GR2gic;7UA3^@LFZ!h4~Vgxr|?X3EfuvWj0vJMH1cuRXm znh}Q06j{PT_DF3<|9m#pjF{Lbq5(5Q(+Xs`OI9PAdxRU&I0JZRj1qbG$}qBMc$8Cu zO2SySukw|5Wf2!}=G9+2r(u-M`{S}YCb7-FrlW|N)qE~Vui(hW8l2xir<70hgS$`S zJ$~4WCzQ|%FPlz~ZI^dEvq-9x29HQ(k3BWfQU@npPS8g&Oe5E$ATK8dKk|MddY z5c>;*e+f=SUQ#6Bm(A#lr`z!8vtaxfKTv;o5u5zQymVrUvIQy`4dgMPV@DeFkI=)^ zi^X0DUx@mv7W-LX??6(cVv@SCU#t^@ugm>r{6gB6(?KAGX$2*iES29^_ zc1eWLme~gRCQKzL*WJSGPS+wiCr=)FrUOq#MWO4fYjZzA#O86p{xD9+yYMJe9&_f` znbw%&_>HgK=^W(QSlRYUz)^feY@u!Ggp72E#nR=pbfiFQj`q*AsRUM$d32Dtq#|S_ zT>Kmh+m6%2ye68%OsNIQ%IWS9H^1qtEANe-#~`OgF~7o)8>{Y{)6VzY<@V$=(F$n1 z4Ea9N+nZ;~QE*XfKXX!kI(PszwZaZ+$t1UaON$JQ5SY0&Z|;jdl0S(oWn)GoRL}V4 zszNk`21oLQ_5ICR_(m$Ra=amKbqen)7az5aiwPS7DhNBPue&e4=RKN)QSmPuon}mL zJx_{DRj&QiCXYu>J4D4xjkHz7H~-wE`x#T7G@0UN^3TXdqWeI=cEinnOv{+j0(rZW z{M#ri7hp#SyV)Xv@#j*mP7FeT`{fG~ z(&{RIRBGEx>QqS9el{)k^;@rc7)sC6WKRtHJMy}d_XWKVnJ{Xgq{iYiZ`0qe7Mz5P zZ(c}X#56AvsAkB~_l{jbSo_PX&-69VxJxS$E#pj#q7$pVrEFZa`DOVqFUzBt)K)58 zgPB{^q?n#Uuk!(%DXL8>P+Gm>W=QNIjIh*9&1BFMUGj|#hAKD;KoPt@yTX^>Uyj<7 zb-x8YSS#es?+Pm+4Mu*lLNH#7hEPg!#5Gjb69d#L>WxnPBn2Rp_Yu!D zheml}+8P0VQv%`oL8cJ;^P1qG{h{7wAY~8`1RS2N^Q@?(U&zd^CX!Zlt*|%LH;0O zaFCl$Av`6PFdEhH03?G#>P6}dGCjzgyTG+kK2;ndtBux3R`eZrTk9!5<= zp7%(3Ijmdr4XsL_<0Yy>qRb)ttxdF7AxdD@kBBc{K;GX;U^EK6hyss~W+inM-p_@I zIORw#t&=;NPt-QN6m_kGzt*JsNaZ$ez1Jk;M>N4{>zw`%6Hpm%>6EOTVasGeM&Q+(yUmTwiOgvPyjn(C zLr7B8?u=#L!08*_6~c#M+8S4R3RP%cQG$9?N5CM6)-HrPThl*>V3}t03s+Rey5OL$m(gUdTG}p{y^1-gu*4f!D ztMiZGhDmR5iH)*(GGzwknrO{$**bn2BSsUwPlRQwcrT}=qAbza7NLX?E7kbPnXTr9S6y} z|3_^J-oInWS5$XfNZfIij=tnPexmVo790y=4CU z1*4R|U3uKg2gXLyN@KokQqIL@{FkR>0528vP%q6^&lWp=Q*3v-sm!FKYNE0Ko7zUZ zzW33A_?U=kPbl9^YaboxJ8u(@>1C-xXd8ivtwy8*qUFY5?~3t|YefD% zk5cJJ*OaPgDn!?W67Qlg5dkT8h#6ZRgq2fD_JpEq(d!0BnU~gC zKheAy_jaO4B_-l*M63fujoK_*W+edrHcs1#uS5|m6R znzPdY`ZV4CX;nHZ**=+JOkloOeDyl}%AAS0?yC||xa1cVKlIHj`6?ESoQmQ)r#vr~ z@>GN2LIM{f@hSd)00hgSIA|iN4F|DYGGrGqqqJ%`tMNCTV(ck&sgWs4&JtcK{c#qO zeMt`&;2450SafH7R1*gNl+~9{03CERwQa$hCb4?HXLgRW3+WL`EOHpC9d)HOc4cit zqOqK85U#K+$hLF|-3(v83AupA%r{Q>exz;idA|ci;T!zJQ3;X9fqnWY`YXOEjd?io z_0|nbc6?Ril3>-cbdYwVvoC5!N&zzb@!IEv)O;fxj_NV9bRmEG!e;5L9C<$z{66!* zI~GC?$muZy6EjX-+f(t5SSA6>lY87)63}g`&Mm_Ah~?=j;8`1I1AtW|Bn?2Nq7n$L zXCkOJ?nSr4zPu-@n9DmIv!As8dHp82$vc=)s^RBQfu?7(gCvQogJhuX<%&a(YW3ll z{@=+>MxhQiTy6JQxzp7KPLq1d*28C={F{!MV8h&BWLEa8zRxgF(tr06Kc%vabdbD? za)}&33yees{*w1mkP~(F6wTYdX@X&yE=oG?h~h2bGIIrsV8E~t)p&352Qt1s)G}}? zovaE75xBRq0RnyC)YH*Ku$DX-Gx|ke9*(S_E$4Z-li2wER_Ljso~VW&H(;WX36*;$ zY$GlK5)*<@(9uE6$toqI`E7mCs&-vOQ(8r$Ch$hBa=B1hIpeFrt`oUV%~uo&*|>g4 z*|bmDMLROQc%X#@zid4cuzYekt7R3A`dlvr%+aXa&Aj*}sQB9hF(vA@V6pqe$3HZT zuYj=Q$%aD+`TkNd`AvLY@UniiS8^)yI^%?6EMSOpkz0AUiXqG^`ShXgwB-1!d6_}V zyBR=r@G&q?Xgm)dj#LM0(WTgY+7^34?8tc{EGAR2{6E78v#$7@+L9FQ_=L^(zA@{-$g zT2Xn{Uz*7{0+}u*6c-nVqtQbVtOow1wfBx%oXdI-wsE}ft!xs7F_Gy%Vkbm_M*kpM zc*!2VUVq4nMO03rWo)jkteNUTvrB4sm2u<0y8RC{7;ed=8k!(vp?(ZbukX1x$h+uX zqUFCJuIr|gW*_j#*jZT2VkYRM?@gO7;aWl?dV|KoE~6TybHYx^sMbozd!lH~RNzh( zkYT0xMruIH>BCdMWPiWpmj&G+aDD&HUmnL0AZzaQi0JEg zix^L-hCX@m0@whnz~P>@P0NN&0*Vb3|D_`(dwV(!(Yj#VUKr$EDl+UF;Ac=cMh`Vi zAG{ulv-5k_CEaXhHFsIid9!7@GrNKBdLAf@v6?HAKDsA={0js*$qNg7Af1?PDXQTJ z=|wQa=Zxk&cpP-9URSn0UJqak2jCknc$-8v5H%eTcORxT?rjfaw$3BDEP{y`4OQdL z_RL=P5cHiu9tvSG0qikv{*=(%v^N>SK-(2)S#;@b4gL&iUld*C}q(8TxK0K zcX2D4qlN!xV)YPyscjFwzYy~{`hUwq3ldft`-raehOW&mW=G=3t{T-cH_Eh@e|D=c z>_DK-TW!wAq~MdC|MR!C7dG;RKY}~otbR6xD4m?^p-r+fxbmy$uGDN0#QjQhnmiQU zjf3LIbrVPTkD_EKXUdJK%B^xEq%2TK60u*-d+GAsnWB8@7-|ZFRL`=N;4)$-I|6-mR?sTtBH(CG3OQP{1TkBkyB$YA!V(8 zjD%}_XACcQGc+&aHG?CBd+&efJ1Mi8K)?Qv{d9hW+~FO;Qy_HFNJ+0$Nl?90VcuGz zoX{%0vdz2ggE=HyW;MF;U1{GJ^oLj0bB(`DXNf{7r0OUCynXqPF*9aBGoBxMe9!5p zX{dKdB!JUK8_@;F7e8pK>GYjYtdkZSs*}T`Tv8otf~VCr%=^dh38+1aj$xh`1U`xg z9L^NYpY+l*{?y&!#N=z&_ClZAlg+EdEY&ETsnFcP#X4CdiqRuib-^)Y)pnmg3wR5) z;SM5`dMK5e@C&{5!`)#^uJHNqsV2_2I-bi@^(!%8kB~wLEspZ$>)3$pfP!GxlqLq@ zncDaS`e=LxNcT-zfywP71zy4s>(E~YZF-l~0)i7iDhEgYkHfYBKYiQ?-DS_de>0~K z=$QLFiD4zM2LMwcv7)TFD(h;9ZiMq^%IUJPq0<5gaC>~TT24}yAc_kI(+B_aW@Du-*x>PXn4_n3rICHhkC+_|-4s`m5 zP$)Lrthw{;UJ@x$^s+@zP>|Jc&$kC1e3SIEK2*BeI$4bCK7{bgBn~}xxN{D3YynVb zjFTzm`QQjYibaSd7qJzTAUa6TP69{xynMeMw%H436daUV#hfGH-W|>5>kw zGc(8RS2ew`e7Vz<99>u-?tF*)QG*K*Ic||0Ed^{`b=hVJS1KboNaxM!xh*3EF#PR+ zLt8I}drl7TpP(>8Cr(W%pUglZg}A8HnRa3;!jO$pmgIs^BKxg7{#v;JTzPx`;CfIi z%=qwBWA@+C^QV1^N3_F$0+j|XJhAZeqjABA8e`~jAphIZvqR4@6qo+G7PE{;M3_cx zj04C4n8@3?SHcq2mr(T^EBpN#IRve29((+grfKb%32p8}PRT@II@-!-;B5+dOWrgK z_DU&(Ud}NOR%DZtan|Wds?hi7xxiv&S^x-W|3J*hXtKB`hLH6my<PY>Uy>2_A=7j)qk7IWD!$w{B2#R%v`DE(o7>?@8FuscSl3S`KZRmshMC#^!KV41BFM0f;DS zHo97)ZuxxXq2RiAEopZfa?s$JYvU)aYmAJQ*kS=TWh&lZ=@ZOon;Vmu6i$9TD$WXdrz>t&QQ#fwE_pP_D|}5pPX{G)n|M&u>syCazFFZ zJVJZNzCO(rLTR2$X|^?CR~r|)X4j_#meQ>GAH37$F~;q`d7R#EI3wlE7|yjEdv%rM zx!&oj6=gC;$*=lPI3hJKS;{8haUOECCHA`>b!D>r-A2r@N&X_lN&_!h`9%=2HImgy zI;>a_g-=~eMCZ@6Na$8oRg-C%&lB6ONq!<_XfT`~6HU3elc>IKZEqtI@)WL(&;o(e zImoBW*t9HVuqG2Py7~X&!)K|A?gjiN;Q_>OQsP(LKjQ z%rxK*?}7F(-eq)s$I;l(`^c`X(-$gyDya*47!_=Fx+?{?MFS(qJG3{N_BPxYuABt- zPfa0*wG`^C3`srSai154LaSL1`);2i7cYAXAI$CwU&e!8bEb`ac1~bU>S_;rvt5U& zF+ysY)a;_FYXfWVIgORCnMTwJo4&Y^>Ug}%<|Mc>5kfTP!mVPCnGS&yMdweS zn51sKq~M*C?|PnWp8hJ)?9COvxR^ftd^f{E^7i^hu&EN|xi>+B%ILL28Z zen_sLl|m-AW8{_9vCwN7fd0XY7u=zTt@|C!tTm+HXRy#iek^Jt_t6i1@MK*(WPc}y z8fI|6gTas7$#vPli$1JbF;yf-Y2cjJW*=r4(|i^qBuKDVa9>rUzbRM<|+^K|f~ zaJOTA%J#|q(U?ztYakeJ8@J|^#K|mXfdB-M z6;d7Vr5Uu?XxeUtfLN7TYadq~%kSHH8!{>h7-$tWT)wQD~0s4*Mq;uR=U4!@IA+9wO^o@Z9W84^VMR zw0VKl3dDMz@UAPOvLMirLGgbZ5VP_6M@nTd&1^*&A?>d2!^UGMOz_xpYU3&9D?QV6 z&F_JLQB~6`+Kn?Gvq{)9_xlX^rn{)6=O;X^svYKsE2iH4KLS*riIBH~p894zzwQUp zc0d1#5-5x+_P2u)zuysHS4iuSA6a8x>oH|fyLYiS>Ga_|4$n`)m%Q41DDIJjwVcA4 zy`BEipbQ|*8kbgh|EX{*O^Ldgjd|!}6Gn9EM>Svn9g2;i#|_v^S48OG<;FcW;tCpm z_&;3DpWgegp{WDTP5Qo39}yD{WXLEa(CD8=7Zf&#H;hZ z10@FL>H#`
@#G0@4dFBRxCO+`(HsytTpcLSBgFkDp(HrxqE+0MCk3ZNI#1w`t3Z z56K}jPINR@9o%`zdhJPihFe71NF(y~^e0>nH2?Rzh1E+)`hsQ{(Xi?a&cq8J-gUu2 z7~4)ge-6Vy8$NF{i#b$`Y5Zp+L!;kyJ!Sp}9jfm3o_(9^;mCin_`~+%`{P2d`wPtb zoUiw}{=G$9G_(qc`WRMA@7)vK0*0OLGR@%7tB}LhnMUaY@6f0qG3JoFwn$h!4s2Rq zj3VmxutS=7gdjQU)vTAhf3zxzEurGppyUWB*)e4**MN%f0;%>e)q#TE_Nw1PSJ}kC zn7i#yhBvHQ+MLnv6l^k^s$JiN?kYbRGO~>rND=nN@7iKe}v^dThFzInR05 z%k;Gc2T2htVG_41m0RM4VO^y&<2^07fHDa3rJ>RFYR2fP(LT8@e9&I7|t z`tY`8Bw8+MC28UFlnEIg#8#03iM*E31&aErO&6zO&NE&a-Z-N|pILG$R+AM8Q5|0{kw#O+au;!vaV%ry;}t{gGFJ#&X&E*Qio*H; zSDyS|w$#p463DK3wb_#f-W8U-54FHVK@MCrSMQ(hhCO#(b8g6K&wHC_YO9I-7=O4| zD5+tSe3(r^!ejLUgEmCppOet+1+Cva3tYxHqKQ(=5`UJ(urF_4C$SuAmltCyq#oSb z0wNgAsUqXREwcMA!5E8lpYsP*FdIr|asYvUejsKX;Mnj2ACYR+Hh<0r5-*OWfn!qX z@aq*2t5AXaaw*>uNV7%xOeVsq=sf9ZW@rb>_}NC{!YI{*Q!+-JPccJiSPogu(=gC* zAiyE{GcCxi-v%boJgJyNRTeD@kP2S^O$X0Z{$Gh|S(a^oMP3^N00JNyA<{FNN_bBU?|}pH4N2jb{!s%o=uv zVbh>)_&A*>Eia6gPMG71rb-q3U6PpRvjYNIqZ8sg$|6mjp<1$HC&9lFlMh`?( zFj%CdJfgEvH!uvout!>9yAsu(=N*}8;pA0J;ysM>&8_hLU$i~lt;IqQQb5CT!Ajf% zW^_j}nQG_1dr5qUE#f$0h=6s?MCL&H{R-ZU@MG=uE z>x#KX>_PMzCq@X-pJu!tLE3POv88cnn2=U>Hli|!Q@PE{PzjNf5K*bD^e~%NV6`bx z+9LxQzFmQ6Q6QPX;iKCnZ)zK?@MNcz%3^geU3{OQ%Ou&97jhf}f4`BGoNY3njn|M( z5XfZFzWW1!)_Q1^m{V135&To$$uUuJ<_EFV)}-Nl^8JD=)+>LX*qQU`Q~^lEPA$H z`c0Cz4Ca-K75LwOsO2@jUg{V+(Ve*Icl$}*ul@l^t2k=tF)#A4heYe!pN3It_*h>E_kUELaE0#wpYz7Y zSN@KeXp+L41$g5lDnpxwgppASb*%CnV?^8z!5kxz?W+Phe^L+g9AK~mf>g&Yrf(oEDdInEP?BzUmIeO z;1z~s3ef^tgz`n}38+8Tz8774!0CO$*ElkJ8}?nSM%G z24B`PwzW3PR)R|}p?JTz{xzfYM+>|3&%l5qs&rL1k0&OGaXtfG)D(jz*dHC zFDk>G1NlhgW!h(>_mja-N37544sV^BxfXUdjWGdxf?K9IjVIfG z{N%Gpsk_L*HbN_{m`8+=4Xaw4cH@$7Q}KJ@EiSB+p6aR5fW>du`8T2z-OB};(j;G9 z;O`_iCUPZYxpIJhp+&JWDY}z~dWdcANenv9Dd|QYKN}~mS~ImMelGMUU+3^$lg3M+ zypgw|(VNR3@D1fHyo<4-uU&fe#@@y4u&cF&s=D{OX>E7Oi$z-MYDVq}jwvVBd~-gO zL-}E7|Hw)qDT!C#X;H>_qH#!6xCZyLk5MdOVf6QbIc4deeKK_KbD>Zv%OSE|4ZhSe zX62N&PlQ)V(PgWjHtCdyt{F2xXxmyC>0`w)Zo&B;PsyYnx9)Cnw7iN@fFaUF_67C1 zr1zYDLFlq76OCnuVy18a;YBPQx(4@SqO&rp&(%CzE9I@-n0&KPiN6n?au#~!NqW1p zQViu6+X5vQWYYTeP`Zs?bY)u%2Jb75uKm(Ywo~pKxuKeD=n~(Pkp9tZ%1n;3U~Mm1 z$e*vFlm?}ytp%$zF9aX9zGs)Zv632bGQA`ZYX~_Z@IUnm1e7lf?Vp|TC{8pkR9ceXc^>iIKIN+^A|_;biF^`Asb%_5T(ov%VzBZ8UH_;&VsA0rfb7M zako-jf>Ycn?(WcHDems>E=5z^iWV>KRvd~Kmrxu61b6xJylZ{y{D4Vj&e^kP?|be` zXJZr!$ddvMyRlBo3K0*0PudJAXs0WBlLY;yXxG?~6Nvve_}O=FypQ52rG&b=HD4;A z0i02Itt=vButN#Vb90X)ScvNFe#CXEW|B%i7pP}HEB%WMDysXPc9fk6Bj~9$IH$#N zX+#t(W_9q@9VFNiMz6*!pCDLgE@Kg#PnSRB(>CUVKmG4smCOjOz5`nS0;_L+apl0A z{?hxn;8Tz`HB4-qjZ8DBkbDMT-Skch^|41@DOM{^J@8oj&%sswx2X;XE*q=PT0_Q% z4KVnCp2HUnR$J_PIdwkZtMkP&zO^)t0=cQC%DY{60rDH1wcGhwR^@W#(X2-0IGh%U z81lJ;e9lJZ_C;&N>XgM>Hee-wHCfcqF^k_L;;*hD^9eu4PHKrPCegkArzoCS*{L0X#^8fOQ&G;LC*i;=*jOsiAs!PmD=noI*Fu?2 zOa{ags1C>%3D>{=T#X^G&5Gg~A=dmat3gldOF9)yH}_Rfe-I_5wKr=R7iuz4?U@&& z*HU`yL8;AJcC1wqH?I0itA?k6l2-Me%b~c1FT$HAO_Blg8AH!sV{GVOBo`!R^9(idOoZT|) zB@(9z>1blbp->`ZLYnZE27d9$n0ZwAbO#9nvu5acep^5SLTK!&7jdZ(HDE#)0j-%r zx=s2LLItFrB!!Q@TfdDZOJ*4Y2V?x-FIwTrpw@4Gw$d&ZAB({|2n_nwb?WF0^Ek)f>|j7f71Jclw#xd+(*IA=q9yQ&Ch*($61YvIaTX3cCYY!0 z?H%^;Eg9D~WfX2$i=(De&DabJbmrT<4E+ZyVX2uVh&&z^N8tYVUb)I&QRn%)>8QIQiCxdwXQ?Su25&3> zZI;dXo;0iY8#EduZ?+c#!&bbYnPbA7pa_xbf=+`6OO-Qxjw{Mxv_@DN4TgS)86d{) z$fCx2rwkSC$l~;5K6LF7^gfK;Ec@S{cRhXw|GAxt=hG7Fs%3izew_*S zduIjn+GBEwf)(t58EL}7SWdOA)k?JPBkxS=29*Ik);rWxFTfMS^1vRwH}Il<>dDo z@Y9Q}eOw#20r#}fq1DuZ0iablLzQj1&H{*dWB8u@zXIzWrhpPX_~O(V*4&J@*V0+y z^8^w|wVm2%|JM=<-pVazLf^cp_2$Z%yss#DWQMg7%zcxGMdaZCn(BmF0v=}}zd@Nr zBO~b|0`iMOh7tP)f^$9~x{cH=PvMi>Yp@cpE2?9za(7SXb1-%QYxLHL+s>K$it{sv zKoB&VJOBQP44h$90KGm~7SR^@akeY>Qt;Pv=TT`%{ENsxp)aK(4{aqe2y~_|gYrp9 z^0x)gVzWFhXJsq{q1wP>yLCsS97hIG=qJuBr_TQ;xDQ~NOfUjLxy6}Cwe{&Ok8ZykhaT1|I z?}9GHbAHqUX-V0O?*Ag;+Rl|`ZoZ{riGzK?Fq1QZo{MijP^b-M$yGON8s;F|`C6M8 z2DelTIlr+KTD*Jyp=hei(o_l)Dgqu-YJ|747ODbz0GM`GVeXf$42TXV6&<{{Lx&za zS{Fr#I_3CWaJWVkJLE|*m{~X9`au8QPa&uc8};{jrBcWbV9UTqky(BWy7a9lR+i56 ztxts^)YM^vQVn!eC^XJ!y9atx84A2rM%*;K1D=Ecv_iT_iI}A`ad152y;qw$T=?J| z+m$aGS}aArB+iYg3y|k;PG2Vx_)dmOQ4ITFsbtye2mAGa(5_2j*rB;oG&_J9jUDsO zHnxXRw!rvMjGFnPo9cLF&r9|If}|>Z_wZ2kju2nD^E^Tffk+V$88e8v)T;1Dqdczm zC<;o5FY7|{R)EM|VagMe8HowaX7!R&Cp|6)PDOvJNmg+IN}q4Ih=$YApvHirykZp) zdT`oWqJMBmk*)%1Qm%nKB6SjGxJ-y~wNU=YvJ%@5?Nb+mOO~!WHVC1cclU>ygfirz zL2TSLQg-FIQLkvsZ|LS2xda}0NbGRhP8_SngY6Q!Qwn1iv#Mc4af{F*&)<>sG&k*& zF&2}ZG{}*}k6@M$T9otciC1l!h#60c=*d!~$GQkaU?IBsb+MOJ+;r)jightOy0tbd zTn6*B5t)R6fRv|n6<^GfLuAb^vQ>e*mGxmH#P1^-78|Xf$p(M)mYL=%(s><1nbR6~ z6*mD=TnQ+WN)HCJjC5AScgR{2+wjqloPX`_#}4WG?U1aO2v{Zqdv#QoTK7ucHp#@pZS=}(|cM-T?ZyOsveN&Bahxu=eO zUi$fO1wbd>WDAgqCL4Bdbx6^X?u`0Dwb#x$ZBIXYr!c5dfP^mzW>f5UGzz|Yp^XkA zh;G-L<(qV&6m63JDx*wOjpha3ea+9{^Xr>qzkE(H>#XgqwRJaEGi{3&H1ft}DU!zw zl&L*BZ|;5WNwKF2{fxL^55+jqRlNje)WCQh zB8&d#Ef!Rs-ON#oN(fA&Sm5UeZ-$`M;UuXPi<=%o``EYb@}acM#x|DDZwVo;1;XhU zMril4Z8UZF^Z1k%G#qosCU(;ls0_aGS<)sX2(Z!T{qoBytXaE>J$fqNB`7hK=s>us z()9&Dwa`9Y1`KE}1(FxVXZK{`q$u;&ic`xbB@6wi!x60&mRL*m@(p2TXsb2n>Wy2Z zm(s6nAV<`ZTsx`v-$NT8;~xe|#CwZMy~h;|T*3<<==A#KtE;n+Ftp9W7p>1YG`g?MdQlRPy<|C zik9Uf{XZ+ z%cA0sMee@q1CP(tOb%Gg2*@t!S9JKpMqkkff5R6br72gDk2tK84m^ zJGbog_PMQt<~-|%WwS6)IDr^^NgwLjjno%AwLkTk#30kW3~g?)|ROA zKT$YC)1;Us*T9W3s9JC8E?J8PG+y8t2_ajx3T@Von7WcaYeX>o3%hF3vNDp17X9?4 zUKXp;qNg=U3qO>SmkN&te~Jxm$gMsE1k*YoXr+ftx{D#j?~yapN9OPCCHduqcZ-(% zG5^h^9McYLu7!a}aJenHP3=4Qr(a;>M!&8;jj+M>H;`oItZl*8PW5vcrExLl~+hIRf=`*VCtN=zFcdI<*2O;%BcVEpiTOx(_wtU=`wTF0Z?3gEjY$MkY7C4qGquQVv+KZRnzi8MuU(beL^&$g0rK{o6WNu zNk;0BX*_Ok8-4gQvEl69#J?xrE;vIFkwmmsDzPC$+UW_DFoVhRyr&czxcF$2smh_X zjDdaP(yL>4@70_r8S-K ze&=pBH=U*ywS_FMG3m~CB3sg>tVX>Yuo{{KC+bN=4PxQnzlJr0nO= zkSlJMi^sR;Yx$+{JuS*km%E~D@bC7ETlnAVX9GgHX`5{6rYUS6Sw7igheaK=vcVaX zD)f@E!NEnFs-wqu_@XULT(VzH*&%FNCtR|se9ShhAE_m5LhmS~(8ulKF*3gPJ)hg+ z#QQ#zch} zMx!(MxUmz!78*0n--yZ{3EPhVQ&rOHvEM0$g)=2KvQ>}0)+Cwzq#dS(l?V9Y- zsKw{xZ82S7susg8aLJ^)%&`sutr(*tD3;GKVtGdzg}Ays!aJ7uQ~CtbCP%0Q-%5Wv z63{!QB}yi`p6LAV{E}Av*0@EnJ!wE_w~16U6hmqb^_pI3wCcRIF67;0%Ti&tuIXilO|jPJ4~jn6IJLVEx)!Q6$#J+m{eKYD$oCOMSutxpx9h)g@#!$y_I5z0KF*H%@83wp0^d-wE-OQKmS8Z|0m>p9#nru1TNJ#H}jekkg3TwY!MEu=p0werlsWES#!>X%b7qP59G4sGM>4+`e&)DNtD6$sZNIfR7{G_ zK~pO|L+_7a`h+w-JRdFzXB)L<1092+t`Y2tAFhUjqiAN{X=$1Bfdqq$QXQr~VJAv( z7E)@93aCrh7ajdW2vaL_;T#vK4@qYPd;gQ;e_ER|ptO&zm^Ap6 z{Kft5F5dtHUJ0#f%E}KI9P?Q_7lW{c;or)pAE$l5&!Z>G8oQF^B3tY%HA=YM!cZl` zmWaQNMn)8$s;#XLkOpV)rK0ar{^LyPx9oOI@%El}UYzmXZKA@#Q%k_fB+cML&=!*k7X?*ap{S~^G2k^z0U0hH14@OgWODzvzn)qNaM)p;8FifdFUbDW9u>u2*u z*_>4(QQ-K4HYW63)h#D-ibb^HG0hBh0_lEU#ma5|;+)aFD96C5T?3hYtH&+X%deJW zG5HM9Ain4U>B?h=_kJ@S`}_N(MV6i2ky`FpO@e=R(n>E@zzl;ylvL5lTPL9a@V{r! zFyVeZWU-q@PWat?!Wg!KCZ}p3iyIl%rhuTgOl7JH;h-R1y$x{gE*jASIsT4TD&&rT zma{RN7)h%n0K0S5@NwmDYrPXdpi`)eos&U`UhfgdimzKz-_iK41odC!i|2$gj7?sd{?s;M$YZ z{Vg>h$SI}Z-*b!vUNNIM`;()EN*H-Db!rZ zPl(~J-H4!2f8|GVi@?>gOq}H%23}ZU#98j^JaQVCi6i@23 zAP1~%3uv9WJ+CfxkxE~tJ!NsC z2YQ9vKrq8Eq1WTO*EpD4Mei>3?G^ga+5036JE0IBk-1z$yUO}a$8*cE{pwVOP zEdLAS_PPqdA+EmRu^h(@S7@TFgOk=j8EYWTEARR?D;Iz})@b0MX*Xb#cA$0~*55+h zO`AOH#dfogY2MNXS9pkm0Yc=J)nrsMcJZP5d2Fb&psiN`cvmP$o;c^w9D-3&P!@^nIVm&qD2+1Vze!xCrM3H9lK2HLK?8 z5XyZK6mD1(&qD_dOQb+U5>!}Z7&M1xuvEE0D)6YaNdm;(l4DrKkoGnobQ-sSh$4lM zB`)rEApwSj<*gaJcxDy}cbnR=2nGWBjHL{w?sukENw%cWphL|Dvur;%_mr->6Y3K@ zkw^-+^VY0K1oM0pFC#HO8U3@PCnDi*Oy7$#@Py+d|1#;%;{+nOHJA{SE1hcCDGTUv zYtDaTJLN38j;j1bOC5{)SWjQLd|JSOA8VnwkR?oF0;7ajup(d`k_iMQ3H~!h_n5qp^GF1ib(Ey zkz0aUX_BU##`ITz^<|>5i%_^j$5i~zfquEoFG*KSl|`eg7LzE=gMdumx=v0d!H|{9 zD9}1Oh^-C77e0;d0v7e7Y$X)Jv1m1Ld4#OL`@m*Iz#leEUWqK~kRAy6+9UR+eOHEH zfxG(#oKU21cG-o5T7nRbOi86iL-sdUQF&QJ)hCm(R+5HlYUIeze2)I%W6qk+`JqDM zcA1Y&;)4kyb+LM8=|6)vG65F+_cHSf=%rZ04!`;t%fD5RdT_r=BXSS@=>9DaziXi% zi~D|ULt9T^&f}f0ko=L%80=j|^b~@=RZ2j@Vi@lew+t`MG8WTYc~2#ryaeBT^4e|T zOf!dN`llkyI(?&Bgi25oRPnZn-|b`ql*`qtH~(J?@btn4p!LklFIYxJFSTph#4ql9 zLNmW5e$m5gfNH&3>TZ}Frty5#elI42OLkeQ!n3Fh5~D?rog;hfPaPwLc|KzrfytTU zu6(~ic1v7h=Q1tncMi4NF}P#gkQK}EO2E<769P;BJ#SMPT6U8J*=1-4D*Tg2u;+BHq;RG`RpIH9vY19 z=KApn_gO^rZxqKYoV<`9Y-{r^w%FAC@{)qs-Pj;I&sxRj88m6?3IBQc$n4#hxxwn0 z`?t0WauD~=lAC)n2iLTzS0W3us1(YW?|Y_Bf=nD$p!NM=eO<()7tHyMLh73EATax(JX!=}ncMf0Av-a3;R`Cy7%;Ig+sGzRc9k((Qd8i(dct zY|z@oen7M4xJm4qt|q6Y`Ta_2Li;=g&|@~;}LQMtCtQzmcu2V7(| ziIv)SE&dEk%rFHGFJtExbn{22Qcd>;-P3<){R$^HuEqEXkRM}7j64n?F&l7E)IUje z#Y8hHpBXv*7 zt}dr0PRV@5hD+?IUQ2KASq7nVk}d9%tt28E=goK=P|$sdGQRDw$@H8}#h-}ftC@nP z$bepGO8hBqo7`+LlY(=uS-$cyVM|zoCy|YWZ|zdHDYR<8w-^M-;3(oVqIe@IrI|AM zxa6FscsTMF8UIenAr_T8#l6Kp(aA?4-~M*Z5Yv33MNB>i`X_o$9gSu{e>w=(em;6< zL1-bx`GDP^UnWhMpsnnrB=Qa@{HvxHiMYux(M~NE;y**$@v41mZTNUgV+l+<;G5?) zQ9+W#50GGrFSI!HkNce*o7#{t>M$aBz59U7MU|g5n)QgL?bO!ZHT}9BMoc05z@U2d zt`FBNsS(c-Q#U9IgD49I=j=L5Z^+LGwCN!4)y1K z>$+W~a`i+Km<(nVNM&ZQGx}jCx0VWVNX#dMkUJ+PEju`;Sca(rdA_AspLGpipi2Gu zNc;P66Qx#=QrK(F{n#(5mC_L(Yv#$+3tg33r2pM4L703FcOFNF(m}kUZ&Y-Svey&L zBb(kbOM9W!wME(zKX2(eoL&IQ@_{HLL!6pJ0lVj!4X*kLjYbVLL}Jh#=GjZf?bZTz zbEsW$a!VXhZdv02ajzR0*Nb+J+?ylQ)w$(E)5yn9MkL zt~EtfRUb=0&qKz~L(VTR_@Z`e=`hTwyQgPlb9(S&dGL1cOY7S$mf+*33daM~r|V70;p481#^)m!Cbzi1HB%ZwJ0e_wIa@FUuR+;~7Zh*`dZ z^{#|G1@!04NTLc$gEJu(KRrjrHC0RFyWwz!a%x4R;|ebde-6dMe%KF`QWJ7oErZ)9 z>-txTEb+*jcVPfg|4dHVlJRNZ`*TK}z5JG73Ej_xLpg(}BReUlx0oO5LdmmibyA9? z0>KU9Zpsfx`Ut> z#hTr;AOjaNBF!e?3irnt4<;ahYZ-S&Kk|l% zo~LA;b2(P3zORB6h|B;BR-}k1u;U)u3r( zgjkgm7zo*wf{c4-f@Xga5iEn^&2!?$?Ye3HP*zqhbHe~j=~x zL<4Bd`c|OCI6#pxrbJ=|Q{Jo8g7{q)Tq!`;RdOCyj&$-G+%*C}CwEknoW>BwUBxe* zH)b1)`+yR6?bL;N{|+UhBvHCNEjoHx*Ihh(coSHAv@KKAct2ggBC#e)sf#CR?M*W5 zZ{araZ=a^~B`A?tDNOx=HBGdzxrE6Z)4b?dcZgxnr~-isk;^KERpYa|q>jgFieJX% zfZLVTDwU;dpE*#@lpQrff1FPq_uN%w`2M6R8NfIpvUp=dUr|Z%GJ^*r=Ao<0R3fkm zw3*;ZX{Eo%p<;;6(h3HDEUB0H_z=KZYpkJ?N{RwWvipN zsnEqblT+c7mbjq9H1y(gy$`>fN?5$~tkGz~P6zCqhf=f_4=13uaxnwJ+1=hr* zm5;ZqrFBP-3e4n6ByMRJC+^N$qPq{2%<_P+oeT5028+zIVh_2j-Z0P%7KM_f&%v@& z{_h9-mNmnxpJbJfeBUu*p% z*xv)Mkg_5^vqEEhV+4<3;mTm0Y3L67vBgwxh+u`zYZ zGUuI1l!F83@Q|_>w8)iNoOg1{$B(|b;YATS<|9G=iTrg^Dr$YE z_Yq@Wgbd}Z#teR=3lj-vfo1=YwRZ7^IgF3y;vJOLW|7=gKd%}(v=Wf6QKhrkokNJYb`2c2n<%UaSv ze?0qe;$2tc-nW87{37k9kAT!KoZo$A?20{n@y-Hyv$W^4`{3};B`qq>yMcRleFoxF ztako;LI0%UAFN;dggKEDM>wo%f~57ul=Z{Xy|dQ+1rI8!u4|)jgQ-jVgxUfj)0qs1 z9nfOkZ=dmMj3uiqAS=F8XoP7L6_puW$hCFBa?KA;+2VK%{zDd28oG7VvUcA3U13)h zb?#RHrT&FIl)pDsw)ws@m!%_ua(#k5@t+m@ifen7&rJwnex^I*O{ddb?SOkwxNI&} z3y~(#a}aSiiEjJQ3R)@Kz|0R_H~6$uEA^tz|X@`%w3pVl1u$auA7 z{`i9?BE>Nf!}6=zn^<6<(;bnLq#mE+*zL45A(>>Fkc2Mo2nFkyogy^mr+ zoSR16Tv}-?9kVM_P?m)Hn{mtq#|xj(QZ=PF^EUM8%kC%Z+=YEP;o2vBR5{4#O;pec zjl}tkdOFY-!}1jafjByeYhM=E#LXtBU^2>k>|x~&6+ZWcu=GqSq64|~Yu~Pm!=`0Z zddKp=aM;y=H+2vKRo`K%Dd`HxS&ML{#pI=X<&bS=g(61dI|ru2v76{o z&ST8t-tUiyhmQqY0TN@`eKPtC2a|%Y2nQl-lU0H!z&C7zKw*>cXVbMx+uI4gq{zJ4upMzVuNb(9<^gPKq*AW%`!-j zx;`xD^o%2?6!WttBGc5_BeQi{_TE=m5Q1eAb5{@CVV(trx-wSq#l{R1TeEw;E?%$Y zF_}Hy4nfG8rk7v7)PSxUGmgr6!2&n&6~WKb6#~vBFUkW>Px8cRA&qRsfuETRQ!ydTHCs_!D(!E%8;IA)c={)|x-X4EuPnbm zT)B=_3?LYb>4LqO6&#j{ovwc$3kc4`Z9 zqm#<4LXMLc=C^BWM#gu{*|??+84?l|7Hu&2$RN`PTRYo4g02EvE)sn!R2s8CWEH1o zLB==S+-oJMiA=)3CfYUbV;xSE3?gR3?O^+PQYVgHqPBOkx=#fYT~boFCo3qU6p2t2G-RlfCJP~l z^;i_7$WiNuufQ_;fdth3Wal4O{H713{J%AD8mrC5`&lM_>} z`u#`kuw+k_GlltXasN!}v`^iQuyRse$tpL1#6ziD!HM4jpt+Zx@#S%Cw@Q*}2J)Pw zXy<1zY+W#HUaP;u%B0Ve@J`8*IesbCQE)m75R3+;E4)zC03E=Vb+D-x<4R;vY_qaa zrS`?qu}J$7mHXqtD8uL9W2V0)cYZE&^@nrbAqP(b!85Fj9-ygPbv&$UAS9&HxiCYHAk9)hhn#9?Lgz&5zf z4*)%QYv_*`q-fQ>v73cz`5Vn`O4zrb8N23BmxautMO4EK0m~r-$@9o1LGS4KQ8j0< z@G8=$H|56vP7(imK4G)4B0h~t=hJ;a|C10}89*WcGdUBYv4I6hRNL1C^CFWELl9iT zc%5!s`VGNCT}72uBJ!kyP>sU?=_Qqf+hdF1)h(bwfHaP8klc9%v6<7HAl44&L2J+B z{WHnI)kwfcS&DAzDMw-9r!)`eyxVV;0R%Ld@m*>$Gf5SW+6otxRQ*E@Tkr|zSOmxHoc{O0`%Uh*q`QBy|hhESi|JRy~=wM z>jZ&^-N8jk8Pn6ZIjkc)7fZwYO{c~b;oybWd2lpruq#``jNXEta(5>r zEM^)FSiGJ=`Z-Y*wK{&L;4tPPqNt8)9RhfdZBgX_2D|pNPXk!8R zs^%=orl!8`Zf}?J{(7aE=biPEuMR9|d4QdxgCemev)#{tnZD0x#DRWLS_hlM)#;;7 zW4tbfcCrU|+<(WH+8r08#nDvK5r!YY!@I&}Dv@l`aOUG#J@vAvk_pUpW{oS8X(AN0 zzSyc)lmjl#`=tXmjBbHuqqgCV1+#>W$)i3Wh99y$>jvm z!&AoznIRg8eVfYfCl(~%EEb}yKjV>7C>)O>8~&HJq7jTn|HB@-v;KYx{3mJ{ST;s8 z%Jqq)+F;;jq0Z&Z4yjhRM_vOK_Bp>*sFz*f)9YiY7k`w(9FvISOh|Mkz2CmNBPr+5 z1~SAgC}*SfTcBKugrXnFS5^*2+Lz?Jyta}0P@hlL$;qyca6k4Ke!JV!{(Z+A_ zU~{>ld3kNAeQIjTHak(Zp2qCJ6QQ_U&Vr~0pp;!ILa0So;rd-vRi7!hy9|1Eb>5Gn zfF^qZ$l^>W-r+51v=u9Y2FK=!OfgLN&MGc;vS`2IzA#}cMAx}K@|>;@B^e$MuV z9{_rzuRZGS&zY_Ya!u)ci*g{9CwWaB%$E$-W`Vrk{`P6+xGyu0@5`7sM%p=i&$m8U zWM#WIA}1*NYdc}GV`J7T7MB^v?SeE_;)EoI;cuCJRn7)ymT z_{4JbD%hn1@5JQ7XE_S@D2_=V|H&uJhjdysP7YZ{+Sk$ zXJ=eU(vd<3k5&B6x1M-M)W@(e-z_tzLa;1v@E6Mt{ntv`jlYlS?+u(NG?+AP&HLZE zzA7vQ!EVy2oFhQBux*z%H8O+)h_l|kWpAj@Zi{X$fh;;9&o$jujd`i|8wj4 z*`IKKVV6GtTfWNSoAEMS{A}BdyW00(Fl&x%h6Yx1Vy&0Pj@kmwsa$v1y^|M*?6UXE zdiGzSZFgc7L!?(^lG%5!v51}u4a19N&-0PoO+LeKY)|DNH^*r+7k1vV(w;vRv$g;E zluDsifi49TKfc&<$z<@eO304u;Bc(aSDY=Hjot?K_RMo)+FO|Xkjf*SR=$|pxwuDE ztz=dH-#wJ-W~S25(t!`E`3I0rrqV?(D(vXyIwIL7%Y=-GS6NJx&W%?&iPol)BXHB0-ch8MM&a7p0&08Oy9KZ0@+q$IXf%7 zdxY~3vabuKd8Mxop^&3Hoxqr~!2+3_fa^(JmV-LbF`1j*f)*i5E7xseC%2CeJK542 zw8wMe#lf{iFqnzu=x;%aQvF6=oF?DuC@ya=>g?e9HF+zF?#o(>>NuaP2GMlUF06sY z2=#|Ic&}%FAqL;-e;1T67u93W6rW&=c<^o#^DGXb<4l=b*G0sLQ8F$WyL(Rp?BG!u zUy6RV85p@mKA2$c9+^%$L!J}G4d%j*|8SFF+b~AUafkW?jYgE?y@tw5HryH!1O|FZ z580C8UPZxhcbzHnLH?eneXu2ms-4Qpjzvg1e8zJQ@66^SxR$OWJu<_;Oy?J=Wyk(J zN(!`1T&h|!Ms4fyix^YRz2Y6Qu(8xH^7o?Pb!4eDOs8M48WC(jkP0d5R$Hi&O=Si< z@F&a*$|v@0dOjRxPg+eAlLDAoc~mQ2Q>3^b@?Gurv4oYuS;bO;P>sukb&-joq1H4> zQI1Oyjtll0VQcXpj($y*KOv0^%>QyNJ4FvRyQ$1D9RxTe{>&b?XHohW6fJZ9krggQ z%-ewVTtZ*lj-96Hffx0rhmLa6}N3Mp4mB>zHm)dUmx0q9i{?na~s7 z+9T`OYtpX`ZZZpe;nMDQ$6h)P^fPd;{F3iw0P|-XP2?zMH`fbRmNhrXA}~V3hbpDg zigZNh4pnG6R_O5)-`^ap8zV3AZ zkF_u~Dtwd9VN%8v=R1`|=>Aew8dJKMT~$?e^Q0WszW9g+y{`~>Ba|UF|7=81t_ZniZ$nrVB>y{7KXxZ^qHmk{Qch;JBZq(iZ6Sg8*nrD7R;M#-zpd?YIUq^Nb zPB%}zFbB?McrD>sl>JLUu$cG?9QNco$!JlZhfzM5kxY=8dTUSP4C_~zGz*uwKEQ%*A|vV<*)w<)86FMl9r5qogh1x@d*J1Jces7? z>B?$=(#M;IUQhJoL6bJlHraQ!+5Uu86wK{HA|}L%>+M%s+pbjX^*q3#-8fr2K}v9e zz@H(16x|2jVWzSpPBNk~1wG6wR}~bc?hUg`OYMj*CfgiZEs`?dcbv$>^+T)qerX9= z6Y@z~SlJ@95kq~hHffsaN1F!+2TiAZ^MuUkp_pPT*Hcxs3ZQEA?yJWdq!>frnUJHYHL1wg^N^D^8>%isKC3f2vRb~VGWm9v!dNc@3hH%CK?IlI`Wn6R{YvmpJN|i%BM!C zD3m6or02vuQKA%;8Jc&F$zPKKN}?4ar<%Qs7W$o*i=^tV;J?x(5V7^S{Et^}F%xFs zn;7se-gBB~-`5Eolr`2u7%7P!n_H}|dG8~Yx?l5-6y(g5#OQZ^Jn1sR!;OWCz8z2iZ!xToPj0i{$~7)=am_3-JJ#`gu(RoUVT4rdf9Mc4)N|d-uugTF3La zu4o3+Tz<`nW0l7y%O+2WexPF0LF1TTX+!ZeX{JfstO+{PoMABsLufY&Jx!M{jEwH> z?HxOQQ4%$UVSGc?y0^-acg>R7HDk5U8{rbmZ1ZDK6`8+qwya2u1-|=#Er3H?SJ$9_ zFDWFxUoV|ri8;#D1lFJb1aq|xS}Se-TKvWMB`E)Z*gU^*fo+zWW{?1{b{_RF0{UZ* zap<@$A>Filt~=(yFVYRJVVHOa*4L`6beXCdKKt_20{J9`s-s(p))rEaB!N!z*)Qim zH#I?WY>?%{U}HKjV(H(<938}!8WS6MGUL2=7?ZBqW#7+qb>BO#)!yAZo(c?$NYWc( zzV$$t>Wx+{YJmL`y1J0{6{psZTY7MRn1N@!$0)znP8XpzHA^-d+;3{M>=?;LebaMP z6MF24A=({B2#0Cr3nK8JGTPlp`3!T7ly_~i%XGgvxys~*9hb5xucv71TyVpX{p3$oizcQ0$_dC&8$cpT;y z_l6+&RpNl$QJJmdb8Y^c)^qKWN^ccPTx>@~_9>JFpYQ1BwxPIqrMx5isg*3+l>Ug0 zUkB9+@QW-P11YpiM9MrkKX&j_e0~BVsSvZ_v6A1=T7J#jy^;Wa(V-X2Xc|u%k#`W_ zfMne&2g@#26Sy!vVgXd4a6j!^$Xk?(w@iWmB{eX|Q zs4R>t#i|^4xz@&f(+EQi%9g05#BlW9N4Pc8bj0F{YQ<;OdZz>A(YawJcRZLd^+IC6 zS%wN?*k#iIZT49POlC2DS`MAT*?MN|gCi8_=$Pis2qam@a>Bef8B<1Ecd?=RRaIbk z!vYc+d5C866+V@e$p3P0x`!zrw)_%T$`RGDu=AZf{Fq3g|7Fs$lyho=UgeP}a~Jfc4#hm6JIE z7kh8g`ul?_=9l!T{DnG$BeuZ0FH1OSt)8C>FR^R58J0BDt*Z!1SkmBqZVttANLPcr z=$O-VP_RVqPSz6UKM=pDq~d2`bQ87H;J1kdj5~D>b%u8MS$R>?3teoX0L-(!JIbK* zq-zenkrZMh?Z%qA>hwzWO0yY3BGj^x+5K*P+MxH=ALf3`|1@bVZ2NbH-*o9kYo_mWEu?JkEt@!>aJug!750_BENG$^&qcG-a+ zmiP_cMdGSA{g)p)8s>My{fzYUBqh-U7#cvD)zynlCfvO{H_%6k?6&5nBBNS&i*x0= z(rw~EsV$BbkVmxU#-TRj9&e?JT8>e%o^>$`)?=R00A54y|jR zwdB|+UY!)fneTZSqN|K(zfHi7;XN}{8SM>C4+5Iny|6S9IovJD5UYJLdmgpY~pA=I%2uJ3rR>j|Nm(E%CIQA zaBD&uM7jlG=#XxP?i`R#3F+<*rMr>tlI|{Pl_0!xw&rEX8kF+|1AozinL_ME0p>2p}oTSHk|>+^nJY)H9;j2ui;az zwZ^I10l~ZNliIfS_CF7uj*X(e$t^I(#Zrxqs(glI2>(ia{mXm3ZZXX*!{i?yVwFXo zaix;fR0Rl7j;axGv{d~fXmE$VhQI#$vGr2BZt!*S=|&eUmWCuzXLZHto}08Zv7+nc zo(fm1zWsL@pQp%n^oGm8IIyoe+HtN0p0-kRz3&MhzEhwF`_iZ86SjK}WU1EFGBIvQ zJPAth(@iJ1GpSXLiKIXoac;g)85gq-uW5r;lP8ggWH+VUVe$^YL}~alP;lp~z~>d! z7ui>kS?w{T`6m7FoUQr~$?%Su4X`SUHL1_8y-M@S@VnRVcloz}e&evIfi;OQec}D_ zX5`GLG$<^2p!9VU&OlV?HdePQcU68eeiD~yxt z_gSaM4DIxIbt`=Z^0k{cq9D$H`(HizMSZgxxq!&WB9$5k(pU5YWnC~Zb1WcY=HnCs zll;E&;T}uINjNGgTWzlnv{yaE>`q|qXn!x`9VmRFD&$>o;XLZ#31$dvr8R@)`lssX z6=3NQJy*L;nl~d3ue>A(1^L#Zg*8b|(MhU}YxU}p^eDeC43%=tb92rsqAA%4r zgF#cqG8WRfPy7{((BV9KNnzC}x5+IOY6a1e4d`o3)-mO0NuA&X&X2!(pU}d0vAxc| zi+*Vo(O+8roA%U$c;5s?t*fC=4*u;SDGCbjXKxv`E2a!k(e2{UaLv=D`Mg-tPV}Aq zu>u6g`IV0Hiv{EZad=wSbn(tABV;s$6FOp( z*tlv?gJD2?*zxe}eHd?@{&)Y4vS;KXDThXM>l(Uv@p#H~O@T>&J;I1i;^hq9zq@=x{L()2^(V^p9M7(svIFKO z-xv1$*hUs^}}x`8|S%3Zv5m6eH)*iN9{c;d`ky52`BGNi70S$-IrpN0Toc z_i5)JWlSN()Q8a=J#h49zYM;Zb<#b5JQXStgxM}x`>IoPT-}gFi}%3wx7e?odf4V= zlMYAEbV{gM&<8<)^!D3lctfDK66T%@W!BNnZ54LqXd)^IE%{w0z%y|- z%zA^}ZU9=;%h%q;7uwb@@HWOU zyL$0-k6angOJP~tZiMdRV_PGyKS*!GfBJ0AwXojlADke}6V|m(AE#M<-0cmj1o#}R zwmInuGuIHN)1WN=op3KDs_7nzjNZ2^mey-&EEE4>#AJ>T`P*=w5$i~5)^pCdU33=J zim%b51J*qohp)W_3ouzjiD~!KT_hwgx=SXC^2xHFH7t1hpbsb5#CEbEiWV?PESc^m zodN5k-?8ebrpy{FUdlVNN=9?;1yfbg;_`dxjaf?AZ?*+=91;T~7{+&0ImQfwiRnN& zT`-sikNq*m?CRYhH**mycRmhn0Sk{e_-b96YAKU{Zb6BSL&gkNX5Of$Q3x|9Uqd^kR1!)=Q(_$;6@kYdA_v>>;5)e!3JVqx*ib*9Reqv*{6G>4jFX5CtkUe>gQ*o0 z+xB15wMAu6+1vXbhVG{lbWO6^l9STms<}tbFeYz#@-|+rIl(+`Fp)>_4T(}Y%XHJL z(pri4jCsG(!FT6joNXIk71HM<_vh@T3OB_&DFXRt?q8&gm?v1!K$> z!|!4!zPxh9=?*WHk)QXKYsOY8YRByqpi|F!v?z|?Pfvk6uI%I5v5Wqdkz7S1IKjUT zio6`b-EjDg6R9+BF~$!Ab!Vyib6}!0C{1Hm$*+TBuIFeMdnU}uQsS&A&^|zF`&>@m zzpFEUBhfVPF5ZW`vxF6mLQP}xeYlw1@{7LMmua5EUg2;vS8PhhWjjF6T1I#EC6KP9 zx4l*xc`+bj7Tt`qL7)M;&fTjB)Vkk&fetR*_-CIxk&iVi31}fWY=klRyrC)KAn!nl zd5OyUDa1@AKu)y%LKE|gq%5~^I%b#Nz=(6=<10dg`MS1dCP`qs|t~o$EP&M|6-`K$_>P)OeMywX4wOrzw~U1AqSV%$8|`~o37e3mOo-Hl zhX6&5^2($xIbT=NkXRaB!nU3l_~6{xj3%Ppe*vIbns2$Ts)&-Fa#S$UWC7fPqY5z6 z`{+M@{N%)8!OrCEzISI#;t--s5dOg zrxi@==N&3nqLWio+Ei_OoI?P9zh&GMYm;&&v`Jp{Dd}fLK1RSK z+HOKMVDaV(AUw2Q^FShq{@it)45UP;vlY{QxFWj4A14~LS)C^5Y0upRrmfgFov(A_yYKi)o zDQ(6y1z<_aT|rZbKuM=OI9jHCojG@qk@USrpE!u}{)!6y7* z5sHyonIo0M*fMY1*Me!P0K@Li*Hdrzi&wLA<*zJjHII{9n@=%!o4>05EHI0p$)_Q) zzWW*>!yWNOjn9Wv3=@IOs*Xj8k2fxjmFiIvg%W?J$$GBkJ%SRAIVs4?1v>;8v}WqX znH=E|*}pvcjUD0ZI|&Uef%QKzzIWlSi(~$(n^l$Cx;K@awzUytLRXtyCl}c_Tej7& z2!@yY@d03fbM{u=d3&)kCOwb+(COXVDF{q+T1c`dL4GmNBto)TRB%!=hqY z=$>6je=TSTw?IJFuyxQ`;`mnlbhZt7K}D|6waH`1wAtLZV-DrB5a|+bMMh=y4BG&s za&mS zYQ09VxWHhDYb~i5IS_Q*tgNY_g|avHCW0|4f@P!7ePb_HDdhOO>6b<*yYb6s>{TrW z`}&p-Gx|FCSKbr1C)WNu>x>gSOv!c<_Ry4}q?Nr7nJtGEemv0&@N<3x4IL_^mi*j_ ztEJXyO)b>QE=Q%HIL^#rA1(2f-_=g@{Fac8!1DZ#dbh^6dj{Z$2|Is(H$K~Gi~IUZ|QI*f3A8OMpBa^-O;D?^)?%AEBwUo z*HfAH`Cr;sEt2xetcm!WRjWL$Dsv`dV|%GoIZdLParEftZ$kJNQ~VLMl%;Ilp>o^! z!yrJ3FXXh^o>c$cVN9vLlZyKrw#qYndt53D%~WC@n#i&g=^1)^quELV{ke~Td?DZH zPIObvSqfZH`6?oAGNQg%*Z@4M#g+5UXq{fO(p7i|7Fn{Xy||gaX>vhIze{&?U^#v9 zA^r%D);?RZn}QiZ%l8D3P?NH}Ek;stKg6`2_zSmt*(ja0ykf8|JjPGZ946 zqKW7%hhI{a#^a0t`SiI$t(YH^RB}#Bimtx{K~{N<7X(?gf1?xOrm)e(Pn~3yWl_(^ zPF;GDGMu*eaJ91G`*H3BcTvCqgKl>I1{aSkCAw2sNoGd<^D(Lgcj6*TG*a>j?sS9a zKj?{_VX?i7Qi}Q_r8tRnRSSfvfWcE<<14jA`zn1DXA*xwy(@K&+f+QmKn1M~ExyIb zZjJ?`8YD$|M4d>q*7eoar2Wx#cJzAc3STx@qMqe0qj;_9v~p@B-7E{8B4>9-_LUdF zj#sSl+}gU$inhV5vGjn$^vkT?hb&w4G6wUW0j8(|9TKVb8&-ndpg;kYDv6hNQ}G0| z{l^{!x-EB(R)=M4BEHhB3dcf*r+O+)O)NroNW|UkZ5WmB%Gg~s;|`d|p-5C_po4BJ zQa=NZrXoE1<041z?;f%YxVQD>51$raZg_u_ZK40gqm5Yj=@_n)H5f&0#+e&9OEk;N z==dox@MQ6B5Br>U=^r#$$Aq_8btmrGIpG}1>yg8m(_xn*A%I+8uw-k`Gcx{asXWjy zkZn9uZqBXR@!1t=J9_As<-cTp?%pYX=JK|XxWKEY0lf)D<45&euboId5z+Tvt%6NI zZ%+i=k27TSS)zU@ajh{9)tnG-Hen8+|ImwZsB3#$rM7EFwDji$_Xo>bBO@!%s=Hg) zq@g6)MmiJGqy|LzyH#|Nr*#}ZIBn? zFQ!_Rjd6y%y3X>;c-rtzo|!fcSvfhV6cbENa@c~GTc&>Rgo&Mh&LRyjf?G<0ZrnDx zDz~oLq>IfAZ7qX87uawxIN`(*uEWzExtj4S;;saA5mc-knWYlQn_F#wWscb_l3Axa zd`+y7bZwT`U?NUDdIH%nkadl7%K%fj2d$R%j*i(UzD@KDW$sBMvXmeEX@gPr(6@Lb zPFe#KPG^FR--p{X<*ZGRD!*jf>UDw?P4)B(>j&wMfI8s3v^?+kcNI~kH5}H9Hx*wC z@2MtF3qH-@sala^MFkjGJ!Z?K6_#gw5lXQSRWFTa6=)|eid0sbW9tN!{lMk`WJiDS zyNi*RHHl1QX%a#e8bF7`@4_2hFME0k-jS@$wEjSbk|xRhSx@3#7U!gDiN z_$+lH4X42TAE|Irsw=18&JJ#$5YTDFmKM7c#?s7^8ptb3n{!t)%bV6sn&Rv1JKg5H zes|xvqMquwKvB%CbP!<>ljd(dItXnbrnU80NJL$xO*}j>#&z$HiHkFMvvfU`MxfvL zc8_$Sxv^3B7UzDl@bB;{lOnF?RYkL5l3uj*Tp^_D;QSP7%ppwa#2TsME7MJ@MPRiQ zt7?kNk|v)v-65byqSq>6*2&wRIXTgOOoo@vuODJFmfYn#%orQVl-<4Rn6Mnos8QsM zPpolQOkj`lThlYgp{w&{gs^*}{ERXfNq4cj(SbsbB}ccSq;XMDzcA(4G#QZaa4`Cw z+egP~_}X-)XSs1Kpq8^C%c!XN%tq+sK~&bk{kHn}pu|1@asKUW?r4+F!v3+MhSMz* zVaHuO^K?f^vuo0*Nh(rjzJ)ZYkdwP*?3CMGYjwEKa3TUzlY$OQ4Ofm)zP*-MbhABQ zkI!m5iPm%rWl;^Gp>Gu;ru`{9@}*Z;W6K0(DfgrYS(JUzdHYoq!*B!FX=g#C?F=#g zy+T==@Pk4rIdjvjGkGmzbpRU`JXIli)a4nouS<+-Ei2&<;i-o`dQpM4)CV|KgFe4I znh#d*5YXy>m6g@he~umLk6U>cm)Jf~5+b|@p+g>5pqzkRAZ0uz1^&Y=)yY^rWu zrxAQV3op41aO4nSbrkJ>Jnz5mACsL*R}XMps%f1Oa&gj_{yJm{d-bpr8Z27_Z?3sq zQ){qJySVmb7kw0)JIAeEuvib+?+RF({z$ggAJ(#7Y-kHB;=7jbY-ja zxv=eiU0SQ>rF82qpj<72Ihn5y!)9teI@k7W2&Y}y2O4fn9YbKaNDjeqT!p1{vAL6W ztL=C)&c{QTH^HAIDQ)r7G@ZrL_LUm10J-zX$lW)}dk@zeJtwD=6-N!0d#*}XjI7Ld zu41_=-2#>27rN1|vuAX!2M6)fH_kP(cV_$9~+Z^Ijt4T(2YXZW`~oEFJ6K zI~?pZ-P+CAx~>~f9Z&UU2`h#@{N{iyI{fWbzVf>k)XzH4%1thE@2)r{%VRu-lAygY zopal)y2qaCg$VK1`o`J69=woz~Cj#9_FqN z6$JdzppBjUcqAX-kyXwXjMKzjDhFof8D;}aRUl5a#=T&;6poAFY??lm_4wyDrj<~l zH1;i+g26ICLyZ#Z^*?mOC`960nRJU~$`8&`9Pbg)Babg!LGqLs3HXG<#xsP45%m_J zxZMveW35r6=eTR2sO~LK1gfD*x|@sSE_Atfa620Q(PV4RH+SMG=U^zJG<-HVI9x|- zFQA8D?%Z~(gN{RZ$A>QeCw*}Oe=*1C-7yp|U|dUVY`KC7gSS44gM?xC+mqqT5muw@2&{>M68)yf-EhO>yD<>NinyXQnq*g zS@q@HxMl*?oq~;;KXpp8fPaLJa>`7LYlHxTDUD}2s>6jvn;=Wzp2P1nTEiYG7g`l7#Q7pcu5FDQq|7S%s zT+k>E&5%6S9Jca<{PD$+u?XlkY!NvDh{*%Y%#D9%6k{c(bpmKLBFLPhgWw|!9I z&lXKo;fL2mh7;T+nly^Mq!m@2qs~WpGQa2yM|+%1r+OB&!$F`O9+u77xMJ5<3rCQb zs+uzIY^nyaqBWAmcQC`$t}!4v+C#a0@(%XuG^hUB#7o0mfF$T4T8$Ug08*X$Y~Q*l*xHfY zISS`%j;>AQV{xGz$F-@MC$JhzRnW$a*4C~NIXQz}P8CNa|Dr88?h(R{v%$GhU zwu(%SXaW3A_+k{pY*m!46{2-^+-9N(zxq*+$=C4)JJy0ShPgs~1qadx<%~{0+SAz* zMZX=qJYsx{tsNSzqz6CnoAZfA;nQ~^|2GQ&&{aT~{QH^=*uwqTdP@3HZ2trAPpIo!DL$de(dsa*Xa4gQ5WY-R|Zee2UcaOfI3Z_{X6;mP|KPpGBa zRnr{c4Fht8w+d^pBMRSS2NgQ_GmLp{>FZ<-Cl(`@U|MJv8H}6ufH=`CbdyUjA{T2T z1(}X2k34keKo)@ksa}KyO{Y7M#Xg+(3`em8?+(NnB-;zzTIiy_{KBr`T3aoo*zih$et%_lWKF;!ZB?d3I8#_{;3B`7plPz>j zt1SRd@VYnmZ2mn+{qf%~#Dm%{7TiS`wtG6Wr=^~#R1Anhsk^L6OXm)^1zQ+ZWP=i~ zJ;_IG-{9bC?CUcPhERJ)0Em8*ylas?B%%})6LWQY%d26ZKef`Q|*5|2^u6aBQ@4Y3Ky;LEAOx?zsAxL-u7Z`3S5I42yBlb`d7EG-qrRR79x zb||aghYYWw$hc6{GfjSJY~F%Nbwj7}C~;|9?S*0@=QYd6U~SdPX>D+EXZghyhxF#s zX?w7*Yt!>jAZw5E=XSPcf4AJ{L2k^Z|%?b#TQ7+u%KALCIh{-o~B`7GMMTG(bS zSTgfJtp+pGUwBo%cJ}5rfGP?qFlNn>&Beg?n|b)e@CKb7(Hs>1$NkTw`i-o!O*Fv~ zN=Ld)!!q>&t@aUP=vN<73dqy#^*!IP>tlPOE7yZ2*x=u;rGVrurJ14ytkc}ADJzrs zzpJJB79SGI8YkhprucT^-N^uouyB5$<+XT2oKRQZEUXJ`vncaOAzX}T>==-ibc$(v zy6O`voJ`+WM-H4HiEZq$S7Z-tL8kC{kJh5OGWb{j-FKf1!av$uS(nvfYe9yqLZv5# z`X)=>tZI%QW0SqAKUvVb2ZhI+&6sRo?>9CK*^IjQn>0`n-c+HwZkX0nMN$9viH@k$ z_q11}e{wIhdD-Htw1n^L2P2QSLotYSSO|aCn=br27Nz4}{`6YN5Y}<;;E6E5Xr$Op zJBiYRus)coBxa_mDQO(B|4}}vd0lVkjPAr4AlvS_U^VE`&sHsCwZ~iH+wx(ew%^#? z{1O-#$Qmb?go(k9s|M22Z_kYh=lDW}fuk+GC30B-Cj(DDLvO(o2Pm97+ut!kJuwyB z{VpKc-kpZswmC&x_UGbB$s1Qx;wnX`SVgx7Hy?DOc$UX;=&^C=<6JoCa~yCgqFPuu z#!CC{Ze*2o-@hBusIpz&>K+GJvwh}zkIM@jw;TpTuj1LaK7O}%Or~uqGHemBujZ%+ z+0Mwa$Vz6ZO3}Utjjp6IaG0=8zyy*{U8MvIGCUo41vAAFqaU&l+b!qPFske$uEKTC z&N){CJY>x}4t3`$K5aZ*<@UU;@r>_{nRCKXK~BDXGMPK;Xv2C~1m%sdwqlNTfBU22 zaha-aXK#ZPjz@(z>(MO z$UnUadh%z{5`ve!?54~+KK-W-AkNJX^Z1GFXeZ{5=|WAZFFj&sv*mlDBDYu8z2q!AYZC|U1?V}l+mP)?j>buP62v8w1+ z7S{yX>7xLDmdqe3z}zoYKQ1rBUQ#L($h#jTm^{rcV<4q_h}r12_5UT$y~n1Df@fw@ zTtAp!dUp%kV*c9`DvhuTlPccr;wWs>wOuj@^pjp~r5kmWhD>w+)`RN``jGct*9B|r z!6iGdO9NjCl0thRQ-xs)k4w8)CU$EUwC4%=bR}#&u|z|q#)4m%5IrPs@B?TQ^0k2< zSORxs=+L{G%2+07l&nqRuXHb-rSc17o=gCy-I{i($12AFW3=t-$T#Lyeri-EGp!Et zIeUD0OwV6#wg7Vi#OL}HY=5URYcK93nCEJ0@~}S$K#`dX*E<2q`3&0c^e^k=QyTTu z4`OpDT>xf{50ZR*f~Pww6cf(pxYT~d1fct#flfkpJZ)++a?4H<1a#@)wIEBmh;tTmo^^OBeg z9POX7H>?;jEEpso%yTKfG-`UxU46zP4|W&$==<>F99TX}k&Z;cl~zib^0`rtaj z8mwK8>-f}%?YzcFPQz7DiQ~}v{KtSiN}|TS*HeAd=hu;@ZL>o3cBo4``S2pjT)@-w zQxryi;M9c=$z9QwCG`vOqwUW;OHVvvBqwg+U%t{cs<+;w+q4h*J|c?V+o+Fb$8d2H z-ae^h7OHS@en@ENdLB7{#ofL8I}G?YhY`YxxO-b0Jq!ayA`$I`k83vI5}qGd*s%ep zw#KybZq5_Wskp1R`j64v-wB6aI2vOd!go~YD>lufDZJG;38LlpYc%r%0S)RaSa->~ z=&soe-bt=nj>Nf|6o+>h#z^>%l4;sK$rTBn7K)1ax+cP z5DF6@ryKeHv|F0*Ju2Z_>$?S?oVcbX{jJa7Z=5Nux-MqyZa*!5b!)$;eLqq*LzuAF z83b6Q%b?szd>&MGCu$IBv{fdeM0WjOP&2s%5WQkqq5ex~iz;MTO!1{;*ihQj1OM$< zc$0}R5LHN}JXZh)|6JQZt_5tA9{(m15zzYpNG}BmQ*>-swziBX7IvYWm;IB(1{CzI zoIQ7)_hW_@xueesUV?x>E5=1YK;-w?9(0|+kztefIy~pCZ70Z33%kTmy{4tMZST?rdW<{z#IaHaVb4t#Meb$m^2ZxKG;dz zewSPH6m&c9_Jt5X15#{y$c-M1v^A}6Y@XE@t z45D6`gcw!dD9SIshN=xKKh@CEwJFBDML*8(Rln`WTvMPAGJL<_;wFXPtMft1dE2lV zPEYkv&|IR-on#xsqheQ^u59BOH^R)~G~#&u1J#k_cV29!lT=I2;Po5@)L+<|vHwaX z)dhTg(|!sasdn&N#!~F3iQzA3<*~)d(7n*S%tzI{Ba=k zNFFtC(Dh87X@&C`&O*+LTcQvniBM{4tvQ>{gpe)nCU#U{p=Uzrh!-6bsOY`I)=$1W zt=HcLXh@g>9H~faYio!?OBsI@ms{VwL)F1;rGb$9d-CLg#4g+K(c2g%vv&9ot{zO# zB6l;cpi{L-ebI_5)e(WL&PXYKB7DiE*2oD|HTDCAx1S>N);0fT`!mPxUE)yv9U*(z zmMLG@C$^4PJ=pHtf7o^7YG1kETq1Sa^7vq!V4w=_%*%Ve0rY*x%p1OZ#@PO=gjlSc zm)u1j@8Dt5CDhw4P##$0*z4cNf~QKEj>%2OX0^lvttZ*S>{__@~{i_#a@_-&;w z47gI7^C{)mt?|J6+R!27dwz|QHA2l)%J^lnTcpSa+tajE-JHK<@&qI;$Vvbm; zdmRWtw9xdXnRtQZfbOj|!oHcvR7vOGhwIVV3@$$%S_MBH%Anzf=&ysBz zJ@2l%M-+Ei%;?8eAuLdSURpkK&`j*0K(bFU8}j^4(U*&5%O{s0)Np&vT1D%>Rm~?K z!l=-j2bC5}Z0mY(urMW99wentBdE8zhm%N39dDQTev(awaPLoRRKqH-+q?+Ct$tKE z$=723xbIU?Sr_&Vr5%1FSDdEBw`box_1~mCj;SCe$h|rg?hp>W^5@ep;p8*GSj-VG zpZ@2m2B5sNU*pVCSxTxx*ST|bj@@8%bU%CJRYzwSpoR4V zQ0eNy&*ZVg=jJH$INdP^=Z;OZz5*_xySrOFl87n+g!W^>1`Z-|O?8*3L)BioJ~uT7 zVslGs(ww|;Jwmnqs_H{^lO*^>clhk=EK?|#VH)g(lP+1$3&b-zqnjzP|o{`cw6!&{IIsjelv%43tK>)o?&Bp87zAzXWEu z+;u3XeA6dytYB&`@Ws(Fej@#&M%q4U>QiY4y*wu<@WyP#oK3DOnOrn)%6l(SHe(8E zd$n%4a5bX%xabMNKXR4dV@jiOF1x;>L2`2YGPG?cmFAEF-fEfQ?2w0^+$Nl!I!}!~P3h{q=#ovc3aa`Cq3@KZQ4lk;ZSSVm9(eI&whMY9R znhEt!_B(RDuVi4LmXQ*i_Gr8?|GLJg*XBalowZ5HRP-W z!S}l^qTC0hm34*qrd*FYj5N+dvkMra#NqFfozX`xT&M51CXh^_tVR~yAu#a zt8v7tsI-Ce0;3|f1;7OVE0Ms(Tx(>O{uFreLf=lY-S-CT*pD}m!$s@~DI|RZrWlu@ zg9z?i7l!xGg7TLp@UjRXq`zYq2x6DQWh{y{M&08>(L~`dxA1XoUGl=Ilr#tQT({q! z2Sb64upU~uN4c{Pdo-L&lbr16+vS0aW%4o2|0YzQ(XYO$a;}Z7bUs2n*o@%xYiX-p zX@ZIk;AF%R#FE_ev&(cCQ3Su7AMtpwfd~8?hwP4V;{zVFljtt~99*FRw7Dt|CB^{= zO%~2hvBL2)IKVUu_k^>D-G>Gmq;qj(SMCPpjS7Lm{DXKB z5-e6s42ef7=iR%Jc?UP-Qati@^i%BM5y9-2B+Ebr%fuNcfd+tR_>2C;wiZoI=`;(( zjLQw!EH|xu(tjXD6Li9F8^kaJm`q#Pyd?fnJ%LhCEF5NU&1|jm9OihBDk7`@VQ1=Z z=v99SI}jrn$jT>S)_5vZ1n(GBIrI#%$tS@R%jJMpDq>QD>YTe0gRtQX0Cd{(R)OH# z_U)CbqJH#D)d>Zxq#zWIhEnXICUPe&9kfxJhdt@%1k(EO{Uhh(i=TeA7UKOCeB3YV z`nZR)2p~$|18$HvnCn!9s4uY#*&sHKWt_!ogXfD7>9QrXuz=wughgIR1vwrz?sJY# zutO9gTy85n(>O&Tfw`n%`@<-aDJm%^TBr})n3K}d9ma|A>658`>;WipPcLc*ed0k@ zPW`8wA|jGzyJ99S_YHV>kgP8eWpn+jgMc8T9O|j)1Q{inw4C1h*!mHFub4KNu&yNarxkE= zZU}FZKqM)b&R`JQ{M40S9dSg%slK0s^tXN0plKjw35rt-ecEoUtPGA-J^RRJp)TsI znbJc+-$F345Ic&qmphAsYqmQwCzqZ0D;z)#_^OTZ=Xd!#`ucB{{}Z<$(>Z-J_z+}p z^e0}^a7nWJ`Q>iosE|P~nmGylZUCF|9+lzdN%Dx5uo3VAS2OVeZlkBPCX709lPx|= zvM@WpU(z`2^j{rG0nkMceoA4@k4PVx3m zbjwx2mPQX39xAwcq}*QwI=+I#GI z(wXDNm#$9)uWMJ$aT^||Gi%rUo0i1Jf|EVM8M&BFpH+bunQfJz`XKP_8wJ8ojSQE*M&}M90+Qs&gM&vI zpfRyU4&=eCzw7=70(tKPfMTW=4dwEf&eQx20{$Ggg`=aRlSoYA-%opv=-Yo)x>nsV zKYfyx*5@0P2hN!yKi?iBCX%=7&1qk+JJhH_JS4kgVYfQuH~hN2&`3ti=_v(OK@I76 z!%+*Fo8Jzp+sBu){W)HOFaK;E+XZU(s`spYnD9@0S=pLigB^P*QdOlX*PnXusQ!#3 zH`#Zl{n8wyH~-hGp@8L}+Ot2Pnt#N6v@-xnPu0lX9f^?2>OclVf{E?sR44@>Fl z>y3j)R9ZOof^s553LxksKo7G+F>(Pn@U8pT6#RZC!J}3}_pZ9YKgBP_Pxz>HbEdvcCAOTJ?wnxq0V|!HhO7 zS3k$tG&r$Ep6m^#!V6U%nrcu~HlQ=V-^^?8=-8;k66SNiI0YmD*zM7Szts+k))iOJ zlbLjE!#N1xx{(PBts>5o+5^*EDMbElkFHF9cCfWYnO-iHlFe+f=71b@GsGzxRCH}{ zk&UZ?#Y%duO&-rRjWb_L2xppD6KA;XvGz9f8n>N}G1pqrrtLNgckz!(0|jK~-KEJ@ zdEuxkp!ZK}_OJ4jy_5B-R#7ScI$1F6E-A(>U`3sEyBo5+&H4rvIt zj%BfEXslzq!CMYF1VWg3n`t$!38)wotQ$O-zY(SX9a~{I($+ss;LsO7MV${`iF2e_ znUl|4I8Na}?f9$t!7Z0ivY^|!pZy%S^ys4elfnW;|mytPq z-#0_D{-8CO&oiMJ8_C(EB_^)Pe93U?nP2kb?QY!L_L`FlEti~Ay#lvi+vE#rIhuWL zY^p8QGjxc0N0rnnrc@>Ngc%HPss6wt%f{`lA7#SF%r8VSs75G-(O5KBiI*@~@{@cB zDP_`k>q44uV$I+m&WPw(rHSK85SEqosN$=4Xs0P@d|TprWFwC+%RqpLHF+!4q>y8? z-=;q$U{YR*xHIZCh2U$~OHR=`_xRj65?@Q0KGnDuU_iv~)kZ=*!;MjBB>_1}v^d8P z5oGu%xaczZ&jbU0P4Pn$wV&C=VHZ!W8OcDF|S>ks`3zTH*3@@0KQP=X0=TJ<<) zegz^udB45776g`w{cK^+rWUHHR_7YA&%Q|0Z~NCg{I@c9leacrOJ)VsAgM@;yiyPe zd|BAMl~oopo&|8ME!AU}tgEH@mFSmagp-S99k7Bf*leX_Oo6{svB8x4G(|de?UQ>j zZ>FiHS?W*+dNr5II3Zuw@A9;#!AQC>x@C{xGgr;|g`JEI5nt}bf}(XH^+oruMIdEM zm`{0mRusz`vbL|CSD7pMF6ifK)Ix)a;2J!>dv`vQZD}LgWJfHl;rr;$b#rgc@$N`^ zCD|6&dVnqKDuYr=gU(5kC0>epRhsW!GDS84?JR}HX24VR@tHCH5a~^0ZIdW!m5zAG z8?^1e;ACXk&{^7*G*jM*ppZh{#01D%(x6m1IG_Ln+#3GN;3xCWwH}>_f;tq(04nfatPmWr0M7Dk}eo8%#(e^s=qhbo44~zAz1ZFP(B0@Ca?LO6HnQmRzQ>NRknY zu^6hZmY7rL%=xXOxfD_OjbFvupjGIvTVuU(+@oaf8-A3qqBgY_pS->W^gYs2>)uIb)B5_E{CpJ_$0)8;Wb&;eV`2V?3I%yb$AGz@f$lm z;mU*0o9=AmzFy2J*=7(@|S-$CU2l+S9{#e6otE4Whlnw{}_bgc>|I z+ZeS;_$ZLsn^y4|(h!&_Ow zQrDct6nl|rRp?mCgG;(_o^a&CJt&V-#cb^?hg$p~Kv*Gx3b=bGH&rQ(Pw$4%utly} zzz>ljvhRB^xj#8fx-29NkNrasUZ-uzw`+afAMTtjQ#8ec@ZG%Asc0&#_sD;U*+uit zoL!A-v0u&vV_E4EFwb5W{KNIl-*0ozud6{+`B6DAs6ov|6GaWayIy^}8%fJeYe zD62?%uGWfVoegP4di&Gvk|ndH%lFicak$uAmlrgO?@`NftnFtO;0aIewa`?5~uJGC5UAD%%Hp3EZ-PcA%_PoCAe40*K$va0QnD z4rd_z##VANO2C?y)BRRgj3{eUH!a7X#1XdIV)*igB6$#R2V_}qw~}d};|0sK8a{sM ze;o~fy_8h4M4N0Lluy?U0Q%~nNnfX?{$`bxtPq;d5qd0y!hnL>E+XZ9UmY7To4_#f z=++BI{a+J?Kk!9Z&lY?-2ad(|+eWnYR-5GHXP4P9_nY8ae_=Z~lK%K8v3b{Xhjq1~ z2WYDmk+VLst&31cwIKVLRNs(R*X^AG^Ez?~aB;b&y49qmjjRE;maja{b`ej8l5lH+ zP4Cb7TVdybnw3o1BhpGe&y4_KWu+o&DG&e1*%{masBPai=KWSQy2Lg57eZ7;`}-uL zCaEs!y@8k1hys0$wvoCvU%q3+Tat}TD?6R3qhosB>q8!N^(OPOehuPYj_4N9j*BgobGA8Ri6Kyo; z836SxY%ZwDf~<|4Ueh=_YQJ4EhIMfQLjv4W|A8R@1|kW<@eCNFS8)S%m83}^1QZ{o zl-=vkVrSFtrCX`soWjR8MoU&1O9l(8%1nR}-gt-N+zX{P;O57}e_YOVI~bcyB14|4 zPk#rfeN3bu9#nj!ExQPt-VY>IR(?>SzLdMOJ==??EcqZm_wt^@np5)70nA(?PSFZ( zUP9)jEE3e7D?M{j>ALGa-=};nI^V4y*&LMxU*qJy{IaAN=FCy&5JX-IabY=d-GrTa zUM;r1fVN;8uZWZnqq1HHTzQS&22&Bl_H~+({g}H?s)5@a;Af)1u`<7Lu1@GPhwJXL zx2tijHYKrjjWLXQ^XauGJn&Z1aWC*OuQxvabzwxn^UsINv1_N;_20aeaULruGLZS9 z9tER}|3JgLazEJfNK-70q7=|{w^Cjr3rLvi^RpoK7$YdVE7DAlnX}Tfe7L6vPl`So z_rz~`O*vk|UiSj`CtiLKaeY?~-*q=v@$~%(o%A0*Hks2);F+&w<7-Sfe0cz z8i*VbE?V|}Krmrlj>||gT?v|ND+NWdI{HtD?#`t9eVFn-qw)K#-5WDP`5HMHQOWYd z6sfX^&cS|dKlX6q$@f|C*h~8%lhSw2?3r)tI`!m);bpQlK*aH-p0aP%bh>1%<0qu; z?3@M`m={plK{`Alh!N%R3+@P+Lbhw4J}^es_)=OJ+MfQfTKnL#d3&D)>2M`s)#7P$ zaFEMPZ*jkqf2zI{c=WY>5|;5F4;^x$EVnjg+ERfaHDcg}d<` z=lCUQe9z91-@Rnuucy}y$GLf0?_6LlRiWa8jKq%C*Dd;A|m?_=yA{4e#*Y4(PIN3f{Xo%6Zr3ZOHqT!+*@hG?fnogLQ!mC6^6q>nz!eE zo3I4t^W(5v%CaGX{D@l;A|X`oj?SVa1h9t1bJ@wf?Mu_u+w~*e~1Im*d(!oNh`9C=#WOm{!*I z%4y7M?8a>3JjEn^QGBpv?8}bxM_&fRgfFZX4`?q>=g+(^cdgH;ka?uKC!tN;!NAvZ zKYcqc`n;j%KI|7W;Hmg?$ye1oghrC~oc6*9H*Y@%An1JFsWfBLU_Bg6Ja9|<`eYzL zX!Ezl9tC5_4~#IVHU^HXD-WY!?QbX1E!kqK4>nufBp*V9Z`KA%=&(A zO#9uOM!W0DTLXA4|9cGKAbH#v4!`refRF!y@K}SL+8F|#VL~ID42hn$S2z}@4q#_C{S zU_+;z2u_Wu#}mQihW(bh0fyf_qs6t}ckaEiNoX>l#??(Pr> zR;(14BE{X^-Q6L$QyjiL_uhAWe=~AMPS#j^FPn4Cs9g1$s!I14bbF5;;jOxgm+%1k zdEmIK;}60y9={!)t62Be;Jz!kg3e~-aB=DVS%)fA8A0}T*oKhB_vsNO#b@UWMMN`+&oT#&3qj+*inCbG)DkRDQb?AruXN59q&mI3Y~Z?o7f`qza&zXQzhuj zj$n{=LZ651D+}F21$GW6wk%V!&=eZoe7k6UBi0@g1lG5fCZ0LkuM3=GadE6NaWzben5u}j z?-a#}tamp{+aEt`erRD_13CZwCeNbRIB2C|s1pN1qff8;MDkx?#O}2CAM|3erm(?% z_XIR2d|WjNr8ly$o^GCtR<_$pD^Fwi!5RDdJH-oa$8F{vwW9V1I#0hZSCfM^3K3|u zO^4t8=f10z|7*GItNw)5=y6FMZ5(RbbpYl~S1Z%b^tkIFR%;!D(rG2*tr3N}dW#$W z_*-DBv)%ZvT2bdR>U(QOF5@8kq?M=!>*Oah>tlhI1?#zUa|4 zP5*v73p^g=Jr7qrqiY`z6u21$D zFcCKWtUw>7yDedap zbU^`oo$W83T%6N3y?u}&j<(aSsbgnX%@SC2F|jmRe@uMiX-uMBC&zpKgsHkZfdU!l zk3E0;H*zhgc)iuq$m7{ZFI^RC%kW?BiJ;nwx%=a=sr*!_qL1YxLf$3xW;oTTx};>Q zMMQ>xcJPI{TI#1-&qj5!a&s5%bKy7~8{Q`))xloDvlx3H8dzfQ?XmaSKsJH4hb5O0 zh3cJW9A!P!qFs`5YjkU4__Oj~H`L=UjuQ2#-$GuiS_IHK1J50Py9WOEzS-VvJ28Lp zaWVp97FPanm;HptXyV`ifpwIL1YWOzK0vTD zY&{!W|0E~of6_(6*e{bXde)f7h|YR941*b#y~`M7k&bMAdO?kfw;PBgRV(8AhYhPm z(Tj1x#eA;(yf6#tMI~l3sG8T5=LShy26fibzTv7e9-$~>fe{;nktdyJnl;S(I3P#a zr`35=*9X;o7F8hA2)m}5NsA?=r-cB(O%wy_YGaX!d(urWBzDo!>Vd_9Y9^HL+iT=MgVPh9o^URG?^tR*sPyWZ%w z${No&N~GI6+q!+TA8WSrNAHSZ%Gt2E;Zfv$Qrb#-;HCIzBrWng^8E@T^|LZ+?$sP-@)QX`_d z-89Z;X+7(Yh+#Eu#y&}Y&$!T_w`Ld{0T>VI8>R5t6PcsALVBX*CQzz?U7IcIx8-$u zW>7NNED=r?c565Jn^tMEr76spNt3Y*6cS|Jd1eii>ccjVsagC*AvvqJ zRh7fU_Ow1-_6#iHms!;79NBU55lYEqB!Ko&1`2XTs@VV8ee|@+IC^*UWJva*%1)3U zi!)<;iy|QCY~XudSbazIYf_);Y6!`l2 zi=Bps0)3*9$xgn)XqS@`y;?6!LUlElmllqA+SYMP=FJkk;!UN_IsZ7THa%p1UIv}#vOVM$w#;OB$Ksp zGFQ7qxhcqb;sLAcTm9*Lm_c6Iq0pJsiH$ivnVk3D$HNZccj|g^lttz*!^=PG$gaqK zQ;F<4*Sr^D@5g|XbpoJaHo*PCH$Lb0(S?0WGQ?A9JKU}=gymoF+iO{bvX~)x0AIHK z`BLGy_R|E;ki>s|lnfOF-sS;n�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