/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
<<<<<<< Updated upstream
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
=======
 * 
 *     https://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software 
 * distributed under the License is distributed on an "AS IS" BASIS, 
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
 * See the License for the specific language governing permissions and 
>>>>>>> Stashed changes
 * limitations under the License.
 */

package org.apache.jdo.tck.pc.fieldtypes;

import java.io.Serializable;

public class FieldsOfByte {
  public int identifier;
  private Byte Byte0;
  private Byte Byte1;
  private Byte Byte2;
  private Byte Byte3;
  private Byte Byte4;
  private Byte Byte5;
  private Byte Byte6;
  private Byte Byte7;
  private static Byte Byte8;
  private transient Byte Byte9;
  private transient Byte Byte10;
  private transient Byte Byte11;
  private transient Byte Byte12;
  private transient Byte Byte13;
  private transient Byte Byte14;
  private final Byte Byte15 = Byte.valueOf((byte) 5);
  private volatile Byte Byte16;
  private volatile Byte Byte17;
  private volatile Byte Byte18;
  private volatile Byte Byte19;
  private volatile Byte Byte20;
  private volatile Byte Byte21;
  private volatile Byte Byte22;
  private volatile Byte Byte23;
  private static transient Byte Byte24;
  private static final Byte Byte25 = Byte.valueOf((byte) 5);
  private static volatile Byte Byte26;
  private final transient Byte Byte27 = Byte.valueOf((byte) 5);
  private transient volatile Byte Byte28;
  private transient volatile Byte Byte29;
  private transient volatile Byte Byte30;
  private transient volatile Byte Byte31;
  private transient volatile Byte Byte32;
  private transient volatile Byte Byte33;
  private static final transient Byte Byte34 = Byte.valueOf((byte) 5);
  private static transient volatile Byte Byte35;
  public Byte Byte36;
  public Byte Byte37;
  public Byte Byte38;
  public Byte Byte39;
  public Byte Byte40;
  public Byte Byte41;
  public Byte Byte42;
  public Byte Byte43;
  public static Byte Byte44;
  public transient Byte Byte45;
  public transient Byte Byte46;
  public transient Byte Byte47;
  public transient Byte Byte48;
  public transient Byte Byte49;
  public transient Byte Byte50;
  public final Byte Byte51 = Byte.valueOf((byte) 5);
  public volatile Byte Byte52;
  public volatile Byte Byte53;
  public volatile Byte Byte54;
  public volatile Byte Byte55;
  public volatile Byte Byte56;
  public volatile Byte Byte57;
  public volatile Byte Byte58;
  public volatile Byte Byte59;
  public static transient Byte Byte60;
  public static final Byte Byte61 = Byte.valueOf((byte) 5);
  public static volatile Byte Byte62;
  public final transient Byte Byte63 = Byte.valueOf((byte) 5);
  public transient volatile Byte Byte64;
  public transient volatile Byte Byte65;
  public transient volatile Byte Byte66;
  public transient volatile Byte Byte67;
  public transient volatile Byte Byte68;
  public transient volatile Byte Byte69;
  public static final transient Byte Byte70 = Byte.valueOf((byte) 5);
  public static transient volatile Byte Byte71;
  protected Byte Byte72;
  protected Byte Byte73;
  protected Byte Byte74;
  protected Byte Byte75;
  protected Byte Byte76;
  protected Byte Byte77;
  protected Byte Byte78;
  protected Byte Byte79;
  protected static Byte Byte80;
  protected transient Byte Byte81;
  protected transient Byte Byte82;
  protected transient Byte Byte83;
  protected transient Byte Byte84;
  protected transient Byte Byte85;
  protected transient Byte Byte86;
  protected final Byte Byte87 = Byte.valueOf((byte) 5);
  protected volatile Byte Byte88;
  protected volatile Byte Byte89;
  protected volatile Byte Byte90;
  protected volatile Byte Byte91;
  protected volatile Byte Byte92;
  protected volatile Byte Byte93;
  protected volatile Byte Byte94;
  protected volatile Byte Byte95;
  protected static transient Byte Byte96;
  protected static final Byte Byte97 = Byte.valueOf((byte) 5);
  protected static volatile Byte Byte98;
  protected final transient Byte Byte99 = Byte.valueOf((byte) 5);
  protected transient volatile Byte Byte100;
  protected transient volatile Byte Byte101;
  protected transient volatile Byte Byte102;
  protected transient volatile Byte Byte103;
  protected transient volatile Byte Byte104;
  protected transient volatile Byte Byte105;
  protected static final transient Byte Byte106 = Byte.valueOf((byte) 5);
  protected static transient volatile Byte Byte107;
  Byte Byte108;
  Byte Byte109;
  Byte Byte110;
  Byte Byte111;
  Byte Byte112;
  Byte Byte113;
  Byte Byte114;
  Byte Byte115;
  static Byte Byte116;
  transient Byte Byte117;
  transient Byte Byte118;
  transient Byte Byte119;
  transient Byte Byte120;
  transient Byte Byte121;
  transient Byte Byte122;
  final Byte Byte123 = Byte.valueOf((byte) 5);
  volatile Byte Byte124;
  volatile Byte Byte125;
  volatile Byte Byte126;
  volatile Byte Byte127;
  volatile Byte Byte128;
  volatile Byte Byte129;
  volatile Byte Byte130;
  volatile Byte Byte131;
  static transient Byte Byte132;
  static final Byte Byte133 = Byte.valueOf((byte) 5);
  static volatile Byte Byte134;
  final transient Byte Byte135 = Byte.valueOf((byte) 5);
  transient volatile Byte Byte136;
  transient volatile Byte Byte137;
  transient volatile Byte Byte138;
  transient volatile Byte Byte139;
  transient volatile Byte Byte140;
  transient volatile Byte Byte141;
  static final transient Byte Byte142 = Byte.valueOf((byte) 5);
  static transient volatile Byte Byte143;

  public static final boolean[] isPersistent = {
    true, true, true, false, true, true, true, false, false, false,
    false, true, true, true, false, false, true, true, true, false,
    true, true, true, false, false, false, false, false, false, false,
    true, true, true, false, false, false, true, true, true, false,
    true, true, true, false, false, false, false, true, true, true,
    false, false, true, true, true, false, true, true, true, false,
    false, false, false, false, false, false, true, true, true, false,
    false, false, true, true, true, false, true, true, true, false,
    false, false, false, true, true, true, false, false, true, true,
    true, false, true, true, true, false, false, false, false, false,
    false, false, true, true, true, false, false, false, true, true,
    true, false, true, true, true, false, false, false, false, true,
    true, true, false, false, true, true, true, false, true, true,
    true, false, false, false, false, false, false, false, true, true,
    true, false, false, false
  };

  public static final boolean[] isStatic = {
    false, false, false, false, false, false, false, false, true, false,
    false, false, false, false, false, false, false, false, false, false,
    false, false, false, false, true, true, true, false, false, false,
    false, false, false, false, true, true, false, false, false, false,
    false, false, false, false, true, false, false, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    true, true, true, false, false, false, false, false, false, false,
    true, true, false, false, false, false, false, false, false, false,
    true, false, false, false, false, false, false, false, false, false,
    false, false, false, false, false, false, true, true, true, false,
    false, false, false, false, false, false, true, true, false, false,
    false, false, false, false, false, false, true, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    false, false, true, true, true, false, false, false, false, false,
    false, false, true, true
  };

  public static final boolean[] isFinal = {
    false, false, false, false, false, false, false, false, false, false,
    false, false, false, false, false, true, false, false, false, false,
    false, false, false, false, false, true, false, true, false, false,
    false, false, false, false, true, false, false, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    false, true, false, false, false, false, false, false, false, false,
    false, true, false, true, false, false, false, false, false, false,
    true, false, false, false, false, false, false, false, false, false,
    false, false, false, false, false, false, false, true, false, false,
    false, false, false, false, false, false, false, true, false, true,
    false, false, false, false, false, false, true, false, false, false,
    false, false, false, false, false, false, false, false, false, false,
    false, false, false, true, false, false, false, false, false, false,
    false, false, false, true, false, true, false, false, false, false,
    false, false, true, false
  };

  public static final String[] fieldSpecs = {
    "private Byte Byte0",
    "embedded= true   private Byte Byte1",
    "embedded= false   private Byte Byte2",
    "persistence-modifier= none    private Byte Byte3",
    "persistence-modifier= persistent    private Byte Byte4",
    "persistence-modifier= persistent  embedded= true   private Byte Byte5",
    "persistence-modifier= persistent  embedded= false   private Byte Byte6",
    "persistence-modifier= transactional    private Byte Byte7",
    "private static Byte Byte8",
    "private transient Byte Byte9",
    "persistence-modifier= none    private transient Byte Byte10",
    "persistence-modifier= persistent    private transient Byte Byte11",
    "persistence-modifier= persistent  embedded= true   private transient Byte Byte12",
    "persistence-modifier= persistent  embedded= false   private transient Byte Byte13",
    "persistence-modifier= transactional    private transient Byte Byte14",
    "private final Byte Byte15",
    "private volatile Byte Byte16",
    "embedded= true   private volatile Byte Byte17",
    "embedded= false   private volatile Byte Byte18",
    "persistence-modifier= none    private volatile Byte Byte19",
    "persistence-modifier= persistent    private volatile Byte Byte20",
    "persistence-modifier= persistent  embedded= true   private volatile Byte Byte21",
    "persistence-modifier= persistent  embedded= false   private volatile Byte Byte22",
    "persistence-modifier= transactional    private volatile Byte Byte23",
    "private static transient Byte Byte24",
    "private static final Byte Byte25",
    "private static volatile Byte Byte26",
    "private transient final Byte Byte27",
    "private transient volatile Byte Byte28",
    "persistence-modifier= none    private transient volatile Byte Byte29",
    "persistence-modifier= persistent    private transient volatile Byte Byte30",
    "persistence-modifier= persistent  embedded= true   private transient volatile Byte Byte31",
    "persistence-modifier= persistent  embedded= false   private transient volatile Byte Byte32",
    "persistence-modifier= transactional    private transient volatile Byte Byte33",
    "private static transient final Byte Byte34",
    "private static transient volatile Byte Byte35",
    "public Byte Byte36",
    "embedded= true   public Byte Byte37",
    "embedded= false   public Byte Byte38",
    "persistence-modifier= none    public Byte Byte39",
    "persistence-modifier= persistent    public Byte Byte40",
    "persistence-modifier= persistent  embedded= true   public Byte Byte41",
    "persistence-modifier= persistent  embedded= false   public Byte Byte42",
    "persistence-modifier= transactional    public Byte Byte43",
    "public static Byte Byte44",
    "public transient Byte Byte45",
    "persistence-modifier= none    public transient Byte Byte46",
    "persistence-modifier= persistent    public transient Byte Byte47",
    "persistence-modifier= persistent  embedded= true   public transient Byte Byte48",
    "persistence-modifier= persistent  embedded= false   public transient Byte Byte49",
    "persistence-modifier= transactional    public transient Byte Byte50",
    "public final Byte Byte51",
    "public volatile Byte Byte52",
    "embedded= true   public volatile Byte Byte53",
    "embedded= false   public volatile Byte Byte54",
    "persistence-modifier= none    public volatile Byte Byte55",
    "persistence-modifier= persistent    public volatile Byte Byte56",
    "persistence-modifier= persistent  embedded= true   public volatile Byte Byte57",
    "persistence-modifier= persistent  embedded= false   public volatile Byte Byte58",
    "persistence-modifier= transactional    public volatile Byte Byte59",
    "public static transient Byte Byte60",
    "public static final Byte Byte61",
    "public static volatile Byte Byte62",
    "public transient final Byte Byte63",
    "public transient volatile Byte Byte64",
    "persistence-modifier= none    public transient volatile Byte Byte65",
    "persistence-modifier= persistent    public transient volatile Byte Byte66",
    "persistence-modifier= persistent  embedded= true   public transient volatile Byte Byte67",
    "persistence-modifier= persistent  embedded= false   public transient volatile Byte Byte68",
    "persistence-modifier= transactional    public transient volatile Byte Byte69",
    "public static transient final Byte Byte70",
    "public static transient volatile Byte Byte71",
    "protected Byte Byte72",
    "embedded= true   protected Byte Byte73",
    "embedded= false   protected Byte Byte74",
    "persistence-modifier= none    protected Byte Byte75",
    "persistence-modifier= persistent    protected Byte Byte76",
    "persistence-modifier= persistent  embedded= true   protected Byte Byte77",
    "persistence-modifier= persistent  embedded= false   protected Byte Byte78",
    "persistence-modifier= transactional    protected Byte Byte79",
    "protected static Byte Byte80",
    "protected transient Byte Byte81",
    "persistence-modifier= none    protected transient Byte Byte82",
    "persistence-modifier= persistent    protected transient Byte Byte83",
    "persistence-modifier= persistent  embedded= true   protected transient Byte Byte84",
    "persistence-modifier= persistent  embedded= false   protected transient Byte Byte85",
    "persistence-modifier= transactional    protected transient Byte Byte86",
    "protected final Byte Byte87",
    "protected volatile Byte Byte88",
    "embedded= true   protected volatile Byte Byte89",
    "embedded= false   protected volatile Byte Byte90",
    "persistence-modifier= none    protected volatile Byte Byte91",
    "persistence-modifier= persistent    protected volatile Byte Byte92",
    "persistence-modifier= persistent  embedded= true   protected volatile Byte Byte93",
    "persistence-modifier= persistent  embedded= false   protected volatile Byte Byte94",
    "persistence-modifier= transactional    protected volatile Byte Byte95",
    "protected static transient Byte Byte96",
    "protected static final Byte Byte97",
    "protected static volatile Byte Byte98",
    "protected transient final Byte Byte99",
    "protected transient volatile Byte Byte100",
    "persistence-modifier= none    protected transient volatile Byte Byte101",
    "persistence-modifier= persistent    protected transient volatile Byte Byte102",
    "persistence-modifier= persistent  embedded= true   protected transient volatile Byte Byte103",
    "persistence-modifier= persistent  embedded= false   protected transient volatile Byte Byte104",
    "persistence-modifier= transactional    protected transient volatile Byte Byte105",
    "protected static transient final Byte Byte106",
    "protected static transient volatile Byte Byte107",
    "Byte Byte108",
    "embedded= true   Byte Byte109",
    "embedded= false   Byte Byte110",
    "persistence-modifier= none    Byte Byte111",
    "persistence-modifier= persistent    Byte Byte112",
    "persistence-modifier= persistent  embedded= true   Byte Byte113",
    "persistence-modifier= persistent  embedded= false   Byte Byte114",
    "persistence-modifier= transactional    Byte Byte115",
    "static Byte Byte116",
    "transient Byte Byte117",
    "persistence-modifier= none    transient Byte Byte118",
    "persistence-modifier= persistent    transient Byte Byte119",
    "persistence-modifier= persistent  embedded= true   transient Byte Byte120",
    "persistence-modifier= persistent  embedded= false   transient Byte Byte121",
    "persistence-modifier= transactional    transient Byte Byte122",
    "final Byte Byte123",
    "volatile Byte Byte124",
    "embedded= true   volatile Byte Byte125",
    "embedded= false   volatile Byte Byte126",
    "persistence-modifier= none    volatile Byte Byte127",
    "persistence-modifier= persistent    volatile Byte Byte128",
    "persistence-modifier= persistent  embedded= true   volatile Byte Byte129",
    "persistence-modifier= persistent  embedded= false   volatile Byte Byte130",
    "persistence-modifier= transactional    volatile Byte Byte131",
    "static transient Byte Byte132",
    "static final Byte Byte133",
    "static volatile Byte Byte134",
    "transient final Byte Byte135",
    "transient volatile Byte Byte136",
    "persistence-modifier= none    transient volatile Byte Byte137",
    "persistence-modifier= persistent    transient volatile Byte Byte138",
    "persistence-modifier= persistent  embedded= true   transient volatile Byte Byte139",
    "persistence-modifier= persistent  embedded= false   transient volatile Byte Byte140",
    "persistence-modifier= transactional    transient volatile Byte Byte141",
    "static transient final Byte Byte142",
    "static transient volatile Byte Byte143"
  };

  public int getLength() {
    return fieldSpecs.length;
  }

  public Byte get(int index) {
    switch (index) {
      case (0):
        return Byte0;
      case (1):
        return Byte1;
      case (2):
        return Byte2;
      case (3):
        return Byte3;
      case (4):
        return Byte4;
      case (5):
        return Byte5;
      case (6):
        return Byte6;
      case (7):
        return Byte7;
      case (8):
        return Byte8;
      case (9):
        return Byte9;
      case (10):
        return Byte10;
      case (11):
        return Byte11;
      case (12):
        return Byte12;
      case (13):
        return Byte13;
      case (14):
        return Byte14;
      case (15):
        return Byte15;
      case (16):
        return Byte16;
      case (17):
        return Byte17;
      case (18):
        return Byte18;
      case (19):
        return Byte19;
      case (20):
        return Byte20;
      case (21):
        return Byte21;
      case (22):
        return Byte22;
      case (23):
        return Byte23;
      case (24):
        return Byte24;
      case (25):
        return Byte25;
      case (26):
        return Byte26;
      case (27):
        return Byte27;
      case (28):
        return Byte28;
      case (29):
        return Byte29;
      case (30):
        return Byte30;
      case (31):
        return Byte31;
      case (32):
        return Byte32;
      case (33):
        return Byte33;
      case (34):
        return Byte34;
      case (35):
        return Byte35;
      case (36):
        return Byte36;
      case (37):
        return Byte37;
      case (38):
        return Byte38;
      case (39):
        return Byte39;
      case (40):
        return Byte40;
      case (41):
        return Byte41;
      case (42):
        return Byte42;
      case (43):
        return Byte43;
      case (44):
        return Byte44;
      case (45):
        return Byte45;
      case (46):
        return Byte46;
      case (47):
        return Byte47;
      case (48):
        return Byte48;
      case (49):
        return Byte49;
      case (50):
        return Byte50;
      case (51):
        return Byte51;
      case (52):
        return Byte52;
      case (53):
        return Byte53;
      case (54):
        return Byte54;
      case (55):
        return Byte55;
      case (56):
        return Byte56;
      case (57):
        return Byte57;
      case (58):
        return Byte58;
      case (59):
        return Byte59;
      case (60):
        return Byte60;
      case (61):
        return Byte61;
      case (62):
        return Byte62;
      case (63):
        return Byte63;
      case (64):
        return Byte64;
      case (65):
        return Byte65;
      case (66):
        return Byte66;
      case (67):
        return Byte67;
      case (68):
        return Byte68;
      case (69):
        return Byte69;
      case (70):
        return Byte70;
      case (71):
        return Byte71;
      case (72):
        return Byte72;
      case (73):
        return Byte73;
      case (74):
        return Byte74;
      case (75):
        return Byte75;
      case (76):
        return Byte76;
      case (77):
        return Byte77;
      case (78):
        return Byte78;
      case (79):
        return Byte79;
      case (80):
        return Byte80;
      case (81):
        return Byte81;
      case (82):
        return Byte82;
      case (83):
        return Byte83;
      case (84):
        return Byte84;
      case (85):
        return Byte85;
      case (86):
        return Byte86;
      case (87):
        return Byte87;
      case (88):
        return Byte88;
      case (89):
        return Byte89;
      case (90):
        return Byte90;
      case (91):
        return Byte91;
      case (92):
        return Byte92;
      case (93):
        return Byte93;
      case (94):
        return Byte94;
      case (95):
        return Byte95;
      case (96):
        return Byte96;
      case (97):
        return Byte97;
      case (98):
        return Byte98;
      case (99):
        return Byte99;
      case (100):
        return Byte100;
      case (101):
        return Byte101;
      case (102):
        return Byte102;
      case (103):
        return Byte103;
      case (104):
        return Byte104;
      case (105):
        return Byte105;
      case (106):
        return Byte106;
      case (107):
        return Byte107;
      case (108):
        return Byte108;
      case (109):
        return Byte109;
      case (110):
        return Byte110;
      case (111):
        return Byte111;
      case (112):
        return Byte112;
      case (113):
        return Byte113;
      case (114):
        return Byte114;
      case (115):
        return Byte115;
      case (116):
        return Byte116;
      case (117):
        return Byte117;
      case (118):
        return Byte118;
      case (119):
        return Byte119;
      case (120):
        return Byte120;
      case (121):
        return Byte121;
      case (122):
        return Byte122;
      case (123):
        return Byte123;
      case (124):
        return Byte124;
      case (125):
        return Byte125;
      case (126):
        return Byte126;
      case (127):
        return Byte127;
      case (128):
        return Byte128;
      case (129):
        return Byte129;
      case (130):
        return Byte130;
      case (131):
        return Byte131;
      case (132):
        return Byte132;
      case (133):
        return Byte133;
      case (134):
        return Byte134;
      case (135):
        return Byte135;
      case (136):
        return Byte136;
      case (137):
        return Byte137;
      case (138):
        return Byte138;
      case (139):
        return Byte139;
      case (140):
        return Byte140;
      case (141):
        return Byte141;
      case (142):
        return Byte142;
      case (143):
        return Byte143;
      default:
        throw new IndexOutOfBoundsException();
    }
  }

  public boolean set(int index, Byte value) {
    if (fieldSpecs[index].indexOf("final") != -1) return false;
    switch (index) {
      case (0):
        Byte0 = value;
        break;
      case (1):
        Byte1 = value;
        break;
      case (2):
        Byte2 = value;
        break;
      case (3):
        Byte3 = value;
        break;
      case (4):
        Byte4 = value;
        break;
      case (5):
        Byte5 = value;
        break;
      case (6):
        Byte6 = value;
        break;
      case (7):
        Byte7 = value;
        break;
      case (8):
        Byte8 = value;
        break;
      case (9):
        Byte9 = value;
        break;
      case (10):
        Byte10 = value;
        break;
      case (11):
        Byte11 = value;
        break;
      case (12):
        Byte12 = value;
        break;
      case (13):
        Byte13 = value;
        break;
      case (14):
        Byte14 = value;
        break;
      case (16):
        Byte16 = value;
        break;
      case (17):
        Byte17 = value;
        break;
      case (18):
        Byte18 = value;
        break;
      case (19):
        Byte19 = value;
        break;
      case (20):
        Byte20 = value;
        break;
      case (21):
        Byte21 = value;
        break;
      case (22):
        Byte22 = value;
        break;
      case (23):
        Byte23 = value;
        break;
      case (24):
        Byte24 = value;
        break;
      case (26):
        Byte26 = value;
        break;
      case (28):
        Byte28 = value;
        break;
      case (29):
        Byte29 = value;
        break;
      case (30):
        Byte30 = value;
        break;
      case (31):
        Byte31 = value;
        break;
      case (32):
        Byte32 = value;
        break;
      case (33):
        Byte33 = value;
        break;
      case (35):
        Byte35 = value;
        break;
      case (36):
        Byte36 = value;
        break;
      case (37):
        Byte37 = value;
        break;
      case (38):
        Byte38 = value;
        break;
      case (39):
        Byte39 = value;
        break;
      case (40):
        Byte40 = value;
        break;
      case (41):
        Byte41 = value;
        break;
      case (42):
        Byte42 = value;
        break;
      case (43):
        Byte43 = value;
        break;
      case (44):
        Byte44 = value;
        break;
      case (45):
        Byte45 = value;
        break;
      case (46):
        Byte46 = value;
        break;
      case (47):
        Byte47 = value;
        break;
      case (48):
        Byte48 = value;
        break;
      case (49):
        Byte49 = value;
        break;
      case (50):
        Byte50 = value;
        break;
      case (52):
        Byte52 = value;
        break;
      case (53):
        Byte53 = value;
        break;
      case (54):
        Byte54 = value;
        break;
      case (55):
        Byte55 = value;
        break;
      case (56):
        Byte56 = value;
        break;
      case (57):
        Byte57 = value;
        break;
      case (58):
        Byte58 = value;
        break;
      case (59):
        Byte59 = value;
        break;
      case (60):
        Byte60 = value;
        break;
      case (62):
        Byte62 = value;
        break;
      case (64):
        Byte64 = value;
        break;
      case (65):
        Byte65 = value;
        break;
      case (66):
        Byte66 = value;
        break;
      case (67):
        Byte67 = value;
        break;
      case (68):
        Byte68 = value;
        break;
      case (69):
        Byte69 = value;
        break;
      case (71):
        Byte71 = value;
        break;
      case (72):
        Byte72 = value;
        break;
      case (73):
        Byte73 = value;
        break;
      case (74):
        Byte74 = value;
        break;
      case (75):
        Byte75 = value;
        break;
      case (76):
        Byte76 = value;
        break;
      case (77):
        Byte77 = value;
        break;
      case (78):
        Byte78 = value;
        break;
      case (79):
        Byte79 = value;
        break;
      case (80):
        Byte80 = value;
        break;
      case (81):
        Byte81 = value;
        break;
      case (82):
        Byte82 = value;
        break;
      case (83):
        Byte83 = value;
        break;
      case (84):
        Byte84 = value;
        break;
      case (85):
        Byte85 = value;
        break;
      case (86):
        Byte86 = value;
        break;
      case (88):
        Byte88 = value;
        break;
      case (89):
        Byte89 = value;
        break;
      case (90):
        Byte90 = value;
        break;
      case (91):
        Byte91 = value;
        break;
      case (92):
        Byte92 = value;
        break;
      case (93):
        Byte93 = value;
        break;
      case (94):
        Byte94 = value;
        break;
      case (95):
        Byte95 = value;
        break;
      case (96):
        Byte96 = value;
        break;
      case (98):
        Byte98 = value;
        break;
      case (100):
        Byte100 = value;
        break;
      case (101):
        Byte101 = value;
        break;
      case (102):
        Byte102 = value;
        break;
      case (103):
        Byte103 = value;
        break;
      case (104):
        Byte104 = value;
        break;
      case (105):
        Byte105 = value;
        break;
      case (107):
        Byte107 = value;
        break;
      case (108):
        Byte108 = value;
        break;
      case (109):
        Byte109 = value;
        break;
      case (110):
        Byte110 = value;
        break;
      case (111):
        Byte111 = value;
        break;
      case (112):
        Byte112 = value;
        break;
      case (113):
        Byte113 = value;
        break;
      case (114):
        Byte114 = value;
        break;
      case (115):
        Byte115 = value;
        break;
      case (116):
        Byte116 = value;
        break;
      case (117):
        Byte117 = value;
        break;
      case (118):
        Byte118 = value;
        break;
      case (119):
        Byte119 = value;
        break;
      case (120):
        Byte120 = value;
        break;
      case (121):
        Byte121 = value;
        break;
      case (122):
        Byte122 = value;
        break;
      case (124):
        Byte124 = value;
        break;
      case (125):
        Byte125 = value;
        break;
      case (126):
        Byte126 = value;
        break;
      case (127):
        Byte127 = value;
        break;
      case (128):
        Byte128 = value;
        break;
      case (129):
        Byte129 = value;
        break;
      case (130):
        Byte130 = value;
        break;
      case (131):
        Byte131 = value;
        break;
      case (132):
        Byte132 = value;
        break;
      case (134):
        Byte134 = value;
        break;
      case (136):
        Byte136 = value;
        break;
      case (137):
        Byte137 = value;
        break;
      case (138):
        Byte138 = value;
        break;
      case (139):
        Byte139 = value;
        break;
      case (140):
        Byte140 = value;
        break;
      case (141):
        Byte141 = value;
        break;
      case (143):
        Byte143 = value;
        break;
      default:
        throw new IndexOutOfBoundsException();
    }
    return true;
  }

  public static class Oid implements Serializable {

    private static final long serialVersionUID = 1L;
    public int identifier;

    public Oid() {}

    public Oid(String s) {
      identifier = Integer.parseInt(justTheId(s));
    }

    public String toString() {
      return this.getClass().getName() + ": " + identifier;
    }

    public int hashCode() {
      return identifier;
    }

    public boolean equals(Object other) {
      if (other != null && (other instanceof Oid)) {
        Oid k = (Oid) other;
        return k.identifier == this.identifier;
      }
      return false;
    }

    protected static String justTheId(String str) {
      return str.substring(str.indexOf(':') + 1);
    }
  }
}
