The One v3.0 (Phi2, NPQt, using multi-phase flash) qE, qI, Phi2NO + PAR


The One Protocol to rule them all! Phi2, NPQt combined. Changes from previous The One protocol: - Removed the Phi1 measurement, which was producing a lot of invalid data (removed by Dan and Frank) - Implemented the multi-phase flash protocol created by Tom Avenson - Includes qE, qI calculated after measurement of 2 minute dark period and Phi2NO (changes Stefanie T) Includes light intensity value
var data = json.data_raw;
var output = {};
//output["flag"] = {"info":[],"warning":[],"danger":[]};
var sample_cal = MathMEAN(data.slice(2,18));

var inverse_intensity = [1/692,1/614,1/537,1/460];

// retrieve the baseline information from the data JSON and save (using measuring light 15, calibrating light 14)
//----------------------------
for (i in json.get_ir_baseline) {	
	if (json.get_ir_baseline[i][0] == 15) {
		var slope_light = json.get_ir_baseline[i][1];
		var yint_light = json.get_ir_baseline[i][2];
	}
	if (json.get_ir_baseline[i][0] == 14) {
		var slope_cal = json.get_ir_baseline[i][1];
		var yint_cal = json.get_ir_baseline[i][2];
	}
}

// calculate the baseline
//----------------------------
var shinyness = (sample_cal-yint_cal)/slope_cal; // where 0 is dull black electrical tape, and 1 is shiny aluminum
var baseline = slope_light*shinyness+yint_light;

if (!baseline) {
  baseline = 0;
}

// Set our Apparent FmPrime, 3 FmPrime steps, and Fs to calculate both traditional fv/fm and new Multi-phase flash fv/fm
//----------------------------
var Fs = MathMEAN(data.slice(21,24)) - baseline; // take only the first 4 values in the Fs range, excluding the very first
var Fs_std = MathSTDEV(data.slice(21,24)); // create standard deviation for this value for error checking

sat_vals = data.slice(45,68).sort();  // sort the saturating light values from low to high
var AFmP = MathMEAN(sat_vals.slice(2,20)) - baseline; // take the 18 largest values and average them
var AFmP_std = MathSTDEV(sat_vals); // create standard deviation for this value for error checking

sat_vals = data.slice(104,130).sort();  // sort the saturating light values from low to high
var FmP_end = MathMEAN(sat_vals.slice(2,23)) - baseline; // take the 21 largest values and average them
var FmP_end_std = MathSTDEV(sat_vals); // create standard deviation for this value for error checking

sat_vals = data.slice(72,80).sort();  // sort the saturating light values from low to high
var FmP_step1 = MathMEAN(sat_vals.slice(2,6)) - baseline; // take the 4 largest values and average them
var FmP_step1_std = MathSTDEV(sat_vals); // create standard deviation for this value for error checking

sat_vals = data.slice(82,90).sort();  // sort the saturating light values from low to high
var FmP_step2 = MathMEAN(sat_vals.slice(2,6)) - baseline; // take the 4 largest values and average them
var FmP_step2_std = MathSTDEV(sat_vals); // create standard deviation for this value for error checking

sat_vals = data.slice(92,100).sort();  // sort the saturating light values from low to high
var FmP_step3 = MathMEAN(sat_vals.slice(2,6)) - baseline; // take the 4 largest values and average them
var FmP_step3_std = MathSTDEV(sat_vals); // create standard deviation for this value for error checking

// Calculations for F0'
// ----------------------------
var FoPrime_values = json.data_raw.slice(180,290).sort();
var FoPrime = MathMEAN(FoPrime_values.slice(5,10)) - baseline;
var FoPrime_std = MathSTDEV(FoPrime_values); // create standard deviation for this value for error checking

// Calculations for corrected FmPrime using multi-phase flash
// ----------------------------
var reg = MathLINREG(inverse_intensity, [AFmP,FmP_step1,FmP_step2,FmP_step3]);

// Calculate Phi2 w/ and w/out multi-phase flash
// ----------------------------
var fvfm_noMPF = (AFmP-Fs)/AFmP;
var fvfm_MPF = (reg.b-Fs)/reg.b;

// Calculate NPQt, PhiNPQ, PhiNO, qL w/ and w/out multi-phase flash
// ----------------------------
var npqt_MPF = (4.88 / ((reg.b / FoPrime) -1) )-1;
var npqt_noMPF = (4.88 / ((AFmP / FoPrime) -1) )-1;
var qL_MPF = ((reg.b - Fs)*FoPrime)/((reg.b-FoPrime)*Fs);
var qL_noMPF = ((AFmP - Fs)*FoPrime)/((AFmP-FoPrime)*Fs)
var PhiNO_MPF = 1/(npqt_MPF + 1 + qL_MPF*4.88) //based on equation 52 in Kramer et al., 2004 PRES
var PhiNO_noMPF = 1/(npqt_noMPF + 1 + qL_noMPF*4.88) //based on equation 52 in Kramer et al., 2004 PRES
var PhiNPQ_MPF = 1-fvfm_MPF-PhiNO_MPF //based on equation 53 in Kramer et al., 2004 PRES 
var PhiNPQ_noMPF = 1-fvfm_noMPF-PhiNO_noMPF //based on equation 53 in Kramer et al., 2004 PRES 

// Create the variables to be printed (assume to use the MPF values unless there is a good reason not to)
// ----------------------------
var fvfm = fvfm_MPF
var npqt = npqt_MPF
var PhiNO = PhiNO_MPF
var PhiNPQ = PhiNPQ_MPF
var qL = qL_MPF
var FmPrime = reg.b





var Fs1 = MathMEAN(data.slice(321,324)) - baseline; // take only the first 4 values in the Fs range, excluding the very first
var Fs1_std = MathSTDEV(data.slice(321,324)); // create standard deviation for this value for error checking

sat_vals = data.slice(345,368).sort();  // sort the saturating light values from low to high
var AFmP1 = MathMEAN(sat_vals.slice(2,20)) - baseline; // take the 18 largest values and average them
var AFmP1_std = MathSTDEV(sat_vals); // create standard deviation for this value for error checking

sat_vals = data.slice(404,430).sort();  // sort the saturating light values from low to high
var FmP1_end = MathMEAN(sat_vals.slice(2,23)) - baseline; // take the 21 largest values and average them
var FmP1_end_std = MathSTDEV(sat_vals); // create standard deviation for this value for error checking

sat_vals = data.slice(372,380).sort();  // sort the saturating light values from low to high
var FmP1_step1 = MathMEAN(sat_vals.slice(2,6)) - baseline; // take the 4 largest values and average them
var FmP1_step1_std = MathSTDEV(sat_vals); // create standard deviation for this value for error checking

sat_vals = data.slice(382,390).sort();  // sort the saturating light values from low to high
var FmP1_step2 = MathMEAN(sat_vals.slice(2,6)) - baseline; // take the 4 largest values and average them
var FmP1_step2_std = MathSTDEV(sat_vals); // create standard deviation for this value for error checking

sat_vals = data.slice(392,400).sort();  // sort the saturating light values from low to high
var FmP1_step3 = MathMEAN(sat_vals.slice(2,6)) - baseline; // take the 4 largest values and average them
var FmP1_step3_std = MathSTDEV(sat_vals); // create standard deviation for this value for error checking

// Calculations for F0'
// ----------------------------
var FoPrime1_values = json.data_raw.slice(480,590).sort();
var FoPrime1 = MathMEAN(FoPrime1_values.slice(5,10)) - baseline;
var FoPrime1_std = MathSTDEV(FoPrime1_values); // create standard deviation for this value for error checking

// Calculations for corrected FmPrime using multi-phase flash
// ----------------------------
var reg1 = MathLINREG(inverse_intensity, [AFmP1,FmP1_step1,FmP1_step2,FmP1_step3]);

// Calculate Phi2 w/ and w/out multi-phase flash
// ----------------------------
var fvfm_noMPF1 = (AFmP1-Fs1)/AFmP1;
var fvfm_MPF1 = (reg1.b-Fs1)/reg1.b;


// Calculate NPQt, PhiNPQ, PhiNO, qL w/ and w/out multi-phase flash
// ----------------------------
var npqt_MPF1 = (4.88 / ((reg1.b / FoPrime1) -1) )-1;
var npqt_noMPF1 = (4.88 / ((AFmP1 / FoPrime1) -1) )-1;
var qL_MPF1 = ((reg1.b - Fs1)*FoPrime1)/((reg1.b-FoPrime1)*Fs1)
var qL_noMPF1 = ((AFmP1 - Fs1)*FoPrime1)/((AFmP1-FoPrime1)*Fs1)
var PhiNO_MPF1 = 1/(npqt_MPF1 + 1 + qL_MPF1*4.88) //based on equation 52 in Kramer et al., 2004 PRES
var PhiNO_noMPF1 = 1/(npqt_noMPF1 + 1 + qL_noMPF1*4.88) //based on equation 52 in Kramer et al., 2004 PRES
var PhiNPQ_MPF1 = 1-fvfm_MPF1-PhiNO_MPF1 //based on equation 53 in Kramer et al., 2004 PRES 
var PhiNPQ_noMPF1 = 1-fvfm_noMPF1-PhiNO_noMPF1 //based on equation 53 in Kramer et al., 2004 PRES 

// Create the variables to be printed (assume to use the MPF values unless there is a good reason not to)
// ----------------------------
var fvfm1 = fvfm_MPF1
var npqt1 = npqt_MPF1
var PhiNO1 = PhiNO_MPF1
var PhiNPQ1 = PhiNPQ_MPF1
var qL1 = qL_MPF1
var FmPrime1 = reg1.b
var qE = npqt_MPF
var qI = npqt_MPF1


/****************OUTPUT VALUES FROM MACRO *******************/

// if any of the flag conditions are true, then create the 'flag' object.  Otherwise, do not create the flag object.
// for now since flag system isn't fully implemented, also create as separate objects so they will be displayed
// ----------------------------

// If multi-phase flash steps are flat or positive slope, then just use the normal Phi2, NPQt, PhiNPQ, PhiNO... etc.
// If Phi2 or NPQt is less than zero, make zero and give user warning.  If Phi2 is higher than .85, give user danger flag.
// ----------------------------
if (reg.m > 0) {
  fvfm = fvfm_noMPF
  npqt = npqt_noMPF
  PhiNO = PhiNO_noMPF
  PhiNPQ = PhiNPQ_noMPF
  qL = qL_noMPF
  FmPrime = AFmP
  
  if (fvfm <= 0) {
    output["Phi2"] 			= 0;
  //  	output.flag.warning.push("Phi2 is negative (should be positive).  It has been set to zero, but check raw trace and consider excluding this point.  To see original negative value, see Phi2_noMPF variable");
    output["warning 2"] = "Phi2 is negative (should be positive).  It has been set to zero, but check raw trace and consider excluding this point.  To see original negative value, see Phi2_noMPF variable";
  }
  if (fvfm >=.85) {
//  	output.flag.danger.push("Phi2 above the normal range (0 - 0.85).  Please check the raw trace and consider excluding this point.");
	output["danger 5"] = "Phi2 above the normal range (0 - 0.85).  Please check the raw trace and consider excluding this point.";
  }
  else {
	  output["Phi2"] 		= MathROUND(fvfm,3);
  }
  
  if (npqt <= 0) {
    output["NPQt"] 			= 0;
//  	output.flag.warning.push("NPQt is negative (should be positive)!  It has been set to zero, but check raw trace and consider excluding this point.  To see original negative NPQt value, see NPQt_noMPF variable");
	output["warning 1"] = "NPQt is negative (should be positive).  It has been set to zero, but check raw trace and consider excluding this point.  To see original negative value, see NPQt_noMPF variable";
  }
  else {
	  output['NPQt']		= MathROUND(npqt,3);
  }
	  output['qL']		    = MathROUND(qL,3);
	  output['PhiNPQ']		= MathROUND(PhiNPQ,3);
	  output['PhiNO']		= MathROUND(PhiNO,3);
}

// Otherwise, use the multi-phase flash calculation for Phi2, NPQt, PhiNPQ, PhiNO... etc.
// If Phi2 or NPQt is less than zero, make zero and give user warning.  If Phi2 is higher than .85, give user danger flag.
// ----------------------------
else {
  if (fvfm <= 0) {
    output["Phi2"] 			= 0;
//  	output.flag.warning.push("Phi2 is negative (should be positive).  It has been set to zero, but check raw trace and consider excluding this point.  To see original negative value, see Phi2_MPF variable");
	output["warning 2"] = "Phi2 is negative (should be positive).  It has been set to zero, but check raw trace and consider excluding this point.  To see original negative value, see Phi2_MPF variable";
  }
  if (fvfm >=.85) {
//  	output.flag.danger.push("Phi2 above the normal range (0 - 0.85).  Please check the raw trace and consider excluding this point.");
	output["danger 5"] = "Phi2 above the normal range (0 - 0.85).  Please check the raw trace and consider excluding this point.";
  }
  else {
  	output["Phi2"] 			= MathROUND(fvfm,3);
  }
  if (npqt <= 0) {
    output["NPQt"] 			= 0;
//  	output.flag.warning.push("NPQt is negative (should be positive)!  It has been set to zero, but check raw trace and consider excluding this point.  To see original negative NPQt value, see NPQt_MPF variable");
	output["warning 3"] = "NPQt value is negative (should be positive).  It has been set to zero, but check raw trace and consider excluding this point.  To see original negative value, see NPQt_MPF variable";
  }
  else {
	  output['NPQt']		= MathROUND(npqt,3);
  }
	  output['qL']		= MathROUND(qL,3);
	  output['PhiNPQ']		= MathROUND(PhiNPQ,3);
	  output['PhiNO']		= MathROUND(PhiNO,3);
}

// only display LEF if there is a light intensity measurement > 0 
// ----------------------------
if (typeof json.light_intensity != "undefined" && json.light_intensity > 0) {
	output["LEF"] 		= MathROUND((fvfm  * 0.45 * json.light_intensity),3);
}
output["Light intensity"] = MathROUND(json.light_intensity,3);

output["FmPrime"] 		= MathROUND(FmPrime,3);
output["Fs"] 			= MathROUND(Fs,1);
output['FoPrime']		= MathROUND(FoPrime,0);
output["Phi2_MPF"] 		= MathROUND(fvfm_MPF,3);
output["Phi2_noMPF"] 	= MathROUND(fvfm,3);
output['ratio adjusted to regular phi2'] = MathROUND(fvfm_MPF / fvfm,5);
output['NPQt_MPF']			= MathROUND(npqt_MPF,3);
output["NPQt_noMPF"] 	= MathROUND(npqt,3);
output['ratio adjusted to regular NPQt'] = MathROUND(npqt_MPF / npqt,5);
output["FmPrime_MPF"] 	= MathROUND(reg.b,3);
output["FmPrime_noMPF"] = MathROUND(AFmP,1);
output['qL_MPF']		= MathROUND(qL_MPF,3);
output['qL_noMPF']      = MathROUND(qL,3);
output['PhiNPQ_MPF']    = MathROUND(PhiNPQ_MPF,3);
output['PhiNPQ_noMPF']  = MathROUND(PhiNPQ,3);
output['PhiNO_MPF']		= MathROUND(PhiNO_MPF,3);
output['PhiNO_noMPF']	= MathROUND(PhiNO,3);


output["FmPrime1"] 		= MathROUND(FmPrime1,3);
output["Fs1"] 			= MathROUND(Fs1,1);
output['FoPrime1']		= MathROUND(FoPrime1,0);
output["Phi2_MPF1"] 	= MathROUND(fvfm_MPF1,3);
output["Phi2_noMPF1"] 	= MathROUND(fvfm1,3);
output['ratio adjusted to regular phi2_1'] = MathROUND(fvfm_MPF1 / fvfm1,5);
output['NPQt_MPF1']	 	= MathROUND(npqt_MPF1,3);
output["NPQt_noMPF1"] 	= MathROUND(npqt1,3);
output['ratio adjusted to regular NPQt1'] = MathROUND(npqt_MPF1 / npqt1,5);
output["FmPrime_MPF1"] 	= MathROUND(reg1.b,3);
output["FmPrime_noMPF1"] = MathROUND(AFmP1,1);
output['qL_MPF1']		= MathROUND(qL_MPF1,3);
output['qL_noMPF1']     = MathROUND(qL1,3);
output['PhiNPQ_MPF1']   = MathROUND(PhiNPQ_MPF1,3);
output['PhiNPQ_noMPF1'] = MathROUND(PhiNPQ1,3);
output['PhiNO_MPF1'] 	= MathROUND(PhiNO_MPF1,3);
output['PhiNO_noMPF1']	= MathROUND(PhiNO1,3);

output['qE']			= MathROUND(npqt_MPF,3);
output['qI']			= MathROUND(npqt_MPF1,3);


output["MPF_slope"] 	= MathROUND(reg.m,3);
output["MPF_rsquared"] 	= MathROUND(reg.r,3);

output["Fs_std"] 			= MathROUND(Fs_std,1);
output["AFmP_std"] 			= MathROUND(AFmP_std,1);
output["FmP_step1_std"] 	= MathROUND(FmP_step1_std,1);
output["FmP_step2_std"] 	= MathROUND(FmP_step2_std,1);
output["FmP_step3_std"] 	= MathROUND(FmP_step3_std,1);
output["FmP_end_std"] 		= MathROUND(FmP_end_std,1);
output["FoPrime_std"] 			= MathROUND(FoPrime_std,1);


//output["FmP_step1"] = MathROUND(FmP_step1,3);
//output["FmP_step2"] = MathROUND(FmP_step2,3);
//output["FmP_step3"] = MathROUND(FmP_step3,3);
//output["intensity inverse"] = inverse_intensity;
//output["steps"] = [AFmP,FmP_step1,FmP_step2,FmP_step3];
//output["slopey"] = FmP_end/AFmP - AFmP/AFmP ;

if (baseline != 0) {
  output["baseline"] 	= baseline;
}
else {
  output["baseline"] 	= 0;
}

//if (reg.m > 0 | FmP_end/AFmP - AFmP/AFmP > .1 | FmP_end/AFmP - AFmP/AFmP < -.1) {
//}

// Calculate Standard Deviation for Warning or Danger flags (out of bounds measurement)
// ----------------------------

if (Fs_std > 100	) {
//  	output.flag.danger.push("noisy Fs");
	output["danger 1"] = "noisy Fs";
}
if (AFmP_std > 200) {
//  	output.flag.danger.push("noisy FmPrime");
	output["danger 2"] = "noisy FmPrime";
}
if (FmP_step1_std > 60 | FmP_step2_std > 60 | FmP_step3_std > 60 | FmP_end_std > 200) {
//  	output.flag.danger.push("noisy multi-phase flash steps");
	output["danger 3"] = "noisy  multi-phase flash steps";
}
if (FoPrime_std > 150) {
//  	output.flag.danger.push("noisy FoPrime");
	output["danger 4"] = "noisy FoPrime";
}

if (reg.m > 0) {
//	output.flag.info.push("Used Phi2 and not Phi2 MPF - ambient light level was too low to apply MPF calculation");
	output["info 1"] = "Used Phi2 and not Phi2 MPF - ambient light level was too low to apply MPF calculation";
}

if (FmP_end/AFmP - AFmP/AFmP > .1) {
//	output.flag.info.push("FmPrime slopes down.  This may mean that saturating flash is not bright enough... consider using a protocol with lower saturating lightf on these samples");
	output["info 2"] = "FmPrime slopes down.  This may mean that saturating flash is not bright enough... consider using a protocol with lower saturating light on these samples";
}

if (FmP_end/AFmP - AFmP/AFmP < -.1) {
//	output.flag.info.push("FmPrime slopes up.  This may mean that saturating flash is too bright... consider using a protocol with higher saturating light on these samples");
	output["info 3"] = "FmPrime slopes up.  This may mean that saturating flash is too bright... consider using a protocol with higher saturating light on these samples";
}



return output;
{
  "time_offset": 180,
  "time": 1474982756166,
  "device_id": 109,
  "firmware_version": "0.450",
  "sample": [
    [
      {
        "time": 1474982756170,
        "protocol_id": 1,
        "get_ir_baseline": [
          [
            15,
            4.31,
            -0.1
          ],
          [
            14,
            6188.48,
            6930.63
          ]
        ],
        "light_intensity": 2.22,
        "r": 1.21,
        "g": 0.6,
        "b": 0.4,
        "relative_humidity": 38.62,
        "temperature": 26.23,
        "data_raw": [
          4825,
          4906,
          4898,
          4922,
          4859,
          4900,
          4887,
          4917,
          4872,
          4832,
          4820,
          4849,
          4814,
          4845,
          4827,
          4905,
          4864,
          4888,
          4904,
          4809,
          4155,
          4205,
          4206,
          4228,
          4222,
          4246,
          4245,
          4255,
          4257,
          4279,
          4280,
          4282,
          4292,
          4292,
          4293,
          4333,
          4316,
          4308,
          4331,
          4322,
          12238,
          14664,
          15777,
          16234,
          16446,
          16551,
          16611,
          16654,
          16677,
          16667,
          16674,
          16707,
          16736,
          16749,
          16745,
          16748,
          16759,
          16761,
          16745,
          16775,
          16746,
          16782,
          16799,
          16784,
          16806,
          16805,
          16804,
          16798,
          16798,
          16798,
          16796,
          16775,
          16774,
          16778,
          16774,
          16782,
          16783,
          16794,
          16784,
          16787,
          16784,
          16768,
          16771,
          16773,
          16758,
          16764,
          16739,
          16779,
          16777,
          16778,
          16752,
          16774,
          16774,
          16753,
          16761,
          16748,
          16747,
          16742,
          16765,
          16748,
          16748,
          16790,
          16787,
          16798,
          16792,
          16782,
          16794,
          16794,
          16785,
          16791,
          16789,
          16803,
          16780,
          16780,
          16763,
          16761,
          16783,
          16804,
          16787,
          16789,
          16784,
          16787,
          16777,
          16807,
          16790,
          16781,
          16793,
          16793,
          16782,
          16790,
          16791,
          12954,
          10987,
          9891,
          9290,
          8962,
          8764,
          8595,
          8465,
          8368,
          8260,
          8157,
          8097,
          7989,
          7942,
          7884,
          7827,
          7795,
          7731,
          7688,
          5575,
          5510,
          5389,
          5321,
          5249,
          5212,
          5148,
          5128,
          5094,
          5078,
          5022,
          5000,
          4974,
          4969,
          4929,
          4926,
          4911,
          4898,
          4894,
          4893,
          4883,
          4863,
          4867,
          4843,
          4860,
          4827,
          4842,
          4838,
          4821,
          4817,
          4832,
          4806,
          4802,
          4809,
          4797,
          4784,
          4780,
          4796,
          4811,
          4798,
          4802,
          4790,
          4799,
          4786,
          4809,
          4802,
          4782,
          4787,
          4794,
          4788,
          4783,
          4777,
          4796,
          4790,
          4789,
          4779,
          4799,
          4791,
          4797,
          4782,
          4792,
          4765,
          4791,
          4775,
          4792,
          4787,
          4798,
          4781,
          4791,
          4818,
          4789,
          4767,
          4784,
          4787,
          4783,
          4791,
          4786,
          4791,
          4782,
          4797,
          4810,
          4802,
          4788,
          4776,
          4790,
          4799,
          4787,
          4783,
          4803,
          4821,
          4816,
          4795,
          4796,
          4812,
          4804,
          4790,
          4815,
          4797,
          4827,
          4807,
          4774,
          4783,
          4792,
          4778,
          4789,
          4783,
          4803,
          4775,
          4790,
          4775,
          4779,
          4788,
          4780,
          4772,
          4807,
          4768,
          4786,
          4765,
          4790,
          4787,
          4809,
          4803,
          4797,
          4800,
          4798,
          4785,
          4798,
          4800,
          4791,
          4780,
          4782,
          4774,
          4784,
          4802,
          4801,
          4804,
          4805,
          4805,
          4787,
          4796,
          4809,
          4799,
          4790,
          4812,
          4794,
          4797,
          4798,
          4807,
          4809,
          4807,
          4797,
          4796,
          4736,
          4770,
          4758,
          4737,
          4785,
          4742,
          4835,
          4758,
          4753,
          4823,
          4713,
          4776,
          4716,
          4832,
          4779,
          4823,
          4745,
          4778,
          4181,
          4239,
          4251,
          4270,
          4297,
          4311,
          4349,
          4357,
          4365,
          4390,
          4403,
          4407,
          4432,
          4449,
          4472,
          4489,
          4480,
          4493,
          4508,
          4524,
          4507,
          14057,
          15452,
          16010,
          16256,
          16388,
          16507,
          16565,
          16565,
          16599,
          16629,
          16650,
          16665,
          16689,
          16706,
          16711,
          16729,
          16745,
          16734,
          16737,
          16772,
          16757,
          16741,
          16748,
          16775,
          16790,
          16786,
          16789,
          16791,
          16774,
          16784,
          16773,
          16792,
          16790,
          16795,
          16786,
          16806,
          16785,
          16810,
          16865,
          16813,
          16816,
          16802,
          16820,
          16819,
          16813,
          16817,
          16820,
          16826,
          16833,
          16833,
          16763,
          16809,
          16822,
          16823,
          16823,
          16807,
          16833,
          16832,
          16794,
          16822,
          16818,
          16840,
          16813,
          16829,
          16816,
          16839,
          16829,
          16825,
          16828,
          16803,
          16818,
          16802,
          16776,
          16818,
          16791,
          16791,
          16788,
          16849,
          16812,
          16798,
          16804,
          16779,
          16804,
          16799,
          16809,
          16771,
          16796,
          16796,
          16787,
          16782,
          13580,
          12094,
          11223,
          10742,
          10425,
          10188,
          10001,
          9832,
          9720,
          9583,
          9476,
          9374,
          9262,
          9170,
          9085,
          9013,
          8952,
          8861,
          8799,
          5782,
          5663,
          5561,
          5505,
          5449,
          5365,
          5306,
          5266,
          5241,
          5210,
          5187,
          5133,
          5132,
          5106,
          5082,
          5098,
          5061,
          5043,
          5019,
          5015,
          5023,
          5008,
          4987,
          4983,
          4973,
          4968,
          4976,
          4967,
          4937,
          4946,
          4931,
          4929,
          4934,
          4911,
          4898,
          4921,
          4914,
          4926,
          4929,
          4901,
          4928,
          4901,
          4901,
          4935,
          4914,
          4913,
          4910,
          4899,
          4921,
          4894,
          4901,
          4915,
          4910,
          4886,
          4904,
          4903,
          4913,
          4905,
          4893,
          4892,
          4875,
          4880,
          4889,
          4885,
          4890,
          4896,
          4881,
          4887,
          4904,
          4867,
          4897,
          4892,
          4886,
          4901,
          4882,
          4889,
          4905,
          4880,
          4902,
          4902,
          4897,
          4893,
          4872,
          4889,
          4879,
          4886,
          4891,
          4895,
          4865,
          4894,
          4902,
          4866,
          4894,
          4885,
          4888,
          4882,
          4895,
          4901,
          4896,
          4905,
          4906,
          4902,
          4880,
          4898,
          4905,
          4883,
          4887,
          4884,
          4883,
          4903,
          4896,
          4900,
          4885,
          4863,
          4898,
          4877,
          4875,
          4896,
          4888,
          4880,
          4890,
          4877,
          4905,
          4879,
          4880,
          4876,
          4869,
          4876,
          4877,
          4868,
          4888,
          4885,
          4903,
          4892,
          4897,
          4888,
          4900,
          4871,
          4897,
          4890,
          4877,
          4890,
          4880,
          4868,
          4902,
          4875,
          4889,
          4896,
          4884,
          4889
        ]
      }
    ]
  ],
  "app_os": "win",
  "app_name": "PhotosynQ",
  "app_version": "0.3.5",
  "app_device": "x86-32",
  "location": [
    "-32.9699967",
    "-60.6247849"
  ]
}
Default avatar
Created by

Rodrigo Gomez


Protocol connections:
1
Latest Update:
Sep 2016