/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package org.eclipse.emf.eef.modelingBot.EEFActions;


/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Move Down</b></em>'.
 * <!-- end-user-doc -->
 *
 *
 * @see org.eclipse.emf.eef.modelingBot.EEFActions.EEFActionsPackage#getMoveDown()
 * @model
 * @generated
 */
public interface MoveDown extends EditAction {
} // MoveDown
