public void mount(ByteProvider bProvider, TaskMonitor monitor)
			throws CancelledException, IOException {
		byteProvider = bProvider;

		try {
			try {
				cartFile = new CartV1File(byteProvider);
			}
			catch (CartInvalidARC4KeyException e) {
				// Could not auto detect key. Prompt user until we have a valid key or they cancel
				try (CryptoSession cryptoSession = fsService.newCryptoSession()) {

					String prompt = this.fsFSRL.getContainer().getName() + " (plaintext or base64)";

					// Iterate through GUI password request attempts until we succeed. hasNext
					// will return true until the user cancels. The prompt will also tell them
					// how many attempts they have made so it is clearer that they are not
					// being successful.
					// Log an error when the password is bad, but perhaps we should make them
					// acknowledge before attempting again?
					for (Iterator<Password> pwIt =
						cryptoSession.getPasswordsFor(this.fsFSRL.getContainer(), prompt); pwIt
								.hasNext();) {

						try (Password passwordValue = pwIt.next()) {
							monitor.setMessage("Testing key...");

							String password = String.valueOf(passwordValue.getPasswordChars());
							cartFile = new CartV1File(byteProvider, password);
							break;
						}
						catch (CartInvalidARC4KeyException arc4E) {
							if (!CartCancelDialogs.promptErrorContinue("Bad Key",
								"Error when testing key for " +
									this.fsFSRL.getContainer().getName() + ":\n" +
									(arc4E.getMessage() != null ? arc4E.getMessage() : "Unknown") +
									"\n Try another key?")) {
								break;
							}
						}

					}
				}
			}
		}
		catch (CartInvalidARC4KeyException e) {
			throw new IOException("Invalid CaRT ARC4 Key: " + e.getMessage());
		}
		catch (CartInvalidCartException e) {
			throw new IOException("Invalid CaRT file: " + e.getMessage());
		}
		catch (CartConfigurationException e) {
			throw new IOException("Invalid CaRT configuration file: " + e.getMessage());
		}

		// If the CaRT File wasn't set, then we don't have a key, throw an error
		if (cartFile == null) {
			throw new IOException("ARC4 key not found or user cancelled.");
		}

		// If/when future CaRT file versions exist, catch the appropriate error and
		// handle them here.
		payloadProvider = getPayload(null, monitor);

		/**
		 * If an MD5 value is provided here it will be carried through the rest of the
		 * system. If null is used instead then the MD5 will be calculated from the
		 * bytes of the file.
		 */
		this.fsIndexHelper = new SingleFileSystemIndexHelper(this, fsFSRL, cartFile.getPath(),
			cartFile.getDataSize(), null // Intentionally using null instead of actual MD5
		);
	}
Opens the specified CaRT container file and initializes this file system with the
contents.

@param bProvider container file
@param monitor {@link TaskMonitor} to allow the user to monitor and cancel
@throws CancelledException if user cancels
@throws IOException if error when reading data
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/cart/CartFileSystem.java