// Path: utils-basickit/src/main/java/com/cognitionis/utils_basickit/StringUtils.java
// public class StringUtils {
// 
//     /**
//      * Returns if a char is ASCII (fastest than the generic function: existsInEncoding(char c, String encoding))
//      * @param c
//      * @return
//      */
//     public static boolean isASCII(char c) {
//         return (((int) c >> 7) == 0);
//     }
// 
//     /**
//      * Returns if a char is ISO-8859-1 (fastest than the generic function: existsInEncoding(char c, String encoding))
//      * @param c
//      * @return
//      */
//     public static boolean isISO_8859_1(char c) {
//         return (((int) c) < 256);
//     }
// 
//     /**
//      * Returns if a char is of an encoding
//      * @param c
//      * @return
//      */
//     public static boolean existsInEncoding(char c, String encoding) {
//         try {
//             String s = "" + c;
//             byte bytes[] = s.getBytes(encoding);
//             String s2 = new String(bytes, encoding);
//             return (s2.equals(s));
//         } catch (Exception e) {
//             System.err.println("Errors found (StringUtils):\n\t" + e.toString());
//             if (System.getProperty("DEBUG") != null && System.getProperty("DEBUG").equalsIgnoreCase("true")) {
//                 e.printStackTrace(System.err);
//                 System.exit(1);
//             }
//             return false;
//         }
//     }
// 
//     /**
//      * Returns if a string is of an encoding
//      * @param s
//      * @return
//      */
//     public static boolean existsInEncoding(String s, String encoding) {
//         try {
//             byte bytes[] = s.getBytes(encoding);
//             String s2 = new String(bytes, encoding);
//             return (s2.equals(s));
//         } catch (Exception e) {
//             System.err.println("Errors found (StringUtils):\n\t" + e.toString());
//             if (System.getProperty("DEBUG") != null && System.getProperty("DEBUG").equalsIgnoreCase("true")) {
//                 e.printStackTrace(System.err);
//                 System.exit(1);
//             }
//             return false;
//         }
//     }
// 
//     public static int countOccurrencesOf(String source, char pattern) {
//         int count = 0;
//         if (source != null) {
//             int found = -1;
//             int start = 0;
// 
// 
//             while ((found = source.indexOf(pattern, start)) != -1) {
//                 start = found + 1;
//                 count++;
//             }
//             return count;
//         } else {
//             return 0;
//         }
//     }
// 
//     public static int countOccurrencesOf(String source, String pattern) {
//         int count = 0;
//         if (source != null) {
//             final int len = pattern.length();
//             int found = -1;
//             int start = 0;
// 
// 
//             while ((found = source.indexOf(pattern, start)) != -1) {
//                 start = found + len;
//                 count++;
//             }
//             return count;
//         } else {
//             return 0;
//         }
//     }
// 
//     public static String twoDecPosS(double d) {
//         Double a;
//         String twoDec;
//         int negative_inc = 0;
//         int decimal_pos = 0;
// 
//         a = (((int) Math.round((d) * 100.0)) / 100.0);
//         twoDec = a.toString();
// 
//         decimal_pos = twoDec.lastIndexOf('.');
//         if (decimal_pos == -1) {
//             twoDec += ".";
//             decimal_pos = twoDec.length();
//         }
//         twoDec += "00";
// 
//         twoDec = twoDec.substring(0, decimal_pos + 3);
// 
//         return twoDec;
//     }
// 
// public static <T> T[] concatArray(T[] first, T[] second) {
//   T[] result = Arrays.copyOf(first, first.length + second.length);
//   System.arraycopy(second, 0, result, first.length, second.length);
//   return result;
// }
// 
// 
// }


import com.cognitionis.utils_basickit.StringUtils;
import java.io.*;
import java.nio.file.*;
import static java.nio.file.StandardCopyOption.*;
import java.util.*;
                while ((pipesline = pipesreader.readLine()) != null) {
                    linen++;
                    //System.err.println(pipesline);
                    if (pipesline.trim().length() > 1) {


                        pipesarr = pipesline.split(this.field_separator_re);
                        String token = pipesarr[tokcolumn];
                        int token_offset = -1;
                        String paired_token = "";

                        int cn = 0;
                        while (true) {
                            if (readmodel) {
                                cmodel_prev = cmodel;
                                if ((cmodel = (char) modelreader.read()) == -1) {
                                    if (cn == token.length()) {
                                        break; // save last token end of file
                                    } else {
                                        throw new Exception("Premature end of model file");
                                    }
                                }
                                offset++;
                            } else {
                                readmodel = true;
                            }

                            char cpipes = '\0';
                            if (cn >= token.length()) {
                                if (usingNotUTF8tool) {
// Path: utils-basickit/src/main/java/com/cognitionis/utils_basickit/StringUtils.java
// public class StringUtils {
// 
//     /**
//      * Returns if a char is ASCII (fastest than the generic function: existsInEncoding(char c, String encoding))
//      * @param c
//      * @return
//      */
//     public static boolean isASCII(char c) {
//         return (((int) c >> 7) == 0);
//     }
// 
//     /**
//      * Returns if a char is ISO-8859-1 (fastest than the generic function: existsInEncoding(char c, String encoding))
//      * @param c
//      * @return
//      */
//     public static boolean isISO_8859_1(char c) {
//         return (((int) c) < 256);
//     }
// 
//     /**
//      * Returns if a char is of an encoding
//      * @param c
//      * @return
//      */
//     public static boolean existsInEncoding(char c, String encoding) {
//         try {
//             String s = "" + c;
//             byte bytes[] = s.getBytes(encoding);
//             String s2 = new String(bytes, encoding);
//             return (s2.equals(s));
//         } catch (Exception e) {
//             System.err.println("Errors found (StringUtils):\n\t" + e.toString());
//             if (System.getProperty("DEBUG") != null && System.getProperty("DEBUG").equalsIgnoreCase("true")) {
//                 e.printStackTrace(System.err);
//                 System.exit(1);
//             }
//             return false;
//         }
//     }
// 
//     /**
//      * Returns if a string is of an encoding
//      * @param s
//      * @return
//      */
//     public static boolean existsInEncoding(String s, String encoding) {
//         try {
//             byte bytes[] = s.getBytes(encoding);
//             String s2 = new String(bytes, encoding);
//             return (s2.equals(s));
//         } catch (Exception e) {
//             System.err.println("Errors found (StringUtils):\n\t" + e.toString());
//             if (System.getProperty("DEBUG") != null && System.getProperty("DEBUG").equalsIgnoreCase("true")) {
//                 e.printStackTrace(System.err);
//                 System.exit(1);
//             }
//             return false;
//         }
//     }
// 
//     public static int countOccurrencesOf(String source, char pattern) {
//         int count = 0;
//         if (source != null) {
//             int found = -1;
//             int start = 0;
// 
// 
//             while ((found = source.indexOf(pattern, start)) != -1) {
//                 start = found + 1;
//                 count++;
//             }
//             return count;
//         } else {
//             return 0;
//         }
//     }
// 
//     public static int countOccurrencesOf(String source, String pattern) {
//         int count = 0;
//         if (source != null) {
//             final int len = pattern.length();
//             int found = -1;
//             int start = 0;
// 
// 
//             while ((found = source.indexOf(pattern, start)) != -1) {
//                 start = found + len;
//                 count++;
//             }
//             return count;
//         } else {
//             return 0;
//         }
//     }
// 
//     public static String twoDecPosS(double d) {
//         Double a;
//         String twoDec;
//         int negative_inc = 0;
//         int decimal_pos = 0;
// 
//         a = (((int) Math.round((d) * 100.0)) / 100.0);
//         twoDec = a.toString();
// 
//         decimal_pos = twoDec.lastIndexOf('.');
//         if (decimal_pos == -1) {
//             twoDec += ".";
//             decimal_pos = twoDec.length();
//         }
//         twoDec += "00";
// 
//         twoDec = twoDec.substring(0, decimal_pos + 3);
// 
//         return twoDec;
//     }
// 
// public static <T> T[] concatArray(T[] first, T[] second) {
//   T[] result = Arrays.copyOf(first, first.length + second.length);
//   System.arraycopy(second, 0, result, first.length, second.length);
//   return result;
// }
// 
// 
// }


// Path: nlp-files/src/main/java/com/cognitionis/nlp_files/TokenizedFile.java
import com.cognitionis.utils_basickit.StringUtils;
import java.io.*;
import java.nio.file.*;
import static java.nio.file.StandardCopyOption.*;
import java.util.*;

                while ((pipesline = pipesreader.readLine()) != null) {
                    linen++;
                    //System.err.println(pipesline);
                    if (pipesline.trim().length() > 1) {


                        pipesarr = pipesline.split(this.field_separator_re);
                        String token = pipesarr[tokcolumn];
                        int token_offset = -1;
                        String paired_token = "";

                        int cn = 0;
                        while (true) {
                            if (readmodel) {
                                cmodel_prev = cmodel;
                                if ((cmodel = (char) modelreader.read()) == -1) {
                                    if (cn == token.length()) {
                                        break; // save last token end of file
                                    } else {
                                        throw new Exception("Premature end of model file");
                                    }
                                }
                                offset++;
                            } else {
                                readmodel = true;
                            }

                            char cpipes = '\0';
                            if (cn >= token.length()) {
                                if (usingNotUTF8tool) {
                                    if (StringUtils.isISO_8859_1(cmodel)) {