text:
package tonegod.gui.core;

import com.jme3.app.Application;
import com.jme3.collision.CollisionResult;
import com.jme3.collision.CollisionResults;
import com.jme3.export.JmeExporter;
import com.jme3.export.JmeImporter;
import com.jme3.font.BitmapFont;
import com.jme3.input.KeyInput;
import com.jme3.input.event.KeyInputEvent;
import com.jme3.input.event.MouseButtonEvent;
import com.jme3.input.event.MouseMotionEvent;
import com.jme3.input.event.TouchEvent;
import com.jme3.material.Material;
import com.jme3.math.Ray;
import com.jme3.math.Vector2f;
import com.jme3.math.Vector3f;
import com.jme3.math.Vector4f;
import com.jme3.renderer.RenderManager;
import com.jme3.renderer.ViewPort;
import com.jme3.scene.Geometry;
import com.jme3.scene.Node;
import com.jme3.scene.Spatial;
import com.jme3.scene.control.Control;
import com.jme3.texture.Texture;
import tonegod.gui.controls.form.Form;
import tonegod.gui.controls.lists.ComboBox;
import tonegod.gui.controls.menuing.AutoHide;
import tonegod.gui.controls.menuing.Menu;
import tonegod.gui.controls.text.TextField;
import tonegod.gui.controls.util.ModalBackground;
import tonegod.gui.controls.util.ToolTip;
import tonegod.gui.core.Element.Borders;
import tonegod.gui.core.utils.ScaleUtil;
import tonegod.gui.core.utils.UIDUtil;
import tonegod.gui.effects.EffectManager;
import tonegod.gui.effects.cursor.CursorEffects;
import tonegod.gui.framework.core.AnimElement;
import tonegod.gui.framework.core.AnimLayer;
import tonegod.gui.framework.core.AnimManager;
import tonegod.gui.framework.core.QuadData;
import tonegod.gui.listeners.*;
import tonegod.gui.style.Style;
import tonegod.gui.style.StyleManager.CursorType;

import java.io.IOException;
import java.text.ParseException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.StringTokenizer;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author t0neg0d
 */
public class SubScreen implements ElementManager, Control {
	protected Spatial spatial;
	protected Node subScreenNode = new Node("t0neg0dGUI");
	private String UID;
	private Screen screen;
	private Application app;
	private SubScreenBridge bridge;
	private Geometry geom;
	private Map<String, Element> elements = new HashMap();
	private Ray elementZOrderRay = new Ray();
	private Vector3f guiRayOrigin = new Vector3f();
	private Vector2f tempElementOffset = new Vector2f();
	private Map<Integer,Vector2f> elementOffsets = new HashMap();
	private Map<Integer,Element> contactElements = new HashMap();
	private Map<Integer,Element> eventElements = new HashMap();
	private Map<Integer,Borders> eventElementResizeDirections = new HashMap();
	private Element eventElement = null;
	private Element targetElement = null;
	private Element keyboardElement = null;
	private Element tabFocusElement = null;
	private Form focusForm = null;
	private Vector2f eventElementOriginXY = new Vector2f();
	private float eventElementOffsetX = 0;
	private float eventElementOffsetY = 0;
	private float targetElementOffsetX = 0;
	private float targetElementOffsetY = 0;
	private Borders eventElementResizeDirection = null;
	private Element mouseFocusElement = null;
	private Element contactElement = null;
	private Element previousMouseFocusElement = null;
	private boolean focusElementIsMovable = false;
	private boolean mousePressed = false;
	private boolean mouseLeftPressed = false;
	private boolean mouseRightPressed = false;
	private boolean mouseWheelPressed = false;
	private float zOrderCurrent = .5f;
	private float zOrderStepMajor = .01f;
	private float zOrderStepMinor = 0.0001f;
	private String clipboardText = "";
	private Material mat;

	private Vector2f mouseXY = new Vector2f(0,0);
	private boolean SHIFT = false;
	private boolean CTRL = false;
	private boolean ALT = false;

	private ElementQuadGrid mesh;

	// AnimLayer & 2D framework support
	private Map<String, AnimLayer> layers = new LinkedHashMap();
	private float layerZOrderCurrent = .4999f;
	private AnimElement eventAnimElement = null;
	private QuadData eventQuad = null;
	private AnimElement targetAnimElement = null;
	private QuadData targetQuad = null;
	private AnimElement mouseFocusAnimElement = null;
	private AnimElement previousMouseFocusAnimElement = null;
	private AnimElement mouseFocusQuad = null;
	private float eventAnimOffsetX = 0;
	private float eventAnimOffsetY = 0;
	private float eventQuadOffsetX = 0;
	private float eventQuadOffsetY = 0;

	/**
	 * Creates an instance of the SubScreen control.
	 *
	 * @param screen The Application Screen class
	 */
	public SubScreen(Screen screen, Geometry geom) {
		this(screen, UIDUtil.getUID(), geom);
	}

	/**
	 * Creates an instance of the SubScreen control.
	 *
	 * @param screen The Application Screen class
	 * @param UID A Unique String ID for the SubScreen
	 */
	public SubScreen(Screen screen, String UID, Geometry geom) {
		this.UID = UID;
		this.screen = screen;
		this.app = screen.getApplication();
		this.geom = geom;
		this.elementZOrderRay.setDirection(Vector3f.UNIT_Z);
	}

	public String getUID() {
		return this.UID;
	}

	public void setSubScreenBridge(int width, int height, Node root) {
		root.addControl(this);
		this.bridge = new SubScreenBridge(app.getRenderManager(), width, height, root);
		screen.getGUINode().addControl(this.bridge);
		mat = new Material(screen.getApplication().getAssetManager(), "Common/MatDefs/Misc/Unshaded.j3md");
		mat.setTexture("ColorMap", this.bridge.getTexture());
		geom.setMaterial(mat);
	}

	public Material getMaterial() {
		return mat;
	}

	public Texture getTexture() {
		return getSubScreenBridge().getTexture();
	}

	public Geometry getGeometry() {
		return this.geom;
	}

	public SubScreenBridge getSubScreenBridge() {
		return this.bridge;
	}

	public ElementQuadGrid getDefaultMesh() {
		return mesh;
	}

	/**
	 * Returns the JME application associated with the Screen
	 * @return Application app
	 */
	@Override
	public Application getApplication() {
		return this.app;
	}

	/**
	 * Return the width of the current Viewport
	 *
	 * @return float width
	 */
	@Override
	public float getWidth() {
		return bridge.getCamera().getWidth();
	}

	/**
	 * Returns the height of the current Viewport
	 *
	 * @return  float height
	 */
	@Override
	public float getHeight() {
		return bridge.getCamera().getHeight();
	}

	@Override
	public void update(float tpf) {  }

	@Override
	public void render(RenderManager rm, ViewPort vp) {  }

	/**
	 *  Adds an Element to the Screen and scene graph
	 * @param element The Element to add
	 */
	@Override
	public void addElement(Element element) {
		if (element instanceof AutoHide)
			element.hide();

		if (getElementById(element.getUID()) != null) {
		//	try {
		//		throw new ConflictingIDException();
		//	} catch (ConflictingIDException ex) {
		//		Logger.getLogger(Element.class.getName()).log(Level.SEVERE, "The child element '" + element.getUID() + "' (" + element.getClass() + ") conflicts with a previously added child element in parent Screen.", ex);
		//		System.exit(0);
		//	}
		} else {
			elements.put(element.getUID(), element);
			if (!element.getInitialized()) {
				element.setY(getHeight()-element.getHeight()-element.getY());
				element.orgPosition = element.getPosition().clone();
				element.orgPosition.setY(element.getY());
				element.setInitialized();
			}
			subScreenNode.attachChild(element);

			// Set initla z-order
			getNextZOrder(true);
		//	element.initZOrder(zOrderCurrent);
			element.resize(element.getX()+element.getWidth(), element.getY()+element.getHeight(), Borders.SE);
		}
	}

	/**
	 *  Adds an Element to the Screen and scene graph
	 * @param element The Element to add
	 */
	@Override
	public void addElement(Element element, boolean hide) {
		if (element instanceof AutoHide)
			element.hide();

		if (getElementById(element.getUID()) != null) {
		//	try {
		//		throw new ConflictingIDException();
		//	} catch (ConflictingIDException ex) {
		//		Logger.getLogger(Element.class.getName()).log(Level.SEVERE, "The child element '" + element.getUID() + "' (" + element.getClass() + ") conflicts with a previously added child element in parent Screen.", ex);
		//		System.exit(0);
		//	}
		} else {
			elements.put(element.getUID(), element);
			if (!element.getInitialized()) {
				element.setY(getHeight()-element.getHeight()-element.getY());
				element.orgPosition = element.getPosition().clone();
				element.orgPosition.setY(element.getY());
				element.setInitialized();
			}
			subScreenNode.attachChild(element);

			// Set initla z-order
			getNextZOrder(true);
		//	element.initZOrder(zOrderCurrent);
			element.resize(element.getX()+element.getWidth(), element.getY()+element.getHeight(), Borders.SE);

			if (hide)
				element.hide();
		}
	}

	/**
	 * Removes an Element from the Screen and scene graph
	 * @param element The Element to remove
	 */
	@Override
	public void removeElement(Element element) {
		elements.remove(element.getUID());
		float shiftZ = element.getLocalTranslation().getZ();
		for (Element el : elements.values()) {
			if (!(el instanceof ToolTip)) {
				if (el.getLocalTranslation().getZ() > shiftZ) {
					el.move(0,0,-zOrderStepMajor);
				}
			}
		}
		zOrderCurrent -= zOrderStepMajor;
		element.removeFromParent();
		element.cleanup();
	}

	/**
	 * Returns the Element with the associated ID.  If not found, returns null
	 * @param UID The String ID of Element to find
	 * @return Element element
	 */
	@Override
	public Element getElementById(String UID) {
		Element ret = null;
		if (elements.containsKey(UID)) {
			ret = elements.get(UID);
		} else {
			for (Element el : elements.values()) {
				ret = el.getChildElementById(UID);
				if (ret != null) {
					break;
				}
			}
		}
		return ret;
	}

	/**
	 * Returns the guiNode used by the Screen
	 * @return Node
	 */
	@Override
	public Node getGUINode() {
		return subScreenNode;
	}

	@Override
	public Texture getAtlasTexture() { return screen.getAtlasTexture(); }

	@Override
	public Texture createNewTexture(String texturePath) {
		Texture newTex = app.getAssetManager().loadTexture(texturePath);
		newTex.setMinFilter(Texture.MinFilter.BilinearNoMipMaps);
		newTex.setMagFilter(Texture.MagFilter.Bilinear);
		newTex.setWrap(Texture.WrapMode.Repeat);
		return newTex;
	}

	@Override
	public float[] parseAtlasCoords(String texturePath) {
		float[] coords = new float[4];

		if (texturePath != null) {
			StringTokenizer st = new StringTokenizer(texturePath, "|");
			if (st.countTokens() == 4) {
				try {
					String token = st.nextToken();
					coords[0] = Float.parseFloat(token.substring(token.indexOf('=')+1));
					token = st.nextToken();
					coords[1] = Float.parseFloat(token.substring(token.indexOf('=')+1));
					token = st.nextToken();
					coords[2] = Float.parseFloat(token.substring(token.indexOf('=')+1));
					token = st.nextToken();
					coords[3] = Float.parseFloat(token.substring(token.indexOf('=')+1));
				} catch (Exception ex) { throwParserException(); }
			} else throwParserException();
		}
		return coords;
	}

	private void throwParserException() {
		try {
			throw new ParseException("The provided texture information does not conform to the expected standard of ?x=(int)&y=(int)&w=(int)&h=(int)", 0);
		} catch (ParseException ex) {
			Logger.getLogger(Screen.class.getName()).log(Level.SEVERE, "The provided texture information does not conform to the expected standard of ?x=(int)&y=(int)&w=(int)&h=(int)", ex);
		}
	}

	// Z-ORDER
	/**
	 * Returns the next available z-order
	 * @param stepMajor Return the z-order incremented by a major step if true, a minor step if false
	 * @return float zOrder
	 */
	public float getNextZOrder(boolean stepMajor) {
		if (stepMajor)
			zOrderCurrent += zOrderStepMajor;
		else
			zOrderCurrent += zOrderStepMinor;
		return zOrderCurrent;
	}

	/**
	 * Brings the element specified to the front of the zOrder list shifting other below to keep all
	 * Elements within the current z-order range.
	 *
	 * @param topMost The Element to bring to the front
	 */
	@Override
	public void updateZOrder(Element topMost) {
	//	zOrderCurrent = zOrderInit;
		String topMostUID = topMost.getUID();
		float shiftZ = topMost.getLocalTranslation().getZ();

		for (Element el : elements.values()) {
			if (topMost.getIsGlobalModal()) {  }
			else if (topMost.getIsModal()) {  }
			else {
				if (!el.getIsGlobalModal() && !el.getIsModal()) {
					if (el.getLocalTranslation().getZ() > shiftZ) {
						el.move(0,0,-zOrderStepMajor);
					}
				}
			}
		}
		topMost.setLocalTranslation(topMost.getLocalTranslation().setZ(Float.valueOf(zOrderCurrent)));
	}

	/**
	 * Returns the zOrder major step value
	 * @return float
	 */
	@Override
	public float getZOrderStepMajor() {
		return this.zOrderStepMajor;
	}

	/**
	 * Returns the zOrder minor step value
	 * @return float
	 */
	@Override
	public float getZOrderStepMinor() {
		return this.zOrderStepMinor;
	}

	/**
	 * Stored the current mouse position as a Vector2f
	 * @param x The mouse's current X coord
	 * @param y The mouse's current Y coord
	 */
	private void setMouseXY(float x, float y) {
		mouseXY.set(x, y);
	}

	/**
	 * Returns a Vector2f containing the last stored mouse X/Y coords
	 * @return Vector2f mouseXY
	 */
	@Override
	public Vector2f getMouseXY() {
		return this.mouseXY;
	}

	@Override
	public Vector2f getTouchXY() {
		return this.screen.getTouchXY();
	}

	// Raw Input handlers
//	public void beginInput() {  }
//	public void endInput() {  }
//	public void onJoyAxisEvent(JoyAxisEvent evt) {  }
//	public void onJoyButtonEvent(JoyButtonEvent evt) {  }
	public void onMouseMotionEvent(MouseMotionEvent oldEvt, MouseMotionEvent evt) {
		setMouseXY(evt.getX(),evt.getY());
		if (!mousePressed) {
			mouseFocusElement = getEventElement(evt.getX(), evt.getY());
			if (mouseFocusElement != previousMouseFocusElement) {
				if (previousMouseFocusElement instanceof MouseFocusListener) {
					((MouseFocusListener)previousMouseFocusElement).onLoseFocus(evt);
				}
				if (mouseFocusElement instanceof MouseFocusListener) {
					((MouseFocusListener)mouseFocusElement).onGetFocus(evt);
				}
				previousMouseFocusElement = mouseFocusElement;
			}
			if (mouseFocusElement != null) {
				focusElementIsMovable = mouseFocusElement.getIsMovable();

				if (mouseFocusElement instanceof MouseWheelListener) {
					if (evt.getDeltaWheel() > 0) {
						((MouseWheelListener)mouseFocusElement).onMouseWheelDown(evt);
					} else if (evt.getDeltaWheel() < 0) {
						((MouseWheelListener)mouseFocusElement).onMouseWheelUp(evt);
					}
					oldEvt.setConsumed();
				}
			}
			if (mouseFocusElement instanceof MouseMovementListener) {
				((MouseMovementListener)mouseFocusElement).onMouseMove(evt);
			}
		} else {
			if (eventElement != null) {
				if (mouseLeftPressed) {
					focusElementIsMovable = contactElement.getIsMovable();
					if (eventElementResizeDirection != null) {
						eventElement.resize(evt.getX(), evt.getY(), eventElementResizeDirection);
					} else if (focusElementIsMovable) {
						eventElement.moveTo(evt.getX()-eventElementOffsetX, evt.getY()-eventElementOffsetY);
					}
				}

				if (eventElement instanceof MouseMovementListener) {
					((MouseMovementListener)eventElement).onMouseMove(evt);
				}
			}
		}
	}
	public void onMouseButtonEvent(MouseButtonEvent oldEvt, MouseButtonEvent evt) {
		if (evt.isPressed()) {
			mousePressed = true;
			eventElement = getEventElement(evt.getX(), evt.getY());
			if (eventElement != null) {
				if (eventElement.getResetKeyboardFocus())
					resetTabFocusElement();
			} else
				resetTabFocusElement();
			switch (evt.getButtonIndex()) {
				case 0:
					mouseLeftPressed = true;
				//	eventElement = getEventElement(evt.getX(), evt.getY());
					if (eventElement != null) {
						if (eventElement.getEffectZOrder())
							updateZOrder(eventElement.getAbsoluteParent());
						if (eventElement.getResetKeyboardFocus())
							this.setTabFocusElement(eventElement);
						if (eventElement.getIsDragDropDragElement())
							targetElement = null;
						if (eventElement.getIsResizable()) {
							float offsetX = evt.getX();
							float offsetY = evt.getY();
							Element el = eventElement;
							if (offsetX > el.getAbsoluteX() && offsetX < el.getAbsoluteX()+el.getResizeBorderWestSize()) {
								if (offsetY > el.getAbsoluteY() && offsetY < el.getAbsoluteY()+el.getResizeBorderNorthSize()) {
									eventElementResizeDirection = Borders.NW;
								} else if (offsetY > (el.getAbsoluteHeight()-el.getResizeBorderSouthSize()) && offsetY < el.getAbsoluteHeight()) {
									eventElementResizeDirection = Borders.SW;
								} else {
									eventElementResizeDirection = Borders.W;
								}
							} else if (offsetX > (el.getAbsoluteWidth()-el.getResizeBorderEastSize()) && offsetX < el.getAbsoluteWidth()) {
								if (offsetY > el.getAbsoluteY() && offsetY < el.getAbsoluteY()+el.getResizeBorderNorthSize()) {
									eventElementResizeDirection = Borders.NE;
								} else if (offsetY > (el.getAbsoluteHeight()-el.getResizeBorderSouthSize()) && offsetY < el.getAbsoluteHeight()) {
									eventElementResizeDirection = Borders.SE;
								} else {
									eventElementResizeDirection = Borders.E;
								}
							} else {
								if (offsetY > el.getAbsoluteY() && offsetY < el.getAbsoluteY()+el.getResizeBorderNorthSize()) {
									eventElementResizeDirection = Borders.N;
								} else if (offsetY > (el.getAbsoluteHeight()-el.getResizeBorderSouthSize()) && offsetY < el.getAbsoluteHeight()) {
									eventElementResizeDirection = Borders.S;
								}
							}
							if (keyboardElement != null && eventElement.getResetKeyboardFocus()) {
								if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
							}
							if (eventElement.getResetKeyboardFocus())
								keyboardElement = null;
						} else if (eventElement.getIsMovable() && eventElementResizeDirection == null) {
							eventElementResizeDirection = null;
							if (keyboardElement != null && eventElement.getResetKeyboardFocus()) {
								if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
							}
							if (eventElement.getResetKeyboardFocus())
								keyboardElement = null;
							eventElementOriginXY.set(eventElement.getPosition());
						} else if (eventElement instanceof KeyboardListener) {
							if (keyboardElement != null && eventElement.getResetKeyboardFocus()) {
								if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
							}
							if (eventElement.getResetKeyboardFocus())
								keyboardElement = eventElement;
							if (keyboardElement instanceof TextField) {
								((TextField)keyboardElement).setTabFocus();
								if (Screen.isAndroid()) screen.showVirtualKeyboard();
							//	((TextField)keyboardElement).setCaretPositionByX(evt.getX());
							}
							// TODO: Update target element's font shader
						} else {
							eventElementResizeDirection = null;
							if (keyboardElement != null && eventElement.getResetKeyboardFocus()) {
								if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
							}
							if (eventElement.getResetKeyboardFocus())
								keyboardElement = null;
						}
						if (eventElement instanceof MouseButtonListener) {
							((MouseButtonListener)eventElement).onMouseLeftPressed(evt);
						}
						if (keyboardElement == null)
							if (Screen.isAndroid()) screen.hideVirtualKeyboard();
						evt.setConsumed();
						oldEvt.setConsumed();
					} else {
						if (keyboardElement == null)
							if (Screen.isAndroid()) screen.hideVirtualKeyboard();
					}
					break;
				case 1:
					mouseRightPressed = true;
				//	eventElement = getEventElement(evt.getX(), evt.getY());
					if (eventElement != null) {
						if (eventElement.getEffectZOrder())
							updateZOrder(eventElement.getAbsoluteParent());
						if (eventElement instanceof MouseButtonListener) {
							((MouseButtonListener)eventElement).onMouseRightPressed(evt);
						}
						evt.setConsumed();
						oldEvt.setConsumed();
					}
					break;
				case 2:
					mouseWheelPressed = true;
				//	eventElement = getEventElement(evt.getX(), evt.getY());
					if (eventElement != null) {
						if (eventElement instanceof MouseWheelListener) {
							((MouseWheelListener)eventElement).onMouseWheelPressed(evt);
						}
						evt.setConsumed();
						oldEvt.setConsumed();
					}
					break;
			}
		} else if (evt.isReleased()) {
			handleMenuState();
			switch (evt.getButtonIndex()) {
				case 0:
					mouseLeftPressed = false;
					eventElementResizeDirection = null;
				//	if (eventElement.getIsDragDropDragElement())
					targetElement = getTargetElement(evt.getX(), evt.getY());
					if (eventElement instanceof MouseButtonListener) {
						((MouseButtonListener)eventElement).onMouseLeftReleased(evt);
					}
					if (eventElement != null) {
						evt.setConsumed();
						oldEvt.setConsumed();
					}
					break;
				case 1:
					mouseRightPressed = false;
					if (eventElement instanceof MouseButtonListener) {
						((MouseButtonListener)eventElement).onMouseRightReleased(evt);
					}
					if (eventElement != null) {
						evt.setConsumed();
						oldEvt.setConsumed();
					}
					break;
				case 2:
					mouseWheelPressed = false;
					if (eventElement instanceof MouseWheelListener) {
						((MouseWheelListener)eventElement).onMouseWheelReleased(evt);
					}
					if (eventElement != null) {
						evt.setConsumed();
						oldEvt.setConsumed();
					}
					break;
			}
			mousePressed = false;
			eventElement = null;
		}
	}
	@Override
	public void onKeyEvent(KeyInputEvent evt) {
		if (evt.getKeyCode() == KeyInput.KEY_LSHIFT || evt.getKeyCode() == KeyInput.KEY_RSHIFT) {
			if (evt.isPressed()) SHIFT = true;
			else SHIFT = false;
		}
		if (evt.getKeyCode() == KeyInput.KEY_LCONTROL || evt.getKeyCode() == KeyInput.KEY_RCONTROL) {
			if (evt.isPressed()) CTRL = true;
			else CTRL = false;
		}
		if (evt.getKeyCode() == KeyInput.KEY_LMENU || evt.getKeyCode() == KeyInput.KEY_RMENU) {
			if (evt.isPressed()) ALT = true;
			else ALT = false;
		}
		if (evt.getKeyCode() == KeyInput.KEY_TAB && evt.isPressed()) {
			if (focusForm != null) {
				if (!SHIFT)	focusForm.tabNext();
				else		focusForm.tabPrev();
			}
		} else {
			if (keyboardElement != null) {
				if (keyboardElement.getParent() != null && keyboardElement.getIsVisible()) {
					if (evt.isPressed()) {
						((KeyboardListener)keyboardElement).onKeyPress(evt);
					} else if (evt.isReleased()) {
						((KeyboardListener)keyboardElement).onKeyRelease(evt);
					}
				}
			}
		}
	}
	public void onTouchEvent(TouchEvent evt) {
	//	if (screen.useMultiTouch) {
			switch (evt.getType()) {
				case DOWN:
					androidTouchDownEvent(evt);
					break;
				case MOVE:
					androidTouchMoveEvent(evt);
					break;
				case UP:
					androidTouchUpEvent(evt);
					break;
			}
	//	}
	}

	private void androidTouchDownEvent(TouchEvent evt) {
		mousePressed = true;
		Element contact = getContactElement(evt.getX(), evt.getY());
		Vector2f offset = tempElementOffset.clone();
		Element target = getEventElement(evt.getX(), evt.getY());

		Borders dir = null;
		if (target != null) {
			if (target.getResetKeyboardFocus())
				resetTabFocusElement();

			if (target.getEffectZOrder())
				updateZOrder(target.getAbsoluteParent());
			if (target.getResetKeyboardFocus())
				this.setTabFocusElement(target);
			if (target.getIsDragDropDragElement())
				targetElement = null;
			if (target.getIsResizable()) {
				float offsetX = evt.getX();
				float offsetY = evt.getY();
				Element el = target;

				if (offsetX > el.getAbsoluteX() && offsetX < el.getAbsoluteX()+el.getResizeBorderWestSize()) {
					if (offsetY > el.getAbsoluteY() && offsetY < el.getAbsoluteY()+el.getResizeBorderNorthSize()) {
						dir = Borders.NW;
					} else if (offsetY > (el.getAbsoluteHeight()-el.getResizeBorderSouthSize()) && offsetY < el.getAbsoluteHeight()) {
						dir = Borders.SW;
					} else {
						dir = Borders.W;
					}
				} else if (offsetX > (el.getAbsoluteWidth()-el.getResizeBorderEastSize()) && offsetX < el.getAbsoluteWidth()) {
					if (offsetY > el.getAbsoluteY() && offsetY < el.getAbsoluteY()+el.getResizeBorderNorthSize()) {
						dir = Borders.NE;
					} else if (offsetY > (el.getAbsoluteHeight()-el.getResizeBorderSouthSize()) && offsetY < el.getAbsoluteHeight()) {
						dir = Borders.SE;
					} else {
						dir = Borders.E;
					}
				} else {
					if (offsetY > el.getAbsoluteY() && offsetY < el.getAbsoluteY()+el.getResizeBorderNorthSize()) {
						dir = Borders.N;
					} else if (offsetY > (el.getAbsoluteHeight()-el.getResizeBorderSouthSize()) && offsetY < el.getAbsoluteHeight()) {
						dir = Borders.S;
					}
				}
				if (keyboardElement != null && target.getResetKeyboardFocus()) {
					if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
				}
				if (target.getResetKeyboardFocus())
					keyboardElement = null;
			} else if (target.getIsMovable() && dir == null) {
				dir = null;
				if (keyboardElement != null && target.getResetKeyboardFocus()) {
					if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
				}
				if (target.getResetKeyboardFocus())
					keyboardElement = null;
				eventElementOriginXY.set(target.getPosition());
			} else if (target instanceof KeyboardListener) {
				if (keyboardElement != null && target.getResetKeyboardFocus()) {
					if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
				}
				if (target.getResetKeyboardFocus())
					keyboardElement = target;
				if (keyboardElement instanceof TextField) {
					((TextField)keyboardElement).setTabFocus();
					screen.showVirtualKeyboard();
				}
			} else {
				dir = null;
				if (keyboardElement != null && target.getResetKeyboardFocus()) {
					if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
				}
				if (target.getResetKeyboardFocus())
					keyboardElement = null;
			}
			if (target instanceof MouseButtonListener) {
				MouseButtonEvent mbEvt = new MouseButtonEvent(0,true,(int)evt.getX(),(int)evt.getY());
				((MouseButtonListener)target).onMouseLeftPressed(mbEvt);
			}
			if (target instanceof TouchListener) {
				((TouchListener)target).onTouchDown(evt);
			}
			if (keyboardElement == null)
				screen.hideVirtualKeyboard();
			evt.setConsumed();
			contactElements.put(evt.getPointerId(),contact);
			elementOffsets.put(evt.getPointerId(),offset);
			eventElements.put(evt.getPointerId(),target);
			eventElementResizeDirections.put(evt.getPointerId(), dir);
		} else {
			if (keyboardElement == null)
				screen.hideVirtualKeyboard();
			resetTabFocusElement();
		}
	}
	private void androidTouchMoveEvent(TouchEvent evt) {
		for (Integer key : eventElements.keySet()) {
			if (key == evt.getPointerId()) {
				Element target = eventElements.get(key);
				if (target != null) {
					Element contact = contactElements.get(key);
					Vector2f offset = elementOffsets.get(key);
					Borders dir = eventElementResizeDirections.get(key);

					boolean movable = contact.getIsMovable();
					if (dir != null) {
						target.resize(evt.getX(), evt.getY(), dir);
					} else if (movable) {
						target.moveTo(evt.getX()-offset.x, evt.getY()-offset.y);
					}

					if (target instanceof MouseMovementListener) {
						MouseMotionEvent mbEvt = new MouseMotionEvent((int)evt.getX(),(int)evt.getY(),(int)evt.getDeltaX(),(int)evt.getDeltaY(),0,0);
						((MouseMovementListener)target).onMouseMove(mbEvt);
					}
					if (target instanceof TouchListener) {
						((TouchListener)target).onTouchMove(evt);
					}
				}
			}
		}
	}
	private void androidTouchUpEvent(TouchEvent evt) {
		Element target = eventElements.get(evt.getPointerId());
		if (target != null) {
			if (target instanceof MouseButtonListener) {
				MouseButtonEvent mbEvt = new MouseButtonEvent(0, true, (int)evt.getX(), (int)evt.getY());
				((MouseButtonListener)target).onMouseLeftReleased(mbEvt);
			}
			if (target instanceof TouchListener) {
				((TouchListener)target).onTouchUp(evt);
			}
			if (!(target.getAbsoluteParent() instanceof AutoHide)) {
				handleAndroidMenuState(target);
			}
			if (target != null)
				evt.setConsumed();
			eventElements.remove(evt.getPointerId());
			contactElements.remove(evt.getPointerId());
			elementOffsets.remove(evt.getPointerId());
			eventElementResizeDirections.remove(evt.getPointerId());
		} else
			handleMenuState();
		mousePressed = false;
	}

	/**
	 * Determines and returns the current mouse focus Element
	 * @param x The current mouse X coord
	 * @param y The current mouse Y coord
	 * @return Element eventElement
	 */
	@Override
	public CollisionResult getLastCollision() { return screen.getLastCollision(); }

	private Element getEventElement(float x, float y) {
		guiRayOrigin.set(x, y, 0f);

		elementZOrderRay.setOrigin(guiRayOrigin);
		CollisionResults results = new CollisionResults();

		subScreenNode.collideWith(elementZOrderRay, results);

		float z = 0;
		Element testEl = null, el = null;
		for (CollisionResult result : results) {
			boolean discard = false;
			if (result.getGeometry().getParent() instanceof Element) {
				testEl = ((Element)(result.getGeometry().getParent()));
				if (testEl.getIgnoreMouse()) {
					discard = true;
				} else if (testEl.getIsClipped()) {
					if (result.getContactPoint().getX() < testEl.getClippingBounds().getX() ||
						result.getContactPoint().getX() > testEl.getClippingBounds().getZ() ||
						result.getContactPoint().getY() < testEl.getClippingBounds().getY() ||
						result.getContactPoint().getY() > testEl.getClippingBounds().getW()) {
						discard = true;
					}
				}
			}
			if (!discard) {
				if (result.getGeometry().getParent() instanceof Element) {
					el = testEl;
				}
			}
		}
		if (el != null) {
			contactElement = el;
			Element parent = null;
			if (el.getEffectParent() && mousePressed) {
				parent = el.getElementParent();
			} else if (el.getEffectAbsoluteParent() && mousePressed) {
				parent = el.getAbsoluteParent();
			}
			if (parent != null) {
				el = parent;
			}
			eventElementOffsetX = x-el.getX();
			eventElementOffsetY = y-el.getY();
			return el;
		} else {
			return null;
		}
	}

	private Element getContactElement(float x, float y) {
		guiRayOrigin.set(x, y, 0f);

		elementZOrderRay.setOrigin(guiRayOrigin);
		CollisionResults results = new CollisionResults();

		subScreenNode.collideWith(elementZOrderRay, results);

		float z = 0;
		Element testEl = null, el = null;
		for (CollisionResult result : results) {
			boolean discard = false;
			if (result.getGeometry().getParent() instanceof Element) {
				testEl = ((Element)(result.getGeometry().getParent()));
				if (testEl.getIgnoreMouse()) {
					discard = true;
				} else if (testEl.getIsClipped()) {
					if (result.getContactPoint().getX() < testEl.getClippingBounds().getX() ||
						result.getContactPoint().getX() > testEl.getClippingBounds().getZ() ||
						result.getContactPoint().getY() < testEl.getClippingBounds().getY() ||
						result.getContactPoint().getY() > testEl.getClippingBounds().getW()) {
						discard = true;
					}
				}
			}
			if (!discard) {
				if (result.getGeometry().getParent() instanceof Element) {
					el = testEl;
				}
			}
		}
		if (el != null) {
			Element parent = null;
			if (el.getEffectParent() && mousePressed) {
				parent = el.getElementParent();
			} else if (el.getEffectAbsoluteParent() && mousePressed) {
				parent = el.getAbsoluteParent();
			}
			if (parent != null)
				tempElementOffset.set(x-parent.getX(),y-parent.getY());
			else
				tempElementOffset.set(x-el.getX(),y-el.getY());
			return el;
		} else {
			return null;
		}
	}

	public void forceEventElement(Element element) {
		float x = element.getAbsoluteX()+1;
		float y = element.getAbsoluteY()+1;
		eventElement = getEventElement(x,y);
		if (eventElement != null) {
			if (eventElement.getEffectZOrder())
				updateZOrder(eventElement.getAbsoluteParent());
			this.setTabFocusElement(eventElement);
			if (eventElement.getIsDragDropDragElement())
				targetElement = null;
			if (eventElement.getIsResizable()) {
				float offsetX = x;
				float offsetY = y;
				Element el = eventElement;

				if (keyboardElement != null && eventElement.getResetKeyboardFocus()) {
					if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
				}
				if (eventElement.getResetKeyboardFocus())
					keyboardElement = null;
			} else if (eventElement.getIsMovable() && eventElementResizeDirection == null) {
				eventElementResizeDirection = null;
				if (keyboardElement != null && eventElement.getResetKeyboardFocus()) {
					if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
				}
				if (eventElement.getResetKeyboardFocus())
					keyboardElement = null;
				eventElementOriginXY.set(eventElement.getPosition());
			} else if (eventElement instanceof KeyboardListener) {
				if (keyboardElement != null && eventElement.getResetKeyboardFocus()) {
					if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
				}
				if (eventElement.getResetKeyboardFocus())
					keyboardElement = eventElement;
				if (keyboardElement instanceof TextField) {
					((TextField)keyboardElement).setTabFocus();
				}
				// TODO: Update target element's font shader
			} else {
				eventElementResizeDirection = null;
				if (keyboardElement != null && eventElement.getResetKeyboardFocus()) {
					if (keyboardElement instanceof TextField) ((TextField)keyboardElement).resetTabFocus();
				}
				if (eventElement.getResetKeyboardFocus())
					keyboardElement = null;
			}
		}
	}

	/**
	 * Determines and returns the current mouse focus Element
	 * @param x The current mouse X coord
	 * @param y The current mouse Y coord
	 * @return Element eventElement
	 */
	private Element getTargetElement(float x, float y) {
		guiRayOrigin.set(x, y, 0f);

		elementZOrderRay.setOrigin(guiRayOrigin);
		CollisionResults results = new CollisionResults();

		subScreenNode.collideWith(elementZOrderRay, results);

		float z = 0;
		Element testEl = null, el = null;
		for (CollisionResult result : results) {
			boolean discard = false;
			if (result.getGeometry().getParent() instanceof Element) {
				testEl = ((Element)(result.getGeometry().getParent()));
				if (testEl.getIgnoreMouse() || !testEl.getIsDragDropDropElement()) {
					discard = true;
				} else if (testEl.getIsClipped()) {
					if (result.getContactPoint().getX() < testEl.getClippingBounds().getX() ||
						result.getContactPoint().getX() > testEl.getClippingBounds().getZ() ||
						result.getContactPoint().getY() < testEl.getClippingBounds().getY() ||
						result.getContactPoint().getY() > testEl.getClippingBounds().getW()) {
						discard = true;
					}
				}
			}
		//	System.out.println(testEl.getUID() + ": " + discard + ": " + testEl.getLocalTranslation().getZ() + ": " + z + ": " + result.getContactPoint().getZ());
			if (!discard) {

				if (result.getContactPoint().getZ() > z) {
					z = result.getContactPoint().getZ();
					if (result.getGeometry().getParent() instanceof Element) {
						el = testEl;//((Element)(result.getGeometry().getParent()));
					}
				}
			}
		}
		if (el != null) {
			Element parent = null;
			if (el.getEffectParent() && mousePressed) {
				parent = el.getElementParent();
			} else if (el.getEffectAbsoluteParent() && mousePressed) {
				parent = el.getAbsoluteParent();
			}
			if (parent != null) {
				el = parent;
			}
			targetElementOffsetX = x-el.getX();
			targetElementOffsetY = y-el.getY();
			return el;
		} else {
			return null;
		}
	}

	/**
	 * Returns the current Drag enabled Element
	 * @return Element
	 */
	public Element getDragElement() {
		return this.eventElement;
	}

	/**
	 * Returns the current Drop enabled Element
	 * @return Element
	 */
	@Override
	public Element getDropElement() {
		return this.targetElement;
	}

	public void setGlobalUIScale(float widthPercent, float heightPercent) {
		for (Element el : elements.values()) {
			el.setPosition(el.getPosition().x*widthPercent, el.getPosition().y*heightPercent);
			el.setDimensions(el.getDimensions().x*widthPercent, el.getDimensions().y*heightPercent);
			el.setFontSize(el.getFontSize()*heightPercent);
			el.setGlobalUIScale(widthPercent, heightPercent);
		}
	}

	@Override
	public Control cloneForSpatial(Spatial spatial) {
		SubScreen subscreen = new SubScreen(this.screen, this.geom);
		subscreen.elements.putAll(this.elements);
		return subscreen;
	}

	@Override
	public void setSpatial(Spatial spatial) {
		this.spatial = spatial;
		if (spatial != null) {
			((Node)spatial).attachChild(subScreenNode);
		}
	}

	@Override
	public void write(JmeExporter ex) throws IOException {  }

	@Override
	public void read(JmeImporter im) throws IOException {  }

	// Menu handling
	private void handleMenuState() {
		if (eventElement == null) {
			for (Element el : elements.values()) {
				if (el instanceof Menu) {
					el.hide();
				}
			}
		} else {
			if (!(eventElement.getAbsoluteParent() instanceof Menu) && !(eventElement.getParent() instanceof ComboBox)) {
				for (Element el : elements.values()) {
					if (el instanceof Menu) {
						el.hide();
					}
				}
			} else if (eventElement.getAbsoluteParent() instanceof Menu) {
				for (Element el : elements.values()) {
					if (el instanceof Menu && el != eventElement.getAbsoluteParent()) {
						el.hide();
					}
				}
			} else if (eventElement.getParent() instanceof ComboBox) {
				for (Element el : elements.values()) {
					if (el instanceof Menu && el != ((ComboBox)eventElement.getParent()).getMenu()) {
						el.hide();
					}
				}
			}
		}
	}

	@Override
	public void handleAndroidMenuState(Element target) {
		if (target == null) {
			for (Element el : elements.values()) {
				if (el instanceof Menu) {
					el.hide();
				}
			}
		} else {
			if (!(target.getAbsoluteParent() instanceof Menu) && !(target.getParent() instanceof ComboBox)) {
				for (Element el : elements.values()) {
					if (el instanceof Menu) {
						el.hide();
					}
				}
			} else if (target.getAbsoluteParent() instanceof Menu) {
				for (Element el : elements.values()) {
					if (el instanceof Menu && el != target.getAbsoluteParent()) {
						el.hide();
					}
				}
			} else if (target.getParent() instanceof ComboBox) {
				for (Element el : elements.values()) {
					if (el instanceof Menu && el != ((ComboBox)target.getParent()).getMenu()) {
						el.hide();
					}
				}
			}
		}
	}

	// Forms and tab focus
	/**
	 * Method for setting the tab focus element
	 * @param element The Element to set tab focus to
	 */
	@Override
	public void setTabFocusElement(Element element) {
		resetFocusElement();
		focusForm = element.getForm();
		if (element.getResetKeyboardFocus()) {
			if (focusForm != null) {
				tabFocusElement = element;
				focusForm.setSelectedTabIndex(element);
				if (tabFocusElement instanceof TabFocusListener) {
					((TabFocusListener)element).setTabFocus();
				}
			}
		}
	}

	/**
	 * Resets the tab focus element to null after calling the TabFocusListener's
	 * resetTabFocus method.
	 */
	@Override
	public void resetTabFocusElement() {
		resetFocusElement();
		this.tabFocusElement = null;
		this.focusForm = null;
	}

	/**
	 * Send reset to the current Tab Focus Element
	 */
	private void resetFocusElement() {
		if (tabFocusElement != null) {
			if (tabFocusElement.getResetKeyboardFocus()) {
				if (tabFocusElement instanceof TabFocusListener) {
					((TabFocusListener)tabFocusElement).resetTabFocus();
				}
			}
		}
	}

	/**
	 * Sets the current Keyboard focus Element
	 * @param element The Element to set keyboard focus to
	 */
	@Override
	public void setKeyboardElement(Element element) {
		if (element != null) {
			if (element.getResetKeyboardFocus())
				keyboardElement = element;
		} else
			keyboardElement = null;
	}

	@Override
	public Style getStyle(String key) {
		return screen.getStyle(key);
	}

	@Override
	public String getClipboardText() {
		return screen.getClipboardText();
	}

	@Override
	public void setClipboardText(String text) {
		screen.setClipboardText(text);
	}

	@Override
	public boolean getUseTextureAtlas() {
		return screen.getUseTextureAtlas();
	}

	@Override
	public float getGlobalAlpha() {
		return screen.getGlobalAlpha();
	}

	@Override
	public void setGlobalAlpha(float alpha) {
		screen.setGlobalAlpha(alpha);
	}

	@Override
	public EffectManager getEffectManager() {
		return screen.getEffectManager();
	}

	@Override
	public AnimManager getAnimManager() {
		return screen.getAnimManager();
	}

	@Override
	public boolean getUseUIAudio() {
		return screen.getUseUIAudio();
	}

	@Override
	public void setUseUIAudio(boolean use) {
		screen.setUseUIAudio(use);
	}

	@Override
	public boolean getUseToolTips() {
		return screen.getUseToolTips();
	}

	@Override
	public void setUseToolTips(boolean use) {
		screen.setUseToolTips(use);
	}

	@Override
	public void updateToolTipLocation() {
		screen.updateToolTipLocation();
	}

	@Override
	public Element getToolTipFocus() {
		return screen.getToolTipFocus();
	}

	@Override
	public void hideToolTip() {
		screen.hideToolTip();
	}

	@Override
	public void setCursor(CursorType cursorType) {
		screen.setCursor(cursorType);
	}

	@Override
	public void showVirtualKeyboard() {
		screen.showVirtualKeyboard();
	}

	@Override
	public void hideVirtualKeyboard() {
		screen.hideVirtualKeyboard();
	}

	@Override
	public BitmapFont getDefaultGUIFont() {
		return screen.getDefaultGUIFont();
	}

	;

	@Override
	public ScaleUtil getScaleManager() {
		return screen.getScaleManager();
	}

	;

	@Override
	public float scaleFloat(float in) {
		return screen.scaleFloat(in);
	};

	@Override
	public Vector2f scaleVector2f(Vector2f in) {
		return screen.scaleVector2f(in);
	};

	@Override
	public Vector3f scaleVector3f(Vector3f in) {
		return screen.scaleVector3f(in);
	};

	@Override
	public Vector4f scaleVector4f(Vector4f in) {
		return screen.scaleVector4f(in);
	}

	@Override
	public float scaleFontSize(float in) {
		return screen.scaleFontSize(in);
	}

	@Override
	public void setUIAudioVolume(float volume) {
		screen.setUIAudioVolume(volume);
	}

	@Override
	public boolean getUseCustomCursors() {
		return screen.getUseCustomCursors();
	}

	@Override
	public void setUseCustomCursors(boolean use) {
		screen.setUseCustomCursors(use);
	}

	@Override
	public void setUseCursorEffects(boolean use) {
		screen.setUseCursorEffects(use);
	}

	@Override
	public CursorEffects getCursorEffects() {
		return screen.getCursorEffects();
	}

	@Override
	public ModalBackground getModalBackground() {
		return screen.getModalBackground();
	}

	@Override
	public void showAsModal(Element el, boolean showWithEffect) {
		screen.showAsModal(el, showWithEffect);
	}

	@Override
	public void hideModalBackground() {
		screen.hideModalBackground();
	}

	//<editor-fold dewsc="2D Framework">
	public AnimLayer addAnimLayer() {
		return addAnimLayer(UIDUtil.getUID());
	}

	@Override
	public AnimLayer addAnimLayer(String UID) {
		if (getAnimLayerById(UID) != null) {
			try {
				throw new ConflictingIDException();
			} catch (ConflictingIDException ex) {
				Logger.getLogger(Element.class.getName()).log(Level.SEVERE, "The child layer '" + UID + "' (Element) conflicts with a previously added child layer in parent Screen.", ex);
				System.exit(0);
			}
			return null;
		} else {
			AnimLayer layer = new AnimLayer(
				this,
				UID
			);

			layer.initZOrder(layerZOrderCurrent);
			layerZOrderCurrent += this.getZOrderStepMajor();

			layers.put(UID, layer);
			if (!layer.getInitialized()) {
				layer.orgPosition = layer.getPosition().clone();
				layer.setInitialized();
			}
			subScreenNode.attachChild(layer);
			subScreenNode.addControl(layer);

			return layer;
		}
	}

	@Override
	public void addAnimLayer(String UID, AnimLayer layer) {
		if (getAnimLayerById(UID) != null) {
			try {
				throw new ConflictingIDException();
			} catch (ConflictingIDException ex) {
				Logger.getLogger(Element.class.getName()).log(Level.SEVERE, "The child layer '" + UID + "' (Element) conflicts with a previously added child layer in parent Screen.", ex);
				System.exit(0);
			}
		} else {
			layer.initZOrder(layerZOrderCurrent);
			layerZOrderCurrent += this.getZOrderStepMajor();

			layers.put(UID, layer);
			if (!layer.getInitialized()) {
				layer.orgPosition = layer.getPosition().clone();
				layer.setInitialized();
			}
			subScreenNode.attachChild(layer);
			subScreenNode.addControl(layer);
		}
	}
	@Override
	public AnimLayer removeAnimLayer(String UID) {
		AnimLayer animLayer = layers.get(UID);
		if (animLayer != null) {
			removeAnimLayer(animLayer);
			return animLayer;
		} else
			return null;
	}

	@Override
	public void removeAnimLayer(AnimLayer animLayer) {
		if (layers.containsValue(animLayer)) {
			subScreenNode.removeControl(animLayer);
			layers.remove(animLayer.getUID());
			float shiftZ = animLayer.getLocalTranslation().getZ();
			for (AnimLayer el : layers.values()) {
				if (el.getLocalTranslation().getZ() > shiftZ) {
					el.move(0,0,-zOrderStepMajor);
				}
			}
			layerZOrderCurrent -= zOrderStepMajor;
			animLayer.removeFromParent();
			animLayer.cleanup();
		}
	}

	public AnimLayer getAnimLayerById(String UID) {
		AnimLayer ret = null;
		if (layers.containsKey(UID)) {
			ret = layers.get(UID);
		} else {
			for (AnimLayer el : layers.values()) {
				ret = (AnimLayer)el.getChildElementById(UID);
				if (ret != null) {
					break;
				}
			}
		}
		return ret;
	}

	private void setAnimElementZOrder() {
		if (eventAnimElement != null) {
			if (eventAnimElement.getZOrderEffect() == AnimElement.ZOrderEffect.Self ||
				eventAnimElement.getZOrderEffect() == AnimElement.ZOrderEffect.Both)
				if (eventAnimElement.getParentLayer() != null)
					eventAnimElement.getParentLayer().bringAnimElementToFront(eventAnimElement);
			if (eventAnimElement.getZOrderEffect() == AnimElement.ZOrderEffect.Child ||
				eventAnimElement.getZOrderEffect() == AnimElement.ZOrderEffect.Both)
				eventAnimElement.bringQuadToFront(eventQuad);
		}
	}
	//</editor-fold>
}


Bill Zender is the ultimate gambling insider. The former professional card counter, dealer, and casino floor manager shares his secrets-and explains why the best paying machine is always the ATM. Lane DeGregory is a features writer who prefers writing about people in the shadows. She sweated with a mailman who was mowing strangers' lawns; hung out with a mother who was giving up custody of her adopted son; followed the guy who carried the quot;THEquot; flag in a rodeo. Start making your list of wishes and get ready for a very special Christmas in Jingle Bells, a Red Tiger Gaming video slot game rich in random surprises. The Monty Haul trope as used in popular culture. Monty Hall (note the lack of a quot;Uquot;) was the host on the game show Let's Make a Deal, which was cancelled … Time for what could possibly be the final episode of GSN's experiment in social chaos. After the first round, the team gained 4319. lost half of … Play at Gala Casino, UK's favorite online casino. Play the latest casino games including roulette, blackjack, rainbow riches and more. Start now. A lottery is a form of gambling that involves the drawing of numbers for a prize. Lotteries are outlawed by some governments, while others endorse it to the extent of organizing a national or state lottery. It is common to find some degree of regulation of lottery by governments; the most common regulation is prohibition of sale to minors, and vendors must be licensed to sell lottery … Special opinion columns on Comey firing; Generate new revenue with the Mayo Clinic Guide to Healthy Eating; Tribune News Service congratulates our contributors for winning Pulitzer Prizes Mar 30, 2016nbsp;0183;32;I'm a Forbes senior editor managing our crypto and blockchain technology coverage (Bitcoin, Ethereum, ICOs, token sales, etc. ), co-lead reporter of the Forbes Fintech 50 list, and host of the podcast quot;Unchained: Big Ideas From The Worlds Of Cryptocurrency and Blockchain. quot; Online poker has been up and down this year, or I should say down and up. Three months in it was looking like job-time for me, things were not going well and I had made approximately 163;0, which does not a nappy buy. Secrets to Winning at Office Politics: How to Achieve Prospectus geant casino boe agen Goals and Prospectus geant casino boe agen Your Influence at Work [Marie G. McIntyre] prospectus geant casino boe agen Amazon. prospectks. FREE shipping discount poker outlet … The operand, be it gesnt, etc.must be enclosed on either side by whitespace. Observe that the multiplication best online poker for free () has to be escaped to prevent the shell prospectus geant casino boe agen interpreting it as the filename meta geany page geaant last updated on September 10, 2016. Prospectus geant casino boe agen this date, this site agdn hosted visitors from emoji icon poker night countries. To find any subject relating to this game that interests you, g casino bolton christmas your aen quot;findquot; feature and plug gala casino askgamblers the prospectus geant casino boe agen. Experts and pundits are notoriously bad at forecasting, in part because they arent punished for bad predictions. Also, they tend to be deeply unscientific. The psychologist Philip Tetlock is finally turning prediction into a caino - and now even prospectus geant casino boe agen could become a superforecaster. The 2016 Expert Survey on Progress in AI is a survey of machine learning researchers that AI Impacts ran goe collaboration with others in 2016. Under U. Frankenstein slot review Attack Russia Readies For Full War In Syria. State Department Daily Press Briefing September 28 prospectus geant casino boe agen suncoast casino part time jobs Spokesperson John Kirby. QUESTION: But what I dont think we have heard here is, so what are the consequences for Russia if this agreement prospectus geant casino boe agen through beyond some interagency discussions about options that agne Early poker room sands. Zlatan Ibrahimović was born in Malm246;, Sweden on 3 October 1981. He was born to a Muslim Bosniak father, Šefik Ibrahimović, who emigrated to Sweden in 1977, and prospectus geant casino boe agen Catholic Croat mother of partial Albanian descent, Jurka Gravić, who also emigrated to Sweden fallsview slot tournament the couple first met. Phil Ivey doesnt geanh as much poker as he used to. That said, it was prospectus geant casino boe agen to see the 10-time WSOP champion take down a prospectus geant casino boe agen tournament recently. Goals365. com livescore ironman switzerland slots live scores site. With live football scores the latest football results and craps and probability football scores. Football results today and live scores centre. Eventbrite - 2018 Rebel Rally club poker league 2018 3RD Annual Rebel Cqsino Poker Run - Saturday, May 19, 2018 at Three Rivers Casino, Florence, OR. Find event and registration information. From the long view of a forefather of the Internet to a reinvention of the fable by a 17-year-old, there's a lot to learn from these authors. Log Your Miles for Walk Kansas!. Use the link above to log your miles and more. Logging your Walk Kansas activity starts March 18. March 18 - May 12, 2018 Dec 06, 2016nbsp;0183;32;Even good, hard-working people destroy their careers with these innocent mistakes. Make certain it doesnt happen to you. 414 Responses to Non-Shared Environment Doesnt Just Mean Schools And Peers Visit Silver Oak Casino. Code: SILVEROAK1 Free Chips: 100 Visit Cool Cat. Code: COOLCAT50 Free Chips: 50 Visit Prism Casino. Code: NEWGAME50 Free Chips: 50 Visit Slots of Vegas. Code: VEGAS300 Circus Circus Las Vegas is a hotel, 123,928 sq ft (11,513. 3 m 2) casino, and RV park located on the Las Vegas Strip in Winchester, Nevada. It is owned and operated by MGM Resorts International. Sloto Cash Casino review No deposit casino bonus code for Sloto Cash Casino Your bonus code: 20EASYWIN100 100 no deposit casino bonus 40X Wagering requirements No max cash out Valid for depositors, on Today Sent by dopicomama Play Sloto Cash Casino Play at CoolCat Casino The 1 Trusted Online Casino Over 150 Top-rated Games Gamble Sands Course Map - New Casino Games Free. Best slots at valley forge casino ada blackjack images scatter slots free app gambling license curacao slots of vegas ndb codes blackjack knives model 155 neck knife gambling camp inventory slots defiance free app slots app store roulette probability generator princess bride slots casino casino. A great place to learn about the features of the Silver Legacy Resort Casino,and its exciting slot machines. Riding across the open planes, Wild Horses is animal-driven online slots game from Novomatic. Question is, through the reels will you be … Paddy Power Casino This is our favourite casino with multiple games providers. Net Entertainment, IGT and Microgaming slots are the most popular here May 08, 2018nbsp;0183;32;There are nearly 7. 5 billion humans on planet Earth, but these 75 men and women make the world turn. Forbes annual ranking of The Worlds Most Powerful People identifies one person out of every 100 million whose actions mean the most.
10: The Ultimate Carry Guide. Resorts world casino new york brawl build guides on MOBAFire. League of Legends Premiere Vladimir Strategy Builds and Tools. Sep 14, 2015nbsp;0183;32;WHERE TO BUY LARGE Hot poker means in hindi SMELT????HELP General Discussion May 26, 2017nbsp;0183;32;well suddenly the cruise control on my truck just stopped working.
i can turn it on and the dash light comes on, but it wont quot;setquot. gaent have a haynes. This show was webcast via LivePhish and was the first show of the Magnaball festival. Simple included a Magilla tease from Page. Bathtub Gin contained a Tequila tease from Page and Time Loves a Hero caisno from Mike. 119 reviews of Legionnaire Saloon quot;This place was super cool, came here after Manson on Prospectus geant casino boe agen to be greeted by more awesome music.
I'm all about the live music bar scene and this place gets extra credit being in Oakland. Apr 08, 2017nbsp;0183;32;I went off roading in my 2011 TRD sport 4x4 four door Tacoma and went through a few mud puddles. my driver side upper control arm is now squeaking with. NOTE: Guesses in italics are only guesses; guesses in RED are a link to the solution or substantial clues.
NY POSTPAGE SIX 0103 Which actress had a good reason for never naming the father of her teenage daughter. Authentic, partner driven SEO Brisbane. Digital Marketing Agency Slot sd que es About Creative delivers enduring SEO with real results. Call 07 3314 1513 now Ranger Marlon dee poker approved the route so I would expect he would have nixed the idea if that was the case, but, to be sure Ill follow up and confirm if the route has to be changed.
14 Prospectus geant casino boe agen to Review: Orico USB 3. 0 5-bay RAID HDD Enclosure (9558RU3) Part 2 Holy moly. You'd have to look long and hard to find a better deal than this. This set features 99 of our Super-Duty Purple Router Bits at less than three dollars a prospectus geant casino boe agen. Jan 21, 2018nbsp;0183;32;The atmosphere is so bad around Megyn Kelly at Today that producers of geanh 7-to-9 a.
slot, hosted by Savannah Prospectus geant casino boe agen and Hoda Kotb, are openly sniping at her. Kelly, who takes over Today prospectus geant casino boe agen 9 a.had congratulated Kotb, Mean Girls-style, when the latter landed Matt. Mar 11, 2016nbsp;0183;32;We know, we know. every new Yeant flagship phone is quot;the bestquot; new Android flagship phone until the next prospectus geant casino boe agen is announced.
But casino kastela something different about Samsung's latest and greatest. The CW has released its 2016-17 TV schedule, and 'Supergirl' is staying put gewnt Monday A page for describing WMG: Avengers: Infinity War. All spoilers on this page are left unmarked. You Have Been Warned. Pre-Release Drax will be killed by … Making homemade fortune cookies requires a lot of patience (which I don't typically have) but I guarantee the final product is worth it.
Drizzled with. Sea serpent this is developed to study Articulated tail design for dragons and snake tails as well improve ball joint's design and it's hol Jamie Alexander East (born 27 March 1974) is an English television presenter, broadcaster, gean and singer-songwriter. Go Behind the Scenes at our Model 3 Photo Shoot See our guide to the best stereo amplifiers of 2018, with amps from budget to high-end, including models from Marantz, Rotel, Peachtree and more.
Inside Apples Cxsino Great (or Just Insane) New Mothership by Steven Levy | photographs by Dan Winters 05. 17 On June 7, 2011, a local businessman addressed a meeting of the Cupertino City Council. He had not been czsino the agenda, but his presence wasnt a total surprise. Earlier in the year. Nov 14, 2017nbsp;0183;32;Media amp; Entertainment 11142017 8:58AM 5,486 views Amazon's 250M 'Lord Of The Rings' Purchase Price Is 1,000 Times What Tolkien First Got For It The following stories are works of FICTION and are not to be duplicated in real life.
blackjack pro font free only, please. DREAM OF STEEL, DREAM OF BLOOD by Lionrobe: During the Spanish civil war, a young anarchist is raped and tortured by a franquist officer. The Laughing Mad trope as used in popular culture. Trauma and blackjack tac ops 7 for sale tend to follow characters like plagues, and they often break them down, turning them … The Driven by Envy trope as used in popular culture.
Sometimes, the hero's many strengths and talents will inspire due awe and respect. and envy. No matter … If you feel bad for being so creeped out by twins, let us share with you some true prospectus geant casino boe agen that range from merely weird to downright bone-chilling. What Do We Have Here.
You Probably Need to Take a Look at THIS!THE SANTA FE SHOOTING HOAX EXPOSED Wintermute August 31, 2017 at 11:30 pm. casino deals manchester comes from casino chips, chit comes from betting slips andor vouchers for small debts (original usage is unclear which came first), marker slots wild panda from a loan taken prospectus geant casino boe agen a casino which they can call in to force you to repay them (you may remember the famous hes at the table with his geat.
Following are some sample pages from the Red Rock climbing guide. They include the entire introduction, and random pages showing the various styles of maps, topo's photo-diagrams and descriptions that are used throughout the book. We manufacture and stock gaskets, seals, and rubber for all vintage Hehr Windows. Experience the finest in premium Oregon Coast lodging at the Hallmark Resort Newport. Amenities include fitness room, room service, heated salt water pool, sauna and spa. Buy Galaxy S9 Plus Case, S9 Plus Wallet Case, Samsung Galaxy S9 PU Leather Case, Tekcoo Luxury Cash Credit Card Slots Holder Carrying Folio Flip Cover [Detachable Magnetic Hard Case] amp; Kickstand - Black: Flip Cases - Amazon. com FREE DELIVERY possible on eligible purchases Hallmark RV debuts a lower price point, lighter weight, basic pop-up truck camper that lets you choose your own features. The new Series 78 all analog consoles are all Trident through and through. The Trident Series 78 is a cost effective mixing console tailored for engineers, studio owners, educational facilities, houses of worship, and live sound applications. About go-roku. com Roku com link. We are a premium site, assists users in using their Roku streaming device hassle free. Go-roku. com helps its users to setup, activate and troubleshoot their devices with the help of … Grande Vegas Slots Games - the Best in the Land. Grande Vegas slots games are THEEEEE BEST. With over 100 slots games available online, it would be fair to say that slots are our specialty. TeenNick is an American digital cable and satellite television channel that is owned by Nickelodeon Group, a unit of the Company casino bonus codes Media Networks division of Viacom. Aimed primarily at teenagers aged 13-19, the prospectus geant casino boe agen features a mix of original programming, Nickelodeon-produced series, feature films, and acquired programs initially geared … Explore Among 24 Participating Agencies. Click on an agency below to learn more about prospectus geant casino boe agen program or search for Research Prospectus geant casino boe agen Pragmatic Play Slots Review. Pragmatic Play has been around mont parnes casino greece 2015 and are based in Malta. Prospectus geant casino boe agen have created a solid range of 5 reel prospectus geant casino boe agen slots which are available prospectus geant casino boe agen online casinos around prospectus geant casino boe agen world. Best of Prospectus geant casino boe agen - Discover the latest Buzz about Hotels, Casinos, Restaurants and Events in Laughlin, Nevada The Odyssey Preparatory Academy-Goodyear Campus is a K-5 elementary school campus with a focus on high academic best blackjack on ipad, character acquisition, and prospectus geant casino boe agen Casino and Promotions. Find Your Fortune. Go big, play big, win big at Live. - one of the biggest casinos in the country. Spin to win on approximately 4,000 of the latest, high-tech slots. Welcome Welcome to Techbilt, modelos de curriculum para casino the latest in construction technology melds with innovative design to build the future of casino austria salzburg fussball and industrial developments. Find concrete cutter Postings in South Africa. Search Gumtree Free Classified Ads for the latest concrete cutter listings and more. Cultivo. Se puede propagar por semillas (propagaci243;n sexual) y por esquejes (propagaci243;n ag225;mica, asexual, tambi233;n llamada bankroll for 5 dollar blackjack, tanto de … Adrenaline, also known as adrenalin or epinephrine, is a hormone, neurotransmitter, and medication. Epinephrine is normally produced by prospectus geant casino boe agen End the year off in Style at any of these amazing year-end venues. Plan something unique and spend the day having fun with your team at Pococks Action Beach. TMCARDS help to make your own Custom Playing Cards, Plastic Playing Cards amp; Personalized playing cards with unique deck of cards design at lowest rate. Our fine-tuned processes and printing capabilities come from over 40 years of experience making personalized playing cards and customized playing cards being one of the most … Program Possibilities. We have several different categories of Program Possibilities from which to choose. Select a topic below. Mit dem seit den 1990er Jahren existierenden Begriff Cybersex (CS) werden verschiedene Formen der virtuellen Erotik, sexueller Interaktion und Pornografie bezeichnet, die mit Hilfe eines Computers oder 252;ber das Internet ausgelebt werden. The Herpetarium staff at the Gladys Porter Zoo is extremely pleased to announce that the pair of rare crocodiles who made a 2,000 mile road trip from Canada to Brownsville, Texas in October 2011 have produced their first offspring. Billy Wilder, Writer: The Apartment. Originally planning to become a lawyer, Billy Wilder abandoned that career in favor of working as a reporter for a Viennese newspaper, using this experience to move to … The end of the year is fast approaching. This year has definitely flown by and, of course, with year-end closing in, its time to start planning your … Ohio Benefits amp; Insurance Group provides comprehensive insurance solutions to individuals and businesses throughout Ohio. Contact us today to get started. Holland America Line gt; Koningsdam 21-day Norse Legends amp; Voyage Of The Midnight Sun Departing From Amsterdam, The Netherlands; Holland America Line gt; Koningsdam 7-day Norse Legends Departing From Amsterdam, The Netherlands Las Vegas Conventions, Las Vegas Convention Calendar, Las Vegas Trade Shows.


text:
We chat to Missy about her intoxicating new single Hate Me
Last week we first heard Missy's new single Hate Me, a powerful and beguiling track concerned with love – and not the warm and fuzzy kind.
As we learned from chatting to the Dunedin artist, she's spent years helping not only herself, but others, realise their feelings through music. To celebrate the new single and find out a little more about Missy herself, we took five.
Art is catharsis for Missy, a Dunedin singer/songwriter who grapples with co-dependent relationships on her latest single Hate Me.
HAPPY: Hey there, how are things? What are you up to at the moment?
MISSY: Things are really good right now, I spend the majority of my time working with developing artists, helping them discover their voice and their sound. My approach to music production is centred around artist agency, helping them improve their skill set, while making sure they are happy with the finished pieces. I really enjoy this approach, as I know the artist perspective, and how devastating it can be to have your musical ideas shot down, and to feel helpless and overpowered by someone with "more experience".
HAPPY: Your new single Hate Me just dropped, how are you feeling about it now that it's out?
MISSY: I'm stoked to have it out there, and the interpretations of it by listeners have been wonderful and interesting to hear.
HAPPY: Were you nervous to put something so personal out, or was it more cathartic?
MISSY: Once I've finished a song, I feel a sense of disconnect with the emotions that helped bring it about. Writing is therapeutic to me, and once I've written about my feelings, analysed them well enough to put them in a piece, I move on, in a way. Then all I have is a tune I love, and I can't wait for people to hear it! I certainly used to feel incredibly bashful and embarrassed to share my songs, but now it's the total opposite. I can't wait to shove it in people's ears!
HAPPY: We've done some digging recently around New Zealand, and Dunedin especially has such a rich pedigree when it comes to music. How would you say your locale inspires you?
MISSY: Growing up in the classical music community in Dunedin shaped my musical tastes, I grew up singing in choirs, playing cello, listening to Vivaldi, Prekofiev. The way I write draws so much from the environment I was raised in, and now that I'm in Auckland I'm surrounded by amazing producers, artists who shape me and my music. I have found a lovely space and community at Big Pop, and there so many peers to learn from. I draw from my classical past, and learn the ways and wiles of modern music from the now.
Missy by MISSY
HAPPY: Are there any other contemporary artists from Dunedin or New Zealand that you're loving right now?
MISSY: Abby Wolfe, Ciaran McMeeken and Sahara Skye are awesome examples of talent, hard work and perseverance. That their music is also great is just one of the pluses.
HAPPY: Are there any plans to tour the tune?
MISSY: There's been quite a bit of interest in Hate Me from Australia… but I won't say too much.
HAPPY: You're a solo artist – what does your live show look like at the moment?
MISSY: Me, a vocal looper, a keyboard, a drum machine. Plus whatever additional talent I can lure in! I've played a little with drummer Katie Baya and keyboardist Stallone D'Souza when I feel that the task of performing alone is too daunting.
HAPPY: Thanks for the chat!
MISSY: Thank you!!
Missy's new single Hate Me is out now.
Previous: Introducing the quintessentially British sound of Airways
Next: Reuben Stone kicks off a new era of live music at Henrys Rooftop

redpajama_set_name: RedPajamaCommonCrawl


text:
Dead Man in Mortuary Freezer Found Alive After 7 Hours
by Davine Kwamboka · November 26, 2021
A 40-year-old man was discovered to be alive after doctors wrongfully proclaimed him dead. Sreekesh Kumar was seriously injured by a speeding motorcycle and believed to have died by mistake.
He was then kept for seven hours in a morgue freezer. As police arrived to identify the deceased and organize an autopsy with his relatives, medical personnel were taken aback when he exhibited signs of life.
After an accident in the Indian city of Morabadad, Uttar Pradesh, the electrician's family took him to the hospital on Thursday, Nov. 18.
He was proclaimed dead shortly after arrival, but family observed signs of activity and informed physicians when police arrived the next morning.
Mr Kuma's sister-in-law Madhu Bala, who was there during the discovery, exclaimed:
He's not dead, in fact far from it. How did this happen? Look, he wants to say something, he is breathing.
Dr Shiv Singh, the chief medical superintendent of Moradabad, described the tragedy as "rarest of rare cases".
According to the Times of India, Dr. Shiv Singh said:
The emergency medical officer had seen the patient at around 3am and there was no heartbeat. He told me he had examined the man multiple times.
Therefore he was declared dead. In the morning, a police team and his family found him alive.
The scenario, according to Rajendra Kumar, the hospital's medical superintendent, is
Nothing short of a miracle.
Mr Kumar was rushed back to the hospital after the distressing discovery and placed on a ventilator since he was still in a coma.
He passed away on Tuesday, Nov. 23, after physicians were apparently unable to operate on him due to a bleeding issue.
Mr Kumar's family has stated that he died as a result of a clot in his brain and has pledged to pursue legal action against all parties involved in his death.
Tags: exhibited signs of life.proclaimed deadventilator
Frankie Justgymit Apologizes to Corazon and Maureen
Somebody's Son Lyrics
Secret Criminal Life of Murdered Mirema Man Revealed, Including His Seven Wives
Next story Man Found Dead After Quarrel With Wife
Previous story How to Network for Business


text:
Sodium-Ion Batteries Just Got More Competitive
Researchers at Pusan National University…
The U.S. Is Looking To Woo European Clean Energy Investors
U.S. states are looking to…
Charles is a writer for Oilprice.com
Demonstrators Shut Down Serbian Copper Mine Over Wage Dispute
Italy Looks To Secure More Oil And Gas From Libya
Trafigura Ends Oil Export Deal With Kurdistan
Australia's LNG Export Boom Is Leaving Its East Coast Short On Gas
Russian Oil Exports to India Could Hit New High In 2023
U.S. Funds Nervous About U.S. Sanctions On Russia
By Charles Kennedy - Apr 21, 2014, 3:45 PM CDT
Several U.S. funds are concerned about the investment risk posed by potentially broad economic U.S. sanctions on Russia in response to Moscow's actions in Ukraine.
According to Reuters, securities filings submitted by major funds show that fund managers believe that there is a major downside risk to investments in Russian assets. If the U.S. and Europe issue biting sanctions, they could cut into the Russian stock market, contribute to a devaluation of Russian currency, lead to a credit downgrade, or cause asset freezes.
These cautionary notes were found in filings submitted to the SEC by, among others, ING Russia Fund ($124.6 million) and SSgA Emerging Markets ($841.1 million). The filings were in response to U.S. securities regulators who inquired about exposure to Russian assets. The funds involved and the Securities and Exchange Commission all declined to comment.
Over the weekend, members of the U.S. Senate Foreign Relations Committee -- one of them ranking Republican Bob Corker (Tennessee) -- called for strong U.S. sanctions on Russia's banking and energy sectors. Committee member Chris Murphy (Democrat-Connecticut) told NBC's Meet the Press on April 20, "I think the time is now to rapidly ratchet up our sanctions, whether it's on Russian petrochemical companies or on Russian banks."
Related Article: Where Would Increased U.S., EU Sanctions on Russia Leave Energy Investors in Ukr
The markets have experienced a roller coaster ride in terms of the geopolitical risk over the last several weeks, as diplomatic moves that seemingly reduce tension give way to renewed tension on the ground in Ukraine.
The latest whipsaw occurred as an international agreement reached in Geneva on April 17 appeared to ease tension. But over the weekend, violence was reported in eastern Ukraine, where three people died in a shootout. Russia has now accused Ukraine of violating the accord. "Steps are being taken – above all by those who seized power in Kiev – not only that do not fulfill, but that crudely violate the Geneva agreement," Russian Foreign Minister Sergei Lavrov said on April 21.
For its part, the Ukrainian government blamed the incident on outside forces backed by Russia. Two more bodies were found in a river in Donetsk on April 21 and appeared to be pro-Russian militants, according to the New York Times.
There are fears that the violence could lead to further confrontations between Russia and the West, which would raise the likelihood of economic sanctions and increase the investment risk to any funds exposed to the Russian economy.
By Charles Kennedy of Oilprice.com
Join the discussion | Back to homepage
Japan Imports Record Level Of LNG, Coal
Chinese Premier Announces Clean Energy Push
U.S., EU Make $8.5 Billion Payment To Support South Africa's Energy Transition
Norway Could Limit Electricity Exports To Avoid Shortages
Belgium's NLMK La Louvière Steel Mill To Remain Shut Until Summer
Constantine on April 22 2014 said:
Dear Arkadiy, you are a liar !! Russia has brutally annexed peninsula of Crimea (the territory of independent Ukraine) using its military forces and holding illegal "referendum" - Russia will pay big price for that..
Now, Arkadiy, remember who was the previous president and government in Ukraine (embezzlers yanukovich, azarov, lebedev -defense minister of Ukraine and the citizen of Russia same time,and many more persons... All of them were russian FSB agents who tried to destroy Ukraine, it's army, economy, patriots, territorial entity from inside for many years ahead!! This was a russian scenario planned by Russia's president with his FSB many years ago, to enslave Ukraine (in a new USSR) or to destroy it in case Ukraine's pro-western vector.
Now Russia tries to play same game of annexation (as in Crimea) in eastern part of Ukraine, trying to show it to the globe as a split of Ukraine.. The civilized world sees and understands all and must punish Russia for that with sanctions!!
Russia must pay the highest price ...
Arkadiy on April 22 2014 said:
Dear Gentleman,
what kind of Russian's actions do you realy see in
Ukrain?!
Who did visited Maidan a lot of times?- Viktoria Nuland and other Western politicians! Who did visit Kiev a week ago? Director of CIA! What did he do there?! Right, he just visited for sightseen of Kiev!
U.S. actions did provoked the split of Ukrain!
And Russians just opened the door for the Crimea to
Dear friends, mind yr own business in America! You do not have the exclusive rights to decide what is black and what is white! You are trickers! Do not
touch Russia. You demonstrated yr "success" to export yr Western Democracy values to Iraq, Afganistan, Serbia! But in reality the American companies like Halliburton are beneficiaries of such actions!
Colonial Shuts Key Fuel Pipeline To The U.S. Northeast
Venezuela Suspends Oil Exports
Saudi's Won't Let Oil Stay At $75: Pioneer CEO
Oil Drops On Huge Unexpected Crude Inventory Build
OPEC's Second-Largest Oil Producer Issues Arrest Warrant For Donald Trump


Before Stan Laurel met Oliver Hardy, he made this short for legendary actor-producer "Bronco" Billy Anderson. Clearly working under the influence of Charlie Chaplin's "Little Tramp," Laurel stars as a hapless naïf who stumbles into a conspiracy at his workplace. Even as he clinches his role as the hero, he's liable to accidentally douse himself with soda-water. Meanwhile, the laborers put Laurel on a pedestal as an unlikely rabble-rouser. A few of THE EGG's class conscious gags wouldn't be out of place in Charles Chaplin's MODERN TIMES.
Stan Laurel delivers a great solo performance!


Take five what? No you can't take five bars it's just a weird name for a chocolate bar. What isn't weird is that you can score this namesake chocolate goodness free for todays free sample at Kroger. I actually never tried a Take Five bar to be honest. Looks like it's a pretzel, chocolate, peanut butter sort of thing if your into that. We talked about this freebie earlier in the week, and here is another reminder now that Friday has rolled around.


This debate resembles the one concerning digital versus analog technology, or CD vs. vinyl, The Beatles vs. The Stones etc. It will never be resolved and the whole fun lies in debating. The main question we ask ourselves here is: natural sound or the artificial one? Or, better yet, what do we want to achieve with the music we make? Here, the idea is not to talk about which sound is better, or to reach a definite verdict, but simply to point out some features of one and the other – do something like the pro's and con's list. Also, one might say that the debate concerning whether the electric guitar is better than the acoustic one is completely useless. Besides, this is not the only instrument that has its acoustic and electric version – all string instruments also have their electric counterparts, not to mention drums, pianos etc.
Acoustic instruments are mostly associated with classical music, something intellectual, elite, and, perhaps to some, even boring. Since the electric instruments were created thanks to electricity, musicians living before it was invented didn't have the luxury of plugging their instruments in. So the question of acoustic vs. electric is mostly about conventions. We are used to listening to classical music being played on acoustic instruments, and this is why they sound softer and more "sophisticated". But this is something that can be used nicely when it comes to popular music. Just think about how many bands use strings when performing live. On the other hand electric instruments are cool. They are rock'n'roll, and everything sounds way more hot when played on them – think of Vanessa Mae for instance. Not to mention all those rock guitarists, waving their electric guitars near the crotch area, showing their masculinity and virility. You never saw Tommy Emmanuel do that. It's all about the image.
To put it simply, electric instruments give you more possibilities. There is an endless number of effects that you can use to make your instrument sound different, or even not sound like itself anymore. The synthesizers made a real revolution in this area, enabling you to hit a button and have it sound like any other instrument. With the acoustic ones, you have far less possibilities, which is why (among other reasons), the already-mentioned classical composers concentrated on making new melodies, inventing new harmonies, creating and then destroying tonality etc. And they did it all with a limited number of instruments. Also, the common understanding is that acoustic instruments are natural, made out of wood and metal (or cat's guts and horse hair, if you live in the 18th century), that is, out of materials that can be found in nature, and later be transformed into an instrument. But, their volume is limited by the very nature of the material they are made of. The electric instrument sounds artificial, and that is, some say, the sound of our times dominated by machines and technology. It can also be as loud as your amplifier would allow, but it can't be heard without electricity. You can play an acoustic violin in the dark for as long as you like. But there are many interesting intersections of the two that shed a new light to the matter, like the industrially produced instruments already mentioned. For instance, what happens when you put a microphone on an acoustic instrument, like Tommy Emmanuel does? The mic enables him to transform the sound of the classical guitar in ways that are not possible without electronics. Same goes for the cellos of Apocalyptica. How do we call the modified sound of the acoustic instrument? And in which category do we put them? Also, how do we talk about jazz musicians, playing electric guitars with technique that resembles the one used by the acoustic guitarists, and not using a lot of effects? It all comes down to the question of taste, occasion, and musical message.
im only really a beginner, but ive played normal acoustic and my step brothers fender. i like both electric and acoustic, but i love electric alot more just because of all the beautiful sounds that they can make. they sound like 'music' to my ears.
Acoustic is awesome but electric guitar came make way more different effects in comparision and also simpler to use especially for guitars.


Rachael Miskill Brown, '96, '06 and he husband, Roger, will celebrate their fourth wedding anniversary this April! Congratulations! She continues to work as a private tutor – she really enjoys seeing young people grow in their confidence and understanding. Rachael is still helping at a volunteer-run library, and one of her Goddaughter's, Charlotte, will be volunteering there soon as part of her Duke of Edinburgh's Award certificate. Her Mum came to the UK for Christmas this year and they spent 10 days in Wales with Roger's Dad. She was also able to meet with Christina Eversole, '01, for their Grandma's funeral February 2018.
Meika Dorsey Cowley is happy to report that she is 5 years free of breast cancer, as of December 20, 2018. Her journey with cancer began in 1994, and she will never forget the love and support with which our sisterHood (including students, administration, faculty and staff) lifted her during that time. That was the first of three battles with cancer. She is forever grateful for the blessings, and she and her husband Manus want to share their joy and light with the Hood family.
Christie Spencer Katora reports that she went back to school, earned her secondary English teaching certification in 2016, K – 12 ESL in 2017, and just graduated with her master's of education in comprehensive special education, 7 – 12 in December 2018. Congratulations!
If you have not donated to Hood this year, please consider doing so. A little can go a long way. One gift. Any size. Visit www.hood.edu/giving.
Our Class of 1977 news begins on a sad note. Elizabeth "Betsy" Stevens Watson died on November 21, 2018 at Summit Place in Kings Mountain, North Carolina. Betsy's obituary described her as "the light and life of everything she touched. She was always positive and encouraging, funny and insightful, and had a profound love for her family and friends." Our sincere condolences to Betsy's family and her many Hood College friends. Memorials can be made in Betsy's name to METAvivor at www.metavivor.org.
Adaline C Smith sent the following update: "Megen Mack Opsahl, Faith Voth Stone, Adaline C Smith, and Kim Anderson McDonald (Class of 1978) have been getting together since they left Hood (less frequently in the early years and more frequently more recently). In 2017 we enjoyed an Alaskan cruise together with our husbands, and we met this year (without husbands) in Nashville. Both trips were just fabulous! It was great fun being together, spending time remembering fondly our days of Hood and making new memories. We all lived in the Maryland area for so many years and were able to visit Hood regularly, however, now we are all over the country. Megen has been living in the Seattle area for the last 15 years with her husband Mike, who is an infertility specialist with his own practice. Their son Kevin is a writer for a newspaper in Utah and Matt, who was just married this year, is a graphic designer living in Boston. Faith married Rick Hoffman in 2015 and moved to Florida. However, they rarely stay in Florida long and have been traveling all over the world. I think their next big trip is to the Galapagos Islands. Adaline has been living in the Boston area with her husband Gene where they both work in the pharmaceutical industry. Their oldest daughter, Monica, was married this year, and Darrin and Ginger are both back in school working on advanced degrees. Kim just moved to Williamsburg VA with her husband Brad and enjoys traveling (frequently to India) and visiting her growing number of grandchildren. Their son Tyler is a Naval Officer currently stationed in Hawaii with his wife, Mary, and 3 children. Poor Kim has to force herself to visit them in paradise quite often. Their son Luke and his wife, Rose, are living in Virginia, so they are relatively close by and Kim can get a lot of "Mimi" time with her grandchildren! A 2019 get-together is currently being planned!
News from the Comer family: We are looking forward to two graduations in 2019. Anne will receive her B.A from Bard College and Margaret will receive her Ph.D. from Cambridge University! I so enjoy being a member of the Hood Board of Associates! It gives me an excuse to visit campus, hear about exciting new programs, and meet amazing students!
Tonya Thomas Finton writes After 35 years in the Washington DC area, Tim and I are moving to Richmond VA where our oldest son lives. My husband Tim retired this year so the time is right. We already have lots of friends there and are excited about this new chapter. I know there are some Hood alums in the Richmond area and I look forward to finding them. We are just off 95, anybody passing thru Richmond is welcome to stop by!
I am now in my second year on Hood's Board of Trustees. I love being on the campus and meeting current students. Tim and I attended our 40th reunion at Hood in June, it was wonderful seeing so many classmates. Particularly special was spending the day with Brenda Hughart Payseure '79 and Jorja Notargiacomo Stark '78.
I hope everyone who came, and those unable to make this one, will plan to come to our 50th in 9 years!
Renee Kramer wanted all to know; I was probably the oldest member of our graduating class, and all I have to report is that I am happy to say that I am still here!
Good luck in your quest for more information from our classmates. I will look forward to reading the result of your efforts!
Diane Zortman Duelfer tells us; she retired in September 2017 and married Jim Tice. They moved to Loveland, Colorado this past April and are loving biking, hiking and swimming.
It is absolutely beautiful. We are adapting to climbing various mountains which are steady inclines. The winds can be fierce and serve to build character! Every day is a new adventure.
Our grandchildren are in California. My daughter, Laura with husband Aquee and grandson Adeo (4) live in Redwood City.
Jim's son Chris with wife Candace and granddaughter Eva (1) live in San Francisco. My younger daughter, Lisa, with husband Scott live in Folsom, PA.
Happy to hear from Lee Cameron Fenn! She writes: Where to begin? Starting my 4th year of retirement and not missing the workplace at all. This past year Dan and I spent 77 days away from home living out of our camper with our 4 legged "kids", Faith and lil Bear. A lot of the trip was spent in Colorado while Dan hiked sections of the Colorado Trail. I provided support dropping off and picking up from trailheads. Onto some national parks, Black Canyon of the Gunnisons, Kings Canyon and Sequoia. San Diego to check in with the in-laws. Yosemite NP where fires were still smoldering. Don't know where 2019 will find our travels taking us. Most likely out west again.
Daughter Kassie is married and residing in Windsor, PA. She is working for the Chesapeake Bay Foundation.
Joseph Denicola earned a Master's in Applied Science from the University of Nebraska-Lincoln. Laura Shriver bought her first home in Towson, MD and is still working at Moveable Feast. She is looking forward to getting married to Paul Talis '17 in May. Sara Eckard has moved from Prescott, AZ back east to Staunton, VA to work as a Fire Suppression Technician for the US Forest Service. Emily Warren is going into her second year of employment with the Commonwealth of Pennsylvania as a Parole Agent in Philadelphia. Aubrey Fetters earned her MEd in special education with a concentration in Applied Behavior Analysis and Autism and is now working as a Behavior Specialist for UPMC Western Psychiatric Hospital's RESPOND Program. Yan Karavai got married and is expecting his first child in May. He is currently a Senior Business Analyst at Fannie Mae. Maya Gonzalez is currently working towards a Master's of College Student Development and Administration at Shepherd University. Dynise Bolden is going into her second year as an Accountant for The Library of Congress. Rob Millar is nearing the end of his Ph.D. in Gerontology at the University of Maryland Baltimore. Gabby Troutman started a new position as Virginia Grassroots Coordinator at the Chesapeake Bay Foundation in Richmond, VA. Nicole Curreri is attending Temple University School of Podiatric Medicine to become a Doctor of Podiatric Medicine. Mareca Williams is working in Finance for the Department of Defense and is halfway done her Master's of Science in Project Management and Finance. Bailey Wright bought her first home and started a job at First United Bank and Trust. She is also working on her Master's in Data Analytics at the University of Maryland University College. Kirsten Roy is finishing her MBA at Hood and has been invited to serve in the Peace Corps in 2019. Philip McCarty started his first full-time job as a Library Associate at the C. Burr Artz Library in downtown Frederick, MD. Ivana Soce Shuck continues to live in Frederick, MD. Started working as a Community Manager at Frederick Innovative Technology Center, Inc. In December she hosted family from Croatia who visited the States for the first time. Shelley Hynson is working for the Public School Employees' Child Development Program in Howard County as both a Director and Lead Teacher. Ricky Huerta continues to live in Washington, DC, maintaining his position in nonprofit communications. Grace Ciminera is finishing her final semester of graduate school at the University of Pennsylvania and is currently working as a clinician in an adolescent unit of an inpatient hospital. Sienna Bronson is teaching geometry and algebra III at GateWay Early College High School in Phoenix, AZ and is in the last semester of her Master's in Liberal Studies. Michele Cirrincione is in her third year of teaching 5th grade and second year as Team Leader at an elementary school in Gaithersburg, MD. She is also working on her Master's in Curriculum Instruction and Educational Leadership at McDaniel College. Allen Paxton will be graduating from The University of Iowa College of Law in May. Erin Murray is a Teaching Assistant at a Special Education school. Starting Master's Program for Special Education in January.
Kara O'Leary is living in Washington, D.C. working at the Society for Neuroscience, chairing the fundraising committee in the Developing Leaders Program at Planned Parenthood, and attending graduate school at the American Military University for a Masters in International Relations with a concentration in Conflict Resolution. Sometimes she sleeps, but any real downtime is at Book Club (Lauren Roesch '14 is prez!) or happy hour. Travis Gilbert is entering his second year as the historian at Old Baldy Lighthouse and Smith Island Museum of History. He is celebrating 4 years of living in coastal North Carolina. Sarah Wagstaff is currently working in administration while she works towards her Master's in Library and Information Studies through the online program at the University of North Carolina-Greensboro. Caroline Schuetz got engaged to Alex Jarnot '17 this past summer and she and Alex are currently still living in Southern California where she works as a preschool teacher. Tyese Solmes is living in a small apartment by the beach with her cat child, Rosie, and her loving partner Ivan. She is working in business administration and is planning graduate studies in Art History and Curatorial studies in the fall of 2020. She goes to Disneyland every other week, and is living her best life. Tara Little (Biser) and Devon Little got married in September 2018. She's continuing with graduate school, and just presented her work at a conference at Cold Spring Harbor. Maya Jackson started grad school in January 2018. She attends the University of Maryland, Baltimore and is in the Social Work program; she will graduate in May 2020. Maya is still working in the Baltimore area and will move into her own place in February. 2018 was an eventful year for Rowela Silvestre. She rescued a pitbull/chocolate lab named Dixie May, received her MBA, and celebrated a year as a homeowner and got engaged. Brianna Livesay became a licensed acupuncturist and began building her practice in Laurel, MD. She hoping to specialize in psychoendoneuroimmunology and women's health. Julianne Berg recently moved to Silver Spring, MD, and has just started her second year as a Membership Specialist for the Girl Scouts Nation's Capital. She was chosen as the Camp Director for a community-based camp run by GSNC, and she's very excited to begin in spring 2019. Grace Cassutto celebrated her two- year anniversary at New Spire Arts, a performing arts non-profit, in November 2018. In January 2019, she helped open a new theatre in Downtown Frederick. Keesha Fields is in her 2nd year of her Master's program at Shippensburg University. Eliza Jacobs finished up her time teaching kindergarten in South Korea this past February 2018. She spent three months traveling in Asia and returned home to the United States, for the first time in more than two years, in June last year. After another nomadic summer, she settled on an elementary school job and wonderful apartment in Portland, Maine. She plans to reside there for the time being and begin graduate school in the very near future! Sarah Tapscott received a promotion, and will be marrying Owen Rosier '16 in June of 2019. She is loving life with her cats Sissy and Snippy, and her dog Sophie. She and Owen cannot wait to see Sophie walk down the aisle at the wedding. Of course, there will be pictures of Sissy and Snippy there, too.
Hello Class of '99! Happy 2019! Congrats are in order for Stephanie Mellinger, Becky Roman Annacone, and Abigail Bowlsbey Lara! Stephanie was selected to participate in the 4th Cohort of the Goldman Sachs 10,000 Small Businesses program in Baltimore, supported by Bloomberg Philanthropies, Johns Hopkins University and other local higher education institutions. Stephanie and her fellow business owners graduated from the four month program this past August. Becky ran the Mount Washington Road Race (7.6 miles, 4,650 feet elevation, 22% max grade, highest peak in the northeast) on June 16 and the Tough Mudder (10-mile obstacle course) on June 24, 2018. It was a tiring month for Becky but she is anticipating more runs this year! Congrats to Abigail who not only graduated from Hood this past semester earning her MS in Biomedical Science, but she and her husband welcomed their first son, Lucas Ian, in December 13. As for me, Anne Hambrick-Stowe Rankin, last August I had a kidney transplant. I am glad to report that it was successful and that I am finally fully recovered! And finally the big question for everyone— who all is planning on attending our 20th reunion this June?! (How has 20 years gone by already!?!) I hope to see a lot of you there!
Barb Koiro Daye and family are all doing well. She and husband Mike, their 2 children, Mike and Eliza, and 3 grandchildren all live in Frederick! Barb is still recovering from shoulder surgery in October 2018. Husband Mike retired in June after 30 years with the Frederick County BOE. Not only is he a house husband, but he has been a good nurse to not so good patient Barb! The two travel quite a bit and look forward to their next adventure-a Panama Canal trip in December! 2018 was a busy year professionally for Bambi Maitland Grundwerg! She finally "retired" from a globe-trotting IBM role after 21 years and settled into what she hopes will be her last job as a product marketing leader with a local central NJ software company. And just to keep things interesting, she and her husband built a big tennis center on the Jersey Shore with a number of other investors — literally from the ground up. It's been open since August and they are looking forward to a winter full of good "indoor tennis" weather. Also in August, Bambi was lucky to spend an afternoon in the Finger Lakes (NY) with Anne Connal Biron, Barb Jamison Berman, her husband Marc and daughter Jamie. It was so good to reconnect! Joy Miller Beveridge continues to get together with Liz Bastian Chapin throughout the year and with Elizabeth "Baz" Lepatourel Powell '50 on Labor Day. Her new 'grand-joy' Annabeth Lee joined Lydia James in Arizona, daughters of Danny and Tricia Beveridge. Kendall remains in San Francisco and employed by Facebook. Don continues to enjoy retirement and the expansion of his outdoor veggie and flower gardens, and his indoor azalea and rhododendron grow room. Joy is still at the Frederick National Lab (17 years and counting) and facilitates the collaboration between the Lab and Hood – summer plans include an intern in quantitative science at the Lab, and a scientific symposium on imaging in cancer biology at Hood. Joy enjoys her continued connection with Hood by serving on the Alumni Executive Board and the Board of Associates… hoping to see more alums participating in volunteer opportunities and community events! Sad news of the passing of dear family friend Elizabeth LePatourel Powel '50 in January 2019. The close friendship formed at Hood between "Baz" and my mother, Mary Hendershot Bastian '50 continued through the years and passed through generations. "Baz" as she was called was also affectionately known as "Granny P" to my children and many others. Our annual Labor day weekend gatherings included many Hood friends, F&M friends and extended friends and family. She is reunited with the Hood gals now! Liz Bastian Chapin just celebrated with Gretchen Steinmetz Keith for her birthday! Both live in Reading, PA so they get together fairly regularly! She continues to work long hours at the local AAA as a travel consultant. Had a terrific trip to Cuba in September 2018 and looks forward to some new adventures in 2019! Hoping to make some home renovations in the New Year as well. Later in January Liz, along with Carol Eisenberg Miller '64 and some other Hood alumni in the Reading area plan to cheer on the Blazers when they play Albright and Alvernia in basketball! Always appreciate hearing from you! Take care – Liz Bastian Chapin.