text:
/* ###
 * IP: GHIDRA
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package ghidra.app.util.bin.format.pe;

import java.util.*;

import java.io.IOException;

import ghidra.app.util.bin.BinaryReader;
import ghidra.app.util.bin.format.pe.resource.*;
import ghidra.app.util.datatype.microsoft.*;
import ghidra.app.util.importer.MessageLog;
import ghidra.framework.options.Options;
import ghidra.program.model.address.Address;
import ghidra.program.model.address.AddressSpace;
import ghidra.program.model.data.*;
import ghidra.program.model.listing.Data;
import ghidra.program.model.listing.Program;
import ghidra.program.model.mem.DumbMemBufferImpl;
import ghidra.program.model.mem.MemoryAccessException;
import ghidra.program.model.symbol.SourceType;
import ghidra.program.model.util.CodeUnitInsertionException;
import ghidra.util.Msg;
import ghidra.util.exception.DuplicateNameException;
import ghidra.util.exception.InvalidInputException;
import ghidra.util.task.TaskMonitor;

/**
 * Points to the root resource directory.
 */
public class ResourceDataDirectory extends DataDirectory {
	private final static String NAME = "IMAGE_DIRECTORY_ENTRY_RESOURCE";
	/**
	 * The size of a resource directory entry, in bytes.
	 */
	public final static int IMAGE_SIZEOF_RESOURCE_DIRECTORY_ENTRY = 8;
	/**
	 * The size of a resource directory, in bytes.
	 */
	public final static int IMAGE_SIZEOF_RESOURCE_DIRECTORY = 16;
	/**
	 * A flag indicating that a resources is a string.
	 */
	public final static int IMAGE_RESOURCE_NAME_IS_STRING = 0x80000000;
	/**
	 * A flag indicating that a resources is a directory.
	 */
	public final static int IMAGE_RESOURCE_DATA_IS_DIRECTORY = 0x80000000;
	/**
	 * A lookup table to obtain a string name for a resource type.
	 */
	public final static String[] PREDEFINED_RESOURCE_NAMES = { "0", "Cursor", "Bitmap", "Icon",
		"Menu", "Dialog", "StringTable", "FontDir", "Font", "Accelerator", "RC_Data",
		"MessageTable", "GroupCursor", "13", "GroupIcon", "15", "Version", "DialogInclude", "18",
		"PlugAndPlay", "VXD", "ANI_Cursor", "ANI_Icon", "HTML", "Manifest" };

	public final static String PE_PROPERTY_PROGINFO_PREFIX = "PE Property[";
	public final static String PE_PROPERTY_PROGINFO_SUFFIX = "]";

	/**
	 * Not defined in documentation but PNGs and WAVs are both this type
	 */
	public final static byte RT_NOTDEFINED = 0;
	/**
	/**
	 * Hardware-dependent cursor resource.
	 */
	public final static byte RT_CURSOR = 1;
	/**
	 * Bitmap resource.
	 */
	public final static byte RT_BITMAP = 2;
	/**
	 * Hardware-dependent icon resource.
	 */
	public final static byte RT_ICON = 3;
	/**
	 * Menu resource.
	 */
	public final static byte RT_MENU = 4;
	/**
	 * Dialog box.
	 */
	public final static byte RT_DIALOG = 5;
	/**
	 * String-table entry.
	 */
	public final static byte RT_STRING = 6;
	/**
	 * Font directory resource.
	 */
	public final static byte RT_FONTDIR = 7;
	/**
	 * Font resource.
	 */
	public final static byte RT_FONT = 8;
	/**
	 * Accelerator table.
	 */
	public final static byte RT_ACCELERATOR = 9;
	/**
	 * Application-defined resource (raw data).
	 */
	public final static byte RT_RCDATA = 10;
	/**
	 * Message-table entry.
	 */
	public final static byte RT_MESSAGETABLE = 11;
	/**
	 * Hardware-independent cursor resource.
	 */
	public final static byte RT_GROUP_CURSOR = 12;
	// 13 is not defined...
	/**
	 * Hardware-independent icon resource.
	 */
	public final static byte RT_GROUP_ICON = 14;
	// 15 is not defined...
	/**
	 * Version resource.
	 */
	public final static byte RT_VERSION = 16;

	public final static byte RT_DLGINCLUDE = 17;
	// 18 is not defined...
	/**
	 * Plug and Play resource.
	 */
	public final static byte RT_PLUGPLAY = 19;
	/**
	 * VXD resource.
	 */
	public final static byte RT_VXD = 20;
	/**
	 * Animated cursor resource.
	 */
	public final static byte RT_ANICURSOR = 21;
	/**
	 * Animated icon resource.
	 */
	public final static byte RT_ANIICON = 22;
	/**
	 * HTML resource.
	 */
	public final static byte RT_HTML = 23;
	/**
	 * Manifest resource
	 */
	public final static byte RT_MANIFEST = 24;

	private ResourceDirectory rootDirectory;

	public static Set<Integer> directoryMap;

	ResourceDataDirectory(NTHeader ntHeader, BinaryReader reader) throws IOException {
		directoryMap = new HashSet<>();
		processDataDirectory(ntHeader, reader);
	}

	public ResourceDirectory getRootDirectory() {
		return rootDirectory;
	}

	@Override
	public String getDirectoryName() {
		return NAME;
	}

	@Override
	public void markup(Program program, boolean isBinary, TaskMonitor monitor, MessageLog log,
			NTHeader ntHeader)
			throws DuplicateNameException, CodeUnitInsertionException, IOException {

		if (rootDirectory == null) {
			return;
		}
		monitor.setMessage("[" + program.getName() + "]: resources...");
		Address addr = PeUtils.getMarkupAddress(program, isBinary, ntHeader, virtualAddress);
		if (!program.getMemory().contains(addr)) {
			return;
		}
		createDirectoryBookmark(program, addr);

		AddressSpace space = program.getAddressFactory().getDefaultAddressSpace();

		HashMap<Integer, Integer> countMap = new HashMap<>();

		List<ResourceInfo> resources = getResources();
		if (resources == null) {
			return;
		}

		try {
			for (ResourceInfo info : resources) {
				if (monitor.isCancelled()) {
					return;
				}

				Integer cnt = countMap.get(info.getTypeID());
				if (cnt == null) {
					countMap.put(info.getTypeID(), 1);
				}
				else {
					countMap.put(info.getTypeID(), cnt + 1);
				}

				addr = space.getAddress(va(info.getAddress(), isBinary));

				try {
					program.getSymbolTable().createLabel(addr, info.getName(), SourceType.IMPORTED);
				}
				catch (InvalidInputException e) {
					Msg.error(this, "Invalid Input Exception: " + e.getMessage(), e);
				}

				String cmt =
					"Size of resource: 0x" + Integer.toHexString(info.getSize()) + " bytes";
				StringBuilder extraComment = new StringBuilder();

				if (info.getTypeID() == ResourceDataDirectory.RT_NOTDEFINED) {
					if (info.getName().startsWith("Rsrc_IMAGE") ||
						info.getName().startsWith("Rsrc_PNG")) {
						DataType dataType = null;
						try {
							// Check for PNG magic number
							if (program.getMemory().getInt(addr) == 0x474e5089) {
								dataType = new PngDataType();
							}
							// Check for GIF magic number
							else if (program.getMemory().getInt(addr) == 0x47494638) {
								dataType = new GifDataType();
							}

						}
						catch (MemoryAccessException e) {
							// ignore - let createData produce error
						}
						PeUtils.createData(program, addr, dataType, log);
					}
					else if (info.getName().startsWith("Rsrc_WAV")) {
						DataType dataType = null;
						// Check for WAV magic number
						try {
							if (program.getMemory().getInt(addr) == 0x46464952) {
								dataType = new WAVEDataType();
							}
						}
						catch (MemoryAccessException e) {
							// ignore - let createData produce error
						}
						PeUtils.createData(program, addr, dataType, log);
					}
					else if (info.getName().startsWith("Rsrc_WEVT")) {
						DataType dataType = null;
						// Check for WEVT magic number "CRIM"
						try {
							if (program.getMemory().getInt(addr) == 0x4d495243) {
								dataType = new WEVTResourceDataType();
							}
						}
						catch (MemoryAccessException e) {
							// ignore - let createData produce error
						}
						PeUtils.createData(program, addr, dataType, log);
					}
					else if (info.getName().startsWith("Rsrc_MUI")) {
						DataType dataType = null;
						// Check for MUI magic number
						try {
							if (program.getMemory().getInt(addr) == 0xfecdfecd) {
								dataType = new MUIResourceDataType();
							}
						}
						catch (MemoryAccessException e) {
							// ignore - let createData produce error
						}
						PeUtils.createData(program, addr, dataType, log);
					}
					else {
						//add byte array of correct size until data type can be created for missing types- this will keep auto analysis from incorrectly analyzing here
						ArrayDataType byteArray =
							new ArrayDataType(ByteDataType.dataType, info.getSize(), 1);
						PeUtils.createData(program, addr, byteArray, log);
					}
				}
				else if (info.getTypeID() == ResourceDataDirectory.RT_STRING) {
					for (int s = 0; s < 0x10; ++s) {
						int id = ((info.getID() - 1) * 0x10) + s;
						setEolComment(program, addr, "Rsrc String ID " + id);
						PascalUnicodeDataType str = new PascalUnicodeDataType();
						PeUtils.createData(program, addr, str, log);
						Data data = program.getListing().getDataAt(addr);
						if (data != null) {
							addr = data.getMaxAddress().add(1);
						}
					}
				}
				else if (info.getTypeID() == ResourceDataDirectory.RT_BITMAP) {
					BitmapResourceDataType bitmapDatatype = new BitmapResourceDataType();
					PeUtils.createData(program, addr, bitmapDatatype, log);
				}
				else if (info.getTypeID() == ResourceDataDirectory.RT_ICON) {
					DataType iconDataType = null;
					try {
						// Check for PNG magic number
						if (program.getMemory().getInt(addr) == 0x474e5089) {
							iconDataType = new PngDataType();
						}
						// Check for GIF magic number
						else if (program.getMemory().getInt(addr) == 0x47494638) {
							iconDataType = new GifDataType();
						}
					}
					catch (MemoryAccessException e) {
						// ignore - let createData produce error
					}
					if (iconDataType == null) {
						// assume Icon resource by default if not PNG
						iconDataType = new IconResourceDataType();
					}
					PeUtils.createData(program, addr, iconDataType, log);
				}
				//			else if (info.getTypeID() == ResourceDataDirectory.RT_CURSOR) {
				//
				//			}
				else if (info.getTypeID() == ResourceDataDirectory.RT_GROUP_ICON) {
					GroupIconResourceDataType groupIconDataType = new GroupIconResourceDataType();
					PeUtils.createData(program, addr, groupIconDataType, log);
				}
				//else if (info.getTypeID() == ResourceDataDirectory.RT_GROUP_CURSOR) {
				//
				//			}
				else if (info.getTypeID() == ResourceDataDirectory.RT_MENU) {
					MenuResourceDataType menuResourceDataType = new MenuResourceDataType();
					Data createData = PeUtils.createData(program, addr, menuResourceDataType, log);
					if (createData != null) {
						extraComment.append("\n" + setExtraCommentForMenuResource(createData));
					}
				}
				else if (info.getTypeID() == ResourceDataDirectory.RT_DIALOG) {
					DialogResourceDataType dialogResourceDataType = new DialogResourceDataType();
					Data createData =
						PeUtils.createData(program, addr, dialogResourceDataType, log);
					if (createData != null) {
						extraComment.append("\n" + setExtraCommentForDialogResource(createData));
					}
				}
				else if (info.getTypeID() == ResourceDataDirectory.RT_VERSION) {
					processVersionInfo(addr, info, program, log, monitor);
				}
				else if (info.getTypeID() == ResourceDataDirectory.RT_MANIFEST) { // XML manifest string
					PeUtils.createData(program, addr, TerminatedStringDataType.dataType, log);
				}
				else if (info.getTypeID() == ResourceDataDirectory.RT_HTML) {
					HTMLResourceDataType htmlResourceDataType = new HTMLResourceDataType();
					PeUtils.createData(program, addr, htmlResourceDataType, info.getSize(), log);
				}
				else {
					//add byte array of correct size until data type can be created for missing types- this will keep auto analysis from incorrectly analyzing here
					ArrayDataType byteArray =
						new ArrayDataType(ByteDataType.dataType, info.getSize(), 1);
					PeUtils.createData(program, addr, byteArray, log);
				}

				setPlateComment(program, addr, info.getName() + " " + cmt + extraComment);
			}

		}
		catch (Exception e) {
			Msg.error(this, "Invalid resource data: " + e.getMessage(), e);
		}

		Address resourceBase =
			PeUtils.getMarkupAddress(program, isBinary, ntHeader, virtualAddress);
		markupDirectory(rootDirectory, resourceBase, resourceBase, program, isBinary, monitor, log);
	}

	private void processVersionInfo(Address addr, ResourceInfo info, Program program,
			MessageLog log, TaskMonitor monitor) throws IOException {
		VS_VERSION_INFO versionInfo = null;
		try {
			int ptr = ntHeader.rvaToPointer(info.getAddress());
			if (ptr < 0) {
				Msg.error(this, "Invalid RVA " + Integer.toHexString(info.getAddress()));
				return;
			}
			versionInfo = new VS_VERSION_INFO(reader, ptr);
			PeUtils.createData(program, addr, versionInfo.toDataType(), log);
		}
		catch (DuplicateNameException e) {
			Msg.error(this, "Unexpected Exception: VS_VERSION_INFO structure previously defined",
				e);
		}
		VS_VERSION_CHILD[] children = versionInfo.getChildren();
		for (VS_VERSION_CHILD child : children) {
			if (monitor.isCancelled()) {
				return;
			}
			markupChild(child, addr, program, log, monitor);
		}

		Options programInfoOptions = program.getOptions(Program.PROGRAM_INFO);
		String[] keys = versionInfo.getKeys();
		for (String key : keys) {
			if (monitor.isCancelled()) {
				return;
			}
			String value = versionInfo.getValue(key);
			String optionKey = PE_PROPERTY_PROGINFO_PREFIX + escapeProgInfoKeyValue(key) +
				PE_PROPERTY_PROGINFO_SUFFIX;
			programInfoOptions.setString(optionKey, value);
		}
	}

	private static String escapeProgInfoKeyValue(String key) {
		return key.replaceAll("\\.", "_dot_");
	}

	private void markupChild(VS_VERSION_CHILD child, Address parentAddr, Program program,
			MessageLog log, TaskMonitor monitor) {
		Address childAddr = parentAddr.add(child.getRelativeOffset());
		try {
			DataType infoType = child.toDataType();
			if (infoType == null) {
				return;
			}
			PeUtils.createData(program, childAddr, infoType, log);

			// child name string
			PeUtils.createData(program, childAddr.add(child.getNameRelativeOffset()),
				TerminatedUnicodeDataType.dataType, log);

			if (child.valueIsUnicodeString()) {
				// unicode value
				PeUtils.createData(program, childAddr.add(child.getValueRelativeOffset()),
					TerminatedUnicodeDataType.dataType, log);
			}
			else if (child.valueIsDWord()) {
				// dword value
				PeUtils.createData(program, childAddr.add(child.getValueRelativeOffset()),
					DWordDataType.dataType, log);
			}
			else if (child.hasChildren()) {
				// markup nested children
				VS_VERSION_CHILD[] children = child.getChildren();
				for (VS_VERSION_CHILD element : children) {
					if (monitor.isCancelled()) {
						return;
					}
					markupChild(element, childAddr, program, log, monitor);
				}
			}
		}
		catch (DuplicateNameException e) {
			Msg.error(this,
				"Unexpected Exception: " + child.getChildName() + " structure previously defined",
				e);
		}
	}

	private void markupDirectory(ResourceDirectory directory, Address directoryAddr,
			Address resourceBase, Program program, boolean isBinary, TaskMonitor monitor,
			MessageLog log) throws IOException, DuplicateNameException, CodeUnitInsertionException {

		PeUtils.createData(program, directoryAddr, directory.toDataType(), log);
		directoryAddr = directoryAddr.add(ResourceDirectory.SIZEOF);

		List<ResourceDirectoryEntry> entries = directory.getEntries();
		for (ResourceDirectoryEntry entry : entries) {
			if (monitor.isCancelled()) {
				return;
			}

			PeUtils.createData(program, directoryAddr, entry.toDataType(), log);
			directoryAddr = directoryAddr.add(ResourceDirectoryEntry.SIZEOF);

			ResourceDirectory subDirectory = entry.getSubDirectory();
			if (subDirectory != null) {
				Address subDirectoryAddr = resourceBase.add(entry.getOffsetToDirectory());
				markupDirectory(subDirectory, subDirectoryAddr, resourceBase, program, isBinary,
					monitor, log);
			}

			ResourceDataEntry data = entry.getData();
			if (data != null) {
				Address dataAddr = resourceBase.add(entry.getOffsetToData());
				PeUtils.createData(program, dataAddr, data.toDataType(), log);
			}

			ResourceDirectoryStringU string = entry.getDirectoryString();
			if (string != null && string.getLength() > 0) {
				Address strAddr = resourceBase.add(entry.getNameOffset() & 0x7fffffff);
				PeUtils.createData(program, strAddr, string.toDataType(), log);
			}
		}
	}

	@Override
	public boolean parse() throws IOException {
		int ptr = getPointer();
		if (ptr < 0) {
			return false;
		}
		int resourceBase = ptr;

		rootDirectory = new ResourceDirectory(reader, ptr, resourceBase, true, ntHeader);
		return true;
	}

	//parse Dialog data type to pull out nice header comment
	private String setExtraCommentForDialogResource(Data data) throws MemoryAccessException {

		final String[] afterTemplate = { "Menu", "Class", "Title", "Font Size", "Font Name" };
		final String[] templateType0 = { "None", "Predefined", "None" };
		final String[] afterItem = { "Class", "Title", "Data" };

		//just need this to use a method from the class
		DialogResourceDataType temp = new DialogResourceDataType();

		DumbMemBufferImpl buffer = new DumbMemBufferImpl(data.getMemory(), data.getAddress());

		StringBuilder comment = new StringBuilder();
		if (data.getBaseDataType().getName().equals("DialogResource")) {

			int offset = 0;
			//get first structure
			Data componentAt = data.getComponentAt(offset);
			if (componentAt.isStructure() &&
				componentAt.getBaseDataType().getName().equals("DLGTEMPLATE")) {

				//determine if 3 or 5 components after initial structure
				int numAfter = 3;
				if ((buffer.getByte(0) & 0x40) > 0) {
					numAfter += 2;
				}

				int numItems = buffer.getShort(offset + 8);
				int currentItem = 0;
				comment.append("\nNumber of Items in Dialog: " + numItems);

				//get three or five components after initial structure
				for (int i = 0; i < numAfter; i++) {
					offset += componentAt.getLength();
					componentAt = data.getComponentAt(offset);
					comment.append("\n" + afterTemplate[i] + ": ");
					if (componentAt.getBaseDataType().getName().equals("short")) {
						comment.append(componentAt.getDefaultValueRepresentation());
					}
					if (componentAt.getBaseDataType().getName().equals("short[1]")) {
						if (buffer.getShort(offset) == 0x0000) {
							comment.append(templateType0[i]);
						}
					}
					if (componentAt.getBaseDataType().getName().equals("short[2]")) {
						if ((buffer.getShort(offset) & 0xffff) == 0xffff) {
							int ordinal = buffer.getShort(offset + 2);
							comment.append("External Ordinal Number " + ordinal);
						}
					}

					if (componentAt.getBaseDataType().getName().equals("unicode")) {
						comment.append(
							fixupStringRepForDisplay(componentAt.getDefaultValueRepresentation()));
					}
				}
				//loop over item structures
				comment.append("\n");
				while (currentItem < numItems) {
					offset += componentAt.getLength();
					componentAt = data.getComponentAt(offset);
					if (componentAt.getBaseDataType().getName().equals("DLGITEMTEMPLATE")) {
						currentItem++;
						comment.append("\nItem " + currentItem + ": ");
						//loop over three items after each item structure
						for (int i = 0; i < 3; i++) {
							offset += componentAt.getLength();
							componentAt = data.getComponentAt(offset);
							comment.append("\n   " + afterItem[i] + ": ");
							if (componentAt.getBaseDataType().getName().startsWith("short[")) {
								//no other info
								if (buffer.getShort(offset) == 0x0000) {
									comment.append("None");
								}
								//followed by ordinal
								else if ((buffer.getShort(offset) & 0xffff) == 0xffff) {
									int ordinal = buffer.getShort(offset + 2);
									comment.append(temp.getItemType(ordinal));
								}
								//first item is size array
								else {
									int sizeArray = buffer.getShort(offset);
									comment.append(
										"Size " + sizeArray + " (see internals of structure)");
								}
							}

							if (componentAt.getBaseDataType().getName().equals("unicode")) {
								comment.append(fixupStringRepForDisplay(
									componentAt.getDefaultValueRepresentation()));
							}
						}
					}

				}
			}

		}
		return comment.toString();

	}

	private String fixupStringRepForDisplay(String s) {
		// fixup the formatted string before embedding in PE loader artifacts
		// typically var s will look like u"blahblah".  Result will be "blahblah".
		return s.startsWith("u\"") || s.startsWith("U\"") ? s.substring(1 /* skip the leading 'u'*/)
				: s;
	}

	//parse Dialog data type to pull out nice header comment
	private String setExtraCommentForMenuResource(Data data) throws MemoryAccessException {

		short MF_POPUP = 0x0010;
		short MF_END = 0x0080;

		DumbMemBufferImpl buffer = new DumbMemBufferImpl(data.getMemory(), data.getAddress());

		StringBuilder comment = new StringBuilder();
		if (data.getBaseDataType().getName().equals("MenuResource")) {

			short menuItemOption = 0;
			Stack<Short> parentItemOptions = new Stack<>();
			parentItemOptions.push((short) 0);

			int numComponents = data.getNumComponents();
			for (int i = 0; i < numComponents; i++) {
				DataType dt = data.getComponent(i).getBaseDataType();
				int offset = data.getComponent(i).getRootOffset();

				if (dt.getName().equals("MENUITEM_TEMPLATE_HEADER")) {

					int version = buffer.getShort(offset);
					if (version != 0x0000) {
						return null;
					}

					int menuItemOffset = buffer.getShort(offset + 2);
					if (menuItemOffset < 0) {
						return null;
					}

				}
				if (dt.getName().equals("word")) {
					menuItemOption = buffer.getShort(offset);

					if ((menuItemOption & MF_POPUP) == 0) {
						i++; //skip the mtID
					}
				}

				if (dt.getName().equals("unicode")) {
					int depth = parentItemOptions.size() - 1;
					if (depth == 0) {
						comment.append("\n");
					}
					else {
						comment.append(" ".repeat(2 * depth));
					}

					String menuString = fixupStringRepForDisplay(
						data.getComponentAt(offset).getDefaultValueRepresentation());
					menuString = menuString.replaceAll("\"", "");
					if (menuString.equals("")) {
						comment.append("-------------------\n");
					}
					else {
						comment.append(menuString + "\n");
					}

					if ((menuItemOption & MF_POPUP) == MF_POPUP) {
						// Increase the current depth
						parentItemOptions.push(menuItemOption);
					}
					else if ((menuItemOption & MF_END) == MF_END) {
						// Decrease the current depth until we have found a parent menu item that isn't the last item in its parent
						short parentOptions = parentItemOptions.pop();
						while ((parentOptions & MF_END) == MF_END) {
							parentOptions = parentItemOptions.pop();
						}
					}

				}

			}

		}
		return comment.toString();

	}

	public List<ResourceInfo> getResources() {
		ArrayList<ResourceInfo> resources = new ArrayList<>();

		List<ResourceDirectoryEntry> entries = rootDirectory.getEntries();
		for (ResourceDirectoryEntry entry : entries) {
			List<ResourceInfo> entryResources = entry.getResources(0);
			for (ResourceInfo info : entryResources) {
				info.setName("Rsrc_" + info.getName());
				resources.add(info);
			}
		}

		Collections.sort(resources);

		return resources;
	}

	@Override
	public String toString() {
		StringBuffer buff = new StringBuffer();
		if (hasParsed) {
			buff.append("\t\t" + "Resource Directory: [" + super.toString() + "]" + "\n");
			List<ResourceInfo> resources = getResources();
			for (ResourceInfo info : resources) {
				buff.append(
					"\t\t\t" + "0x" + Long.toHexString(info.getAddress()) + "  " + info.getName() +
						"  Size: 0x" + Integer.toHexString(info.getSize()) + " bytes" + "\n");
			}
		}
		return buff.toString();
	}

	/**
	 * @see ghidra.app.util.bin.StructConverter#toDataType()
	 */
	@Override
	public DataType toDataType() throws DuplicateNameException, IOException {
		return rootDirectory.toDataType();
	}
}

redpajama_set_name: RedPajamaGithub


text:
Q: Return value of finally block in Scala
Possible Duplicate:
"return" and "try-catch-finally" block evaluation in scala

There are two Scala functions:
a): def foo(): Int = try { 1 } finally { 2 }
b): def bar(): Int = try { return 1 } finally { return 2}
I cannot figure out why foo returns 1 but bar returns 2.

A: This behavior is explained in "Programming in Scala" by M.Odersky, L. Spoon and B.Venners. I have the first edition and section 7.5 (pg. 128) says:

it's worth noting that Scala's behavior differs from Java only because Java's try-finally does not result in a value. As in Java, if a finally clause includes an explicit return statement, or throws an exception, that return value or exception will "overrule" any previous one that originated in the try block or one of its catch clauses. For example,
  given:

def f(): Int = try { return 1 } finally { return 2 }

calling f() results in 2. By contrast, given:

def g(): Int = try { 1 } finally { 2 }

calling g() results in 1. Both of these functions exhibit behavior that could surprise most programmers, thus it's usually best to avoid returning values from finally clauses.

Scala standard library has scala.util.control.Exception API that provides small functional library for handling exceptions. See the examples in scaladoc

A: The return statement of the finally block of bar() exits the method bar(). Therefor the result of the try block is not returned.
This example shows a (roughly) equivalent version of your methods foo() and bar():
object Test extends App {

    def foo() = {
      val result = { 1 }
      { 2 }
      result
    }

    def bar(): Int = {
      val result = { 1 }
      { return 2 }
      result // this line is not processed
    }

    println("foo = " + foo()) // foo = 1

    println("bar = " + bar()) // bar = 2

}

redpajama_set_name: RedPajamaStackExchange


I finished just in time to find out Dev's mom is coming this weekend anyway! She's about an hour out. Now I have to figure out what to have ready for lunch. I was planning on miso soup and sandwiches for Dev and myself, but I'm not sure she'll go for that. Hmm..... Sandwiches I have under control. I may have to put the soup on hold, though.
I may make corn dogs out of the left over bits of pancake mix I found in the pantry. It seems like I saw a recipe circulating on the interwebz one time about how to use pancake batter to make them. I guess I'll find out!


The fact that "heaven and earth will pass away," like death itself, gives us sorrow. It's not Happy Hour talk. It's not a social ice-breaker. "What we know" will not last. Nothing in the world, as we know it, is permanent. Let's draw the point out even further. Even bonds forged in long life or marriage, these too will dissolve with death – at least before the world's End. And so will the sorrow of life's unhappy experiences. However, we might have mixed feelings about "heaven and earth will pass away." It's both something to fear and look forward to. The paradox assures us that we cannot be perfectly happy in this life. Happiness is not – and cannot – be guaranteed here. Happiness is possible, not promised. Whatever happiness we experience "here and now" is the relic of a bygone shipwreck, like a crate of fine wine washed up on a desert isle. Yes, God wants us to be happy. That's why he made us. But a shipwreck happened. Someone took the forbidden fruit. Someone else took over the ship. Hence temptations, sins, misfortunes, sickness and death strike – again and again – like unrelenting thieves at night. These curses are not only possible, but probable. Death is certain. But light shines in that darkness!
Death is a blessing and a curse. It's a blessing because it relieves us of life's burdens, like dying before you've paid off a Nantucket beach house. But it's a curse because it cuts short pleasures and well-earned leisure, like dying right after you've paid off a Nantucket beach house. Consider prosperity. It attaches us to tenuous blessings. We become too comfortable, complacent, selfish or forgetful of God and others. Riches cause anxiety, not peace. We worry about losing them. On the flip side, misfortune causes us to desire prosperity. It brings the illusion that prosperity will bring peace of mind. In short, when things go bad, we desire them to go good. When things are good, we fear they'll go bad. It's a trap, like a wheel of fortune – or a windmill in the mind.
Allow me to add another twist to this tale. There are Seven Gifts of the Holy Spirit: Wisdom, Understanding, Knowledge, Counsel, Piety, Fortitude and Fear of the Lord. Let's zero-in on one: Knowledge. It's not at all about book "knowledge." It's a "knowledge" gained purely from experience – but not just any experience. It's "knowledge" gained from the experience of misfortune being turned into a blessing by the grace of God. It starts with ordinary experiences of grief and sorrow, through which the Holy Spirit gives us supernatural insight into the human condition, as it really is. That's not a fun thing to know about. But with the Holy Spirit's help, we can see this world as it really is – broken yet redeemed – and not be daunted. "Be not afraid." We see the emptiness of sin and how it ends in loneliness. And yet, by grace, the sorrow of knowing the world's sinfulness leads us to tears of penance – for ourselves and for others. It heals. It consoles and brings a peace that the world cannot give. It produces the Beatitude, "Blessed are those who mourn, for they shall be consoled." In other words, sorrow opens us up to God's consolation – the "peace that surpasses all understanding." Sorrow heals.
Sorrow alone is not enough to turn us to God. It needs Hope that come from Jesus. That's why Christ didn't just say, "Heaven and earth will pass away," and leave it at that. Rather he said, "Heaven and earth will pass away, but my words will not pass away." Christ assured us of something Eternal – something that breaks through the circles of time.
As we prepare for the Advent, recommit your hope in Christ, the Alpha and Omega, the Beginning and End – the One who was, who is, and who is to come. Today we call him "Christ the King." In this life, men and demons lie and accuse. But Christ doesn't accuse. He pleads on our behalf to the Father. Put all your chips on his promise of Eternal Life. It will change the way you live. And it will secure perfect Happiness in life beyond death.


Our technology analyzes your entire inventory VIN-by-VIN allowing us to help you identify new opportunities. Our system will then help you identify and create VIN specific marketing campaigns. Putting your inventory directly in front of potential buyers based on their online activity.
Each visitors actions on your VDPs are tracked and analyzed giving our engine the power to recommend other vehicles in your inventory based on their searches.
We allow your site visitors to browse your inventory within the ad themselves. Understanding the range of vehicles that a shopper is interested in has allowed us to drive a 1.1% CTR on average.
With 6 out of 10 ads never being seen, it's important to ensure you have the highest quality ad inventory. We have access to prime inventory across mobile and desktop to dominate viewability.
We only charge our clients when we're able to re-interest a lost site visitor back to a specific VDP. If they don't click, you don't pay.
We'll help you clean up your Google Analytics accounts and establish proper tracking as part of our on-boarding process at no charge!
We work with your web provider to set up informative event-tracking such as recording of chats, text, calls and various form fills.
Our team will build out a custom GDS dashboard which will help you visualize important site data that help you make more informed marketing decisions.


High transaction fees and slow processing times is a recurring problem whenever the bitcoin network is overloaded. Developers are currently working to solve this issue for in real life payments by utilizing the lightning network. To use this, however, you still have to fund a channel and are therefore still hit by the high fees. Because of this, SegWit, a protocol developed to decrease fees and transaction times is needed to further strengthen the usage of bitcoin. Read more about the Segwit protocol here.
Outcries for the adoption of this protocol has been all over the bitcoin community for months now. Some major players have already implemented SegWit, but today two more major exchanges announced they will implement it. Bitfinex announced they already have it ready for use & Coinbase announced they aim to have it 100% ready by mid next week.
Even though this alone doesn't fix the high fees and slow transaction times, it is definitely a step in the right direction. When technologies such as the lightning network and SegWit truly become mainstream in the crypto-space, bitcoin will hopefully be used even more as a payment method in the real world.
This news could have a positive impact on the price of bitcoin which once again has a great day being up 6.67% in the last 24 hours valued at $11869 at the time of this writing. Bitcoin hitting $12.000 most likely isn't very far into the future as positive news keeps emerging and investors are bullish on the golden coin.


text:
For women who want more satisfying penetration play during their solo sessions, dildos are the perfect female sex toys for you. Most dildos are designed to look and feel like the real thing to give you more personal pleasure (anally or vaginally), and some even come with extra functions, such as doubling as a vibrator for a 2-in-1 sex toy you'll never let go. Whether you're a beginner or a size queen, dildos come in a wide range of forms and sizes that will satisfy your needs and give you the experience you desire. Learn more about the different types of dildos available and their benefits in our Dildo Buying Guides. Cock Massager
Cyberskin is a synthetic material that feels more like human skin. It is a porous material and cannot be sterilized. It often decomes sticky after washing (which can be remedied by a dusting of cornstarch) and is more delicate and more prone to rips and tears than silicone dildos. "Packing dildos", which are not designed for penetration, are often made of this material.
At Jack and Jill Adult, we have sex toys for women, adult toys for men, and adult toys for couples. Our swings, costumes, and games make creating your own sexual fantasy fun and easy to do. The toys we carry come in various shapes, colors, and sizes and will give you what you need to make the most out of every physical encounter. In our adult shop, you will find toys that are designed to offer the most satisfaction when it comes to ease of use, superior quality and performance. Sex Toys Clearance
Edible markers are great fun when it comes to enjoying sex. Have an erogenous zone you'd like her to explore? Circle the zone and have her lick the flavored marker off of your naked body! No matter how you choose to express yourself with these play pens, you're going to have some fun. In the pack, customers will receive: red (strawberry), green (green apple), blue (blue raspberry) and magenta (cherry).
If you think you're ready to delve into the world of anal, then we offer a variety of anal sex products to suit beginners and those who are more experienced alike. Butt plugs are wonderful because they can be used during other forms of sex play, or on their own, to deliver a unique sensation to your backdoor. Spencer's has a wide selection of anal plugs, including vibrating butt plugs and silicone anal beads, which can feel wonderful as you slide them in or out. And if it's your first time experimenting with anal sex, then using lubricant is a must to ensure your sexy time remains sexy. From glass butt plugs and silicone beads to prostate massagers, Spencer's selection is perfect for anal pros and beginners at alike. Cheap Sex Tpys
Whether you're away on a business trip or absent due to a fun weekend away, distance is no factor for sexual intercourse with the Kiiroo Pearl + Onyx Couple. The Pearl (intended for the female; which is a very effective vibrator) and the Onyx (a Fleshlight, essentially) are bluetooth compatible and react to each other's movements due to its touch sensitive skin and capacative technology. The toy recreates long-distance sex in the most authentic way possible, and is the first of its kind. Bdms Toys
The first dildos were made of stone, tar, wood and other materials that could be shaped as penises and that were firm enough to be used as penetrative sex toys. Scientists believe that a 20-centimeter siltstone phallus from the Upper Palaeolithic period 30,000 years ago, found in Hohle Fels Cave near Ulm, Germany, may have been used as a dildo.[10] Dildo-like breadsticks, known as olisbokollikes (sing. olisbokollix),[11] were known in Ancient Greece prior to the 5th century BC.[12] Chinese women in the 15th century used dildos made of lacquered wood with textured surfaces. Nashe's early-1590s work The Choice of Valentines mentions a dildo made from glass.[13] Couples Dildos
If your partner has a penis, check out this remote-controlled toy. The Pulse III comes with six different vibration patterns, and is marketed in a unique and inclusive way: It can be used on both a flaccid or erect penis, for those who have erectile dysfunction or mobility issues. Plus, the Duo model is specifically designed for couples, and features an additional motor on the outside to stimulate the receiving partner during penetration.
Meet the triple-threat of vibrators. Ola is made of super high-quality silicone and feels velvety to the touch. The squeeze pad powers the multi-level vibration, meaning no feeling around in the dark to find a button. Best of all: It has a memory mode, allowing you to tap in your own vibration patterns that the vibe will automatically repeat. Frankly, it's a little too smart for a vibrator.
If you are considering buying this for a bachelor party, don't waste any more time reading reviews. Just go ahead and buy it. Cheapest blow up doll on Amazon and she performed beautifully during my friend's bachelor party. She was the hit of the party and got a big laugh from everyone there and provided some hilarious photo opportunities. Obviously, if you are looking for a doll for different, more ...private... activities then you should probably be spending more than 10 dollars. But if you're looking for a funny gag gift or prop for bachelor party then look no further.
I purchased Fatty Patty as a surprise Birthday present for a friend. He was thrilled but I wasn't. I wanted what was advertised...FATTY PATTY! This doll could fit in my own swim suit and before you think I must be large...I wear size 4! Her waist is the size of mine...granted her breasts are extremely large but everything else is small. I WANTED A FAT BLOW UP DOLL!!!!
Before using a sex toy, owners should take precautions. One should check for tears, rough seams or cracks that could harm the inside of the vagina or anus. Condoms should also be used on porous sex toys and sex toys that are being shared between two or more partners. They should also use appropriate lubricants; silicone lube will break down silicone toys, and oil-based lubes will break down latex condoms.[14] Male Strokers
Because I have the best job ever, I decided to test seven luxury couples sex toys over the past year. Some were so good they died on me from overuse, and some simply didn't do it for me at all. Of course, this is just the way my body responded — everyone is different. That said, I hope my findings will help you make an informed investment in your multi-orgasmic future. Because while these are all non-refundable and a bit of a splurge, finding the right luxury sex toy is truly priceless. Adam And Eve Catalogue
Golden natives, Tory Johnson and Rose Kalasz, knew they had a brave feat ahead of them when they decided to open Denver's first femme-centric, sex-positive boutique — but they were up to the task. Set to open in Modern Nomad in RiNo this Saturday, Awakening Boutique is the result of months of research, careful planning and hard work but the duo knew Denver was ready for it. Vibrator For Beginner
Not only is the blooming flower design of the Iris super pretty to look at (masturbating with a flower is girly AF and I love it), but those ridges feel great in your vagina. This toy is big at 9 inches long, but it's still quiet and operates on a few different modes so you can make sure you get the best orgasm possible. The tip is curved for some really great clit stimulation, and then those fake vibe petals feel great if you're into internal stimulation. It's also rechargeable, which is truly 🙌.
Cock rings can be used to restrict blood flow in the penis to create a larger, harder and longer-lasting erection. We like the Sexooxx Cock Ring Set for its simplicity. The stretchy silicone material is easy to slide on and off. The Sexooxx Cock Ring Set come with three rings of varying sizes so you can explore the most comfortable fit, and even wear them in combinations. Sex Toy Clearance
There is a common misconception that vibrators are exclusive to female solo play, but the G-Gasm Delight delivers vibrations of adjustable intensity that can just as easily be used for prostate stimulation and couples play. And unlike the massage wand, the G-Gasm Delight can be used internally without any additional attachments. The G-Gasm Delight boasts a superior design with an ovular tip that lends itself to increased coverage and an inclined neck that maximizes reach.
The Hitachi Magic Wand is referred to as the "Cadillac of vibrators" for a reason. It's big, it's powerful, and it's reliable. Originally created to relax muscles, the wand quickly gathered a cult following as a vibrator for its undeniable ability to relax people (especially those with clits) in other ways. While the sex toy works wonders for solo play, it's fun to use in a relationship to help a partner with a vagina reach orgasm during penetrative sex. For those into BDSM, the magic wand is often used by the dominant on the submissive partner to bring the sub to orgasm while they're bound or tied up. Sex Toy

redpajama_set_name: RedPajamaCommonCrawl


text:
Mully & Haugh
Bernstein & Holmes
Parkins & Spiegel
Score Evenings
Cubs How-To-Listen
Best of 670 The Score
Watch 670 The Score
670 The Score Shop
audio from 670 The Score
~^~
Watch 670 The Score Live
Even after everyone submitted their comments, it's confusing what went wrong on Bulls' bad inbounds play late in loss to Clippers
Bulls blow early 19-point lead, lose 108-103 to Clippers
White Sox minor league managers receive promotions as organization reveals player development staff for 2023
Former Cubs CF Dexter Fowler announces retirement
Bears boast league-leading $98 million in spending space as NFL sets record salary cap figure
Patrick Mahomes 'wholeheartedly thought' Bears would select him in 2017 NFL Draft, his father says
White Sox claim right-hander A.J. Alexy off waivers from Twins
Bears hit the road as NFL Draft scouting is set to begin in earnest
Blackhawks all-time leading goal scorer Bobby Hull dies at 84
670 The Score
Chicago Cubs Heyman: Loretta A Strong Candidate To Manage Cubs
Heyman: Loretta A Strong Candidate To Manage Cubs
By Mully & Haugh Show, 670 The Score
(670 The Score) While the Cubs' season has yet to end, their collapse by virtue of their current six-game losing streak has left them out of the playoff picture and turned the conversation to the future.
And no question looms larger than this: Who will manage the Cubs in 2020?
Joe Maddon's contract will expire at season's end, and the expectation across the MLB landscape is that he won't be retained. Radio.com Sports MLB insider Jon Heyman also sees it that way, saying, "At this point, I think we can all count on the fact that the Cubs will have a different manager next year."
A handful of names have already been connected to the Cubs. That includes David Ross, who serves as a special advisor to Cubs president of baseball operations Theo Epstein, but it's a different individual whom Heyman sees as a front-runner candidate right now: bench coach Mark Loretta.
"At this time it's speculation -- I think Mark Loretta is the most likely candidate to be the Cubs' manager," Heyman said on the Mully & Haugh Show on Monday morning. "He did take a job there coaching, and everyone seems to respect him. His name is coming up with other teams now. Not that that's the reason, but I do think that he will be a very strong candidate to be the manager."
Heyman also explained why he has some doubts about Ross or MLB Network analyst Mark DeRosa becoming the Cubs' next manager.
"I think David Ross or Mark DeRosa would be (leading candidates), but it's not clear at this moment that they're ready or at least in terms of what they want to do that they want to do the job," Heyman said.
The Cubs hired Loretta in January to be their bench coach after he had spent the previous nine seasons working in the Padres' front office.
Several weeks after being hired by the Cubs, Loretta addressed a question about the perception that he was hired as a bench coach to be the Cubs' manager-in-waiting as Maddon worked in his lame-duck season.
"It's not strange because Joe's not making it strange," Loretta said of Maddon's status. "I think he's so sure and confident in his ability that I don't think it's going to be any kind of an issue for him, and I think it will be a trickle-down effect for everybody else.
"I understand the speculation (that Loretta would replace Maddon). Start adding things together, things like that. But Joe is a huge reason why I'm interested in taking this job. I think he's one of the best managers in the game, for sure. One of the best people."
Joe Maddon
Mark Loretta
Mark DeRosa
Oilers beat Blackhawks, 7-3
DeRozan, LaVine lead Bulls to 128-109 win over Magic
Top 10 MLB center fielders for 2023 season
Westerlund: Ire for Bulls' mess should be directed primarily at front office
Jaxson Stauber wins again as Blackhawks beat Flames, 5-1
670 The Score |
Chicago's Sports Radio and Home of the Cubs
Listen to 670 The Score


text:
Beaurobluebellogencis
Beauroblubellogenics: The Science of Studying The Beautiful Blue Belle: The Blood Brain Barrier
The Humanion's Newest Section: Beauroblubellogenics: The Beautiful Blue Belle in poetic term and in scientific, Beauroblubellogenics: the neuro-science branch, that does nothing but studies the Blood Brain Barrier. Therefore, here, this is for Beauroblubellogenics for the Beautiful Blue Belle, the Blood Brain Barrier. Dear Reader, you, may not, have read these terms and heard of the ideas and concepts they represent, but they have been published and are part of the printed world. The printed world existed in 'imagination' and in living that imagination in learning and creating, which, then, became creative and scientific works, that, then, got into print, in which the ideas of the Beautiful Blue Belle was elaborated as part of the celebration of this astonishing 'mechanism' of the Blood Brain Barrier and, from there, arises Beauroblubellogenics. Here, The Humanion, presents Beauroblubellogenics, the science of studying the Blood Brain Barriers: We envision that the people, who are to take forward this discipline, are not only qualified Neurologists but are practising at the Most Senior Consultant Level and they are such minds, who have developed 'the equi-competence' in that same Most Senior Consultant-Level in all the major branches of Medicine so that not only have they the knowledge, expertise, insight, experience and study in them but, also, they have developed both a 'Nano-seismic' and 'Universal' views of Medicine, in between which views there exist myriad of other views, such as, atomic, anatomic, molecular, genetic, biochemical, neurological, genetics etc, as well as, a Philosophy of Medicine so that these minds are capable of seeing, looking and understanding 'The Mechanoprincipium-View' of the subject being studied. In other words, these are the minds, that can, only, be described as 'Living Encyclopaedic Minds': The Humanion: April 06: 2018
The Iliad and The Odyssey Through the Blood Brain Barrier to Devastate Glioblastoma: New Homeric Breakthrough Raises Hope for Future Therapies to Destroy Glioblastoma Tumour
|| Tuesday: May 14: 2019: University of Helsinki News: Päivi Lehtinen Writing || ά. Researchers from the University of Helsinki have discovered a chink in the armour of the tumour cells of Glioblastoma, a lethal brain cancer. Alongside the finding, the researchers, also, came up with a method for attacking this vulnerability. The results, gained in experiments conducted with cell cultures and a mouse model are promising.
Glioblastoma is the most prevalent and the most lethal type of brain tumour in adults, with no curative treatment currently available. Glioblastomas can not be surgically completely excised, as the tumour cells are adept at invading tissues and spreading around the brain. In addition, Glioblastoma cells are extremely resistant to existing drug therapies.
For a long time, researchers have been looking for weaknesses in Glioblastoma cells, which could be targeted with efficacious therapies. A research group, headed by Professor Pirjo Laakkonen at the University of Helsinki has already earlier found that the expression of a small fatty acid-binding protein:MDGI or FABP3 in Glioblastoma cells increases their ability to invade tissues and is linked with a poorer prognosis for the patient.
"Our new research revealed that Glioblastoma cells depend on the expression of a gene, which produces the MDGI protein. Inhibiting the function of this gene results in the death of the tumour cells." Professor Laakkonen says.
The absence of MDGI caused instability in the membranes of lysosomes, cleaning organelles, found inside tumour cells, which, in turn, resulted in the leakage of acidic and proteolytic enzymes, contained in the lysosomes into the cytoplasm, initiating cell death.
Further investigations of the mechanism, leading to cell death showed that silencing MDGI caused changes in the phospholipid composition of the lysosomes in Glioblastoma cells. The transport of linoleic acid, a substance essential to humans, found in food, from outside to inside cells was disturbed, resulting in a significant change to the fatty acid composition of the lysosomal membrane. This change apparently increased the permeability of the membrane.
"Our research demonstrates that MDGI is a key factor, regulating and maintaining the structure of the lysosomal membrane. This is the first gene, found to regulate the stability of the membrane." Professor Laakkonen says.
What makes this finding, particularly, interesting is that cell death, caused by leakage in the lysosomes of Glioblastoma cells can be activated by using drugs, that cross the Blood-Brain Barrier. In their studies, Professor Laakkonen's Group used an Antihistamine, known as, Clemastine.
In cell cultures, Clemastine resulted in lysosome-mediated cell death in Glioblastoma cells already at concentrations, which had no significant effect on healthy cells of different types. In mouse models, Clemastine was very effective in reducing the spread of brain tumours and improving the survival rate of the animals. In the case of the most invasive brain tumour model, the administration of Clemastine resulted in the disappearance of the entire tumour.
"Our findings demonstrate that Antihistamines and other drugs, that increase the permeability of the lysosomal membrane can be considered as an enhancing therapy for patients with Glioblastoma alongside established treatments." Professor Laakkonen says.
The study was published in EMBO Molecular Medicine journal.
Contact: Professor Pirjo Laakkonen
Laboratory Animal Centre, Helsinki Institute of Life Science:HiLIFE and Faculty of Medicine: University of Helsinki: Tele: +358 50 4489100: email: pirjo.laakkonen at helsinki.fi
The Paper: Vulnerability of invasive glioma cells to lysosomal membrane instabilisation: Vadim Le Joncour, Pauliina Filppu, Maija Hyvönen, Pauliina S Turunen, Harri Sihto, Isabel Burghardt, Heikki Joensuu, Olli Tynninen, Juha Jääskeläinen, Michael Weller, Kaisa Lehti and Pirjo Laakkonen: Published in EMBO Molecular Medicine: 2019
Caption: Figure shows patient-derived glioblastoma in murine brain treated with saline:control:left panel: or clemastine:right panel:. Glioblastoma cells:red: are known to invade the brain:blue:. Invasive glioblastoma cells are impossible to remove by surgery and exhibit high resistance to chemotherapies. Clemastine-treatment destroyed the invasive cells leading to clear tumour:brain border: Image: Llaakkonen Lab: University of Helsinki:::ω.
Blood Is The Fountain Of The Heart Of Life: Conducted By The Heart: Played By The Orchestral Work Of The Ever-Efficient Kapillarika-Run: The Blood Is The Water: The Plasma: The White Cells: The Red Cells: The Platelets: The Haemoglobin: The Oxygen And The Nutrients And Minerals: The Flow: The Motion: The Rhythm: The Pulse: The Systolic: The Diastolic: The Law: The Glow: The Sparkle: The Current: The Concurrent: The Gradient: The Movement: The Rule Of Law: Blood Is The Victorian Lantern-Illuminator Of The Fire Of Life: Blood Running Is The Proof That Life Is Going And That: Despite All The Obnoxious People Seeking To Divide Humanity: Blood Offers The Science: That Humanity IS ONE: The Humanion


text:
The exhaustion of being a Black teacher in a school when you're one of too few educators of color
As well-intentioned schools with mostly white staffs scramble to respond to a reckoning on racism, an "invisible tax" of work falls on too few teachers and administrators like Malcolm Cawthorne in Brookline.
By Linda K. WertheimerUpdated April 1, 2021, 11:55 a.m.
Malcolm Cawthorne at Brookline High School.Webb Chappell for The Boston Globe
MALCOLM CAWTHORNE, the longest-serving Black teacher at Brookline High School, leaned close to his computer screen and spoke firmly to the mostly white group of administrators in the Zoom meeting. "I'm not cleaning up your [expletive] anymore."
Hearing her normally gentle husband speak to his colleagues like that startled Lori Cawthorne. A human resources administrator at Harvard University's libraries, she was working a few feet away at the dining room table in their Chestnut Hill apartment. She glanced at him and saw exhaustion in his eyes. He is a giant teddy bear most days, she says, and uses his booming voice sparingly in a tough-love kind of way. Malcolm Cawthorne, a history teacher and an administrator himself, didn't yell in that Zoom meeting before 25 colleagues. But even at half-throttle, his voice can silence a room.
It was late June 2020, a month before Cawthorne would turn 50. America was roiling in protests against systemic racism in policing after George Floyd was killed when a white police officer kneeled on his neck for nine minutes. For many white people, Floyd's death was an awakening to contemporary racism and a call to action. For Lori and Malcolm Cawthorne, however, the events of the summer were less surprising than tragic, a painful repeat of the racism Black people have always faced in America.
Floyd's killing and the subsequent protests have affected Malcolm Cawthorne in another way, though. More than ever, he has felt as if he were on 24-7 call at his school because of a newfound urgency among well-intentioned white colleagues who want to do something to help, and quickly. Many white teachers and administrators are scrambling to educate themselves and their students about the ways racism infects every aspect of American society. But the more they want to help, the more they seem to need from the school's few Black teachers and administrators.
Cawthorne was already upset over the way a group of white teachers had handled a virtual lesson on George Floyd. The teachers had provided their remote students with a link to an article that took them directly to a video of Floyd being killed, images that some parents, Black parents especially, feared would traumatize their children. The parents complained to Black teachers and administrators, who then had to become the problem-solvers for a problem they did not create.
Cawthorne agreed with parents that letting the video link slip through, even unintentionally, was insensitive. Now, less than a month later, hearing administrators again push for lessons on Floyd made him fume. He did not want to shut down discussions about racism in classes. In fact, he had founded the school's racial awareness course, the only elective offered on that topic, and recruited a white colleague to co-teach it. He wanted students to understand that confronting racism was not just the responsibility of people of color. It was everyone's problem.
But on that Zoom call, he was alarmed because most teachers were absent from the discussion, and he knew training over the summer would focus primarily on preparation for remote teaching. At the same time, teachers and administrators of color at Brookline High were hurting, because of Floyd and the way the COVID-19 pandemic had further deepened racial inequities. But did his white colleagues know that?
"We can't expect teachers to do this right without training," Cawthorne says. "We have evidence, particularly around George Floyd, if we only have white teachers in the room, we're going to mess it up."
He worried most of all that his white colleagues' passion to act would inadvertently hurt students of color if ill-prepared lessons were taught. Trying to prevent students of color from experiencing more pain than they already do from everyday racism was exhausting.
"There's an invisible tax on Black teachers and teachers of color," says R. Davis Dixon, a psychology professor at Hampton University, a historically Black institution in Virginia, and the lead author of a 2019 Education Trust/Teach Plus study on turnover among teachers of color and strategies to retain them. "They end up shouldering a lot of responsibilities that other folks just don't have to. And then there's the psychological cost, where you are forced to live the trauma of racism and systemic oppression while being the face of changing that in your school."
Dixon's research shows that many teachers of color — who make up just 20 percent of public school teachers nationwide, even though students of color now make up roughly half of the enrollment — volunteer to tackle systemic racism, train colleagues, and run sessions about racism for students. Administrators often take the teachers' efforts for granted rather than offering additional pay, resources, training opportunities, and emotional support. Taken together, all of this may help explain why Black and Latino teachers leave the education field at higher rates than white ones, even at double the rate in some school systems.
This sort of pressure is nothing new to Cawthorne. For the last 23 years, he has been a leader on racial issues both at Brookline High, where just over half of the student body is white, and for his town of Brookline. He won the school's 2017 teacher of the year award partly because of nominations touting him as the "go-to person" on race, and is in his second year as coordinator of the school's METCO program. The Massachusetts Black and Latino Legislative Caucus also recently honored him with a Black Excellence award for his work at the high school and in the town.
Since Floyd's killing, demands on Cawthorne have so increased that his wife has grown worried about his inability to say no to requests that range from "Will you serve on a diversity committee?" to "Can you talk to this distraught parent about the racist graffiti found in the bathrooms?" This school year, her husband agreed to take on yet another volunteer position in the town, as a member of the Task Force to Reimagine Policing in Brookline. "Folks immediately go to him as the voice," she says. "That's a lot to ask of a person."
Cawthorne, for his part, worries he will let students of color down if he stays silent. "I do think I always have this burning feeling that I can't really wait for somebody else to do it or it's just not going to get done," he says. His late father, a Harvard-educated teacher who became a dean at Boston College, instilled that attitude in him. "One of the things he always used to say is, 'I can be tired in my coffin.'"
In 2018, Cawthorne advises students Satchel Tsai (far left) and Ellora Daley before they lead a peer workshop called "Asian Americans and Affirmative Action," about the debate over race-based admissions at Harvard University.Linda K. Wertheimer
CAWTHORNE GREW UP IN BROOKLINE in the 1970s and '80s and is himself a graduate of Brookline High, as are his two daughters, now both in their 20s. His eldest, Mariah Brobbey, teaches seventh-grade Spanish at an Indianapolis middle school. She, too, finds it hard to turn down requests to serve on race and equity committees, even as she feels the added burden of them, and keeps speaking up when she sees examples of racial inequity at her school. "There's this unwritten rule in the Cawthorne family. We're never satisfied with things," Brobbey says. "I definitely feel like I have to fix it when there's a screwup."
Cawthorne, his wife, and younger daughter live in a brick duplex in Chestnut Hill, one of the toniest sections of Brookline. But he also knows well how through its history the town fought attempts to be annexed by Boston, a battle that Cawthorne and other historians see as the town's efforts to keep itself white. This attitude was still more or less in place in 1973, when Cawthorne's parents moved to town. When his father arrived for an appointment to view an apartment, the real estate agent took one look at him and said, "Oops, it's already rented." (Cawthorne's parents filed a discrimination complaint with the state.)
Just as Cawthorne was about to start kindergarten, his parents learned he would be the only Black child in his class. They persuaded the school system to send him to a different Brookline school, where he could at least be one of a few students of color. Hearing that teachers often were setting lower expectations for Black students, they helped create the Concerned Black Citizens of Brookline, a group of parents who wanted to ensure that the town's schools gave their children the same opportunities for high-level classes as they gave white students, as well as to raise awareness of racism and stereotyping. In Brookline grocery stores, recalls Malcolm's mother, LaVerne Cawthorne, people sometimes asked her if she was a cleaning lady. "The general attitude is, 'You don't belong here,'" she says.
In Malcolm Cawthorne's Brookline High class of 590, there were around 45 Black students. His school had a clear racial divide at the time, particularly between white Irish American students who historically lived in an area called Whiskey Point and Black and Latino students, many of whom lived in Boston and came to Brookline through the METCO program. There was a racist incident as he started in 1984. "There was a stairwell for years referred to as the Point stairs," he recalls, and someone there wrote a racial slur followed by the command "go home." Cawthorne remembers a sense of helplessness afterward. "I felt a little bit like, we're never going to catch this person. It could easily happen again."
He also felt discrimination by peers in other ways. He was respected as an athlete, but not as a scholar, even though he took honors classes. When he was accepted to Bucknell University, some students refused to believe it. "It's easier to say that a Black kid is better than me at basketball than to say a Black kid beat me at getting into Bucknell," Cawthorne says. Even though his yearbook showed him smiling with a refrain from a James Brown song: "Say it loud! I'm BLACK and I'm Proud," it was hard to feel that pride at Brookline High.
In the end, he rejected Bucknell because he saw it as too similar to his mostly white high school. Instead, he chose the historically Black institution Grambling State University in Louisiana. No one questioned his right to be there, and in his Black professors he had mentors who talked to him about working to achieve equality for Black people in every facet of society. "They were good at imploring us to take leadership roles and to know we had a voice," he says. For the first time, Cawthorne saw teaching as a career possibility because, for the first time, Black men and women were teaching him.
After college, Cawthorne taught for five years at a predominantly Black high school in Des Moines, where most teachers were white and there was a zero-tolerance discipline policy. "If there was a punch thrown, it was an automatic suspension for both kids," he says. He thought suspending the students, many of whom were struggling academically, was counterproductive.
A former student, Corey Pinks, now 43, recalls the way Cawthorne made it clear during the first weeks of a US history class that fighting is not the way to resolve differences. Two boys in class started to fight, and Cawthorne physically separated them and made them sit down in front of the class. "He said, 'Not here. You don't fight over your problems. You talk them out,''' Pinks recalls. "Most teachers would just send you to the office, get you sent out of school. He didn't want to see that. He wanted to break the cycle."
IN 1998, DESPITE MIXED FEELINGS about his alma mater, Cawthorne accepted an offer to return to Brookline High to teach history. A few years later, a Black dean who had taught an African American history class retired. "I inherited his class and the unofficial title of school historian," Cawthorne says. He also soon inherited another duty: He became the teacher to whom white teachers and administrators turned for advice when racist incidents or conflicts occurred in the school.
He also became a frequent trainer on race and equity issues, a duty he keeps today in a 2,000-student school that is increasingly diverse. In the past two decades, Brookline High's student population has changed from more than 70 percent white to 53 percent white. The next largest racial or ethnic group is Asian American, at 16 percent, followed by Latinos at 13 percent, multiracial students at 10 percent, and Black students at 8 percent.
In 2016, Cawthorne gave a speech he titled "Black Man in Front" to dozens of teachers in a library at Brookline's Lawrence School. He said he sometimes felt frustrated as a Brookline High student because he never had a Black male teacher for any subject. "I struggled not seeing 'me' in front of my classrooms. I had phenomenal teachers but none looked like me." The only Black adult men he knew at the school were a dean, a program coordinator, and his basketball coach. "But they never stood in front of me to teach quadratic equations, the theory of evolution, verb conjugation, nor slavery. This ate away at my being." Black teachers, he said, can help students of color build pride in their racial identity and can help dispel stereotypes that people of color in schools are more often custodians than teachers or administrators.
He told the teachers about how Corey Pinks, one of his first students, had failed the first quarter of his history class. "He kept asking, 'How could you fail me? You are cool!' I kept explaining that I wasn't that cool. He would need to do better," Cawthorne said. For "this African American boy, I began to be the Black man in front." Pinks, after joining the Marines, went on to become the first in his immediate family to graduate from college and today helps clients in a homeless veterans program navigate the mental-health system.
After Cawthorne finished his talk to the teachers, he fielded their questions for nearly a half-hour. When one teacher asked, "How have things changed for Black students in Brookline schools?" Cawthorne sighed. He mentioned progress, including new programs such as the African American and Latino Scholars Program that aims to get more students of color into the school's highest-level classes. But he also said too many students still experienced racial slurs and microaggressions. "They sting. They are wounds that perhaps heal but can reopen easily."
To illustrate, he brought up incidents at Brookline High during recent years, including two different occasions where students used the N-word against other students. In one case, two former students and a current one created a Snapchat video that went viral within the school community; they said the slur several times and directed it to a Black student in the scholars program.
The current student was in Cawthorne's US history class. He spoke to the student about the effect of the N-word not just on Black students but on Cawthorne himself. "You fit in a long line of Brookline High kids who use that word with venom to hurt people," he told the student. More racist incidents and student walkouts in protest followed, despite assemblies, despite training for teachers, despite the headmaster's pronouncement that this is "not us."
At Cawthorne's library talk, another teacher asked, "As a white woman teaching in an elementary school, what is one thing I could do tomorrow to help with my students of color? I need an action plan."
Give the students a way to tell their stories, Cawthorne urged in a soft voice. "Think about what would best serve the kids you have and try. You might fail. Who's the adult in the building? Be the risk taker. Just try to provide the space."
Cawthorne is so well known in Brookline High School and the town that he's been nicknamed "mayor."Webb Chappell for The Boston Globe
CAWTHORNE'S STUDENTS say he intuitively knows how to provide a space for teens to talk. In the classroom, he is like an orchestra conductor working to get the most out of each player. During discussions, he gives every student an opportunity to speak but does not force the issue. During one exercise, he sets his phone timer for 30 seconds and lets silence fill the room if a student prefers not to talk. When the timer dings, he softly utters the next student's name.
Kate Leslie, the white teacher he recruited to co-teach the racial awareness course, at first chafed at the stretches of quiet. Then, observing Cawthorne, she realized the power of a technique that slows down time, especially in discussions about race. "It came out of his knowledge that kids needed to sit in that silence to be forced to think deeply."
Cawthorne often uses himself and his experiences to teach lessons on stereotyping, especially in the class he taught with Leslie. "We have our personal check list of what we fear," he told the class one day, then stood in the center of the room. "Before you knew me, how many of you were afraid of me?" he asked. None of the teens admitted to any trepidation, but Cawthorne said he often sensed strangers' fear of him, given he is over 6 feet tall and weighs 380 pounds. "African Americans have to be doubly conscious of what stereotypes are, how to break them, and when to be you," he said. A student asked Cawthorne for examples. "In my neighborhood, in Chestnut Hill, I purposely smile at every white person I see," he explained. "That's just walking home. That's exhausting."
Alexis Raitt, a white student, took the racial awareness class with Cawthorne and liked his gentle but frank teaching approach. Now a sophomore at Northeastern University, she has stayed in touch with him. She wishes that it did not always fall to him to be this oracle of teaching on race at Brookline High, "though some people may see him like that," she says. "I would argue that it's more the responsibility of white people to educate themselves."
For Cawthorne, it's a complicated algorithm to figure out if and when he should be the one speaking out. "That's a changing thing for me," he says. "There are definitely times where I feel if I don't say something, I'm shirking my responsibility."
There are times, too, when he thinks he may be the only person who notices a problem. Take January 2017, for instance. He attended a staff meeting in the school auditorium about the appointment of the next headmaster. The Brookline superintendent announced that he had promoted the interim headmaster, Anthony Meyer, who is white, as the permanent one. When the teachers in the auditorium responded to the news with a standing ovation, Cawthorne stayed seated, stared straight ahead and seethed, even though he liked Meyer. The school district had promised to conduct a full search for the new headmaster and include a pool of diverse candidates, but then just named Meyer to the post without an inclusive search. "I felt this was institutional racism," Cawthorne says now. "I just see it as this is recurring history in Brookline."
Cawthorne brought up his concerns about the broken promise with his history colleagues. Some saw no issue, but Oyeshiku Carr, a Black teacher, understood immediately. "When we talk about white privilege and white supremacy, I don't think anything makes it better," Carr says of the appointment of Meyer without a search. "Even as nice a person as he is, just the fact that if he had been a Black person, that wouldn't have happened for him that way [is telling]."
Cawthorne is so well known at Brookline High and in town that he's been nicknamed the "mayor." He has been a football and basketball coach, and in recent years, the announcer at basketball games, where he takes his bass voice to full volume to welcome the Warriors into the gymnasium. He has experienced racist incidents and comforted his own Black students when they have been the targets of racism. He has watched other colleagues of color take on extra roles, too, including helping students organize Black Lives Matter protests. So in June 2020, it's not like he was thinking of quitting when administrators on Zoom touted the idea of starting the school year with lessons on Floyd. But given all that he had seen go wrong over the years, he could not stay silent.
After the meeting, colleagues sent Cawthorne e-mails of support. And Meyer, the headmaster, set up a private talk via Zoom with Cawthorne to discuss what had happened. "Here's this incredibly thoughtful, empathic teacher who is so frustrated with where we are as a school, with where we are as a country. It was definitely a 'wow' moment," Meyer recalls. At the same time, Meyer wanted Cawthorne, now also an administrator, to recognize that it was every administrator's job, regardless of race or ethnicity, to help clean up mistakes made by teachers. (Meyer agreed that it had been a serious error to include a link to a video of Floyd's death in a virtual lesson the previous spring.)
Cawthorne recalls that he minced no words with Meyer: "I just can't watch you guys blindly go into this and actually do more harm, and I don't know what it's going to take for you guys to actually see it." He wanted Meyer and the school to pause its plans until teachers got more guidance from administrators.
The most fundamental improvement will be for Brookline High to successfully increase diversity within its teaching ranks, an effort it has worked on for years. But it continues to struggle with recruitment, hiring, and retention, which Meyer attributes to national as well as local issues. In Brookline, for example, instability at the top — the town has had three interim superintendents over two years — has made it hard to get speedy approval for competitive pay packages. In early March, the town hired its first Black superintendent, Linus Guillory; he will take over the job in July. Cawthorne, who accepted an invitation to be part of the search committee, is pleased Guillory has already met twice with a new student group at the high school examining race issues.
Cawthorne has no solution, though, for how to strike a better balance in his professional life, other than to rely on his instincts. A few months into this new school year, he declined a retired white teacher's request to help craft a letter of protest about a school issue because he knew he was only asked as a Black voice. "There are moments where, for self-preservation, I'm not going to respond," he says. For now, Cawthorne wants Brookline High to think more about the effect of its actions on students and staff of color.
"When the [expletive] hits the fan, they turn to people of color and ask for help," agrees Carr, who left the school last June to help lead a private school in New York City. Carr says he had lost patience with Brookline High's fumbling of racial issues. "For me, what Malcolm is trying to do is always swimming upstream."
Linda K. Wertheimer, a former Globe education editor, is the author of "Faith Ed: Teaching about Religion in an Age of Intolerance." She is a 2020-2021 Spencer Fellow in Education Journalism at Columbia University. Send comments to magazine@globe.com


text:
Home > News > Trending news > Senate healthcare bill includes Creates Act, raises legal tobacco age
Senate healthcare bill includes Creates Act, raises legal tobacco age
modernhealthcare | June 25, 2019
The Senate health committee chair on Monday amended its suite of healthcare proposals to include the Creates Act, aimed at boosting the generic-drug market, and to raise the legal age for buying tobacco products to 21.These two major additions to the package from committee leaders Sens. Lamar Alexander (R-Tenn.) and Patty Murray (D-Wash.) didnt come as a big surprise. The Creates Act cleared the Senate Judiciary Committee last year, and two committees in the U.S. House of Representatives, but has not been up for a floor vote yet. The bill would prohibit brand-name manufacturers from keeping drug samples out of the hands of generic competitors.The proposal to raise the legal age for purchasing tobacco was first introduced at the end of May by Senate Majority Leader Mitch McConnell (R-Ky.) and Sen. Tim Kaine (D-Va.). A stated priority for McConnell, the bill would target vaping devices and e-cigarettes as well as cigarettes, amid mounting public health concern about widespread teen use.
Measuring, Evaluating, and Reducing Hospital Mortality Rates
Move Your Dot is an effort to help hospitals know more about their organizational performance as it relates to mortality. A new statistical methodology has been developed to standardize hospital mortality rates in order to fairly compare them.
CMS to pay providers via MIPS for participating in COVID-19 drug treatment trials
CMS | April 21, 2020
Clinicians can earn a credit via the Merit-based Incentive Payment System (MIPS) if they participate in a clinical trial and report clinical information on COVID-19, the Trump administration announced late Monday. The Centers for Medicare & Medicaid Services (CMS) said Monday that the goal of the new credit is to provide data that will be vital to making treatments to combat the virus. "The best scientific and medical minds in the world are working night and day to find treatments to combat coronavirus," CMS Administrator Seema Verma said in a statement Monday. "But without solid data, their efforts are liable to run against a brick wall."
Texas Children's Hospital And Baylor College of Medicine COVID-19 Vaccine Technology Secures Emergency Use Authorization In India
Texas Children Hospital | December 29, 2021
Texas Children's Hospital and Baylor College of Medicine announced today that CORBEVAX™, a protein sub-unit COVID-19 Vaccine, whose technology was created and engineered at its Center for Vaccine Development (CVD), has received Emergency Use Authorization (EUA) approval from the Drugs Controller General ofIndia(DCGI)to launch inIndiawith other underserved countries to follow. Dubbed "The World's COVID-19 Vaccine", it uses a traditional recombinant protein-based technology that will enable its production at large scales making it widely accessible to inoculate the global population. The initial construct and production process of the vaccine antigen was developed at Texas Children's Hospital CVD, led by co-directors Drs. Maria Elena Bottazzi and Peter Hotez and in-licensed from BCM Ventures, Baylor College of Medicine's integrated commercialization team, to Hyderabad-based vaccine and pharmaceutical company Biological E. Limited (BE). CORBEVAX™ after completing two Phase III clinical trials involving more than 3000 subjects was found to be safe, well tolerated and immunogenic: CORBEVAX™ demonstrated superior immune response in comparison with COVISHIELD™ vaccine when assessed for Neutralizing Antibody (nAb) Geometric Mean Titers (GMT) against the Ancestral-Wuhan strain and the globally dominant Delta variant. CORBEVAX™ vaccination also generated significant Th1 skewed cellular immune response. CORBEVAX™ nAb GMT against Ancestral-Wuhan strain is indicative of vaccine effectiveness of >90% for prevention of symptomatic infections based on the Correlates of Protection assessment performed during Moderna and Astra-Zeneca vaccine Phase III studies. CORBEVAX™ nAb GMT against the Delta strain indicates a vaccine effectiveness of >80 percent for the prevention of symptomatic infections based on published studies. While none of the subjects who took CORBEVAX™ or COVISHIELD™ had serious adverse events, CORBEVAX™ had 50 percent fewer adverse events than COVISHIELD™. In the continuous monitoring of phase II studies, CORBEVAX™ showed high persistence of immune response as indicated by <30% drop in nAb GMT till 6 months second dose as compared to >80% drop observed with majority of the vaccines. "Protein-based vaccines have been widely used to prevent many other diseases, have proven safety records, and use economies of scale to achieve low-cost scalability across the world," said Dr. Maria Elena Bottazzi, Professor and Associate Dean of the National School of Tropical Medicine at Baylor and Co-Director of the Texas Children's Hospital Center for Vaccine Development. "Our decade-long studies advancing coronavirus vaccine prototypes has led to the creation of this vaccine, which will fill the access gap created by the more expensive, newer vaccine technologies and that today are still not able to be quickly scaled for global production." The need for safe, streamlined, low-cost vaccines for middle- to low-income countries is central to the world's fight against the COVID-19 pandemic. Without widespread vaccination of populations in the Global South, additional virus variants will arise, hindering the progress achieved by currently available vaccines in the United States and other Western countries. "This announcement is an important first step in vaccinating the world and halting the pandemic. Our vaccine technology offers a path to address an unfolding humanitarian crisis, namely the vulnerability the low- and middle-income countries face against the delta variant," said Dr. Peter Hotez, Professor and Dean of the National School of Tropical Medicine at Baylor and Co-Director of the Texas Children's Hospital Center for Vaccine Development. "Widespread and global vaccination with our Texas Children's-Baylor-BE vaccine would also forestall the emergence of new variants. We have previously missed that opportunity for the alpha and delta variant. Now is our chance to prevent a new global wave from what might follow." "Over the years, we have worked to make quality vaccines and pharmaceutical products accessible to families around the world. With this as our backdrop, we resolved to develop an affordable and effective COVID-19 vaccine. It has now become a reality. We deeply appreciate Texas Children's Hospital Center for Vaccine Development, Baylor, CEPI, the Bill and Melinda Gates Foundation, and the government of India for their continuous support and cooperation during this journey. The combined efforts & unceasing support demonstrate that we can collectively overcome any challenge". Mahima Datla, Managing Director, Biological E. Limited ABOUT TEXAS CHILDREN'S HOSPITAL Texas Children's Hospital, a not-for-profit health care organization, is committed to creating a healthier future for children and women throughout the global community by leading in patient care, education and research. Consistently ranked as the best children's hospital in Texas, and among the top in the nation, Texas Children's has garnered widespread recognition for its expertise and breakthroughs in pediatric and women's health. The hospital includes the Jan and Dan Duncan Neurological Research Institute; the Feigin Tower for pediatric research; Texas Children's Pavilion for Women, a comprehensive obstetrics/gynecology facility focusing on high-risk births; Texas Children's Hospital West Campus, a community hospital in suburban West Houston; and Texas Children's Hospital The Woodlands, the first hospital devoted to children's care for communities north of Houston. The organization also created Texas Children's HealthPlan, the nation's first HMO for children; has the largest pediatric primary care network in the country, Texas Children's Pediatrics; Texas Children's Urgent Care clinics that specialize in after-hours care tailored specifically for children; and a global health program that's channeling care to children and women all over the world. Texas Children's Global Health program leads efforts that advance health care equity through innovative collaboration in care, education and research for underserved populations globally. Texas Children's Hospital is affiliated with Baylor College of Medicine. ABOUT TEXAS CHILDREN'S HOSPITAL CENTER FOR VACCINE DEVELOPMENT Texas Children's Hospital Center for Vaccine Development is one of the leading vaccine development centers in the world. Established in Washington DC as the Sabin Vaccine Institute Product Development Partnership (PDP) in the year 2000 and after relocating to the Texas Medical Center in 2011, it rebranded as Texas Children's Center for Vaccine Development. For the past two decades it has acquired an international reputation as a non-profit PDP, advancing vaccines for poverty-related neglected tropical diseases (NTDs) and emerging infectious diseases of pandemic importance. In addition, it builds and strengthens capacity for vaccine development locally and with foreign nations and leads global efforts to guide and influence vaccine policy and advocacy through "vaccine diplomacy" as an international bridge for peace and vaccine development capacity. ABOUT BCM VENTURES Baylor College of Medicine Ventures is the commercial engine of the health sciences university, created to support the translation of academic knowledge and intellectual assets for the benefit of society. We do this by engaging university innovators, entrepreneurs and industry to fully develop ideas along their best commercial path. We foster a culture of commercialization and engage with industry to identify market opportunities for collaborative ventures. ABOUT BIOLOGICAL E. LIMITED Biological E. Limited (BE), a Hyderabad-based Pharmaceuticals & Biologics Company founded in 1953, is the first private sector biological products company in India and the first pharmaceutical company in Southern India. BE develops, manufactures and supplies vaccines and therapeutics. BE supplies its vaccines to over 100 countries and its therapeutic products are sold in India and the USA. BE currently has 8 WHO-prequalified vaccines in its portfolio. In recent years, BE has embarked on new initiatives for organisational expansion such as developing generic injectable products for the regulated markets, exploring synthetic biology and metabolic engineering as a means to manufacture APIs sustainably and developing novel vaccines for the global market.
Protecting Privacy in the Cloud and Cyber Resiliency Are Key for Healthcare Organizations
Why Your Health Marketing Campaigns Are Failing


text:
Apple Rumored to Launch New iPad 7, iPad mini 5 and 10.5-inch iPad 'non-Pro'
Apple Rumored to Launch New iPad 7, iPad mini 5 and 10.5-inch iPad 'non-Pro'
By Mike Peterson March 13, 2019
Updated: March 13, 2019 12:36 PM
Credit: iUpdate / YouTube
A pair of separate rumors on Wednesday gives us a better idea about Apple's 2019 iPad lineup — and they manage to be both surprising and fairly uninteresting at the same time.
Apple is widely expected to debut a new iPad mini 5 and an entry-level iPad this spring. One of today's reports corroborates past iPad mini rumors, while the other adds an unexpected detail about this year's iPad lineup.
Two Entry-Level iPads?
The first rumor about Apple's 2019 lineup comes from a Twitter user and past accurate Apple leaker named CoinX. The Twitter account claims that Apple is working on two entry-level iPad models this year.
One of those models will be the previously rumored 10.2-inch iPad, which is largely expected to replace the current 9.7-inch iPad. But CoinX adds that Apple is also working on an iPad with a 10.5-inch display that isn't an iPad Pro.
Unfortunately, the account did not provide any additional details beyond the fact that the 10.2-inch iPad and the alleged 10.5-inch iPad will not be released at the same time.
This is the first time that we've heard anything about a non-Pro 10.5-inch iPad. Presumably, such a device would fill the gap between the $300-range, entry-level iPad and the 10.5-inch iPad Pro, which starts at $649.
The 10.2-inch iPad, on the other hand, is rumored to debut this spring. It'll likely sport incremental spec upgrades and is expected to retain the design of its predecessor, including Touch ID.
It's unclear who CoinX is or who his or her sources may be. But it's worth noting that the Twitter account has leaked accurate information before anyone else — such as the 2018 iPhone naming scheme and the exact thickness of the 2018 iPad Pro.
CoinX's latest tweet did not reveal any details about an upcoming iPad mini refresh (though one of the account's previous posts noted that the product "is not dead.")
But another report this morning suggests that a so-called iPad mini 5 is indeed coming, and that it will likely sport minimal changes from the previous version.
Indian tech site 91Mobiles published a picture of an alleged iPad mini 5 case, which it said it obtained from a SlashLeaks contributor.
91 Mobiles
Most notably, the case seems to suggest that the iPad mini won't have any major outward-facing design changes beyond a new microphone placement. The case has a new, centered hole for the iPad mini 5's microphone.
The rest of the case's features strongly resemble current offerings that fit the iPad mini 4. The Lightning port and speaker cutouts, side and top button placements, and camera cutout all suggest that the iPad mini 5 will look basically the same as its predecessor.
Apple iPad Pro (11-inch, Wi-Fi, 256GB) – Space Gray (Latest Model)
If the case is indeed authentic and based on accurate design information, it would corroborate past reports that the iPad mini 5 won't amount to much more than a spec bump. Well-connected analyst Ming-Chi Kuo says that it will feature an upgraded processor, but not much else.
Read Next: New Code in iOS 12.2 Provides Hints About Apple's News Magazine Service
Win a Free 11" Apple iPad Pro (Newest Model)Apple TV 4KSmart Home KitMacBook Pro


text:
George Ogilvie
George Ogilvie AM and his identical twin brother Jim were born in Goulburn, NSW, and brought up in Canberra, the eldest of a hardworking baker's family. At 21 George escaped to England, and found a job with a provincial fit-up company. In 1955 he joined the Australian Elizabethan Theatre Trust's first theatre company, then Melbourne's Union Theatre Repertory Company, where he began directing. He then spent three years studying mime in Paris under Jacques Lecoq, worked as French mime and English comedian until joining John Sumner in 1965 to form the Melbourne Theatre Company. He was director of the South Australian Theatre Company 1972-76. Directing with the Australian Opera and the Australian Ballet followed before he was drawn into film by George Miller at the time of Mad Max. In 1988 he was awarded the Byron Kennedy Memorial Award for services to the film industry; and in 1966 a Keating Creative Fellowship to write his memoir, Simple Gifts.


We've designed a gorgeous nautical-inspired baby footie with delicate embroidery. The addition of an adorable collar adds a formal touch to the look while keeping your baby super comfortable and cozy. Our footies are made from the softest cotton, with built-in scratch cuffs to ensure the most delicate skin is protected.
Want to review Boat Embroidered Baby Footie?
I am due in May and have only bought his sleepsuits from JoJo. The material and the designs are far superior to any other high street store. This is my favourite sleepsuit so far, and it fits that his dad is a marine engineer.
Great as a gift and lovely smocked designs on the collar!
I loved this babygrow so much for my newborn son I bought it in a few sizes. It's a lovely shade of blue and I love the nautical detail and the collar. Lovely soft material and so comfortable for my wee man.
This is gorgeous! Looks a lot more expensive than it is and the quality is great!


For many people classic cars are luxurious. Certainly, the competitors in the automotive industry is on an all time excessive, and lots of sellers would purchase your scrap automobile to use its components as they still have value, whereas others would purchase it to show it into a value efficient outdated usable car that can be resold.In all probability the easiest and most direct route would be to contact an area junk vendor or vehicle salvage yard and tell them exactly what you might have and need to do with it. Granted you won't be provided as a lot as a bundle value as you might parting it out piece by piece, however there's much to be mentioned about letting another person do all of the labor required to disassemble the corpse of your former journey and either re-promoting it or using it themselves.Countless number of web sites has emerged into existence that buys scrap convertors, but not all of them offer a good value for it. To fish an genuine website that offers a worth matching the true value of the convertors, you want to spend a substantial time searching for it. However, earlier than that you just, have to ask your self how much is my scrap catalytic converter price and determine it.We have one more weblog that you could be discover to be fascinating, as we go into much more details about junking cars for dollars, and issues to bear we buy junk cars milwaukee wi in mind earlier than doing so. If you are you looking for more information in regards to buy my junk car milwaukee check out our own webpage. While the procedure could be very simple as stated earlier than on this submit, there are some issues that you are able to do to make sure you get hold of the most value.Lots of people just want to eliminate what they see as useless junk. If you want to be taught a simple way to get money in your junk automotive whilst you have it removed totally free in 24 hours, then go to money for junk cars now to get an on the spot quote and a few money in your pocket. But people are usually not aware of the fact that these scrap vehicles and be bought for cash, actually I ought to say for good money.There's a tendency for this to occur with performance autos and this is the reason, potential purchasers should be further careful. There aren't any regulations stating that a seller has to expose all of the information about the vehicles being bought, the truth that these vehicles have been cleared from a salvage title ought to be info enough.Smaller alien, predator and star wars statues are sold infrequently online by vacationers who've buy my junk car milwaukee introduced again a case of scrap metallic artwork souvenirs from their travels right here, but proudly owning any junk metal statue over one meter in height places you in the uncommon and unique record of collectors. Ethan Malone , the writer of this article, runs his personal junk haul company and is offering some perception into his business operation.The automotive battery supplies the power essential to run the car's electronics when the engine is shut off. If you have a junk car, truck, SUV, or van, all it's a must to do is to go looking a nearby junk car towing service and can call them to select up your scrap automobile. At Junkacar the most common destiny for salvage vehicles is to be junk car buyers mesa az really recycled.