diff --git a/kyoto/pom.xml b/kyoto/pom.xml
index 7997d6a3..b2ded774 100644
--- a/kyoto/pom.xml
+++ b/kyoto/pom.xml
@@ -9,7 +9,7 @@
UTF-8
- 0.3.2
+ 0.3.3
diff --git a/kyoto/src/main/java/uk/ac/ic/kyoto/simulations/Simulation.java b/kyoto/src/main/java/uk/ac/ic/kyoto/simulations/Simulation.java
index e698fd24..209a5e80 100644
--- a/kyoto/src/main/java/uk/ac/ic/kyoto/simulations/Simulation.java
+++ b/kyoto/src/main/java/uk/ac/ic/kyoto/simulations/Simulation.java
@@ -1,5 +1,11 @@
package uk.ac.ic.kyoto.simulations;
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.util.Arrays;
+import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
@@ -30,10 +36,7 @@
import uk.ac.ic.kyoto.services.ParticipantTimeService;
import uk.ac.ic.kyoto.services.TradeHistoryService;
import uk.ac.ic.kyoto.singletonfactory.SingletonProvider;
-import uk.ac.ic.kyoto.util.sim.jsonobjects.DataProvider;
-import uk.ac.ic.kyoto.util.sim.jsonobjects.JSONObjectContainer;
import uk.ac.ic.kyoto.util.sim.jsonobjects.simulations.CountryData;
-import uk.ac.ic.kyoto.util.sim.jsonobjects.simulations.SimulationData;
import uk.ac.imperial.presage2.core.simulator.InjectedSimulation;
import uk.ac.imperial.presage2.core.simulator.Parameter;
import uk.ac.imperial.presage2.core.simulator.Scenario;
@@ -46,6 +49,8 @@
public class Simulation extends InjectedSimulation {
+ final private Logger logger = Logger.getLogger(Simulation.class);
+
@Parameter(name="GROWTH_MARKET_STATE")
public double GROWTH_MARKET_STATE;
@Parameter(name="STABLE_MARKET_STATE")
@@ -92,7 +97,10 @@ public class Simulation extends InjectedSimulation {
public int MINIMUM_KYOTO_MEMBERSHIP_DURATION;
@Parameter(name="TICK_YEAR")
public int TICK_YEAR;
+ @Parameter(name="COUNTRIES")
+ public String COUNTRIES = "";
+ String countryDataSource = "countrydata.csv";
@Override
protected Set getModules() {
@@ -158,18 +166,14 @@ public Simulation(Set modules) {
protected void addToScenario(Scenario s) {
// TODO Auto-generated method stub
- //Something new
- Logger logger = Logger.getLogger(Simulation.class);
try{
- JSONObjectContainer obj = new DataProvider().getSimulationData(this.simPersist.getID());
+ Map countries = getCountriesFromCSV();
- if(obj.getObject().getCountries() == null || obj.getObject().getCountries().isEmpty()){
+ if(countries.isEmpty()){
//TODO uncomment for final code
throw new NoCountryDataException(); //Commented out for now.
- }
+ } else {
- if(obj.getObject().getCountries() != null && !obj.getObject().getCountries().isEmpty()){
- Map countries = obj.getObject().getCountries();
for(String countryKey : countries.keySet()){
logger.info(countries.get(countryKey));
String className = countries.get(countryKey).getClassName();
@@ -251,4 +255,76 @@ protected void addToScenario(Scenario s) {
}
+
+ Map getCountriesFromCSV()
+ throws NoCountryDataException {
+ Map countriesData = new HashMap();
+ // get set of ISO codes for countries to include in this simulation.
+ Set included = new HashSet();
+ included.addAll(Arrays.asList(COUNTRIES.split(",")));
+
+ InputStream is = null;
+ InputStreamReader isReader = null;
+ BufferedReader countryCsv = null;
+ try {
+ // attempt to load csv county data
+ is = this.getClass().getClassLoader()
+ .getResourceAsStream(this.countryDataSource);
+ isReader = new InputStreamReader(is);
+ countryCsv = new BufferedReader(isReader);
+
+ // discard first line, just headings
+ countryCsv.readLine();
+
+ String line = null;
+
+ do {
+ line = countryCsv.readLine();
+ if (line != null) {
+ String[] values = line.split(",");
+ if (values.length != 10) {
+ logger.warn("Missing/malformed line in countrydata.csv: '"
+ + line + "'");
+ continue;
+ }
+ // check ISO code to see if we should load this CountryData
+ if (!included.contains(values[2]))
+ continue;
+ CountryData c = new CountryData();
+ c.setClassName(values[0]);
+ c.setName(values[1]);
+ c.setAgentName(values[1]);
+ c.setISO(values[2]);
+ c.setLandArea(values[3]);
+ c.setArableLandArea(values[4]);
+ c.setGDP(values[5]);
+ c.setGDPRate(values[6]);
+ c.setEnergyOutput(values[7]);
+ c.setCarbonOutput(values[8]);
+ c.setCarbonOutput1990(values[9]);
+ countriesData.put(c.getISO(), c);
+ }
+ } while (line != null);
+
+ } catch (IOException e) {
+ throw new NoCountryDataException();
+ } finally {
+ if (countryCsv != null)
+ try {
+ countryCsv.close();
+ } catch (IOException e) {
+ }
+ if (isReader != null)
+ try {
+ isReader.close();
+ } catch (IOException e) {
+ }
+ if (is != null)
+ try {
+ is.close();
+ } catch (IOException e) {
+ }
+ }
+ return countriesData;
+ }
}
diff --git a/kyoto/src/main/java/uk/ac/ic/kyoto/util/sim/jsonobjects/simulations/CountryData.java b/kyoto/src/main/java/uk/ac/ic/kyoto/util/sim/jsonobjects/simulations/CountryData.java
index 857e1efb..406c1856 100644
--- a/kyoto/src/main/java/uk/ac/ic/kyoto/util/sim/jsonobjects/simulations/CountryData.java
+++ b/kyoto/src/main/java/uk/ac/ic/kyoto/util/sim/jsonobjects/simulations/CountryData.java
@@ -26,6 +26,26 @@ public class CountryData{
private String energyOutput;
private String carbonOutput;
+ public CountryData() {
+ super();
+ }
+
+ public CountryData(String className, String name, String iSO, String landArea,
+ String arableLandArea, String gDP, String gDPRate,
+ String energyOutput, String carbonOutput, String carbonOutput1990) {
+ super();
+ this.className = className;
+ this.name = name;
+ ISO = iSO;
+ this.landArea = landArea;
+ this.arableLandArea = arableLandArea;
+ GDP = gDP;
+ GDPRate = gDPRate;
+ this.energyOutput = energyOutput;
+ this.carbonOutput = carbonOutput;
+ this.carbonOutput1990 = carbonOutput1990;
+ }
+
public String toString(){
String s = "";
s += " { \"Type\" : \"" + Type + "\"";
diff --git a/kyoto/src/main/resources/countrydata.csv b/kyoto/src/main/resources/countrydata.csv
new file mode 100644
index 00000000..83509c89
--- /dev/null
+++ b/kyoto/src/main/resources/countrydata.csv
@@ -0,0 +1,180 @@
+className,name,ISO,landArea,arableLandArea,GDP,GDPRate,energyOutput,carbonOutput,carbonOutput1990
+AnnexOneReduce,Australia,AUS,7682300,468503,360000000000.0,0.0555,369446401,346913000,287331000
+AnnexOneReduce,Austria,AUT,82445,13677,191000000000.0,0.0341,80287777,63549000,60960000
+AnnexOneReduce,Belgium,BEL,30278,8302,228000000000.0,0.017,156848781,119185000,108470000
+AnnexOneReduce,Croatia,HRV,55974,14566,21072021153.0,0.0278,23604756,20418000,16443000
+AnnexOneReduce,Denmark,DNK,42434,22295,148000000000.0,0.0181,62585625,56068000,50421000
+AnnexOneReduce,Finland,FIN,303815,19913,112000000000.0,0.0462,102738090,56989000,50942000
+AnnexOneReduce,France,FRA,640427,182711,1310000000000.0,0.0297,703718793,409094000,399028000
+AnnexOneReduce,Germany,DEU,348672,115698,1980000000000.0,0.0206,1031203645,895533000,928327000
+AnnexOneReduce,Greece,GRC,130647,26749,123000000000.0,0.0381,92858358,87810000,72724000
+AnnexOneReduce,Hungary,HUN,89608,45782,42041981950.0,0.0491,74645363,60854000,62992000
+AnnexOneReduce,Iceland,ISL,100250,70,6978804827.0,0.0692,6374764,2101000,2072000
+AnnexOneReduce,Ireland,IRL,68883,11587,80430419314.0,0.0749,45070638,38140000,30418000
+AnnexOneReduce,Italy,ITA,294140,77651,1090000000000.0,0.0122,472774575,441752000,424184000
+AnnexOneReduce,Japan,JPN,364485,43620,4010000000000.0,-0.017,1371922914,1159186000,1094706000
+AnnexOneReduce,Netherlands,NLD,33893,7441,360000000000.0,0.0361,186368204,175360000,164128000
+AnnexOneReduce,New Zealand,NZL,262443,14848,53201147777.0,0.0039,595073552,30058000,24023000
+AnnexOneReduce,Norway,NOR,304282,8312,130000000000.0,0.0269,179167683,34594000,31331000
+AnnexOneReduce,Portugal,PRT,91470,15898,107000000000.0,0.0417,59357939,58056000,43725000
+AnnexOneReduce,Slovenia,SVN,20151,1719,18806068172.0,0.0323,19016516,15522000,12970000
+AnnexOneReduce,Spain,ESP,498980,135776,548000000000.0,0.0426,354892484,274684000,227592000
+AnnexOneReduce,Sweden,SWE,410335,24368,223000000000.0,0.0377,147350016,54954000,51708000
+AnnexOneReduce,Switzerland,CHE,39997,3941,260000000000.0,0.0258,71553977,41914000,42966000
+AnnexOneReduce,Turkey,TUR,769632,229764,261000000000.0,0.0345,251083420,205422000,150791000
+AnnexOneReduce,United Kingdom,GBR,241930,56121,1300000000000.0,0.0385,611278440,554139000,570219000
+AnnexOneSustain,Belarus,BLR,202900,55575,13459157442.0,0.0684,60231120,57598000,87487000
+AnnexOneSustain,Bulgaria,BGR,108489,33099,11527834227.0,0.0526,60479429,50993000,77729000
+AnnexOneSustain,Czech Republic,CZE,77247,29999,56157542840.0,-0.0083,136930966,125525000,139504000
+AnnexOneSustain,Estonia,EST,42388,5207,4976131209.0,0.0623,18812170,17143000,23029000
+AnnexOneSustain,Latvia,LVA,62249,17926,5901334632.0,0.0496,8543268,7990000,14052000
+AnnexOneSustain,Lithuania,LTU,62680,29216,9865322750.0,0.0768,18459543,16197000,22152000
+AnnexOneSustain,Luxembourg,LUX,2586,619,17374068062.0,0.0611,7438082,7356000,9894000
+AnnexOneSustain,Poland,POL,304255,122547,154000000000.0,0.0486,752626615,326935000,366773000
+AnnexOneSustain,Romania,ROU,229891,90961,37374180233.0,-0.0523,103681000,103681000,158862000
+AnnexOneSustain,Russia,RUS,16377742,1218599,242000000000.0,-0.0481,1571812255,1511270000,2220721000
+AnnexOneSustain,Slovakia,SVK,48105,14264,20034616753.0,0.022,43230000,43230000,45647000
+AnnexOneSustain,Ukraine,UKR,579330,324791,35917739713.0,-0.0342,357907735,328637000,641681000
+AnnexOneSustain,Canada,CAN,9093507,415573,571000000000.0,0.0385,642229194,478881000,450077000
+NonAnnexOne,Albania,ALB,27398,5507,2550868201.0,0.0527,2291559,1753000,7488000
+NonAnnexOne,Algeria,DZA,2381741,75501,45557277077.0,0.0541,107167789,107080000,78896000
+NonAnnexOne,Angola,AGO,1246700,33038,6353998396.0,0.0758,28680881,7308000,4430000
+NonAnnexOne,Antigua and Barbuda,ATG,443,80,566962963.0,0.0597,359068,334000,301000
+NonAnnexOne,Argentina,ARG,2736690,274490,280000000000.0,0.0452,155291608,137674000,112614000
+NonAnnexOne,Armenia,ARM,28203,4766,1751787925.0,0.0516,3505577,3407000,3682000
+NonAnnexOne,Azerbaijan,AZE,82629,17754,4288293285.0,0.0502,36696190,31595000,44173000
+NonAnnexOne,Bahamas,BHS,10010,58,5271222913.0,0.0755,1920463,1793000,1951000
+NonAnnexOne,Bahrain,BHR,760,19,6892190977.0,0.0701,18405000,18405000,11885000
+NonAnnexOne,Bangladesh,BGD,130168,74173,41059359194.0,0.0534,52820157,24041000,15533000
+NonAnnexOne,Barbados,BRB,431,160,2265050000.0,0.0618,1332208,1140000,1074000
+NonAnnexOne,Belize,BLZ,22806,696,604200000.0,0.0341,405659,370000,312000
+NonAnnexOne,Benin,BEN,110622,26029,2302980052.0,0.0377,25087838,1214000,715000
+NonAnnexOne,Bhutan,BTN,38394,1081,357347686.0,0.0648,436866,385000,128000
+NonAnnexOne,Bolivia,BOL,1083301,30146,7688192379.0,0.0479,15365372,10326000,5504000
+NonAnnexOne,Bosnia and Herzegovina,BIH,51187,10026,3472692887.0,0.1637,17275381,16226000,3938000
+NonAnnexOne,Botswana,BWA,566730,3805,5181264021.0,0.1042,5803405,3832000,2178000
+NonAnnexOne,Brazil,BRA,8459417,586036,746000000000.0,0.0002,613292152,314013000,208887000
+NonAnnexOne,Brunei,BRN,5265,110,4050545679.0,-0.0058,5992634,5985000,6421000
+NonAnnexOne,Burkina Faso,BFA,273800,48353,2608266814.0,0.0781,996689,862000,587000
+NonAnnexOne,Burundi,BDI,25680,9124,1150043586.0,0.0382,342599,301000,304000
+NonAnnexOne,Cambodia,KHM,176515,36081,3004660731.0,0.0528,2612801,2233000,451000
+NonAnnexOne,Cameroon,CMR,472710,58868,9153580048.0,0.0489,17166804,3209000,1738000
+NonAnnexOne,Cape Verde,CPV,4033,460,498531194.0,0.0678,162501,154000,88000
+NonAnnexOne,Central African Republic,CAF,622984,19313,925029532.0,0.0489,284994,249000,198000
+NonAnnexOne,Chad,TCD,1259200,35258,1680363347.0,0.0657,124660,114000,147000
+NonAnnexOne,Chile,CHL,743812,19619,74507126524.0,0.0308,79079224,58987000,34903000
+NonAnnexOne,China,CHN,9569901,1385905,1020000000000.0,0.0772,4403586628,3324345000,2460744000
+NonAnnexOne,Colombia,COL,1038700,20878,114000000000.0,0.0051,97918267,65977000,57337000
+NonAnnexOne,Comoros,COM,1862,778,220721098.0,0.008,84815,73000,77000
+NonAnnexOne,Congo-Brazzaville,COG,341500,4952,1862525120.0,0.0331,6960898,777000,1188000
+NonAnnexOne,Congo-Kinshasa,COD,2267048,64853,6159656672.0,-0.0201,7228894,2534000,4070000
+NonAnnexOne,Costa Rica,CRI,51060,2229,13288447404.0,0.0838,10996630,5317000,2956000
+NonAnnexOne,Cuba,CUB,109820,30631,21184400000.0,-0.0101,43901236,24444000,33340000
+NonAnnexOne,Cyprus,CYP,9241,999,8806286089.0,0.0498,6671085,6641000,4653000
+NonAnnexOne,Djibouti,DJI,23180,9,440372269.0,0.0164,476825,411000,400000
+NonAnnexOne,Dominica,DMA,751,50,286018367.0,0.0406,84442,77000,59000
+NonAnnexOne,Dominican Republic,DOM,48320,10881,19060069618.0,0.0589,24958257,18683000,9571000
+NonAnnexOne,Ecuador,ECU,276841,15808,21628064000.0,0.013,28106916,22229000,16835000
+NonAnnexOne,Egypt,EGY,995450,29067,83112092779.0,0.0256,130053792,122243000,75944000
+NonAnnexOne,El Salvador,SLV,20721,6500,11672600000.0,0.0381,18488238,5812000,2618000
+NonAnnexOne,Equatorial Guinea,GNQ,28051,1299,421420756.0,0.1868,190056,169000,121000
+NonAnnexOne,Ethiopia,ETH,1000000,112080,7365633704.0,-0.0454,91784646,5027000,3018000
+NonAnnexOne,Fiji,FJI,18274,2001,1482000964.0,0.0172,855938,730000,818000
+NonAnnexOne,Gabon,GAB,257667,3118,4305619640.0,0.0136,5098255,1632000,4844000
+NonAnnexOne,Gambia,GMB,10000,2788,867566985.0,0.0338,271813,235000,191000
+NonAnnexOne,Georgia,GEO,69700,8022,3471318999.0,0.0421,5583545,4961000,15335000
+NonAnnexOne,Ghana,GHA,227533,40507,11123643892.0,0.0508,35150317,6410000,3931000
+NonAnnexOne,Grenada,GRD,344,20,321488889.0,0.1198,218790,191000,121000
+NonAnnexOne,Guatemala,GTM,107159,14334,17289952490.0,0.0509,31200999,8753000,5086000
+NonAnnexOne,Guinea,GIN,245717,10990,3548440585.0,0.0462,1310823,1243000,1056000
+NonAnnexOne,Guinea-Bissau,GNB,28120,2327,348843065.0,-0.27,227798,216000,253000
+NonAnnexOne,Guyana,GUY,196849,4390,1054664618.0,-0.0171,1912752,1654000,1140000
+NonAnnexOne,Haiti,HTI,27560,7747,3352660263.0,0.0283,6242962,1232000,994000
+NonAnnexOne,Honduras,HND,111890,10663,5759267721.0,0.0309,15491483,4650000,2593000
+NonAnnexOne,India,IND,2973193,1451809,400000000000.0,0.0658,1935771324,1071912000,690577000
+NonAnnexOne,Indonesia,IDN,1811569,201456,105000000000.0,-0.132,384452098,210211000,149566000
+NonAnnexOne,Iran,IRN,1531595,160001,103000000000.0,0.0285,319665750,316176000,227185000
+NonAnnexOne,Iraq,IRQ,437367,56700,10619633395.0,0.4319,73372841,72372000,52555000
+NonAnnexOne,Israel,ISR,20330,3141,98374111037.0,0.0631,64592480,62779000,33535000
+NonAnnexOne,Ivory Coast,CIV,318003,32531,11807744803.0,0.0571,29651174,6912000,5798000
+NonAnnexOne,Jamaica,JAM,10831,1715,8134640219.0,-0.0127,11774506,9729000,7965000
+NonAnnexOne,Jordan,JOR,88802,3053,6809093687.0,0.0362,14821315,14543000,10403000
+NonAnnexOne,Kazakhstan,KAZ,2699700,221059,20943718871.0,-0.0169,129034772,125063000,261307000
+NonAnnexOne,Kenya,KEN,569140,45597,12627598014.0,0.0371,57455364,10037000,5823000
+NonAnnexOne,Kiribati,KIR,811,22,63334088.0,0.1269,38050,33000,22000
+NonAnnexOne,Kuwait,KWT,17818,150,26933053643.0,0.0296,54882123,51089000,45423000
+NonAnnexOne,Kyrgyzstan,KGZ,191801,12530,1509043762.0,0.0108,6947811,5823000,10862000
+NonAnnexOne,Laos,LAO,230800,9255,1051099560.0,0.0522,895579,895000,235000
+NonAnnexOne,Lebanon,LBN,10230,1673,16909481257.0,0.0423,17718602,16179000,9098000
+NonAnnexOne,Liberia,LBR,96320,3304,386200000.0,0.3018,475736,389000,484000
+NonAnnexOne,Libya,LBY,1759540,18123,33381719193.0,0.0014,52012074,48133000,40319000
+NonAnnexOne,Macedonia,MKD,25433,5471,3181511574.0,0.0358,16651460,12625000,10777000
+NonAnnexOne,Madagascar,MDG,581540,29251,3481036735.0,0.0401,1947538,1738000,986000
+NonAnnexOne,Malawi,MWI,94080,19456,2438699777.0,0.0196,845882,829000,612000
+NonAnnexOne,Malaysia,MYS,329613,17939,78648278313.0,-0.0554,131991244,114187000,56593000
+NonAnnexOne,Maldives,MDV,298,40,509236177.0,0.0977,357867,334000,154000
+NonAnnexOne,Mali,MLI,1220190,45872,2688320677.0,0.079,582174,517000,422000
+NonAnnexOne,Malta,MLT,316,99,3439620560.0,0.063,2423728,2145000,2178000
+NonAnnexOne,Marshall Islands,MHL,181,20,101438240.0,-0.0293,77762,70000,48000
+NonAnnexOne,Mauritania,MRT,1030700,2061,1362933780.0,0.0235,1111000,1111000,2666000
+NonAnnexOne,Mauritius,MUS,2030,995,3686059996.0,0.0655,2405994,2197000,1463000
+NonAnnexOne,Mexico,MEX,1943945,243457,461000000000.0,0.0481,406289191,372167000,325604000
+NonAnnexOne,Moldova,MDA,32891,18194,1518316979.0,-0.0376,6652035,6271000,20972000
+NonAnnexOne,Mongolia,MNG,1553556,11887,1065751609.0,0.0302,8836341,7708000,10044000
+NonAnnexOne,Morocco,MAR,446300,84797,37179044119.0,0.0822,34564684,32039000,23542000
+NonAnnexOne,Mozambique,MOZ,786380,42576,3942114680.0,0.107,1168750,1133000,1001000
+NonAnnexOne,Myanmar,MMR,653508,98135,5925840636.0,0.0442,8611879,8078000,4276000
+NonAnnexOne,Namibia,NAM,823290,8172,3584817299.0,0.0317,36524097,1995000,7000
+NonAnnexOne,Nepal,NPL,143351,21984,4746361735.0,0.036,2387506,2252000,634000
+NonAnnexOne,Nicaragua,NIC,119990,17810,3236350099.0,0.0323,3566072,3421000,2644000
+NonAnnexOne,Niger,NER,1266700,144784,1912712274.0,0.1065,1603811,1074000,832000
+NonAnnexOne,Nigeria,NGA,910768,300736,33836780111.0,0.0294,141939111,40183000,45375000
+NonAnnexOne,North Korea,PRK,120408,26972,10283761860.0,-0.0148,72249156,64928000,244835000
+NonAnnexOne,Oman,OMN,309500,255,13948791459.0,0.0171,32109981,16667000,10352000
+NonAnnexOne,Pakistan,PAK,770876,190319,67167359184.0,0.0329,97663000,97663000,68566000
+NonAnnexOne,Palau,PLW,459,40,115091000.0,0.0162,222421,117000,235000
+NonAnnexOne,Panama,PAN,74340,5517,10531000000.0,0.0705,6571269,5948000,3135000
+NonAnnexOne,Papua New Guinea,PNG,452860,2219,3649450735.0,0.0522,4938364,2838000,2142000
+NonAnnexOne,Paraguay,PRY,397302,29678,7221739306.0,0.0073,4924681,4503000,2263000
+NonAnnexOne,Peru,PER,1279996,36864,51361433447.0,-0.0076,130316234,27807000,21170000
+NonAnnexOne,Philippines,PHL,298170,56652,72206940470.0,0.0003,119547922,75650000,44532000
+NonAnnexOne,Qatar,QAT,11586,188,10537362637.0,0.1178,40302250,32402000,11775000
+NonAnnexOne,Rwanda,RWA,24668,11366,1856411342.0,0.0985,687412,642000,682000
+NonAnnexOne,Saint Kitts and Nevis,KNA,261,51,258644444.0,0.0104,116084,103000,66000
+NonAnnexOne,Saint Lucia,LCA,606,39,590814815.0,0.0391,360964,308000,165000
+NonAnnexOne,Saint Vincent and the Grenadines,VCT,389,70,322924778.0,0.0463,192174,165000,81000
+NonAnnexOne,Samoa,WSM,2821,620,226933624.0,0.0229,153125,132000,125000
+NonAnnexOne,Sao Tome and Principe,STP,964,83,72858656.0,0.0219,89314,81000,66000
+NonAnnexOne,Saudi Arabia,SAU,2149690,32742,146000000000.0,0.0279,231419668,207288000,215055000
+NonAnnexOne,Senegal,SEN,192530,24019,4492803809.0,0.0542,3429703,3429000,3183000
+NonAnnexOne,Serbia and Montenegro,CS,101813,21086,16733463868.0,0.0007,124142832,53700000,45350000
+NonAnnexOne,Seychelles,SYC,455,10,642818532.0,0.1095,485410,440000,114000
+NonAnnexOne,Sierra Leone,SLE,71620,5694,955064160.0,-0.0262,660135,594000,389000
+NonAnnexOne,Singapore,SGP,687,10,80659456004.0,-0.0212,66600554,57293000,46941000
+NonAnnexOne,Solomon Islands,SLB,27986,171,340596748.0,0.0278,225886,161000,161000
+NonAnnexOne,Somalia,SOM,627337,10288,1996094358.0,0.0192,565232,517000,18000
+NonAnnexOne,South Africa,ZAF,1214470,147609,122000000000.0,0.0074,397161073,372219000,333514000
+NonAnnexOne,South Korea,KOR,96920,16280,325000000000.0,-0.0498,420203339,363840000,243815000
+NonAnnexOne,Sri Lanka,LKA,64630,9038,14480283732.0,0.0472,32193477,7763000,3773000
+NonAnnexOne,Sudan,SDN,2505800,161093,10392582815.0,0.0993,26919056,4697000,5559000
+NonAnnexOne,Suriname,SUR,156000,581,843733843.0,0.0307,2538415,2164000,1811000
+NonAnnexOne,Swaziland,SWZ,17204,1763,1361706209.0,0.024,1422460,1214000,425000
+NonAnnexOne,Syrian Arab Republic,SYR,183630,45644,17468375691.0,0.0679,64161446,62709000,37451000
+NonAnnexOne,Tajikistan,TJK,141510,9304,1155783316.0,0.0586,3501062,2497000,7220000
+NonAnnexOne,Thailand,THA,510890,140941,112000000000.0,-0.1051,292142578,186504000,95833000
+NonAnnexOne,Togo,TGO,54385,24038,1396908826.0,-0.0242,7741711,1166000,774000
+NonAnnexOne,Tonga,TON,717,144,168792157.0,0.0279,121231,110000,77000
+NonAnnexOne,Trinidad and Tobago,TTO,5128,750,5925560160.0,0.0736,19476454,19318000,16960000
+NonAnnexOne,Tunisia,TUN,155360,26489,19621088421.0,0.0485,20685933,18001000,13267000
+NonAnnexOne,Turkmenistan,TKM,469930,22013,2787051225.0,0.0896,29669141,26047000,28067000
+NonAnnexOne,Uganda,UGA,197100,43077,6396379843.0,0.0904,1519896,1338000,818000
+NonAnnexOne,United Arab Emirates,ARE,83600,638,78510108226.0,-0.0087,81495000,81495000,52009000
+NonAnnexOne,Uruguay,URY,175015,13490,23452931857.0,0.0499,9694907,5688000,3993000
+NonAnnexOne,Uzbekistan,UZB,425400,44710,12833935973.0,0.0396,118559221,117571000,114014000
+NonAnnexOne,Vanuatu,VUT,12189,200,244163350.0,0.0201,93736,84000,70000
+NonAnnexOne,Venezuela,VEN,882050,25138,86951227857.0,-0.001,182929844,167322000,122162000
+NonAnnexOne,Vietnam,VNM,310070,65528,27209526681.0,0.0576,235205031,47781000,21408000
+NonAnnexOne,Yemen,YEM,527968,15364,6738657410.0,0.0543,12587479,12200000,14382000
+NonAnnexOne,Zambia,ZMB,743398,51777,3034581154.0,-0.0131,14801362,2314000,2446000
+NonAnnexOne,Zimbabwe,ZWE,386847,31862,7614659228.0,-0.0072,31814816,14254000,15504000
+USAgent,United States,USA,9161966,1650062,8740000000000.0,0.0492,6304070667,5449078000,4879376000
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/annex1reduce/AnnexOneReduceTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/annex1reduce/AnnexOneReduceTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/annex1reduce/AnnexOneReduceTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/annex1reduce/AnnexOneReduceTest.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/countries/AbstractCountryTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/countries/AbstractCountryTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/countries/AbstractCountryTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/countries/AbstractCountryTest.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/countries/CalculateGDPRateTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/countries/CalculateGDPRateTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/countries/CalculateGDPRateTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/countries/CalculateGDPRateTest.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/countries/CarbonAbsorptionHandlerTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/countries/CarbonAbsorptionHandlerTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/countries/CarbonAbsorptionHandlerTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/countries/CarbonAbsorptionHandlerTest.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/countries/IsolatedAbstractCountry.java b/kyoto/src/test/java/uk/ac/ic/kyoto/countries/IsolatedAbstractCountry.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/countries/IsolatedAbstractCountry.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/countries/IsolatedAbstractCountry.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/countries/IsolatedCarbonAbsorptionHandler.java b/kyoto/src/test/java/uk/ac/ic/kyoto/countries/IsolatedCarbonAbsorptionHandler.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/countries/IsolatedCarbonAbsorptionHandler.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/countries/IsolatedCarbonAbsorptionHandler.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/countries/IsolatedCarbonReductionHandler.java b/kyoto/src/test/java/uk/ac/ic/kyoto/countries/IsolatedCarbonReductionHandler.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/countries/IsolatedCarbonReductionHandler.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/countries/IsolatedCarbonReductionHandler.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/countries/IsolatedEnergyUsageHandler.java b/kyoto/src/test/java/uk/ac/ic/kyoto/countries/IsolatedEnergyUsageHandler.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/countries/IsolatedEnergyUsageHandler.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/countries/IsolatedEnergyUsageHandler.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/countries/TestCountry.java b/kyoto/src/test/java/uk/ac/ic/kyoto/countries/TestCountry.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/countries/TestCountry.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/countries/TestCountry.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/market/EconomyTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/market/EconomyTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/market/EconomyTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/market/EconomyTest.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/market/FossilPricesTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/market/FossilPricesTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/market/FossilPricesTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/market/FossilPricesTest.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/services/GlobalTimeServiceTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/services/GlobalTimeServiceTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/services/GlobalTimeServiceTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/services/GlobalTimeServiceTest.java
diff --git a/kyoto/src/test/java/uk/ac/ic/kyoto/simulations/LoadCountryDataTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/simulations/LoadCountryDataTest.java
new file mode 100644
index 00000000..3da1c91c
--- /dev/null
+++ b/kyoto/src/test/java/uk/ac/ic/kyoto/simulations/LoadCountryDataTest.java
@@ -0,0 +1,117 @@
+package uk.ac.ic.kyoto.simulations;
+
+import static org.junit.Assert.*;
+
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+
+import uk.ac.ic.kyoto.util.sim.jsonobjects.simulations.CountryData;
+
+import com.google.inject.AbstractModule;
+
+public class LoadCountryDataTest {
+
+ Map sampleData;
+
+ @Before
+ public void setUp() {
+ sampleData = new HashMap();
+ sampleData.put("GBR", new CountryData("AnnexOneReduce",
+ "United Kingdom", "GBR", "241930", "56121", "1300000000000.0",
+ "0.0385", "611278440", "554139000", "570219000"));
+ sampleData.put("LVA", new CountryData("AnnexOneSustain", "Latvia",
+ "LVA", "62249", "17926", "5901334632.0", "0.0496", "8543268",
+ "7990000", "14052000"));
+ sampleData.put("BHR", new CountryData("NonAnnexOne", "Bahrain", "BHR",
+ "760", "19", "6892190977.0", "0.0701", "18405000", "18405000",
+ "11885000"));
+ sampleData.put("USA", new CountryData("USAgent", "United States",
+ "USA", "9161966", "1650062", "8740000000000.0", "0.0492",
+ "6304070667", "5449078000", "4879376000"));
+ }
+
+ private void compareCountryData(CountryData c1, CountryData c2) {
+ assertEquals(c1.getClassName(), c2.getClassName());
+ assertEquals(c1.getName(), c2.getName());
+ assertEquals(c1.getISO(), c2.getISO());
+ assertEquals(Integer.parseInt(c1.getLandArea()),
+ Integer.parseInt(c2.getLandArea()));
+ assertEquals(Integer.parseInt(c1.getArableLandArea()),
+ Integer.parseInt(c2.getArableLandArea()));
+ assertEquals(Double.parseDouble(c1.getGDP()),
+ Double.parseDouble(c2.getGDP()), 1E-5);
+ assertEquals(Double.parseDouble(c1.getGDPRate()),
+ Double.parseDouble(c2.getGDPRate()), 1E-5);
+ assertEquals(Long.parseLong(c1.getEnergyOutput()),
+ Long.parseLong(c2.getEnergyOutput()));
+ assertEquals(Long.parseLong(c1.getCarbonOutput()),
+ Long.parseLong(c2.getCarbonOutput()));
+ assertEquals(Long.parseLong(c1.getCarbonOutput1990()),
+ Long.parseLong(c2.getCarbonOutput1990()));
+ }
+
+ @Test
+ public void testLoadCountries() {
+ Simulation sim = new Simulation(Collections. emptySet());
+ sim.COUNTRIES = "LVA,GBR,BHR,USA";
+ Map countries = sim.getCountriesFromCSV();
+
+ assertEquals(4, countries.size());
+ assertTrue(countries.containsKey("LVA"));
+ compareCountryData(sampleData.get("LVA"), countries.get("LVA"));
+ assertTrue(countries.containsKey("GBR"));
+ compareCountryData(sampleData.get("GBR"), countries.get("GBR"));
+ assertTrue(countries.containsKey("BHR"));
+ compareCountryData(sampleData.get("BHR"), countries.get("BHR"));
+ assertTrue(countries.containsKey("USA"));
+ compareCountryData(sampleData.get("USA"), countries.get("USA"));
+ }
+
+ @Test
+ public void testIgnoreUnknownCountries() {
+ Simulation sim = new Simulation(Collections. emptySet());
+ sim.COUNTRIES = "LVA,ZZZ";
+ Map countries = sim.getCountriesFromCSV();
+
+ assertEquals(1, countries.size());
+ assertTrue(countries.containsKey("LVA"));
+ compareCountryData(sampleData.get("LVA"), countries.get("LVA"));
+ }
+
+ @Test
+ public void testIgnoreDuplicateCountries() {
+ Simulation sim = new Simulation(Collections. emptySet());
+ sim.COUNTRIES = "LVA,GBR,GBR,LVA";
+ Map countries = sim.getCountriesFromCSV();
+
+ assertEquals(2, countries.size());
+ assertTrue(countries.containsKey("LVA"));
+ compareCountryData(sampleData.get("LVA"), countries.get("LVA"));
+ assertTrue(countries.containsKey("GBR"));
+ compareCountryData(sampleData.get("GBR"), countries.get("GBR"));
+ }
+
+ @Test
+ public void testZeroCountries() {
+ Simulation sim = new Simulation(Collections. emptySet());
+ sim.COUNTRIES = "";
+ Map countries = sim.getCountriesFromCSV();
+
+ assertTrue(countries.isEmpty());
+ }
+
+ @Test
+ public void testBadDataSource() {
+ Simulation sim = new Simulation(Collections. emptySet());
+ sim.COUNTRIES = "LVA,GBR,BHR,USA";
+ sim.countryDataSource = "nonexistantfile.csv";
+ try {
+ sim.getCountriesFromCSV();
+ fail();
+ } catch(NullPointerException e) {}
+ }
+}
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/trade/TradeProtocolTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/trade/TradeProtocolTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/trade/TradeProtocolTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/trade/TradeProtocolTest.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/trade/TradeTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/trade/TradeTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/trade/TradeTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/trade/TradeTest.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/trade/TradeTest2.java b/kyoto/src/test/java/uk/ac/ic/kyoto/trade/TradeTest2.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/trade/TradeTest2.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/trade/TradeTest2.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/tradehistory/AnalysisUtilsTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/tradehistory/AnalysisUtilsTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/tradehistory/AnalysisUtilsTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/tradehistory/AnalysisUtilsTest.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/tradehistory/SessionHistoryTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/tradehistory/SessionHistoryTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/tradehistory/SessionHistoryTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/tradehistory/SessionHistoryTest.java
diff --git a/kyoto/src/main/test/uk/ac/ic/kyoto/tradehistory/TickHistoryTest.java b/kyoto/src/test/java/uk/ac/ic/kyoto/tradehistory/TickHistoryTest.java
similarity index 100%
rename from kyoto/src/main/test/uk/ac/ic/kyoto/tradehistory/TickHistoryTest.java
rename to kyoto/src/test/java/uk/ac/ic/kyoto/tradehistory/TickHistoryTest.java
diff --git a/kyoto/src/test/resources/countrydata.csv b/kyoto/src/test/resources/countrydata.csv
new file mode 100644
index 00000000..83509c89
--- /dev/null
+++ b/kyoto/src/test/resources/countrydata.csv
@@ -0,0 +1,180 @@
+className,name,ISO,landArea,arableLandArea,GDP,GDPRate,energyOutput,carbonOutput,carbonOutput1990
+AnnexOneReduce,Australia,AUS,7682300,468503,360000000000.0,0.0555,369446401,346913000,287331000
+AnnexOneReduce,Austria,AUT,82445,13677,191000000000.0,0.0341,80287777,63549000,60960000
+AnnexOneReduce,Belgium,BEL,30278,8302,228000000000.0,0.017,156848781,119185000,108470000
+AnnexOneReduce,Croatia,HRV,55974,14566,21072021153.0,0.0278,23604756,20418000,16443000
+AnnexOneReduce,Denmark,DNK,42434,22295,148000000000.0,0.0181,62585625,56068000,50421000
+AnnexOneReduce,Finland,FIN,303815,19913,112000000000.0,0.0462,102738090,56989000,50942000
+AnnexOneReduce,France,FRA,640427,182711,1310000000000.0,0.0297,703718793,409094000,399028000
+AnnexOneReduce,Germany,DEU,348672,115698,1980000000000.0,0.0206,1031203645,895533000,928327000
+AnnexOneReduce,Greece,GRC,130647,26749,123000000000.0,0.0381,92858358,87810000,72724000
+AnnexOneReduce,Hungary,HUN,89608,45782,42041981950.0,0.0491,74645363,60854000,62992000
+AnnexOneReduce,Iceland,ISL,100250,70,6978804827.0,0.0692,6374764,2101000,2072000
+AnnexOneReduce,Ireland,IRL,68883,11587,80430419314.0,0.0749,45070638,38140000,30418000
+AnnexOneReduce,Italy,ITA,294140,77651,1090000000000.0,0.0122,472774575,441752000,424184000
+AnnexOneReduce,Japan,JPN,364485,43620,4010000000000.0,-0.017,1371922914,1159186000,1094706000
+AnnexOneReduce,Netherlands,NLD,33893,7441,360000000000.0,0.0361,186368204,175360000,164128000
+AnnexOneReduce,New Zealand,NZL,262443,14848,53201147777.0,0.0039,595073552,30058000,24023000
+AnnexOneReduce,Norway,NOR,304282,8312,130000000000.0,0.0269,179167683,34594000,31331000
+AnnexOneReduce,Portugal,PRT,91470,15898,107000000000.0,0.0417,59357939,58056000,43725000
+AnnexOneReduce,Slovenia,SVN,20151,1719,18806068172.0,0.0323,19016516,15522000,12970000
+AnnexOneReduce,Spain,ESP,498980,135776,548000000000.0,0.0426,354892484,274684000,227592000
+AnnexOneReduce,Sweden,SWE,410335,24368,223000000000.0,0.0377,147350016,54954000,51708000
+AnnexOneReduce,Switzerland,CHE,39997,3941,260000000000.0,0.0258,71553977,41914000,42966000
+AnnexOneReduce,Turkey,TUR,769632,229764,261000000000.0,0.0345,251083420,205422000,150791000
+AnnexOneReduce,United Kingdom,GBR,241930,56121,1300000000000.0,0.0385,611278440,554139000,570219000
+AnnexOneSustain,Belarus,BLR,202900,55575,13459157442.0,0.0684,60231120,57598000,87487000
+AnnexOneSustain,Bulgaria,BGR,108489,33099,11527834227.0,0.0526,60479429,50993000,77729000
+AnnexOneSustain,Czech Republic,CZE,77247,29999,56157542840.0,-0.0083,136930966,125525000,139504000
+AnnexOneSustain,Estonia,EST,42388,5207,4976131209.0,0.0623,18812170,17143000,23029000
+AnnexOneSustain,Latvia,LVA,62249,17926,5901334632.0,0.0496,8543268,7990000,14052000
+AnnexOneSustain,Lithuania,LTU,62680,29216,9865322750.0,0.0768,18459543,16197000,22152000
+AnnexOneSustain,Luxembourg,LUX,2586,619,17374068062.0,0.0611,7438082,7356000,9894000
+AnnexOneSustain,Poland,POL,304255,122547,154000000000.0,0.0486,752626615,326935000,366773000
+AnnexOneSustain,Romania,ROU,229891,90961,37374180233.0,-0.0523,103681000,103681000,158862000
+AnnexOneSustain,Russia,RUS,16377742,1218599,242000000000.0,-0.0481,1571812255,1511270000,2220721000
+AnnexOneSustain,Slovakia,SVK,48105,14264,20034616753.0,0.022,43230000,43230000,45647000
+AnnexOneSustain,Ukraine,UKR,579330,324791,35917739713.0,-0.0342,357907735,328637000,641681000
+AnnexOneSustain,Canada,CAN,9093507,415573,571000000000.0,0.0385,642229194,478881000,450077000
+NonAnnexOne,Albania,ALB,27398,5507,2550868201.0,0.0527,2291559,1753000,7488000
+NonAnnexOne,Algeria,DZA,2381741,75501,45557277077.0,0.0541,107167789,107080000,78896000
+NonAnnexOne,Angola,AGO,1246700,33038,6353998396.0,0.0758,28680881,7308000,4430000
+NonAnnexOne,Antigua and Barbuda,ATG,443,80,566962963.0,0.0597,359068,334000,301000
+NonAnnexOne,Argentina,ARG,2736690,274490,280000000000.0,0.0452,155291608,137674000,112614000
+NonAnnexOne,Armenia,ARM,28203,4766,1751787925.0,0.0516,3505577,3407000,3682000
+NonAnnexOne,Azerbaijan,AZE,82629,17754,4288293285.0,0.0502,36696190,31595000,44173000
+NonAnnexOne,Bahamas,BHS,10010,58,5271222913.0,0.0755,1920463,1793000,1951000
+NonAnnexOne,Bahrain,BHR,760,19,6892190977.0,0.0701,18405000,18405000,11885000
+NonAnnexOne,Bangladesh,BGD,130168,74173,41059359194.0,0.0534,52820157,24041000,15533000
+NonAnnexOne,Barbados,BRB,431,160,2265050000.0,0.0618,1332208,1140000,1074000
+NonAnnexOne,Belize,BLZ,22806,696,604200000.0,0.0341,405659,370000,312000
+NonAnnexOne,Benin,BEN,110622,26029,2302980052.0,0.0377,25087838,1214000,715000
+NonAnnexOne,Bhutan,BTN,38394,1081,357347686.0,0.0648,436866,385000,128000
+NonAnnexOne,Bolivia,BOL,1083301,30146,7688192379.0,0.0479,15365372,10326000,5504000
+NonAnnexOne,Bosnia and Herzegovina,BIH,51187,10026,3472692887.0,0.1637,17275381,16226000,3938000
+NonAnnexOne,Botswana,BWA,566730,3805,5181264021.0,0.1042,5803405,3832000,2178000
+NonAnnexOne,Brazil,BRA,8459417,586036,746000000000.0,0.0002,613292152,314013000,208887000
+NonAnnexOne,Brunei,BRN,5265,110,4050545679.0,-0.0058,5992634,5985000,6421000
+NonAnnexOne,Burkina Faso,BFA,273800,48353,2608266814.0,0.0781,996689,862000,587000
+NonAnnexOne,Burundi,BDI,25680,9124,1150043586.0,0.0382,342599,301000,304000
+NonAnnexOne,Cambodia,KHM,176515,36081,3004660731.0,0.0528,2612801,2233000,451000
+NonAnnexOne,Cameroon,CMR,472710,58868,9153580048.0,0.0489,17166804,3209000,1738000
+NonAnnexOne,Cape Verde,CPV,4033,460,498531194.0,0.0678,162501,154000,88000
+NonAnnexOne,Central African Republic,CAF,622984,19313,925029532.0,0.0489,284994,249000,198000
+NonAnnexOne,Chad,TCD,1259200,35258,1680363347.0,0.0657,124660,114000,147000
+NonAnnexOne,Chile,CHL,743812,19619,74507126524.0,0.0308,79079224,58987000,34903000
+NonAnnexOne,China,CHN,9569901,1385905,1020000000000.0,0.0772,4403586628,3324345000,2460744000
+NonAnnexOne,Colombia,COL,1038700,20878,114000000000.0,0.0051,97918267,65977000,57337000
+NonAnnexOne,Comoros,COM,1862,778,220721098.0,0.008,84815,73000,77000
+NonAnnexOne,Congo-Brazzaville,COG,341500,4952,1862525120.0,0.0331,6960898,777000,1188000
+NonAnnexOne,Congo-Kinshasa,COD,2267048,64853,6159656672.0,-0.0201,7228894,2534000,4070000
+NonAnnexOne,Costa Rica,CRI,51060,2229,13288447404.0,0.0838,10996630,5317000,2956000
+NonAnnexOne,Cuba,CUB,109820,30631,21184400000.0,-0.0101,43901236,24444000,33340000
+NonAnnexOne,Cyprus,CYP,9241,999,8806286089.0,0.0498,6671085,6641000,4653000
+NonAnnexOne,Djibouti,DJI,23180,9,440372269.0,0.0164,476825,411000,400000
+NonAnnexOne,Dominica,DMA,751,50,286018367.0,0.0406,84442,77000,59000
+NonAnnexOne,Dominican Republic,DOM,48320,10881,19060069618.0,0.0589,24958257,18683000,9571000
+NonAnnexOne,Ecuador,ECU,276841,15808,21628064000.0,0.013,28106916,22229000,16835000
+NonAnnexOne,Egypt,EGY,995450,29067,83112092779.0,0.0256,130053792,122243000,75944000
+NonAnnexOne,El Salvador,SLV,20721,6500,11672600000.0,0.0381,18488238,5812000,2618000
+NonAnnexOne,Equatorial Guinea,GNQ,28051,1299,421420756.0,0.1868,190056,169000,121000
+NonAnnexOne,Ethiopia,ETH,1000000,112080,7365633704.0,-0.0454,91784646,5027000,3018000
+NonAnnexOne,Fiji,FJI,18274,2001,1482000964.0,0.0172,855938,730000,818000
+NonAnnexOne,Gabon,GAB,257667,3118,4305619640.0,0.0136,5098255,1632000,4844000
+NonAnnexOne,Gambia,GMB,10000,2788,867566985.0,0.0338,271813,235000,191000
+NonAnnexOne,Georgia,GEO,69700,8022,3471318999.0,0.0421,5583545,4961000,15335000
+NonAnnexOne,Ghana,GHA,227533,40507,11123643892.0,0.0508,35150317,6410000,3931000
+NonAnnexOne,Grenada,GRD,344,20,321488889.0,0.1198,218790,191000,121000
+NonAnnexOne,Guatemala,GTM,107159,14334,17289952490.0,0.0509,31200999,8753000,5086000
+NonAnnexOne,Guinea,GIN,245717,10990,3548440585.0,0.0462,1310823,1243000,1056000
+NonAnnexOne,Guinea-Bissau,GNB,28120,2327,348843065.0,-0.27,227798,216000,253000
+NonAnnexOne,Guyana,GUY,196849,4390,1054664618.0,-0.0171,1912752,1654000,1140000
+NonAnnexOne,Haiti,HTI,27560,7747,3352660263.0,0.0283,6242962,1232000,994000
+NonAnnexOne,Honduras,HND,111890,10663,5759267721.0,0.0309,15491483,4650000,2593000
+NonAnnexOne,India,IND,2973193,1451809,400000000000.0,0.0658,1935771324,1071912000,690577000
+NonAnnexOne,Indonesia,IDN,1811569,201456,105000000000.0,-0.132,384452098,210211000,149566000
+NonAnnexOne,Iran,IRN,1531595,160001,103000000000.0,0.0285,319665750,316176000,227185000
+NonAnnexOne,Iraq,IRQ,437367,56700,10619633395.0,0.4319,73372841,72372000,52555000
+NonAnnexOne,Israel,ISR,20330,3141,98374111037.0,0.0631,64592480,62779000,33535000
+NonAnnexOne,Ivory Coast,CIV,318003,32531,11807744803.0,0.0571,29651174,6912000,5798000
+NonAnnexOne,Jamaica,JAM,10831,1715,8134640219.0,-0.0127,11774506,9729000,7965000
+NonAnnexOne,Jordan,JOR,88802,3053,6809093687.0,0.0362,14821315,14543000,10403000
+NonAnnexOne,Kazakhstan,KAZ,2699700,221059,20943718871.0,-0.0169,129034772,125063000,261307000
+NonAnnexOne,Kenya,KEN,569140,45597,12627598014.0,0.0371,57455364,10037000,5823000
+NonAnnexOne,Kiribati,KIR,811,22,63334088.0,0.1269,38050,33000,22000
+NonAnnexOne,Kuwait,KWT,17818,150,26933053643.0,0.0296,54882123,51089000,45423000
+NonAnnexOne,Kyrgyzstan,KGZ,191801,12530,1509043762.0,0.0108,6947811,5823000,10862000
+NonAnnexOne,Laos,LAO,230800,9255,1051099560.0,0.0522,895579,895000,235000
+NonAnnexOne,Lebanon,LBN,10230,1673,16909481257.0,0.0423,17718602,16179000,9098000
+NonAnnexOne,Liberia,LBR,96320,3304,386200000.0,0.3018,475736,389000,484000
+NonAnnexOne,Libya,LBY,1759540,18123,33381719193.0,0.0014,52012074,48133000,40319000
+NonAnnexOne,Macedonia,MKD,25433,5471,3181511574.0,0.0358,16651460,12625000,10777000
+NonAnnexOne,Madagascar,MDG,581540,29251,3481036735.0,0.0401,1947538,1738000,986000
+NonAnnexOne,Malawi,MWI,94080,19456,2438699777.0,0.0196,845882,829000,612000
+NonAnnexOne,Malaysia,MYS,329613,17939,78648278313.0,-0.0554,131991244,114187000,56593000
+NonAnnexOne,Maldives,MDV,298,40,509236177.0,0.0977,357867,334000,154000
+NonAnnexOne,Mali,MLI,1220190,45872,2688320677.0,0.079,582174,517000,422000
+NonAnnexOne,Malta,MLT,316,99,3439620560.0,0.063,2423728,2145000,2178000
+NonAnnexOne,Marshall Islands,MHL,181,20,101438240.0,-0.0293,77762,70000,48000
+NonAnnexOne,Mauritania,MRT,1030700,2061,1362933780.0,0.0235,1111000,1111000,2666000
+NonAnnexOne,Mauritius,MUS,2030,995,3686059996.0,0.0655,2405994,2197000,1463000
+NonAnnexOne,Mexico,MEX,1943945,243457,461000000000.0,0.0481,406289191,372167000,325604000
+NonAnnexOne,Moldova,MDA,32891,18194,1518316979.0,-0.0376,6652035,6271000,20972000
+NonAnnexOne,Mongolia,MNG,1553556,11887,1065751609.0,0.0302,8836341,7708000,10044000
+NonAnnexOne,Morocco,MAR,446300,84797,37179044119.0,0.0822,34564684,32039000,23542000
+NonAnnexOne,Mozambique,MOZ,786380,42576,3942114680.0,0.107,1168750,1133000,1001000
+NonAnnexOne,Myanmar,MMR,653508,98135,5925840636.0,0.0442,8611879,8078000,4276000
+NonAnnexOne,Namibia,NAM,823290,8172,3584817299.0,0.0317,36524097,1995000,7000
+NonAnnexOne,Nepal,NPL,143351,21984,4746361735.0,0.036,2387506,2252000,634000
+NonAnnexOne,Nicaragua,NIC,119990,17810,3236350099.0,0.0323,3566072,3421000,2644000
+NonAnnexOne,Niger,NER,1266700,144784,1912712274.0,0.1065,1603811,1074000,832000
+NonAnnexOne,Nigeria,NGA,910768,300736,33836780111.0,0.0294,141939111,40183000,45375000
+NonAnnexOne,North Korea,PRK,120408,26972,10283761860.0,-0.0148,72249156,64928000,244835000
+NonAnnexOne,Oman,OMN,309500,255,13948791459.0,0.0171,32109981,16667000,10352000
+NonAnnexOne,Pakistan,PAK,770876,190319,67167359184.0,0.0329,97663000,97663000,68566000
+NonAnnexOne,Palau,PLW,459,40,115091000.0,0.0162,222421,117000,235000
+NonAnnexOne,Panama,PAN,74340,5517,10531000000.0,0.0705,6571269,5948000,3135000
+NonAnnexOne,Papua New Guinea,PNG,452860,2219,3649450735.0,0.0522,4938364,2838000,2142000
+NonAnnexOne,Paraguay,PRY,397302,29678,7221739306.0,0.0073,4924681,4503000,2263000
+NonAnnexOne,Peru,PER,1279996,36864,51361433447.0,-0.0076,130316234,27807000,21170000
+NonAnnexOne,Philippines,PHL,298170,56652,72206940470.0,0.0003,119547922,75650000,44532000
+NonAnnexOne,Qatar,QAT,11586,188,10537362637.0,0.1178,40302250,32402000,11775000
+NonAnnexOne,Rwanda,RWA,24668,11366,1856411342.0,0.0985,687412,642000,682000
+NonAnnexOne,Saint Kitts and Nevis,KNA,261,51,258644444.0,0.0104,116084,103000,66000
+NonAnnexOne,Saint Lucia,LCA,606,39,590814815.0,0.0391,360964,308000,165000
+NonAnnexOne,Saint Vincent and the Grenadines,VCT,389,70,322924778.0,0.0463,192174,165000,81000
+NonAnnexOne,Samoa,WSM,2821,620,226933624.0,0.0229,153125,132000,125000
+NonAnnexOne,Sao Tome and Principe,STP,964,83,72858656.0,0.0219,89314,81000,66000
+NonAnnexOne,Saudi Arabia,SAU,2149690,32742,146000000000.0,0.0279,231419668,207288000,215055000
+NonAnnexOne,Senegal,SEN,192530,24019,4492803809.0,0.0542,3429703,3429000,3183000
+NonAnnexOne,Serbia and Montenegro,CS,101813,21086,16733463868.0,0.0007,124142832,53700000,45350000
+NonAnnexOne,Seychelles,SYC,455,10,642818532.0,0.1095,485410,440000,114000
+NonAnnexOne,Sierra Leone,SLE,71620,5694,955064160.0,-0.0262,660135,594000,389000
+NonAnnexOne,Singapore,SGP,687,10,80659456004.0,-0.0212,66600554,57293000,46941000
+NonAnnexOne,Solomon Islands,SLB,27986,171,340596748.0,0.0278,225886,161000,161000
+NonAnnexOne,Somalia,SOM,627337,10288,1996094358.0,0.0192,565232,517000,18000
+NonAnnexOne,South Africa,ZAF,1214470,147609,122000000000.0,0.0074,397161073,372219000,333514000
+NonAnnexOne,South Korea,KOR,96920,16280,325000000000.0,-0.0498,420203339,363840000,243815000
+NonAnnexOne,Sri Lanka,LKA,64630,9038,14480283732.0,0.0472,32193477,7763000,3773000
+NonAnnexOne,Sudan,SDN,2505800,161093,10392582815.0,0.0993,26919056,4697000,5559000
+NonAnnexOne,Suriname,SUR,156000,581,843733843.0,0.0307,2538415,2164000,1811000
+NonAnnexOne,Swaziland,SWZ,17204,1763,1361706209.0,0.024,1422460,1214000,425000
+NonAnnexOne,Syrian Arab Republic,SYR,183630,45644,17468375691.0,0.0679,64161446,62709000,37451000
+NonAnnexOne,Tajikistan,TJK,141510,9304,1155783316.0,0.0586,3501062,2497000,7220000
+NonAnnexOne,Thailand,THA,510890,140941,112000000000.0,-0.1051,292142578,186504000,95833000
+NonAnnexOne,Togo,TGO,54385,24038,1396908826.0,-0.0242,7741711,1166000,774000
+NonAnnexOne,Tonga,TON,717,144,168792157.0,0.0279,121231,110000,77000
+NonAnnexOne,Trinidad and Tobago,TTO,5128,750,5925560160.0,0.0736,19476454,19318000,16960000
+NonAnnexOne,Tunisia,TUN,155360,26489,19621088421.0,0.0485,20685933,18001000,13267000
+NonAnnexOne,Turkmenistan,TKM,469930,22013,2787051225.0,0.0896,29669141,26047000,28067000
+NonAnnexOne,Uganda,UGA,197100,43077,6396379843.0,0.0904,1519896,1338000,818000
+NonAnnexOne,United Arab Emirates,ARE,83600,638,78510108226.0,-0.0087,81495000,81495000,52009000
+NonAnnexOne,Uruguay,URY,175015,13490,23452931857.0,0.0499,9694907,5688000,3993000
+NonAnnexOne,Uzbekistan,UZB,425400,44710,12833935973.0,0.0396,118559221,117571000,114014000
+NonAnnexOne,Vanuatu,VUT,12189,200,244163350.0,0.0201,93736,84000,70000
+NonAnnexOne,Venezuela,VEN,882050,25138,86951227857.0,-0.001,182929844,167322000,122162000
+NonAnnexOne,Vietnam,VNM,310070,65528,27209526681.0,0.0576,235205031,47781000,21408000
+NonAnnexOne,Yemen,YEM,527968,15364,6738657410.0,0.0543,12587479,12200000,14382000
+NonAnnexOne,Zambia,ZMB,743398,51777,3034581154.0,-0.0131,14801362,2314000,2446000
+NonAnnexOne,Zimbabwe,ZWE,386847,31862,7614659228.0,-0.0072,31814816,14254000,15504000
+USAgent,United States,USA,9161966,1650062,8740000000000.0,0.0492,6304070667,5449078000,4879376000