static TimestampRange joinTimestampRanges(TimestampRange a, TimestampRange b) {
  if (a == null) ret b;
  if (b == null) ret a;
  ret TimestampRange(min(a.start, b.start), max(a.end, b.end));
}

static TimestampRange joinTimestampRanges(Iterable<TimestampRange> l) {
  ret fold joinTimestampRanges(l);
}