public void registerMany(Kim kim) {
        int length = kim.length;
        int limit = this.capacity - this.length;
        if (limit > JSONzip.substringLimit) {
            limit = JSONzip.substringLimit;
        }
        int until = length - (JSONzip.minSubstringLength - 1);
        for (int from = 0; from < until; from += 1) {
            int len = length - from;
            if (len > JSONzip.maxSubstringLength) {
                len = JSONzip.maxSubstringLength;
            }
            len += from;
            Node node = this.root;
            for (int at = from; at < len; at += 1) {
                Node next = node.vet(kim.get(at));
                if (next.integer == none
                        && at - from >= (JSONzip.minSubstringLength - 1)) {
                    next.integer = this.length;
                    this.uses[this.length] = 1;
                    this.kims[this.length] = kim;
                    this.froms[this.length] = from;
                    this.thrus[this.length] = at + 1;
                    if (JSONzip.probe) {
                        try {
                            JSONzip.log("<<" + this.length + " "
                                    + new Kim(kim, from, at + 1) + ">> ");
                        } catch (Throwable ignore) {
                        }
                    }
                    this.length += 1;
                    limit -= 1;
                    if (limit <= 0) {
                        return;
                    }
                }
                node = next;
            }
        }
    }