// 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:   CharacterConverterGB18030.java
// Class Version:      45.3

package oracle.sql.converter;

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

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

// flag ACC_SUPER is set
public class CharacterConverterGB18030 extends CharacterConverter12Byte
{
    // Constants:          330
    // Interfaces:         0
    // Fields:             9
    // Methods:            25
    // Class Attributes:   1


    static final int BMPSTART = 0x81308130;
    static final int BMPEND = 0x8431a439;
    static final int GBBMPSTART = 0x19beb2;
    static final int GBBMPEND = 0x1a58ad;
    static final int USURSTART = 0x10000;
    static final int USUREND = 0x10ffff;
    static final int GBSURSTART = 0x1ca0fa;
    static final int GBSUREND = 0x2ca0f9;
    static char gbMapping[][] = {
        {
            '\200', '\243', '\0', '#'
        }, {
            '\245', '\246', '$', '%'
        }, {
            '\251', '\257', '&', ','
        }, {
            '\262', '\266', '-', '1'
        }, {
            '\270', '\326', '2', 'P'
        }, {
            '\330', '\337', 'Q', 'X'
        }, {
            '\342', '\347', 'Y', '^'
        }, {
            '\353', '\353', '_', '_'
        }, {
            '\356', '\361', '`', 'c'
        }, {
            '\364', '\366', 'd', 'f'
        }, {
            '\370', '\370', 'g', 'g'
        }, {
            '\373', '\373', 'h', 'h'
        }, {
            '\375', '\u0100', 'i', 'l'
        }, {
            '\u0102', '\u0112', 'm', '}'
        }, {
            '\u0114', '\u011A', '~', '\204'
        }, {
            '\u011C', '\u012A', '\205', '\223'
        }, {
            '\u012C', '\u0143', '\224', '\253'
        }, {
            '\u0145', '\u0147', '\254', '\256'
        }, {
            '\u0149', '\u014C', '\257', '\262'
        }, {
            '\u014E', '\u016A', '\263', '\317'
        }, {
            '\u016C', '\u01CD', '\320', '\u0131'
        }, {
            '\u01CF', '\u01CF', '\u0132', '\u0132'
        }, {
            '\u01D1', '\u01D1', '\u0133', '\u0133'
        }, {
            '\u01D3', '\u01D3', '\u0134', '\u0134'
        }, {
            '\u01D5', '\u01D5', '\u0135', '\u0135'
        }, {
            '\u01D7', '\u01D7', '\u0136', '\u0136'
        }, {
            '\u01D9', '\u01D9', '\u0137', '\u0137'
        }, {
            '\u01DB', '\u01DB', '\u0138', '\u0138'
        }, {
            '\u01DD', '\u01F8', '\u0139', '\u0154'
        }, {
            '\u01FA', '\u0250', '\u0155', '\u01AB'
        }, {
            '\u0252', '\u0260', '\u01AC', '\u01BA'
        }, {
            '\u0262', '\u02C6', '\u01BB', '\u021F'
        }, {
            '\u02C8', '\u02C8', '\u0220', '\u0220'
        }, {
            '\u02CC', '\u02D8', '\u0221', '\u022D'
        }, {
            '\u02DA', '\u0390', '\u022E', '\u02E4'
        }, {
            '\u03A2', '\u03A2', '\u02E5', '\u02E5'
        }, {
            '\u03AA', '\u03B0', '\u02E6', '\u02EC'
        }, {
            '\u03C2', '\u03C2', '\u02ED', '\u02ED'
        }, {
            '\u03CA', '\u0400', '\u02EE', '\u0324'
        }, {
            '\u0402', '\u040F', '\u0325', '\u0332'
        }, {
            '\u0450', '\u0450', '\u0333', '\u0333'
        }, {
            '\u0452', '\u200F', '\u0334', '\u1EF1'
        }, {
            '\u2011', '\u2012', '\u1EF2', '\u1EF3'
        }, {
            '\u2017', '\u2017', '\u1EF4', '\u1EF4'
        }, {
            '\u201A', '\u201B', '\u1EF5', '\u1EF6'
        }, {
            '\u201E', '\u2024', '\u1EF7', '\u1EFD'
        }, {
            '\u2027', '\u202F', '\u1EFE', '\u1F06'
        }, {
            '\u2031', '\u2031', '\u1F07', '\u1F07'
        }, {
            '\u2034', '\u2034', '\u1F08', '\u1F08'
        }, {
            '\u2036', '\u203A', '\u1F09', '\u1F0D'
        }, {
            '\u203C', '\u20AB', '\u1F0E', '\u1F7D'
        }, {
            '\u20AD', '\u2102', '\u1F7E', '\u1FD3'
        }, {
            '\u2104', '\u2104', '\u1FD4', '\u1FD4'
        }, {
            '\u2106', '\u2108', '\u1FD5', '\u1FD7'
        }, {
            '\u210A', '\u2115', '\u1FD8', '\u1FE3'
        }, {
            '\u2117', '\u2120', '\u1FE4', '\u1FED'
        }, {
            '\u2122', '\u215F', '\u1FEE', '\u202B'
        }, {
            '\u216C', '\u216F', '\u202C', '\u202F'
        }, {
            '\u217A', '\u218F', '\u2030', '\u2045'
        }, {
            '\u2194', '\u2195', '\u2046', '\u2047'
        }, {
            '\u219A', '\u2207', '\u2048', '\u20B5'
        }, {
            '\u2209', '\u220E', '\u20B6', '\u20BB'
        }, {
            '\u2210', '\u2210', '\u20BC', '\u20BC'
        }, {
            '\u2212', '\u2214', '\u20BD', '\u20BF'
        }, {
            '\u2216', '\u2219', '\u20C0', '\u20C3'
        }, {
            '\u221B', '\u221C', '\u20C4', '\u20C5'
        }, {
            '\u2221', '\u2222', '\u20C6', '\u20C7'
        }, {
            '\u2224', '\u2224', '\u20C8', '\u20C8'
        }, {
            '\u2226', '\u2226', '\u20C9', '\u20C9'
        }, {
            '\u222C', '\u222D', '\u20CA', '\u20CB'
        }, {
            '\u222F', '\u2233', '\u20CC', '\u20D0'
        }, {
            '\u2238', '\u223C', '\u20D1', '\u20D5'
        }, {
            '\u223E', '\u2247', '\u20D6', '\u20DF'
        }, {
            '\u2249', '\u224B', '\u20E0', '\u20E2'
        }, {
            '\u224D', '\u2251', '\u20E3', '\u20E7'
        }, {
            '\u2253', '\u225F', '\u20E8', '\u20F4'
        }, {
            '\u2262', '\u2263', '\u20F5', '\u20F6'
        }, {
            '\u2268', '\u226D', '\u20F7', '\u20FC'
        }, {
            '\u2270', '\u2294', '\u20FD', '\u2121'
        }, {
            '\u2296', '\u2298', '\u2122', '\u2124'
        }, {
            '\u229A', '\u22A4', '\u2125', '\u212F'
        }, {
            '\u22A6', '\u22BE', '\u2130', '\u2148'
        }, {
            '\u22C0', '\u2311', '\u2149', '\u219A'
        }, {
            '\u2313', '\u245F', '\u219B', '\u22E7'
        }, {
            '\u246A', '\u2473', '\u22E8', '\u22F1'
        }, {
            '\u249C', '\u24FF', '\u22F2', '\u2355'
        }, {
            '\u254C', '\u254F', '\u2356', '\u2359'
        }, {
            '\u2574', '\u2580', '\u235A', '\u2366'
        }, {
            '\u2590', '\u2592', '\u2367', '\u2369'
        }, {
            '\u2596', '\u259F', '\u236A', '\u2373'
        }, {
            '\u25A2', '\u25B1', '\u2374', '\u2383'
        }, {
            '\u25B4', '\u25BB', '\u2384', '\u238B'
        }, {
            '\u25BE', '\u25C5', '\u238C', '\u2393'
        }, {
            '\u25C8', '\u25CA', '\u2394', '\u2396'
        }, {
            '\u25CC', '\u25CD', '\u2397', '\u2398'
        }, {
            '\u25D0', '\u25E1', '\u2399', '\u23AA'
        }, {
            '\u25E6', '\u2604', '\u23AB', '\u23C9'
        }, {
            '\u2607', '\u2608', '\u23CA', '\u23CB'
        }, {
            '\u260A', '\u263F', '\u23CC', '\u2401'
        }, {
            '\u2641', '\u2641', '\u2402', '\u2402'
        }, {
            '\u2643', '\u2E80', '\u2403', '\u2C40'
        }, {
            '\u2E82', '\u2E83', '\u2C41', '\u2C42'
        }, {
            '\u2E85', '\u2E87', '\u2C43', '\u2C45'
        }, {
            '\u2E89', '\u2E8A', '\u2C46', '\u2C47'
        }, {
            '\u2E8D', '\u2E96', '\u2C48', '\u2C51'
        }, {
            '\u2E98', '\u2EA6', '\u2C52', '\u2C60'
        }, {
            '\u2EA8', '\u2EA9', '\u2C61', '\u2C62'
        }, {
            '\u2EAB', '\u2EAD', '\u2C63', '\u2C65'
        }, {
            '\u2EAF', '\u2EB2', '\u2C66', '\u2C69'
        }, {
            '\u2EB4', '\u2EB5', '\u2C6A', '\u2C6B'
        }, {
            '\u2EB8', '\u2EBA', '\u2C6C', '\u2C6E'
        }, {
            '\u2EBC', '\u2EC9', '\u2C6F', '\u2C7C'
        }, {
            '\u2ECB', '\u2FEF', '\u2C7D', '\u2DA1'
        }, {
            '\u2FFC', '\u2FFF', '\u2DA2', '\u2DA5'
        }, {
            '\u3004', '\u3004', '\u2DA6', '\u2DA6'
        }, {
            '\u3018', '\u301C', '\u2DA7', '\u2DAB'
        }, {
            '\u301F', '\u3020', '\u2DAC', '\u2DAD'
        }, {
            '\u302A', '\u303D', '\u2DAE', '\u2DC1'
        }, {
            '\u303F', '\u3040', '\u2DC2', '\u2DC3'
        }, {
            '\u3094', '\u309A', '\u2DC4', '\u2DCA'
        }, {
            '\u309F', '\u30A0', '\u2DCB', '\u2DCC'
        }, {
            '\u30F7', '\u30FB', '\u2DCD', '\u2DD1'
        }, {
            '\u30FF', '\u3104', '\u2DD2', '\u2DD7'
        }, {
            '\u312A', '\u321F', '\u2DD8', '\u2ECD'
        }, {
            '\u322A', '\u3230', '\u2ECE', '\u2ED4'
        }, {
            '\u3232', '\u32A2', '\u2ED5', '\u2F45'
        }, {
            '\u32A4', '\u338D', '\u2F46', '\u302F'
        }, {
            '\u3390', '\u339B', '\u3030', '\u303B'
        }, {
            '\u339F', '\u33A0', '\u303C', '\u303D'
        }, {
            '\u33A2', '\u33C3', '\u303E', '\u305F'
        }, {
            '\u33C5', '\u33CD', '\u3060', '\u3068'
        }, {
            '\u33CF', '\u33D0', '\u3069', '\u306A'
        }, {
            '\u33D3', '\u33D4', '\u306B', '\u306C'
        }, {
            '\u33D6', '\u3446', '\u306D', '\u30DD'
        }, {
            '\u3448', '\u3472', '\u30DE', '\u3108'
        }, {
            '\u3474', '\u359D', '\u3109', '\u3232'
        }, {
            '\u359F', '\u360D', '\u3233', '\u32A1'
        }, {
            '\u360F', '\u3619', '\u32A2', '\u32AC'
        }, {
            '\u361B', '\u3917', '\u32AD', '\u35A9'
        }, {
            '\u3919', '\u396D', '\u35AA', '\u35FE'
        }, {
            '\u396F', '\u39CE', '\u35FF', '\u365E'
        }, {
            '\u39D1', '\u39DE', '\u365F', '\u366C'
        }, {
            '\u39E0', '\u3A72', '\u366D', '\u36FF'
        }, {
            '\u3A74', '\u3B4D', '\u3700', '\u37D9'
        }, {
            '\u3B4F', '\u3C6D', '\u37DA', '\u38F8'
        }, {
            '\u3C6F', '\u3CDF', '\u38F9', '\u3969'
        }, {
            '\u3CE1', '\u4055', '\u396A', '\u3CDE'
        }, {
            '\u4057', '\u415E', '\u3CDF', '\u3DE6'
        }, {
            '\u4160', '\u4336', '\u3DE7', '\u3FBD'
        }, {
            '\u4338', '\u43AB', '\u3FBE', '\u4031'
        }, {
            '\u43AD', '\u43B0', '\u4032', '\u4035'
        }, {
            '\u43B2', '\u43DC', '\u4036', '\u4060'
        }, {
            '\u43DE', '\u44D5', '\u4061', '\u4158'
        }, {
            '\u44D7', '\u464B', '\u4159', '\u42CD'
        }, {
            '\u464D', '\u4660', '\u42CE', '\u42E1'
        }, {
            '\u4662', '\u4722', '\u42E2', '\u43A2'
        }, {
            '\u4724', '\u4728', '\u43A3', '\u43A7'
        }, {
            '\u472A', '\u477B', '\u43A8', '\u43F9'
        }, {
            '\u477D', '\u478C', '\u43FA', '\u4409'
        }, {
            '\u478E', '\u4946', '\u440A', '\u45C2'
        }, {
            '\u4948', '\u4979', '\u45C3', '\u45F4'
        }, {
            '\u497B', '\u497C', '\u45F5', '\u45F6'
        }, {
            '\u497E', '\u4981', '\u45F7', '\u45FA'
        }, {
            '\u4984', '\u4984', '\u45FB', '\u45FB'
        }, {
            '\u4987', '\u499A', '\u45FC', '\u460F'
        }, {
            '\u499C', '\u499E', '\u4610', '\u4612'
        }, {
            '\u49A0', '\u49B5', '\u4613', '\u4628'
        }, {
            '\u49B8', '\u4C76', '\u4629', '\u48E7'
        }, {
            '\u4C78', '\u4C9E', '\u48E8', '\u490E'
        }, {
            '\u4CA4', '\u4D12', '\u490F', '\u497D'
        }, {
            '\u4D1A', '\u4DAD', '\u497E', '\u4A11'
        }, {
            '\u4DAF', '\u4DFF', '\u4A12', '\u4A62'
        }, {
            '\u9FA6', '\uD7FF', '\u4A63', '\u82BC'
        }, {
            '\uE76C', '\uE76C', '\u82BD', '\u82BD'
        }, {
            '\uE7C8', '\uE7C8', '\u82BE', '\u82BE'
        }, {
            '\uE7E7', '\uE7F3', '\u82BF', '\u82CB'
        }, {
            '\uE815', '\uE815', '\u82CC', '\u82CC'
        }, {
            '\uE819', '\uE81D', '\u82CD', '\u82D1'
        }, {
            '\uE81F', '\uE825', '\u82D2', '\u82D8'
        }, {
            '\uE827', '\uE82A', '\u82D9', '\u82DC'
        }, {
            '\uE82D', '\uE830', '\u82DD', '\u82E0'
        }, {
            '\uE833', '\uE83A', '\u82E1', '\u82E8'
        }, {
            '\uE83C', '\uE842', '\u82E9', '\u82EF'
        }, {
            '\uE844', '\uE853', '\u82F0', '\u82FF'
        }, {
            '\uE856', '\uE863', '\u8300', '\u830D'
        }, {
            '\uE865', '\uF92B', '\u830E', '\u93D4'
        }, {
            '\uF92D', '\uF978', '\u93D5', '\u9420'
        }, {
            '\uF97A', '\uF994', '\u9421', '\u943B'
        }, {
            '\uF996', '\uF9E6', '\u943C', '\u948C'
        }, {
            '\uF9E8', '\uF9F0', '\u948D', '\u9495'
        }, {
            '\uF9F2', '\uFA0B', '\u9496', '\u94AF'
        }, {
            '\uFA10', '\uFA10', '\u94B0', '\u94B0'
        }, {
            '\uFA12', '\uFA12', '\u94B1', '\u94B1'
        }, {
            '\uFA15', '\uFA17', '\u94B2', '\u94B4'
        }, {
            '\uFA19', '\uFA1E', '\u94B5', '\u94BA'
        }, {
            '\uFA22', '\uFA22', '\u94BB', '\u94BB'
        }, {
            '\uFA25', '\uFA26', '\u94BC', '\u94BD'
        }, {
            '\uFA2A', '\uFE2F', '\u94BE', '\u98C3'
        }, {
            '\uFE32', '\uFE32', '\u98C4', '\u98C4'
        }, {
            '\uFE45', '\uFE48', '\u98C5', '\u98C8'
        }, {
            '\uFE53', '\uFE53', '\u98C9', '\u98C9'
        }, {
            '\uFE58', '\uFE58', '\u98CA', '\u98CA'
        }, {
            '\uFE67', '\uFE67', '\u98CB', '\u98CB'
        }, {
            '\uFE6C', '\uFF00', '\u98CC', '\u9960'
        }, {
            '\uFF5F', '\uFFDF', '\u9961', '\u99E1'
        }, {
            '\uFFE6', '\uFFFF', '\u99E2', '\u99FB'
        }
    };

    // Decompiling method: <init>  Signature: ()V
    // Max stack: 2, #locals: 1, #params: 1
    // Code length: 11 bytes, Code offset: 11168
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 11 Range 0 10 Init 0 fixed
    // RetValue   1 added: Name <returnValue> Type V At 0 11 Range 0 10 Init 0 fixed
    public CharacterConverterGB18030()
    {
        super();
        m_groupId = 9;
        return;
    }

    // Decompiling method: bMPLinear  Signature: (I)I
    // Max stack: 3, #locals: 2, #params: 2
    // Code length: 45 bytes, Code offset: 11225
    // Line Number Table found: 12 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 45 Range 0 44 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 45 Range 0 44 Init 0
    // RetValue   2 added: Name <returnValue> Type I At 0 45 Range 0 44 Init 0 fixed
    private int bMPLinear(int i)
    {
        return ((((i >> 24 & 0xff) * 10 + (i >> 16 & 0xff)) * 126 + (i >> 8 & 0xff)) * 10 + (i & 0xff)) - 0x19beb2;
    }

    // Decompiling method: bMPOracle2Unicode  Signature: (I)I
    // Max stack: 3, #locals: 3, #params: 2
    // Code length: 21 bytes, Code offset: 11352
    // Line Number Table found: 4 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 21 Range 0 20 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 21 Range 0 20 Init 0
    // RetValue   3 added: Name <returnValue> Type I At 0 21 Range 0 20 Init 0 fixed
    // LocalVar   2 added: Name j Type I At 11 9 Range 11 19 Init 11
    private int bMPOracle2Unicode(int i)
    {
        int j = searchgbMapping((char)bMPLinear(i), false);
        if(j == -1)
        {
            return 0;
        } else
        {
            return j;
        }
    }

    // Decompiling method: bMPUnicode2Oracle  Signature: (C)I
    // Max stack: 3, #locals: 3, #params: 2
    // Code length: 20 bytes, Code offset: 11423
    // Line Number Table found: 4 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 20 Range 0 19 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 20 Range 0 19 Init 0
    // RetValue   3 added: Name <returnValue> Type I At 0 20 Range 0 19 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 6 10 Range 6 15 Init 6
    private int bMPUnicode2Oracle(char c)
    {
        int i = searchgbMapping(c, true);
        if(i == -1)
        {
            return 0;
        } else
        {
            return bMPunLinear(i);
        }
    }

    // Decompiling method: bMPunLinear  Signature: (I)I
    // Max stack: 4, #locals: 3, #params: 2
    // Code length: 81 bytes, Code offset: 11493
    // Line Number Table found: 9 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 81 Range 0 80 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 81 Range 0 80 Init 0
    // RetValue   3 added: Name <returnValue> Type I At 0 81 Range 0 80 Init 0 fixed
    // LocalVar   2 added: Name flag Type Z At 1 1 Range 1 1 Init 1
    // LocalVar   2 added: Name j Type I At 13 7 Range 13 19 Init 13
    // LocalVar   2 added: Name k Type I At 36 7 Range 36 42 Init 36
    // LocalVar   2 added: Name l Type I At 58 7 Range 58 64 Init 58
    // LocalVar   2 added: Name i1 Type I At 78 2 Range 78 79 Init 78
    // LocalVar   2 chged: Name j1 Oname flag Type I At 1 1 Range 1 1 Init 1
    // LocalVar   2 name j(I) merged out into j1(I)
    // LocalVar   2 name k(I) merged out into j1(I)
    // LocalVar   2 name l(I) merged out into j1(I)
    // LocalVar   2 name i1(I) merged out into j1(I)
    private int bMPunLinear(int i)
    {
        int j = 0;
        j = 48 + i % 10 & 0xff;
        i /= 10;
        j += (129 + i % 126 & 0xff) << 8;
        i /= 126;
        j += (48 + i % 10 & 0xff) << 16;
        i /= 10;
        j += (129 + i & 0xff) << 24;
        return j;
    }

    // Decompiling method: buildUnicodeToOracleMapping  Signature: ()V
    // Max stack: 5, #locals: 20, #params: 1
    // Code length: 651 bytes, Code offset: 11644
    // Line Number Table found: 85 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 651 Range 0 650 Init 0 fixed
    // RetValue  20 added: Name <returnValue> Type V At 0 651 Range 0 650 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 538 Range 44 581 Init 44
    // LocalVar   3 added: Name k Type I At 50 534 Range 50 583 Init 50
    // LocalVar   4 added: Name l Type I At 56 535 Range 56 590 Init 56
    // LocalVar   5 added: Name i1 Type I At 77 360 Range 77 436 Init 77
    // LocalVar   6 added: Name ac Type [C At 83 558 Range 83 640 Init 83
    // LocalVar   7 added: Name ac1 Type [[C At 92 328 Range 92 419 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 102 Range 136 237 Init 136
    // LocalVar  13 added: Name c Type C At 142 350 Range 142 491 Init 142
    // LocalVar   8 added: Name flag Type Z At 145 91 Range 145 235 Init 145
    // LocalVar   8 chged: Name l1 Oname flag Type I At 234 2 Range 145 235 Init 145
    // LocalVar  12 added: Name i2 Type I At 253 91 Range 253 343 Init 253
    // LocalVar   8 added: Name flag Type Z At 256 86 Range 256 341 Init 256
    // LocalVar   8 chged: Name j2 Oname flag Type I At 340 2 Range 256 341 Init 256
    // LocalVar  14 added: Name k2 Type I At 351 67 Range 351 417 Init 351
    // LocalVar  15 added: Name l2 Type I At 355 111 Range 355 465 Init 355
    // LocalVar  16 added: Name flag Type Z At 358 40 Range 358 397 Init 358
    // LocalVar   8 added: Name flag1 Type Z At 361 74 Range 361 434 Init 361
    // LocalVar   8 chged: Name i3 Oname flag1 Type I At 433 2 Range 361 434 Init 361
    // LocalVar  18 added: Name ac2 Type [C At 444 203 Range 444 646 Init 444
    // LocalVar   8 added: Name flag1 Type Z At 447 17 Range 447 463 Init 447
    // LocalVar   8 chged: Name j3 Oname flag1 Type I At 462 2 Range 447 463 Init 447
    // LocalVar  12 added: Name k3 Type I At 471 74 Range 471 544 Init 471
    // LocalVar   8 added: Name flag1 Type Z At 474 69 Range 474 542 Init 474
    // LocalVar   8 chged: Name l3 Oname flag1 Type I At 541 2 Range 474 542 Init 474
    // LocalVar  12 added: Name i4 Type I At 560 75 Range 560 634 Init 560
    // LocalVar   8 added: Name flag1 Type Z At 563 70 Range 563 632 Init 563
    // LocalVar   8 chged: Name j4 Oname flag1 Type I At 631 2 Range 563 632 Init 563
    // LocalVar  11 added: Name c1 Type C At 157 25 Range 157 181 Init 157
    // LocalVar   9 added: Name k4 Type I At 172 53 Range 172 224 Init 172
    // LocalVar  10 added: Name l4 Type I At 185 44 Range 185 228 Init 185
    // LocalVar  11 added: Name c2 Type C At 270 18 Range 270 287 Init 270
    // LocalVar   9 added: Name i5 Type I At 278 53 Range 278 330 Init 278
    // LocalVar  10 added: Name j5 Type I At 291 44 Range 291 334 Init 291
    // LocalVar  17 added: Name c3 Type C At 381 22 Range 381 402 Init 381
    // LocalVar  16 chged: Name k5 Oname flag Type I At 389 2 Range 358 397 Init 358
    // LocalVar  11 added: Name c4 Type C At 486 19 Range 486 504 Init 486
    // LocalVar   9 added: Name l5 Type I At 501 13 Range 501 513 Init 501
    // LocalVar  10 added: Name i6 Type I At 508 9 Range 508 516 Init 508
    // LocalVar  19 added: Name j6 Type I At 518 16 Range 518 533 Init 518
    // LocalVar  11 added: Name c5 Type C At 577 12 Range 577 588 Init 577
    // LocalVar   9 added: Name k6 Type I At 585 13 Range 585 597 Init 585
    // LocalVar  10 added: Name l6 Type I At 592 9 Range 592 600 Init 592
    // LocalVar  19 added: Name i7 Type I At 602 16 Range 602 617 Init 602
    // 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 = (char)toUnicodeWithReplacementGB(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 = (char)toUnicodeWithReplacementGB(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: 56 bytes, Code offset: 12669
    // Exception table: 1 entries
    //           start  11 end 39 handler 42 type SQLException
    // Line Number Table found: 13 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 56 Range 0 55 Init 0 fixed
    // Parameter  1 added: Name vector Type Ljava/util/Vector; At 0 56 Range 0 55 Init 0
    // RetValue   6 added: Name <returnValue> Type V At 0 56 Range 0 55 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 48 Range 4 51 Init 4
    // LocalVar   5 added: Name flag1 Type Z At 6 45 Range 6 50 Init 6
    // LocalVar   5 chged: Name j Oname flag1 Type I At 49 2 Range 6 50 Init 6
    // LocalVar   4 added: Name ai Type [I At 14 22 Range 14 35 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] = (char)toUnicodeGB(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: 12819
    // Line Number Table found: 9 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; 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: 12946
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; 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: 12989
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; 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: 13032
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; 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: 13075
    // Line Number Table found: 1 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; 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: main  Signature: ([Ljava/lang/String;)V
    // Max stack: 4, #locals: 2, #params: 1
    // Code length: 170 bytes, Code offset: 13126
    // Line Number Table found: 14 entries
    // Parameter  0 added: Name args Type [Ljava/lang/String; At 0 170 Range 0 169 Init 0
    // RetValue   2 added: Name <returnValue> Type V At 0 170 Range 0 169 Init 0 fixed
    // LocalVar   1 added: Name characterconvertergb18030 Type Loracle/sql/converter/CharacterConverterGB18030; At 7 154 Range 7 160 Init 7
    public static void main(String args[])
        throws SQLException
    {
        CharacterConverterGB18030 characterconvertergb18030 = new CharacterConverterGB18030();
        System.out.println(characterconvertergb18030.bMPLinear(0x81308130));
        System.out.println(characterconvertergb18030.bMPunLinear(characterconvertergb18030.bMPLinear(0x81308130)));
        System.out.println(characterconvertergb18030.bMPLinear(0x90308130));
        System.out.println(characterconvertergb18030.bMPunLinear(characterconvertergb18030.bMPLinear(0x90308130)));
        System.out.println(characterconvertergb18030.bMPUnicode2Oracle('\200'));
        System.out.println(characterconvertergb18030.bMPOracle2Unicode(0x81308b39));
        System.out.println(characterconvertergb18030.toOracleCharacterWithReplacement('\uD800', '\uDC00'));
        System.out.println(characterconvertergb18030.toOracleCharacterWithReplacement('\uDBFF', '\uDFFF'));
        System.out.println(characterconvertergb18030.toOracleCharacter('\uD800', '\uDC00'));
        System.out.println(characterconvertergb18030.toOracleCharacter('\uDBFF', '\uDFFF'));
        System.out.println(characterconvertergb18030.toUnicodeGB(0x90308130));
        System.out.println(characterconvertergb18030.toUnicodeGB(0xe3329a35));
        return;
    }

    // Decompiling method: searchgbMapping  Signature: (CZ)I
    // Max stack: 3, #locals: 9, #params: 3
    // Code length: 140 bytes, Code offset: 13396
    // Line Number Table found: 24 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 140 Range 0 139 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 140 Range 0 139 Init 0
    // Parameter  2 added: Name flag Type Z At 0 140 Range 0 139 Init 0
    // RetValue   9 added: Name <returnValue> Type I At 0 140 Range 0 139 Init 0 fixed
    // LocalVar   3 added: Name flag1 Type Z At 5 116 Range 5 120 Init 5
    // LocalVar   4 added: Name flag2 Type Z At 7 93 Range 7 99 Init 7
    // LocalVar   5 added: Name byte0 Type B At 10 78 Range 10 87 Init 10
    // LocalVar   3 chged: Name byte1 Oname flag1 Type B At 16 105 Range 5 120 Init 5
    // LocalVar   4 chged: Name byte2 Oname flag2 Type B At 18 82 Range 7 99 Init 7
    // LocalVar   6 added: Name i Type I At 27 106 Range 27 132 Init 27
    // LocalVar   7 added: Name flag1 Type Z At 30 105 Range 30 134 Init 30
    // LocalVar   7 chged: Name j Oname flag1 Type I At 133 2 Range 30 134 Init 30
    // LocalVar   8 added: Name k Type I At 42 85 Range 42 126 Init 42
    private int searchgbMapping(char c, boolean flag)
    {
        byte byte0;
        byte byte1;
        byte byte2;
        if(flag)
        {
            byte0 = 1;
            byte1 = 0;
            byte2 = 2;
        } else
        {
            byte0 = 3;
            byte1 = 2;
            byte2 = 0;
        }
        int i = gbMapping.length;
        for(int j = 0; i >= j;)
        {
            int k = (i + j) / 2;
            if(gbMapping[k][byte1] <= c && c <= gbMapping[k][byte0])
            {
                return (c - gbMapping[k][byte1]) + gbMapping[k][byte2];
            }
            if(c < gbMapping[k][byte1])
            {
                i = k - 1;
            } else
            if(c > gbMapping[k][byte0])
            {
                j = k + 1;
            }
        }

        return -1;
    }

    // Decompiling method: surrogateUcs4ToUtf16  Signature: (I)I
    // Max stack: 3, #locals: 2, #params: 2
    // Code length: 23 bytes, Code offset: 13666
    // Line Number Table found: 3 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 23 Range 0 22 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 23 Range 0 22 Init 0
    // RetValue   2 added: Name <returnValue> Type I At 0 23 Range 0 22 Init 0 fixed
    private int surrogateUcs4ToUtf16(int i)
    {
        return (i - 0x10000 >> 10 | 0xd800) << 16 | (i & 0x3ff | 0xdc00);
    }

    // Decompiling method: surrogateUtf16ToUcs4  Signature: (CC)I
    // Max stack: 3, #locals: 3, #params: 3
    // Code length: 18 bytes, Code offset: 13735
    // Line Number Table found: 6 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 18 Range 0 17 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 18 Range 0 17 Init 0
    // Parameter  2 added: Name c1 Type C At 0 18 Range 0 17 Init 0
    // RetValue   3 added: Name <returnValue> Type I At 0 18 Range 0 17 Init 0 fixed
    private int surrogateUtf16ToUcs4(char c, char c1)
    {
        return ((0x3ff & c) << 10 | c1 & 0x3ff) + 0x10000;
    }

    // Decompiling method: toOracleCharacter  Signature: (CC)I
    // Max stack: 4, #locals: 6, #params: 3
    // Code length: 116 bytes, Code offset: 13811
    // Line Number Table found: 13 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 116 Range 0 115 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 116 Range 0 115 Init 0
    // Parameter  2 added: Name c1 Type C At 0 116 Range 0 115 Init 0
    // RetValue   6 added: Name <returnValue> Type I At 0 116 Range 0 115 Init 0 fixed
    // LocalVar   3 added: Name i Type I At 10 17 Range 10 26 Init 10
    // LocalVar   3 added: Name j Type I At 59 18 Range 59 76 Init 59
    // LocalVar   4 added: Name k Type I At 66 14 Range 66 79 Init 66
    // LocalVar   5 added: Name c2 Type C At 82 33 Range 82 114 Init 82
    // LocalVar   5 chged: Name l Oname c2 Type I At 96 19 Range 82 114 Init 82
    int toOracleCharacter(char c, char c1)
        throws SQLException
    {
        if(c1 != 0)
        {
            int i = surrogateUtf16ToUcs4(c, c1);
            if(i >= 0x10000 && i <= 0x10ffff)
            {
                return bMPunLinear((0x1ca0fa + (i - 0x10000)) - 0x19beb2);
            } else
            {
                throw new SQLException("Cannot map Unicode to Oracle character.");
            }
        }
        int j = c >> m_oraL1KeyShift & m_oraL1KeyMask;
        int k = c & m_oraL2KeyMask;
        int l = m_oraCharLevel2[m_oraCharLevel1[j] + k];
        if(l == 65535)
        {
            l = bMPUnicode2Oracle(c);
            if(l == 0)
            {
                throw new SQLException("Cannot map Unicode to Oracle character.");
            }
        }
        return l;
    }

    // Decompiling method: toOracleCharacterWithReplacement  Signature: (CC)I
    // Max stack: 4, #locals: 6, #params: 3
    // Code length: 118 bytes, Code offset: 14023
    // Line Number Table found: 15 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 118 Range 0 117 Init 0 fixed
    // Parameter  1 added: Name c Type C At 0 118 Range 0 117 Init 0
    // Parameter  2 added: Name c1 Type C At 0 118 Range 0 117 Init 0
    // RetValue   6 added: Name <returnValue> Type I At 0 118 Range 0 117 Init 0 fixed
    // LocalVar   3 added: Name i Type I At 10 17 Range 10 26 Init 10
    // LocalVar   3 added: Name j Type I At 54 18 Range 54 71 Init 54
    // LocalVar   4 added: Name k Type I At 61 14 Range 61 74 Init 61
    // LocalVar   5 added: Name c2 Type C At 77 40 Range 77 116 Init 77
    // LocalVar   5 chged: Name l Oname c2 Type I At 91 26 Range 77 116 Init 77
    int toOracleCharacterWithReplacement(char c, char c1)
    {
        if(c1 != 0)
        {
            int i = surrogateUtf16ToUcs4(c, c1);
            if(i >= 0x10000 && i <= 0x10ffff)
            {
                return bMPunLinear((0x1ca0fa + (i - 0x10000)) - 0x19beb2);
            } else
            {
                return m_2ByteOraCharReplacement;
            }
        }
        int j = c >> m_oraL1KeyShift & m_oraL1KeyMask;
        int k = c & m_oraL2KeyMask;
        int l = m_oraCharLevel2[m_oraCharLevel1[j] + k];
        if(l == 65535)
        {
            l = bMPUnicode2Oracle(c);
            if(l == 0)
            {
                if(c > '\u2FFF')
                {
                    return m_2ByteOraCharReplacement;
                } else
                {
                    return m_1ByteOraCharReplacement;
                }
            }
        }
        return l;
    }

    // Decompiling method: toOracleString  Signature: (Ljava/lang/String;)[B
    // Max stack: 5, #locals: 10, #params: 2
    // Code length: 397 bytes, Code offset: 14235
    // Line Number Table found: 50 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 397 Range 0 396 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 397 Range 0 396 Init 0
    // RetValue  10 added: Name <returnValue> Type [B At 0 397 Range 0 396 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 4 359 Range 4 362 Init 4
    // LocalVar   3 added: Name ac Type [C At 16 221 Range 16 236 Init 16
    // LocalVar   4 added: Name abyte0 Type [B At 30 366 Range 30 395 Init 30
    // LocalVar   7 added: Name flag Type Z At 33 355 Range 33 387 Init 33
    // LocalVar   8 added: Name flag1 Type Z At 36 326 Range 36 361 Init 36
    // LocalVar   8 chged: Name j Oname flag1 Type I At 360 2 Range 36 361 Init 36
    // LocalVar   7 chged: Name k Oname flag Type I At 366 2 Range 33 387 Init 33
    // LocalVar   9 added: Name abyte1 Type [B At 378 15 Range 378 392 Init 378
    // LocalVar   5 added: Name l Type I At 103 111 Range 103 213 Init 103
    // LocalVar   5 added: Name i1 Type I At 244 111 Range 244 354 Init 244
    // LocalVar   6 hasn't been used
    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 * 4];
        int l = 0;
        for(int i1 = 0; i1 < i; i1++)
        {
            if(ac[i1] >= '\uD800' && ac[i1] <= '\uDBFF')
            {
                if(i1 + 1 < i && ac[i1 + 1] >= '\uDC00' && ac[i1 + 1] <= '\uDFFF')
                {
                    int j = toOracleCharacterWithReplacement(ac[i1], ac[i1 + 1]);
                    if(j >> 16 != 0)
                    {
                        abyte0[l++] = (byte)(j >> 24);
                        abyte0[l++] = (byte)(j >> 16);
                        abyte0[l++] = (byte)(j >> 8);
                        abyte0[l++] = (byte)j;
                    } else
                    if(j >> 8 != 0)
                    {
                        abyte0[l++] = (byte)(j >> 8);
                        abyte0[l++] = (byte)j;
                    } else
                    {
                        abyte0[l++] = (byte)j;
                    }
                } else
                {
                    throw new SQLException("Cannot map Unicode to Oracle character.");
                }
                i1++;
            } else
            {
                int k = toOracleCharacter(ac[i1], '\0');
                if(k >> 16 != 0)
                {
                    abyte0[l++] = (byte)(k >> 24);
                    abyte0[l++] = (byte)(k >> 16);
                    abyte0[l++] = (byte)(k >> 8);
                    abyte0[l++] = (byte)k;
                } else
                if(k >> 8 != 0)
                {
                    abyte0[l++] = (byte)(k >> 8);
                    abyte0[l++] = (byte)k;
                } else
                {
                    abyte0[l++] = (byte)k;
                }
            }
        }

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

    // Decompiling method: toOracleStringWithReplacement  Signature: (Ljava/lang/String;)[B
    // Max stack: 5, #locals: 10, #params: 2
    // Code length: 416 bytes, Code offset: 14876
    // Line Number Table found: 51 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 416 Range 0 415 Init 0 fixed
    // Parameter  1 added: Name s Type Ljava/lang/String; At 0 416 Range 0 415 Init 0
    // RetValue  10 added: Name <returnValue> Type [B At 0 416 Range 0 415 Init 0 fixed
    // LocalVar   2 added: Name i Type I At 4 378 Range 4 381 Init 4
    // LocalVar   3 added: Name ac Type [C At 16 240 Range 16 255 Init 16
    // LocalVar   4 added: Name abyte0 Type [B At 30 385 Range 30 414 Init 30
    // LocalVar   7 added: Name flag Type Z At 33 374 Range 33 406 Init 33
    // LocalVar   8 added: Name flag1 Type Z At 36 345 Range 36 380 Init 36
    // LocalVar   8 chged: Name j Oname flag1 Type I At 379 2 Range 36 380 Init 36
    // LocalVar   7 chged: Name k Oname flag Type I At 385 2 Range 33 406 Init 33
    // LocalVar   9 added: Name abyte1 Type [B At 397 15 Range 397 411 Init 397
    // LocalVar   5 added: Name l Type I At 103 111 Range 103 213 Init 103
    // LocalVar   5 added: Name i1 Type I At 263 111 Range 263 373 Init 263
    // LocalVar   6 hasn't been used
    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 * 4];
        int l = 0;
        for(int i1 = 0; i1 < i; i1++)
        {
            if(ac[i1] >= '\uD800' && ac[i1] <= '\uDBFF')
            {
                if(i1 + 1 < i && ac[i1 + 1] >= '\uDC00' && ac[i1 + 1] <= '\uDFFF')
                {
                    int j = toOracleCharacterWithReplacement(ac[i1], ac[i1 + 1]);
                    if(j >> 16 != 0)
                    {
                        abyte0[l++] = (byte)(j >> 24);
                        abyte0[l++] = (byte)(j >> 16);
                        abyte0[l++] = (byte)(j >> 8);
                        abyte0[l++] = (byte)j;
                    } else
                    if(j >> 8 != 0)
                    {
                        abyte0[l++] = (byte)(j >> 8);
                        abyte0[l++] = (byte)j;
                    } else
                    {
                        abyte0[l++] = (byte)j;
                    }
                } else
                {
                    abyte0[l++] = (byte)(m_2ByteOraCharReplacement >> 8);
                    abyte0[l++] = (byte)m_2ByteOraCharReplacement;
                }
                i1++;
            } else
            {
                int k = toOracleCharacterWithReplacement(ac[i1], '\0');
                if(k >> 16 != 0)
                {
                    abyte0[l++] = (byte)(k >> 24);
                    abyte0[l++] = (byte)(k >> 16);
                    abyte0[l++] = (byte)(k >> 8);
                    abyte0[l++] = (byte)k;
                } else
                if(k >> 8 != 0)
                {
                    abyte0[l++] = (byte)(k >> 8);
                    abyte0[l++] = (byte)k;
                } else
                {
                    abyte0[l++] = (byte)k;
                }
            }
        }

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

    // Decompiling method: toUnicodeGB  Signature: (I)I
    // Max stack: 3, #locals: 5, #params: 2
    // Code length: 113 bytes, Code offset: 15530
    // Line Number Table found: 14 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 113 Range 0 112 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 113 Range 0 112 Init 0
    // RetValue   5 added: Name <returnValue> Type I At 0 113 Range 0 112 Init 0 fixed
    // LocalVar   2 added: Name j Type I At 21 3 Range 21 23 Init 21
    // LocalVar   2 added: Name k Type I At 40 16 Range 40 55 Init 40
    // LocalVar   2 added: Name l Type I At 68 17 Range 68 84 Init 68
    // LocalVar   3 added: Name i1 Type I At 75 12 Range 75 86 Init 75
    // LocalVar   4 added: Name c Type C At 89 23 Range 89 111 Init 89
    int toUnicodeGB(int i)
        throws SQLException
    {
        if(bMPLinear(i) >= 39419)
        {
            int j = (0x1abeb2 + bMPLinear(i)) - 0x1ca0fa;
            return surrogateUcs4ToUtf16(j);
        }
        if(i >> 16 != 0)
        {
            int k = bMPOracle2Unicode(i);
            if(k == 0)
            {
                throw new SQLException("Cannot map Oracle character to Unicode.");
            } else
            {
                return k;
            }
        }
        int l = i >> m_ucsL1KeyShift & m_ucsL1KeyMask;
        int i1 = i & m_ucsL2KeyMask;
        char c = m_ucsCharLevel2[m_ucsCharLevel1[l] + i1];
        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: 4, #locals: 10, #params: 4
    // Code length: 446 bytes, Code offset: 15743
    // Line Number Table found: 44 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 446 Range 0 445 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 446 Range 0 445 Init 0
    // Parameter  2 added: Name i Type I At 0 446 Range 0 445 Init 0
    // Parameter  3 added: Name j Type I At 0 446 Range 0 445 Init 0
    // RetValue  10 added: Name <returnValue> Type Ljava/lang/String; At 0 446 Range 0 445 Init 0 fixed
    // LocalVar   4 added: Name k Type I At 3 437 Range 3 439 Init 3
    // LocalVar   5 added: Name s Type Ljava/lang/String; At 12 433 Range 12 444 Init 12
    // LocalVar   6 added: Name l Type I At 15 423 Range 15 437 Init 15
    // LocalVar   7 added: Name i1 Type I At 28 393 Range 28 420 Init 28
    // LocalVar   9 added: Name j1 Type I At 236 79 Range 236 314 Init 236
    // LocalVar   8 hasn't been used
    public String toUnicodeString(byte abyte0[], int i, int j)
        throws SQLException
    {
        int k = i + j;
        String s = new String();
        for(int l = i; l < k;)
        {
            int i1 = abyte0[l] & 0xff;
            if(i1 > 127)
            {
                if(l + 1 < k)
                {
                    if((abyte0[l] & 0xff) >= 129 && (abyte0[l] & 0xff) <= 254 && (abyte0[l + 1] & 0xff) >= 48 && (abyte0[l + 1] & 0xff) <= 57)
                    {
                        if(l + 3 < k && (abyte0[l + 2] & 0xff) >= 129 && (abyte0[l + 2] & 0xff) <= 254 && (abyte0[l + 3] & 0xff) >= 48 && (abyte0[l + 3] & 0xff) <= 57)
                        {
                            i1 = (abyte0[l] & 0xff) << 24 | (abyte0[l + 1] & 0xff) << 16 | (abyte0[l + 2] & 0xff) << 8 | abyte0[l + 3] & 0xff;
                            l += 4;
                            int j1 = toUnicodeGB(i1);
                            if(j1 >> 16 == 0)
                            {
                                s = s + (char)j1;
                            } else
                            {
                                s = s + (char)(j1 >> 16 & 0xffff);
                                s = s + (char)(j1 & 0xffff);
                            }
                        } else
                        {
                            throw new SQLException("Cannot map Oracle character to Unicode.");
                        }
                    } else
                    {
                        i1 = abyte0[l] << 8 & 0xff00 | abyte0[l + 1] & 0xff;
                        s = s + (char)toUnicodeGB(i1);
                        l += 2;
                    }
                } else
                {
                    throw new SQLException("Cannot map Oracle character to Unicode.");
                }
            } else
            {
                s = s + (char)toUnicodeGB(i1);
                l++;
            }
        }

        return s;
    }

    // Decompiling method: toUnicodeStringWithReplacement  Signature: ([BII)Ljava/lang/String;
    // Max stack: 4, #locals: 10, #params: 4
    // Code length: 486 bytes, Code offset: 16409
    // Line Number Table found: 48 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 486 Range 0 485 Init 0 fixed
    // Parameter  1 added: Name abyte0 Type [B At 0 486 Range 0 485 Init 0
    // Parameter  2 added: Name i Type I At 0 486 Range 0 485 Init 0
    // Parameter  3 added: Name j Type I At 0 486 Range 0 485 Init 0
    // RetValue  10 added: Name <returnValue> Type Ljava/lang/String; At 0 486 Range 0 485 Init 0 fixed
    // LocalVar   4 added: Name k Type I At 3 477 Range 3 479 Init 3
    // LocalVar   5 added: Name s Type Ljava/lang/String; At 12 473 Range 12 484 Init 12
    // LocalVar   6 added: Name l Type I At 15 463 Range 15 477 Init 15
    // LocalVar   7 added: Name i1 Type I At 28 433 Range 28 460 Init 28
    // LocalVar   9 added: Name j1 Type I At 236 79 Range 236 314 Init 236
    // LocalVar   8 hasn't been used
    public String toUnicodeStringWithReplacement(byte abyte0[], int i, int j)
    {
        int k = i + j;
        String s = new String();
        for(int l = i; l < k;)
        {
            int i1 = abyte0[l] & 0xff;
            if(i1 > 127)
            {
                if(l + 1 < k)
                {
                    if((abyte0[l] & 0xff) >= 129 && (abyte0[l] & 0xff) <= 254 && (abyte0[l + 1] & 0xff) >= 48 && (abyte0[l + 1] & 0xff) <= 57)
                    {
                        if(l + 3 < k && (abyte0[l + 2] & 0xff) >= 129 && (abyte0[l + 2] & 0xff) <= 254 && (abyte0[l + 3] & 0xff) >= 48 && (abyte0[l + 3] & 0xff) <= 57)
                        {
                            i1 = (abyte0[l] & 0xff) << 24 | (abyte0[l + 1] & 0xff) << 16 | (abyte0[l + 2] & 0xff) << 8 | abyte0[l + 3] & 0xff;
                            l += 4;
                            int j1 = toUnicodeWithReplacementGB(i1);
                            if(j1 >> 16 == 0)
                            {
                                s = s + (char)j1;
                            } else
                            {
                                s = s + (char)(j1 >> 16 & 0xffff);
                                s = s + (char)(j1 & 0xffff);
                            }
                        } else
                        {
                            s = s + m_ucsCharReplacement;
                            l += 4;
                        }
                    } else
                    {
                        i1 = abyte0[l] << 8 & 0xff00 | abyte0[l + 1] & 0xff;
                        s = s + (char)toUnicodeWithReplacementGB(i1);
                        l += 2;
                    }
                } else
                {
                    s = s + m_ucsCharReplacement;
                    l++;
                }
            } else
            {
                s = s + (char)toUnicodeWithReplacementGB(i1);
                l++;
            }
        }

        return s;
    }

    // Decompiling method: toUnicodeWithReplacementGB  Signature: (I)I
    // Max stack: 3, #locals: 5, #params: 2
    // Code length: 104 bytes, Code offset: 17121
    // Line Number Table found: 14 entries
    // Parameter  0 added: Name this Type Loracle/sql/converter/CharacterConverterGB18030; At 0 104 Range 0 103 Init 0 fixed
    // Parameter  1 added: Name i Type I At 0 104 Range 0 103 Init 0
    // RetValue   5 added: Name <returnValue> Type I At 0 104 Range 0 103 Init 0 fixed
    // LocalVar   2 added: Name j Type I At 21 3 Range 21 23 Init 21
    // LocalVar   2 added: Name k Type I At 40 11 Range 40 50 Init 40
    // LocalVar   2 added: Name l Type I At 63 17 Range 63 79 Init 63
    // LocalVar   3 added: Name i1 Type I At 70 12 Range 70 81 Init 70
    // LocalVar   4 added: Name c Type C At 84 19 Range 84 102 Init 84
    int toUnicodeWithReplacementGB(int i)
    {
        if(bMPLinear(i) >= 39419)
        {
            int j = (0x1abeb2 + bMPLinear(i)) - 0x1ca0fa;
            return surrogateUcs4ToUtf16(j);
        }
        if(i >> 16 != 0)
        {
            int k = bMPOracle2Unicode(i);
            if(k == 0)
            {
                k = m_ucsCharReplacement;
            }
            return k;
        }
        int l = i >> m_ucsL1KeyShift & m_ucsL1KeyMask;
        int i1 = i & m_ucsL2KeyMask;
        char c = m_ucsCharLevel2[m_ucsCharLevel1[l] + i1];
        if(c == m_ucsCharReplacement)
        {
            c = m_ucsCharReplacement;
        }
        return c;
    }

    // Decompiling method: <clinit>  Signature: ()V
    // Max stack: 7, #locals: 0, #params: 0
    // Code length: 6299 bytes, Code offset: 3175
    // Line Number Table found: 415 entries
    // RetValue   0 added: Name <returnValue> Type V At 0 6299 Range 0 6298 Init 0 fixed
    static 
    {
        /* gbMapping = (new char[][] {
            new char[] {
                '\200', '\243', '\0', '#'
            }, new char[] {
                '\245', '\246', '$', '%'
            }, new char[] {
                '\251', '\257', '&', ','
            }, new char[] {
                '\262', '\266', '-', '1'
            }, new char[] {
                '\270', '\326', '2', 'P'
            }, new char[] {
                '\330', '\337', 'Q', 'X'
            }, new char[] {
                '\342', '\347', 'Y', '^'
            }, new char[] {
                '\353', '\353', '_', '_'
            }, new char[] {
                '\356', '\361', '`', 'c'
            }, new char[] {
                '\364', '\366', 'd', 'f'
            }, new char[] {
                '\370', '\370', 'g', 'g'
            }, new char[] {
                '\373', '\373', 'h', 'h'
            }, new char[] {
                '\375', '\u0100', 'i', 'l'
            }, new char[] {
                '\u0102', '\u0112', 'm', '}'
            }, new char[] {
                '\u0114', '\u011A', '~', '\204'
            }, new char[] {
                '\u011C', '\u012A', '\205', '\223'
            }, new char[] {
                '\u012C', '\u0143', '\224', '\253'
            }, new char[] {
                '\u0145', '\u0147', '\254', '\256'
            }, new char[] {
                '\u0149', '\u014C', '\257', '\262'
            }, new char[] {
                '\u014E', '\u016A', '\263', '\317'
            }, new char[] {
                '\u016C', '\u01CD', '\320', '\u0131'
            }, new char[] {
                '\u01CF', '\u01CF', '\u0132', '\u0132'
            }, new char[] {
                '\u01D1', '\u01D1', '\u0133', '\u0133'
            }, new char[] {
                '\u01D3', '\u01D3', '\u0134', '\u0134'
            }, new char[] {
                '\u01D5', '\u01D5', '\u0135', '\u0135'
            }, new char[] {
                '\u01D7', '\u01D7', '\u0136', '\u0136'
            }, new char[] {
                '\u01D9', '\u01D9', '\u0137', '\u0137'
            }, new char[] {
                '\u01DB', '\u01DB', '\u0138', '\u0138'
            }, new char[] {
                '\u01DD', '\u01F8', '\u0139', '\u0154'
            }, new char[] {
                '\u01FA', '\u0250', '\u0155', '\u01AB'
            }, new char[] {
                '\u0252', '\u0260', '\u01AC', '\u01BA'
            }, new char[] {
                '\u0262', '\u02C6', '\u01BB', '\u021F'
            }, new char[] {
                '\u02C8', '\u02C8', '\u0220', '\u0220'
            }, new char[] {
                '\u02CC', '\u02D8', '\u0221', '\u022D'
            }, new char[] {
                '\u02DA', '\u0390', '\u022E', '\u02E4'
            }, new char[] {
                '\u03A2', '\u03A2', '\u02E5', '\u02E5'
            }, new char[] {
                '\u03AA', '\u03B0', '\u02E6', '\u02EC'
            }, new char[] {
                '\u03C2', '\u03C2', '\u02ED', '\u02ED'
            }, new char[] {
                '\u03CA', '\u0400', '\u02EE', '\u0324'
            }, new char[] {
                '\u0402', '\u040F', '\u0325', '\u0332'
            }, new char[] {
                '\u0450', '\u0450', '\u0333', '\u0333'
            }, new char[] {
                '\u0452', '\u200F', '\u0334', '\u1EF1'
            }, new char[] {
                '\u2011', '\u2012', '\u1EF2', '\u1EF3'
            }, new char[] {
                '\u2017', '\u2017', '\u1EF4', '\u1EF4'
            }, new char[] {
                '\u201A', '\u201B', '\u1EF5', '\u1EF6'
            }, new char[] {
                '\u201E', '\u2024', '\u1EF7', '\u1EFD'
            }, new char[] {
                '\u2027', '\u202F', '\u1EFE', '\u1F06'
            }, new char[] {
                '\u2031', '\u2031', '\u1F07', '\u1F07'
            }, new char[] {
                '\u2034', '\u2034', '\u1F08', '\u1F08'
            }, new char[] {
                '\u2036', '\u203A', '\u1F09', '\u1F0D'
            }, new char[] {
                '\u203C', '\u20AB', '\u1F0E', '\u1F7D'
            }, new char[] {
                '\u20AD', '\u2102', '\u1F7E', '\u1FD3'
            }, new char[] {
                '\u2104', '\u2104', '\u1FD4', '\u1FD4'
            }, new char[] {
                '\u2106', '\u2108', '\u1FD5', '\u1FD7'
            }, new char[] {
                '\u210A', '\u2115', '\u1FD8', '\u1FE3'
            }, new char[] {
                '\u2117', '\u2120', '\u1FE4', '\u1FED'
            }, new char[] {
                '\u2122', '\u215F', '\u1FEE', '\u202B'
            }, new char[] {
                '\u216C', '\u216F', '\u202C', '\u202F'
            }, new char[] {
                '\u217A', '\u218F', '\u2030', '\u2045'
            }, new char[] {
                '\u2194', '\u2195', '\u2046', '\u2047'
            }, new char[] {
                '\u219A', '\u2207', '\u2048', '\u20B5'
            }, new char[] {
                '\u2209', '\u220E', '\u20B6', '\u20BB'
            }, new char[] {
                '\u2210', '\u2210', '\u20BC', '\u20BC'
            }, new char[] {
                '\u2212', '\u2214', '\u20BD', '\u20BF'
            }, new char[] {
                '\u2216', '\u2219', '\u20C0', '\u20C3'
            }, new char[] {
                '\u221B', '\u221C', '\u20C4', '\u20C5'
            }, new char[] {
                '\u2221', '\u2222', '\u20C6', '\u20C7'
            }, new char[] {
                '\u2224', '\u2224', '\u20C8', '\u20C8'
            }, new char[] {
                '\u2226', '\u2226', '\u20C9', '\u20C9'
            }, new char[] {
                '\u222C', '\u222D', '\u20CA', '\u20CB'
            }, new char[] {
                '\u222F', '\u2233', '\u20CC', '\u20D0'
            }, new char[] {
                '\u2238', '\u223C', '\u20D1', '\u20D5'
            }, new char[] {
                '\u223E', '\u2247', '\u20D6', '\u20DF'
            }, new char[] {
                '\u2249', '\u224B', '\u20E0', '\u20E2'
            }, new char[] {
                '\u224D', '\u2251', '\u20E3', '\u20E7'
            }, new char[] {
                '\u2253', '\u225F', '\u20E8', '\u20F4'
            }, new char[] {
                '\u2262', '\u2263', '\u20F5', '\u20F6'
            }, new char[] {
                '\u2268', '\u226D', '\u20F7', '\u20FC'
            }, new char[] {
                '\u2270', '\u2294', '\u20FD', '\u2121'
            }, new char[] {
                '\u2296', '\u2298', '\u2122', '\u2124'
            }, new char[] {
                '\u229A', '\u22A4', '\u2125', '\u212F'
            }, new char[] {
                '\u22A6', '\u22BE', '\u2130', '\u2148'
            }, new char[] {
                '\u22C0', '\u2311', '\u2149', '\u219A'
            }, new char[] {
                '\u2313', '\u245F', '\u219B', '\u22E7'
            }, new char[] {
                '\u246A', '\u2473', '\u22E8', '\u22F1'
            }, new char[] {
                '\u249C', '\u24FF', '\u22F2', '\u2355'
            }, new char[] {
                '\u254C', '\u254F', '\u2356', '\u2359'
            }, new char[] {
                '\u2574', '\u2580', '\u235A', '\u2366'
            }, new char[] {
                '\u2590', '\u2592', '\u2367', '\u2369'
            }, new char[] {
                '\u2596', '\u259F', '\u236A', '\u2373'
            }, new char[] {
                '\u25A2', '\u25B1', '\u2374', '\u2383'
            }, new char[] {
                '\u25B4', '\u25BB', '\u2384', '\u238B'
            }, new char[] {
                '\u25BE', '\u25C5', '\u238C', '\u2393'
            }, new char[] {
                '\u25C8', '\u25CA', '\u2394', '\u2396'
            }, new char[] {
                '\u25CC', '\u25CD', '\u2397', '\u2398'
            }, new char[] {
                '\u25D0', '\u25E1', '\u2399', '\u23AA'
            }, new char[] {
                '\u25E6', '\u2604', '\u23AB', '\u23C9'
            }, new char[] {
                '\u2607', '\u2608', '\u23CA', '\u23CB'
            }, new char[] {
                '\u260A', '\u263F', '\u23CC', '\u2401'
            }, new char[] {
                '\u2641', '\u2641', '\u2402', '\u2402'
            }, new char[] {
                '\u2643', '\u2E80', '\u2403', '\u2C40'
            }, new char[] {
                '\u2E82', '\u2E83', '\u2C41', '\u2C42'
            }, new char[] {
                '\u2E85', '\u2E87', '\u2C43', '\u2C45'
            }, new char[] {
                '\u2E89', '\u2E8A', '\u2C46', '\u2C47'
            }, new char[] {
                '\u2E8D', '\u2E96', '\u2C48', '\u2C51'
            }, new char[] {
                '\u2E98', '\u2EA6', '\u2C52', '\u2C60'
            }, new char[] {
                '\u2EA8', '\u2EA9', '\u2C61', '\u2C62'
            }, new char[] {
                '\u2EAB', '\u2EAD', '\u2C63', '\u2C65'
            }, new char[] {
                '\u2EAF', '\u2EB2', '\u2C66', '\u2C69'
            }, new char[] {
                '\u2EB4', '\u2EB5', '\u2C6A', '\u2C6B'
            }, new char[] {
                '\u2EB8', '\u2EBA', '\u2C6C', '\u2C6E'
            }, new char[] {
                '\u2EBC', '\u2EC9', '\u2C6F', '\u2C7C'
            }, new char[] {
                '\u2ECB', '\u2FEF', '\u2C7D', '\u2DA1'
            }, new char[] {
                '\u2FFC', '\u2FFF', '\u2DA2', '\u2DA5'
            }, new char[] {
                '\u3004', '\u3004', '\u2DA6', '\u2DA6'
            }, new char[] {
                '\u3018', '\u301C', '\u2DA7', '\u2DAB'
            }, new char[] {
                '\u301F', '\u3020', '\u2DAC', '\u2DAD'
            }, new char[] {
                '\u302A', '\u303D', '\u2DAE', '\u2DC1'
            }, new char[] {
                '\u303F', '\u3040', '\u2DC2', '\u2DC3'
            }, new char[] {
                '\u3094', '\u309A', '\u2DC4', '\u2DCA'
            }, new char[] {
                '\u309F', '\u30A0', '\u2DCB', '\u2DCC'
            }, new char[] {
                '\u30F7', '\u30FB', '\u2DCD', '\u2DD1'
            }, new char[] {
                '\u30FF', '\u3104', '\u2DD2', '\u2DD7'
            }, new char[] {
                '\u312A', '\u321F', '\u2DD8', '\u2ECD'
            }, new char[] {
                '\u322A', '\u3230', '\u2ECE', '\u2ED4'
            }, new char[] {
                '\u3232', '\u32A2', '\u2ED5', '\u2F45'
            }, new char[] {
                '\u32A4', '\u338D', '\u2F46', '\u302F'
            }, new char[] {
                '\u3390', '\u339B', '\u3030', '\u303B'
            }, new char[] {
                '\u339F', '\u33A0', '\u303C', '\u303D'
            }, new char[] {
                '\u33A2', '\u33C3', '\u303E', '\u305F'
            }, new char[] {
                '\u33C5', '\u33CD', '\u3060', '\u3068'
            }, new char[] {
                '\u33CF', '\u33D0', '\u3069', '\u306A'
            }, new char[] {
                '\u33D3', '\u33D4', '\u306B', '\u306C'
            }, new char[] {
                '\u33D6', '\u3446', '\u306D', '\u30DD'
            }, new char[] {
                '\u3448', '\u3472', '\u30DE', '\u3108'
            }, new char[] {
                '\u3474', '\u359D', '\u3109', '\u3232'
            }, new char[] {
                '\u359F', '\u360D', '\u3233', '\u32A1'
            }, new char[] {
                '\u360F', '\u3619', '\u32A2', '\u32AC'
            }, new char[] {
                '\u361B', '\u3917', '\u32AD', '\u35A9'
            }, new char[] {
                '\u3919', '\u396D', '\u35AA', '\u35FE'
            }, new char[] {
                '\u396F', '\u39CE', '\u35FF', '\u365E'
            }, new char[] {
                '\u39D1', '\u39DE', '\u365F', '\u366C'
            }, new char[] {
                '\u39E0', '\u3A72', '\u366D', '\u36FF'
            }, new char[] {
                '\u3A74', '\u3B4D', '\u3700', '\u37D9'
            }, new char[] {
                '\u3B4F', '\u3C6D', '\u37DA', '\u38F8'
            }, new char[] {
                '\u3C6F', '\u3CDF', '\u38F9', '\u3969'
            }, new char[] {
                '\u3CE1', '\u4055', '\u396A', '\u3CDE'
            }, new char[] {
                '\u4057', '\u415E', '\u3CDF', '\u3DE6'
            }, new char[] {
                '\u4160', '\u4336', '\u3DE7', '\u3FBD'
            }, new char[] {
                '\u4338', '\u43AB', '\u3FBE', '\u4031'
            }, new char[] {
                '\u43AD', '\u43B0', '\u4032', '\u4035'
            }, new char[] {
                '\u43B2', '\u43DC', '\u4036', '\u4060'
            }, new char[] {
                '\u43DE', '\u44D5', '\u4061', '\u4158'
            }, new char[] {
                '\u44D7', '\u464B', '\u4159', '\u42CD'
            }, new char[] {
                '\u464D', '\u4660', '\u42CE', '\u42E1'
            }, new char[] {
                '\u4662', '\u4722', '\u42E2', '\u43A2'
            }, new char[] {
                '\u4724', '\u4728', '\u43A3', '\u43A7'
            }, new char[] {
                '\u472A', '\u477B', '\u43A8', '\u43F9'
            }, new char[] {
                '\u477D', '\u478C', '\u43FA', '\u4409'
            }, new char[] {
                '\u478E', '\u4946', '\u440A', '\u45C2'
            }, new char[] {
                '\u4948', '\u4979', '\u45C3', '\u45F4'
            }, new char[] {
                '\u497B', '\u497C', '\u45F5', '\u45F6'
            }, new char[] {
                '\u497E', '\u4981', '\u45F7', '\u45FA'
            }, new char[] {
                '\u4984', '\u4984', '\u45FB', '\u45FB'
            }, new char[] {
                '\u4987', '\u499A', '\u45FC', '\u460F'
            }, new char[] {
                '\u499C', '\u499E', '\u4610', '\u4612'
            }, new char[] {
                '\u49A0', '\u49B5', '\u4613', '\u4628'
            }, new char[] {
                '\u49B8', '\u4C76', '\u4629', '\u48E7'
            }, new char[] {
                '\u4C78', '\u4C9E', '\u48E8', '\u490E'
            }, new char[] {
                '\u4CA4', '\u4D12', '\u490F', '\u497D'
            }, new char[] {
                '\u4D1A', '\u4DAD', '\u497E', '\u4A11'
            }, new char[] {
                '\u4DAF', '\u4DFF', '\u4A12', '\u4A62'
            }, new char[] {
                '\u9FA6', '\uD7FF', '\u4A63', '\u82BC'
            }, new char[] {
                '\uE76C', '\uE76C', '\u82BD', '\u82BD'
            }, new char[] {
                '\uE7C8', '\uE7C8', '\u82BE', '\u82BE'
            }, new char[] {
                '\uE7E7', '\uE7F3', '\u82BF', '\u82CB'
            }, new char[] {
                '\uE815', '\uE815', '\u82CC', '\u82CC'
            }, new char[] {
                '\uE819', '\uE81D', '\u82CD', '\u82D1'
            }, new char[] {
                '\uE81F', '\uE825', '\u82D2', '\u82D8'
            }, new char[] {
                '\uE827', '\uE82A', '\u82D9', '\u82DC'
            }, new char[] {
                '\uE82D', '\uE830', '\u82DD', '\u82E0'
            }, new char[] {
                '\uE833', '\uE83A', '\u82E1', '\u82E8'
            }, new char[] {
                '\uE83C', '\uE842', '\u82E9', '\u82EF'
            }, new char[] {
                '\uE844', '\uE853', '\u82F0', '\u82FF'
            }, new char[] {
                '\uE856', '\uE863', '\u8300', '\u830D'
            }, new char[] {
                '\uE865', '\uF92B', '\u830E', '\u93D4'
            }, new char[] {
                '\uF92D', '\uF978', '\u93D5', '\u9420'
            }, new char[] {
                '\uF97A', '\uF994', '\u9421', '\u943B'
            }, new char[] {
                '\uF996', '\uF9E6', '\u943C', '\u948C'
            }, new char[] {
                '\uF9E8', '\uF9F0', '\u948D', '\u9495'
            }, new char[] {
                '\uF9F2', '\uFA0B', '\u9496', '\u94AF'
            }, new char[] {
                '\uFA10', '\uFA10', '\u94B0', '\u94B0'
            }, new char[] {
                '\uFA12', '\uFA12', '\u94B1', '\u94B1'
            }, new char[] {
                '\uFA15', '\uFA17', '\u94B2', '\u94B4'
            }, new char[] {
                '\uFA19', '\uFA1E', '\u94B5', '\u94BA'
            }, new char[] {
                '\uFA22', '\uFA22', '\u94BB', '\u94BB'
            }, new char[] {
                '\uFA25', '\uFA26', '\u94BC', '\u94BD'
            }, new char[] {
                '\uFA2A', '\uFE2F', '\u94BE', '\u98C3'
            }, new char[] {
                '\uFE32', '\uFE32', '\u98C4', '\u98C4'
            }, new char[] {
                '\uFE45', '\uFE48', '\u98C5', '\u98C8'
            }, new char[] {
                '\uFE53', '\uFE53', '\u98C9', '\u98C9'
            }, new char[] {
                '\uFE58', '\uFE58', '\u98CA', '\u98CA'
            }, new char[] {
                '\uFE67', '\uFE67', '\u98CB', '\u98CB'
            }, new char[] {
                '\uFE6C', '\uFF00', '\u98CC', '\u9960'
            }, new char[] {
                '\uFF5F', '\uFFDF', '\u9961', '\u99E1'
            }, new char[] {
                '\uFFE6', '\uFFFF', '\u99E2', '\u99FB'
            }
        }); */
    }
}
