The following invocation seems to stabilise very well, generating overwhelmingly many events for the linearizability checker to check, leading to an OOME:

`./gradlew ':server:test' --tests "org.elasticsearch.cluster.coordination.AtomicRegisterCoordinatorTests.testAppliesNoMasterBlockAllIfConfigured" -Dtests.seed=9BFB03AB5780EC10`

Seen on a recent commit to `main`, 1fef466f50d9936b6cfe8295e943f1a6c3f6f2f2.
test/framework/src/main/java/org/elasticsearch/cluster/coordination/LinearizabilityChecker.java
int beginIndex = eventToPosition.get(Tuple.tuple(EventType.INVOCATION, id));
        int endIndex = eventToPosition.get(Tuple.tuple(EventType.RESPONSE, id));
        input = input.substring(0, Math.min(beginIndex + 25, input.length()));
        return Strings.padStart(input, beginIndex + 25, ' ')
            + "   "
            + Strings.padStart("", endIndex - beginIndex, 'X')
            + "   "
            + output
            + "  ("
            + entry.event.id
            + ")";
    }
    /**
     * Creates the internal linked data structure used by the linearizability checker.
     * Generates contiguous internal ids for the events so that they can be efficiently recorded in bit sets.
     */
    private static Entry createLinkedEntries(List<Event> history) {
        if (history.size() % 2 != 0) {
            throw new IllegalArgumentException("mismatch between number of invocations and responses");
        }
        
        final Map<Integer, Entry> matches = new HashMap<>(); 
        final Entry[] entries = new Entry[history.size()];
        int nextInternalId = (history.size() / 2) - 1;
        for (int i = history.size() - 1; i >= 0; i--) {
            final Event elem = history.get(i);
            if (elem.type == EventType.RESPONSE) {
                final Entry entry = entries[i] = new Entry(elem, null, nextInternalId--);
                final Entry prev = matches.put(elem.id, entry);
                if (prev != null) {