|
From: Erik V. <ev...@us...> - 2011-11-24 21:58:24
|
dev/null |binary
rails/game/MapHex.java | 2
rails/game/OperatingRound.java | 27
test/data/test/1835_NatDoubleShare.report | 884 ------------------
test/data/test/1835_NatSingleShare.report | 76 -
test/data/test/1835_PRHasTwoExcessTrains.rails |binary
test/data/test/1835_PRHasTwoExcessTrains.report | 1141 ++++++++++++++++++++++++
7 files changed, 1162 insertions(+), 968 deletions(-)
New commits:
commit 50a81714eb68f951868feb7d0f3d7d32241ae648
Author: Erik Vos <eri...@xs...>
Date: Thu Nov 24 22:09:55 2011 +0100
Fixed offering special token lays where that is not actually allowed.
Cases:
- Company has no tokens.
- Company already has token on target location
- Target location is blocked (e.g. another home token is not yet placed).
==> THIS FIX MAY BREAK EXISTING SAVED FILES.
Three test cases had to be withdrawn because of this fix.
diff --git a/rails/game/MapHex.java b/rails/game/MapHex.java
index a1d32ab..0e1af5c 100644
--- a/rails/game/MapHex.java
+++ b/rails/game/MapHex.java
@@ -1194,7 +1194,7 @@ StationHolder, TokenHolder {
return isBlockedForTokenLays.booleanValue();
} else if (homes != null && !homes.isEmpty()) {
Stop cityToLay = this.getStop(cityNumber);
- if (cityToLay == null) { // city does not exist, this does not block itself
+ if (cityNumber > 0 && cityToLay == null) { // city does not exist, this does not block itself
return false;
}
// check if the city is potential home for other companies
diff --git a/rails/game/OperatingRound.java b/rails/game/OperatingRound.java
index 604caeb..8d6dac3 100644
--- a/rails/game/OperatingRound.java
+++ b/rails/game/OperatingRound.java
@@ -1940,22 +1940,35 @@ public class OperatingRound extends Round implements Observer {
/* Special-property tile lays */
currentSpecialTokenLays.clear();
- if (!operatingCompany.get().canUseSpecialProperties()) return;
+ PublicCompanyI company = operatingCompany.get();
+ if (!company.canUseSpecialProperties()) return;
+ // Check if the company still has tokens
+ if (company.getNumberOfFreeBaseTokens() == 0) return;
/*
* In 1835, this only applies to major companies. TODO: For now,
* hardcode this, but it must become configurable later.
*/
- if (operatingCompany.get().getType().getName().equals("Minor")) return;
+ // Removed EV 24-11-2011 - entirely redundant; why did I ever do this??
+ //if (operatingCompany.get().getType().getName().equals("Minor")) return;
for (SpecialTokenLay stl : getSpecialProperties(SpecialTokenLay.class)) {
- log.debug("Spec.prop:" + stl);
+ // If the special tile lay is not extra, it is only allowed if
+ // normal tile lays are also (still) allowed
if (stl.getTokenClass().equals(BaseToken.class)
&& (stl.isExtra() || !currentNormalTokenLays.isEmpty())) {
- /*
- * If the special tile lay is not extra, it is only allowed if
- * normal tile lays are also (still) allowed
- */
+
+ // If this STL is location specific, check if there
+ // isn't already a token of this company or if it is blocked
+ List<MapHex> locations = stl.getLocations();
+ if (locations != null && !locations.isEmpty()) {
+ boolean canLay = false;
+ for (MapHex location : locations) {
+ if (!location.hasTokenOfCompany(company)
+ && !location.isBlockedForTokenLays(company, 0)) canLay = true;
+ }
+ if (!canLay) continue;
+ }
currentSpecialTokenLays.add(new LayBaseToken(stl));
}
}
diff --git a/test/data/test/1835_NatDoubleShare.rails b/test/data/test/1835_NatDoubleShare.rails
deleted file mode 100644
index 822e7c2..0000000
Binary files a/test/data/test/1835_NatDoubleShare.rails and /dev/null differ
diff --git a/test/data/test/1835_NatDoubleShare.report b/test/data/test/1835_NatDoubleShare.report
deleted file mode 100644
index a6a0a67..0000000
--- a/test/data/test/1835_NatDoubleShare.report
+++ /dev/null
@@ -1,884 +0,0 @@
-GameIs,1835
-PlayerIs,1,T1
-PlayerIs,2,T2
-PlayerIs,3,T3
-PlayerCash,600
-BankHas,10200
-StartOfPhase,2
-BankSizeIs,10200
-StartOfInitialRound
-HasPriority,T1
-BuysItemFor,T3,M5,80
-FloatsWithCash,M5,80
-BuysItemFor,T2,M1,80
-FloatsWithCash,M1,80
-BuysItemFor,T1,M3,80
-FloatsWithCash,M3,80
-BuysItemFor,T1,M6,80
-FloatsWithCash,M6,80
-BuysItemFor,T2,M2,170
-FloatsWithCash,M2,170
-BuysItemFor,T3,PRES_CERT_NAME,BY,20,184
-BuysItemFor,T1,LD,190
-ALSO_GETS,T1,PRES_CERT_NAME,SX,20
-BuysItemFor,T2,HB,160
-BuysItemFor,T3,OBB,120
-ALSO_GETS,T3,CERT_NAME,BY,10
-BuysItemFor,T1,BB,130
-BuysItemFor,T2,NF,100
-ALSO_GETS,T2,CERT_NAME,BY,10
-BuysItemFor,T3,M4,160
-FloatsWithCash,M4,160
-CannotBuyAnything,T1
-CannotBuyAnything,T2
-CannotBuyAnything,T3
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,T1,120
-Has,T2,90
-Has,T3,56
-START_OR,0.0
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,20,LD
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-ShortORExecuted
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,T1,165
-Has,T2,125
-Has,T3,66
-StartOfInitialRound
-HasPriority,T1
-CannotBuyAnything,T3
-BuysItemFor,T1,PfB,150
-ALSO_GETS,T1,CERT_NAME,BY,10
-FloatsWithCash,BY,460
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,BY,460
-Has,T1,15
-Has,T2,125
-Has,T3,66
-StartStockRound,1
-HasPriority,T2
-BUY_SHARE_LOG,T2,10,BY,IPO,92
-PriceIsPaidTo,92,BY
-PASSES,T3
-PASSES,T1
-PASSES,T2
-
-END_SR,1
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,BY,552
-Has,T1,15
-Has,T2,33
-Has,T3,66
-START_OR,1.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,20,LD
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,201,H2,SW
-CompanyDoesNotPayDividend,M1
-BuysTrain,M1,2,IPO,80
-FirstTrainBought,2
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,8,E17,NW
-CompanyDoesNotPayDividend,M2
-BuysTrain,M2,2,IPO,80
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,6,F14,NW
-CompanyDoesNotPayDividend,M3
-BuysTrain,M3,2,IPO,80
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,57,G5,SW
-CompanyDoesNotPayDividend,M4
-BuysTrain,M4,2,IPO,80
-BuysTrain,M4,2,IPO,80
-
-CompanyOperates,M5,T3
-LaysTileAt,M5,8,D18,NE
-CompanyDoesNotPayDividend,M5
-BuysTrain,M5,2,IPO,80
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,9,B10,NW
-CompanyDoesNotPayDividend,M6
-BuysTrain,M6,2,IPO,80
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,202,O15,E
-LaysTileAt,BY,8,O13,NW
-CompanyDoesNotPayDividend,BY
-PRICE_MOVES_LOG,BY,92,C3,86,B3
-BuysTrain,BY,2,IPO,80
-BuysTrain,BY,2,IPO,80
-All 2-trains are sold out, 2+2-trains now available
-BuysTrain,BY,2+2,IPO,120
-FirstTrainBought,2+2
-
-EndOfOperatingRound,1.1
-ORWorthIncrease,T1,1.1,54
-ORWorthIncrease,T2,1.1,23
-ORWorthIncrease,T3,1.1,-8
-Has,M1,0
-Has,M2,90
-Has,M3,0
-Has,M4,0
-Has,M5,0
-Has,M6,0
-Has,BY,272
-Has,T1,75
-Has,T2,68
-Has,T3,76
-StartStockRound,2
-HasPriority,T3
-PASSES,T3
-PASSES,T1
-PASSES,T2
-
-END_SR,2
-Has,M1,0
-Has,M2,90
-Has,M3,0
-Has,M4,0
-Has,M5,0
-Has,M6,0
-Has,BY,272
-Has,T1,75
-Has,T2,68
-Has,T3,76
-START_OR,2.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,20,LD
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,9,J2,NW
-CompanyRevenue,M1,40
-CompanySplits,M1,40
-M1 receives 20
-Payout,T2,20,1,100
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,8,D16,SE
-CompanyRevenue,M2,0
-CompanyDoesNotPayDividend,M2
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,4,G15,NW
-CompanyRevenue,M3,40
-CompanySplits,M3,40
-M3 receives 20
-Payout,T1,20,1,100
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,2,H4,NE
-CompanyRevenue,M4,30
-CompanySplits,M4,30
-M4 receives 15
-Payout,T3,15,1,100
-
-CompanyOperates,M5,T3
-LaysTileAt,M5,8,C19,E
-CompanyRevenue,M5,50
-CompanySplits,M5,50
-M5 receives 25
-Payout,T3,25,1,100
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,6,A11,NW
-CompanyRevenue,M6,60
-CompanySplits,M6,60
-M6 receives 30
-Payout,T1,30,1,100
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,8,N16,SW
-LaysTileAt,BY,4,M15,NW
-LaysTileAt,BY,6,N12,NW
-LAYS_TOKEN_ON,BY,L14,60
-CompanyRevenue,BY,130
-CompanyPaysOutFull,BY,130
-Payout,T1,13,1,10
-Payout,T2,26,2,10
-Payout,T3,39,3,10
-PRICE_MOVES_LOG,BY,86,B3,92,C3
-
-EndOfOperatingRound,2.1
-ORWorthIncrease,T1,2.1,129
-ORWorthIncrease,T2,2.1,93
-ORWorthIncrease,T3,2.1,107
-Has,M1,20
-Has,M2,90
-Has,M3,20
-Has,M4,15
-Has,M5,25
-Has,M6,30
-Has,BY,212
-Has,T1,198
-Has,T2,149
-Has,T3,165
-StartStockRound,3
-HasPriority,T3
-BUY_SHARE_LOG,T3,10,BY,IPO,92
-PriceIsPaidTo,92,BY
-BUY_SHARE_LOG,T1,10,BY,IPO,92
-PriceIsPaidTo,92,BY
-BUY_SHARE_LOG,T2,10,BY,IPO,92
-PriceIsPaidTo,92,BY
-PASSES,T3
-BUY_SHARE_LOG,T1,10,BY,IPO,92
-PriceIsPaidTo,92,BY
-SELL_SHARE_LOG,T1,10,BY,92
-PRICE_MOVES_LOG,BY,92,C3,88,C4
-PASSES,T2
-PASSES,T3
-SELL_SHARE_LOG,T1,10,BY,88
-PRICE_MOVES_LOG,BY,88,C4,86,C5
-BUY_SHARE_LOG,T1,10,SX,IPO,88
-PASSES,T2
-PASSES,T3
-SELL_SHARE_LOG,T1,10,BY,86
-PRICE_MOVES_LOG,BY,86,C5,82,C6
-BUY_SHARE_LOG,T1,10,SX,IPO,88
-PASSES,T2
-PASSES,T3
-BUY_SHARE_LOG,T1,10,SX,IPO,88
-FloatsWithCash,SX,440
-PASSES,T2
-PASSES,T3
-PASSES,T1
-
-END_SR,3
-Has,M1,20
-Has,M2,90
-Has,M3,20
-Has,M4,15
-Has,M5,25
-Has,M6,30
-Has,BY,580
-Has,SX,440
-Has,T1,16
-Has,T2,57
-Has,T3,73
-START_OR,3.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,20,LD
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,4,K3,NW
-CompanyRevenue,M1,40
-CompanySplits,M1,40
-M1 receives 20
-Payout,T2,20,1,100
-
-CompanyOperates,M2,T2
-LaysTileAtFor,M2,8,D14,NW,50
-CompanyRevenue,M2,70
-CompanySplits,M2,70
-M2 receives 35
-Payout,T2,35,1,100
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,57,H16,NW
-CompanyRevenue,M3,40
-CompanySplits,M3,40
-M3 receives 20
-Payout,T1,20,1,100
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,58,F6,E
-CompanyRevenue,M4,60
-CompanySplits,M4,60
-M4 receives 30
-Payout,T3,30,1,100
-
-CompanyOperates,M5,T3
-CompanyRevenue,M5,50
-CompanySplits,M5,50
-M5 receives 25
-Payout,T3,25,1,100
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,58,B12,SW
-CompanyRevenue,M6,60
-CompanySplits,M6,60
-M6 receives 30
-Payout,T1,30,1,100
-
-CompanyOperates,SX,T1
-LaysTileAt,SX,56,I17,NE
-LaysTileAt,SX,202,H20,W
-CompanyDoesNotPayDividend,SX
-PRICE_MOVES_LOG,SX,88,C4,84,B4
-BuysTrain,SX,2+2,IPO,120
-PrivateCloses,LD
-BuysTrain,SX,2+2,IPO,120
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,69,N10,NE
-LaysTileAt,BY,5,M9,SW
-CompanyRevenue,BY,140
-CompanyPaysOutFull,BY,140
-Payout,T2,42,3,10
-Payout,T3,56,4,10
-Payout,BY,42,3,10
-PRICE_MOVES_LOG,BY,82,C6,88,D6
-
-EndOfOperatingRound,3.1
-ORWorthIncrease,T1,3.1,-100
-ORWorthIncrease,T2,3.1,150
-ORWorthIncrease,T3,3.1,145
-Has,M1,40
-Has,M2,75
-Has,M3,40
-Has,M4,45
-Has,M5,50
-Has,M6,60
-Has,BY,622
-Has,SX,200
-Has,T1,126
-Has,T2,189
-Has,T3,194
-StartStockRound,4
-HasPriority,T2
-BUY_SHARE_LOG,T2,10,BY,Pool,88
-BUY_SHARE_LOG,T3,10,BY,Pool,88
-BUY_SHARE_LOG,T1,10,SX,IPO,88
-PriceIsPaidTo,88,SX
-BUY_SHARE_LOG,T2,10,SX,IPO,88
-PriceIsPaidTo,88,SX
-BUY_SHARE_LOG,T3,10,BY,Pool,88
-PASSES,T1
-PASSES,T2
-PASSES,T3
-
-END_SR,4
-PRICE_MOVES_LOG,BY,88,D6,90,D5
-SoldOut,BY,88,D6,90,D5
-Has,M1,40
-Has,M2,75
-Has,M3,40
-Has,M4,45
-Has,M5,50
-Has,M6,60
-Has,BY,622
-Has,SX,376
-Has,T1,38
-Has,T2,13
-Has,T3,18
-START_OR,4.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,8,L4,NW
-CompanyRevenue,M1,40
-CompanySplits,M1,40
-M1 receives 20
-Payout,T2,20,1,100
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,58,B14,E
-CompanyRevenue,M2,70
-CompanySplits,M2,70
-M2 receives 35
-Payout,T2,35,1,100
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,5,F10,SE
-CompanyRevenue,M3,40
-CompanySplits,M3,40
-M3 receives 20
-Payout,T1,20,1,100
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,8,F8,W
-CompanyRevenue,M4,60
-CompanySplits,M4,60
-M4 receives 30
-Payout,T3,30,1,100
-
-CompanyOperates,M5,T3
-CompanyRevenue,M5,50
-CompanySplits,M5,50
-M5 receives 25
-Payout,T3,25,1,100
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,58,B16,SE
-CompanyRevenue,M6,60
-CompanySplits,M6,60
-M6 receives 30
-Payout,T1,30,1,100
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,8,M11,W
-LaysTileAt,BY,8,L12,SW
-CompanyRevenue,BY,140
-CompanyPaysOutFull,BY,140
-Payout,T2,56,4,10
-Payout,T3,84,6,10
-PRICE_MOVES_LOG,BY,90,D5,96,E5
-
-CompanyOperates,SX,T1
-LaysTileAt,SX,7,H18,SE
-LaysTileAt,SX,3,I15,NE
-LAYS_TOKEN_ON,SX,H20,40
-CompanyRevenue,SX,130
-CompanyPaysOutFull,SX,130
-Payout,T1,78,6,10
-Payout,T2,13,1,10
-PRICE_MOVES_LOG,SX,84,B4,88,C4
-
-EndOfOperatingRound,4.1
-ORWorthIncrease,T1,4.1,192
-ORWorthIncrease,T2,4.1,187
-ORWorthIncrease,T3,4.1,185
-Has,M1,60
-Has,M2,110
-Has,M3,60
-Has,M4,75
-Has,M5,75
-Has,M6,90
-Has,BY,622
-Has,SX,336
-Has,T1,206
-Has,T2,172
-Has,T3,167
-StartStockRound,5
-HasPriority,T1
-BUY_SHARE_LOG,T1,10,SX,IPO,88
-PriceIsPaidTo,88,SX
-BUY_SHARE_LOG,T2,10,SX,IPO,88
-PriceIsPaidTo,88,SX
-BUY_SHARE_LOG,T3,10,SX,IPO,88
-PriceIsPaidTo,88,SX
-SharesReleased,All,BA
-PASSES,T1
-SELL_SHARES_LOG,T2,4,10,40,BY,384
-PRICE_MOVES_LOG,BY,96,E5,92,E6
-START_COMPANY_LOG,T2,BA,84,168,2,20,BANK
-SharesReleased,4 10%,PR
-PASSES,T3
-BUY_SHARE_LOG,T1,10,BY,Pool,92
-BUY_SHARE_LOG,T2,10,BA,IPO,84
-PASSES,T3
-PASSES,T1
-BUY_SHARE_LOG,T2,10,BA,IPO,84
-Autopasses,T3
-Autopasses,T1
-BUY_SHARE_LOG,T2,10,BA,IPO,84
-FloatsWithCash,BA,420
-SharesReleased,All,WT
-Autopasses,T3
-Autopasses,T1
-PASSES,T2
-
-END_SR,5
-PRICE_MOVES_LOG,SX,88,C4,92,C3
-SoldOut,SX,88,C4,92,C3
-Has,M1,60
-Has,M2,110
-Has,M3,60
-Has,M4,75
-Has,M5,75
-Has,M6,90
-Has,BY,622
-Has,SX,600
-Has,BA,420
-Has,T1,26
-Has,T2,48
-Has,T3,79
-START_OR,5.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAtFor,M1,201,I3,NW,50
-CompanyRevenue,M1,60
-CompanySplits,M1,60
-M1 receives 30
-Payout,T2,30,1,100
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,9,C17,NW
-CompanyRevenue,M2,70
-CompanySplits,M2,70
-M2 receives 35
-Payout,T2,35,1,100
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,8,E11,SW
-CompanyRevenue,M3,40
-CompanySplits,M3,40
-M3 receives 20
-Payout,T1,20,1,100
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,9,E9,SW
-CompanyRevenue,M4,60
-CompanySplits,M4,60
-M4 receives 30
-Payout,T3,30,1,100
-
-CompanyOperates,M5,T3
-CompanyRevenue,M5,50
-CompanySplits,M5,50
-M5 receives 25
-Payout,T3,25,1,100
-
-CompanyOperates,M6,T1
-CompanyRevenue,M6,60
-CompanySplits,M6,60
-M6 receives 30
-Payout,T1,30,1,100
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,3,K11,E
-LaysTileAt,BY,8,K13,SE
-CompanyRevenue,BY,140
-CompanyPaysOutFull,BY,140
-Payout,T1,14,1,10
-Payout,T3,84,6,10
-Payout,BY,42,3,10
-PRICE_MOVES_LOG,BY,92,E6,98,F6
-
-CompanyOperates,SX,T1
-CompanyRevenue,SX,130
-CompanyPaysOutFull,SX,130
-Payout,T1,91,7,10
-Payout,T3,13,1,10
-Payout,T2,26,2,10
-PRICE_MOVES_LOG,SX,92,C3,100,D3
-
-CompanyOperates,BA,T2
-CompanyDoesNotPayDividend,BA
-PRICE_MOVES_LOG,BA,84,B4,78,A4
-BuysTrain,BA,2+2,IPO,120
-All 2+2-trains are sold out, 3-trains now available
-BuysTrain,BA,3,IPO,180
-FirstTrainBought,3
-StartOfPhase,3
-
-EndOfOperatingRound,5.1
-ORWorthIncrease,T1,5.1,257
-ORWorthIncrease,T2,5.1,112
-ORWorthIncrease,T3,5.1,206
-Has,M1,40
-Has,M2,145
-Has,M3,80
-Has,M4,105
-Has,M5,100
-Has,M6,120
-Has,BY,664
-Has,SX,600
-Has,BA,120
-Has,T1,221
-Has,T2,174
-Has,T3,241
-StartStockRound,6
-HasPriority,T3
-START_COMPANY_LOG,T3,WT,84,168,2,20,BANK
-PASSES,T1
-BUY_SHARE_LOG,T2,10,BA,IPO,84
-PriceIsPaidTo,84,BA
-SELL_SHARE_LOG,T3,10,SX,100
-PRICE_MOVES_LOG,SX,100,D3,94,D4
-BUY_SHARE_LOG,T3,10,WT,IPO,84
-PASSES,T1
-BUY_SHARE_LOG,T2,10,BA,IPO,84
-PriceIsPaidTo,84,BA
-BUY_SHARE_LOG,T3,10,WT,IPO,84
-PASSES,T1
-PASSES,T2
-SELL_SHARE_LOG,T3,10,BY,98
-BUY_SHARE_LOG,T3,10,WT,IPO,84
-FloatsWithCash,WT,420
-SharesReleased,All,HE
-START_COMPANY_LOG,T1,HE,84,168,2,20,BANK
-PASSES,T2
-PASSES,T3
-PASSES,T1
-
-END_SR,6
-Has,M1,40
-Has,M2,145
-Has,M3,80
-Has,M4,105
-Has,M5,100
-Has,M6,120
-Has,BY,664
-Has,SX,600
-Has,BA,288
-Has,WT,420
-Has,T1,53
-Has,T2,6
-Has,T3,19
-START_OR,6.1
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,207,H2,E
-CompanyRevenue,M1,70
-CompanySplits,M1,70
-M1 receives 35
-Payout,T2,35,1,100
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,209,E19,SE
-CompanyRevenue,M2,80
-CompanySplits,M2,80
-M2 receives 40
-Payout,T2,40,1,100
-BuysTrain,M2,3,IPO,180
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,14,F14,W
-CompanyRevenue,M3,50
-CompanySplits,M3,50
-M3 receives 25
-Payout,T1,25,1,100
-BuysTrain,M3,2,M6,105
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,205,G5,W
-CompanyRevenue,M4,80
-CompanySplits,M4,80
-M4 receives 40
-Payout,T3,40,1,100
-
-CompanyOperates,M5,T3
-LaysTileAt,M5,8,F18,NE
-CompanyRevenue,M5,80
-CompanySplits,M5,80
-M5 receives 40
-Payout,T3,40,1,100
-BuysTrain,M5,2,BY,140
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,12,A11,W
-CompanyDoesNotPayDividend,M6
-BuysTrain,M6,2+2,SX,225
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,15,M9,NW
-CompanyRevenue,BY,120
-CompanyPaysOutFull,BY,120
-Payout,T1,12,1,10
-Payout,T3,60,5,10
-Payout,BY,48,4,10
-PRICE_MOVES_LOG,BY,98,F6,106,G6
-BuysTrain,BY,3,IPO,180
-
-CompanyOperates,SX,T1
-LaysTileAt,SX,208,H20,W
-CompanyRevenue,SX,90
-CompanyPaysOutFull,SX,90
-Payout,T1,63,7,10
-Payout,T2,18,2,10
-Payout,SX,9,1,10
-PRICE_MOVES_LOG,SX,94,D4,102,E4
-BuysTrain,SX,3,IPO,180
-All 3-trains are sold out, 3+3-trains now available
-BuysTrain,SX,3+3,IPO,270
-FirstTrainBought,3+3
-
-CompanyOperates,WT,T3
-LaysTileAt,WT,204,K11,NE
-CompanyDoesNotPayDividend,WT
-PRICE_MOVES_LOG,WT,84,B4,78,A4
-BuysTrain,WT,3+3,IPO,270
-BuysTrain,WT,2,M4,1
-
-CompanyOperates,BA,T2
-LaysTileAt,BA,212,L6,SW
-LAYS_TOKEN_ON,BA,H2,80
-CompanyRevenue,BA,170
-CompanyPaysOutFull,BA,170
-Payout,T2,119,7,10
-PRICE_MOVES_LOG,BA,78,A4,84,B4
-
-EndOfOperatingRound,6.1
-ORWorthIncrease,T1,6.1,204
-ORWorthIncrease,T2,6.1,305
-ORWorthIncrease,T3,6.1,160
-Has,M1,75
-Has,M2,5
-Has,M3,0
-Has,M4,146
-Has,M5,0
-Has,M6,0
-Has,BY,672
-Has,SX,384
-Has,BA,208
-Has,WT,149
-Has,T1,193
-Has,T2,253
-Has,T3,169
-START_OR,6.2
-ReceivesFor,T2,5,NF
-ReceivesFor,T3,10,OBB
-ReceivesFor,T1,15,PfB
-ReceivesFor,T1,25,BB
-ReceivesFor,T2,30,HB
-
-CompanyOperates,M1,T2
-LaysTileAt,M1,207,I3,SW
-CompanyRevenue,M1,80
-CompanySplits,M1,80
-M1 receives 40
-Payout,T2,40,1,100
-
-CompanyOperates,M2,T2
-LaysTileAt,M2,8,F20,NE
-CompanyRevenue,M2,170
-CompanySplits,M2,170
-M2 receives 85
-Payout,T2,85,1,100
-
-CompanyOperates,M3,T1
-LaysTileAt,M3,8,D10,NE
-CompanyRevenue,M3,90
-CompanySplits,M3,90
-M3 receives 45
-Payout,T1,45,1,100
-
-CompanyOperates,M4,T3
-LaysTileAt,M4,24,D10,NE
-CompanyRevenue,M4,40
-CompanySplits,M4,40
-M4 receives 20
-Payout,T3,20,1,100
-BuysTrain,M4,2,BY,166
-
-CompanyOperates,M5,T3
-LaysTileAt,M5,23,D18,NW
-CompanyRevenue,M5,140
-CompanySplits,M5,140
-M5 receives 70
-Payout,T3,70,1,100
-
-CompanyOperates,M6,T1
-LaysTileAt,M6,203,B12,W
-CompanyRevenue,M6,80
-CompanySplits,M6,80
-M6 receives 40
-Payout,T1,40,1,100
-
-CompanyOperates,BY,T3
-LaysTileAt,BY,8,J10,SE
-LAYS_TOKEN_ON,BY,J8,120
-CompanyRevenue,BY,160
-CompanyPaysOutFull,BY,160
-Payout,T1,16,1,10
-Payout,T3,80,5,10
-Payout,BY,64,4,10
-PRICE_MOVES_LOG,BY,106,G6,114,G5
-BuysTrain,BY,2,M5,1
-
-CompanyOperates,SX,T1
-LaysTileAt,SX,206,H16,SW
-LAYS_TOKEN_ON,SX,E19,60
-CompanyRevenue,SX,320
-CompanyPaysOutFull,SX,320
-Payout,T1,224,7,10
-Payout,T2,64,2,10
-Payout,SX,32,1,10
-PRICE_MOVES_LOG,SX,102,E4,112,F4
-
-CompanyOperates,BA,T2
-LaysTileAt,BA,9,K5,NW
-CompanyRevenue,BA,190
-CompanyPaysOutFull,BA,190
-Payout,T2,133,7,10
-PRICE_MOVES_LOG,BA,84,B4,88,C4
-
-CompanyOperates,WT,T3
-LaysTileAt,WT,1,L8,W
-CompanyRevenue,WT,160
-CompanyPaysOutFull,WT,160
-Payout,T3,80,5,10
-PRICE_MOVES_LOG,WT,78,A4,84,B4
-
-EndOfOperatingRound,6.2
-ORWorthIncrease,T1,6.2,443
-ORWorthIncrease,T2,6.2,405
-ORWorthIncrease,T3,6.2,330
-Has,M1,115
-Has,M2,90
-Has,M3,45
-Has,M4,0
-Has,M5,71
-Has,M6,40
-Has,BY,781
-Has,SX,356
-Has,BA,208
-Has,WT,149
-Has,T1,558
-Has,T2,610
-Has,T3,429
-StartStockRound,7
-HasPriority,T2
-BUY_SHARE_LOG,T2,10,PR,IPO,154
-BUY_SHARE_LOG,T3,10,PR,IPO,154
-BUY_SHARE_LOG,T1,10,PR,IPO,154
-BUY_SHARE_LOG,T2,10,PR,IPO,154
-BUY_SHARE_LOG,T3,10,BY,Pool,114
-BUY_SHARE_LOG,T1,10,SX,Pool,112
-BUY_SHARE_LOG,T2,10,BY,Pool,114
-BUY_SHARE_LOG,T3,10,BA,IPO,84
-PriceIsPaidTo,84,BA
-PASSES,T1
-PASSES,T2
-SELL_SHARE_LOG,T3,10,BY,114
-PRICE_MOVES_LOG,BY,114,G5,106,G6
-BUY_SHARE_LOG,T3,20,BA,IPO,168
-PriceIsPaidTo,168,BA
-PASSES,T1
-SELL_SHARE_LOG,T2,10,BY,106
-BUY_SHARE_LOG,T2,20,BA,T3,264
diff --git a/test/data/test/1835_NatSingleShare.rails b/test/data/test/1835_NatSingleShare.rails
deleted file mode 100644
index 84da84d..0000000
Binary files a/test/data/test/1835_NatSingleShare.rails and /dev/null differ
diff --git a/test/data/test/1835_NatSingleShare.report b/test/data/test/1835_NatSingleShare.report
deleted file mode 100644
index f0b1381..0000000
--- a/test/data/test/1835_NatSingleShare.report
+++ /dev/null
@@ -1,76 +0,0 @@
-GameIs,1835
-PlayerIs,1,T1
-PlayerIs,2,T2
-PlayerIs,3,T3
-PlayerCash,600
-BankHas,10200
-StartOfPhase,2
-BankSizeIs,10200
-StartOfInitialRound
-HasPriority,T1
-BuysItemFor,T3,M5,80
-FloatsWithCash,M5,80
-BuysItemFor,T1,M1,80
-FloatsWithCash,M1,80
-BuysItemFor,T2,M3,80
-FloatsWithCash,M3,80
-BuysItemFor,T3,M6,80
-FloatsWithCash,M6,80
-BuysItemFor,T1,M2,170
-FloatsWithCash,M2,170
-BuysItemFor,T2,PRES_CERT_NAME,BY,20,184
-BuysItemFor,T3,LD,190
-ALSO_GETS,T3,PRES_CERT_NAME,SX,20
-BuysItemFor,T1,HB,160
-BuysItemFor,T2,OBB,120
-ALSO_GETS,T2,CERT_NAME,BY,10
-BuysItemFor,T3,BB,130
-BuysItemFor,T1,NF,100
-ALSO_GETS,T1,CERT_NAME,BY,10
-BuysItemFor,T2,M4,160
-FloatsWithCash,M4,160
-CannotBuyAnything,T3
-CannotBuyAnything,T1
-CannotBuyAnything,T2
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,T1,90
-Has,T2,56
-Has,T3,120
-START_OR,0.0
-ReceivesFor,T1,5,NF
-ReceivesFor,T2,10,OBB
-ReceivesFor,T3,20,LD
-ReceivesFor,T3,25,BB
-ReceivesFor,T1,30,HB
-ShortORExecuted
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,T1,125
-Has,T2,66
-Has,T3,165
-StartOfInitialRound
-HasPriority,T3
-BuysItemFor,T3,PfB,150
-ALSO_GETS,T3,CERT_NAME,BY,10
-FloatsWithCash,BY,460
-Has,M1,80
-Has,M2,170
-Has,M3,80
-Has,M4,160
-Has,M5,80
-Has,M6,80
-Has,BY,460
-Has,T1,125
-Has,T2,66
-Has,T3,15
-StartStockRound,1
-HasPriority,T1
diff --git a/test/data/test/1835_PRHasTwoExcessTrains.rails b/test/data/test/1835_PRHasTwoExcessTrains.rails
new file mode 100644
index 0000000..433fcdb
Binary files /dev/null and b/test/data/test/1835_PRHasTwoExcessTrains.rails differ
diff --git a/test/data/test/1835_PRHasTwoExcessTrains.report b/test/data/test/1835_PRHasTwoExcessTrains.report
new file mode 100644
index 0000000..2049760
--- /dev/null
+++ b/test/data/test/1835_PRHasTwoExcessTrains.report
@@ -0,0 +1,1141 @@
+GameIs,1835
+PlayerIs,1,Alice
+PlayerIs,2,Bob
+PlayerIs,3,Charlie
+PlayerCash,600
+BankHas,10200
+StartOfPhase,2
+BankSizeIs,10200
+StartOfInitialRound
+HasPriority,Alice
+BuysItemFor,Alice,NF,100
+ALSO_GETS,Alice,CERT_NAME,BY,10
+BuysItemFor,Bob,M1,80
+FloatsWithCash,M1,80
+BuysItemFor,Charlie,LD,190
+ALSO_GETS,Charlie,PRES_CERT_NAME,SX,20
+BuysItemFor,Alice,M2,170
+FloatsWithCash,M2,170
+BuysItemFor,Bob,M3,80
+FloatsWithCash,M3,80
+BuysItemFor,Charlie,M4,160
+FloatsWithCash,M4,160
+BuysItemFor,Alice,PRES_CERT_NAME,BY,20,184
+BuysItemFor,Bob,BB,130
+BuysItemFor,Charlie,HB,160
+BuysItemFor,Alice,OBB,120
+ALSO_GETS,Alice,CERT_NAME,BY,10
+BuysItemFor,Bob,PfB,150
+ALSO_GETS,Bob,CERT_NAME,BY,10
+FloatsWithCash,BY,460
+BuysItemFor,Charlie,M5,80
+FloatsWithCash,M5,80
+CannotBuyAnything,Alice
+BuysItemFor,Bob,M6,80
+FloatsWithCash,M6,80
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,BY,460
+Has,Alice,26
+Has,Bob,80
+Has,Charlie,10
+StartStockRound,1
+HasPriority,Charlie
+PASSES,Charlie
+PASSES,Alice
+PASSES,Bob
+
+END_SR,1
+Has,M1,80
+Has,M2,170
+Has,M3,80
+Has,M4,160
+Has,M5,80
+Has,M6,80
+Has,BY,460
+Has,Alice,26
+Has,Bob,80
+Has,Charlie,10
+START_OR,1.1
+ReceivesFor,Alice,5,NF
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Charlie,20,LD
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAt,M1,202,H2,W
+CompanyDoesNotPayDividend,M1
+BuysTrain,M1,2,IPO,80
+FirstTrainBought,2
+
+CompanyOperates,M2,Alice
+LaysTileAt,M2,8,E17,NW
+CompanyDoesNotPayDividend,M2
+BuysTrain,M2,2,IPO,80
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,6,F14,NW
+CompanyDoesNotPayDividend,M3
+BuysTrain,M3,2,IPO,80
+
+CompanyOperates,M4,Charlie
+LaysTileAt,M4,57,G5,SW
+CompanyDoesNotPayDividend,M4
+BuysTrain,M4,2,IPO,80
+BuysTrain,M4,2,IPO,80
+
+CompanyOperates,M5,Charlie
+LaysTileAt,M5,8,D18,NE
+CompanyDoesNotPayDividend,M5
+BuysTrain,M5,2,IPO,80
+
+CompanyOperates,M6,Bob
+LaysTileAt,M6,9,B10,NW
+CompanyDoesNotPayDividend,M6
+BuysTrain,M6,2,IPO,80
+
+CompanyOperates,BY,Alice
+LAYS_FREE_TOKEN_ON,BY,L14
+PrivateCloses,NF
+LaysTileAtFor,BY,9,K15,SW,70
+LaysTileAt,BY,1,I17,SW
+LaysTileAt,BY,58,M15,SW
+CompanyDoesNotPayDividend,BY
+PRICE_MOVES_LOG,BY,92,C3,86,B3
+BuysTrain,BY,2,IPO,80
+BuysTrain,BY,2,IPO,80
+All 2-trains are sold out, 2+2-trains now available
+BuysTrain,BY,2+2,IPO,120
+FirstTrainBought,2+2
+
+EndOfOperatingRound,1.1
+ORWorthIncrease,Alice,1.1,-109
+ORWorthIncrease,Bob,1.1,34
+ORWorthIncrease,Charlie,1.1,50
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,0
+Has,M5,0
+Has,M6,0
+Has,BY,110
+Has,Alice,41
+Has,Bob,120
+Has,Charlie,60
+StartStockRound,2
+HasPriority,Charlie
+PASSES,Charlie
+PASSES,Alice
+BUY_SHARE_LOG,Bob,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,Charlie
+PASSES,Alice
+PASSES,Bob
+
+END_SR,2
+Has,M1,0
+Has,M2,90
+Has,M3,0
+Has,M4,0
+Has,M5,0
+Has,M6,0
+Has,BY,202
+Has,Alice,41
+Has,Bob,28
+Has,Charlie,60
+START_OR,2.1
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Charlie,20,LD
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAt,M1,69,H4,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,Bob,20,1,100
+
+CompanyOperates,M2,Alice
+LaysTileAt,M2,8,D16,SE
+CompanyRevenue,M2,0
+CompanyDoesNotPayDividend,M2
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,4,G15,NW
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,Bob,20,1,100
+
+CompanyOperates,M4,Charlie
+LaysTileAt,M4,4,F6,SW
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,Charlie,30,1,100
+
+CompanyOperates,M5,Charlie
+LaysTileAt,M5,8,C19,E
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,Charlie,25,1,100
+
+CompanyOperates,M6,Bob
+LaysTileAt,M6,6,A11,NW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,Bob,30,1,100
+
+CompanyOperates,BY,Alice
+LaysTileAt,BY,202,H20,W
+LaysTileAt,BY,9,F20,NW
+LAYS_TOKEN_ON,BY,H20,160
+CompanyRevenue,BY,160
+CompanyPaysOutFull,BY,160
+Payout,Bob,32,2,10
+Payout,Alice,64,4,10
+PRICE_MOVES_LOG,BY,86,B3,92,C3
+
+EndOfOperatingRound,2.1
+ORWorthIncrease,Alice,2.1,98
+ORWorthIncrease,Bob,2.1,154
+ORWorthIncrease,Charlie,2.1,105
+Has,M1,20
+Has,M2,90
+Has,M3,20
+Has,M4,30
+Has,M5,25
+Has,M6,30
+Has,BY,42
+Has,Alice,115
+Has,Bob,170
+Has,Charlie,165
+StartStockRound,3
+HasPriority,Charlie
+BUY_SHARE_LOG,Charlie,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,Alice,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,Bob,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+PASSES,Charlie
+PASSES,Alice
+PASSES,Bob
+
+END_SR,3
+Has,M1,20
+Has,M2,90
+Has,M3,20
+Has,M4,30
+Has,M5,25
+Has,M6,30
+Has,BY,318
+Has,Alice,23
+Has,Bob,78
+Has,Charlie,73
+START_OR,3.1
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Charlie,20,LD
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAt,M1,9,J2,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,Bob,20,1,100
+
+CompanyOperates,M2,Alice
+LaysTileAtFor,M2,8,D14,NW,50
+CompanyRevenue,M2,70
+CompanySplits,M2,70
+M2 receives 35
+Payout,Alice,35,1,100
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,6,H16,SE
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,Bob,20,1,100
+
+CompanyOperates,M4,Charlie
+LaysTileAt,M4,9,E7,SW
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,Charlie,30,1,100
+
+CompanyOperates,M5,Charlie
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,Charlie,25,1,100
+
+CompanyOperates,M6,Bob
+LaysTileAt,M6,58,B12,NW
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,Bob,30,1,100
+
+CompanyOperates,BY,Alice
+LaysTileAt,BY,8,N14,NE
+LaysTileAt,BY,201,O15,NW
+CompanyRevenue,BY,190
+CompanyPaysOutFull,BY,190
+Payout,Charlie,19,1,10
+Payout,Bob,57,3,10
+Payout,Alice,95,5,10
+PRICE_MOVES_LOG,BY,92,C3,100,D3
+BuysTrain,BY,2+2,IPO,120
+
+EndOfOperatingRound,3.1
+ORWorthIncrease,Alice,3.1,180
+ORWorthIncrease,Bob,3.1,191
+ORWorthIncrease,Charlie,3.1,132
+Has,M1,40
+Has,M2,75
+Has,M3,40
+Has,M4,60
+Has,M5,50
+Has,M6,60
+Has,BY,198
+Has,Alice,163
+Has,Bob,245
+Has,Charlie,197
+StartStockRound,4
+HasPriority,Charlie
+BUY_SHARE_LOG,Charlie,10,SX,IPO,88
+BUY_SHARE_LOG,Alice,10,BY,IPO,92
+PriceIsPaidTo,92,BY
+BUY_SHARE_LOG,Bob,10,SX,IPO,88
+BUY_SHARE_LOG,Charlie,10,SX,IPO,88
+FloatsWithCash,SX,440
+PASSES,Alice
+BUY_SHARE_LOG,Bob,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+PASSES,Charlie
+PASSES,Alice
+PASSES,Bob
+
+END_SR,4
+PRICE_MOVES_LOG,BY,100,D3,108,D2
+SoldOut,BY,100,D3,108,D2
+Has,M1,40
+Has,M2,75
+Has,M3,40
+Has,M4,60
+Has,M5,50
+Has,M6,60
+Has,BY,290
+Has,SX,528
+Has,Alice,71
+Has,Bob,69
+Has,Charlie,21
+START_OR,4.1
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Charlie,20,LD
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAt,M1,4,K3,NW
+CompanyRevenue,M1,40
+CompanySplits,M1,40
+M1 receives 20
+Payout,Bob,20,1,100
+
+CompanyOperates,M2,Alice
+CompanyRevenue,M2,70
+CompanySplits,M2,70
+M2 receives 35
+Payout,Alice,35,1,100
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,57,F10,W
+CompanyRevenue,M3,40
+CompanySplits,M3,40
+M3 receives 20
+Payout,Bob,20,1,100
+
+CompanyOperates,M4,Charlie
+LaysTileAtFor,M4,5,D8,W,50
+CompanyRevenue,M4,60
+CompanySplits,M4,60
+M4 receives 30
+Payout,Charlie,30,1,100
+
+CompanyOperates,M5,Charlie
+CompanyRevenue,M5,50
+CompanySplits,M5,50
+M5 receives 25
+Payout,Charlie,25,1,100
+
+CompanyOperates,M6,Bob
+LaysTileAt,M6,58,B14,SE
+CompanyRevenue,M6,60
+CompanySplits,M6,60
+M6 receives 30
+Payout,Bob,30,1,100
+
+CompanyOperates,BY,Alice
+LaysTileAtFor,BY,9,J14,W,70
+LaysTileAt,BY,9,J12,W
+CompanyRevenue,BY,200
+CompanyPaysOutFull,BY,200
+Payout,Bob,60,3,10
+Payout,Charlie,20,1,10
+Payout,Alice,120,6,10
+PRICE_MOVES_LOG,BY,108,D2,120,E2
+
+CompanyOperates,SX,Charlie
+LaysTileAt,SX,8,H18,SE
+CompanyDoesNotPayDividend,SX
+PRICE_MOVES_LOG,SX,88,C4,84,B4
+BuysTrain,SX,2+2,IPO,120
+PrivateCloses,LD
+BuysTrain,SX,2+2,IPO,120
+All 2+2-trains are sold out, 3-trains now available
+BuysTrain,SX,3,IPO,180
+FirstTrainBought,3
+StartOfPhase,3
+
+EndOfOperatingRound,4.1
+ORWorthIncrease,Alice,4.1,237
+ORWorthIncrease,Bob,4.1,198
+ORWorthIncrease,Charlie,4.1,-69
+Has,M1,60
+Has,M2,110
+Has,M3,60
+Has,M4,40
+Has,M5,75
+Has,M6,90
+Has,BY,220
+Has,SX,108
+Has,Alice,236
+Has,Bob,239
+Has,Charlie,146
+StartStockRound,5
+HasPriority,Charlie
+BUY_SHARE_LOG,Charlie,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+BUY_SHARE_LOG,Alice,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+BUY_SHARE_LOG,Bob,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+PASSES,Charlie
+BUY_SHARE_LOG,Alice,10,SX,IPO,88
+PriceIsPaidTo,88,SX
+SharesReleased,All,BA
+PASSES,Bob
+PASSES,Charlie
+PASSES,Alice
+
+END_SR,5
+PRICE_MOVES_LOG,BY,120,E2,132,E1
+SoldOut,BY,120,E2,132,E1
+PRICE_MOVES_LOG,SX,84,B4,86,B3
+SoldOut,SX,84,B4,86,B3
+Has,M1,60
+Has,M2,110
+Has,M3,60
+Has,M4,40
+Has,M5,75
+Has,M6,90
+Has,BY,220
+Has,SX,460
+Has,Alice,60
+Has,Bob,151
+Has,Charlie,58
+START_OR,5.1
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAt,M1,207,H2,E
+CompanyRevenue,M1,50
+CompanySplits,M1,50
+M1 receives 25
+Payout,Bob,25,1,100
+
+CompanyOperates,M2,Alice
+LaysTileAt,M2,209,E19,SW
+CompanyRevenue,M2,80
+CompanySplits,M2,80
+M2 receives 40
+Payout,Alice,40,1,100
+BuysTrain,M2,2+2,BY,150
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,205,F14,SE
+CompanyRevenue,M3,50
+CompanySplits,M3,50
+M3 receives 25
+Payout,Bob,25,1,100
+
+CompanyOperates,M4,Charlie
+LaysTileAt,M4,14,G5,SW
+CompanyRevenue,M4,80
+CompanySplits,M4,80
+M4 receives 40
+Payout,Charlie,40,1,100
+
+CompanyOperates,M5,Charlie
+LaysTileAt,M5,208,H20,W
+CompanyRevenue,M5,80
+CompanySplits,M5,80
+M5 receives 40
+Payout,Charlie,40,1,100
+BuysTrain,M5,2+2,SX,115
+
+CompanyOperates,M6,Bob
+LaysTileAt,M6,12,A11,W
+CompanyRevenue,M6,70
+CompanySplits,M6,70
+M6 receives 35
+Payout,Bob,35,1,100
+
+CompanyOperates,BY,Alice
+LaysTileAt,BY,9,J10,W
+LAYS_TOKEN_ON,BY,J8,120
+CompanyRevenue,BY,240
+CompanyPaysOutFull,BY,240
+Payout,Bob,72,3,10
+Payout,Alice,144,6,10
+Payout,Charlie,24,1,10
+PRICE_MOVES_LOG,BY,132,E1,148,F1
+BuysTrain,BY,3,IPO,180
+
+CompanyOperates,SX,Charlie
+LaysTileAt,SX,13,H16,W
+LAYS_TOKEN_ON,SX,E19,60
+CompanyRevenue,SX,190
+CompanyPaysOutFull,SX,190
+Payout,Alice,38,2,10
+Payout,Bob,57,3,10
+Payout,Charlie,95,5,10
+PRICE_MOVES_LOG,SX,86,B3,92,C3
+BuysTrain,SX,3,IPO,180
+BuysTrain,SX,3,IPO,180
+All 3-trains are sold out, 3+3-trains now available
+
+EndOfOperatingRound,5.1
+ORWorthIncrease,Alice,5.1,340
+ORWorthIncrease,Bob,5.1,320
+ORWorthIncrease,Charlie,5.1,275
+Has,M1,85
+Has,M2,0
+Has,M3,85
+Has,M4,80
+Has,M5,0
+Has,M6,125
+Has,BY,70
+Has,SX,155
+Has,Alice,292
+Has,Bob,405
+Has,Charlie,287
+START_OR,5.2
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAtFor,M1,211,G3,E,50
+CompanyRevenue,M1,70
+CompanySplits,M1,70
+M1 receives 35
+Payout,Bob,35,1,100
+
+CompanyOperates,M2,Alice
+LaysTileAt,M2,23,D18,NW
+CompanyRevenue,M2,180
+CompanySplits,M2,180
+M2 receives 90
+Payout,Alice,90,1,100
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,8,F8,E
+CompanyRevenue,M3,50
+CompanySplits,M3,50
+M3 receives 25
+Payout,Bob,25,1,100
+
+CompanyOperates,M4,Charlie
+LaysTileAt,M4,8,G7,W
+CompanyRevenue,M4,110
+CompanySplits,M4,110
+M4 receives 55
+Payout,Charlie,55,1,100
+
+CompanyOperates,M5,Charlie
+LaysTileAt,M5,8,C17,SE
+CompanyRevenue,M5,180
+CompanySplits,M5,180
+M5 receives 90
+Payout,Charlie,90,1,100
+
+CompanyOperates,M6,Bob
+LaysTileAt,M6,8,C15,NW
+CompanyRevenue,M6,70
+CompanySplits,M6,70
+M6 receives 35
+Payout,Bob,35,1,100
+
+CompanyOperates,BY,Alice
+LaysTileAtFor,BY,214,J6,SE,50
+CompanyRevenue,BY,330
+CompanyPaysOutFull,BY,330
+Payout,Alice,198,6,10
+Payout,Bob,99,3,10
+Payout,Charlie,33,1,10
+PRICE_MOVES_LOG,BY,148,F1,166,G1
+
+CompanyOperates,SX,Charlie
+LaysTileAt,SX,23,H18,E
+LAYS_TOKEN_ON,SX,H20,40
+CompanyRevenue,SX,370
+CompanyPaysOutFull,SX,370
+Payout,Alice,74,2,10
+Payout,Bob,111,3,10
+Payout,Charlie,185,5,10
+PRICE_MOVES_LOG,SX,92,C3,100,D3
+
+EndOfOperatingRound,5.2
+ORWorthIncrease,Alice,5.2,496
+ORWorthIncrease,Bob,5.2,423
+ORWorthIncrease,Charlie,5.2,451
+Has,M1,70
+Has,M2,90
+Has,M3,110
+Has,M4,135
+Has,M5,90
+Has,M6,160
+Has,BY,20
+Has,SX,115
+Has,Alice,664
+Has,Bob,750
+Has,Charlie,680
+StartStockRound,6
+HasPriority,Bob
+START_COMPANY_LOG,Bob,BA,84,168,2,20,BANK
+SharesReleased,4 10%,PR
+BUY_SHARE_LOG,Charlie,10,BA,IPO,84
+BUY_SHARE_LOG,Alice,10,BA,IPO,84
+BUY_SHARE_LOG,Bob,10,BA,IPO,84
+FloatsWithCash,BA,420
+SharesReleased,All,WT
+BUY_SHARE_LOG,Charlie,10,BA,IPO,84
+PriceIsPaidTo,84,BA
+START_COMPANY_LOG,Alice,WT,84,168,2,20,BANK
+BUY_SHARE_LOG,Bob,10,BA,IPO,84
+PriceIsPaidTo,84,BA
+BUY_SHARE_LOG,Charlie,10,BA,IPO,84
+PriceIsPaidTo,84,BA
+BUY_SHARE_LOG,Alice,10,WT,IPO,84
+BUY_SHARE_LOG,Bob,20,BA,IPO,168
+PriceIsPaidTo,168,BA
+BUY_SHARE_LOG,Charlie,10,WT,IPO,84
+BUY_SHARE_LOG,Alice,10,WT,IPO,84
+FloatsWithCash,WT,420
+SharesReleased,All,HE
+BUY_SHARE_LOG,Bob,10,WT,IPO,84
+PriceIsPaidTo,84,WT
+START_COMPANY_LOG,Charlie,HE,84,168,2,20,BANK
+BUY_SHARE_LOG,Alice,10,HE,IPO,84
+BUY_SHARE_LOG,Bob,10,HE,IPO,84
+BUY_SHARE_LOG,Charlie,10,HE,IPO,84
+FloatsWithCash,HE,420
+BUY_SHARE_LOG,Alice,10,HE,IPO,84
+PriceIsPaidTo,84,HE
+PASSES,Bob
+BUY_SHARE_LOG,Charlie,10,HE,IPO,84
+PriceIsPaidTo,84,HE
+PASSES,Alice
+PASSES,Bob
+PASSES,Charlie
+
+END_SR,6
+PRICE_STAYS_LOG,BY,166,G1
+SoldOutNoRaise,BY,166,G1
+PRICE_MOVES_LOG,SX,100,D3,108,D2
+SoldOut,SX,100,D3,108,D2
+PRICE_MOVES_LOG,BA,84,B4,86,B3
+SoldOut,BA,84,B4,86,B3
+Has,M1,70
+Has,M2,90
+Has,M3,110
+Has,M4,135
+Has,M5,90
+Has,M6,160
+Has,BY,20
+Has,SX,115
+Has,BA,840
+Has,WT,504
+Has,HE,588
+Has,Alice,76
+Has,Bob,78
+Has,Charlie,8
+START_OR,6.1
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAt,M1,9,I5,SE
+CompanyRevenue,M1,70
+CompanySplits,M1,70
+M1 receives 35
+Payout,Bob,35,1,100
+
+CompanyOperates,M2,Alice
+CompanyRevenue,M2,180
+CompanySplits,M2,180
+M2 receives 90
+Payout,Alice,90,1,100
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,206,F10,SE
+CompanyRevenue,M3,50
+CompanySplits,M3,50
+M3 receives 25
+Payout,Bob,25,1,100
+
+CompanyOperates,M4,Charlie
+LaysTileAt,M4,15,D8,NE
+CompanyRevenue,M4,110
+CompanySplits,M4,110
+M4 receives 55
+Payout,Charlie,55,1,100
+
+CompanyOperates,M5,Charlie
+CompanyRevenue,M5,180
+CompanySplits,M5,180
+M5 receives 90
+Payout,Charlie,90,1,100
+
+CompanyOperates,M6,Bob
+CompanyRevenue,M6,70
+CompanySplits,M6,70
+M6 receives 35
+Payout,Bob,35,1,100
+
+CompanyOperates,BY,Alice
+LaysTileAt,BY,8,K5,NE
+CompanyRevenue,BY,330
+CompanyPaysOutFull,BY,330
+Payout,Alice,198,6,10
+Payout,Bob,99,3,10
+Payout,Charlie,33,1,10
+PRICE_MOVES_LOG,BY,166,G1,186,H1
+
+CompanyOperates,SX,Charlie
+CompanyRevenue,SX,370
+CompanyPaysOutFull,SX,370
+Payout,Alice,74,2,10
+Payout,Bob,111,3,10
+Payout,Charlie,185,5,10
+PRICE_MOVES_LOG,SX,108,D2,120,E2
+
+CompanyOperates,BA,Bob
+LaysTileAt,BA,210,L6,E
+CompanyDoesNotPayDividend,BA
+PRICE_MOVES_LOG,BA,86,B3,82,A3
+BuysTrain,BA,3+3,IPO,270
+FirstTrainBought,3+3
+BuysTrain,BA,3+3,IPO,270
+BuysTrain,BA,3+3,IPO,270
+All 3+3-trains are sold out, 4-trains now available
+
+CompanyOperates,WT,Alice
+LaysTileAt,WT,57,M9,W
+CompanyDoesNotPayDividend,WT
+PRICE_MOVES_LOG,WT,84,B4,78,A4
+BuysTrain,WT,4,IPO,360
+FirstTrainBought,4
+StartOfPhase,4
+CompanyDiscardsTrain,SX,2+2
+StartFormationRound,PR
+StartingPlayer,Alice
+
+EndOfFormationRound,PR,OperatingRound 6.1
+
+CompanyOperates,HE,Charlie
+LaysTileAtFor,HE,9,K7,SW,50
+CompanyDoesNotPayDividend,HE
+PRICE_MOVES_LOG,HE,84,B4,78,A4
+BuysTrain,HE,4,IPO,360
+
+EndOfOperatingRound,6.1
+ORWorthIncrease,Alice,6.1,476
+ORWorthIncrease,Bob,6.1,405
+ORWorthIncrease,Charlie,6.1,431
+Has,M1,105
+Has,M2,180
+Has,M3,135
+Has,M4,190
+Has,M5,180
+Has,M6,195
+Has,BY,20
+Has,SX,115
+Has,BA,30
+Has,WT,144
+Has,HE,178
+Has,Alice,448
+Has,Bob,423
+Has,Charlie,401
+StartFormationRound,PR
+StartingPlayer,Alice
+
+EndOfFormationRoundNoInterrupt,PR
+START_OR,6.2
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+LaysTileAt,M1,8,D10,W
+CompanyDoesNotPayDividend,M1
+BuysTrain,M1,3+3,BA,105
+
+CompanyOperates,M2,Alice
+LaysTileAt,M2,203,B12,W
+CompanyRevenue,M2,100
+CompanySplits,M2,100
+M2 receives 50
+Payout,Alice,50,1,100
+
+CompanyOperates,M3,Bob
+LaysTileAt,M3,9,F16,W
+CompanyDoesNotPayDividend,M3
+
+CompanyOperates,M4,Charlie
+CompanyDoesNotPayDividend,M4
+BuysTrain,M4,3,SX,190
+
+CompanyOperates,M5,Charlie
+CompanyRevenue,M5,100
+CompanySplits,M5,100
+M5 receives 50
+Payout,Charlie,50,1,100
+
+CompanyOperates,M6,Bob
+CompanyDoesNotPayDividend,M6
+BuysTrain,M6,3+3,BA,195
+
+CompanyOperates,BY,Alice
+LaysTileAt,BY,23,F20,NW
+CompanyRevenue,BY,180
+CompanyPaysOutFull,BY,180
+Payout,Alice,108,6,10
+Payout,Bob,54,3,10
+Payout,Charlie,18,1,10
+PRICE_MOVES_LOG,BY,186,H1,208,I1
+BuysTrain,BY,2+2,M2,1
+
+CompanyOperates,SX,Charlie
+CompanyRevenue,SX,220
+CompanyPaysOutFull,SX,220
+Payout,Alice,44,2,10
+Payout,Bob,66,3,10
+Payout,Charlie,110,5,10
+PRICE_MOVES_LOG,SX,120,E2,134,F2
+BuysTrain,SX,2+2,M5,1
+
+CompanyOperates,BA,Bob
+CompanyRevenue,BA,120
+CompanyPaysOutFull,BA,120
+Payout,Alice,12,1,10
+Payout,Bob,72,6,10
+Payout,Charlie,36,3,10
+PRICE_MOVES_LOG,BA,82,A3,86,B3
+BuysTrain,BA,3+3,M1,1
+
+CompanyOperates,WT,Alice
+LaysTileAt,WT,9,M11,W
+CompanyRevenue,WT,0
+CompanyDoesNotPayDividend,WT
+PRICE_MOVES_LOG,WT,78,A4,72,A5
+
+CompanyOperates,HE,Charlie
+CompanyRevenue,HE,130
+CompanyPaysOutFull,HE,130
+Payout,Alice,26,2,10
+Payout,Bob,13,1,10
+Payout,Charlie,52,4,10
+PRICE_MOVES_LOG,HE,78,A4,84,B4
+BuysTrain,HE,3+3,M6,1
+
+EndOfOperatingRound,6.2
+ORWorthIncrease,Alice,6.2,402
+ORWorthIncrease,Bob,6.2,377
+ORWorthIncrease,Charlie,6.2,418
+Has,M1,1
+Has,M2,231
+Has,M3,135
+Has,M4,0
+Has,M5,231
+Has,M6,1
+Has,BY,19
+Has,SX,304
+Has,BA,329
+Has,WT,144
+Has,HE,177
+Has,Alice,698
+Has,Bob,668
+Has,Charlie,697
+StartFormationRound,PR
+StartingPlayer,Alice
+
+EndOfFormationRoundNoInterrupt,PR
+StartStockRound,7
+HasPriority,Alice
+BUY_SHARE_LOG,Alice,10,PR,IPO,154
+BUY_SHARE_LOG,Bob,10,PR,IPO,154
+BUY_SHARE_LOG,Charlie,10,PR,IPO,154
+BUY_SHARE_LOG,Alice,10,PR,IPO,154
+SELL_SHARE_LOG,Bob,10,BY,208
+PRICE_MOVES_LOG,BY,208,I1,188,I2
+BUY_SHARE_LOG,Charlie,10,HE,IPO,84
+PriceIsPaidTo,84,HE
+BUY_SHARE_LOG,Alice,10,BY,Pool,188
+BUY_SHARE_LOG,Bob,20,HE,IPO,168
+PriceIsPaidTo,168,HE
+BUY_SHARE_LOG,Charlie,10,WT,IPO,84
+PriceIsPaidTo,84,WT
+BUY_SHARE_LOG,Alice,10,WT,IPO,84
+PriceIsPaidTo,84,WT
+PASSES,Bob
+PASSES,Charlie
+PASSES,Alice
+
+END_SR,7
+PRICE_MOVES_LOG,BY,188,I2,208,I1
+SoldOut,BY,188,I2,208,I1
+PRICE_MOVES_LOG,SX,134,F2,148,F1
+SoldOut,SX,134,F2,148,F1
+SoldOutNoRaise,BA,86,B3
+PRICE_MOVES_LOG,HE,84,B4,86,B3
+SoldOut,HE,84,B4,86,B3
+Has,M1,1
+Has,M2,231
+Has,M3,135
+Has,M4,0
+Has,M5,231
+Has,M6,1
+Has,BY,19
+Has,SX,304
+Has,BA,329
+Has,WT,312
+Has,HE,429
+Has,Alice,118
+Has,Bob,554
+Has,Charlie,375
+StartFormationRound,PR
+StartingPlayer,Alice
+
+EndOfFormationRoundNoInterrupt,PR
+START_OR,7.1
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+CompanyDoesNotPayDividend,M1
+
+CompanyOperates,M2,Alice
+CompanyDoesNotPayDividend,M2
+BuysTrain,M2,2+2,BY,231
+
+CompanyOperates,M3,Bob
+CompanyDoesNotPayDividend,M3
+BuysTrain,M3,3+3,BA,135
+
+CompanyOperates,M4,Charlie
+CompanyRevenue,M4,90
+CompanySplits,M4,90
+M4 receives 45
+Payout,Charlie,45,1,100
+
+CompanyOperates,M5,Charlie
+CompanyDoesNotPayDividend,M5
+BuysTrain,M5,2+2,SX,231
+
+CompanyOperates,M6,Bob
+CompanyDoesNotPayDividend,M6
+
+CompanyOperates,BY,Alice
+CompanyRevenue,BY,190
+CompanyPaysOutFull,BY,190
+Payout,Alice,133,7,10
+Payout,Bob,38,2,10
+Payout,Charlie,19,1,10
+PRICE_MOVES_LOG,BY,208,I1,232,J1
+
+CompanyOperates,SX,Charlie
+CompanyRevenue,SX,220
+CompanyPaysOutFull,SX,220
+Payout,Alice,44,2,10
+Payout,Bob,66,3,10
+Payout,Charlie,110,5,10
+PRICE_MOVES_LOG,SX,148,F1,166,G1
+BuysTrain,SX,4,IPO,360
+All 4-trains are sold out, 4+4-trains now available
+
+CompanyOperates,BA,Bob
+CompanyRevenue,BA,120
+CompanyPaysOutFull,BA,120
+Payout,Alice,12,1,10
+Payout,Bob,72,6,10
+Payout,Charlie,36,3,10
+PRICE_MOVES_LOG,BA,86,B3,92,C3
+BuysTrain,BA,4+4,IPO,440
+All 4+4-trains are sold out, 5-trains now available
+FirstTrainBought,4+4
+StartOfPhase,4+4
+StartFormationRound,PR
+START_MERGED_COMPANY,PR,154,154
+FloatsWithCash,PR,616
+MERGE_MINOR_LOG,Alice,M2,PR,0,0
+GetShareForMinor,Alice,10,PR,IPO,M2
+ExchangesBaseToken,PR,M2,E19/1
+
+EndOfFormationRound,PR,OperatingRound 7.1
+
+CompanyOperates,HE,Charlie
+LaysTileAt,HE,8,L4,NW
+LAYS_TOKEN_ON,HE,G5,60
+CompanyRevenue,HE,260
+CompanyPaysOutFull,HE,260
+Payout,Alice,52,2,10
+Payout,Bob,78,3,10
+Payout,Charlie,130,5,10
+PRICE_MOVES_LOG,HE,86,B3,92,C3
+
+CompanyOperates,WT,Alice
+LaysTileAt,WT,69,M7,SE
+CompanyRevenue,WT,280
+CompanyWithholds,WT,280
+PRICE_MOVES_LOG,WT,72,A5,64,A6
+
+EndOfOperatingRound,7.1
+ORWorthIncrease,Alice,7.1,741
+ORWorthIncrease,Bob,7.1,442
+ORWorthIncrease,Charlie,7.1,516
+Has,M1,1
+Has,M3,0
+Has,M4,45
+Has,M5,0
+Has,M6,1
+Has,BY,250
+Has,SX,175
+Has,BA,24
+Has,WT,592
+Has,HE,369
+Has,PR,616
+Has,Alice,369
+Has,Bob,848
+Has,Charlie,745
+StartFormationRound,PR
+
+EndOfFormationRoundNoInterrupt,PR
+START_OR,7.2
+ReceivesFor,Alice,10,OBB
+ReceivesFor,Bob,15,PfB
+ReceivesFor,Bob,25,BB
+ReceivesFor,Charlie,30,HB
+
+CompanyOperates,M1,Bob
+CompanyDoesNotPayDividend,M1
+BuysTrain,M1,3+3,BA,1
+
+CompanyOperates,M3,Bob
+CompanyRevenue,M3,90
+CompanySplits,M3,90
+M3 receives 45
+Payout,Bob,45,1,100
+
+CompanyOperates,M4,Charlie
+CompanyRevenue,M4,90
+CompanySplits,M4,90
+M4 receives 45
+Payout,Charlie,45,1,100
+
+CompanyOperates,M5,Charlie
+CompanyDoesNotPayDividend,M5
+
+CompanyOperates,M6,Bob
+CompanyDoesNotPayDividend,M6
+BuysTrain,M6,3,SX,1
+
+CompanyOperates,BY,Alice
+CompanyRevenue,BY,110
+CompanyPaysOutFull,BY,110
+Payout,Alice,77,7,10
+Payout,Bob,22,2,10
+Payout,Charlie,11,1,10
+PRICE_MOVES_LOG,BY,232,J1,258,K1
+
+CompanyOperates,SX,Charlie
+CompanyRevenue,SX,240
+CompanyPaysOutFull,SX,240
+Payout,Alice,48,2,10
+Payout,Bob,72,3,10
+Payout,Charlie,120,5,10
+PRICE_MOVES_LOG,SX,166,G1,186,H1
+
+CompanyOperates,PR,Alice
+CompanyDoesNotPayDividend,PR
+PRICE_MOVES_LOG,PR,154,I4,138,H4
+BuysTrain,PR,5,IPO,500
+FirstTrainBought,5
+StartOfPhase,5
+PrivateCloses,OBB
+PrivateCloses,PfB
+StartFormationRound,PR
+MERGE_MINOR_LOG,Bob,BB,PR,no,no
+GetShareForMinor,Bob,10,PR,IPO,BB
+PrivateCloses,BB
+MERGE_MINOR_LOG,Charlie,HB,PR,no,no
+GetShareForMinor,Charlie,10,PR,IPO,HB
+PrivateCloses,HB
+MERGE_MINOR_LOG,Bob,M1,PR,0,1
+GetShareForMinor,Bob,5,PR,IPO,M1
+ExchangesBaseToken,PR,M1,H2/1
+MERGE_MINOR_LOG,Bob,M3,PR,45,1
+GetShareForMinor,Bob,5,PR,IPO,M3
+ExchangesBaseToken,PR,M3,F14/1
+MERGE_MINOR_LOG,Charlie,M4,PR,90,1
+GetShareForMinor,Charlie,10,PR,IPO,M4
+ExchangesBaseToken,PR,M4,G5/1
+MERGE_MINOR_LOG,Charlie,M5,PR,0,0
+GetShareForMinor,Charlie,5,PR,IPO,M5
+MERGE_MINOR_LOG,Bob,M6,PR,0,1
+GetShareForMinor,Bob,5,PR,IPO,M6
+ExchangesBaseToken,PR,M6,C11/1
+CompanyDiscardsTrain,PR,3
+CompanyDiscardsTrain,PR,3
+
+EndOfFormationRound,PR,OperatingRound 7.2
+IS_NOW_PRES_OF,Bob,PR
+
+CompanyOperates,BA,Bob
|