private List<MapSymbol> parseMapFile(ByteProvider provider, TaskMonitor monitor, MessageLog log)
			throws IOException, CancelledException {
		List<MapSymbol> symbols = new ArrayList<>();
		monitor.setMessage("Parsing MAP file...");
		monitor.setIndeterminate(true);
		try (BufferedReader reader =
			new BufferedReader(new InputStreamReader(provider.getInputStream(0)))) {
			String line;
			int lineNumber = 0;
			while ((line = reader.readLine()) != null) {
				monitor.checkCancelled();
				lineNumber++;
				line = line.trim();
				if (line.startsWith(";")) { // comment
					continue;
				}
				if (line.contains("Publics by Value")) {
					lineNumber = parseMapFileSection(reader, symbols, lineNumber, monitor, log);
				}
				else if (line.startsWith("Static symbols")) {
					lineNumber = parseMapFileSection(reader, symbols, lineNumber, monitor, log);
				}
			}
		}
		return symbols;
	}
Parses symbol information from the MAP file represented by the given provider

@param provider The bytes representing a MAP file
@param monitor The monitor
@param log An optional log to write to (could be null)
@return A {@link List} of {@link MapSymbol}s
@throws IOException If there was a problem parsing
@throws CancelledException if the user cancelled
Ghidra/Features/Base/src/main/java/ghidra/app/util/opinion/MapLoader.java