private void showMergePanel(final ListingMergePanel listingPanel, final Address addr,
			final String bookmarkType, final String bookmarkCategory, TaskMonitor monitor) {
		this.currentAddress = addr;
		this.type = bookmarkType;
		this.category = bookmarkCategory;
		this.currentMonitor = monitor;
		try {
			final ChangeListener changeListener = new BookmarkMergeChangeListener();
			SwingUtilities.invokeAndWait(new Runnable() {
				@Override
				public void run() {
					VerticalChoicesPanel panel =
						getConflictsPanel(BookmarkMerger.this.currentAddress,
							BookmarkMerger.this.type, BookmarkMerger.this.category, changeListener);

					boolean useForAll = (bookmarkChoice != ASK_USER);
					conflictPanel.setUseForAll(useForAll);
					conflictPanel.setConflictType("Bookmark");

					listingPanel.setBottomComponent(panel);
				}
			});
			SwingUtilities.invokeLater(new Runnable() {
				@Override
				public void run() {
					Address addressToPaint = BookmarkMerger.this.currentAddress;
					listingPanel.clearAllBackgrounds();
					listingPanel.paintAllBackgrounds(new AddressSet(addressToPaint, addressToPaint));
				}
			});
		}
		catch (InterruptedException e) {
		}
		catch (InvocationTargetException e) {
		}
		if (mergeManager != null) {
			mergeManager.setApplyEnabled(false);
			mergeManager.showListingMergePanel(currentAddress);
		}
		// block until the user either cancels or hits the "Apply" button
		// on the merge dialog...
		// when the "Apply" button is hit, get the user's selection
		// and continue.
	}
Gets a standard string to display for the version info of the bookmark info.
Provides different strings depending on whether the bookmark is null
indicating it was removed or not null indicating the user can choose to keep it.
@param version the program version that provided the bookmark.
@param bookmark the bookmark having its information presented.
@returnthe version information string.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/BookmarkMerger.java