public static ByteProvider getByteProvider(byte[] rawIBlockBytes, ByteProvider provider,
			long expectedLength, int blockSize, FSRL fsrl) throws IOException {
		BinaryReader iBlockReader =
			new BinaryReader(new ByteArrayProvider(rawIBlockBytes), true /* LE */);

		RangeMappedByteProvider ebp = new RangeMappedByteProvider(provider, fsrl);
		processExtents(iBlockReader, provider, ebp, blockSize, expectedLength);
		if (ebp.length() < expectedLength) {
			// trailing sparse.  not sure if possible.
			ebp.addSparseRange(expectedLength - ebp.length());
		}

		return ebp;
	}
Creates a {@link RangeMappedByteProvider} from the extents data found in the
inode's i_block field.
  
@param rawIBlockBytes raw bytes from the inode's i_block
@param provider the file system volume provider
@param expectedLength the length the file should be (from the inode)
@param blockSize file system blockSize 
@param fsrl {@link FSRL} to assign to the new ByteProvider
@return new {@link ByteProvider} containing the blocks of the volume that were specified
by the extent data
@throws IOException if error
Ghidra/Features/FileFormats/src/main/java/ghidra/file/formats/ext4/Ext4ExtentsHelper.java