/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/


import java.util.*;

// line 1 "DuplicateInterfaceAssociationMethodsTest1.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private List<Second> seconds;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First()
  {
    seconds = new ArrayList<Second>();
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetMany */
  public Second getSecond(int index)
  {
    Second aSecond = seconds.get(index);
    return aSecond;
  }

  public List<Second> getSeconds()
  {
    List<Second> newSeconds = Collections.unmodifiableList(seconds);
    return newSeconds;
  }

  public int numberOfSeconds()
  {
    int number = seconds.size();
    return number;
  }

  public boolean hasSeconds()
  {
    boolean has = seconds.size() > 0;
    return has;
  }

  public int indexOfSecond(Second aSecond)
  {
    int index = seconds.indexOf(aSecond);
    return index;
  }
  /* Code from template association_MinimumNumberOfMethod */
  public static int minimumNumberOfSeconds()
  {
    return 0;
  }
  /* Code from template association_AddManyToManyMethod */
  public boolean addSecond(Second aSecond)
  {
    boolean wasAdded = false;
    if (seconds.contains(aSecond)) { return false; }
    seconds.add(aSecond);
    if (aSecond.indexOfFirst(this) != -1)
    {
      wasAdded = true;
    }
    else
    {
      wasAdded = aSecond.addFirst(this);
      if (!wasAdded)
      {
        seconds.remove(aSecond);
      }
    }
    return wasAdded;
  }
  /* Code from template association_RemoveMany */
  public boolean removeSecond(Second aSecond)
  {
    boolean wasRemoved = false;
    if (!seconds.contains(aSecond))
    {
      return wasRemoved;
    }

    int oldIndex = seconds.indexOf(aSecond);
    seconds.remove(oldIndex);
    if (aSecond.indexOfFirst(this) == -1)
    {
      wasRemoved = true;
    }
    else
    {
      wasRemoved = aSecond.removeFirst(this);
      if (!wasRemoved)
      {
        seconds.add(oldIndex,aSecond);
      }
    }
    return wasRemoved;
  }
  /* Code from template association_AddIndexControlFunctions */
  public boolean addSecondAt(Second aSecond, int index)
  {  
    boolean wasAdded = false;
    if(addSecond(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    }
    return wasAdded;
  }

  public boolean addOrMoveSecondAt(Second aSecond, int index)
  {
    boolean wasAdded = false;
    if(seconds.contains(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    } 
    else 
    {
      wasAdded = addSecondAt(aSecond, index);
    }
    return wasAdded;
  }

  public void delete()
  {
    ArrayList<Second> copyOfSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for(Second aSecond : copyOfSeconds)
    {
      aSecond.removeFirst(this);
    }
  }

  @Override
  public boolean setSecond(Second aSecond){
          return false;
  }

  @Override
  public boolean setSeconds(Second... newSeconds){
          return false;
  }

  @Override
  public boolean isNumberOfSecondsValid(){
          return false;
  }

}
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/



// line 1 "DuplicateInterfaceAssociationMethodsTest2.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private Second second;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First(Second aSecond)
  {
    boolean didAddSecond = setSecond(aSecond);
    if (!didAddSecond)
    {
      throw new RuntimeException("Unable to create first due to second. See http://manual.umple.org?RE002ViolationofAssociationMultiplicity.html");
    }
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetOne */
  public Second getSecond()
  {
    return second;
  }
  /* Code from template association_SetOneToMany */
  public boolean setSecond(Second aSecond)
  {
    boolean wasSet = false;
    if (aSecond == null)
    {
      return wasSet;
    }

    Second existingSecond = second;
    second = aSecond;
    if (existingSecond != null && !existingSecond.equals(aSecond))
    {
      existingSecond.removeFirst(this);
    }
    second.addFirst(this);
    wasSet = true;
    return wasSet;
  }

  public void delete()
  {
    Second placeholderSecond = second;
    this.second = null;
    if(placeholderSecond != null)
    {
      placeholderSecond.removeFirst(this);
    }
  }

  @Override
  public boolean addSecond(Second aSecond){
          return false;
  }

  @Override
  public List<Second> getSeconds(){
          return null;
  }

  @Override
  public boolean setSeconds(Second... newSeconds){
          return false;
  }

  @Override
  public int numberOfSeconds(){
          return 0;
  }

  @Override
  public boolean hasSeconds(){
          return false;
  }

  @Override
  public int indexOfSecond(Second second){
          return 0;
  }

  @Override
  public boolean isNumberOfSecondsValid(){
          return false;
  }

  @Override
  public boolean removeSecond(Second second){
          return false;
  }

}
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/


import java.util.*;

// line 1 "DuplicateInterfaceAssociationMethodsTest3.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private List<Second> seconds;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First(Second... allSeconds)
  {
    seconds = new ArrayList<Second>();
    boolean didAddSeconds = setSeconds(allSeconds);
    if (!didAddSeconds)
    {
      throw new RuntimeException("Unable to create First, must have 1 to 5 seconds. See http://manual.umple.org?RE002ViolationofAssociationMultiplicity.html");
    }
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetMany */
  public Second getSecond(int index)
  {
    Second aSecond = seconds.get(index);
    return aSecond;
  }

  public List<Second> getSeconds()
  {
    List<Second> newSeconds = Collections.unmodifiableList(seconds);
    return newSeconds;
  }

  public int numberOfSeconds()
  {
    int number = seconds.size();
    return number;
  }

  public boolean hasSeconds()
  {
    boolean has = seconds.size() > 0;
    return has;
  }

  public int indexOfSecond(Second aSecond)
  {
    int index = seconds.indexOf(aSecond);
    return index;
  }
  /* Code from template association_IsNumberOfValidMethod */
  public boolean isNumberOfSecondsValid()
  {
    boolean isValid = numberOfSeconds() >= minimumNumberOfSeconds() && numberOfSeconds() <= maximumNumberOfSeconds();
    return isValid;
  }
  /* Code from template association_MinimumNumberOfMethod */
  public static int minimumNumberOfSeconds()
  {
    return 1;
  }
  /* Code from template association_MaximumNumberOfMethod */
  public static int maximumNumberOfSeconds()
  {
    return 5;
  }
  /* Code from template association_AddManyToManyMethod */
  public boolean addSecond(Second aSecond)
  {
    boolean wasAdded = false;
    if (seconds.contains(aSecond)) { return false; }
    if (numberOfSeconds() >= maximumNumberOfSeconds())
    {
      return wasAdded;
    }

    seconds.add(aSecond);
    if (aSecond.indexOfFirst(this) != -1)
    {
      wasAdded = true;
    }
    else
    {
      wasAdded = aSecond.addFirst(this);
      if (!wasAdded)
      {
        seconds.remove(aSecond);
      }
    }
    return wasAdded;
  }
  /* Code from template association_AddMNToMany */
  public boolean removeSecond(Second aSecond)
  {
    boolean wasRemoved = false;
    if (!seconds.contains(aSecond))
    {
      return wasRemoved;
    }

    if (numberOfSeconds() <= minimumNumberOfSeconds())
    {
      return wasRemoved;
    }

    int oldIndex = seconds.indexOf(aSecond);
    seconds.remove(oldIndex);
    if (aSecond.indexOfFirst(this) == -1)
    {
      wasRemoved = true;
    }
    else
    {
      wasRemoved = aSecond.removeFirst(this);
      if (!wasRemoved)
      {
        seconds.add(oldIndex,aSecond);
      }
    }
    return wasRemoved;
  }
  /* Code from template association_SetMNToMany */
  public boolean setSeconds(Second... newSeconds)
  {
    boolean wasSet = false;
    ArrayList<Second> verifiedSeconds = new ArrayList<Second>();
    for (Second aSecond : newSeconds)
    {
      if (verifiedSeconds.contains(aSecond))
      {
        continue;
      }
      verifiedSeconds.add(aSecond);
    }

    if (verifiedSeconds.size() != newSeconds.length || verifiedSeconds.size() < minimumNumberOfSeconds() || verifiedSeconds.size() > maximumNumberOfSeconds())
    {
      return wasSet;
    }

    ArrayList<Second> oldSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for (Second aNewSecond : verifiedSeconds)
    {
      seconds.add(aNewSecond);
      if (oldSeconds.contains(aNewSecond))
      {
        oldSeconds.remove(aNewSecond);
      }
      else
      {
        aNewSecond.addFirst(this);
      }
    }

    for (Second anOldSecond : oldSeconds)
    {
      anOldSecond.removeFirst(this);
    }
    wasSet = true;
    return wasSet;
  }
  /* Code from template association_AddIndexControlFunctions */
  public boolean addSecondAt(Second aSecond, int index)
  {  
    boolean wasAdded = false;
    if(addSecond(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    }
    return wasAdded;
  }

  public boolean addOrMoveSecondAt(Second aSecond, int index)
  {
    boolean wasAdded = false;
    if(seconds.contains(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    } 
    else 
    {
      wasAdded = addSecondAt(aSecond, index);
    }
    return wasAdded;
  }

  public void delete()
  {
    ArrayList<Second> copyOfSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for(Second aSecond : copyOfSeconds)
    {
      aSecond.removeFirst(this);
    }
  }

  @Override
  public boolean setSecond(Second aSecond){
          return false;
  }

}
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/


import java.util.*;

// line 1 "DuplicateInterfaceAssociationMethodsTest4.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private List<Second> seconds;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First(Second... allSeconds)
  {
    seconds = new ArrayList<Second>();
    boolean didAddSeconds = setSeconds(allSeconds);
    if (!didAddSeconds)
    {
      throw new RuntimeException("Unable to create First, must have at least 1 seconds. See http://manual.umple.org?RE002ViolationofAssociationMultiplicity.html");
    }
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetMany */
  public Second getSecond(int index)
  {
    Second aSecond = seconds.get(index);
    return aSecond;
  }

  public List<Second> getSeconds()
  {
    List<Second> newSeconds = Collections.unmodifiableList(seconds);
    return newSeconds;
  }

  public int numberOfSeconds()
  {
    int number = seconds.size();
    return number;
  }

  public boolean hasSeconds()
  {
    boolean has = seconds.size() > 0;
    return has;
  }

  public int indexOfSecond(Second aSecond)
  {
    int index = seconds.indexOf(aSecond);
    return index;
  }
  /* Code from template association_IsNumberOfValidMethod */
  public boolean isNumberOfSecondsValid()
  {
    boolean isValid = numberOfSeconds() >= minimumNumberOfSeconds();
    return isValid;
  }
  /* Code from template association_MinimumNumberOfMethod */
  public static int minimumNumberOfSeconds()
  {
    return 1;
  }
  /* Code from template association_AddManyToManyMethod */
  public boolean addSecond(Second aSecond)
  {
    boolean wasAdded = false;
    if (seconds.contains(aSecond)) { return false; }
    seconds.add(aSecond);
    if (aSecond.indexOfFirst(this) != -1)
    {
      wasAdded = true;
    }
    else
    {
      wasAdded = aSecond.addFirst(this);
      if (!wasAdded)
      {
        seconds.remove(aSecond);
      }
    }
    return wasAdded;
  }
  /* Code from template association_AddMStarToMany */
  public boolean removeSecond(Second aSecond)
  {
    boolean wasRemoved = false;
    if (!seconds.contains(aSecond))
    {
      return wasRemoved;
    }

    if (numberOfSeconds() <= minimumNumberOfSeconds())
    {
      return wasRemoved;
    }

    int oldIndex = seconds.indexOf(aSecond);
    seconds.remove(oldIndex);
    if (aSecond.indexOfFirst(this) == -1)
    {
      wasRemoved = true;
    }
    else
    {
      wasRemoved = aSecond.removeFirst(this);
      if (!wasRemoved)
      {
        seconds.add(oldIndex,aSecond);
      }
    }
    return wasRemoved;
  }
  /* Code from template association_SetMStarToMany */
  public boolean setSeconds(Second... newSeconds)
  {
    boolean wasSet = false;
    ArrayList<Second> verifiedSeconds = new ArrayList<Second>();
    for (Second aSecond : newSeconds)
    {
      if (verifiedSeconds.contains(aSecond))
      {
        continue;
      }
      verifiedSeconds.add(aSecond);
    }

    if (verifiedSeconds.size() != newSeconds.length || verifiedSeconds.size() < minimumNumberOfSeconds())
    {
      return wasSet;
    }

    ArrayList<Second> oldSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for (Second aNewSecond : verifiedSeconds)
    {
      seconds.add(aNewSecond);
      if (oldSeconds.contains(aNewSecond))
      {
        oldSeconds.remove(aNewSecond);
      }
      else
      {
        aNewSecond.addFirst(this);
      }
    }

    for (Second anOldSecond : oldSeconds)
    {
      anOldSecond.removeFirst(this);
    }
    wasSet = true;
    return wasSet;
  }
  /* Code from template association_AddIndexControlFunctions */
  public boolean addSecondAt(Second aSecond, int index)
  {  
    boolean wasAdded = false;
    if(addSecond(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    }
    return wasAdded;
  }

  public boolean addOrMoveSecondAt(Second aSecond, int index)
  {
    boolean wasAdded = false;
    if(seconds.contains(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    } 
    else 
    {
      wasAdded = addSecondAt(aSecond, index);
    }
    return wasAdded;
  }

  public void delete()
  {
    ArrayList<Second> copyOfSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for(Second aSecond : copyOfSeconds)
    {
      aSecond.removeFirst(this);
    }
  }

  @Override
  public boolean setSecond(Second aSecond){
          return false;
  }

}
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/


import java.util.*;

// line 1 "DuplicateInterfaceAssociationMethodsTest5.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private List<Second> seconds;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First(Second... allSeconds)
  {
    seconds = new ArrayList<Second>();
    boolean didAddSeconds = setSeconds(allSeconds);
    if (!didAddSeconds)
    {
      throw new RuntimeException("Unable to create First, must have 5 seconds. See http://manual.umple.org?RE002ViolationofAssociationMultiplicity.html");
    }
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetMany */
  public Second getSecond(int index)
  {
    Second aSecond = seconds.get(index);
    return aSecond;
  }

  public List<Second> getSeconds()
  {
    List<Second> newSeconds = Collections.unmodifiableList(seconds);
    return newSeconds;
  }

  public int numberOfSeconds()
  {
    int number = seconds.size();
    return number;
  }

  public boolean hasSeconds()
  {
    boolean has = seconds.size() > 0;
    return has;
  }

  public int indexOfSecond(Second aSecond)
  {
    int index = seconds.indexOf(aSecond);
    return index;
  }
  /* Code from template association_IsNumberOfValidMethod */
  public boolean isNumberOfSecondsValid()
  {
    boolean isValid = numberOfSeconds() >= minimumNumberOfSeconds() && numberOfSeconds() <= maximumNumberOfSeconds();
    return isValid;
  }
  /* Code from template association_RequiredNumberOfMethod */
  public static int requiredNumberOfSeconds()
  {
    return 5;
  }
  /* Code from template association_MinimumNumberOfMethod */
  public static int minimumNumberOfSeconds()
  {
    return 5;
  }
  /* Code from template association_MaximumNumberOfMethod */
  public static int maximumNumberOfSeconds()
  {
    return 5;
  }
  /* Code from template association_AddManyToManyMethod */
  public boolean addSecond(Second aSecond)
  {
    boolean wasAdded = false;
    if (seconds.contains(aSecond)) { return false; }
    if (numberOfSeconds() >= maximumNumberOfSeconds())
    {
      return wasAdded;
    }

    seconds.add(aSecond);
    if (aSecond.indexOfFirst(this) != -1)
    {
      wasAdded = true;
    }
    else
    {
      wasAdded = aSecond.addFirst(this);
      if (!wasAdded)
      {
        seconds.remove(aSecond);
      }
    }
    return wasAdded;
  }
  /* Code from template association_AddMNToMany */
  public boolean removeSecond(Second aSecond)
  {
    boolean wasRemoved = false;
    if (!seconds.contains(aSecond))
    {
      return wasRemoved;
    }

    if (numberOfSeconds() <= minimumNumberOfSeconds())
    {
      return wasRemoved;
    }

    int oldIndex = seconds.indexOf(aSecond);
    seconds.remove(oldIndex);
    if (aSecond.indexOfFirst(this) == -1)
    {
      wasRemoved = true;
    }
    else
    {
      wasRemoved = aSecond.removeFirst(this);
      if (!wasRemoved)
      {
        seconds.add(oldIndex,aSecond);
      }
    }
    return wasRemoved;
  }
  /* Code from template association_SetMNToMany */
  public boolean setSeconds(Second... newSeconds)
  {
    boolean wasSet = false;
    ArrayList<Second> verifiedSeconds = new ArrayList<Second>();
    for (Second aSecond : newSeconds)
    {
      if (verifiedSeconds.contains(aSecond))
      {
        continue;
      }
      verifiedSeconds.add(aSecond);
    }

    if (verifiedSeconds.size() != newSeconds.length || verifiedSeconds.size() < minimumNumberOfSeconds() || verifiedSeconds.size() > maximumNumberOfSeconds())
    {
      return wasSet;
    }

    ArrayList<Second> oldSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for (Second aNewSecond : verifiedSeconds)
    {
      seconds.add(aNewSecond);
      if (oldSeconds.contains(aNewSecond))
      {
        oldSeconds.remove(aNewSecond);
      }
      else
      {
        aNewSecond.addFirst(this);
      }
    }

    for (Second anOldSecond : oldSeconds)
    {
      anOldSecond.removeFirst(this);
    }
    wasSet = true;
    return wasSet;
  }

  public void delete()
  {
    ArrayList<Second> copyOfSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for(Second aSecond : copyOfSeconds)
    {
      aSecond.removeFirst(this);
    }
  }

  @Override
  public boolean setSecond(Second aSecond){
          return false;
  }

}
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/


import java.util.*;

// line 1 "DuplicateInterfaceAssociationMethodsTest6.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private List<Second> seconds;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First()
  {
    seconds = new ArrayList<Second>();
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetMany */
  public Second getSecond(int index)
  {
    Second aSecond = seconds.get(index);
    return aSecond;
  }

  public List<Second> getSeconds()
  {
    List<Second> newSeconds = Collections.unmodifiableList(seconds);
    return newSeconds;
  }

  public int numberOfSeconds()
  {
    int number = seconds.size();
    return number;
  }

  public boolean hasSeconds()
  {
    boolean has = seconds.size() > 0;
    return has;
  }

  public int indexOfSecond(Second aSecond)
  {
    int index = seconds.indexOf(aSecond);
    return index;
  }
  /* Code from template association_MinimumNumberOfMethod */
  public static int minimumNumberOfSeconds()
  {
    return 0;
  }
  /* Code from template association_MaximumNumberOfMethod */
  public static int maximumNumberOfSeconds()
  {
    return 5;
  }
  /* Code from template association_AddManyToManyMethod */
  public boolean addSecond(Second aSecond)
  {
    boolean wasAdded = false;
    if (seconds.contains(aSecond)) { return false; }
    if (numberOfSeconds() >= maximumNumberOfSeconds())
    {
      return wasAdded;
    }

    seconds.add(aSecond);
    if (aSecond.indexOfFirst(this) != -1)
    {
      wasAdded = true;
    }
    else
    {
      wasAdded = aSecond.addFirst(this);
      if (!wasAdded)
      {
        seconds.remove(aSecond);
      }
    }
    return wasAdded;
  }
  /* Code from template association_RemoveMany */
  public boolean removeSecond(Second aSecond)
  {
    boolean wasRemoved = false;
    if (!seconds.contains(aSecond))
    {
      return wasRemoved;
    }

    int oldIndex = seconds.indexOf(aSecond);
    seconds.remove(oldIndex);
    if (aSecond.indexOfFirst(this) == -1)
    {
      wasRemoved = true;
    }
    else
    {
      wasRemoved = aSecond.removeFirst(this);
      if (!wasRemoved)
      {
        seconds.add(oldIndex,aSecond);
      }
    }
    return wasRemoved;
  }
  /* Code from template association_SetOptionalNToMany */
  public boolean setSeconds(Second... newSeconds)
  {
    boolean wasSet = false;
    ArrayList<Second> verifiedSeconds = new ArrayList<Second>();
    for (Second aSecond : newSeconds)
    {
      if (verifiedSeconds.contains(aSecond))
      {
        continue;
      }
      verifiedSeconds.add(aSecond);
    }

    if (verifiedSeconds.size() != newSeconds.length || verifiedSeconds.size() > maximumNumberOfSeconds())
    {
      return wasSet;
    }

    ArrayList<Second> oldSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for (Second aNewSecond : verifiedSeconds)
    {
      seconds.add(aNewSecond);
      if (oldSeconds.contains(aNewSecond))
      {
        oldSeconds.remove(aNewSecond);
      }
      else
      {
        aNewSecond.addFirst(this);
      }
    }

    for (Second anOldSecond : oldSeconds)
    {
      anOldSecond.removeFirst(this);
    }
    wasSet = true;
    return wasSet;
  }
  /* Code from template association_AddIndexControlFunctions */
  public boolean addSecondAt(Second aSecond, int index)
  {  
    boolean wasAdded = false;
    if(addSecond(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    }
    return wasAdded;
  }

  public boolean addOrMoveSecondAt(Second aSecond, int index)
  {
    boolean wasAdded = false;
    if(seconds.contains(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    } 
    else 
    {
      wasAdded = addSecondAt(aSecond, index);
    }
    return wasAdded;
  }

  public void delete()
  {
    ArrayList<Second> copyOfSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for(Second aSecond : copyOfSeconds)
    {
      aSecond.removeFirst(this);
    }
  }

  @Override
  public boolean setSecond(Second aSecond){
          return false;
  }

  @Override
  public boolean isNumberOfSecondsValid(){
          return false;
  }

}
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/


import java.util.*;

// line 1 "DuplicateInterfaceAssociationMethodsTest7.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private List<Second> seconds;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First()
  {
    seconds = new ArrayList<Second>();
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetMany */
  public Second getSecond(int index)
  {
    Second aSecond = seconds.get(index);
    return aSecond;
  }

  public List<Second> getSeconds()
  {
    List<Second> newSeconds = Collections.unmodifiableList(seconds);
    return newSeconds;
  }

  public int numberOfSeconds()
  {
    int number = seconds.size();
    return number;
  }

  public boolean hasSeconds()
  {
    boolean has = seconds.size() > 0;
    return has;
  }

  public int indexOfSecond(Second aSecond)
  {
    int index = seconds.indexOf(aSecond);
    return index;
  }
  /* Code from template association_MinimumNumberOfMethod */
  public static int minimumNumberOfSeconds()
  {
    return 0;
  }
  /* Code from template association_AddManyToManyMethod */
  public boolean addSecond(Second aSecond)
  {
    boolean wasAdded = false;
    if (seconds.contains(aSecond)) { return false; }
    seconds.add(aSecond);
    if (aSecond.indexOfFirst(this) != -1)
    {
      wasAdded = true;
    }
    else
    {
      wasAdded = aSecond.addFirst(this);
      if (!wasAdded)
      {
        seconds.remove(aSecond);
      }
    }
    return wasAdded;
  }
  /* Code from template association_RemoveMany */
  public boolean removeSecond(Second aSecond)
  {
    boolean wasRemoved = false;
    if (!seconds.contains(aSecond))
    {
      return wasRemoved;
    }

    int oldIndex = seconds.indexOf(aSecond);
    seconds.remove(oldIndex);
    if (aSecond.indexOfFirst(this) == -1)
    {
      wasRemoved = true;
    }
    else
    {
      wasRemoved = aSecond.removeFirst(this);
      if (!wasRemoved)
      {
        seconds.add(oldIndex,aSecond);
      }
    }
    return wasRemoved;
  }
  /* Code from template association_AddIndexControlFunctions */
  public boolean addSecondAt(Second aSecond, int index)
  {  
    boolean wasAdded = false;
    if(addSecond(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    }
    return wasAdded;
  }

  public boolean addOrMoveSecondAt(Second aSecond, int index)
  {
    boolean wasAdded = false;
    if(seconds.contains(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    } 
    else 
    {
      wasAdded = addSecondAt(aSecond, index);
    }
    return wasAdded;
  }

  public void delete()
  {
    ArrayList<Second> copyOfSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for(Second aSecond : copyOfSeconds)
    {
      aSecond.removeFirst(this);
    }
  }

  @Override
  public boolean setSecond(Second aSecond){
          return false;
  }

  @Override
  public boolean setSeconds(Second... newSeconds){
          return false;
  }

  @Override
  public boolean isNumberOfSecondsValid(){
          return false;
  }

}
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/



// line 1 "DuplicateInterfaceAssociationMethodsTest8.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private Second second;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First(Second aSecond)
  {
    if (aSecond == null || aSecond.getFirst() != null)
    {
      throw new RuntimeException("Unable to create First due to aSecond. See http://manual.umple.org?RE002ViolationofAssociationMultiplicity.html");
    }
    second = aSecond;
  }

  public First()
  {
    second = new Second(this);
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetOne */
  public Second getSecond()
  {
    return second;
  }

  public void delete()
  {
    Second existingSecond = second;
    second = null;
    if (existingSecond != null)
    {
      existingSecond.delete();
    }
  }

  @Override
  public boolean addSecond(Second aSecond){
          return false;
  }

  @Override
  public List<Second> getSeconds(){
          return null;
  }

  @Override
  public boolean setSecond(Second aSecond){
          return false;
  }

  @Override
  public boolean setSeconds(Second... newSeconds){
          return false;
  }

  @Override
  public int numberOfSeconds(){
          return 0;
  }

  @Override
  public boolean hasSeconds(){
          return false;
  }

  @Override
  public int indexOfSecond(Second second){
          return 0;
  }

  @Override
  public boolean isNumberOfSecondsValid(){
          return false;
  }

  @Override
  public boolean removeSecond(Second second){
          return false;
  }

}
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/


import java.util.*;

// line 1 "DuplicateInterfaceAssociationMethodsTest9.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private List<Second> seconds;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First()
  {
    seconds = new ArrayList<Second>();
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetMany */
  public Second getSecond(int index)
  {
    Second aSecond = seconds.get(index);
    return aSecond;
  }

  public List<Second> getSeconds()
  {
    List<Second> newSeconds = Collections.unmodifiableList(seconds);
    return newSeconds;
  }

  public int numberOfSeconds()
  {
    int number = seconds.size();
    return number;
  }

  public boolean hasSeconds()
  {
    boolean has = seconds.size() > 0;
    return has;
  }

  public int indexOfSecond(Second aSecond)
  {
    int index = seconds.indexOf(aSecond);
    return index;
  }
  /* Code from template association_IsNumberOfValidMethod */
  public boolean isNumberOfSecondsValid()
  {
    boolean isValid = numberOfSeconds() >= minimumNumberOfSeconds() && numberOfSeconds() <= maximumNumberOfSeconds();
    return isValid;
  }
  /* Code from template association_RequiredNumberOfMethod */
  public static int requiredNumberOfSeconds()
  {
    return 5;
  }
  /* Code from template association_MinimumNumberOfMethod */
  public static int minimumNumberOfSeconds()
  {
    return 5;
  }
  /* Code from template association_MaximumNumberOfMethod */
  public static int maximumNumberOfSeconds()
  {
    return 5;
  }
  /* Code from template association_AddManyToManyMethod */
  public boolean addSecond(Second aSecond)
  {
    boolean wasAdded = false;
    if (seconds.contains(aSecond)) { return false; }
    if (numberOfSeconds() >= maximumNumberOfSeconds())
    {
      return wasAdded;
    }

    seconds.add(aSecond);
    if (aSecond.indexOfFirst(this) != -1)
    {
      wasAdded = true;
    }
    else
    {
      wasAdded = aSecond.addFirst(this);
      if (!wasAdded)
      {
        seconds.remove(aSecond);
      }
    }
    return wasAdded;
  }
  /* Code from template association_AddMNToMany */
  public boolean removeSecond(Second aSecond)
  {
    boolean wasRemoved = false;
    if (!seconds.contains(aSecond))
    {
      return wasRemoved;
    }

    if (numberOfSeconds() <= minimumNumberOfSeconds())
    {
      return wasRemoved;
    }

    int oldIndex = seconds.indexOf(aSecond);
    seconds.remove(oldIndex);
    if (aSecond.indexOfFirst(this) == -1)
    {
      wasRemoved = true;
    }
    else
    {
      wasRemoved = aSecond.removeFirst(this);
      if (!wasRemoved)
      {
        seconds.add(oldIndex,aSecond);
      }
    }
    return wasRemoved;
  }
  /* Code from template association_SetMNToMany */
  public boolean setSeconds(Second... newSeconds)
  {
    boolean wasSet = false;
    ArrayList<Second> verifiedSeconds = new ArrayList<Second>();
    for (Second aSecond : newSeconds)
    {
      if (verifiedSeconds.contains(aSecond))
      {
        continue;
      }
      verifiedSeconds.add(aSecond);
    }

    if (verifiedSeconds.size() != newSeconds.length || verifiedSeconds.size() < minimumNumberOfSeconds() || verifiedSeconds.size() > maximumNumberOfSeconds())
    {
      return wasSet;
    }

    ArrayList<Second> oldSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for (Second aNewSecond : verifiedSeconds)
    {
      seconds.add(aNewSecond);
      if (oldSeconds.contains(aNewSecond))
      {
        oldSeconds.remove(aNewSecond);
      }
      else
      {
        aNewSecond.addFirst(this);
      }
    }

    for (Second anOldSecond : oldSeconds)
    {
      anOldSecond.removeFirst(this);
    }
    wasSet = true;
    return wasSet;
  }

  public void delete()
  {
    ArrayList<Second> copyOfSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for(Second aSecond : copyOfSeconds)
    {
      if (aSecond.numberOfFirsts() <= Second.minimumNumberOfFirsts())
      {
        aSecond.delete();
      }
      else
      {
        aSecond.removeFirst(this);
      }
    }
  }

  @Override
  public boolean setSecond(Second aSecond){
          return false;
  }

}
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/


import java.util.*;

// line 1 "DuplicateInterfaceAssociationMethodsTest10.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private List<Second> seconds;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First()
  {
    seconds = new ArrayList<Second>();
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetMany */
  public Second getSecond(int index)
  {
    Second aSecond = seconds.get(index);
    return aSecond;
  }

  public List<Second> getSeconds()
  {
    List<Second> newSeconds = Collections.unmodifiableList(seconds);
    return newSeconds;
  }

  public int numberOfSeconds()
  {
    int number = seconds.size();
    return number;
  }

  public boolean hasSeconds()
  {
    boolean has = seconds.size() > 0;
    return has;
  }

  public int indexOfSecond(Second aSecond)
  {
    int index = seconds.indexOf(aSecond);
    return index;
  }
  /* Code from template association_IsNumberOfValidMethod */
  public boolean isNumberOfSecondsValid()
  {
    boolean isValid = numberOfSeconds() >= minimumNumberOfSeconds() && numberOfSeconds() <= maximumNumberOfSeconds();
    return isValid;
  }
  /* Code from template association_MinimumNumberOfMethod */
  public static int minimumNumberOfSeconds()
  {
    return 2;
  }
  /* Code from template association_MaximumNumberOfMethod */
  public static int maximumNumberOfSeconds()
  {
    return 4;
  }
  /* Code from template association_AddManyToManyMethod */
  public boolean addSecond(Second aSecond)
  {
    boolean wasAdded = false;
    if (seconds.contains(aSecond)) { return false; }
    if (numberOfSeconds() >= maximumNumberOfSeconds())
    {
      return wasAdded;
    }

    seconds.add(aSecond);
    if (aSecond.indexOfFirst(this) != -1)
    {
      wasAdded = true;
    }
    else
    {
      wasAdded = aSecond.addFirst(this);
      if (!wasAdded)
      {
        seconds.remove(aSecond);
      }
    }
    return wasAdded;
  }
  /* Code from template association_AddMNToMany */
  public boolean removeSecond(Second aSecond)
  {
    boolean wasRemoved = false;
    if (!seconds.contains(aSecond))
    {
      return wasRemoved;
    }

    if (numberOfSeconds() <= minimumNumberOfSeconds())
    {
      return wasRemoved;
    }

    int oldIndex = seconds.indexOf(aSecond);
    seconds.remove(oldIndex);
    if (aSecond.indexOfFirst(this) == -1)
    {
      wasRemoved = true;
    }
    else
    {
      wasRemoved = aSecond.removeFirst(this);
      if (!wasRemoved)
      {
        seconds.add(oldIndex,aSecond);
      }
    }
    return wasRemoved;
  }
  /* Code from template association_SetMNToMany */
  public boolean setSeconds(Second... newSeconds)
  {
    boolean wasSet = false;
    ArrayList<Second> verifiedSeconds = new ArrayList<Second>();
    for (Second aSecond : newSeconds)
    {
      if (verifiedSeconds.contains(aSecond))
      {
        continue;
      }
      verifiedSeconds.add(aSecond);
    }

    if (verifiedSeconds.size() != newSeconds.length || verifiedSeconds.size() < minimumNumberOfSeconds() || verifiedSeconds.size() > maximumNumberOfSeconds())
    {
      return wasSet;
    }

    ArrayList<Second> oldSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for (Second aNewSecond : verifiedSeconds)
    {
      seconds.add(aNewSecond);
      if (oldSeconds.contains(aNewSecond))
      {
        oldSeconds.remove(aNewSecond);
      }
      else
      {
        aNewSecond.addFirst(this);
      }
    }

    for (Second anOldSecond : oldSeconds)
    {
      anOldSecond.removeFirst(this);
    }
    wasSet = true;
    return wasSet;
  }
  /* Code from template association_AddIndexControlFunctions */
  public boolean addSecondAt(Second aSecond, int index)
  {  
    boolean wasAdded = false;
    if(addSecond(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    }
    return wasAdded;
  }

  public boolean addOrMoveSecondAt(Second aSecond, int index)
  {
    boolean wasAdded = false;
    if(seconds.contains(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    } 
    else 
    {
      wasAdded = addSecondAt(aSecond, index);
    }
    return wasAdded;
  }

  public void delete()
  {
    ArrayList<Second> copyOfSeconds = new ArrayList<Second>(seconds);
    seconds.clear();
    for(Second aSecond : copyOfSeconds)
    {
      if (aSecond.numberOfFirsts() <= Second.minimumNumberOfFirsts())
      {
        aSecond.delete();
      }
      else
      {
        aSecond.removeFirst(this);
      }
    }
  }

  @Override
  public boolean setSecond(Second aSecond){
          return false;
  }

}
/*PLEASE DO NOT EDIT THIS CODE*/
/*This code was generated using the UMPLE 1.33.0.6934.a386b0a58 modeling language!*/


import java.util.*;

// line 1 "DuplicateInterfaceAssociationMethodsTest11.ump"
public class First implements I
{

  //------------------------
  // MEMBER VARIABLES
  //------------------------

  //First Associations
  private List<Second> seconds;

  //------------------------
  // CONSTRUCTOR
  //------------------------

  public First()
  {
    seconds = new ArrayList<Second>();
  }

  //------------------------
  // INTERFACE
  //------------------------
  /* Code from template association_GetMany */
  public Second getSecond(int index)
  {
    Second aSecond = seconds.get(index);
    return aSecond;
  }

  public List<Second> getSeconds()
  {
    List<Second> newSeconds = Collections.unmodifiableList(seconds);
    return newSeconds;
  }

  public int numberOfSeconds()
  {
    int number = seconds.size();
    return number;
  }

  public boolean hasSeconds()
  {
    boolean has = seconds.size() > 0;
    return has;
  }

  public int indexOfSecond(Second aSecond)
  {
    int index = seconds.indexOf(aSecond);
    return index;
  }
  /* Code from template association_IsNumberOfValidMethod */
  public boolean isNumberOfSecondsValid()
  {
    boolean isValid = numberOfSeconds() >= minimumNumberOfSeconds() && numberOfSeconds() <= maximumNumberOfSeconds();
    return isValid;
  }
  /* Code from template association_MinimumNumberOfMethod */
  public static int minimumNumberOfSeconds()
  {
    return 1;
  }
  /* Code from template association_MaximumNumberOfMethod */
  public static int maximumNumberOfSeconds()
  {
    return 4;
  }
  /* Code from template association_AddMNToOnlyOne */
  public Second addSecond()
  {
    if (numberOfSeconds() >= maximumNumberOfSeconds())
    {
      return null;
    }
    else
    {
      return new Second(this);
    }
  }

  public boolean addSecond(Second aSecond)
  {
    boolean wasAdded = false;
    if (seconds.contains(aSecond)) { return false; }
    if (numberOfSeconds() >= maximumNumberOfSeconds())
    {
      return wasAdded;
    }

    First existingFirst = aSecond.getFirst();
    boolean isNewFirst = existingFirst != null && !this.equals(existingFirst);

    if (isNewFirst && existingFirst.numberOfSeconds() <= minimumNumberOfSeconds())
    {
      return wasAdded;
    }

    if (isNewFirst)
    {
      aSecond.setFirst(this);
    }
    else
    {
      seconds.add(aSecond);
    }
    wasAdded = true;
    return wasAdded;
  }

  public boolean removeSecond(Second aSecond)
  {
    boolean wasRemoved = false;
    //Unable to remove aSecond, as it must always have a first
    if (this.equals(aSecond.getFirst()))
    {
      return wasRemoved;
    }

    //first already at minimum (1)
    if (numberOfSeconds() <= minimumNumberOfSeconds())
    {
      return wasRemoved;
    }
    seconds.remove(aSecond);
    wasRemoved = true;
    return wasRemoved;
  }
  /* Code from template association_AddIndexControlFunctions */
  public boolean addSecondAt(Second aSecond, int index)
  {  
    boolean wasAdded = false;
    if(addSecond(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    }
    return wasAdded;
  }

  public boolean addOrMoveSecondAt(Second aSecond, int index)
  {
    boolean wasAdded = false;
    if(seconds.contains(aSecond))
    {
      if(index < 0 ) { index = 0; }
      if(index > numberOfSeconds()) { index = numberOfSeconds() - 1; }
      seconds.remove(aSecond);
      seconds.add(index, aSecond);
      wasAdded = true;
    } 
    else 
    {
      wasAdded = addSecondAt(aSecond, index);
    }
    return wasAdded;
  }

  public void delete()
  {
    for(int i=seconds.size(); i > 0; i--)
    {
      Second aSecond = seconds.get(i - 1);
      aSecond.delete();
    }
  }

  @Override
  public boolean setSecond(Second aSecond){
          return false;
  }

  @Override
  public boolean setSeconds(Second... newSeconds){
          return false;
  }

}