public static AbstractPdb parse(ByteProvider byteProvider, PdbReaderOptions pdbOptions,
			TaskMonitor monitor) throws IOException, PdbException, CancelledException {
		Objects.requireNonNull(byteProvider, "byteProvider cannot be null");
		Objects.requireNonNull(pdbOptions, "pdbOptions cannot be null");
		Objects.requireNonNull(monitor, "monitor cannot be null");

		// Do not do a try with resources here, as the msf must live within the PDB that is
		//  created below.
		Msf msf = MsfParser.parse(byteProvider, pdbOptions, monitor);

		int versionNumber = AbstractPdb.deserializeVersionNumber(msf, monitor);

		AbstractPdb pdb;
		switch (versionNumber) {
			case VC2_ID:
				pdb = new Pdb200(msf, pdbOptions);
				break;
			case VC4_ID:
			case VC41_ID:
			case VC50_ID:
			case VC98_ID:
			case VC70DEP_ID:
				pdb = new Pdb400(msf, pdbOptions);
				break;
			case VC70_ID:
			case VC80_ID:
			case VC110_ID:
			case VC140_ID:
				pdb = new Pdb700(msf, pdbOptions);
				break;
			default:
				// Must close the MSF here.  In cases where PDB is created, the PDB takes
				//  responsibility for closing the MSF.
				msf.close();
				throw new PdbException("Unknown PDB Version: " + versionNumber);
		}
		pdb.deserializeIdentifiersOnly(monitor);
		return pdb;
	}
Static method to open a PDB file, determine its version, and return an {@link AbstractPdb}
 appropriate for that version; it will not have been deserialized.  The main method
 to deserialize it is {@link AbstractPdb#deserialize()}; the method
 used to deserialize its main identifiers (signature, age, guid (if available)) is
 {@link AbstractPdb#deserializeIdentifiersOnly(TaskMonitor monitor)}
@param byteProvider the ByteProvider providing bytes for the PDB
@param pdbOptions {@link PdbReaderOptions} used for processing the PDB
@param monitor {@link TaskMonitor} used for checking cancellation
@return {@link AbstractPdb} class object for the file
@throws IOException on file I/O issues
@throws PdbException on parsing issues
@throws CancelledException upon user cancellation
Ghidra/Features/PDB/src/main/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbParser.java