// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected static final char ANSI_CODE_COLOR_END = 'm';
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// public static final DecimalFormatSymbols DECIMALS_FORMAT_SYMBOLS =
//         DecimalFormatSymbols.getInstance(Locale.ROOT);
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected static final char UNICODE_CTRL = '\u001b';
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// public static String spaces(
//         int n) {
// 
//     return repeatString(" ", n);
// 
// }
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected enum AnsiCodeColors {
// 
//     /**
//      * Red font color.
//      */
//     RED_FONT(31),
// 
//     /**
//      * Green font color.
//      */
//     GREEN_FONT(32),
// 
//     /**
//      * Blue font color.
//      */
//     BLUE_FONT(34),
// 
//     /**
//      * Reset color.
//      */
//     RESET(0);
// 
//     /**
//      * Color number.
//      */
//     private int number;
// 
//     /**
//      * Color code.
//      */
//     private String code;
// 
//     /**
//      * Constructor.
//      * 
//      * @param number Color number.
//      */
//     AnsiCodeColors(
//             int number) {
// 
//         this.number = number;
//         this.code = Character.toString(UNICODE_CTRL)
//                 + Character.toString(ANSI_CODE_START)
//                 + Integer.toString(number)
//                 + Character.toString(ANSI_CODE_COLOR_END);
// 
//     }
// 
//     /**
//      * @return The color number.
//      */
//     protected int getNumber() {
//         return number;
//     }
// 
//     /**
//      * @return The color code.
//      */
//     protected String getCode() {
//         return code;
//     }
// 
//     /**
//      * Removes all ANSI code colors from a string.
//      * 
//      * @param string A string.
//      * @return The string without any ANSI code colors.
//      */
//     protected static String remove(
//             String string) {
// 
//         return ANSI_CODE_COLOR_PATTERN.matcher(string).replaceAll("");
// 
//     }
// 
// }


import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.ANSI_CODE_COLOR_END;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.DECIMALS_FORMAT_SYMBOLS;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.UNICODE_CTRL;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.spaces;
import org.apache.commons.io.IOUtils;
import org.fusesource.jansi.AnsiConsole;
import com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.AnsiCodeColors;
import java.io.PrintStream;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

     * @return A List of strings containing the substrings, or a List of strings containing the
     *         introduced string if wrapLength is lower than 1.
     */
    private static List<String> wrapStringRespectingAnsiCodeFormat(
            String string,
            int wrapLength,
            boolean concatenatePercent) {

        if (string == null) {
            throw new NullPointerException("String is null.");
        }

        List<String> wrappedString = new LinkedList<>();
        double relativeWrapLength = (double) wrapLength / AnsiCodeColors.remove(string).length();
        double accumulatedWrapLength = 0;

        if (wrapLength < 1) {

            wrappedString.add(string);

        } else {

            StringBuilder substring = new StringBuilder(wrapLength * 2);
            StringBuilder ansiCodeFormat = new StringBuilder();
            int substringChars = 0;

            for (int i = 0; i < string.length(); i++) {

                char ch = string.charAt(i);


// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected static final char ANSI_CODE_COLOR_END = 'm';
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// public static final DecimalFormatSymbols DECIMALS_FORMAT_SYMBOLS =
//         DecimalFormatSymbols.getInstance(Locale.ROOT);
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected static final char UNICODE_CTRL = '\u001b';
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// public static String spaces(
//         int n) {
// 
//     return repeatString(" ", n);
// 
// }
// 
// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/ToStringUtils.java
// protected enum AnsiCodeColors {
// 
//     /**
//      * Red font color.
//      */
//     RED_FONT(31),
// 
//     /**
//      * Green font color.
//      */
//     GREEN_FONT(32),
// 
//     /**
//      * Blue font color.
//      */
//     BLUE_FONT(34),
// 
//     /**
//      * Reset color.
//      */
//     RESET(0);
// 
//     /**
//      * Color number.
//      */
//     private int number;
// 
//     /**
//      * Color code.
//      */
//     private String code;
// 
//     /**
//      * Constructor.
//      * 
//      * @param number Color number.
//      */
//     AnsiCodeColors(
//             int number) {
// 
//         this.number = number;
//         this.code = Character.toString(UNICODE_CTRL)
//                 + Character.toString(ANSI_CODE_START)
//                 + Integer.toString(number)
//                 + Character.toString(ANSI_CODE_COLOR_END);
// 
//     }
// 
//     /**
//      * @return The color number.
//      */
//     protected int getNumber() {
//         return number;
//     }
// 
//     /**
//      * @return The color code.
//      */
//     protected String getCode() {
//         return code;
//     }
// 
//     /**
//      * Removes all ANSI code colors from a string.
//      * 
//      * @param string A string.
//      * @return The string without any ANSI code colors.
//      */
//     protected static String remove(
//             String string) {
// 
//         return ANSI_CODE_COLOR_PATTERN.matcher(string).replaceAll("");
// 
//     }
// 
// }


// Path: src/main/java/com/github/s3curitybug/similarityuniformfuzzyhash/VisualRepresentation.java
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.ANSI_CODE_COLOR_END;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.DECIMALS_FORMAT_SYMBOLS;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.UNICODE_CTRL;
import static com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.spaces;
import org.apache.commons.io.IOUtils;
import org.fusesource.jansi.AnsiConsole;
import com.github.s3curitybug.similarityuniformfuzzyhash.ToStringUtils.AnsiCodeColors;
import java.io.PrintStream;
import java.net.URL;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
import java.text.DecimalFormat;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
import java.util.Set;

     * @return A List of strings containing the substrings, or a List of strings containing the
     *         introduced string if wrapLength is lower than 1.
     */
    private static List<String> wrapStringRespectingAnsiCodeFormat(
            String string,
            int wrapLength,
            boolean concatenatePercent) {

        if (string == null) {
            throw new NullPointerException("String is null.");
        }

        List<String> wrappedString = new LinkedList<>();
        double relativeWrapLength = (double) wrapLength / AnsiCodeColors.remove(string).length();
        double accumulatedWrapLength = 0;

        if (wrapLength < 1) {

            wrappedString.add(string);

        } else {

            StringBuilder substring = new StringBuilder(wrapLength * 2);
            StringBuilder ansiCodeFormat = new StringBuilder();
            int substringChars = 0;

            for (int i = 0; i < string.length(); i++) {

                char ch = string.charAt(i);


                if (ch == UNICODE_CTRL) {
