/*
 * 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 FieldsOfLong {
  public int identifier;
  private Long Long0;
  private Long Long1;
  private Long Long2;
  private Long Long3;
  private Long Long4;
  private Long Long5;
  private Long Long6;
  private Long Long7;
  private static Long Long8;
  private transient Long Long9;
  private transient Long Long10;
  private transient Long Long11;
  private transient Long Long12;
  private transient Long Long13;
  private transient Long Long14;
  private final Long Long15 = Long.valueOf(5);
  private volatile Long Long16;
  private volatile Long Long17;
  private volatile Long Long18;
  private volatile Long Long19;
  private volatile Long Long20;
  private volatile Long Long21;
  private volatile Long Long22;
  private volatile Long Long23;
  private static transient Long Long24;
  private static final Long Long25 = Long.valueOf(5);
  private static volatile Long Long26;
  private final transient Long Long27 = Long.valueOf(5);
  private transient volatile Long Long28;
  private transient volatile Long Long29;
  private transient volatile Long Long30;
  private transient volatile Long Long31;
  private transient volatile Long Long32;
  private transient volatile Long Long33;
  private static final transient Long Long34 = Long.valueOf(5);
  private static transient volatile Long Long35;
  public Long Long36;
  public Long Long37;
  public Long Long38;
  public Long Long39;
  public Long Long40;
  public Long Long41;
  public Long Long42;
  public Long Long43;
  public static Long Long44;
  public transient Long Long45;
  public transient Long Long46;
  public transient Long Long47;
  public transient Long Long48;
  public transient Long Long49;
  public transient Long Long50;
  public final Long Long51 = Long.valueOf(5);
  public volatile Long Long52;
  public volatile Long Long53;
  public volatile Long Long54;
  public volatile Long Long55;
  public volatile Long Long56;
  public volatile Long Long57;
  public volatile Long Long58;
  public volatile Long Long59;
  public static transient Long Long60;
  public static final Long Long61 = Long.valueOf(5);
  public static volatile Long Long62;
  public final transient Long Long63 = Long.valueOf(5);
  public transient volatile Long Long64;
  public transient volatile Long Long65;
  public transient volatile Long Long66;
  public transient volatile Long Long67;
  public transient volatile Long Long68;
  public transient volatile Long Long69;
  public static final transient Long Long70 = Long.valueOf(5);
  public static transient volatile Long Long71;
  protected Long Long72;
  protected Long Long73;
  protected Long Long74;
  protected Long Long75;
  protected Long Long76;
  protected Long Long77;
  protected Long Long78;
  protected Long Long79;
  protected static Long Long80;
  protected transient Long Long81;
  protected transient Long Long82;
  protected transient Long Long83;
  protected transient Long Long84;
  protected transient Long Long85;
  protected transient Long Long86;
  protected final Long Long87 = Long.valueOf(5);
  protected volatile Long Long88;
  protected volatile Long Long89;
  protected volatile Long Long90;
  protected volatile Long Long91;
  protected volatile Long Long92;
  protected volatile Long Long93;
  protected volatile Long Long94;
  protected volatile Long Long95;
  protected static transient Long Long96;
  protected static final Long Long97 = Long.valueOf(5);
  protected static volatile Long Long98;
  protected final transient Long Long99 = Long.valueOf(5);
  protected transient volatile Long Long100;
  protected transient volatile Long Long101;
  protected transient volatile Long Long102;
  protected transient volatile Long Long103;
  protected transient volatile Long Long104;
  protected transient volatile Long Long105;
  protected static final transient Long Long106 = Long.valueOf(5);
  protected static transient volatile Long Long107;
  Long Long108;
  Long Long109;
  Long Long110;
  Long Long111;
  Long Long112;
  Long Long113;
  Long Long114;
  Long Long115;
  static Long Long116;
  transient Long Long117;
  transient Long Long118;
  transient Long Long119;
  transient Long Long120;
  transient Long Long121;
  transient Long Long122;
  final Long Long123 = Long.valueOf(5);
  volatile Long Long124;
  volatile Long Long125;
  volatile Long Long126;
  volatile Long Long127;
  volatile Long Long128;
  volatile Long Long129;
  volatile Long Long130;
  volatile Long Long131;
  static transient Long Long132;
  static final Long Long133 = Long.valueOf(5);
  static volatile Long Long134;
  final transient Long Long135 = Long.valueOf(5);
  transient volatile Long Long136;
  transient volatile Long Long137;
  transient volatile Long Long138;
  transient volatile Long Long139;
  transient volatile Long Long140;
  transient volatile Long Long141;
  static final transient Long Long142 = Long.valueOf(5);
  static transient volatile Long Long143;

  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 Long Long0",
    "embedded= true   private Long Long1",
    "embedded= false   private Long Long2",
    "persistence-modifier= none    private Long Long3",
    "persistence-modifier= persistent    private Long Long4",
    "persistence-modifier= persistent  embedded= true   private Long Long5",
    "persistence-modifier= persistent  embedded= false   private Long Long6",
    "persistence-modifier= transactional    private Long Long7",
    "private static Long Long8",
    "private transient Long Long9",
    "persistence-modifier= none    private transient Long Long10",
    "persistence-modifier= persistent    private transient Long Long11",
    "persistence-modifier= persistent  embedded= true   private transient Long Long12",
    "persistence-modifier= persistent  embedded= false   private transient Long Long13",
    "persistence-modifier= transactional    private transient Long Long14",
    "private final Long Long15",
    "private volatile Long Long16",
    "embedded= true   private volatile Long Long17",
    "embedded= false   private volatile Long Long18",
    "persistence-modifier= none    private volatile Long Long19",
    "persistence-modifier= persistent    private volatile Long Long20",
    "persistence-modifier= persistent  embedded= true   private volatile Long Long21",
    "persistence-modifier= persistent  embedded= false   private volatile Long Long22",
    "persistence-modifier= transactional    private volatile Long Long23",
    "private static transient Long Long24",
    "private static final Long Long25",
    "private static volatile Long Long26",
    "private transient final Long Long27",
    "private transient volatile Long Long28",
    "persistence-modifier= none    private transient volatile Long Long29",
    "persistence-modifier= persistent    private transient volatile Long Long30",
    "persistence-modifier= persistent  embedded= true   private transient volatile Long Long31",
    "persistence-modifier= persistent  embedded= false   private transient volatile Long Long32",
    "persistence-modifier= transactional    private transient volatile Long Long33",
    "private static transient final Long Long34",
    "private static transient volatile Long Long35",
    "public Long Long36",
    "embedded= true   public Long Long37",
    "embedded= false   public Long Long38",
    "persistence-modifier= none    public Long Long39",
    "persistence-modifier= persistent    public Long Long40",
    "persistence-modifier= persistent  embedded= true   public Long Long41",
    "persistence-modifier= persistent  embedded= false   public Long Long42",
    "persistence-modifier= transactional    public Long Long43",
    "public static Long Long44",
    "public transient Long Long45",
    "persistence-modifier= none    public transient Long Long46",
    "persistence-modifier= persistent    public transient Long Long47",
    "persistence-modifier= persistent  embedded= true   public transient Long Long48",
    "persistence-modifier= persistent  embedded= false   public transient Long Long49",
    "persistence-modifier= transactional    public transient Long Long50",
    "public final Long Long51",
    "public volatile Long Long52",
    "embedded= true   public volatile Long Long53",
    "embedded= false   public volatile Long Long54",
    "persistence-modifier= none    public volatile Long Long55",
    "persistence-modifier= persistent    public volatile Long Long56",
    "persistence-modifier= persistent  embedded= true   public volatile Long Long57",
    "persistence-modifier= persistent  embedded= false   public volatile Long Long58",
    "persistence-modifier= transactional    public volatile Long Long59",
    "public static transient Long Long60",
    "public static final Long Long61",
    "public static volatile Long Long62",
    "public transient final Long Long63",
    "public transient volatile Long Long64",
    "persistence-modifier= none    public transient volatile Long Long65",
    "persistence-modifier= persistent    public transient volatile Long Long66",
    "persistence-modifier= persistent  embedded= true   public transient volatile Long Long67",
    "persistence-modifier= persistent  embedded= false   public transient volatile Long Long68",
    "persistence-modifier= transactional    public transient volatile Long Long69",
    "public static transient final Long Long70",
    "public static transient volatile Long Long71",
    "protected Long Long72",
    "embedded= true   protected Long Long73",
    "embedded= false   protected Long Long74",
    "persistence-modifier= none    protected Long Long75",
    "persistence-modifier= persistent    protected Long Long76",
    "persistence-modifier= persistent  embedded= true   protected Long Long77",
    "persistence-modifier= persistent  embedded= false   protected Long Long78",
    "persistence-modifier= transactional    protected Long Long79",
    "protected static Long Long80",
    "protected transient Long Long81",
    "persistence-modifier= none    protected transient Long Long82",
    "persistence-modifier= persistent    protected transient Long Long83",
    "persistence-modifier= persistent  embedded= true   protected transient Long Long84",
    "persistence-modifier= persistent  embedded= false   protected transient Long Long85",
    "persistence-modifier= transactional    protected transient Long Long86",
    "protected final Long Long87",
    "protected volatile Long Long88",
    "embedded= true   protected volatile Long Long89",
    "embedded= false   protected volatile Long Long90",
    "persistence-modifier= none    protected volatile Long Long91",
    "persistence-modifier= persistent    protected volatile Long Long92",
    "persistence-modifier= persistent  embedded= true   protected volatile Long Long93",
    "persistence-modifier= persistent  embedded= false   protected volatile Long Long94",
    "persistence-modifier= transactional    protected volatile Long Long95",
    "protected static transient Long Long96",
    "protected static final Long Long97",
    "protected static volatile Long Long98",
    "protected transient final Long Long99",
    "protected transient volatile Long Long100",
    "persistence-modifier= none    protected transient volatile Long Long101",
    "persistence-modifier= persistent    protected transient volatile Long Long102",
    "persistence-modifier= persistent  embedded= true   protected transient volatile Long Long103",
    "persistence-modifier= persistent  embedded= false   protected transient volatile Long Long104",
    "persistence-modifier= transactional    protected transient volatile Long Long105",
    "protected static transient final Long Long106",
    "protected static transient volatile Long Long107",
    "Long Long108",
    "embedded= true   Long Long109",
    "embedded= false   Long Long110",
    "persistence-modifier= none    Long Long111",
    "persistence-modifier= persistent    Long Long112",
    "persistence-modifier= persistent  embedded= true   Long Long113",
    "persistence-modifier= persistent  embedded= false   Long Long114",
    "persistence-modifier= transactional    Long Long115",
    "static Long Long116",
    "transient Long Long117",
    "persistence-modifier= none    transient Long Long118",
    "persistence-modifier= persistent    transient Long Long119",
    "persistence-modifier= persistent  embedded= true   transient Long Long120",
    "persistence-modifier= persistent  embedded= false   transient Long Long121",
    "persistence-modifier= transactional    transient Long Long122",
    "final Long Long123",
    "volatile Long Long124",
    "embedded= true   volatile Long Long125",
    "embedded= false   volatile Long Long126",
    "persistence-modifier= none    volatile Long Long127",
    "persistence-modifier= persistent    volatile Long Long128",
    "persistence-modifier= persistent  embedded= true   volatile Long Long129",
    "persistence-modifier= persistent  embedded= false   volatile Long Long130",
    "persistence-modifier= transactional    volatile Long Long131",
    "static transient Long Long132",
    "static final Long Long133",
    "static volatile Long Long134",
    "transient final Long Long135",
    "transient volatile Long Long136",
    "persistence-modifier= none    transient volatile Long Long137",
    "persistence-modifier= persistent    transient volatile Long Long138",
    "persistence-modifier= persistent  embedded= true   transient volatile Long Long139",
    "persistence-modifier= persistent  embedded= false   transient volatile Long Long140",
    "persistence-modifier= transactional    transient volatile Long Long141",
    "static transient final Long Long142",
    "static transient volatile Long Long143"
  };

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

  public Long get(int index) {
    switch (index) {
      case (0):
        return Long0;
      case (1):
        return Long1;
      case (2):
        return Long2;
      case (3):
        return Long3;
      case (4):
        return Long4;
      case (5):
        return Long5;
      case (6):
        return Long6;
      case (7):
        return Long7;
      case (8):
        return Long8;
      case (9):
        return Long9;
      case (10):
        return Long10;
      case (11):
        return Long11;
      case (12):
        return Long12;
      case (13):
        return Long13;
      case (14):
        return Long14;
      case (15):
        return Long15;
      case (16):
        return Long16;
      case (17):
        return Long17;
      case (18):
        return Long18;
      case (19):
        return Long19;
      case (20):
        return Long20;
      case (21):
        return Long21;
      case (22):
        return Long22;
      case (23):
        return Long23;
      case (24):
        return Long24;
      case (25):
        return Long25;
      case (26):
        return Long26;
      case (27):
        return Long27;
      case (28):
        return Long28;
      case (29):
        return Long29;
      case (30):
        return Long30;
      case (31):
        return Long31;
      case (32):
        return Long32;
      case (33):
        return Long33;
      case (34):
        return Long34;
      case (35):
        return Long35;
      case (36):
        return Long36;
      case (37):
        return Long37;
      case (38):
        return Long38;
      case (39):
        return Long39;
      case (40):
        return Long40;
      case (41):
        return Long41;
      case (42):
        return Long42;
      case (43):
        return Long43;
      case (44):
        return Long44;
      case (45):
        return Long45;
      case (46):
        return Long46;
      case (47):
        return Long47;
      case (48):
        return Long48;
      case (49):
        return Long49;
      case (50):
        return Long50;
      case (51):
        return Long51;
      case (52):
        return Long52;
      case (53):
        return Long53;
      case (54):
        return Long54;
      case (55):
        return Long55;
      case (56):
        return Long56;
      case (57):
        return Long57;
      case (58):
        return Long58;
      case (59):
        return Long59;
      case (60):
        return Long60;
      case (61):
        return Long61;
      case (62):
        return Long62;
      case (63):
        return Long63;
      case (64):
        return Long64;
      case (65):
        return Long65;
      case (66):
        return Long66;
      case (67):
        return Long67;
      case (68):
        return Long68;
      case (69):
        return Long69;
      case (70):
        return Long70;
      case (71):
        return Long71;
      case (72):
        return Long72;
      case (73):
        return Long73;
      case (74):
        return Long74;
      case (75):
        return Long75;
      case (76):
        return Long76;
      case (77):
        return Long77;
      case (78):
        return Long78;
      case (79):
        return Long79;
      case (80):
        return Long80;
      case (81):
        return Long81;
      case (82):
        return Long82;
      case (83):
        return Long83;
      case (84):
        return Long84;
      case (85):
        return Long85;
      case (86):
        return Long86;
      case (87):
        return Long87;
      case (88):
        return Long88;
      case (89):
        return Long89;
      case (90):
        return Long90;
      case (91):
        return Long91;
      case (92):
        return Long92;
      case (93):
        return Long93;
      case (94):
        return Long94;
      case (95):
        return Long95;
      case (96):
        return Long96;
      case (97):
        return Long97;
      case (98):
        return Long98;
      case (99):
        return Long99;
      case (100):
        return Long100;
      case (101):
        return Long101;
      case (102):
        return Long102;
      case (103):
        return Long103;
      case (104):
        return Long104;
      case (105):
        return Long105;
      case (106):
        return Long106;
      case (107):
        return Long107;
      case (108):
        return Long108;
      case (109):
        return Long109;
      case (110):
        return Long110;
      case (111):
        return Long111;
      case (112):
        return Long112;
      case (113):
        return Long113;
      case (114):
        return Long114;
      case (115):
        return Long115;
      case (116):
        return Long116;
      case (117):
        return Long117;
      case (118):
        return Long118;
      case (119):
        return Long119;
      case (120):
        return Long120;
      case (121):
        return Long121;
      case (122):
        return Long122;
      case (123):
        return Long123;
      case (124):
        return Long124;
      case (125):
        return Long125;
      case (126):
        return Long126;
      case (127):
        return Long127;
      case (128):
        return Long128;
      case (129):
        return Long129;
      case (130):
        return Long130;
      case (131):
        return Long131;
      case (132):
        return Long132;
      case (133):
        return Long133;
      case (134):
        return Long134;
      case (135):
        return Long135;
      case (136):
        return Long136;
      case (137):
        return Long137;
      case (138):
        return Long138;
      case (139):
        return Long139;
      case (140):
        return Long140;
      case (141):
        return Long141;
      case (142):
        return Long142;
      case (143):
        return Long143;
      default:
        throw new IndexOutOfBoundsException();
    }
  }

  public boolean set(int index, Long value) {
    if (fieldSpecs[index].indexOf("final") != -1) return false;
    switch (index) {
      case (0):
        Long0 = value;
        break;
      case (1):
        Long1 = value;
        break;
      case (2):
        Long2 = value;
        break;
      case (3):
        Long3 = value;
        break;
      case (4):
        Long4 = value;
        break;
      case (5):
        Long5 = value;
        break;
      case (6):
        Long6 = value;
        break;
      case (7):
        Long7 = value;
        break;
      case (8):
        Long8 = value;
        break;
      case (9):
        Long9 = value;
        break;
      case (10):
        Long10 = value;
        break;
      case (11):
        Long11 = value;
        break;
      case (12):
        Long12 = value;
        break;
      case (13):
        Long13 = value;
        break;
      case (14):
        Long14 = value;
        break;
      case (16):
        Long16 = value;
        break;
      case (17):
        Long17 = value;
        break;
      case (18):
        Long18 = value;
        break;
      case (19):
        Long19 = value;
        break;
      case (20):
        Long20 = value;
        break;
      case (21):
        Long21 = value;
        break;
      case (22):
        Long22 = value;
        break;
      case (23):
        Long23 = value;
        break;
      case (24):
        Long24 = value;
        break;
      case (26):
        Long26 = value;
        break;
      case (28):
        Long28 = value;
        break;
      case (29):
        Long29 = value;
        break;
      case (30):
        Long30 = value;
        break;
      case (31):
        Long31 = value;
        break;
      case (32):
        Long32 = value;
        break;
      case (33):
        Long33 = value;
        break;
      case (35):
        Long35 = value;
        break;
      case (36):
        Long36 = value;
        break;
      case (37):
        Long37 = value;
        break;
      case (38):
        Long38 = value;
        break;
      case (39):
        Long39 = value;
        break;
      case (40):
        Long40 = value;
        break;
      case (41):
        Long41 = value;
        break;
      case (42):
        Long42 = value;
        break;
      case (43):
        Long43 = value;
        break;
      case (44):
        Long44 = value;
        break;
      case (45):
        Long45 = value;
        break;
      case (46):
        Long46 = value;
        break;
      case (47):
        Long47 = value;
        break;
      case (48):
        Long48 = value;
        break;
      case (49):
        Long49 = value;
        break;
      case (50):
        Long50 = value;
        break;
      case (52):
        Long52 = value;
        break;
      case (53):
        Long53 = value;
        break;
      case (54):
        Long54 = value;
        break;
      case (55):
        Long55 = value;
        break;
      case (56):
        Long56 = value;
        break;
      case (57):
        Long57 = value;
        break;
      case (58):
        Long58 = value;
        break;
      case (59):
        Long59 = value;
        break;
      case (60):
        Long60 = value;
        break;
      case (62):
        Long62 = value;
        break;
      case (64):
        Long64 = value;
        break;
      case (65):
        Long65 = value;
        break;
      case (66):
        Long66 = value;
        break;
      case (67):
        Long67 = value;
        break;
      case (68):
        Long68 = value;
        break;
      case (69):
        Long69 = value;
        break;
      case (71):
        Long71 = value;
        break;
      case (72):
        Long72 = value;
        break;
      case (73):
        Long73 = value;
        break;
      case (74):
        Long74 = value;
        break;
      case (75):
        Long75 = value;
        break;
      case (76):
        Long76 = value;
        break;
      case (77):
        Long77 = value;
        break;
      case (78):
        Long78 = value;
        break;
      case (79):
        Long79 = value;
        break;
      case (80):
        Long80 = value;
        break;
      case (81):
        Long81 = value;
        break;
      case (82):
        Long82 = value;
        break;
      case (83):
        Long83 = value;
        break;
      case (84):
        Long84 = value;
        break;
      case (85):
        Long85 = value;
        break;
      case (86):
        Long86 = value;
        break;
      case (88):
        Long88 = value;
        break;
      case (89):
        Long89 = value;
        break;
      case (90):
        Long90 = value;
        break;
      case (91):
        Long91 = value;
        break;
      case (92):
        Long92 = value;
        break;
      case (93):
        Long93 = value;
        break;
      case (94):
        Long94 = value;
        break;
      case (95):
        Long95 = value;
        break;
      case (96):
        Long96 = value;
        break;
      case (98):
        Long98 = value;
        break;
      case (100):
        Long100 = value;
        break;
      case (101):
        Long101 = value;
        break;
      case (102):
        Long102 = value;
        break;
      case (103):
        Long103 = value;
        break;
      case (104):
        Long104 = value;
        break;
      case (105):
        Long105 = value;
        break;
      case (107):
        Long107 = value;
        break;
      case (108):
        Long108 = value;
        break;
      case (109):
        Long109 = value;
        break;
      case (110):
        Long110 = value;
        break;
      case (111):
        Long111 = value;
        break;
      case (112):
        Long112 = value;
        break;
      case (113):
        Long113 = value;
        break;
      case (114):
        Long114 = value;
        break;
      case (115):
        Long115 = value;
        break;
      case (116):
        Long116 = value;
        break;
      case (117):
        Long117 = value;
        break;
      case (118):
        Long118 = value;
        break;
      case (119):
        Long119 = value;
        break;
      case (120):
        Long120 = value;
        break;
      case (121):
        Long121 = value;
        break;
      case (122):
        Long122 = value;
        break;
      case (124):
        Long124 = value;
        break;
      case (125):
        Long125 = value;
        break;
      case (126):
        Long126 = value;
        break;
      case (127):
        Long127 = value;
        break;
      case (128):
        Long128 = value;
        break;
      case (129):
        Long129 = value;
        break;
      case (130):
        Long130 = value;
        break;
      case (131):
        Long131 = value;
        break;
      case (132):
        Long132 = value;
        break;
      case (134):
        Long134 = value;
        break;
      case (136):
        Long136 = value;
        break;
      case (137):
        Long137 = value;
        break;
      case (138):
        Long138 = value;
        break;
      case (139):
        Long139 = value;
        break;
      case (140):
        Long140 = value;
        break;
      case (141):
        Long141 = value;
        break;
      case (143):
        Long143 = 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);
    }
  }
}
