private void ensureArrays(int level) {
    if (level > _handLength)
        throw new IllegalStateException("Illegal to request card " + level + " arrays from an " + _handLength + " FST");
    try {
        if (!haveArrays())
        readArrays();
    } catch (FileNotFoundException e) {
        System.out.println("FST array file " + _filename + " not found, rebuilding...");
    } catch (IOException e) {
        System.out.println("IO Exception + e + reading FST array file " + _filename + ", rebuilding...");
    } catch (ClassNotFoundException e) {
        // not really possible
    } catch (IllegalStateException e) {
        System.out.println("FST array file " + _filename + " built with different OPT_WIDE_RANK_SIZE, rebuilding...");
    }
    try {
        if (!haveArrays())
        rebuild(true);
    } catch (Exception e) {
        System.out.println("Unexpected exception " + e);
        e.printStackTrace();
    }
    if (!haveArrays())
        throw new IllegalStateException("Unable to find or rebuild FST arrays for " + _handLength + "-card hands");
    }