/*
 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
 *
 * Uses the built in easing capabilities added In jQuery 1.1
 * to offer multiple easing options
 *
 * TERMS OF USE - jQuery Easing
 * 
 * Open source under the BSD License. 
 * 
 * Copyright © 2008 George McGinley Smith
 * 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 the author nor the names of 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. 
 *
*/

// t: current time, b: begInnIng value, c: change In value, d: duration
jQuery.easing['jswing'] = jQuery.easing['swing'];

jQuery.extend( jQuery.easing,
{
	def: 'easeOutQuad',
	swing: function (x, t, b, c, d) {
		//alert(jQuery.easing.default);
		return jQuery.easing[jQuery.easing.def](x, t, b, c, d);
	},
	easeInQuad: function (x, t, b, c, d) {
		return c*(t/=d)*t + b;
	},
	easeOutQuad: function (x, t, b, c, d) {
		return -c *(t/=d)*(t-2) + b;
	},
	easeInOutQuad: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t + b;
		return -c/2 * ((--t)*(t-2) - 1) + b;
	},
	easeInCubic: function (x, t, b, c, d) {
		return c*(t/=d)*t*t + b;
	},
	easeOutCubic: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t + 1) + b;
	},
	easeInOutCubic: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t + b;
		return c/2*((t-=2)*t*t + 2) + b;
	},
	easeInQuart: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t + b;
	},
	easeOutQuart: function (x, t, b, c, d) {
		return -c * ((t=t/d-1)*t*t*t - 1) + b;
	},
	easeInOutQuart: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
		return -c/2 * ((t-=2)*t*t*t - 2) + b;
	},
	easeInQuint: function (x, t, b, c, d) {
		return c*(t/=d)*t*t*t*t + b;
	},
	easeOutQuint: function (x, t, b, c, d) {
		return c*((t=t/d-1)*t*t*t*t + 1) + b;
	},
	easeInOutQuint: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
		return c/2*((t-=2)*t*t*t*t + 2) + b;
	},
	easeInSine: function (x, t, b, c, d) {
		return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
	},
	easeOutSine: function (x, t, b, c, d) {
		return c * Math.sin(t/d * (Math.PI/2)) + b;
	},
	easeInOutSine: function (x, t, b, c, d) {
		return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
	},
	easeInExpo: function (x, t, b, c, d) {
		return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
	},
	easeOutExpo: function (x, t, b, c, d) {
		return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
	},
	easeInOutExpo: function (x, t, b, c, d) {
		if (t==0) return b;
		if (t==d) return b+c;
		if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
		return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
	},
	easeInCirc: function (x, t, b, c, d) {
		return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
	},
	easeOutCirc: function (x, t, b, c, d) {
		return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
	},
	easeInOutCirc: function (x, t, b, c, d) {
		if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
		return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
	},
	easeInElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
	},
	easeOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d)==1) return b+c;  if (!p) p=d*.3;
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
	},
	easeInOutElastic: function (x, t, b, c, d) {
		var s=1.70158;var p=0;var a=c;
		if (t==0) return b;  if ((t/=d/2)==2) return b+c;  if (!p) p=d*(.3*1.5);
		if (a < Math.abs(c)) { a=c; var s=p/4; }
		else var s = p/(2*Math.PI) * Math.asin (c/a);
		if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
		return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
	},
	easeInBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*(t/=d)*t*((s+1)*t - s) + b;
	},
	easeOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158;
		return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
	},
	easeInOutBack: function (x, t, b, c, d, s) {
		if (s == undefined) s = 1.70158; 
		if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
		return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
	},
	easeInBounce: function (x, t, b, c, d) {
		return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
	},
	easeOutBounce: function (x, t, b, c, d) {
		if ((t/=d) < (1/2.75)) {
			return c*(7.5625*t*t) + b;
		} else if (t < (2/2.75)) {
			return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
		} else if (t < (2.5/2.75)) {
			return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
		} else {
			return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
		}
	},
	easeInOutBounce: function (x, t, b, c, d) {
		if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
		return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
	}
});


(function($){$.fn.hoverIntent=function(f,g){var cfg={sensitivity:7,interval:100,timeout:0};cfg=$.extend(cfg,g?{over:f,out:g}:f);var cX,cY,pX,pY;var track=function(ev){cX=ev.pageX;cY=ev.pageY;};var compare=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);if((Math.abs(pX-cX)+Math.abs(pY-cY))<cfg.sensitivity){$(ob).unbind("mousemove",track);ob.hoverIntent_s=1;return cfg.over.apply(ob,[ev]);}else{pX=cX;pY=cY;ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}};var delay=function(ev,ob){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);ob.hoverIntent_s=0;return cfg.out.apply(ob,[ev]);};var handleHover=function(e){var p=(e.type=="mouseover"?e.fromElement:e.toElement)||e.relatedTarget;while(p&&p!=this){try{p=p.parentNode;}catch(e){p=this;}}if(p==this){return false;}var ev=jQuery.extend({},e);var ob=this;if(ob.hoverIntent_t){ob.hoverIntent_t=clearTimeout(ob.hoverIntent_t);}if(e.type=="mouseover"){pX=ev.pageX;pY=ev.pageY;$(ob).bind("mousemove",track);if(ob.hoverIntent_s!=1){ob.hoverIntent_t=setTimeout(function(){compare(ev,ob);},cfg.interval);}}else{$(ob).unbind("mousemove",track);if(ob.hoverIntent_s==1){ob.hoverIntent_t=setTimeout(function(){delay(ev,ob);},cfg.timeout);}}};return this.mouseover(handleHover).mouseout(handleHover);};})(jQuery);

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('3 u=z(){3 a=9(\'#p 7:a\');3 4=9(\'#p 7:4\');3 f=4.y(\'w\');3 8=9(\'7\'+f);3 e=8.5(\'x\').v();9(\'#t 7\').b(\'g\',\'-r\');8.b(\'g\',(s-e)/2);8.A(\'G\');a.B(4);k(i=1;i<h;i++){3 6="d.c"+i;4.5(6).5(\'l\').b({o:0.0})}3 n=D;3 m=1;3 6="d.c"+m;k(j=1;j<h;j++){4.5(6).5(\'l\').F({o:1.0},q.C(q.E()*n),"H");m++;6="d.c"+m}};',44,44,'|||var|first|children|inserts|li|ths|jQuery|last|css|frame|span|wdt|infos|left|31|||for|img|||opacity|slides|Math|690px|570|info|slideSwitch|width|rel|h1|attr|function|addClass|after|round|1700|random|animate|active|easeInBounce'.split('|'),0,{}))


/*!
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version ${Version}
 */


var Cufon = (function() {

	var api = function() {
		return api.replace.apply(null, arguments);
	};

	var DOM = api.DOM = {

		ready: (function() {

			var complete = false, readyStatus = { loaded: 1, complete: 1 };

			var queue = [], perform = function() {
				if (complete) return;
				complete = true;
				for (var fn; fn = queue.shift(); fn());
			};

			// Gecko, Opera, WebKit r26101+

			if (document.addEventListener) {
				document.addEventListener('DOMContentLoaded', perform, false);
				window.addEventListener('pageshow', perform, false); // For cached Gecko pages
			}

			// Old WebKit, Internet Explorer

			if (!window.opera && document.readyState) (function() {
				readyStatus[document.readyState] ? perform() : setTimeout(arguments.callee, 10);
			})();

			// Internet Explorer

			if (document.readyState && document.createStyleSheet) (function() {
				try {
					document.body.doScroll('left');
					perform();
				}
				catch (e) {
					setTimeout(arguments.callee, 1);
				}
			})();

			addEvent(window, 'load', perform); // Fallback

			return function(listener) {
				if (!arguments.length) perform();
				else complete ? listener() : queue.push(listener);
			};

		})(),

		root: function() {
			return document.documentElement || document.body;
		}

	};

	var CSS = api.CSS = {

		Size: function(value, base) {

			this.value = parseFloat(value);
			this.unit = String(value).match(/[a-z%]*$/)[0] || 'px';

			this.convert = function(value) {
				return value / base * this.value;
			};

			this.convertFrom = function(value) {
				return value / this.value * base;
			};

			this.toString = function() {
				return this.value + this.unit;
			};

		},

		addClass: function(el, className) {
			var current = el.className;
			el.className = current + (current && ' ') + className;
			return el;
		},

		color: cached(function(value) {
			var parsed = {};
			parsed.color = value.replace(/^rgba\((.*?),\s*([\d.]+)\)/, function($0, $1, $2) {
				parsed.opacity = parseFloat($2);
				return 'rgb(' + $1 + ')';
			});
			return parsed;
		}),

		// has no direct CSS equivalent.
		// @see http://msdn.microsoft.com/en-us/library/system.windows.fontstretches.aspx
		fontStretch: cached(function(value) {
			if (typeof value == 'number') return value;
			if (/%$/.test(value)) return parseFloat(value) / 100;
			return {
				'ultra-condensed': 0.5,
				'extra-condensed': 0.625,
				condensed: 0.75,
				'semi-condensed': 0.875,
				'semi-expanded': 1.125,
				expanded: 1.25,
				'extra-expanded': 1.5,
				'ultra-expanded': 2
			}[value] || 1;
		}),

		getStyle: function(el) {
			var view = document.defaultView;
			if (view && view.getComputedStyle) return new Style(view.getComputedStyle(el, null));
			if (el.currentStyle) return new Style(el.currentStyle);
			return new Style(el.style);
		},

		gradient: cached(function(value) {
			var gradient = {
				id: value,
				type: value.match(/^-([a-z]+)-gradient\(/)[1],
				stops: []
			}, colors = value.substr(value.indexOf('(')).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);
			for (var i = 0, l = colors.length, stop; i < l; ++i) {
				stop = colors[i].split('=', 2).reverse();
				gradient.stops.push([ stop[1] || i / (l - 1), stop[0] ]);
			}
			return gradient;
		}),

		quotedList: cached(function(value) {
			// doesn't work properly with empty quoted strings (""), but
			// it's not worth the extra code.
			var list = [], re = /\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g, match;
			while (match = re.exec(value)) list.push(match[3] || match[1]);
			return list;
		}),

		recognizesMedia: cached(function(media) {
			var el = document.createElement('style'), sheet, container, supported;
			el.type = 'text/css';
			el.media = media;
			try { // this is cached anyway
				el.appendChild(document.createTextNode('/**/'));
			} catch (e) {}
			container = elementsByTagName('head')[0];
			container.insertBefore(el, container.firstChild);
			sheet = (el.sheet || el.styleSheet);
			supported = sheet && !sheet.disabled;
			container.removeChild(el);
			return supported;
		}),

		removeClass: function(el, className) {
			var re = RegExp('(?:^|\\s+)' + className +  '(?=\\s|$)', 'g');
			el.className = el.className.replace(re, '');
			return el;
		},

		supports: function(property, value) {
			var checker = document.createElement('span').style;
			if (checker[property] === undefined) return false;
			checker[property] = value;
			return checker[property] === value;
		},

		textAlign: function(word, style, position, wordCount) {
			if (style.get('textAlign') == 'right') {
				if (position > 0) word = ' ' + word;
			}
			else if (position < wordCount - 1) word += ' ';
			return word;
		},

		textShadow: cached(function(value) {
			if (value == 'none') return null;
			var shadows = [], currentShadow = {}, result, offCount = 0;
			var re = /(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;
			while (result = re.exec(value)) {
				if (result[0] == ',') {
					shadows.push(currentShadow);
					currentShadow = {};
					offCount = 0;
				}
				else if (result[1]) {
					currentShadow.color = result[1];
				}
				else {
					currentShadow[[ 'offX', 'offY', 'blur' ][offCount++]] = result[2];
				}
			}
			shadows.push(currentShadow);
			return shadows;
		}),

		textTransform: (function() {
			var map = {
				uppercase: function(s) {
					return s.toUpperCase();
				},
				lowercase: function(s) {
					return s.toLowerCase();
				},
				capitalize: function(s) {
					return s.replace(/\b./g, function($0) {
						return $0.toUpperCase();
					});
				}
			};
			return function(text, style) {
				var transform = map[style.get('textTransform')];
				return transform ? transform(text) : text;
			};
		})(),

		whiteSpace: (function() {
			var ignore = {
				inline: 1,
				'inline-block': 1,
				'run-in': 1
			};
			var wsStart = /^\s+/, wsEnd = /\s+$/;
			return function(text, style, node, previousElement) {
				if (previousElement) {
					if (previousElement.nodeName.toLowerCase() == 'br') {
						text = text.replace(wsStart, '');
					}
				}
				if (ignore[style.get('display')]) return text;
				if (!node.previousSibling) text = text.replace(wsStart, '');
				if (!node.nextSibling) text = text.replace(wsEnd, '');
				return text;
			};
		})()

	};

	CSS.ready = (function() {

		// don't do anything in Safari 2 (it doesn't recognize any media type)
		var complete = !CSS.recognizesMedia('all'), hasLayout = false;

		var queue = [], perform = function() {
			complete = true;
			for (var fn; fn = queue.shift(); fn());
		};

		var links = elementsByTagName('link'), styles = elementsByTagName('style');

		function isContainerReady(el) {
			return el.disabled || isSheetReady(el.sheet, el.media || 'screen');
		}

		function isSheetReady(sheet, media) {
			// in Opera sheet.disabled is true when it's still loading,
			// even though link.disabled is false. they stay in sync if
			// set manually.
			if (!CSS.recognizesMedia(media || 'all')) return true;
			if (!sheet || sheet.disabled) return false;
			try {
				var rules = sheet.cssRules, rule;
				if (rules) {
					// needed for Safari 3 and Chrome 1.0.
					// in standards-conforming browsers cssRules contains @-rules.
					// Chrome 1.0 weirdness: rules[<number larger than .length - 1>]
					// returns the last rule, so a for loop is the only option.
					search: for (var i = 0, l = rules.length; rule = rules[i], i < l; ++i) {
						switch (rule.type) {
							case 2: // @charset
								break;
							case 3: // @import
								if (!isSheetReady(rule.styleSheet, rule.media.mediaText)) return false;
								break;
							default:
								// only @charset can precede @import
								break search;
						}
					}
				}
			}
			catch (e) {} // probably a style sheet from another domain
			return true;
		}

		function allStylesLoaded() {
			// Internet Explorer's style sheet model, there's no need to do anything
			if (document.createStyleSheet) return true;
			// standards-compliant browsers
			var el, i;
			for (i = 0; el = links[i]; ++i) {
				if (el.rel.toLowerCase() == 'stylesheet' && !isContainerReady(el)) return false;
			}
			for (i = 0; el = styles[i]; ++i) {
				if (!isContainerReady(el)) return false;
			}
			return true;
		}

		DOM.ready(function() {
			// getComputedStyle returns null in Gecko if used in an iframe with display: none
			if (!hasLayout) hasLayout = CSS.getStyle(document.body).isUsable();
			if (complete || (hasLayout && allStylesLoaded())) perform();
			else setTimeout(arguments.callee, 10);
		});

		return function(listener) {
			if (complete) listener();
			else queue.push(listener);
		};

	})();

	function Font(data) {

		var face = this.face = data.face, wordSeparators = {
			'\u0020': 1,
			'\u00a0': 1,
			'\u3000': 1
		};

		this.glyphs = data.glyphs;
		this.w = data.w;
		this.baseSize = parseInt(face['units-per-em'], 10);

		this.family = face['font-family'].toLowerCase();
		this.weight = face['font-weight'];
		this.style = face['font-style'] || 'normal';

		this.viewBox = (function () {
			var parts = face.bbox.split(/\s+/);
			var box = {
				minX: parseInt(parts[0], 10),
				minY: parseInt(parts[1], 10),
				maxX: parseInt(parts[2], 10),
				maxY: parseInt(parts[3], 10)
			};
			box.width = box.maxX - box.minX;
			box.height = box.maxY - box.minY;
			box.toString = function() {
				return [ this.minX, this.minY, this.width, this.height ].join(' ');
			};
			return box;
		})();

		this.ascent = -parseInt(face.ascent, 10);
		this.descent = -parseInt(face.descent, 10);

		this.height = -this.ascent + this.descent;

		this.spacing = function(chars, letterSpacing, wordSpacing) {
			var glyphs = this.glyphs, glyph, kerning, k,
				jumps = [], width = 0,
				i = -1, j = -1, chr;
			while (chr = chars[++i]) {
				glyph = glyphs[chr] || this.missingGlyph;
				if (!glyph) continue;
				if (kerning) {
					width -= k = kerning[chr] || 0;
					jumps[j] -= k;
				}
				width += jumps[++j] = ~~(glyph.w || this.w) + letterSpacing + (wordSeparators[chr] ? wordSpacing : 0);
				kerning = glyph.k;
			}
			jumps.total = width;
			return jumps;
		};

	}

	function FontFamily() {

		var styles = {}, mapping = {
			oblique: 'italic',
			italic: 'oblique'
		};

		this.add = function(font) {
			(styles[font.style] || (styles[font.style] = {}))[font.weight] = font;
		};

		this.get = function(style, weight) {
			var weights = styles[style] || styles[mapping[style]]
				|| styles.normal || styles.italic || styles.oblique;
			if (!weights) return null;
			// we don't have to worry about "bolder" and "lighter"
			// because IE's currentStyle returns a numeric value for it,
			// and other browsers use the computed value anyway
			weight = {
				normal: 400,
				bold: 700
			}[weight] || parseInt(weight, 10);
			if (weights[weight]) return weights[weight];
			// http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight
			// Gecko uses x99/x01 for lighter/bolder
			var up = {
				1: 1,
				99: 0
			}[weight % 100], alts = [], min, max;
			if (up === undefined) up = weight > 400;
			if (weight == 500) weight = 400;
			for (var alt in weights) {
				if (!hasOwnProperty(weights, alt)) continue;
				alt = parseInt(alt, 10);
				if (!min || alt < min) min = alt;
				if (!max || alt > max) max = alt;
				alts.push(alt);
			}
			if (weight < min) weight = min;
			if (weight > max) weight = max;
			alts.sort(function(a, b) {
				return (up
					? (a >= weight && b >= weight) ? a < b : a > b
					: (a <= weight && b <= weight) ? a > b : a < b) ? -1 : 1;
			});
			return weights[alts[0]];
		};

	}

	function HoverHandler() {

		function contains(node, anotherNode) {
			if (node.contains) return node.contains(anotherNode);
			return node.compareDocumentPosition(anotherNode) & 16;
		}

		function onOverOut(e) {
			var related = e.relatedTarget;
			if (!related || contains(this, related)) return;
			trigger(this, e.type == 'mouseover');
		}

		function onEnterLeave(e) {
			trigger(this, e.type == 'mouseenter');
		}

		function trigger(el, hoverState) {
			// A timeout is needed so that the event can actually "happen"
			// before replace is triggered. This ensures that styles are up
			// to date.
			setTimeout(function() {
				var options = sharedStorage.get(el).options;
				api.replace(el, hoverState ? merge(options, options.hover) : options, true);
			}, 10);
		}

		this.attach = function(el) {
			if (el.onmouseenter === undefined) {
				addEvent(el, 'mouseover', onOverOut);
				addEvent(el, 'mouseout', onOverOut);
			}
			else {
				addEvent(el, 'mouseenter', onEnterLeave);
				addEvent(el, 'mouseleave', onEnterLeave);
			}
		};

	}

	function ReplaceHistory() {

		var list = [], map = {};

		function filter(keys) {
			var values = [], key;
			for (var i = 0; key = keys[i]; ++i) values[i] = list[map[key]];
			return values;
		}

		this.add = function(key, args) {
			map[key] = list.push(args) - 1;
		};

		this.repeat = function() {
			var snapshot = arguments.length ? filter(arguments) : list, args;
			for (var i = 0; args = snapshot[i++];) api.replace(args[0], args[1], true);
		};

	}

	function Storage() {

		var map = {}, at = 0;

		function identify(el) {
			return el.cufid || (el.cufid = ++at);
		}

		this.get = function(el) {
			var id = identify(el);
			return map[id] || (map[id] = {});
		};

	}

	function Style(style) {

		var custom = {}, sizes = {};

		this.extend = function(styles) {
			for (var property in styles) {
				if (hasOwnProperty(styles, property)) custom[property] = styles[property];
			}
			return this;
		};

		this.get = function(property) {
			return custom[property] != undefined ? custom[property] : style[property];
		};

		this.getSize = function(property, base) {
			return sizes[property] || (sizes[property] = new CSS.Size(this.get(property), base));
		};

		this.isUsable = function() {
			return !!style;
		};

	}

	function addEvent(el, type, listener) {
		if (el.addEventListener) {
			el.addEventListener(type, listener, false);
		}
		else if (el.attachEvent) {
			el.attachEvent('on' + type, function() {
				return listener.call(el, window.event);
			});
		}
	}

	function attach(el, options) {
		var storage = sharedStorage.get(el);
		if (storage.options) return el;
		if (options.hover && options.hoverables[el.nodeName.toLowerCase()]) {
			hoverHandler.attach(el);
		}
		storage.options = options;
		return el;
	}

	function cached(fun) {
		var cache = {};
		return function(key) {
			if (!hasOwnProperty(cache, key)) cache[key] = fun.apply(null, arguments);
			return cache[key];
		};
	}

	function getFont(el, style) {
		var families = CSS.quotedList(style.get('fontFamily').toLowerCase()), family;
		for (var i = 0; family = families[i]; ++i) {
			if (fonts[family]) return fonts[family].get(style.get('fontStyle'), style.get('fontWeight'));
		}
		return null;
	}

	function elementsByTagName(query) {
		return document.getElementsByTagName(query);
	}

	function hasOwnProperty(obj, property) {
		return obj.hasOwnProperty(property);
	}

	function merge() {
		var merged = {}, arg, key;
		for (var i = 0, l = arguments.length; arg = arguments[i], i < l; ++i) {
			for (key in arg) {
				if (hasOwnProperty(arg, key)) merged[key] = arg[key];
			}
		}
		return merged;
	}

	function process(font, text, style, options, node, el) {
		var fragment = document.createDocumentFragment(), processed;
		if (text === '') return fragment;
		var separate = options.separate;
		var parts = text.split(separators[separate]), needsAligning = (separate == 'words');
		if (needsAligning && HAS_BROKEN_REGEXP) {
			// @todo figure out a better way to do this
			if (/^\s/.test(text)) parts.unshift('');
			if (/\s$/.test(text)) parts.push('');
		}
		for (var i = 0, l = parts.length; i < l; ++i) {
			processed = engines[options.engine](font,
				needsAligning ? CSS.textAlign(parts[i], style, i, l) : parts[i],
				style, options, node, el, i < l - 1);
			if (processed) fragment.appendChild(processed);
		}
		return fragment;
	}

	function replaceElement(el, options) {
		var name = el.nodeName.toLowerCase();
		if (options.ignore[name]) return;
		var replace = !options.textless[name];
		var style = CSS.getStyle(attach(el, options)).extend(options);
		var font = getFont(el, style), node, type, next, anchor, text, lastElement;
		if (!font) return;
		for (node = el.firstChild; node; node = next) {
			type = node.nodeType;
			next = node.nextSibling;
			if (replace && type == 3) {
				// Node.normalize() is broken in IE 6, 7, 8
				if (anchor) {
					anchor.appendData(node.data);
					el.removeChild(node);
				}
				else anchor = node;
				if (next) continue;
			}
			if (anchor) {
				el.replaceChild(process(font,
					CSS.whiteSpace(anchor.data, style, anchor, lastElement),
					style, options, node, el), anchor);
				anchor = null;
			}
			if (type == 1) {
				if (node.firstChild) {
					if (node.nodeName.toLowerCase() == 'cufon') {
						engines[options.engine](font, null, style, options, node, el);
					}
					else arguments.callee(node, options);
				}
				lastElement = node;
			}
		}
	}

	var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;

	var sharedStorage = new Storage();
	var hoverHandler = new HoverHandler();
	var replaceHistory = new ReplaceHistory();
	var initialized = false;

	var engines = {}, fonts = {}, defaultOptions = {
		autoDetect: false,
		engine: null,
		//fontScale: 1,
		//fontScaling: false,
		forceHitArea: false,
		hover: false,
		hoverables: {
			a: true
		},
		ignore: {
			applet: 1,
			canvas: 1,
			col: 1,
			colgroup: 1,
			head: 1,
			iframe: 1,
			map: 1,
			optgroup: 1,
			option: 1,
			script: 1,
			select: 1,
			style: 1,
			textarea: 1,
			title: 1,
			pre: 1
		},
		printable: true,
		//rotation: 0,
		//selectable: false,
		selector: (
				window.Sizzle
			||	(window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
			||	(window.dojo && dojo.query)
			||	(window.Ext && Ext.query)
			||	(window.YAHOO && YAHOO.util && YAHOO.util.Selector && YAHOO.util.Selector.query)
			||	(window.$$ && function(query) { return $$(query); })
			||	(window.$ && function(query) { return $(query); })
			||	(document.querySelectorAll && function(query) { return document.querySelectorAll(query); })
			||	elementsByTagName
		),
		separate: 'words', // 'none' and 'characters' are also accepted
		textless: {
			dl: 1,
			html: 1,
			ol: 1,
			table: 1,
			tbody: 1,
			thead: 1,
			tfoot: 1,
			tr: 1,
			ul: 1
		},
		textShadow: 'none'
	};

	var separators = {
		// The first pattern may cause unicode characters above
		// code point 255 to be removed in Safari 3.0. Luckily enough
		// Safari 3.0 does not include non-breaking spaces in \s, so
		// we can just use a simple alternative pattern.
		words: /\s/.test('\u00a0') ? /[^\S\u00a0]+/ : /\s+/,
		characters: '',
		none: /^/
	};

	api.now = function() {
		DOM.ready();
		return api;
	};

	api.refresh = function() {
		replaceHistory.repeat.apply(replaceHistory, arguments);
		return api;
	};

	api.registerEngine = function(id, engine) {
		if (!engine) return api;
		engines[id] = engine;
		return api.set('engine', id);
	};

	api.registerFont = function(data) {
		if (!data) return api;
		var font = new Font(data), family = font.family;
		if (!fonts[family]) fonts[family] = new FontFamily();
		fonts[family].add(font);
		return api.set('fontFamily', '"' + family + '"');
	};

	api.replace = function(elements, options, ignoreHistory) {
		options = merge(defaultOptions, options);
		if (!options.engine) return api; // there's no browser support so we'll just stop here
		if (!initialized) {
			CSS.addClass(DOM.root(), 'cufon-active cufon-loading');
			CSS.ready(function() {
				// fires before any replace() calls, but it doesn't really matter
				CSS.addClass(CSS.removeClass(DOM.root(), 'cufon-loading'), 'cufon-ready');
			});
			initialized = true;
		}
		if (options.hover) options.forceHitArea = true;
		if (options.autoDetect) delete options.fontFamily;
		if (typeof options.textShadow == 'string') {
			options.textShadow = CSS.textShadow(options.textShadow);
		}
		if (typeof options.color == 'string' && /^-/.test(options.color)) {
			options.textGradient = CSS.gradient(options.color);
		}
		else delete options.textGradient;
		if (!ignoreHistory) replaceHistory.add(elements, arguments);
		if (elements.nodeType || typeof elements == 'string') elements = [ elements ];
		CSS.ready(function() {
			for (var i = 0, l = elements.length; i < l; ++i) {
				var el = elements[i];
				if (typeof el == 'string') api.replace(options.selector(el), options, true);
				else replaceElement(el, options);
			}
		});
		return api;
	};

	api.set = function(option, value) {
		defaultOptions[option] = value;
		return api;
	};

	return api;

})();

Cufon.registerEngine('vml', (function() {

	var ns = document.namespaces;
	if (!ns) return;
	ns.add('cvml', 'urn:schemas-microsoft-com:vml');
	ns = null;

	var check = document.createElement('cvml:shape');
	check.style.behavior = 'url(#default#VML)';
	if (!check.coordsize) return; // VML isn't supported
	check = null;

	var HAS_BROKEN_LINEHEIGHT = (document.documentMode || 0) < 8;

	document.write(('<style type="text/css">' +
		'cufoncanvas{text-indent:0;}' +
		'@media screen{' +
			'cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}' +
			'cufoncanvas{position:absolute;text-align:left;}' +
			'cufon{display:inline-block;position:relative;vertical-align:' +
			(HAS_BROKEN_LINEHEIGHT
				? 'middle'
				: 'text-bottom') +
			';}' +
			'cufon cufontext{position:absolute;left:-10000in;font-size:1px;}' +
			'a cufon{cursor:pointer}' + // ignore !important here
		'}' +
		'@media print{' +
			'cufon cufoncanvas{display:none;}' +
		'}' +
	'</style>').replace(/;/g, '!important;'));

	function getFontSizeInPixels(el, value) {
		return getSizeInPixels(el, /(?:em|ex|%)$|^[a-z-]+$/i.test(value) ? '1em' : value);
	}

	// Original by Dead Edwards.
	// Combined with getFontSizeInPixels it also works with relative units.
	function getSizeInPixels(el, value) {
		if (value === '0') return 0;
		if (/px$/i.test(value)) return parseFloat(value);
		var style = el.style.left, runtimeStyle = el.runtimeStyle.left;
		el.runtimeStyle.left = el.currentStyle.left;
		el.style.left = value.replace('%', 'em');
		var result = el.style.pixelLeft;
		el.style.left = style;
		el.runtimeStyle.left = runtimeStyle;
		return result;
	}

	function getSpacingValue(el, style, size, property) {
		var key = 'computed' + property, value = style[key];
		if (isNaN(value)) {
			value = style.get(property);
			style[key] = value = (value == 'normal') ? 0 : ~~size.convertFrom(getSizeInPixels(el, value));
		}
		return value;
	}

	var fills = {};

	function gradientFill(gradient) {
		var id = gradient.id;
		if (!fills[id]) {
			var stops = gradient.stops, fill = document.createElement('cvml:fill'), colors = [];
			fill.type = 'gradient';
			fill.angle = 180;
			fill.focus = '0';
			fill.method = 'sigma';
			fill.color = stops[0][1];
			for (var j = 1, k = stops.length - 1; j < k; ++j) {
				colors.push(stops[j][0] * 100 + '% ' + stops[j][1]);
			}
			fill.colors = colors.join(',');
			fill.color2 = stops[k][1];
			fills[id] = fill;
		}
		return fills[id];
	}

	return function(font, text, style, options, node, el, hasNext) {

		var redraw = (text === null);

		if (redraw) text = node.alt;

		var viewBox = font.viewBox;

		var size = style.computedFontSize || (style.computedFontSize = new Cufon.CSS.Size(getFontSizeInPixels(el, style.get('fontSize')) + 'px', font.baseSize));

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('cufon');
			wrapper.className = 'cufon cufon-vml';
			wrapper.alt = text;

			canvas = document.createElement('cufoncanvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('cufontext');
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}

			// ie6, for some reason, has trouble rendering the last VML element in the document.
			// we can work around this by injecting a dummy element where needed.
			// @todo find a better solution
			if (!hasNext) wrapper.appendChild(document.createElement('cvml:shape'));
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height), roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var minX = viewBox.minX, minY = viewBox.minY;

		cStyle.height = roundedHeight;
		cStyle.top = Math.round(size.convert(minY - font.ascent));
		cStyle.left = Math.round(size.convert(minX));

		wStyle.height = size.convert(font.height) + 'px';

		var color = style.get('color');
		var chars = Cufon.CSS.textTransform(text, style).split('');

		var jumps = font.spacing(chars,
			getSpacingValue(el, style, size, 'letterSpacing'),
			getSpacingValue(el, style, size, 'wordSpacing')
		);

		if (!jumps.length) return null;

		var width = jumps.total;
		var fullWidth = -minX + width + (viewBox.width - jumps[jumps.length - 1]);

		var shapeWidth = size.convert(fullWidth * stretchFactor), roundedShapeWidth = Math.round(shapeWidth);

		var coordSize = fullWidth + ',' + viewBox.height, coordOrigin;
		var stretch = 'r' + coordSize + 'ns';

		var fill = options.textGradient && gradientFill(options.textGradient);

		var glyphs = font.glyphs, offsetX = 0;
		var shadows = options.textShadow;
		var i = -1, j = 0, chr;

		while (chr = chars[++i]) {

			var glyph = glyphs[chars[i]] || font.missingGlyph, shape;
			if (!glyph) continue;

			if (redraw) {
				// some glyphs may be missing so we can't use i
				shape = canvas.childNodes[j];
				while (shape.firstChild) shape.removeChild(shape.firstChild); // shadow, fill
			}
			else {
				shape = document.createElement('cvml:shape');
				canvas.appendChild(shape);
			}

			shape.stroked = 'f';
			shape.coordsize = coordSize;
			shape.coordorigin = coordOrigin = (minX - offsetX) + ',' + minY;
			shape.path = (glyph.d ? 'm' + glyph.d + 'xe' : '') + 'm' + coordOrigin + stretch;
			shape.fillcolor = color;

			if (fill) shape.appendChild(fill.cloneNode(false));

			// it's important to not set top/left or IE8 will grind to a halt
			var sStyle = shape.style;
			sStyle.width = roundedShapeWidth;
			sStyle.height = roundedHeight;

			if (shadows) {
				// due to the limitations of the VML shadow element there
				// can only be two visible shadows. opacity is shared
				// for all shadows.
				var shadow1 = shadows[0], shadow2 = shadows[1];
				var color1 = Cufon.CSS.color(shadow1.color), color2;
				var shadow = document.createElement('cvml:shadow');
				shadow.on = 't';
				shadow.color = color1.color;
				shadow.offset = shadow1.offX + ',' + shadow1.offY;
				if (shadow2) {
					color2 = Cufon.CSS.color(shadow2.color);
					shadow.type = 'double';
					shadow.color2 = color2.color;
					shadow.offset2 = shadow2.offX + ',' + shadow2.offY;
				}
				shadow.opacity = color1.opacity || (color2 && color2.opacity) || 1;
				shape.appendChild(shadow);
			}

			offsetX += jumps[j++];
		}

		// addresses flickering issues on :hover

		var cover = shape.nextSibling, coverFill, vStyle;

		if (options.forceHitArea) {

			if (!cover) {
				cover = document.createElement('cvml:rect');
				cover.stroked = 'f';
				cover.className = 'cufon-vml-cover';
				coverFill = document.createElement('cvml:fill');
				coverFill.opacity = 0;
				cover.appendChild(coverFill);
				canvas.appendChild(cover);
			}

			vStyle = cover.style;

			vStyle.width = roundedShapeWidth;
			vStyle.height = roundedHeight;

		}
		else if (cover) canvas.removeChild(cover);

		wStyle.width = Math.max(Math.ceil(size.convert(width * stretchFactor)), 0);

		if (HAS_BROKEN_LINEHEIGHT) {

			var yAdjust = style.computedYAdjust;

			if (yAdjust === undefined) {
				var lineHeight = style.get('lineHeight');
				if (lineHeight == 'normal') lineHeight = '1em';
				else if (!isNaN(lineHeight)) lineHeight += 'em'; // no unit
				style.computedYAdjust = yAdjust = 0.5 * (getSizeInPixels(el, lineHeight) - parseFloat(wStyle.height));
			}

			if (yAdjust) {
				wStyle.marginTop = Math.ceil(yAdjust) + 'px';
				wStyle.marginBottom = yAdjust + 'px';
			}

		}

		return wrapper;

	};

})());

Cufon.registerEngine('canvas', (function() {

	// Safari 2 doesn't support .apply() on native methods

	var check = document.createElement('canvas');
	if (!check || !check.getContext || !check.getContext.apply) return;
	check = null;

	var HAS_INLINE_BLOCK = Cufon.CSS.supports('display', 'inline-block');

	// Firefox 2 w/ non-strict doctype (almost standards mode)
	var HAS_BROKEN_LINEHEIGHT = !HAS_INLINE_BLOCK && (document.compatMode == 'BackCompat' || /frameset|transitional/i.test(document.doctype.publicId));

	var styleSheet = document.createElement('style');
	styleSheet.type = 'text/css';
	styleSheet.appendChild(document.createTextNode((
		'cufon{text-indent:0;}' +
		'@media screen,projection{' +
			'cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;' +
			(HAS_BROKEN_LINEHEIGHT
				? ''
				: 'font-size:1px;line-height:1px;') +
			'}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}' +
			(HAS_INLINE_BLOCK
				? 'cufon canvas{position:relative;}'
				: 'cufon canvas{position:absolute;}') +
		'}' +
		'@media print{' +
			'cufon{padding:0;}' + // Firefox 2
			'cufon canvas{display:none;}' +
		'}'
	).replace(/;/g, '!important;')));
	document.getElementsByTagName('head')[0].appendChild(styleSheet);

	function generateFromVML(path, context) {
		var atX = 0, atY = 0;
		var code = [], re = /([mrvxe])([^a-z]*)/g, match;
		generate: for (var i = 0; match = re.exec(path); ++i) {
			var c = match[2].split(',');
			switch (match[1]) {
				case 'v':
					code[i] = { m: 'bezierCurveTo', a: [ atX + ~~c[0], atY + ~~c[1], atX + ~~c[2], atY + ~~c[3], atX += ~~c[4], atY += ~~c[5] ] };
					break;
				case 'r':
					code[i] = { m: 'lineTo', a: [ atX += ~~c[0], atY += ~~c[1] ] };
					break;
				case 'm':
					code[i] = { m: 'moveTo', a: [ atX = ~~c[0], atY = ~~c[1] ] };
					break;
				case 'x':
					code[i] = { m: 'closePath' };
					break;
				case 'e':
					break generate;
			}
			context[code[i].m].apply(context, code[i].a);
		}
		return code;
	}

	function interpret(code, context) {
		for (var i = 0, l = code.length; i < l; ++i) {
			var line = code[i];
			context[line.m].apply(context, line.a);
		}
	}

	return function(font, text, style, options, node, el) {

		var redraw = (text === null);

		if (redraw) text = node.getAttribute('alt');

		var viewBox = font.viewBox;

		var size = style.getSize('fontSize', font.baseSize);

		var expandTop = 0, expandRight = 0, expandBottom = 0, expandLeft = 0;
		var shadows = options.textShadow, shadowOffsets = [];
		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				var x = size.convertFrom(parseFloat(shadow.offX));
				var y = size.convertFrom(parseFloat(shadow.offY));
				shadowOffsets[i] = [ x, y ];
				if (y < expandTop) expandTop = y;
				if (x > expandRight) expandRight = x;
				if (y > expandBottom) expandBottom = y;
				if (x < expandLeft) expandLeft = x;
			}
		}

		var chars = Cufon.CSS.textTransform(text, style).split('');

		var jumps = font.spacing(chars,
			~~size.convertFrom(parseFloat(style.get('letterSpacing')) || 0),
			~~size.convertFrom(parseFloat(style.get('wordSpacing')) || 0)
		);

		if (!jumps.length) return null; // there's nothing to render

		var width = jumps.total;

		expandRight += viewBox.width - jumps[jumps.length - 1];
		expandLeft += viewBox.minX;

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('cufon');
			wrapper.className = 'cufon cufon-canvas';
			wrapper.setAttribute('alt', text);

			canvas = document.createElement('canvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('cufontext');
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height);
		var roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var stretchedWidth = width * stretchFactor;

		var canvasWidth = Math.ceil(size.convert(stretchedWidth + expandRight - expandLeft));
		var canvasHeight = Math.ceil(size.convert(viewBox.height - expandTop + expandBottom));

		canvas.width = canvasWidth;
		canvas.height = canvasHeight;

		// needed for WebKit and full page zoom
		cStyle.width = canvasWidth + 'px';
		cStyle.height = canvasHeight + 'px';

		// minY has no part in canvas.height
		expandTop += viewBox.minY;

		cStyle.top = Math.round(size.convert(expandTop - font.ascent)) + 'px';
		cStyle.left = Math.round(size.convert(expandLeft)) + 'px';

		var wrapperWidth = Math.max(Math.ceil(size.convert(stretchedWidth)), 0) + 'px';

		if (HAS_INLINE_BLOCK) {
			wStyle.width = wrapperWidth;
			wStyle.height = size.convert(font.height) + 'px';
		}
		else {
			wStyle.paddingLeft = wrapperWidth;
			wStyle.paddingBottom = (size.convert(font.height) - 1) + 'px';
		}

		var g = canvas.getContext('2d'), scale = height / viewBox.height;

		// proper horizontal scaling is performed later
		g.scale(scale, scale * roundingFactor);
		g.translate(-expandLeft, -expandTop);
		g.save();

		function renderText() {
			var glyphs = font.glyphs, glyph, i = -1, j = -1, chr;
			g.scale(stretchFactor, 1);
			while (chr = chars[++i]) {
				var glyph = glyphs[chars[i]] || font.missingGlyph;
				if (!glyph) continue;
				if (glyph.d) {
					g.beginPath();
					if (glyph.code) interpret(glyph.code, g);
					else glyph.code = generateFromVML('m' + glyph.d, g);
					g.fill();
				}
				g.translate(jumps[++j], 0);
			}
			g.restore();
		}

		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				g.save();
				g.fillStyle = shadow.color;
				g.translate.apply(g, shadowOffsets[i]);
				renderText();
			}
		}

		var gradient = options.textGradient;
		if (gradient) {
			var stops = gradient.stops, fill = g.createLinearGradient(0, viewBox.minY, 0, viewBox.maxY);
			for (var i = 0, l = stops.length; i < l; ++i) {
				fill.addColorStop.apply(fill, stops[i]);
			}
			g.fillStyle = fill;
		}
		else g.fillStyle = style.get('color');

		renderText();

		return wrapper;

	};

})());

Cufon.registerFont({"w":200,"face":{"font-family":"Liberation Sans","font-weight":400,"font-stretch":"normal","units-per-em":"360","panose-1":"2 11 6 4 2 2 2 2 2 4","ascent":"288","descent":"-72","x-height":"4","bbox":"-9 -266 360 76.6956","underline-thickness":"26.3672","underline-position":"-24.9609","unicode-range":"U+0020-U+2122"},"glyphs":{" ":{"w":100,"k":{"Y":7,"T":7,"A":20}},"\u00a0":{"w":100},"!":{"d":"63,-70r-26,0r-4,-178r34,0xm33,0r0,-35r34,0r0,35r-34,0","w":100},"\"":{"d":"109,-170r-25,0r-4,-78r32,0xm44,-170r-25,0r-4,-78r33,0","w":127},"#":{"d":"158,-156r-14,65r45,0r0,19r-49,0r-16,72r-19,0r15,-72r-64,0r-15,72r-19,0r15,-72r-35,0r0,-19r39,0r14,-65r-44,0r0,-19r48,0r15,-71r20,0r-16,71r64,0r16,-71r19,0r-16,71r37,0r0,19r-40,0xm75,-156r-14,65r63,0r14,-65r-63,0"},"$":{"d":"194,-70v0,46,-34,64,-81,66r0,29r-22,0r0,-29v-49,-1,-79,-23,-87,-63r30,-6v5,28,25,41,57,43r0,-87v-38,-9,-76,-20,-76,-67v1,-42,33,-58,76,-59r0,-23r22,0r0,23v45,0,67,20,76,56r-31,6v-5,-23,-18,-35,-45,-37r0,78v41,10,81,20,81,70xm113,-29v51,7,71,-66,19,-77v-6,-2,-12,-4,-19,-6r0,83xm91,-219v-47,-6,-63,57,-18,69v6,2,12,3,18,5r0,-74"},"%":{"d":"252,-156v43,0,55,33,55,80v0,46,-13,78,-56,78v-42,0,-55,-33,-55,-78v0,-48,12,-80,56,-80xm93,0r-28,0r162,-248r28,0xm13,-171v-1,-47,13,-79,56,-79v43,0,55,33,55,79v0,46,-13,79,-55,79v-43,0,-56,-33,-56,-79xm251,-17v28,0,30,-29,30,-59v0,-31,-1,-60,-29,-60v-29,0,-31,29,-31,60v0,29,2,59,30,59xm69,-112v27,0,28,-30,29,-59v0,-31,-1,-60,-29,-60v-29,0,-30,30,-30,60v0,30,2,59,30,59","w":320},"&":{"d":"234,-2v-28,10,-62,0,-77,-18v-40,39,-149,32,-144,-45v3,-43,29,-61,60,-76v-25,-40,-17,-114,47,-108v35,3,59,15,59,50v0,44,-40,53,-71,69v14,26,32,50,51,72v14,-21,24,-43,30,-72r26,8v-9,33,-21,57,-38,82v13,13,33,22,57,15r0,23xm97,-151v25,-10,52,-18,56,-48v-1,-18,-13,-29,-33,-29v-42,0,-39,50,-23,77xm42,-66v-3,51,71,58,98,28v-20,-24,-41,-51,-56,-80v-23,10,-40,24,-42,52","w":240},"'":{"d":"47,-170r-25,0r-4,-78r33,0","w":68},"(":{"d":"87,75v-38,-42,-65,-92,-65,-169v0,-76,28,-126,65,-167r31,0v-38,41,-64,92,-64,168v0,76,26,127,64,168r-31,0","w":119},")":{"d":"33,-261v38,41,65,92,65,168v0,76,-27,127,-65,168r-31,0v37,-41,64,-92,64,-168v0,-76,-27,-127,-64,-168r31,0","w":119},"*":{"d":"80,-196r47,-18r7,23r-49,13r32,44r-20,13r-27,-46r-27,45r-21,-12r33,-44r-49,-13r8,-23r47,19r-2,-53r23,0","w":140},"+":{"d":"118,-107r0,75r-26,0r0,-75r-74,0r0,-26r74,0r0,-75r26,0r0,75r74,0r0,26r-74,0","w":210},",":{"d":"68,-38v1,34,0,65,-14,84r-22,0v9,-13,17,-26,17,-46r-16,0r0,-38r35,0","w":100},"-":{"d":"16,-82r0,-28r88,0r0,28r-88,0","w":119},"\u00ad":{"d":"16,-82r0,-28r88,0r0,28r-88,0","w":119},".":{"d":"33,0r0,-38r34,0r0,38r-34,0","w":100},"\/":{"d":"0,4r72,-265r28,0r-72,265r-28,0","w":100},"0":{"d":"101,-251v68,0,85,55,85,127v0,72,-20,128,-86,128v-67,0,-86,-56,-86,-128v0,-73,17,-127,87,-127xm100,-22v47,0,54,-49,54,-102v0,-53,-4,-102,-53,-102v-51,0,-55,48,-55,102v0,53,5,102,54,102"},"1":{"d":"27,0r0,-27r64,0r0,-190r-56,39r0,-29r58,-41r29,0r0,221r61,0r0,27r-156,0","k":{"1":27}},"2":{"d":"101,-251v82,-7,93,87,43,132r-62,55v-11,11,-23,22,-29,37r129,0r0,27r-164,0v2,-99,128,-94,128,-182v0,-28,-16,-43,-45,-43v-29,0,-46,15,-49,41r-32,-3v6,-41,34,-60,81,-64"},"3":{"d":"126,-127v33,6,58,20,58,59v0,88,-139,92,-164,29v-3,-8,-5,-16,-6,-25r32,-3v6,27,21,44,54,44v32,0,53,-15,52,-46v-1,-38,-36,-46,-79,-43r0,-28v39,1,72,-4,72,-42v0,-27,-17,-43,-46,-43v-28,0,-47,15,-49,41r-32,-3v6,-42,35,-63,81,-64v48,-1,79,21,79,65v0,36,-21,52,-52,59"},"4":{"d":"155,-56r0,56r-30,0r0,-56r-117,0r0,-25r114,-167r33,0r0,167r35,0r0,25r-35,0xm125,-212v-27,46,-58,90,-88,131r88,0r0,-131"},"5":{"d":"54,-142v48,-35,137,-8,131,61v11,99,-154,114,-171,26r32,-4v7,23,22,37,52,37v35,-1,51,-22,54,-58v4,-55,-73,-65,-99,-34r-31,0r8,-134r141,0r0,27r-112,0"},"6":{"d":"110,-160v48,1,74,30,74,79v0,53,-28,85,-80,85v-65,0,-83,-55,-86,-122v-5,-90,50,-162,133,-122v14,7,22,21,27,39r-31,6v-5,-40,-67,-38,-82,-6v-9,19,-15,44,-15,74v11,-20,30,-34,60,-33xm103,-22v34,0,49,-23,49,-58v0,-35,-16,-56,-50,-56v-29,0,-50,16,-49,49v1,36,15,65,50,65"},"7":{"d":"64,0v3,-98,48,-159,88,-221r-134,0r0,-27r164,0r0,26v-39,65,-84,121,-85,222r-33,0"},"8":{"d":"134,-131v28,9,52,24,51,62v-1,50,-34,73,-85,73v-51,0,-83,-23,-84,-73v0,-36,21,-54,49,-61v-75,-25,-45,-126,34,-121v46,3,78,18,79,63v0,33,-17,51,-44,57xm100,-142v31,1,46,-15,46,-44v0,-28,-17,-43,-47,-42v-29,0,-46,13,-45,42v1,28,16,44,46,44xm101,-20v35,0,51,-18,51,-52v0,-30,-18,-46,-53,-46v-33,0,-51,17,-51,47v0,34,19,51,53,51"},"9":{"d":"99,-251v64,0,84,50,84,122v0,92,-53,162,-136,121v-14,-7,-20,-23,-25,-40r30,-5v6,39,69,39,84,7v9,-19,16,-44,16,-74v-10,22,-31,35,-62,35v-49,0,-73,-33,-73,-83v0,-54,28,-83,82,-83xm98,-110v31,-1,51,-18,51,-49v0,-36,-14,-67,-51,-67v-34,0,-49,23,-49,58v0,34,15,58,49,58"},":":{"d":"33,-154r0,-36r34,0r0,36r-34,0xm33,0r0,-36r34,0r0,36r-34,0","w":100},";":{"d":"68,-36v1,33,-1,63,-14,82r-22,0v9,-13,17,-26,17,-46r-16,0r0,-36r35,0xm33,-154r0,-36r35,0r0,36r-35,0","w":100},"\u037e":{"d":"68,-36v1,33,-1,63,-14,82r-22,0v9,-13,17,-26,17,-46r-16,0r0,-36r35,0xm33,-154r0,-36r35,0r0,36r-35,0","w":100},"<":{"d":"18,-100r0,-36r175,-74r0,27r-151,65r151,64r0,27","w":210},"=":{"d":"18,-150r0,-26r174,0r0,26r-174,0xm18,-60r0,-26r174,0r0,26r-174,0","w":210},">":{"d":"18,-27r0,-27r151,-64r-151,-65r0,-27r175,74r0,36","w":210},"?":{"d":"103,-251v84,0,111,97,45,133v-19,10,-37,24,-39,52r-31,0v0,-63,77,-55,77,-114v0,-30,-21,-42,-52,-43v-32,0,-53,17,-56,46r-32,-2v7,-45,34,-72,88,-72xm77,0r0,-35r34,0r0,35r-34,0"},"@":{"d":"198,-261v85,0,136,45,136,128v0,61,-22,111,-78,115v-29,2,-39,-18,-37,-44v-12,23,-32,44,-66,44v-41,0,-58,-28,-58,-68v0,-60,30,-105,88,-108v29,-1,43,15,54,32r7,-28r28,0v-9,45,-23,84,-27,134v-1,11,6,17,14,16v39,-4,51,-48,51,-92v0,-69,-42,-107,-112,-107v-93,0,-145,59,-145,153v0,71,41,112,115,113v43,0,78,-13,106,-28r9,19v-30,18,-67,32,-115,32v-89,0,-140,-51,-140,-136v0,-107,62,-175,170,-175xm158,-41v46,0,70,-43,70,-90v0,-26,-17,-40,-43,-40v-44,0,-59,41,-61,85v-1,26,9,45,34,45","w":365},"A":{"d":"205,0r-28,-72r-113,0r-28,72r-35,0r101,-248r38,0r99,248r-34,0xm167,-99r-47,-123v-12,45,-31,82,-46,123r93,0","w":240,"k":{"\u2019":27,"y":7,"w":7,"v":7,"Y":27,"W":13,"V":27,"T":27," ":20}},"B":{"d":"160,-131v35,5,61,23,61,61v0,87,-106,68,-191,70r0,-248v76,3,177,-17,177,60v0,33,-19,50,-47,57xm63,-142v50,-1,110,9,110,-42v0,-47,-63,-36,-110,-37r0,79xm63,-27v55,-2,124,14,124,-45v0,-56,-70,-42,-124,-44r0,89","w":240},"C":{"d":"212,-179v-10,-28,-35,-45,-73,-45v-59,0,-87,40,-87,99v0,60,29,101,89,101v43,0,62,-24,78,-52r27,14v-18,38,-51,66,-107,66v-80,0,-117,-50,-121,-129v-6,-104,99,-153,187,-111v19,9,31,26,39,46","w":259},"D":{"d":"30,-248v118,-7,216,8,213,122v-3,78,-43,126,-121,126r-92,0r0,-248xm63,-27v89,8,146,-16,146,-99v0,-83,-60,-101,-146,-95r0,194","w":259},"E":{"d":"30,0r0,-248r187,0r0,28r-154,0r0,79r144,0r0,27r-144,0r0,87r162,0r0,27r-195,0","w":240},"F":{"d":"63,-220r0,92r138,0r0,28r-138,0r0,100r-33,0r0,-248r175,0r0,28r-142,0","w":219,"k":{"A":20,".":40,",":40}},"G":{"d":"143,4v-82,0,-121,-48,-125,-129v-5,-107,100,-154,193,-111v17,8,29,25,37,43r-32,9v-13,-25,-37,-40,-76,-40v-61,0,-88,39,-88,99v0,61,29,100,91,101v35,0,62,-11,79,-27r0,-45r-74,0r0,-28r105,0r0,86v-25,25,-61,42,-110,42","w":280},"H":{"d":"197,0r0,-115r-134,0r0,115r-33,0r0,-248r33,0r0,105r134,0r0,-105r34,0r0,248r-34,0","w":259},"I":{"d":"33,0r0,-248r34,0r0,248r-34,0","w":100},"J":{"d":"153,-248v-8,100,35,252,-73,252v-44,-1,-67,-25,-74,-66r32,-5v4,25,16,42,43,43v27,0,39,-20,39,-49r0,-147r-48,0r0,-28r81,0","w":180},"K":{"d":"194,0r-99,-120r-32,25r0,95r-33,0r0,-248r33,0r0,124r119,-124r40,0r-105,108r119,140r-42,0","w":240},"L":{"d":"30,0r0,-248r33,0r0,221r125,0r0,27r-158,0","k":{"\u2019":20,"y":13,"Y":27,"W":27,"V":27,"T":27," ":13}},"M":{"d":"240,0r2,-218v-23,76,-54,145,-80,218r-23,0r-81,-218r1,218r-29,0r0,-248r44,0r77,211v21,-75,51,-140,76,-211r43,0r0,248r-30,0","w":299},"N":{"d":"190,0r-132,-211r1,211r-29,0r0,-248r39,0r133,213r-2,-213r31,0r0,248r-41,0","w":259},"O":{"d":"140,-251v81,0,123,46,123,126v0,79,-44,129,-123,129v-81,0,-123,-49,-123,-129v0,-80,42,-126,123,-126xm140,-24v63,0,89,-41,89,-101v0,-60,-29,-99,-89,-99v-61,0,-89,39,-89,99v0,60,28,100,89,101","w":280},"P":{"d":"30,-248v87,1,191,-15,191,75v0,78,-77,80,-158,76r0,97r-33,0r0,-248xm63,-123v57,0,124,11,124,-50v0,-59,-68,-47,-124,-48r0,98","w":240,"k":{"A":27,".":46,",":46," ":7}},"Q":{"d":"140,-251v81,0,123,46,123,126v0,72,-35,117,-100,126v7,30,30,48,69,40r0,23v-55,16,-95,-15,-103,-61v-73,-6,-112,-51,-112,-128v0,-80,42,-126,123,-126xm140,-24v63,0,89,-41,89,-101v0,-60,-29,-99,-89,-99v-61,0,-89,39,-89,99v0,60,28,100,89,101","w":280},"R":{"d":"233,-177v-1,41,-23,64,-60,70r70,107r-38,0r-65,-103r-77,0r0,103r-33,0r0,-248v88,3,205,-21,203,71xm63,-129v60,-2,137,13,137,-47v0,-61,-80,-42,-137,-45r0,92","w":259,"k":{"Y":7,"W":7,"V":7,"T":7}},"S":{"d":"185,-189v-5,-48,-123,-54,-124,2v14,75,158,14,163,119v3,78,-121,87,-175,55v-17,-10,-28,-26,-33,-46r33,-7v5,56,141,63,141,-1v0,-78,-155,-14,-162,-118v-5,-82,145,-84,179,-34v5,7,8,16,11,25","w":240},"T":{"d":"127,-220r0,220r-34,0r0,-220r-85,0r0,-28r204,0r0,28r-85,0","w":219,"k":{"y":20,"w":20,"u":13,"s":40,"r":13,"o":40,"i":13,"e":40,"c":40,"a":40,"O":7,"A":27,";":40,":":40,".":40,"-":20,",":40," ":7}},"U":{"d":"232,-93v-1,65,-40,97,-104,97v-61,0,-100,-32,-100,-94r0,-158r33,0v8,89,-33,224,67,224v102,0,64,-133,71,-224r33,0r0,155","w":259},"V":{"d":"137,0r-34,0r-101,-248r35,0r83,218r83,-218r36,0","w":240,"k":{"y":13,"u":13,"r":13,"o":20,"i":7,"e":20,"a":27,"A":27,";":13,":":13,".":33,"-":20,",":33}},"W":{"d":"266,0r-40,0r-56,-210r-55,210r-40,0r-73,-248r35,0r59,218r15,-64r43,-154r32,0r59,218r59,-218r35,0","w":339,"k":{"y":3,"u":7,"r":7,"o":7,"e":7,"a":13,"A":13,";":7,":":7,".":20,"-":7,",":20}},"X":{"d":"195,0r-74,-108r-76,108r-37,0r94,-129r-87,-119r37,0r69,98r67,-98r37,0r-84,118r92,130r-38,0","w":240},"Y":{"d":"137,-103r0,103r-34,0r0,-103r-95,-145r37,0r75,118r75,-118r37,0","w":240,"k":{"v":20,"u":20,"q":33,"p":27,"o":33,"i":13,"e":33,"a":27,"A":27,";":23,":":20,".":46,"-":33,",":46," ":7}},"Z":{"d":"209,0r-198,0r0,-25r151,-195r-138,0r0,-28r176,0r0,25r-150,196r159,0r0,27","w":219},"[":{"d":"26,75r0,-336r71,0r0,23r-41,0r0,290r41,0r0,23r-71,0","w":100},"\\":{"d":"72,4r-72,-265r28,0r72,265r-28,0","w":100},"]":{"d":"3,75r0,-23r41,0r0,-290r-41,0r0,-23r71,0r0,336r-71,0","w":100},"^":{"d":"138,-118r-54,-112r-54,112r-28,0r64,-130r36,0r65,130r-29,0","w":168},"_":{"d":"-5,72r0,-23r209,0r0,23r-209,0"},"`":{"d":"77,-211r-58,-49r0,-5r36,0v12,19,30,32,38,54r-16,0","w":119},"a":{"d":"141,-36v-15,21,-31,41,-68,40v-36,-1,-58,-21,-58,-57v-1,-64,63,-63,125,-63v3,-35,-9,-54,-41,-54v-24,1,-41,7,-42,31r-33,-3v5,-37,33,-52,76,-52v45,0,72,20,72,64r0,82v-1,20,7,32,28,27r0,20v-31,9,-61,-2,-59,-35xm48,-53v0,20,12,33,32,33v41,-3,63,-29,60,-74v-43,2,-92,-5,-92,41"},"b":{"d":"115,-194v53,0,69,39,70,98v0,66,-23,100,-70,100v-31,-1,-49,-11,-59,-34r-2,30r-31,0r1,-261r32,0r0,101v10,-23,28,-34,59,-34xm107,-20v40,0,45,-34,45,-75v0,-40,-5,-75,-45,-74v-42,0,-51,32,-51,76v0,43,10,73,51,73"},"c":{"d":"96,-169v-40,0,-48,33,-48,73v0,40,9,75,48,75v24,0,41,-14,43,-38r32,2v-6,37,-31,61,-74,61v-59,0,-76,-41,-82,-99v-10,-93,101,-131,147,-64v4,7,5,14,7,22r-32,3v-4,-21,-16,-35,-41,-35","w":180},"d":{"d":"85,-194v31,0,48,13,60,33r-1,-100r32,0r1,261r-30,0v-2,-10,0,-23,-3,-31v-10,23,-28,35,-59,35v-53,0,-69,-39,-70,-98v0,-66,23,-100,70,-100xm94,-170v-40,0,-46,34,-46,75v0,40,6,74,45,74v42,0,51,-32,51,-76v0,-42,-9,-74,-50,-73"},"e":{"d":"100,-194v63,0,86,42,84,106r-135,0v0,40,14,67,53,68v26,1,43,-12,49,-29r28,8v-11,28,-37,45,-77,45v-58,0,-88,-37,-87,-100v1,-61,26,-98,85,-98xm152,-113v6,-60,-76,-77,-97,-28v-3,7,-6,17,-6,28r103,0"},"f":{"d":"101,-234v-31,-9,-42,10,-38,44r38,0r0,23r-38,0r0,167r-31,0r0,-167r-27,0r0,-23r27,0v-7,-52,17,-82,69,-68r0,24","w":100,"k":{"\u2019":-7,"f":7}},"g":{"d":"177,-190v-10,125,41,293,-110,261v-23,-6,-38,-20,-44,-43r32,-5v15,47,100,32,89,-28r0,-30v-11,21,-29,36,-61,36v-54,0,-68,-41,-68,-96v0,-56,16,-97,71,-98v29,-1,48,16,59,35v1,-10,0,-23,2,-32r30,0xm94,-22v36,0,50,-32,50,-73v0,-42,-14,-75,-50,-75v-39,0,-46,34,-46,75v0,41,6,73,46,73"},"h":{"d":"106,-169v-72,0,-44,102,-49,169r-32,0r0,-261r32,0r-1,103v12,-21,28,-36,61,-36v89,0,53,116,60,194r-32,0r0,-121v2,-32,-8,-49,-39,-48"},"i":{"d":"24,-231r0,-30r32,0r0,30r-32,0xm24,0r0,-190r32,0r0,190r-32,0","w":79},"j":{"d":"24,-231r0,-30r32,0r0,30r-32,0xm-9,49v24,4,33,-6,33,-30r0,-209r32,0r0,214v2,40,-23,58,-65,49r0,-24","w":79},"k":{"d":"143,0r-64,-87r-23,19r0,68r-32,0r0,-261r32,0r0,163r83,-92r37,0r-77,82r82,108r-38,0","w":180},"l":{"d":"24,0r0,-261r32,0r0,261r-32,0","w":79},"m":{"d":"210,-169v-67,3,-38,105,-44,169r-31,0r0,-121v0,-29,-5,-50,-35,-48v-66,4,-38,104,-44,169r-31,0r-1,-190r30,0v1,10,-1,24,2,32v10,-44,99,-50,107,0v11,-21,27,-35,58,-36v85,-2,47,119,55,194r-31,0r0,-121v0,-29,-5,-49,-35,-48","w":299},"n":{"d":"117,-194v89,-4,53,116,60,194r-32,0r0,-121v0,-31,-8,-49,-39,-48v-72,2,-44,102,-49,169r-32,0r-1,-190r30,0v1,10,-1,24,2,32v11,-22,29,-35,61,-36"},"o":{"d":"100,-194v62,-1,85,37,85,99v1,63,-27,99,-86,99v-59,0,-83,-39,-84,-99v0,-66,28,-99,85,-99xm99,-20v44,1,53,-31,53,-75v0,-43,-8,-75,-51,-75v-43,0,-53,32,-53,75v0,43,10,74,51,75"},"p":{"d":"115,-194v55,1,70,41,70,98v0,57,-16,98,-70,100v-31,0,-49,-13,-60,-34r1,105r-32,0r-1,-265r31,0r2,30v10,-21,28,-34,59,-34xm107,-20v40,0,45,-34,45,-75v0,-41,-6,-73,-45,-74v-42,0,-51,32,-51,76v0,43,10,73,51,73"},"q":{"d":"145,-31v-11,22,-29,35,-60,35v-53,0,-69,-39,-70,-98v0,-59,17,-99,70,-100v32,-1,48,14,60,33v0,-11,-1,-24,2,-32r30,0r-1,268r-32,0xm93,-21v41,0,51,-33,51,-76v0,-43,-8,-73,-50,-73v-40,0,-46,35,-46,75v0,40,5,74,45,74"},"r":{"d":"114,-163v-78,-16,-53,91,-57,163r-32,0r-1,-190r30,0v1,12,-1,29,2,39v6,-27,23,-49,58,-41r0,29","w":119,"k":{"\u2019":-13,".":20,",":20}},"s":{"d":"135,-143v-3,-34,-86,-38,-87,0v15,53,115,12,119,90v4,78,-150,74,-157,8r28,-5v4,36,97,45,98,0v-10,-56,-113,-15,-118,-90v-4,-57,82,-63,122,-42v12,7,21,19,24,35","w":180},"t":{"d":"59,-47v-2,24,18,29,38,22r0,24v-33,10,-70,5,-70,-39r0,-127r-22,0r0,-23r24,0r9,-43r21,0r0,43r35,0r0,23r-35,0r0,120","w":100},"u":{"d":"84,4v-89,4,-54,-116,-61,-194r32,0r0,120v0,31,7,50,39,49v72,-2,45,-101,50,-169r31,0r1,190r-30,0v-1,-10,1,-25,-2,-33v-11,22,-28,36,-60,37"},"v":{"d":"108,0r-38,0r-69,-190r34,0r54,165r56,-165r34,0","w":180,"k":{".":27,",":27}},"w":{"d":"206,0r-36,0r-40,-164r-41,164r-36,0r-54,-190r32,0r39,164r43,-164r34,0r41,164r42,-164r31,0","w":259,"k":{".":20,",":20}},"x":{"d":"141,0r-51,-78r-52,78r-34,0r68,-98r-65,-92r35,0r48,74r47,-74r35,0r-64,92r68,98r-35,0","w":180},"y":{"d":"179,-190r-86,221v-14,28,-37,51,-81,42r0,-24v39,6,53,-20,64,-50r-75,-189r34,0r57,156r54,-156r33,0","w":180,"k":{".":27,",":27}},"z":{"d":"9,0r0,-24r116,-142r-109,0r0,-24r144,0r0,24r-116,142r123,0r0,24r-158,0","w":180},"{":{"d":"39,-94v74,12,-11,154,75,146r0,23v-44,4,-70,-10,-70,-52v0,-46,11,-107,-38,-105r0,-22v81,4,-7,-162,84,-157r24,0r0,23v-82,-15,-2,131,-75,144","w":120},"|":{"d":"32,76r0,-337r29,0r0,337r-29,0","w":93},"}":{"d":"76,-40v2,64,8,128,-70,115r0,-23v80,12,3,-131,74,-146v-40,-6,-34,-59,-34,-106v1,-29,-11,-41,-40,-38r0,-23v44,-4,70,10,70,52v0,47,-12,108,38,105r0,22v-26,1,-39,14,-38,42","w":120},"~":{"d":"16,-127v37,-31,93,-2,135,6v18,-1,32,-8,43,-16r0,26v-50,42,-130,-35,-178,9r0,-25","w":210},"\u2122":{"d":"297,-111r0,-109r-44,109r-19,0r-42,-109r0,109r-23,0r0,-137r34,0r42,107r42,-107r32,0r0,137r-22,0xm101,-228r0,117r-23,0r0,-117r-45,0r0,-20r114,0r0,20r-46,0","w":360},"\u2026":{"d":"277,0r0,-38r34,0r0,38r-34,0xm163,0r0,-38r34,0r0,38r-34,0xm49,0r0,-38r34,0r0,38r-34,0","w":360},"\u2013":{"d":"0,-79r0,-24r200,0r0,24r-200,0"},"\u2014":{"d":"0,-79r0,-24r360,0r0,24r-360,0","w":360},"\u201c":{"d":"72,-167v-1,-32,0,-62,13,-81r22,0v-9,13,-17,26,-17,46r16,0r0,35r-34,0xm13,-167v-1,-32,1,-62,14,-81r22,0v-9,13,-17,26,-17,46r15,0r0,35r-34,0","w":119},"\u201d":{"d":"107,-248v1,32,-1,62,-14,81r-21,0v8,-13,16,-27,16,-46r-15,0r0,-35r34,0xm49,-248v1,32,-1,62,-14,81r-22,0v8,-13,16,-27,17,-46r-16,0r0,-35r35,0","w":119},"\u2018":{"d":"22,-167v-1,-32,1,-62,14,-81r22,0v-9,13,-17,26,-17,46r16,0r0,35r-35,0","w":79,"k":{"\u2018":7}},"\u2019":{"d":"58,-248v1,32,-1,62,-14,81r-22,0v9,-13,17,-27,17,-46r-16,0r0,-35r35,0","w":79,"k":{"\u2019":7,"s":7," ":13}},"\u00d7":{"d":"25,-58r62,-62r-62,-62r19,-18r61,62r62,-62r18,19r-61,61r61,62r-17,18r-63,-62r-62,62","w":210},"\u2032":{"d":"15,-156r11,-92r35,0r-28,92r-18,0","w":67},"\u2033":{"d":"15,-156r11,-92r35,0r-28,92r-18,0xm75,-156r11,-92r35,0r-28,92r-18,0","w":127}}});

jQuery.fn.dynamicFontSize=function(a){var b=$.extend(jQuery.fn.dynamicFontSize.defaults,a);return this.each(function(){var d=$(this);var j=d.css("display");d.css("display","block");var h=d.css("font-size");h=h.substring(0,h.length-2);var e=h;var f=e;var k=d.height();var c=b.lines+0.6;if(d.height()>(h*c)){for(i=0;i<b.tries;i++){e-=(h*b.squeezeFactor);d.css("font-size",e+"px");if(d.height()<k){k=d.height();f=e}if(d.height()<(h*c)){k=0;f=0;break}}if(k&&f){d.css("font-size",f+"px")}}if(b.limitWidth){var g=d.width();d.css("display","inline");cssWidth=d.css("width");d.css("width","auto");var e=(h*g)/d.innerWidth();if(e<h||b.allowUpscaling){d.css("font-size",e+"px")}d.css("width",cssWidth)}d.css("display",j)})};jQuery.fn.dynamicFontSize.defaults={squeezeFactor:0.1,tries:3,lines:1,limitWidth:false,allowUpscaling:false};

eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}(';(3($){$.v.g=3(2){7 4=$(a);7 6=$(2.6);w l.g(4,6,2);o a};$.g=3(4,6,2){3 e(5){d(u 5=="y"){5=8+1;5=5>=k?0:5}4.t(\'f\').j(":b("+5+")").m(\'f\');6.q(h,h).j(":r").s();6.j(":b("+5+")").x(3(){8=5})}7 2=2||{};7 k=4.J;7 8=2.G||0;2.i=2.i||h;2.9=2.9||F;6.A().b(8).B();4.b(8).m(\'f\');4.I(3(){d($(a).D(\'f\')){o C}e(4.E(a))});d(2.9>0){7 c=n(3(){e()},2.9);d(2.i){4.H(3(){p(c)}).z(3(){p(c);c=n(3(){e()},2.9)})}}}})(l);',46,46,'||options|function|tabs|nr|output|var|visible_item|transition_interval|this|eq|timer|if|slide|current|featureList|true|pause_on_hover|filter|total_items|jQuery|addClass|setInterval|return|clearInterval|stop|visible|fadeOut|removeClass|typeof|fn|new|fadeIn|undefined|mouseleave|hide|show|false|hasClass|index|9000|start_item|mouseenter|click|length'.split('|'),0,{}))


