From: Subject: The Dating Game Date: Sun, 16 Nov 2008 16:19:37 -0500 MIME-Version: 1.0 Content-Type: multipart/related; type="text/html"; boundary="----=_NextPart_000_0000_01C94807.1E876350" X-MimeOLE: Produced By Microsoft MimeOLE V6.00.2900.5579 This is a multi-part message in MIME format. ------=_NextPart_000_0000_01C94807.1E876350 Content-Type: text/html; charset="utf-8" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.rubinsteyn.com/hps/dating.html =EF=BB=BF The Dating Game
November 12, 2008

Tips for Solving the Dating Game
(or, a machine learning=20 primer)

The Problem

In the da= ting=20 game, you play the role of a matchmaker trying to satisfy a picky = dater.=20 Much like in real life, suitors (or suitresses) are reduced to a = real-valued=20 vector of n (=E2=89=A4 100) features. Each element of the = vector is in the=20 range [0..1] and corresponds to some characteristic of the=20 candidate. The picky dater (called "person" or P in the = above link)=20 judges the quality of each candidate based on an unknown weighting of = their=20 features. Each feature can be weighted positively or negatively (between = -1 and 1) and we are guaranteed that the = negative=20 feature weights will sum to -1 and the positive weights = will sum to=20 1. Additionally, we know that each weight will use no more = than 2=20 decimal places, which I'll ignore for the rest of this page.

Initially, you are given P's dating history in the form = of=20 m (=E2=89=88 20) feature vectors along with the score that = P=20 assigned to each vector. Formally, we can describe this as:

		w =
=E2=88=88 [-1..1]n (P's weight vector of length n)
	=09
		=E2=88=80wi < 0 : =E2=88=91wi  =3D =
-1
		=E2=88=80wj > 0 : =E2=88=91wj  =3D =
1
	=09
		dating history =3D { xk, yk | 1 =E2=89=A4 k =
=E2=89=A4 m }=20

Your job is to generate an ideal match for P, which = we'll call=20 x*, such that wT =C2=B7 = x* =3D=20 1. To do this, you will probably want to figure out the weighting = function by which your candidates are being judged. If we approximate=20 w using only the dating history we are first given, we are = doing a=20 type of function estimation called linear = regression.=20 Additionally, every candidate you submit (paired with the score you get = back)=20 can be used as evidence to refine your estimate of w. This = puts us=20 in an interesting machine = learning=20 setting called a= ctive=20 learning (an area of current research). Since I don't know of any = canonical=20 techniques for active=20 learning, I'll leave that part to you. Instead, I'll focus on the = easier=20 problem: given some data, how do we derive the best linear model (ie, = the=20 optimal estimate of w).

Loss and Optimization (the story of life?)

To find our optimal w (which we'll call=20 w* from now on), we need to pick a learning = algorithm.=20 Most machine learning algorithms boil down to different definitions of = the=20 following two concepts:

  • The Cost Function: Denoted C(w), is = the=20 function that tells us how undesirable a particular weight vector is. = The cost=20 function consists of two parts:=20
    1. The Loss Function L(w) computes how well = the=20 weights predict the data we already have.=20
    2. The Regularization Term R(w) imposes some=20 assumptions on what w should look like in order to = improve=20 performance on unseen data. Regularization terms are optional, but = often=20 helpful.
  • The Optimization Method: Given a risk function, = how do we=20 go about finding the weights which result in minimum risk.

In summary, to say that we have a "learning algorithm" means we have = defined

	C(w) =3D L(w) + R(w)=09
	optimize :: (sample data X, sample labels Y, cost function C) =E2=86=92 =
best parameters

Ordinary Least Squares

The simplest cost function worth talking about is called mean squared = error=20 (MSE). MSE ignores regularization and thus consists of just a loss = function: the=20 average squared difference between the value our estimate of = w=20 gives to each candidate and the value we know to be correct.

	=
C(w) =3D (1/m) * =E2=88=91(xiT=C2=B7w - =
yi)2
=09
	or in matrix form, where the rows of X are xi and Y is a =
column vector
=09
	C(w) =3D (1/m) * (Xw - Y)T(Xw - Y)

Minimizing MSE for a linear system (of the form Y =3D = X=C2=B7w) gives=20 us Ordinary = Least=20 Squares (OLS) linear regression.
OLS regression is appealing = because=20 it's arguably the simplest sort of optimization we can imagine doing. We = don't=20 have to differentiate anything and there's no iterative update process. = Just a=20 little bit of term shuffling and we'll have a solution.
First, let's = assume=20 we have this desired w* in hand. Let's further = assume=20 that it's a perfect fit, resulting in no error.

	X =E2=88=88 =
Rm =C3=97 n	(previous candidates)
	Y =E2=88=88 Rm =C3=97 1	(scores of =
previous candidates)
	w =E2=88=88 Rn =C3=97 1	(picky dater's =
weights)
=09
	Xw* =3D Y
	XTXw* =3D XTY 	(multiply both =
sides by XT)
	w* =3D (XTX)-1XTY	=
(multiply both sides by (XTX)-1)

By algebraic magic, we now know how to calculate = w*.=20 OK, good job guys. Can we go home? Well, not so fast. There's a few = things worth=20 noting here:

  1. The OLS derivation relies on taking a matrix inverse. Most = languages don't=20 come with built in linear algebra routines so you'll have to find an=20 appropriate library. If you don't want to use such a library, you'll = need to=20 use a different optimization technique.=20
  2. The MSE cost function doesn't take into account any of the = constraints we=20 know the weight vector must obey. Perhaps a different cost function = might=20 perform better.=20
  3. In the presence of noise (which we luckily don't have in the = Dating Game)=20 or with an underconstrained linear system (which we probably will = have) OLS=20 can suffer from overfitting, = meaning it=20 will give you no error on the candidates you've seen but might perform = terribly on an new candidate. A regularization term could help improve = performance.

Changing the Optimization Algorithm

If we want to keep the same cost function (mean squared error) but = ditch the=20 matrices we can instead use gradient descent. The idea here is that at = every=20 value of w we choose, we can calculate the gradient of the = loss=20 function and then move down the gradient towards the minimum. To do this = we, of=20 course, have to actually figure out what the gradient looks like. To = make the=20 math a little easier, let's drop the 1/m from in front of = C(w) and=20 replace it with a 1/2. Since constants won't affect the = location of=20 a minimum, this is kosher.

	C(w) =3D 1/2 * =
=E2=88=91(xiT=C2=B7w - yi)2
	=E2=88=87C =3D  =E2=88=91=E2=88=87Ci
	=E2=88=87Ci =3D (xiT=C2=B7w - =
yi)xi

Now that we know how to calculate the gradient, we can initialize the = weight=20 vector w0 to some random value and proceed to=20 iteratively refine that value.

	Until some stopping condition=20
		Gt =3D vector of length n, initialized to all 0s
		foreach candidate c
			dotprod =3D =E2=88=91i xc,i*wt,i
			diff =3D dotprod - yc
			foreach gradient index i
				Gt,i =3D  Gt,i + diff * xc,i
		foreach weight index i
			wt+1,i =3D wt,i - =CE=B7*Gt,i

The two key decisions to make with the above algorithm are the = stopping=20 criterion and the learning rate (denoted =CE=B7).=20

  • Stopping Criterion: You can choose to stop either = at a=20 sufficiently small error or when the magnitude of your updates to=20 w starts to vanish.=20
  • Learning Rate: The learning rate ought to be a = small=20 value (somewhere between 0.00001 and 0.1) which is often determined = using cross = validation.=20 Specifically, Leave One Out Cross Validation (described below) is best = for=20 small samples such as ours.

The above gradient descent method is called "batch learning" since it = aggregates the gradients from each candidate before updating the = weights. A=20 variant called "stochastic gradient descent" or "online learning" = updates the=20 weight vector using the individual gradient from each candidate. = Stochastic=20 gradient descent is often preferable for large samples and/or = complicated cost=20 surfaces. Since in the Dating Game we have neither, I can't see a reason = to use=20 the stochastic variant over the batch algorithm. For a more thorough = explanation=20 of gradient descent (both batch and stochastic), see this page on Linea= r Neural=20 Networks.

Leave One Out Cross Validation

Here's a very simple algorithm for choosing the best learning rate = (=CE=B7) to use=20 with gradient descent.

	bestCost =3D =E2=88=9E
	bestEta =3D 0
	foreach =CE=B7 in eta_range
		currCost =3D 0
		foreach candidate i
			wi =3D train(X without xi, Y without =
yi)
			currCost =3D currCost + C(wi)
		if currCost < bestCost then=20
			bestLoss =3D currCost
			bestEta =3D =CE=B7

Adding a Regularization Term

When trying to solve for parameters in an underconstrained or noisy = system a=20 smart thing to do is regula= rization.=20 Regularization imposes some soft constraints on your weight vector, it = lets you=20 express an assumption about what a good solution should look like. = Actually,=20 even with sufficient data, regularization turns out (for reasons = too=20 complicated = to=20 discuss here) to be beneficial.

A common regularized form of linear regression is ridge = regression, which=20 uses the cost function:

	C(w) =3D  =
=E2=88=91(xiT=C2=B7w - yi)2 =
+ =CE=B1=E2=88=91wj2
You'll notice that the first term (the loss) is the same loss = function we=20 used in OLS regression. The regularization term (on the right) penalizes = the=20 norm of w and thus guides the algorithm to prefer smaller = weights.=20 In practice, this works quite well. The choice of a regularization term = may seem=20 arbitrary, but ridge regression can actually be derived from some = simple=20 probabilistic assumptions. (derivation care of Sergey Feldman).

A Note on Support Vector Machines

Support vector machines have been something of = a=20 machine learning wunderkind for 10 or so years (ie, you might have heard = of=20 them). At first, they seem very intimidating and complicated. You might = be=20 relieved to discover that for linear systems (like the one we're dealing = with in=20 the dating game) SVMs are nothing more than the combination of a smart = loss=20 function (hinge=20 loss), the same regularization term we use for ridge regression, and = a quick=20 optimization method (SMO). That's = it. In=20 their usual form, however, an SVM wouldn't be a good fit for the Dating = Game.=20 SVMs generate classifiers which label each candiate as +1 = or=20 -1. Since we're dealing with continuous values of=20 yi, a classifier wouldn't do us much good. You=20 can do regression with an SVM variant, but it's definitely = overkill for=20 the Dating Game.=20

More Info

  • Generalization, Overfitting, and Regularization: http://dis.unal.edu.co/~fgonza/courses/2007-I/ml/regularization.pdf=20
  • Cross validation: http://www.autonl= ab.org/tutorials/overfit.html=20
  • Estimating linear models with gradient descent: http://www.autonla= b.org/tutorials/neural.html=20
  • Introductoin to regression: http://www.auton= lab.org/tutorials/introreg.html=20
=0A= _uacct =3D "UA-2263714-1";=0A= urchinTracker();=0A=
------=_NextPart_000_0000_01C94807.1E876350 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Content-Location: http://www.rubinsteyn.com/css/writing.css .comment { COLOR: green } .cpp { COLOR: blue; FONT-FAMILY: monospace; WHITE-SPACE: pre } .panang { COLOR: #422; FONT-FAMILY: monospace; WHITE-SPACE: pre } .haskell { COLOR: chocolate; FONT-FAMILY: monospace; WHITE-SPACE: pre } #container { BORDER-RIGHT: #666 1px solid; PADDING-RIGHT: 3em; BORDER-TOP: #666 1px = solid; PADDING-LEFT: 3em; PADDING-BOTTOM: 3em; MARGIN: 2em auto; = BORDER-LEFT: #666 1px solid; WIDTH: 54em; PADDING-TOP: 3em; = BORDER-BOTTOM: #666 1px solid; POSITION: relative; BACKGROUND-COLOR: = white } BODY { BACKGROUND-COLOR: #ccc } .right { PADDING-RIGHT: 0.5em; PADDING-LEFT: 0.5em; FONT-SIZE: 1.2em; RIGHT: = 0em; PADDING-BOTTOM: 0.5em; BORDER-LEFT: #666 1px solid; PADDING-TOP: = 0.5em; BORDER-BOTTOM: #666 1px solid; POSITION: absolute; TOP: 0em; = BACKGROUND-COLOR: #eee } .left { DISPLAY: none; FONT-SIZE: 0.95em; LEFT: 3em; COLOR: #555; FONT-STYLE: = italic; POSITION: absolute; TOP: 1em } H1 { MARGIN-TOP: 1.3em } CODE { FONT-SIZE: 1.2em } PRE { FONT-SIZE: 1.2em } P { MARGIN-TOP: 0em; WIDTH: 90% } H2 { MARGIN-BOTTOM: 0.2em } SUP { FONT-SIZE: 0.8em } P SUP { VERTICAL-ALIGN: top } OL { MARGIN-TOP: 0.4em; MARGIN-BOTTOM: 0.4em } ------=_NextPart_000_0000_01C94807.1E876350 Content-Type: text/css; charset="iso-8859-1" Content-Transfer-Encoding: 7bit Content-Location: http://www.rubinsteyn.com/css/iefix.css #main { MARGIN-TOP: 0px; PADDING-TOP: 1em } ------=_NextPart_000_0000_01C94807.1E876350 Content-Type: application/octet-stream Content-Transfer-Encoding: quoted-printable Content-Location: http://www.google-analytics.com/urchin.js //-- Google Analytics Urchin Module=0A= //-- Copyright 2007 Google, All Rights Reserved.=0A= =0A= //-- Urchin On Demand Settings ONLY=0A= var _uacct=3D""; // set up the Urchin Account=0A= var _userv=3D1; // service mode (0=3Dlocal,1=3Dremote,2=3Dboth)=0A= =0A= //-- UTM User Settings=0A= var _ufsc=3D1; // set client info flag (1=3Don|0=3Doff)=0A= var _udn=3D"auto"; // (auto|none|domain) set the domain name for cookies=0A= var _uhash=3D"on"; // (on|off) unique domain hash for cookies=0A= var _utimeout=3D"1800"; // set the inactive session timeout in seconds=0A= var _ugifpath=3D"/__utm.gif"; // set the web path to the __utm.gif file=0A= var _utsp=3D"|"; // transaction field separator=0A= var _uflash=3D1; // set flash version detect option (1=3Don|0=3Doff)=0A= var _utitle=3D1; // set the document title detect option = (1=3Don|0=3Doff)=0A= var _ulink=3D0; // enable linker functionality (1=3Don|0=3Doff)=0A= var _uanchor=3D0; // enable use of anchors for campaign = (1=3Don|0=3Doff)=0A= var _utcp=3D"/"; // the cookie path for tracking=0A= var _usample=3D100; // The sampling % of visitors to track (1-100).=0A= =0A= //-- UTM Campaign Tracking Settings=0A= var _uctm=3D1; // set campaign tracking module (1=3Don|0=3Doff)=0A= var _ucto=3D"15768000"; // set timeout in seconds (6 month default)=0A= var _uccn=3D"utm_campaign"; // name=0A= var _ucmd=3D"utm_medium"; // medium (cpc|cpm|link|email|organic)=0A= var _ucsr=3D"utm_source"; // source=0A= var _uctr=3D"utm_term"; // term/keyword=0A= var _ucct=3D"utm_content"; // content=0A= var _ucid=3D"utm_id"; // id number=0A= var _ucno=3D"utm_nooverride"; // don't override=0A= =0A= //-- Auto/Organic Sources and Keywords=0A= var _uOsr=3Dnew Array();=0A= var _uOkw=3Dnew Array();=0A= _uOsr[0]=3D"google"; _uOkw[0]=3D"q";=0A= _uOsr[1]=3D"yahoo"; _uOkw[1]=3D"p";=0A= _uOsr[2]=3D"msn"; _uOkw[2]=3D"q";=0A= _uOsr[3]=3D"aol"; _uOkw[3]=3D"query";=0A= _uOsr[4]=3D"aol"; _uOkw[4]=3D"encquery";=0A= _uOsr[5]=3D"lycos"; _uOkw[5]=3D"query";=0A= _uOsr[6]=3D"ask"; _uOkw[6]=3D"q";=0A= _uOsr[7]=3D"altavista"; _uOkw[7]=3D"q";=0A= _uOsr[8]=3D"netscape"; _uOkw[8]=3D"query";=0A= _uOsr[9]=3D"cnn"; _uOkw[9]=3D"query";=0A= _uOsr[10]=3D"looksmart"; _uOkw[10]=3D"qt";=0A= _uOsr[11]=3D"about"; _uOkw[11]=3D"terms";=0A= _uOsr[12]=3D"mamma"; _uOkw[12]=3D"query";=0A= _uOsr[13]=3D"alltheweb"; _uOkw[13]=3D"q";=0A= _uOsr[14]=3D"gigablast"; _uOkw[14]=3D"q";=0A= _uOsr[15]=3D"voila"; _uOkw[15]=3D"rdata";=0A= _uOsr[16]=3D"virgilio"; _uOkw[16]=3D"qs";=0A= _uOsr[17]=3D"live"; _uOkw[17]=3D"q";=0A= _uOsr[18]=3D"baidu"; _uOkw[18]=3D"wd";=0A= _uOsr[19]=3D"alice"; _uOkw[19]=3D"qs";=0A= _uOsr[20]=3D"yandex"; _uOkw[20]=3D"text";=0A= _uOsr[21]=3D"najdi"; _uOkw[21]=3D"q";=0A= _uOsr[22]=3D"aol"; _uOkw[22]=3D"q";=0A= _uOsr[23]=3D"club-internet"; _uOkw[23]=3D"query";=0A= _uOsr[24]=3D"mama"; _uOkw[24]=3D"query";=0A= _uOsr[25]=3D"seznam"; _uOkw[25]=3D"q";=0A= _uOsr[26]=3D"search"; _uOkw[26]=3D"q";=0A= _uOsr[27]=3D"wp"; _uOkw[27]=3D"szukaj";=0A= _uOsr[28]=3D"onet"; _uOkw[28]=3D"qt";=0A= _uOsr[29]=3D"netsprint"; _uOkw[29]=3D"q";=0A= _uOsr[30]=3D"google.interia"; _uOkw[30]=3D"q";=0A= _uOsr[31]=3D"szukacz"; _uOkw[31]=3D"q";=0A= _uOsr[32]=3D"yam"; _uOkw[32]=3D"k";=0A= _uOsr[33]=3D"pchome"; _uOkw[33]=3D"q";=0A= _uOsr[34]=3D"kvasir"; _uOkw[34]=3D"searchExpr";=0A= _uOsr[35]=3D"sesam"; _uOkw[35]=3D"q";=0A= _uOsr[36]=3D"ozu"; _uOkw[36]=3D"q";=0A= _uOsr[37]=3D"terra"; _uOkw[37]=3D"query";=0A= _uOsr[38]=3D"nostrum"; _uOkw[38]=3D"query";=0A= _uOsr[39]=3D"mynet"; _uOkw[39]=3D"q";=0A= _uOsr[40]=3D"ekolay"; _uOkw[40]=3D"q";=0A= _uOsr[41]=3D"search.ilse"; _uOkw[41]=3D"search_for";=0A= =0A= //-- Auto/Organic Keywords to Ignore=0A= var _uOno=3Dnew Array();=0A= //_uOno[0]=3D"urchin";=0A= //_uOno[1]=3D"urchin.com";=0A= //_uOno[2]=3D"www.urchin.com";=0A= =0A= //-- Referral domains to Ignore=0A= var _uRno=3Dnew Array();=0A= //_uRno[0]=3D".urchin.com";=0A= =0A= //-- **** Don't modify below this point ***=0A= var = _uff,_udh,_udt,_ubl=3D0,_udo=3D"",_uu,_ufns=3D0,_uns=3D0,_ur=3D"-",_ufno=3D= 0,_ust=3D0,_ubd=3Ddocument,_udl=3D_ubd.location,_udlh=3D"",_uwv=3D"1.3";=0A= var _ugifpath2=3D"http://www.google-analytics.com/__utm.gif";=0A= if (_udl.hash) _udlh=3D_udl.href.substring(_udl.href.indexOf('#'));=0A= if (_udl.protocol=3D=3D"https:") = _ugifpath2=3D"https://ssl.google-analytics.com/__utm.gif";=0A= if (!_utcp || _utcp=3D=3D"") _utcp=3D"/";=0A= function urchinTracker(page) {=0A= if (_udl.protocol=3D=3D"file:") return;=0A= if (_uff && (!page || page=3D=3D"")) return;=0A= var a,b,c,xx,v,z,k,x=3D"",s=3D"",f=3D0,nv=3D0;=0A= var nx=3D" expires=3D"+_uNx()+";";=0A= var dc=3D_ubd.cookie;=0A= _udh=3D_uDomain();=0A= if (!_uVG()) return;=0A= _uu=3DMath.round(Math.random()*2147483647);=0A= _udt=3Dnew Date();=0A= _ust=3DMath.round(_udt.getTime()/1000);=0A= a=3Ddc.indexOf("__utma=3D"+_udh+".");=0A= b=3Ddc.indexOf("__utmb=3D"+_udh);=0A= c=3Ddc.indexOf("__utmc=3D"+_udh);=0A= if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A= if (_utimeout && _utimeout!=3D"") {=0A= x=3Dnew Date(_udt.getTime()+(_utimeout*1000));=0A= x=3D" expires=3D"+x.toGMTString()+";";=0A= }=0A= if (_ulink) {=0A= if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A= s+=3D_udl.search;=0A= if(s && s!=3D"" && s.indexOf("__utma=3D")>=3D0) {=0A= if (!(_uIN(a=3D_uGC(s,"__utma=3D","&")))) a=3D"-";=0A= if (!(_uIN(b=3D_uGC(s,"__utmb=3D","&")))) b=3D"-";=0A= if (!(_uIN(c=3D_uGC(s,"__utmc=3D","&")))) c=3D"-";=0A= v=3D_uGC(s,"__utmv=3D","&");=0A= z=3D_uGC(s,"__utmz=3D","&");=0A= k=3D_uGC(s,"__utmk=3D","&");=0A= xx=3D_uGC(s,"__utmx=3D","&");=0A= if ((k*1) !=3D ((_uHash(a+b+c+xx+z+v)*1)+(_udh*1))) = {_ubl=3D1;a=3D"-";b=3D"-";c=3D"-";xx=3D"-";z=3D"-";v=3D"-";}=0A= if (a!=3D"-" && b!=3D"-" && c!=3D"-") f=3D1;=0A= else if(a!=3D"-") f=3D2;=0A= }=0A= }=0A= if(f=3D=3D1) {=0A= _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A= _ubd.cookie=3D"__utmb=3D"+b+"; path=3D"+_utcp+";"+x+_udo;=0A= _ubd.cookie=3D"__utmc=3D"+c+"; path=3D"+_utcp+";"+_udo;=0A= } else if (f=3D=3D2) {=0A= a=3D_uFixA(s,"&",_ust);=0A= _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A= _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A= _ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A= _ufns=3D1;=0A= } else if (a>=3D0 && b>=3D0 && c>=3D0) {=0A= b =3D _uGC(dc,"__utmb=3D"+_udh,";");=0A= b =3D ("-" =3D=3D b) ? _udh : b; =0A= _ubd.cookie=3D"__utmb=3D"+b+"; path=3D"+_utcp+";"+x+_udo;=0A= } else {=0A= if (a>=3D0) a=3D_uFixA(_ubd.cookie,";",_ust);=0A= else {=0A= a=3D_udh+"."+_uu+"."+_ust+"."+_ust+"."+_ust+".1";=0A= nv=3D1;=0A= }=0A= _ubd.cookie=3D"__utma=3D"+a+"; path=3D"+_utcp+";"+nx+_udo;=0A= _ubd.cookie=3D"__utmb=3D"+_udh+"; path=3D"+_utcp+";"+x+_udo;=0A= _ubd.cookie=3D"__utmc=3D"+_udh+"; path=3D"+_utcp+";"+_udo;=0A= _ufns=3D1;=0A= }=0A= if (_ulink && xx && xx!=3D"" && xx!=3D"-") {=0A= xx=3D_uUES(xx);=0A= if (xx.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmx=3D"+xx+"; = path=3D"+_utcp+";"+nx+_udo;=0A= }=0A= if (_ulink && v && v!=3D"" && v!=3D"-") {=0A= v=3D_uUES(v);=0A= if (v.indexOf(";")=3D=3D-1) _ubd.cookie=3D"__utmv=3D"+v+"; = path=3D"+_utcp+";"+nx+_udo;=0A= }=0A= var wc=3Dwindow;=0A= var c=3D_ubd.cookie;=0A= if(wc && wc.gaGlobal && wc.gaGlobal.dh=3D=3D_udh){=0A= var g=3Dwc.gaGlobal;=0A= var ua=3Dc.split("__utma=3D"+_udh+".")[1].split(";")[0].split(".");=0A= if(g.sid)ua[3]=3Dg.sid;=0A= if(nv>0){=0A= ua[2]=3Dua[3];=0A= if(g.vid){=0A= var v=3Dg.vid.split(".");=0A= ua[0]=3Dv[0];=0A= ua[1]=3Dv[1];=0A= }=0A= }=0A= _ubd.cookie=3D"__utma=3D"+_udh+"."+ua.join(".")+"; = path=3D"+_utcp+";"+nx+_udo;=0A= }=0A= _uInfo(page);=0A= _ufns=3D0;=0A= _ufno=3D0;=0A= if (!page || page=3D=3D"") _uff=3D1;=0A= }=0A= function _uGH() {=0A= var hid;=0A= var wc=3Dwindow;=0A= if (wc && wc.gaGlobal && wc.gaGlobal.hid) {=0A= hid=3Dwc.gaGlobal.hid;=0A= } else {=0A= hid=3DMath.round(Math.random()*0x7fffffff);=0A= if (!wc.gaGlobal) wc.gaGlobal=3D{};=0A= wc.gaGlobal.hid=3Dhid;=0A= }=0A= return hid;=0A= }=0A= function _uInfo(page) {=0A= var p,s=3D"",dm=3D"",pg=3D_udl.pathname+_udl.search;=0A= if (page && page!=3D"") pg=3D_uES(page,1);=0A= _ur=3D_ubd.referrer;=0A= if (!_ur || _ur=3D=3D"") { _ur=3D"-"; }=0A= else {=0A= dm=3D_ubd.domain;=0A= if(_utcp && _utcp!=3D"/") dm+=3D_utcp;=0A= p=3D_ur.indexOf(dm);=0A= if ((p>=3D0) && (p<=3D8)) { _ur=3D"0"; }=0A= if (_ur.indexOf("[")=3D=3D0 && = _ur.lastIndexOf("]")=3D=3D(_ur.length-1)) { _ur=3D"-"; }=0A= }=0A= s+=3D"&utmn=3D"+_uu;=0A= if (_ufsc) s+=3D_uBInfo();=0A= if (_uctm) s+=3D_uCInfo();=0A= if (_utitle && _ubd.title && _ubd.title!=3D"") = s+=3D"&utmdt=3D"+_uES(_ubd.title);=0A= if (_udl.hostname && _udl.hostname!=3D"") = s+=3D"&utmhn=3D"+_uES(_udl.hostname);=0A= if (_usample && _usample !=3D 100) s+=3D"&utmsp=3D"+_uES(_usample);=0A= s+=3D"&utmhid=3D"+_uGH();=0A= s+=3D"&utmr=3D"+_ur;=0A= s+=3D"&utmp=3D"+pg;=0A= if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A= var i=3Dnew Image(1,1);=0A= i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A= i.onload=3Dfunction() { _uVoid(); }=0A= }=0A= if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A= var i2=3Dnew Image(1,1);=0A= = i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+= _uGCS();=0A= i2.onload=3Dfunction() { _uVoid(); }=0A= }=0A= return;=0A= }=0A= function _uVoid() { return; }=0A= function _uCInfo() {=0A= if (!_ucto || _ucto=3D=3D"") { _ucto=3D"15768000"; }=0A= if (!_uVG()) return;=0A= var = c=3D"",t=3D"-",t2=3D"-",t3=3D"-",o=3D0,cs=3D0,cn=3D0,i=3D0,z=3D"-",s=3D""= ;=0A= if (_uanchor && _udlh && _udlh!=3D"") s=3D_udlh+"&";=0A= s+=3D_udl.search;=0A= var x=3Dnew Date(_udt.getTime()+(_ucto*1000));=0A= var dc=3D_ubd.cookie;=0A= x=3D" expires=3D"+x.toGMTString()+";";=0A= if (_ulink && !_ubl) {=0A= z=3D_uUES(_uGC(s,"__utmz=3D","&"));=0A= if (z!=3D"-" && z.indexOf(";")=3D=3D-1) { = _ubd.cookie=3D"__utmz=3D"+z+"; path=3D"+_utcp+";"+x+_udo; return ""; }=0A= }=0A= z=3Ddc.indexOf("__utmz=3D"+_udh+".");=0A= if (z>-1) { z=3D_uGC(dc,"__utmz=3D"+_udh+".",";"); }=0A= else { z=3D"-"; }=0A= t=3D_uGC(s,_ucid+"=3D","&");=0A= t2=3D_uGC(s,_ucsr+"=3D","&");=0A= t3=3D_uGC(s,"gclid=3D","&");=0A= if ((t!=3D"-" && t!=3D"") || (t2!=3D"-" && t2!=3D"") || (t3!=3D"-" && = t3!=3D"")) {=0A= if (t!=3D"-" && t!=3D"") c+=3D"utmcid=3D"+_uEC(t);=0A= if (t2!=3D"-" && t2!=3D"") { if (c !=3D "") c+=3D"|"; = c+=3D"utmcsr=3D"+_uEC(t2); }=0A= if (t3!=3D"-" && t3!=3D"") { if (c !=3D "") c+=3D"|"; = c+=3D"utmgclid=3D"+_uEC(t3); }=0A= t=3D_uGC(s,_uccn+"=3D","&");=0A= if (t!=3D"-" && t!=3D"") c+=3D"|utmccn=3D"+_uEC(t);=0A= else c+=3D"|utmccn=3D(not+set)";=0A= t=3D_uGC(s,_ucmd+"=3D","&");=0A= if (t!=3D"-" && t!=3D"") c+=3D"|utmcmd=3D"+_uEC(t);=0A= else c+=3D"|utmcmd=3D(not+set)";=0A= t=3D_uGC(s,_uctr+"=3D","&");=0A= if (t!=3D"-" && t!=3D"") c+=3D"|utmctr=3D"+_uEC(t);=0A= else { t=3D_uOrg(1); if (t!=3D"-" && t!=3D"") = c+=3D"|utmctr=3D"+_uEC(t); }=0A= t=3D_uGC(s,_ucct+"=3D","&");=0A= if (t!=3D"-" && t!=3D"") c+=3D"|utmcct=3D"+_uEC(t);=0A= t=3D_uGC(s,_ucno+"=3D","&");=0A= if (t=3D=3D"1") o=3D1;=0A= if (z!=3D"-" && o=3D=3D1) return "";=0A= }=0A= if (c=3D=3D"-" || c=3D=3D"") { c=3D_uOrg(); if (z!=3D"-" && = _ufno=3D=3D1) return ""; }=0A= if (c=3D=3D"-" || c=3D=3D"") { if (_ufns=3D=3D1) c=3D_uRef(); if = (z!=3D"-" && _ufno=3D=3D1) return ""; }=0A= if (c=3D=3D"-" || c=3D=3D"") {=0A= if (z=3D=3D"-" && _ufns=3D=3D1) { = c=3D"utmccn=3D(direct)|utmcsr=3D(direct)|utmcmd=3D(none)"; }=0A= if (c=3D=3D"-" || c=3D=3D"") return "";=0A= }=0A= if (z!=3D"-") {=0A= i=3Dz.indexOf(".");=0A= if (i>-1) i=3Dz.indexOf(".",i+1);=0A= if (i>-1) i=3Dz.indexOf(".",i+1);=0A= if (i>-1) i=3Dz.indexOf(".",i+1);=0A= t=3Dz.substring(i+1,z.length);=0A= if (t.toLowerCase()=3D=3Dc.toLowerCase()) cs=3D1;=0A= t=3Dz.substring(0,i);=0A= if ((i=3Dt.lastIndexOf(".")) > -1) {=0A= t=3Dt.substring(i+1,t.length);=0A= cn=3D(t*1);=0A= }=0A= }=0A= if (cs=3D=3D0 || _ufns=3D=3D1) {=0A= t=3D_uGC(dc,"__utma=3D"+_udh+".",";");=0A= if ((i=3Dt.lastIndexOf(".")) > 9) {=0A= _uns=3Dt.substring(i+1,t.length);=0A= _uns=3D(_uns*1);=0A= }=0A= cn++;=0A= if (_uns=3D=3D0) _uns=3D1;=0A= _ubd.cookie=3D"__utmz=3D"+_udh+"."+_ust+"."+_uns+"."+cn+"."+c+"; = path=3D"+_utcp+"; "+x+_udo;=0A= }=0A= if (cs=3D=3D0 || _ufns=3D=3D1) return "&utmcn=3D1";=0A= else return "&utmcr=3D1";=0A= }=0A= function _uRef() {=0A= if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A= var i=3D0,h,k,n;=0A= if ((i=3D_ur.indexOf("://"))<0 || _uGCse()) return "";=0A= h=3D_ur.substring(i+3,_ur.length);=0A= if (h.indexOf("/") > -1) {=0A= k=3Dh.substring(h.indexOf("/"),h.length);=0A= if (k.indexOf("?") > -1) k=3Dk.substring(0,k.indexOf("?"));=0A= h=3Dh.substring(0,h.indexOf("/"));=0A= }=0A= h=3Dh.toLowerCase();=0A= n=3Dh;=0A= if ((i=3Dn.indexOf(":")) > -1) n=3Dn.substring(0,i);=0A= for (var ii=3D0;ii<_uRno.length;ii++) {=0A= if ((i=3Dn.indexOf(_uRno[ii].toLowerCase())) > -1 && = n.length=3D=3D(i+_uRno[ii].length)) { _ufno=3D1; break; }=0A= }=0A= if (h.indexOf("www.")=3D=3D0) h=3Dh.substring(4,h.length);=0A= return = "utmccn=3D(referral)|utmcsr=3D"+_uEC(h)+"|"+"utmcct=3D"+_uEC(k)+"|utmcmd=3D= referral";=0A= }=0A= function _uOrg(t) {=0A= if (_ur=3D=3D"0" || _ur=3D=3D"" || _ur=3D=3D"-") return "";=0A= var i=3D0,h,k;=0A= if ((i=3D_ur.indexOf("://"))<0 || _uGCse()) return "";=0A= h=3D_ur.substring(i+3,_ur.length);=0A= if (h.indexOf("/") > -1) {=0A= h=3Dh.substring(0,h.indexOf("/"));=0A= }=0A= for (var ii=3D0;ii<_uOsr.length;ii++) {=0A= if (h.toLowerCase().indexOf(_uOsr[ii].toLowerCase()) > -1) {=0A= if ((i=3D_ur.indexOf("?"+_uOkw[ii]+"=3D")) > -1 || = (i=3D_ur.indexOf("&"+_uOkw[ii]+"=3D")) > -1) {=0A= k=3D_ur.substring(i+_uOkw[ii].length+2,_ur.length);=0A= if ((i=3Dk.indexOf("&")) > -1) k=3Dk.substring(0,i);=0A= for (var yy=3D0;yy<_uOno.length;yy++) {=0A= if (_uOno[yy].toLowerCase()=3D=3Dk.toLowerCase()) { _ufno=3D1; = break; }=0A= }=0A= if (t) return _uEC(k);=0A= else return = "utmccn=3D(organic)|utmcsr=3D"+_uEC(_uOsr[ii])+"|"+"utmctr=3D"+_uEC(k)+"|= utmcmd=3Dorganic";=0A= }=0A= }=0A= }=0A= return "";=0A= }=0A= function _uGCse() {=0A= var h,p;=0A= h=3Dp=3D_ur.split("://")[1];=0A= if(h.indexOf("/")>-1) {=0A= h=3Dh.split("/")[0];=0A= p=3Dp.substring(p.indexOf("/")+1,p.length);=0A= }=0A= if(p.indexOf("?")>-1) {=0A= p=3Dp.split("?")[0];=0A= }=0A= if(h.toLowerCase().indexOf("google")>-1) {=0A= if(_ur.indexOf("?q=3D")>-1 || _ur.indexOf("&q=3D")>-1) {=0A= if (p.toLowerCase().indexOf("cse")>-1) {=0A= return true;=0A= }=0A= }=0A= }=0A= }=0A= function _uBInfo() {=0A= var sr=3D"-",sc=3D"-",ul=3D"-",fl=3D"-",cs=3D"-",je=3D1;=0A= var n=3Dnavigator;=0A= if (self.screen) {=0A= sr=3Dscreen.width+"x"+screen.height;=0A= sc=3Dscreen.colorDepth+"-bit";=0A= } else if (self.java) {=0A= var j=3Djava.awt.Toolkit.getDefaultToolkit();=0A= var s=3Dj.getScreenSize();=0A= sr=3Ds.width+"x"+s.height;=0A= }=0A= if (n.language) { ul=3Dn.language.toLowerCase(); }=0A= else if (n.browserLanguage) { ul=3Dn.browserLanguage.toLowerCase(); }=0A= je=3Dn.javaEnabled()?1:0;=0A= if (_uflash) fl=3D_uFlash();=0A= if (_ubd.characterSet) cs=3D_uES(_ubd.characterSet);=0A= else if (_ubd.charset) cs=3D_uES(_ubd.charset);=0A= return = "&utmcs=3D"+cs+"&utmsr=3D"+sr+"&utmsc=3D"+sc+"&utmul=3D"+ul+"&utmje=3D"+j= e+"&utmfl=3D"+fl;=0A= }=0A= function __utmSetTrans() {=0A= var e;=0A= if (_ubd.getElementById) e=3D_ubd.getElementById("utmtrans");=0A= else if (_ubd.utmform && _ubd.utmform.utmtrans) = e=3D_ubd.utmform.utmtrans;=0A= if (!e) return;=0A= var l=3De.value.split("UTM:");=0A= var i,i2,c;=0A= if (_userv=3D=3D0 || _userv=3D=3D2) i=3Dnew Array();=0A= if (_userv=3D=3D1 || _userv=3D=3D2) { i2=3Dnew Array(); c=3D_uGCS(); }=0A= =0A= for (var ii=3D0;ii-1) return;=0A= if (h) { url=3Dl+"#"+p; }=0A= else {=0A= if (iq=3D=3D-1 && ih=3D=3D-1) url=3Dl+"?"+p;=0A= else if (ih=3D=3D-1) url=3Dl+"&"+p;=0A= else if (iq=3D=3D-1) url=3Dl.substring(0,ih-1)+"?"+p+l.substring(ih);=0A= else url=3Dl.substring(0,ih-1)+"&"+p+l.substring(ih);=0A= }=0A= }=0A= return url;=0A= }=0A= function __utmLinker(l,h) {=0A= if (!_ulink || !l || l=3D=3D"") return;=0A= _udl.href=3D__utmLinkerUrl(l,h);=0A= }=0A= function __utmLinkPost(f,h) {=0A= if (!_ulink || !f || !f.action) return;=0A= f.action=3D__utmLinkerUrl(f.action, h);=0A= return;=0A= }=0A= function __utmSetVar(v) {=0A= if (!v || v=3D=3D"") return;=0A= if (!_udo || _udo =3D=3D "") {=0A= _udh=3D_uDomain();=0A= if (_udn && _udn!=3D"") { _udo=3D" domain=3D"+_udn+";"; }=0A= }=0A= if (!_uVG()) return;=0A= var r=3DMath.round(Math.random() * 2147483647);=0A= _ubd.cookie=3D"__utmv=3D"+_udh+"."+_uES(v)+"; path=3D"+_utcp+"; = expires=3D"+_uNx()+";"+_udo;=0A= var s=3D"&utmt=3Dvar&utmn=3D"+r;=0A= if (_usample && _usample !=3D 100) s+=3D"&utmsp=3D"+_uES(_usample);=0A= if ((_userv=3D=3D0 || _userv=3D=3D2) && _uSP()) {=0A= var i=3Dnew Image(1,1);=0A= i.src=3D_ugifpath+"?"+"utmwv=3D"+_uwv+s;=0A= i.onload=3Dfunction() { _uVoid(); }=0A= }=0A= if ((_userv=3D=3D1 || _userv=3D=3D2) && _uSP()) {=0A= var i2=3Dnew Image(1,1);=0A= = i2.src=3D_ugifpath2+"?"+"utmwv=3D"+_uwv+s+"&utmac=3D"+_uacct+"&utmcc=3D"+= _uGCS();=0A= i2.onload=3Dfunction() { _uVoid(); }=0A= }=0A= }=0A= function _uGCS() {=0A= var t,c=3D"",dc=3D_ubd.cookie;=0A= if ((t=3D_uGC(dc,"__utma=3D"+_udh+".",";"))!=3D"-") = c+=3D_uES("__utma=3D"+t+";+");=0A= if ((t=3D_uGC(dc,"__utmx=3D"+_udh,";"))!=3D"-") = c+=3D_uES("__utmx=3D"+t+";+");=0A= if ((t=3D_uGC(dc,"__utmz=3D"+_udh+".",";"))!=3D"-") = c+=3D_uES("__utmz=3D"+t+";+");=0A= if ((t=3D_uGC(dc,"__utmv=3D"+_udh+".",";"))!=3D"-") = c+=3D_uES("__utmv=3D"+t+";");=0A= if (c.charAt(c.length-1)=3D=3D"+") c=3Dc.substring(0,c.length-1);=0A= return c;=0A= }=0A= function _uGC(l,n,s) {=0A= if (!l || l=3D=3D"" || !n || n=3D=3D"" || !s || s=3D=3D"") return "-";=0A= var i,i2,i3,c=3D"-";=0A= i=3Dl.indexOf(n);=0A= i3=3Dn.indexOf("=3D")+1;=0A= if (i > -1) {=0A= i2=3Dl.indexOf(s,i); if (i2 < 0) { i2=3Dl.length; }=0A= c=3Dl.substring((i+i3),i2);=0A= }=0A= return c;=0A= }=0A= function _uDomain() {=0A= if (!_udn || _udn=3D=3D"" || _udn=3D=3D"none") { _udn=3D""; return 1; }=0A= if (_udn=3D=3D"auto") {=0A= var d=3D_ubd.domain;=0A= if (d.substring(0,4)=3D=3D"www.") {=0A= d=3Dd.substring(4,d.length);=0A= }=0A= _udn=3Dd;=0A= }=0A= _udn =3D _udn.toLowerCase(); =0A= if (_uhash=3D=3D"off") return 1;=0A= return _uHash(_udn);=0A= }=0A= function _uHash(d) {=0A= if (!d || d=3D=3D"") return 1;=0A= var h=3D0,g=3D0;=0A= for (var i=3Dd.length-1;i>=3D0;i--) {=0A= var c=3DparseInt(d.charCodeAt(i));=0A= h=3D((h << 6) & 0xfffffff) + c + (c << 14);=0A= if ((g=3Dh & 0xfe00000)!=3D0) h=3D(h ^ (g >> 21));=0A= }=0A= return h;=0A= }=0A= function _uFixA(c,s,t) {=0A= if (!c || c=3D=3D"" || !s || s=3D=3D"" || !t || t=3D=3D"") return "-";=0A= var a=3D_uGC(c,"__utma=3D"+_udh+".",s);=0A= var lt=3D0,i=3D0;=0A= if ((i=3Da.lastIndexOf(".")) > 9) {=0A= _uns=3Da.substring(i+1,a.length);=0A= _uns=3D(_uns*1)+1;=0A= a=3Da.substring(0,i);=0A= if ((i=3Da.lastIndexOf(".")) > 7) {=0A= lt=3Da.substring(i+1,a.length);=0A= a=3Da.substring(0,i);=0A= }=0A= if ((i=3Da.lastIndexOf(".")) > 5) {=0A= a=3Da.substring(0,i);=0A= }=0A= a+=3D"."+lt+"."+t+"."+_uns;=0A= }=0A= return a;=0A= }=0A= function _uTrim(s) {=0A= if (!s || s=3D=3D"") return "";=0A= while ((s.charAt(0)=3D=3D' ') || (s.charAt(0)=3D=3D'\n') || = (s.charAt(0,1)=3D=3D'\r')) s=3Ds.substring(1,s.length);=0A= while ((s.charAt(s.length-1)=3D=3D' ') || = (s.charAt(s.length-1)=3D=3D'\n') || (s.charAt(s.length-1)=3D=3D'\r')) = s=3Ds.substring(0,s.length-1);=0A= return s;=0A= }=0A= function _uEC(s) {=0A= var n=3D"";=0A= if (!s || s=3D=3D"") return "";=0A= for (var i=3D0;i0) r=3Da.substring(i+1,i2); else return = ""; =0A= if ((i=3Da.indexOf(".",i2+1))>0) t=3Da.substring(i2+1,i); else return = ""; =0A= if (f) {=0A= return r;=0A= } else {=0A= var c=3Dnew = Array('A','B','C','D','E','F','G','H','J','K','L','M','N','P','R','S','T'= ,'U','V','W','X','Y','Z','1','2','3','4','5','6','7','8','9');=0A= return = c[r>>28&m]+c[r>>23&m]+c[r>>18&m]+c[r>>13&m]+"-"+c[r>>8&m]+c[r>>3&m]+c[((r= &7)<<2)+(t>>30&3)]+c[t>>25&m]+c[t>>20&m]+"-"+c[t>>15&m]+c[t>>10&m]+c[t>>5= &m]+c[t&m];=0A= }=0A= }=0A= function _uIN(n) {=0A= if (!n) return false;=0A= for (var i=3D0;i"9") && (c!=3D".")) return false;=0A= }=0A= return true;=0A= }=0A= function _uES(s,u) {=0A= if (typeof(encodeURIComponent) =3D=3D 'function') {=0A= if (u) return encodeURI(s);=0A= else return encodeURIComponent(s);=0A= } else {=0A= return escape(s);=0A= }=0A= }=0A= function _uUES(s) {=0A= if (typeof(decodeURIComponent) =3D=3D 'function') {=0A= return decodeURIComponent(s);=0A= } else {=0A= return unescape(s);=0A= }=0A= }=0A= function _uVG() {=0A= if((_udn.indexOf("www.google.") =3D=3D 0 || _udn.indexOf(".google.") = =3D=3D 0 || _udn.indexOf("google.") =3D=3D 0) && _utcp=3D=3D'/' && = _udn.indexOf("google.org")=3D=3D-1) {=0A= return false;=0A= }=0A= return true;=0A= }=0A= function _uSP() {=0A= var s=3D100;=0A= if (_usample) s=3D_usample;=0A= if(s>=3D100 || s<=3D0) return true;=0A= return ((__utmVisitorCode(1)%10000)<(s*100));=0A= }=0A= function urchinPathCopy(p){=0A= var d=3Ddocument,nx,tx,sx,i,c,cs,t,h,o;=0A= cs=3Dnew Array("a","b","c","v","x","z");=0A= h=3D_uDomain(); if (_udn && _udn!=3D"") o=3D" domain=3D"+_udn+";";=0A= nx=3D_uNx()+";";=0A= tx=3Dnew Date(); tx.setTime(tx.getTime()+(_utimeout*1000));=0A= tx=3Dtx.toGMTString()+";";=0A= sx=3Dnew Date(); sx.setTime(sx.getTime()+(_ucto*1000));=0A= sx=3Dsx.toGMTString()+";";=0A= for (i=3D0;i<6;i++){=0A= t=3D" expires=3D";=0A= if (i=3D=3D1) t+=3Dtx; else if (i=3D=3D2) t=3D""; else if (i=3D=3D5) = t+=3Dsx; else t+=3Dnx;=0A= c=3D_uGC(d.cookie,"__utm"+cs[i]+"=3D"+h,";");=0A= if (c!=3D"-") d.cookie=3D"__utm"+cs[i]+"=3D"+c+"; path=3D"+p+";"+t+o;=0A= }=0A= }=0A= function _uCO() {=0A= if (!_utk || _utk=3D=3D"" || _utk.length<10) return;=0A= var d=3D'www.google.com';=0A= if (_utk.charAt(0)=3D=3D'!') d=3D'analytics.corp.google.com';=0A= _ubd.cookie=3D"GASO=3D"+_utk+"; path=3D"+_utcp+";"+_udo;=0A= var sc=3Ddocument.createElement('script');=0A= sc.type=3D'text/javascript';=0A= sc.id=3D"_gasojs";=0A= = sc.src=3D'https://'+d+'/analytics/reporting/overlay_js?gaso=3D'+_utk+'&'+= Math.random();=0A= document.getElementsByTagName('head')[0].appendChild(sc); =0A= }=0A= function _uGT() {=0A= var h=3Dlocation.hash, a;=0A= if (h && h!=3D"" && h.indexOf("#gaso=3D")=3D=3D0) {=0A= a=3D_uGC(h,"gaso=3D","&");=0A= } else {=0A= a=3D_uGC(_ubd.cookie,"GASO=3D",";");=0A= }=0A= return a;=0A= }=0A= var _utk=3D_uGT();=0A= if (_utk && _utk!=3D"" && _utk.length>10 && _utk.indexOf("=3D")=3D=3D-1) = {=0A= if (window.addEventListener) {=0A= window.addEventListener('load', _uCO, false); =0A= } else if (window.attachEvent) { =0A= window.attachEvent('onload', _uCO);=0A= }=0A= }=0A= =0A= function _uNx() {=0A= return (new Date((new Date()).getTime()+63072000000)).toGMTString();=0A= }=0A= ------=_NextPart_000_0000_01C94807.1E876350--