VerticalChoicesPanel getConflictsPanel(Address address, String bookmarkType,
			String bookmarkCategory, ChangeListener changeListener) {
		if (conflictPanel == null) {
			conflictPanel = new VerticalChoicesPanel();
			currentConflictPanel = conflictPanel;
			conflictPanel.setTitle(getConflictType());
		}
		else {
			conflictPanel.clear();
		}
		Bookmark original;
		Bookmark latest;
		Bookmark my;
		if (bookmarkType.equals(BookmarkType.NOTE)) {
			Bookmark[] originalMarks = originalBookmarkMgr.getBookmarks(address, bookmarkType);
			original = (originalMarks.length > 0) ? originalMarks[0] : null;
			Bookmark[] latestMarks = latestBookmarkMgr.getBookmarks(address, bookmarkType);
			latest = (latestMarks.length > 0) ? latestMarks[0] : null;
			Bookmark[] myMarks = myBookmarkMgr.getBookmarks(address, bookmarkType);
			my = (myMarks.length > 0) ? myMarks[0] : null;
		}
		else {
			original = originalBookmarkMgr.getBookmark(address, bookmarkType, bookmarkCategory);
			latest = latestBookmarkMgr.getBookmark(address, bookmarkType, bookmarkCategory);
			my = myBookmarkMgr.getBookmark(address, bookmarkType, bookmarkCategory);
		}

		String text = "Bookmark conflict @ address :" + ConflictUtility.getAddressString(address);
		conflictPanel.setHeader(text);
		conflictPanel.setRowHeader(getBookmarkInfo(-1, null));
		conflictPanel.addRadioButtonRow(getBookmarkInfo(LATEST, latest), LATEST_BUTTON_NAME,
			KEEP_LATEST, changeListener);
		conflictPanel.addRadioButtonRow(getBookmarkInfo(MY, my), CHECKED_OUT_BUTTON_NAME, KEEP_MY,
			changeListener);
		conflictPanel.addInfoRow(getBookmarkInfo(ORIGINAL, original));
		return conflictPanel;
	}
Constructs a comments merger.
@param listingMergeMgr the listing merge manager that owns this merger.
Ghidra/Features/Base/src/main/java/ghidra/app/merge/listing/BookmarkMerger.java