/**
  * Creates a new instance with a custom chain of {@link ExchangeRateType}, e.g. or creating
  * <i>derived</i> rates.
  *
  * @param conversionType The conversion type, never {@code null}.
  * @param base the base {@link CurrencyUnit}
  * @param term the terminating {@link CurrencyUnit}
  * @param factor the conversion factor
  * @param chain the rate chain, never {@code null}, not empty.
  */
 public ExchangeRate(
     ExchangeRateType conversionType,
     CurrencyUnit base,
     CurrencyUnit term,
     Number factor,
     String provider,
     ExchangeRate... chain) {
   this(conversionType, base, term, factor, provider);
   setExchangeRateChain(chain);
 }
 /**
  * Creates a new instance with a custom chain of {@link ExchangeRateType}, e.g. or creating
  * <i>derived</i> rates.
  *
  * @param conversionType The conversion type, never {@code null}.
  * @param base the base {@link CurrencyUnit}
  * @param term the terminating {@link CurrencyUnit}
  * @param factor the conversion factor
  * @param chain the rate chain, never {@code null}, not empty.
  * @param validFrom the UTC timestamp from when this rate is valid from, or {@code null}
  * @param validUntil the UTC timestamp until when this rate is valid from, or {@code null}
  */
 public ExchangeRate(
     ExchangeRateType conversionType,
     CurrencyUnit base,
     CurrencyUnit term,
     Number factor,
     String provider,
     Long validFrom,
     Long validUntil,
     ExchangeRate... chain) {
   this(conversionType, base, term, factor, provider);
   setExchangeRateChain(chain);
   this.validFrom = validFrom;
   this.validUntil = validUntil;
 }