Initial AMP Contribution per CQ 3295.
diff --git a/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/.classpath b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/.classpath
new file mode 100644
index 0000000..8a8f166
--- /dev/null
+++ b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/.classpath
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>

+<classpath>

+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>

+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>

+	<classpathentry kind="src" path="src"/>

+	<classpathentry kind="output" path="bin"/>

+</classpath>

diff --git a/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/.project b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/.project
new file mode 100644
index 0000000..f1d8317
--- /dev/null
+++ b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.amp.axf.ide.test</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/META-INF/MANIFEST.MF b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..1a5c7fb
--- /dev/null
+++ b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/META-INF/MANIFEST.MF
@@ -0,0 +1,21 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: Test AXF IDE
+Bundle-SymbolicName: org.eclipse.amp.axf.ide.test;singleton:=true
+Bundle-Version: 0.2.0
+Bundle-Activator: org.eclipse.axf.ide.test.Activator
+Bundle-Vendor: eclipse.org
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.amp.axf.ide;bundle-version="0.2.0",
+ org.eclipse.swtbot.eclipse.finder;bundle-version="2.0.0",
+ org.eclipse.swtbot.swt.finder;bundle-version="2.0.0",
+ org.junit4;bundle-version="4.5.0",
+ org.eclipse.core.resources;bundle-version="3.5.0",
+ org.eclipse.amp.axf.core;bundle-version="0.2.0",
+ org.eclipse.amp.axf.views;bundle-version="0.2.0",
+ org.eclipse.amp.agf.chart;bundle-version="0.2.0",
+ org.eclipse.amp.agf.core;bundle-version="0.2.0",
+ org.eclipse.amp.agf.ide;bundle-version="0.2.0"
+Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-ActivationPolicy: lazy
diff --git a/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/build.properties b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/build.properties
new file mode 100644
index 0000000..5791d48
--- /dev/null
+++ b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               res/
diff --git a/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/res/TestModel.metaabm b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/res/TestModel.metaabm
new file mode 100644
index 0000000..6f483f5
--- /dev/null
+++ b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/res/TestModel.metaabm
@@ -0,0 +1,237 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<metaabm:SContext xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:act="http://metaabm.org/act" xmlns:function="http://metaabm.org/function" xmlns:metaabm="http://metaabm.org/structure" label="Demographic Prisoner_s Dilemma" ID="demographicPrisoner_sDilemma" pluralLabel="Demographic Prisoner_s Dilemmas">
+  <attributes label="Player Count" ID="playerCount" pluralLabel="Player Counts" description="The number of players to create." sType="INTEGER" defaultValue="100"/>
+  <attributes label="Minimum Wealth" ID="minimumWealth" pluralLabel="Minimum Wealths" sType="INTEGER" defaultValue="20"/>
+  <attributes label="Maximum Wealth" ID="maximumWealth" pluralLabel="Maximum Wealths" sType="INTEGER" defaultValue="100"/>
+  <attributes label="Maximum Age" ID="maximumAge" pluralLabel="Maximum Ages" sType="INTEGER" defaultValue="100"/>
+  <attributes label="Payoff Cooperate Cooperate" ID="payoffCC" pluralLabel="Payoff Cooperate Cooperates" description="The change in wealth for a player when playing cooperate against cooperate." sType="INTEGER" defaultValue="2"/>
+  <attributes label="Payoff Cooperate Defect" ID="payoffCD" pluralLabel="Payoff Cooperate Defects" description="The change in wealth for a player when playing cooperate against defect." sType="INTEGER" defaultValue="-6"/>
+  <attributes label="Payoff Defect Cooperate" ID="payoffDC" pluralLabel="Payoff Defect Cooperates" description="The change in wealth for a player when playing defect against cooperate." sType="INTEGER" defaultValue="6"/>
+  <attributes label="Payoff Defect Defect" ID="payoffDD" pluralLabel="Payoff Defect Defects" description="The change in wealth for a player when both players defect." sType="INTEGER" defaultValue="-5"/>
+  <attributes label="Fission Wealth" ID="fissionWealth" pluralLabel="Fission Wealths" description="The wealth level at which an agent can fission." sType="INTEGER" defaultValue="11"/>
+  <attributes label="Inheirited Wealth" ID="inheiritedWealth" pluralLabel="Inheirited Wealths" description="The wealth that is passed from parent to child." sType="INTEGER" defaultValue="6"/>
+  <attributes label="Initial Wealth" ID="initialWealth" pluralLabel="Initial Wealths" description="The wealth initially assigned to an agent at the beginning of model run." sType="INTEGER" defaultValue="6"/>
+  <attributes label="Mutation Rate" ID="mutationRate" pluralLabel="Mutation Rates" description="The probabaility that a given agent will change strategies in a given period, expressed as a value from 0.0 to 1.0." sType="REAL" defaultValue=".1"/>
+  <attributes label="Death Age" ID="deathAge" pluralLabel="Death Ages" description="The number of periods before an agent will be removed from game when Die At Age rule is active." sType="INTEGER" defaultValue="100"/>
+  <attributes label="Birth Age" ID="birthAge" pluralLabel="Birth Ages" description="The actual age in years as determined by data set." sType="INTEGER" units="Years"/>
+  <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Acts">
+    <members xsi:type="act:ABuild" label="Build Demographic Prisonner's Dillema" ID="buildDemographicPrisonnersDillema" targets="//@rootActivity/@members[ID='createPlayers'] //@rootActivity/@members[ID='buildGrid']" selected="//@rootActivity/@members[ID='buildDemographicPrisonnersDillema']" agent="/" pluralLabel="Build Demographic Prisonner's Dillemas"/>
+    <members xsi:type="act:ACreateAgents" label="Create Players" ID="createPlayers" sources="//@rootActivity/@members[ID='buildDemographicPrisonnersDillema']" selected="//@rootActivity/@members[ID='buildDemographicPrisonnersDillema']" agent="//@agents[ID='player']" agentCount="//@attributes[ID='playerCount']"/>
+    <members xsi:type="act:ABuildGrid" label="Build Grid" ID="buildGrid" sources="//@rootActivity/@members[ID='buildDemographicPrisonnersDillema']" selected="//@rootActivity/@members[ID='buildDemographicPrisonnersDillema']" pluralLabel="Build Grids" agents="//@agents[ID='player']" projection="//@projections[ID='gameSpace']" fillAgent="//@agents[ID='playCell']"/>
+  </rootActivity>
+  <implementation package="edu.brook" className="DemographicPrisonersDilemma" basePath=""/>
+  <agents label="Player" ID="player" pluralLabel="Players">
+    <attributes label="Cooperate" ID="cooperate" pluralLabel="Cooperates" gatherData="true"/>
+    <attributes label="Age" ID="age" pluralLabel="Ages" sType="INTEGER" gatherData="true"/>
+    <attributes label="Wealth" ID="wealth" pluralLabel="Wealths" sType="INTEGER" gatherData="true"/>
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Acts">
+      <members xsi:type="act:AInitialize" label="Initialize" ID="initialize" targets="//@agents[ID='player']/@rootActivity/@members[ID='randomToMaxAge'] //@agents[ID='player']/@rootActivity/@members[ID='randomStrategy'] //@agents[ID='player']/@rootActivity/@members[ID='setWealthToInitialWealth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Initializes"/>
+      <members xsi:type="act:AInitialize" label="Move To Random Location" ID="moveToRandomLocation" targets="//@agents[ID='player']/@rootActivity/@members[ID='randomCell2']" selected="//@agents[ID='player']/@rootActivity/@members[ID='moveToRandomLocation']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Move To Random Locations"/>
+      <members xsi:type="act:AEvaluate" label="Random To Max Age" ID="randomToMaxAge" sources="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setRandomAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" value="//@attributes[ID='maximumAge']"/>
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomToLimit']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Random Age" ID="setRandomAge" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomToMaxAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" attribute="//@agents[ID='player']/@attributes[ID='age']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='randomToMaxAge']"/>
+      <members xsi:type="act:AEvaluate" label="Random Strategy" ID="randomStrategy" sources="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setRandomStrategy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomIs']"/>
+      </members>
+      <members xsi:type="act:ASelect" label="Random Neighbor" ID="randomNeighbor" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomWalk']" targets="//@agents[ID='player']/@rootActivity/@members[ID='neighbor'] //@agents[ID='player']/@rootActivity/@members[ID='available']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomWalk']" agent="//@agents[ID='playCell']" space="//@projections[ID='gameSpace']"/>
+      <members xsi:type="act:AQuery" label="Neighbor" ID="neighbor" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='availableNeighbor']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='neighbor']"/>
+      </members>
+      <members xsi:type="act:AMove" label="Move to Demographic Prisonners Dillema in Game Space" ID="movetoDemographicPrisonnersDillemainGameSpace" sources="//@agents[ID='player']/@rootActivity/@members[ID='availableNeighbor']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomWalk']" destination="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']"/>
+      <members xsi:type="act:ARule" label="Random Walk" ID="randomWalk" targets="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomWalk']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Random Walks"/>
+      <members xsi:type="act:ARule" label="Play Neighbor" ID="playNeighbor" targets="//@agents[ID='player']/@rootActivity/@members[ID='playerDefect'] //@agents[ID='player']/@rootActivity/@members[ID='playerCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Play Neighbors"/>
+      <members xsi:type="act:ASet" label="Set Random Strategy" ID="setRandomStrategy" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomStrategy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" attribute="//@agents[ID='player']/@attributes[ID='cooperate']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='randomStrategy']"/>
+      <members xsi:type="act:ASelect" label="Random Cell 2" ID="randomCell2" sources="//@agents[ID='player']/@rootActivity/@members[ID='moveToRandomLocation']" targets="//@agents[ID='player']/@rootActivity/@members[ID='spaceAvailable']" selected="//@agents[ID='player']/@rootActivity/@members[ID='moveToRandomLocation']" agent="//@agents[ID='playCell']" space="//@projections[ID='gameSpace']"/>
+      <members xsi:type="act:AMove" label="Move to Player in Game Spac" ID="movetoPlayerinGameSpac" sources="//@agents[ID='player']/@rootActivity/@members[ID='spaceAvailable']" selected="//@agents[ID='player']/@rootActivity/@members[ID='moveToRandomLocation']" destination="//@agents[ID='player']/@rootActivity/@members[ID='randomCell2']"/>
+      <members xsi:type="act:ARule" label="Update Age" ID="updateAge" targets="//@agents[ID='player']/@rootActivity/@members[ID='incrementAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='updateAge']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Update Ages" description="Increment the Age by One."/>
+      <members xsi:type="act:AEvaluate" label="Increment Age" ID="incrementAge" sources="//@agents[ID='player']/@rootActivity/@members[ID='updateAge']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setToCopyCopyCopyCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='updateAge']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='updateAge']" value="//@agents[ID='player']/@attributes[ID='age']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='increment']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set [?] To [?] Copy Copy Copy Copy" ID="setToCopyCopyCopyCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='incrementAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='updateAge']" attribute="//@agents[ID='player']/@attributes[ID='age']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='incrementAge']"/>
+      <members xsi:type="act:ARule" label="Fission Rule" ID="fissionRule" targets="//@agents[ID='player']/@rootActivity/@members[ID='wealthGreaterorEqualFissionWealth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Fission Rules"/>
+      <members xsi:type="act:ARule" label="Die At Age" ID="dieAtAge" targets="//@agents[ID='player']/@rootActivity/@members[ID='ageGreaterDeathAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Die At Ages"/>
+      <members xsi:type="act:AQuery" label="Age Greater Death Age" ID="ageGreaterDeathAge" sources="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']" targets="//@agents[ID='player']/@rootActivity/@members[ID='playerDieinDieAtAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']" value="//@agents[ID='player']/@attributes[ID='age']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']" value="//@attributes[ID='deathAge']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='greater']"/>
+      </members>
+      <members xsi:type="act:ADie" label="Player Die in Die At Age" ID="playerDieinDieAtAge" sources="//@agents[ID='player']/@rootActivity/@members[ID='ageGreaterDeathAge']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']" destination="//@agents[ID='player']/@rootActivity/@members[ID='dieAtAge']"/>
+      <members xsi:type="act:ARule" label="Die At Wealth 0" ID="dieAtWealth0" targets="//@agents[ID='player']/@rootActivity/@members[ID='wealthLesserLiteral0']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Die At Wealth 0s"/>
+      <members xsi:type="act:AQuery" label="Wealth Lesser Literal 0" ID="wealthLesserLiteral0" sources="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']" targets="//@agents[ID='player']/@rootActivity/@members[ID='playerDieinDieAtWealth0']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']" value="//@agents[ID='player']/@rootActivity/@members[ID='wealthLesserLiteral0']/@inputs.1/@literal">
+          <literal label="Literal 0" ID="literal0" valueLiteral="0"/>
+        </inputs>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='lesser']"/>
+      </members>
+      <members xsi:type="act:ADie" label="Player Die in Die At Wealth 0" ID="playerDieinDieAtWealth0" sources="//@agents[ID='player']/@rootActivity/@members[ID='wealthLesserLiteral0']" selected="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']" destination="//@agents[ID='player']/@rootActivity/@members[ID='dieAtWealth0']"/>
+      <members xsi:type="act:ASelect" label="Other Player" ID="otherPlayer" sources="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='spaceNeighborCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']"/>
+      <members xsi:type="act:AQuery" label="Space Available" ID="spaceAvailable" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomCell2']" targets="//@agents[ID='player']/@rootActivity/@members[ID='movetoPlayerinGameSpac']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomCell2']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Available" ID="available" sources="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='availableNeighbor']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Space Neighbor Copy" ID="spaceNeighborCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" targets="//@agents[ID='player']/@rootActivity/@members[ID='otherCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='otherDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='neighbor']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Available Neighbor" ID="availableNeighbor" sources="//@agents[ID='player']/@rootActivity/@members[ID='available'] //@agents[ID='player']/@rootActivity/@members[ID='neighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='movetoDemographicPrisonnersDillemainGameSpace']" selected="//@agents[ID='player']/@rootActivity/@members[ID='randomNeighbor']"/>
+      <members xsi:type="act:AQuery" label="Player Cooperate" ID="playerCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='bothCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='cooperateDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identity']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Other Cooperate" ID="otherCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='spaceNeighborCopy']" targets="//@agents[ID='player']/@rootActivity/@members[ID='bothCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='defectCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identity']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Other Defect" ID="otherDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='spaceNeighborCopy']" targets="//@agents[ID='player']/@rootActivity/@members[ID='cooperateDefect'] //@agents[ID='player']/@rootActivity/@members[ID='bothDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='not']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Player Defect" ID="playerDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" targets="//@agents[ID='player']/@rootActivity/@members[ID='defectCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='bothDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='not']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Both Cooperate" ID="bothCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='otherCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='playerCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']"/>
+      <members xsi:type="act:AAll" label="Defect Cooperate" ID="defectCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='otherCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='playerDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperate'] //@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']"/>
+      <members xsi:type="act:AAll" label="Cooperate Defect" ID="cooperateDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='otherDefect'] //@agents[ID='player']/@rootActivity/@members[ID='playerCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefect'] //@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']"/>
+      <members xsi:type="act:AAll" label="Both Defect" ID="bothDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='playerDefect'] //@agents[ID='player']/@rootActivity/@members[ID='otherDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefect'] //@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']"/>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Defect Cooperate" ID="valueWealthAddPayoffDefectCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='defectCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffDefectCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@attributes[ID='payoffDC']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Cooperate Cooperate" ID="valueWealthAddPayoffCooperateCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='bothCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffCooperateCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@attributes[ID='payoffCC']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Defect Defect" ID="valueWealthAddPayoffDefectDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='bothDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffDefectDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@attributes[ID='payoffDD']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Cooperate Defect" ID="valueWealthAddPayoffCooperateDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='cooperateDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffCooperateDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" value="//@attributes[ID='payoffCD']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Defect Cooperate" ID="setWealthToValueWealthAddPayoffDefectCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperate']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Defect Defect" ID="setWealthToValueWealthAddPayoffDefectDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefect']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Cooperate Cooperate" ID="setWealthToValueWealthAddPayoffCooperateCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperate']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Cooperate Defect" ID="setWealthToValueWealthAddPayoffCooperateDefect" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefect']" selected="//@agents[ID='player']/@rootActivity/@members[ID='playNeighbor']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefect']"/>
+      <members xsi:type="act:AQuery" label="Wealth Greater or Equal Fission Wealth" ID="wealthGreaterorEqualFissionWealth" sources="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" targets="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']" selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" value="//@attributes[ID='fissionWealth']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='greaterorEqual']"/>
+      </members>
+      <members xsi:type="act:ACreateAgents" label="Create Agents" ID="createAgents" sources="//@agents[ID='player']/@rootActivity/@members[ID='neighborAvailableforBirth']" targets="//@agents[ID='player']/@rootActivity/@members[ID='movetoPlayerinGameSpaceCopy'] //@agents[ID='player']/@rootActivity/@members[ID='valueRandomUnit'] //@agents[ID='player']/@rootActivity/@members[ID='wealthChildWealth'] //@agents[ID='player']/@rootActivity/@members[ID='setWealthToInheiritedWealth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']"/>
+      <members xsi:type="act:AQuery" label="Birth Neighbor" ID="birthNeighbor" sources="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']" targets="//@agents[ID='player']/@rootActivity/@members[ID='neighborAvailableforBirth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='neighbor']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Space Available Copy Copy" ID="spaceAvailableCopyCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']" targets="//@agents[ID='player']/@rootActivity/@members[ID='neighborAvailableforBirth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='spatial']/@functions[ID='available']"/>
+      </members>
+      <members xsi:type="act:AAll" label="Neighbor Available for Birth" ID="neighborAvailableforBirth" sources="//@agents[ID='player']/@rootActivity/@members[ID='birthNeighbor'] //@agents[ID='player']/@rootActivity/@members[ID='spaceAvailableCopyCopy']" targets="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" selected="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']"/>
+      <members xsi:type="act:AMove" label="Move to Player in Game Space Copy" ID="movetoPlayerinGameSpaceCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" destination="//@agents[ID='player']/@rootActivity/@members[ID='birthLocation']"/>
+      <members xsi:type="act:ASelect" label="Birth Location" ID="birthLocation" sources="//@agents[ID='player']/@rootActivity/@members[ID='wealthGreaterorEqualFissionWealth']" targets="//@agents[ID='player']/@rootActivity/@members[ID='birthNeighbor'] //@agents[ID='player']/@rootActivity/@members[ID='spaceAvailableCopyCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" agent="//@agents[ID='playCell']" space="//@projections[ID='gameSpace']"/>
+      <members xsi:type="act:ASet" label="Set Cooperate To Cooperate" ID="setCooperateToCooperate" sources="//@agents[ID='player']/@rootActivity/@members[ID='not_ValueRandomUnitLesserMutationRate_']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" attribute="//@agents[ID='player']/@attributes[ID='cooperate']" parameter="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+      <members xsi:type="act:AEvaluate" label="Value Random Unit" ID="valueRandomUnit" sources="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" targets="//@agents[ID='player']/@rootActivity/@members[ID='mutationDraw']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']">
+        <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomUnit']"/>
+      </members>
+      <members xsi:type="act:AQuery" label="Mutation Draw" ID="mutationDraw" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueRandomUnit']" targets="//@agents[ID='player']/@rootActivity/@members[ID='valueRandomBoolean'] //@agents[ID='player']/@rootActivity/@members[ID='not_ValueRandomUnitLesserMutationRate_']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" value="//@agents[ID='player']/@rootActivity/@members[ID='valueRandomUnit']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" value="//@attributes[ID='mutationRate']"/>
+        <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='lesser']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Value Random Boolean" ID="valueRandomBoolean" sources="//@agents[ID='player']/@rootActivity/@members[ID='mutationDraw']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setCooperateToValueRandomBoolean']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']">
+        <function xsi:type="function:FGenericLogical" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='random']/@functions[ID='randomIs']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Cooperate To Value Random Boolean" ID="setCooperateToValueRandomBoolean" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueRandomBoolean']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" attribute="//@agents[ID='player']/@attributes[ID='cooperate']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueRandomBoolean']"/>
+      <members xsi:type="act:ANone" label="!(Value Random Unit Lesser Mutation Rate)" ID="not_ValueRandomUnitLesserMutationRate_" sources="//@agents[ID='player']/@rootActivity/@members[ID='mutationDraw']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setCooperateToCooperate']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']"/>
+      <members xsi:type="act:AEvaluate" label="Remaining Wealth" ID="wealthChildWealth" sources="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToWealthChildWealth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" value="//@attributes[ID='inheiritedWealth']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='sub']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Wealth To Remaining Wealth" ID="setWealthToWealthChildWealth" sources="//@agents[ID='player']/@rootActivity/@members[ID='wealthChildWealth']" selected="//@agents[ID='player']/@rootActivity/@members[ID='fissionRule']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='wealthChildWealth']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Inheirited Wealth" ID="setWealthToInheiritedWealth" sources="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" selected="//@agents[ID='player']/@rootActivity/@members[ID='createAgents']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@attributes[ID='inheiritedWealth']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Initial Wealth" ID="setWealthToInitialWealth" sources="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" selected="//@agents[ID='player']/@rootActivity/@members[ID='initialize']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@attributes[ID='initialWealth']"/>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Cooperate Defect Copy" ID="valueWealthAddPayoffCooperateDefectCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='defectCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffCooperateDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@attributes[ID='payoffCD']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Cooperate Defect Copy" ID="setWealthToValueWealthAddPayoffCooperateDefectCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateDefectCopy']"/>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Defect Defect Copy" ID="valueWealthAddPayoffDefectDefectCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='bothDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffDefectDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@attributes[ID='payoffDD']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Cooperate Cooperate Copy" ID="valueWealthAddPayoffCooperateCooperateCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='bothCooperate']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffCooperateCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@attributes[ID='payoffCC']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Cooperate Cooperate Copy" ID="setWealthToValueWealthAddPayoffCooperateCooperateCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffCooperateCooperateCopy']"/>
+      <members xsi:type="act:AEvaluate" label="Value Wealth Add Payoff Defect Cooperate Copy" ID="valueWealthAddPayoffDefectCooperateCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='cooperateDefect']" targets="//@agents[ID='player']/@rootActivity/@members[ID='setWealthToValueWealthAddPayoffDefectCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']">
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@agents[ID='player']/@attributes[ID='wealth']"/>
+        <inputs selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" value="//@attributes[ID='payoffDC']"/>
+        <function xsi:type="function:FOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='numericOperators']/@functions[ID='add']"/>
+      </members>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Defect Cooperate Copy" ID="setWealthToValueWealthAddPayoffDefectCooperateCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperateCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectCooperateCopy']"/>
+      <members xsi:type="act:ASet" label="Set Wealth To Value Wealth Add Payoff Defect Defect Copy" ID="setWealthToValueWealthAddPayoffDefectDefectCopy" sources="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefectCopy']" selected="//@agents[ID='player']/@rootActivity/@members[ID='otherPlayer']" attribute="//@agents[ID='player']/@attributes[ID='wealth']" parameter="//@agents[ID='player']/@rootActivity/@members[ID='valueWealthAddPayoffDefectDefectCopy']"/>
+    </rootActivity>
+    <implementation className="Player"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Cooperate Defect Style" ID="cooperateDefectStyle" pluralLabel="Cooperate Defect Styles">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Acts">
+        <members xsi:type="act:ARule" label="Player Rule" ID="playerRule" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='identityCooperate']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']" agent="//@agents[ID='player']" space="//@projections[ID='gameSpace']" pluralLabel="Player Rules"/>
+        <members xsi:type="act:AQuery" label="Identity Cooperate" ID="identityCooperate" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='defector'] //@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleColorBlue']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']">
+          <inputs selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']" value="//@agents[ID='player']/@attributes[ID='cooperate']"/>
+          <function xsi:type="function:FLogicalOperator" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='operators']/@subs[ID='logicalOperators']/@functions[ID='identity']"/>
+        </members>
+        <members xsi:type="act:ANone" label="Defector" ID="defector" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='identityCooperate']" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleColorRed']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']"/>
+        <members xsi:type="act:AEvaluate" label="Player Rule: Color Blue()" ID="playerRuleColorBlue" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='identityCooperate']" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleShapeOval']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorBlue']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Player Rule: Color Red()" ID="playerRuleColorRed" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='defector']" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleShapeOval']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorRed']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Player Rule: Shape Oval()" ID="playerRuleShapeOval" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleColorRed'] //@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleColorBlue']" targets="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleGraphicFill']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeOval']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="Player Rule: Graphic Fill()" ID="playerRuleGraphicFill" sources="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRuleShapeOval']" selected="//@agents[ID='player']/@styles[ID='cooperateDefectStyle']/@rootActivity/@members[ID='playerRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+      </rootActivity>
+      <implementation className="CooperateDefectStyle"/>
+    </styles>
+  </agents>
+  <agents label="Play Cell" ID="playCell" pluralLabel="Play Cells">
+    <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Acts"/>
+    <implementation className="PlayCell"/>
+    <styles xsi:type="metaabm:SStyle2D" label="Play Cell Style 2D" ID="playCellStyle2D" pluralLabel="Play Cell Style 2Ds">
+      <rootActivity xsi:type="act:AGroup" label="Root Act Group" ID="rootActGroup" pluralLabel="Root Act Groups">
+        <members xsi:type="act:ARule" label="PlayCell Rule" ID="playCellRule" targets="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRuleColorGreen']" selected="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRule']" agent="//@agents[ID='playCell']" space="//@projections[ID='gameSpace']" pluralLabel="PlayCell Rules"/>
+        <members xsi:type="act:AEvaluate" label="PlayCell Rule: Color Green()" ID="playCellRuleColorGreen" sources="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRule']" targets="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRuleShapeRectangle']" selected="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='colorGreen']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="PlayCell Rule: Shape Rectangle()" ID="playCellRuleShapeRectangle" sources="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRuleColorGreen']" targets="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRuleGraphicFill']" selected="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='shapeRectangle']"/>
+        </members>
+        <members xsi:type="act:AEvaluate" label="PlayCell Rule: Graphic Fill()" ID="playCellRuleGraphicFill" sources="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRuleShapeRectangle']" selected="//@agents[ID='playCell']/@styles[ID='playCellStyle2D']/@rootActivity/@members[ID='playCellRule']">
+          <function xsi:type="function:FGenericFunction" href="http://metaabm.org/core_library.metaabm#//@library[ID='coreFunctions']/@subs[ID='graphic']/@functions[ID='graphicFill']"/>
+        </members>
+      </rootActivity>
+      <implementation className="PlayCellStyle"/>
+    </styles>
+  </agents>
+  <projections xsi:type="metaabm:SGrid" label="Game Space" ID="gameSpace" pluralLabel="Game Spaces" dimensionality="2" borderRule="PERIODIC" neighborhood="VON_NEUMANN">
+    <attributes xsi:type="metaabm:SAttributeArray" label="Dimensions" ID="dimensions" pluralLabel="Dimensionss" description="The size of each dimension." sType="INTEGER" size="2"/>
+    <attributes label="Width" ID="width" pluralLabel="Widths" description="The horizontal extent of the space." sType="INTEGER" defaultValue="20"/>
+    <attributes label="Height" ID="height" pluralLabel="Heights" description="The vertical extent of the space." sType="INTEGER" defaultValue="20"/>
+  </projections>
+</metaabm:SContext>
diff --git a/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/src/org/eclipse/axf/ide/test/Activator.java b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/src/org/eclipse/axf/ide/test/Activator.java
new file mode 100644
index 0000000..1ac8495
--- /dev/null
+++ b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/src/org/eclipse/axf/ide/test/Activator.java
@@ -0,0 +1,50 @@
+package org.eclipse.axf.ide.test;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.axf.ide.test";
+
+	// The shared instance
+	private static Activator plugin;
+	
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
+	 */
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	/*
+	 * (non-Javadoc)
+	 * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
+	 */
+	public void stop(BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+}
diff --git a/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/src/org/eclipse/axf/ide/test/ModelMangementTest.java b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/src/org/eclipse/axf/ide/test/ModelMangementTest.java
new file mode 100644
index 0000000..b335d90
--- /dev/null
+++ b/org.eclipse.amp.axf/plugins/org.eclipse.amp.axf.ide.test/src/org/eclipse/axf/ide/test/ModelMangementTest.java
@@ -0,0 +1,238 @@
+/**

+ * <copyright>

+ *

+ * Copyright (c) 2009 Metascape, LLC.

+ * All rights reserved.   This program and the accompanying materials

+ * are made available under the terms of the Eclipse Public License v1.0

+ * which accompanies this distribution, and is available at

+ * http://www.eclipse.org/legal/epl-v10.html

+ * 

+ * Contributors:

+ *   Metascape - Initial API and Implementation

+ *

+ * </copyright>

+ *

+ */

+

+package org.eclipse.axf.ide.test;

+

+import java.io.BufferedReader;

+import java.io.IOException;

+import java.io.InputStream;

+import java.io.InputStreamReader;

+import java.io.StringBufferInputStream;

+import java.net.URL;

+import java.util.List;

+

+import junit.framework.TestCase;

+

+import org.eclipse.amp.axf.core.IModel;

+import org.eclipse.amp.axf.ide.AXFWorkbenchPlugin;

+import org.eclipse.amp.axf.ide.ModelViewManager;

+import org.eclipse.core.resources.IFile;

+import org.eclipse.core.resources.ResourcesPlugin;

+import org.eclipse.core.runtime.CoreException;

+import org.eclipse.core.runtime.Platform;

+import org.eclipse.swt.widgets.Display;

+import org.eclipse.swtbot.eclipse.finder.SWTWorkbenchBot;

+import org.eclipse.swtbot.eclipse.finder.matchers.WidgetMatcherFactory;

+import org.eclipse.swtbot.eclipse.finder.widgets.SWTBotView;

+import org.eclipse.swtbot.swt.finder.exceptions.WidgetNotFoundException;

+import org.eclipse.swtbot.swt.finder.widgets.SWTBotMenu;

+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTree;

+import org.eclipse.swtbot.swt.finder.widgets.SWTBotTreeItem;

+import org.eclipse.ui.IViewPart;

+import org.eclipse.ui.PlatformUI;

+import org.osgi.framework.Bundle;

+

+/**

+ * 

+ * @author mparker

+ * 

+ */

+public class ModelMangementTest extends TestCase {

+

+    String testProjectName = "test.escape";

+

+    public static InputStream streamFromPlugin(String pluginID, String path) {

+        try {

+            Bundle bundle = Platform.getBundle(pluginID);

+            URL entry = bundle.getEntry(path);

+            if (entry == null) {

+                throw new RuntimeException("No resource:" + path + " found in plugin: " + pluginID);

+            }

+            return entry.openStream();

+        } catch (IOException e) {

+            throw new RuntimeException("Couldn't load project resource from plugin.", e);

+        }

+    }

+

+    public static void copyFiles(String srcPluginID, String srcFileLoc, String destProjectName, String destFileLoc)

+    throws CoreException, IOException {

+        InputStream srcStream = streamFromPlugin(srcPluginID, srcFileLoc.toString());

+        BufferedReader srcReader = new BufferedReader(new InputStreamReader(srcStream));

+        StringBuffer buffer = new StringBuffer();

+        String next = srcReader.readLine();

+        while (next != null) {

+            buffer.append(next + "\r\n");

+            next = srcReader.readLine();

+        }

+        String parsedText = buffer.toString();

+        InputStream is = new StringBufferInputStream(parsedText);

+        IFile destFile = ResourcesPlugin.getWorkspace().getRoot().getProject(destProjectName).getFile(destFileLoc);

+        destFile.create(is, true, null);

+    }

+

+    /**

+     * In future you will not need to create this instance. You need to extend SWTBotEclipseTestCase which holds an

+     * instance of SWTEclipseBot.

+     */

+    protected SWTWorkbenchBot bot = new SWTWorkbenchBot();

+

+    /**

+     * @return

+     * @throws WidgetNotFoundException

+     */

+    private SWTBotTree tree() throws WidgetNotFoundException {

+        return packageExplorer().bot().tree();

+    }

+

+    /**

+     * @return

+     * @throws WidgetNotFoundException

+     */

+    private SWTBotView packageExplorer() throws WidgetNotFoundException {

+        return bot.viewByTitle("Package Explorer");

+    }

+

+    public void testAll() {

+        // setupProject();

+        // bot.perspectiveByLabel("MetaABM").activate();

+        // bot.sleep(3000);

+        tree().setFocus();

+        tree().select(testProjectName);

+        SWTBotTreeItem projectNode = tree().expandNode(testProjectName);

+        bot.sleep(2000);

+        projectNode.expandNode("TestModelSimple.metaabm").doubleClick();

+        packageExplorer().setFocus();

+        bot.sleep(2000);

+

+        ModelViewManager viewManager = AXFWorkbenchPlugin.getDefault().getManager();

+        assertEquals(gefViews().size(), 0);

+        assertTrue(activeModel() == null);

+        control().menu("Execute").click();

+        bot.sleep(4000);

+        assertEquals(gefViews().size(), 1);

+        // SWTBotView graphic = bot.viewByTitle("Demographic Prisoner_s Dilemma Graphic View");

+        // graphic.setFocus();

+        // SWTBotView chart = bot.viewByTitle("Demographic Prisoner_s Dilemma Chart View");

+        // chart.setFocus();

+        IModel model1 = activeModel();

+        subtestPauseResumeStopStartRestart(model1);

+        control().menu("Close").click();

+        bot.sleep(2000);

+        assertTrue(!model1.getEngine().isRunning());

+        assertEquals(viewManager.getModels().size(), 0);

+        assertNull("Model: " + activeModel(), activeModel());

+        assertEquals(gefViews().size(), 0);

+

+        // start new

+        packageExplorer().setFocus();

+        control().menu("Execute").click();

+        bot.sleep(3000);

+        IModel modelA_1 = activeModel();

+        assertNotNull(modelA_1);

+        assertEquals(gefViews().size(), 1);

+

+        // start another

+        packageExplorer().setFocus();

+        control().menu("Execute").click();

+        bot.sleep(3000);

+        IModel modelA_2 = activeModel();

+        subtestPauseResumeStopStartRestart(modelA_2);

+        assertNotSame(modelA_1, modelA_2);

+        assertEquals(gefViews().size(), 2);

+

+        List<IViewPart> viewsA_1 = viewManager.getViews(modelA_1);

+        assertEquals(viewsA_1.size(), 1);

+        activateFirstView(viewsA_1);

+        bot.sleep(2000);

+        assertEquals(activeModel(), modelA_1);

+

+        control().menu("Pause").click();

+        bot.sleep(1000);

+        assertTrue(activeModel().getEngine().isPaused());

+

+        List<IViewPart> viewsA_2 = viewManager.getViews(modelA_2);

+        assertEquals(viewsA_2.size(), 1);

+        activateFirstView(viewsA_2);

+        bot.sleep(2000);

+        assertEquals(activeModel(), modelA_2);

+        assertTrue(!activeModel().getEngine().isPaused());

+

+        activateFirstView(viewsA_1);

+        bot.sleep(2000);

+        assertTrue(activeModel().getEngine().isPaused());

+    }

+

+    private void activateFirstView(final List<IViewPart> views) {

+        Display.getDefault().asyncExec(new Runnable() {

+

+            public void run() {

+                PlatformUI.getWorkbench().getWorkbenchWindows()[0].getActivePage().activate(views.get(0));

+            }

+        });

+    }

+

+    private void subtestPauseResumeStopStartRestart(IModel model1) {

+        assertTrue(model1 != null);

+        assertTrue(model1.getEngine().isRunning());

+        for (int i = 0; i < 2; i++) {

+            control().menu("Pause").click();

+            bot.sleep(1500);

+            assertTrue(model1.getEngine().isPaused());

+            control().menu("Resume").click();

+            bot.sleep(1500);

+            assertTrue(!model1.getEngine().isPaused());

+        }

+        control().menu("Stop").click();

+        bot.sleep(2000);

+        assertTrue(!model1.getEngine().isRunning());

+        control().menu("Start").click();

+        bot.sleep(2000);

+        assertTrue(model1.getEngine().isRunning());

+        control().menu("Restart").click();

+        bot.sleep(2000);

+        assertTrue(model1.getEngine().isRunning());

+    }

+

+    private List<SWTBotView> gefViews() {

+        return bot.views(WidgetMatcherFactory.withPartId("org.eclipse.amp.view.GEFView"));

+    }

+

+    private SWTBotMenu control() {

+        return bot.menu("Control");

+    }

+

+    private IModel activeModel() {

+        return (IModel) AXFWorkbenchPlugin.getDefault().getManager().getActiveModel();

+    }

+

+    private void setupProject() {

+        bot.viewByTitle("Welcome").close();

+        bot.perspectiveByLabel("MetaABM").activate();

+        bot.viewByTitle("Package Explorer").setFocus();

+        bot.menu("File").menu("New").menu("Escape Project").click();

+        // 'com.swtbot.test.project' is the java project name to create

+

+        bot.text(0).setText(testProjectName);

+        // Click the Finish button

+        bot.button("Finish").click();

+        try {

+            copyFiles("org.eclipse.amp.axf.ide.test", "res/TestModel.metaabm", testProjectName, "TestModel.metaabm");

+        } catch (Exception e) {

+            throw new RuntimeException(e);

+        }

+    }

+

+}