public int read(DataInputStream istream) throws IOException {
    preRead();
    int retVal = 0;

    // read header
    retVal += header.read(istream);
    // read protocol_version
    {
      protocol_version = (short) (istream.readUnsignedByte());
      retVal += 1;
    }
    // read configuration_count_change
    {
      configuration_count_change = (short) (istream.readUnsignedByte());
      retVal += 1;
    }
    // read resources
    retVal += resources.read(istream);
    // read pvData
    {
      IntegerHolder iHolder = new IntegerHolder();
      DataInputStream disTemp = istream;
      pvData = PVDataFactory.createMsg(protocol_version, disTemp, iHolder);
      retVal += iHolder.getValue();
    }
    // read certificateCount
    {
      certificateCount = (short) (istream.readUnsignedByte());
      retVal += 1;
    }
    // read cvCertificates
    for (int iIdx = 0; iIdx < certificateCount + (0); iIdx++) {
      CVCertificate temp;
      temp = new CVCertificate();
      retVal += temp.read(istream);
      cvCertificates.add(temp);
    }

    postRead();
    return retVal;
  }