private void autoMerge(int diffType, TaskMonitor monitor)
			throws ProgramConflictException, CancelledException, IOException {

		// Get the address of all changes in Latest and My. These changes are guaranteed to ONLY be
		// additions/removals of tags from the address; tag creations/deletions/edits will not be 
		// in these change sets.
		AddressSetView myChangedAddresses =
			listingMergeMgr.diffOriginalMy.getDifferences(new ProgramDiffFilter(diffType), monitor);
		AddressSetView latestChangedAddresses = listingMergeMgr.diffOriginalLatest
				.getDifferences(new ProgramDiffFilter(diffType), monitor);

		// Get a list of all deleted tags in My and Latest.
		Collection<? extends FunctionTag> myDeletedTags = getDeletedTags(myPgm, monitor);
		Collection<? extends FunctionTag> latestDeletedTags = getDeletedTags(latestPgm, monitor);

		// Loop over all changed addresses in My and see if any added tags are in the 
		// Latest delete list. If so, conflict panel!
		processChangedAddresses(myChangedAddresses, latestDeletedTags, myPgm);

		// Now go to the other, looping over all addresses in Latest to see if any
		// added tags are in the My delete list.
		processChangedAddresses(latestChangedAddresses, myDeletedTags, latestPgm);
	}
Attempts to merge changes between the My and Latest versions of the program. Conflicts
will be stored in the {@link #conflictMap} for later resolution.

@param diffType from {@link ProgramDiffFilter}
@param monitor task monitor
@throws ProgramConflictException
@throws CancelledException
@throws IOException
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/FunctionTagListingMerger.java