".=0A=
				try=0A=
				{=0A=
					var namePrefix =3D child.nodeName + "/@";=0A=
=0A=
					for (i =3D 0; i  0)=0A=
		isDOMNodeArray =3D nodeArray[0].nodeType !=3D 2 /* Node.ATTRIBUTE_NODE =
*/;=0A=
=0A=
	var nextID =3D 0;=0A=
=0A=
	var encodeText =3D true;=0A=
	var encodeCData =3D false;=0A=
	if (typeof entityEncodeStrings =3D=3D "boolean")=0A=
		encodeText =3D encodeCData =3D entityEncodeStrings;=0A=
=0A=
	// We now have the set of nodes that make up our data set=0A=
	// so process each one.=0A=
=0A=
	for (var i =3D 0; i ";=0A=
	}=0A=
	result +=3D indentStr + "" + this.path + "" + =
(this.xpath ? " -- xpath(" + Spry.Utils.encodeEntities(this.xpath) + =
")" : "") + "\n";=0A=
	var numSubPaths =3D this.subPaths.length;=0A=
	indentStr +=3D "    ";=0A=
	for (var i =3D 0; i ";=0A=
	return result;=0A=
};=0A=
*/=0A=
=0A=
Spry.Data.XMLDataSet.prototype.convertXPathsToPathTree =3D =
function(xpathArray)=0A=
{=0A=
	var xpaLen =3D xpathArray.length;=0A=
	var root =3D new Spry.Data.XMLDataSet.PathNode("");=0A=
=0A=
	for (var i =3D 0; i =0A=
							//		Bob=0A=
							//		Joe=0A=
							//	=0A=
							//=0A=
							// XPath: /employees/employee=0A=
							//=0A=
							// The property name that contains "Bob" and "Joe" will be =
"employee".=0A=
							// So in our new row, we need to call this column =
"/employees/employee"=0A=
							// instead of "/employees/employee/employee" which would be =
incorrect.=0A=
=0A=
							if (cleanedXPath =3D=3D (prop + "/") || cleanedXPath.search(new =
RegExp("\\/" + prop + "\\/$")) !=3D -1)=0A=
								newPropName =3D cleanedXPathArray[j];=0A=
=0A=
							// Copy the props to the new object using the new property name.=0A=
=0A=
							newRowObj[newPropName] =3D newRSRow[prop];=0A=
						}=0A=
=0A=
						// Now add this row to the array that tracks all of the new=0A=
						// rows we've just created.=0A=
=0A=
						joinedRows.push(newRowObj);=0A=
					}=0A=
				}=0A=
=0A=
				// Set the newRows array equal to our joinedRows we just created,=0A=
				// so that when we flatten the data for the next subPath, it gets=0A=
				// joined with our new set of rows.=0A=
=0A=
				newRows =3D joinedRows;=0A=
			}=0A=
		}=0A=
=0A=
		newData =3D newData.concat(newRows);=0A=
	}=0A=
=0A=
	// Now that we have a new set of joined rows, we need to run through=0A=
	// all of the rows and make sure they all have a unique row ID and=0A=
	// rebuild our dataHash.=0A=
=0A=
	data =3D newData;=0A=
	numRows =3D data.length;=0A=
=0A=
	for (i =3D 0; i  0)=0A=
	{=0A=
		// Some subPaths were specified. Convert any data references in each =
subPath=0A=
		// to real data. While we're at it, convert any subPaths that are =
relative=0A=
		// to our main XPath to absolute paths.=0A=
=0A=
		var processedSubPaths =3D [];=0A=
		var numSubPaths =3D subPaths.length;=0A=
		for (var i =3D 0; i Generated region markup for '" + this.name + =
"':
" + Spry.Utils.encodeEntities(str));=0A=
=0A=
		// Now insert the new transformed content into the document.=0A=
		Spry.Utils.setInnerHTML(this.regionNode, str, =
!Spry.Data.Region.evalScripts);=0A=
=0A=
		// Now run through the content looking for attributes=0A=
		// that tell us what behaviors to attach to each element.=0A=
		if (this.hasBehaviorAttributes)=0A=
			this.attachBehaviors();=0A=
=0A=
		if (!suppressNotfications)=0A=
			Spry.Data.Region.notifyObservers("onPostUpdate", this, =
notificationData);=0A=
	}=0A=
=0A=
	if (!suppressNotfications)=0A=
		Spry.Data.Region.notifyObservers("onPostStateChange", this, stateObj);=0A=
};=0A=
=0A=
Spry.Data.Region.prototype.getDataSets =3D function()=0A=
{=0A=
	return this.dataSets;=0A=
};=0A=
=0A=
Spry.Data.Region.prototype.addDataSet =3D function(aDataSet)=0A=
{=0A=
	if (!aDataSet)=0A=
		return;=0A=
=0A=
	if (!this.dataSets)=0A=
		this.dataSets =3D new Array;=0A=
=0A=
	// Check to see if the data set is already in our list.=0A=
=0A=
	for (var i =3D 0; i =0A=
	//=0A=
	// The dataSetName is optional, and if not specified, the first data set=0A=
	// listed for the region is used.=0A=
	//=0A=
	// cssEvenClassName and cssOddClassName are required and *must* be =
specified. They can be=0A=
	// any user defined CSS class name.=0A=
=0A=
	if (!value)=0A=
	{=0A=
		Spry.Debug.showError("The " + attr + " attribute requires a CSS class =
name as its value!");=0A=
		node.attributes.removeNamedItem(attr);=0A=
		return;=0A=
	}=0A=
=0A=
	var dsName =3D "";=0A=
	var valArr =3D value.split(/\s/);=0A=
	if (valArr.length > 1)=0A=
	{=0A=
		// Extract out the data set name and reset the attribute so=0A=
		// that it only contains the CSS class name to use.=0A=
=0A=
		dsName =3D valArr[0];=0A=
		node.setAttribute(attr, valArr[1]);=0A=
	}=0A=
=0A=
	// Tag the node with an attribute that will allow us to fetch the row=0A=
	// number used when it is written out during the re-generation process.=0A=
=0A=
	node.setAttribute(rowNumAttrName, "{" + (dsName ? (dsName + "::") : "") =
+ "ds_RowNumber}");=0A=
};=0A=
=0A=
Spry.Data.Region.behaviorAttrs["spry:even"] =3D=0A=
{=0A=
	setup: function(node, value)=0A=
	{=0A=
		Spry.Data.Region.setUpRowNumberForEvenOddAttr(node, "spry:even", =
value, "spryevenrownumber");=0A=
	},=0A=
=0A=
	attach: function(rgn, node, value)=0A=
	{=0A=
		if (value)=0A=
		{=0A=
			rowNumAttr =3D node.attributes.getNamedItem("spryevenrownumber");=0A=
			if (rowNumAttr && rowNumAttr.value)=0A=
			{=0A=
				var rowNum =3D parseInt(rowNumAttr.value);=0A=
				if (rowNum % 2)=0A=
					Spry.Utils.addClassName(node, value);=0A=
			}=0A=
		}=0A=
		node.removeAttribute("spry:even");=0A=
		node.removeAttribute("spryevenrownumber");=0A=
	}=0A=
};=0A=
=0A=
Spry.Data.Region.behaviorAttrs["spry:odd"] =3D=0A=
{=0A=
	setup: function(node, value)=0A=
	{=0A=
		Spry.Data.Region.setUpRowNumberForEvenOddAttr(node, "spry:odd", value, =
"spryoddrownumber");=0A=
	},=0A=
=0A=
	attach: function(rgn, node, value)=0A=
	{=0A=
		if (value)=0A=
		{=0A=
			rowNumAttr =3D node.attributes.getNamedItem("spryoddrownumber");=0A=
			if (rowNumAttr && rowNumAttr.value)=0A=
			{=0A=
				var rowNum =3D parseInt(rowNumAttr.value);=0A=
				if (rowNum % 2 =3D=3D 0)=0A=
					Spry.Utils.addClassName(node, value);=0A=
			}=0A=
		}=0A=
		node.removeAttribute("spry:odd");=0A=
		node.removeAttribute("spryoddrownumber");=0A=
	}=0A=
};=0A=
=0A=
Spry.Data.Region.setRowAttrClickHandler =3D function(node, dsName, =
rowAttr, funcName)=0A=
{=0A=
		if (dsName)=0A=
		{=0A=
			var ds =3D Spry.Data.getDataSetByName(dsName);=0A=
			if (ds)=0A=
			{=0A=
				rowIDAttr =3D node.attributes.getNamedItem(rowAttr);=0A=
				if (rowIDAttr)=0A=
				{=0A=
					var rowAttrVal =3D rowIDAttr.value;=0A=
					if (rowAttrVal)=0A=
						Spry.Utils.addEventListener(node, "click", function(event){ =
ds[funcName](rowAttrVal); }, false);=0A=
				}=0A=
			}=0A=
		}=0A=
};=0A=
=0A=
Spry.Data.Region.behaviorAttrs["spry:setrow"] =3D=0A=
{=0A=
	setup: function(node, value)=0A=
	{=0A=
		if (!value)=0A=
		{=0A=
			Spry.Debug.reportError("The spry:setrow attribute requires a data set =
name as its value!");=0A=
			node.removeAttribute("spry:setrow");=0A=
			return;=0A=
		}=0A=
=0A=
		// Tag the node with an attribute that will allow us to fetch the id =
of the=0A=
		// row used when it is written out during the re-generation process.=0A=
=0A=
		node.setAttribute("spryrowid", "{" + value + "::ds_RowID}");=0A=
	},=0A=
=0A=
	attach: function(rgn, node, value)=0A=
	{=0A=
		Spry.Data.Region.setRowAttrClickHandler(node, value, "spryrowid", =
"setCurrentRow");=0A=
		node.removeAttribute("spry:setrow");=0A=
		node.removeAttribute("spryrowid");=0A=
	}=0A=
};=0A=
=0A=
Spry.Data.Region.behaviorAttrs["spry:setrownumber"] =3D=0A=
{=0A=
	setup: function(node, value)=0A=
	{=0A=
		if (!value)=0A=
		{=0A=
			Spry.Debug.reportError("The spry:setrownumber attribute requires a =
data set name as its value!");=0A=
			node.removeAttribute("spry:setrownumber");=0A=
			return;=0A=
		}=0A=
=0A=
		// Tag the node with an attribute that will allow us to fetch the row =
number=0A=
		// of the row used when it is written out during the re-generation =
process.=0A=
=0A=
		node.setAttribute("spryrownumber", "{" + value + "::ds_RowID}");=0A=
	},=0A=
=0A=
	attach: function(rgn, node, value)=0A=
	{=0A=
		Spry.Data.Region.setRowAttrClickHandler(node, value, "spryrownumber", =
"setCurrentRowNumber");=0A=
		node.removeAttribute("spry:setrownumber");=0A=
		node.removeAttribute("spryrownumber");=0A=
	}=0A=
};=0A=
=0A=
Spry.Data.Region.behaviorAttrs["spry:sort"] =3D=0A=
{=0A=
	attach: function(rgn, node, value)=0A=
	{=0A=
		if (!value)=0A=
			return;=0A=
=0A=
		// The format of a spry:sort attribute is as follows:=0A=
		//=0A=
		// =0A=
		//=0A=
		// The dataSetName and sortOrderName are optional, but when specified, =
they=0A=
		// must appear in the order mentioned above. If the dataSetName is not =
specified,=0A=
		// the first data set listed for the region is used. If the =
sortOrderName is not=0A=
		// specified, the sort defaults to "toggle".=0A=
		//=0A=
		// The user *must* specify at least one column name.=0A=
=0A=
		var ds =3D rgn.getDataSets()[0];=0A=
		var sortOrder =3D "toggle";=0A=
=0A=
		var colArray =3D value.split(/\s/);=0A=
		if (colArray.length > 1)=0A=
		{=0A=
			// Check the first string in the attribute to see if a data set was=0A=
			// specified. If so, make sure we use it for the sort.=0A=
=0A=
			var specifiedDS =3D Spry.Data.getDataSetByName(colArray[0]);=0A=
			if (specifiedDS)=0A=
			{=0A=
				ds =3D specifiedDS;=0A=
				colArray.shift();=0A=
			}=0A=
=0A=
			// Check to see if the last string in the attribute is the name of=0A=
			// a sort order. If so, use that sort order during the sort.=0A=
=0A=
			if (colArray.length > 1)=0A=
			{=0A=
				var str =3D colArray[colArray.length - 1];=0A=
				if (str =3D=3D "ascending" || str =3D=3D "descending" || str =3D=3D =
"toggle")=0A=
				{=0A=
					sortOrder =3D str;=0A=
					colArray.pop();=0A=
				}=0A=
			}=0A=
		}=0A=
=0A=
		// If we have a data set and some column names, add a non-destructive=0A=
		// onclick handler that will perform a toggle sort on the data set.=0A=
=0A=
		if (ds && colArray.length > 0)=0A=
			Spry.Utils.addEventListener(node, "click", function(event){ =
ds.sort(colArray, sortOrder); }, false);=0A=
=0A=
		node.removeAttribute("spry:sort");=0A=
	}=0A=
};=0A=
=0A=
Spry.Data.Region.prototype.attachBehaviors =3D function()=0A=
{=0A=
	var rgn =3D this;=0A=
	Spry.Utils.getNodesByFunc(this.regionNode, function(node)=0A=
	{=0A=
		if (!node || node.nodeType !=3D 1 /* Node.ELEMENT_NODE */)=0A=
			return false;=0A=
		try=0A=
		{=0A=
			var bAttrs =3D Spry.Data.Region.behaviorAttrs;=0A=
			for (var bAttrName in bAttrs)=0A=
			{=0A=
				var attr =3D node.attributes.getNamedItem(bAttrName);=0A=
				if (attr)=0A=
				{=0A=
					var behavior =3D bAttrs[bAttrName];=0A=
					if (behavior && behavior.attach)=0A=
						behavior.attach(rgn, node, attr.value);=0A=
				}=0A=
			}=0A=
		} catch(e) {}=0A=
=0A=
		return false;=0A=
	});=0A=
};=0A=
=0A=
Spry.Data.Region.prototype.updateContent =3D function()=0A=
{=0A=
	var allDataSetsReady =3D true;=0A=
=0A=
	var dsArray =3D this.getDataSets();=0A=
=0A=
	if (!dsArray || dsArray.length ]*>\s*-->/mg;=0A=
	var searchStartIndex =3D 0;=0A=
	var processingContentTag =3D 0;=0A=
=0A=
	while (inStr.length)=0A=
	{=0A=
		var results =3D regexp.exec(inStr);=0A=
		if (!results || !results[0])=0A=
		{=0A=
			outStr +=3D inStr.substr(searchStartIndex, inStr.length - =
searchStartIndex);=0A=
			break;=0A=
		}=0A=
=0A=
		if (!processingContentTag && results.index !=3D searchStartIndex)=0A=
		{=0A=
			// We found a match but it's not at the start of the inStr.=0A=
			// Create a string token for everything that precedes the match.=0A=
			outStr +=3D inStr.substr(searchStartIndex, results.index - =
searchStartIndex);=0A=
		}=0A=
=0A=
		if (results[0].search(/=0A=
	//   =0A=
	//   {valueReference}=0A=
	var regexp =3D =
/((){0,1})|((\{|%7[bB])[^\}\s%]+(\=
}|%7[dD]))/mg;=0A=
	var searchStartIndex =3D 0;=0A=
=0A=
	while(parseStr.length)=0A=
	{=0A=
		var results =3D regexp.exec(parseStr);=0A=
		var token =3D null;=0A=
=0A=
		if (!results || !results[0])=0A=
		{=0A=
			// If we get here, the rest of the parseStr should be=0A=
			// just a plain string. Create a token for it and then=0A=
			// break out of the list.=0A=
			var str =3D parseStr.substr(searchStartIndex, parseStr.length - =
searchStartIndex);=0A=
			token =3D new =
Spry.Data.Region.Token(Spry.Data.Region.Token.STRING_TOKEN, null, str, =
str);=0A=
			tokenStack[tokenStack.length - 1].addChild(token);=0A=
			break;=0A=
		}=0A=
=0A=
		if (results.index !=3D searchStartIndex)=0A=
		{=0A=
			// We found a match but it's not at the start of the parseStr.=0A=
			// Create a string token for everything that precedes the match.=0A=
			var str =3D parseStr.substr(searchStartIndex, results.index - =
searchStartIndex);=0A=
			token =3D new =
Spry.Data.Region.Token(Spry.Data.Region.Token.STRING_TOKEN, null, str, =
str);=0A=
			tokenStack[tokenStack.length - 1].addChild(token);=0A=
		}=0A=
=0A=
		// We found a string that needs to be turned into a token. Create a =
token=0A=
		// for it and then update parseStr for the next iteration.=0A=
		if (results[0].search(/^({|%7[bB])/) !=3D -1 /* results[0].charAt(0) =
=3D=3D '{' */)=0A=
		{=0A=
			var valueName =3D results[0];=0A=
			var regionStr =3D results[0];=0A=
=0A=
			// Strip off brace and url encode brace chars inside the valueName.=0A=
=0A=
			valueName =3D valueName.replace(/^({|%7[bB])/, "");=0A=
			valueName =3D valueName.replace(/(}|%7[dD])$/, "");=0A=
=0A=
			// Check to see if our value begins with the name of a data set.=0A=
			// For example: {dataSet:tokenValue}. If it is, we need to save=0A=
			// the data set name so we know which data set to use to get the=0A=
			// value for the token during the region transform.=0A=
=0A=
			var dataSetName =3D null;=0A=
			var splitArray =3D valueName.split(/::/);=0A=
=0A=
			if (splitArray.length > 1)=0A=
			{=0A=
				dataSetName =3D splitArray[0];=0A=
				valueName =3D splitArray[1];=0A=
			}=0A=
=0A=
			// Convert any url encoded braces to regular brace chars.=0A=
=0A=
			regionStr =3D regionStr.replace(/^%7[bB]/, "{");=0A=
			regionStr =3D regionStr.replace(/%7[dD]$/, "}");=0A=
=0A=
			// Now create a token for the placeholder.=0A=
=0A=
			token =3D new =
Spry.Data.Region.Token(Spry.Data.Region.Token.VALUE_TOKEN, dataSetName, =
valueName, new String(regionStr));=0A=
			tokenStack[tokenStack.length - 1].addChild(token);=0A=
		}=0A=
		else if (results[0].charAt(0) =3D=3D '(\s*-->){0,1}|\s.*$/, "");=0A=
=0A=
			if (results[0].search(/ 0 && =
this.dataSets[0])=0A=
				{=0A=
					// No dataSet was specified by the token, so use whatever the first=0A=
					// data set specified in the region.=0A=
	=0A=
					dataSet =3D this.dataSets[0];=0A=
				}=0A=
				if (!dataSet)=0A=
				{=0A=
					Spry.Debug.reportError("processTokens(): Value reference has no =
data set specified: " + token.regionStr + "\n");=0A=
					return "";=0A=
				}=0A=
	=0A=
				val =3D processContext.getValueFromDataSet(dataSet, token.data);=0A=
			}=0A=
=0A=
			if (typeof val !=3D "undefined")=0A=
				outputArr.push(val + "");=0A=
=0A=
			break;=0A=
		default:=0A=
			Spry.Debug.reportError("processTokens(): Invalid token type: " + =
token.regionStr + "\n");=0A=
			break;=0A=
	}=0A=
};=0A=
=0A=
Spry.Data.Region.prototype.transform =3D function()=0A=
{=0A=
	if (this.data && !this.tokens)=0A=
		this.tokens =3D this.tokenizeData(this.data);=0A=
=0A=
	if (!this.tokens)=0A=
		return "";=0A=
=0A=
	processContext =3D new Spry.Data.Region.ProcessingContext(this);=0A=
	if (!processContext)=0A=
		return "";=0A=
=0A=
	// Now call processTokens to transform our tokens into real data =
strings.=0A=
	// We use an array to gather the strings during processing as a =
performance=0A=
	// enhancement for IE to avoid n-square problems of adding to an =
existing=0A=
	// string. For example:=0A=
	//=0A=
	//     for (var i =3D 0; i ";=0A=
};=0A=
=0A=
Spry.Data.Region.PI.buildOpenTagForTest =3D function(ele, piName)=0A=
{=0A=
	return Spry.Data.Region.PI.buildOpenTagForValueAttr(ele, piName, =
"test");=0A=
};=0A=
=0A=
Spry.Data.Region.PI.buildOpenTagForState =3D function(ele, piName)=0A=
{=0A=
	return Spry.Data.Region.PI.buildOpenTagForValueAttr(ele, piName, =
"name");=0A=
};=0A=
=0A=
Spry.Data.Region.PI.buildOpenTagForRepeat =3D function(ele, piName)=0A=
{=0A=
	if (!ele || !piName)=0A=
		return "";=0A=
=0A=
	var selectAttrStr =3D "";=0A=
=0A=
	try=0A=
	{=0A=
		var selectAttr =3D ele.attributes.getNamedItem(piName);=0A=
		if (selectAttr && selectAttr.value)=0A=
		{=0A=
			selectAttrStr =3D selectAttr.value;=0A=
			selectAttrStr =3D selectAttrStr.replace(/\s/g, "");=0A=
		}=0A=
	}=0A=
	catch (e) { selectAttrStr =3D ""; }=0A=
=0A=
	if (!selectAttrStr)=0A=
	{=0A=
		Spry.Debug.reportError(piName + " attribute requires a data set =
name!\n");=0A=
		return "";=0A=
	}=0A=
=0A=
	var testAttrStr =3D "";=0A=
=0A=
	try=0A=
	{=0A=
		var testAttr =3D ele.attributes.getNamedItem("spry:test");=0A=
		if (testAttr)=0A=
		{=0A=
			if (testAttr.value)=0A=
				testAttrStr =3D " test=3D\"" + =
Spry.Utils.encodeEntities(testAttr.value) + "\"";=0A=
			ele.attributes.removeNamedItem(testAttr.nodeName);=0A=
		}=0A=
	}=0A=
	catch (e) { testAttrStr =3D ""; }=0A=
=0A=
	return "";=0A=
};=0A=
=0A=
Spry.Data.Region.PI.buildOpenTagForContent =3D function(ele, piName)=0A=
{=0A=
	if (!ele || !piName)=0A=
		return "";=0A=
=0A=
	var dataRefStr =3D "";=0A=
=0A=
	try=0A=
	{=0A=
		var contentAttr =3D ele.attributes.getNamedItem(piName);=0A=
		if (contentAttr && contentAttr.value)=0A=
			dataRefStr =3D Spry.Utils.encodeEntities(contentAttr.value);=0A=
	}=0A=
	catch (e) { dataRefStr =3D ""; }=0A=
=0A=
	if (!dataRefStr)=0A=
	{=0A=
		Spry.Debug.reportError(piName + " attribute requires a data =
reference!\n");=0A=
		return "";=0A=
	}=0A=
=0A=
	return "";=0A=
};=0A=
=0A=
Spry.Data.Region.PI.buildOpenTag =3D function(ele, piName)=0A=
{=0A=
	return "";=0A=
};=0A=
=0A=
Spry.Data.Region.PI.buildCloseTag =3D function(ele, piName)=0A=
{=0A=
	return "" + Spry.Data.Region.PI.instructions[piName].tagName + ">";=0A=
};=0A=
=0A=
Spry.Data.Region.PI.instructions["spry:state"] =3D { tagName: =
"spry:state", childrenOnly: false, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForState, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };=0A=
Spry.Data.Region.PI.instructions["spry:if"] =3D { tagName: "spry:if", =
childrenOnly: false, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForTest, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };=0A=
Spry.Data.Region.PI.instructions["spry:repeat"] =3D { tagName: =
"spry:repeat", childrenOnly: false, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForRepeat, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };=0A=
Spry.Data.Region.PI.instructions["spry:repeatchildren"] =3D { tagName: =
"spry:repeat", childrenOnly: true, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForRepeat, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };=0A=
Spry.Data.Region.PI.instructions["spry:choose"] =3D { tagName: =
"spry:choose", childrenOnly: true, getOpenTag: =
Spry.Data.Region.PI.buildOpenTag, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };=0A=
Spry.Data.Region.PI.instructions["spry:when"] =3D { tagName: =
"spry:when", childrenOnly: false, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForTest, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };=0A=
Spry.Data.Region.PI.instructions["spry:default"] =3D { tagName: =
"spry:default", childrenOnly: false, getOpenTag: =
Spry.Data.Region.PI.buildOpenTag, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };=0A=
Spry.Data.Region.PI.instructions["spry:content"] =3D { tagName: =
"spry:content", childrenOnly: true, getOpenTag: =
Spry.Data.Region.PI.buildOpenTagForContent, getCloseTag: =
Spry.Data.Region.PI.buildCloseTag };=0A=
=0A=
Spry.Data.Region.PI.orderedInstructions =3D [ "spry:state", "spry:if", =
"spry:repeat", "spry:repeatchildren", "spry:choose", "spry:when", =
"spry:default", "spry:content" ];=0A=
=0A=
Spry.Data.Region.getTokensFromStr =3D function(str)=0A=
{=0A=
	// XXX: This will need to be modified if we support=0A=
	// tokens that use javascript between the braces!=0A=
	if (!str)=0A=
		return null;=0A=
	return str.match(/{[^}]+}/g);=0A=
};=0A=
=0A=
Spry.Data.Region.processDataRefString =3D function(processingContext, =
regionStr, dataSetsToUse, isJSExpr)=0A=
{=0A=
	if (!regionStr)=0A=
		return "";=0A=
=0A=
	if (!processingContext && !dataSetsToUse)=0A=
		return regionStr;=0A=
=0A=
	var resultStr =3D "";=0A=
	var re =3D new RegExp("\\{([^\\}:]+::)?[^\\}]+\\}", "g");=0A=
	var startSearchIndex =3D 0;=0A=
=0A=
	while (startSearchIndex  data.length)=0A=
		{=0A=
			Spry.Debug.reportError("Invalid index used in =
Spry.Data.Region.DSContext.getCurrentRow()!\n");=0A=
			return null;=0A=
		}=0A=
=0A=
		return data[curRowIndex];=0A=
	};=0A=
	this.getRowIndex =3D function()=0A=
	{=0A=
		var curRowIndex =3D getInternalRowIndex();=0A=
		if (curRowIndex >=3D 0)=0A=
			return curRowIndex;=0A=
=0A=
		return m_dataSet.getRowNumber(m_dataSet.getCurrentRow());=0A=
	};=0A=
	this.setRowIndex =3D function(rowIndex)=0A=
	{=0A=
		this.getCurrentState().rowIndex =3D rowIndex;=0A=
=0A=
		var data =3D this.getData();=0A=
		var numChildren =3D m_children.length;=0A=
		for (var i =3D 0; i  0)=0A=
			return this.dataSetContexts[0];=0A=
		return null;=0A=
	}=0A=
=0A=
	if (typeof dataSet =3D=3D 'string')=0A=
	{=0A=
		dataSet =3D Spry.Data.getDataSetByName(dataSet);=0A=
		if (!dataSet)=0A=
			return null;=0A=
	}=0A=
=0A=
	for (var i =3D 0; i  1)=0A=
	{=0A=
		// The caller is passing in the data set name and the=0A=
		// name of the data reference separately.=0A=
=0A=
		dsName =3D arguments[0];=0A=
		columnName =3D arguments[1];=0A=
	}=0A=
	else=0A=
	{=0A=
		// The caller is passing a single string which can be in one=0A=
		// of the following forms:=0A=
		//=0A=
		//    "columnName"=0A=
		//    "dsName::columnName"=0A=
		//    "{columnName}"=0A=
		//    "{dsName::columnName}"=0A=
=0A=
		var dataRef =3D arguments[0].replace(/\s*{\s*|\s*}\s*/g, "");=0A=
		if (dataRef.search("::") !=3D -1)=0A=
		{=0A=
			dsName =3D dataRef.replace(/::.*/, "");=0A=
			columnName =3D dataRef.replace(/.*::/, "");=0A=
		}=0A=
		else=0A=
			columnName =3D dataRef;=0A=
	}=0A=
=0A=
	var result =3D "";=0A=
	var dsContext =3D this.getDataSetContext(dsName);=0A=
	if (dsContext)=0A=
		result =3D dsContext.getValue(columnName, dsContext.getCurrentRow());=0A=
	else=0A=
		Spry.Debug.reportError("getValueFromDataSet: Failed to get " + dsName =
+ " context for the " + this.region.regionNode.id + " region.\n");=0A=
=0A=
	return result;=0A=
};=0A=
=0A=
// Define a short-hand name for developers.=0A=
Spry.Data.Region.ProcessingContext.prototype.$v =3D =
Spry.Data.Region.ProcessingContext.prototype.getValueFromDataSet;=0A=
=0A=
Spry.Data.Region.ProcessingContext.prototype.getCurrentRowForDataSet =3D =
function(dataSet)=0A=
{=0A=
	var dsc =3D this.getDataSetContext(dataSet);=0A=
	if (dsc)=0A=
		return dsc.getCurrentRow();=0A=
	return null;=0A=
};=0A=
=0A=
Spry.Data.Region.Token =3D function(tokenType, dataSet, data, regionStr)=0A=
{=0A=
	var self =3D this;=0A=
	this.tokenType =3D tokenType;=0A=
	this.dataSet =3D dataSet;=0A=
	this.data =3D data;=0A=
	this.regionStr =3D regionStr;=0A=
	this.parent =3D null;=0A=
	this.children =3D null;=0A=
};=0A=
=0A=
Spry.Data.Region.Token.prototype.addChild =3D function(child)=0A=
{=0A=
	if (!child)=0A=
		return;=0A=
=0A=
	if (!this.children)=0A=
		this.children =3D new Array;=0A=
=0A=
	this.children.push(child);=0A=
	child.parent =3D this;=0A=
};=0A=
=0A=
Spry.Data.Region.Token.LIST_TOKEN                   =3D 0;=0A=
Spry.Data.Region.Token.STRING_TOKEN                 =3D 1;=0A=
Spry.Data.Region.Token.PROCESSING_INSTRUCTION_TOKEN =3D 2;=0A=
Spry.Data.Region.Token.VALUE_TOKEN                  =3D 3;=0A=
=0A=
Spry.Data.Region.Token.PIData =3D function(piName, data, jsExpr, =
regionState)=0A=
{=0A=
	var self =3D this;=0A=
	this.name =3D piName;=0A=
	this.data =3D data;=0A=
	this.jsExpr =3D jsExpr;=0A=
	this.regionState =3D regionState;=0A=
};=0A=
=0A=
Spry.Utils.addLoadListener(function() { setTimeout(function() { if =
(Spry.Data.initRegionsOnLoad) Spry.Data.initRegions(); }, 0); });=0A=
------=_NextPart_000_0037_01C94F03.EA511B90
Content-Type: application/octet-stream
Content-Transfer-Encoding: quoted-printable
Content-Location: http://www.sciam.com/assets/js/SpryJSONDataSet.js
// SpryJSONDataSet.js - version 0.6 - Spry Pre-Release 1.6.1
//
// Copyright (c) 2007. Adobe Systems Incorporated.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions =
are met:
//
//   * Redistributions of source code must retain the above copyright =
notice,
//     this list of conditions and the following disclaimer.
//   * Redistributions in binary form must reproduce the above copyright =
notice,
//     this list of conditions and the following disclaimer in the =
documentation
//     and/or other materials provided with the distribution.
//   * Neither the name of Adobe Systems Incorporated nor the names of =
its
//     contributors may be used to endorse or promote products derived =
from this
//     software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS =
"AS IS"
// AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, =
THE
// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR =
PURPOSE
// ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS =
BE
// LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
// CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR =
BUSINESS
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER =
IN
// CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR =
OTHERWISE)
// ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED =
OF THE
// POSSIBILITY OF SUCH DAMAGE.
Spry.Data.JSONDataSet =3D function(dataSetURL, dataSetOptions)
{
	// Call the constructor for our HTTPSourceDataSet base class so that
	// our base class properties get defined.
	this.path =3D "";
	this.pathIsObjectOfArrays =3D false;
	this.doc =3D null;
	this.subPaths =3D [];
	this.useParser =3D false;
	this.preparseFunc =3D null;
	Spry.Data.HTTPSourceDataSet.call(this, dataSetURL, dataSetOptions);
	// Callers are allowed to pass either a string, an object or an array =
of
	// strings and/or objects for the 'subPaths' option, so make sure we =
normalize
	// the subPaths value to be an array.
	var jwType =3D typeof this.subPaths;
	if (jwType =3D=3D "string" || (jwType =3D=3D "object" && =
this.subPaths.constructor !=3D Array))
		this.subPaths =3D [ this.subPaths ];
}; // End of Spry.Data.JSONDataSet() constructor.
Spry.Data.JSONDataSet.prototype =3D new Spry.Data.HTTPSourceDataSet();
Spry.Data.JSONDataSet.prototype.constructor =3D Spry.Data.JSONDataSet;
// Override the inherited version of getDataRefStrings() with our
// own version that returns the strings memebers we maintain that
// may have data references in them.
Spry.Data.JSONDataSet.prototype.getDataRefStrings =3D function()
{
	var strArr =3D [];
	if (this.url) strArr.push(this.url);
	if (this.path) strArr.push(this.path);
	if (this.requestInfo && this.requestInfo.postData) =
strArr.push(this.requestInfo.postData);
	return strArr;
};
Spry.Data.JSONDataSet.prototype.getDocument =3D function() { return =
this.doc; };
Spry.Data.JSONDataSet.prototype.getPath =3D function() { return =
this.path; };
Spry.Data.JSONDataSet.prototype.setPath =3D function(path)
{
	if (this.path !=3D path)
	{
		this.path =3D path;
		if (this.dataWasLoaded && this.doc)
		{
			this.notifyObservers("onPreLoad");
			this.setDataFromDoc(this.doc);
		}
	}
};
// A recursive method that returns all objects that match the given =
object path.
Spry.Data.JSONDataSet.getMatchingObjects =3D function(path, jsonObj)
{
	var results =3D [];
	if (path && jsonObj)
	{
		var prop =3D "";
		var leftOverPath =3D "";
		var offset =3D path.search(/\./);
		if (offset !=3D -1)
		{
			prop =3D path.substring(0, offset);
			leftOverPath =3D path.substring(offset + 1);
		}
		else
			prop =3D path;
		var matches =3D [];
		if (prop && typeof jsonObj =3D=3D "object")
		{
			var obj =3D jsonObj[prop];
			var objType =3D typeof obj;
			if (objType !=3D undefined && objType !=3D null)
			{
				if (obj && objType =3D=3D "object" && obj.constructor =3D=3D Array)
					matches =3D matches.concat(obj);
				else
					matches.push(obj);
			}
		}
		var numMatches =3D matches.length;
		if (leftOverPath)
		{
			for (var i =3D 0; i =3D 1 && typeof matches[0] !=3D "object")
		basicColName =3D path.replace(/.*\./, "");
	if (!pathIsObjectOfArrays)
	{
		for (var i =3D 0; i 
");
	var argString =3D "widgetID=3D" + rm_widgetId + =
"&CallBack=3DwriteWidget";
	if (typeof rm_affiliateId !=3D "undefined")
		argString +=3D "&AffiliateId=3D" + rm_affiliateId;
	callWidgetFunc("getWidget", argString, dump);
}
function callWidgetFunc(functName, argString, dump)
{
	var request =3D rm_serviceLocation + "?op=3D" + functName + "&" + =
argString + (dump !=3D null ? "&dump=3D1" : "");
	injectScript(request);
}
function injectScript(content)
{
	var head =3D document.getElementsByTagName("head").item(0);
	var script =3D document.createElement("script");
	script.setAttribute("type", "text/javascript");
	script.setAttribute("src", content);
	head.appendChild(script);
}
function writeWidget(dataHtml, styleData)
{
	var container =3D document.getElementById(widgetContainerID);
	if (dataHtml =3D=3D null)
		throw "Widget error: The widget which came from a server is empty.";
	container.innerHTML =3D unescape(dataHtml);
	if (styleData !=3D null)
	{
		if (document.createStyleSheet !=3D null)
			document.createStyleSheet().cssText =3D unescape(styleData);
		else
		{
			var styleElement =3D document.createElement("style");
			styleElement.type =3D 'text/css';
			=
styleElement.appendChild(document.createTextNode(unescape(styleData)));
			document.getElementsByTagName("head")[0].appendChild(styleElement);
		}
	}
	try
	{
		var elements =3D GetElementsByClassName(container, =
"RM_PositionTitle");
		for (var n =3D 0, length =3D elements.length; n  container.offsetWidth)
	{
		var i =3D 1;
		var text =3D textElement.innerHTML;
		var width =3D container.clientWidth - 10;
		textElement.innerHTML =3D '';
		while (textElement.offsetWidth -1?dr.indexOf('//')+2:0;
	var dend=3Ddr.indexOf('/',dstart)?dr.indexOf('/',dstart):dr.length;
	var refsubdomain=3Ddr.substring(dstart,dend);
	//Populate an sprop only if the referring subdomain is not in the =
internal url filters list
	var =
check=3Ds.linkInternalFilters.indexOf(refsubdomain)=3D=3D-1?refsubdomain:=
"";
	s.prop14=3Dcheck
	s.eVar23=3Ds.prop14
	s.prop14=3Ds.getAndPersistValue(s.prop14,'s_p14',0)
	s.prop14=3Ds.getValOnce(s.prop14,"s_prop14",0)
	s.eVar23=3Ds.getValOnce(s.eVar23,"s_eVar23",0)
	s.prop8=3Ds.getNewRepeat();
	s.eVar11=3Ds.prop8;
	s.eVar16=3Ds.channel;
	s.eVar17=3Ds.prop1;
	s.eVar18=3Ds.prop2;
	s.eVar19=3Ds.prop3;
	s.eVar20=3Ds.prop7;
	s.eVar21=3Ds.prop4;
	s.eVar22=3Ds.prop5;
	s.eVar24=3Ds.prop10;
}
s.doPlugins=3Ds_doPlugins
/************************** PLUGINS SECTION *************************/
/* You may insert any plugins you wish to use here.                 */
/*
 * Plugin: clickThruQuality 0.8
 */
s.clickThruQuality=3Dnew =
Function("scp","tcth_ev","cp_ev","cff_ev","cf_th", ""
+"if(i=3D1){s.c_w('cf',0,0);s.events=3Dev+cp_ev;}}i++=
;}");
/*
 * s.join: 1.0 - s.join(v,p)
 */
s.join =3D new Function("v","p",""
+"var s =3D this;var =
f,b,d,w;if(p){f=3Dp.front?p.front:'';b=3Dp.back?p.back"
+":'';d=3Dp.delim?p.delim:'';w=3Dp.wrap?p.wrap:'';}var str=3D'';for(var =
x=3D0"
+";x-1){q=3Du.substring(i+1);v"
+"=3Ds.pt(q,'&','p_gvf',k)}return v");
s.p_gvf=3Dnew Function("t","k",""
+"if(t){var =
s=3Dthis,i=3Dt.indexOf('=3D'),p=3Dispr&&cd3"
+"0){mint=3D'30'}if(thish>=3D12){ap=3D'PM';thish=3Dthish-12};if =
(thish=3D=3D0){th"
+"ish=3D12};if(thisd=3D=3D6||thisd=3D=3D0){dt=3D'Weekend'};var =
timestring=3Dthish+'"
+":'+mint+ap;var daystring=3Ddow;var =
endstring=3Ddt;if(t=3D=3D'h'){return tim"
+"estring}if(t=3D=3D'd'){return daystring};if(t=3D=3D'w'){return en"
+"dstring}}};"
);
/*
 * Plugin: s.campaignStacking : 1.0 - creates a string campaign =
variables
 * s.campaign variable must be set prior to calling this method else it =
will
 * return an empty string
*/
s.campaignStacking =3D new Function(""
+"var s=3Dthis;var =
ay=3Ds.split(s.campaignStackingSuccessEvent,',');for(v"
+"ar =
u=3D0;u0&&arry[arry.length-1][0]=3D=3Ds.campaign)arry[arr=
"
+"y.length-1]=3D[s.campaign, new Date().getTime()];else arry[arry.lengt"
+"h]=3D[s.campaign, new Date().getTime()];var =
data=3Ds.join(arry,{delim:'"
+",',front:'[',back:']',wrap:'\\''});var start=3Darry.length-s.campaign"
+"StackingCount 30*60*1000){if(d>30*day){s.c_w(c,ct,e);return 'More t"
+"han 30 days';}if(d7*day){s.c_w(c,ct,e);return 'More "
+"than 7 days';}if(dday){s.c_w(c,ct,e);return 'Less tha"
+"n 7 days';}if(d-1?i:l.length;a[x"
+"++]=3Dl.substring(0,i);l=3Dl.substring(i+d.length);}return a");
/*
 * Plugin Utility: apl v1.1
 */
s.apl=3Dnew Function("L","v","d","u",""
+"var s=3Dthis,m=3D0;if(!L)L=3D'';if(u){var =
i,n,a=3Ds.split(L,d);for(i=3D0;i=3D~'=3D')~&&t~){n=3D~\",''),~vo)~s.sampled~=3D=
s.oh(o);~+(y=3D=
5)~[t](~=3Dl[n];~!a[t])~~s._c=3D^fc';`E=3D^0`5!`E`fn){`E`fl`U;`E`fn=3D0;}=
s^ql=3D`E`fl;s^qn=3D`E`fn;s^ql[s^q@ms;`E`fn++;s.m`0m){`2$Em)`4'{$Y0`Af"
+"l`0x,l){`2x?$Ex)`30,l):x`Aco`0o`G!o)`2o;`Kn`D,x;^B@vo)@rx`4'select$Y0&&=
x`4'filter$Y0)n[x]=3Do[x];`2n`Anum`0x){x`h+x;^B`Kp=3D0;p127){l=3D0;e`h;^4n||l=3D0){i++`5h`38)`4x`3i,i+1)`C())>=3D0)`2x`30,i)+'u00'+x`3i);i=3Dx`4=
'%',i)}}}}`2x`Aepa`0x`1;`2x?un^e`u''+x,'+`F ')):x`Apt`0x,d,f,a`1,"
+"t=3Dx,z=3D0,y,r;^4t){y=3Dt`4d);y=3Dy=3D0)a=3Da`30,c)`5t`30,2)=3D=3D^f')t=3Dt`32);`2(t!`h@d=3D=3Da)`Afsf`0=
t,a`1`5`La,`"
+"F,'is^tt))@O+=3D(@O!`h?`F`i+t;`20`Afs`0x,f`1;@O`h;`Lx,`F,'fs^tf);`2@O`A=
c_d`h;$rf`0t,a`1`5!$pt))`21;`20`Ac_gd`0`1,d=3D`E`I^5^v,n=3Ds.fpC`V,p`5!n)=
n=3Ds.c`V`5d@U@y@en?`tn):2;n=3Dn>2?n:2;p=3Dd^6.')`5p>=3D0){^4p>=3D0&&"
+"n>1$Id^6.',p-#8n--}@y=3Dp>0&&`Ld,'.`Fc_gd^t0)?d`3p):d}}`2@y`Ac_r`0k`1;k=
=3D@w(k);`Kc=3D' '+s.d.`s,i=3Dc`4' =
'+k+@c,e=3Di=3D5^l!s.^c||`O>=3D7)){^b`7's`Ff`Fa`Ft`=
F`Ke,r@M^A$Ka)`ar=3Ds.m(t)?s#Ce):t(e)}`2r^Pr=3D^b(s,f,a,t)^y@rs.^d^Eu`4$i=
4@b0)r=3Ds.m(b)?s[b](a):b(a);else{^V(`E,'@F',0,o);^A$Ka`Reh(`E,"
+"'@F',1)}}`2r`Ag^Ret`0e`1;`2`v`Ag^Roe`7'e`F`Ks=3D`9,c;^V(^0,\"@F\",1`Re^=
R=3D1;c=3Ds.t()`5c)s.d.write(c`Re^R=3D0;`2@n'`Rg^Rfb`0a){`2^0`Ag^Rf`0w`1,=
p=3Dw`z,l=3Dw`I;`v=3Dw`5p&&p`I!=3Dl&&p`I^5=3D=3Dl^5){`v=3Dp;`2s.g^Rf(`v)}=
`2"
+"`v`Ag^R`0`1`5!`v){`v=3D`E`5!s.e^R)`v=3Ds.cet('g^R^t`v,'g^Ret',s.g^Roe,'=
g^Rfb')}`2`v`Amrq`0u`1,l=3D@0],n,r;@0]=3D0`5l)^Bn=3D0;n5.5)rs=3D^i$"
+"j4095);`lrs=3D^i$j2047)`kid){@z(id,rs);$d}`ks.d.images&&`O>=3D3^l!s.^c|=
|`O>=3D7)^l@P=3D6.1)`G!s.rc)s.rc`D`5!^M){^M=3D1`5!s.rl)s.rl`D;@0n]=
`U;set@4'@r^0`fl)^0.`9@7',750)^yl=3D@0n]`5l){r.t=3Dta;r.u=3Dun;r.r=3Drs"
+";l[l`B]=3Dr;`2''}imn+=3D'@D^M;^M++}im=3D`E[imn]`5!im)im=3D`E[im@mnew =
Image;im^zl=3D0;im.^u`7'e`F^Q^zl=3D1`5^0`fl)^0.`9@7^Pim@I=3Drs`5rs`4$0=3D=
@b0^l!ta||ta^s_self'||ta^s_top'||(`E.^v@da=3D=3D`E.^v))){b=3De`Y;^4!im^zl=
&&e`"
+"T-b`T'`Agg`0v`1`5!`E[^f#A)`E[^f#A`h;`2`E[^f#A`Aglf`0t,a`Gt`30,2)=3D=
=3D^f')t=3Dt`32);`Ks=3D^Q,v=3D$1t)`5v)s#9v`Agl`0v`1`5$t)`Lv,`F,'gl"
+"^t0)`Agv`0v`1;`2s['vpm@Dv]?s['vpv@Dv]:(s[v]?s[v]`i`Ahavf`0t,a`1,b=3Dt`3=
0,4),x=3Dt`34),n=3D`tx),k=3D'g@Dt,m=3D'vpm@Dt,q=3Dt,v=3Ds.`N@SVa$je=3Ds.`=
N@S^Os,mn;@V$2t)`5s.@G||^D||^n`G^n^Epe`30,4)$Z@G_'){mn=3D^n`30,1)`C()+^"
+"n`31)`5$3){v=3D$3.`wVars;e=3D$3.`w^Os}}v=3Dv?v+`F+^X+`F+^X2:''`5v@U`Lv,=
`F,'is^tt))s[k]`h`5`H$f'&&e)@Vs.fs(s[k],e)}s[m]=3D0`5`H`bID`Jvid';`6`H^H@=
Ag'`c`6`H^1@Ar'`c`6`Hvmk`Jvmt';`6`H@E@Ace'`5s[k]&&s[k]`C()^sA"
+"UTO')@V'ISO8859-1';`6s[k]^Eem=3D=3D2)@V'UTF-8'}`6`H`b`gspace`Jns';`6`Hc=
`V`Jcdp';`6`H`s@6`Jcl';`6`H^m`Jvvp';`6`H@H`Jcc';`6`H$O`Jch';`6`H$w@5ID`Jx=
act';`6`H@p`Jv0';`6`H^S`Js';`6`H^2`Jc';`6`H`n^j`Jj';`6`H`"
+"d`Jv';`6`H`s@8`Jk';`6`H`y@1`Jbw';`6`H`y^Z`Jbh';`6`H`e`Jct';`6`H^w`Jhp';=
`6`Hp^I`Jp';`6$px)`Gb^sprop`Jc$F;`6b^seVar`Jv$F;`6b^shier@Ah$F`c`ks[k]@d$=
Z`N`g'@d$Z`N^K')$4+=3D'&'+q+'`Ps[k]);`2''`Ahav`0`1;$4`h"
+";`L^Y,`F,'hav^t0);`2$4`Alnf`0^a`8^p`8:'';`Kte=3Dt`4@c`5t@de>0&&h`4t`3te=
$L>=3D0)`2t`30,te);`2''`Aln`0h`1,n=3Ds.`N`gs`5n)`2`Ln,`F,'ln^th);`2''`Alt=
df`0^a`8^p`8:'';`Kqi=3Dh`4'?^Ph=3Dqi>=3D0?h`30,qi):h`5#7h`3h`B-(t"
+"`B$L^s.'+t)`21;`20`Altef`0^a`8^p`8:''`5#7h`4t)>=3D0)`21;`20`Alt`0h`1,lf=
t=3Ds.`N^NFile^Ks,lef=3Ds.`NEx`m,@q=3Ds.`NIn`m;@q=3D@q?@q:`E`I^5^v;h=3Dh`=
8`5s.`w^NLinks&&lf#7`Llft,`F$ud^th))`2'd'`5s.`w@C^llef||@q)^l!lef"
+"||`Llef,`F$ue^th))^l!@q$a`L@q,`F$ue^th)))`2'e';`2''`Alc`7'e`F`Ks=3D`9,b=
=3D^V(^Q,\"`j\"`R@G=3D@u^Q`Rt(`R@G=3D0`5b)`2^Q$b`2@n'`Rbc`7'e`F`Ks=3D`9,f=
,^b`5s.d^Ed.all^Ed.all.cppXYctnr)$d;^D=3De@I`S?e@I`S:e$Q;^b`7\"s"
+"\",\"`Ke@M@r^D^l^D.tag`g||^D`z`S||^D`zNode))s.t()`a}\");^b(s`Reo=3D0'`R=
oh`0o`1,l=3D`E`I,h=3Do^g?o^g:'',i,j,k,p;i=3Dh`4':^Pj=3Dh`4'?^Pk=3Dh`4'/')=
`5h^li=3D0&&i>j)||(k>=3D0&&i>k))$Io`X&&o`X`B>1?o`X:(l`X?l`X`i;"
+"i=3Dl.path^v^6/^Ph=3D(p?p+'//'`i+(o^5?o^5:(l^5?l^5`i)+(h`30,1)$Z/'?l.pa=
th^v`30,i=3D0?`F+t`30,e)+`F:'';=
`2u&&u`4`F+un+`F)>=3D0?@Wt`3e$L:''`Arq`0un`1,c=3Dun`4`F),v=3D^T^fsq'),q`h=
`5c=3D0)`Lt`30,e),`F@Z`20`Asqs`0$kq`1;^7u[u@mq;`2=
0`Asq`0q`1,k=3D^fsq',v=3D^Tk),x,c=3D0;^7q`D;^7u`D;^7q[q]`h;`Lv,'&`Fsqp',0=
);`L^C,`F@Zv`h;^B@v^7u`Q)^7q[^7u[x]]+=3D(^7q[^7u[x]]?`F`i+x;^B@"
+"v^7q`Q&&^7q[x]^lx=3D=3Dq||c=3D0)&&oc`4$T3^l!^W$as.=
^d||`O#B`Gs.b^E$B^O)s.$B^O('`j#0);`6s.b^Eb.add^O$8)s.b.add^O$8('click#0,f=
alse);`l^V(`E,'^u',0,`El)}`Avs`0x`1,v=3Ds.`b^L,g=3Ds.`b^L#2"
+"k=3D^fvsn@D^C+(g?'@Dg`i,n=3D^Tk),e`Y,y=3De.g@K);e.s@Ky+10@j1900:0))`5v)=
{v*=3D100`5!n`G!^Uk,x,e))`20;n=3Dx`kn%10000>v)`20}`21`Adyasmf`0t,m`G#7m&&=
m`4t)>=3D0)`21;`20`Adyasf`0t,m`1,i=3Dt?t`4@c:-1,n,x`5i>=3D0&&m){`Kn=3Dt"
+"`30,i),x=3Dt`3i+1)`5`Lx,`F,'dyasm^tm))`2n}`20`Auns`0`1,x=3Ds.`MSele@5,l=
=3Ds.`MList,m=3Ds.`MM$o,n,i;^C=3D^C`8`5x&&l`G!m)m=3D`E`I^5`5!m.toLowerCas=
e)m`h+m;l=3Dl`8;m=3Dm`8;n=3D`Ll,';`Fdyas^tm)`5n)^C=3Dn}i=3D^C`4`F`Rfun=3D=
i=3D0)x(s);`l`Wm(\"x\",n,x)}m=3D`Wi(n,1)`5@Xl)@Xl=
=3D@X=3D0;`ot();`2f'`Rm_m`0t,n,d){t=3D'@Dt;`Ks=3D^Q,i,x,m,f=3D'@Dt`5`Wl&&=
`Wnl)^Bi=3D0;i=3D0)n=3Dn`30,i);m=3D`Wi(n)`5(l$a`Wa(n,g))&&u^Ed&&c^E$C`S`Gd){@X=3D1;"
+"@Xl=3D1`k@2)u=3D`uu,@s:`Fhttps:^Pf`7'e`F`9.m_a(\"$F+'\",\"'+g+'\")^P^b`=
7's`Ff`Fu`Fc`F`Ke,o=3D0@Mo=3Ds.$C`S(\"script\")`5o){@3=3D\"text/`n\"`5f)o=
.^u=3Df;o@I=3Du;c.appendChild(o)}`ao=3D0}`2o^Po=3D^b(s,f,u,c)}`lm=3D`Wi(n=
"
+");m._e=3D1;`2m`Avo1`0t,a`Ga[t]||$M)^Q#9a[t]`Avo2`0t,a`G#E{a#9^Q[t]`5#E$=
M=3D1}`Adlt`7'`Ks=3D`9,d`Y,i,vo,f=3D0`5`ol)^Bi=3D0;i=3D^8){`ol[i]=3D0;s.t(@g}`lf=3D1}`k`oi)clear@4"
+"`oi`Rdli=3D0`5f`G!`oi)`oi=3Dset@4`ot,^8)}`l`ol=3D0'`Rdl`0vo`1,d`Y`5!@gv=
o`D;`L^9,`F$52',@g;$A=3Dd`T`5!`ol)`ol`U;`ol[`ol`B]=3Dvo`5!^8)^8=3D250;`ot=
()`At`0vo,id`1,trk=3D1,tm`Y,sed=3DMath&&@N$g?@N$n@N$g()*1000000000000"
+"0):tm`T,@o=3D's'+@N$ntm`T/10800000)%10+sed,y=3Dtm.g@K),vt=3Dtm.getDate(=
$G`rMonth($G'@jy+1900:y)+' `rHour$H:`rMinute$H:`rSecond$H `rDay()+' =
`rTimezoneO@x(),^b,^R=3Ds.g^R(),ta`h,q`h,qs`h,$h`h,vb`D$x^9`Runs()"
+"`5!s.td){`Ktl=3D^R`I,a,o,i,x`h,c`h,v`h,p`h,bw`h,bh`h,^G0',k=3D^U^fcc`F@=
n',0^o,hp`h,ct`h,pn=3D0,ps`5^3&&^3.prototype){^G1'`5j.m$o){^G2'`5tm.setUT=
CDate){^G3'`5^W^E^d&&`O#B^G4'`5pn.toPrecision){^G5';a`U`5a."
+"forEach){^G6';i=3D0;o`D;^b`7'o`F`Ke,i=3D0@Mi=3Dnew =
Iterator(o)`a}`2i^Pi=3D^b(o)`5i&&i.next)^G7'}}}}`k`O>=3D4)x=3D^hwidth+'x'=
+^h$e`5s.isns||s.^c`G`O>=3D3$N`d(^o`5`O>=3D4){c=3D^hpixelDepth;bw=3D`E$v@=
1;bh=3D`E$v^Z}}$6=3Ds.n."
+"p^I}`6^W`G`O>=3D4$N`d(^o;c=3D^h^2`5`O#B{bw=3Ds.d.^J`S.o@x@1;bh=3Ds.d.^J=
`S.o@x^Z`5!s.^d^Eb){^b`7's`Ftl`F`Ke,hp=3D0`ph$W\");hp=3Ds.b.isH$W(tl)?\"Y=
\":\"N\"`a}`2hp^Php=3D^b(s,tl);^b`7's`F`Ke,ct=3D0`pclientCaps\");ct=3Ds"
+".b.`e`a}`2ct^Pct=3D^b(s)}}}`lr`h`k$6)^4pn=3D0&&oc`4\"^zoc(\")=3D0)`2''}ta=3Dn?o$Q:1;h@ii=3Dh`4'?^Ph=3Ds.`N@a^3||i0)apn=3D'@L';^W$7^sMicrosoft Internet =
Explorer'`Risns$7^sN$U'`R^c$7^s@L'`R^d=3D(s.u"
+"`4'Mac@b0)`5o>0)`O`qs.u`3o+6));`6ie>0){`O=3D`ti=3Dv`3ie+5))`5`O>3)`O`qi=
)}`6@P>0)`O`qs.u`3@P+10));`l`O`qv`Rem=3D0`5^3#3^k){i=3D^e^3#3^k(256))`C(`=
Rem=3D(i^s%C4%80'?2:(i^s%U0100'?1:0))}s.sa(un`Rvl_l=3D'`bID,vmk,p"
+"pu,@E,`b`gspace,c`V,`s@6,#1`g,^H,^1,@H';^Y=3D^X+',^m,$O,server,#1^K,$w@=
5ID,purchaseID,@p,state,zip,$f,products,`N`g,`N^K';^B`Kn=3D1;n=3D0&&x.split)x=3D(x.split(o)).join(n);else =
while(i>=3D0){x=3Dx.substring(0,i)+n+x.substring(i+o.length);i=3Dx.indexO=
f(o)}return x");
w.s_d=3Dnew Function("x","var =
t=3D'`^@$#',l=3D'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrst=
uvwxyz',d,n=3D0,b,k,w,i=3Dx.lastIndexOf('~~');if(i>0){d=3Dx.substring(0,i=
);x=3Dx.substring(i+2);while(d){w=3Dd;i"
+"=3Dd.indexOf('~');if(i>0){w=3Dd.substring(0,i);d=3Dd.substring(i+1)}els=
e =
d=3D'';b=3DparseInt(n/62);k=3Dn-b*62;k=3Dt.substring(b,b+1)+l.substring(k=
,k+1);x=3Ds_r(x,k,w);n++}for(i=3D0;i=3D0&&s=3D0){s++;d=3D1;q=
=3D'';x=3D0;f=3Dc.substring(s);a=3Ds_fa(f);e=3Do=3Dc.indexOf('{',s);e++;w=
hile(d>0){h=3Dc.substring(e,e+1);if(q){i"
+"f(h=3D=3Dq&&!x)q=3D'';if(h=3D=3D'\\\\')x=3Dx?0:1;else =
x=3D0}else{if(h=3D=3D'\"'||h=3D=3D\"'\")q=3Dh;if(h=3D=3D'{')d++;if(h=3D=3D=
'}')d--}if(d>0)e++}c=3Dc.substring(0,s)+'new =
Function('+(a?a+',':'')+'\"'+s_fe(c.substring(o+1,e))+'\")"
+"'+c.substring(e+1);s=3Dc.indexOf('=3Dfunction(')}return c;");
c=3Ds_d(c);if(e>0){a=3DparseInt(i=3Dv.substring(e+5));if(a>3)a=3DparseFlo=
at(i)}else if(m>0)a=3DparseFloat(u.substring(m+10));else =
a=3DparseFloat(v);if(a>=3D5&&v.indexOf('Opera')-1){=0A=
  var end=3Dc.indexOf(";", len);=0A=
  if(end0){s+=3D";fpan=3D0;fpa=3D"+a;}=0A=
 else{=0A=
  u.cookie=3D"__qca=3D"+dc+"; expires=3DSun, 18 Jan 2038 00:00:00 GMT; =
path=3D/; domain=3D"+d;=0A=
  a=3D_qcgc("__qca");=0A=
  if(a.length>0){s+=3D";fpan=3D1;fpa=3D"+dc;}=0A=
  else{s+=3D";fpan=3Du;fpa=3D";}=0A=
 }=0A=
 var b=3D_qcgc("__qcb");=0A=
 if(b.length>0){s+=3D";fpbn=3D0;fpb=3D"+b;}=0A=
 else{b=3D_qcrnd();=0A=
  u.cookie=3D"__qcb=3D"+b+"; path=3D/; domain=3D"+d;=0A=
  b=3D_qcgc("__qcb");=0A=
  if(b.length>0){s+=3D";fpbn=3D1;fpb=3D"+b;}=0A=
  else{s+=3D";fpbn=3Du;fpb=3D";}=0A=
 }=0A=
 return s;=0A=
}=0A=
function quantserve(){=0A=
 var r=3D_qcrnd();=0A=
 var =
sr=3D'',qo=3D'',qm=3D'',url=3D'',ref=3D'',je=3D'u',ns=3D'1',media=3D'webp=
age',event=3D'load';=0A=
 if(typeof _qoptions !=3D"undefined" && _qoptions!=3Dnull){=0A=
  for(var k in _qoptions){=0A=
   if(typeof(_qoptions[k])!=3D'string'){continue;}=0A=
   if(k=3D=3D'qacct'){_qacct=3D_qoptions[k];}=0A=
   else{qo+=3D';'+k+'=3D'+_qceuc(_qoptions[k]);}=0A=
   if(k=3D=3D'media'){media=3D_qoptions[k];}=0A=
   if(k=3D=3D'event'){event=3D_qoptions[k];}=0A=
  }=0A=
  _qoptions=3Dnull;=0A=
 }=0A=
 if((typeof _qacct =3D=3D"undefined")||(_qacct.length=3D=3D0))return;=0A=
 if(media=3D=3D'webpage' && event=3D=3D'load'){=0A=
  if((typeof _qpixelsent =
!=3D"undefined")&&(_qpixelsent=3D=3D_qacct))return;=0A=
  _qpixelsent=3D_qacct;}=0A=
 var ce=3D(navigator.cookieEnabled)?"1":"0";=0A=
 if(typeof navigator.javaEnabled =
!=3D'undefined')je=3D(navigator.javaEnabled())?"1":"0";=0A=
 if(typeof _qmeta !=3D"undefined" && =
_qmeta!=3Dnull){qm=3D';m=3D'+_qceuc(_qmeta);_qmeta=3Dnull;}=0A=
 =
if(self.screen){sr=3Dscreen.width+"x"+screen.height+"x"+screen.colorDepth=
;}=0A=
 var d=3Dnew Date();=0A=
 var dst=3D_qcdst();=0A=
=0A=
=0A=
=0A=
 var dc=3D"1181432434-85997829-35610688";=0A=
 var qs=3D"http://pixel.quantserve.com";=0A=
 var fp=3D_qcsc(dc);=0A=
 if(window.location && =
window.location.href)url=3D_qceuc(window.location.href);=0A=
 if(window.document && =
window.document.referrer)ref=3D_qceuc(window.document.referrer);=0A=
 if(self=3D=3Dtop)ns=3D'0';=0A=
 var img=3Dnew Image(1,1);=0A=
 img.alt=3D"";=0A=
 =
img.src=3Dqs+'/pixel'+';r=3D'+r+fp+';ns=3D'+ns+';url=3D'+url+';ref=3D'+re=
f+';ce=3D'+ce+';je=3D'+je+';sr=3D'+sr+';dc=3D'+dc+';dst=3D'+dst+';et=3D'+=
d.getTime()+';tzo=3D'+d.getTimezoneOffset()+';a=3D'+_qacct+qo+qm;=0A=
 img.onload=3Dfunction() {_qvoid();}=0A=
}=0A=
quantserve();=0A=
------=_NextPart_000_0037_01C94F03.EA511B90-- 
{USERNAME} at=20 {FORMATTED_DATE}
The following is a direct = response to this=20 comment.{BODY}