// Path: src/main/java/org/apache/lucene/analysis/kr/morph/MorphException.java
// public class MorphException extends RuntimeException {
// 
//     private static final long serialVersionUID = 7605164221652820591L;
// 
//     public MorphException() {
//         super();
//     }
// 
//     public MorphException(String message) {
//         super(message);
//     }
// 
//     public MorphException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public MorphException(Throwable cause) {
//         super(cause);
//     }
// }
// 
// Path: src/main/java/org/apache/lucene/analysis/kr/morph/WordEntry.java
// public class WordEntry implements Serializable {
// 
//     private static final long serialVersionUID = -5847413036811319308L;
// 
//     public static final int IDX_NOUN = 0;
//     public static final int IDX_VERB = 1;
//     public static final int IDX_BUSA = 2;
//     public static final int IDX_DOV = 3;
//     public static final int IDX_BEV = 4;
//     public static final int IDX_NE = 5;
//     public static final int IDX_ADJ = 6; // 형용사
//     public static final int IDX_NPR = 7;  // 명사의 분류 (M:Measure)
//     public static final int IDX_CNOUNX = 8;
//     public static final int IDX_REGURA = 9;
// 
//     /** 단어 */
//     private String word;
// 
//     /** 단어특성 */
//     private char[] features;
// 
//     private List<CompoundEntry> compounds = new ArrayList<CompoundEntry>();
// 
//     public WordEntry() { }
// 
//     public WordEntry(String word) {
//         this.word = word;
//     }
// 
//     public WordEntry(String word, char[] cs) {
//         this.word = word;
//         this.features = Arrays.copyOf(cs, cs.length);
//     }
// 
//     public WordEntry(String word, List<CompoundEntry> c) {
//         this.word = word;
//         this.compounds = c;
//     }
// 
//     public void setWord(String w) {
//         this.word = w;
//     }
// 
//     public String getWord() {
//         return this.word;
//     }
// 
//     public void setFeatures(char[] cs) {
//         this.features = cs;
//     }
// 
//     public char getFeature(int index) {
//         if (features == null || features.length < index) return '0';
//         return features[index];
//     }
// 
//     public char[] getFeatures() {
//         return this.features;
//     }
// 
//     public void setCompounds(List<CompoundEntry> c) {
//         this.compounds = c;
//     }
// 
//     public List<CompoundEntry> getCompounds() {
//         return this.compounds;
//     }
// }


import org.apache.lucene.analysis.kr.morph.MorphException;
import org.apache.lucene.analysis.kr.morph.WordEntry;
        return null;

    }

    /**
     * ㅂ 불규칙 원형을 복원한다. (돕다, 곱다)
     *
     * @throws org.apache.lucene.analysis.kr.morph.MorphException
     *
     */
    private static String[] restoreBIrregular(String start, String end) throws MorphException {

        if (start == null || "".equals(start) || end == null) return null;

        if (start.length() < 2) return null;

        if (!(start.endsWith("오") || start.endsWith("우"))) return null;

        char convEnd = MorphUtil.makeChar(end.charAt(0), 0);
        if ("ㅁ".equals(end) || "ㄴ".equals(end) || "ㄹ".equals(end) ||
                convEnd == '아' || convEnd == '어') { // 도우(돕), 고오(곱), 스러우(스럽) 등으로 변형되므로 반드시 2자 이상임

            char ch = start.charAt(start.length() - 2);
            ch = MorphUtil.makeChar(ch, 17);

            if (start.length() > 2)
                start = Utilities.arrayToString(new String[] { start.substring(0, start.length() - 2), Character.toString(ch) });
            else
                start = Character.toString(ch);

// Path: src/main/java/org/apache/lucene/analysis/kr/morph/MorphException.java
// public class MorphException extends RuntimeException {
// 
//     private static final long serialVersionUID = 7605164221652820591L;
// 
//     public MorphException() {
//         super();
//     }
// 
//     public MorphException(String message) {
//         super(message);
//     }
// 
//     public MorphException(String message, Throwable cause) {
//         super(message, cause);
//     }
// 
//     public MorphException(Throwable cause) {
//         super(cause);
//     }
// }
// 
// Path: src/main/java/org/apache/lucene/analysis/kr/morph/WordEntry.java
// public class WordEntry implements Serializable {
// 
//     private static final long serialVersionUID = -5847413036811319308L;
// 
//     public static final int IDX_NOUN = 0;
//     public static final int IDX_VERB = 1;
//     public static final int IDX_BUSA = 2;
//     public static final int IDX_DOV = 3;
//     public static final int IDX_BEV = 4;
//     public static final int IDX_NE = 5;
//     public static final int IDX_ADJ = 6; // 형용사
//     public static final int IDX_NPR = 7;  // 명사의 분류 (M:Measure)
//     public static final int IDX_CNOUNX = 8;
//     public static final int IDX_REGURA = 9;
// 
//     /** 단어 */
//     private String word;
// 
//     /** 단어특성 */
//     private char[] features;
// 
//     private List<CompoundEntry> compounds = new ArrayList<CompoundEntry>();
// 
//     public WordEntry() { }
// 
//     public WordEntry(String word) {
//         this.word = word;
//     }
// 
//     public WordEntry(String word, char[] cs) {
//         this.word = word;
//         this.features = Arrays.copyOf(cs, cs.length);
//     }
// 
//     public WordEntry(String word, List<CompoundEntry> c) {
//         this.word = word;
//         this.compounds = c;
//     }
// 
//     public void setWord(String w) {
//         this.word = w;
//     }
// 
//     public String getWord() {
//         return this.word;
//     }
// 
//     public void setFeatures(char[] cs) {
//         this.features = cs;
//     }
// 
//     public char getFeature(int index) {
//         if (features == null || features.length < index) return '0';
//         return features[index];
//     }
// 
//     public char[] getFeatures() {
//         return this.features;
//     }
// 
//     public void setCompounds(List<CompoundEntry> c) {
//         this.compounds = c;
//     }
// 
//     public List<CompoundEntry> getCompounds() {
//         return this.compounds;
//     }
// }


// Path: src/main/java/org/apache/lucene/analysis/kr/utils/IrregularUtil.java
import org.apache.lucene.analysis.kr.morph.MorphException;
import org.apache.lucene.analysis.kr.morph.WordEntry;

        return null;

    }

    /**
     * ㅂ 불규칙 원형을 복원한다. (돕다, 곱다)
     *
     * @throws org.apache.lucene.analysis.kr.morph.MorphException
     *
     */
    private static String[] restoreBIrregular(String start, String end) throws MorphException {

        if (start == null || "".equals(start) || end == null) return null;

        if (start.length() < 2) return null;

        if (!(start.endsWith("오") || start.endsWith("우"))) return null;

        char convEnd = MorphUtil.makeChar(end.charAt(0), 0);
        if ("ㅁ".equals(end) || "ㄴ".equals(end) || "ㄹ".equals(end) ||
                convEnd == '아' || convEnd == '어') { // 도우(돕), 고오(곱), 스러우(스럽) 등으로 변형되므로 반드시 2자 이상임

            char ch = start.charAt(start.length() - 2);
            ch = MorphUtil.makeChar(ch, 17);

            if (start.length() > 2)
                start = Utilities.arrayToString(new String[] { start.substring(0, start.length() - 2), Character.toString(ch) });
            else
                start = Character.toString(ch);

            WordEntry entry = DictionaryUtil.getVerb(start);