// Decompiled by Jad v1.5.7f. Copyright 2000 Pavel Kouznetsov.
// Jad home page: http://www.geocities.com/SiliconValley/Bridge/8617/jad.html
// Decompiler options: packimports(3) braces deadcode fieldsfirst 
// Source File Name:   CharacterConverter12Byte.java
// Class Version:      45.3

package oracle.sql.converter;

import java.sql.SQLException;
import java.util.Vector;

// Referenced classes of package oracle.sql.converter:
//            CharacterConverter

// flag ACC_SUPER is set
public class CharacterConverter12Byte extends CharacterConverter
{
    // Constants:          153
    // Interfaces:         0
    // Fields:             25
    // Methods:            16
    // Class Attributes:   1


    static final int ORACHARMASK = 255;
    static final int UCSCHARWIDTH = 16;
    static final int ORACHARWIDTH = 16;
    static final int BYTEWIDTH = 8;
    static final int HIBYTEMASK = 65280;
    static final int LOWBYTEMASK = 255;
    static final int BELOW_CJK = 12287;
    static final int INVALID_ORA_CHAR = 65535;
    int m_ucsL1KeyMask;
    int m_ucsL2KeyMask;
    int m_oraL1KeyMask;
    int m_oraL2KeyMask;
    public int m_ucsL1KeyWidth;
    public int m_ucsL1KeyShift;
    public int m_oraL1KeyWidth;
    public int m_oraL1KeyShift;
    public char m_ucsCharLevel1[];
    public char m_ucsCharLevel2[];
    public char m_ucsCharReplacement;
    public char m_oraCharLevel1[];
    public char m_oraCharLevel2[];
    public char m_1ByteOraCharReplacement;
    public char m_2ByteOraCharReplacement;
    public char extraUnicodeToOracleMapping[][];
    static final short MAX_7BIT = 127;

    // Decompiling method: <init>  Signature: ()V
    // Max stack: 2, #locals: 1, #params: 1
    // Code length: 90 bytes, Code offset: 2125
    // Line Number Table found: 19 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 90 Range 0 89 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type V At 0 90 Range 0 89 Init 0 fixed
    public CharacterConverter12Byte()
    {
        super();
        m_ucsL1KeyMask = 0;
        m_ucsL2KeyMask = 0;
        m_oraL1KeyMask = 0;
        m_oraL2KeyMask = 0;
        m_ucsL1KeyWidth = 0;
        m_ucsL1KeyShift = 0;
        m_oraL1KeyWidth = 0;
        m_oraL1KeyShift = 0;
        m_ucsCharLevel1 = null;
        m_ucsCharLevel2 = null;
        m_ucsCharReplacement = '\0';
        m_oraCharLevel1 = null;
        m_oraCharLevel2 = null;
        m_1ByteOraCharReplacement = '\0';
        m_2ByteOraCharReplacement = '\0';
        extraUnicodeToOracleMapping = null;
        m_groupId = 1;
        return;
    }

    // Decompiling method: buildUnicodeToOracleMapping  Signature: ()V
    // Max stack: 5, #locals: 20, #params: 1
    // Code length: 649 bytes, Code offset: 2325
    // Line Number Table found: 85 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 649 Range 0 648 Init 0 fixed
    // RetValue  20 added: Name <returnValue> Type V At 0 649 Range 0 648 Init 0 fixed
    // LocalVar   1 added: Name i Type I At 39 37 Range 39 75 Init 39
    // LocalVar   2 added: Name j Type I At 44 536 Range 44 579 Init 44
    // LocalVar   3 added: Name k Type I At 50 532 Range 50 581 Init 50
    // LocalVar   4 added: Name l Type I At 56 533 Range 56 588 Init 56
    // LocalVar   5 added: Name i1 Type I At 77 359 Range 77 435 Init 77
    // LocalVar   6 added: Name ac Type [C At 83 556 Range 83 638 Init 83
    // LocalVar   7 added: Name ac1 Type [[C At 92 327 Range 92 418 Init 92
    // LocalVar   8 added: Name flag Type Z At 95 34 Range 95 128 Init 95
    // LocalVar   8 chged: Name j1 Oname flag Type I At 127 2 Range 95 128 Init 95
    // LocalVar  12 added: Name k1 Type I At 136 101 Range 136 236 Init 136
    // LocalVar  13 added: Name c Type C At 142 348 Range 142 489 Init 142
    // LocalVar   8 added: Name flag Type Z At 145 90 Range 145 234 Init 145
    // LocalVar   8 chged: Name l1 Oname flag Type I At 233 2 Range 145 234 Init 145
    // LocalVar  12 added: Name i2 Type I At 252 91 Range 252 342 Init 252
    // LocalVar   8 added: Name flag Type Z At 255 86 Range 255 340 Init 255
    // LocalVar   8 chged: Name j2 Oname flag Type I At 339 2 Range 255 340 Init 255
    // LocalVar  14 added: Name k2 Type I At 350 67 Range 350 416 Init 350
    // LocalVar  15 added: Name l2 Type I At 354 111 Range 354 464 Init 354
    // LocalVar  16 added: Name flag Type Z At 357 40 Range 357 396 Init 357
    // LocalVar   8 added: Name flag1 Type Z At 360 74 Range 360 433 Init 360
    // LocalVar   8 chged: Name i3 Oname flag1 Type I At 432 2 Range 360 433 Init 360
    // LocalVar  18 added: Name ac2 Type [C At 443 202 Range 443 644 Init 443
    // LocalVar   8 added: Name flag1 Type Z At 446 17 Range 446 462 Init 446
    // LocalVar   8 chged: Name j3 Oname flag1 Type I At 461 2 Range 446 462 Init 446
    // LocalVar  12 added: Name k3 Type I At 470 73 Range 470 542 Init 470
    // LocalVar   8 added: Name flag1 Type Z At 473 68 Range 473 540 Init 473
    // LocalVar   8 chged: Name l3 Oname flag1 Type I At 539 2 Range 473 540 Init 473
    // LocalVar  12 added: Name i4 Type I At 558 75 Range 558 632 Init 558
    // LocalVar   8 added: Name flag1 Type Z At 561 70 Range 561 630 Init 561
    // LocalVar   8 chged: Name j4 Oname flag1 Type I At 629 2 Range 561 630 Init 561
    // LocalVar  11 added: Name c1 Type C At 156 25 Range 156 180 Init 156
    // LocalVar   9 added: Name k4 Type I At 171 53 Range 171 223 Init 171
    // LocalVar  10 added: Name l4 Type I At 184 44 Range 184 227 Init 184
    // LocalVar  11 added: Name c2 Type C At 269 18 Range 269 286 Init 269
    // LocalVar   9 added: Name i5 Type I At 277 53 Range 277 329 Init 277
    // LocalVar  10 added: Name j5 Type I At 290 44 Range 290 333 Init 290
    // LocalVar  17 added: Name c3 Type C At 380 22 Range 380 401 Init 380
    // LocalVar  16 chged: Name k5 Oname flag Type I At 388 2 Range 357 396 Init 357
    // LocalVar  11 added: Name c4 Type C At 484 19 Range 484 502 Init 484
    // LocalVar   9 added: Name l5 Type I At 499 13 Range 499 511 Init 499
    // LocalVar  10 added: Name i6 Type I At 506 9 Range 506 514 Init 506
    // LocalVar  19 added: Name j6 Type I At 516 16 Range 516 531 Init 516
    // LocalVar  11 added: Name c5 Type C At 575 12 Range 575 586 Init 575
    // LocalVar   9 added: Name k6 Type I At 583 13 Range 583 595 Init 583
    // LocalVar  10 added: Name l6 Type I At 590 9 Range 590 598 Init 590
    // LocalVar  19 added: Name i7 Type I At 600 16 Range 600 615 Init 600
    // LocalVar  12 name k3(I) merged out into k1(I)
    // LocalVar  12 name i2(I) merged out into k1(I)
    public void buildUnicodeToOracleMapping()
    {
        m_ucsL1KeyShift = 16 - m_ucsL1KeyWidth;
        m_ucsL1KeyMask = (1 << m_ucsL1KeyWidth) - 1;
        m_ucsL2KeyMask = (1 << m_ucsL1KeyShift) - 1;
        int i = m_oraL1KeyWidth;
        int j = 16 - i;
        int k = (1 << i) - 1;
        int l = (1 << j) - 1;
        m_oraL1KeyShift = j;
        m_oraL1KeyMask = k;
        m_oraL2KeyMask = l;
        int i1 = 1 << i;
        char ac[] = new char[i1];
        char ac1[][] = new char[i1][2];
        for(int j1 = 0; j1 < i1; j1++)
        {
            ac[j1] = '\0';
            ac1[j1][0] = (char)l;
            ac1[j1][1] = '\0';
        }

        int i5 = 0x10000;
        char c4 = m_ucsCharReplacement;
        for(int k1 = 0; k1 < i5; k1++)
        {
            char c = toUnicodeWithReplacement(k1);
            if(c != c4)
            {
                int i3 = c >> j & k;
                ac[i3] = '\001';
                int i4 = c & l;
                if(i4 < ac1[i3][0])
                {
                    ac1[i3][0] = (char)i4;
                }
                if(i4 > ac1[i3][1])
                {
                    ac1[i3][1] = (char)i4;
                }
            }
        }

        if(extraUnicodeToOracleMapping != null)
        {
            i5 = extraUnicodeToOracleMapping.length;
            for(int l1 = 0; l1 < i5; l1++)
            {
                char c1 = extraUnicodeToOracleMapping[l1][0];
                int j3 = c1 >> j & k;
                ac[j3] = '\001';
                int j4 = c1 & l;
                if(j4 < ac1[j3][0])
                {
                    ac1[j3][0] = (char)j4;
                }
                if(j4 > ac1[j3][1])
                {
                    ac1[j3][1] = (char)j4;
                }
            }

        }
        int k5 = l + 1;
        int l5 = k5;
        int i6 = 0;
        for(int i2 = 0; i2 < i1; i2++)
        {
            if(ac[i2] != 0)
            {
                char c5 = ac1[i2][0];
                ac[i2] = (char)(l5 - (i6 >= c5 ? c5 : i6));
                l5 = ac[i2] + k5;
                i6 = k5 - ac1[i2][1] - 1;
            }
        }

        char ac2[] = new char[l5];
        for(int j2 = 0; j2 < l5; j2++)
        {
            ac2[j2] = '\uFFFF';
        }

        i5 = 0x10000;
        for(int k2 = 0; k2 < i5; k2++)
        {
            char c2 = toUnicodeWithReplacement(k2);
            if(c2 != c4)
            {
                int k3 = c2 >> j & k;
                int k4 = c2 & l;
                int j6 = ac[k3] + k4;
                if(ac2[j6] == '\uFFFF')
                {
                    ac2[j6] = (char)k2;
                }
            }
        }

        if(extraUnicodeToOracleMapping != null)
        {
            int j5 = extraUnicodeToOracleMapping.length;
            for(int l2 = 0; l2 < j5; l2++)
            {
                char c3 = extraUnicodeToOracleMapping[l2][0];
                int l3 = c3 >> j & k;
                int l4 = c3 & l;
                int k6 = ac[l3] + l4;
                if(ac2[k6] == '\uFFFF')
                {
                    ac2[k6] = extraUnicodeToOracleMapping[l2][1];
                }
            }

        }
        m_oraCharLevel1 = ac;
        m_oraCharLevel2 = ac2;
        return;
    }

    // Decompiling method: extractCodepoints  Signature: (Ljava/util/Vector;)V
    // Max stack: 4, #locals: 6, #params: 2
    // Code length: 55 bytes, Code offset: 3348
    // Exception table: 1 entries
    //           start  11 end 38 handler 41 type SQLException
    // Line Number Table found: 13 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 55 Range 0 54 Init 0 fixed
    // Parameter  1 added: Name vector Type Ljava/util/Vector; At 0 55 Range 0 54 Init 0
    // RetValue   6 added: Name <returnValue> Type V At 0 55 Range 0 54 Init 0 fixed
    // LocalVar   2 added: Name flag Type Z At 1 5 Range 1 5 Init 1
    // LocalVar   3 added: Name i Type I At 4 47 Range 4 50 Init 4
    // LocalVar   5 added: Name flag1 Type Z At 6 44 Range 6 49 Init 6
    // LocalVar   5 chged: Name j Oname flag1 Type I At 48 2 Range 6 49 Init 6
    // LocalVar   4 added: Name ai Type [I At 14 21 Range 14 34 Init 14
    public void extractCodepoints(Vector vector)
    {
        boolean flag = false;
        int i = 65535;
        for(int j = flag; j <= i; j++)
        {
            try
            {
                int ai[] = new int[2];
                ai[0] = j;
                ai[1] = toUnicode(j);
                vector.addElement(ai);
            }
            catch(SQLException _ex) { }
        }

        return;
    }

    // Decompiling method: extractExtraMappings  Signature: (Ljava/util/Vector;)V
    // Max stack: 4, #locals: 4, #params: 2
    // Code length: 57 bytes, Code offset: 3497
    // Line Number Table found: 9 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 57 Range 0 56 Init 0 fixed
    // Parameter  1 added: Name vector Type Ljava/util/Vector; At 0 57 Range 0 56 Init 0
    // RetValue   4 added: Name <returnValue> Type V At 0 57 Range 0 56 Init 0 fixed
    // LocalVar   3 added: Name flag Type Z At 9 39 Range 9 47 Init 9
    // LocalVar   3 chged: Name i Oname flag Type I At 47 1 Range 9 47 Init 9
    // LocalVar   2 added: Name ai Type [I At 16 25 Range 16 40 Init 16
    public void extractExtraMappings(Vector vector)
    {
        if(extraUnicodeToOracleMapping == null)
        {
            return;
        }
        for(int i = 0; i < extraUnicodeToOracleMapping.length; i++)
        {
            int ai[] = new int[2];
            ai[0] = extraUnicodeToOracleMapping[i][0];
            ai[1] = extraUnicodeToOracleMapping[i][1];
            vector.addElement(ai);
        }

        return;
    }

    // Decompiling method: getOraChar1ByteRep  Signature: ()C
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 5 bytes, Code offset: 3624
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 5 Range 0 4 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type C At 0 5 Range 0 4 Init 0 fixed
    public char getOraChar1ByteRep()
    {
        return m_1ByteOraCharReplacement;
    }

    // Decompiling method: getOraChar2ByteRep  Signature: ()C
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 5 bytes, Code offset: 3667
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 5 Range 0 4 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type C At 0 5 Range 0 4 Init 0 fixed
    public char getOraChar2ByteRep()
    {
        return m_2ByteOraCharReplacement;
    }

    // Decompiling method: getUCS2CharRep  Signature: ()C
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 5 bytes, Code offset: 3710
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 5 Range 0 4 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type C At 0 5 Range 0 4 Init 0 fixed
    public char getUCS2CharRep()
    {
        return m_ucsCharReplacement;
    }

    // Decompiling method: hasExtraMappings  Signature: ()Z
    // Max stack: 1, #locals: 1, #params: 1
    // Code length: 13 bytes, Code offset: 3753
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 13 Range 0 12 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type Z At 0 13 Range 0 12 Init 0 fixed
    public boolean hasExtraMappings()
    {
        return extraUnicodeToOracleMapping != null;
    }

    // Decompiling method: toOracleCharacter  Signature: (C)C
    // Max stack: 3, #locals: 5, #params: 2
    // Code length: 54 bytes, Code offset: 3804
    // Line Number Table found: 6 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 54 Range 0 53 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 54 Range 0 53 Init 0
    // RetValue   5 added: Name <returnValue> Type C At 0 54 Range 0 53 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 11 17 Range 11 27 Init 11
    // LocalVar   3 added: Name j Type I At 18 12 Range 18 29 Init 18
    // LocalVar   4 added: Name c1 Type C At 32 21 Range 32 52 Init 32
    char toOracleCharacter(char c)
        throws SQLException
    {
        int i = c >> m_oraL1KeyShift & m_oraL1KeyMask;
        int j = c & m_oraL2KeyMask;
        char c1 = m_oraCharLevel2[m_oraCharLevel1[i] + j];
        if(c1 == '\uFFFF')
        {
            throw new SQLException("Cannot map Unicode to Oracle character.");
        } else
        {
            return c1;
        }
    }

    // Decompiling method: toOracleCharacterWithReplacement  Signature: (C)C
    // Max stack: 3, #locals: 5, #params: 2
    // Code length: 61 bytes, Code offset: 3926
    // Line Number Table found: 8 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 61 Range 0 60 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 61 Range 0 60 Init 0
    // RetValue   5 added: Name <returnValue> Type C At 0 61 Range 0 60 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 11 17 Range 11 27 Init 11
    // LocalVar   3 added: Name j Type I At 18 12 Range 18 29 Init 18
    // LocalVar   4 added: Name c1 Type C At 32 28 Range 32 59 Init 32
    char toOracleCharacterWithReplacement(char c)
    {
        int i = c >> m_oraL1KeyShift & m_oraL1KeyMask;
        int j = c & m_oraL2KeyMask;
        char c1 = m_oraCharLevel2[m_oraCharLevel1[i] + j];
        if(c1 == '\uFFFF')
        {
            if(c > '\u2FFF')
            {
                return m_2ByteOraCharReplacement;
            } else
            {
                return m_1ByteOraCharReplacement;
            }
        } else
        {
            return c1;
        }
    }

    // Decompiling method: toOracleString  Signature: (Ljava/lang/String;)[B
    // Max stack: 5, #locals: 10, #params: 2
    // Code length: 127 bytes, Code offset: 4053
    // Line Number Table found: 23 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 127 Range 0 126 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 127 Range 0 126 Init 0
    // RetValue  10 added: Name <returnValue> Type [B At 0 127 Range 0 126 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 4 89 Range 4 92 Init 4
    // LocalVar   3 added: Name ac Type [C At 16 27 Range 16 42 Init 16
    // LocalVar   4 added: Name abyte0 Type [B At 30 96 Range 30 125 Init 30
    // LocalVar   7 added: Name flag Type Z At 33 85 Range 33 117 Init 33
    // LocalVar   8 added: Name flag1 Type Z At 36 56 Range 36 91 Init 36
    // LocalVar   8 chged: Name j Oname flag1 Type I At 90 2 Range 36 91 Init 36
    // LocalVar   7 chged: Name k Oname flag Type I At 96 2 Range 33 117 Init 33
    // LocalVar   9 added: Name abyte1 Type [B At 108 15 Range 108 122 Init 108
    // LocalVar   5 added: Name c Type C At 49 36 Range 49 84 Init 49
    // LocalVar   6 added: Name l Type I At 57 14 Range 57 70 Init 57
    public byte[] toOracleString(String s)
        throws SQLException
    {
        int i = s.length();
        if(i == 0)
        {
            return new byte[0];
        }
        char ac[] = new char[i];
        s.getChars(0, i, ac, 0);
        byte abyte0[] = new byte[i * 2];
        int k = 0;
        for(int l = 0; l < i; l++)
        {
            char c = toOracleCharacter(ac[l]);
            int j;
            if((j = c & 0xff00) != 0)
            {
                abyte0[k++] = (byte)(j >> 8);
            }
            abyte0[k++] = (byte)c;
        }

        if(k < abyte0.length)
        {
            byte abyte1[] = new byte[k];
            System.arraycopy(abyte0, 0, abyte1, 0, k);
            return abyte1;
        } else
        {
            return abyte0;
        }
    }

    // Decompiling method: toOracleStringWithReplacement  Signature: (Ljava/lang/String;)[B
    // Max stack: 5, #locals: 10, #params: 2
    // Code length: 127 bytes, Code offset: 4316
    // Line Number Table found: 23 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 127 Range 0 126 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 127 Range 0 126 Init 0
    // RetValue  10 added: Name <returnValue> Type [B At 0 127 Range 0 126 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 4 89 Range 4 92 Init 4
    // LocalVar   3 added: Name ac Type [C At 16 27 Range 16 42 Init 16
    // LocalVar   4 added: Name abyte0 Type [B At 30 96 Range 30 125 Init 30
    // LocalVar   7 added: Name flag Type Z At 33 85 Range 33 117 Init 33
    // LocalVar   8 added: Name flag1 Type Z At 36 56 Range 36 91 Init 36
    // LocalVar   8 chged: Name j Oname flag1 Type I At 90 2 Range 36 91 Init 36
    // LocalVar   7 chged: Name k Oname flag Type I At 96 2 Range 33 117 Init 33
    // LocalVar   9 added: Name abyte1 Type [B At 108 15 Range 108 122 Init 108
    // LocalVar   5 added: Name c Type C At 49 36 Range 49 84 Init 49
    // LocalVar   6 added: Name l Type I At 57 14 Range 57 70 Init 57
    public byte[] toOracleStringWithReplacement(String s)
    {
        int i = s.length();
        if(i == 0)
        {
            return new byte[0];
        }
        char ac[] = new char[i];
        s.getChars(0, i, ac, 0);
        byte abyte0[] = new byte[i * 2];
        int k = 0;
        for(int l = 0; l < i; l++)
        {
            char c = toOracleCharacterWithReplacement(ac[l]);
            int j;
            if((j = c & 0xff00) != 0)
            {
                abyte0[k++] = (byte)(j >> 8);
            }
            abyte0[k++] = (byte)c;
        }

        if(k < abyte0.length)
        {
            byte abyte1[] = new byte[k];
            System.arraycopy(abyte0, 0, abyte1, 0, k);
            return abyte1;
        } else
        {
            return abyte0;
        }
    }

    // Decompiling method: toUnicode  Signature: (I)C
    // Max stack: 3, #locals: 5, #params: 2
    // Code length: 56 bytes, Code offset: 4569
    // Line Number Table found: 6 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 56 Range 0 55 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 56 Range 0 55 Init 0
    // RetValue   5 added: Name <returnValue> Type C At 0 56 Range 0 55 Init 0 fixed
    // LocalVar   2 added: Name j Type I At 11 17 Range 11 27 Init 11
    // LocalVar   3 added: Name k Type I At 18 12 Range 18 29 Init 18
    // LocalVar   4 added: Name c Type C At 32 23 Range 32 54 Init 32
    char toUnicode(int i)
        throws SQLException
    {
        int j = i >> m_ucsL1KeyShift & m_ucsL1KeyMask;
        int k = i & m_ucsL2KeyMask;
        char c = m_ucsCharLevel2[m_ucsCharLevel1[j] + k];
        if(c == m_ucsCharReplacement)
        {
            throw new SQLException("Cannot map Oracle character to Unicode.");
        } else
        {
            return c;
        }
    }

    // Decompiling method: toUnicodeString  Signature: ([BII)Ljava/lang/String;
    // Max stack: 5, #locals: 9, #params: 4
    // Code length: 121 bytes, Code offset: 4693
    // Line Number Table found: 18 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 121 Range 0 120 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 121 Range 0 120 Init 0
    // Parameter  2 added: Name i Type I At 0 121 Range 0 120 Init 0
    // Parameter  3 added: Name j Type I At 0 121 Range 0 120 Init 0
    // RetValue   9 added: Name <returnValue> Type Ljava/lang/String; At 0 121 Range 0 120 Init 0 fixed
    // LocalVar   4 added: Name k Type I At 3 102 Range 3 104 Init 3
    // LocalVar   5 added: Name ac Type [C At 8 106 Range 8 113 Init 8
    // LocalVar   6 added: Name l Type I At 11 92 Range 11 102 Init 11
    // LocalVar   7 added: Name flag Type Z At 14 103 Range 14 116 Init 14
    // LocalVar   7 chged: Name i1 Oname flag Type I At 115 2 Range 14 116 Init 14
    // LocalVar   8 added: Name j1 Type I At 27 67 Range 27 93 Init 27
    public String toUnicodeString(byte abyte0[], int i, int j)
        throws SQLException
    {
        int k = i + j;
        char ac[] = new char[j];
        int l = i;
        int i1 = 0;
        for(; l < k; l++)
        {
            int j1 = abyte0[l] & 0xff;
            if(j1 > 127)
            {
                if(l < k - 1)
                {
                    j1 = abyte0[l] << 8 & 0xff00 | abyte0[l + 1] & 0xff;
                    l++;
                } else
                {
                    throw new SQLException("Cannot map Oracle character to Unicode.");
                }
            }
            ac[i1++] = toUnicode(j1);
        }

        return new String(ac, 0, i1);
    }

    // Decompiling method: toUnicodeStringWithReplacement  Signature: ([BII)Ljava/lang/String;
    // Max stack: 5, #locals: 9, #params: 4
    // Code length: 108 bytes, Code offset: 4930
    // Line Number Table found: 16 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 108 Range 0 107 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 108 Range 0 107 Init 0
    // Parameter  2 added: Name i Type I At 0 108 Range 0 107 Init 0
    // Parameter  3 added: Name j Type I At 0 108 Range 0 107 Init 0
    // RetValue   9 added: Name <returnValue> Type Ljava/lang/String; At 0 108 Range 0 107 Init 0 fixed
    // LocalVar   4 added: Name k Type I At 3 89 Range 3 91 Init 3
    // LocalVar   5 added: Name ac Type [C At 8 93 Range 8 100 Init 8
    // LocalVar   6 added: Name l Type I At 11 79 Range 11 89 Init 11
    // LocalVar   7 added: Name flag Type Z At 14 90 Range 14 103 Init 14
    // LocalVar   7 chged: Name i1 Oname flag Type I At 102 2 Range 14 103 Init 14
    // LocalVar   8 added: Name j1 Type I At 27 54 Range 27 80 Init 27
    public String toUnicodeStringWithReplacement(byte abyte0[], int i, int j)
    {
        int k = i + j;
        char ac[] = new char[j];
        int l = i;
        int i1 = 0;
        for(; l < k; l++)
        {
            int j1 = abyte0[l] & 0xff;
            if(j1 > 127)
            {
                if(k - l < 2)
                {
                    break;
                }
                j1 = abyte0[l] << 8 & 0xff00 | abyte0[l + 1] & 0xff;
                l++;
            }
            ac[i1++] = toUnicodeWithReplacement(j1);
        }

        return new String(ac, 0, i1);
    }

    // Decompiling method: toUnicodeWithReplacement  Signature: (I)C
    // Max stack: 3, #locals: 4, #params: 2
    // Code length: 33 bytes, Code offset: 5136
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverter12Byte; At 0 33 Range 0 32 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 33 Range 0 32 Init 0
    // RetValue   4 added: Name <returnValue> Type C At 0 33 Range 0 32 Init 0 fixed
    // LocalVar   2 added: Name j Type I At 11 17 Range 11 27 Init 11
    // LocalVar   3 added: Name k Type I At 18 12 Range 18 29 Init 18
    char toUnicodeWithReplacement(int i)
    {
        int j = i >> m_ucsL1KeyShift & m_ucsL1KeyMask;
        int k = i & m_ucsL2KeyMask;
        return m_ucsCharLevel2[m_ucsCharLevel1[j] + k];
    }
}
