function Snowball() {

/**@constructor*/
BaseStemmer = function() {
    this.setCurrent = function(value) {
        this.current = value;
        this.cursor = 0;
        this.limit = this.current.length;
        this.limit_backward = 0;
        this.bra = this.cursor;
        this.ket = this.limit;
    };

    this.getCurrent = function() {
        return this.current;
    };

    this.copy_from = function(other) {
        this.current          = other.current;
        this.cursor           = other.cursor;
        this.limit            = other.limit;
        this.limit_backward   = other.limit_backward;
        this.bra              = other.bra;
        this.ket              = other.ket;
    };

    this.in_grouping = function(s, min, max) {
        if (this.cursor >= this.limit) return false;
        var ch = this.current.charCodeAt(this.cursor);
        if (ch > max || ch < min) return false;
        ch -= min;
        if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
        this.cursor++;
        return true;
    };

    this.in_grouping_b = function(s, min, max) {
        if (this.cursor <= this.limit_backward) return false;
        var ch = this.current.charCodeAt(this.cursor - 1);
        if (ch > max || ch < min) return false;
        ch -= min;
        if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) return false;
        this.cursor--;
        return true;
    };

    this.out_grouping = function(s, min, max) {
        if (this.cursor >= this.limit) return false;
        var ch = this.current.charCodeAt(this.cursor);
        if (ch > max || ch < min) {
            this.cursor++;
            return true;
        }
        ch -= min;
        if ((s[ch >>> 3] & (0X1 << (ch & 0x7))) == 0) {
            this.cursor++;
            return true;
        }
        return false;
    };

    this.out_grouping_b = function(s, min, max) {
        if (this.cursor <= this.limit_backward) return false;
        var ch = this.current.charCodeAt(this.cursor - 1);
        if (ch > max || ch < min) {
            this.cursor--;
            return true;
        }
        ch -= min;
        if ((s[ch >>> 3] & (0x1 << (ch & 0x7))) == 0) {
            this.cursor--;
            return true;
        }
        return false;
    };

    this.eq_s = function(s)
    {
        if (this.limit - this.cursor < s.length) return false;
        if (this.current.slice(this.cursor, this.cursor + s.length) != s)
        {
            return false;
        }
        this.cursor += s.length;
        return true;
    };

    this.eq_s_b = function(s)
    {
        if (this.cursor - this.limit_backward < s.length) return false;
        if (this.current.slice(this.cursor - s.length, this.cursor) != s)
        {
            return false;
        }
        this.cursor -= s.length;
        return true;
    };

    /** @return {number} */ this.find_among = function(v)
    {
        var i = 0;
        var j = v.length;

        var c = this.cursor;
        var l = this.limit;

        var common_i = 0;
        var common_j = 0;

        var first_key_inspected = false;

        while (true)
        {
            var k = i + ((j - i) >>> 1);
            var diff = 0;
            var common = common_i < common_j ? common_i : common_j; // smaller
            // w[0]: string, w[1]: substring_i, w[2]: result, w[3]: function (optional)
            var w = v[k];
            var i2;
            for (i2 = common; i2 < w[0].length; i2++)
            {
                if (c + common == l)
                {
                    diff = -1;
                    break;
                }
                diff = this.current.charCodeAt(c + common) - w[0].charCodeAt(i2);
                if (diff != 0) break;
                common++;
            }
            if (diff < 0)
            {
                j = k;
                common_j = common;
            }
            else
            {
                i = k;
                common_i = common;
            }
            if (j - i <= 1)
            {
                if (i > 0) break; // v->s has been inspected
                if (j == i) break; // only one item in v

                // - but now we need to go round once more to get
                // v->s inspected. This looks messy, but is actually
                // the optimal approach.

                if (first_key_inspected) break;
                first_key_inspected = true;
            }
        }
        do {
            var w = v[i];
            if (common_i >= w[0].length)
            {
                this.cursor = c + w[0].length;
                if (w.length < 4) return w[2];
                var res = w[3](this);
                this.cursor = c + w[0].length;
                if (res) return w[2];
            }
            i = w[1];
        } while (i >= 0);
        return 0;
    };

    // find_among_b is for backwards processing. Same comments apply
    this.find_among_b = function(v)
    {
        var i = 0;
        var j = v.length

        var c = this.cursor;
        var lb = this.limit_backward;

        var common_i = 0;
        var common_j = 0;

        var first_key_inspected = false;

        while (true)
        {
            var k = i + ((j - i) >> 1);
            var diff = 0;
            var common = common_i < common_j ? common_i : common_j;
            var w = v[k];
            var i2;
            for (i2 = w[0].length - 1 - common; i2 >= 0; i2--)
            {
                if (c - common == lb)
                {
                    diff = -1;
                    break;
                }
                diff = this.current.charCodeAt(c - 1 - common) - w[0].charCodeAt(i2);
                if (diff != 0) break;
                common++;
            }
            if (diff < 0)
            {
                j = k;
                common_j = common;
            }
            else
            {
                i = k;
                common_i = common;
            }
            if (j - i <= 1)
            {
                if (i > 0) break;
                if (j == i) break;
                if (first_key_inspected) break;
                first_key_inspected = true;
            }
        }
        do {
            var w = v[i];
            if (common_i >= w[0].length)
            {
                this.cursor = c - w[0].length;
                if (w.length < 4) return w[2];
                var res = w[3](this);
                this.cursor = c - w[0].length;
                if (res) return w[2];
            }
            i = w[1];
        } while (i >= 0);
        return 0;
    };

    /* to replace chars between c_bra and c_ket in this.current by the
     * chars in s.
     */
    this.replace_s = function(c_bra, c_ket, s)
    {
        var adjustment = s.length - (c_ket - c_bra);
        this.current = this.current.slice(0, c_bra) + s + this.current.slice(c_ket);
        this.limit += adjustment;
        if (this.cursor >= c_ket) this.cursor += adjustment;
        else if (this.cursor > c_bra) this.cursor = c_bra;
        return adjustment;
    };

    this.slice_check = function()
    {
        if (this.bra < 0 ||
            this.bra > this.ket ||
            this.ket > this.limit ||
            this.limit > this.current.length)
        {
            return false;
        }
        return true;
    };

    this.slice_from = function(s)
    {
        var result = false;
        if (this.slice_check())
        {
            this.replace_s(this.bra, this.ket, s);
            result = true;
        }
        return result;
    };

    this.slice_del = function()
    {
        return this.slice_from("");
    };

    this.insert = function(c_bra, c_ket, s)
    {
        var adjustment = this.replace_s(c_bra, c_ket, s);
        if (c_bra <= this.bra) this.bra += adjustment;
        if (c_bra <= this.ket) this.ket += adjustment;
    };

    this.slice_to = function()
    {
        var result = '';
        if (this.slice_check())
        {
            result = this.current.slice(this.bra, this.ket);
        }
        return result;
    };

    this.assign_to = function()
    {
        return this.current.slice(0, this.limit);
    };
};


/*==============================================*/

// Generated by Snowball 2.2.0 - https://snowballstem.org/

/**@constructor*/
BasqueStemmer = function() {
    var base = new BaseStemmer();
    /** @const */ var a_0 = [
        ["idea", -1, 1],
        ["bidea", 0, 1],
        ["kidea", 0, 1],
        ["pidea", 0, 1],
        ["kundea", -1, 1],
        ["galea", -1, 1],
        ["tailea", -1, 1],
        ["tzailea", -1, 1],
        ["gunea", -1, 1],
        ["kunea", -1, 1],
        ["tzaga", -1, 1],
        ["gaia", -1, 1],
        ["aldia", -1, 1],
        ["taldia", 12, 1],
        ["karia", -1, 1],
        ["garria", -1, 2],
        ["karria", -1, 1],
        ["ka", -1, 1],
        ["tzaka", 17, 1],
        ["la", -1, 1],
        ["mena", -1, 1],
        ["pena", -1, 1],
        ["kina", -1, 1],
        ["ezina", -1, 1],
        ["tezina", 23, 1],
        ["kuna", -1, 1],
        ["tuna", -1, 1],
        ["kizuna", -1, 1],
        ["era", -1, 1],
        ["bera", 28, 1],
        ["arabera", 29, 4],
        ["kera", 28, 1],
        ["pera", 28, 1],
        ["orra", -1, 1],
        ["korra", 33, 1],
        ["dura", -1, 1],
        ["gura", -1, 1],
        ["kura", -1, 1],
        ["tura", -1, 1],
        ["eta", -1, 1],
        ["keta", 39, 1],
        ["gailua", -1, 1],
        ["eza", -1, 1],
        ["erreza", 42, 1],
        ["tza", -1, 2],
        ["gaitza", 44, 1],
        ["kaitza", 44, 1],
        ["kuntza", 44, 1],
        ["ide", -1, 1],
        ["bide", 48, 1],
        ["kide", 48, 1],
        ["pide", 48, 1],
        ["kunde", -1, 1],
        ["tzake", -1, 1],
        ["tzeke", -1, 1],
        ["le", -1, 1],
        ["gale", 55, 1],
        ["taile", 55, 1],
        ["tzaile", 55, 1],
        ["gune", -1, 1],
        ["kune", -1, 1],
        ["tze", -1, 1],
        ["atze", 61, 1],
        ["gai", -1, 1],
        ["aldi", -1, 1],
        ["taldi", 64, 1],
        ["ki", -1, 1],
        ["ari", -1, 1],
        ["kari", 67, 1],
        ["lari", 67, 1],
        ["tari", 67, 1],
        ["etari", 70, 1],
        ["garri", -1, 2],
        ["karri", -1, 1],
        ["arazi", -1, 1],
        ["tarazi", 74, 1],
        ["an", -1, 1],
        ["ean", 76, 1],
        ["rean", 77, 1],
        ["kan", 76, 1],
        ["etan", 76, 1],
        ["atseden", -1, 3],
        ["men", -1, 1],
        ["pen", -1, 1],
        ["kin", -1, 1],
        ["rekin", 84, 1],
        ["ezin", -1, 1],
        ["tezin", 86, 1],
        ["tun", -1, 1],
        ["kizun", -1, 1],
        ["go", -1, 1],
        ["ago", 90, 1],
        ["tio", -1, 1],
        ["dako", -1, 1],
        ["or", -1, 1],
        ["kor", 94, 1],
        ["tzat", -1, 1],
        ["du", -1, 1],
        ["gailu", -1, 1],
        ["tu", -1, 1],
        ["atu", 99, 1],
        ["aldatu", 100, 1],
        ["tatu", 100, 1],
        ["baditu", 99, 5],
        ["ez", -1, 1],
        ["errez", 104, 1],
        ["tzez", 104, 1],
        ["gaitz", -1, 1],
        ["kaitz", -1, 1]
    ];

    /** @const */ var a_1 = [
        ["ada", -1, 1],
        ["kada", 0, 1],
        ["anda", -1, 1],
        ["denda", -1, 1],
        ["gabea", -1, 1],
        ["kabea", -1, 1],
        ["aldea", -1, 1],
        ["kaldea", 6, 1],
        ["taldea", 6, 1],
        ["ordea", -1, 1],
        ["zalea", -1, 1],
        ["tzalea", 10, 1],
        ["gilea", -1, 1],
        ["emea", -1, 1],
        ["kumea", -1, 1],
        ["nea", -1, 1],
        ["enea", 15, 1],
        ["zionea", 15, 1],
        ["unea", 15, 1],
        ["gunea", 18, 1],
        ["pea", -1, 1],
        ["aurrea", -1, 1],
        ["tea", -1, 1],
        ["kotea", 22, 1],
        ["artea", 22, 1],
        ["ostea", 22, 1],
        ["etxea", -1, 1],
        ["ga", -1, 1],
        ["anga", 27, 1],
        ["gaia", -1, 1],
        ["aldia", -1, 1],
        ["taldia", 30, 1],
        ["handia", -1, 1],
        ["mendia", -1, 1],
        ["geia", -1, 1],
        ["egia", -1, 1],
        ["degia", 35, 1],
        ["tegia", 35, 1],
        ["nahia", -1, 1],
        ["ohia", -1, 1],
        ["kia", -1, 1],
        ["tokia", 40, 1],
        ["oia", -1, 1],
        ["koia", 42, 1],
        ["aria", -1, 1],
        ["karia", 44, 1],
        ["laria", 44, 1],
        ["taria", 44, 1],
        ["eria", -1, 1],
        ["keria", 48, 1],
        ["teria", 48, 1],
        ["garria", -1, 2],
        ["larria", -1, 1],
        ["kirria", -1, 1],
        ["duria", -1, 1],
        ["asia", -1, 1],
        ["tia", -1, 1],
        ["ezia", -1, 1],
        ["bizia", -1, 1],
        ["ontzia", -1, 1],
        ["ka", -1, 1],
        ["joka", 60, 3],
        ["aurka", 60, 10],
        ["ska", 60, 1],
        ["xka", 60, 1],
        ["zka", 60, 1],
        ["gibela", -1, 1],
        ["gela", -1, 1],
        ["kaila", -1, 1],
        ["skila", -1, 1],
        ["tila", -1, 1],
        ["ola", -1, 1],
        ["na", -1, 1],
        ["kana", 72, 1],
        ["ena", 72, 1],
        ["garrena", 74, 1],
        ["gerrena", 74, 1],
        ["urrena", 74, 1],
        ["zaina", 72, 1],
        ["tzaina", 78, 1],
        ["kina", 72, 1],
        ["mina", 72, 1],
        ["garna", 72, 1],
        ["una", 72, 1],
        ["duna", 83, 1],
        ["asuna", 83, 1],
        ["tasuna", 85, 1],
        ["ondoa", -1, 1],
        ["kondoa", 87, 1],
        ["ngoa", -1, 1],
        ["zioa", -1, 1],
        ["koa", -1, 1],
        ["takoa", 91, 1],
        ["zkoa", 91, 1],
        ["noa", -1, 1],
        ["zinoa", 94, 1],
        ["aroa", -1, 1],
        ["taroa", 96, 1],
        ["zaroa", 96, 1],
        ["eroa", -1, 1],
        ["oroa", -1, 1],
        ["osoa", -1, 1],
        ["toa", -1, 1],
        ["ttoa", 102, 1],
        ["ztoa", 102, 1],
        ["txoa", -1, 1],
        ["tzoa", -1, 1],
        ["\u00F1oa", -1, 1],
        ["ra", -1, 1],
        ["ara", 108, 1],
        ["dara", 109, 1],
        ["liara", 109, 1],
        ["tiara", 109, 1],
        ["tara", 109, 1],
        ["etara", 113, 1],
        ["tzara", 109, 1],
        ["bera", 108, 1],
        ["kera", 108, 1],
        ["pera", 108, 1],
        ["ora", 108, 2],
        ["tzarra", 108, 1],
        ["korra", 108, 1],
        ["tra", 108, 1],
        ["sa", -1, 1],
        ["osa", 123, 1],
        ["ta", -1, 1],
        ["eta", 125, 1],
        ["keta", 126, 1],
        ["sta", 125, 1],
        ["dua", -1, 1],
        ["mendua", 129, 1],
        ["ordua", 129, 1],
        ["lekua", -1, 1],
        ["burua", -1, 1],
        ["durua", -1, 1],
        ["tsua", -1, 1],
        ["tua", -1, 1],
        ["mentua", 136, 1],
        ["estua", 136, 1],
        ["txua", -1, 1],
        ["zua", -1, 1],
        ["tzua", 140, 1],
        ["za", -1, 1],
        ["eza", 142, 1],
        ["eroza", 142, 1],
        ["tza", 142, 2],
        ["koitza", 145, 1],
        ["antza", 145, 1],
        ["gintza", 145, 1],
        ["kintza", 145, 1],
        ["kuntza", 145, 1],
        ["gabe", -1, 1],
        ["kabe", -1, 1],
        ["kide", -1, 1],
        ["alde", -1, 1],
        ["kalde", 154, 1],
        ["talde", 154, 1],
        ["orde", -1, 1],
        ["ge", -1, 1],
        ["zale", -1, 1],
        ["tzale", 159, 1],
        ["gile", -1, 1],
        ["eme", -1, 1],
        ["kume", -1, 1],
        ["ne", -1, 1],
        ["zione", 164, 1],
        ["une", 164, 1],
        ["gune", 166, 1],
        ["pe", -1, 1],
        ["aurre", -1, 1],
        ["te", -1, 1],
        ["kote", 170, 1],
        ["arte", 170, 1],
        ["oste", 170, 1],
        ["etxe", -1, 1],
        ["gai", -1, 1],
        ["di", -1, 1],
        ["aldi", 176, 1],
        ["taldi", 177, 1],
        ["geldi", 176, 8],
        ["handi", 176, 1],
        ["mendi", 176, 1],
        ["gei", -1, 1],
        ["egi", -1, 1],
        ["degi", 183, 1],
        ["tegi", 183, 1],
        ["nahi", -1, 1],
        ["ohi", -1, 1],
        ["ki", -1, 1],
        ["toki", 188, 1],
        ["oi", -1, 1],
        ["goi", 190, 1],
        ["koi", 190, 1],
        ["ari", -1, 1],
        ["kari", 193, 1],
        ["lari", 193, 1],
        ["tari", 193, 1],
        ["garri", -1, 2],
        ["larri", -1, 1],
        ["kirri", -1, 1],
        ["duri", -1, 1],
        ["asi", -1, 1],
        ["ti", -1, 1],
        ["ontzi", -1, 1],
        ["\u00F1i", -1, 1],
        ["ak", -1, 1],
        ["ek", -1, 1],
        ["tarik", -1, 1],
        ["gibel", -1, 1],
        ["ail", -1, 1],
        ["kail", 209, 1],
        ["kan", -1, 1],
        ["tan", -1, 1],
        ["etan", 212, 1],
        ["en", -1, 4],
        ["ren", 214, 2],
        ["garren", 215, 1],
        ["gerren", 215, 1],
        ["urren", 215, 1],
        ["ten", 214, 4],
        ["tzen", 214, 4],
        ["zain", -1, 1],
        ["tzain", 221, 1],
        ["kin", -1, 1],
        ["min", -1, 1],
        ["dun", -1, 1],
        ["asun", -1, 1],
        ["tasun", 226, 1],
        ["aizun", -1, 1],
        ["ondo", -1, 1],
        ["kondo", 229, 1],
        ["go", -1, 1],
        ["ngo", 231, 1],
        ["zio", -1, 1],
        ["ko", -1, 1],
        ["trako", 234, 5],
        ["tako", 234, 1],
        ["etako", 236, 1],
        ["eko", 234, 1],
        ["tariko", 234, 1],
        ["sko", 234, 1],
        ["tuko", 234, 1],
        ["minutuko", 241, 6],
        ["zko", 234, 1],
        ["no", -1, 1],
        ["zino", 244, 1],
        ["ro", -1, 1],
        ["aro", 246, 1],
        ["igaro", 247, 9],
        ["taro", 247, 1],
        ["zaro", 247, 1],
        ["ero", 246, 1],
        ["giro", 246, 1],
        ["oro", 246, 1],
        ["oso", -1, 1],
        ["to", -1, 1],
        ["tto", 255, 1],
        ["zto", 255, 1],
        ["txo", -1, 1],
        ["tzo", -1, 1],
        ["gintzo", 259, 1],
        ["\u00F1o", -1, 1],
        ["zp", -1, 1],
        ["ar", -1, 1],
        ["dar", 263, 1],
        ["behar", 263, 1],
        ["zehar", 263, 7],
        ["liar", 263, 1],
        ["tiar", 263, 1],
        ["tar", 263, 1],
        ["tzar", 263, 1],
        ["or", -1, 2],
        ["kor", 271, 1],
        ["os", -1, 1],
        ["ket", -1, 1],
        ["du", -1, 1],
        ["mendu", 275, 1],
        ["ordu", 275, 1],
        ["leku", -1, 1],
        ["buru", -1, 2],
        ["duru", -1, 1],
        ["tsu", -1, 1],
        ["tu", -1, 1],
        ["tatu", 282, 4],
        ["mentu", 282, 1],
        ["estu", 282, 1],
        ["txu", -1, 1],
        ["zu", -1, 1],
        ["tzu", 287, 1],
        ["gintzu", 288, 1],
        ["z", -1, 1],
        ["ez", 290, 1],
        ["eroz", 290, 1],
        ["tz", 290, 1],
        ["koitz", 293, 1]
    ];

    /** @const */ var a_2 = [
        ["zlea", -1, 2],
        ["keria", -1, 1],
        ["la", -1, 1],
        ["era", -1, 1],
        ["dade", -1, 1],
        ["tade", -1, 1],
        ["date", -1, 1],
        ["tate", -1, 1],
        ["gi", -1, 1],
        ["ki", -1, 1],
        ["ik", -1, 1],
        ["lanik", 10, 1],
        ["rik", 10, 1],
        ["larik", 12, 1],
        ["ztik", 10, 1],
        ["go", -1, 1],
        ["ro", -1, 1],
        ["ero", 16, 1],
        ["to", -1, 1]
    ];

    /** @const */ var /** Array<int> */ g_v = [17, 65, 16];

    var /** number */ I_p2 = 0;
    var /** number */ I_p1 = 0;
    var /** number */ I_pV = 0;


    /** @return {boolean} */
    function r_mark_regions() {
        I_pV = base.limit;
        I_p1 = base.limit;
        I_p2 = base.limit;
        var /** number */ v_1 = base.cursor;
        lab0: {
            lab1: {
                var /** number */ v_2 = base.cursor;
                lab2: {
                    if (!(base.in_grouping(g_v, 97, 117)))
                    {
                        break lab2;
                    }
                    lab3: {
                        var /** number */ v_3 = base.cursor;
                        lab4: {
                            if (!(base.out_grouping(g_v, 97, 117)))
                            {
                                break lab4;
                            }
                            golab5: while(true)
                            {
                                lab6: {
                                    if (!(base.in_grouping(g_v, 97, 117)))
                                    {
                                        break lab6;
                                    }
                                    break golab5;
                                }
                                if (base.cursor >= base.limit)
                                {
                                    break lab4;
                                }
                                base.cursor++;
                            }
                            break lab3;
                        }
                        base.cursor = v_3;
                        if (!(base.in_grouping(g_v, 97, 117)))
                        {
                            break lab2;
                        }
                        golab7: while(true)
                        {
                            lab8: {
                                if (!(base.out_grouping(g_v, 97, 117)))
                                {
                                    break lab8;
                                }
                                break golab7;
                            }
                            if (base.cursor >= base.limit)
                            {
                                break lab2;
                            }
                            base.cursor++;
                        }
                    }
                    break lab1;
                }
                base.cursor = v_2;
                if (!(base.out_grouping(g_v, 97, 117)))
                {
                    break lab0;
                }
                lab9: {
                    var /** number */ v_6 = base.cursor;
                    lab10: {
                        if (!(base.out_grouping(g_v, 97, 117)))
                        {
                            break lab10;
                        }
                        golab11: while(true)
                        {
                            lab12: {
                                if (!(base.in_grouping(g_v, 97, 117)))
                                {
                                    break lab12;
                                }
                                break golab11;
                            }
                            if (base.cursor >= base.limit)
                            {
                                break lab10;
                            }
                            base.cursor++;
                        }
                        break lab9;
                    }
                    base.cursor = v_6;
                    if (!(base.in_grouping(g_v, 97, 117)))
                    {
                        break lab0;
                    }
                    if (base.cursor >= base.limit)
                    {
                        break lab0;
                    }
                    base.cursor++;
                }
            }
            I_pV = base.cursor;
        }
        base.cursor = v_1;
        var /** number */ v_8 = base.cursor;
        lab13: {
            golab14: while(true)
            {
                lab15: {
                    if (!(base.in_grouping(g_v, 97, 117)))
                    {
                        break lab15;
                    }
                    break golab14;
                }
                if (base.cursor >= base.limit)
                {
                    break lab13;
                }
                base.cursor++;
            }
            golab16: while(true)
            {
                lab17: {
                    if (!(base.out_grouping(g_v, 97, 117)))
                    {
                        break lab17;
                    }
                    break golab16;
                }
                if (base.cursor >= base.limit)
                {
                    break lab13;
                }
                base.cursor++;
            }
            I_p1 = base.cursor;
            golab18: while(true)
            {
                lab19: {
                    if (!(base.in_grouping(g_v, 97, 117)))
                    {
                        break lab19;
                    }
                    break golab18;
                }
                if (base.cursor >= base.limit)
                {
                    break lab13;
                }
                base.cursor++;
            }
            golab20: while(true)
            {
                lab21: {
                    if (!(base.out_grouping(g_v, 97, 117)))
                    {
                        break lab21;
                    }
                    break golab20;
                }
                if (base.cursor >= base.limit)
                {
                    break lab13;
                }
                base.cursor++;
            }
            I_p2 = base.cursor;
        }
        base.cursor = v_8;
        return true;
    };

    /** @return {boolean} */
    function r_RV() {
        if (!(I_pV <= base.cursor))
        {
            return false;
        }
        return true;
    };

    /** @return {boolean} */
    function r_R2() {
        if (!(I_p2 <= base.cursor))
        {
            return false;
        }
        return true;
    };

    /** @return {boolean} */
    function r_R1() {
        if (!(I_p1 <= base.cursor))
        {
            return false;
        }
        return true;
    };

    /** @return {boolean} */
    function r_aditzak() {
        var /** number */ among_var;
        base.ket = base.cursor;
        among_var = base.find_among_b(a_0);
        if (among_var == 0)
        {
            return false;
        }
        base.bra = base.cursor;
        switch (among_var) {
            case 1:
                if (!r_RV())
                {
                    return false;
                }
                if (!base.slice_del())
                {
                    return false;
                }
                break;
            case 2:
                if (!r_R2())
                {
                    return false;
                }
                if (!base.slice_del())
                {
                    return false;
                }
                break;
            case 3:
                if (!base.slice_from("atseden"))
                {
                    return false;
                }
                break;
            case 4:
                if (!base.slice_from("arabera"))
                {
                    return false;
                }
                break;
            case 5:
                if (!base.slice_from("baditu"))
                {
                    return false;
                }
                break;
        }
        return true;
    };

    /** @return {boolean} */
    function r_izenak() {
        var /** number */ among_var;
        base.ket = base.cursor;
        among_var = base.find_among_b(a_1);
        if (among_var == 0)
        {
            return false;
        }
        base.bra = base.cursor;
        switch (among_var) {
            case 1:
                if (!r_RV())
                {
                    return false;
                }
                if (!base.slice_del())
                {
                    return false;
                }
                break;
            case 2:
                if (!r_R2())
                {
                    return false;
                }
                if (!base.slice_del())
                {
                    return false;
                }
                break;
            case 3:
                if (!base.slice_from("jok"))
                {
                    return false;
                }
                break;
            case 4:
                if (!r_R1())
                {
                    return false;
                }
                if (!base.slice_del())
                {
                    return false;
                }
                break;
            case 5:
                if (!base.slice_from("tra"))
                {
                    return false;
                }
                break;
            case 6:
                if (!base.slice_from("minutu"))
                {
                    return false;
                }
                break;
            case 7:
                if (!base.slice_from("zehar"))
                {
                    return false;
                }
                break;
            case 8:
                if (!base.slice_from("geldi"))
                {
                    return false;
                }
                break;
            case 9:
                if (!base.slice_from("igaro"))
                {
                    return false;
                }
                break;
            case 10:
                if (!base.slice_from("aurka"))
                {
                    return false;
                }
                break;
        }
        return true;
    };

    /** @return {boolean} */
    function r_adjetiboak() {
        var /** number */ among_var;
        base.ket = base.cursor;
        among_var = base.find_among_b(a_2);
        if (among_var == 0)
        {
            return false;
        }
        base.bra = base.cursor;
        switch (among_var) {
            case 1:
                if (!r_RV())
                {
                    return false;
                }
                if (!base.slice_del())
                {
                    return false;
                }
                break;
            case 2:
                if (!base.slice_from("z"))
                {
                    return false;
                }
                break;
        }
        return true;
    };

    this.stem = /** @return {boolean} */ function() {
        r_mark_regions();
        base.limit_backward = base.cursor; base.cursor = base.limit;
        while(true)
        {
            var /** number */ v_2 = base.limit - base.cursor;
            lab0: {
                if (!r_aditzak())
                {
                    break lab0;
                }
                continue;
            }
            base.cursor = base.limit - v_2;
            break;
        }
        while(true)
        {
            var /** number */ v_3 = base.limit - base.cursor;
            lab1: {
                if (!r_izenak())
                {
                    break lab1;
                }
                continue;
            }
            base.cursor = base.limit - v_3;
            break;
        }
        var /** number */ v_4 = base.limit - base.cursor;
        r_adjetiboak();
        base.cursor = base.limit - v_4;
        base.cursor = base.limit_backward;
        return true;
    };

    /**@return{string}*/
    this['stemWord'] = function(/**string*/word) {
        base.setCurrent(word);
        this.stem();
        return base.getCurrent();
    };
};


return new BasqueStemmer();
}