@Override
	public final void loadInto(ByteProvider provider, LoadSpec loadSpec, List<Option> options,
			MessageLog messageLog, Program program, TaskMonitor monitor)
			throws IOException, LoadException, CancelledException {

		if (!loadSpec.isComplete()) {
			throw new LoadException("Load spec is incomplete");
		}

		program.setEventsEnabled(false);
		int transactionID = program.startTransaction("Loading - " + getName());
		boolean success = false;
		try {
			loadProgramInto(provider, loadSpec, options, messageLog, program, monitor);
			success = true;
		}
		finally {
			program.endTransaction(transactionID, success);
			program.setEventsEnabled(true);
		}
	}
Loads program bytes into the specified {@link Program}.  This method will not create any new
{@link Program}s.  It is only for adding to an existing {@link Program}.
<p>
NOTE: The loading that occurs in this method will automatically be done in a transaction.

@param provider The bytes to load into the {@link Program}.
@param loadSpec The {@link LoadSpec} to use during load.
@param options The load options.
@param messageLog The message log.
@param program The {@link Program} to load into.
@param monitor A cancelable task monitor.
@throws LoadException if the load failed in an expected way.
@throws IOException if there was an IO-related problem loading.
@throws CancelledException if the user cancelled the load.
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/AbstractProgramLoader.java