/*
 * 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;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Date;
import java.util.TreeMap;

public class TreeMapStringValueCollections {
  public int identifier;
  public TreeMap<Object, String> TreeMapOfObject_String0;
  public TreeMap<Object, String> TreeMapOfObject_String1;
  public TreeMap<Object, String> TreeMapOfObject_String2;
  public TreeMap<Object, String> TreeMapOfObject_String3;
  public TreeMap<Object, String> TreeMapOfObject_String4;
  public TreeMap<Object, String> TreeMapOfObject_String6;
  public TreeMap<Object, String> TreeMapOfObject_String8;
  public TreeMap<SimpleClass, String> TreeMapOfSimpleClass_String9;
  public TreeMap<SimpleClass, String> TreeMapOfSimpleClass_String10;
  public TreeMap<SimpleClass, String> TreeMapOfSimpleClass_String11;
  public TreeMap<SimpleClass, String> TreeMapOfSimpleClass_String12;
  public TreeMap<SimpleClass, String> TreeMapOfSimpleClass_String13;
  public TreeMap<SimpleClass, String> TreeMapOfSimpleClass_String15;
  public TreeMap<SimpleClass, String> TreeMapOfSimpleClass_String17;
  public TreeMap<SimpleInterface, String> TreeMapOfSimpleInterface_String18;
  public TreeMap<SimpleInterface, String> TreeMapOfSimpleInterface_String19;
  public TreeMap<SimpleInterface, String> TreeMapOfSimpleInterface_String20;
  public TreeMap<SimpleInterface, String> TreeMapOfSimpleInterface_String21;
  public TreeMap<SimpleInterface, String> TreeMapOfSimpleInterface_String22;
  public TreeMap<SimpleInterface, String> TreeMapOfSimpleInterface_String24;
  public TreeMap<SimpleInterface, String> TreeMapOfSimpleInterface_String26;
  public TreeMap<String, String> TreeMapOfString_String27;
  public TreeMap<String, String> TreeMapOfString_String28;
  public TreeMap<String, String> TreeMapOfString_String29;
  public TreeMap<String, String> TreeMapOfString_String30;
  public TreeMap<String, String> TreeMapOfString_String31;
  public TreeMap<String, String> TreeMapOfString_String33;
  public TreeMap<String, String> TreeMapOfString_String35;
  public TreeMap<Date, String> TreeMapOfDate_String36;
  public TreeMap<Date, String> TreeMapOfDate_String37;
  public TreeMap<Date, String> TreeMapOfDate_String38;
  public TreeMap<Date, String> TreeMapOfDate_String39;
  public TreeMap<Date, String> TreeMapOfDate_String40;
  public TreeMap<Date, String> TreeMapOfDate_String42;
  public TreeMap<Date, String> TreeMapOfDate_String44;
  public TreeMap<BigDecimal, String> TreeMapOfBigDecimal_String45;
  public TreeMap<BigDecimal, String> TreeMapOfBigDecimal_String46;
  public TreeMap<BigDecimal, String> TreeMapOfBigDecimal_String47;
  public TreeMap<BigDecimal, String> TreeMapOfBigDecimal_String48;
  public TreeMap<BigDecimal, String> TreeMapOfBigDecimal_String49;
  public TreeMap<BigDecimal, String> TreeMapOfBigDecimal_String51;
  public TreeMap<BigDecimal, String> TreeMapOfBigDecimal_String53;
  public TreeMap<BigInteger, String> TreeMapOfBigInteger_String54;
  public TreeMap<BigInteger, String> TreeMapOfBigInteger_String55;
  public TreeMap<BigInteger, String> TreeMapOfBigInteger_String56;
  public TreeMap<BigInteger, String> TreeMapOfBigInteger_String57;
  public TreeMap<BigInteger, String> TreeMapOfBigInteger_String58;
  public TreeMap<BigInteger, String> TreeMapOfBigInteger_String60;
  public TreeMap<BigInteger, String> TreeMapOfBigInteger_String62;
  public TreeMap<Byte, String> TreeMapOfByte_String63;
  public TreeMap<Byte, String> TreeMapOfByte_String64;
  public TreeMap<Byte, String> TreeMapOfByte_String65;
  public TreeMap<Byte, String> TreeMapOfByte_String66;
  public TreeMap<Byte, String> TreeMapOfByte_String67;
  public TreeMap<Byte, String> TreeMapOfByte_String69;
  public TreeMap<Byte, String> TreeMapOfByte_String71;
  public TreeMap<Double, String> TreeMapOfDouble_String72;
  public TreeMap<Double, String> TreeMapOfDouble_String73;
  public TreeMap<Double, String> TreeMapOfDouble_String74;
  public TreeMap<Double, String> TreeMapOfDouble_String75;
  public TreeMap<Double, String> TreeMapOfDouble_String76;
  public TreeMap<Double, String> TreeMapOfDouble_String78;
  public TreeMap<Double, String> TreeMapOfDouble_String80;
  public TreeMap<Float, String> TreeMapOfFloat_String81;
  public TreeMap<Float, String> TreeMapOfFloat_String82;
  public TreeMap<Float, String> TreeMapOfFloat_String83;
  public TreeMap<Float, String> TreeMapOfFloat_String84;
  public TreeMap<Float, String> TreeMapOfFloat_String85;
  public TreeMap<Float, String> TreeMapOfFloat_String87;
  public TreeMap<Float, String> TreeMapOfFloat_String89;
  public TreeMap<Integer, String> TreeMapOfInteger_String90;
  public TreeMap<Integer, String> TreeMapOfInteger_String91;
  public TreeMap<Integer, String> TreeMapOfInteger_String92;
  public TreeMap<Integer, String> TreeMapOfInteger_String93;
  public TreeMap<Integer, String> TreeMapOfInteger_String94;
  public TreeMap<Integer, String> TreeMapOfInteger_String96;
  public TreeMap<Integer, String> TreeMapOfInteger_String98;
  public TreeMap<Long, String> TreeMapOfLong_String99;
  public TreeMap<Long, String> TreeMapOfLong_String100;
  public TreeMap<Long, String> TreeMapOfLong_String101;
  public TreeMap<Long, String> TreeMapOfLong_String102;
  public TreeMap<Long, String> TreeMapOfLong_String103;
  public TreeMap<Long, String> TreeMapOfLong_String105;
  public TreeMap<Long, String> TreeMapOfLong_String107;
  public TreeMap<Short, String> TreeMapOfShort_String108;
  public TreeMap<Short, String> TreeMapOfShort_String109;
  public TreeMap<Short, String> TreeMapOfShort_String110;
  public TreeMap<Short, String> TreeMapOfShort_String111;
  public TreeMap<Short, String> TreeMapOfShort_String112;
  public TreeMap<Short, String> TreeMapOfShort_String114;
  public TreeMap<Short, String> TreeMapOfShort_String116;

  public static final String[] fieldSpecs = {
    "public TreeMap TreeMapOfObject_String0",
    "embedded-value=true public TreeMap TreeMapOfObject_String1",
    "embedded-value=false public TreeMap TreeMapOfObject_String2",
    "embedded-key=true  public TreeMap TreeMapOfObject_String3",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfObject_String4",
    "embedded-key=false  public TreeMap TreeMapOfObject_String6",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfObject_String8",
    "public TreeMap TreeMapOfSimpleClass_String9",
    "embedded-value=true public TreeMap TreeMapOfSimpleClass_String10",
    "embedded-value=false public TreeMap TreeMapOfSimpleClass_String11",
    "embedded-key=true  public TreeMap TreeMapOfSimpleClass_String12",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfSimpleClass_String13",
    "embedded-key=false  public TreeMap TreeMapOfSimpleClass_String15",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfSimpleClass_String17",
    "public TreeMap TreeMapOfSimpleInterface_String18",
    "embedded-value=true public TreeMap TreeMapOfSimpleInterface_String19",
    "embedded-value=false public TreeMap TreeMapOfSimpleInterface_String20",
    "embedded-key=true  public TreeMap TreeMapOfSimpleInterface_String21",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfSimpleInterface_String22",
    "embedded-key=false  public TreeMap TreeMapOfSimpleInterface_String24",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfSimpleInterface_String26",
    "public TreeMap TreeMapOfString_String27",
    "embedded-value=true public TreeMap TreeMapOfString_String28",
    "embedded-value=false public TreeMap TreeMapOfString_String29",
    "embedded-key=true  public TreeMap TreeMapOfString_String30",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfString_String31",
    "embedded-key=false  public TreeMap TreeMapOfString_String33",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfString_String35",
    "public TreeMap TreeMapOfDate_String36",
    "embedded-value=true public TreeMap TreeMapOfDate_String37",
    "embedded-value=false public TreeMap TreeMapOfDate_String38",
    "embedded-key=true  public TreeMap TreeMapOfDate_String39",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfDate_String40",
    "embedded-key=false  public TreeMap TreeMapOfDate_String42",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfDate_String44",
    "public TreeMap TreeMapOfBigDecimal_String45",
    "embedded-value=true public TreeMap TreeMapOfBigDecimal_String46",
    "embedded-value=false public TreeMap TreeMapOfBigDecimal_String47",
    "embedded-key=true  public TreeMap TreeMapOfBigDecimal_String48",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfBigDecimal_String49",
    "embedded-key=false  public TreeMap TreeMapOfBigDecimal_String51",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfBigDecimal_String53",
    "public TreeMap TreeMapOfBigInteger_String54",
    "embedded-value=true public TreeMap TreeMapOfBigInteger_String55",
    "embedded-value=false public TreeMap TreeMapOfBigInteger_String56",
    "embedded-key=true  public TreeMap TreeMapOfBigInteger_String57",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfBigInteger_String58",
    "embedded-key=false  public TreeMap TreeMapOfBigInteger_String60",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfBigInteger_String62",
    "public TreeMap TreeMapOfByte_String63",
    "embedded-value=true public TreeMap TreeMapOfByte_String64",
    "embedded-value=false public TreeMap TreeMapOfByte_String65",
    "embedded-key=true  public TreeMap TreeMapOfByte_String66",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfByte_String67",
    "embedded-key=false  public TreeMap TreeMapOfByte_String69",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfByte_String71",
    "public TreeMap TreeMapOfDouble_String72",
    "embedded-value=true public TreeMap TreeMapOfDouble_String73",
    "embedded-value=false public TreeMap TreeMapOfDouble_String74",
    "embedded-key=true  public TreeMap TreeMapOfDouble_String75",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfDouble_String76",
    "embedded-key=false  public TreeMap TreeMapOfDouble_String78",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfDouble_String80",
    "public TreeMap TreeMapOfFloat_String81",
    "embedded-value=true public TreeMap TreeMapOfFloat_String82",
    "embedded-value=false public TreeMap TreeMapOfFloat_String83",
    "embedded-key=true  public TreeMap TreeMapOfFloat_String84",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfFloat_String85",
    "embedded-key=false  public TreeMap TreeMapOfFloat_String87",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfFloat_String89",
    "public TreeMap TreeMapOfInteger_String90",
    "embedded-value=true public TreeMap TreeMapOfInteger_String91",
    "embedded-value=false public TreeMap TreeMapOfInteger_String92",
    "embedded-key=true  public TreeMap TreeMapOfInteger_String93",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfInteger_String94",
    "embedded-key=false  public TreeMap TreeMapOfInteger_String96",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfInteger_String98",
    "public TreeMap TreeMapOfLong_String99",
    "embedded-value=true public TreeMap TreeMapOfLong_String100",
    "embedded-value=false public TreeMap TreeMapOfLong_String101",
    "embedded-key=true  public TreeMap TreeMapOfLong_String102",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfLong_String103",
    "embedded-key=false  public TreeMap TreeMapOfLong_String105",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfLong_String107",
    "public TreeMap TreeMapOfShort_String108",
    "embedded-value=true public TreeMap TreeMapOfShort_String109",
    "embedded-value=false public TreeMap TreeMapOfShort_String110",
    "embedded-key=true  public TreeMap TreeMapOfShort_String111",
    "embedded-key=true embedded-value=true public TreeMap TreeMapOfShort_String112",
    "embedded-key=false  public TreeMap TreeMapOfShort_String114",
    "embedded-key=false embedded-value=false public TreeMap TreeMapOfShort_String116"
  };

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

  public TreeMap<?, ?> get(int index) {
    switch (index) {
      case (0):
        return TreeMapOfObject_String0;
      case (1):
        return TreeMapOfObject_String1;
      case (2):
        return TreeMapOfObject_String2;
      case (3):
        return TreeMapOfObject_String3;
      case (4):
        return TreeMapOfObject_String4;
      case (5):
        return TreeMapOfObject_String6;
      case (6):
        return TreeMapOfObject_String8;
      case (7):
        return TreeMapOfSimpleClass_String9;
      case (8):
        return TreeMapOfSimpleClass_String10;
      case (9):
        return TreeMapOfSimpleClass_String11;
      case (10):
        return TreeMapOfSimpleClass_String12;
      case (11):
        return TreeMapOfSimpleClass_String13;
      case (12):
        return TreeMapOfSimpleClass_String15;
      case (13):
        return TreeMapOfSimpleClass_String17;
      case (14):
        return TreeMapOfSimpleInterface_String18;
      case (15):
        return TreeMapOfSimpleInterface_String19;
      case (16):
        return TreeMapOfSimpleInterface_String20;
      case (17):
        return TreeMapOfSimpleInterface_String21;
      case (18):
        return TreeMapOfSimpleInterface_String22;
      case (19):
        return TreeMapOfSimpleInterface_String24;
      case (20):
        return TreeMapOfSimpleInterface_String26;
      case (21):
        return TreeMapOfString_String27;
      case (22):
        return TreeMapOfString_String28;
      case (23):
        return TreeMapOfString_String29;
      case (24):
        return TreeMapOfString_String30;
      case (25):
        return TreeMapOfString_String31;
      case (26):
        return TreeMapOfString_String33;
      case (27):
        return TreeMapOfString_String35;
      case (28):
        return TreeMapOfDate_String36;
      case (29):
        return TreeMapOfDate_String37;
      case (30):
        return TreeMapOfDate_String38;
      case (31):
        return TreeMapOfDate_String39;
      case (32):
        return TreeMapOfDate_String40;
      case (33):
        return TreeMapOfDate_String42;
      case (34):
        return TreeMapOfDate_String44;
      case (35):
        return TreeMapOfBigDecimal_String45;
      case (36):
        return TreeMapOfBigDecimal_String46;
      case (37):
        return TreeMapOfBigDecimal_String47;
      case (38):
        return TreeMapOfBigDecimal_String48;
      case (39):
        return TreeMapOfBigDecimal_String49;
      case (40):
        return TreeMapOfBigDecimal_String51;
      case (41):
        return TreeMapOfBigDecimal_String53;
      case (42):
        return TreeMapOfBigInteger_String54;
      case (43):
        return TreeMapOfBigInteger_String55;
      case (44):
        return TreeMapOfBigInteger_String56;
      case (45):
        return TreeMapOfBigInteger_String57;
      case (46):
        return TreeMapOfBigInteger_String58;
      case (47):
        return TreeMapOfBigInteger_String60;
      case (48):
        return TreeMapOfBigInteger_String62;
      case (49):
        return TreeMapOfByte_String63;
      case (50):
        return TreeMapOfByte_String64;
      case (51):
        return TreeMapOfByte_String65;
      case (52):
        return TreeMapOfByte_String66;
      case (53):
        return TreeMapOfByte_String67;
      case (54):
        return TreeMapOfByte_String69;
      case (55):
        return TreeMapOfByte_String71;
      case (56):
        return TreeMapOfDouble_String72;
      case (57):
        return TreeMapOfDouble_String73;
      case (58):
        return TreeMapOfDouble_String74;
      case (59):
        return TreeMapOfDouble_String75;
      case (60):
        return TreeMapOfDouble_String76;
      case (61):
        return TreeMapOfDouble_String78;
      case (62):
        return TreeMapOfDouble_String80;
      case (63):
        return TreeMapOfFloat_String81;
      case (64):
        return TreeMapOfFloat_String82;
      case (65):
        return TreeMapOfFloat_String83;
      case (66):
        return TreeMapOfFloat_String84;
      case (67):
        return TreeMapOfFloat_String85;
      case (68):
        return TreeMapOfFloat_String87;
      case (69):
        return TreeMapOfFloat_String89;
      case (70):
        return TreeMapOfInteger_String90;
      case (71):
        return TreeMapOfInteger_String91;
      case (72):
        return TreeMapOfInteger_String92;
      case (73):
        return TreeMapOfInteger_String93;
      case (74):
        return TreeMapOfInteger_String94;
      case (75):
        return TreeMapOfInteger_String96;
      case (76):
        return TreeMapOfInteger_String98;
      case (77):
        return TreeMapOfLong_String99;
      case (78):
        return TreeMapOfLong_String100;
      case (79):
        return TreeMapOfLong_String101;
      case (80):
        return TreeMapOfLong_String102;
      case (81):
        return TreeMapOfLong_String103;
      case (82):
        return TreeMapOfLong_String105;
      case (83):
        return TreeMapOfLong_String107;
      case (84):
        return TreeMapOfShort_String108;
      case (85):
        return TreeMapOfShort_String109;
      case (86):
        return TreeMapOfShort_String110;
      case (87):
        return TreeMapOfShort_String111;
      case (88):
        return TreeMapOfShort_String112;
      case (89):
        return TreeMapOfShort_String114;
      case (90):
        return TreeMapOfShort_String116;
      default:
        throw new IndexOutOfBoundsException();
    }
  }

  @SuppressWarnings("unchecked")
  public boolean set(int index, @SuppressWarnings("rawtypes") TreeMap value) {
    if (fieldSpecs[index].indexOf("final") != -1) return false;
    switch (index) {
      case (0):
        TreeMapOfObject_String0 = value;
        break;
      case (1):
        TreeMapOfObject_String1 = value;
        break;
      case (2):
        TreeMapOfObject_String2 = value;
        break;
      case (3):
        TreeMapOfObject_String3 = value;
        break;
      case (4):
        TreeMapOfObject_String4 = value;
        break;
      case (5):
        TreeMapOfObject_String6 = value;
        break;
      case (6):
        TreeMapOfObject_String8 = value;
        break;
      case (7):
        TreeMapOfSimpleClass_String9 = value;
        break;
      case (8):
        TreeMapOfSimpleClass_String10 = value;
        break;
      case (9):
        TreeMapOfSimpleClass_String11 = value;
        break;
      case (10):
        TreeMapOfSimpleClass_String12 = value;
        break;
      case (11):
        TreeMapOfSimpleClass_String13 = value;
        break;
      case (12):
        TreeMapOfSimpleClass_String15 = value;
        break;
      case (13):
        TreeMapOfSimpleClass_String17 = value;
        break;
      case (14):
        TreeMapOfSimpleInterface_String18 = value;
        break;
      case (15):
        TreeMapOfSimpleInterface_String19 = value;
        break;
      case (16):
        TreeMapOfSimpleInterface_String20 = value;
        break;
      case (17):
        TreeMapOfSimpleInterface_String21 = value;
        break;
      case (18):
        TreeMapOfSimpleInterface_String22 = value;
        break;
      case (19):
        TreeMapOfSimpleInterface_String24 = value;
        break;
      case (20):
        TreeMapOfSimpleInterface_String26 = value;
        break;
      case (21):
        TreeMapOfString_String27 = value;
        break;
      case (22):
        TreeMapOfString_String28 = value;
        break;
      case (23):
        TreeMapOfString_String29 = value;
        break;
      case (24):
        TreeMapOfString_String30 = value;
        break;
      case (25):
        TreeMapOfString_String31 = value;
        break;
      case (26):
        TreeMapOfString_String33 = value;
        break;
      case (27):
        TreeMapOfString_String35 = value;
        break;
      case (28):
        TreeMapOfDate_String36 = value;
        break;
      case (29):
        TreeMapOfDate_String37 = value;
        break;
      case (30):
        TreeMapOfDate_String38 = value;
        break;
      case (31):
        TreeMapOfDate_String39 = value;
        break;
      case (32):
        TreeMapOfDate_String40 = value;
        break;
      case (33):
        TreeMapOfDate_String42 = value;
        break;
      case (34):
        TreeMapOfDate_String44 = value;
        break;
      case (35):
        TreeMapOfBigDecimal_String45 = value;
        break;
      case (36):
        TreeMapOfBigDecimal_String46 = value;
        break;
      case (37):
        TreeMapOfBigDecimal_String47 = value;
        break;
      case (38):
        TreeMapOfBigDecimal_String48 = value;
        break;
      case (39):
        TreeMapOfBigDecimal_String49 = value;
        break;
      case (40):
        TreeMapOfBigDecimal_String51 = value;
        break;
      case (41):
        TreeMapOfBigDecimal_String53 = value;
        break;
      case (42):
        TreeMapOfBigInteger_String54 = value;
        break;
      case (43):
        TreeMapOfBigInteger_String55 = value;
        break;
      case (44):
        TreeMapOfBigInteger_String56 = value;
        break;
      case (45):
        TreeMapOfBigInteger_String57 = value;
        break;
      case (46):
        TreeMapOfBigInteger_String58 = value;
        break;
      case (47):
        TreeMapOfBigInteger_String60 = value;
        break;
      case (48):
        TreeMapOfBigInteger_String62 = value;
        break;
      case (49):
        TreeMapOfByte_String63 = value;
        break;
      case (50):
        TreeMapOfByte_String64 = value;
        break;
      case (51):
        TreeMapOfByte_String65 = value;
        break;
      case (52):
        TreeMapOfByte_String66 = value;
        break;
      case (53):
        TreeMapOfByte_String67 = value;
        break;
      case (54):
        TreeMapOfByte_String69 = value;
        break;
      case (55):
        TreeMapOfByte_String71 = value;
        break;
      case (56):
        TreeMapOfDouble_String72 = value;
        break;
      case (57):
        TreeMapOfDouble_String73 = value;
        break;
      case (58):
        TreeMapOfDouble_String74 = value;
        break;
      case (59):
        TreeMapOfDouble_String75 = value;
        break;
      case (60):
        TreeMapOfDouble_String76 = value;
        break;
      case (61):
        TreeMapOfDouble_String78 = value;
        break;
      case (62):
        TreeMapOfDouble_String80 = value;
        break;
      case (63):
        TreeMapOfFloat_String81 = value;
        break;
      case (64):
        TreeMapOfFloat_String82 = value;
        break;
      case (65):
        TreeMapOfFloat_String83 = value;
        break;
      case (66):
        TreeMapOfFloat_String84 = value;
        break;
      case (67):
        TreeMapOfFloat_String85 = value;
        break;
      case (68):
        TreeMapOfFloat_String87 = value;
        break;
      case (69):
        TreeMapOfFloat_String89 = value;
        break;
      case (70):
        TreeMapOfInteger_String90 = value;
        break;
      case (71):
        TreeMapOfInteger_String91 = value;
        break;
      case (72):
        TreeMapOfInteger_String92 = value;
        break;
      case (73):
        TreeMapOfInteger_String93 = value;
        break;
      case (74):
        TreeMapOfInteger_String94 = value;
        break;
      case (75):
        TreeMapOfInteger_String96 = value;
        break;
      case (76):
        TreeMapOfInteger_String98 = value;
        break;
      case (77):
        TreeMapOfLong_String99 = value;
        break;
      case (78):
        TreeMapOfLong_String100 = value;
        break;
      case (79):
        TreeMapOfLong_String101 = value;
        break;
      case (80):
        TreeMapOfLong_String102 = value;
        break;
      case (81):
        TreeMapOfLong_String103 = value;
        break;
      case (82):
        TreeMapOfLong_String105 = value;
        break;
      case (83):
        TreeMapOfLong_String107 = value;
        break;
      case (84):
        TreeMapOfShort_String108 = value;
        break;
      case (85):
        TreeMapOfShort_String109 = value;
        break;
      case (86):
        TreeMapOfShort_String110 = value;
        break;
      case (87):
        TreeMapOfShort_String111 = value;
        break;
      case (88):
        TreeMapOfShort_String112 = value;
        break;
      case (89):
        TreeMapOfShort_String114 = value;
        break;
      case (90):
        TreeMapOfShort_String116 = 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);
    }
  }
}
