A query like 

```
sequence by user.name with maxspan=90m
![ authentication where ... ]
[ authentication where ...]
![ authentication where ... ]
[ authentication where ... ]
![ authentication where ... ]
```

can result in a NullPointerException

```
java.lang.NullPointerException: Cannot invoke "org.elasticsearch.xpack.eql.execution.sequence.Match.ordinal()" because the return value of "org.elasticsearch.xpack.eql.execution.sequence.Sequence.matchAt(int)" is null
        at org.elasticsearch.xpack.eql.execution.sequence.TumblingWindow.prepareQueryForMissingEvents(TumblingWindow.java:313)
        at org.elasticsearch.xpack.eql.execution.sequence.TumblingWindow.checkMissingEvents(TumblingWindow.java:219)
        at org.elasticsearch.xpack.eql.execution.sequence.TumblingWindow.payload(TumblingWindow.java:717)
        at org.elasticsearch.xpack.eql.execution.sequence.TumblingWindow.completeBaseCriterion(TumblingWindow.java:499)
        at org.elasticsearch.xpack.eql.execution.sequence.TumblingWindow.baseCriterion(TumblingWindow.java:405)
        at org.elasticsearch.xpack.eql.execution.sequence.TumblingWindow.lambda$advance$6(TumblingWindow.java:356)
```
x-pack/plugin/eql/src/main/java/org/elasticsearch/xpack/eql/execution/sequence/SequenceMatcher.java
}
        }
        return -1;
    }
    public boolean isMissingEvent(int stage) {
        if (stage < 0 || stage >= missingEventStages.length) {
            return false;
        }
        return missingEventStages[stage];
    }
    private boolean isFirstPositiveStage(int stage) {
        return stage == firstPositiveStage;
    }
    /**
     * Checks whether the rest of the stages have in-flight data.
     * This method is called when a query returns no data meaning
     * sequences on previous stages cannot match this window (since there's no new data).
     * However sequences on higher stages can, hence this check to know whether
     * it's possible to advance the window early.
     */
    boolean hasFollowingCandidates(int stage) {
        return hasCandidates(stage, completionStage);
    }
    /**
     * Checks whether the previous stages still have in-flight data.
     * Used to see whether, after rebasing a window it makes sense to continue finding matches.
     * If there are no in-progress windows, any future results are unnecessary.
     */
    boolean hasCandidates() {
        return hasCandidates(0, completionStage);