db7f6af0-b908-4252-a75a-95abdebaddfeba65652d-db5a-49a7-86fe-a88504d31e17Polygon Based PSU Geo FencingFalseDoobloSupport-Kostad6377188581025700006377188937788480683155378903999970000TrueFalse14False0SurveyToGo.UserLogic.Creator.SurveyLogicTempl<?xml version="1.0" encoding="utf-16"?>
<UserLogicContents xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Items>
<HData>
<HTp>ehtQuestion</HTp>
<STp>estLast</STp>
<CTp>echtLast</CTp>
<QTp>eqhtEntranceRule</QTp>
<Key>2</Key>
<Name>HandleQuestionEnter_2</Name>
<Behv>ecsbDefault</Behv>
<QDep>
<int>1</int>
</QDep>
<CDep />
</HData>
<HData>
<HTp>ehtQuestion</HTp>
<STp>estLast</STp>
<CTp>echtLast</CTp>
<QTp>eqhtEntranceRule</QTp>
<Key>1</Key>
<Name>HandleQuestionEnter_1</Name>
<Behv>ecsbDefault</Behv>
<QDep />
<CDep />
</HData>
<HData>
<HTp>ehtQuestion</HTp>
<STp>estLast</STp>
<CTp>echtLast</CTp>
<QTp>eqhtStart</QTp>
<Key>3</Key>
<Name>QuestionStart_3</Name>
<Behv>ecsbDefault</Behv>
<QDep>
<int>2</int>
<int>1</int>
<int>0</int>
</QDep>
<CDep />
</HData>
<HData>
<HTp>ehtSnippet</HTp>
<STp>estListSource</STp>
<CTp>echtLast</CTp>
<QTp>eqhtLast</QTp>
<Key>1</Key>
<Name>GetListSource_1</Name>
<Behv>ecsbDefault</Behv>
<QDep />
<CDep />
<DispName>Location Row</DispName>
</HData>
</Items>
<Source>// Question symbols
var PSU = null;var Q_2 = null;var Q_3 = null;var Q_4 = null;var Q_5 = null;
function StartSurvey()
{
/*_@_SS_START_@*/
// This will set the Maximum points allowed in this Sample (Meaning LAT1 LONG1 LAT2 LONG2 LAT3 LONG3 LAT4 LONG4)
//There may be PSUs with less (for example a PSU that will be represented as a triangle so only 3 vertexes
Vars["MaxVertex"] = 10;
/*_@_SS_END_@*/
}
/*_@_USERCODE_START_@*/
function OnValidationTextRequired(inQuestionIndex, inValidationID, inMessage) {
return inMessage;
}
function dblToJSArray(inArray){
var retVal = new Array();
for(var i=0; i<inArray.length; i++){
retVal.push(inArray[i]);
}
return retVal;
}
function dblColorFromRGB(red, green, blue){
return (255<<24)+ (red<<16) + (green<<8) + blue;
}
//Gets latitude and longitude coordinates, and returns the distance of the surveyor from the specific point.
function dblDistanceFromGPSFence (fenceLat, fenceLon)
{
var pi = Math.PI;
var fenceLatInRad=fenceLat* pi / 180;
var fenceLonInRad=fenceLon* pi / 180;
var targetLatInRad = GetGPSLocation().Latitude * pi / 180;
var targetLonInRad = GetGPSLocation().Longitude * pi / 180;
var dist = Math.acos(Math.sin(targetLatInRad) * Math.sin(fenceLatInRad) + Math.cos(targetLatInRad) * Math.cos(fenceLatInRad) * Math.cos(targetLonInRad - fenceLonInRad)) * 6371;
return dist;
}
//Gets latitude and longitude coordinates and a radius in Kilo-Meters.
//Returns ‘true’ if the surveyor is in the given radius.
//Returns ‘false’ if the surveyor is not in the given radius.
function dblIsInGPSFence (fenceLat, fenceLon, distInKM)
{
var dist = dblDistanceFromGPSFence(fenceLat, fenceLon);
var retVal = false;
if(dist<distInKM){
retVal=true;}
else{
retVal=false;
}
return retVal;
}
//will return the distance between 2 locations
function dblDistanceBetweenTwoLocations (firstLat, firstLon, secondLat, secondLon)
{
var pi = Math.PI;
var firstLatInRad=firstLat* pi / 180;
var firstLonInRad=firstLon* pi / 180;
var targetLatInRad = secondLat * pi / 180;
var targetLonInRad = secondLon * pi / 180;
var dist = Math.acos(Math.sin(targetLatInRad) * Math.sin(firstLatInRad) + Math.cos(targetLatInRad) * Math.cos(firstLatInRad) * Math.cos(targetLonInRad - firstLonInRad)) * 6371;
return dist;
}
//Calculates the sum of all the visible topics in a numeric grid
function dblSumNumericGrid(inQ)
{
var retVal=0;
var numOfTopics=GetTopicCount(inQ);
var i;
for(i=1; i<=numOfTopics; i++)
{
if (IsTopicVisible(inQ,i)) {
retVal+=AnswerChoice(inQ,i);
}
}
return retVal;
}
//will check if one of the answers mentioned were chosen
function dblContainsOneOf(inQTarget,inAnswers)
{
var retVal = false;
var numOfAnswers = inAnswers.length;
var i;
for (i=0;i< numOfAnswers;i++) {
if (Contains(inQTarget,inAnswers[i])) {
retVal = true;
break;
}
}
return retVal;
}
//function dblContainsAll(inQTarget,inAnswers)
//{
// var retVal = true;
// var numOfAnswers = arguments.length-1;
// var i;
// for (i=0;i< numOfAnswers;i++) {
// retVal = retVal && Contains(inQTarget,arguments[i+1]);
// }
// return retVal;
//}
//will check if ALL of the answers mentioned were chosen
function dblContainsAllOf(inQTarget,inAnswers)
{
var retVal = true;
var numOfAnswers = inAnswers.length;
var i;
for (i=0;i< numOfAnswers;i++) {
retVal = retVal && Contains(inQTarget,inAnswers[i]);
}
return retVal;
}
//Single Choice Grid - in how many topics the answer was selected
function dblNumOfTopicsContains(inQ, inValueToCheck)
{
var retVal = 0;
var i=0;
for (i=1; i<=GetTopicCount(inQ);i++){
if (IsTopicVisible(inQ,i) && AnswerChoice(inQ,i) == inValueToCheck) {
retVal++;
}
}
return retVal;
}
//Multiple Selection Grid - in how many topics the answer was selected
function dblNumOfTopicsContainsChoice(inQ, inValueToCheck)
{
var retVal = 0;
var i=0;
for (i=1; i<=GetTopicCount(inQ);i++){
if (IsTopicVisible(inQ,i) && ContainsChoice(inQ,i,inValueToCheck)) {
retVal++;
}
}
return retVal;
}
//Multiple Selection & Single Choice - relevant for questions in iterations - in how many iterations the answer was selected
function dblNumOfIterContains(inQ, inValueToCheck)
{
var retVal = 0;
var i=0;
for (i=1; i<IterationIndex;i++){
if (ContainsIter(inQ,inValueToCheck,i)) {
retVal++;
}
}
return retVal;
}
//Numeric Grid, Open Ended Grid & Single Choice Grid - Will set the Topic with the value you enter
function dblSetSpecificTopic(inQ, inTopicIndex, inValue)
{
var curTopics = GetTopicCount(inQ);
var newAnswers=new Array();
var newArIdx=0;
var i;
for (i=0;i< curTopics;i++) {
var actualTopic = i+1;
if (actualTopic == inTopicIndex) {
newAnswers[i] = inValue;
}
else {
newAnswers[i] = AnswerChoice(inQ,actualTopic);
}
}
SetAnswer(inQ,newAnswers);
}
//Multiple Selection Grid - Will set the Topic with the value you enter
function dblSetSpecificTopicChoice(inQ, inTopicIndex, inValue)
{
var curTopics = GetTopicCount(inQ);
var newAnswers=new Array();
newAnswers.push(inValue);
var i;
var ansArr = GetAnswersChoice(inQ, inTopicIndex);
for (i=0;i < ansArr.length;i++)
{
newAnswers.push(ansArr[i]);
}
SetAnswerChoice(inQ, inTopicIndex, newAnswers);
}
//Will set the Answer with the value you enter
function dblSetSpecificAnswer(inQ, inAnswerIdx, inChecked)
{
var curAnswers = GetAnswers(inQ);
var newAnswers=new Array();
var newArIdx=0;
var i;
for (i=0;i< curAnswers.length;i++) {
if (curAnswers[i] != inAnswerIdx) {
newAnswers[newArIdx] = curAnswers[i];
newArIdx++;
}
}
if (inChecked) {
newAnswers[newArIdx] = inAnswerIdx;
}
if (newAnswers.length > 0) {
SetAnswer(inQ,newAnswers);
}
else {
ClearAnswer(inQ);
}
}
//Set the answers based on the answers of a different question
function dblSetAnswersByAnswers(inQTarget,inQids)
{
var numOfQues = inQids.length;
var numOfAnswers = GetAnswerCount(inQids[0]);
var i;
for (i=1;i<= numOfAnswers;i++) {
var contained = false;
var j;
for (j=0; j<numOfQues;j++) {
contained = Contains(inQids[j],i);
if (contained) {
break;
}
}
if (contained) {
dblSetSpecificAnswer(inQTarget, i,true);
}
}
}
//Set the answers based on the answers of a different question with the ability to exclude specific answers you add as an array.
function dblSetAnswersByAnswersEx (inQTarget,inQids,inExcludeHiddenTargetAnswers)
{
var numOfQues = inQids.length;
var numOfAnswers = GetAnswerCount(inQids[0]);
var i;
// go over all answers and for each check if it exists in the source questions
for (i=1;i<= numOfAnswers;i++) {
var contained = false;
var j;
// go over all source questions and check if the answer is checked
for (j=0; j<numOfQues;j++) {
contained = Contains(inQids[j],i);
if (contained) {
break;
}
}
// in case it was contained check if need to add to target question
if (contained) {
var addAnswer = true;
if ((inExcludeHiddenTargetAnswers) && !IsAnswerVisible(inQTarget,i)) {
addAnswer = false;
}
if (addAnswer) {
dblSetSpecificAnswer(inQTarget, i,true);
}
}
}
}
//Calculates the sum of the Answered & visible topics
function dblSumOfTopics (inQuesIdx)
{
var retVal = 0;
var i;
var numOfTopics = GetTopicCount(inQuesIdx);
for (i=0;i<numOfTopics;i++) {
var currTopic = i+1;
if (IsTopicVisible (inQuesIdx, currTopic)) {
var currValue = AnswerChoice(inQuesIdx, currTopic);
if (currValue != -99999) {
retVal += currValue;
}
}
}
return retVal;
}
//Using this function will format the number entered to a Currency Format
function dblFormatNumberToCurrency(num) {
var retVal = "";
var num = num.toString().replace(/\$|\,/g,'');
if(isNaN(num))
num = "0";
var sign = (num == (num = Math.abs(num)));
num = Math.floor(num*100+0.50000000001);
var cents = num%100;
num = Math.floor(num/100).toString();
var addZero = "";
if(cents<10) {
addZero = "0";
}
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) {
num = num.substring(0,num.length-(4*i+3))+','+num.substring(num.length-(4*i+3));
}
retVal = (((sign)?'':'-') + '$' + num + '.' +addZero+ cents)
return retVal;
}
//Will convert a number to Float
function dblToFloat(inNumber)
{
var retVal = parseFloat(inNumber.toString().replace(",", "."));
return retVal;
}
//Will set the answers visible in a question
function dblSetAnswerVisible(inQTarget,inValue,inReset,inAnswers)
{
var retVal = false;
var numOfAnswers = inAnswers.length;
var i;
if (inReset) {
SetAnswerVisible(inQTarget,true);
}
for (i=0;i< numOfAnswers;i++) {
SetAnswerVisible(inQTarget, inAnswers[i], inValue);
}
return retVal;
}
//Will search for the text entered and return true/false if found
function dblContainsByText(inQIdx, inText)
{
var retVal = false;
var i=0;
for (i=0; i<GetAnswerCount(inQIdx); i++){
var idx = i+1;
var text = AnswerText(inQIdx,idx);
if (text == inText) {
if (Contains(inQIdx,idx)) {
retVal = true;
break;
}
}
}
return retVal;
}
//Filters the answers of a question based on another question
function dblFilterAnswersByAnswersByText (inTargetQ, inShow,inSourceQ)
{
SetAnswerVisible(inTargetQ,!inShow);
var i =0;
for (i=0; i<GetAnswerCount(inTargetQ);i++){
var idx = i+1;
var text = AnswerText(inTargetQ,idx);
if (dblContainsByText(inSourceQ,text)) {
SetAnswerVisible(inTargetQ,idx,inShow);
}
}
return true;
}
//Filters the topics of a question based on another question
function dblFilterTopicsByAnswersByText (inTargetQ, inShow, inSourceQ)
{
SetTopicVisible(inTargetQ,!inShow);
var i=0;
for (i=0; i<GetTopicCount(inTargetQ); i++){
var idx = i+1;
var text = GetTopicOriginalText(inTargetQ,idx);
if (dblContainsByText(inSourceQ,text)) {
SetTopicVisible(inTargetQ,idx,inShow);
}
}
return true;
}
//function will retrieve a row from a subject store
function dblGetSubjectStoreRow(inStoreName,inIDColumnName,inID)
{
var retVal = null;
try {
var table = GetTableFromStore(inStoreName,"","@@"+inIDColumnName+"='"+inID+"'","");
if (table != null && table.RowCount >0) {
var row = table[0];
retVal = row;
}
}
catch(err)
{
retVal = null;
}
return retVal;
}
/*
This function gets two parameters:
1st parameter is the RegEx expression.
2nd parameter is the text to check.
This function returns ‘true’ if the text is valid according to the RegEx expression, or ‘false’ if the text is not valid according to the RegEx expression.
*/
function dblIsRegEx (pattern,value) {
var pattern = new RegExp(pattern);
return pattern.test(value);
}
function dblDateToSQLDate(inDate)
{
var retVal = "";
retVal = inDate.Year+"-"+inDate.Month+"-"+inDate.Day;
return retVal;
}
//Will order an array
function dblOrderArray(inOrderArray, inDataArray)
{
var retVal = CreateRandomArray(inOrderArray.length);
var i = 0;
for (i = 0; i < inOrderArray.length; i++) {
retVal[i] = inDataArray[inOrderArray[i]-1];
}
return retVal;
}
//Will return a unique respondent ID based on the SID and Device Index
function dblRespondentID ()
{
var retVal = "".concat("D", SID, "-", DeviceIndex);
return retVal;
}
function inside(pointX,pointY, vs)
{
var x = pointX, y = pointY;
var InPol = false;
for (var i = 0; i <= vs.length-2; i=i+2)
{
var xi = vs[i];
var yi = vs[i+1];
if (i < vs.length-2)
{
var xj = vs[i+2];
var yj = vs[i+3];
}
else
{
var xj = vs[0];
var yj = vs[1];
}
var intersect = ((yi > y) != (yj > y))
&& (x < (xj - xi) * (y - yi) / (yj - yi) + xi);
if (intersect) InPol = !InPol;
}
return InPol;
}
function getPSUs()
{
return "PSU List KML";
}
/*_@_USERCODE_END_@*/
//_@_AddHandler_@{ Begin Add Handlers
//_@_AddHandler_@} End Add Handlers
//_@_HandlerZone_@{
function GetListSource_1(list)
{
/*
use FillFromXXXX to fill the "list" variable.
Example:
FillFromStore(list, "DemoStoreName");
*/
FillFromStore(list, getPSUs(), "Location_Name", "Location_ID", "", "");
}
function QuestionStart_3()
{
var inText = "outside the PSU";
var PSUVertexes = new Array;
var row = dblGetSubjectStoreRow(getPSUs(), "Location_ID", Answer(PSU));
if (row != null)
{
for(var i=1; i<=Vars["MaxVertex"]; i++)
{
if(row["LAT" + i] != -999)
{
PSUVertexes.push(row["LAT" + i]);
PSUVertexes.push(row["LONG" + i]);
Trace("Inserting Polygon Coordinates: {0} : {1}", row["LAT" + i], row["LONG" + i]);
}
}
}
if (Answered(QRef(3)) && inside(AnswerChoice(QRef(3),1), AnswerChoice(QRef(3),2), PSUVertexes))
{
inText = "inside the PSU";
}
if (Answer(QRef(2)) == 1)
{
if(GetGPSLocation().IsValid)
{
if (inside(GetGPSLocation().Latitude, GetGPSLocation().Longitude, PSUVertexes))
{
inText = "inside the PSU";
}
}
else
{
inText = "not available. Please verify thet the SurveyToGo App has a valid location";
}
}
SetTextFormat(CurrQues, inText);
}
function HandleQuestionEnter_1()
{
return (IsPlatform(ePlatform.Android));
}
function HandleQuestionEnter_2()
{
return (Answer(QRef(2)) == 2 || !IsPlatform(ePlatform.Android));
}
//_@_HandlerZone_@}
function JSDBLInitAllScript()
{
}var eJumpQuestionResult = {ejqrNext:0, ejqrSubmit:1,ejqrCancel:2,ejqrFilter:3,ejqrNone:4,ejqrIndex:5,ejqrChapter:6};
var eAttachmentSource = {easDefault:0};
var eAskButtons = {OKCancel:0, YesNoCancel:1, YesNo:2};
var eAskResult = {None:0, OK:1, Yes:2, No:3, Cancel:4};
var eQuotaFilledResult = {Default:0,Filter:1,Cancel:2,Nothing:3};
var eExtraLabel = { MatrixLower:0, MatrixMiddle:1, MatrixUpper:2, MatrixIrrelevant:3, ScaleLower:4, ScaleMiddle:5, ScaleUpper:6, CountersTotal:7,CountersRemaining:8, NumericGridTotal:9, NumericGridRemaining:10 };
var eFontSize = {XSmall:-4,Smaller:-2,Small:-1,Regular:0,Large:2,Largest:8,XLarge:14};
var eULQuestionType = {eqtYesNo: 0,
eqtAmerican: 1,
eqtNumeric: 2,
eqtFreeText: 3,
eqtMultiSelect: 4,
eqtRating: 5,
eqtScale: 6,
eqtMatrix: 7,
eqtMultiTopics: 8,
eqtNoQuestion: 9,
eqtDateTime: 10,
eqtCounters: 11,
eqtStopper: 12,
eqtMassiveMultiSelect: 13,
eqtExpression: 14,
eqtMultiText: 15,
eqtMultiNumeric: 16,
eqtMultimedia: 17,
eqtMultiTopicsSelect: 18,
eqtGPSQuestion: 19,
eqtListSource: 20,
eqtPositionTopicsOnImage: 21,
eqtNumOfTypes: 22};
var eRenderGridAlignment = {Top: 0,
Center: 1,
Bottom: 2};
var eInterviewExtraField = {AttemptsPerCompletedInterview: 0,
AdherenceToMethodology: 1,
CustomData1: 2,
CustomData2: 3,
CustomData3: 4,
CustomData4: 5,
CustomData5: 6,
CustomData6: 7,
CustomDataInt1: 8,
CustomDataInt2: 9,
CustomDataInt3: 10,
CustomDataInt4: 11,
CustomDataInt5: 12,
CustomDataInt6: 13,
InterviewStopComment: 14,
CustomDataPII1: 18,
CustomDataPII2: 19,
CustomDataPII3: 20,
CustomDataPIIInt1: 21,
CustomDataPIIInt2: 22,
CustomDataPIIInt3: 23,
CustomData7: 24,
CustomData8: 25,
CustomData9: 26,
CustomData10: 27,
CustomData11: 28,
CustomData12: 29,
CustomDataInt7: 30,
CustomDataInt8: 31,
CustomDataInt9: 32,
CustomDataInt10: 33,
CustomDataInt11: 34,
CustomDataInt12: 35};
var eSurveyStatus = {New: 0,
EditNotCompleted: 1,
EditCompleted: 2,
EditTextReturn: 3,
EditReturned: 4,
EditObserverInProgress: 5};
var ePageType = {Cancel: 0,
Error: 1,
Filter: 2,
Finish: 3,
NonActive: 4,
AlreadyConducted: 5,
FullQuotaPage: 6};
var eQuotaExceedActionType = {None: 0,
Cancel: 1,
Filter: 2};
var eQuotaExceedType = {None: 0,
ExceedTarget: 1,
ExceedExceed: 2};
var eAttachmentType = {None: 0,
Picture: 1,
Sound: 2,
Video: 3,
Text: 4,
Signature: 5,
Font: 6};
var eUploadOfStoppedInterviewStatus = {Stopped: 0,
StoppedWithUpload: 1,
Completed: 2};
var eDeviceType = {Desktop: 0,
Tablet: 1,
Mobile: 2};
var ePlatform = {None: 0,
Web: 1,
PC: 2,
PDA: 4,
MobileWeb: 8,
SmartPhone: 16,
AllWindows: 31,
Android: 32,
XAndroid: 64,
XIOS: 128,
XUWP: 256,
Xamarin: 448,
AllJSEnabled: 482,
All: 511};
</Source>
</UserLogicContents>False1.32.619.0FalseFalse-101.32.0.0AAEAAAD/////AQAAAAAAAAAMAgAAAEdVc2VyTG9naWNDcmVhdG9yLCBWZXJzaW9uPTEuMC4xLjMsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49bnVsbAUBAAAAKVN1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuQXNzZW1ibHlEYXRhEAAAAAZtVGFibGUNbVN1cnZleUNvbnN0cw9tU3VydmV5U25pcHBldHMNbUNoYXB0ZXJUYWJsZQ1tTGFzdEJ1Y2tldElEEW1MYXN0TWV0YUJ1Y2tldElED21TdXJ2ZXlJbml0Q29kZRBtU3VydmV5QmxvY2tDb2RlEW1MYXN0TGlzdFNvdXJjZUlEE21MYXN0Q3VzdG9tQWN0aW9uSUQHbUZsYXZvcg5tVXNlR2xvYmFsQ29kZQttVXNlT3JnQ29kZQ5tU3RyaWN0SlNDaGVjaxdtTGFzdEF0dGFjaG1lbnRTb3VyY2VJRA5tU3VydmV5TmF2Q29kZQMDAwMAAAEBAAAEAAAAAAEeU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZVtdHFN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGUeU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZVtdHlN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGVbXQgICAgkU3VydmV5VG9Hby5Vc2VyTG9naWMuQ3JlYXRvci5lRmxhdm9yAgAAAAEBAQgCAAAACQMAAAAJBAAAAAkFAAAACQYAAAABAAAAAgAAAAYHAAAA9QEvLyBUaGlzIHdpbGwgc2V0IHRoZSBNYXhpbXVtIHBvaW50cyBhbGxvd2VkIGluIHRoaXMgU2FtcGxlIChNZWFuaW5nIExBVDEgTE9ORzEgTEFUMiBMT05HMiBMQVQzIExPTkczIExBVDQgTE9ORzQpDQovL1RoZXJlIG1heSBiZSBQU1VzIHdpdGggbGVzcyAoZm9yIGV4YW1wbGUgYSBQU1UgdGhhdCB3aWxsIGJlIHJlcHJlc2VudGVkIGFzIGEgdHJpYW5nbGUgc28gb25seSAzIHZlcnRleGVzDQpWYXJzWyJNYXhWZXJ0ZXgiXSA9IDEwOwYIAAAAtwRmdW5jdGlvbiBpbnNpZGUocG9pbnRYLHBvaW50WSwgdnMpIA0Kew0KICAgIHZhciB4ID0gcG9pbnRYLCB5ID0gcG9pbnRZOw0KICAgIHZhciBJblBvbCA9IGZhbHNlOw0KICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IHZzLmxlbmd0aC0yOyBpPWkrMikgDQoJew0KCQl2YXIgeGkgPSB2c1tpXTsNCgkJdmFyIHlpID0gdnNbaSsxXTsNCgkJaWYgKGkgPCB2cy5sZW5ndGgtMikNCgkJew0KICAgICAgICAJdmFyIHhqID0gdnNbaSsyXTsgDQoJCQl2YXIgeWogPSB2c1tpKzNdOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkgICAgdmFyIHhqID0gdnNbMF07IA0KCQkJdmFyIHlqID0gdnNbMV07DQoJCX0NCg0KICAgICAgICB2YXIgaW50ZXJzZWN0ID0gKCh5aSA+IHkpICE9ICh5aiA+IHkpKQ0KICAgICAgICAgICAgJiYgKHggPCAoeGogLSB4aSkgKiAoeSAtIHlpKSAvICh5aiAtIHlpKSArIHhpKTsNCiAgICAgICAgaWYgKGludGVyc2VjdCkgSW5Qb2wgPSAhSW5Qb2w7DQogICAgfQ0KDQoJcmV0dXJuIEluUG9sOw0KfQ0KDQpmdW5jdGlvbiBnZXRQU1VzKCkNCnsNCglyZXR1cm4gIlBTVSBMaXN0IEtNTCI7DQp9DQoCAAAAAQAAAAX3////JFN1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuZUZsYXZvcgEAAAAHdmFsdWVfXwAIAgAAAAIAAAABAQEDAAAABgoAAAAABwMAAAAAAQAAAAYAAAADHFN5c3RlbS5Db2xsZWN0aW9ucy5IYXNodGFibGUJCwAAAAkMAAAACQ0AAAAJDgAAAAkPAAAACRAAAAAEBAAAABxTeXN0ZW0uQ29sbGVjdGlvbnMuSGFzaHRhYmxlBwAAAApMb2FkRmFjdG9yB1ZlcnNpb24IQ29tcGFyZXIQSGFzaENvZGVQcm92aWRlcghIYXNoU2l6ZQRLZXlzBlZhbHVlcwAAAwMABQULCBxTeXN0ZW0uQ29sbGVjdGlvbnMuSUNvbXBhcmVyJFN5c3RlbS5Db2xsZWN0aW9ucy5JSGFzaENvZGVQcm92aWRlcgjsUTg/AAAAAAoKCwAAAAkRAAAACRIAAAAHBQAAAAABAAAABQAAAAMcU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZQkTAAAACRQAAAAJFQAAAAkWAAAACRcAAAAHBgAAAAABAAAACAAAAAMcU3lzdGVtLkNvbGxlY3Rpb25zLkhhc2h0YWJsZQkYAAAACRkAAAAJGgAAAAkbAAAACRwAAAAJHQAAAAkeAAAACR8AAAABCwAAAAQAAADsUTg/BAAAAAoKCwAAAAkgAAAACSEAAAABDAAAAAQAAADsUTg/AAAAAAoKCwAAAAkiAAAACSMAAAABDQAAAAQAAADsUTg/AAAAAAoKCwAAAAkkAAAACSUAAAABDgAAAAQAAADsUTg/AAAAAAoKCwAAAAkmAAAACScAAAABDwAAAAQAAADsUTg/BAAAAAoKCwAAAAkoAAAACSkAAAABEAAAAAQAAADsUTg/AAAAAAoKCwAAAAkqAAAACSsAAAAQEQAAAAAAAAAQEgAAAAAAAAABEwAAAAQAAADsUTg/AAAAAAoKCwAAAAksAAAACS0AAAABFAAAAAQAAADsUTg/AAAAAAoKCwAAAAkuAAAACS8AAAABFQAAAAQAAADsUTg/WgEAAAoKCwAAAAkwAAAACTEAAAABFgAAAAQAAADsUTg/AAAAAAoKCwAAAAkyAAAACTMAAAABFwAAAAQAAADsUTg/QAAAAAoKCwAAAAk0AAAACTUAAAABGAAAAAQAAADsUTg/AAAAAAoKCwAAAAk2AAAACTcAAAABGQAAAAQAAADsUTg/AAAAAAoKCwAAAAk4AAAACTkAAAABGgAAAAQAAADsUTg/AAAAAAoKCwAAAAk6AAAACTsAAAABGwAAAAQAAADsUTg/AAAAAAoKCwAAAAk8AAAACT0AAAABHAAAAAQAAADsUTg/AAAAAAoKCwAAAAk+AAAACT8AAAABHQAAAAQAAADsUTg/AAAAAAoKCwAAAAlAAAAACUEAAAABHgAAAAQAAADsUTg/AAAAAAoKCwAAAAlCAAAACUMAAAABHwAAAAQAAADsUTg/AAAAAAoKCwAAAAlEAAAACUUAAAAQIAAAAAIAAAAICAIAAAAICAEAAAAQIQAAAAIAAAAJRgAAAAlHAAAAECIAAAAAAAAAECMAAAAAAAAAECQAAAAAAAAAECUAAAAAAAAAECYAAAAAAAAAECcAAAAAAAAAECgAAAABAAAACAgDAAAAECkAAAABAAAACUgAAAAQKgAAAAAAAAAQKwAAAAAAAAAQLAAAAAAAAAAQLQAAAAAAAAAQLgAAAAAAAAAQLwAAAAAAAAAQMAAAAAEAAAAICAEAAAAQMQAAAAEAAAAJSQAAABAyAAAAAAAAABAzAAAAAAAAABA0AAAAAAAAABA1AAAAAAAAABA2AAAAAAAAABA3AAAAAAAAABA4AAAAAAAAABA5AAAAAAAAABA6AAAAAAAAABA7AAAAAAAAABA8AAAAAAAAABA9AAAAAAAAABA+AAAAAAAAABA/AAAAAAAAABBAAAAAAAAAABBBAAAAAAAAABBCAAAAAAAAABBDAAAAAAAAABBEAAAAAAAAABBFAAAAAAAAAAxKAAAASlVzZXJMb2dpY0ludC5Qb2NrZXQsIFZlcnNpb249MS4wLjQuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsBUYAAAAuU3VydmV5VG9Hby5Vc2VyTG9naWMuQ3JlYXRvci5RdWVzdGlvbkNvbmRpdGlvbgYAAAAZUXVlc3Rpb25JbmZvK21RdWVzdGlvbklkeBZRdWVzdGlvbkluZm8rbUhhc0Vycm9yIlF1ZXN0aW9uSW5mbyttUXVlc3Rpb25EZXBlbmRlbmNpZXMhUXVlc3Rpb25JbmZvK21DaGFwdGVyRGVwZW5kZW5jaWVzCWNvbmRpdGlvbghiZWhhdmlvcgAAAwMEBAgBHFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QcU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdCZTdXJ2ZXlUb0dvLlVzZXJMb2dpYy5DcmVhdG9yLkNvbmRpdGlvbgIAAAAvU3VydmV5VG9Hby5Vc2VyTG9naWMuSW50ZXJmYWNlcy5lVUxTa2lwQmVoYXZpb3JKAAAAAgAAAAIAAAAACUsAAAAJTAAAAAlNAAAABbL///8vU3VydmV5VG9Hby5Vc2VyTG9naWMuSW50ZXJmYWNlcy5lVUxTa2lwQmVoYXZpb3IBAAAAB3ZhbHVlX18ACEoAAAAAAAAAAUcAAABGAAAAAQAAAAAJTwAAAAlQAAAACVEAAAABrv///7L///8AAAAABUgAAAArU3VydmV5VG9Hby5Vc2VyTG9naWMuQ3JlYXRvci5RdWVzdGlvbkFjdGlvbgUAAAAZUXVlc3Rpb25JbmZvK21RdWVzdGlvbklkeBZRdWVzdGlvbkluZm8rbUhhc0Vycm9yIlF1ZXN0aW9uSW5mbyttUXVlc3Rpb25EZXBlbmRlbmNpZXMhUXVlc3Rpb25JbmZvK21DaGFwdGVyRGVwZW5kZW5jaWVzBkFjdGlvbgAAAwMBCAEcU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdBxTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0AgAAAAMAAAAACVMAAAAJVAAAAAZVAAAA+gZ2YXIgaW5UZXh0ID0gIm91dHNpZGUgdGhlIFBTVSI7DQoNCnZhciBQU1VWZXJ0ZXhlcyA9IG5ldyBBcnJheTsNCnZhciByb3cgPSBkYmxHZXRTdWJqZWN0U3RvcmVSb3coZ2V0UFNVcygpLCAiTG9jYXRpb25fSUQiLCBBbnN3ZXIoUFNVKSk7DQppZiAocm93ICE9IG51bGwpDQp7DQoJZm9yKHZhciBpPTE7IGk8PVZhcnNbIk1heFZlcnRleCJdOyBpKyspDQoJew0KCQlpZihyb3dbIkxBVCIgKyBpXSAhPSAtOTk5KQ0KCQl7DQoJCQlQU1VWZXJ0ZXhlcy5wdXNoKHJvd1siTEFUIiArIGldKTsNCgkJCVBTVVZlcnRleGVzLnB1c2gocm93WyJMT05HIiArIGldKTsNCgkJCVRyYWNlKCJJbnNlcnRpbmcgUG9seWdvbiBDb29yZGluYXRlczogezB9IDogezF9Iiwgcm93WyJMQVQiICsgaV0sIAlyb3dbIkxPTkciICsgaV0pOwkJDQoJCX0NCgl9DQp9DQoNCmlmIChBbnN3ZXJlZChRUmVmKDMpKSAmJiBpbnNpZGUoQW5zd2VyQ2hvaWNlKFFSZWYoMyksMSksIEFuc3dlckNob2ljZShRUmVmKDMpLDIpLCBQU1VWZXJ0ZXhlcykpDQp7DQoJaW5UZXh0ID0gImluc2lkZSB0aGUgUFNVIjsNCn0NCg0KaWYgKEFuc3dlcihRUmVmKDIpKSA9PSAxKQ0Kew0KCWlmKEdldEdQU0xvY2F0aW9uKCkuSXNWYWxpZCkNCgl7DQoJCWlmIChpbnNpZGUoR2V0R1BTTG9jYXRpb24oKS5MYXRpdHVkZSwgR2V0R1BTTG9jYXRpb24oKS5Mb25naXR1ZGUsIFBTVVZlcnRleGVzKSkNCgkJew0KCQkJaW5UZXh0ID0gImluc2lkZSB0aGUgUFNVIjsNCgkJfQ0KCX0NCgllbHNlDQoJew0KCQlpblRleHQgPSAibm90IGF2YWlsYWJsZS4gUGxlYXNlIHZlcmlmeSB0aGV0IHRoZSBTdXJ2ZXlUb0dvIEFwcCBoYXMgYSB2YWxpZCBsb2NhdGlvbiI7DQoJfQ0KfQ0KDQpTZXRUZXh0Rm9ybWF0KEN1cnJRdWVzLCBpblRleHQpOwVJAAAAK1N1cnZleVRvR28uVXNlckxvZ2ljLkNyZWF0b3IuTGlzdFNvdXJjZUluZm8GAAAAEFNuaXBwZXRJbmZvK21LZXkVU25pcHBldEluZm8rbUhhc0Vycm9yIVNuaXBwZXRJbmZvK21RdWVzdGlvbkRlcGVuZGVuY2llcyBTbmlwcGV0SW5mbyttQ2hhcHRlckRlcGVuZGVuY2llcwhsaXN0TmFtZQNleHAAAAMDAQEIARxTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0HFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QCAAAAAQAAAAAJVgAAAAlXAAAABlgAAAAMTG9jYXRpb24gUm93BlkAAACxAS8qDQp1c2UgRmlsbEZyb21YWFhYIHRvIGZpbGwgdGhlICJsaXN0IiB2YXJpYWJsZS4NCkV4YW1wbGU6DQpGaWxsRnJvbVN0b3JlKGxpc3QsICJEZW1vU3RvcmVOYW1lIik7DQoqLw0KDQpGaWxsRnJvbVN0b3JlKGxpc3QsIGdldFBTVXMoKSwgIkxvY2F0aW9uX05hbWUiLCAiTG9jYXRpb25fSUQiLCAiIiwgIiIpOwRLAAAAHFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QDAAAABl9pdGVtcwVfc2l6ZQhfdmVyc2lvbgUAAAgICVoAAAABAAAAAQAAAAFMAAAASwAAAAlbAAAAAAAAAAAAAAAFTQAAACZTdXJ2ZXlUb0dvLlVzZXJMb2dpYy5DcmVhdG9yLkNvbmRpdGlvbgEAAAAFbVRleHQBAgAAAAZcAAAANkFuc3dlcihRUmVmKDIpKSA9PSAyIHx8ICFJc1BsYXRmb3JtKGVQbGF0Zm9ybS5BbmRyb2lkKQFPAAAASwAAAAldAAAAAAAAAAAAAAABUAAAAEsAAAAJXQAAAAAAAAAAAAAAAVEAAABNAAAABl4AAAAdSXNQbGF0Zm9ybShlUGxhdGZvcm0uQW5kcm9pZCkBUwAAAEsAAAAJXwAAAAMAAAABAAAAAVQAAABLAAAACV0AAAAAAAAAAAAAAAFWAAAASwAAAAlbAAAAAAAAAAAAAAABVwAAAEsAAAAJWwAAAAAAAAAAAAAAEFoAAAAEAAAACAgBAAAADQMQWwAAAAAAAAAQXQAAAAAAAAAQXwAAAAQAAAAICAIAAAAICAEAAAAICAAAAAAKCw==1412726297721-11-110-1-165792-1-1-10-1054820992118001216217168{"eColumns_FlagClockChanged":"true","eColumns_FlagSingleChoice":"true","eColumns_FlagQuestionTakingTooLong":"true","eColumns_FlagGPSTimeDifferenceDate":"true","eColumns_FlagGPSTimeDifferenceStale":"true"}1H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx659o8M/R459Y501LTc+eHt1/fNf76/HrdX2ZX5/NjmaTB+efZuc725OHOwfb+3v397azB/ez7Yf3s8ksn2Sz2Xn++K5t/vhs9u5o5/Fd/Hj8Jn/XHr0s86zJ0yYv82mbZunL1189vsvfPH6VLS/yL4rl0e7ju/Z3/TR75z6l3+XT122+sh/zH4+Py7K6elZWWXv0LCsbwsX7xA7wzfUqP9rbcWPkDx6/Ki7m7XFZXCzNy94nj5/mzbQuVmgeH4Xf4PHz6iqveVz02+O77s/HX61W+uu3Cfrju+7vx6fvpuV6ls9M9/bvx6/nVd3STHBH5g8Z7Yt1WQaD5Q8ef1E0Dc3zT2blOj/aJioFHzz+yawuskmZv8gWuUANPnn8++TNCTMKCOz+ePyi0t/2Ht+1vz+mn/nxsnmdr7I6a8trg0/vc0zcrFq4Idq/9RtqTZRqwq/Nh9rm87par3hM/t80QWXeEqQdTIX8ShRt6wzE3U3ven/t2b+eVFW5e/SmXjO57Qfuyz03GfYT+fZs2e4yFu4v+8UesHB/PD6ra0LpMlu2J1UJDIDAF1mx/HZLIkq/nzVBE9Np92Oa8vZVdUW/Vo5IwWePT5fU63Kav1qXuQyzaM3v31kvVmfL84rRtn9QkxVxFCbfUsJ+wGL77TdfPMf7xHlXr6cZMcl60Wjb8DNi/Iti+qzMLpqjvU8P9u/d37//Kfjffvr4Vb6c5TXxjfy9u/Pg/sG9g4cPDmg+w6+EnBBSQ7InxfJp1mZHx8efffb4rvnr8bM6z9HkebEoWh5c+Mljapa/KRb5s6pekCYAi4SfEPecZ+uyff22WD3J59llUdXCSf2PH9NI31SrYtqcLV9mFzlEpPvR4y/beV6/XuVTkisWqZ/4/Xd//9eP7/Y+f3wyz1ZtXpNAU3/uDxKqxSJf8rBP1k1bLYy2el4s3x4dHlLj/sePj9s2m87xYoM3v5tDhQGy/vb49bSqWcjx9fOiaV9X63pq/3paNKsyuzZ/srrAHzTAL8+Jx9aLZaMDdn8/5rG/zAnOssXwqb/uR4TK5KQs6K/XrCYBNJxvFpruR49F+F9my7z8tgwB89v/9DEzIREOX5vfvQHSX/RF8Df1Dz5/U7QiHvLnGSEg5sb78zGN5NxwoXzBAidqyPv78as3z0w7/Owi3v1MSMf4yvfuzw557vXJc4/4VubLIRN8QHrleNoWl0aw7Z+PXxAeQkQhTPA3f8uYCFf6fz4+W9B08jDqakW88OmDBw/27pE96Hzx+GzZtPV6Ct5kXvT/dvj2P1X6ig7YMeS1KgF/vKyagg3tjlFW9hNt8TxfXrRz973+3aHp/tG9e/fvH9zf6ymffV+V7ZG38PDB7v17B74q2wswVe71/n781XMrPvorWQM08/4y3zzNp943+MsTZcuxzPr9j4WJmoEXBr9U2Rp6b/hb6e/beUYEoyHnmfJ271PtgczT61U2zT2w9iNt0v1evyQL/5al4XWbBSIX+dw1Pl3OIk3tp+QczWZlbsTU6QSrnIvz66+a/PfKr62R3dxoAAa+E0u/GiLywFeP4RhsnNWNDfj1zbO7uQWjfEISlW9CfLBBR8zuk/zsH/TU131MWUt/YRKNSiBf4ODTHchj9yuatmWxIENLZvvLpTF7kJr4F+Sskm0vix/kM1ZN3y1mohGin3dbq37uNzeK+yn1tkRoRTZ/mdemW7XrmHbX4quvzp6yRcjqi7xlMF/WxUXB2Pc/fHxC7LqcZTUHJnAL/L8fQ7/mNZO+ed2CnIB9vG7JIV+s4Po+r4jERUmehJnic/odev4WreB2UW9kpvN8Kd+IoT+p1kuR9M0tAgDMo5ve7zXoMM+nfbv3KYwJobrMSrE1v/ijXH2R358GN6meZNO3zDQfPfrox3d2nvHz0S+BtfFfCx3HL2Q6ep8xZY9nl/Cq+7w3/OXj1+16VlSM8e7RPfJK/L/VqZOBvSR8afrhjrO+IJeTYM2K7IRYCUEEfBAwevQLz1Kxk+D/Sb3+RC+8f/ANhve7fnj/tEqvq3V6ReFK2lbpdJ5P3+KTOp2uKZChT8tqmqHftKr16yxdZMt1VpbXlJ2g2clnttHvkd4yOXD/G04O7H793MA3SoLxePzDSSz8ovXvv7Pz4Gcht/ATv//ej3ILP8otbM4tfLNCQ3rjF2aL1eFy0qwORYFwJ++ZvggUaS9tsff/92zF3o+yFT+32Qp8c+t0BbOjl674/3W6Yk8yEj8f0xU9mu6HeYrdINn6owzFjzIUP8pQ/ChD8aMMxc+7DMX/xzMUXgD+wRmKPT9DoUv3HDGk06qqKcok57p51Ms07LBi7mYadnfs57fMNYgrM5xq+PTr5xo2DGYgafCmarPyUTqQOHiVLyhuJGl99HXSB7s/K+mDez9KH/wofbA5fYD3v8nY/t7+NxXcs7b4f2N0f+9H0f3/h6J7G7epNf3/dXS/IwF8PLrX0P9H0f2PovsfRfc/iu5/FN3/KLr/UXTf//L/5dG9F/J+cHR/z4/u38xzt1JYNOkv3vkl6c9aYO9HtrHI/uHXD+zj4xiI6em3gXj+2wT+60Tyn0YjeS+R8XUC+f0fBfI/CuQ3B/Lge7d0Hxfk/xcv5f+/Ntrf/1G0//+haP/+j6L9H63l/yja7/T3o2j/R9H+j6L9H0X7P4r2b7WW//+iaP/eNxjt74fRPinb9Pep1uP/b8b4DvsfWmR/72cjsr//o8j+R5H9j5bod77ZoP3+j4L2/w8F7Z/+vylo/1HQ/qOg/UdB+4+C9h8F7T8K2n8UtP8oaL9N0E7/NEf/D/J09eM2UAAAH4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6+MXDf979Ph42Vzl9dnTo53Hd+3vj39inTctgaDf7z++6/31+Gz2Dk3x4/Gb/F179GU7z+v09SqfFufXj+/yZ49fz6u6pebZ8vff2blP/999fNd85oALKP/Pxz+Z1UU2KfMX2SI/opeCvx+f8EDwuf72+PW6vsyvCeps8uD80+x8Z3vycOdge3/v/t529uB+tv3wfjaZ5ZNsNjvPCQfT/PHTvMzbfAYEzK+Pv7NerM6W59XRNvVg/3h8+q6tM4xrN72rfz2pqnL36FlWNgTU+0S+PVu2uwDs/lDMv1qezPPpW+m2+5G2MX/aQdrvgcK333zxHFg8K7OLBlDkl8c8C5gEIhjT6vXvv/v7E4je59TLYpEvWwD5bl5czFtA0d8ev55WdY4P5JfHZ83raVbmZqTmz8ev8hVNJhACnFf5ZZFfub/w3dlylr9jQvp/P36Z1+dhw5OqrGqvofz9+GnRrMrs2n0bfECIHU/b4jI/elOvGTH98/GXdXFRLLOSEaWJxqvdzx6/rPMmJ06Y+a16Hz4+W2QXObB9WVer5mj30wcPHuzd26Puwi+k4dkMg/rq+U9m5Tr3fiUGAEW9v8w3T/Op9w3+evwqW86qxed1tV4JTby/lWB26v0/iV40q5D65quvzp6ie+CW122RN8fN67YmTuJPs5pm30o6Dzz8SFUCw9072t3Z2zeaQT8i7oDmuJ36eHCD+vh9qnWdzoiBpnlaVtMMDaNa5MEGLbK7SYsc//4/8fvvQRZ+pEu+ti7Z+5Eu+ZEu+WBdYnXEJkWye3tFsusrki+y5Tory2vyd9q8nt2sTPa+vjLZG1Amez9SJrdSJns/UiY/UiY/O8rkLsc2/w8BlcWZCw0AAA==H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6zdVw/8ePT5eNld5ffb0aPfxXfv7459Y501LIORz76/HZ7N3R9v0GX4+fpO/a4+eZ23Rrmf547v85+PX86puqWm7+v13dnbp/3uP75rPHGB6fc+DDGg/mdVFNinzF9kiP3rz+//E73/v96cmwaePT3goeFV/e/x6XV/m1wR7Nnlw/ml2vrM9ebhzsL2/d39vO3twP9t+eD+bzPJJNpudE462+eOneZm3+exo5/Fd8+vj76wXq7PlecVDtH88Pn3X1hlGt5ve1b+eVFW5e/QsKxsC6n0i354t210Adn8o5l8tT+b59K102/1I25g/d00L+z1Q+PabL54Di2dldtEAivzy+Mt2ntevV/mUCKYUvPf77/7+rx/f7X1D/SwW+bIFmO/mxcW8RV/62+PX06rOAVh+eXzWvJ5mZW7Gav58/Cpf0aQCJcB5lV8W+ZX7C9+dLWf5u6N7j+/6fz5+mdfnYbuTqqxqJrn/9+OnRbMqs2v3bfAB4XU8bYtLGmi9Zrz0z8df1sVFscxKxpNmGq92P3v8ss6bnFhh5rfqffj4bJFd5MD2ZV2tmNydT6TF2Qyj+er5T2blOvd+panHO95f5pun+dT7Bn89fpUtZ9Xi87par4QY3t9KKTvp/p9EKJpNSHzz1VdnT9E9cMvrtsib4+Z1WxMP8adZTbNupZxHHH5Ekw6lEGqGnffQDHuBZqiWF5tVw+7XVw27A6rBSs2PVMNG1bD3/wLVsP8j1fD/NdWAf5uj/wejqEH/awgAAA==H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx65MG/xw9Pnt6tPP4Lv37+EW2yI++90VWLNOTebZq8/r7j+/yh49fr+vL/JoazSYPzj/Nzne2Jw93Drb39+7vbWcP7mfbD+9nk1k+yWaz8/zxXdv88dO8zNt8hi7Mr49fZnW+bOnb7d3Hd+0fj59XF8X0WZldNGjt/fX4Vb6c5bX8cf/xXf9P6qCZ1sWqpcEevZkXTUr/a+d5WldVm05lGGl1nmZlyZ//onXeoHFzt1lPtrUBvbXkbxtGfPQbJ79x8vtU63SaLdMlwanzRXWZUwsCrq+M0mw5Y6gOooW2WDdtOsnTNRANXhv7oBc0KefXadE26aquVnndFnmTbi2J5KN05gY2Stv8XZvm7XR8B3R0I378Bl/cPXp8+q6tsydVVe4ePcvKhubA+8R9u3f0pl77X+7pl2fLdpfnw/1lv9jDfLg/Hp/N3nFT/GQEvv3mi+dA4qRaLGgy8et38+Ji3uJF/e3x62lV5+AmfP0qX1V1e5K1+UVVX/eYrvO1Nn9TtCW//UX27owaZkwCYBJ88Ph50bSvq3U9zc9m/HXwAWP8Mlvm5bcFM7Tofvb41ZtnhrSvaKKrxed1tV5xW//vx2fN8bQtLnOlq/0zwLF5U52+wwh6yLpvHr+0HHDcvG5rklZ07sRgL5QKmoe7EN+7EOT/B1pb1Zn3AwAAH4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6ycvmvTu0f8DVNIIpTEAAAA=H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6+M3Df979Pi4bbPpfJEv27OnR/f37s12H+R72+fTTx9u7+9OH25nu7PZ9t75g918f2e6lz+cPr4bvPL49bq+zK/pt9nkwfmn2fnO9uThzsH2/t79ve3swf1s++H9bDLLJ9lsdp4/vmubP36RLfKjl6+/Sp8XTZv+Xl88f3yXP3r8NC/zNp8d7Ty+a359/KzMLpqj3cd35ZfHp+/aV/n575VfH9072Nnfe3zXffD4zfUqP3rw+C7/JGjNtC5WLREkvXtECGDUd5kC/w9qiePuMQEAAA==H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx69cnXzbp3aP/B1t6G+cyAAAAH4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx65dNevfo/wF1B76WMAAAAA==H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jxq8+b9O7R/wNCnyKPMAAAAA==H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jxyesmvXv0/wA+f8jSMAAAAA==H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx69cnTXr36P8B28cSlTEAAAA=H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jxTxw36d2j/wdMGPaGMAAAAA==H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6+cN/qH/r+vL/Prs6dFs8uD80+x8Z3vycOdge3/v/t529uB+tv3wfjaZ5ZNsNjvPH9+1zR8/z5YX9HN79/Fd/ZU/Oqlmuf2Q/+CPX+Qt/kjvHj1+kS3yo6f5ebYu28d3+a/HZ4vsgr98VmYXzdHO47vyy+Oz5tWb50fPsrKhzuUP+ux42haX+dGbes2f6p+PnxYLgAOck3XTVotn1bJ9mrUZPrmL0d7FuP8fi856/iYBAAA=H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6zd5w//SP+v6Mr8+e3o0mzw4/zQ739mePNw52N7fu7+3nT24n20/vJ9NZvkkm83O88d3bfPHz7PlBf3c3n18V399fNbmC/pJn+hvj19mdb5s9S80DT7gF95cr/Kje/IK/04oTfiXvYfoT35//CZ/16Z3jx4/K7OL5mjn8V355fFZczxti8v86E29Jvzsn/QqD+//5WO8t/PhY8S/zdH/A7bHBaT+AQAAH4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6y+eNPwv/bOuL/Prs6dHs8mD80+z853tycOdg+39vft729mD+9n2w/vZZJZPstnsPH981zZ//GQ9fZu39NvO47v2d/30RbbI07tHj5/m59m6bH9iXbUZ2gV/P35zvcrxKf98/BPrvGkJa4Kyvfv4rvfn45dZnS9b/cL+8fir5ck8p+5mx8vmiob8hPBCr8+Kss3rfCa4NK/bmkaPL95Uq2KqYMzvj8+obeZ17P9N42UafTOE2o0T6uhFfpW+nud5a77nT29DvHvvQ7ydnxPa3WVe+38Aa9/V75sCAAA=H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx6y+efN6kd4/+H6wF1isyAAAAH4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jxd182+If+n0/Olk2bLaf52dOje/v7D/Ye3w0/fOz9fv9g78Hevcd3/a+frcvyq7o8mrftqnl09+7V1dV4VlWTsppmV8V4Wi3uTssiX7Z3H981bR+fvsun6zZ/VmYXzdH93fuP7wafPH6RXcpv+4/v2t8fv6yaoqWBPavqRdYeEaqdTx4/K5ZFM3+ZXeTpXeqlrqva/PGkzpYzQnj38V3z6+MX1fJ42haXuWn0sq4u6rxpnmTTtydVWdVH23sHD/cPHtKg+9/Z5tR9rs13P33w4NOHn+669u7Lxz+xzhug25wt0SO1fny3+9ljGeze/U936Fsd+bfzcvW8WL4Fjvj9yxW/crTz+K7/J42/bHM75BPMUWn+epqfZ+uyfVYt26OfzOtZtswOd3cOn2Vlk0f+pRH7bzw+Lus8m12fVMvZetrmMwP2Rf6ufdIuT9ZNWy2Ehvll8MHTapkHH7xuq1XwwbfbRRlOHT4J0Zc2/vDwSTCD/hfB3OODIfwN/d+DLsErj4+XzVVev8fr3guP31SrYvoe77r2j08XWVESk10Ws7wGJ4QfsGD+xLpqs4CC3Q9lEog/14tlw0LzblXUjjxMy/AjTJ//tf/3m3m+yL8kBVQTEvYDkjWwuvmdVMxL/qc5+n8AoXraXLQEAAA=H4sIAAAAAAAEAO29B2AcSZYlJi9tynt/SvVK1+B0oQiAYBMk2JBAEOzBiM3mkuwdaUcjKasqgcplVmVdZhZAzO2dvPfee++999577733ujudTif33/8/XGZkAWz2zkrayZ4hgKrIHz9+fB8/Iv7Hv/cffPx7vFuU6WVeN0W1/Oyj3fHOR2m+nFazYnnx2Ufr9nz74KPf4+jx2csG/9D/l02bLaf52dOj+wd7D/buPb7rffT49bq+zK/pt+m92YPpvSzb3s338u393cn+9sPpw4Pt82z26fn9T2f7Bzu7j+/a5o+fldlFc7T76eO78tvjL7J3P7Gu2uxom9rZPx5/USzfFIuc/3qVT+f59O3RDjWIfAwQ+PBV3q7r5ev15KfzacuNY5/TOF7yP83R/wPllqLLFwEAAA==