code: List<ZonalOffset> getValidOffsets(
          GregorianDate localDate,
          WallTime localTime,
          RuleBasedTransitionModel ruleModel // from CompositeTransitionModel
      ) {
  
          long localSecs = TransitionModel.toLocalSecs(localDate, localTime);
          int index = searchLocal(localSecs, this.transitions);
  
          if (index == this.transitions.length) {
              if (ruleModel == null) {
                  ZonalTransition last =
                      this.transitions[this.transitions.length - 1];
                  return TransitionModel.toList(last.getTotalOffset());
              } else {
                  return ruleModel.getValidOffsets(localDate, localSecs);
              }
          }
  
          ZonalTransition test = this.transitions[index];
  
          if (test.isGap()) {
              assert (test.getPosixTime() + test.getTotalOffset() > localSecs);
              if (test.getPosixTime() + test.getPreviousOffset() <= localSecs) {
                  return Collections.emptyList();
              }
          } else if (test.isOverlap()) {
              assert (test.getPosixTime() + test.getPreviousOffset() > localSecs);
              if (test.getPosixTime() + test.getTotalOffset() <= localSecs) {
                  return TransitionModel.toList(
                      test.getTotalOffset(),
                      test.getPreviousOffset());
              }
          }
  
          return TransitionModel.toList(test.getPreviousOffset());
  
      }
docs: <p>Wird von {@link #getValidOffsets(GregorianDate, WallTime)}
  aufgerufen. </p>
  
  @param   localDate   local date in timezone
  @param   localTime   local wall time in timezone
  @param   ruleModel   optional last rules
  @return  unmodifiable list of shifts which fits the given local time