This is an automated email from the ASF dual-hosted git repository. xhsun pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/incubator-pinot.git
The following commit(s) were added to refs/heads/master by this push: new 6cd8657 [TE] Holt Winters detector (#4067) 6cd8657 is described below commit 6cd8657b939eb0c0832e2353b47deac1a7d3632d Author: Dian Tang <dean99d...@gmail.com> AuthorDate: Tue Apr 16 16:41:18 2019 -0700 [TE] Holt Winters detector (#4067) --- .../datasource/sql/SqlThirdEyeDataSource.java | 1 - .../detection/components/HoltWintersDetector.java | 570 ++++ .../detection/spec/HoltWintersDetectorSpec.java | 89 + .../yaml/CompositePipelineConfigTranslator.java | 3 +- .../components/HoltWintersDetectorTest.java | 159 ++ .../PercentageChangeRuleDetectorTest.java | 1 - .../pinot/thirdeye/detection/algorithm/daily.csv | 732 +++++ .../pinot/thirdeye/detection/algorithm/hourly.csv | 3000 ++++++++++++++++++++ 8 files changed, 4552 insertions(+), 3 deletions(-) diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlThirdEyeDataSource.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlThirdEyeDataSource.java index eb72276..1c5d114 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlThirdEyeDataSource.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/datasource/sql/SqlThirdEyeDataSource.java @@ -89,7 +89,6 @@ public class SqlThirdEyeDataSource implements ThirdEyeDataSource { } catch (Exception e) { throw e; } - } /** diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/components/HoltWintersDetector.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/components/HoltWintersDetector.java new file mode 100644 index 0000000..36efb29 --- /dev/null +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/components/HoltWintersDetector.java @@ -0,0 +1,570 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pinot.thirdeye.detection.components; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.TimeUnit; +import org.apache.commons.math3.analysis.MultivariateFunction; +import org.apache.commons.math3.optim.PointValuePair; +import org.apache.pinot.thirdeye.dataframe.BooleanSeries; +import org.apache.pinot.thirdeye.dataframe.DataFrame; +import org.apache.pinot.thirdeye.dataframe.DoubleSeries; +import org.apache.pinot.thirdeye.dataframe.LongSeries; +import org.apache.pinot.thirdeye.dataframe.Series; +import org.apache.pinot.thirdeye.dataframe.util.MetricSlice; +import org.apache.pinot.thirdeye.datalayer.dto.DatasetConfigDTO; +import org.apache.pinot.thirdeye.datalayer.dto.MergedAnomalyResultDTO; +import org.apache.pinot.thirdeye.detection.ConfigUtils; +import org.apache.pinot.thirdeye.detection.DetectionUtils; +import org.apache.pinot.thirdeye.detection.InputDataFetcher; +import org.apache.pinot.thirdeye.detection.Pattern; +import org.apache.pinot.thirdeye.detection.algorithm.AlgorithmUtils; +import org.apache.pinot.thirdeye.detection.annotation.Components; +import org.apache.pinot.thirdeye.detection.annotation.DetectionTag; +import org.apache.pinot.thirdeye.detection.annotation.Param; +import org.apache.pinot.thirdeye.detection.spec.HoltWintersDetectorSpec; +import org.apache.pinot.thirdeye.detection.spi.components.AnomalyDetector; +import org.apache.pinot.thirdeye.detection.spi.components.BaselineProvider; +import org.apache.pinot.thirdeye.detection.spi.model.InputData; +import org.apache.pinot.thirdeye.detection.spi.model.InputDataSpec; +import org.apache.pinot.thirdeye.detection.spi.model.TimeSeries; +import org.apache.pinot.thirdeye.rootcause.impl.MetricEntity; +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; +import org.joda.time.Interval; +import org.joda.time.Period; +import org.apache.commons.math3.optim.MaxIter; +import org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction; +import org.apache.commons.math3.optim.MaxEval; +import org.apache.commons.math3.optim.SimpleBounds; +import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer; +import org.apache.commons.math3.optim.InitialGuess; +import org.apache.commons.math3.optim.nonlinear.scalar.GoalType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import static org.apache.pinot.thirdeye.dataframe.util.DataFrameUtils.*; + +/** + * Holt-Winters forecasting algorithm with multiplicative method + * Supports seasonality and trend detection + * https://otexts.com/fpp2/holt-winters.html + */ +@Components(title = "Holt Winters triple exponential smoothing forecasting and detection", + type = "HOLT_WINTERS_RULE", + tags = {DetectionTag.RULE_DETECTION}, + description = "Forecast with holt winters triple exponential smoothing and generate anomalies", + params = { + @Param(name = "alpha"), + @Param(name = "beta"), + @Param(name = "gamma"), + @Param(name = "period"), + @Param(name = "pattern"), + @Param(name = "sensitivity"), + @Param(name = "kernelSmoothing")}) +public class HoltWintersDetector implements BaselineProvider<HoltWintersDetectorSpec>, + AnomalyDetector<HoltWintersDetectorSpec> { + private static final Logger LOG = LoggerFactory.getLogger(HoltWintersDetector.class); + private InputDataFetcher dataFetcher; + private static final String COL_CURR = "current"; + private static final String COL_BASE = "baseline"; + private static final String COL_ANOMALY = "anomaly"; + private static final String COL_PATTERN = "pattern"; + private static final String COL_DIFF = "diff"; + private static final String COL_DIFF_VIOLATION = "diff_violation"; + private static final String COL_ERROR = "error"; + private static final long KERNEL_PERIOD = 3600000L; + private static final int LOOKBACK = 60; + + private int period; + private double alpha; + private double beta; + private double gamma; + private Pattern pattern; + private double sensitivity; + private boolean smoothing; + private Period lookbackPeriod = ConfigUtils.parsePeriod(LOOKBACK + "DAYS"); + + @Override + public void init(HoltWintersDetectorSpec spec, InputDataFetcher dataFetcher) { + this.period = spec.getPeriod(); + this.alpha = spec.getAlpha(); + this.beta = spec.getBeta(); + this.gamma = spec.getGamma(); + this.dataFetcher = dataFetcher; + this.pattern = spec.getPattern(); + this.smoothing = spec.getSmoothing(); + this.sensitivity = spec.getSensitivity(); + } + + @Override + public TimeSeries computePredictedTimeSeries(MetricSlice slice) { + MetricEntity metricEntity = MetricEntity.fromSlice(slice, 0); + Interval window = new Interval(slice.getStart(), slice.getEnd()); + DateTime trainStart = window.getStart().minus(lookbackPeriod); + DatasetConfigDTO datasetConfig = this.dataFetcher.fetchData(new InputDataSpec() + .withMetricIdsForDataset(Collections.singleton(metricEntity.getId()))).getDatasetForMetricId() + .get(metricEntity.getId()); + + DataFrame inputDf = fetchData(metricEntity, trainStart.getMillis(), window.getEndMillis()); + DataFrame resultDF = computePredictionInterval(inputDf, window.getStartMillis(), datasetConfig.getTimezone()); + + // Exclude the end because baseline calculation should not contain the end + if (resultDF.size() > 1) { + resultDF = resultDF.head(resultDF.size() - 1); + } + + return TimeSeries.fromDataFrame(resultDF); + } + + @Override + public List<MergedAnomalyResultDTO> runDetection(Interval window, String metricUrn) { + MetricEntity metricEntity = MetricEntity.fromURN(metricUrn); + DateTime trainStart = window.getStart().minus(lookbackPeriod); + DatasetConfigDTO datasetConfig = this.dataFetcher.fetchData(new InputDataSpec() + .withMetricIdsForDataset(Collections.singleton(metricEntity.getId()))).getDatasetForMetricId() + .get(metricEntity.getId()); + MetricSlice sliceData = MetricSlice.from(metricEntity.getId(), trainStart.getMillis(), window.getEndMillis(), + metricEntity.getFilters()); + DataFrame dfInput = fetchData(metricEntity, trainStart.getMillis(), window.getEndMillis()); + + + // Kernel smoothing + if (smoothing && !TimeUnit.DAYS.equals(datasetConfig.bucketTimeGranularity().getUnit())) { + int kernelSize = (int) (KERNEL_PERIOD / datasetConfig.bucketTimeGranularity().toMillis()); + if (kernelSize > 1) { + int kernelOffset = kernelSize / 2; + double[] values = dfInput.getDoubles(COL_VALUE).values(); + for (int i = 0; i <= values.length - kernelSize; i++) { + values[i + kernelOffset] = AlgorithmUtils.robustMean(dfInput.getDoubles(COL_VALUE) + .slice(i, i + kernelSize), kernelSize).getDouble(kernelSize - 1); + } + dfInput.addSeries(COL_VALUE, values); + } + } + + DataFrame dfCurr = new DataFrame(dfInput).renameSeries(COL_VALUE, COL_CURR); + DataFrame dfBase = computePredictionInterval(dfInput, window.getStartMillis(), datasetConfig.getTimezone()) + .renameSeries(COL_VALUE, COL_BASE); + DataFrame df = new DataFrame(dfCurr).addSeries(dfBase); + df.addSeries(COL_DIFF, df.getDoubles(COL_CURR).subtract(df.get(COL_BASE))); + df.addSeries(COL_ANOMALY, BooleanSeries.fillValues(df.size(), false)); + + // Filter pattern + if (pattern.equals(Pattern.UP_OR_DOWN) ) { + df.addSeries(COL_PATTERN, BooleanSeries.fillValues(df.size(), true)); + } else { + df.addSeries(COL_PATTERN, pattern.equals(Pattern.UP) ? df.getDoubles(COL_DIFF).gt(0) : + df.getDoubles(COL_DIFF).lt(0)); + } + df.addSeries(COL_DIFF_VIOLATION, df.getDoubles(COL_DIFF).abs().gte(df.getDoubles(COL_ERROR))); + df.mapInPlace(BooleanSeries.ALL_TRUE, COL_ANOMALY, COL_PATTERN, COL_DIFF_VIOLATION); + + // Anomalies + List<MergedAnomalyResultDTO> results = DetectionUtils.makeAnomalies(sliceData, df, COL_ANOMALY, + window.getEndMillis(), + DetectionUtils.getMonitoringGranularityPeriod(MetricSlice.NATIVE_GRANULARITY.toAggregationGranularityString(), + datasetConfig), datasetConfig); + + return results; + } + + /** + * Fetch data from metric + * + * @param metricEntity metric entity + * @param start start timestamp + * @param end end timestamp + * @return Data Frame that has data from start to end + */ + private DataFrame fetchData(MetricEntity metricEntity, long start, long end) { + + List<MetricSlice> slices = new ArrayList<>(); + MetricSlice sliceData = MetricSlice.from(metricEntity.getId(), start, end, + metricEntity.getFilters(), MetricSlice.NATIVE_GRANULARITY); + slices.add(sliceData); + LOG.info("Getting data for" + sliceData.toString()); + InputData data = this.dataFetcher.fetchData(new InputDataSpec().withTimeseriesSlices(slices) + .withMetricIdsForDataset(Collections.singletonList(metricEntity.getId()))); + + return data.getTimeseries().get(sliceData); + } + + /** + * Returns a data frame containing the same time daily data, based on input time + * @param originalDF the original dataframe + * @param time the epoch time of the start of the day + * @return DataFrame containing same time of daily data for LOOKBACK number of days + */ + private DataFrame getDailyDF(DataFrame originalDF, Long time, String timezone) { + LongSeries longSeries = (LongSeries) originalDF.get(COL_TIME); + long start = longSeries.getLong(0); + DateTime dt = new DateTime(time).withZone(DateTimeZone.forID(timezone)); + DataFrame df = DataFrame.builder(COL_TIME, COL_VALUE).build(); + + for (int i = 0; i < LOOKBACK; i++) { + DateTime subDt = dt.minusDays(1); + long t = subDt.getMillis(); + if (t < start) { + break; + } + int index = longSeries.find(t); + if (index != -1) { + df = df.append(originalDF.slice(index, index + 1)); + } else { + int backtrackCounter = 0; + // If the 1 day look back data doesn't exist, use the data one period before till backtrackCounter greater than 4 + while (index == -1 && backtrackCounter <= 4) { + subDt = subDt.minusDays(period); + long timestamp = subDt.getMillis(); + index = longSeries.find(timestamp); + backtrackCounter++; + } + + if (index != -1) { + df = df.append(originalDF.slice(index, index + 1)); + } else { + // If not found value up to 4 weeks, insert the last value + double lastVal = (originalDF.get(COL_VALUE)).getDouble(longSeries.find(dt.getMillis())); + DateTime nextDt = dt.minusDays(1); + DataFrame appendDf = DataFrame.builder(COL_TIME, COL_VALUE).append(nextDt, lastVal).build(); + df = df.append(appendDf); + } + } + dt = dt.minusDays(1); + } + df = df.reverse(); + return df; + } + + private static double calculateInitialLevel(double[] y) { + return y[0]; + } + + /** + * See: http://www.itl.nist.gov/div898/handbook/pmc/section4/pmc435.htm + * + * @return - Initial trend - Bt[1] + */ + private static double calculateInitialTrend(double[] y, int period) { + double sum = 0; + + for (int i = 0; i < period; i++) { + sum += y[period + i] - y[i]; + } + + return sum / (period * period); + } + + /** + * See: http://www.itl.nist.gov/div898/handbook/pmc/section4/pmc435.htm + * + * @return - Seasonal Indices. + */ + private static double[] calculateSeasonalIndices(double[] y, int period, + int seasons) { + double[] seasonalMean = new double[seasons]; + double[] seasonalIndices = new double[period]; + + double[] averagedObservations = new double[y.length]; + + for (int i = 0; i < seasons; i++) { + for (int j = 0; j < period; j++) { + seasonalMean[i] += y[(i * period) + j]; + } + seasonalMean[i] /= period; + } + + for (int i = 0; i < seasons; i++) { + for (int j = 0; j < period; j++) { + averagedObservations[(i * period) + j] = y[(i * period) + j] + / seasonalMean[i]; + } + } + + for (int i = 0; i < period; i++) { + for (int j = 0; j < seasons; j++) { + seasonalIndices[i] += averagedObservations[(j * period) + i]; + } + seasonalIndices[i] /= seasons; + } + + return seasonalIndices; + } + + /** + * Holt Winters forecasting method + * + * @param y Timeseries to be forecasted + * @param alpha level smoothing factor + * @param beta trend smoothing factor + * @param gamma seasonality smoothing factor + * @return ForecastResults containing predicted value, SSE(sum of squared error) and error bound + */ + private ForecastResults forecast(double[] y, double alpha, double beta, double gamma) { + double[] seasonal = new double[y.length+1]; + double[] forecast = new double[y.length+1]; + + double a0 = calculateInitialLevel(y); + double b0 = calculateInitialTrend(y, period); + + int seasons = y.length / period; + double[] initialSeasonalIndices = calculateSeasonalIndices(y, period, + seasons); + + for (int i = 0; i < period; i++) { + seasonal[i] = initialSeasonalIndices[i]; + } + + // s is level and t is trend + double s = a0; + double t = b0; + double predictedValue = 0; + + for (int i = 0; i < y.length; i++) { + double sNew; + double tNew; + forecast[i] = (s + t) * seasonal[i]; + sNew = alpha * (y[i] / seasonal[i]) + (1 - alpha) * (s + t); + tNew = beta * (sNew - s) + (1 - beta) * t; + if (i + period <= y.length) { + seasonal[i + period] = gamma * (y[i] / (sNew * seasonal[i])) + (1 - gamma) * seasonal[i]; + } + s = sNew; + t = tNew; + if (i == y.length - 1) { + predictedValue = (s + t) * seasonal[i+1]; + } + } + + List<Double> diff = new ArrayList<>(); + double sse = 0; + for (int i = 0; i < y.length; i++) { + if (forecast[i] != 0) { + sse += Math.pow(y[i] - forecast[i], 2); + diff.add(Math.abs(forecast[i] - y[i])); + } + } + + double error = calculateErrorBound(diff, sensitivityToZscore(sensitivity)); + return new ForecastResults(predictedValue, sse, error); + } + + /** + * Compute the baseline and error bound for given data + * + * @param inputDF training dataframe + * @param windowStartTime prediction start time + * @return DataFrame with timestamp, baseline, error bound + */ + private DataFrame computePredictionInterval(DataFrame inputDF, long windowStartTime, String timezone) { + + DataFrame resultDF = new DataFrame(); + DataFrame forecastDF = inputDF.filter(new Series.LongConditional() { + @Override + public boolean apply(long... values) { + return values[0] >= windowStartTime; + } + }, COL_TIME).dropNull(); + + int size = forecastDF.size(); + double[] resultArray = new double[size]; + long[] resultTimeArray = new long[size]; + double[] errorArray = new double[size]; + + double lastAlpha = alpha; + double lastBeta = beta; + double lastGamma = gamma; + + for (int k = 0; k < size; k++) { + DataFrame dailyDF = getDailyDF(inputDF, forecastDF.getLong(COL_TIME, k), timezone); + + // We need at least 2 periods of data + if (dailyDF.size() < 2 * period) { + continue; + } + + resultTimeArray[k] = forecastDF.getLong(COL_TIME, k); + + double[] y = dailyDF.getDoubles(COL_VALUE).values(); + HoltWintersParams params; + if (alpha < 0 && beta < 0 && gamma < 0) { + params = fitModelWithBOBYQA(y, lastAlpha, lastBeta, lastGamma); + } else { + params = new HoltWintersParams(alpha, beta, gamma); + } + + lastAlpha = params.getAlpha(); + lastBeta = params.getBeta(); + lastGamma = params.getGamma(); + + ForecastResults result = forecast(y, params.getAlpha(), params.getBeta(), params.getGamma()); + + resultArray[k] = result.getPredictedValue(); + errorArray[k] = result.getErrorBound(); + } + + resultDF.addSeries(COL_TIME, LongSeries.buildFrom(resultTimeArray)); + resultDF.setIndex(COL_TIME); + resultDF.addSeries(COL_VALUE, DoubleSeries.buildFrom(resultArray)); + resultDF.addSeries(COL_ERROR, DoubleSeries.buildFrom(errorArray)); + return resultDF; + } + + /** + * Returns the error bound of given list based on mean, std and given zscore + * + * @param givenNumbers double list + * @param zscore zscore used to multiply by std + * @return the error bound + */ + private static double calculateErrorBound(List<Double> givenNumbers, double zscore) { + // calculate the mean value (= average) + double sum = 0.0; + for (double num : givenNumbers) { + sum += num; + } + double mean = sum / givenNumbers.size(); + + // calculate standard deviation + double squaredDifferenceSum = 0.0; + for (double num : givenNumbers) { + squaredDifferenceSum += (num - mean) * (num - mean); + } + double variance = squaredDifferenceSum / givenNumbers.size(); + double standardDeviation = Math.sqrt(variance); + + return zscore * standardDeviation; + } + + /** + * Fit alpha, beta, gamma by optimizing SSE (Sum of squared errors) using BOBYQA + * It is a derivative free bound constrained optimization algorithm + * https://en.wikipedia.org/wiki/BOBYQA + * + * @param y the data + * @param lastAlpha last alpha value + * @param lastBeta last beta value + * @param lastGamma last gamma value + * @return double array containing fitted alpha, beta and gamma + */ + private HoltWintersParams fitModelWithBOBYQA(double[] y, double lastAlpha, double lastBeta, double lastGamma) { + BOBYQAOptimizer optimizer = new BOBYQAOptimizer(7); + if (lastAlpha < 0) { + lastAlpha = 0.1; + } + if (lastBeta < 0) { + lastBeta = 0.01; + } + if (lastGamma < 0) { + lastGamma = 0.001; + } + InitialGuess initGuess = new InitialGuess(new double[]{lastAlpha, lastBeta, lastGamma});; + MaxIter maxIter = new MaxIter(30000); + MaxEval maxEval = new MaxEval(30000); + GoalType goal = GoalType.MINIMIZE; + ObjectiveFunction objectiveFunction = new ObjectiveFunction(new MultivariateFunction() { + public double value(double[] params) { + return forecast(y, params[0], params[1], params[2]).getSSE(); + } + }); + SimpleBounds bounds = new SimpleBounds(new double[]{0.001, 0.001, 0.001}, new double[]{0.999, 0.999, 0.999}); + + HoltWintersParams params; + try { + PointValuePair optimal = optimizer.optimize(objectiveFunction, goal, bounds, initGuess, maxIter, maxEval); + params = new HoltWintersParams(optimal.getPoint()[0], optimal.getPoint()[1], optimal.getPoint()[2]); + } catch (Exception e) { + LOG.error(e.toString()); + params = new HoltWintersParams(lastAlpha, lastBeta, lastGamma); + } + return params; + } + + /** + * Mapping of sensitivity to zscore on range of 1 - 4 + * @param sensitivity double from 0 to 10 + * @return zscore + */ + private static double sensitivityToZscore(double sensitivity) { + // If out of bound, use boundary sensitivity + if (sensitivity < 0) { + sensitivity = 0; + } else if (sensitivity > 10) { + sensitivity = 10; + } + double z = 1 + 0.3 * (10 - sensitivity); + return z; + } + + /** + * Container class to store holt winters parameters + */ + final static class HoltWintersParams { + private final double alpha; + private final double beta; + private final double gamma; + + HoltWintersParams(double alpha, double beta, double gamma) { + this.alpha = alpha; + this.beta = beta; + this.gamma = gamma; + } + + double getAlpha() { + return alpha; + } + + double getBeta() { + return beta; + } + + double getGamma() { + return gamma; + } + } + + /** + * Container class to store forecasting results + */ + final static class ForecastResults { + private final double predictedValue; + private final double SSE; + private final double errorBound; + + ForecastResults(double predictedValue, double SSE, double errorBound) { + this.predictedValue = predictedValue; + this.SSE = SSE; + this.errorBound = errorBound; + } + + double getPredictedValue() { + return predictedValue; + } + + double getSSE() { + return SSE; + } + + double getErrorBound() { + return errorBound; + } + } +} \ No newline at end of file diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/spec/HoltWintersDetectorSpec.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/spec/HoltWintersDetectorSpec.java new file mode 100644 index 0000000..e38067e --- /dev/null +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/spec/HoltWintersDetectorSpec.java @@ -0,0 +1,89 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.pinot.thirdeye.detection.spec; + +import org.apache.pinot.thirdeye.detection.Pattern; + + +public class HoltWintersDetectorSpec extends AbstractSpec { + + private double alpha = -1; + private double beta = -1; + private double gamma = -1; + private int period = 7; + private double sensitivity = 5; + private Pattern pattern = Pattern.UP_OR_DOWN; + private boolean smoothing = true; + + public boolean getSmoothing() { + return smoothing; + } + + public Pattern getPattern() { + return pattern; + } + + public double getSensitivity() { + return sensitivity; + } + + public double getAlpha() { + return alpha; + } + + public double getBeta() { + return beta; + } + + public double getGamma() { + return gamma; + } + + public int getPeriod() { + return period; + } + + public void setAlpha(double alpha) { + this.alpha = alpha; + } + + public void setBeta(double beta) { + this.beta = beta; + } + + public void setGamma(double gamma) { + this.gamma = gamma; + } + + public void setPeriod(int period) { + this.period = period; + } + + public void setPattern(Pattern pattern) { + this.pattern = pattern; + } + + public void setSensitivity(double sensitivity) { + this.sensitivity = sensitivity; + } + + public void setSmoothing(boolean smoothing) { + this.smoothing = smoothing; + } +} diff --git a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/CompositePipelineConfigTranslator.java b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/CompositePipelineConfigTranslator.java index fd637d2..4d0e42e 100644 --- a/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/CompositePipelineConfigTranslator.java +++ b/thirdeye/thirdeye-pinot/src/main/java/org/apache/pinot/thirdeye/detection/yaml/CompositePipelineConfigTranslator.java @@ -179,7 +179,8 @@ public class CompositePipelineConfigTranslator extends YamlDetectionConfigTransl private static final Set<String> TUNING_OFF_COMPONENTS = ImmutableSet.of("MIGRATED_ALGORITHM_FILTER", "MIGRATED_ALGORITHM", "MIGRATED_ALGORITHM_BASELINE"); private static final Map<String, String> DETECTOR_TO_BASELINE = - ImmutableMap.of("ALGORITHM", "ALGORITHM_BASELINE", "MIGRATED_ALGORITHM", "MIGRATED_ALGORITHM_BASELINE"); + ImmutableMap.of("ALGORITHM", "ALGORITHM_BASELINE", "MIGRATED_ALGORITHM", "MIGRATED_ALGORITHM_BASELINE", + "HOLT_WINTERS_RULE", "HOLT_WINTERS_RULE"); private static final Set<String> MOVING_WINDOW_DETECTOR_TYPES = ImmutableSet.of("ALGORITHM", "MIGRATED_ALGORITHM"); private final Map<String, Object> components = new HashMap<>(); diff --git a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/components/HoltWintersDetectorTest.java b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/components/HoltWintersDetectorTest.java new file mode 100644 index 0000000..49fca9b --- /dev/null +++ b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/components/HoltWintersDetectorTest.java @@ -0,0 +1,159 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + */ + +package org.apache.pinot.thirdeye.detection.components; + +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.TimeUnit; +import org.apache.pinot.thirdeye.dataframe.DataFrame; +import org.apache.pinot.thirdeye.dataframe.util.MetricSlice; +import org.apache.pinot.thirdeye.datalayer.dto.DatasetConfigDTO; +import org.apache.pinot.thirdeye.datalayer.dto.MergedAnomalyResultDTO; +import org.apache.pinot.thirdeye.datalayer.dto.MetricConfigDTO; +import org.apache.pinot.thirdeye.detection.DataProvider; +import org.apache.pinot.thirdeye.detection.DefaultInputDataFetcher; +import org.apache.pinot.thirdeye.detection.MockDataProvider; +import org.apache.pinot.thirdeye.detection.algorithm.AlgorithmUtils; +import org.apache.pinot.thirdeye.detection.spec.HoltWintersDetectorSpec; +import org.apache.pinot.thirdeye.detection.spi.model.TimeSeries; +import org.apache.pinot.thirdeye.rootcause.impl.MetricEntity; +import org.joda.time.Interval; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.testng.Assert; +import org.testng.annotations.BeforeTest; +import org.testng.annotations.Test; + +import static org.apache.pinot.thirdeye.dataframe.util.DataFrameUtils.*; +import static org.eclipse.jetty.http.HttpParser.*; + +/** + * Test class for HoltWinters detector + */ +public class HoltWintersDetectorTest { + private DataProvider provider; + + @BeforeTest + public void setUp() throws Exception { + DataFrame dailyData; + DataFrame hourlyData; + try (Reader dataReader = new InputStreamReader(AlgorithmUtils.class.getResourceAsStream("daily.csv"))) { + dailyData = DataFrame.fromCsv(dataReader); + dailyData.setIndex(COL_TIME); + } + + try (Reader dataReader = new InputStreamReader(AlgorithmUtils.class.getResourceAsStream("hourly.csv"))) { + hourlyData = DataFrame.fromCsv(dataReader); + hourlyData.setIndex(COL_TIME); + } + + MetricConfigDTO dailyMetricConfig = new MetricConfigDTO(); + dailyMetricConfig.setId(1L); + dailyMetricConfig.setName("thirdeye-test-daily"); + dailyMetricConfig.setDataset("thirdeye-test-dataset-daily"); + + DatasetConfigDTO dailyDatasetConfig = new DatasetConfigDTO(); + dailyDatasetConfig.setTimeUnit(TimeUnit.DAYS); + dailyDatasetConfig.setDataset("thirdeye-test-dataset-daily"); + dailyDatasetConfig.setTimeDuration(1); + + MetricConfigDTO hourlyMetricConfig = new MetricConfigDTO(); + hourlyMetricConfig.setId(123L); + hourlyMetricConfig.setName("thirdeye-test-hourly"); + hourlyMetricConfig.setDataset("thirdeye-test-dataset-hourly"); + + DatasetConfigDTO hourlyDatasetConfig = new DatasetConfigDTO(); + hourlyDatasetConfig.setTimeUnit(TimeUnit.HOURS); + hourlyDatasetConfig.setDataset("thirdeye-test-dataset-hourly"); + hourlyDatasetConfig.setTimeDuration(1); + + Map<MetricSlice, DataFrame> timeseries = new HashMap<>(); + timeseries.put(MetricSlice.from(1L, 1301443200000L, 1309219200000L), dailyData); + timeseries.put(MetricSlice.from(123L, 1317585600000L, 1323378000000L), hourlyData); + // For Travis CI + timeseries.put(MetricSlice.from(123L, 1317589200000L, 1323378000000L), hourlyData); + + this.provider = new MockDataProvider() + .setTimeseries(timeseries) + .setMetrics(Arrays.asList(hourlyMetricConfig, dailyMetricConfig)) + .setDatasets(Arrays.asList(hourlyDatasetConfig, dailyDatasetConfig)); + } + + @Test + public void testComputePredictedTimeSeriesDaily() { + HoltWintersDetector detector = new HoltWintersDetector(); + HoltWintersDetectorSpec spec = new HoltWintersDetectorSpec(); + detector.init(spec, new DefaultInputDataFetcher(this.provider, -1)); + Interval window = new Interval(1306627200000L, 1309219200000L); + String metricUrn = "thirdeye:metric:1"; + MetricEntity me = MetricEntity.fromURN(metricUrn); + MetricSlice slice = MetricSlice.from(me.getId(), window.getStartMillis(), window.getEndMillis(), me.getFilters()); + TimeSeries timeSeries = detector.computePredictedTimeSeries(slice); + + Assert.assertEquals(timeSeries.getPredictedBaseline().size(), 29); + } + + @Test + public void testRunDetectionDaily() { + HoltWintersDetector detector = new HoltWintersDetector(); + HoltWintersDetectorSpec spec = new HoltWintersDetectorSpec(); + spec.setSensitivity(8); + detector.init(spec, new DefaultInputDataFetcher(this.provider, -1)); + Interval window = new Interval(1306627200000L, 1309219200000L); + String metricUrn = "thirdeye:metric:1"; + List<MergedAnomalyResultDTO> anomalies = detector.runDetection(window, metricUrn); + + Assert.assertEquals(anomalies.size(), 6); + } + + @Test + public void testComputePredictedTimeSeriesHourly() { + HoltWintersDetector detector = new HoltWintersDetector(); + HoltWintersDetectorSpec spec = new HoltWintersDetectorSpec(); + detector.init(spec, new DefaultInputDataFetcher(this.provider, -1)); + + Interval window = new Interval(1322773200000L, 1323378000000L); + + String metricUrn = "thirdeye:metric:123"; + MetricEntity me = MetricEntity.fromURN(metricUrn); + MetricSlice slice = MetricSlice.from(me.getId(), window.getStartMillis(), window.getEndMillis(), me.getFilters()); + TimeSeries timeSeries = detector.computePredictedTimeSeries(slice); + + Assert.assertEquals(timeSeries.getPredictedBaseline().size(), 167); + } + + @Test + public void testRunDetectionHourly() { + HoltWintersDetector detector = new HoltWintersDetector(); + HoltWintersDetectorSpec spec = new HoltWintersDetectorSpec(); + spec.setSensitivity(8); + detector.init(spec, new DefaultInputDataFetcher(this.provider, -1)); + Interval window = new Interval(1322773200000L, 1323378000000L); + String metricUrn = "thirdeye:metric:123"; + List<MergedAnomalyResultDTO> anomalies = detector.runDetection(window, metricUrn); + + Assert.assertEquals(anomalies.size(), 3); + } +} \ No newline at end of file diff --git a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/components/PercentageChangeRuleDetectorTest.java b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/components/PercentageChangeRuleDetectorTest.java index 9ca76a6..9bbe29b 100644 --- a/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/components/PercentageChangeRuleDetectorTest.java +++ b/thirdeye/thirdeye-pinot/src/test/java/org/apache/pinot/thirdeye/detection/components/PercentageChangeRuleDetectorTest.java @@ -185,6 +185,5 @@ public class PercentageChangeRuleDetectorTest { Assert.assertEquals(anomalies.size(), 1); Assert.assertEquals(anomalies.get(0).getStartTime(), 1551484800000L); Assert.assertEquals(anomalies.get(0).getEndTime(), 1551488400000L); - } } diff --git a/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/algorithm/daily.csv b/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/algorithm/daily.csv new file mode 100644 index 0000000..fc0ace4 --- /dev/null +++ b/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/algorithm/daily.csv @@ -0,0 +1,732 @@ +timestamp,value +1293840000000,985 +1293926400000,801 +1294012800000,1349 +1294099200000,1562 +1294185600000,1600 +1294272000000,1606 +1294358400000,1510 +1294444800000,959 +1294531200000,822 +1294617600000,1321 +1294704000000,1263 +1294790400000,1162 +1294876800000,1406 +1294963200000,1421 +1295049600000,1248 +1295136000000,1204 +1295222400000,1000 +1295308800000,683 +1295395200000,1650 +1295481600000,1927 +1295568000000,1543 +1295654400000,981 +1295740800000,986 +1295827200000,1416 +1295913600000,1985 +1296000000000,506 +1296086400000,431 +1296172800000,1167 +1296259200000,1098 +1296345600000,1096 +1296432000000,1501 +1296518400000,1360 +1296604800000,1526 +1296691200000,1550 +1296777600000,1708 +1296864000000,1005 +1296950400000,1623 +1297036800000,1712 +1297123200000,1530 +1297209600000,1605 +1297296000000,1538 +1297382400000,1746 +1297468800000,1472 +1297555200000,1589 +1297641600000,1913 +1297728000000,1815 +1297814400000,2115 +1297900800000,2475 +1297987200000,2927 +1298073600000,1635 +1298160000000,1812 +1298246400000,1107 +1298332800000,1450 +1298419200000,1917 +1298505600000,1807 +1298592000000,1461 +1298678400000,1969 +1298764800000,2402 +1298851200000,1446 +1298937600000,1851 +1299024000000,2134 +1299110400000,1685 +1299196800000,1944 +1299283200000,2077 +1299369600000,605 +1299456000000,1872 +1299542400000,2133 +1299628800000,1891 +1299715200000,623 +1299801600000,1977 +1299888000000,2132 +1299974400000,2417 +1300060800000,2046 +1300147200000,2056 +1300233600000,2192 +1300320000000,2744 +1300406400000,3239 +1300492800000,3117 +1300579200000,2471 +1300665600000,2077 +1300752000000,2703 +1300838400000,2121 +1300924800000,1865 +1301011200000,2210 +1301097600000,2496 +1301184000000,1693 +1301270400000,2028 +1301356800000,2425 +1301443200000,1536 +1301529600000,1685 +1301616000000,2227 +1301702400000,2252 +1301788800000,3249 +1301875200000,3115 +1301961600000,1795 +1302048000000,2808 +1302134400000,3141 +1302220800000,1471 +1302307200000,2455 +1302393600000,2895 +1302480000000,3348 +1302566400000,2034 +1302652800000,2162 +1302739200000,3267 +1302825600000,3126 +1302912000000,795 +1302998400000,3744 +1303084800000,3429 +1303171200000,3204 +1303257600000,3944 +1303344000000,4189 +1303430400000,1683 +1303516800000,4036 +1303603200000,4191 +1303689600000,4073 +1303776000000,4400 +1303862400000,3872 +1303948800000,4058 +1304035200000,4595 +1304121600000,5312 +1304208000000,3351 +1304294400000,4401 +1304380800000,4451 +1304467200000,2633 +1304553600000,4433 +1304640000000,4608 +1304726400000,4714 +1304812800000,4333 +1304899200000,4362 +1304985600000,4803 +1305072000000,4182 +1305158400000,4864 +1305244800000,4105 +1305331200000,3409 +1305417600000,4553 +1305504000000,3958 +1305590400000,4123 +1305676800000,3855 +1305763200000,4575 +1305849600000,4917 +1305936000000,5805 +1306022400000,4660 +1306108800000,4274 +1306195200000,4492 +1306281600000,4978 +1306368000000,4677 +1306454400000,4679 +1306540800000,4758 +1306627200000,4788 +1306713600000,4098 +1306800000000,3982 +1306886400000,3974 +1306972800000,4968 +1307059200000,5312 +1307145600000,5342 +1307232000000,4906 +1307318400000,4548 +1307404800000,4833 +1307491200000,4401 +1307577600000,3915 +1307664000000,4586 +1307750400000,4966 +1307836800000,4460 +1307923200000,5020 +1308009600000,4891 +1308096000000,5180 +1308182400000,3767 +1308268800000,4844 +1308355200000,5119 +1308441600000,4744 +1308528000000,4010 +1308614400000,4835 +1308700800000,4507 +1308787200000,4790 +1308873600000,4991 +1308960000000,5202 +1309046400000,5305 +1309132800000,4708 +1309219200000,4648 +1309305600000,5225 +1309392000000,5515 +1309478400000,5362 +1309564800000,5119 +1309651200000,4649 +1309737600000,6043 +1309824000000,4665 +1309910400000,4629 +1309996800000,4592 +1310083200000,4040 +1310169600000,5336 +1310256000000,4881 +1310342400000,4086 +1310428800000,4258 +1310515200000,4342 +1310601600000,5084 +1310688000000,5538 +1310774400000,5923 +1310860800000,5302 +1310947200000,4458 +1311033600000,4541 +1311120000000,4332 +1311206400000,3784 +1311292800000,3387 +1311379200000,3285 +1311465600000,3606 +1311552000000,3840 +1311638400000,4590 +1311724800000,4656 +1311811200000,4390 +1311897600000,3846 +1311984000000,4475 +1312070400000,4302 +1312156800000,4266 +1312243200000,4845 +1312329600000,3574 +1312416000000,4576 +1312502400000,4866 +1312588800000,4294 +1312675200000,3785 +1312761600000,4326 +1312848000000,4602 +1312934400000,4780 +1313020800000,4792 +1313107200000,4905 +1313193600000,4150 +1313280000000,3820 +1313366400000,4338 +1313452800000,4725 +1313539200000,4694 +1313625600000,3805 +1313712000000,4153 +1313798400000,5191 +1313884800000,3873 +1313971200000,4758 +1314057600000,5895 +1314144000000,5130 +1314230400000,3542 +1314316800000,4661 +1314403200000,1115 +1314489600000,4334 +1314576000000,4634 +1314662400000,5204 +1314748800000,5058 +1314835200000,5115 +1314921600000,4727 +1315008000000,4484 +1315094400000,4940 +1315180800000,3351 +1315267200000,2710 +1315353600000,1996 +1315440000000,1842 +1315526400000,3544 +1315612800000,5345 +1315699200000,5046 +1315785600000,4713 +1315872000000,4763 +1315958400000,4785 +1316044800000,3659 +1316131200000,4760 +1316217600000,4511 +1316304000000,4274 +1316390400000,4539 +1316476800000,3641 +1316563200000,4352 +1316649600000,4795 +1316736000000,2395 +1316822400000,5423 +1316908800000,5010 +1316995200000,4630 +1317081600000,4120 +1317168000000,3907 +1317254400000,4839 +1317340800000,5202 +1317427200000,2429 +1317513600000,2918 +1317600000000,3570 +1317686400000,4456 +1317772800000,4826 +1317859200000,4765 +1317945600000,4985 +1318032000000,5409 +1318118400000,5511 +1318204800000,5117 +1318291200000,4563 +1318377600000,2416 +1318464000000,2913 +1318550400000,3644 +1318636800000,5217 +1318723200000,5041 +1318809600000,4570 +1318896000000,4748 +1318982400000,2424 +1319068800000,4195 +1319155200000,4304 +1319241600000,4308 +1319328000000,4381 +1319414400000,4187 +1319500800000,4687 +1319587200000,3894 +1319673600000,2659 +1319760000000,3747 +1319846400000,627 +1319932800000,3331 +1320019200000,3669 +1320105600000,4068 +1320192000000,4186 +1320278400000,3974 +1320364800000,4046 +1320451200000,3926 +1320537600000,3649 +1320624000000,4035 +1320710400000,4205 +1320796800000,4109 +1320883200000,2933 +1320969600000,3368 +1321056000000,4067 +1321142400000,3717 +1321228800000,4486 +1321315200000,4195 +1321401600000,1817 +1321488000000,3053 +1321574400000,3392 +1321660800000,3663 +1321747200000,3520 +1321833600000,2765 +1321920000000,1607 +1322006400000,2566 +1322092800000,1495 +1322179200000,2792 +1322265600000,3068 +1322352000000,3071 +1322438400000,3867 +1322524800000,2914 +1322611200000,3613 +1322697600000,3727 +1322784000000,3940 +1322870400000,3614 +1322956800000,3485 +1323043200000,3811 +1323129600000,2594 +1323216000000,705 +1323302400000,3322 +1323388800000,3620 +1323475200000,3190 +1323561600000,2743 +1323648000000,3310 +1323734400000,3523 +1323820800000,3740 +1323907200000,3709 +1323993600000,3577 +1324080000000,2739 +1324166400000,2431 +1324252800000,3403 +1324339200000,3750 +1324425600000,2660 +1324512000000,3068 +1324598400000,2209 +1324684800000,1011 +1324771200000,754 +1324857600000,1317 +1324944000000,1162 +1325030400000,2302 +1325116800000,2423 +1325203200000,2999 +1325289600000,2485 +1325376000000,2294 +1325462400000,1951 +1325548800000,2236 +1325635200000,2368 +1325721600000,3272 +1325808000000,4098 +1325894400000,4521 +1325980800000,3425 +1326067200000,2376 +1326153600000,3598 +1326240000000,2177 +1326326400000,4097 +1326412800000,3214 +1326499200000,2493 +1326585600000,2311 +1326672000000,2298 +1326758400000,2935 +1326844800000,3376 +1326931200000,3292 +1327017600000,3163 +1327104000000,1301 +1327190400000,1977 +1327276800000,2432 +1327363200000,4339 +1327449600000,4270 +1327536000000,4075 +1327622400000,3456 +1327708800000,4023 +1327795200000,3243 +1327881600000,3624 +1327968000000,4509 +1328054400000,4579 +1328140800000,3761 +1328227200000,4151 +1328313600000,2832 +1328400000000,2947 +1328486400000,3784 +1328572800000,4375 +1328659200000,2802 +1328745600000,3830 +1328832000000,3831 +1328918400000,2169 +1329004800000,1529 +1329091200000,3422 +1329177600000,3922 +1329264000000,4169 +1329350400000,3005 +1329436800000,4154 +1329523200000,4318 +1329609600000,2689 +1329696000000,3129 +1329782400000,3777 +1329868800000,4773 +1329955200000,5062 +1330041600000,3487 +1330128000000,2732 +1330214400000,3389 +1330300800000,4322 +1330387200000,4363 +1330473600000,1834 +1330560000000,4990 +1330646400000,3194 +1330732800000,4066 +1330819200000,3423 +1330905600000,3333 +1330992000000,3956 +1331078400000,4916 +1331164800000,5382 +1331251200000,4569 +1331337600000,4118 +1331424000000,4911 +1331510400000,5298 +1331596800000,5847 +1331683200000,6312 +1331769600000,6192 +1331856000000,4378 +1331942400000,7836 +1332028800000,5892 +1332115200000,6153 +1332201600000,6093 +1332288000000,6230 +1332374400000,6871 +1332460800000,8362 +1332547200000,3372 +1332633600000,4996 +1332720000000,5558 +1332806400000,5102 +1332892800000,5698 +1332979200000,6133 +1333065600000,5459 +1333152000000,6235 +1333238400000,6041 +1333324800000,5936 +1333411200000,6772 +1333497600000,6436 +1333584000000,6457 +1333670400000,6460 +1333756800000,6857 +1333843200000,5169 +1333929600000,5585 +1334016000000,5918 +1334102400000,4862 +1334188800000,5409 +1334275200000,6398 +1334361600000,7460 +1334448000000,7132 +1334534400000,6370 +1334620800000,6691 +1334707200000,4367 +1334793600000,6565 +1334880000000,7290 +1334966400000,6624 +1335052800000,1027 +1335139200000,3214 +1335225600000,5633 +1335312000000,6196 +1335398400000,5026 +1335484800000,6233 +1335571200000,4220 +1335657600000,6304 +1335744000000,5572 +1335830400000,5740 +1335916800000,6169 +1336003200000,6421 +1336089600000,6296 +1336176000000,6883 +1336262400000,6359 +1336348800000,6273 +1336435200000,5728 +1336521600000,4717 +1336608000000,6572 +1336694400000,7030 +1336780800000,7429 +1336867200000,6118 +1336953600000,2843 +1337040000000,5115 +1337126400000,7424 +1337212800000,7384 +1337299200000,7639 +1337385600000,8294 +1337472000000,7129 +1337558400000,4359 +1337644800000,6073 +1337731200000,5260 +1337817600000,6770 +1337904000000,6734 +1337990400000,6536 +1338076800000,6591 +1338163200000,6043 +1338249600000,5743 +1338336000000,6855 +1338422400000,7338 +1338508800000,4127 +1338595200000,8120 +1338681600000,7641 +1338768000000,6998 +1338854400000,7001 +1338940800000,7055 +1339027200000,7494 +1339113600000,7736 +1339200000000,7498 +1339286400000,6598 +1339372800000,6664 +1339459200000,4972 +1339545600000,7421 +1339632000000,7363 +1339718400000,7665 +1339804800000,7702 +1339891200000,6978 +1339977600000,5099 +1340064000000,6825 +1340150400000,6211 +1340236800000,5905 +1340323200000,5823 +1340409600000,7458 +1340496000000,6891 +1340582400000,6779 +1340668800000,7442 +1340755200000,7335 +1340841600000,6879 +1340928000000,5463 +1341014400000,5687 +1341100800000,5531 +1341187200000,6227 +1341273600000,6660 +1341360000000,7403 +1341446400000,6241 +1341532800000,6207 +1341619200000,4840 +1341705600000,4672 +1341792000000,6569 +1341878400000,6290 +1341964800000,7264 +1342051200000,7446 +1342137600000,7499 +1342224000000,6969 +1342310400000,6031 +1342396800000,6830 +1342483200000,6786 +1342569600000,5713 +1342656000000,6591 +1342742400000,5870 +1342828800000,4459 +1342915200000,7410 +1343001600000,6966 +1343088000000,7592 +1343174400000,8173 +1343260800000,6861 +1343347200000,6904 +1343433600000,6685 +1343520000000,6597 +1343606400000,7105 +1343692800000,7216 +1343779200000,7580 +1343865600000,7261 +1343952000000,7175 +1344038400000,6824 +1344124800000,5464 +1344211200000,7013 +1344297600000,7273 +1344384000000,7534 +1344470400000,7286 +1344556800000,5786 +1344643200000,6299 +1344729600000,6544 +1344816000000,6883 +1344902400000,6784 +1344988800000,7347 +1345075200000,7605 +1345161600000,7148 +1345248000000,7865 +1345334400000,4549 +1345420800000,6530 +1345507200000,7006 +1345593600000,7375 +1345680000000,7765 +1345766400000,7582 +1345852800000,6053 +1345939200000,5255 +1346025600000,6917 +1346112000000,7040 +1346198400000,7697 +1346284800000,7713 +1346371200000,7350 +1346457600000,6140 +1346544000000,5810 +1346630400000,6034 +1346716800000,6864 +1346803200000,7112 +1346889600000,6203 +1346976000000,7504 +1347062400000,5976 +1347148800000,8227 +1347235200000,7525 +1347321600000,7767 +1347408000000,7870 +1347494400000,7804 +1347580800000,8009 +1347667200000,8714 +1347753600000,7333 +1347840000000,6869 +1347926400000,4073 +1348012800000,7591 +1348099200000,7720 +1348185600000,8167 +1348272000000,8395 +1348358400000,7907 +1348444800000,7436 +1348531200000,7538 +1348617600000,7733 +1348704000000,7393 +1348790400000,7415 +1348876800000,8555 +1348963200000,6889 +1349049600000,6778 +1349136000000,4639 +1349222400000,7572 +1349308800000,7328 +1349395200000,8156 +1349481600000,7965 +1349568000000,3510 +1349654400000,5478 +1349740800000,6392 +1349827200000,7691 +1349913600000,7570 +1350000000000,7282 +1350086400000,7109 +1350172800000,6639 +1350259200000,5875 +1350345600000,7534 +1350432000000,7461 +1350518400000,7509 +1350604800000,5424 +1350691200000,8090 +1350777600000,6824 +1350864000000,7058 +1350950400000,7466 +1351036800000,7693 +1351123200000,7359 +1351209600000,7444 +1351296000000,7852 +1351382400000,4459 +1351468800000,22 +1351555200000,1096 +1351641600000,5566 +1351728000000,5986 +1351814400000,5847 +1351900800000,5138 +1351987200000,5107 +1352073600000,5259 +1352160000000,5686 +1352246400000,5035 +1352332800000,5315 +1352419200000,5992 +1352505600000,6536 +1352592000000,6852 +1352678400000,6269 +1352764800000,4094 +1352851200000,5495 +1352937600000,5445 +1353024000000,5698 +1353110400000,5629 +1353196800000,4669 +1353283200000,5499 +1353369600000,5634 +1353456000000,5146 +1353542400000,2425 +1353628800000,3910 +1353715200000,2277 +1353801600000,2424 +1353888000000,5087 +1353974400000,3959 +1354060800000,5260 +1354147200000,5323 +1354233600000,5668 +1354320000000,5191 +1354406400000,4649 +1354492800000,6234 +1354579200000,6606 +1354665600000,5729 +1354752000000,5375 +1354838400000,5008 +1354924800000,5582 +1355011200000,3228 +1355097600000,5170 +1355184000000,5501 +1355270400000,5319 +1355356800000,5532 +1355443200000,5611 +1355529600000,5047 +1355616000000,3786 +1355702400000,4585 +1355788800000,5557 +1355875200000,5267 +1355961600000,4128 +1356048000000,3623 +1356134400000,1749 +1356220800000,1787 +1356307200000,920 +1356393600000,1013 +1356480000000,441 +1356566400000,2114 +1356652800000,3095 +1356739200000,1341 +1356825600000,1796 +1356912000000,2729 \ No newline at end of file diff --git a/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/algorithm/hourly.csv b/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/algorithm/hourly.csv new file mode 100644 index 0000000..dc748f5 --- /dev/null +++ b/thirdeye/thirdeye-pinot/src/test/resources/org/apache/pinot/thirdeye/detection/algorithm/hourly.csv @@ -0,0 +1,3000 @@ +timestamp,value +1314662400000,12066 +1314658800000,13222 +1314655200000,14002 +1314651600000,14047 +1314648000000,14306 +1314644400000,14859 +1314640800000,15071 +1314637200000,15033 +1314633600000,14818 +1314630000000,14558 +1314626400000,14223 +1314622800000,13952 +1314619200000,13628 +1314615600000,13052 +1314612000000,12433 +1314608400000,11579 +1314604800000,10588 +1314601200000,9668 +1314597600000,8994 +1314594000000,8799 +1314590400000,8875 +1314586800000,9115 +1314583200000,9501 +1314579600000,10043 +1314748800000,11980 +1314745200000,12992 +1314741600000,13615 +1314738000000,13549 +1314734400000,13320 +1314730800000,13571 +1314727200000,13875 +1314723600000,14001 +1314720000000,13953 +1314716400000,13912 +1314712800000,13772 +1314709200000,13497 +1314705600000,13254 +1314702000000,12775 +1314698400000,12244 +1314694800000,11685 +1314691200000,10917 +1314687600000,9966 +1314684000000,9331 +1314680400000,9181 +1314676800000,9352 +1314673200000,9712 +1314669600000,10228 +1314666000000,10971 +1314835200000,15468 +1314831600000,16902 +1314828000000,17747 +1314824400000,17767 +1314820800000,17944 +1314817200000,18358 +1314813600000,18299 +1314810000000,17823 +1314806400000,17129 +1314802800000,16422 +1314799200000,15593 +1314795600000,14937 +1314792000000,14277 +1314788400000,13490 +1314784800000,12800 +1314781200000,12091 +1314777600000,11255 +1314774000000,10201 +1314770400000,9482 +1314766800000,9322 +1314763200000,9461 +1314759600000,9811 +1314756000000,10284 +1314752400000,10992 +1314921600000,17900 +1314918000000,19448 +1314914400000,20436 +1314910800000,20666 +1314907200000,21014 +1314903600000,21635 +1314900000000,21900 +1314896400000,21525 +1314892800000,20937 +1314889200000,20587 +1314885600000,19786 +1314882000000,18772 +1314878400000,17751 +1314874800000,16552 +1314871200000,15354 +1314867600000,14253 +1314864000000,13119 +1314860400000,12029 +1314856800000,11394 +1314853200000,11343 +1314849600000,11616 +1314846000000,12219 +1314842400000,13024 +1314838800000,14098 +1315008000000,16435 +1315004400000,17808 +1315000800000,18731 +1314997200000,19148 +1314993600000,19704 +1314990000000,20567 +1314986400000,21028 +1314982800000,21169 +1314979200000,21055 +1314975600000,20745 +1314972000000,20033 +1314968400000,19109 +1314964800000,18099 +1314961200000,17170 +1314957600000,16350 +1314954000000,15591 +1314950400000,14830 +1314946800000,13841 +1314943200000,13312 +1314939600000,13445 +1314936000000,13879 +1314932400000,14539 +1314928800000,15381 +1314925200000,16524 +1315094400000,12485 +1315090800000,13233 +1315087200000,13823 +1315083600000,14017 +1315080000000,14137 +1315076400000,14456 +1315072800000,14895 +1315069200000,15421 +1315065600000,16496 +1315062000000,17126 +1315058400000,17088 +1315054800000,16476 +1315051200000,15616 +1315047600000,14440 +1315044000000,13242 +1315040400000,12271 +1315036800000,11782 +1315033200000,11721 +1315029600000,11710 +1315026000000,12002 +1315022400000,12445 +1315018800000,13139 +1315015200000,13948 +1315011600000,15121 +1315180800000,9804 +1315177200000,10363 +1315173600000,10617 +1315170000000,10486 +1315166400000,10369 +1315162800000,10697 +1315159200000,10922 +1315155600000,11073 +1315152000000,11131 +1315148400000,11139 +1315144800000,11000 +1315141200000,10883 +1315137600000,10473 +1315134000000,10095 +1315130400000,9662 +1315126800000,9317 +1315123200000,9305 +1315119600000,9429 +1315116000000,9440 +1315112400000,9593 +1315108800000,9872 +1315105200000,10275 +1315101600000,10938 +1315098000000,11655 +1315267200000,9032 +1315263600000,9650 +1315260000000,9983 +1315256400000,9718 +1315252800000,9304 +1315249200000,9311 +1315245600000,9267 +1315242000000,9255 +1315238400000,9274 +1315234800000,9345 +1315231200000,9378 +1315227600000,9350 +1315224000000,9184 +1315220400000,8834 +1315216800000,8375 +1315213200000,8012 +1315209600000,7896 +1315206000000,7948 +1315202400000,7815 +1315198800000,7891 +1315195200000,8013 +1315191600000,8324 +1315188000000,8683 +1315184400000,9270 +1315353600000,10248 +1315350000000,11078 +1315346400000,11645 +1315342800000,11533 +1315339200000,11217 +1315335600000,11522 +1315332000000,11757 +1315328400000,11838 +1315324800000,11918 +1315321200000,11940 +1315317600000,11781 +1315314000000,11754 +1315310400000,11396 +1315306800000,11272 +1315303200000,10934 +1315299600000,10399 +1315296000000,9669 +1315292400000,8655 +1315288800000,7930 +1315285200000,7686 +1315281600000,7675 +1315278000000,7803 +1315274400000,8015 +1315270800000,8437 +1315440000000,10351 +1315436400000,11225 +1315432800000,11780 +1315429200000,11681 +1315425600000,11385 +1315422000000,11756 +1315418400000,11980 +1315414800000,12085 +1315411200000,12129 +1315407600000,12185 +1315404000000,12045 +1315400400000,11999 +1315396800000,11909 +1315393200000,11604 +1315389600000,11219 +1315386000000,10667 +1315382400000,9971 +1315378800000,9032 +1315375200000,8415 +1315371600000,8244 +1315368000000,8317 +1315364400000,8545 +1315360800000,8880 +1315357200000,9429 +1315526400000,10782 +1315522800000,11659 +1315519200000,12173 +1315515600000,12279 +1315512000000,11896 +1315508400000,11971 +1315504800000,12131 +1315501200000,12304 +1315497600000,12460 +1315494000000,12625 +1315490400000,12523 +1315486800000,12461 +1315483200000,12282 +1315479600000,11895 +1315476000000,11493 +1315472400000,10942 +1315468800000,10245 +1315465200000,9189 +1315461600000,8551 +1315458000000,8361 +1315454400000,8432 +1315450800000,8641 +1315447200000,8986 +1315443600000,9527 +1315612800000,10882 +1315609200000,11680 +1315605600000,12141 +1315602000000,12193 +1315598400000,11856 +1315594800000,12001 +1315591200000,12272 +1315587600000,12453 +1315584000000,12486 +1315580400000,12538 +1315576800000,12484 +1315573200000,12487 +1315569600000,12426 +1315566000000,12199 +1315562400000,11835 +1315558800000,11363 +1315555200000,10690 +1315551600000,9558 +1315548000000,8902 +1315544400000,8713 +1315540800000,8792 +1315537200000,9089 +1315533600000,9393 +1315530000000,9973 +1315699200000,10561 +1315695600000,11169 +1315692000000,11569 +1315688400000,11569 +1315684800000,11233 +1315681200000,11416 +1315677600000,11458 +1315674000000,11448 +1315670400000,11464 +1315666800000,11508 +1315663200000,11487 +1315659600000,11270 +1315656000000,10965 +1315652400000,10509 +1315648800000,9958 +1315645200000,9314 +1315641600000,8963 +1315638000000,8687 +1315634400000,8525 +1315630800000,8587 +1315627200000,8729 +1315623600000,9055 +1315620000000,9458 +1315616400000,10144 +1315785600000,11317 +1315782000000,12146 +1315778400000,12666 +1315774800000,12644 +1315771200000,12381 +1315767600000,12554 +1315764000000,12538 +1315760400000,12333 +1315756800000,12128 +1315753200000,11794 +1315749600000,11462 +1315746000000,10933 +1315742400000,10379 +1315738800000,9756 +1315735200000,9095 +1315731600000,8429 +1315728000000,8261 +1315724400000,8232 +1315720800000,8245 +1315717200000,8308 +1315713600000,8523 +1315710000000,8798 +1315706400000,9274 +1315702800000,9860 +1315872000000,12935 +1315868400000,14173 +1315864800000,15049 +1315861200000,15253 +1315857600000,15171 +1315854000000,15891 +1315850400000,16278 +1315846800000,16325 +1315843200000,16158 +1315839600000,15931 +1315836000000,15382 +1315832400000,14782 +1315828800000,14160 +1315825200000,13490 +1315821600000,12695 +1315818000000,11901 +1315814400000,11025 +1315810800000,9910 +1315807200000,9140 +1315803600000,8948 +1315800000000,9057 +1315796400000,9372 +1315792800000,9781 +1315789200000,10448 +1315958400000,10956 +1315954800000,11989 +1315951200000,12706 +1315947600000,12909 +1315944000000,12715 +1315940400000,13266 +1315936800000,13738 +1315933200000,13987 +1315929600000,14053 +1315926000000,14058 +1315922400000,13872 +1315918800000,13757 +1315915200000,13574 +1315911600000,13169 +1315908000000,12754 +1315904400000,12120 +1315900800000,11474 +1315897200000,10402 +1315893600000,9755 +1315890000000,9667 +1315886400000,9872 +1315882800000,10265 +1315879200000,10848 +1315875600000,11723 +1316044800000,10042 +1316041200000,10876 +1316037600000,11393 +1316034000000,11395 +1316030400000,10877 +1316026800000,11060 +1316023200000,11259 +1316019600000,11396 +1316016000000,11615 +1316012400000,11781 +1316008800000,11802 +1316005200000,11887 +1316001600000,11851 +1315998000000,11731 +1315994400000,11538 +1315990800000,11023 +1315987200000,10379 +1315983600000,9334 +1315980000000,8720 +1315976400000,8590 +1315972800000,8707 +1315969200000,8959 +1315965600000,9363 +1315962000000,10012 +1316131200000,9957 +1316127600000,10864 +1316124000000,11300 +1316120400000,11388 +1316116800000,10816 +1316113200000,10864 +1316109600000,11062 +1316106000000,11191 +1316102400000,11299 +1316098800000,11384 +1316095200000,11321 +1316091600000,11304 +1316088000000,11255 +1316084400000,11084 +1316080800000,10925 +1316077200000,10548 +1316073600000,9965 +1316070000000,8914 +1316066400000,8286 +1316062800000,8116 +1316059200000,8172 +1316055600000,8377 +1316052000000,8704 +1316048400000,9257 +1316217600000,9926 +1316214000000,10650 +1316210400000,11031 +1316206800000,11216 +1316203200000,10828 +1316199600000,10804 +1316196000000,10941 +1316192400000,11058 +1316188800000,11208 +1316185200000,11311 +1316181600000,11359 +1316178000000,11417 +1316174400000,11359 +1316170800000,11241 +1316167200000,11021 +1316163600000,10667 +1316160000000,10023 +1316156400000,8957 +1316152800000,8338 +1316149200000,8139 +1316145600000,8224 +1316142000000,8437 +1316138400000,8760 +1316134800000,9233 +1316304000000,9289 +1316300400000,9817 +1316296800000,10151 +1316293200000,10152 +1316289600000,9580 +1316286000000,9552 +1316282400000,9647 +1316278800000,9738 +1316275200000,9727 +1316271600000,9815 +1316268000000,9863 +1316264400000,9941 +1316260800000,9878 +1316257200000,9620 +1316253600000,9280 +1316250000000,8765 +1316246400000,8537 +1316242800000,8213 +1316239200000,7987 +1316235600000,7976 +1316232000000,8061 +1316228400000,8320 +1316224800000,8622 +1316221200000,9223 +1316390400000,9428 +1316386800000,9963 +1316383200000,10322 +1316379600000,10448 +1316376000000,10022 +1316372400000,9730 +1316368800000,9573 +1316365200000,9490 +1316361600000,9440 +1316358000000,9391 +1316354400000,9355 +1316350800000,9258 +1316347200000,9063 +1316343600000,8769 +1316340000000,8416 +1316336400000,7977 +1316332800000,7834 +1316329200000,7651 +1316325600000,7523 +1316322000000,7582 +1316318400000,7718 +1316314800000,7921 +1316311200000,8263 +1316307600000,8712 +1316476800000,10270 +1316473200000,11164 +1316469600000,11751 +1316466000000,11958 +1316462400000,11447 +1316458800000,11608 +1316455200000,11772 +1316451600000,11859 +1316448000000,11999 +1316444400000,12087 +1316440800000,12055 +1316437200000,12072 +1316433600000,12002 +1316430000000,11793 +1316426400000,11599 +1316422800000,11165 +1316419200000,10316 +1316415600000,9027 +1316412000000,8368 +1316408400000,8122 +1316404800000,8163 +1316401200000,8208 +1316397600000,8468 +1316394000000,8809 +1316563200000,10567 +1316559600000,11464 +1316556000000,12077 +1316552400000,12264 +1316548800000,11771 +1316545200000,11980 +1316541600000,12214 +1316538000000,12313 +1316534400000,12353 +1316530800000,12319 +1316527200000,12178 +1316523600000,12069 +1316520000000,11865 +1316516400000,11515 +1316512800000,11161 +1316509200000,10679 +1316505600000,10084 +1316502000000,9004 +1316498400000,8380 +1316494800000,8209 +1316491200000,8290 +1316487600000,8513 +1316484000000,8855 +1316480400000,9425 +1316649600000,10259 +1316646000000,11153 +1316642400000,11733 +1316638800000,11987 +1316635200000,11523 +1316631600000,11654 +1316628000000,11941 +1316624400000,12130 +1316620800000,12239 +1316617200000,12307 +1316613600000,12202 +1316610000000,12100 +1316606400000,11953 +1316602800000,11683 +1316599200000,11379 +1316595600000,10989 +1316592000000,10358 +1316588400000,9206 +1316584800000,8584 +1316581200000,8433 +1316577600000,8547 +1316574000000,8753 +1316570400000,9154 +1316566800000,9723 +1316736000000,10079 +1316732400000,10936 +1316728800000,11456 +1316725200000,11649 +1316721600000,11123 +1316718000000,11086 +1316714400000,11273 +1316710800000,11368 +1316707200000,11478 +1316703600000,11551 +1316700000000,11510 +1316696400000,11534 +1316692800000,11503 +1316689200000,11290 +1316685600000,11001 +1316682000000,10596 +1316678400000,10037 +1316674800000,8971 +1316671200000,8392 +1316667600000,8245 +1316664000000,8284 +1316660400000,8511 +1316656800000,8865 +1316653200000,9397 +1316822400000,9875 +1316818800000,10571 +1316815200000,10936 +1316811600000,11205 +1316808000000,10894 +1316804400000,10742 +1316800800000,10857 +1316797200000,11017 +1316793600000,11222 +1316790000000,11336 +1316786400000,11295 +1316782800000,11243 +1316779200000,11198 +1316775600000,11014 +1316772000000,10811 +1316768400000,10535 +1316764800000,9935 +1316761200000,8875 +1316757600000,8287 +1316754000000,8131 +1316750400000,8187 +1316746800000,8435 +1316743200000,8760 +1316739600000,9294 +1316908800000,9230 +1316905200000,9755 +1316901600000,10023 +1316898000000,10093 +1316894400000,9613 +1316890800000,9449 +1316887200000,9451 +1316883600000,9461 +1316880000000,9526 +1316876400000,9639 +1316872800000,9740 +1316869200000,9865 +1316865600000,9804 +1316862000000,9580 +1316858400000,9228 +1316854800000,8740 +1316851200000,8546 +1316847600000,8134 +1316844000000,7938 +1316840400000,7871 +1316836800000,8019 +1316833200000,8252 +1316829600000,8609 +1316826000000,9181 +1316995200000,9142 +1316991600000,9716 +1316988000000,10073 +1316984400000,10235 +1316980800000,9594 +1316977200000,9312 +1316973600000,9241 +1316970000000,9221 +1316966400000,9233 +1316962800000,9284 +1316959200000,9222 +1316955600000,9211 +1316952000000,9041 +1316948400000,8786 +1316944800000,8391 +1316941200000,7960 +1316937600000,7797 +1316934000000,7630 +1316930400000,7527 +1316926800000,7575 +1316923200000,7682 +1316919600000,7925 +1316916000000,8183 +1316912400000,8712 +1317081600000,10107 +1317078000000,10971 +1317074400000,11515 +1317070800000,11765 +1317067200000,11404 +1317063600000,11254 +1317060000000,11293 +1317056400000,11362 +1317052800000,11535 +1317049200000,11610 +1317045600000,11590 +1317042000000,11576 +1317038400000,11553 +1317034800000,11314 +1317031200000,11113 +1317027600000,10824 +1317024000000,10070 +1317020400000,8897 +1317016800000,8205 +1317013200000,7931 +1317009600000,7935 +1317006000000,8007 +1317002400000,8192 +1316998800000,8581 +1317168000000,10119 +1317164400000,10968 +1317160800000,11522 +1317157200000,11779 +1317153600000,11449 +1317150000000,11260 +1317146400000,11308 +1317142800000,11413 +1317139200000,11553 +1317135600000,11639 +1317132000000,11615 +1317128400000,11647 +1317124800000,11596 +1317121200000,11459 +1317117600000,11208 +1317114000000,10931 +1317110400000,10255 +1317106800000,9039 +1317103200000,8369 +1317099600000,8199 +1317096000000,8263 +1317092400000,8477 +1317088800000,8776 +1317085200000,9300 +1317254400000,10177 +1317250800000,11018 +1317247200000,11545 +1317243600000,11822 +1317240000000,11522 +1317236400000,11325 +1317232800000,11392 +1317229200000,11505 +1317225600000,11569 +1317222000000,11707 +1317218400000,11625 +1317214800000,11661 +1317211200000,11575 +1317207600000,11393 +1317204000000,11191 +1317200400000,10845 +1317196800000,10169 +1317193200000,8994 +1317189600000,8388 +1317186000000,8226 +1317182400000,8275 +1317178800000,8503 +1317175200000,8822 +1317171600000,9295 +1317340800000,10150 +1317337200000,11023 +1317333600000,11497 +1317330000000,11800 +1317326400000,11465 +1317322800000,11365 +1317319200000,11431 +1317315600000,11510 +1317312000000,11670 +1317308400000,11863 +1317304800000,11814 +1317301200000,11750 +1317297600000,11585 +1317294000000,11369 +1317290400000,11095 +1317286800000,10735 +1317283200000,10168 +1317279600000,9050 +1317276000000,8399 +1317272400000,8241 +1317268800000,8272 +1317265200000,8483 +1317261600000,8807 +1317258000000,9352 +1317427200000,10068 +1317423600000,10746 +1317420000000,11111 +1317416400000,11305 +1317412800000,11025 +1317409200000,10734 +1317405600000,10839 +1317402000000,10950 +1317398400000,11127 +1317394800000,11270 +1317391200000,11247 +1317387600000,11214 +1317384000000,11232 +1317380400000,11104 +1317376800000,10998 +1317373200000,10810 +1317369600000,10224 +1317366000000,9075 +1317362400000,8436 +1317358800000,8279 +1317355200000,8318 +1317351600000,8532 +1317348000000,8846 +1317344400000,9380 +1317513600000,9321 +1317510000000,9785 +1317506400000,10058 +1317502800000,10149 +1317499200000,9585 +1317495600000,9282 +1317492000000,9285 +1317488400000,9307 +1317484800000,9399 +1317481200000,9517 +1317477600000,9661 +1317474000000,9739 +1317470400000,9774 +1317466800000,9654 +1317463200000,9384 +1317459600000,9005 +1317456000000,8797 +1317452400000,8382 +1317448800000,8112 +1317445200000,8143 +1317441600000,8236 +1317438000000,8481 +1317434400000,8821 +1317430800000,9365 +1317600000000,9069 +1317596400000,9672 +1317592800000,10017 +1317589200000,10175 +1317585600000,9523 +1317582000000,9155 +1317578400000,9075 +1317574800000,9025 +1317571200000,9032 +1317567600000,9058 +1317564000000,9084 +1317560400000,9024 +1317556800000,8944 +1317553200000,8700 +1317549600000,8484 +1317546000000,8140 +1317542400000,8113 +1317538800000,7867 +1317535200000,7777 +1317531600000,7730 +1317528000000,7833 +1317524400000,7997 +1317520800000,8287 +1317517200000,8769 +1317686400000,10036 +1317682800000,10863 +1317679200000,11373 +1317675600000,11684 +1317672000000,11277 +1317668400000,11145 +1317664800000,11328 +1317661200000,11500 +1317657600000,11658 +1317654000000,11682 +1317650400000,11618 +1317646800000,11555 +1317643200000,11430 +1317639600000,11130 +1317636000000,10914 +1317632400000,10593 +1317628800000,9985 +1317625200000,8736 +1317621600000,8034 +1317618000000,7797 +1317614400000,7746 +1317610800000,7916 +1317607200000,8093 +1317603600000,8532 +1317772800000,10150 +1317769200000,11068 +1317765600000,11663 +1317762000000,11981 +1317758400000,11626 +1317754800000,11519 +1317751200000,11732 +1317747600000,11863 +1317744000000,11947 +1317740400000,11937 +1317736800000,11812 +1317733200000,11711 +1317729600000,11571 +1317726000000,11279 +1317722400000,11008 +1317718800000,10670 +1317715200000,10157 +1317711600000,8955 +1317708000000,8295 +1317704400000,8105 +1317700800000,8163 +1317697200000,8356 +1317693600000,8660 +1317690000000,9201 +1317859200000,10413 +1317855600000,11302 +1317852000000,11922 +1317848400000,12264 +1317844800000,11976 +1317841200000,11941 +1317837600000,12191 +1317834000000,12292 +1317830400000,12342 +1317826800000,12360 +1317823200000,12139 +1317819600000,12020 +1317816000000,11760 +1317812400000,11400 +1317808800000,11052 +1317805200000,10658 +1317801600000,10075 +1317798000000,8937 +1317794400000,8299 +1317790800000,8112 +1317787200000,8196 +1317783600000,8435 +1317780000000,8763 +1317776400000,9311 +1317945600000,10712 +1317942000000,11624 +1317938400000,12270 +1317934800000,12593 +1317931200000,12407 +1317927600000,12356 +1317924000000,12626 +1317920400000,12786 +1317916800000,12782 +1317913200000,12762 +1317909600000,12574 +1317906000000,12349 +1317902400000,12117 +1317898800000,11641 +1317895200000,11250 +1317891600000,10805 +1317888000000,10198 +1317884400000,8984 +1317880800000,8398 +1317877200000,8230 +1317873600000,8322 +1317870000000,8552 +1317866400000,8940 +1317862800000,9555 +1318032000000,11010 +1318028400000,11823 +1318024800000,12371 +1318021200000,12714 +1318017600000,12604 +1318014000000,12554 +1318010400000,12922 +1318006800000,13091 +1318003200000,13100 +1317999600000,13047 +1317996000000,12882 +1317992400000,12638 +1317988800000,12295 +1317985200000,11798 +1317981600000,11345 +1317978000000,10821 +1317974400000,10205 +1317970800000,9127 +1317967200000,8500 +1317963600000,8356 +1317960000000,8459 +1317956400000,8753 +1317952800000,9169 +1317949200000,9784 +1318118400000,10212 +1318114800000,10862 +1318111200000,11320 +1318107600000,11580 +1318104000000,11424 +1318100400000,11319 +1318096800000,11485 +1318093200000,11623 +1318089600000,11552 +1318086000000,11404 +1318082400000,11306 +1318078800000,11145 +1318075200000,10822 +1318071600000,10304 +1318068000000,9775 +1318064400000,9139 +1318060800000,9002 +1318057200000,8593 +1318053600000,8444 +1318050000000,8447 +1318046400000,8654 +1318042800000,8962 +1318039200000,9476 +1318035600000,10140 +1318204800000,9747 +1318201200000,10355 +1318197600000,10728 +1318194000000,11034 +1318190400000,10756 +1318186800000,10509 +1318183200000,10579 +1318179600000,10595 +1318176000000,10504 +1318172400000,10395 +1318168800000,10182 +1318165200000,9909 +1318161600000,9542 +1318158000000,9031 +1318154400000,8518 +1318150800000,8020 +1318147200000,8082 +1318143600000,7890 +1318140000000,7887 +1318136400000,7945 +1318132800000,8191 +1318129200000,8468 +1318125600000,8919 +1318122000000,9490 +1318291200000,10628 +1318287600000,11498 +1318284000000,12085 +1318280400000,12464 +1318276800000,12342 +1318273200000,12078 +1318269600000,12282 +1318266000000,12400 +1318262400000,12420 +1318258800000,12388 +1318255200000,12182 +1318251600000,12008 +1318248000000,11770 +1318244400000,11432 +1318240800000,10897 +1318237200000,10417 +1318233600000,9819 +1318230000000,8816 +1318226400000,8202 +1318222800000,8074 +1318219200000,8090 +1318215600000,8311 +1318212000000,8596 +1318208400000,9126 +1318377600000,10790 +1318374000000,11770 +1318370400000,12391 +1318366800000,12778 +1318363200000,12639 +1318359600000,12428 +1318356000000,12660 +1318352400000,12807 +1318348800000,12903 +1318345200000,13015 +1318341600000,12859 +1318338000000,12696 +1318334400000,12415 +1318330800000,11949 +1318327200000,11469 +1318323600000,10981 +1318320000000,10424 +1318316400000,9193 +1318312800000,8540 +1318309200000,8387 +1318305600000,8494 +1318302000000,8750 +1318298400000,9103 +1318294800000,9740 +1318464000000,10726 +1318460400000,11671 +1318456800000,12282 +1318453200000,12649 +1318449600000,12581 +1318446000000,12287 +1318442400000,12480 +1318438800000,12758 +1318435200000,12875 +1318431600000,12951 +1318428000000,12748 +1318424400000,12554 +1318420800000,12246 +1318417200000,11800 +1318413600000,11379 +1318410000000,11010 +1318406400000,10412 +1318402800000,9154 +1318399200000,8579 +1318395600000,8428 +1318392000000,8536 +1318388400000,8832 +1318384800000,9248 +1318381200000,9865 +1318550400000,10321 +1318546800000,11250 +1318543200000,11792 +1318539600000,12140 +1318536000000,12038 +1318532400000,11812 +1318528800000,11834 +1318525200000,11905 +1318521600000,12044 +1318518000000,12197 +1318514400000,12159 +1318510800000,12173 +1318507200000,12118 +1318503600000,11912 +1318500000000,11713 +1318496400000,11387 +1318492800000,10564 +1318489200000,9314 +1318485600000,8690 +1318482000000,8560 +1318478400000,8591 +1318474800000,8836 +1318471200000,9208 +1318467600000,9804 +1318636800000,10081 +1318633200000,10773 +1318629600000,11195 +1318626000000,11468 +1318622400000,11334 +1318618800000,10840 +1318615200000,10906 +1318611600000,11058 +1318608000000,11227 +1318604400000,11332 +1318600800000,11320 +1318597200000,11311 +1318593600000,11288 +1318590000000,11095 +1318586400000,10948 +1318582800000,10754 +1318579200000,10222 +1318575600000,9027 +1318572000000,8391 +1318568400000,8270 +1318564800000,8304 +1318561200000,8543 +1318557600000,8866 +1318554000000,9500 +1318723200000,9339 +1318719600000,9827 +1318716000000,10140 +1318712400000,10240 +1318708800000,10075 +1318705200000,9463 +1318701600000,9405 +1318698000000,9430 +1318694400000,9469 +1318690800000,9619 +1318687200000,9735 +1318683600000,9784 +1318680000000,9775 +1318676400000,9619 +1318672800000,9386 +1318669200000,8972 +1318665600000,8807 +1318662000000,8366 +1318658400000,8113 +1318654800000,8101 +1318651200000,8229 +1318647600000,8433 +1318644000000,8827 +1318640400000,9383 +1318809600000,9139 +1318806000000,9753 +1318802400000,10060 +1318798800000,10259 +1318795200000,9946 +1318791600000,9173 +1318788000000,9137 +1318784400000,9050 +1318780800000,9121 +1318777200000,9108 +1318773600000,9190 +1318770000000,9128 +1318766400000,9063 +1318762800000,8847 +1318759200000,8553 +1318755600000,8291 +1318752000000,8022 +1318748400000,7746 +1318744800000,7645 +1318741200000,7645 +1318737600000,7764 +1318734000000,7950 +1318730400000,8247 +1318726800000,8785 +1318896000000,10193 +1318892400000,11037 +1318888800000,11589 +1318885200000,11853 +1318881600000,11795 +1318878000000,11183 +1318874400000,11067 +1318870800000,11153 +1318867200000,11289 +1318863600000,11410 +1318860000000,11384 +1318856400000,11385 +1318852800000,11326 +1318849200000,11202 +1318845600000,11109 +1318842000000,10939 +1318838400000,10252 +1318834800000,8958 +1318831200000,8147 +1318827600000,7934 +1318824000000,7896 +1318820400000,8027 +1318816800000,8191 +1318813200000,8596 +1318982400000,10334 +1318978800000,11165 +1318975200000,11713 +1318971600000,12019 +1318968000000,12090 +1318964400000,11731 +1318960800000,11582 +1318957200000,11536 +1318953600000,11401 +1318950000000,11512 +1318946400000,11526 +1318942800000,11576 +1318939200000,11604 +1318935600000,11566 +1318932000000,11442 +1318928400000,11329 +1318924800000,10648 +1318921200000,9289 +1318917600000,8590 +1318914000000,8390 +1318910400000,8432 +1318906800000,8599 +1318903200000,8897 +1318899600000,9402 +1319068800000,10643 +1319065200000,11490 +1319061600000,12015 +1319058000000,12328 +1319054400000,12469 +1319050800000,12215 +1319047200000,12035 +1319043600000,11919 +1319040000000,11887 +1319036400000,11888 +1319032800000,11862 +1319029200000,11953 +1319025600000,11961 +1319022000000,11763 +1319018400000,11708 +1319014800000,11436 +1319011200000,10680 +1319007600000,9391 +1319004000000,8651 +1319000400000,8460 +1318996800000,8528 +1318993200000,8693 +1318989600000,9007 +1318986000000,9554 +1319155200000,10666 +1319151600000,11443 +1319148000000,11925 +1319144400000,12281 +1319140800000,12354 +1319137200000,11916 +1319133600000,11750 +1319130000000,11766 +1319126400000,11891 +1319122800000,12024 +1319119200000,12051 +1319115600000,12098 +1319112000000,12101 +1319108400000,11983 +1319104800000,11840 +1319101200000,11743 +1319097600000,10955 +1319094000000,9676 +1319090400000,8976 +1319086800000,8725 +1319083200000,8799 +1319079600000,8987 +1319076000000,9273 +1319072400000,9825 +1319241600000,10425 +1319238000000,11054 +1319234400000,11329 +1319230800000,11555 +1319227200000,11539 +1319223600000,10908 +1319220000000,10952 +1319216400000,11036 +1319212800000,11257 +1319209200000,11384 +1319205600000,11472 +1319202000000,11554 +1319198400000,11573 +1319194800000,11594 +1319191200000,11594 +1319187600000,11539 +1319184000000,11011 +1319180400000,9731 +1319176800000,9025 +1319173200000,8803 +1319169600000,8854 +1319166000000,9078 +1319162400000,9414 +1319158800000,9851 +1319328000000,9566 +1319324400000,9995 +1319320800000,10353 +1319317200000,10351 +1319313600000,10324 +1319310000000,9671 +1319306400000,9582 +1319302800000,9638 +1319299200000,9711 +1319295600000,9848 +1319292000000,9947 +1319288400000,10097 +1319284800000,10095 +1319281200000,10075 +1319277600000,9874 +1319274000000,9580 +1319270400000,9385 +1319266800000,8890 +1319263200000,8620 +1319259600000,8576 +1319256000000,8680 +1319252400000,8753 +1319248800000,9198 +1319245200000,9773 +1319414400000,9281 +1319410800000,9817 +1319407200000,10198 +1319403600000,10430 +1319400000000,10248 +1319396400000,9489 +1319392800000,9207 +1319389200000,9246 +1319385600000,9229 +1319382000000,9274 +1319378400000,9199 +1319374800000,9257 +1319371200000,9102 +1319367600000,8934 +1319364000000,8743 +1319360400000,8603 +1319356800000,8509 +1319353200000,8239 +1319349600000,7975 +1319346000000,7979 +1319342400000,8042 +1319338800000,8234 +1319335200000,8543 +1319331600000,9083 +1319500800000,10191 +1319497200000,11035 +1319493600000,11556 +1319490000000,11845 +1319486400000,11891 +1319482800000,11242 +1319479200000,11207 +1319475600000,11335 +1319472000000,11455 +1319468400000,11540 +1319464800000,11514 +1319461200000,11449 +1319457600000,11388 +1319454000000,11250 +1319450400000,11093 +1319446800000,10924 +1319443200000,10289 +1319439600000,8888 +1319436000000,8197 +1319432400000,7922 +1319428800000,7956 +1319425200000,8081 +1319421600000,8338 +1319418000000,8684 +1319587200000,10206 +1319583600000,11106 +1319580000000,11707 +1319576400000,12140 +1319572800000,12266 +1319569200000,11836 +1319565600000,11568 +1319562000000,11627 +1319558400000,11730 +1319554800000,11797 +1319551200000,11773 +1319547600000,11760 +1319544000000,11691 +1319540400000,11479 +1319536800000,11322 +1319533200000,11217 +1319529600000,10489 +1319526000000,9213 +1319522400000,8521 +1319518800000,8326 +1319515200000,8383 +1319511600000,8580 +1319508000000,8882 +1319504400000,9413 +1319673600000,10330 +1319670000000,11168 +1319666400000,11689 +1319662800000,11978 +1319659200000,12149 +1319655600000,11898 +1319652000000,11691 +1319648400000,11648 +1319644800000,11658 +1319641200000,11776 +1319637600000,11715 +1319634000000,11731 +1319630400000,11726 +1319626800000,11545 +1319623200000,11411 +1319619600000,11182 +1319616000000,10265 +1319612400000,9065 +1319608800000,8427 +1319605200000,8242 +1319601600000,8278 +1319598000000,8512 +1319594400000,8830 +1319590800000,9381 +1319760000000,10479 +1319756400000,11327 +1319752800000,11746 +1319749200000,12080 +1319745600000,12074 +1319742000000,11394 +1319738400000,11203 +1319734800000,11255 +1319731200000,11373 +1319727600000,11497 +1319724000000,11485 +1319720400000,11565 +1319716800000,11651 +1319713200000,11609 +1319709600000,11577 +1319706000000,11467 +1319702400000,10654 +1319698800000,9380 +1319695200000,8658 +1319691600000,8452 +1319688000000,8543 +1319684400000,8747 +1319680800000,9012 +1319677200000,9546 +1319846400000,10290 +1319842800000,10939 +1319839200000,11295 +1319835600000,11576 +1319832000000,11674 +1319828400000,11080 +1319824800000,10911 +1319821200000,10988 +1319817600000,11158 +1319814000000,11323 +1319810400000,11397 +1319806800000,11466 +1319803200000,11562 +1319799600000,11530 +1319796000000,11574 +1319792400000,11574 +1319788800000,10871 +1319785200000,9645 +1319781600000,8935 +1319778000000,8719 +1319774400000,8764 +1319770800000,8972 +1319767200000,9301 +1319763600000,9791 +1319932800000,9697 +1319929200000,10206 +1319925600000,10426 +1319922000000,10629 +1319918400000,10580 +1319914800000,9814 +1319911200000,9511 +1319907600000,9544 +1319904000000,9574 +1319900400000,9742 +1319896800000,9907 +1319893200000,10054 +1319889600000,10099 +1319886000000,10033 +1319882400000,9880 +1319878800000,9636 +1319875200000,9315 +1319871600000,8757 +1319868000000,8475 +1319864400000,8426 +1319860800000,8506 +1319857200000,8694 +1319853600000,9015 +1319850000000,9577 +1320019200000,9595 +1320015600000,10160 +1320012000000,10498 +1320008400000,10718 +1320004800000,10761 +1320001200000,10322 +1319997600000,9945 +1319994000000,9627 +1319990400000,9407 +1319986800000,9391 +1319983200000,9385 +1319979600000,9346 +1319976000000,9384 +1319972400000,9288 +1319968800000,9067 +1319965200000,8841 +1319961600000,8647 +1319958000000,8333 +1319954400000,8252 +1319950800000,8218 +1319947200000,8365 +1319943600000,8515 +1319940000000,8790 +1319936400000,9158 +1320105600000,10369 +1320102000000,11116 +1320098400000,11561 +1320094800000,11782 +1320091200000,11826 +1320087600000,11338 +1320084000000,11162 +1320080400000,11233 +1320076800000,11306 +1320073200000,11465 +1320069600000,11408 +1320066000000,11493 +1320062400000,11516 +1320058800000,11482 +1320055200000,11525 +1320051600000,11477 +1320048000000,10776 +1320044400000,9371 +1320040800000,8586 +1320037200000,8281 +1320033600000,8262 +1320030000000,8367 +1320026400000,8598 +1320022800000,9009 +1320192000000,10325 +1320188400000,11178 +1320184800000,11758 +1320181200000,12044 +1320177600000,12155 +1320174000000,11535 +1320170400000,11381 +1320166800000,11459 +1320163200000,11528 +1320159600000,11549 +1320156000000,11549 +1320152400000,11587 +1320148800000,11660 +1320145200000,11627 +1320141600000,11648 +1320138000000,11670 +1320134400000,10940 +1320130800000,9605 +1320127200000,8887 +1320123600000,8655 +1320120000000,8669 +1320116400000,8842 +1320112800000,9123 +1320109200000,9614 +1320278400000,10258 +1320274800000,11101 +1320271200000,11626 +1320267600000,11981 +1320264000000,12152 +1320260400000,11637 +1320256800000,11366 +1320253200000,11411 +1320249600000,11516 +1320246000000,11596 +1320242400000,11564 +1320238800000,11638 +1320235200000,11593 +1320231600000,11454 +1320228000000,11330 +1320224400000,11270 +1320220800000,10556 +1320217200000,9224 +1320213600000,8522 +1320210000000,8362 +1320206400000,8406 +1320202800000,8623 +1320199200000,8940 +1320195600000,9496 +1320364800000,10612 +1320361200000,11418 +1320357600000,11955 +1320354000000,12283 +1320350400000,12465 +1320346800000,12247 +1320343200000,12006 +1320339600000,12021 +1320336000000,12085 +1320332400000,12192 +1320328800000,12188 +1320325200000,12192 +1320321600000,12189 +1320318000000,12106 +1320314400000,11943 +1320310800000,11661 +1320307200000,10637 +1320303600000,9405 +1320300000000,8693 +1320296400000,8452 +1320292800000,8518 +1320289200000,8690 +1320285600000,9001 +1320282000000,9509 +1320451200000,10461 +1320447600000,11107 +1320444000000,11456 +1320440400000,11727 +1320436800000,11824 +1320433200000,11137 +1320429600000,11002 +1320426000000,11088 +1320422400000,11243 +1320418800000,11468 +1320415200000,11491 +1320411600000,11626 +1320408000000,11691 +1320404400000,11658 +1320400800000,11653 +1320397200000,11612 +1320393600000,10917 +1320390000000,9648 +1320386400000,8960 +1320382800000,8752 +1320379200000,8778 +1320375600000,9008 +1320372000000,9316 +1320368400000,9861 +1320537600000,9685 +1320534000000,10124 +1320530400000,10413 +1320526800000,10539 +1320523200000,10621 +1320519600000,9857 +1320516000000,9528 +1320512400000,9522 +1320508800000,9616 +1320505200000,9792 +1320501600000,9988 +1320498000000,10171 +1320494400000,10206 +1320490800000,10199 +1320487200000,10040 +1320483600000,9879 +1320480000000,9444 +1320476400000,8945 +1320472800000,8602 +1320469200000,8600 +1320465600000,8672 +1320462000000,8922 +1320458400000,9206 +1320454800000,9781 +1320624000000,9262 +1320620400000,9861 +1320616800000,10296 +1320613200000,10597 +1320609600000,10707 +1320606000000,10750 +1320602400000,10071 +1320598800000,9588 +1320595200000,9484 +1320591600000,9534 +1320588000000,9453 +1320584400000,9403 +1320580800000,9236 +1320577200000,9126 +1320573600000,8888 +1320570000000,8574 +1320566400000,8366 +1320562800000,8266 +1320559200000,8041 +1320555600000,8045 +1320552000000,8061 +1320548400000,8298 +1320541200000,9164 +1320710400000,10276 +1320706800000,11067 +1320703200000,11591 +1320699600000,11971 +1320696000000,12198 +1320692400000,12391 +1320688800000,11985 +1320685200000,11579 +1320681600000,11550 +1320678000000,11672 +1320674400000,11596 +1320670800000,11633 +1320667200000,11663 +1320663600000,11485 +1320660000000,11349 +1320656400000,11054 +1320652800000,10396 +1320649200000,9158 +1320645600000,8358 +1320642000000,8101 +1320638400000,8058 +1320634800000,8186 +1320631200000,8366 +1320627600000,8737 +1320796800000,10424 +1320793200000,11272 +1320789600000,11848 +1320786000000,12205 +1320782400000,12483 +1320778800000,12731 +1320775200000,12477 +1320771600000,12031 +1320768000000,11967 +1320764400000,12093 +1320760800000,12041 +1320757200000,12078 +1320753600000,12146 +1320750000000,12043 +1320746400000,11905 +1320742800000,11440 +1320739200000,10670 +1320735600000,9462 +1320732000000,8724 +1320728400000,8498 +1320724800000,8544 +1320721200000,8724 +1320717600000,8967 +1320714000000,9508 +1320883200000,10838 +1320879600000,11641 +1320876000000,12177 +1320872400000,12537 +1320868800000,12809 +1320865200000,13026 +1320861600000,12579 +1320858000000,12062 +1320854400000,11969 +1320850800000,11994 +1320847200000,11905 +1320843600000,11916 +1320840000000,11831 +1320836400000,11749 +1320832800000,11770 +1320829200000,11617 +1320825600000,10867 +1320822000000,9578 +1320818400000,8834 +1320814800000,8588 +1320811200000,8678 +1320807600000,8853 +1320804000000,9169 +1320800400000,9667 +1320969600000,11024 +1320966000000,11801 +1320962400000,12298 +1320958800000,12650 +1320955200000,12886 +1320951600000,13088 +1320948000000,12588 +1320944400000,12192 +1320940800000,12215 +1320937200000,12326 +1320933600000,12346 +1320930000000,12406 +1320926400000,12407 +1320922800000,12185 +1320919200000,12105 +1320915600000,11843 +1320912000000,11312 +1320908400000,10155 +1320904800000,9404 +1320901200000,9126 +1320897600000,9117 +1320894000000,9277 +1320890400000,9549 +1320886800000,10075 +1321056000000,10785 +1321052400000,11388 +1321048800000,11854 +1321045200000,12176 +1321041600000,12400 +1321038000000,12590 +1321034400000,11896 +1321030800000,11480 +1321027200000,11623 +1321023600000,11839 +1321020000000,11929 +1321016400000,12109 +1321012800000,12178 +1321009200000,12108 +1321005600000,11908 +1321002000000,11555 +1320998400000,11116 +1320994800000,10192 +1320991200000,9536 +1320987600000,9305 +1320984000000,9325 +1320980400000,9527 +1320976800000,9799 +1320973200000,10312 +1321142400000,9703 +1321138800000,10218 +1321135200000,10523 +1321131600000,10786 +1321128000000,10958 +1321124400000,11033 +1321120800000,10399 +1321117200000,9816 +1321113600000,9732 +1321110000000,9877 +1321106400000,10013 +1321102800000,10202 +1321099200000,10255 +1321095600000,10253 +1321092000000,10042 +1321088400000,9817 +1321084800000,9641 +1321081200000,9287 +1321077600000,8979 +1321074000000,8917 +1321070400000,9021 +1321066800000,9214 +1321063200000,9577 +1321059600000,10047 +1321228800000,9376 +1321225200000,9937 +1321221600000,10337 +1321218000000,10545 +1321214400000,10682 +1321210800000,10672 +1321207200000,9850 +1321203600000,9377 +1321200000000,9329 +1321196400000,9399 +1321192800000,9415 +1321189200000,9455 +1321185600000,9306 +1321182000000,9058 +1321178400000,8767 +1321174800000,8402 +1321171200000,8341 +1321167600000,8162 +1321164000000,8054 +1321160400000,8067 +1321156800000,8140 +1321153200000,8419 +1321149600000,8673 +1321146000000,9151 +1321315200000,10404 +1321311600000,11235 +1321308000000,11754 +1321304400000,12100 +1321300800000,12333 +1321297200000,12513 +1321293600000,11954 +1321290000000,11433 +1321286400000,11528 +1321282800000,11718 +1321279200000,11791 +1321275600000,11829 +1321272000000,11841 +1321268400000,11673 +1321264800000,11485 +1321261200000,11202 +1321257600000,10601 +1321254000000,9383 +1321250400000,8498 +1321246800000,8215 +1321243200000,8129 +1321239600000,8243 +1321236000000,8423 +1321232400000,8792 +1321401600000,10349 +1321398000000,11141 +1321394400000,11677 +1321390800000,11986 +1321387200000,12200 +1321383600000,12318 +1321380000000,11733 +1321376400000,11351 +1321372800000,11427 +1321369200000,11513 +1321365600000,11536 +1321362000000,11598 +1321358400000,11588 +1321354800000,11533 +1321351200000,11455 +1321347600000,11339 +1321344000000,10898 +1321340400000,9740 +1321336800000,8978 +1321333200000,8691 +1321329600000,8689 +1321326000000,8841 +1321322400000,9095 +1321318800000,9605 +1321488000000,11040 +1321484400000,11825 +1321480800000,12329 +1321477200000,12622 +1321473600000,12810 +1321470000000,12978 +1321466400000,12336 +1321462800000,11786 +1321459200000,11790 +1321455600000,11892 +1321452000000,11925 +1321448400000,11966 +1321444800000,11990 +1321441200000,11937 +1321437600000,11783 +1321434000000,11563 +1321430400000,11063 +1321426800000,9850 +1321423200000,9050 +1321419600000,8749 +1321416000000,8745 +1321412400000,8902 +1321408800000,9160 +1321405200000,9626 +1321574400000,11400 +1321570800000,12186 +1321567200000,12704 +1321563600000,12982 +1321560000000,13171 +1321556400000,13235 +1321552800000,12638 +1321549200000,12060 +1321545600000,12073 +1321542000000,12191 +1321538400000,12196 +1321534800000,12280 +1321531200000,12331 +1321527600000,12285 +1321524000000,12195 +1321520400000,12056 +1321516800000,11604 +1321513200000,10459 +1321509600000,9658 +1321506000000,9379 +1321502400000,9367 +1321498800000,9545 +1321495200000,9795 +1321491600000,10279 +1321660800000,10812 +1321657200000,11497 +1321653600000,11929 +1321650000000,12237 +1321646400000,12528 +1321642800000,12700 +1321639200000,12170 +1321635600000,11648 +1321632000000,11706 +1321628400000,11921 +1321624800000,11998 +1321621200000,12130 +1321617600000,12231 +1321614000000,12206 +1321610400000,12220 +1321606800000,12129 +1321603200000,11720 +1321599600000,10629 +1321596000000,9886 +1321592400000,9656 +1321588800000,9655 +1321585200000,9835 +1321581600000,10120 +1321578000000,10613 +1321747200000,9766 +1321743600000,10330 +1321740000000,10693 +1321736400000,10886 +1321732800000,11118 +1321729200000,11209 +1321725600000,10794 +1321722000000,10287 +1321718400000,10290 +1321714800000,10376 +1321711200000,10388 +1321707600000,10571 +1321704000000,10784 +1321700400000,10691 +1321696800000,10383 +1321693200000,9946 +1321689600000,9646 +1321686000000,9133 +1321682400000,8873 +1321678800000,8788 +1321675200000,8903 +1321671600000,9149 +1321668000000,9514 +1321664400000,10117 +1321833600000,9950 +1321830000000,10508 +1321826400000,10891 +1321822800000,11107 +1321819200000,11244 +1321815600000,11243 +1321812000000,10739 +1321808400000,10051 +1321804800000,9919 +1321801200000,9855 +1321797600000,9789 +1321794000000,9643 +1321790400000,9599 +1321786800000,9330 +1321783200000,8980 +1321779600000,8630 +1321776000000,8614 +1321772400000,8347 +1321768800000,8160 +1321765200000,8139 +1321761600000,8272 +1321758000000,8418 +1321754400000,8709 +1321750800000,9203 +1321920000000,10693 +1321916400000,11503 +1321912800000,12054 +1321909200000,12358 +1321905600000,12604 +1321902000000,12812 +1321898400000,12370 +1321894800000,11710 +1321891200000,11618 +1321887600000,11702 +1321884000000,11709 +1321880400000,11850 +1321876800000,11938 +1321873200000,11882 +1321869600000,11796 +1321866000000,11529 +1321862400000,10939 +1321858800000,9775 +1321855200000,8971 +1321851600000,8691 +1321848000000,8660 +1321844400000,8760 +1321840800000,8975 +1321837200000,9393 +1322006400000,10862 +1322002800000,11641 +1321999200000,12144 +1321995600000,12494 +1321992000000,12774 +1321988400000,13016 +1321984800000,12773 +1321981200000,12294 +1321977600000,12252 +1321974000000,12292 +1321970400000,12290 +1321966800000,12268 +1321963200000,12323 +1321959600000,12179 +1321956000000,12020 +1321952400000,11712 +1321948800000,10938 +1321945200000,9747 +1321941600000,9032 +1321938000000,8793 +1321934400000,8832 +1321930800000,9033 +1321927200000,9363 +1321923600000,9879 +1322092800000,10557 +1322089200000,11211 +1322085600000,11677 +1322082000000,11925 +1322078400000,12178 +1322074800000,12366 +1322071200000,11737 +1322067600000,11176 +1322064000000,11291 +1322060400000,11451 +1322056800000,11551 +1322053200000,11754 +1322049600000,11847 +1322046000000,11819 +1322042400000,11672 +1322038800000,11383 +1322035200000,10926 +1322031600000,9936 +1322028000000,9226 +1322024400000,8969 +1322020800000,8995 +1322017200000,9181 +1322013600000,9524 +1322010000000,10065 +1322179200000,9223 +1322175600000,9520 +1322172000000,9640 +1322168400000,9716 +1322164800000,9777 +1322161200000,9883 +1322157600000,9571 +1322154000000,9195 +1322150400000,9299 +1322146800000,9513 +1322143200000,9673 +1322139600000,9752 +1322136000000,9659 +1322132400000,9436 +1322128800000,9096 +1322125200000,8827 +1322121600000,8774 +1322118000000,8547 +1322114400000,8395 +1322110800000,8382 +1322107200000,8542 +1322103600000,8802 +1322100000000,9161 +1322096400000,9766 +1322265600000,9556 +1322262000000,10120 +1322258400000,10409 +1322254800000,10673 +1322251200000,10843 +1322247600000,10991 +1322244000000,10523 +1322240400000,9658 +1322236800000,9548 +1322233200000,9486 +1322229600000,9568 +1322226000000,9650 +1322222400000,9636 +1322218800000,9587 +1322215200000,9427 +1322211600000,9246 +1322208000000,9181 +1322204400000,8704 +1322200800000,8284 +1322197200000,8108 +1322193600000,8110 +1322190000000,8242 +1322186400000,8450 +1322182800000,8804 +1322352000000,9763 +1322348400000,10258 +1322344800000,10505 +1322341200000,10764 +1322337600000,10838 +1322334000000,10903 +1322330400000,10590 +1322326800000,10058 +1322323200000,9962 +1322319600000,10006 +1322316000000,10085 +1322312400000,10030 +1322308800000,9920 +1322305200000,9601 +1322301600000,9253 +1322298000000,8792 +1322294400000,8501 +1322290800000,8106 +1322287200000,7873 +1322283600000,7873 +1322280000000,7919 +1322276400000,8162 +1322272800000,8441 +1322269200000,8970 +1322438400000,10146 +1322434800000,10789 +1322431200000,11219 +1322427600000,11477 +1322424000000,11574 +1322420400000,11606 +1322416800000,11161 +1322413200000,10454 +1322409600000,10262 +1322406000000,10172 +1322402400000,10132 +1322398800000,9991 +1322395200000,9822 +1322391600000,9530 +1322388000000,9128 +1322384400000,8720 +1322380800000,8525 +1322377200000,8182 +1322373600000,8064 +1322370000000,7987 +1322366400000,8068 +1322362800000,8262 +1322359200000,8628 +1322355600000,9110 +1322524800000,11322 +1322521200000,12248 +1322517600000,12824 +1322514000000,13117 +1322510400000,13326 +1322506800000,13486 +1322503200000,13027 +1322499600000,12329 +1322496000000,12265 +1322492400000,12284 +1322488800000,12206 +1322485200000,12232 +1322481600000,12166 +1322478000000,12145 +1322474400000,12029 +1322470800000,11894 +1322467200000,11258 +1322463600000,9963 +1322460000000,9075 +1322456400000,8812 +1322452800000,8741 +1322449200000,8902 +1322445600000,9090 +1322442000000,9555 +1322611200000,11519 +1322607600000,12419 +1322604000000,12984 +1322600400000,13327 +1322596800000,13531 +1322593200000,13678 +1322589600000,13153 +1322586000000,12454 +1322582400000,12430 +1322578800000,12477 +1322575200000,12458 +1322571600000,12555 +1322568000000,12568 +1322564400000,12505 +1322560800000,12387 +1322557200000,12253 +1322553600000,11618 +1322550000000,10335 +1322546400000,9572 +1322542800000,9347 +1322539200000,9353 +1322535600000,9541 +1322532000000,9879 +1322528400000,10470 +1322697600000,11408 +1322694000000,12346 +1322690400000,12912 +1322686800000,13200 +1322683200000,13379 +1322679600000,13499 +1322676000000,12831 +1322672400000,11987 +1322668800000,11901 +1322665200000,12028 +1322661600000,12118 +1322658000000,12286 +1322654400000,12356 +1322650800000,12412 +1322647200000,12448 +1322643600000,12374 +1322640000000,11919 +1322636400000,10679 +1322632800000,9908 +1322629200000,9636 +1322625600000,9658 +1322622000000,9803 +1322618400000,10080 +1322614800000,10646 +1322784000000,11298 +1322780400000,12219 +1322776800000,12740 +1322773200000,13053 +1322769600000,13269 +1322766000000,13361 +1322762400000,12906 +1322758800000,12204 +1322755200000,11982 +1322751600000,11984 +1322748000000,12038 +1322744400000,12130 +1322740800000,12286 +1322737200000,12291 +1322733600000,12288 +1322730000000,12176 +1322726400000,11728 +1322722800000,10479 +1322719200000,9742 +1322715600000,9466 +1322712000000,9476 +1322708400000,9688 +1322704800000,9986 +1322701200000,10543 +1322870400000,11475 +1322866800000,12242 +1322863200000,12627 +1322859600000,12910 +1322856000000,13121 +1322852400000,13239 +1322848800000,12647 +1322845200000,11830 +1322841600000,11811 +1322838000000,11909 +1322834400000,11925 +1322830800000,12100 +1322827200000,12172 +1322823600000,12216 +1322820000000,12174 +1322816400000,12095 +1322812800000,11618 +1322809200000,10371 +1322805600000,9650 +1322802000000,9421 +1322798400000,9434 +1322794800000,9631 +1322791200000,9923 +1322787600000,10471 +1322956800000,10488 +1322953200000,11018 +1322949600000,11358 +1322946000000,11542 +1322942400000,11689 +1322938800000,11710 +1322935200000,11142 +1322931600000,10241 +1322928000000,10304 +1322924400000,10483 +1322920800000,10786 +1322917200000,10882 +1322913600000,10884 +1322910000000,10781 +1322906400000,10549 +1322902800000,10255 +1322899200000,9808 +1322895600000,9327 +1322892000000,9014 +1322888400000,9041 +1322884800000,9195 +1322881200000,9494 +1322877600000,9917 +1322874000000,10615 +1323043200000,10400 +1323039600000,11114 +1323036000000,11516 +1323032400000,11765 +1323028800000,11844 +1323025200000,11862 +1323021600000,11359 +1323018000000,10588 +1323014400000,10322 +1323010800000,10237 +1323007200000,10165 +1323003600000,10022 +1323000000000,9863 +1322996400000,9583 +1322992800000,9218 +1322989200000,8892 +1322985600000,8703 +1322982000000,8449 +1322978400000,8375 +1322974800000,8409 +1322971200000,8542 +1322967600000,8715 +1322964000000,9175 +1322960400000,9800 +1323129600000,11383 +1323126000000,12382 +1323122400000,12955 +1323118800000,13253 +1323115200000,13485 +1323111600000,13694 +1323108000000,13304 +1323104400000,12547 +1323100800000,12411 +1323097200000,12409 +1323093600000,12352 +1323090000000,12357 +1323086400000,12356 +1323082800000,12268 +1323079200000,12165 +1323075600000,11991 +1323072000000,11419 +1323068400000,10057 +1323064800000,9268 +1323061200000,8947 +1323057600000,8926 +1323054000000,9014 +1323050400000,9266 +1323046800000,9716 +1323216000000,11701 +1323212400000,12709 +1323208800000,13301 +1323205200000,13584 +1323201600000,13774 +1323198000000,13910 +1323194400000,13219 +1323190800000,12356 +1323187200000,12339 +1323183600000,12450 +1323180000000,12495 +1323176400000,12571 +1323172800000,12560 +1323169200000,12490 +1323165600000,12414 +1323162000000,12231 +1323158400000,11633 +1323154800000,10343 +1323151200000,9590 +1323147600000,9296 +1323144000000,9320 +1323140400000,9495 +1323136800000,9834 +1323133200000,10443 +1323302400000,11873 +1323298800000,12818 +1323295200000,13392 +1323291600000,13700 +1323288000000,13890 +1323284400000,14021 +1323280800000,13331 +1323277200000,12398 +1323273600000,12249 +1323270000000,12334 +1323266400000,12350 +1323262800000,12519 +1323259200000,12522 +1323255600000,12468 +1323252000000,12497 +1323248400000,12370 +1323244800000,11858 +1323241200000,10570 +1323237600000,9791 +1323234000000,9530 +1323230400000,9520 +1323226800000,9758 +1323223200000,10122 +1323219600000,10740 +1323388800000,11738 +1323385200000,12705 +1323381600000,13230 +1323378000000,13567 +1323374400000,13781 +1323370800000,13910 +1323367200000,13399 +1323363600000,12493 +1323360000000,12307 +1323356400000,12390 +1323352800000,12481 +1323349200000,12585 +1323345600000,12688 +1323342000000,12691 +1323338400000,12718 +1323334800000,12629 +1323331200000,12064 +1323327600000,10798 +1323324000000,10039 +1323320400000,9784 +1323316800000,9807 +1323313200000,10000 +1323309600000,10329 +1323306000000,10947 +1323475200000,12315 +1323471600000,13098 +1323468000000,13478 +1323464400000,13742 +1323460800000,13947 +1323457200000,14066 +1323453600000,13367 +1323450000000,12405 +1323446400000,12375 +1323442800000,12446 +1323439200000,12539 +1323435600000,12610 +1323432000000,12695 +1323428400000,12689 +1323424800000,12736 +1323421200000,12563 +1323417600000,11993 +1323414000000,10730 +1323410400000,10064 +1323406800000,9802 +1323403200000,9762 +1323399600000,9938 +1323396000000,10237 +1323392400000,10825 +1323561600000,11705 +1323558000000,12363 +1323554400000,12677 +1323550800000,12945 +1323547200000,13050 +1323543600000,13128 +1323540000000,12308 +1323536400000,11318 +1323532800000,11224 +1323529200000,11331 +1323525600000,11553 +1323522000000,11789 +1323518400000,11888 +1323514800000,11889 +1323511200000,11748 +1323507600000,11550 +1323504000000,11274 +1323500400000,10703 +1323496800000,10350 +1323493200000,10272 +1323489600000,10311 +1323486000000,10510 +1323482400000,10836 +1323478800000,11502 +1323648000000,11079 +1323644400000,11823 +1323640800000,12186 +1323637200000,12389 +1323633600000,12396 +1323630000000,12238 +1323626400000,11315 +1323622800000,10314 +1323619200000,10183 +1323615600000,10234 +1323612000000,10368 +1323608400000,10428 +1323604800000,10492 +1323601200000,10457 +1323597600000,10342 +1323594000000,10186 +1323590400000,10135 +1323586800000,9850 +1323583200000,9689 +1323579600000,9700 +1323576000000,9730 +1323572400000,9967 +1323568800000,10416 +1323565200000,10985 +1323734400000,11463 +1323730800000,12461 +1323727200000,13019 +1323723600000,13309 +1323720000000,13557 +1323716400000,13766 +1323712800000,13078 +1323709200000,12175 +1323705600000,12122 +1323702000000,12141 +1323698400000,12198 +1323694800000,12358 +1323691200000,12436 +1323687600000,12553 +1323684000000,12641 +1323680400000,12594 +1323676800000,12007 +1323673200000,10698 +1323669600000,9905 +1323666000000,9585 +1323662400000,9536 +1323658800000,9609 +1323655200000,9882 +1323651600000,10335 +1323820800000,11474 +1323817200000,12386 +1323813600000,12939 +1323810000000,13231 +1323806400000,13455 +1323802800000,13637 +1323799200000,13234 +1323795600000,12351 +1323792000000,12219 +1323788400000,12323 +1323784800000,12307 +1323781200000,12405 +1323777600000,12576 +1323774000000,12382 +1323770400000,12345 +1323766800000,12265 +1323763200000,11545 +1323759600000,10297 +1323756000000,9534 +1323752400000,9290 +1323748800000,9334 +1323745200000,9531 +1323741600000,9902 +1323738000000,10490 +1323907200000,11214 +1323903600000,12206 +1323900000000,12789 +1323896400000,13112 +1323892800000,13361 +1323889200000,13628 +1323885600000,13394 +1323882000000,12688 +1323878400000,12521 +1323874800000,12514 +1323871200000,12477 +1323867600000,12584 +1323864000000,12739 +1323860400000,12741 +1323856800000,12480 +1323853200000,12193 +1323849600000,11439 +1323846000000,10186 +1323842400000,9439 +1323838800000,9228 +1323835200000,9284 +1323831600000,9448 +1323828000000,9852 +1323824400000,10517 +1323993600000,11935 +1323990000000,12863 +1323986400000,13340 +1323982800000,13698 +1323979200000,13872 +1323975600000,14016 +1323972000000,13511 +1323968400000,12790 +1323964800000,12607 +1323961200000,12564 +1323957600000,12408 +1323954000000,12368 +1323950400000,12308 +1323946800000,12185 +1323943200000,12094 +1323939600000,11843 +1323936000000,11073 +1323932400000,9808 +1323928800000,9066 +1323925200000,8864 +1323921600000,8896 +1323918000000,9126 +1323914400000,9511 +1323910800000,10211 +1324080000000,11979 +1324076400000,12759 +1324072800000,13124 +1324069200000,13399 +1324065600000,13666 +1324062000000,13744 +1324058400000,12946 +1324054800000,12060 +1324051200000,11987 +1324047600000,12119 +1324044000000,12191 +1324040400000,12352 +1324036800000,12576 +1324033200000,12637 +1324029600000,12735 +1324026000000,12676 +1324022400000,12069 +1324018800000,10831 +1324015200000,10044 +1324011600000,9809 +1324008000000,9797 +1324004400000,9944 +1324000800000,10314 +1323997200000,10981 +1324166400000,11395 +1324162800000,11999 +1324159200000,12334 +1324155600000,12527 +1324152000000,12666 +1324148400000,12734 +1324144800000,12203 +1324141200000,11462 +1324137600000,11277 +1324134000000,11395 +1324130400000,11550 +1324126800000,11730 +1324123200000,11700 +1324119600000,11566 +1324116000000,11264 +1324112400000,10939 +1324108800000,10607 +1324105200000,10113 +1324101600000,9775 +1324098000000,9682 +1324094400000,9770 +1324090800000,10010 +1324087200000,10415 +1324083600000,11120 +1324252800000,10939 +1324249200000,11626 +1324245600000,12058 +1324242000000,12234 +1324238400000,12308 +1324234800000,12159 +1324231200000,11250 +1324227600000,10223 +1324224000000,10142 +1324220400000,10175 +1324216800000,10285 +1324213200000,10351 +1324209600000,10425 +1324206000000,10477 +1324202400000,10272 +1324198800000,10037 +1324195200000,9810 +1324191600000,9472 +1324188000000,9277 +1324184400000,9280 +1324180800000,9400 +1324177200000,9583 +1324173600000,10059 +1324170000000,10664 +1324339200000,11514 +1324335600000,12402 +1324332000000,12904 +1324328400000,13170 +1324324800000,13371 +1324321200000,13522 +1324317600000,13039 +1324314000000,12113 +1324310400000,11856 +1324306800000,11869 +1324303200000,11829 +1324299600000,11896 +1324296000000,11970 +1324292400000,11960 +1324288800000,11903 +1324285200000,11838 +1324281600000,11245 +1324278000000,10038 +1324274400000,9330 +1324270800000,9072 +1324267200000,9070 +1324263600000,9225 +1324260000000,9535 +1324256400000,10102 +1324425600000,11634 +1324422000000,12559 +1324418400000,13078 +1324414800000,13380 +1324411200000,13616 +1324407600000,13796 +1324404000000,13293 +1324400400000,12590 +1324396800000,12426 +1324393200000,12476 +1324389600000,12454 +1324386000000,12486 +1324382400000,12456 +1324378800000,12362 +1324375200000,12330 +1324371600000,12162 +1324368000000,11431 +1324364400000,10244 +1324360800000,9538 +1324357200000,9276 +1324353600000,9305 +1324350000000,9525 +1324346400000,9883 +1324342800000,10576 +1324512000000,11630 +1324508400000,12466 +1324504800000,12939 +1324501200000,13205 +1324497600000,13412 +1324494000000,13655 +1324490400000,13355 +1324486800000,12612 +1324483200000,12467 +1324479600000,12476 +1324476000000,12366 +1324472400000,12319 +1324468800000,12374 +1324465200000,12344 +1324461600000,12165 +1324458000000,11891 +1324454400000,11174 +1324450800000,10028 +1324447200000,9439 +1324443600000,9248 +1324440000000,9292 +1324436400000,9518 +1324432800000,9935 +1324429200000,10682 +1324598400000,11779 +1324594800000,12580 +1324591200000,13032 +1324587600000,13326 +1324584000000,13530 +1324580400000,13766 +1324576800000,13401 +1324573200000,12763 +1324569600000,12593 +1324566000000,12544 +1324562400000,12405 +1324558800000,12476 +1324555200000,12451 +1324551600000,12327 +1324548000000,12167 +1324544400000,11903 +1324540800000,11347 +1324537200000,10219 +1324533600000,9550 +1324530000000,9303 +1324526400000,9325 +1324522800000,9584 +1324519200000,10013 +1324515600000,10668 +1324684800000,11489 +1324681200000,12165 +1324677600000,12512 +1324674000000,12736 +1324670400000,12967 +1324666800000,13158 +1324663200000,12618 +1324659600000,11668 +1324656000000,11395 +1324652400000,11301 +1324648800000,11374 +1324645200000,11509 +1324641600000,11686 +1324638000000,11707 +1324634400000,11686 +1324630800000,11534 +1324627200000,11162 +1324623600000,10265 +1324620000000,9718 +1324616400000,9504 +1324612800000,9560 +1324609200000,9758 +1324605600000,10177 +1324602000000,10853 +1324771200000,10584 +1324767600000,10934 +1324764000000,11126 +1324760400000,11235 +1324756800000,11437 +1324753200000,11519 +1324749600000,10743 +1324746000000,9919 +1324742400000,9904 +1324738800000,10034 +1324735200000,10211 +1324731600000,10292 +1324728000000,10329 +1324724400000,10327 +1324720800000,10187 +1324717200000,10029 +1324713600000,9864 +1324710000000,9498 +1324706400000,9261 +1324702800000,9237 +1324699200000,9355 +1324695600000,9505 +1324692000000,10021 +1324688400000,10698 +1324857600000,10187 +1324854000000,10563 +1324850400000,10627 +1324846800000,10630 +1324843200000,10577 +1324839600000,10526 +1324836000000,9751 +1324832400000,9087 +1324828800000,9031 +1324825200000,9056 +1324821600000,9137 +1324818000000,9209 +1324814400000,9213 +1324810800000,9219 +1324807200000,9133 +1324803600000,9076 +1324800000000,9005 +1324796400000,8760 +1324792800000,8634 +1324789200000,8662 +1324785600000,8800 +1324782000000,9073 +1324778400000,9487 +1324774800000,10042 +1324944000000,10655 +1324940400000,11280 +1324936800000,11667 +1324933200000,11820 +1324929600000,11908 +1324926000000,11963 +1324922400000,11219 +1324918800000,10172 +1324915200000,9898 +1324911600000,9887 +1324908000000,9983 +1324904400000,10062 +1324900800000,10040 +1324897200000,9954 +1324893600000,9786 +1324890000000,9707 +1324886400000,9625 +1324882800000,9212 +1324879200000,8875 +1324875600000,8723 +1324872000000,8728 +1324868400000,8892 +1324864800000,9171 +1324861200000,9620 +1325030400000,11386 +1325026800000,12122 +1325023200000,12629 +1325019600000,12874 +1325016000000,13093 +1325012400000,13311 +1325008800000,12849 +1325005200000,12133 +1325001600000,12062 +1324998000000,12062 +1324994400000,12040 +1324990800000,12054 +1324987200000,11973 +1324983600000,11809 +1324980000000,11551 +1324976400000,11243 +1324972800000,10649 +1324969200000,9737 +1324965600000,9077 +1324962000000,8832 +1324958400000,8868 +1324954800000,9030 +1324951200000,9391 +1324947600000,9950 +1325116800000,11590 +1325113200000,12432 +1325109600000,12936 +1325106000000,13216 +1325102400000,13447 +1325098800000,13628 +1325095200000,12971 +1325091600000,12249 +1325088000000,12222 +1325084400000,12268 +1325080800000,12344 +1325077200000,12385 +1325073600000,12392 +1325070000000,12287 +1325066400000,12095 +1325062800000,11861 +1325059200000,11364 +1325055600000,10448 +1325052000000,9797 +1325048400000,9557 +1325044800000,9552 +1325041200000,9736 +1325037600000,10017 +1325034000000,10615 +1325203200000,10980 +1325199600000,11661 +1325196000000,12140 +1325192400000,12406 +1325188800000,12593 +1325185200000,12754 +1325181600000,11904 +1325178000000,11140 +1325174400000,11216 +1325170800000,11343 +1325167200000,11432 +1325163600000,11564 +1325160000000,11659 +1325156400000,11634 +1325152800000,11541 +1325149200000,11415 +1325145600000,10975 +1325142000000,10111 +1325138400000,9531 +1325134800000,9353 +1325131200000,9448 +1325127600000,9701 +1325124000000,10083 +1325120400000,10743 +1325289600000,10728 +1325286000000,11318 +1325282400000,11717 +1325278800000,12023 +1325275200000,12248 +1325271600000,12440 +1325268000000,11996 +1325264400000,11384 +1325260800000,11317 +1325257200000,11429 +1325253600000,11511 +1325250000000,11598 +1325246400000,11586 +1325242800000,11396 +1325239200000,11100 +1325235600000,10804 +1325232000000,10329 +1325228400000,9583 +1325224800000,9070 +1325221200000,8874 +1325217600000,8945 +1325214000000,9182 +1325210400000,9535 +1325206800000,10126 +1325376000000,10335 +1325372400000,10855 +1325368800000,11149 +1325365200000,11542 +1325361600000,11812 +1325358000000,11907 +1325354400000,11225 +1325350800000,10416 +1325347200000,10240 +1325343600000,10293 +1325340000000,10359 +1325336400000,10326 +1325332800000,10139 +1325329200000,9937 +1325325600000,9676 +1325322000000,9545 +1325318400000,9363 +1325314800000,8993 +1325311200000,8735 +1325307600000,8743 +1325304000000,8817 +1325300400000,9059 +1325296800000,9428 +1325293200000,9970 --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@pinot.apache.org For additional commands, e-mail: commits-h...@pinot.apache.org