// CHECKSTYLE:OFF
/*

Copyright (c) 2001, Dr Martin Porter
Copyright (c) 2002, Richard Boulton
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

    * Redistributions of source code must retain the above copyright notice,
    * this list of conditions and the following disclaimer.
    * Redistributions in binary form must reproduce the above copyright
    * notice, this list of conditions and the following disclaimer in the
    * documentation and/or other materials provided with the distribution.
    * Neither the name of the copyright holders nor the names of its contributors
    * may be used to endorse or promote products derived from this software
    * without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

 */

// This file was generated automatically by the Snowball to Java compiler

package opennlp.tools.stemmer.snowball;

 /**
  * This class was automatically generated by a Snowball to Java compiler
  * It implements the stemming algorithm defined by a snowball script.
  */
class finnishStemmer extends opennlp.tools.stemmer.snowball.AbstractSnowballStemmer {

        private final static finnishStemmer methodObject = new finnishStemmer ();

                private final static Among a_0[] = {
                    new Among ( "pa", -1, 1, "", methodObject ),
                    new Among ( "sti", -1, 2, "", methodObject ),
                    new Among ( "kaan", -1, 1, "", methodObject ),
                    new Among ( "han", -1, 1, "", methodObject ),
                    new Among ( "kin", -1, 1, "", methodObject ),
                    new Among ( "h\u00E4n", -1, 1, "", methodObject ),
                    new Among ( "k\u00E4\u00E4n", -1, 1, "", methodObject ),
                    new Among ( "ko", -1, 1, "", methodObject ),
                    new Among ( "p\u00E4", -1, 1, "", methodObject ),
                    new Among ( "k\u00F6", -1, 1, "", methodObject )
                };

                private final static Among a_1[] = {
                    new Among ( "lla", -1, -1, "", methodObject ),
                    new Among ( "na", -1, -1, "", methodObject ),
                    new Among ( "ssa", -1, -1, "", methodObject ),
                    new Among ( "ta", -1, -1, "", methodObject ),
                    new Among ( "lta", 3, -1, "", methodObject ),
                    new Among ( "sta", 3, -1, "", methodObject )
                };

                private final static Among a_2[] = {
                    new Among ( "ll\u00E4", -1, -1, "", methodObject ),
                    new Among ( "n\u00E4", -1, -1, "", methodObject ),
                    new Among ( "ss\u00E4", -1, -1, "", methodObject ),
                    new Among ( "t\u00E4", -1, -1, "", methodObject ),
                    new Among ( "lt\u00E4", 3, -1, "", methodObject ),
                    new Among ( "st\u00E4", 3, -1, "", methodObject )
                };

                private final static Among a_3[] = {
                    new Among ( "lle", -1, -1, "", methodObject ),
                    new Among ( "ine", -1, -1, "", methodObject )
                };

                private final static Among a_4[] = {
                    new Among ( "nsa", -1, 3, "", methodObject ),
                    new Among ( "mme", -1, 3, "", methodObject ),
                    new Among ( "nne", -1, 3, "", methodObject ),
                    new Among ( "ni", -1, 2, "", methodObject ),
                    new Among ( "si", -1, 1, "", methodObject ),
                    new Among ( "an", -1, 4, "", methodObject ),
                    new Among ( "en", -1, 6, "", methodObject ),
                    new Among ( "\u00E4n", -1, 5, "", methodObject ),
                    new Among ( "ns\u00E4", -1, 3, "", methodObject )
                };

                private final static Among a_5[] = {
                    new Among ( "aa", -1, -1, "", methodObject ),
                    new Among ( "ee", -1, -1, "", methodObject ),
                    new Among ( "ii", -1, -1, "", methodObject ),
                    new Among ( "oo", -1, -1, "", methodObject ),
                    new Among ( "uu", -1, -1, "", methodObject ),
                    new Among ( "\u00E4\u00E4", -1, -1, "", methodObject ),
                    new Among ( "\u00F6\u00F6", -1, -1, "", methodObject )
                };

                private final static Among a_6[] = {
                    new Among ( "a", -1, 8, "", methodObject ),
                    new Among ( "lla", 0, -1, "", methodObject ),
                    new Among ( "na", 0, -1, "", methodObject ),
                    new Among ( "ssa", 0, -1, "", methodObject ),
                    new Among ( "ta", 0, -1, "", methodObject ),
                    new Among ( "lta", 4, -1, "", methodObject ),
                    new Among ( "sta", 4, -1, "", methodObject ),
                    new Among ( "tta", 4, 9, "", methodObject ),
                    new Among ( "lle", -1, -1, "", methodObject ),
                    new Among ( "ine", -1, -1, "", methodObject ),
                    new Among ( "ksi", -1, -1, "", methodObject ),
                    new Among ( "n", -1, 7, "", methodObject ),
                    new Among ( "han", 11, 1, "", methodObject ),
                    new Among ( "den", 11, -1, "r_VI", methodObject ),
                    new Among ( "seen", 11, -1, "r_LONG", methodObject ),
                    new Among ( "hen", 11, 2, "", methodObject ),
                    new Among ( "tten", 11, -1, "r_VI", methodObject ),
                    new Among ( "hin", 11, 3, "", methodObject ),
                    new Among ( "siin", 11, -1, "r_VI", methodObject ),
                    new Among ( "hon", 11, 4, "", methodObject ),
                    new Among ( "h\u00E4n", 11, 5, "", methodObject ),
                    new Among ( "h\u00F6n", 11, 6, "", methodObject ),
                    new Among ( "\u00E4", -1, 8, "", methodObject ),
                    new Among ( "ll\u00E4", 22, -1, "", methodObject ),
                    new Among ( "n\u00E4", 22, -1, "", methodObject ),
                    new Among ( "ss\u00E4", 22, -1, "", methodObject ),
                    new Among ( "t\u00E4", 22, -1, "", methodObject ),
                    new Among ( "lt\u00E4", 26, -1, "", methodObject ),
                    new Among ( "st\u00E4", 26, -1, "", methodObject ),
                    new Among ( "tt\u00E4", 26, 9, "", methodObject )
                };

                private final static Among a_7[] = {
                    new Among ( "eja", -1, -1, "", methodObject ),
                    new Among ( "mma", -1, 1, "", methodObject ),
                    new Among ( "imma", 1, -1, "", methodObject ),
                    new Among ( "mpa", -1, 1, "", methodObject ),
                    new Among ( "impa", 3, -1, "", methodObject ),
                    new Among ( "mmi", -1, 1, "", methodObject ),
                    new Among ( "immi", 5, -1, "", methodObject ),
                    new Among ( "mpi", -1, 1, "", methodObject ),
                    new Among ( "impi", 7, -1, "", methodObject ),
                    new Among ( "ej\u00E4", -1, -1, "", methodObject ),
                    new Among ( "mm\u00E4", -1, 1, "", methodObject ),
                    new Among ( "imm\u00E4", 10, -1, "", methodObject ),
                    new Among ( "mp\u00E4", -1, 1, "", methodObject ),
                    new Among ( "imp\u00E4", 12, -1, "", methodObject )
                };

                private final static Among a_8[] = {
                    new Among ( "i", -1, -1, "", methodObject ),
                    new Among ( "j", -1, -1, "", methodObject )
                };

                private final static Among a_9[] = {
                    new Among ( "mma", -1, 1, "", methodObject ),
                    new Among ( "imma", 0, -1, "", methodObject )
                };

                private static final char g_AEI[] = {17, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8 };

                private static final char g_V1[] = {17, 65, 16, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };

                private static final char g_V2[] = {17, 65, 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };

                private static final char g_particle_end[] = {17, 97, 24, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 8, 0, 32 };

        private boolean B_ending_removed;
        private java.lang.StringBuilder S_x = new java.lang.StringBuilder();
        private int I_p2;
        private int I_p1;

                private void copy_from(finnishStemmer other) {
                    B_ending_removed = other.B_ending_removed;
                    S_x = other.S_x;
                    I_p2 = other.I_p2;
                    I_p1 = other.I_p1;
                    super.copy_from(other);
                }

                private boolean r_mark_regions() {
            int v_1;
            int v_3;
                    // (, line 41
                    I_p1 = limit;
                    I_p2 = limit;
                    // goto, line 46
                    golab0: while(true)
                    {
                        v_1 = cursor;
                        lab1: do {
                            if (!(in_grouping(g_V1, 97, 246)))
                            {
                                break lab1;
                            }
                            cursor = v_1;
                            break golab0;
                        } while (false);
                        cursor = v_1;
                        if (cursor >= limit)
                        {
                            return false;
                        }
                        cursor++;
                    }
                    // gopast, line 46
                    golab2: while(true)
                    {
                        lab3: do {
                            if (!(out_grouping(g_V1, 97, 246)))
                            {
                                break lab3;
                            }
                            break golab2;
                        } while (false);
                        if (cursor >= limit)
                        {
                            return false;
                        }
                        cursor++;
                    }
                    // setmark p1, line 46
                    I_p1 = cursor;
                    // goto, line 47
                    golab4: while(true)
                    {
                        v_3 = cursor;
                        lab5: do {
                            if (!(in_grouping(g_V1, 97, 246)))
                            {
                                break lab5;
                            }
                            cursor = v_3;
                            break golab4;
                        } while (false);
                        cursor = v_3;
                        if (cursor >= limit)
                        {
                            return false;
                        }
                        cursor++;
                    }
                    // gopast, line 47
                    golab6: while(true)
                    {
                        lab7: do {
                            if (!(out_grouping(g_V1, 97, 246)))
                            {
                                break lab7;
                            }
                            break golab6;
                        } while (false);
                        if (cursor >= limit)
                        {
                            return false;
                        }
                        cursor++;
                    }
                    // setmark p2, line 47
                    I_p2 = cursor;
                    return true;
                }

                private boolean r_R2() {
                    if (!(I_p2 <= cursor))
                    {
                        return false;
                    }
                    return true;
                }

                private boolean r_particle_etc() {
            int among_var;
            int v_1;
            int v_2;
                    // (, line 54
                    // setlimit, line 55
                    v_1 = limit - cursor;
                    // tomark, line 55
                    if (cursor < I_p1)
                    {
                        return false;
                    }
                    cursor = I_p1;
                    v_2 = limit_backward;
                    limit_backward = cursor;
                    cursor = limit - v_1;
                    // (, line 55
                    // [, line 55
                    ket = cursor;
                    // substring, line 55
                    among_var = find_among_b(a_0, 10);
                    if (among_var == 0)
                    {
                        limit_backward = v_2;
                        return false;
                    }
                    // ], line 55
                    bra = cursor;
                    limit_backward = v_2;
                    switch(among_var) {
                        case 0:
                            return false;
                        case 1:
                            // (, line 62
                            if (!(in_grouping_b(g_particle_end, 97, 246)))
                            {
                                return false;
                            }
                            break;
                        case 2:
                            // (, line 64
                            // call R2, line 64
                            if (!r_R2())
                            {
                                return false;
                            }
                            break;
                    }
                    // delete, line 66
                    slice_del();
                    return true;
                }

                private boolean r_possessive() {
            int among_var;
            int v_1;
            int v_2;
            int v_3;
                    // (, line 68
                    // setlimit, line 69
                    v_1 = limit - cursor;
                    // tomark, line 69
                    if (cursor < I_p1)
                    {
                        return false;
                    }
                    cursor = I_p1;
                    v_2 = limit_backward;
                    limit_backward = cursor;
                    cursor = limit - v_1;
                    // (, line 69
                    // [, line 69
                    ket = cursor;
                    // substring, line 69
                    among_var = find_among_b(a_4, 9);
                    if (among_var == 0)
                    {
                        limit_backward = v_2;
                        return false;
                    }
                    // ], line 69
                    bra = cursor;
                    limit_backward = v_2;
                    switch(among_var) {
                        case 0:
                            return false;
                        case 1:
                            // (, line 72
                            // not, line 72
                            {
                                v_3 = limit - cursor;
                                lab0: do {
                                    // literal, line 72
                                    if (!(eq_s_b(1, "k")))
                                    {
                                        break lab0;
                                    }
                                    return false;
                                } while (false);
                                cursor = limit - v_3;
                            }
                            // delete, line 72
                            slice_del();
                            break;
                        case 2:
                            // (, line 74
                            // delete, line 74
                            slice_del();
                            // [, line 74
                            ket = cursor;
                            // literal, line 74
                            if (!(eq_s_b(3, "kse")))
                            {
                                return false;
                            }
                            // ], line 74
                            bra = cursor;
                            // <-, line 74
                            slice_from("ksi");
                            break;
                        case 3:
                            // (, line 78
                            // delete, line 78
                            slice_del();
                            break;
                        case 4:
                            // (, line 81
                            // among, line 81
                            if (find_among_b(a_1, 6) == 0)
                            {
                                return false;
                            }
                            // delete, line 81
                            slice_del();
                            break;
                        case 5:
                            // (, line 83
                            // among, line 83
                            if (find_among_b(a_2, 6) == 0)
                            {
                                return false;
                            }
                            // delete, line 84
                            slice_del();
                            break;
                        case 6:
                            // (, line 86
                            // among, line 86
                            if (find_among_b(a_3, 2) == 0)
                            {
                                return false;
                            }
                            // delete, line 86
                            slice_del();
                            break;
                    }
                    return true;
                }

                private boolean r_LONG() {
                    // among, line 91
                    if (find_among_b(a_5, 7) == 0)
                    {
                        return false;
                    }
                    return true;
                }

                private boolean r_VI() {
                    // (, line 93
                    // literal, line 93
                    if (!(eq_s_b(1, "i")))
                    {
                        return false;
                    }
                    if (!(in_grouping_b(g_V2, 97, 246)))
                    {
                        return false;
                    }
                    return true;
                }

                private boolean r_case_ending() {
            int among_var;
            int v_1;
            int v_2;
            int v_3;
            int v_4;
            int v_5;
                    // (, line 95
                    // setlimit, line 96
                    v_1 = limit - cursor;
                    // tomark, line 96
                    if (cursor < I_p1)
                    {
                        return false;
                    }
                    cursor = I_p1;
                    v_2 = limit_backward;
                    limit_backward = cursor;
                    cursor = limit - v_1;
                    // (, line 96
                    // [, line 96
                    ket = cursor;
                    // substring, line 96
                    among_var = find_among_b(a_6, 30);
                    if (among_var == 0)
                    {
                        limit_backward = v_2;
                        return false;
                    }
                    // ], line 96
                    bra = cursor;
                    limit_backward = v_2;
                    switch(among_var) {
                        case 0:
                            return false;
                        case 1:
                            // (, line 98
                            // literal, line 98
                            if (!(eq_s_b(1, "a")))
                            {
                                return false;
                            }
                            break;
                        case 2:
                            // (, line 99
                            // literal, line 99
                            if (!(eq_s_b(1, "e")))
                            {
                                return false;
                            }
                            break;
                        case 3:
                            // (, line 100
                            // literal, line 100
                            if (!(eq_s_b(1, "i")))
                            {
                                return false;
                            }
                            break;
                        case 4:
                            // (, line 101
                            // literal, line 101
                            if (!(eq_s_b(1, "o")))
                            {
                                return false;
                            }
                            break;
                        case 5:
                            // (, line 102
                            // literal, line 102
                            if (!(eq_s_b(1, "\u00E4")))
                            {
                                return false;
                            }
                            break;
                        case 6:
                            // (, line 103
                            // literal, line 103
                            if (!(eq_s_b(1, "\u00F6")))
                            {
                                return false;
                            }
                            break;
                        case 7:
                            // (, line 111
                            // try, line 111
                            v_3 = limit - cursor;
                            lab0: do {
                                // (, line 111
                                // and, line 113
                                v_4 = limit - cursor;
                                // or, line 112
                                lab1: do {
                                    v_5 = limit - cursor;
                                    lab2: do {
                                        // call LONG, line 111
                                        if (!r_LONG())
                                        {
                                            break lab2;
                                        }
                                        break lab1;
                                    } while (false);
                                    cursor = limit - v_5;
                                    // literal, line 112
                                    if (!(eq_s_b(2, "ie")))
                                    {
                                        cursor = limit - v_3;
                                        break lab0;
                                    }
                                } while (false);
                                cursor = limit - v_4;
                                // next, line 113
                                if (cursor <= limit_backward)
                                {
                                    cursor = limit - v_3;
                                    break lab0;
                                }
                                cursor--;
                                // ], line 113
                                bra = cursor;
                            } while (false);
                            break;
                        case 8:
                            // (, line 119
                            if (!(in_grouping_b(g_V1, 97, 246)))
                            {
                                return false;
                            }
                            if (!(out_grouping_b(g_V1, 97, 246)))
                            {
                                return false;
                            }
                            break;
                        case 9:
                            // (, line 121
                            // literal, line 121
                            if (!(eq_s_b(1, "e")))
                            {
                                return false;
                            }
                            break;
                    }
                    // delete, line 138
                    slice_del();
                    // set ending_removed, line 139
                    B_ending_removed = true;
                    return true;
                }

                private boolean r_other_endings() {
            int among_var;
            int v_1;
            int v_2;
            int v_3;
                    // (, line 141
                    // setlimit, line 142
                    v_1 = limit - cursor;
                    // tomark, line 142
                    if (cursor < I_p2)
                    {
                        return false;
                    }
                    cursor = I_p2;
                    v_2 = limit_backward;
                    limit_backward = cursor;
                    cursor = limit - v_1;
                    // (, line 142
                    // [, line 142
                    ket = cursor;
                    // substring, line 142
                    among_var = find_among_b(a_7, 14);
                    if (among_var == 0)
                    {
                        limit_backward = v_2;
                        return false;
                    }
                    // ], line 142
                    bra = cursor;
                    limit_backward = v_2;
                    switch(among_var) {
                        case 0:
                            return false;
                        case 1:
                            // (, line 146
                            // not, line 146
                            {
                                v_3 = limit - cursor;
                                lab0: do {
                                    // literal, line 146
                                    if (!(eq_s_b(2, "po")))
                                    {
                                        break lab0;
                                    }
                                    return false;
                                } while (false);
                                cursor = limit - v_3;
                            }
                            break;
                    }
                    // delete, line 151
                    slice_del();
                    return true;
                }

                private boolean r_i_plural() {
            int v_1;
            int v_2;
                    // (, line 153
                    // setlimit, line 154
                    v_1 = limit - cursor;
                    // tomark, line 154
                    if (cursor < I_p1)
                    {
                        return false;
                    }
                    cursor = I_p1;
                    v_2 = limit_backward;
                    limit_backward = cursor;
                    cursor = limit - v_1;
                    // (, line 154
                    // [, line 154
                    ket = cursor;
                    // substring, line 154
                    if (find_among_b(a_8, 2) == 0)
                    {
                        limit_backward = v_2;
                        return false;
                    }
                    // ], line 154
                    bra = cursor;
                    limit_backward = v_2;
                    // delete, line 158
                    slice_del();
                    return true;
                }

                private boolean r_t_plural() {
            int among_var;
            int v_1;
            int v_2;
            int v_3;
            int v_4;
            int v_5;
            int v_6;
                    // (, line 160
                    // setlimit, line 161
                    v_1 = limit - cursor;
                    // tomark, line 161
                    if (cursor < I_p1)
                    {
                        return false;
                    }
                    cursor = I_p1;
                    v_2 = limit_backward;
                    limit_backward = cursor;
                    cursor = limit - v_1;
                    // (, line 161
                    // [, line 162
                    ket = cursor;
                    // literal, line 162
                    if (!(eq_s_b(1, "t")))
                    {
                        limit_backward = v_2;
                        return false;
                    }
                    // ], line 162
                    bra = cursor;
                    // test, line 162
                    v_3 = limit - cursor;
                    if (!(in_grouping_b(g_V1, 97, 246)))
                    {
                        limit_backward = v_2;
                        return false;
                    }
                    cursor = limit - v_3;
                    // delete, line 163
                    slice_del();
                    limit_backward = v_2;
                    // setlimit, line 165
                    v_4 = limit - cursor;
                    // tomark, line 165
                    if (cursor < I_p2)
                    {
                        return false;
                    }
                    cursor = I_p2;
                    v_5 = limit_backward;
                    limit_backward = cursor;
                    cursor = limit - v_4;
                    // (, line 165
                    // [, line 165
                    ket = cursor;
                    // substring, line 165
                    among_var = find_among_b(a_9, 2);
                    if (among_var == 0)
                    {
                        limit_backward = v_5;
                        return false;
                    }
                    // ], line 165
                    bra = cursor;
                    limit_backward = v_5;
                    switch(among_var) {
                        case 0:
                            return false;
                        case 1:
                            // (, line 167
                            // not, line 167
                            {
                                v_6 = limit - cursor;
                                lab0: do {
                                    // literal, line 167
                                    if (!(eq_s_b(2, "po")))
                                    {
                                        break lab0;
                                    }
                                    return false;
                                } while (false);
                                cursor = limit - v_6;
                            }
                            break;
                    }
                    // delete, line 170
                    slice_del();
                    return true;
                }

                private boolean r_tidy() {
            int v_1;
            int v_2;
            int v_3;
            int v_4;
            int v_5;
            int v_6;
            int v_7;
            int v_8;
            int v_9;
                    // (, line 172
                    // setlimit, line 173
                    v_1 = limit - cursor;
                    // tomark, line 173
                    if (cursor < I_p1)
                    {
                        return false;
                    }
                    cursor = I_p1;
                    v_2 = limit_backward;
                    limit_backward = cursor;
                    cursor = limit - v_1;
                    // (, line 173
                    // do, line 174
                    v_3 = limit - cursor;
                    lab0: do {
                        // (, line 174
                        // and, line 174
                        v_4 = limit - cursor;
                        // call LONG, line 174
                        if (!r_LONG())
                        {
                            break lab0;
                        }
                        cursor = limit - v_4;
                        // (, line 174
                        // [, line 174
                        ket = cursor;
                        // next, line 174
                        if (cursor <= limit_backward)
                        {
                            break lab0;
                        }
                        cursor--;
                        // ], line 174
                        bra = cursor;
                        // delete, line 174
                        slice_del();
                    } while (false);
                    cursor = limit - v_3;
                    // do, line 175
                    v_5 = limit - cursor;
                    lab1: do {
                        // (, line 175
                        // [, line 175
                        ket = cursor;
                        if (!(in_grouping_b(g_AEI, 97, 228)))
                        {
                            break lab1;
                        }
                        // ], line 175
                        bra = cursor;
                        if (!(out_grouping_b(g_V1, 97, 246)))
                        {
                            break lab1;
                        }
                        // delete, line 175
                        slice_del();
                    } while (false);
                    cursor = limit - v_5;
                    // do, line 176
                    v_6 = limit - cursor;
                    lab2: do {
                        // (, line 176
                        // [, line 176
                        ket = cursor;
                        // literal, line 176
                        if (!(eq_s_b(1, "j")))
                        {
                            break lab2;
                        }
                        // ], line 176
                        bra = cursor;
                        // or, line 176
                        lab3: do {
                            v_7 = limit - cursor;
                            lab4: do {
                                // literal, line 176
                                if (!(eq_s_b(1, "o")))
                                {
                                    break lab4;
                                }
                                break lab3;
                            } while (false);
                            cursor = limit - v_7;
                            // literal, line 176
                            if (!(eq_s_b(1, "u")))
                            {
                                break lab2;
                            }
                        } while (false);
                        // delete, line 176
                        slice_del();
                    } while (false);
                    cursor = limit - v_6;
                    // do, line 177
                    v_8 = limit - cursor;
                    lab5: do {
                        // (, line 177
                        // [, line 177
                        ket = cursor;
                        // literal, line 177
                        if (!(eq_s_b(1, "o")))
                        {
                            break lab5;
                        }
                        // ], line 177
                        bra = cursor;
                        // literal, line 177
                        if (!(eq_s_b(1, "j")))
                        {
                            break lab5;
                        }
                        // delete, line 177
                        slice_del();
                    } while (false);
                    cursor = limit - v_8;
                    limit_backward = v_2;
                    // goto, line 179
                    golab6: while(true)
                    {
                        v_9 = limit - cursor;
                        lab7: do {
                            if (!(out_grouping_b(g_V1, 97, 246)))
                            {
                                break lab7;
                            }
                            cursor = limit - v_9;
                            break golab6;
                        } while (false);
                        cursor = limit - v_9;
                        if (cursor <= limit_backward)
                        {
                            return false;
                        }
                        cursor--;
                    }
                    // [, line 179
                    ket = cursor;
                    // next, line 179
                    if (cursor <= limit_backward)
                    {
                        return false;
                    }
                    cursor--;
                    // ], line 179
                    bra = cursor;
                    // -> x, line 179
                    S_x = slice_to(S_x);
                    // name x, line 179
                    if (!(eq_v_b(S_x)))
                    {
                        return false;
                    }
                    // delete, line 179
                    slice_del();
                    return true;
                }

                public boolean stem() {
            int v_1;
            int v_2;
            int v_3;
            int v_4;
            int v_5;
            int v_6;
            int v_7;
            int v_8;
            int v_9;
                    // (, line 183
                    // do, line 185
                    v_1 = cursor;
                    lab0: do {
                        // call mark_regions, line 185
                        if (!r_mark_regions())
                        {
                            break lab0;
                        }
                    } while (false);
                    cursor = v_1;
                    // unset ending_removed, line 186
                    B_ending_removed = false;
                    // backwards, line 187
                    limit_backward = cursor; cursor = limit;
                    // (, line 187
                    // do, line 188
                    v_2 = limit - cursor;
                    lab1: do {
                        // call particle_etc, line 188
                        if (!r_particle_etc())
                        {
                            break lab1;
                        }
                    } while (false);
                    cursor = limit - v_2;
                    // do, line 189
                    v_3 = limit - cursor;
                    lab2: do {
                        // call possessive, line 189
                        if (!r_possessive())
                        {
                            break lab2;
                        }
                    } while (false);
                    cursor = limit - v_3;
                    // do, line 190
                    v_4 = limit - cursor;
                    lab3: do {
                        // call case_ending, line 190
                        if (!r_case_ending())
                        {
                            break lab3;
                        }
                    } while (false);
                    cursor = limit - v_4;
                    // do, line 191
                    v_5 = limit - cursor;
                    lab4: do {
                        // call other_endings, line 191
                        if (!r_other_endings())
                        {
                            break lab4;
                        }
                    } while (false);
                    cursor = limit - v_5;
                    // or, line 192
                    lab5: do {
                        v_6 = limit - cursor;
                        lab6: do {
                            // (, line 192
                            // Boolean test ending_removed, line 192
                            if (!(B_ending_removed))
                            {
                                break lab6;
                            }
                            // do, line 192
                            v_7 = limit - cursor;
                            lab7: do {
                                // call i_plural, line 192
                                if (!r_i_plural())
                                {
                                    break lab7;
                                }
                            } while (false);
                            cursor = limit - v_7;
                            break lab5;
                        } while (false);
                        cursor = limit - v_6;
                        // do, line 192
                        v_8 = limit - cursor;
                        lab8: do {
                            // call t_plural, line 192
                            if (!r_t_plural())
                            {
                                break lab8;
                            }
                        } while (false);
                        cursor = limit - v_8;
                    } while (false);
                    // do, line 193
                    v_9 = limit - cursor;
                    lab9: do {
                        // call tidy, line 193
                        if (!r_tidy())
                        {
                            break lab9;
                        }
                    } while (false);
                    cursor = limit - v_9;
                    cursor = limit_backward;                    return true;
                }

        public boolean equals( Object o ) {
            return o instanceof finnishStemmer;
        }

        public int hashCode() {
            return finnishStemmer.class.getName().hashCode();
        }



}
