/*
Script: Core.js
	MooTools - My Object Oriented JavaScript Tools.

License:
	MIT-style license.

Copyright:
	Copyright (c) 2006-2008 [Valerio Proietti](http://mad4milk.net/).

Code & Documentation:
	[The MooTools production team](http://mootools.net/developers/).

Inspiration:
	- Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php)
	- Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)
*/

var MooTools = {
	'version': '1.2.3',
	'build': '4980aa0fb74d2f6eb80bcd9f5b8e1fd6fbb8f607'
};

var Native = function(options){
	options = options || {};
	var name = options.name;
	var legacy = options.legacy;
	var protect = options.protect;
	var methods = options.implement;
	var generics = options.generics;
	var initialize = options.initialize;
	var afterImplement = options.afterImplement || function(){};
	var object = initialize || legacy;
	generics = generics !== false;

	object.constructor = Native;
	object.$family = {name: 'native'};
	if (legacy && initialize) object.prototype = legacy.prototype;
	object.prototype.constructor = object;

	if (name){
		var family = name.toLowerCase();
		object.prototype.$family = {name: family};
		Native.typize(object, family);
	}

	var add = function(obj, name, method, force){
		if (!protect || force || !obj.prototype[name]) obj.prototype[name] = method;
		if (generics) Native.genericize(obj, name, protect);
		afterImplement.call(obj, name, method);
		return obj;
	};

	object.alias = function(a1, a2, a3){
		if (typeof a1 == 'string'){
			var pa1 = this.prototype[a1];
			if ((a1 = pa1)) return add(this, a2, a1, a3);
		}
		for (var a in a1) this.alias(a, a1[a], a2);
		return this;
	};

	object.implement = function(a1, a2, a3){
		if (typeof a1 == 'string') return add(this, a1, a2, a3);
		for (var p in a1) add(this, p, a1[p], a2);
		return this;
	};

	if (methods) object.implement(methods);

	return object;
};

Native.genericize = function(object, property, check){
	if ((!check || !object[property]) && typeof object.prototype[property] == 'function') object[property] = function(){
		var args = Array.prototype.slice.call(arguments);
		return object.prototype[property].apply(args.shift(), args);
	};
};

Native.implement = function(objects, properties){
	for (var i = 0, l = objects.length; i < l; i++) objects[i].implement(properties);
};

Native.typize = function(object, family){
	if (!object.type) object.type = function(item){
		return ($type(item) === family);
	};
};

(function(){
	var natives = {'Array': Array, 'Date': Date, 'Function': Function, 'Number': Number, 'RegExp': RegExp, 'String': String};
	for (var n in natives) new Native({name: n, initialize: natives[n], protect: true});

	var types = {'boolean': Boolean, 'native': Native, 'object': Object};
	for (var t in types) Native.typize(types[t], t);

	var generics = {
		'Array': ["concat", "indexOf", "join", "lastIndexOf", "pop", "push", "reverse", "shift", "slice", "sort", "splice", "toString", "unshift", "valueOf"],
		'String': ["charAt", "charCodeAt", "concat", "indexOf", "lastIndexOf", "match", "replace", "search", "slice", "split", "substr", "substring", "toLowerCase", "toUpperCase", "valueOf"]
	};
	for (var g in generics){
		for (var i = generics[g].length; i--;) Native.genericize(natives[g], generics[g][i], true);
	}
})();

var Hash = new Native({

	name: 'Hash',

	initialize: function(object){
		if ($type(object) == 'hash') object = $unlink(object.getClean());
		for (var key in object) this[key] = object[key];
		return this;
	}

});

Hash.implement({

	forEach: function(fn, bind){
		for (var key in this){
			if (this.hasOwnProperty(key)) fn.call(bind, this[key], key, this);
		}
	},

	getClean: function(){
		var clean = {};
		for (var key in this){
			if (this.hasOwnProperty(key)) clean[key] = this[key];
		}
		return clean;
	},

	getLength: function(){
		var length = 0;
		for (var key in this){
			if (this.hasOwnProperty(key)) length++;
		}
		return length;
	}

});

Hash.alias('forEach', 'each');

Array.implement({

	forEach: function(fn, bind){
		for (var i = 0, l = this.length; i < l; i++) fn.call(bind, this[i], i, this);
	}

});

Array.alias('forEach', 'each');

function $A(iterable){
	if (iterable.item){
		var l = iterable.length, array = new Array(l);
		while (l--) array[l] = iterable[l];
		return array;
	}
	return Array.prototype.slice.call(iterable);
};

function $arguments(i){
	return function(){
		return arguments[i];
	};
};

function $chk(obj){
	return !!(obj || obj === 0);
};

function $clear(timer){
	clearTimeout(timer);
	clearInterval(timer);
	return null;
};

function $defined(obj){
	return (obj != undefined);
};

function $each(iterable, fn, bind){
	var type = $type(iterable);
	((type == 'arguments' || type == 'collection' || type == 'array') ? Array : Hash).each(iterable, fn, bind);
};

function $empty(){};

function $extend(original, extended){
	for (var key in (extended || {})) original[key] = extended[key];
	return original;
};

function $H(object){
	return new Hash(object);
};

function $lambda(value){
	return ($type(value) == 'function') ? value : function(){
		return value;
	};
};

function $merge(){
	var args = Array.slice(arguments);
	args.unshift({});
	return $mixin.apply(null, args);
};

function $mixin(mix){
	for (var i = 1, l = arguments.length; i < l; i++){
		var object = arguments[i];
		if ($type(object) != 'object') continue;
		for (var key in object){
			var op = object[key], mp = mix[key];
			mix[key] = (mp && $type(op) == 'object' && $type(mp) == 'object') ? $mixin(mp, op) : $unlink(op);
		}
	}
	return mix;
};

function $pick(){
	for (var i = 0, l = arguments.length; i < l; i++){
		if (arguments[i] != undefined) return arguments[i];
	}
	return null;
};

function $random(min, max){
	return Math.floor(Math.random() * (max - min + 1) + min);
};

function $splat(obj){
	var type = $type(obj);
	return (type) ? ((type != 'array' && type != 'arguments') ? [obj] : obj) : [];
};

var $time = Date.now || function(){
	return +new Date;
};

function $try(){
	for (var i = 0, l = arguments.length; i < l; i++){
		try {
			return arguments[i]();
		} catch(e){}
	}
	return null;
};

function $type(obj){
	if (obj == undefined) return false;
	if (obj.$family) return (obj.$family.name == 'number' && !isFinite(obj)) ? false : obj.$family.name;
	if (obj.nodeName){
		switch (obj.nodeType){
			case 1: return 'element';
			case 3: return (/\S/).test(obj.nodeValue) ? 'textnode' : 'whitespace';
		}
	} else if (typeof obj.length == 'number'){
		if (obj.callee) return 'arguments';
		else if (obj.item) return 'collection';
	}
	return typeof obj;
};

function $unlink(object){
	var unlinked;
	switch ($type(object)){
		case 'object':
			unlinked = {};
			for (var p in object) unlinked[p] = $unlink(object[p]);
		break;
		case 'hash':
			unlinked = new Hash(object);
		break;
		case 'array':
			unlinked = [];
			for (var i = 0, l = object.length; i < l; i++) unlinked[i] = $unlink(object[i]);
		break;
		default: return object;
	}
	return unlinked;
};


/*
Script: Browser.js
	The Browser Core. Contains Browser initialization, Window and Document, and the Browser Hash.

License:
	MIT-style license.
*/

var Browser = $merge({

	Engine: {name: 'unknown', version: 0},

	Platform: {name: (window.orientation != undefined) ? 'ipod' : (navigator.platform.match(/mac|win|linux/i) || ['other'])[0].toLowerCase()},

	Features: {xpath: !!(document.evaluate), air: !!(window.runtime), query: !!(document.querySelector)},

	Plugins: {},

	Engines: {

		presto: function(){
			return (!window.opera) ? false : ((arguments.callee.caller) ? 960 : ((document.getElementsByClassName) ? 950 : 925));
		},

		trident: function(){
			return (!window.ActiveXObject) ? false : ((window.XMLHttpRequest) ? 5 : 4);
		},

		webkit: function(){
			return (navigator.taintEnabled) ? false : ((Browser.Features.xpath) ? ((Browser.Features.query) ? 525 : 420) : 419);
		},

		gecko: function(){
			return (document.getBoxObjectFor == undefined) ? false : ((document.getElementsByClassName) ? 19 : 18);
		}

	}

}, Browser || {});

Browser.Platform[Browser.Platform.name] = true;

Browser.detect = function(){

	for (var engine in this.Engines){
		var version = this.Engines[engine]();
		if (version){
			this.Engine = {name: engine, version: version};
			this.Engine[engine] = this.Engine[engine + version] = true;
			break;
		}
	}

	return {name: engine, version: version};

};

Browser.detect();

Browser.Request = function(){
	return $try(function(){
		return new XMLHttpRequest();
	}, function(){
		return new ActiveXObject('MSXML2.XMLHTTP');
	});
};

Browser.Features.xhr = !!(Browser.Request());

Browser.Plugins.Flash = (function(){
	var version = ($try(function(){
		return navigator.plugins['Shockwave Flash'].description;
	}, function(){
		return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
	}) || '0 r0').match(/\d+/g);
	return {version: parseInt(version[0] || 0 + '.' + version[1], 10) || 0, build: parseInt(version[2], 10) || 0};
})();

function $exec(text){
	if (!text) return text;
	if (window.execScript){
		window.execScript(text);
	} else {
		var script = document.createElement('script');
		script.setAttribute('type', 'text/javascript');
		script[(Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerText' : 'text'] = text;
		document.head.appendChild(script);
		document.head.removeChild(script);
	}
	return text;
};

Native.UID = 1;

var $uid = (Browser.Engine.trident) ? function(item){
	return (item.uid || (item.uid = [Native.UID++]))[0];
} : function(item){
	return item.uid || (item.uid = Native.UID++);
};

var Window = new Native({

	name: 'Window',

	legacy: (Browser.Engine.trident) ? null: window.Window,

	initialize: function(win){
		$uid(win);
		if (!win.Element){
			win.Element = $empty;
			if (Browser.Engine.webkit) win.document.createElement("iframe"); //fixes safari 2
			win.Element.prototype = (Browser.Engine.webkit) ? window["[[DOMElement.prototype]]"] : {};
		}
		win.document.window = win;
		return $extend(win, Window.Prototype);
	},

	afterImplement: function(property, value){
		window[property] = Window.Prototype[property] = value;
	}

});

Window.Prototype = {$family: {name: 'window'}};

new Window(window);

var Document = new Native({

	name: 'Document',

	legacy: (Browser.Engine.trident) ? null: window.Document,

	initialize: function(doc){
		$uid(doc);
		doc.head = doc.getElementsByTagName('head')[0];
		doc.html = doc.getElementsByTagName('html')[0];
		if (Browser.Engine.trident && Browser.Engine.version <= 4) $try(function(){
			doc.execCommand("BackgroundImageCache", false, true);
		});
		if (Browser.Engine.trident) doc.window.attachEvent('onunload', function() {
			doc.window.detachEvent('onunload', arguments.callee);
			doc.head = doc.html = doc.window = null;
		});
		return $extend(doc, Document.Prototype);
	},

	afterImplement: function(property, value){
		document[property] = Document.Prototype[property] = value;
	}

});

Document.Prototype = {$family: {name: 'document'}};

new Document(document);


/*
Script: Array.js
	Contains Array Prototypes like each, contains, and erase.

License:
	MIT-style license.
*/

Array.implement({

	every: function(fn, bind){
		for (var i = 0, l = this.length; i < l; i++){
			if (!fn.call(bind, this[i], i, this)) return false;
		}
		return true;
	},

	filter: function(fn, bind){
		var results = [];
		for (var i = 0, l = this.length; i < l; i++){
			if (fn.call(bind, this[i], i, this)) results.push(this[i]);
		}
		return results;
	},

	clean: function() {
		return this.filter($defined);
	},

	indexOf: function(item, from){
		var len = this.length;
		for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
			if (this[i] === item) return i;
		}
		return -1;
	},

	map: function(fn, bind){
		var results = [];
		for (var i = 0, l = this.length; i < l; i++) results[i] = fn.call(bind, this[i], i, this);
		return results;
	},

	some: function(fn, bind){
		for (var i = 0, l = this.length; i < l; i++){
			if (fn.call(bind, this[i], i, this)) return true;
		}
		return false;
	},

	associate: function(keys){
		var obj = {}, length = Math.min(this.length, keys.length);
		for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
		return obj;
	},

	link: function(object){
		var result = {};
		for (var i = 0, l = this.length; i < l; i++){
			for (var key in object){
				if (object[key](this[i])){
					result[key] = this[i];
					delete object[key];
					break;
				}
			}
		}
		return result;
	},

	contains: function(item, from){
		return this.indexOf(item, from) != -1;
	},

	extend: function(array){
		for (var i = 0, j = array.length; i < j; i++) this.push(array[i]);
		return this;
	},

	getLast: function(){
		return (this.length) ? this[this.length - 1] : null;
	},

	getRandom: function(){
		return (this.length) ? this[$random(0, this.length - 1)] : null;
	},

	include: function(item){
		if (!this.contains(item)) this.push(item);
		return this;
	},

	combine: function(array){
		for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
		return this;
	},

	erase: function(item){
		for (var i = this.length; i--; i){
			if (this[i] === item) this.splice(i, 1);
		}
		return this;
	},

	empty: function(){
		this.length = 0;
		return this;
	},

	flatten: function(){
		var array = [];
		for (var i = 0, l = this.length; i < l; i++){
			var type = $type(this[i]);
			if (!type) continue;
			array = array.concat((type == 'array' || type == 'collection' || type == 'arguments') ? Array.flatten(this[i]) : this[i]);
		}
		return array;
	},

	hexToRgb: function(array){
		if (this.length != 3) return null;
		var rgb = this.map(function(value){
			if (value.length == 1) value += value;
			return value.toInt(16);
		});
		return (array) ? rgb : 'rgb(' + rgb + ')';
	},

	rgbToHex: function(array){
		if (this.length < 3) return null;
		if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
		var hex = [];
		for (var i = 0; i < 3; i++){
			var bit = (this[i] - 0).toString(16);
			hex.push((bit.length == 1) ? '0' + bit : bit);
		}
		return (array) ? hex : '#' + hex.join('');
	}

});


/*
Script: Function.js
	Contains Function Prototypes like create, bind, pass, and delay.

License:
	MIT-style license.
*/

Function.implement({

	extend: function(properties){
		for (var property in properties) this[property] = properties[property];
		return this;
	},

	create: function(options){
		var self = this;
		options = options || {};
		return function(event){
			var args = options.arguments;
			args = (args != undefined) ? $splat(args) : Array.slice(arguments, (options.event) ? 1 : 0);
			if (options.event) args = [event || window.event].extend(args);
			var returns = function(){
				return self.apply(options.bind || null, args);
			};
			if (options.delay) return setTimeout(returns, options.delay);
			if (options.periodical) return setInterval(returns, options.periodical);
			if (options.attempt) return $try(returns);
			return returns();
		};
	},

	run: function(args, bind){
		return this.apply(bind, $splat(args));
	},

	pass: function(args, bind){
		return this.create({bind: bind, arguments: args});
	},

	bind: function(bind, args){
		return this.create({bind: bind, arguments: args});
	},

	bindWithEvent: function(bind, args){
		return this.create({bind: bind, arguments: args, event: true});
	},

	attempt: function(args, bind){
		return this.create({bind: bind, arguments: args, attempt: true})();
	},

	delay: function(delay, bind, args){
		return this.create({bind: bind, arguments: args, delay: delay})();
	},

	periodical: function(periodical, bind, args){
		return this.create({bind: bind, arguments: args, periodical: periodical})();
	}

});


/*
Script: Number.js
	Contains Number Prototypes like limit, round, times, and ceil.

License:
	MIT-style license.
*/

Number.implement({

	limit: function(min, max){
		return Math.min(max, Math.max(min, this));
	},

	round: function(precision){
		precision = Math.pow(10, precision || 0);
		return Math.round(this * precision) / precision;
	},

	times: function(fn, bind){
		for (var i = 0; i < this; i++) fn.call(bind, i, this);
	},

	toFloat: function(){
		return parseFloat(this);
	},

	toInt: function(base){
		return parseInt(this, base || 10);
	}

});

Number.alias('times', 'each');

(function(math){
	var methods = {};
	math.each(function(name){
		if (!Number[name]) methods[name] = function(){
			return Math[name].apply(null, [this].concat($A(arguments)));
		};
	});
	Number.implement(methods);
})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);


/*
Script: String.js
	Contains String Prototypes like camelCase, capitalize, test, and toInt.

License:
	MIT-style license.
*/

String.implement({

	test: function(regex, params){
		return ((typeof regex == 'string') ? new RegExp(regex, params) : regex).test(this);
	},

	contains: function(string, separator){
		return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1;
	},

	trim: function(){
		return this.replace(/^\s+|\s+$/g, '');
	},

	clean: function(){
		return this.replace(/\s+/g, ' ').trim();
	},

	camelCase: function(){
		return this.replace(/-\D/g, function(match){
			return match.charAt(1).toUpperCase();
		});
	},

	hyphenate: function(){
		return this.replace(/[A-Z]/g, function(match){
			return ('-' + match.charAt(0).toLowerCase());
		});
	},

	capitalize: function(){
		return this.replace(/\b[a-z]/g, function(match){
			return match.toUpperCase();
		});
	},

	escapeRegExp: function(){
		return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
	},

	toInt: function(base){
		return parseInt(this, base || 10);
	},

	toFloat: function(){
		return parseFloat(this);
	},

	hexToRgb: function(array){
		var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
		return (hex) ? hex.slice(1).hexToRgb(array) : null;
	},

	rgbToHex: function(array){
		var rgb = this.match(/\d{1,3}/g);
		return (rgb) ? rgb.rgbToHex(array) : null;
	},

	stripScripts: function(option){
		var scripts = '';
		var text = this.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, function(){
			scripts += arguments[1] + '\n';
			return '';
		});
		if (option === true) $exec(scripts);
		else if ($type(option) == 'function') option(scripts, text);
		return text;
	},

	substitute: function(object, regexp){
		return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
			if (match.charAt(0) == '\\') return match.slice(1);
			return (object[name] != undefined) ? object[name] : '';
		});
	}

});


/*
Script: Hash.js
	Contains Hash Prototypes. Provides a means for overcoming the JavaScript practical impossibility of extending native Objects.

License:
	MIT-style license.
*/

Hash.implement({

	has: Object.prototype.hasOwnProperty,

	keyOf: function(value){
		for (var key in this){
			if (this.hasOwnProperty(key) && this[key] === value) return key;
		}
		return null;
	},

	hasValue: function(value){
		return (Hash.keyOf(this, value) !== null);
	},

	extend: function(properties){
		Hash.each(properties || {}, function(value, key){
			Hash.set(this, key, value);
		}, this);
		return this;
	},

	combine: function(properties){
		Hash.each(properties || {}, function(value, key){
			Hash.include(this, key, value);
		}, this);
		return this;
	},

	erase: function(key){
		if (this.hasOwnProperty(key)) delete this[key];
		return this;
	},

	get: function(key){
		return (this.hasOwnProperty(key)) ? this[key] : null;
	},

	set: function(key, value){
		if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
		return this;
	},

	empty: function(){
		Hash.each(this, function(value, key){
			delete this[key];
		}, this);
		return this;
	},

	include: function(key, value){
		if (this[key] == undefined) this[key] = value;
		return this;
	},

	map: function(fn, bind){
		var results = new Hash;
		Hash.each(this, function(value, key){
			results.set(key, fn.call(bind, value, key, this));
		}, this);
		return results;
	},

	filter: function(fn, bind){
		var results = new Hash;
		Hash.each(this, function(value, key){
			if (fn.call(bind, value, key, this)) results.set(key, value);
		}, this);
		return results;
	},

	every: function(fn, bind){
		for (var key in this){
			if (this.hasOwnProperty(key) && !fn.call(bind, this[key], key)) return false;
		}
		return true;
	},

	some: function(fn, bind){
		for (var key in this){
			if (this.hasOwnProperty(key) && fn.call(bind, this[key], key)) return true;
		}
		return false;
	},

	getKeys: function(){
		var keys = [];
		Hash.each(this, function(value, key){
			keys.push(key);
		});
		return keys;
	},

	getValues: function(){
		var values = [];
		Hash.each(this, function(value){
			values.push(value);
		});
		return values;
	},

	toQueryString: function(base){
		var queryString = [];
		Hash.each(this, function(value, key){
			if (base) key = base + '[' + key + ']';
			var result;
			switch ($type(value)){
				case 'object': result = Hash.toQueryString(value, key); break;
				case 'array':
					var qs = {};
					value.each(function(val, i){
						qs[i] = val;
					});
					result = Hash.toQueryString(qs, key);
				break;
				default: result = key + '=' + encodeURIComponent(value);
			}
			if (value != undefined) queryString.push(result);
		});

		return queryString.join('&');
	}

});

Hash.alias({keyOf: 'indexOf', hasValue: 'contains'});


/*
Script: Event.js
	Contains the Event Native, to make the event object completely crossbrowser.

License:
	MIT-style license.
*/

var Event = new Native({

	name: 'Event',

	initialize: function(event, win){
		win = win || window;
		var doc = win.document;
		event = event || win.event;
		if (event.$extended) return event;
		this.$extended = true;
		var type = event.type;
		var target = event.target || event.srcElement;
		while (target && target.nodeType == 3) target = target.parentNode;

		if (type.test(/key/)){
			var code = event.which || event.keyCode;
			var key = Event.Keys.keyOf(code);
			if (type == 'keydown'){
				var fKey = code - 111;
				if (fKey > 0 && fKey < 13) key = 'f' + fKey;
			}
			key = key || String.fromCharCode(code).toLowerCase();
		} else if (type.match(/(click|mouse|menu)/i)){
			doc = (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
			var page = {
				x: event.pageX || event.clientX + doc.scrollLeft,
				y: event.pageY || event.clientY + doc.scrollTop
			};
			var client = {
				x: (event.pageX) ? event.pageX - win.pageXOffset : event.clientX,
				y: (event.pageY) ? event.pageY - win.pageYOffset : event.clientY
			};
			if (type.match(/DOMMouseScroll|mousewheel/)){
				var wheel = (event.wheelDelta) ? event.wheelDelta / 120 : -(event.detail || 0) / 3;
			}
			var rightClick = (event.which == 3) || (event.button == 2);
			var related = null;
			if (type.match(/over|out/)){
				switch (type){
					case 'mouseover': related = event.relatedTarget || event.fromElement; break;
					case 'mouseout': related = event.relatedTarget || event.toElement;
				}
				if (!(function(){
					while (related && related.nodeType == 3) related = related.parentNode;
					return true;
				}).create({attempt: Browser.Engine.gecko})()) related = false;
			}
		}

		return $extend(this, {
			event: event,
			type: type,

			page: page,
			client: client,
			rightClick: rightClick,

			wheel: wheel,

			relatedTarget: related,
			target: target,

			code: code,
			key: key,

			shift: event.shiftKey,
			control: event.ctrlKey,
			alt: event.altKey,
			meta: event.metaKey
		});
	}

});

Event.Keys = new Hash({
	'enter': 13,
	'up': 38,
	'down': 40,
	'left': 37,
	'right': 39,
	'esc': 27,
	'space': 32,
	'backspace': 8,
	'tab': 9,
	'delete': 46
});

Event.implement({

	stop: function(){
		return this.stopPropagation().preventDefault();
	},

	stopPropagation: function(){
		if (this.event.stopPropagation) this.event.stopPropagation();
		else this.event.cancelBubble = true;
		return this;
	},

	preventDefault: function(){
		if (this.event.preventDefault) this.event.preventDefault();
		else this.event.returnValue = false;
		return this;
	}

});


/*
Script: Class.js
	Contains the Class Function for easily creating, extending, and implementing reusable Classes.

License:
	MIT-style license.
*/

function Class(params){

	if (params instanceof Function) params = {initialize: params};

	var newClass = function(){
		Object.reset(this);
		if (newClass._prototyping) return this;
		this._current = $empty;
		var value = (this.initialize) ? this.initialize.apply(this, arguments) : this;
		delete this._current; delete this.caller;
		return value;
	}.extend(this);

	newClass.implement(params);

	newClass.constructor = Class;
	newClass.prototype.constructor = newClass;

	return newClass;

};

Function.prototype.protect = function(){
	this._protected = true;
	return this;
};

Object.reset = function(object, key){

	if (key == null){
		for (var p in object) Object.reset(object, p);
		return object;
	}

	delete object[key];

	switch ($type(object[key])){
		case 'object':
			var F = function(){};
			F.prototype = object[key];
			var i = new F;
			object[key] = Object.reset(i);
		break;
		case 'array': object[key] = $unlink(object[key]); break;
	}

	return object;

};

new Native({name: 'Class', initialize: Class}).extend({

	instantiate: function(F){
		F._prototyping = true;
		var proto = new F;
		delete F._prototyping;
		return proto;
	},

	wrap: function(self, key, method){
		if (method._origin) method = method._origin;

		return function(){
			if (method._protected && this._current == null) throw new Error('The method "' + key + '" cannot be called.');
			var caller = this.caller, current = this._current;
			this.caller = current; this._current = arguments.callee;
			var result = method.apply(this, arguments);
			this._current = current; this.caller = caller;
			return result;
		}.extend({_owner: self, _origin: method, _name: key});

	}

});

Class.implement({

	implement: function(key, value){

		if ($type(key) == 'object'){
			for (var p in key) this.implement(p, key[p]);
			return this;
		}

		var mutator = Class.Mutators[key];

		if (mutator){
			value = mutator.call(this, value);
			if (value == null) return this;
		}

		var proto = this.prototype;

		switch ($type(value)){

			case 'function':
				if (value._hidden) return this;
				proto[key] = Class.wrap(this, key, value);
			break;

			case 'object':
				var previous = proto[key];
				if ($type(previous) == 'object') $mixin(previous, value);
				else proto[key] = $unlink(value);
			break;

			case 'array':
				proto[key] = $unlink(value);
			break;

			default: proto[key] = value;

		}

		return this;

	}

});

Class.Mutators = {

	Extends: function(parent){

		this.parent = parent;
		this.prototype = Class.instantiate(parent);

		this.implement('parent', function(){
			var name = this.caller._name, previous = this.caller._owner.parent.prototype[name];
			if (!previous) throw new Error('The method "' + name + '" has no parent.');
			return previous.apply(this, arguments);
		}.protect());

	},

	Implements: function(items){
		$splat(items).each(function(item){
			if (item instanceof Function) item = Class.instantiate(item);
			this.implement(item);
		}, this);

	}

};


/*
Script: Class.Extras.js
	Contains Utility Classes that can be implemented into your own Classes to ease the execution of many common tasks.

License:
	MIT-style license.
*/

var Chain = new Class({

	$chain: [],

	chain: function(){
		this.$chain.extend(Array.flatten(arguments));
		return this;
	},

	callChain: function(){
		return (this.$chain.length) ? this.$chain.shift().apply(this, arguments) : false;
	},

	clearChain: function(){
		this.$chain.empty();
		return this;
	}

});

var Events = new Class({

	$events: {},

	addEvent: function(type, fn, internal){
		type = Events.removeOn(type);
		if (fn != $empty){
			this.$events[type] = this.$events[type] || [];
			this.$events[type].include(fn);
			if (internal) fn.internal = true;
		}
		return this;
	},

	addEvents: function(events){
		for (var type in events) this.addEvent(type, events[type]);
		return this;
	},

	fireEvent: function(type, args, delay){
		type = Events.removeOn(type);
		if (!this.$events || !this.$events[type]) return this;
		this.$events[type].each(function(fn){
			fn.create({'bind': this, 'delay': delay, 'arguments': args})();
		}, this);
		return this;
	},

	removeEvent: function(type, fn){
		type = Events.removeOn(type);
		if (!this.$events[type]) return this;
		if (!fn.internal) this.$events[type].erase(fn);
		return this;
	},

	removeEvents: function(events){
		var type;
		if ($type(events) == 'object'){
			for (type in events) this.removeEvent(type, events[type]);
			return this;
		}
		if (events) events = Events.removeOn(events);
		for (type in this.$events){
			if (events && events != type) continue;
			var fns = this.$events[type];
			for (var i = fns.length; i--; i) this.removeEvent(type, fns[i]);
		}
		return this;
	}

});

Events.removeOn = function(string){
	return string.replace(/^on([A-Z])/, function(full, first) {
		return first.toLowerCase();
	});
};

var Options = new Class({

	setOptions: function(){
		this.options = $merge.run([this.options].extend(arguments));
		if (!this.addEvent) return this;
		for (var option in this.options){
			if ($type(this.options[option]) != 'function' || !(/^on[A-Z]/).test(option)) continue;
			this.addEvent(option, this.options[option]);
			delete this.options[option];
		}
		return this;
	}

});


/*
Script: Element.js
	One of the most important items in MooTools. Contains the dollar function, the dollars function, and an handful of cross-browser,
	time-saver methods to let you easily work with HTML Elements.

License:
	MIT-style license.
*/

var Element = new Native({

	name: 'Element',

	legacy: window.Element,

	initialize: function(tag, props){
		var konstructor = Element.Constructors.get(tag);
		if (konstructor) return konstructor(props);
		if (typeof tag == 'string') return document.newElement(tag, props);
		return document.id(tag).set(props);
	},

	afterImplement: function(key, value){
		Element.Prototype[key] = value;
		if (Array[key]) return;
		Elements.implement(key, function(){
			var items = [], elements = true;
			for (var i = 0, j = this.length; i < j; i++){
				var returns = this[i][key].apply(this[i], arguments);
				items.push(returns);
				if (elements) elements = ($type(returns) == 'element');
			}
			return (elements) ? new Elements(items) : items;
		});
	}

});

Element.Prototype = {$family: {name: 'element'}};

Element.Constructors = new Hash;

var IFrame = new Native({

	name: 'IFrame',

	generics: false,

	initialize: function(){
		var params = Array.link(arguments, {properties: Object.type, iframe: $defined});
		var props = params.properties || {};
		var iframe = document.id(params.iframe);
		var onload = props.onload || $empty;
		delete props.onload;
		props.id = props.name = $pick(props.id, props.name, iframe ? (iframe.id || iframe.name) : 'IFrame_' + $time());
		iframe = new Element(iframe || 'iframe', props);
		var onFrameLoad = function(){
			var host = $try(function(){
				return iframe.contentWindow.location.host;
			});
			if (!host || host == window.location.host){
				var win = new Window(iframe.contentWindow);
				new Document(iframe.contentWindow.document);
				$extend(win.Element.prototype, Element.Prototype);
			}
			onload.call(iframe.contentWindow, iframe.contentWindow.document);
		};
		var contentWindow = $try(function(){
			return iframe.contentWindow;
		});
		((contentWindow && contentWindow.document.body) || window.frames[props.id]) ? onFrameLoad() : iframe.addListener('load', onFrameLoad);
		return iframe;
	}

});

var Elements = new Native({

	initialize: function(elements, options){
		options = $extend({ddup: true, cash: true}, options);
		elements = elements || [];
		if (options.ddup || options.cash){
			var uniques = {}, returned = [];
			for (var i = 0, l = elements.length; i < l; i++){
				var el = document.id(elements[i], !options.cash);
				if (options.ddup){
					if (uniques[el.uid]) continue;
					uniques[el.uid] = true;
				}
				returned.push(el);
			}
			elements = returned;
		}
		return (options.cash) ? $extend(elements, this) : elements;
	}

});

Elements.implement({

	filter: function(filter, bind){
		if (!filter) return this;
		return new Elements(Array.filter(this, (typeof filter == 'string') ? function(item){
			return item.match(filter);
		} : filter, bind));
	}

});

Document.implement({

	newElement: function(tag, props){
		if (Browser.Engine.trident && props){
			['name', 'type', 'checked'].each(function(attribute){
				if (!props[attribute]) return;
				tag += ' ' + attribute + '="' + props[attribute] + '"';
				if (attribute != 'checked') delete props[attribute];
			});
			tag = '<' + tag + '>';
		}
		return document.id(this.createElement(tag)).set(props);
	},

	newTextNode: function(text){
		return this.createTextNode(text);
	},

	getDocument: function(){
		return this;
	},

	getWindow: function(){
		return this.window;
	},

	id: (function(){

		var types = {

			string: function(id, nocash, doc){
				id = doc.getElementById(id);
				return (id) ? types.element(id, nocash) : null;
			},

			element: function(el, nocash){
				$uid(el);
				if (!nocash && !el.$family && !(/^object|embed$/i).test(el.tagName)){
					var proto = Element.Prototype;
					for (var p in proto) el[p] = proto[p];
				};
				return el;
			},

			object: function(obj, nocash, doc){
				if (obj.toElement) return types.element(obj.toElement(doc), nocash);
				return null;
			}

		};

		types.textnode = types.whitespace = types.window = types.document = $arguments(0);

		return function(el, nocash, doc){
			if (el && el.$family && el.uid) return el;
			var type = $type(el);
			return (types[type]) ? types[type](el, nocash, doc || document) : null;
		};

	})()

});

if (window.$ == null) Window.implement({
	$: function(el, nc){
		return document.id(el, nc, this.document);
	}
});

Window.implement({

	$$: function(selector){
		if (arguments.length == 1 && typeof selector == 'string') return this.document.getElements(selector);
		var elements = [];
		var args = Array.flatten(arguments);
		for (var i = 0, l = args.length; i < l; i++){
			var item = args[i];
			switch ($type(item)){
				case 'element': elements.push(item); break;
				case 'string': elements.extend(this.document.getElements(item, true));
			}
		}
		return new Elements(elements);
	},

	getDocument: function(){
		return this.document;
	},

	getWindow: function(){
		return this;
	}

});

Native.implement([Element, Document], {

	getElement: function(selector, nocash){
		return document.id(this.getElements(selector, true)[0] || null, nocash);
	},

	getElements: function(tags, nocash){
		tags = tags.split(',');
		var elements = [];
		var ddup = (tags.length > 1);
		tags.each(function(tag){
			var partial = this.getElementsByTagName(tag.trim());
			(ddup) ? elements.extend(partial) : elements = partial;
		}, this);
		return new Elements(elements, {ddup: ddup, cash: !nocash});
	}

});

(function(){

var collected = {}, storage = {};
var props = {input: 'checked', option: 'selected', textarea: (Browser.Engine.webkit && Browser.Engine.version < 420) ? 'innerHTML' : 'value'};

var get = function(uid){
	return (storage[uid] || (storage[uid] = {}));
};

var clean = function(item, retain){
	if (!item) return;
	var uid = item.uid;
	if (Browser.Engine.trident){
		if (item.clearAttributes){
			var clone = retain && item.cloneNode(false);
			item.clearAttributes();
			if (clone) item.mergeAttributes(clone);
		} else if (item.removeEvents){
			item.removeEvents();
		}
		if ((/object/i).test(item.tagName)){
			for (var p in item){
				if (typeof item[p] == 'function') item[p] = $empty;
			}
			Element.dispose(item);
		}
	}
	if (!uid) return;
	collected[uid] = storage[uid] = null;
};

var purge = function(){
	Hash.each(collected, clean);
	if (Browser.Engine.trident) $A(document.getElementsByTagName('object')).each(clean);
	if (window.CollectGarbage) CollectGarbage();
	collected = storage = null;
};

var walk = function(element, walk, start, match, all, nocash){
	var el = element[start || walk];
	var elements = [];
	while (el){
		if (el.nodeType == 1 && (!match || Element.match(el, match))){
			if (!all) return document.id(el, nocash);
			elements.push(el);
		}
		el = el[walk];
	}
	return (all) ? new Elements(elements, {ddup: false, cash: !nocash}) : null;
};

var attributes = {
	'html': 'innerHTML',
	'class': 'className',
	'for': 'htmlFor',
	'defaultValue': 'defaultValue',
	'text': (Browser.Engine.trident || (Browser.Engine.webkit && Browser.Engine.version < 420)) ? 'innerText' : 'textContent'
};
var bools = ['compact', 'nowrap', 'ismap', 'declare', 'noshade', 'checked', 'disabled', 'readonly', 'multiple', 'selected', 'noresize', 'defer'];
var camels = ['value', 'type', 'defaultValue', 'accessKey', 'cellPadding', 'cellSpacing', 'colSpan', 'frameBorder', 'maxLength', 'readOnly', 'rowSpan', 'tabIndex', 'useMap'];

bools = bools.associate(bools);

Hash.extend(attributes, bools);
Hash.extend(attributes, camels.associate(camels.map(String.toLowerCase)));

var inserters = {

	before: function(context, element){
		if (element.parentNode) element.parentNode.insertBefore(context, element);
	},

	after: function(context, element){
		if (!element.parentNode) return;
		var next = element.nextSibling;
		(next) ? element.parentNode.insertBefore(context, next) : element.parentNode.appendChild(context);
	},

	bottom: function(context, element){
		element.appendChild(context);
	},

	top: function(context, element){
		var first = element.firstChild;
		(first) ? element.insertBefore(context, first) : element.appendChild(context);
	}

};

inserters.inside = inserters.bottom;

Hash.each(inserters, function(inserter, where){

	where = where.capitalize();

	Element.implement('inject' + where, function(el){
		inserter(this, document.id(el, true));
		return this;
	});

	Element.implement('grab' + where, function(el){
		inserter(document.id(el, true), this);
		return this;
	});

});

Element.implement({

	set: function(prop, value){
		switch ($type(prop)){
			case 'object':
				for (var p in prop) this.set(p, prop[p]);
				break;
			case 'string':
				var property = Element.Properties.get(prop);
				(property && property.set) ? property.set.apply(this, Array.slice(arguments, 1)) : this.setProperty(prop, value);
		}
		return this;
	},

	get: function(prop){
		var property = Element.Properties.get(prop);
		return (property && property.get) ? property.get.apply(this, Array.slice(arguments, 1)) : this.getProperty(prop);
	},

	erase: function(prop){
		var property = Element.Properties.get(prop);
		(property && property.erase) ? property.erase.apply(this) : this.removeProperty(prop);
		return this;
	},

	setProperty: function(attribute, value){
		var key = attributes[attribute];
		if (value == undefined) return this.removeProperty(attribute);
		if (key && bools[attribute]) value = !!value;
		(key) ? this[key] = value : this.setAttribute(attribute, '' + value);
		return this;
	},

	setProperties: function(attributes){
		for (var attribute in attributes) this.setProperty(attribute, attributes[attribute]);
		return this;
	},

	getProperty: function(attribute){
		var key = attributes[attribute];
		var value = (key) ? this[key] : this.getAttribute(attribute, 2);
		return (bools[attribute]) ? !!value : (key) ? value : value || null;
	},

	getProperties: function(){
		var args = $A(arguments);
		return args.map(this.getProperty, this).associate(args);
	},

	removeProperty: function(attribute){
		var key = attributes[attribute];
		(key) ? this[key] = (key && bools[attribute]) ? false : '' : this.removeAttribute(attribute);
		return this;
	},

	removeProperties: function(){
		Array.each(arguments, this.removeProperty, this);
		return this;
	},

	hasClass: function(className){
		return this.className.contains(className, ' ');
	},

	addClass: function(className){
		if (!this.hasClass(className)) this.className = (this.className + ' ' + className).clean();
		return this;
	},

	removeClass: function(className){
		this.className = this.className.replace(new RegExp('(^|\\s)' + className + '(?:\\s|$)'), '$1');
		return this;
	},

	toggleClass: function(className){
		return this.hasClass(className) ? this.removeClass(className) : this.addClass(className);
	},

	adopt: function(){
		Array.flatten(arguments).each(function(element){
			element = document.id(element, true);
			if (element) this.appendChild(element);
		}, this);
		return this;
	},

	appendText: function(text, where){
		return this.grab(this.getDocument().newTextNode(text), where);
	},

	grab: function(el, where){
		inserters[where || 'bottom'](document.id(el, true), this);
		return this;
	},

	inject: function(el, where){
		inserters[where || 'bottom'](this, document.id(el, true));
		return this;
	},

	replaces: function(el){
		el = document.id(el, true);
		el.parentNode.replaceChild(this, el);
		return this;
	},

	wraps: function(el, where){
		el = document.id(el, true);
		return this.replaces(el).grab(el, where);
	},

	getPrevious: function(match, nocash){
		return walk(this, 'previousSibling', null, match, false, nocash);
	},

	getAllPrevious: function(match, nocash){
		return walk(this, 'previousSibling', null, match, true, nocash);
	},

	getNext: function(match, nocash){
		return walk(this, 'nextSibling', null, match, false, nocash);
	},

	getAllNext: function(match, nocash){
		return walk(this, 'nextSibling', null, match, true, nocash);
	},

	getFirst: function(match, nocash){
		return walk(this, 'nextSibling', 'firstChild', match, false, nocash);
	},

	getLast: function(match, nocash){
		return walk(this, 'previousSibling', 'lastChild', match, false, nocash);
	},

	getParent: function(match, nocash){
		return walk(this, 'parentNode', null, match, false, nocash);
	},

	getParents: function(match, nocash){
		return walk(this, 'parentNode', null, match, true, nocash);
	},

	getSiblings: function(match, nocash) {
		return this.getParent().getChildren(match, nocash).erase(this);
	},

	getChildren: function(match, nocash){
		return walk(this, 'nextSibling', 'firstChild', match, true, nocash);
	},

	getWindow: function(){
		return this.ownerDocument.window;
	},

	getDocument: function(){
		return this.ownerDocument;
	},

	getElementById: function(id, nocash){
		var el = this.ownerDocument.getElementById(id);
		if (!el) return null;
		for (var parent = el.parentNode; parent != this; parent = parent.parentNode){
			if (!parent) return null;
		}
		return document.id(el, nocash);
	},

	getSelected: function(){
		return new Elements($A(this.options).filter(function(option){
			return option.selected;
		}));
	},

	getComputedStyle: function(property){
		if (this.currentStyle) return this.currentStyle[property.camelCase()];
		var computed = this.getDocument().defaultView.getComputedStyle(this, null);
		return (computed) ? computed.getPropertyValue([property.hyphenate()]) : null;
	},

	toQueryString: function(){
		var queryString = [];
		this.getElements('input, select, textarea', true).each(function(el){
			if (!el.name || el.disabled || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return;
			var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
				return opt.value;
			}) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
			$splat(value).each(function(val){
				if (typeof val != 'undefined') queryString.push(el.name + '=' + encodeURIComponent(val));
			});
		});
		return queryString.join('&');
	},

	clone: function(contents, keepid){
		contents = contents !== false;
		var clone = this.cloneNode(contents);
		var clean = function(node, element){
			if (!keepid) node.removeAttribute('id');
			if (Browser.Engine.trident){
				node.clearAttributes();
				node.mergeAttributes(element);
				node.removeAttribute('uid');
				if (node.options){
					var no = node.options, eo = element.options;
					for (var j = no.length; j--;) no[j].selected = eo[j].selected;
				}
			}
			var prop = props[element.tagName.toLowerCase()];
			if (prop && element[prop]) node[prop] = element[prop];
		};

		if (contents){
			var ce = clone.getElementsByTagName('*'), te = this.getElementsByTagName('*');
			for (var i = ce.length; i--;) clean(ce[i], te[i]);
		}

		clean(clone, this);
		return document.id(clone);
	},

	destroy: function(){
		Element.empty(this);
		Element.dispose(this);
		clean(this, true);
		return null;
	},

	empty: function(){
		$A(this.childNodes).each(function(node){
			Element.destroy(node);
		});
		return this;
	},

	dispose: function(){
		return (this.parentNode) ? this.parentNode.removeChild(this) : this;
	},

	hasChild: function(el){
		el = document.id(el, true);
		if (!el) return false;
		if (Browser.Engine.webkit && Browser.Engine.version < 420) return $A(this.getElementsByTagName(el.tagName)).contains(el);
		return (this.contains) ? (this != el && this.contains(el)) : !!(this.compareDocumentPosition(el) & 16);
	},

	match: function(tag){
		return (!tag || (tag == this) || (Element.get(this, 'tag') == tag));
	}

});

Native.implement([Element, Window, Document], {

	addListener: function(type, fn){
		if (type == 'unload'){
			var old = fn, self = this;
			fn = function(){
				self.removeListener('unload', fn);
				old();
			};
		} else {
			collected[this.uid] = this;
		}
		if (this.addEventListener) this.addEventListener(type, fn, false);
		else this.attachEvent('on' + type, fn);
		return this;
	},

	removeListener: function(type, fn){
		if (this.removeEventListener) this.removeEventListener(type, fn, false);
		else this.detachEvent('on' + type, fn);
		return this;
	},

	retrieve: function(property, dflt){
		var storage = get(this.uid), prop = storage[property];
		if (dflt != undefined && prop == undefined) prop = storage[property] = dflt;
		return $pick(prop);
	},

	store: function(property, value){
		var storage = get(this.uid);
		storage[property] = value;
		return this;
	},

	eliminate: function(property){
		var storage = get(this.uid);
		delete storage[property];
		return this;
	}

});

window.addListener('unload', purge);

})();

Element.Properties = new Hash;

Element.Properties.style = {

	set: function(style){
		this.style.cssText = style;
	},

	get: function(){
		return this.style.cssText;
	},

	erase: function(){
		this.style.cssText = '';
	}

};

Element.Properties.tag = {

	get: function(){
		return this.tagName.toLowerCase();
	}

};

Element.Properties.html = (function(){
	var wrapper = document.createElement('div');

	var translations = {
		table: [1, '<table>', '</table>'],
		select: [1, '<select>', '</select>'],
		tbody: [2, '<table><tbody>', '</tbody></table>'],
		tr: [3, '<table><tbody><tr>', '</tr></tbody></table>']
	};
	translations.thead = translations.tfoot = translations.tbody;

	var html = {
		set: function(){
			var html = Array.flatten(arguments).join('');
			var wrap = Browser.Engine.trident && translations[this.get('tag')];
			if (wrap){
				var first = wrapper;
				first.innerHTML = wrap[1] + html + wrap[2];
				for (var i = wrap[0]; i--;) first = first.firstChild;
				this.empty().adopt(first.childNodes);
			} else {
				this.innerHTML = html;
			}
		}
	};

	html.erase = html.set;

	return html;
})();

if (Browser.Engine.webkit && Browser.Engine.version < 420) Element.Properties.text = {
	get: function(){
		if (this.innerText) return this.innerText;
		var temp = this.ownerDocument.newElement('div', {html: this.innerHTML}).inject(this.ownerDocument.body);
		var text = temp.innerText;
		temp.destroy();
		return text;
	}
};


/*
Script: Element.Event.js
	Contains Element methods for dealing with events, and custom Events.

License:
	MIT-style license.
*/

Element.Properties.events = {set: function(events){
	this.addEvents(events);
}};

Native.implement([Element, Window, Document], {

	addEvent: function(type, fn){
		var events = this.retrieve('events', {});
		events[type] = events[type] || {'keys': [], 'values': []};
		if (events[type].keys.contains(fn)) return this;
		events[type].keys.push(fn);
		var realType = type, custom = Element.Events.get(type), condition = fn, self = this;
		if (custom){
			if (custom.onAdd) custom.onAdd.call(this, fn);
			if (custom.condition){
				condition = function(event){
					if (custom.condition.call(this, event)) return fn.call(this, event);
					return true;
				};
			}
			realType = custom.base || realType;
		}
		var defn = function(){
			return fn.call(self);
		};
		var nativeEvent = Element.NativeEvents[realType];
		if (nativeEvent){
			if (nativeEvent == 2){
				defn = function(event){
					event = new Event(event, self.getWindow());
					if (condition.call(self, event) === false) event.stop();
				};
			}
			this.addListener(realType, defn);
		}
		events[type].values.push(defn);
		return this;
	},

	removeEvent: function(type, fn){
		var events = this.retrieve('events');
		if (!events || !events[type]) return this;
		var pos = events[type].keys.indexOf(fn);
		if (pos == -1) return this;
		events[type].keys.splice(pos, 1);
		var value = events[type].values.splice(pos, 1)[0];
		var custom = Element.Events.get(type);
		if (custom){
			if (custom.onRemove) custom.onRemove.call(this, fn);
			type = custom.base || type;
		}
		return (Element.NativeEvents[type]) ? this.removeListener(type, value) : this;
	},

	addEvents: function(events){
		for (var event in events) this.addEvent(event, events[event]);
		return this;
	},

	removeEvents: function(events){
		var type;
		if ($type(events) == 'object'){
			for (type in events) this.removeEvent(type, events[type]);
			return this;
		}
		var attached = this.retrieve('events');
		if (!attached) return this;
		if (!events){
			for (type in attached) this.removeEvents(type);
			this.eliminate('events');
		} else if (attached[events]){
			while (attached[events].keys[0]) this.removeEvent(events, attached[events].keys[0]);
			attached[events] = null;
		}
		return this;
	},

	fireEvent: function(type, args, delay){
		var events = this.retrieve('events');
		if (!events || !events[type]) return this;
		events[type].keys.each(function(fn){
			fn.create({'bind': this, 'delay': delay, 'arguments': args})();
		}, this);
		return this;
	},

	cloneEvents: function(from, type){
		from = document.id(from);
		var fevents = from.retrieve('events');
		if (!fevents) return this;
		if (!type){
			for (var evType in fevents) this.cloneEvents(from, evType);
		} else if (fevents[type]){
			fevents[type].keys.each(function(fn){
				this.addEvent(type, fn);
			}, this);
		}
		return this;
	}

});

Element.NativeEvents = {
	click: 2, dblclick: 2, mouseup: 2, mousedown: 2, contextmenu: 2, //mouse buttons
	mousewheel: 2, DOMMouseScroll: 2, //mouse wheel
	mouseover: 2, mouseout: 2, mousemove: 2, selectstart: 2, selectend: 2, //mouse movement
	keydown: 2, keypress: 2, keyup: 2, //keyboard
	focus: 2, blur: 2, change: 2, reset: 2, select: 2, submit: 2, //form elements
	load: 1, unload: 1, beforeunload: 2, resize: 1, move: 1, DOMContentLoaded: 1, readystatechange: 1, //window
	error: 1, abort: 1, scroll: 1 //misc
};

(function(){

var $check = function(event){
	var related = event.relatedTarget;
	if (related == undefined) return true;
	if (related === false) return false;
	return ($type(this) != 'document' && related != this && related.prefix != 'xul' && !this.hasChild(related));
};

Element.Events = new Hash({

	mouseenter: {
		base: 'mouseover',
		condition: $check
	},

	mouseleave: {
		base: 'mouseout',
		condition: $check
	},

	mousewheel: {
		base: (Browser.Engine.gecko) ? 'DOMMouseScroll' : 'mousewheel'
	}

});

})();


/*
Script: Element.Style.js
	Contains methods for interacting with the styles of Elements in a fashionable way.

License:
	MIT-style license.
*/

Element.Properties.styles = {set: function(styles){
	this.setStyles(styles);
}};

Element.Properties.opacity = {

	set: function(opacity, novisibility){
		if (!novisibility){
			if (opacity == 0){
				if (this.style.visibility != 'hidden') this.style.visibility = 'hidden';
			} else {
				if (this.style.visibility != 'visible') this.style.visibility = 'visible';
			}
		}
		if (!this.currentStyle || !this.currentStyle.hasLayout) this.style.zoom = 1;
		if (Browser.Engine.trident) this.style.filter = (opacity == 1) ? '' : 'alpha(opacity=' + opacity * 100 + ')';
		this.style.opacity = opacity;
		this.store('opacity', opacity);
	},

	get: function(){
		return this.retrieve('opacity', 1);
	}

};

Element.implement({

	setOpacity: function(value){
		return this.set('opacity', value, true);
	},

	getOpacity: function(){
		return this.get('opacity');
	},

	setStyle: function(property, value){
		switch (property){
			case 'opacity': return this.set('opacity', parseFloat(value));
			case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
		}
		property = property.camelCase();
		if ($type(value) != 'string'){
			var map = (Element.Styles.get(property) || '@').split(' ');
			value = $splat(value).map(function(val, i){
				if (!map[i]) return '';
				return ($type(val) == 'number') ? map[i].replace('@', Math.round(val)) : val;
			}).join(' ');
		} else if (value == String(Number(value))){
			value = Math.round(value);
		}
		this.style[property] = value;
		return this;
	},

	getStyle: function(property){
		switch (property){
			case 'opacity': return this.get('opacity');
			case 'float': property = (Browser.Engine.trident) ? 'styleFloat' : 'cssFloat';
		}
		property = property.camelCase();
		var result = this.style[property];
		if (!$chk(result)){
			result = [];
			for (var style in Element.ShortStyles){
				if (property != style) continue;
				for (var s in Element.ShortStyles[style]) result.push(this.getStyle(s));
				return result.join(' ');
			}
			result = this.getComputedStyle(property);
		}
		if (result){
			result = String(result);
			var color = result.match(/rgba?\([\d\s,]+\)/);
			if (color) result = result.replace(color[0], color[0].rgbToHex());
		}
		if (Browser.Engine.presto || (Browser.Engine.trident && !$chk(parseInt(result, 10)))){
			if (property.test(/^(height|width)$/)){
				var values = (property == 'width') ? ['left', 'right'] : ['top', 'bottom'], size = 0;
				values.each(function(value){
					size += this.getStyle('border-' + value + '-width').toInt() + this.getStyle('padding-' + value).toInt();
				}, this);
				return this['offset' + property.capitalize()] - size + 'px';
			}
			if ((Browser.Engine.presto) && String(result).test('px')) return result;
			if (property.test(/(border(.+)Width|margin|padding)/)) return '0px';
		}
		return result;
	},

	setStyles: function(styles){
		for (var style in styles) this.setStyle(style, styles[style]);
		return this;
	},

	getStyles: function(){
		var result = {};
		Array.flatten(arguments).each(function(key){
			result[key] = this.getStyle(key);
		}, this);
		return result;
	}

});

Element.Styles = new Hash({
	left: '@px', top: '@px', bottom: '@px', right: '@px',
	width: '@px', height: '@px', maxWidth: '@px', maxHeight: '@px', minWidth: '@px', minHeight: '@px',
	backgroundColor: 'rgb(@, @, @)', backgroundPosition: '@px @px', color: 'rgb(@, @, @)',
	fontSize: '@px', letterSpacing: '@px', lineHeight: '@px', clip: 'rect(@px @px @px @px)',
	margin: '@px @px @px @px', padding: '@px @px @px @px', border: '@px @ rgb(@, @, @) @px @ rgb(@, @, @) @px @ rgb(@, @, @)',
	borderWidth: '@px @px @px @px', borderStyle: '@ @ @ @', borderColor: 'rgb(@, @, @) rgb(@, @, @) rgb(@, @, @) rgb(@, @, @)',
	zIndex: '@', 'zoom': '@', fontWeight: '@', textIndent: '@px', opacity: '@'
});

Element.ShortStyles = {margin: {}, padding: {}, border: {}, borderWidth: {}, borderStyle: {}, borderColor: {}};

['Top', 'Right', 'Bottom', 'Left'].each(function(direction){
	var Short = Element.ShortStyles;
	var All = Element.Styles;
	['margin', 'padding'].each(function(style){
		var sd = style + direction;
		Short[style][sd] = All[sd] = '@px';
	});
	var bd = 'border' + direction;
	Short.border[bd] = All[bd] = '@px @ rgb(@, @, @)';
	var bdw = bd + 'Width', bds = bd + 'Style', bdc = bd + 'Color';
	Short[bd] = {};
	Short.borderWidth[bdw] = Short[bd][bdw] = All[bdw] = '@px';
	Short.borderStyle[bds] = Short[bd][bds] = All[bds] = '@';
	Short.borderColor[bdc] = Short[bd][bdc] = All[bdc] = 'rgb(@, @, @)';
});


/*
Script: Element.Dimensions.js
	Contains methods to work with size, scroll, or positioning of Elements and the window object.

License:
	MIT-style license.

Credits:
	- Element positioning based on the [qooxdoo](http://qooxdoo.org/) code and smart browser fixes, [LGPL License](http://www.gnu.org/licenses/lgpl.html).
	- Viewport dimensions based on [YUI](http://developer.yahoo.com/yui/) code, [BSD License](http://developer.yahoo.com/yui/license.html).
*/

(function(){

Element.implement({

	scrollTo: function(x, y){
		if (isBody(this)){
			this.getWindow().scrollTo(x, y);
		} else {
			this.scrollLeft = x;
			this.scrollTop = y;
		}
		return this;
	},

	getSize: function(){
		if (isBody(this)) return this.getWindow().getSize();
		return {x: this.offsetWidth, y: this.offsetHeight};
	},

	getScrollSize: function(){
		if (isBody(this)) return this.getWindow().getScrollSize();
		return {x: this.scrollWidth, y: this.scrollHeight};
	},

	getScroll: function(){
		if (isBody(this)) return this.getWindow().getScroll();
		return {x: this.scrollLeft, y: this.scrollTop};
	},

	getScrolls: function(){
		var element = this, position = {x: 0, y: 0};
		while (element && !isBody(element)){
			position.x += element.scrollLeft;
			position.y += element.scrollTop;
			element = element.parentNode;
		}
		return position;
	},

	getOffsetParent: function(){
		var element = this;
		if (isBody(element)) return null;
		if (!Browser.Engine.trident) return element.offsetParent;
		while ((element = element.parentNode) && !isBody(element)){
			if (styleString(element, 'position') != 'static') return element;
		}
		return null;
	},

	getOffsets: function(){
		if (this.getBoundingClientRect){
			var bound = this.getBoundingClientRect(),
			html = document.id(this.getDocument().documentElement),
			scroll = html.getScroll(),
			isFixed = (styleString(this, 'position') == 'fixed');
			return {
				x: parseInt(bound.left, 10) + ((isFixed) ? 0 : scroll.x) - html.clientLeft,
				y: parseInt(bound.top, 10) +  ((isFixed) ? 0 : scroll.y) - html.clientTop
			};
		}

		var element = this, position = {x: 0, y: 0};
		if (isBody(this)) return position;

		while (element && !isBody(element)){
			position.x += element.offsetLeft;
			position.y += element.offsetTop;

			if (Browser.Engine.gecko){
				if (!borderBox(element)){
					position.x += leftBorder(element);
					position.y += topBorder(element);
				}
				var parent = element.parentNode;
				if (parent && styleString(parent, 'overflow') != 'visible'){
					position.x += leftBorder(parent);
					position.y += topBorder(parent);
				}
			} else if (element != this && Browser.Engine.webkit){
				position.x += leftBorder(element);
				position.y += topBorder(element);
			}

			element = element.offsetParent;
		}
		if (Browser.Engine.gecko && !borderBox(this)){
			position.x -= leftBorder(this);
			position.y -= topBorder(this);
		}
		return position;
	},

	getPosition: function(relative){
		if (isBody(this)) return {x: 0, y: 0};
		var offset = this.getOffsets(), scroll = this.getScrolls();
		var position = {x: offset.x - scroll.x, y: offset.y - scroll.y};
		var relativePosition = (relative && (relative = document.id(relative))) ? relative.getPosition() : {x: 0, y: 0};
		return {x: position.x - relativePosition.x, y: position.y - relativePosition.y};
	},

	getCoordinates: function(element){
		if (isBody(this)) return this.getWindow().getCoordinates();
		var position = this.getPosition(element), size = this.getSize();
		var obj = {left: position.x, top: position.y, width: size.x, height: size.y};
		obj.right = obj.left + obj.width;
		obj.bottom = obj.top + obj.height;
		return obj;
	},

	computePosition: function(obj){
		return {left: obj.x - styleNumber(this, 'margin-left'), top: obj.y - styleNumber(this, 'margin-top')};
	},

	setPosition: function(obj){
		return this.setStyles(this.computePosition(obj));
	}

});


Native.implement([Document, Window], {

	getSize: function(){
		if (Browser.Engine.presto || Browser.Engine.webkit) {
			var win = this.getWindow();
			return {x: win.innerWidth, y: win.innerHeight};
		}
		var doc = getCompatElement(this);
		return {x: doc.clientWidth, y: doc.clientHeight};
	},

	getScroll: function(){
		var win = this.getWindow(), doc = getCompatElement(this);
		return {x: win.pageXOffset || doc.scrollLeft, y: win.pageYOffset || doc.scrollTop};
	},

	getScrollSize: function(){
		var doc = getCompatElement(this), min = this.getSize();
		return {x: Math.max(doc.scrollWidth, min.x), y: Math.max(doc.scrollHeight, min.y)};
	},

	getPosition: function(){
		return {x: 0, y: 0};
	},

	getCoordinates: function(){
		var size = this.getSize();
		return {top: 0, left: 0, bottom: size.y, right: size.x, height: size.y, width: size.x};
	}

});

// private methods

var styleString = Element.getComputedStyle;

function styleNumber(element, style){
	return styleString(element, style).toInt() || 0;
};

function borderBox(element){
	return styleString(element, '-moz-box-sizing') == 'border-box';
};

function topBorder(element){
	return styleNumber(element, 'border-top-width');
};

function leftBorder(element){
	return styleNumber(element, 'border-left-width');
};

function isBody(element){
	return (/^(?:body|html)$/i).test(element.tagName);
};

function getCompatElement(element){
	var doc = element.getDocument();
	return (!doc.compatMode || doc.compatMode == 'CSS1Compat') ? doc.html : doc.body;
};

})();

//aliases
Element.alias('setPosition', 'position'); //compatability

Native.implement([Window, Document, Element], {

	getHeight: function(){
		return this.getSize().y;
	},

	getWidth: function(){
		return this.getSize().x;
	},

	getScrollTop: function(){
		return this.getScroll().y;
	},

	getScrollLeft: function(){
		return this.getScroll().x;
	},

	getScrollHeight: function(){
		return this.getScrollSize().y;
	},

	getScrollWidth: function(){
		return this.getScrollSize().x;
	},

	getTop: function(){
		return this.getPosition().y;
	},

	getLeft: function(){
		return this.getPosition().x;
	}

});


/*
Script: Selectors.js
	Adds advanced CSS Querying capabilities for targeting elements. Also includes pseudoselectors support.

License:
	MIT-style license.
*/

Native.implement([Document, Element], {

	getElements: function(expression, nocash){
		expression = expression.split(',');
		var items, local = {};
		for (var i = 0, l = expression.length; i < l; i++){
			var selector = expression[i], elements = Selectors.Utils.search(this, selector, local);
			if (i != 0 && elements.item) elements = $A(elements);
			items = (i == 0) ? elements : (items.item) ? $A(items).concat(elements) : items.concat(elements);
		}
		return new Elements(items, {ddup: (expression.length > 1), cash: !nocash});
	}

});

Element.implement({

	match: function(selector){
		if (!selector || (selector == this)) return true;
		var tagid = Selectors.Utils.parseTagAndID(selector);
		var tag = tagid[0], id = tagid[1];
		if (!Selectors.Filters.byID(this, id) || !Selectors.Filters.byTag(this, tag)) return false;
		var parsed = Selectors.Utils.parseSelector(selector);
		return (parsed) ? Selectors.Utils.filter(this, parsed, {}) : true;
	}

});

var Selectors = {Cache: {nth: {}, parsed: {}}};

Selectors.RegExps = {
	id: (/#([\w-]+)/),
	tag: (/^(\w+|\*)/),
	quick: (/^(\w+|\*)$/),
	splitter: (/\s*([+>~\s])\s*([a-zA-Z#.*:\[])/g),
	combined: (/\.([\w-]+)|\[(\w+)(?:([!*^$~|]?=)(["']?)([^\4]*?)\4)?\]|:([\w-]+)(?:\(["']?(.*?)?["']?\)|$)/g)
};

Selectors.Utils = {

	chk: function(item, uniques){
		if (!uniques) return true;
		var uid = $uid(item);
		if (!uniques[uid]) return uniques[uid] = true;
		return false;
	},

	parseNthArgument: function(argument){
		if (Selectors.Cache.nth[argument]) return Selectors.Cache.nth[argument];
		var parsed = argument.match(/^([+-]?\d*)?([a-z]+)?([+-]?\d*)?$/);
		if (!parsed) return false;
		var inta = parseInt(parsed[1], 10);
		var a = (inta || inta === 0) ? inta : 1;
		var special = parsed[2] || false;
		var b = parseInt(parsed[3], 10) || 0;
		if (a != 0){
			b--;
			while (b < 1) b += a;
			while (b >= a) b -= a;
		} else {
			a = b;
			special = 'index';
		}
		switch (special){
			case 'n': parsed = {a: a, b: b, special: 'n'}; break;
			case 'odd': parsed = {a: 2, b: 0, special: 'n'}; break;
			case 'even': parsed = {a: 2, b: 1, special: 'n'}; break;
			case 'first': parsed = {a: 0, special: 'index'}; break;
			case 'last': parsed = {special: 'last-child'}; break;
			case 'only': parsed = {special: 'only-child'}; break;
			default: parsed = {a: (a - 1), special: 'index'};
		}

		return Selectors.Cache.nth[argument] = parsed;
	},

	parseSelector: function(selector){
		if (Selectors.Cache.parsed[selector]) return Selectors.Cache.parsed[selector];
		var m, parsed = {classes: [], pseudos: [], attributes: []};
		while ((m = Selectors.RegExps.combined.exec(selector))){
			var cn = m[1], an = m[2], ao = m[3], av = m[5], pn = m[6], pa = m[7];
			if (cn){
				parsed.classes.push(cn);
			} else if (pn){
				var parser = Selectors.Pseudo.get(pn);
				if (parser) parsed.pseudos.push({parser: parser, argument: pa});
				else parsed.attributes.push({name: pn, operator: '=', value: pa});
			} else if (an){
				parsed.attributes.push({name: an, operator: ao, value: av});
			}
		}
		if (!parsed.classes.length) delete parsed.classes;
		if (!parsed.attributes.length) delete parsed.attributes;
		if (!parsed.pseudos.length) delete parsed.pseudos;
		if (!parsed.classes && !parsed.attributes && !parsed.pseudos) parsed = null;
		return Selectors.Cache.parsed[selector] = parsed;
	},

	parseTagAndID: function(selector){
		var tag = selector.match(Selectors.RegExps.tag);
		var id = selector.match(Selectors.RegExps.id);
		return [(tag) ? tag[1] : '*', (id) ? id[1] : false];
	},

	filter: function(item, parsed, local){
		var i;
		if (parsed.classes){
			for (i = parsed.classes.length; i--; i){
				var cn = parsed.classes[i];
				if (!Selectors.Filters.byClass(item, cn)) return false;
			}
		}
		if (parsed.attributes){
			for (i = parsed.attributes.length; i--; i){
				var att = parsed.attributes[i];
				if (!Selectors.Filters.byAttribute(item, att.name, att.operator, att.value)) return false;
			}
		}
		if (parsed.pseudos){
			for (i = parsed.pseudos.length; i--; i){
				var psd = parsed.pseudos[i];
				if (!Selectors.Filters.byPseudo(item, psd.parser, psd.argument, local)) return false;
			}
		}
		return true;
	},

	getByTagAndID: function(ctx, tag, id){
		if (id){
			var item = (ctx.getElementById) ? ctx.getElementById(id, true) : Element.getElementById(ctx, id, true);
			return (item && Selectors.Filters.byTag(item, tag)) ? [item] : [];
		} else {
			return ctx.getElementsByTagName(tag);
		}
	},

	search: function(self, expression, local){
		var splitters = [];

		var selectors = expression.trim().replace(Selectors.RegExps.splitter, function(m0, m1, m2){
			splitters.push(m1);
			return ':)' + m2;
		}).split(':)');

		var items, filtered, item;

		for (var i = 0, l = selectors.length; i < l; i++){

			var selector = selectors[i];

			if (i == 0 && Selectors.RegExps.quick.test(selector)){
				items = self.getElementsByTagName(selector);
				continue;
			}

			var splitter = splitters[i - 1];

			var tagid = Selectors.Utils.parseTagAndID(selector);
			var tag = tagid[0], id = tagid[1];

			if (i == 0){
				items = Selectors.Utils.getByTagAndID(self, tag, id);
			} else {
				var uniques = {}, found = [];
				for (var j = 0, k = items.length; j < k; j++) found = Selectors.Getters[splitter](found, items[j], tag, id, uniques);
				items = found;
			}

			var parsed = Selectors.Utils.parseSelector(selector);

			if (parsed){
				filtered = [];
				for (var m = 0, n = items.length; m < n; m++){
					item = items[m];
					if (Selectors.Utils.filter(item, parsed, local)) filtered.push(item);
				}
				items = filtered;
			}

		}

		return items;

	}

};

Selectors.Getters = {

	' ': function(found, self, tag, id, uniques){
		var items = Selectors.Utils.getByTagAndID(self, tag, id);
		for (var i = 0, l = items.length; i < l; i++){
			var item = items[i];
			if (Selectors.Utils.chk(item, uniques)) found.push(item);
		}
		return found;
	},

	'>': function(found, self, tag, id, uniques){
		var children = Selectors.Utils.getByTagAndID(self, tag, id);
		for (var i = 0, l = children.length; i < l; i++){
			var child = children[i];
			if (child.parentNode == self && Selectors.Utils.chk(child, uniques)) found.push(child);
		}
		return found;
	},

	'+': function(found, self, tag, id, uniques){
		while ((self = self.nextSibling)){
			if (self.nodeType == 1){
				if (Selectors.Utils.chk(self, uniques) && Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
				break;
			}
		}
		return found;
	},

	'~': function(found, self, tag, id, uniques){
		while ((self = self.nextSibling)){
			if (self.nodeType == 1){
				if (!Selectors.Utils.chk(self, uniques)) break;
				if (Selectors.Filters.byTag(self, tag) && Selectors.Filters.byID(self, id)) found.push(self);
			}
		}
		return found;
	}

};

Selectors.Filters = {

	byTag: function(self, tag){
		return (tag == '*' || (self.tagName && self.tagName.toLowerCase() == tag));
	},

	byID: function(self, id){
		return (!id || (self.id && self.id == id));
	},

	byClass: function(self, klass){
		return (self.className && self.className.contains(klass, ' '));
	},

	byPseudo: function(self, parser, argument, local){
		return parser.call(self, argument, local);
	},

	byAttribute: function(self, name, operator, value){
		var result = Element.prototype.getProperty.call(self, name);
		if (!result) return (operator == '!=');
		if (!operator || value == undefined) return true;
		switch (operator){
			case '=': return (result == value);
			case '*=': return (result.contains(value));
			case '^=': return (result.substr(0, value.length) == value);
			case '$=': return (result.substr(result.length - value.length) == value);
			case '!=': return (result != value);
			case '~=': return result.contains(value, ' ');
			case '|=': return result.contains(value, '-');
		}
		return false;
	}

};

Selectors.Pseudo = new Hash({

	// w3c pseudo selectors

	checked: function(){
		return this.checked;
	},

	empty: function(){
		return !(this.innerText || this.textContent || '').length;
	},

	not: function(selector){
		return !Element.match(this, selector);
	},

	contains: function(text){
		return (this.innerText || this.textContent || '').contains(text);
	},

	'first-child': function(){
		return Selectors.Pseudo.index.call(this, 0);
	},

	'last-child': function(){
		var element = this;
		while ((element = element.nextSibling)){
			if (element.nodeType == 1) return false;
		}
		return true;
	},

	'only-child': function(){
		var prev = this;
		while ((prev = prev.previousSibling)){
			if (prev.nodeType == 1) return false;
		}
		var next = this;
		while ((next = next.nextSibling)){
			if (next.nodeType == 1) return false;
		}
		return true;
	},

	'nth-child': function(argument, local){
		argument = (argument == undefined) ? 'n' : argument;
		var parsed = Selectors.Utils.parseNthArgument(argument);
		if (parsed.special != 'n') return Selectors.Pseudo[parsed.special].call(this, parsed.a, local);
		var count = 0;
		local.positions = local.positions || {};
		var uid = $uid(this);
		if (!local.positions[uid]){
			var self = this;
			while ((self = self.previousSibling)){
				if (self.nodeType != 1) continue;
				count ++;
				var position = local.positions[$uid(self)];
				if (position != undefined){
					count = position + count;
					break;
				}
			}
			local.positions[uid] = count;
		}
		return (local.positions[uid] % parsed.a == parsed.b);
	},

	// custom pseudo selectors

	index: function(index){
		var element = this, count = 0;
		while ((element = element.previousSibling)){
			if (element.nodeType == 1 && ++count > index) return false;
		}
		return (count == index);
	},

	even: function(argument, local){
		return Selectors.Pseudo['nth-child'].call(this, '2n+1', local);
	},

	odd: function(argument, local){
		return Selectors.Pseudo['nth-child'].call(this, '2n', local);
	},

	selected: function(){
		return this.selected;
	},

	enabled: function(){
		return (this.disabled === false);
	}

});


/*
Script: Domready.js
	Contains the domready custom event.

License:
	MIT-style license.
*/

Element.Events.domready = {

	onAdd: function(fn){
		if (Browser.loaded) fn.call(this);
	}

};

(function(){

	var domready = function(){
		if (Browser.loaded) return;
		Browser.loaded = true;
		window.fireEvent('domready');
		document.fireEvent('domready');
	};

	if (Browser.Engine.trident){
		var temp = document.createElement('div');
		(function(){
			($try(function(){
				temp.doScroll(); // Technique by Diego Perini
				return document.id(temp).inject(document.body).set('html', 'temp').dispose();
			})) ? domready() : arguments.callee.delay(50);
		})();
	} else if (Browser.Engine.webkit && Browser.Engine.version < 525){
		(function(){
			(['loaded', 'complete'].contains(document.readyState)) ? domready() : arguments.callee.delay(50);
		})();
	} else {
		window.addEvent('load', domready);
		document.addEvent('DOMContentLoaded', domready);
	}

})();


/*
Script: JSON.js
	JSON encoder and decoder.

License:
	MIT-style license.

See Also:
	<http://www.json.org/>
*/

var JSON = new Hash({

	$specialChars: {'\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"' : '\\"', '\\': '\\\\'},

	$replaceChars: function(chr){
		return JSON.$specialChars[chr] || '\\u00' + Math.floor(chr.charCodeAt() / 16).toString(16) + (chr.charCodeAt() % 16).toString(16);
	},

	encode: function(obj){
		switch ($type(obj)){
			case 'string':
				return '"' + obj.replace(/[\x00-\x1f\\"]/g, JSON.$replaceChars) + '"';
			case 'array':
				return '[' + String(obj.map(JSON.encode).clean()) + ']';
			case 'object': case 'hash':
				var string = [];
				Hash.each(obj, function(value, key){
					var json = JSON.encode(value);
					if (json) string.push(JSON.encode(key) + ':' + json);
				});
				return '{' + string + '}';
			case 'number': case 'boolean': return String(obj);
			case false: return 'null';
		}
		return null;
	},

	decode: function(string, secure){
		if ($type(string) != 'string' || !string.length) return null;
		if (secure && !(/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(string.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, ''))) return null;
		return eval('(' + string + ')');
	}

});

Native.implement([Hash, Array, String, Number], {

	toJSON: function(){
		return JSON.encode(this);
	}

});


/*
Script: Cookie.js
	Class for creating, loading, and saving browser Cookies.

License:
	MIT-style license.

Credits:
	Based on the functions by Peter-Paul Koch (http://quirksmode.org).
*/

var Cookie = new Class({

	Implements: Options,

	options: {
		path: false,
		domain: false,
		duration: false,
		secure: false,
		document: document
	},

	initialize: function(key, options){
		this.key = key;
		this.setOptions(options);
	},

	write: function(value){
		value = encodeURIComponent(value);
		if (this.options.domain) value += '; domain=' + this.options.domain;
		if (this.options.path) value += '; path=' + this.options.path;
		if (this.options.duration){
			var date = new Date();
			date.setTime(date.getTime() + this.options.duration * 24 * 60 * 60 * 1000);
			value += '; expires=' + date.toGMTString();
		}
		if (this.options.secure) value += '; secure';
		this.options.document.cookie = this.key + '=' + value;
		return this;
	},

	read: function(){
		var value = this.options.document.cookie.match('(?:^|;)\\s*' + this.key.escapeRegExp() + '=([^;]*)');
		return (value) ? decodeURIComponent(value[1]) : null;
	},

	dispose: function(){
		new Cookie(this.key, $merge(this.options, {duration: -1})).write('');
		return this;
	}

});

Cookie.write = function(key, value, options){
	return new Cookie(key, options).write(value);
};

Cookie.read = function(key){
	return new Cookie(key).read();
};

Cookie.dispose = function(key, options){
	return new Cookie(key, options).dispose();
};


/*
Script: Swiff.js
	Wrapper for embedding SWF movies. Supports (and fixes) External Interface Communication.

License:
	MIT-style license.

Credits:
	Flash detection & Internet Explorer + Flash Player 9 fix inspired by SWFObject.
*/

var Swiff = new Class({

	Implements: [Options],

	options: {
		id: null,
		height: 1,
		width: 1,
		container: null,
		properties: {},
		params: {
			quality: 'high',
			allowScriptAccess: 'always',
			wMode: 'transparent',
			swLiveConnect: true
		},
		callBacks: {},
		vars: {}
	},

	toElement: function(){
		return this.object;
	},

	initialize: function(path, options){
		this.instance = 'Swiff_' + $time();

		this.setOptions(options);
		options = this.options;
		var id = this.id = options.id || this.instance;
		var container = document.id(options.container);

		Swiff.CallBacks[this.instance] = {};

		var params = options.params, vars = options.vars, callBacks = options.callBacks;
		var properties = $extend({height: options.height, width: options.width}, options.properties);

		var self = this;

		for (var callBack in callBacks){
			Swiff.CallBacks[this.instance][callBack] = (function(option){
				return function(){
					return option.apply(self.object, arguments);
				};
			})(callBacks[callBack]);
			vars[callBack] = 'Swiff.CallBacks.' + this.instance + '.' + callBack;
		}

		params.flashVars = Hash.toQueryString(vars);
		if (Browser.Engine.trident){
			properties.classid = 'clsid:D27CDB6E-AE6D-11cf-96B8-444553540000';
			params.movie = path;
		} else {
			properties.type = 'application/x-shockwave-flash';
			properties.data = path;
		}
		var build = '<object id="' + id + '"';
		for (var property in properties) build += ' ' + property + '="' + properties[property] + '"';
		build += '>';
		for (var param in params){
			if (params[param]) build += '<param name="' + param + '" value="' + params[param] + '" />';
		}
		build += '</object>';
		this.object = ((container) ? container.empty() : new Element('div')).set('html', build).firstChild;
	},

	replaces: function(element){
		element = document.id(element, true);
		element.parentNode.replaceChild(this.toElement(), element);
		return this;
	},

	inject: function(element){
		document.id(element, true).appendChild(this.toElement());
		return this;
	},

	remote: function(){
		return Swiff.remote.apply(Swiff, [this.toElement()].extend(arguments));
	}

});

Swiff.CallBacks = {};

Swiff.remote = function(obj, fn){
	var rs = obj.CallFunction('<invoke name="' + fn + '" returntype="javascript">' + __flash__argumentsToXML(arguments, 2) + '</invoke>');
	return eval(rs);
};


/*
Script: Fx.js
	Contains the basic animation logic to be extended by all other Fx Classes.

License:
	MIT-style license.
*/

var Fx = new Class({

	Implements: [Chain, Events, Options],

	options: {
		/*
		onStart: $empty,
		onCancel: $empty,
		onComplete: $empty,
		*/
		fps: 50,
		unit: false,
		duration: 500,
		link: 'ignore'
	},

	initialize: function(options){
		this.subject = this.subject || this;
		this.setOptions(options);
		this.options.duration = Fx.Durations[this.options.duration] || this.options.duration.toInt();
		var wait = this.options.wait;
		if (wait === false) this.options.link = 'cancel';
	},

	getTransition: function(){
		return function(p){
			return -(Math.cos(Math.PI * p) - 1) / 2;
		};
	},

	step: function(){
		var time = $time();
		if (time < this.time + this.options.duration){
			var delta = this.transition((time - this.time) / this.options.duration);
			this.set(this.compute(this.from, this.to, delta));
		} else {
			this.set(this.compute(this.from, this.to, 1));
			this.complete();
		}
	},

	set: function(now){
		return now;
	},

	compute: function(from, to, delta){
		return Fx.compute(from, to, delta);
	},

	check: function(){
		if (!this.timer) return true;
		switch (this.options.link){
			case 'cancel': this.cancel(); return true;
			case 'chain': this.chain(this.caller.bind(this, arguments)); return false;
		}
		return false;
	},

	start: function(from, to){
		if (!this.check(from, to)) return this;
		this.from = from;
		this.to = to;
		this.time = 0;
		this.transition = this.getTransition();
		this.startTimer();
		this.onStart();
		return this;
	},

	complete: function(){
		if (this.stopTimer()) this.onComplete();
		return this;
	},

	cancel: function(){
		if (this.stopTimer()) this.onCancel();
		return this;
	},

	onStart: function(){
		this.fireEvent('start', this.subject);
	},

	onComplete: function(){
		this.fireEvent('complete', this.subject);
		if (!this.callChain()) this.fireEvent('chainComplete', this.subject);
	},

	onCancel: function(){
		this.fireEvent('cancel', this.subject).clearChain();
	},

	pause: function(){
		this.stopTimer();
		return this;
	},

	resume: function(){
		this.startTimer();
		return this;
	},

	stopTimer: function(){
		if (!this.timer) return false;
		this.time = $time() - this.time;
		this.timer = $clear(this.timer);
		return true;
	},

	startTimer: function(){
		if (this.timer) return false;
		this.time = $time() - this.time;
		this.timer = this.step.periodical(Math.round(1000 / this.options.fps), this);
		return true;
	}

});

Fx.compute = function(from, to, delta){
	return (to - from) * delta + from;
};

Fx.Durations = {'short': 250, 'normal': 500, 'long': 1000};


/*
Script: Fx.CSS.js
	Contains the CSS animation logic. Used by Fx.Tween, Fx.Morph, Fx.Elements.

License:
	MIT-style license.
*/

Fx.CSS = new Class({

	Extends: Fx,

	//prepares the base from/to object

	prepare: function(element, property, values){
		values = $splat(values);
		var values1 = values[1];
		if (!$chk(values1)){
			values[1] = values[0];
			values[0] = element.getStyle(property);
		}
		var parsed = values.map(this.parse);
		return {from: parsed[0], to: parsed[1]};
	},

	//parses a value into an array

	parse: function(value){
		value = $lambda(value)();
		value = (typeof value == 'string') ? value.split(' ') : $splat(value);
		return value.map(function(val){
			val = String(val);
			var found = false;
			Fx.CSS.Parsers.each(function(parser, key){
				if (found) return;
				var parsed = parser.parse(val);
				if ($chk(parsed)) found = {value: parsed, parser: parser};
			});
			found = found || {value: val, parser: Fx.CSS.Parsers.String};
			return found;
		});
	},

	//computes by a from and to prepared objects, using their parsers.

	compute: function(from, to, delta){
		var computed = [];
		(Math.min(from.length, to.length)).times(function(i){
			computed.push({value: from[i].parser.compute(from[i].value, to[i].value, delta), parser: from[i].parser});
		});
		computed.$family = {name: 'fx:css:value'};
		return computed;
	},

	//serves the value as settable

	serve: function(value, unit){
		if ($type(value) != 'fx:css:value') value = this.parse(value);
		var returned = [];
		value.each(function(bit){
			returned = returned.concat(bit.parser.serve(bit.value, unit));
		});
		return returned;
	},

	//renders the change to an element

	render: function(element, property, value, unit){
		element.setStyle(property, this.serve(value, unit));
	},

	//searches inside the page css to find the values for a selector

	search: function(selector){
		if (Fx.CSS.Cache[selector]) return Fx.CSS.Cache[selector];
		var to = {};
		Array.each(document.styleSheets, function(sheet, j){
			var href = sheet.href;
			if (href && href.contains('://') && !href.contains(document.domain)) return;
			var rules = sheet.rules || sheet.cssRules;
			Array.each(rules, function(rule, i){
				if (!rule.style) return;
				var selectorText = (rule.selectorText) ? rule.selectorText.replace(/^\w+/, function(m){
					return m.toLowerCase();
				}) : null;
				if (!selectorText || !selectorText.test('^' + selector + '$')) return;
				Element.Styles.each(function(value, style){
					if (!rule.style[style] || Element.ShortStyles[style]) return;
					value = String(rule.style[style]);
					to[style] = (value.test(/^rgb/)) ? value.rgbToHex() : value;
				});
			});
		});
		return Fx.CSS.Cache[selector] = to;
	}

});

Fx.CSS.Cache = {};

Fx.CSS.Parsers = new Hash({

	Color: {
		parse: function(value){
			if (value.match(/^#[0-9a-f]{3,6}$/i)) return value.hexToRgb(true);
			return ((value = value.match(/(\d+),\s*(\d+),\s*(\d+)/))) ? [value[1], value[2], value[3]] : false;
		},
		compute: function(from, to, delta){
			return from.map(function(value, i){
				return Math.round(Fx.compute(from[i], to[i], delta));
			});
		},
		serve: function(value){
			return value.map(Number);
		}
	},

	Number: {
		parse: parseFloat,
		compute: Fx.compute,
		serve: function(value, unit){
			return (unit) ? value + unit : value;
		}
	},

	String: {
		parse: $lambda(false),
		compute: $arguments(1),
		serve: $arguments(0)
	}

});


/*
Script: Fx.Tween.js
	Formerly Fx.Style, effect to transition any CSS property for an element.

License:
	MIT-style license.
*/

Fx.Tween = new Class({

	Extends: Fx.CSS,

	initialize: function(element, options){
		this.element = this.subject = document.id(element);
		this.parent(options);
	},

	set: function(property, now){
		if (arguments.length == 1){
			now = property;
			property = this.property || this.options.property;
		}
		this.render(this.element, property, now, this.options.unit);
		return this;
	},

	start: function(property, from, to){
		if (!this.check(property, from, to)) return this;
		var args = Array.flatten(arguments);
		this.property = this.options.property || args.shift();
		var parsed = this.prepare(this.element, this.property, args);
		return this.parent(parsed.from, parsed.to);
	}

});

Element.Properties.tween = {

	set: function(options){
		var tween = this.retrieve('tween');
		if (tween) tween.cancel();
		return this.eliminate('tween').store('tween:options', $extend({link: 'cancel'}, options));
	},

	get: function(options){
		if (options || !this.retrieve('tween')){
			if (options || !this.retrieve('tween:options')) this.set('tween', options);
			this.store('tween', new Fx.Tween(this, this.retrieve('tween:options')));
		}
		return this.retrieve('tween');
	}

};

Element.implement({

	tween: function(property, from, to){
		this.get('tween').start(arguments);
		return this;
	},

	fade: function(how){
		var fade = this.get('tween'), o = 'opacity', toggle;
		how = $pick(how, 'toggle');
		switch (how){
			case 'in': fade.start(o, 1); break;
			case 'out': fade.start(o, 0); break;
			case 'show': fade.set(o, 1); break;
			case 'hide': fade.set(o, 0); break;
			case 'toggle':
				var flag = this.retrieve('fade:flag', this.get('opacity') == 1);
				fade.start(o, (flag) ? 0 : 1);
				this.store('fade:flag', !flag);
				toggle = true;
			break;
			default: fade.start(o, arguments);
		}
		if (!toggle) this.eliminate('fade:flag');
		return this;
	},

	highlight: function(start, end){
		if (!end){
			end = this.retrieve('highlight:original', this.getStyle('background-color'));
			end = (end == 'transparent') ? '#fff' : end;
		}
		var tween = this.get('tween');
		tween.start('background-color', start || '#ffff88', end).chain(function(){
			this.setStyle('background-color', this.retrieve('highlight:original'));
			tween.callChain();
		}.bind(this));
		return this;
	}

});


/*
Script: Fx.Morph.js
	Formerly Fx.Styles, effect to transition any number of CSS properties for an element using an object of rules, or CSS based selector rules.

License:
	MIT-style license.
*/

Fx.Morph = new Class({

	Extends: Fx.CSS,

	initialize: function(element, options){
		this.element = this.subject = document.id(element);
		this.parent(options);
	},

	set: function(now){
		if (typeof now == 'string') now = this.search(now);
		for (var p in now) this.render(this.element, p, now[p], this.options.unit);
		return this;
	},

	compute: function(from, to, delta){
		var now = {};
		for (var p in from) now[p] = this.parent(from[p], to[p], delta);
		return now;
	},

	start: function(properties){
		if (!this.check(properties)) return this;
		if (typeof properties == 'string') properties = this.search(properties);
		var from = {}, to = {};
		for (var p in properties){
			var parsed = this.prepare(this.element, p, properties[p]);
			from[p] = parsed.from;
			to[p] = parsed.to;
		}
		return this.parent(from, to);
	}

});

Element.Properties.morph = {

	set: function(options){
		var morph = this.retrieve('morph');
		if (morph) morph.cancel();
		return this.eliminate('morph').store('morph:options', $extend({link: 'cancel'}, options));
	},

	get: function(options){
		if (options || !this.retrieve('morph')){
			if (options || !this.retrieve('morph:options')) this.set('morph', options);
			this.store('morph', new Fx.Morph(this, this.retrieve('morph:options')));
		}
		return this.retrieve('morph');
	}

};

Element.implement({

	morph: function(props){
		this.get('morph').start(props);
		return this;
	}

});


/*
Script: Fx.Transitions.js
	Contains a set of advanced transitions to be used with any of the Fx Classes.

License:
	MIT-style license.

Credits:
	Easing Equations by Robert Penner, <http://www.robertpenner.com/easing/>, modified and optimized to be used with MooTools.
*/

Fx.implement({

	getTransition: function(){
		var trans = this.options.transition || Fx.Transitions.Sine.easeInOut;
		if (typeof trans == 'string'){
			var data = trans.split(':');
			trans = Fx.Transitions;
			trans = trans[data[0]] || trans[data[0].capitalize()];
			if (data[1]) trans = trans['ease' + data[1].capitalize() + (data[2] ? data[2].capitalize() : '')];
		}
		return trans;
	}

});

Fx.Transition = function(transition, params){
	params = $splat(params);
	return $extend(transition, {
		easeIn: function(pos){
			return transition(pos, params);
		},
		easeOut: function(pos){
			return 1 - transition(1 - pos, params);
		},
		easeInOut: function(pos){
			return (pos <= 0.5) ? transition(2 * pos, params) / 2 : (2 - transition(2 * (1 - pos), params)) / 2;
		}
	});
};

Fx.Transitions = new Hash({

	linear: $arguments(0)

});

Fx.Transitions.extend = function(transitions){
	for (var transition in transitions) Fx.Transitions[transition] = new Fx.Transition(transitions[transition]);
};

Fx.Transitions.extend({

	Pow: function(p, x){
		return Math.pow(p, x[0] || 6);
	},

	Expo: function(p){
		return Math.pow(2, 8 * (p - 1));
	},

	Circ: function(p){
		return 1 - Math.sin(Math.acos(p));
	},

	Sine: function(p){
		return 1 - Math.sin((1 - p) * Math.PI / 2);
	},

	Back: function(p, x){
		x = x[0] || 1.618;
		return Math.pow(p, 2) * ((x + 1) * p - x);
	},

	Bounce: function(p){
		var value;
		for (var a = 0, b = 1; 1; a += b, b /= 2){
			if (p >= (7 - 4 * a) / 11){
				value = b * b - Math.pow((11 - 6 * a - 11 * p) / 4, 2);
				break;
			}
		}
		return value;
	},

	Elastic: function(p, x){
		return Math.pow(2, 10 * --p) * Math.cos(20 * p * Math.PI * (x[0] || 1) / 3);
	}

});

['Quad', 'Cubic', 'Quart', 'Quint'].each(function(transition, i){
	Fx.Transitions[transition] = new Fx.Transition(function(p){
		return Math.pow(p, [i + 2]);
	});
});


/*
Script: Request.js
	Powerful all purpose Request Class. Uses XMLHTTPRequest.

License:
	MIT-style license.
*/

var Request = new Class({

	Implements: [Chain, Events, Options],

	options: {/*
		onRequest: $empty,
		onComplete: $empty,
		onCancel: $empty,
		onSuccess: $empty,
		onFailure: $empty,
		onException: $empty,*/
		url: '',
		data: '',
		headers: {
			'X-Requested-With': 'XMLHttpRequest',
			'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
		},
		async: true,
		format: false,
		method: 'post',
		link: 'ignore',
		isSuccess: null,
		emulation: true,
		urlEncoded: true,
		encoding: 'utf-8',
		evalScripts: false,
		evalResponse: false,
		noCache: false
	},

	initialize: function(options){
		this.xhr = new Browser.Request();
		this.setOptions(options);
		this.options.isSuccess = this.options.isSuccess || this.isSuccess;
		this.headers = new Hash(this.options.headers);
	},

	onStateChange: function(){
		if (this.xhr.readyState != 4 || !this.running) return;
		this.running = false;
		this.status = 0;
		$try(function(){
			this.status = this.xhr.status;
		}.bind(this));
		this.xhr.onreadystatechange = $empty;
		if (this.options.isSuccess.call(this, this.status)){
			this.response = {text: this.xhr.responseText, xml: this.xhr.responseXML};
			this.success(this.response.text, this.response.xml);
		} else {
			this.response = {text: null, xml: null};
			this.failure();
		}
	},

	isSuccess: function(){
		return ((this.status >= 200) && (this.status < 300));
	},

	processScripts: function(text){
		if (this.options.evalResponse || (/(ecma|java)script/).test(this.getHeader('Content-type'))) return $exec(text);
		return text.stripScripts(this.options.evalScripts);
	},

	success: function(text, xml){
		this.onSuccess(this.processScripts(text), xml);
	},

	onSuccess: function(){
		this.fireEvent('complete', arguments).fireEvent('success', arguments).callChain();
	},

	failure: function(){
		this.onFailure();
	},

	onFailure: function(){
		this.fireEvent('complete').fireEvent('failure', this.xhr);
	},

	setHeader: function(name, value){
		this.headers.set(name, value);
		return this;
	},

	getHeader: function(name){
		return $try(function(){
			return this.xhr.getResponseHeader(name);
		}.bind(this));
	},

	check: function(){
		if (!this.running) return true;
		switch (this.options.link){
			case 'cancel': this.cancel(); return true;
			case 'chain': this.chain(this.caller.bind(this, arguments)); return false;
		}
		return false;
	},

	send: function(options){
		if (!this.check(options)) return this;
		this.running = true;

		var type = $type(options);
		if (type == 'string' || type == 'element') options = {data: options};

		var old = this.options;
		options = $extend({data: old.data, url: old.url, method: old.method}, options);
		var data = options.data, url = options.url, method = options.method.toLowerCase();

		switch ($type(data)){
			case 'element': data = document.id(data).toQueryString(); break;
			case 'object': case 'hash': data = Hash.toQueryString(data);
		}

		if (this.options.format){
			var format = 'format=' + this.options.format;
			data = (data) ? format + '&' + data : format;
		}

		if (this.options.emulation && !['get', 'post'].contains(method)){
			var _method = '_method=' + method;
			data = (data) ? _method + '&' + data : _method;
			method = 'post';
		}

		if (this.options.urlEncoded && method == 'post'){
			var encoding = (this.options.encoding) ? '; charset=' + this.options.encoding : '';
			this.headers.set('Content-type', 'application/x-www-form-urlencoded' + encoding);
		}

		if (this.options.noCache){
			var noCache = 'noCache=' + new Date().getTime();
			data = (data) ? noCache + '&' + data : noCache;
		}

		var trimPosition = url.lastIndexOf('/');
		if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition);

		if (data && method == 'get'){
			url = url + (url.contains('?') ? '&' : '?') + data;
			data = null;
		}

		this.xhr.open(method.toUpperCase(), url, this.options.async);

		this.xhr.onreadystatechange = this.onStateChange.bind(this);

		this.headers.each(function(value, key){
			try {
				this.xhr.setRequestHeader(key, value);
			} catch (e){
				this.fireEvent('exception', [key, value]);
			}
		}, this);

		this.fireEvent('request');
		this.xhr.send(data);
		if (!this.options.async) this.onStateChange();
		return this;
	},

	cancel: function(){
		if (!this.running) return this;
		this.running = false;
		this.xhr.abort();
		this.xhr.onreadystatechange = $empty;
		this.xhr = new Browser.Request();
		this.fireEvent('cancel');
		return this;
	}

});

(function(){

var methods = {};
['get', 'post', 'put', 'delete', 'GET', 'POST', 'PUT', 'DELETE'].each(function(method){
	methods[method] = function(){
		var params = Array.link(arguments, {url: String.type, data: $defined});
		return this.send($extend(params, {method: method}));
	};
});

Request.implement(methods);

})();

Element.Properties.send = {

	set: function(options){
		var send = this.retrieve('send');
		if (send) send.cancel();
		return this.eliminate('send').store('send:options', $extend({
			data: this, link: 'cancel', method: this.get('method') || 'post', url: this.get('action')
		}, options));
	},

	get: function(options){
		if (options || !this.retrieve('send')){
			if (options || !this.retrieve('send:options')) this.set('send', options);
			this.store('send', new Request(this.retrieve('send:options')));
		}
		return this.retrieve('send');
	}

};

Element.implement({

	send: function(url){
		var sender = this.get('send');
		sender.send({data: this, url: url || sender.options.url});
		return this;
	}

});


/*
Script: Request.HTML.js
	Extends the basic Request Class with additional methods for interacting with HTML responses.

License:
	MIT-style license.
*/

Request.HTML = new Class({

	Extends: Request,

	options: {
		update: false,
		append: false,
		evalScripts: true,
		filter: false
	},

	processHTML: function(text){
		var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
		text = (match) ? match[1] : text;

		var container = new Element('div');

		return $try(function(){
			var root = '<root>' + text + '</root>', doc;
			if (Browser.Engine.trident){
				doc = new ActiveXObject('Microsoft.XMLDOM');
				doc.async = false;
				doc.loadXML(root);
			} else {
				doc = new DOMParser().parseFromString(root, 'text/xml');
			}
			root = doc.getElementsByTagName('root')[0];
			if (!root) return null;
			for (var i = 0, k = root.childNodes.length; i < k; i++){
				var child = Element.clone(root.childNodes[i], true, true);
				if (child) container.grab(child);
			}
			return container;
		}) || container.set('html', text);
	},

	success: function(text){
		var options = this.options, response = this.response;

		response.html = text.stripScripts(function(script){
			response.javascript = script;
		});

		var temp = this.processHTML(response.html);

		response.tree = temp.childNodes;
		response.elements = temp.getElements('*');

		if (options.filter) response.tree = response.elements.filter(options.filter);
		if (options.update) document.id(options.update).empty().set('html', response.html);
		else if (options.append) document.id(options.append).adopt(temp.getChildren());
		if (options.evalScripts) $exec(response.javascript);

		this.onSuccess(response.tree, response.elements, response.html, response.javascript);
	}

});

Element.Properties.load = {

	set: function(options){
		var load = this.retrieve('load');
		if (load) load.cancel();
		return this.eliminate('load').store('load:options', $extend({data: this, link: 'cancel', update: this, method: 'get'}, options));
	},

	get: function(options){
		if (options || ! this.retrieve('load')){
			if (options || !this.retrieve('load:options')) this.set('load', options);
			this.store('load', new Request.HTML(this.retrieve('load:options')));
		}
		return this.retrieve('load');
	}

};

Element.implement({

	load: function(){
		this.get('load').send(Array.link(arguments, {data: Object.type, url: String.type}));
		return this;
	}

});


/*
Script: Request.JSON.js
	Extends the basic Request Class with additional methods for sending and receiving JSON data.

License:
	MIT-style license.
*/

Request.JSON = new Class({

	Extends: Request,

	options: {
		secure: true
	},

	initialize: function(options){
		this.parent(options);
		this.headers.extend({'Accept': 'application/json', 'X-Request': 'JSON'});
	},

	success: function(text){
		this.response.json = JSON.decode(text, this.options.secure);
		this.onSuccess(this.response.json, text);
	}

});
MooTools.More = {
	'version': '1.2.3.1'
};

/*
Script: MooTools.Lang.js
	Provides methods for localization.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

(function(){

	var data = {
		language: 'en-US',
		languages: {
			'en-US': {}
		},
		cascades: ['en-US']
	};

	var cascaded;

	MooTools.lang = new Events();

	$extend(MooTools.lang, {

		setLanguage: function(lang){
			if (!data.languages[lang]) return this;
			data.language = lang;
			this.load();
			this.fireEvent('langChange', lang);
			return this;
		},

		load: function() {
			var langs = this.cascade(this.getCurrentLanguage());
			cascaded = {};
			$each(langs, function(set, setName){
				cascaded[setName] = this.lambda(set);
			}, this);
		},

		getCurrentLanguage: function(){
			return data.language;
		},

		addLanguage: function(lang){
			data.languages[lang] = data.languages[lang] || {};
			return this;
		},

		cascade: function(lang){
			var cascades = (data.languages[lang] || {}).cascades || [];
			cascades.combine(data.cascades);
			cascades.erase(lang).push(lang);
			var langs = cascades.map(function(lng){
				return data.languages[lng];
			}, this);
			return $merge.apply(this, langs);
		},

		lambda: function(set) {
			(set || {}).get = function(key, args){
				return $lambda(set[key]).apply(this, $splat(args));
			};
			return set;
		},

		get: function(set, key, args){
			if (cascaded && cascaded[set]) return (key ? cascaded[set].get(key, args) : cascaded[set]);
		},

		set: function(lang, set, members){
			this.addLanguage(lang);
			langData = data.languages[lang];
			if (!langData[set]) langData[set] = {};
			$extend(langData[set], members);
			if (lang == this.getCurrentLanguage()){
				this.load();
				this.fireEvent('langChange', lang);
			}
			return this;
		},

		list: function(){
			return Hash.getKeys(data.languages);
		}

	});

})();

/*
Script: Log.js
	Provides basic logging functionality for plugins to implement.

	License:
		MIT-style license.

	Authors:
		Guillermo Rauch
*/

var Log = new Class({

	log: function(){
		Log.logger.call(this, arguments);
	}

});

Log.logged = [];

Log.logger = function(){
	if(window.console && console.log) console.log.apply(console, arguments);
	else Log.logged.push(arguments);
};

/*
Script: Class.Refactor.js
	Extends a class onto itself with new property, preserving any items attached to the class's namespace.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

Class.refactor = function(original, refactors){

	$each(refactors, function(item, name){
		var origin = original.prototype[name];
		if (origin && (origin = origin._origin) && typeof item == 'function') original.implement(name, function(){
			var old = this.previous;
			this.previous = origin;
			var value = item.apply(this, arguments);
			this.previous = old;
			return value;
		}); else original.implement(name, item);
	});

	return original;

};

/*
Script: Class.Binds.js
	Automagically binds specified methods in a class to the instance of the class.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

Class.Mutators.Binds = function(binds){
    return binds;
};

Class.Mutators.initialize = function(initialize){
	return function(){
		$splat(this.Binds).each(function(name){
			var original = this[name];
			if (original) this[name] = original.bind(this);
		}, this);
		return initialize.apply(this, arguments);
	};
};

/*
Script: Class.Occlude.js
	Prevents a class from being applied to a DOM element twice.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

Class.Occlude = new Class({

	occlude: function(property, element){
		element = document.id(element || this.element);
		var instance = element.retrieve(property || this.property);
		if (instance && !$defined(this.occluded)){
			this.occluded = instance;
		} else {
			this.occluded = false;
			element.store(property || this.property, this);
		}
		return this.occluded;
	}

});

/*
Script: Chain.Wait.js
	Adds a method to inject pauses between chained events.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

(function(){

	var wait = {
		wait: function(duration){
			return this.chain(function(){
				this.callChain.delay($pick(duration, 500), this);
			}.bind(this));
		}
	};

	Chain.implement(wait);

	if (window.Fx){
		Fx.implement(wait);
		['Css', 'Tween', 'Elements'].each(function(cls){
			if (Fx[cls]) Fx[cls].implement(wait);
		});
	}

	try {
		Element.implement({
			chains: function(effects){
				$splat($pick(effects, ['tween', 'morph', 'reveal'])).each(function(effect){
					effect = this.get(effect);
					if (!effect) return;
					effect.setOptions({
						link:'chain'
					});
				}, this);
				return this;
			},
			pauseFx: function(duration, effect){
				this.chains(effect).get($pick(effect, 'tween')).wait(duration);
				return this;
			}
		});
	} catch(e){}

})();

/*
Script: Array.Extras.js
	Extends the Array native object to include useful methods to work with arrays.

	License:
		MIT-style license.

	Authors:
		Christoph Pojer

*/
Array.implement({

	min: function(){
		return Math.min.apply(null, this);
	},

	max: function(){
		return Math.max.apply(null, this);
	},

	average: function(){
		return this.length ? this.sum() / this.length : 0;
	},

	sum: function(){
		var result = 0, l = this.length;
		if (l){
			do {
				result += this[--l];
			} while (l);
		}
		return result;
	},

	unique: function(){
		return [].combine(this);
	}

});

/*
Script: Date.js
	Extends the Date native object to include methods useful in managing dates.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
		Nicholas Barthelemy - https://svn.nbarthelemy.com/date-js/
		Harald Kirshner - mail [at] digitarald.de; http://digitarald.de
		Scott Kyle - scott [at] appden.com; http://appden.com

*/

(function(){

if (!Date.now) Date.now = $time;

Date.Methods = {};

['Date', 'Day', 'FullYear', 'Hours', 'Milliseconds', 'Minutes', 'Month', 'Seconds', 'Time', 'TimezoneOffset',
	'Week', 'Timezone', 'GMTOffset', 'DayOfYear', 'LastMonth', 'LastDayOfMonth', 'UTCDate', 'UTCDay', 'UTCFullYear',
	'AMPM', 'Ordinal', 'UTCHours', 'UTCMilliseconds', 'UTCMinutes', 'UTCMonth', 'UTCSeconds'].each(function(method){
	Date.Methods[method.toLowerCase()] = method;
});

$each({
	ms: 'Milliseconds',
	year: 'FullYear',
	min: 'Minutes',
	mo: 'Month',
	sec: 'Seconds',
	hr: 'Hours'
}, function(value, key){
	Date.Methods[key] = value;
});

var zeroize = function(what, length){
	return new Array(length - what.toString().length + 1).join('0') + what;
};

Date.implement({

	set: function(prop, value){
		switch ($type(prop)){
			case 'object':
				for (var p in prop) this.set(p, prop[p]);
				break;
			case 'string':
				prop = prop.toLowerCase();
				var m = Date.Methods;
				if (m[prop]) this['set' + m[prop]](value);
		}
		return this;
	},

	get: function(prop){
		prop = prop.toLowerCase();
		var m = Date.Methods;
		if (m[prop]) return this['get' + m[prop]]();
		return null;
	},

	clone: function(){
		return new Date(this.get('time'));
	},

	increment: function(interval, times){
		interval = interval || 'day';
		times = $pick(times, 1);

		switch (interval){
			case 'year':
				return this.increment('month', times * 12);
			case 'month':
				var d = this.get('date');
				this.set('date', 1).set('mo', this.get('mo') + times);
				return this.set('date', d.min(this.get('lastdayofmonth')));
			case 'week':
				return this.increment('day', times * 7);
			case 'day':
				return this.set('date', this.get('date') + times);
		}

		if (!Date.units[interval]) throw new Error(interval + ' is not a supported interval');

		return this.set('time', this.get('time') + times * Date.units[interval]());
	},

	decrement: function(interval, times){
		return this.increment(interval, -1 * $pick(times, 1));
	},

	isLeapYear: function(){
		return Date.isLeapYear(this.get('year'));
	},

	clearTime: function(){
		return this.set({hr: 0, min: 0, sec: 0, ms: 0});
	},

	diff: function(d, resolution){
		resolution = resolution || 'day';
		if ($type(d) == 'string') d = Date.parse(d);

		switch (resolution){
			case 'year':
				return d.get('year') - this.get('year');
			case 'month':
				var months = (d.get('year') - this.get('year')) * 12;
				return months + d.get('mo') - this.get('mo');
			default:
				var diff = d.get('time') - this.get('time');
				if (Date.units[resolution]() > diff.abs()) return 0;
				return ((d.get('time') - this.get('time')) / Date.units[resolution]()).round();
		}

		return null;
	},

	getLastDayOfMonth: function(){
		return Date.daysInMonth(this.get('mo'), this.get('year'));
	},

	getDayOfYear: function(){
		return (Date.UTC(this.get('year'), this.get('mo'), this.get('date') + 1)
			- Date.UTC(this.get('year'), 0, 1)) / Date.units.day();
	},

	getWeek: function(){
		return (this.get('dayofyear') / 7).ceil();
	},

	getOrdinal: function(day){
		return Date.getMsg('ordinal', day || this.get('date'));
	},

	getTimezone: function(){
		return this.toString()
			.replace(/^.*? ([A-Z]{3}).[0-9]{4}.*$/, '$1')
			.replace(/^.*?\(([A-Z])[a-z]+ ([A-Z])[a-z]+ ([A-Z])[a-z]+\)$/, '$1$2$3');
	},

	getGMTOffset: function(){
		var off = this.get('timezoneOffset');
		return ((off > 0) ? '-' : '+') + zeroize((off.abs() / 60).floor(), 2) + zeroize(off % 60, 2);
	},

	setAMPM: function(ampm){
		ampm = ampm.toUpperCase();
		var hr = this.get('hr');
		if (hr > 11 && ampm == 'AM') return this.decrement('hour', 12);
		else if (hr < 12 && ampm == 'PM') return this.increment('hour', 12);
		return this;
	},

	getAMPM: function(){
		return (this.get('hr') < 12) ? 'AM' : 'PM';
	},

	parse: function(str){
		this.set('time', Date.parse(str));
		return this;
	},

	isValid: function(date) {
		return !!(date || this).valueOf();
	},

	format: function(f){
		if (!this.isValid()) return 'invalid date';
		f = f || '%x %X';
		f = formats[f.toLowerCase()] || f; // replace short-hand with actual format
		var d = this;
		return f.replace(/%([a-z%])/gi,
			function($1, $2){
				switch ($2){
					case 'a': return Date.getMsg('days')[d.get('day')].substr(0, 3);
					case 'A': return Date.getMsg('days')[d.get('day')];
					case 'b': return Date.getMsg('months')[d.get('month')].substr(0, 3);
					case 'B': return Date.getMsg('months')[d.get('month')];
					case 'c': return d.toString();
					case 'd': return zeroize(d.get('date'), 2);
					case 'H': return zeroize(d.get('hr'), 2);
					case 'I': return ((d.get('hr') % 12) || 12);
					case 'j': return zeroize(d.get('dayofyear'), 3);
					case 'm': return zeroize((d.get('mo') + 1), 2);
					case 'M': return zeroize(d.get('min'), 2);
					case 'o': return d.get('ordinal');
					case 'p': return Date.getMsg(d.get('ampm'));
					case 'S': return zeroize(d.get('seconds'), 2);
					case 'U': return zeroize(d.get('week'), 2);
					case 'w': return d.get('day');
					case 'x': return d.format(Date.getMsg('shortDate'));
					case 'X': return d.format(Date.getMsg('shortTime'));
					case 'y': return d.get('year').toString().substr(2);
					case 'Y': return d.get('year');
					case 'T': return d.get('GMTOffset');
					case 'Z': return d.get('Timezone');
				}
				return $2;
			}
		);
	},

	toISOString: function(){
		return this.format('iso8601');
	}

});

Date.alias('diff', 'compare');
Date.alias('format', 'strftime');

var formats = {
	db: '%Y-%m-%d %H:%M:%S',
	compact: '%Y%m%dT%H%M%S',
	iso8601: '%Y-%m-%dT%H:%M:%S%T',
	rfc822: '%a, %d %b %Y %H:%M:%S %Z',
	'short': '%d %b %H:%M',
	'long': '%B %d, %Y %H:%M'
};

var nativeParse = Date.parse;

var parseWord = function(type, word, num){
	var ret = -1;
	var translated = Date.getMsg(type + 's');

	switch ($type(word)){
		case 'object':
			ret = translated[word.get(type)];
			break;
		case 'number':
			ret = translated[month - 1];
			if (!ret) throw new Error('Invalid ' + type + ' index: ' + index);
			break;
		case 'string':
			var match = translated.filter(function(name){
				return this.test(name);
			}, new RegExp('^' + word, 'i'));
			if (!match.length)    throw new Error('Invalid ' + type + ' string');
			if (match.length > 1) throw new Error('Ambiguous ' + type);
			ret = match[0];
	}

	return (num) ? translated.indexOf(ret) : ret;
};


Date.extend({

	getMsg: function(key, args) {
		return MooTools.lang.get('Date', key, args);
	},

	units: {
		ms: $lambda(1),
		second: $lambda(1000),
		minute: $lambda(60000),
		hour: $lambda(3600000),
		day: $lambda(86400000),
		week: $lambda(608400000),
		month: function(month, year){
			var d = new Date;
			return Date.daysInMonth($pick(month, d.get('mo')), $pick(year, d.get('year'))) * 86400000;
		},
		year: function(year){
			year = year || new Date().get('year');
			return Date.isLeapYear(year) ? 31622400000 : 31536000000;
		}
	},

	daysInMonth: function(month, year){
		return [31, Date.isLeapYear(year) ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
	},

	isLeapYear: function(year){
		return new Date(year, 1, 29).get('date') == 29;
	},

	parse: function(from){
		var t = $type(from);
		if (t == 'number') return new Date(from);
		if (t != 'string') return from;
		from = from.clean();
		if (!from.length) return null;

		var parsed;
		Date.parsePatterns.some(function(pattern){
			var r = pattern.re.exec(from);
			return (r) ? (parsed = pattern.handler(r)) : false;
		});

		return parsed || new Date(nativeParse(from));
	},

	parseDay: function(day, num){
		return parseWord('day', day, num);
	},

	parseMonth: function(month, num){
		return parseWord('month', month, num);
	},

	parseUTC: function(value){
		var localDate = new Date(value);
		var utcSeconds = Date.UTC(localDate.get('year'),
		localDate.get('mo'),
		localDate.get('date'),
		localDate.get('hr'),
		localDate.get('min'),
		localDate.get('sec'));
		return new Date(utcSeconds);
	},

	orderIndex: function(unit){
		return Date.getMsg('dateOrder').indexOf(unit) + 1;
	},

	defineFormat: function(name, format){
		formats[name] = format;
	},

	defineFormats: function(formats){
		for (var name in formats) Date.defineFormat(name, formats[f]);
	},

	parsePatterns: [],

	defineParser: function(pattern){
		Date.parsePatterns.push( pattern.re && pattern.handler ? pattern : build(pattern) );
	},

	defineParsers: function(){
		Array.flatten(arguments).each(Date.defineParser);
	},

	define2DigitYearStart: function(year){
		yr_start = year % 100;
		yr_base = year - yr_start;
	}

});

var yr_base = 1900;
var yr_start = 70;

var replacers = function(key){
	switch(key){
		case 'x': // iso8601 covers yyyy-mm-dd, so just check if month is first
			return (Date.orderIndex('month') == 1) ? '%m[.-/]%d([.-/]%y)?' : '%d[.-/]%m([.-/]%y)?';
		case 'X':
			return '%H([.:]%M)?([.:]%S([.:]%s)?)?\\s?%p?\\s?%T?';
		case 'o':
			return '[^\\d\\s]*';
	}
	return null;
};

var keys = {
	a: /[a-z]{3,}/,
	d: /[0-2]?[0-9]|3[01]/,
	H: /[01]?[0-9]|2[0-3]/,
	I: /0?[1-9]|1[0-2]/,
	M: /[0-5]?\d/,
	s: /\d+/,
	p: /[ap]\.?m\.?/,
	y: /\d{2}|\d{4}/,
	Y: /\d{4}/,
	T: /Z|[+-]\d{2}(?::?\d{2})?/
};

keys.B = keys.b = keys.A = keys.a;
keys.m = keys.I;
keys.S = keys.M;

var lang;

var build = function(format){
	if (!lang) return {format: format}; // wait until language is set

	var parsed = [null];

	var re = (format.source || format) // allow format to be regex
	 .replace(/%([a-z])/gi,
		function($1, $2){
			return replacers($2) || $1;
		}
	).replace(/\((?!\?)/g, '(?:') // make all groups non-capturing
	 .replace(/ (?!\?|\*)/g, ',? ') // be forgiving with spaces and commas
	 .replace(/%([a-z%])/gi,
		function($1, $2){
			var p = keys[$2];
			if (!p) return $2;
			parsed.push($2);
			return '(' + p.source + ')';
		}
	);

	return {
		format: format,
		re: new RegExp('^' + re + '$', 'i'),
		handler: function(bits){
			var date = new Date().clearTime();
			for (var i = 1; i < parsed.length; i++)
				date = handle.call(date, parsed[i], bits[i]);
			return date;
		}
	};
};

var handle = function(key, value){
	if (!value){
		if (key == 'm' || key == 'd') value = 1;
		else return this;
	}

	switch(key){
		case 'a': case 'A': return this.set('day', Date.parseDay(value, true));
		case 'b': case 'B': return this.set('mo', Date.parseMonth(value, true));
		case 'd': return this.set('date', value);
		case 'H': case 'I': return this.set('hr', value);
		case 'm': return this.set('mo', value - 1);
		case 'M': return this.set('min', value);
		case 'p': return this.set('ampm', value.replace(/\./g, ''));
		case 'S': return this.set('sec', value);
		case 's': return this.set('ms', ('0.' + value) * 1000);
		case 'w': return this.set('day', value);
		case 'Y': return this.set('year', value);
		case 'y':
			value = +value;
			if (value < 100) value += yr_base + (value < yr_start ? 100 : 0);
			return this.set('year', value);
		case 'T':
			if (value == 'Z') value = '+00';
			var offset = value.match(/([+-])(\d{2}):?(\d{2})?/);
			offset = (offset[1] + '1') * (offset[2] * 60 + (+offset[3] || 0)) + this.getTimezoneOffset();
			return this.set('time', (this * 1) - offset * 60000);
	}

	return this;
};

Date.defineParsers(
	'%Y([-./]%m([-./]%d((T| )%X)?)?)?', // "1999-12-31", "1999-12-31 11:59pm", "1999-12-31 23:59:59", ISO8601
	'%Y%m%d(T%H(%M%S?)?)?', // "19991231", "19991231T1159", compact
	'%x( %X)?', // "12/31", "12.31.99", "12-31-1999", "12/31/2008 11:59 PM"
	'%d%o( %b( %Y)?)?( %X)?', // "31st", "31st December", "31 Dec 1999", "31 Dec 1999 11:59pm"
	'%b %d%o?( %Y)?( %X)?', // Same as above with month and day switched
	'%b %Y' // "December 1999"
);

MooTools.lang.addEvent('langChange', function(language){
	if (!MooTools.lang.get('Date')) return;

	lang = language;
	Date.parsePatterns.each(function(pattern, i){
		if (pattern.format) Date.parsePatterns[i] = build(pattern.format);
	});

}).fireEvent('langChange', MooTools.lang.getCurrentLanguage());

})();

/*
Script: Date.Extras.js
	Extends the Date native object to include extra methods (on top of those in Date.js).

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Date.implement({

	timeDiffInWords: function(relative_to){
		return Date.distanceOfTimeInWords(this, relative_to || new Date);
	}

});

Date.alias('timeDiffInWords', 'timeAgoInWords');

Date.extend({

	distanceOfTimeInWords: function(from, to){
		return Date.getTimePhrase(((to - from) / 1000).toInt());
	},

	getTimePhrase: function(delta){
		var suffix = (delta < 0) ? 'Until' : 'Ago';
		if (delta < 0) delta *= -1;

		var msg = (delta < 60) ? 'lessThanMinute' :
				  (delta < 120) ? 'minute' :
				  (delta < (45 * 60)) ? 'minutes' :
				  (delta < (90 * 60)) ? 'hour' :
				  (delta < (24 * 60 * 60)) ? 'hours' :
				  (delta < (48 * 60 * 60)) ? 'day' :
				  'days';

		switch(msg){
			case 'minutes': delta = (delta / 60).round(); break;
			case 'hours':   delta = (delta / 3600).round(); break;
			case 'days': 	delta = (delta / 86400).round();
		}

		return Date.getMsg(msg + suffix, delta).substitute({delta: delta});
	}

});


Date.defineParsers(

	{
		// "today", "tomorrow", "yesterday"
		re: /^tod|tom|yes/i,
		handler: function(bits){
			var d = new Date().clearTime();
			switch(bits[0]){
				case 'tom': return d.increment();
				case 'yes': return d.decrement();
				default: 	return d;
			}
		}
	},

	{
		// "next Wednesday", "last Thursday"
		re: /^(next|last) ([a-z]+)$/i,
		handler: function(bits){
			var d = new Date().clearTime();
			var day = d.getDay();
			var newDay = Date.parseDay(bits[2], true);
			var addDays = newDay - day;
			if (newDay <= day) addDays += 7;
			if (bits[1] == 'last') addDays -= 7;
			return d.set('date', d.getDate() + addDays);
		}
	}

);


/*
Script: Hash.Extras.js
	Extends the Hash native object to include getFromPath which allows a path notation to child elements.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

Hash.implement({

	getFromPath: function(notation){
		var source = this.getClean();
		notation.replace(/\[([^\]]+)\]|\.([^.[]+)|[^[.]+/g, function(match){
			if (!source) return null;
			var prop = arguments[2] || arguments[1] || arguments[0];
			source = (prop in source) ? source[prop] : null;
			return match;
		});
		return source;
	},

	cleanValues: function(method){
		method = method || $defined;
		this.each(function(v, k){
			if (!method(v)) this.erase(k);
		}, this);
		return this;
	},

	run: function(){
		var args = arguments;
		this.each(function(v, k){
			if ($type(v) == 'function') v.run(args);
		});
	}

});

/*
Script: String.Extras.js
	Extends the String native object to include methods useful in managing various kinds of strings (query strings, urls, html, etc).

	License:
		MIT-style license.

	Authors:
		Aaron Newton
		Guillermo Rauch

*/

(function(){

var special = ['Ã€','Ã ','Ã','Ã¡','Ã‚','Ã¢','Ãƒ','Ã£','Ã„','Ã¤','Ã…','Ã¥','Ä‚','Äƒ','Ä„','Ä…','Ä†','Ä‡','ÄŒ','Ä','Ã‡','Ã§', 'ÄŽ','Ä','Ä','Ä‘', 'Ãˆ','Ã¨','Ã‰','Ã©','ÃŠ','Ãª','Ã‹','Ã«','Äš','Ä›','Ä˜','Ä™', 'Äž','ÄŸ','ÃŒ','Ã¬','Ã','Ã­','ÃŽ','Ã®','Ã','Ã¯', 'Ä¹','Äº','Ä½','Ä¾','Å','Å‚', 'Ã‘','Ã±','Å‡','Åˆ','Åƒ','Å„','Ã’','Ã²','Ã“','Ã³','Ã”','Ã´','Ã•','Ãµ','Ã–','Ã¶','Ã˜','Ã¸','Å‘','Å˜','Å™','Å”','Å•','Å ','Å¡','Åž','ÅŸ','Åš','Å›', 'Å¤','Å¥','Å¤','Å¥','Å¢','Å£','Ã™','Ã¹','Ãš','Ãº','Ã›','Ã»','Ãœ','Ã¼','Å®','Å¯', 'Å¸','Ã¿','Ã½','Ã','Å½','Å¾','Å¹','Åº','Å»','Å¼', 'Ãž','Ã¾','Ã','Ã°','ÃŸ','Å’','Å“','Ã†','Ã¦','Âµ'];

var standard = ['A','a','A','a','A','a','A','a','Ae','ae','A','a','A','a','A','a','C','c','C','c','C','c','D','d','D','d', 'E','e','E','e','E','e','E','e','E','e','E','e','G','g','I','i','I','i','I','i','I','i','L','l','L','l','L','l', 'N','n','N','n','N','n', 'O','o','O','o','O','o','O','o','Oe','oe','O','o','o', 'R','r','R','r', 'S','s','S','s','S','s','T','t','T','t','T','t', 'U','u','U','u','U','u','Ue','ue','U','u','Y','y','Y','y','Z','z','Z','z','Z','z','TH','th','DH','dh','ss','OE','oe','AE','ae','u'];

var tidymap = {
	"[\xa0\u2002\u2003\u2009]": " ",
	"\xb7": "*",
	"[\u2018\u2019]": "'",
	"[\u201c\u201d]": '"',
	"\u2026": "...",
	"\u2013": "-",
	"\u2014": "--",
	"\uFFFD": "&raquo;"
};

String.implement({

	standardize: function(){
		var text = this;
		special.each(function(ch, i){
			text = text.replace(new RegExp(ch, 'g'), standard[i]);
		});
		return text;
	},

	repeat: function(times){
		return new Array(times + 1).join(this);
	},

	pad: function(length, str, dir){
		if (this.length >= length) return this;
		str = str || ' ';
		var pad = str.repeat(length - this.length).substr(0, length - this.length);
		if (!dir || dir == 'right') return this + pad;
		if (dir == 'left') return pad + this;
		return pad.substr(0, (pad.length / 2).floor()) + this + pad.substr(0, (pad.length / 2).ceil());
	},

	stripTags: function(){
		return this.replace(/<\/?[^>]+>/gi, '');
	},

	tidy: function(){
		var txt = this.toString();
		$each(tidymap, function(value, key){
			txt = txt.replace(new RegExp(key, 'g'), value);
		});
		return txt;
	}

});

})();

/*
Script: String.QueryString.js
	...

	License:
		MIT-style license.

	Authors:
		Sebastian MarkbÃ¥ge, Aaron Newton, Lennart Pilon, Valerio Proietti
*/

String.implement({

	parseQueryString: function(){
		var vars = this.split(/[&;]/), res = {};
		if (vars.length) vars.each(function(val){
			var index = val.indexOf('='),
				keys = index < 0 ? [''] : val.substr(0, index).match(/[^\]\[]+/g),
				value = decodeURIComponent(val.substr(index + 1)),
				obj = res;
			keys.each(function(key, i){
				var current = obj[key];
				if(i < keys.length - 1)
					obj = obj[key] = current || {};
				else if($type(current) == 'array')
					current.push(value);
				else
					obj[key] = $defined(current) ? [current, value] : value;
			});
		});
		return res;
	},

	cleanQueryString: function(method){
		return this.split('&').filter(function(val){
			var index = val.indexOf('='),
			key = index < 0 ? '' : val.substr(0, index),
			value = val.substr(index + 1);
			return method ? method.run([key, value]) : $chk(value);
		}).join('&');
	}

});

/*
Script: URI.js
	Provides methods useful in managing the window location and uris.

	License:
		MIT-style license.

	Authors:
		Sebastian Markbï¿½ge, Aaron Newton
*/

var URI = new Class({

	Implements: Options,

	/*
	options: {
		base: false
	},
	*/

	regex: /^(?:(\w+):)?(?:\/\/(?:(?:([^:@]*):?([^:@]*))?@)?([^:\/?#]*)(?::(\d*))?)?(\.\.?$|(?:[^?#\/]*\/)*)([^?#]*)(?:\?([^#]*))?(?:#(.*))?/,
	parts: ['scheme', 'user', 'password', 'host', 'port', 'directory', 'file', 'query', 'fragment'],
	schemes: { http: 80, https: 443, ftp: 21, rtsp: 554, mms: 1755, file: 0 },

	initialize: function(uri, options){
		this.setOptions(options);
		var base = this.options.base || URI.base;
		uri = uri || base;
		if (uri && uri.parsed)
			this.parsed = $unlink(uri.parsed);
		else
			this.set('value', uri.href || uri.toString(), base ? new URI(base) : false);
	},

	parse: function(value, base){
		var bits = value.match(this.regex);
		if (!bits) return false;
		bits.shift();
		return this.merge(bits.associate(this.parts), base);
	},

	merge: function(bits, base){
		if ((!bits || !bits.scheme) && (!base || !base.scheme)) return false;
		if (base){
			this.parts.every(function(part){
				if (bits[part]) return false;
				bits[part] = base[part] || '';
				return true;
			});
		}
		bits.port = bits.port || this.schemes[bits.scheme.toLowerCase()];
		bits.directory = bits.directory ? this.parseDirectory(bits.directory, base ? base.directory : '') : '/';
		return bits;
	},

	parseDirectory: function(directory, baseDirectory) {
		directory = (directory.substr(0, 1) == '/' ? '' : (baseDirectory || '/')) + directory;
		if (!directory.test(URI.regs.directoryDot)) return directory;
		var result = [];
		directory.replace(URI.regs.endSlash, '').split('/').each(function(dir){
			if (dir == '..' && result.length > 0) result.pop();
			else if (dir != '.') result.push(dir);
		});
		return result.join('/') + '/';
	},

	combine: function(bits){
		return bits.value || bits.scheme + '://' +
			(bits.user ? bits.user + (bits.password ? ':' + bits.password : '') + '@' : '') +
			(bits.host || '') + (bits.port && bits.port != this.schemes[bits.scheme] ? ':' + bits.port : '') +
			(bits.directory || '/') + (bits.file || '') +
			(bits.query ? '?' + bits.query : '') +
			(bits.fragment ? '#' + bits.fragment : '');
	},

	set: function(part, value, base){
		if (part == 'value'){
			var scheme = value.match(URI.regs.scheme);
			if (scheme) scheme = scheme[1];
			if (scheme && !$defined(this.schemes[scheme.toLowerCase()])) this.parsed = { scheme: scheme, value: value };
			else this.parsed = this.parse(value, (base || this).parsed) || (scheme ? { scheme: scheme, value: value } : { value: value });
		} else if (part == 'data') {
			this.setData(value);
		} else {
			this.parsed[part] = value;
		}
		return this;
	},

	get: function(part, base){
		switch(part){
			case 'value': return this.combine(this.parsed, base ? base.parsed : false);
			case 'data' : return this.getData();
		}
		return this.parsed[part] || undefined;
	},

	go: function(){
		document.location.href = this.toString();
	},

	toURI: function(){
		return this;
	},

	getData: function(key, part){
		var qs = this.get(part || 'query');
		if (!$chk(qs)) return key ? null : {};
		var obj = qs.parseQueryString();
		return key ? obj[key] : obj;
	},

	setData: function(values, merge, part){
		if ($type(arguments[0]) == 'string'){
			values = this.getData();
			values[arguments[0]] = arguments[1];
		} else if (merge) {
			values = $merge(this.getData(), values);
		}
		return this.set(part || 'query', Hash.toQueryString(values));
	},

	clearData: function(part){
		return this.set(part || 'query', '');
	}

});

['toString', 'valueOf'].each(function(method){
	URI.prototype[method] = function(){
		return this.get('value');
	};
});


URI.regs = {
	endSlash: /\/$/,
	scheme: /^(\w+):/,
	directoryDot: /\.\/|\.$/
};

URI.base = new URI($$('base[href]').getLast(), { base: document.location });

String.implement({

	toURI: function(options){ return new URI(this, options); }

});

/*
Script: URI.Relative.js
	Extends the URI class to add methods for computing relative and absolute urls.

	License:
		MIT-style license.

	Authors:
		Sebastian MarkbÃ¥ge
*/

URI = Class.refactor(URI, {

	combine: function(bits, base){
		if (!base || bits.scheme != base.scheme || bits.host != base.host || bits.port != base.port)
			return this.previous.apply(this, arguments);
		var end = bits.file + (bits.query ? '?' + bits.query : '') + (bits.fragment ? '#' + bits.fragment : '');

		if (!base.directory) return (bits.directory || (bits.file ? '' : './')) + end;

		var baseDir = base.directory.split('/'),
			relDir = bits.directory.split('/'),
			path = '',
			offset;

		var i = 0;
		for(offset = 0; offset < baseDir.length && offset < relDir.length && baseDir[offset] == relDir[offset]; offset++);
		for(i = 0; i < baseDir.length - offset - 1; i++) path += '../';
		for(i = offset; i < relDir.length - 1; i++) path += relDir[i] + '/';

		return (path || (bits.file ? '' : './')) + end;
	},

	toAbsolute: function(base){
		base = new URI(base);
		if (base) base.set('directory', '').set('file', '');
		return this.toRelative(base);
	},

	toRelative: function(base){
		return this.get('value', new URI(base));
	}

});

/*
Script: Element.Forms.js
	Extends the Element native object to include methods useful in managing inputs.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Element.implement({

	tidy: function(){
		this.set('value', this.get('value').tidy());
	},

	getTextInRange: function(start, end){
		return this.get('value').substring(start, end);
	},

	getSelectedText: function(){
		if (this.setSelectionRange) return this.getTextInRange(this.getSelectionStart(), this.getSelectionEnd());
		return document.selection.createRange().text;
	},

	getSelectedRange: function() {
		if ($defined(this.selectionStart)) return {start: this.selectionStart, end: this.selectionEnd};
		var pos = {start: 0, end: 0};
		var range = this.getDocument().selection.createRange();
		if (!range || range.parentElement() != this) return pos;
		var dup = range.duplicate();
		if (this.type == 'text') {
			pos.start = 0 - dup.moveStart('character', -100000);
			pos.end = pos.start + range.text.length;
		} else {
			var value = this.get('value');
			var offset = value.length - value.match(/[\n\r]*$/)[0].length;
			dup.moveToElementText(this);
			dup.setEndPoint('StartToEnd', range);
			pos.end = offset - dup.text.length;
			dup.setEndPoint('StartToStart', range);
			pos.start = offset - dup.text.length;
		}
		return pos;
	},

	getSelectionStart: function(){
		return this.getSelectedRange().start;
	},

	getSelectionEnd: function(){
		return this.getSelectedRange().end;
	},

	setCaretPosition: function(pos){
		if (pos == 'end') pos = this.get('value').length;
		this.selectRange(pos, pos);
		return this;
	},

	getCaretPosition: function(){
		return this.getSelectedRange().start;
	},

	selectRange: function(start, end){
		if (this.setSelectionRange) {
			this.focus();
			this.setSelectionRange(start, end);
		} else {
			var value = this.get('value');
			var diff = value.substr(start, end - start).replace(/\r/g, '').length;
			start = value.substr(0, start).replace(/\r/g, '').length;
			var range = this.createTextRange();
			range.collapse(true);
			range.moveEnd('character', start + diff);
			range.moveStart('character', start);
			range.select();
		}
		return this;
	},

	insertAtCursor: function(value, select){
		var pos = this.getSelectedRange();
		var text = this.get('value');
		this.set('value', text.substring(0, pos.start) + value + text.substring(pos.end, text.length));
		if ($pick(select, true)) this.selectRange(pos.start, pos.start + value.length);
		else this.setCaretPosition(pos.start + value.length);
		return this;
	},

	insertAroundCursor: function(options, select){
		options = $extend({
			before: '',
			defaultMiddle: '',
			after: ''
		}, options);
		var value = this.getSelectedText() || options.defaultMiddle;
		var pos = this.getSelectedRange();
		var text = this.get('value');
		if (pos.start == pos.end){
			this.set('value', text.substring(0, pos.start) + options.before + value + options.after + text.substring(pos.end, text.length));
			this.selectRange(pos.start + options.before.length, pos.end + options.before.length + value.length);
		} else {
			var current = text.substring(pos.start, pos.end);
			this.set('value', text.substring(0, pos.start) + options.before + current + options.after + text.substring(pos.end, text.length));
			var selStart = pos.start + options.before.length;
			if ($pick(select, true)) this.selectRange(selStart, selStart + current.length);
			else this.setCaretPosition(selStart + text.length);
		}
		return this;
	}

});

/*
Script: Element.Measure.js
	Extends the Element native object to include methods useful in measuring dimensions.

	Element.measure / .expose methods by Daniel Steigerwald
	License: MIT-style license.
	Copyright: Copyright (c) 2008 Daniel Steigerwald, daniel.steigerwald.cz

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Element.implement({

	measure: function(fn){
		var vis = function(el) {
			return !!(!el || el.offsetHeight || el.offsetWidth);
		};
		if (vis(this)) return fn.apply(this);
		var parent = this.getParent(),
			toMeasure = [],
			restorers = [];
		while (!vis(parent) && parent != document.body) {
			toMeasure.push(parent.expose());
			parent = parent.getParent();
		}
		var restore = this.expose();
		var result = fn.apply(this);
		restore();
		toMeasure.each(function(restore){
			restore();
		});
		return result;
	},

	expose: function(){
		if (this.getStyle('display') != 'none') return $empty;
		var before = this.style.cssText;
		this.setStyles({
			display: 'block',
			position: 'absolute',
			visibility: 'hidden'
		});
		return function(){
			this.style.cssText = before;
		}.bind(this);
	},

	getDimensions: function(options){
		options = $merge({computeSize: false},options);
		var dim = {};
		var getSize = function(el, options){
			return (options.computeSize)?el.getComputedSize(options):el.getSize();
		};
		if (this.getStyle('display') == 'none'){
			dim = this.measure(function(){
				return getSize(this, options);
			});
		} else {
			try { //safari sometimes crashes here, so catch it
				dim = getSize(this, options);
			}catch(e){}
		}
		return $chk(dim.x) ? $extend(dim, {width: dim.x, height: dim.y}) : $extend(dim, {x: dim.width, y: dim.height});
	},

	getComputedSize: function(options){
		options = $merge({
			styles: ['padding','border'],
			plains: {
				height: ['top','bottom'],
				width: ['left','right']
			},
			mode: 'both'
		}, options);
		var size = {width: 0,height: 0};
		switch (options.mode){
			case 'vertical':
				delete size.width;
				delete options.plains.width;
				break;
			case 'horizontal':
				delete size.height;
				delete options.plains.height;
				break;
		}
		var getStyles = [];
		//this function might be useful in other places; perhaps it should be outside this function?
		$each(options.plains, function(plain, key){
			plain.each(function(edge){
				options.styles.each(function(style){
					getStyles.push((style == 'border') ? style + '-' + edge + '-' + 'width' : style + '-' + edge);
				});
			});
		});
		var styles = {};
		getStyles.each(function(style){ styles[style] = this.getComputedStyle(style); }, this);
		var subtracted = [];
		$each(options.plains, function(plain, key){ //keys: width, height, plains: ['left', 'right'], ['top','bottom']
			var capitalized = key.capitalize();
			size['total' + capitalized] = 0;
			size['computed' + capitalized] = 0;
			plain.each(function(edge){ //top, left, right, bottom
				size['computed' + edge.capitalize()] = 0;
				getStyles.each(function(style, i){ //padding, border, etc.
					//'padding-left'.test('left') size['totalWidth'] = size['width'] + [padding-left]
					if (style.test(edge)){
						styles[style] = styles[style].toInt() || 0; //styles['padding-left'] = 5;
						size['total' + capitalized] = size['total' + capitalized] + styles[style];
						size['computed' + edge.capitalize()] = size['computed' + edge.capitalize()] + styles[style];
					}
					//if width != width (so, padding-left, for instance), then subtract that from the total
					if (style.test(edge) && key != style &&
						(style.test('border') || style.test('padding')) && !subtracted.contains(style)){
						subtracted.push(style);
						size['computed' + capitalized] = size['computed' + capitalized]-styles[style];
					}
				});
			});
		});

		['Width', 'Height'].each(function(value){
			var lower = value.toLowerCase();
			if(!$chk(size[lower])) return;

			size[lower] = size[lower] + this['offset' + value] + size['computed' + value];
			size['total' + value] = size[lower] + size['total' + value];
			delete size['computed' + value];
		}, this);

		return $extend(styles, size);
	}

});

/*
Script: Element.Pin.js
	Extends the Element native object to include the pin method useful for fixed positioning for elements.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

(function(){
	var supportsPositionFixed = false;
	window.addEvent('domready', function(){
		var test = new Element('div').setStyles({
			position: 'fixed',
			top: 0,
			right: 0
		}).inject(document.body);
		supportsPositionFixed = (test.offsetTop === 0);
		test.dispose();
	});

	Element.implement({

		pin: function(enable){
			if (this.getStyle('display') == 'none') return null;

			var p;
			if (enable !== false){
				p = this.getPosition();
				if (!this.retrieve('pinned')){
					var pos = {
						top: p.y - window.getScroll().y,
						left: p.x - window.getScroll().x
					};
					if (supportsPositionFixed){
						this.setStyle('position', 'fixed').setStyles(pos);
					} else {
						this.store('pinnedByJS', true);
						this.setStyles({
							position: 'absolute',
							top: p.y,
							left: p.x
						});
						this.store('scrollFixer', (function(){
							if (this.retrieve('pinned'))
								this.setStyles({
									top: pos.top.toInt() + window.getScroll().y,
									left: pos.left.toInt() + window.getScroll().x
								});
						}).bind(this));
						window.addEvent('scroll', this.retrieve('scrollFixer'));
					}
					this.store('pinned', true);
				}
			} else {
				var op;
				if (!Browser.Engine.trident){
					if (this.getParent().getComputedStyle('position') != 'static') op = this.getParent();
					else op = this.getParent().getOffsetParent();
				}
				p = this.getPosition(op);
				this.store('pinned', false);
				var reposition;
				if (supportsPositionFixed && !this.retrieve('pinnedByJS')){
					reposition = {
						top: p.y + window.getScroll().y,
						left: p.x + window.getScroll().x
					};
				} else {
					this.store('pinnedByJS', false);
					window.removeEvent('scroll', this.retrieve('scrollFixer'));
					reposition = {
						top: p.y,
						left: p.x
					};
				}
				this.setStyles($merge(reposition, {position: 'absolute'}));
			}
			return this.addClass('isPinned');
		},

		unpin: function(){
			return this.pin(false).removeClass('isPinned');
		},

		togglepin: function(){
			this.pin(!this.retrieve('pinned'));
		}

	});

})();

/*
Script: Element.Position.js
	Extends the Element native object to include methods useful positioning elements relative to others.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

(function(){

var original = Element.prototype.position;

Element.implement({

	position: function(options){
		//call original position if the options are x/y values
		if (options && ($defined(options.x) || $defined(options.y))) return original ? original.apply(this, arguments) : this;
		$each(options||{}, function(v, k){ if (!$defined(v)) delete options[k]; });
		options = $merge({
			relativeTo: document.body,
			position: {
				x: 'center', //left, center, right
				y: 'center' //top, center, bottom
			},
			edge: false,
			offset: {x: 0, y: 0},
			returnPos: false,
			relFixedPosition: false,
			ignoreMargins: false,
			allowNegative: false
		}, options);
		//compute the offset of the parent positioned element if this element is in one
		var parentOffset = {x: 0, y: 0};
		var parentPositioned = false;
		/* dollar around getOffsetParent should not be necessary, but as it does not return
		 * a mootools extended element in IE, an error occurs on the call to expose. See:
		 * http://mootools.lighthouseapp.com/projects/2706/tickets/333-element-getoffsetparent-inconsistency-between-ie-and-other-browsers */
		var offsetParent = this.measure(function(){
			return document.id(this.getOffsetParent());
		});
		if (offsetParent && offsetParent != this.getDocument().body){
			parentOffset = offsetParent.measure(function(){
				return this.getPosition();
			});
			parentPositioned = true;
			options.offset.x = options.offset.x - parentOffset.x;
			options.offset.y = options.offset.y - parentOffset.y;
		}
		//upperRight, bottomRight, centerRight, upperLeft, bottomLeft, centerLeft
		//topRight, topLeft, centerTop, centerBottom, center
		var fixValue = function(option){
			if ($type(option) != 'string') return option;
			option = option.toLowerCase();
			var val = {};
			if (option.test('left')) val.x = 'left';
			else if (option.test('right')) val.x = 'right';
			else val.x = 'center';
			if (option.test('upper') || option.test('top')) val.y = 'top';
			else if (option.test('bottom')) val.y = 'bottom';
			else val.y = 'center';
			return val;
		};
		options.edge = fixValue(options.edge);
		options.position = fixValue(options.position);
		if (!options.edge){
			if (options.position.x == 'center' && options.position.y == 'center') options.edge = {x:'center', y:'center'};
			else options.edge = {x:'left', y:'top'};
		}

		this.setStyle('position', 'absolute');
		var rel = document.id(options.relativeTo) || document.body;
		var calc = rel == document.body ? window.getScroll() : rel.getPosition();
		var top = calc.y;
		var left = calc.x;

		if (Browser.Engine.trident){
			var scrolls = rel.getScrolls();
			top += scrolls.y;
			left += scrolls.x;
		}

		var dim = this.getDimensions({computeSize: true, styles:['padding', 'border','margin']});
		if (options.ignoreMargins){
			options.offset.x = options.offset.x - dim['margin-left'];
			options.offset.y = options.offset.y - dim['margin-top'];
		}
		var pos = {};
		var prefY = options.offset.y;
		var prefX = options.offset.x;
		var winSize = window.getSize();
		switch(options.position.x){
			case 'left':
				pos.x = left + prefX;
				break;
			case 'right':
				pos.x = left + prefX + rel.offsetWidth;
				break;
			default: //center
				pos.x = left + ((rel == document.body ? winSize.x : rel.offsetWidth)/2) + prefX;
				break;
		}
		switch(options.position.y){
			case 'top':
				pos.y = top + prefY;
				break;
			case 'bottom':
				pos.y = top + prefY + rel.offsetHeight;
				break;
			default: //center
				pos.y = top + ((rel == document.body ? winSize.y : rel.offsetHeight)/2) + prefY;
				break;
		}

		if (options.edge){
			var edgeOffset = {};

			switch(options.edge.x){
				case 'left':
					edgeOffset.x = 0;
					break;
				case 'right':
					edgeOffset.x = -dim.x-dim.computedRight-dim.computedLeft;
					break;
				default: //center
					edgeOffset.x = -(dim.x/2);
					break;
			}
			switch(options.edge.y){
				case 'top':
					edgeOffset.y = 0;
					break;
				case 'bottom':
					edgeOffset.y = -dim.y-dim.computedTop-dim.computedBottom;
					break;
				default: //center
					edgeOffset.y = -(dim.y/2);
					break;
			}
			pos.x = pos.x + edgeOffset.x;
			pos.y = pos.y + edgeOffset.y;
		}
		pos = {
			left: ((pos.x >= 0 || parentPositioned || options.allowNegative) ? pos.x : 0).toInt(),
			top: ((pos.y >= 0 || parentPositioned || options.allowNegative) ? pos.y : 0).toInt()
		};
		if (rel.getStyle('position') == 'fixed' || options.relFixedPosition){
			var winScroll = window.getScroll();
			pos.top = pos.top.toInt() + winScroll.y;
			pos.left = pos.left.toInt() + winScroll.x;
		}

		if (options.returnPos) return pos;
		else this.setStyles(pos);
		return this;
	}

});

})();

/*
Script: Element.Shortcuts.js
	Extends the Element native object to include some shortcut methods.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Element.implement({

	isDisplayed: function(){
		return this.getStyle('display') != 'none';
	},

	toggle: function(){
		return this[this.isDisplayed() ? 'hide' : 'show']();
	},

	hide: function(){
		var d;
		try {
			//IE fails here if the element is not in the dom
			if ('none' != this.getStyle('display')) d = this.getStyle('display');
		} catch(e){}

		return this.store('originalDisplay', d || 'block').setStyle('display', 'none');
	},

	show: function(display){
		return this.setStyle('display', display || this.retrieve('originalDisplay') || 'block');
	},

	swapClass: function(remove, add){
		return this.removeClass(remove).addClass(add);
	}

});


/*
Script: FormValidator.js
	A css-class based form validation system.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/
var InputValidator = new Class({

	Implements: [Options],

	options: {
		errorMsg: 'Validation failed.',
		test: function(field){return true;}
	},

	initialize: function(className, options){
		this.setOptions(options);
		this.className = className;
	},

	test: function(field, props){
		if (document.id(field)) return this.options.test(document.id(field), props||this.getProps(field));
		else return false;
	},

	getError: function(field, props){
		var err = this.options.errorMsg;
		if ($type(err) == 'function') err = err(document.id(field), props||this.getProps(field));
		return err;
	},

	getProps: function(field){
		if (!document.id(field)) return {};
		return field.get('validatorProps');
	}

});

Element.Properties.validatorProps = {

	set: function(props){
		return this.eliminate('validatorProps').store('validatorProps', props);
	},

	get: function(props){
		if (props) this.set(props);
		if (this.retrieve('validatorProps')) return this.retrieve('validatorProps');
		if (this.getProperty('validatorProps')){
			try {
				this.store('validatorProps', JSON.decode(this.getProperty('validatorProps')));
			}catch(e){
				return {};
			}
		} else {
			var vals = this.get('class').split(' ').filter(function(cls){
				return cls.test(':');
			});
			if (!vals.length){
				this.store('validatorProps', {});
			} else {
				props = {};
				vals.each(function(cls){
					var split = cls.split(':');
					if (split[1]) {
						try {
							props[split[0]] = JSON.decode(split[1]);
						} catch(e) {}
					}
				});
				this.store('validatorProps', props);
			}
		}
		return this.retrieve('validatorProps');
	}

};

var FormValidator = new Class({

	Implements:[Options, Events],

	Binds: ['onSubmit'],

	options: {/*
		onFormValidate: $empty(isValid, form, event),
		onElementValidate: $empty(isValid, field, className, warn),
		onElementPass: $empty(field),
		onElementFail: $empty(field, validatorsFailed) */
		fieldSelectors: 'input, select, textarea',
		ignoreHidden: true,
		useTitles: false,
		evaluateOnSubmit: true,
		evaluateFieldsOnBlur: true,
		evaluateFieldsOnChange: true,
		serial: true,
		stopOnFailure: true,
		warningPrefix: function(){
			return FormValidator.getMsg('warningPrefix') || 'Warning: ';
		},
		errorPrefix: function(){
			return FormValidator.getMsg('errorPrefix') || 'Error: ';
		}
	},

	initialize: function(form, options){
		this.setOptions(options);
		this.element = document.id(form);
		this.element.store('validator', this);
		this.warningPrefix = $lambda(this.options.warningPrefix)();
		this.errorPrefix = $lambda(this.options.errorPrefix)();
		if (this.options.evaluateOnSubmit) this.element.addEvent('submit', this.onSubmit);
		if (this.options.evaluateFieldsOnBlur || this.options.evaluateFieldsOnChange) this.watchFields(this.getFields());
	},

	toElement: function(){
		return this.element;
	},

	getFields: function(){
		return (this.fields = this.element.getElements(this.options.fieldSelectors));
	},

	watchFields: function(fields){
		fields.each(function(el){
			if (this.options.evaluateFieldsOnBlur)
				el.addEvent('blur', this.validationMonitor.pass([el, false], this));
			if (this.options.evaluateFieldsOnChange)
				el.addEvent('change', this.validationMonitor.pass([el, true], this));
		}, this);
	},

	validationMonitor: function(){
		$clear(this.timer);
		this.timer = this.validateField.delay(50, this, arguments);
	},

	onSubmit: function(event){
		if (!this.validate(event) && event) event.preventDefault();
		else this.reset();
	},

	reset: function(){
		this.getFields().each(this.resetField, this);
		return this;
	},

	validate: function(event){
		var result = this.getFields().map(function(field){
			return this.validateField(field, true);
		}, this).every(function(v){ return v;});
		this.fireEvent('formValidate', [result, this.element, event]);
		if (this.options.stopOnFailure && !result && event) event.preventDefault();
		return result;
	},

	validateField: function(field, force){
		if (this.paused) return true;
		field = document.id(field);
		var passed = !field.hasClass('validation-failed');
		var failed, warned;
		if (this.options.serial && !force){
			failed = this.element.getElement('.validation-failed');
			warned = this.element.getElement('.warning');
		}
		if (field && (!failed || force || field.hasClass('validation-failed') || (failed && !this.options.serial))){
			var validators = field.className.split(' ').some(function(cn){
				return this.getValidator(cn);
			}, this);
			var validatorsFailed = [];
			field.className.split(' ').each(function(className){
				if (className && !this.test(className, field)) validatorsFailed.include(className);
			}, this);
			passed = validatorsFailed.length === 0;
			if (validators && !field.hasClass('warnOnly')){
				if (passed){
					field.addClass('validation-passed').removeClass('validation-failed');
					this.fireEvent('elementPass', field);
				} else {
					field.addClass('validation-failed').removeClass('validation-passed');
					this.fireEvent('elementFail', [field, validatorsFailed]);
				}
			}
			if (!warned){
				var warnings = field.className.split(' ').some(function(cn){
					if (cn.test('^warn-') || field.hasClass('warnOnly'))
						return this.getValidator(cn.replace(/^warn-/,''));
					else return null;
				}, this);
				field.removeClass('warning');
				var warnResult = field.className.split(' ').map(function(cn){
					if (cn.test('^warn-') || field.hasClass('warnOnly'))
						return this.test(cn.replace(/^warn-/,''), field, true);
					else return null;
				}, this);
			}
		}
		return passed;
	},

	test: function(className, field, warn){
		var validator = this.getValidator(className);
		field = document.id(field);
		if (field.hasClass('ignoreValidation')) return true;
		warn = $pick(warn, false);
		if (field.hasClass('warnOnly')) warn = true;
		var isValid = validator ? validator.test(field) : true;
		if (validator && this.isVisible(field)) this.fireEvent('elementValidate', [isValid, field, className, warn]);
		if (warn) return true;
		return isValid;
	},

	isVisible : function(field){
		if (!this.options.ignoreHidden) return true;
		while(field != document.body){
			if (document.id(field).getStyle('display') == 'none') return false;
			field = field.getParent();
		}
		return true;
	},

	resetField: function(field){
		field = document.id(field);
		if (field){
			field.className.split(' ').each(function(className){
				if (className.test('^warn-')) className = className.replace(/^warn-/, '');
				field.removeClass('validation-failed');
				field.removeClass('warning');
				field.removeClass('validation-passed');
			}, this);
		}
		return this;
	},

	stop: function(){
		this.paused = true;
		return this;
	},

	start: function(){
		this.paused = false;
		return this;
	},

	ignoreField: function(field, warn){
		field = document.id(field);
		if (field){
			this.enforceField(field);
			if (warn) field.addClass('warnOnly');
			else field.addClass('ignoreValidation');
		}
		return this;
	},

	enforceField: function(field){
		field = document.id(field);
		if (field) field.removeClass('warnOnly').removeClass('ignoreValidation');
		return this;
	}

});

FormValidator.getMsg = function(key){
	return MooTools.lang.get('FormValidator', key);
};

FormValidator.adders = {

	validators:{},

	add : function(className, options){
		this.validators[className] = new InputValidator(className, options);
		//if this is a class (this method is used by instances of FormValidator and the FormValidator namespace)
		//extend these validators into it
		//this allows validators to be global and/or per instance
		if (!this.initialize){
			this.implement({
				validators: this.validators
			});
		}
	},

	addAllThese : function(validators){
		$A(validators).each(function(validator){
			this.add(validator[0], validator[1]);
		}, this);
	},

	getValidator: function(className){
		return this.validators[className.split(':')[0]];
	}

};

$extend(FormValidator, FormValidator.adders);

FormValidator.implement(FormValidator.adders);

FormValidator.add('IsEmpty', {

	errorMsg: false,
	test: function(element){
		if (element.type == 'select-one' || element.type == 'select')
			return !(element.selectedIndex >= 0 && element.options[element.selectedIndex].value != '');
		else
			return ((element.get('value') == null) || (element.get('value').length == 0));
	}

});

FormValidator.addAllThese([

	['required', {
		errorMsg: function(){
			return FormValidator.getMsg('required');
		},
		test: function(element){
			return !FormValidator.getValidator('IsEmpty').test(element);
		}
	}],

	['minLength', {
		errorMsg: function(element, props){
			if ($type(props.minLength))
				return FormValidator.getMsg('minLength').substitute({minLength:props.minLength,length:element.get('value').length });
			else return '';
		},
		test: function(element, props){
			if ($type(props.minLength)) return (element.get('value').length >= $pick(props.minLength, 0));
			else return true;
		}
	}],

	['maxLength', {
		errorMsg: function(element, props){
			//props is {maxLength:10}
			if ($type(props.maxLength))
				return FormValidator.getMsg('maxLength').substitute({maxLength:props.maxLength,length:element.get('value').length });
			else return '';
		},
		test: function(element, props){
			//if the value is <= than the maxLength value, element passes test
			return (element.get('value').length <= $pick(props.maxLength, 10000));
		}
	}],

	['validate-integer', {
		errorMsg: FormValidator.getMsg.pass('integer'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) || (/^(-?[1-9]\d*|0)$/).test(element.get('value'));
		}
	}],

	['validate-numeric', {
		errorMsg: FormValidator.getMsg.pass('numeric'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) ||
				(/^-?(?:0$0(?=\d*\.)|[1-9]|0)\d*(\.\d+)?$/).test(element.get('value'));
		}
	}],

	['validate-digits', {
		errorMsg: FormValidator.getMsg.pass('digits'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) || (/^[\d() .:\-\+#]+$/.test(element.get('value')));
		}
	}],

	['validate-alpha', {
		errorMsg: FormValidator.getMsg.pass('alpha'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) ||  (/^[a-zA-Z]+$/).test(element.get('value'));
		}
	}],

	['validate-alphanum', {
		errorMsg: FormValidator.getMsg.pass('alphanum'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) || !(/\W/).test(element.get('value'));
		}
	}],

	['validate-date', {
		errorMsg: function(element, props){
			if (Date.parse){
				var format = props.dateFormat || '%x';
				return FormValidator.getMsg('dateSuchAs').substitute({date: new Date().format(format)});
			} else {
				return FormValidator.getMsg('dateInFormatMDY');
			}
		},
		test: function(element, props){
			if (FormValidator.getValidator('IsEmpty').test(element)) return true;
			var d;
			if (Date.parse){
				var format = props.dateFormat || '%x';
				d = Date.parse(element.get('value'));
				var formatted = d.format(format);
				if (formatted != 'invalid date') element.set('value', formatted);
				return !isNaN(d);
			} else {
				var regex = /^(\d{2})\/(\d{2})\/(\d{4})$/;
				if (!regex.test(element.get('value'))) return false;
				d = new Date(element.get('value').replace(regex, '$1/$2/$3'));
				return (parseInt(RegExp.$1, 10) == (1 + d.getMonth())) &&
					(parseInt(RegExp.$2, 10) == d.getDate()) &&
					(parseInt(RegExp.$3, 10) == d.getFullYear());
			}
		}
	}],

	['validate-email', {
		errorMsg: FormValidator.getMsg.pass('email'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) || (/^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i).test(element.get('value'));
		}
	}],

	['validate-url', {
		errorMsg: FormValidator.getMsg.pass('url'),
		test: function(element){
			return FormValidator.getValidator('IsEmpty').test(element) || (/^(https?|ftp|rmtp|mms):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i).test(element.get('value'));
		}
	}],

	['validate-currency-dollar', {
		errorMsg: FormValidator.getMsg.pass('currencyDollar'),
		test: function(element){
			// [$]1[##][,###]+[.##]
			// [$]1###+[.##]
			// [$]0.##
			// [$].##
			return FormValidator.getValidator('IsEmpty').test(element) ||  (/^\$?\-?([1-9]{1}[0-9]{0,2}(\,[0-9]{3})*(\.[0-9]{0,2})?|[1-9]{1}\d*(\.[0-9]{0,2})?|0(\.[0-9]{0,2})?|(\.[0-9]{1,2})?)$/).test(element.get('value'));
		}
	}],

	['validate-one-required', {
		errorMsg: FormValidator.getMsg.pass('oneRequired'),
		test: function(element, props){
			var p = document.id(props['validate-one-required']) || element.parentNode;
			return p.getElements('input').some(function(el){
				if (['checkbox', 'radio'].contains(el.get('type'))) return el.get('checked');
				return el.get('value');
			});
		}
	}]

]);

Element.Properties.validator = {

	set: function(options){
		var validator = this.retrieve('validator');
		if (validator) validator.setOptions(options);
		return this.store('validator:options');
	},

	get: function(options){
		if (options || !this.retrieve('validator')){
			if (options || !this.retrieve('validator:options')) this.set('validator', options);
			this.store('validator', new FormValidator(this, this.retrieve('validator:options')));
		}
		return this.retrieve('validator');
	}

};

Element.implement({

	validate: function(options){
		this.set('validator', options);
		return this.get('validator', options).validate();
	}

});

/*
Script: FormValidator.Inline.js
	Extends FormValidator to add inline messages.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

FormValidator.Inline = new Class({

	Extends: FormValidator,

	options: {
		scrollToErrorsOnSubmit: true,
		scrollFxOptions: {
			transition: 'quad:out',
			offset: {
				y: -20
			}
		}
	},

	initialize: function(form, options){
		this.parent(form, options);
		this.addEvent('onElementValidate', function(isValid, field, className, warn){
			var validator = this.getValidator(className);
			if (!isValid && validator.getError(field)){
				if (warn) field.addClass('warning');
				var advice = this.makeAdvice(className, field, validator.getError(field), warn);
				this.insertAdvice(advice, field);
				this.showAdvice(className, field);
			} else {
				this.hideAdvice(className, field);
			}
		});
	},

	makeAdvice: function(className, field, error, warn){
		var errorMsg = (warn)?this.warningPrefix:this.errorPrefix;
			errorMsg += (this.options.useTitles) ? field.title || error:error;
		var cssClass = (warn) ? 'warning-advice' : 'validation-advice';
		var advice = this.getAdvice(className, field);
		if(advice) {
			advice = advice.clone(true, true).set('html', errorMsg).replaces(advice);
		} else {
			advice = new Element('div', {
				html: errorMsg,
				styles: { display: 'none' },
				id: 'advice-' + className + '-' + this.getFieldId(field)
			}).addClass(cssClass);
		}
		field.store('advice-' + className, advice);
		return advice;
	},

	getFieldId : function(field){
		return field.id ? field.id : field.id = 'input_' + field.name;
	},

	showAdvice: function(className, field){
		var advice = this.getAdvice(className, field);
		if (advice && !field.retrieve(this.getPropName(className))
				&& (advice.getStyle('display') == 'none'
				|| advice.getStyle('visiblity') == 'hidden'
				|| advice.getStyle('opacity') == 0)){
			field.store(this.getPropName(className), true);
			if (advice.reveal) advice.reveal();
			else advice.setStyle('display', 'block');
		}
	},

	hideAdvice: function(className, field){
		var advice = this.getAdvice(className, field);
		if (advice && field.retrieve(this.getPropName(className))){
			field.store(this.getPropName(className), false);
			//if Fx.Reveal.js is present, transition the advice out
			if (advice.dissolve) advice.dissolve();
			else advice.setStyle('display', 'none');
		}
	},

	getPropName: function(className){
		return 'advice' + className;
	},

	resetField: function(field){
		field = document.id(field);
		if (!field) return this;
		this.parent(field);
		field.className.split(' ').each(function(className){
			this.hideAdvice(className, field);
		}, this);
		return this;
	},

	getAllAdviceMessages: function(field, force){
		var advice = [];
		if (field.hasClass('ignoreValidation') && !force) return advice;
		var validators = field.className.split(' ').some(function(cn){
			var warner = cn.test('^warn-') || field.hasClass('warnOnly');
			if (warner) cn = cn.replace(/^warn-/, '');
			var validator = this.getValidator(cn);
			if (!validator) return;
			advice.push({
				message: validator.getError(field),
				warnOnly: warner,
				passed: validator.test(),
				validator: validator
			});
		}, this);
		return advice;
	},

	getAdvice: function(className, field){
		return field.retrieve('advice-' + className);
	},

	insertAdvice: function(advice, field){
		//Check for error position prop
		var props = field.get('validatorProps');
		//Build advice
		if (!props.msgPos || !document.id(props.msgPos)){
			if(field.type.toLowerCase() == 'radio') field.getParent().adopt(advice);
			else advice.inject(document.id(field), 'after');
		} else {
			document.id(props.msgPos).grab(advice);
		}
	},

	validateField: function(field, force){
		var result = this.parent(field, force);
		if (this.options.scrollToErrorsOnSubmit && !result){
			var failed = document.id(this).getElement('.validation-failed');
			var par = document.id(this).getParent();
			while (par != document.body && par.getScrollSize().y == par.getSize().y){
				par = par.getParent();
			}
			var fx = par.retrieve('fvScroller');
			if (!fx && window.Fx && Fx.Scroll){
				fx = new Fx.Scroll(par, this.options.scrollFxOptions);
				par.store('fvScroller', fx);
			}
			if (failed){
				if (fx) fx.toElement(failed);
				else par.scrollTo(par.getScroll().x, failed.getPosition(par).y - 20);
			}
		}
		return result;
	}

});


/*
Script: FormValidator.Extras.js
	Additional validators for the FormValidator class.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/
FormValidator.addAllThese([

	['validate-enforce-oncheck', {
		test: function(element, props){
			if (element.checked){
				var fv = element.getParent('form').retrieve('validator');
				if (!fv) return true;
				(props.toEnforce || document.id(props.enforceChildrenOf).getElements('input, select, textarea')).map(function(item){
					fv.enforceField(item);
				});
			}
			return true;
		}
	}],

	['validate-ignore-oncheck', {
		test: function(element, props){
			if (element.checked){
				var fv = element.getParent('form').retrieve('validator');
				if (!fv) return true;
				(props.toIgnore || document.id(props.ignoreChildrenOf).getElements('input, select, textarea')).each(function(item){
					fv.ignoreField(item);
					fv.resetField(item);
				});
			}
			return true;
		}
	}],

	['validate-nospace', {
		errorMsg: function(){
			return FormValidator.getMsg('noSpace');
		},
		test: function(element, props){
			return !element.get('value').test(/\s/);
		}
	}],

	['validate-toggle-oncheck', {
		test: function(element, props){
			var fv = element.getParent('form').retrieve('validator');
			if (!fv) return true;
			var eleArr = props.toToggle || document.id(props.toToggleChildrenOf).getElements('input, select, textarea');
			if (!element.checked){
				eleArr.each(function(item){
					fv.ignoreField(item);
					fv.resetField(item);
				});
			} else {
				eleArr.each(function(item){
					fv.enforceField(item);
				});
			}
			return true;
		}
	}],

	['validate-reqchk-bynode', {
		errorMsg: function(){
			return FormValidator.getMsg('reqChkByNode');
		},
		test: function(element, props){
			return (document.id(props.nodeId).getElements(props.selector || 'input[type=checkbox], input[type=radio]')).some(function(item){
				return item.checked;
			});
		}
	}],

	['validate-required-check', {
		errorMsg: function(element, props){
			return props.useTitle ? element.get('title') : FormValidator.getMsg('requiredChk');
		},
		test: function(element, props){
			return !!element.checked;
		}
	}],

	['validate-reqchk-byname', {
		errorMsg: function(element, props){
			return FormValidator.getMsg('reqChkByName').substitute({label: props.label || element.get('type')});
		},
		test: function(element, props){
			var grpName = props.groupName || element.get('name');
			var oneCheckedItem = $$(document.getElementsByName(grpName)).some(function(item, index){
				return item.checked;
			});
			var fv = element.getParent('form').retrieve('validator');
			if (oneCheckedItem && fv) fv.resetField(element);
			return oneCheckedItem;
		}
	}],

	['validate-match', {
		errorMsg: function(element, props){
			return FormValidator.getMsg('match').substitute({matchName: props.matchName || document.id(props.matchInput).get('name')});
		},
		test: function(element, props){
			var eleVal = element.get('value');
			var matchVal = document.id(props.matchInput) && document.id(props.matchInput).get('value');
			return eleVal && matchVal ? eleVal == matchVal : true;
		}
	}],

	['validate-after-date', {
		errorMsg: function(element, props){
			return FormValidator.getMsg('afterDate').substitute({
				label: props.afterLabel || (props.afterElement ? FormValidator.getMsg('startDate') : FormValidator.getMsg('currentDate'))
			});
		},
		test: function(element, props){
			var start = document.id(props.afterElement) ? Date.parse(document.id(props.afterElement).get('value')) : new Date();
			var end = Date.parse(element.get('value'));
			return end && start ? end >= start : true;
		}
	}],

	['validate-before-date', {
		errorMsg: function(element, props){
			return FormValidator.getMsg('beforeDate').substitute({
				label: props.beforeLabel || (props.beforeElement ? FormValidator.getMsg('endDate') : FormValidator.getMsg('currentDate'))
			});
		},
		test: function(element, props){
			var start = Date.parse(element.get('value'));
			var end = document.id(props.beforeElement) ? Date.parse(document.id(props.beforeElement).get('value')) : new Date();
			return end && start ? end >= start : true;
		}
	}],

	['validate-custom-required', {
		errorMsg: function(){
			return FormValidator.getMsg('required');
		},
		test: function(element, props){
			return element.get('value') != props.emptyValue;
		}
	}],

	['validate-same-month', {
		errorMsg: function(element, props){
			var startMo = document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value');
			var eleVal = element.get('value');
			if (eleVal != '') return FormValidator.getMsg(startMo ? 'sameMonth' : 'startMonth');
		},
		test: function(element, props){
			var d1 = Date.parse(element.get('value'));
			var d2 = Date.parse(document.id(props.sameMonthAs) && document.id(props.sameMonthAs).get('value'));
			return d1 && d2 ? d1.format('%B') == d2.format('%B') : true;
		}
	}]

]);

/*
Script: OverText.js
	Shows text over an input that disappears when the user clicks into it. The text remains hidden if the user adds a value.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

var OverText = new Class({

	Implements: [Options, Events, Class.Occlude],

	Binds: ['reposition', 'assert', 'focus'],

	options: {/*
		textOverride: null,
		onFocus: $empty()
		onTextHide: $empty(textEl, inputEl),
		onTextShow: $empty(textEl, inputEl), */
		element: 'label',
		positionOptions: {
			position: 'upperLeft',
			edge: 'upperLeft',
			offset: {
				x: 4,
				y: 2
			}
		},
		poll: false,
		pollInterval: 250
	},

	property: 'OverText',

	initialize: function(element, options){
		this.element = document.id(element);
		if (this.occlude()) return this.occluded;
		this.setOptions(options);
		this.attach(this.element);
		OverText.instances.push(this);
		if (this.options.poll) this.poll();
		return this;
	},

	toElement: function(){
		return this.element;
	},

	attach: function(){
		var val = this.options.textOverride || this.element.get('alt') || this.element.get('title');
		if (!val) return;
		this.text = new Element(this.options.element, {
			'class': 'overTxtLabel',
			styles: {
				lineHeight: 'normal',
				position: 'absolute'
			},
			html: val,
			events: {
				click: this.hide.pass(true, this)
			}
		}).inject(this.element, 'after');
		if (this.options.element == 'label') this.text.set('for', this.element.get('id'));
		this.element.addEvents({
			focus: this.focus,
			blur: this.assert,
			change: this.assert
		}).store('OverTextDiv', this.text);
		window.addEvent('resize', this.reposition.bind(this));
		this.assert(true);
		this.reposition();
	},

	startPolling: function(){
		this.pollingPaused = false;
		return this.poll();
	},

	poll: function(stop){
		//start immediately
		//pause on focus
		//resumeon blur
		if (this.poller && !stop) return this;
		var test = function(){
			if (!this.pollingPaused) this.assert(true);
		}.bind(this);
		if (stop) $clear(this.poller);
		else this.poller = test.periodical(this.options.pollInterval, this);
		return this;
	},

	stopPolling: function(){
		this.pollingPaused = true;
		return this.poll(true);
	},

	focus: function(){
		if (!this.text.isDisplayed() || this.element.get('disabled')) return;
		this.hide();
	},

	hide: function(suppressFocus){
		if (this.text.isDisplayed() && !this.element.get('disabled')){
			this.text.hide();
			this.fireEvent('textHide', [this.text, this.element]);
			this.pollingPaused = true;
			try {
				if (!suppressFocus) this.element.fireEvent('focus').focus();
			} catch(e){} //IE barfs if you call focus on hidden elements
		}
		return this;
	},

	show: function(){
		if (!this.text.isDisplayed()){
			this.text.show();
			this.reposition();
			this.fireEvent('textShow', [this.text, this.element]);
			this.pollingPaused = false;
		}
		return this;
	},

	assert: function(suppressFocus){
		this[this.test() ? 'show' : 'hide'](suppressFocus);
	},

	test: function(){
		var v = this.element.get('value');
		return !v;
	},

	reposition: function(){
		this.assert(true);
		if (!this.element.getParent() || !this.element.offsetHeight) return this.stopPolling().hide();
		if (this.test()) this.text.position($merge(this.options.positionOptions, {relativeTo: this.element}));
		return this;
	}

});

OverText.instances = [];

OverText.update = function(){

	return OverText.instances.map(function(ot){
		if (ot.element && ot.text) return ot.reposition();
		return null; //the input or the text was destroyed
	});

};

if (window.Fx && Fx.Reveal) {
	Fx.Reveal.implement({
		hideInputs: Browser.Engine.trident ? 'select, input, textarea, object, embed, .overTxtLabel' : false
	});
}

/*
Script: Fx.Elements.js
	Effect to change any number of CSS properties of any number of Elements.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

Fx.Elements = new Class({

	Extends: Fx.CSS,

	initialize: function(elements, options){
		this.elements = this.subject = $$(elements);
		this.parent(options);
	},

	compute: function(from, to, delta){
		var now = {};
		for (var i in from){
			var iFrom = from[i], iTo = to[i], iNow = now[i] = {};
			for (var p in iFrom) iNow[p] = this.parent(iFrom[p], iTo[p], delta);
		}
		return now;
	},

	set: function(now){
		for (var i in now){
			var iNow = now[i];
			for (var p in iNow) this.render(this.elements[i], p, iNow[p], this.options.unit);
		}
		return this;
	},

	start: function(obj){
		if (!this.check(obj)) return this;
		var from = {}, to = {};
		for (var i in obj){
			var iProps = obj[i], iFrom = from[i] = {}, iTo = to[i] = {};
			for (var p in iProps){
				var parsed = this.prepare(this.elements[i], p, iProps[p]);
				iFrom[p] = parsed.from;
				iTo[p] = parsed.to;
			}
		}
		return this.parent(from, to);
	}

});

/*
Script: Fx.Accordion.js
	An Fx.Elements extension which allows you to easily create accordion type controls.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Accordion = Fx.Accordion = new Class({

	Extends: Fx.Elements,

	options: {/*
		onActive: $empty(toggler, section),
		onBackground: $empty(toggler, section),*/
		display: 0,
		show: false,
		height: true,
		width: false,
		opacity: true,
		fixedHeight: false,
		fixedWidth: false,
		wait: false,
		alwaysHide: false,
		trigger: 'click',
		initialDisplayFx: true
	},

	initialize: function(){
		var params = Array.link(arguments, {'container': Element.type, 'options': Object.type, 'togglers': $defined, 'elements': $defined});
		this.parent(params.elements, params.options);
		this.togglers = $$(params.togglers);
		this.container = document.id(params.container);
		this.previous = -1;
		if (this.options.alwaysHide) this.options.wait = true;
		if ($chk(this.options.show)){
			this.options.display = false;
			this.previous = this.options.show;
		}
		if (this.options.start){
			this.options.display = false;
			this.options.show = false;
		}
		this.effects = {};
		if (this.options.opacity) this.effects.opacity = 'fullOpacity';
		if (this.options.width) this.effects.width = this.options.fixedWidth ? 'fullWidth' : 'offsetWidth';
		if (this.options.height) this.effects.height = this.options.fixedHeight ? 'fullHeight' : 'scrollHeight';
		for (var i = 0, l = this.togglers.length; i < l; i++) this.addSection(this.togglers[i], this.elements[i]);
		this.elements.each(function(el, i){
			if (this.options.show === i){
				this.fireEvent('active', [this.togglers[i], el]);
			} else {
				for (var fx in this.effects) el.setStyle(fx, 0);
			}
		}, this);
		if ($chk(this.options.display)) this.display(this.options.display, this.options.initialDisplayFx);
	},

	addSection: function(toggler, element){
		toggler = document.id(toggler);
		element = document.id(element);
		var test = this.togglers.contains(toggler);
		this.togglers.include(toggler);
		this.elements.include(element);
		var idx = this.togglers.indexOf(toggler);
		toggler.addEvent(this.options.trigger, this.display.bind(this, idx));
		if (this.options.height) element.setStyles({'padding-top': 0, 'border-top': 'none', 'padding-bottom': 0, 'border-bottom': 'none'});
		if (this.options.width) element.setStyles({'padding-left': 0, 'border-left': 'none', 'padding-right': 0, 'border-right': 'none'});
		element.fullOpacity = 1;
		if (this.options.fixedWidth) element.fullWidth = this.options.fixedWidth;
		if (this.options.fixedHeight) element.fullHeight = this.options.fixedHeight;
		element.setStyle('overflow', 'hidden');
		if (!test){
			for (var fx in this.effects) element.setStyle(fx, 0);
		}
		return this;
	},

	display: function(index, useFx){
		useFx = $pick(useFx, true);
		index = ($type(index) == 'element') ? this.elements.indexOf(index) : index;
		if ((this.timer && this.options.wait) || (index === this.previous && !this.options.alwaysHide)) return this;
		this.previous = index;
		var obj = {};
		this.elements.each(function(el, i){
			obj[i] = {};
			var hide = (i != index) || (this.options.alwaysHide && (el.offsetHeight > 0));
			this.fireEvent(hide ? 'background' : 'active', [this.togglers[i], el]);
			for (var fx in this.effects) obj[i][fx] = hide ? 0 : el[this.effects[fx]];
		}, this);
		return useFx ? this.start(obj) : this.set(obj);
	}

});

/*
Script: Fx.Move.js
	Defines Fx.Move, a class that works with Element.Position.js to transition an element from one location to another.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Fx.Move = new Class({

	Extends: Fx.Morph,

	options: {
		relativeTo: document.body,
		position: 'center',
		edge: false,
		offset: {x: 0, y: 0}
	},

	start: function(destination){
		return this.parent(this.element.position($merge(this.options, destination, {returnPos: true})));
	}

});

Element.Properties.move = {

	set: function(options){
		var morph = this.retrieve('move');
		if (morph) morph.cancel();
		return this.eliminate('move').store('move:options', $extend({link: 'cancel'}, options));
	},

	get: function(options){
		if (options || !this.retrieve('move')){
			if (options || !this.retrieve('move:options')) this.set('move', options);
			this.store('move', new Fx.Move(this, this.retrieve('move:options')));
		}
		return this.retrieve('move');
	}

};

Element.implement({

	move: function(options){
		this.get('move').start(options);
		return this;
	}

});


/*
Script: Fx.Reveal.js
	Defines Fx.Reveal, a class that shows and hides elements with a transition.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Fx.Reveal = new Class({

	Extends: Fx.Morph,

	options: {/*
		onShow: $empty(thisElement),
		onHide: $empty(thisElement),
		onComplete: $empty(thisElement),
		heightOverride: null,
		widthOverride: null, */
		styles: ['padding', 'border', 'margin'],
		transitionOpacity: !Browser.Engine.trident4,
		mode: 'vertical',
		display: 'block',
		hideInputs: Browser.Engine.trident ? 'select, input, textarea, object, embed' : false
	},

	dissolve: function(){
		try {
			if (!this.hiding && !this.showing){
				if (this.element.getStyle('display') != 'none'){
					this.hiding = true;
					this.showing = false;
					this.hidden = true;
					var startStyles = this.element.getComputedSize({
						styles: this.options.styles,
						mode: this.options.mode
					});
					var setToAuto = (this.element.style.height === ''||this.element.style.height == 'auto');
					this.element.setStyle('display', 'block');
					if (this.options.transitionOpacity) startStyles.opacity = 1;
					var zero = {};
					$each(startStyles, function(style, name){
						zero[name] = [style, 0];
					}, this);
					var overflowBefore = this.element.getStyle('overflow');
					this.element.setStyle('overflow', 'hidden');
					var hideThese = this.options.hideInputs ? this.element.getElements(this.options.hideInputs) : null;
					this.$chain.unshift(function(){
						if (this.hidden){
							this.hiding = false;
							$each(startStyles, function(style, name){
								startStyles[name] = style;
							}, this);
							this.element.setStyles($merge({display: 'none', overflow: overflowBefore}, startStyles));
							if (setToAuto){
								if (['vertical', 'both'].contains(this.options.mode)) this.element.style.height = '';
								if (['width', 'both'].contains(this.options.mode)) this.element.style.width = '';
							}
							if (hideThese) hideThese.setStyle('visibility', 'visible');
						}
						this.fireEvent('hide', this.element);
						this.callChain();
					}.bind(this));
					if (hideThese) hideThese.setStyle('visibility', 'hidden');
					this.start(zero);
				} else {
					this.callChain.delay(10, this);
					this.fireEvent('complete', this.element);
					this.fireEvent('hide', this.element);
				}
			} else if (this.options.link == 'chain'){
				this.chain(this.dissolve.bind(this));
			} else if (this.options.link == 'cancel' && !this.hiding){
				this.cancel();
				this.dissolve();
			}
		} catch(e){
			this.hiding = false;
			this.element.setStyle('display', 'none');
			this.callChain.delay(10, this);
			this.fireEvent('complete', this.element);
			this.fireEvent('hide', this.element);
		}
		return this;
	},

	reveal: function(){
		try {
			if (!this.showing && !this.hiding){
				if (this.element.getStyle('display') == 'none' ||
					 this.element.getStyle('visiblity') == 'hidden' ||
					 this.element.getStyle('opacity') == 0){
					this.showing = true;
					this.hiding = false;
					this.hidden = false;
					var setToAuto, startStyles;
					//toggle display, but hide it
					this.element.measure(function(){
						setToAuto = (this.element.style.height === '' || this.element.style.height == 'auto');
						//create the styles for the opened/visible state
						startStyles = this.element.getComputedSize({
							styles: this.options.styles,
							mode: this.options.mode
						});
					}.bind(this));
					$each(startStyles, function(style, name){
						startStyles[name] = style;
					});
					//if we're overridding height/width
					if ($chk(this.options.heightOverride)) startStyles.height = this.options.heightOverride.toInt();
					if ($chk(this.options.widthOverride)) startStyles.width = this.options.widthOverride.toInt();
					if (this.options.transitionOpacity) {
						this.element.setStyle('opacity', 0);
						startStyles.opacity = 1;
					}
					//create the zero state for the beginning of the transition
					var zero = {
						height: 0,
						display: this.options.display
					};
					$each(startStyles, function(style, name){ zero[name] = 0; });
					var overflowBefore = this.element.getStyle('overflow');
					//set to zero
					this.element.setStyles($merge(zero, {overflow: 'hidden'}));
					//hide inputs
					var hideThese = this.options.hideInputs ? this.element.getElements(this.options.hideInputs) : null;
					if (hideThese) hideThese.setStyle('visibility', 'hidden');
					//start the effect
					this.start(startStyles);
					this.$chain.unshift(function(){
						this.element.setStyle('overflow', overflowBefore);
						if (!this.options.heightOverride && setToAuto){
							if (['vertical', 'both'].contains(this.options.mode)) this.element.style.height = '';
							if (['width', 'both'].contains(this.options.mode)) this.element.style.width = '';
						}
						if (!this.hidden) this.showing = false;
						if (hideThese) hideThese.setStyle('visibility', 'visible');
						this.callChain();
						this.fireEvent('show', this.element);
					}.bind(this));
				} else {
					this.callChain();
					this.fireEvent('complete', this.element);
					this.fireEvent('show', this.element);
				}
			} else if (this.options.link == 'chain'){
				this.chain(this.reveal.bind(this));
			} else if (this.options.link == 'cancel' && !this.showing){
				this.cancel();
				this.reveal();
			}
		} catch(e){
			this.element.setStyles({
				display: this.options.display,
				visiblity: 'visible',
				opacity: 1
			});
			this.showing = false;
			this.callChain.delay(10, this);
			this.fireEvent('complete', this.element);
			this.fireEvent('show', this.element);
		}
		return this;
	},

	toggle: function(){
		if (this.element.getStyle('display') == 'none' ||
			 this.element.getStyle('visiblity') == 'hidden' ||
			 this.element.getStyle('opacity') == 0){
			this.reveal();
		} else {
			this.dissolve();
		}
		return this;
	}

});

Element.Properties.reveal = {

	set: function(options){
		var reveal = this.retrieve('reveal');
		if (reveal) reveal.cancel();
		return this.eliminate('reveal').store('reveal:options', $extend({link: 'cancel'}, options));
	},

	get: function(options){
		if (options || !this.retrieve('reveal')){
			if (options || !this.retrieve('reveal:options')) this.set('reveal', options);
			this.store('reveal', new Fx.Reveal(this, this.retrieve('reveal:options')));
		}
		return this.retrieve('reveal');
	}

};

Element.Properties.dissolve = Element.Properties.reveal;

Element.implement({

	reveal: function(options){
		this.get('reveal', options).reveal();
		return this;
	},

	dissolve: function(options){
		this.get('reveal', options).dissolve();
		return this;
	},

	nix: function(){
		var params = Array.link(arguments, {destroy: Boolean.type, options: Object.type});
		this.get('reveal', params.options).dissolve().chain(function(){
			this[params.destroy ? 'destroy' : 'dispose']();
		}.bind(this));
		return this;
	},

	wink: function(){
		var params = Array.link(arguments, {duration: Number.type, options: Object.type});
		var reveal = this.get('reveal', params.options);
		reveal.reveal().chain(function(){
			(function(){
				reveal.dissolve();
			}).delay(params.duration || 2000);
		});
	}


});

/*
Script: Fx.Scroll.js
	Effect to smoothly scroll any element, including the window.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

Fx.Scroll = new Class({

	Extends: Fx,

	options: {
		offset: {x: 0, y: 0},
		wheelStops: true
	},

	initialize: function(element, options){
		this.element = this.subject = document.id(element);
		this.parent(options);
		var cancel = this.cancel.bind(this, false);

		if ($type(this.element) != 'element') this.element = document.id(this.element.getDocument().body);

		var stopper = this.element;

		if (this.options.wheelStops){
			this.addEvent('start', function(){
				stopper.addEvent('mousewheel', cancel);
			}, true);
			this.addEvent('complete', function(){
				stopper.removeEvent('mousewheel', cancel);
			}, true);
		}
	},

	set: function(){
		var now = Array.flatten(arguments);
		this.element.scrollTo(now[0], now[1]);
	},

	compute: function(from, to, delta){
		return [0, 1].map(function(i){
			return Fx.compute(from[i], to[i], delta);
		});
	},

	start: function(x, y){
		if (!this.check(x, y)) return this;
		var offsetSize = this.element.getSize(), scrollSize = this.element.getScrollSize();
		var scroll = this.element.getScroll(), values = {x: x, y: y};
		for (var z in values){
			var max = scrollSize[z] - offsetSize[z];
			if ($chk(values[z])) values[z] = ($type(values[z]) == 'number') ? values[z].limit(0, max) : max;
			else values[z] = scroll[z];
			values[z] += this.options.offset[z];
		}
		return this.parent([scroll.x, scroll.y], [values.x, values.y]);
	},

	toTop: function(){
		return this.start(false, 0);
	},

	toLeft: function(){
		return this.start(0, false);
	},

	toRight: function(){
		return this.start('right', false);
	},

	toBottom: function(){
		return this.start(false, 'bottom');
	},

	toElement: function(el){
		var position = document.id(el).getPosition(this.element);
		return this.start(position.x, position.y);
	},

	scrollIntoView: function(el, axes, offset){
		axes = axes ? $splat(axes) : ['x','y'];
		var to = {};
		el = document.id(el);
		var pos = el.getPosition(this.element);
		var size = el.getSize();
		var scroll = this.element.getScroll();
		var containerSize = this.element.getSize();
		var edge = {
			x: pos.x + size.x,
			y: pos.y + size.y
		};
		['x','y'].each(function(axis) {
			if (axes.contains(axis)) {
				if (edge[axis] > scroll[axis] + containerSize[axis]) to[axis] = edge[axis] - containerSize[axis];
				if (pos[axis] < scroll[axis]) to[axis] = pos[axis];
			}
			if (to[axis] == null) to[axis] = scroll[axis];
			if (offset && offset[axis]) to[axis] = to[axis] + offset[axis];
		}, this);
		if (to.x != scroll.x || to.y != scroll.y) this.start(to.x, to.y);
		return this;
	}

});


/*
Script: Fx.Slide.js
	Effect to slide an element in and out of view.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

Fx.Slide = new Class({

	Extends: Fx,

	options: {
		mode: 'vertical'
	},

	initialize: function(element, options){
		this.addEvent('complete', function(){
			this.open = (this.wrapper['offset' + this.layout.capitalize()] != 0);
			if (this.open && Browser.Engine.webkit419) this.element.dispose().inject(this.wrapper);
		}, true);
		this.element = this.subject = document.id(element);
		this.parent(options);
		var wrapper = this.element.retrieve('wrapper');
		this.wrapper = wrapper || new Element('div', {
			styles: $extend(this.element.getStyles('margin', 'position'), {overflow: 'hidden'})
		}).wraps(this.element);
		this.element.store('wrapper', this.wrapper).setStyle('margin', 0);
		this.now = [];
		this.open = true;
	},

	vertical: function(){
		this.margin = 'margin-top';
		this.layout = 'height';
		this.offset = this.element.offsetHeight;
	},

	horizontal: function(){
		this.margin = 'margin-left';
		this.layout = 'width';
		this.offset = this.element.offsetWidth;
	},

	set: function(now){
		this.element.setStyle(this.margin, now[0]);
		this.wrapper.setStyle(this.layout, now[1]);
		return this;
	},

	compute: function(from, to, delta){
		return [0, 1].map(function(i){
			return Fx.compute(from[i], to[i], delta);
		});
	},

	start: function(how, mode){
		if (!this.check(how, mode)) return this;
		this[mode || this.options.mode]();
		var margin = this.element.getStyle(this.margin).toInt();
		var layout = this.wrapper.getStyle(this.layout).toInt();
		var caseIn = [[margin, layout], [0, this.offset]];
		var caseOut = [[margin, layout], [-this.offset, 0]];
		var start;
		switch (how){
			case 'in': start = caseIn; break;
			case 'out': start = caseOut; break;
			case 'toggle': start = (layout == 0) ? caseIn : caseOut;
		}
		return this.parent(start[0], start[1]);
	},

	slideIn: function(mode){
		return this.start('in', mode);
	},

	slideOut: function(mode){
		return this.start('out', mode);
	},

	hide: function(mode){
		this[mode || this.options.mode]();
		this.open = false;
		return this.set([-this.offset, 0]);
	},

	show: function(mode){
		this[mode || this.options.mode]();
		this.open = true;
		return this.set([0, this.offset]);
	},

	toggle: function(mode){
		return this.start('toggle', mode);
	}

});

Element.Properties.slide = {

	set: function(options){
		var slide = this.retrieve('slide');
		if (slide) slide.cancel();
		return this.eliminate('slide').store('slide:options', $extend({link: 'cancel'}, options));
	},

	get: function(options){
		if (options || !this.retrieve('slide')){
			if (options || !this.retrieve('slide:options')) this.set('slide', options);
			this.store('slide', new Fx.Slide(this, this.retrieve('slide:options')));
		}
		return this.retrieve('slide');
	}

};

Element.implement({

	slide: function(how, mode){
		how = how || 'toggle';
		var slide = this.get('slide'), toggle;
		switch (how){
			case 'hide': slide.hide(mode); break;
			case 'show': slide.show(mode); break;
			case 'toggle':
				var flag = this.retrieve('slide:flag', slide.open);
				slide[flag ? 'slideOut' : 'slideIn'](mode);
				this.store('slide:flag', !flag);
				toggle = true;
			break;
			default: slide.start(how, mode);
		}
		if (!toggle) this.eliminate('slide:flag');
		return this;
	}

});


/*
Script: Fx.SmoothScroll.js
	Class for creating a smooth scrolling effect to all internal links on the page.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var SmoothScroll = Fx.SmoothScroll = new Class({

	Extends: Fx.Scroll,

	initialize: function(options, context){
		context = context || document;
		this.doc = context.getDocument();
		var win = context.getWindow();
		this.parent(this.doc, options);
		this.links = this.options.links ? $$(this.options.links) : $$(this.doc.links);
		var location = win.location.href.match(/^[^#]*/)[0] + '#';
		this.links.each(function(link){
			if (link.href.indexOf(location) != 0) {return;}
			var anchor = link.href.substr(location.length);
			if (anchor) this.useLink(link, anchor);
		}, this);
		if (!Browser.Engine.webkit419) {
			this.addEvent('complete', function(){
				win.location.hash = this.anchor;
			}, true);
		}
	},

	useLink: function(link, anchor){
		var el;
		link.addEvent('click', function(event){
			if (el !== false && !el) el = document.id(anchor) || this.doc.getElement('a[name=' + anchor + ']');
			if (el) {
				event.preventDefault();
				this.anchor = anchor;
				this.toElement(el);
				link.blur();
			}
		}.bind(this));
	}

});

/*
Script: Fx.Sort.js
	Defines Fx.Sort, a class that reorders lists with a transition.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

Fx.Sort = new Class({

	Extends: Fx.Elements,

	options: {
		mode: 'vertical'
	},

	initialize: function(elements, options){
		this.parent(elements, options);
		this.elements.each(function(el){
			if (el.getStyle('position') == 'static') el.setStyle('position', 'relative');
		});
		this.setDefaultOrder();
	},

	setDefaultOrder: function(){
		this.currentOrder = this.elements.map(function(el, index){
			return index;
		});
	},

	sort: function(newOrder){
		if ($type(newOrder) != 'array') return false;
		var top = 0;
		var left = 0;
		var zero = {};
		var vert = this.options.mode == 'vertical';
		var current = this.elements.map(function(el, index){
			var size = el.getComputedSize({styles: ['border', 'padding', 'margin']});
			var val;
			if (vert){
				val = {
					top: top,
					margin: size['margin-top'],
					height: size.totalHeight
				};
				top += val.height - size['margin-top'];
			} else {
				val = {
					left: left,
					margin: size['margin-left'],
					width: size.totalWidth
				};
				left += val.width;
			}
			var plain = vert ? 'top' : 'left';
			zero[index] = {};
			var start = el.getStyle(plain).toInt();
			zero[index][plain] = start || 0;
			return val;
		}, this);
		this.set(zero);
		newOrder = newOrder.map(function(i){ return i.toInt(); });
		if (newOrder.length != this.elements.length){
			this.currentOrder.each(function(index){
				if (!newOrder.contains(index)) newOrder.push(index);
			});
			if (newOrder.length > this.elements.length)
				newOrder.splice(this.elements.length-1, newOrder.length - this.elements.length);
		}
		top = 0;
		left = 0;
		var margin = 0;
		var next = {};
		newOrder.each(function(item, index){
			var newPos = {};
			if (vert){
				newPos.top = top - current[item].top - margin;
				top += current[item].height;
			} else {
				newPos.left = left - current[item].left;
				left += current[item].width;
			}
			margin = margin + current[item].margin;
			next[item]=newPos;
		}, this);
		var mapped = {};
		$A(newOrder).sort().each(function(index){
			mapped[index] = next[index];
		});
		this.start(mapped);
		this.currentOrder = newOrder;
		return this;
	},

	rearrangeDOM: function(newOrder){
		newOrder = newOrder || this.currentOrder;
		var parent = this.elements[0].getParent();
		var rearranged = [];
		this.elements.setStyle('opacity', 0);
		//move each element and store the new default order
		newOrder.each(function(index){
			rearranged.push(this.elements[index].inject(parent).setStyles({
				top: 0,
				left: 0
			}));
		}, this);
		this.elements.setStyle('opacity', 1);
		this.elements = $$(rearranged);
		this.setDefaultOrder();
		return this;
	},

	getDefaultOrder: function(){
		return this.elements.map(function(el, index){
			return index;
		});
	},

	forward: function(){
		return this.sort(this.getDefaultOrder());
	},

	backward: function(){
		return this.sort(this.getDefaultOrder().reverse());
	},

	reverse: function(){
		return this.sort(this.currentOrder.reverse());
	},

	sortByElements: function(elements){
		return this.sort(elements.map(function(el){
			return this.elements.indexOf(el);
		}, this));
	},

	swap: function(one, two){
		if ($type(one) == 'element') one = this.elements.indexOf(one);
		if ($type(two) == 'element') two = this.elements.indexOf(two);

		var newOrder = $A(this.currentOrder);
		newOrder[this.currentOrder.indexOf(one)] = two;
		newOrder[this.currentOrder.indexOf(two)] = one;
		this.sort(newOrder);
	}

});

/*
Script: Drag.js
	The base Drag Class. Can be used to drag and resize Elements using mouse events.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
		Tom Occhinno
		Jan Kassens
*/

var Drag = new Class({

	Implements: [Events, Options],

	options: {/*
		onBeforeStart: $empty(thisElement),
		onStart: $empty(thisElement, event),
		onSnap: $empty(thisElement)
		onDrag: $empty(thisElement, event),
		onCancel: $empty(thisElement),
		onComplete: $empty(thisElement, event),*/
		snap: 6,
		unit: 'px',
		grid: false,
		style: true,
		limit: false,
		handle: false,
		invert: false,
		preventDefault: false,
		modifiers: {x: 'left', y: 'top'}
	},

	initialize: function(){
		var params = Array.link(arguments, {'options': Object.type, 'element': $defined});
		this.element = document.id(params.element);
		this.document = this.element.getDocument();
		this.setOptions(params.options || {});
		var htype = $type(this.options.handle);
		this.handles = ((htype == 'array' || htype == 'collection') ? $$(this.options.handle) : document.id(this.options.handle)) || this.element;
		this.mouse = {'now': {}, 'pos': {}};
		this.value = {'start': {}, 'now': {}};

		this.selection = (Browser.Engine.trident) ? 'selectstart' : 'mousedown';

		this.bound = {
			start: this.start.bind(this),
			check: this.check.bind(this),
			drag: this.drag.bind(this),
			stop: this.stop.bind(this),
			cancel: this.cancel.bind(this),
			eventStop: $lambda(false)
		};
		this.attach();
	},

	attach: function(){
		this.handles.addEvent('mousedown', this.bound.start);
		return this;
	},

	detach: function(){
		this.handles.removeEvent('mousedown', this.bound.start);
		return this;
	},

	start: function(event){
		if (this.options.preventDefault) event.preventDefault();
		this.mouse.start = event.page;
		this.fireEvent('beforeStart', this.element);
		var limit = this.options.limit;
		this.limit = {x: [], y: []};
		for (var z in this.options.modifiers){
			if (!this.options.modifiers[z]) continue;
			if (this.options.style) this.value.now[z] = this.element.getStyle(this.options.modifiers[z]).toInt();
			else this.value.now[z] = this.element[this.options.modifiers[z]];
			if (this.options.invert) this.value.now[z] *= -1;
			this.mouse.pos[z] = event.page[z] - this.value.now[z];
			if (limit && limit[z]){
				for (var i = 2; i--; i){
					if ($chk(limit[z][i])) this.limit[z][i] = $lambda(limit[z][i])();
				}
			}
		}
		if ($type(this.options.grid) == 'number') this.options.grid = {x: this.options.grid, y: this.options.grid};
		this.document.addEvents({mousemove: this.bound.check, mouseup: this.bound.cancel});
		this.document.addEvent(this.selection, this.bound.eventStop);
	},

	check: function(event){
		if (this.options.preventDefault) event.preventDefault();
		var distance = Math.round(Math.sqrt(Math.pow(event.page.x - this.mouse.start.x, 2) + Math.pow(event.page.y - this.mouse.start.y, 2)));
		if (distance > this.options.snap){
			this.cancel();
			this.document.addEvents({
				mousemove: this.bound.drag,
				mouseup: this.bound.stop
			});
			this.fireEvent('start', [this.element, event]).fireEvent('snap', this.element);
		}
	},

	drag: function(event){
		if (this.options.preventDefault) event.preventDefault();
		this.mouse.now = event.page;
		for (var z in this.options.modifiers){
			if (!this.options.modifiers[z]) continue;
			this.value.now[z] = this.mouse.now[z] - this.mouse.pos[z];
			if (this.options.invert) this.value.now[z] *= -1;
			if (this.options.limit && this.limit[z]){
				if ($chk(this.limit[z][1]) && (this.value.now[z] > this.limit[z][1])){
					this.value.now[z] = this.limit[z][1];
				} else if ($chk(this.limit[z][0]) && (this.value.now[z] < this.limit[z][0])){
					this.value.now[z] = this.limit[z][0];
				}
			}
			if (this.options.grid[z]) this.value.now[z] -= ((this.value.now[z] - (this.limit[z][0]||0)) % this.options.grid[z]);
			if (this.options.style) this.element.setStyle(this.options.modifiers[z], this.value.now[z] + this.options.unit);
			else this.element[this.options.modifiers[z]] = this.value.now[z];
		}
		this.fireEvent('drag', [this.element, event]);
	},

	cancel: function(event){
		this.document.removeEvent('mousemove', this.bound.check);
		this.document.removeEvent('mouseup', this.bound.cancel);
		if (event){
			this.document.removeEvent(this.selection, this.bound.eventStop);
			this.fireEvent('cancel', this.element);
		}
	},

	stop: function(event){
		this.document.removeEvent(this.selection, this.bound.eventStop);
		this.document.removeEvent('mousemove', this.bound.drag);
		this.document.removeEvent('mouseup', this.bound.stop);
		if (event) this.fireEvent('complete', [this.element, event]);
	}

});

Element.implement({

	makeResizable: function(options){
		var drag = new Drag(this, $merge({modifiers: {x: 'width', y: 'height'}}, options));
		this.store('resizer', drag);
		return drag.addEvent('drag', function(){
			this.fireEvent('resize', drag);
		}.bind(this));
	}

});


/*
Script: Drag.Move.js
	A Drag extension that provides support for the constraining of draggables to containers and droppables.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
		Tom Occhinno
		Jan Kassens*/

Drag.Move = new Class({

	Extends: Drag,

	options: {/*
		onEnter: $empty(thisElement, overed),
		onLeave: $empty(thisElement, overed),
		onDrop: $empty(thisElement, overed, event),*/
		droppables: [],
		container: false,
		precalculate: false,
		includeMargins: true,
		checkDroppables: true
	},

	initialize: function(element, options){
		this.parent(element, options);
		this.droppables = $$(this.options.droppables);
		this.container = document.id(this.options.container);
		if (this.container && $type(this.container) != 'element') this.container = document.id(this.container.getDocument().body);

		var position = this.element.getStyle('position');
		if (position=='static') position = 'absolute';
		if ([this.element.getStyle('left'), this.element.getStyle('top')].contains('auto')) this.element.position(this.element.getPosition(this.element.offsetParent));
		this.element.setStyle('position', position);

		this.addEvent('start', this.checkDroppables, true);

		this.overed = null;
	},

	start: function(event){
		if (this.container){
			var ccoo = this.container.getCoordinates(this.element.getOffsetParent()), cbs = {}, ems = {};

			['top', 'right', 'bottom', 'left'].each(function(pad){
				cbs[pad] = this.container.getStyle('border-' + pad).toInt();
				ems[pad] = this.element.getStyle('margin-' + pad).toInt();
			}, this);

			var width = this.element.offsetWidth + ems.left + ems.right;
			var height = this.element.offsetHeight + ems.top + ems.bottom;

			if (this.options.includeMargins) {
				$each(ems, function(value, key) {
					ems[key] = 0;
				});
			}
			if (this.container == this.element.getOffsetParent()) {
				this.options.limit = {
					x: [0 - ems.left, ccoo.right - cbs.left - cbs.right - width + ems.right],
					y: [0 - ems.top, ccoo.bottom - cbs.top - cbs.bottom - height + ems.bottom]
				};
			} else {
				this.options.limit = {
					x: [ccoo.left + cbs.left - ems.left, ccoo.right - cbs.right - width + ems.right],
					y: [ccoo.top + cbs.top - ems.top, ccoo.bottom - cbs.bottom - height + ems.bottom]
				};
			}

		}
		if (this.options.precalculate){
			this.positions = this.droppables.map(function(el) {
				return el.getCoordinates();
			});
		}
		this.parent(event);
	},

	checkAgainst: function(el, i){
		el = (this.positions) ? this.positions[i] : el.getCoordinates();
		var now = this.mouse.now;
		return (now.x > el.left && now.x < el.right && now.y < el.bottom && now.y > el.top);
	},

	checkDroppables: function(){
		var overed = this.droppables.filter(this.checkAgainst, this).getLast();
		if (this.overed != overed){
			if (this.overed) this.fireEvent('leave', [this.element, this.overed]);
			if (overed) this.fireEvent('enter', [this.element, overed]);
			this.overed = overed;
		}
	},

	drag: function(event){
		this.parent(event);
		if (this.options.checkDroppables && this.droppables.length) this.checkDroppables();
	},

	stop: function(event){
		this.checkDroppables();
		this.fireEvent('drop', [this.element, this.overed, event]);
		this.overed = null;
		return this.parent(event);
	}

});

Element.implement({

	makeDraggable: function(options){
		var drag = new Drag.Move(this, options);
		this.store('dragger', drag);
		return drag;
	}

});


/*
Script: Slider.js
	Class for creating horizontal and vertical slider controls.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Slider = new Class({

	Implements: [Events, Options],

	Binds: ['clickedElement', 'draggedKnob', 'scrolledElement'],

	options: {/*
		onTick: $empty(intPosition),
		onChange: $empty(intStep),
		onComplete: $empty(strStep),*/
		onTick: function(position){
			if (this.options.snap) position = this.toPosition(this.step);
			this.knob.setStyle(this.property, position);
		},
		snap: false,
		offset: 0,
		range: false,
		wheel: false,
		steps: 100,
		mode: 'horizontal'
	},

	initialize: function(element, knob, options){
		this.setOptions(options);
		this.element = document.id(element);
		this.knob = document.id(knob);
		this.previousChange = this.previousEnd = this.step = -1;
		var offset, limit = {}, modifiers = {'x': false, 'y': false};
		switch (this.options.mode){
			case 'vertical':
				this.axis = 'y';
				this.property = 'top';
				offset = 'offsetHeight';
				break;
			case 'horizontal':
				this.axis = 'x';
				this.property = 'left';
				offset = 'offsetWidth';
		}
		this.half = this.knob[offset] / 2;
		this.full = this.element[offset] - this.knob[offset] + (this.options.offset * 2);
		this.min = $chk(this.options.range[0]) ? this.options.range[0] : 0;
		this.max = $chk(this.options.range[1]) ? this.options.range[1] : this.options.steps;
		this.range = this.max - this.min;
		this.steps = this.options.steps || this.full;
		this.stepSize = Math.abs(this.range) / this.steps;
		this.stepWidth = this.stepSize * this.full / Math.abs(this.range) ;

		this.knob.setStyle('position', 'relative').setStyle(this.property, - this.options.offset);
		modifiers[this.axis] = this.property;
		limit[this.axis] = [- this.options.offset, this.full - this.options.offset];

		this.bound = {
			clickedElement: this.clickedElement.bind(this),
			scrolledElement: this.scrolledElement.bindWithEvent(this),
			draggedKnob: this.draggedKnob.bind(this)
		};

		var dragOptions = {
			snap: 0,
			limit: limit,
			modifiers: modifiers,
			onDrag: this.bound.draggedKnob,
			onStart: this.bound.draggedKnob,
			onBeforeStart: (function(){
				this.isDragging = true;
			}).bind(this),
			onComplete: function(){
				this.isDragging = false;
				this.draggedKnob();
				this.end();
			}.bind(this)
		};
		if (this.options.snap){
			dragOptions.grid = Math.ceil(this.stepWidth);
			dragOptions.limit[this.axis][1] = this.full;
		}

		this.drag = new Drag(this.knob, dragOptions);
		this.attach();
	},

	attach: function(){
		this.element.addEvent('mousedown', this.bound.clickedElement);
		if (this.options.wheel) this.element.addEvent('mousewheel', this.bound.scrolledElement);
		this.drag.attach();
		return this;
	},

	detach: function(){
		this.element.removeEvent('mousedown', this.bound.clickedElement);
		this.element.removeEvent('mousewheel', this.bound.scrolledElement);
		this.drag.detach();
		return this;
	},

	set: function(step){
		if (!((this.range > 0) ^ (step < this.min))) step = this.min;
		if (!((this.range > 0) ^ (step > this.max))) step = this.max;

		this.step = Math.round(step);
		this.checkStep();
		this.fireEvent('tick', this.toPosition(this.step));
		this.end();
		return this;
	},

	clickedElement: function(event){
		if (this.isDragging || event.target == this.knob) return;

		var dir = this.range < 0 ? -1 : 1;
		var position = event.page[this.axis] - this.element.getPosition()[this.axis] - this.half;
		position = position.limit(-this.options.offset, this.full -this.options.offset);

		this.step = Math.round(this.min + dir * this.toStep(position));
		this.checkStep();
		this.fireEvent('tick', position);
		this.end();
	},

	scrolledElement: function(event){
		var mode = (this.options.mode == 'horizontal') ? (event.wheel < 0) : (event.wheel > 0);
		this.set(mode ? this.step - this.stepSize : this.step + this.stepSize);
		event.stop();
	},

	draggedKnob: function(){
		var dir = this.range < 0 ? -1 : 1;
		var position = this.drag.value.now[this.axis];
		position = position.limit(-this.options.offset, this.full -this.options.offset);
		this.step = Math.round(this.min + dir * this.toStep(position));
		this.checkStep();
	},

	checkStep: function(){
		if (this.previousChange != this.step){
			this.previousChange = this.step;
			this.fireEvent('change', this.step);
		}
	},

	end: function(){
		if (this.previousEnd !== this.step){
			this.previousEnd = this.step;
			this.fireEvent('complete', this.step + '');
		}
	},

	toStep: function(position){
		var step = (position + this.options.offset) * this.stepSize / this.full * this.steps;
		return this.options.steps ? Math.round(step -= step % this.stepSize) : step;
	},

	toPosition: function(step){
		return (this.full * Math.abs(this.min - step)) / (this.steps * this.stepSize) - this.options.offset;
	}

});

/*
Script: Sortables.js
	Class for creating a drag and drop sorting interface for lists of items.

	License:
		MIT-style license.

	Authors:
		Tom Occhino
*/

var Sortables = new Class({

	Implements: [Events, Options],

	options: {/*
		onSort: $empty(element, clone),
		onStart: $empty(element, clone),
		onComplete: $empty(element),*/
		snap: 4,
		opacity: 1,
		clone: false,
		revert: false,
		handle: false,
		constrain: false
	},

	initialize: function(lists, options){
		this.setOptions(options);
		this.elements = [];
		this.lists = [];
		this.idle = true;

		this.addLists($$(document.id(lists) || lists));
		if (!this.options.clone) this.options.revert = false;
		if (this.options.revert) this.effect = new Fx.Morph(null, $merge({duration: 250, link: 'cancel'}, this.options.revert));
	},

	attach: function(){
		this.addLists(this.lists);
		return this;
	},

	detach: function(){
		this.lists = this.removeLists(this.lists);
		return this;
	},

	addItems: function(){
		Array.flatten(arguments).each(function(element){
			this.elements.push(element);
			var start = element.retrieve('sortables:start', this.start.bindWithEvent(this, element));
			(this.options.handle ? element.getElement(this.options.handle) || element : element).addEvent('mousedown', start);
		}, this);
		return this;
	},

	addLists: function(){
		Array.flatten(arguments).each(function(list){
			this.lists.push(list);
			this.addItems(list.getChildren());
		}, this);
		return this;
	},

	removeItems: function(){
		return $$(Array.flatten(arguments).map(function(element){
			this.elements.erase(element);
			var start = element.retrieve('sortables:start');
			(this.options.handle ? element.getElement(this.options.handle) || element : element).removeEvent('mousedown', start);

			return element;
		}, this));
	},

	removeLists: function(){
		return $$(Array.flatten(arguments).map(function(list){
			this.lists.erase(list);
			this.removeItems(list.getChildren());

			return list;
		}, this));
	},

	getClone: function(event, element){
		if (!this.options.clone) return new Element('div').inject(document.body);
		if ($type(this.options.clone) == 'function') return this.options.clone.call(this, event, element, this.list);
		return element.clone(true).setStyles({
			margin: '0px',
			position: 'absolute',
			visibility: 'hidden',
			'width': element.getStyle('width')
		}).inject(this.list).position(element.getPosition(element.getOffsetParent()));
	},

	getDroppables: function(){
		var droppables = this.list.getChildren();
		if (!this.options.constrain) droppables = this.lists.concat(droppables).erase(this.list);
		return droppables.erase(this.clone).erase(this.element);
	},

	insert: function(dragging, element){
		var where = 'inside';
		if (this.lists.contains(element)){
			this.list = element;
			this.drag.droppables = this.getDroppables();
		} else {
			where = this.element.getAllPrevious().contains(element) ? 'before' : 'after';
		}
		this.element.inject(element, where);
		this.fireEvent('sort', [this.element, this.clone]);
	},

	start: function(event, element){
		if (!this.idle) return;
		this.idle = false;
		this.element = element;
		this.opacity = element.get('opacity');
		this.list = element.getParent();
		this.clone = this.getClone(event, element);

		this.drag = new Drag.Move(this.clone, {
			snap: this.options.snap,
			container: this.options.constrain && this.element.getParent(),
			droppables: this.getDroppables(),
			onSnap: function(){
				event.stop();
				this.clone.setStyle('visibility', 'visible');
				this.element.set('opacity', this.options.opacity || 0);
				this.fireEvent('start', [this.element, this.clone]);
			}.bind(this),
			onEnter: this.insert.bind(this),
			onCancel: this.reset.bind(this),
			onComplete: this.end.bind(this)
		});

		this.clone.inject(this.element, 'before');
		this.drag.start(event);
	},

	end: function(){
		this.drag.detach();
		this.element.set('opacity', this.opacity);
		if (this.effect){
			var dim = this.element.getStyles('width', 'height');
			var pos = this.clone.computePosition(this.element.getPosition(this.clone.offsetParent));
			this.effect.element = this.clone;
			this.effect.start({
				top: pos.top,
				left: pos.left,
				width: dim.width,
				height: dim.height,
				opacity: 0.25
			}).chain(this.reset.bind(this));
		} else {
			this.reset();
		}
	},

	reset: function(){
		this.idle = true;
		this.clone.destroy();
		this.fireEvent('complete', this.element);
	},

	serialize: function(){
		var params = Array.link(arguments, {modifier: Function.type, index: $defined});
		var serial = this.lists.map(function(list){
			return list.getChildren().map(params.modifier || function(element){
				return element.get('id');
			}, this);
		}, this);

		var index = params.index;
		if (this.lists.length == 1) index = 0;
		return $chk(index) && index >= 0 && index < this.lists.length ? serial[index] : serial;
	}

});


/*
Script: Request.JSONP.js
	Defines Request.JSONP, a class for cross domain javascript via script injection.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
		Guillermo Rauch
*/

Request.JSONP = new Class({

	Implements: [Chain, Events, Options, Log],

	options: {/*
		onRetry: $empty(intRetries),
		onRequest: $empty(scriptElement),
		onComplete: $empty(data),
		onSuccess: $empty(data),
		onCancel: $empty(),*/
		url: '',
		data: {},
		retries: 0,
		timeout: 0,
		link: 'ignore',
		callbackKey: 'callback',
		injectScript: document.head
	},

	initialize: function(options){
		this.setOptions(options);
		this.running = false;
		this.requests = 0;
		this.triesRemaining = [];
	},

	check: function(){
		if (!this.running) return true;
		switch (this.options.link){
			case 'cancel': this.cancel(); return true;
			case 'chain': this.chain(this.caller.bind(this, arguments)); return false;
		}
		return false;
	},

	send: function(options){
		if (!$chk(arguments[1]) && !this.check(options)) return this;

		var type = $type(options), old = this.options, index = $chk(arguments[1]) ? arguments[1] : this.requests++;
		if (type == 'string' || type == 'element') options = {data: options};

		options = $extend({data: old.data, url: old.url}, options);

		if (!$chk(this.triesRemaining[index])) this.triesRemaining[index] = this.options.retries;
		var remaining = this.triesRemaining[index];

		(function(){
			var script = this.getScript(options);
			this.log('JSONP retrieving script with url: ' + script.get('src'));
			this.fireEvent('request', script);
			this.running = true;

			(function(){
				if (remaining){
					this.triesRemaining[index] = remaining - 1;
					if (script){
						script.destroy();
						this.send(options, index);
						this.fireEvent('retry', this.triesRemaining[index]);
					}
				} else if(script && this.options.timeout){
					script.destroy();
					this.cancel();
					this.fireEvent('failure');
				}
			}).delay(this.options.timeout, this);
		}).delay(Browser.Engine.trident ? 50 : 0, this);
		return this;
	},

	cancel: function(){
		if (!this.running) return this;
		this.running = false;
		this.fireEvent('cancel');
		return this;
	},

	getScript: function(options){
		var index = Request.JSONP.counter, data;
		Request.JSONP.counter++;

		switch ($type(options.data)){
			case 'element': data = document.id(options.data).toQueryString(); break;
			case 'object': case 'hash': data = Hash.toQueryString(options.data);
		}

		var src = options.url +
			 (options.url.test('\\?') ? '&' :'?') +
			 (options.callbackKey || this.options.callbackKey) +
			 '=Request.JSONP.request_map.request_'+ index +
			 (data ? '&' + data : '');
		if (src.length > 2083) this.log('JSONP '+ src +' will fail in Internet Explorer, which enforces a 2083 bytes length limit on URIs');

		var script = new Element('script', {type: 'text/javascript', src: src});
		Request.JSONP.request_map['request_' + index] = function(data){ this.success(data, script); }.bind(this);
		return script.inject(this.options.injectScript);
	},

	success: function(data, script){
		if (script) script.destroy();
		this.running = false;
		this.log('JSONP successfully retrieved: ', data);
		this.fireEvent('complete', [data]).fireEvent('success', [data]).callChain();
	}

});

Request.JSONP.counter = 0;
Request.JSONP.request_map = {};

/*
Script: Request.Queue.js
	Controls several instances of Request and its variants to run only one request at a time.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

Request.Queue = new Class({

	Implements: [Options, Events],

	Binds: ['attach', 'request', 'complete', 'cancel', 'success', 'failure', 'exception'],

	options: {/*
		onRequest: $empty(argsPassedToOnRequest),
		onSuccess: $empty(argsPassedToOnSuccess),
		onComplete: $empty(argsPassedToOnComplete),
		onCancel: $empty(argsPassedToOnCancel),
		onException: $empty(argsPassedToOnException),
		onFailure: $empty(argsPassedToOnFailure),*/
		stopOnFailure: true,
		autoAdvance: true,
		concurrent: 1,
		requests: {}
	},

	initialize: function(options){
		this.setOptions(options);
		this.requests = new Hash;
		this.addRequests(this.options.requests);
		this.queue = [];
		this.reqBinders = {};
	},

	addRequest: function(name, request){
		this.requests.set(name, request);
		this.attach(name, request);
		return this;
	},

	addRequests: function(obj){
		$each(obj, function(req, name){
			this.addRequest(name, req);
		}, this);
		return this;
	},

	getName: function(req){
		return this.requests.keyOf(req);
	},

	attach: function(name, req){
		if (req._groupSend) return this;
		['request', 'complete', 'cancel', 'success', 'failure', 'exception'].each(function(evt){
			if(!this.reqBinders[name]) this.reqBinders[name] = {};
			this.reqBinders[name][evt] = function(){
				this['on' + evt.capitalize()].apply(this, [name, req].extend(arguments));
			}.bind(this);
			req.addEvent(evt, this.reqBinders[name][evt]);
		}, this);
		req._groupSend = req.send;
		req.send = function(options){
			this.send(name, options);
			return req;
		}.bind(this);
		return this;
	},

	removeRequest: function(req){
		var name = $type(req) == 'object' ? this.getName(req) : req;
		if (!name && $type(name) != 'string') return this;
		req = this.requests.get(name);
		if (!req) return this;
		['request', 'complete', 'cancel', 'success', 'failure', 'exception'].each(function(evt){
			req.removeEvent(evt, this.reqBinders[name][evt]);
		}, this);
		req.send = req._groupSend;
		delete req._groupSend;
		return this;
	},

	getRunning: function(){
		return this.requests.filter(function(r){ return r.running; });
	},

	isRunning: function(){
		return !!this.getRunning().getKeys().length;
	},

	send: function(name, options){
		var q = function(){
			this.requests.get(name)._groupSend(options);
			this.queue.erase(q);
		}.bind(this);
		q.name = name;
		if (this.getRunning().getKeys().length >= this.options.concurrent || (this.error && this.options.stopOnFailure)) this.queue.push(q);
		else q();
		return this;
	},

	hasNext: function(name){
		return (!name) ? !!this.queue.length : !!this.queue.filter(function(q){ return q.name == name; }).length;
	},

	resume: function(){
		this.error = false;
		(this.options.concurrent - this.getRunning().getKeys().length).times(this.runNext, this);
		return this;
	},

	runNext: function(name){
		if (!this.queue.length) return this;
		if (!name){
			this.queue[0]();
		} else {
			var found;
			this.queue.each(function(q){
				if (!found && q.name == name){
					found = true;
					q();
				}
			});
		}
		return this;
	},

	runAll: function() {
		this.queue.each(function(q) {
			q();
		});
		return this;
	},

	clear: function(name){
		if (!name){
			this.queue.empty();
		} else {
			this.queue = this.queue.map(function(q){
				if (q.name != name) return q;
				else return false;
			}).filter(function(q){ return q; });
		}
		return this;
	},

	cancel: function(name){
		this.requests.get(name).cancel();
		return this;
	},

	onRequest: function(){
		this.fireEvent('request', arguments);
	},

	onComplete: function(){
		this.fireEvent('complete', arguments);
	},

	onCancel: function(){
		if (this.options.autoAdvance && !this.error) this.runNext();
		this.fireEvent('cancel', arguments);
	},

	onSuccess: function(){
		if (this.options.autoAdvance && !this.error) this.runNext();
		this.fireEvent('success', arguments);
	},

	onFailure: function(){
		this.error = true;
		if (!this.options.stopOnFailure && this.options.autoAdvance) this.runNext();
		this.fireEvent('failure', arguments);
	},

	onException: function(){
		this.error = true;
		if (!this.options.stopOnFailure && this.options.autoAdvance) this.runNext();
		this.fireEvent('exception', arguments);
	}

});


/*
Script: Request.Periodical.js
	Requests the same url at a time interval that increases when no data is returned from the requested server

	License:
		MIT-style license.

	Authors:
		Christoph Pojer

*/

Request.implement({

	options: {
		initialDelay: 5000,
		delay: 5000,
		limit: 60000
	},

	startTimer: function(data){
		var fn = (function(){
			if (!this.running) this.send({data: data});
		});
		this.timer = fn.delay(this.options.initialDelay, this);
		this.lastDelay = this.options.initialDelay;
		this.completeCheck = function(j){
			$clear(this.timer);
			if (j) this.lastDelay = this.options.delay;
			else this.lastDelay = (this.lastDelay+this.options.delay).min(this.options.limit);
			this.timer = fn.delay(this.lastDelay, this);
		};
		this.addEvent('complete', this.completeCheck);
		return this;
	},

	stopTimer: function(){
		$clear(this.timer);
		this.removeEvent('complete', this.completeCheck);
		return this;
	}

});

/*
Script: Assets.js
	Provides methods to dynamically load JavaScript, CSS, and Image files into the document.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Asset = {

	javascript: function(source, properties){
		properties = $extend({
			onload: $empty,
			document: document,
			check: $lambda(true)
		}, properties);

		var script = new Element('script', {src: source, type: 'text/javascript'});

		var load = properties.onload.bind(script), check = properties.check, doc = properties.document;
		delete properties.onload; delete properties.check; delete properties.document;

		script.addEvents({
			load: load,
			readystatechange: function(){
				if (['loaded', 'complete'].contains(this.readyState)) load();
			}
		}).set(properties);

		if (Browser.Engine.webkit419) var checker = (function(){
			if (!$try(check)) return;
			$clear(checker);
			load();
		}).periodical(50);

		return script.inject(doc.head);
	},

	css: function(source, properties){
		return new Element('link', $merge({
			rel: 'stylesheet', media: 'screen', type: 'text/css', href: source
		}, properties)).inject(document.head);
	},

	image: function(source, properties){
		properties = $merge({
			onload: $empty,
			onabort: $empty,
			onerror: $empty
		}, properties);
		var image = new Image();
		var element = document.id(image) || new Element('img');
		['load', 'abort', 'error'].each(function(name){
			var type = 'on' + name;
			var event = properties[type];
			delete properties[type];
			image[type] = function(){
				if (!image) return;
				if (!element.parentNode){
					element.width = image.width;
					element.height = image.height;
				}
				image = image.onload = image.onabort = image.onerror = null;
				event.delay(1, element, element);
				element.fireEvent(name, element, 1);
			};
		});
		image.src = element.src = source;
		if (image && image.complete) image.onload.delay(1);
		return element.set(properties);
	},

	images: function(sources, options){
		options = $merge({
			onComplete: $empty,
			onProgress: $empty,
			onError: $empty,
			properties: {}
		}, options);
		sources = $splat(sources);
		var images = [];
		var counter = 0;
		return new Elements(sources.map(function(source){
			return Asset.image(source, $extend(options.properties, {
				onload: function(){
					options.onProgress.call(this, counter, sources.indexOf(source));
					counter++;
					if (counter == sources.length) options.onComplete();
				},
				onerror: function(){
					options.onError.call(this, counter, sources.indexOf(source));
					counter++;
					if (counter == sources.length) options.onComplete();
				}
			}));
		}));
	}

};

/*
Script: Color.js
	Class for creating and manipulating colors in JavaScript. Supports HSB -> RGB Conversions and vice versa.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Color = new Native({

	initialize: function(color, type){
		if (arguments.length >= 3){
			type = 'rgb'; color = Array.slice(arguments, 0, 3);
		} else if (typeof color == 'string'){
			if (color.match(/rgb/)) color = color.rgbToHex().hexToRgb(true);
			else if (color.match(/hsb/)) color = color.hsbToRgb();
			else color = color.hexToRgb(true);
		}
		type = type || 'rgb';
		switch (type){
			case 'hsb':
				var old = color;
				color = color.hsbToRgb();
				color.hsb = old;
			break;
			case 'hex': color = color.hexToRgb(true); break;
		}
		color.rgb = color.slice(0, 3);
		color.hsb = color.hsb || color.rgbToHsb();
		color.hex = color.rgbToHex();
		return $extend(color, this);
	}

});

Color.implement({

	mix: function(){
		var colors = Array.slice(arguments);
		var alpha = ($type(colors.getLast()) == 'number') ? colors.pop() : 50;
		var rgb = this.slice();
		colors.each(function(color){
			color = new Color(color);
			for (var i = 0; i < 3; i++) rgb[i] = Math.round((rgb[i] / 100 * (100 - alpha)) + (color[i] / 100 * alpha));
		});
		return new Color(rgb, 'rgb');
	},

	invert: function(){
		return new Color(this.map(function(value){
			return 255 - value;
		}));
	},

	setHue: function(value){
		return new Color([value, this.hsb[1], this.hsb[2]], 'hsb');
	},

	setSaturation: function(percent){
		return new Color([this.hsb[0], percent, this.hsb[2]], 'hsb');
	},

	setBrightness: function(percent){
		return new Color([this.hsb[0], this.hsb[1], percent], 'hsb');
	}

});

var $RGB = function(r, g, b){
	return new Color([r, g, b], 'rgb');
};

var $HSB = function(h, s, b){
	return new Color([h, s, b], 'hsb');
};

var $HEX = function(hex){
	return new Color(hex, 'hex');
};

Array.implement({

	rgbToHsb: function(){
		var red = this[0], green = this[1], blue = this[2];
		var hue, saturation, brightness;
		var max = Math.max(red, green, blue), min = Math.min(red, green, blue);
		var delta = max - min;
		brightness = max / 255;
		saturation = (max != 0) ? delta / max : 0;
		if (saturation == 0){
			hue = 0;
		} else {
			var rr = (max - red) / delta;
			var gr = (max - green) / delta;
			var br = (max - blue) / delta;
			if (red == max) hue = br - gr;
			else if (green == max) hue = 2 + rr - br;
			else hue = 4 + gr - rr;
			hue /= 6;
			if (hue < 0) hue++;
		}
		return [Math.round(hue * 360), Math.round(saturation * 100), Math.round(brightness * 100)];
	},

	hsbToRgb: function(){
		var br = Math.round(this[2] / 100 * 255);
		if (this[1] == 0){
			return [br, br, br];
		} else {
			var hue = this[0] % 360;
			var f = hue % 60;
			var p = Math.round((this[2] * (100 - this[1])) / 10000 * 255);
			var q = Math.round((this[2] * (6000 - this[1] * f)) / 600000 * 255);
			var t = Math.round((this[2] * (6000 - this[1] * (60 - f))) / 600000 * 255);
			switch (Math.floor(hue / 60)){
				case 0: return [br, t, p];
				case 1: return [q, br, p];
				case 2: return [p, br, t];
				case 3: return [p, q, br];
				case 4: return [t, p, br];
				case 5: return [br, p, q];
			}
		}
		return false;
	}

});

String.implement({

	rgbToHsb: function(){
		var rgb = this.match(/\d{1,3}/g);
		return (rgb) ? rgb.rgbToHsb() : null;
	},

	hsbToRgb: function(){
		var hsb = this.match(/\d{1,3}/g);
		return (hsb) ? hsb.hsbToRgb() : null;
	}

});


/*
Script: Group.js
	Class for monitoring collections of events

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Group = new Class({

	initialize: function(){
		this.instances = Array.flatten(arguments);
		this.events = {};
		this.checker = {};
	},

	addEvent: function(type, fn){
		this.checker[type] = this.checker[type] || {};
		this.events[type] = this.events[type] || [];
		if (this.events[type].contains(fn)) return false;
		else this.events[type].push(fn);
		this.instances.each(function(instance, i){
			instance.addEvent(type, this.check.bind(this, [type, instance, i]));
		}, this);
		return this;
	},

	check: function(type, instance, i){
		this.checker[type][i] = true;
		var every = this.instances.every(function(current, j){
			return this.checker[type][j] || false;
		}, this);
		if (!every) return;
		this.checker[type] = {};
		this.events[type].each(function(event){
			event.call(this, this.instances, instance);
		}, this);
	}

});


/*
Script: Hash.Cookie.js
	Class for creating, reading, and deleting Cookies in JSON format.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
		Aaron Newton
*/

Hash.Cookie = new Class({

	Extends: Cookie,

	options: {
		autoSave: true
	},

	initialize: function(name, options){
		this.parent(name, options);
		this.load();
	},

	save: function(){
		var value = JSON.encode(this.hash);
		if (!value || value.length > 4096) return false; //cookie would be truncated!
		if (value == '{}') this.dispose();
		else this.write(value);
		return true;
	},

	load: function(){
		this.hash = new Hash(JSON.decode(this.read(), true));
		return this;
	}

});

Hash.each(Hash.prototype, function(method, name){
	if (typeof method == 'function') Hash.Cookie.implement(name, function(){
		var value = method.apply(this.hash, arguments);
		if (this.options.autoSave) this.save();
		return value;
	});
});

/*
Script: IframeShim.js
	Defines IframeShim, a class for obscuring select lists and flash objects in IE.

	License:
		MIT-style license.

	Authors:
		Aaron Newton
*/

var IframeShim = new Class({

	Implements: [Options, Events, Class.Occlude],

	options: {
		className: 'iframeShim',
		display: false,
		zIndex: null,
		margin: 0,
		offset: {x: 0, y: 0},
		browsers: (Browser.Engine.trident4 || (Browser.Engine.gecko && !Browser.Engine.gecko19 && Browser.Platform.mac))
	},

	property: 'IframeShim',

	initialize: function(element, options){
		this.element = document.id(element);
		if (this.occlude()) return this.occluded;
		this.setOptions(options);
		this.makeShim();
		return this;
	},

	makeShim: function(){
		if(this.options.browsers){
			var zIndex = this.element.getStyle('zIndex').toInt();

			if (!zIndex){
				zIndex = 1;
				var pos = this.element.getStyle('position');
				if (pos == 'static' || !pos) this.element.setStyle('position', 'relative');
				this.element.setStyle('zIndex', zIndex);
			}
			zIndex = ($chk(this.options.zIndex) && zIndex > this.options.zIndex) ? this.options.zIndex : zIndex - 1;
			if (zIndex < 0) zIndex = 1;
			this.shim = new Element('iframe', {
				src:'javascript:false;document.write("");',
				scrolling: 'no',
				frameborder: 0,
				styles: {
					zIndex: zIndex,
					position: 'absolute',
					border: 'none',
					filter: 'progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0)'
				},
				'class': this.options.className
			}).store('IframeShim', this);
			var inject = (function(){
				this.shim.inject(this.element, 'after');
				this[this.options.display ? 'show' : 'hide']();
				this.fireEvent('inject');
			}).bind(this);
			if (Browser.Engine.trident && !IframeShim.ready) window.addEvent('load', inject);
			else inject();
		} else {
			this.position = this.hide = this.show = this.dispose = $lambda(this);
		}
	},

	position: function(){
		if (!IframeShim.ready) return this;
		var size = this.element.measure(function(){ return this.getSize(); });
		if ($type(this.options.margin)){
			size.x = size.x - (this.options.margin * 2);
			size.y = size.y - (this.options.margin * 2);
			this.options.offset.x += this.options.margin;
			this.options.offset.y += this.options.margin;
		}
		if (this.shim) {
			this.shim.set({width: size.x, height: size.y}).position({
				relativeTo: this.element,
				offset: this.options.offset
			});
		}
		return this;
	},

	hide: function(){
		if (this.shim) this.shim.setStyle('display', 'none');
		return this;
	},

	show: function(){
		if (this.shim) this.shim.setStyle('display', 'block');
		return this.position();
	},

	dispose: function(){
		if (this.shim) this.shim.dispose();
		return this;
	},

	destroy: function(){
		if (this.shim) this.shim.destroy();
		return this;
	}

});

window.addEvent('load', function(){
	IframeShim.ready = true;
});

/*
Script: Scroller.js
	Class which scrolls the contents of any Element (including the window) when the mouse reaches the Element's boundaries.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
*/

var Scroller = new Class({

	Implements: [Events, Options],

	options: {
		area: 20,
		velocity: 1,
		onChange: function(x, y){
			this.element.scrollTo(x, y);
		},
		fps: 50
	},

	initialize: function(element, options){
		this.setOptions(options);
		this.element = document.id(element);
		this.listener = ($type(this.element) != 'element') ? document.id(this.element.getDocument().body) : this.element;
		this.timer = null;
		this.bound = {
			attach: this.attach.bind(this),
			detach: this.detach.bind(this),
			getCoords: this.getCoords.bind(this)
		};
	},

	start: function(){
		this.listener.addEvents({
			mouseenter: this.bound.attach,
			mouseleave: this.bound.detach
		});
	},

	stop: function(){
		this.listener.removeEvents({
			mouseenter: this.bound.attach,
			mouseleave: this.bound.detach
		});
		this.timer = $clear(this.timer);
	},

	attach: function(){
		this.listener.addEvent('mousemove', this.bound.getCoords);
	},

	detach: function(){
		this.listener.removeEvent('mousemove', this.bound.getCoords);
		this.timer = $clear(this.timer);
	},

	getCoords: function(event){
		this.page = (this.listener.get('tag') == 'body') ? event.client : event.page;
		if (!this.timer) this.timer = this.scroll.periodical(Math.round(1000 / this.options.fps), this);
	},

	scroll: function(){
		var size = this.element.getSize(),
			scroll = this.element.getScroll(),
			pos = this.element.getOffsets(),
			scrollSize = this.element.getScrollSize(),
			change = {x: 0, y: 0};
		for (var z in this.page){
			if (this.page[z] < (this.options.area + pos[z]) && scroll[z] != 0)
				change[z] = (this.page[z] - this.options.area - pos[z]) * this.options.velocity;
			else if (this.page[z] + this.options.area > (size[z] + pos[z]) && scroll[z] + size[z] != scrollSize[z])
				change[z] = (this.page[z] - size[z] + this.options.area - pos[z]) * this.options.velocity;
		}
		if (change.y || change.x) this.fireEvent('change', [scroll.x + change.x, scroll.y + change.y]);
	}

});

/*
Script: Tips.js
	Class for creating nice tips that follow the mouse cursor when hovering an element.

	License:
		MIT-style license.

	Authors:
		Valerio Proietti
		Christoph Pojer
*/

var Tips = new Class({

	Implements: [Events, Options],

	options: {
		onShow: function(tip){
			tip.setStyle('visibility', 'visible');
		},
		onHide: function(tip){
			tip.setStyle('visibility', 'hidden');
		},
		title: 'title',
		text: function(el){
			return el.get('rel') || el.get('href');
		},
		showDelay: 100,
		hideDelay: 100,
		className: null,
		offset: {x: 16, y: 16},
		fixed: false
	},

	initialize: function(){
		var params = Array.link(arguments, {options: Object.type, elements: $defined});
		if (params.options && params.options.offsets) params.options.offset = params.options.offsets;
		this.setOptions(params.options);
		this.container = new Element('div', {'class': 'tip'});
		this.tip = this.getTip();

		if (params.elements) this.attach(params.elements);
	},

	getTip: function(){
		return new Element('div', {
			'class': this.options.className,
			styles: {
				visibility: 'hidden',
				display: 'none',
				position: 'absolute',
				top: 0,
				left: 0
			}
		}).adopt(
			new Element('div', {'class': 'tip-top'}),
			this.container,
			new Element('div', {'class': 'tip-bottom'})
		).inject(document.body);
	},

	attach: function(elements){
		var read = function(option, element){
			if (option == null) return '';
			return $type(option) == 'function' ? option(element) : element.get(option);
		};
		$$(elements).each(function(element){
			var title = read(this.options.title, element);
			element.erase('title').store('tip:native', title).retrieve('tip:title', title);
			element.retrieve('tip:text', read(this.options.text, element));

			var events = ['enter', 'leave'];
			if (!this.options.fixed) events.push('move');

			events.each(function(value){
				element.addEvent('mouse' + value, element.retrieve('tip:' + value, this['element' + value.capitalize()].bindWithEvent(this, element)));
			}, this);
		}, this);

		return this;
	},

	detach: function(elements){
		$$(elements).each(function(element){
			['enter', 'leave', 'move'].each(function(value){
				element.removeEvent('mouse' + value, element.retrieve('tip:' + value) || $empty);
			});

			element.eliminate('tip:enter').eliminate('tip:leave').eliminate('tip:move');

			if ($type(this.options.title) == 'string' && this.options.title == 'title'){
				var original = element.retrieve('tip:native');
				if (original) element.set('title', original);
			}
		}, this);

		return this;
	},

	elementEnter: function(event, element){
		$A(this.container.childNodes).each(Element.dispose);

		['title', 'text'].each(function(value){
			var content = element.retrieve('tip:' + value);
			if (!content) return;

			this[value + 'Element'] = new Element('div', {'class': 'tip-' + value}).inject(this.container);
			this.fill(this[value + 'Element'], content);
		}, this);

		this.timer = $clear(this.timer);
		this.timer = this.show.delay(this.options.showDelay, this, element);
		this.tip.setStyle('display', 'block');
		this.position((!this.options.fixed) ? event : {page: element.getPosition()});
	},

	elementLeave: function(event, element){
		$clear(this.timer);
		this.tip.setStyle('display', 'none');
		this.timer = this.hide.delay(this.options.hideDelay, this, element);
	},

	elementMove: function(event){
		this.position(event);
	},

	position: function(event){
		var size = window.getSize(), scroll = window.getScroll(),
			tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight},
			props = {x: 'left', y: 'top'},
			obj = {};

		for (var z in props){
			obj[props[z]] = event.page[z] + this.options.offset[z];
			if ((obj[props[z]] + tip[z] - scroll[z]) > size[z]) obj[props[z]] = event.page[z] - this.options.offset[z] - tip[z];
		}

		this.tip.setStyles(obj);
	},

	fill: function(element, contents){
		if(typeof contents == 'string') element.set('html', contents);
		else element.adopt(contents);
	},

	show: function(el){
		this.fireEvent('show', [this.tip, el]);
	},

	hide: function(el){
		this.fireEvent('hide', [this.tip, el]);
	}

});

/*
Script: Date.English.US.js
	Date messages for US English.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

MooTools.lang.set('en-US', 'Date', {

	months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],
	days: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],
	//culture's date order: MM/DD/YYYY
	dateOrder: ['month', 'date', 'year'],
	shortDate: '%m/%d/%Y',
	shortTime: '%I:%M%p',
	AM: 'AM',
	PM: 'PM',

	/* Date.Extras */
	ordinal: function(dayOfMonth){
		//1st, 2nd, 3rd, etc.
		return (dayOfMonth > 3 && dayOfMonth < 21) ? 'th' : ['th', 'st', 'nd', 'rd', 'th'][Math.min(dayOfMonth % 10, 4)];
	},

	lessThanMinuteAgo: 'less than a minute ago',
	minuteAgo: 'about a minute ago',
	minutesAgo: '{delta} minutes ago',
	hourAgo: 'about an hour ago',
	hoursAgo: 'about {delta} hours ago',
	dayAgo: '1 day ago',
	daysAgo: '{delta} days ago',
	lessThanMinuteUntil: 'less than a minute from now',
	minuteUntil: 'about a minute from now',
	minutesUntil: '{delta} minutes from now',
	hourUntil: 'about an hour from now',
	hoursUntil: 'about {delta} hours from now',
	dayUntil: '1 day from now',
	daysUntil: '{delta} days from now'

});

/*
Script: FormValidator.English.js
	Date messages for English.

	License:
		MIT-style license.

	Authors:
		Aaron Newton

*/

MooTools.lang.set('en-US', 'FormValidator', {

	required:'This field is required.',
	minLength:'Please enter at least {minLength} characters (you entered {length} characters).',
	maxLength:'Please enter no more than {maxLength} characters (you entered {length} characters).',
	integer:'Please enter an integer in this field. Numbers with decimals (e.g. 1.25) are not permitted.',
	numeric:'Please enter only numeric values in this field (i.e. "1" or "1.1" or "-1" or "-1.1").',
	digits:'Please use numbers and punctuation only in this field (for example, a phone number with dashes or dots is permitted).',
	alpha:'Please use letters only (a-z) with in this field. No spaces or other characters are allowed.',
	alphanum:'Please use only letters (a-z) or numbers (0-9) only in this field. No spaces or other characters are allowed.',
	dateSuchAs:'Please enter a valid date such as {date}',
	dateInFormatMDY:'Please enter a valid date such as MM/DD/YYYY (i.e. "12/31/1999")',
	email:'Please enter a valid email address. For example "fred@domain.com".',
	url:'Please enter a valid URL such as http://www.google.com.',
	currencyDollar:'Please enter a valid $ amount. For example $100.00 .',
	oneRequired:'Please enter something for at least one of these inputs.',
	errorPrefix: 'Error: ',
	warningPrefix: 'Warning: ',

	//FormValidator.Extras

	noSpace: 'There can be no spaces in this input.',
	reqChkByNode: 'No items are selected.',
	requiredChk: 'This field is required.',
	reqChkByName: 'Please select a {label}.',
	match: 'This field needs to match the {matchName} field',
	startDate: 'the start date',
	endDate: 'the end date',
	currendDate: 'the current date',
	afterDate: 'The date should be the same or after {label}.',
	beforeDate: 'The date should be the same or before {label}.',
	startMonth: 'Please select a start month',
	sameMonth: 'These two dates must be in the same month - you must change one or the other.'

});/*
Script: Clientcide.js
	The Clientcide namespace.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var Clientcide = {
	version: '2.1.0',
	setAssetLocation: function(baseHref) {
		var clean = function(str){
			return str.replace(/\/\//g, '/');
		};
		if (window.StickyWin && StickyWin.UI) {
			StickyWin.UI.implement({
				options: {
					baseHref: clean(baseHref + '/stickyWinHTML/')
				}
			});
			if (StickyWin.Alert) {
				StickyWin.Alert.implement({
					options: {
						baseHref: baseHref + "/simple.error.popup"
					}
				});
			}
			if (StickyWin.UI.Pointy) {
				StickyWin.UI.Pointy.implement({
					options: {
						baseHref: clean(baseHref + '/PointyTip/')
					}
				});
			}
		}
		if (window.TagMaker) {
			TagMaker.implement({
			    options: {
			        baseHref: clean(baseHref + '/tips/')
			    }
			});
		}
		if (window.ProductPicker) {
			ProductPicker.implement({
			    options:{
			        baseHref: clean(baseHref + '/Picker')
			    }
			});
		}

		if (window.Autocompleter) {
			Autocompleter.Base.implement({
					options: {
						baseHref: clean(baseHref + '/autocompleter/')
					}
			});
		}

		if (window.Lightbox) {
			Lightbox.implement({
			    options: {
			        assetBaseUrl: clean(baseHref + '/slimbox/')
			    }
			});
		}

		if (window.Waiter) {
			Waiter.implement({
				options: {
					baseHref: clean(baseHref + '/waiter/')
				}
			});
		}
	},
	preLoadCss: function(){
		if (window.StickyWin && StickyWin.ui) StickyWin.ui();
		if (window.StickyWin && StickyWin.pointy) StickyWin.pointy();
		Clientcide.preloaded = true;
		return true;
	},
	preloaded: false
};
(function(){
	if (!window.addEvent) return;
	var preload = function(){
		if (window.dbug) dbug.log('preloading clientcide css');
		if (!Clientcide.preloaded) Clientcide.preLoadCss();
	};
	window.addEvent('domready', preload);
	window.addEvent('load', preload);
})();
setCNETAssetBaseHref = Clientcide.setAssetLocation;

/*
Script: dbug.js
	A wrapper for Firebug console.* statements.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var dbug = {
	logged: [],
	timers: {},
	firebug: false,
	enabled: false,
	log: function() {
		dbug.logged.push(arguments);
	},
	nolog: function(msg) {
		dbug.logged.push(arguments);
	},
	time: function(name){
		dbug.timers[name] = new Date().getTime();
	},
	timeEnd: function(name){
		if (dbug.timers[name]) {
			var end = new Date().getTime() - dbug.timers[name];
			dbug.timers[name] = false;
			dbug.log('%s: %s', name, end);
		} else dbug.log('no such timer: %s', name);
	},
	enable: function(silent) {
		var con = window.firebug ? firebug.d.console.cmd : window.console;

		if((!!window.console && !!window.console.warn) || window.firebug) {
			try {
				dbug.enabled = true;
				dbug.log = function(){
						(con.debug || con.log).apply(con, arguments);
				};
				dbug.time = function(){
					con.time.apply(con, arguments);
				};
				dbug.timeEnd = function(){
					con.timeEnd.apply(con, arguments);
				};
				if(!silent) dbug.log('enabling dbug');
				for(var i=0;i<dbug.logged.length;i++){ dbug.log.apply(con, dbug.logged[i]); }
				dbug.logged=[];
			} catch(e) {
				dbug.enable.delay(400);
			}
		}
	},
	disable: function(){
		if(dbug.firebug) dbug.enabled = false;
		dbug.log = dbug.nolog;
		dbug.time = function(){};
		dbug.timeEnd = function(){};
	},
	cookie: function(set){
		var value = document.cookie.match('(?:^|;)\\s*jsdebug=([^;]*)');
		var debugCookie = value ? unescape(value[1]) : false;
		if((!$defined(set) && debugCookie != 'true') || ($defined(set) && set)) {
			dbug.enable();
			dbug.log('setting debugging cookie');
			var date = new Date();
			date.setTime(date.getTime()+(24*60*60*1000));
			document.cookie = 'jsdebug=true;expires='+date.toGMTString()+';path=/;';
		} else dbug.disableCookie();
	},
	disableCookie: function(){
		dbug.log('disabling debugging cookie');
		document.cookie = 'jsdebug=false;path=/;';
	}
};

(function(){
	var fb = !!window.console || !!window.firebug;
	var con = window.firebug ? window.firebug.d.console.cmd : window.console;
	var debugMethods = ['debug','info','warn','error','assert','dir','dirxml'];
	var otherMethods = ['trace','group','groupEnd','profile','profileEnd','count'];
	function set(methodList, defaultFunction) {
		for(var i = 0; i < methodList.length; i++){
			dbug[methodList[i]] = (fb && con[methodList[i]])?con[methodList[i]]:defaultFunction;
		}
	};
	set(debugMethods, dbug.log);
	set(otherMethods, function(){});
})();
if ((!!window.console && !!window.console.warn) || window.firebug){
	dbug.firebug = true;
	var value = document.cookie.match('(?:^|;)\\s*jsdebug=([^;]*)');
	var debugCookie = value ? unescape(value[1]) : false;
	if(window.location.href.indexOf("jsdebug=true")>0 || debugCookie=='true') dbug.enable();
	if(debugCookie=='true')dbug.log('debugging cookie enabled');
	if(window.location.href.indexOf("jsdebugCookie=true")>0){
		dbug.cookie();
		if(!dbug.enabled)dbug.enable();
	}
	if(window.location.href.indexOf("jsdebugCookie=false")>0)dbug.disableCookie();
}

/*
Script: ToElement.js
	Defines the toElement method for a class.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
Class.ToElement = new Class({
	toElement: function(){
		return this.element;
	}
});
var ToElement = Class.ToElement;

/*
Script: StyleWriter.js

Provides a simple method for injecting a css style element into the DOM if it's not already present.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/

var StyleWriter = new Class({
	createStyle: function(css, id) {
		window.addEvent('domready', function(){
			try {
				if (document.id(id) && id) return;
				var style = new Element('style', {id: id||''}).inject($$('head')[0]);
				if (Browser.Engine.trident) style.styleSheet.cssText = css;
				else style.set('text', css);
			}catch(e){dbug.log('error: %s',e);}
		}.bind(this));
	}
});

/*
Script: StickyWin.js

Creates a div within the page with the specified contents at the location relative to the element you specify; basically an in-page popup maker.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/

var StickyWin = new Class({
	Binds: ['destroy', 'hide', 'togglepin', 'esc'],
	Implements: [Options, Events, StyleWriter, Class.ToElement],
	options: {
//		onDisplay: $empty,
//		onClose: $empty,
//		onDestroy: $empty,
		closeClassName: 'closeSticky',
		pinClassName: 'pinSticky',
		content: '',
		zIndex: 10000,
		className: '',
//		id: ... set above in initialize function
/*  	these are the defaults for Element.position anyway
		************************************************
		edge: false, //see Element.position
		position: 'center', //center, corner == upperLeft, upperRight, bottomLeft, bottomRight
		offset: {x:0,y:0},
		relativeTo: document.body, */
		width: false,
		height: false,
		timeout: -1,
		allowMultipleByClass: false,
		allowMultiple: true,
		showNow: true,
		useIframeShim: true,
		iframeShimSelector: '',
		destroyOnClose: false,
		closeOnClickOut: false,
		closeOnEsc: false
	},

	css: '.SWclearfix:after {content: "."; display: block; height: 0; clear: both; visibility: hidden;}'+
		 '.SWclearfix {display: inline-table;} * html .SWclearfix {height: 1%;} .SWclearfix {display: block;}',

	initialize: function(options){
		this.options.inject = this.options.inject || {
			target: document.body,
			where: 'bottom'
		};
		this.setOptions(options);
		this.id = this.options.id || 'StickyWin_'+new Date().getTime();
		this.makeWindow();

		if (this.options.content) this.setContent(this.options.content);
		if (this.options.timeout > 0) {
			this.addEvent('onDisplay', function(){
				this.hide.delay(this.options.timeout, this)
			}.bind(this));
		}
		//add css for clearfix
		this.createStyle(this.css, 'StickyWinClearFix');
		if (this.options.closeOnClickOut || this.options.closeOnEsc) this.attach();
		if (this.options.destroyOnClose) this.addEvent('close', this.destroy);
		if (this.options.showNow) this.show();
	},
	attach: function(attach){
		var method = $pick(attach, true) ? 'addEvents' : 'removeEvents';
		var events = {};
		if (this.options.closeOnClickOut) events.click = this.esc;
		if (this.options.closeOnEsc) events.keyup = this.esc;
		document[method](events);
	},
	esc: function(e) {
		if (e.key == "esc") this.hide();
		if (e.type == "click" && this.element != e.target && !this.element.hasChild(e.target)) this.hide();
	},
	makeWindow: function(){
		this.destroyOthers();
		if (!document.id(this.id)) {
			this.win = new Element('div', {
				id:		this.id
			}).addClass(this.options.className).addClass('StickyWinInstance').addClass('SWclearfix').setStyles({
			 	display:'none',
				position:'absolute',
				zIndex:this.options.zIndex
			}).inject(this.options.inject.target, this.options.inject.where).store('StickyWin', this);
		} else this.win = document.id(this.id);
		this.element = this.win;
		if (this.options.width && $type(this.options.width.toInt())=="number") this.win.setStyle('width', this.options.width.toInt());
		if (this.options.height && $type(this.options.height.toInt())=="number") this.win.setStyle('height', this.options.height.toInt());
		return this;
	},
	show: function(suppressEvent){
		this.showWin();
		if (!suppressEvent) this.fireEvent('display');
		if (this.options.useIframeShim) this.showIframeShim();
		this.visible = true;
		return this;
	},
	showWin: function(){
		if (!this.positioned) this.position();
		this.win.show();
	},
	hide: function(suppressEvent){
		if ($type(suppressEvent) == "event" || !suppressEvent) this.fireEvent('close');
		this.hideWin();
		if (this.options.useIframeShim) this.hideIframeShim();
		this.visible = false;
		return this;
	},
	hideWin: function(){
		this.win.setStyle('display','none');
	},
	destroyOthers: function() {
		if (!this.options.allowMultipleByClass || !this.options.allowMultiple) {
			$$('div.StickyWinInstance').each(function(sw) {
				if (!this.options.allowMultiple || (!this.options.allowMultipleByClass && sw.hasClass(this.options.className)))
					sw.retrieve('StickyWin').destroy();
			}, this);
		}
	},
	setContent: function(html) {
		if (this.win.getChildren().length>0) this.win.empty();
		if ($type(html) == "string") this.win.set('html', html);
		else if (document.id(html)) this.win.adopt(html);
		this.win.getElements('.'+this.options.closeClassName).each(function(el){
			el.addEvent('click', this.hide);
		}, this);
		this.win.getElements('.'+this.options.pinClassName).each(function(el){
			el.addEvent('click', this.togglepin);
		}, this);
		return this;
	},
	position: function(options){
		this.positioned = true;
		this.setOptions(options);
		this.win.position({
			allowNegative: $pick(this.options.allowNegative, this.options.relativeTo != document.body),
			relativeTo: this.options.relativeTo,
			position: this.options.position,
			offset: this.options.offset,
			edge: this.options.edge
		});
		if (this.shim) this.shim.position();
		return this;
	},
	pin: function(pin) {
		if (!this.win.pin) {
			dbug.log('you must include element.pin.js!');
			return this;
		}
		this.pinned = $pick(pin, true);
		this.win.pin(pin);
		return this;
	},
	unpin: function(){
		return this.pin(false);
	},
	togglepin: function(){
		return this.pin(!this.pinned);
	},
	makeIframeShim: function(){
		if (!this.shim){
			var el = (this.options.iframeShimSelector)?this.win.getElement(this.options.iframeShimSelector):this.win;
			this.shim = new IframeShim(el, {
				display: false,
				name: 'StickyWinShim'
			});
		}
	},
	showIframeShim: function(){
		if (this.options.useIframeShim) {
			this.makeIframeShim();
			this.shim.show();
		}
	},
	hideIframeShim: function(){
		if (this.shim) this.shim.hide();
	},
	destroy: function(){
		if (this.win) this.win.destroy();
		if (this.options.useIframeShim && this.shim) this.shim.destroy();
		if (document.id('modalOverlay')) document.id('modalOverlay').destroy();
		this.fireEvent('destroy');
	}
});


/*
Script: StickyWin.ui.js

Creates an html holder for in-page popups using a default style.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
StickyWin.UI = new Class({
	Implements: [Options, Class.ToElement, StyleWriter],
	options: {
		width: 300,
		css: "div.DefaultStickyWin {font-family:verdana; font-size:11px; line-height: 13px;}"+
			"div.DefaultStickyWin div.top_ul{background:url({%baseHref%}full.png) top left no-repeat; height:30px; width:15px; float:left}"+
			"div.DefaultStickyWin div.top_ur{position:relative; left:0px !important; left:-4px; background:url({%baseHref%}full.png) top right !important; height:30px; margin:0px 0px 0px 15px !important; margin-right:-4px; padding:0px}"+
			"div.DefaultStickyWin h1.caption{clear: none !important; margin:0px !important; overflow: hidden; padding:0 !important; font-weight:bold; color:#555; font-size:14px !important; position:relative; top:8px !important; left:5px !important; float: left; height: 22px !important;}"+
			"div.DefaultStickyWin div.middle, div.DefaultStickyWin div.closeBody {background:url({%baseHref%}body.png) top left repeat-y; margin:0px 20px 0px 0px !important;	margin-bottom: -3px; position: relative;	top: 0px !important; top: -3px;}"+
			"div.DefaultStickyWin div.body{background:url({%baseHref%}body.png) top right repeat-y; padding:8px 30px 8px 0px !important; margin-left:5px !important; position:relative; right:-20px !important; z-index: 1;}"+
			"div.DefaultStickyWin div.bottom{clear:both;}"+
			"div.DefaultStickyWin div.bottom_ll{background:url({%baseHref%}full.png) bottom left no-repeat; width:15px; height:15px; float:left}"+
			"div.DefaultStickyWin div.bottom_lr{background:url({%baseHref%}full.png) bottom right; position:relative; left:0px !important; left:-4px; margin:0px 0px 0px 15px !important; margin-right:-4px; height:15px}"+
			"div.DefaultStickyWin div.closeButtons{text-align: center; background:url({%baseHref%}body.png) top right repeat-y; padding: 4px 30px 8px 0px; margin-left:5px; position:relative; right:-20px}"+
			"div.DefaultStickyWin a.button:hover{background:url({%baseHref%}big_button_over.gif) repeat-x}"+
			"div.DefaultStickyWin a.button {background:url({%baseHref%}big_button.gif) repeat-x; margin: 2px 8px 2px 8px; padding: 2px 12px; cursor:pointer; border: 1px solid #999 !important; text-decoration:none; color: #000 !important;}"+
			"div.DefaultStickyWin div.closeButton{width:13px; height:13px; background:url({%baseHref%}closebtn.gif) no-repeat; position: absolute; right: 0px; margin:10px 15px 0px 0px !important; cursor:pointer;top:0px}"+
			"div.DefaultStickyWin div.dragHandle {	width: 11px;	height: 25px;	position: relative;	top: 5px;	left: -3px;	cursor: move;	background: url({%baseHref%}drag_corner.gif); float: left;}",
		cornerHandle: false,
		cssClass: '',
		baseHref: 'http://www.cnet.com/html/rb/assets/global/stickyWinHTML/',
		buttons: [],
		cssId: 'defaultStickyWinStyle',
		cssClassName: 'DefaultStickyWin',
		closeButton: true
/*	These options are deprecated:
		closeTxt: false,
		onClose: $empty,
		confirmTxt: false,
		onConfirm: $empty	*/
	},
	initialize: function() {
		var args = this.getArgs(arguments);
		this.setOptions(args.options);
		this.legacy();
		var css = this.options.css.substitute({baseHref: this.options.baseHref}, /\\?\{%([^}]+)%\}/g);
		if (Browser.Engine.trident4) css = css.replace(/png/g, 'gif');
		this.createStyle(css, this.options.cssId);
		this.build();
		if (args.caption || args.body) this.setContent(args.caption, args.body);
	},
	getArgs: function(){
		return StickyWin.UI.getArgs.apply(this, arguments);
	},
	legacy: function(){
		var opt = this.options; //saving bytes
		//legacy support
		if (opt.confirmTxt) opt.buttons.push({text: opt.confirmTxt, onClick: opt.onConfirm || $empty});
		if (opt.closeTxt) opt.buttons.push({text: opt.closeTxt, onClick: opt.onClose || $empty});
	},
	build: function(){
		var opt = this.options;

		var container = new Element('div', {
			'class': opt.cssClassName
		});
		if (opt.width) container.setStyle('width', opt.width);
		this.element = container;
		this.element.store('StickyWinUI', this);
		if (opt.cssClass) container.addClass(opt.cssClass);


		var bodyDiv = new Element('div').addClass('body');
		this.body = bodyDiv;

		var top_ur = new Element('div').addClass('top_ur');
		this.top_ur = top_ur;
		this.top = new Element('div').addClass('top').adopt(
				new Element('div').addClass('top_ul')
			).adopt(top_ur);
		container.adopt(this.top);

		if (opt.cornerHandle) new Element('div').addClass('dragHandle').inject(top_ur, 'top');

		//body
		container.adopt(new Element('div').addClass('middle').adopt(bodyDiv));
		//close buttons
		if (opt.buttons.length > 0){
			var closeButtons = new Element('div').addClass('closeButtons');
			opt.buttons.each(function(button){
				if (button.properties && button.properties.className){
					button.properties['class'] = button.properties.className;
					delete button.properties.className;
				}
				var properties = $merge({'class': 'closeSticky'}, button.properties);
				new Element('a').addEvent('click', button.onClick || $empty)
					.appendText(button.text).inject(closeButtons).set(properties).addClass('button');
			});
			container.adopt(new Element('div').addClass('closeBody').adopt(closeButtons));
		}
		//footer
		container.adopt(
			new Element('div').addClass('bottom').adopt(
					new Element('div').addClass('bottom_ll')
				).adopt(
					new Element('div').addClass('bottom_lr')
			)
		);
		if (this.options.closeButton) container.adopt(new Element('div').addClass('closeButton').addClass('closeSticky'));
		return this;
	},
	makeCaption: function(caption) {
		if (!caption) return this.destroyCaption();
		this.caption = caption;
		var opt = this.options;
		var h1Caption = new Element('h1').addClass('caption');
		if (opt.width) h1Caption.setStyle('width', (opt.width-(opt.cornerHandle?55:40)-(opt.closeButton?10:0)));
		if (document.id(this.caption)) h1Caption.adopt(this.caption);
		else h1Caption.set('html', this.caption);
		this.top_ur.adopt(h1Caption);
		this.h1 = h1Caption;
		if (!this.options.cornerHandle) this.h1.addClass('dragHandle');
		return this;
	},
	destroyCaption: function(){
		if (this.h1) {
			this.h1.destroy();
			this.h1 = null;
		}
		return this;
	},
	setContent: function(){
		var args = this.getArgs.apply(this, arguments);
		var caption = args.caption;
		var body = args.body;
		if (this.h1) this.destroyCaption();
		this.makeCaption(caption);
		if (document.id(body)) this.body.empty().adopt(body);
		else this.body.set('html', body);
		return this;
	}
});
StickyWin.UI.getArgs = function(){
	var input = $type(arguments[0]) == "arguments"?arguments[0]:arguments;
	var cap = input[0], bod = input[1];
	var args = Array.link(input, {options: Object.type});
	if (input.length == 3 || (!args.options && input.length == 2)) {
		args.caption = cap;
		args.body = bod;
	} else if (($type(bod) == 'object' || !bod) && cap && $type(cap) != 'object'){
		args.body = cap;
	}
	return args;
};

StickyWin.ui = function(caption, body, options){
	return document.id(new StickyWin.UI(caption, body, options))
};


/*
Script: StickyWin.UI.Pointy.js

Creates an html holder for in-page popups using a default style - this one including a pointer in the specified direction.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
StickyWin.UI.Pointy = new Class({
	Extends: StickyWin.UI,
	options: {
		theme: 'dark',
		themes: {
			dark: {
				bgColor: '#333',
				fgColor: '#ddd',
				imgset: 'dark'
			},
			light: {
				bgColor: '#ccc',
				fgColor: '#333',
				imgset: 'light'
			}
		},
		css: "div.DefaultPointyTip {vertical-align: auto; position: relative;}"+
		"div.DefaultPointyTip * {text-align:left !important}"+
		"div.DefaultPointyTip .pointyWrapper div.body{background: {%bgColor%}; color: {%fgColor%}; left: 0px; right: 0px !important;padding:  0px 10px !important;margin-left: 0px !important;font-family: verdana;font-size: 11px;line-height: 13px;position: relative;}"+
		"div.DefaultPointyTip .pointyWrapper div.top {position: relative;height: 25px; overflow: visible;}"+
		"div.DefaultPointyTip .pointyWrapper div.top_ul{background: url({%baseHref%}{%imgset%}_back.png) top left no-repeat;width: 8px;height: 25px; position: absolute; left: 0px;}"+
		"div.DefaultPointyTip .pointyWrapper div.top_ur{background: url({%baseHref%}{%imgset%}_back.png) top right !important;margin: 0 0 0 8px !important;height: 25px;position: relative;left: 0px !important;padding: 0;}"+
		"div.DefaultPointyTip .pointyWrapper h1.caption{color: {%fgColor%};left: 0px !important;top: 4px !important;clear: none !important;overflow: hidden;font-weight: 700;font-size: 12px !important;position: relative;float: left;height: 22px !important;margin: 0 !important;padding: 0 !important;}"+
		"div.DefaultPointyTip .pointyWrapper div.middle, div.DefaultPointyTip .pointyWrapper div.closeBody{background:  {%bgColor%};margin: 0 0px 0 0 !important;position: relative;top: 0 !important;}"+
		"div.DefaultPointyTip .pointyWrapper div.bottom {clear: both; width: 100% !important; background: none; height: 6px} "+
		"div.DefaultPointyTip .pointyWrapper div.bottom_ll{font-size:1; background: url({%baseHref%}{%imgset%}_back.png) bottom left no-repeat;width: 6px;height: 6px;position: absolute; left: 0px;}"+
		"div.DefaultPointyTip .pointyWrapper div.bottom_lr{font-size:1; background: url({%baseHref%}{%imgset%}_back.png) bottom right;height: 6px;margin: 0 0 0 6px !important;position: relative;left: 0 !important;}"+
		"div.DefaultPointyTip .pointyWrapper div.noCaption{ height: 6px; overflow: hidden}"+
		"div.DefaultPointyTip .pointyWrapper div.closeButton{width:13px; height:13px; background:url({%baseHref%}{%imgset%}_x.png) no-repeat; position: absolute; right: 0px; margin:0px !important; cursor:pointer; z-index: 1; top: 4px;}"+
		"div.DefaultPointyTip .pointyWrapper div.pointyDivot {background: url({%divot%}) no-repeat;}",
		baseHref: 'http://github.com/anutron/clientcide/raw/master/Assets/PointyTip/',
		divot: '{%baseHref%}{%imgset%}_divot.png',
		divotSize: 22,
		direction: 12,
		cssId: 'defaultPointyTipStyle',
		cssClassName: 'DefaultPointyTip'
	},
	initialize: function() {
		var args = this.getArgs(arguments);
		this.setOptions(args.options);
		$extend(this.options, this.options.themes[this.options.theme]);
		this.options.divot = this.options.divot.substitute(this.options, /\\?\{%([^}]+)%\}/g);
		if (Browser.Engine.trident4) this.options.divot = this.options.divot.replace(/png/g, 'gif');
		this.options.css = this.options.css.substitute(this.options, /\\?\{%([^}]+)%\}/g);
		if (args.options && args.options.theme) {
			while (!this.id) {
				var id = $random(0, 999999999);
				if (!StickyWin.UI.Pointy[id]) {
					StickyWin.UI.Pointy[id] = this;
					this.id = id;
				}
			}
			this.options.css = this.options.css.replace(/div\.DefaultPointyTip/g, "div#pointy_"+this.id);
			this.options.cssId = "pointyTipStyle_" + this.id;
		}
		if ($type(this.options.direction) == 'string') {
			var map = {
				left: 9,
				right: 3,
				up: 12,
				down: 6
			};
			this.options.direction = map[this.options.direction];
		}

		this.parent(args.caption, args.body, this.options);
		if (this.id) document.id(this).set('id', "pointy_"+this.id);
	},
	build: function(){
		this.parent();
		var opt = this.options;
		this.pointyWrapper = new Element('div', {
			'class': 'pointyWrapper'
		}).inject(document.id(this));
		document.id(this).getChildren().each(function(el){
			if (el != this.pointyWrapper) this.pointyWrapper.grab(el);
		}, this);

		var w = opt.divotSize;
		var h = w;
		var left = (opt.width - opt.divotSize)/2;
		var orient = function(){
			switch(opt.direction) {
				case 12: case 1: case 11:
					return {
						height: h/2
					};
				case 5: case 6: case 7:
					return {
						height: h/2,
						backgroundPosition: '0 -'+h/2+'px'
					};
				case 8: case 9: case 10:
					return {
						width: w/2
					};
				case 2: case 3: case 4:
					return {
						width: w/2,
						backgroundPosition: '100%'
					};
			};
		};
		this.pointer = new Element('div', {
			styles: $extend({
				width: w,
				height: h,
				overflow: 'hidden'
			}, orient()),
			'class': 'pointyDivot pointy_'+opt.direction
		}).inject(this.pointyWrapper);
	},
	expose: function(){
		if (document.id(this).getStyle('display') != 'none' && document.id(document.body).hasChild(document.id(this))) return $empty;
		document.id(this).setStyles({
			visibility: 'hidden',
			position: 'absolute'
		});
		var dispose;
		if (!document.body.hasChild(document.id(this))) {
			document.id(this).inject(document.body);
			dispose = true;
		}
		return (function(){
			if (dispose) document.id(this).dispose();
			document.id(this).setStyles({
				visibility: 'visible',
				position: 'relative'
			});
		}).bind(this);
	},
	positionPointer: function(options){
		if (!this.pointer) return;
		var opt = options || this.options;
		var pos;
		var d = opt.direction;
		switch (d){
			case 12: case 1: case 11:
				pos = {
					edge: {x: 'center', y: 'bottom'},
					position: {
						x: d==12?'center':d==1?'right':'left',
						y: 'top'
					},
					offset: {
						x: (d==12?0:d==1?-1:1)*opt.divotSize,
						y: 1
					}
				};
				break;
			case 2: case 3: case 4:
				pos = {
					edge: {x: 'left', y: 'center'},
					position: {
						x: 'right',
						y: d==3?'center':d==2?'top':'bottom'
					},
					offset: {
						x: -1,
						y: (d==3?0:d==4?-1:1)*opt.divotSize
					}
				};
				break;
			case 5: case 6: case 7:
				pos = {
					edge: {x: 'center', y: 'top'},
					position: {
						x: d==6?'center':d==5?'right':'left',
						y: 'bottom'
					},
					offset: {
						x: (d==6?0:d==5?-1:1)*opt.divotSize,
						y: -1
					}
				};
				break;
			case 8: case 9: case 10:
				pos = {
					edge: {x: 'right', y: 'center'},
					position: {
						x: 'left',
						y: d==9?'center':d==10?'top':'bottom'
					},
					offset: {
						x: 1,
						y: (d==9?0:d==8?-1:1)*opt.divotSize
					}
				};
				break;
		};
		var putItBack = this.expose();
		this.pointer.position($extend({
			relativeTo: this.pointyWrapper
		}, pos, options));
		putItBack();
	},
	setContent: function(a1, a2){
		this.parent(a1, a2);
		this.top[this.h1?'removeClass':'addClass']('noCaption');
		if (Browser.Engine.trident4) document.id(this).getElements('.bottom_ll, .bottom_lr').setStyle('font-size', 1); //IE6 bullshit
		if (this.options.closeButton) this.body.setStyle('margin-right', 6);
		this.positionPointer();
		return this;
	},
	makeCaption: function(caption){
		this.parent(caption);
		if (this.options.width && this.h1) this.h1.setStyle('width', (this.options.width-(this.options.closeButton?25:15)));
	}
});

StickyWin.UI.pointy = function(caption, body, options){
	return document.id(new StickyWin.UI.Pointy(caption, body, options));
};
StickyWin.ui.pointy = StickyWin.UI.pointy;

/*
Script: StickyWin.PointyTip.js
	Positions a pointy tip relative to the element you specify.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
StickyWin.PointyTip = new Class({
	Extends: StickyWin,
	options: {
		point: "left",
		pointyOptions: {}
	},
	initialize: function(){
		var args = this.getArgs(arguments);
		this.setOptions(args.options);
		var popts = this.options.pointyOptions;
		var d = popts.direction;
		if (!d) {
			var map = {
				left: 9,
				right: 3,
				up: 12,
				down: 6
			};
			d = map[this.options.point];
			if (!d) d = this.options.point;
			popts.direction = d;
		}
		if (!popts.width) popts.width = this.options.width;
		this.pointy = new StickyWin.UI.Pointy(args.caption, args.body, popts);
		this.options.content = null;
		this.setOptions(args.options, this.getPositionSettings());
		this.parent(this.options);
		this.win.empty().adopt(document.id(this.pointy));
		this.attachHandlers(this.win);
		if (this.options.showNow) this.position();
	},
	getArgs: function(){
		return StickyWin.UI.getArgs.apply(this, arguments);
	},
	getPositionSettings: function(){
		var s = this.pointy.options.divotSize;
		var d = this.options.point;
		switch(d) {
			case "left": case 8: case 9: case 10:
				return {
					edge: {
						x: 'left',
						y: d==10?'top':d==8?'bottom':'center'
					},
					position: {x: 'right', y: 'center'},
					offset: {
						x: s
					}
				};
			case "right": case 2:  case 3: case 4:
				return {
					edge: {
						x: 'right',
						y: d==2?'top':d==4?'bottom':'center'
					},
					position: {x: 'left', y: 'center'},
					offset: {x: -s}
				};
			case "up": case 11: case 12: case 1:
				return {
					edge: {
						x: d==11?'left':d==1?'right':'center',
						y: 'top'
					},
					position: {	x: 'center', y: 'bottom' },
					offset: {
						y: s,
						x: d==11?-s:d==1?s:0
					}
				};
			case "down": case 5: case 6: case 7:
				return {
					edge: {
						x: d==7?'left':d==5?'right':'center',
						y: 'bottom'
					},
					position: {x: 'center', y: 'top'},
					offset: {
						y: -s,
						x: d==7?-s:d==5?s:0
					}
				};
		};
	},
	setContent: function() {
		var args = this.getArgs(arguments);
		this.pointy.setContent(args.caption, args.body);
		[this.pointy.h1, this.pointy.body].each(this.attachHandlers, this);
		if (this.visible) this.position();
		return this;
	},
	showWin: function(){
		this.parent();
		this.pointy.positionPointer();
	},
	position: function(options){
		this.parent(options);
		this.pointy.positionPointer();
	},
	attachHandlers: function(content) {
		if (!content) return;
		content.getElements('.'+this.options.closeClassName).addEvent('click', function(){ this.hide(); }.bind(this));
		content.getElements('.'+this.options.pinClassName).addEvent('click', function(){ this.togglepin(); }.bind(this));
	}
});

/*
Script: Waiter.js

Adds a semi-transparent overlay over a dom element with a spinnin ajax icon.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var Waiter = new Class({
	Implements: [Options, Events, Chain, Class.Occlude],
	options: {
		baseHref: 'http://www.cnet.com/html/rb/assets/global/waiter/',
		containerProps: {
			styles: {
				position: 'absolute',
				'text-align': 'center'
			},
			'class':'waiterContainer'
		},
		containerPosition: {},
		msg: false,
		msgProps: {
			styles: {
				'text-align': 'center',
				fontWeight: 'bold'
			},
			'class':'waiterMsg'
		},
		img: {
			src: 'waiter.gif',
			styles: {
				width: 24,
				height: 24
			},
			'class':'waiterImg'
		},
		layer:{
			styles: {
				width: 0,
				height: 0,
				position: 'absolute',
				zIndex: 999,
				display: 'none',
				opacity: 0.9,
				background: '#fff'
			},
			'class': 'waitingDiv'
		},
		useIframeShim: true,
		fxOptions: {},
		injectWhere: null
//	iframeShimOptions: {},
//	onShow: $empty
//	onHide: $empty
	},
	property: 'Waiter',
	initialize: function(target, options){
		this.element = document.id(target)||document.id(document.body);
		if (this.occlude()) return this.occluded;
		this.setOptions(options);
		this.build();
		this.place(target);
	},
	build: function(){
		this.waiterContainer = new Element('div', this.options.containerProps);
		if (this.options.msg) {
			this.msgContainer = new Element('div', this.options.msgProps);
			this.waiterContainer.adopt(this.msgContainer);
			if (!document.id(this.options.msg)) this.msg = new Element('p').appendText(this.options.msg);
			else this.msg = document.id(this.options.msg);
			this.msgContainer.adopt(this.msg);
		}
		if (this.options.img) this.waiterImg = document.id(this.options.img.id) || new Element('img', $merge(this.options.img, {
			src: this.options.baseHref + this.options.img.src
		})).inject(this.waiterContainer);
		this.waiterOverlay = document.id(this.options.layer.id) || new Element('div').adopt(this.waiterContainer);
		this.waiterOverlay.set(this.options.layer);
		try {
			if (this.options.useIframeShim) this.shim = new IframeShim(this.waiterOverlay, this.options.iframeShimOptions);
		} catch(e) {
			dbug.log("Waiter attempting to use IframeShim but failed; did you include IframeShim? Error: ", e);
			this.options.useIframeShim = false;
		}
		this.waiterFx = this.waiterFx || new Fx.Elements($$(this.waiterContainer, this.waiterOverlay), this.options.fxOptions);
	},
	place: function(target, where){
		var where = where || this.options.injectWhere || target == document.body ? 'inside' : 'after';
		this.waiterOverlay.inject(target, where);
	},
	toggle: function(element, show) {
		//the element or the default
		element = document.id(element) || document.id(this.active) || document.id(this.element);
		this.place(element);
		if (!document.id(element)) return this;
		if (this.active && element != this.active) return this.stop(this.start.bind(this, element));
		//if it's not active or show is explicit
		//or show is not explicitly set to false
		//start the effect
		if ((!this.active || show) && show !== false) this.start(element);
		//else if it's active and show isn't explicitly set to true
		//stop the effect
		else if (this.active && !show) this.stop();
		return this;
	},
	reset: function(){
		this.waiterFx.cancel().set({
			0: { opacity:[0]},
			1: { opacity:[0]}
		});
	},
	start: function(element){
		this.reset();
		element = document.id(element) || document.id(this.element);
		this.place(element);
		var start = function() {
			var dim = element.getComputedSize();
			this.active = element;
			this.waiterOverlay.setStyles({
				width: this.options.layer.width||dim.totalWidth,
				height: this.options.layer.height||dim.totalHeight,
				display: 'block'
			}).position({
				relativeTo: element,
				position: 'upperLeft'
			});
			this.waiterContainer.position($merge({
				relativeTo: this.waiterOverlay
			}, this.options.containerPosition));
			if (this.options.useIframeShim) this.shim.show();
			this.waiterFx.start({
				0: { opacity:[1] },
				1: { opacity:[this.options.layer.styles.opacity]}
			}).chain(function(){
				if (this.active == element) this.fireEvent('onShow', element);
				this.callChain();
			}.bind(this));
		}.bind(this);

		if (this.active && this.active != element) this.stop(start);
		else start();

		return this;
	},
	stop: function(callback){
		if (!this.active) {
			if ($type(callback) == "function") callback.attempt();
			return this;
		}
		this.waiterFx.cancel();
		this.waiterFx.clearChain();
		//fade the waiter out
		this.waiterFx.start({
			0: { opacity:[0]},
			1: { opacity:[0]}
		}).chain(function(){
			this.active = null;
			this.waiterOverlay.hide();
			if (this.options.useIframeShim) this.shim.hide();
			this.fireEvent('onHide', this.active);
			this.callChain();
			this.clearChain();
			if ($type(callback) == "function") callback.attempt();
		}.bind(this));
		return this;
	}
});

if (window.Request) {
	Request = Class.refactor(Request, {
		options: {
			useWaiter: false,
			waiterOptions: {},
			waiterTarget: false
		},
		initialize: function(options){
			this._send = this.send;
			this.send = function(options){
				if (this.waiter) this.waiter.start().chain(this._send.bind(this, options));
				else this._send(options);
				return this;
			};
			this.previous(options);
			if (this.options.useWaiter && (document.id(this.options.update) || document.id(this.options.waiterTarget))) {
				this.waiter = new Waiter(this.options.waiterTarget || this.options.update, this.options.waiterOptions);
				['onComplete', 'onException', 'onCancel'].each(function(event){
					this.addEvent(event, this.waiter.stop.bind(this.waiter));
				}, this);
			}
		}
	});
}

Element.Properties.waiter = {

	set: function(options){
		var waiter = this.retrieve('waiter');
		return this.eliminate('waiter').store('waiter:options', options);
	},

	get: function(options){
		if (options || !this.retrieve('waiter')){
			if (options || !this.retrieve('waiter:options')) this.set('waiter', options);
			this.store('waiter', new Waiter(this, this.retrieve('waiter:options')));
		}
		return this.retrieve('waiter');
	}

};

Element.implement({

	wait: function(options){
		this.get('waiter', options).start();
		return this;
	},

	release: function(){
		var opt = Array.link(arguments, {options: Object.type, callback: Function.type});
		this.get('waiter', opt.options).stop(opt.callback);
		return this;
	}

});

/*
Script: MooScroller.js

Recreates the standard scrollbar behavior for elements with overflow but using DOM elements so that the scroll bar elements are completely styleable by css.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var MooScroller = new Class({
	Implements: [Options, Events],
	options: {
		maxThumbSize: 10,
		mode: 'vertical',
		width: 0, //required only for mode: horizontal
		scrollSteps: 10,
		wheel: true,
		scrollLinks: {
			forward: 'scrollForward',
			back: 'scrollBack'
		},
		hideWhenNoOverflow: true
//		onScroll: $empty,
//		onPage: $empty
	},

	initialize: function(content, knob, options){
		this.setOptions(options);
		this.horz = (this.options.mode == "horizontal");

		this.content = document.id(content).setStyle('overflow', 'hidden');
		this.knob = document.id(knob);
		this.track = this.knob.getParent();
		this.setPositions();

		if (this.horz && this.options.width) {
			this.wrapper = new Element('div');
			this.content.getChildren().each(function(child){
				this.wrapper.adopt(child);
			}, this);
			this.wrapper.inject(this.content).setStyle('width', this.options.width);
		}


		this.bound = {
			'start': this.start.bind(this),
			'end': this.end.bind(this),
			'drag': this.drag.bind(this),
			'wheel': this.wheel.bind(this),
			'page': this.page.bind(this)
		};

		this.position = {};
		this.mouse = {};
		this.update();
		this.attach();

		var clearScroll = function (){
			$clear(this.scrolling);
		}.bind(this);
		['forward','back'].each(function(direction) {
			var lnk = document.id(this.options.scrollLinks[direction]);
			if (lnk) {
				lnk.addEvents({
					mousedown: function() {
						this.scrolling = this[direction].periodical(50, this);
					}.bind(this),
					mouseup: clearScroll.bind(this),
					click: clearScroll.bind(this)
				});
			}
		}, this);
		this.knob.addEvent('click', clearScroll.bind(this));
		window.addEvent('domready', function(){
			try {
				document.id(document.body).addEvent('mouseup', clearScroll.bind(this));
			}catch(e){}
		}.bind(this));
	},
	setPositions: function(){
		[this.track, this.knob].each(function(el){
			if (el.getStyle('position') == 'static') el.setStyle('position','relative');
		});

	},
	toElement: function(){
		return this.content;
	},
	update: function(){
		var plain = this.horz?'Width':'Height';
		this.contentSize = this.content['offset'+plain];
		this.contentScrollSize = this.content['scroll'+plain];
		this.trackSize = this.track['offset'+plain];

		this.contentRatio = this.contentSize / this.contentScrollSize;

		this.knobSize = (this.trackSize * this.contentRatio).limit(this.options.maxThumbSize, this.trackSize);

		if (this.options.hideWhenNoOverflow) {
			this.hidden = this.knobSize == this.trackSize;
			this.track.setStyle('opacity', this.hidden?0:1);
		}

		this.scrollRatio = this.contentScrollSize / this.trackSize;
		this.knob.setStyle(plain.toLowerCase(), this.knobSize);

		this.updateThumbFromContentScroll();
		this.updateContentFromThumbPosition();
	},

	updateContentFromThumbPosition: function(){
		this.content[this.horz?'scrollLeft':'scrollTop'] = this.position.now * this.scrollRatio;
	},

	updateThumbFromContentScroll: function(){
		this.position.now = (this.content[this.horz?'scrollLeft':'scrollTop'] / this.scrollRatio).limit(0, (this.trackSize - this.knobSize));
		this.knob.setStyle(this.horz?'left':'top', this.position.now);
	},

	attach: function(){
		this.knob.addEvent('mousedown', this.bound.start);
		if (this.options.scrollSteps) this.content.addEvent('mousewheel', this.bound.wheel);
		this.track.addEvent('mouseup', this.bound.page);
	},

	wheel: function(event){
		if (this.hidden) return;
		this.scroll(-(event.wheel * this.options.scrollSteps));
		this.updateThumbFromContentScroll();
		event.stop();
	},

	scroll: function(steps){
		steps = steps||this.options.scrollSteps;
		this.content[this.horz?'scrollLeft':'scrollTop'] += steps;
		this.updateThumbFromContentScroll();
		this.fireEvent('onScroll', steps);
	},
	forward: function(steps){
		this.scroll(steps);
	},
	back: function(steps){
		steps = steps||this.options.scrollSteps;
		this.scroll(-steps);
	},

	page: function(event){
		var axis = this.horz?'x':'y';
		var forward = (event.page[axis] > this.knob.getPosition()[axis]);
		this.scroll((forward?1:-1)*this.content['offset'+(this.horz?'Width':'Height')]);
		this.updateThumbFromContentScroll();
		this.fireEvent('onPage', forward);
		event.stop();
	},


	start: function(event){
		var axis = this.horz?'x':'y';
		this.mouse.start = event.page[axis];
		this.position.start = this.knob.getStyle(this.horz?'left':'top').toInt();
		document.addEvent('mousemove', this.bound.drag);
		document.addEvent('mouseup', this.bound.end);
		this.knob.addEvent('mouseup', this.bound.end);
		event.stop();
	},

	end: function(event){
		document.removeEvent('mousemove', this.bound.drag);
		document.removeEvent('mouseup', this.bound.end);
		this.knob.removeEvent('mouseup', this.bound.end);
		event.stop();
	},

	drag: function(event){
		var axis = this.horz?'x':'y';
		this.mouse.now = event.page[axis];
		this.position.now = (this.position.start + (this.mouse.now - this.mouse.start)).limit(0, (this.trackSize - this.knobSize));
		this.updateContentFromThumbPosition();
		this.updateThumbFromContentScroll();
		event.stop();
	}

});


/*
Script: DatePicker.js
	Allows the user to enter a date in many popuplar date formats or choose from a calendar.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var DatePicker;
(function(){
	var DPglobal = function() {
		if (DatePicker.pickers) return;
		DatePicker.pickers = [];
		DatePicker.hideAll = function(){
			DatePicker.pickers.each(function(picker){
				picker.hide();
			});
		};
	};
 	DatePicker = new Class({
		Implements: [Options, Events, StyleWriter],
		options: {
			format: "%x",
			defaultCss: 'div.calendarHolder {height:177px;position: absolute;top: -21px !important;top: -27px;left: -3px;width: 100%;}'+
				'div.calendarHolder table.cal {margin-right: 15px !important;margin-right: 8px;width: 205px;}'+
				'div.calendarHolder td {text-align:center;}'+
				'div.calendarHolder tr.dayRow td {padding: 2px;width: 22px;cursor: pointer;}'+
				'div.calendarHolder table.datePicker * {font-size:11px;line-height:16px;}'+
				'div.calendarHolder table.datePicker {margin: 0;padding:0 5px;float: left;}'+
				'div.calendarHolder table.datePicker table.cal td {cursor:pointer;}'+
				'div.calendarHolder tr.dateNav {font-weight: bold;height:22px;margin-top:8px;}'+
				'div.calendarHolder tr.dayNames {height: 23px;}'+
				'div.calendarHolder tr.dayNames td {color:#666;font-weight:700;border-bottom:1px solid #ddd;}'+
				'div.calendarHolder table.datePicker tr.dayRow td:hover {background:#ccc;}'+
				'div.calendarHolder table.datePicker tr.dayRow td {margin: 1px;}'+
				'div.calendarHolder td.today {color:#bb0904;}'+
				'div.calendarHolder td.otherMonthDate {border:1px solid #fff;color:#ccc;background:#f3f3f3 !important;margin: 0px !important;}'+
				'div.calendarHolder td.selectedDate {border: 1px solid #20397b;background:#dcddef;margin: 0px !important;}'+
				'div.calendarHolder a.leftScroll, div.calendarHolder a.rightScroll {cursor: pointer; color: #000}'+
				'div.datePickerSW div.body {height: 160px !important;height: 149px;}'+
				'div.datePickerSW .clearfix:after {content: ".";display: block;height: 0;clear: both;visibility: hidden;}'+
				'div.datePickerSW .clearfix {display: inline-table;}'+
				'* html div.datePickerSW .clearfix {height: 1%;}'+
				'div.datePickerSW .clearfix {display: block;}',
			calendarId: false,
			stickyWinOptions: {
				draggable: true,
				dragOptions: {},
				position: "bottomLeft",
				offset: {x:10, y:10},
				fadeDuration: 400
			},
			stickyWinUiOptions: {},
			updateOnBlur: true,
			additionalShowLinks: [],
			showOnInputFocus: true,
			useDefaultCss: true,
			hideCalendarOnPick: true,
			weekStartOffset: 0,
			showMoreThanOne: true,
			stickyWinToUse: StickyWin
/*		onPick: $empty,
			onShow: $empty,
			onHide: $empty */
		},

		initialize: function(input, options){
			DPglobal(); //make sure controller is setup
			if (document.id(input)) this.inputs = $H({start: document.id(input)});
	    	this.today = new Date();
			this.setOptions(options);
			if (this.options.useDefaultCss) this.createStyle(this.options.defaultCss, 'datePickerStyle');
			if (!this.inputs) return;
			this.whens = this.whens || ['start'];
			if (!this.calendarId) this.calendarId = "popupCalendar" + new Date().getTime();
			this.setUpObservers();
			this.getCalendar();
			this.formValidatorInterface();
			DatePicker.pickers.push(this);
		},
		formValidatorInterface: function(){
			this.inputs.each(function(input){
				var props;
				if (input.get('validatorProps')) props = input.get('validatorProps');
				if (props && props.dateFormat) {
					dbug.log('using date format specified in validatorProps property of element to play nice with FormValidator');
					this.setOptions({ format: props.dateFormat });
				} else {
					if (!props) props = {};
					props.dateFormat = this.options.format;
					input.set('validatorProps', props);
				}
			}, this);
		},
		calWidth: 280,
		inputDates: {},
		selectedDates: {},
		setUpObservers: function(){
			this.inputs.each(function(input) {
				if (this.options.showOnInputFocus) input.addEvent('focus', this.show.bind(this));
				input.addEvent('blur', function(e){
					if (e) {
						this.selectedDates = this.getDates(null, true);
						this.fillCalendar(this.selectedDates.start);
						if (this.options.updateOnBlur) this.updateInput();
					}
				}.bind(this));
			}, this);
			this.options.additionalShowLinks.each(function(lnk){
				document.id(lnk).addEvent('click', this.show.bind(this))
			}, this);
		},
		getDates: function(dates, getFromInputs){
			var d = {};
			if (!getFromInputs) dates = dates||this.selectedDates;
			var getFromInput = function(when){
				var input = this.inputs.get(when);
				if (input) d[when] = this.validDate(input.get('value'));
			}.bind(this);
			this.whens.each(function(when) {
				switch($type(dates)){
					case "object":
						if (dates) d[when] = dates[when]?dates[when]:dates;
						if (!d[when] && !d[when].format) getFromInput(when);
						break;
					default:
						getFromInput(when);
						break;
				}
				if (!d[when]) d[when] = this.selectedDates[when]||new Date();
			}, this);
			return d;
		},
		updateInput: function(){
			var d = {};
			$each(this.getDates(), function(value, key){
				var input = this.inputs.get(key);
				if (!input) return;
				input.set('value', (value)?this.formatDate(value)||"":"");
			}, this);
			return this;
		},
		validDate: function(val) {
			if (!$chk(val)) return null;
			var date = Date.parse(val.trim());
			return isNaN(date)?null:date;
		},
		formatDate: function (date) {
			return date.format(this.options.format);
		},
		getCalendar: function() {
			if (!this.calendar) {
				var cal = new Element("table", {
					'id': this.options.calendarId || '',
					'border':'0',
					'cellpadding':'0',
					'cellspacing':'0',
					'class':'datePicker'
				});
				var tbody = new Element('tbody').inject(cal);
				var rows = [];
				(8).times(function(i){
					var row = new Element('tr').inject(tbody);
					(7).times(function(i){
						var td = new Element('td').inject(row).set('html', '&nbsp;');
					});
				});
				var rows = tbody.getElements('tr');
				rows[0].addClass('dateNav');
				rows[1].addClass('dayNames');
				(6).times(function(i){
					rows[i+2].addClass('dayRow');
				});
				this.rows = rows;
				var dayCells = rows[1].getElements('td');
				dayCells.each(function(cell, i){
					cell.firstChild.data = Date.getMsg('days')[(i + this.options.weekStartOffset) % 7].substring(0,3);
				}, this);
				[6,5,4,3].each(function(i){ rows[0].getElements('td')[i].dispose() });
				this.prevLnk = rows[0].getElement('td').setStyle('text-align', 'right');
				this.prevLnk.adopt(new Element('a').set('html', "&lt;").addClass('rightScroll'));
				this.month = rows[0].getElements('td')[1];
				this.month.set('colspan', 5);
				this.nextLnk = rows[0].getElements('td')[2].setStyle('text-align', 'left');
				this.nextLnk.adopt(new Element('a').set('html', '&gt;').addClass('leftScroll'));
				cal.addEvent('click', this.clickCalendar.bind(this));
				this.calendar = cal;
				this.container = new Element('div').adopt(cal).addClass('calendarHolder');
				this.content = StickyWin.ui('', this.container, $merge(this.options.stickyWinUiOptions, {
					cornerHandle: this.options.stickyWinOptions.draggable,
					width: this.calWidth
				}));
				var opts = $merge(this.options.stickyWinOptions, {
					content: this.content,
					className: 'datePickerSW',
					allowMultipleByClass: true,
					showNow: false,
					relativeTo: this.inputs.get('start')
				});
				this.stickyWin = new this.options.stickyWinToUse(opts);
				this.stickyWin.addEvent('onDisplay', this.positionClose.bind(this));
				this.container.setStyle('z-index', this.stickyWin.win.getStyle('z-index').toInt()+1);
			}
			return this.calendar;
		},
		positionClose: function(){
			if (this.closePositioned) return;
			var closer = this.content.getElement('div.closeButton');
			if (closer) {
				closer.inject(this.container, 'after').setStyle('z-index', this.stickyWin.win.getStyle('z-index').toInt()+2);
				(function(){
					this.content.setStyle('width', this.calendar.getSize().x + (this.options.time ? 240 : 40));
					closer.position({relativeTo: this.stickyWin.win.getElement('.top'), position: 'upperRight', edge: 'upperRight'});
				}).delay(3, this);
			}
			this.closePositioned = true;
		},
		hide: function(){
			this.stickyWin.hide();
			this.fireEvent('onHide');
			return this;
		},
		hideOthers: function(){
			DatePicker.pickers.each(function(picker){
				if (picker != this) picker.hide();
			});
			return this;
		},
		show: function(){
			this.selectedDates = {};
			var dates = this.getDates(null, true);
			this.whens.each(function(when){
				this.inputDates[when] = dates[when]?dates[when].clone():dates.start?dates.start.clone():this.today;
		    this.selectedDates[when] = !this.inputDates[when] || isNaN(this.inputDates[when])
						? this.today
						: this.inputDates[when].clone();
				this.getCalendar(when);
			}, this);
			this.fillCalendar(this.selectedDates.start);
			if (!this.options.showMoreThanOne) this.hideOthers();
			this.stickyWin.show();
			this.fireEvent('onShow');
			return this;
		},
		handleScroll: function(e){
			if (e.target.hasClass('rightScroll')||e.target.hasClass('leftScroll')) {
				var newRef = e.target.hasClass('rightScroll')
					?this.rows[2].getElement('td').refDate - Date.units.day()
					:this.rows[7].getElements('td')[6].refDate + Date.units.day();
				this.fillCalendar(new Date(newRef));
				return true;
			}
			return false;
		},
		setSelectedDates: function(e, newDate){
			this.selectedDates.start = newDate;
		},
		onPick: function(){
			this.updateSelectors();
			this.inputs.each(function(input) {
				input.fireEvent("change");
				input.fireEvent("blur");
			});
			this.fireEvent('onPick');
			if (this.options.hideCalendarOnPick) this.hide();
		},
		clickCalendar: function(e) {
			if (this.handleScroll(e)) return;
			if (!e.target.firstChild || !e.target.firstChild.data) return;
			var val = e.target.firstChild.data;
			if (e.target.refDate) {
				var newDate = new Date(e.target.refDate);
				this.setSelectedDates(e, newDate);
				this.updateInput();
				this.onPick();
			}
		},
		fillCalendar: function (date) {
			if ($type(date) == "string") date = new Date(date);
			var startDate = (date)?new Date(date.getTime()):new Date();
			var hours = startDate.get('hours');
			startDate.setDate(1);
			startDate.setTime((startDate.getTime() - (Date.units.day() * (startDate.getDay()))) +
			                  (Date.units.day() * this.options.weekStartOffset));
			var monthyr = new Element('span', {
				html: Date.getMsg('months')[date.getMonth()] + " " + date.getFullYear()
			});
			document.id(this.rows[0].getElements('td')[1]).empty().adopt(monthyr);
			var atDate = startDate.clone();
			this.rows.each(function(row, i){
				if (i < 2) return;
				row.getElements('td').each(function(td){
					atDate.set('hours', hours);
					td.firstChild.data = atDate.getDate();
					td.refDate = atDate.getTime();
					atDate.setTime(atDate.getTime() + Date.units.day());
				}, this);
			}, this);
			this.updateSelectors();
		},
		updateSelectors: function(){
			var atDate;
			var month = new Date(this.rows[5].getElement('td').refDate).getMonth();
			this.rows.each(function(row, i){
				if (i < 2) return;
				row.getElements('td').each(function(td){
					td.className = '';
					atDate = new Date(td.refDate);
					if (atDate.format("%x") == this.today.format("%x")) td.addClass('today');
					this.whens.each(function(when){
						var date = this.selectedDates[when];
						if (date && atDate.format("%x") == date.format("%x")) {
							td.addClass('selectedDate');
							this.fireEvent('selectedDateMatch', [td, when]);
						}
					}, this);
					this.fireEvent('rowDateEvaluated', [atDate, td]);
					if (atDate.getMonth() != month) td.addClass('otherMonthDate');
					atDate.setTime(atDate.getTime() + Date.units.day());
				}, this);
			}, this);
		}
	});
})();

/*
Script: DatePicker.Extras.js
	Extends DatePicker to allow for range selection and time entry.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
DatePicker = Class.refactor(DatePicker, {
	options:{
		extraCSS: 'a.finish {position: relative;height: 13px !important;top: -31px !important;left: 85px !important;top: -34px;left: 77px;height: 16px;display:block;float: left;padding: 1px 12px 3px !important;}'+
			'div.calendarHolder div.time {border: #999 1px solid;width: 55px;position: relative;left: 3px;height: 17px;}'+
			'div.calendarHolder td.timeTD {width: 140px;} div.calendarHolder td.label{width:35px; text-align:right}'+
			'div.calendarHolder div.time select {font-size: 10px !important; font-size: 15px;padding: 0px;left:60px;position:absolute;top:-1px !important; width: auto !important;}'+
			'div.calendarHolder div.time input {width: 16px !important;width: 12px;padding: 2px;height: 13px;border: none !important;border: 1px solid #fff;}'+
			'div.calendarHolder div.timeSub {clear:both;position: relative;width: 65px;}'+
			'div.calendarHolder div.timeSub span {text-align: center;color: #999;margin: 5px;}'+
			'div.calendarHolder span.seperator {position:relative;top:-3px;}'+
			'div.calendarHolder table.stamp {position:relative;top: 35px !important;top: 50px;left: 0px;}'+
			'div.calendarHolder table.stamp a {left:123px;position:relative;top:9px;}'+
			'div.calendarHolder table.stamp td {border: none !important;}'+
			'div.calendarHolder td.selected_end {border-width: 1px 1px 1px 0px !important;margin: 0px 0px 0px 1px !important;}'+
			'div.calendarHolder td.selected_start {border-width: 1px 0px 1px 1px !important;margin: 0px 1px 0px 0px !important;}'+
			'div.calendarHolder table.datePicker td.range {background: #dcddef;border: solid #20397b;border-width: 1px 0px;margin: 0px 1px !important;}',
		range: false,
		time: false
	},
	initialize: function(inputs, options){
		if (options && (options.range || options.time)) {
			options = $merge({
				hideCalendarOnPick: false
			}, options);
		}
		if (options && options.time && !options.format) {
			options.format = "%x %X";
		}
		this.setOptions(options);
		this.whens = (this.options.range)?['start', 'end']:['start'];
		if ($type(inputs) == 'object') {
			this.inputs = $H(inputs);
		} else if ($type(document.id(inputs)) == "element") {
			this.inputs = $H({'start': document.id(inputs)});
		} else if ($type(inputs) == "array"){
			inputs = $$(inputs);
			this.inputs = $H({});
			this.whens.each(function(when, i){
				this.inputs.set(when, inputs[i]);
			}, this);
		}
		if (this.options.time) this.calWidth = 460;
		this.previous(inputs, this.options);
		this.createStyle(this.options.extraCSS, 'datePickerPlusStyle');
		this.addEvent('rowDateEvaluated', function(atDate, td){
			if (this.options.range && this.selectedDates.start.diff(atDate, 'minute') > 0
					&& this.selectedDates.end.diff(atDate, 'minute') < 0) td.addClass('range');
		}.bind(this));
		this.addEvent('selectedDateMatch', function(td, when){
			if (this.options.range) td.addClass('selected_'+when);
		}.bind(this));
	},
	updateInput: function(){
		this.previous();
		if (this.options.time) this.updateView();
	},
	updateView: function() {
		this.whens.each(function(when){
			var stamp = this.stamps[when];
			var date = this.getDates()[when];
			stamp.date.set('html', date?date.format("%b. %d, %Y"):"");
			if (stamp.hr) {
				stamp.hr.set('value', date?date.format("%I"):"");
				stamp.min.set('value', date?date.format("%M"):"");
			}
		}, this);
	},
	stamps: {},
	setupWideView: function(){
		var timeStampMap = {
			hr: '%I',
			'min': '%M'
		};
		timeSetMap = {
			hr: 'setHours',
			'min':'setMinutes'
		};
		var dates = this.getDates();

		if (!this.options.range && !this.options.time) return;
		this.stamps.table = new Element('table', {
			'class':'stamp'
		}).inject(this.container);
		this.stamps.tbody = new Element('tbody').inject(this.stamps.table);
		this.whens.each(function(when){
			this.stamps[when] = {};
			var s = this.stamps[when]; //saving some bytes
			s.container = new Element('tr').addClass(when+'_stamp').inject(this.stamps.tbody);
			s.label = new Element('td').inject(s.container).addClass('label');
			if (this.whens.length == 1) {
				s.label.set('html', 'date:');
			} else {
				s.label.set('html', when=="start"?"from:":"to:");
			}
			s.date = new Element('td').inject(s.container);
			if (this.options.time) {
				currentWhen = dates[when]||new Date();
				s.time = new Element('tr').inject(this.stamps.tbody);
				new Element('td').inject(s.time);
				s.timeTD = new Element('td').inject(s.time);
				s.timeInputs = new Element('div').addClass('time clearfix').inject(s.timeTD);
				s.timeSub = new Element('div', {'class':'timeSub'}).inject(s.timeTD);
				['hr','min'].each(function(t, i){
					s[t] = new Element('input', {
						type: 'text',
						'class': t,
						name: t,
						events: {
							focus: function(){
								this.select();
							},
							change: function(){
								this.selectedDates[when][timeSetMap[t]](s[t].get('value'));
								this.selectedDates[when].setAMPM(s.ampm.get('value'));
								this.updateInput();
							}.bind(this)
						}
					}).inject(s.timeInputs);
					s[t].set('value', currentWhen.format(timeStampMap[t]));
					if (i < 1) s.timeInputs.adopt(new Element('span', {'class':'seperator'}).set('html', ":"));
					new Element('span', {
						'class': t
					}).set('html', t).inject(s.timeSub);
				}, this);
				s.ampm = new Element('select').inject(s.timeInputs);
				['AM','PM'].each(function(ampm){
					var opt = new Element('option', {
						value: ampm,
						text: ampm.toLowerCase()
					}).set('html', ampm).inject(s.ampm);
					if (ampm == currentWhen.format("%p")) opt.selected = true;
				});
				s.ampm.addEvent('change', function(){
					var date = this.getDates()[when];
					var ampm = s.ampm.get('value');
					if (ampm != date.format("%p")) {
						date.setAMPM(ampm);
						this.updateInput();
					}
				}.bind(this));
			}
		}, this);
		new Element('tr').inject(this.stamps.tbody).adopt(new Element('td', {colspan: 2}).adopt(new Element('a', {
			'class':'closeSticky button',
			events: {
				click: function(){
					this.hide();
				}.bind(this)
			}
		}).set('html', 'Ok')));
	},
	show: function(){
		this.previous();
		if (this.options.time) {
			if (!this.stamps.table) this.setupWideView();
			this.updateView();
		}
	},
	startSet: false,
	onPick: function(){
		if ((this.options.range && this.selectedDates.start && this.selectedDates.end) || !this.options.range) {
			this.previous();
		}
	},
	setSelectedDates: function(e, newDate) {
		if (this.options.range) {
			if (this.selectedDates.start && this.startSet) {
				if (this.selectedDates.start.getTime() > newDate.getTime()){
					this.selectedDates.end = new Date(this.selectedDates.start);
					this.selectedDates.start = newDate;
				} else {
					this.selectedDates.end = newDate;
				}
				this.startSet = false;
			} else {
				this.selectedDates.start = newDate;
				if (this.selectedDates.end && this.selectedDates.start.getTime() > this.selectedDates.end.getTime())
					this.selectedDates.end = new Date(newDate);
				this.startSet = true;
			}
		} else {
			this.previous(e, newDate);
		}
		if (this.options.time) {
			this.whens.each(function(when){
				var hr = this.stamps[when].hr.get('value').toInt();
				if (this.stamps[when].ampm.get('value') == "PM" && hr < 12) hr += 12;
				this.selectedDates[when].setHours(hr);
				this.selectedDates[when].setMinutes(this.stamps[when]['min'].get('value')||"0");
				this.selectedDates[when].setAMPM(this.stamps[when].ampm.get('value')||"AM");
			}, this);
		}
	}
});

FormValidator.Tips = new Class({
	Extends: FormValidator.Inline,
	options: {
		pointyTipOptions: {
			point: "left",
			width: 250
		}
//		tipCaption: ''
	},
	showAdvice: function(className, field){
		var advice = this.getAdvice(field);
		if (advice && !advice.visible){
			advice.show();
			advice.position();
			advice.pointy.positionPointer();
		}
	},
	hideAdvice: function(className, field){
		var advice = this.getAdvice(field);
		if (advice && advice.visible) advice.show();
	},
	getAdvice: function(className, field) {
		var params = Array.link(arguments, {field: Element.type});
		return params.field.retrieve('PointyTip');
	},
	advices: [],
	makeAdvice: function(className, field, error, warn){
		if (!error && !warn) return;
		var advice = field.retrieve('PointyTip');
		if (!advice){
			var cssClass = warn?'warning-advice':'validation-advice';
			var msg = new Element('ul', {
				styles: {
					margin: 0,
					padding: 0,
					listStyle: 'none'
				}
			});
			var li = this.makeAdviceItem(className, field);
			if (li) msg.adopt(li);
			field.store('validationMsgs', msg);
			advice = new StickyWin.PointyTip(this.options.tipCaption, msg, $merge(this.options.pointyTipOptions, {
				showNow: false,
				relativeTo: field,
				inject: {
					target: this.element
				}
			}));
			this.advices.push(advice);
			advice.msgs = {};
			field.store('PointyTip', advice);
			document.id(advice).addClass(cssClass).set('id', 'advice-'+className+'-'+this.getFieldId(field));
		}
		field.store('advice-'+className, advice);
		this.appendAdvice(className, field, error, warn);
		advice.pointy.positionPointer();
		return advice;
	},
	validateField: function(field, force){
		var advice = this.getAdvice(field);
		var anyVis = this.advices.some(function(a){ return a.visible; });
		if (anyVis && this.options.serial) {
			if (advice && advice.visible) {
				var passed = this.parent(field, force);
				if (!field.hasClass('validation-failed')) advice.hide();
			}
			return passed;
		}
		var msgs = field.retrieve('validationMsgs');
		if (msgs) msgs.getChildren().hide();
		if (field.hasClass('validation-failed') || field.hasClass('warning')) if (advice) advice.show();
		if (this.options.serial) {
			var fields = this.element.getElements('.validation-failed, .warning');
			if (fields.length) {
				fields.each(function(f, i) {
					var adv = this.getAdvice(f);
					if (adv) adv.hide();
				}, this);
			}
		}
		return this.parent(field, force);
	},
	makeAdviceItem: function(className, field, error, warn){
		if (!error && !warn) return;
		var advice = this.getAdvice(field);
		var errorMsg = this.makeAdviceMsg(field, error, warn);
		if (advice && advice.msgs[className]) return advice.msgs[className].set('html', errorMsg);
		return new Element('li', {
			html: errorMsg,
			style: {
				display: 'none'
			}
		});
	},
	makeAdviceMsg: function(field, error, warn){
		var errorMsg = (warn)?this.warningPrefix:this.errorPrefix;
			errorMsg += (this.options.useTitles) ? field.title || error:error;
		return errorMsg;
	},
	appendAdvice: function(className, field, error, warn) {
		var advice = this.getAdvice(field);
		if (advice.msgs[className]) return advice.msgs[className].set('html', this.makeAdviceMsg(field, error, warn)).show();
		var li = this.makeAdviceItem(className, field, error, warn);
		if (!li) return;
		li.inject(field.retrieve('validationMsgs')).show();
		advice.msgs[className] = li;
	},
	insertAdvice: function(advice, field){
		//Check for error position prop
		var props = field.get('validatorProps');
		//Build advice
		if (!props.msgPos || !document.id(props.msgPos)) {
			switch (field.type.toLowerCase()) {
				case 'radio':
					var p = field.getParent().adopt(advice);
					break;
				default:
					document.id(advice).inject(document.id(field), 'after');
			};
		} else {
			document.id(props.msgPos).grab(advice);
		}
		advice.position();
	}
});

/*
Script: InputFocus.js
	Adds a focused css class to inputs when they have focus.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
var InputFocus = new Class({
	Implements: [Options, Class.Occlude, Class.ToElement],
	Binds: ['focus', 'blur'],
	options: {
		focusedClass: 'focused',
		hideOutline: false
	},
	initialize: function(input, options) {
		this.element = document.id(input);
		if (this.occlude('focuser')) return this.occluded;
		this.setOptions(options);
		this.element.addEvents({
			focus: this.focus,
			blur: this.blur
		});
	},
	focus: function(){
		if (this.options.hideOutline) {
			(function(){
				if (Browser.Engine.trident) document.id(this).set('hideFocus', true);
				else document.id(this).setStyle('outline', '0');
			}).delay(500, this);
		}
		document.id(this).addClass(this.options.focusedClass);
	},
	blur: function(){
		document.id(this).removeClass(this.options.focusedClass);
	}
});

/**
 * Autocompleter
 *
 * @version		1.1.1
 *
 * @todo: Caching, no-result handling!
 *
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */
var Autocompleter = {};

var OverlayFix = IframeShim;

Autocompleter.Base = new Class({

	Implements: [Options, Events],

	options: {
		minLength: 1,
		markQuery: true,
		width: 'inherit',
		maxChoices: 10,
//		injectChoice: null,
//		customChoices: null,
		className: 'autocompleter-choices',
		zIndex: 42,
		delay: 400,
		observerOptions: {},
		fxOptions: {},
//		onSelection: $empty,
//		onShow: $empty,
//		onHide: $empty,
//		onBlur: $empty,
//		onFocus: $empty,

		autoSubmit: false,
		overflow: false,
		overflowMargin: 25,
		selectFirst: false,
		filter: null,
		filterCase: false,
		filterSubset: false,
		forceSelect: false,
		selectMode: true,
		choicesMatch: null,

		multiple: false,
		separator: ', ',
		autoTrim: true,
		allowDupes: false,

		cache: true,
		relative: false
	},

	initialize: function(element, options) {
		this.element = document.id(element);
		this.setOptions(options);
		this.options.separatorSplit = new RegExp("\s*["+this.options.separator.trim()+"]\s*/");
		this.build();
		this.observer = new Observer(this.element, this.prefetch.bind(this), $merge({
			'delay': this.options.delay
		}, this.options.observerOptions));
		this.queryValue = null;
		if (this.options.filter) this.filter = this.options.filter.bind(this);
		var mode = this.options.selectMode;
		this.typeAhead = (mode == 'type-ahead');
		this.selectMode = (mode === true) ? 'selection' : mode;
		this.cached = [];
	},

	/**
	 * build - Initialize DOM
	 *
	 * Builds the html structure for choices and appends the events to the element.
	 * Override this function to modify the html generation.
	 */
	build: function() {
		if (document.id(this.options.customChoices)) {
			this.choices = this.options.customChoices;
		} else {
			this.choices = new Element('ul', {
				'class': this.options.className,
				'styles': {
					'zIndex': this.options.zIndex
				}
			}).inject(document.body);
			this.relative = false;
			if (this.options.relative || this.element.getOffsetParent() != document.body) {
				this.choices.inject(this.element, 'after');
				this.relative = this.element.getOffsetParent();
			}
			this.fix = new OverlayFix(this.choices);
		}
		if (!this.options.separator.test(this.options.separatorSplit)) {
			this.options.separatorSplit = this.options.separator;
		}
		this.fx = (!this.options.fxOptions) ? null : new Fx.Tween(this.choices, $merge({
			'property': 'opacity',
			'link': 'cancel',
			'duration': 200
		}, this.options.fxOptions)).addEvent('onStart', Chain.prototype.clearChain).set(0);
		this.element.setProperty('autocomplete', 'off')
			.addEvent((Browser.Engine.trident || Browser.Engine.webkit) ? 'keydown' : 'keypress', this.onCommand.bind(this))
			.addEvent('click', this.onCommand.bind(this, [false]))
			.addEvent('focus', this.toggleFocus.create({bind: this, arguments: true, delay: 100}));
			//.addEvent('blur', this.toggleFocus.create({bind: this, arguments: false, delay: 100}));
		document.addEvent('click', function(e){
			if (e.target != this.choices) this.toggleFocus(false);
		}.bind(this));
	},

	destroy: function() {
		if (this.fix) this.fix.dispose();
		this.choices = this.selected = this.choices.destroy();
	},

	toggleFocus: function(state) {
		this.focussed = state;
		if (!state) this.hideChoices(true);
		this.fireEvent((state) ? 'onFocus' : 'onBlur', [this.element]);
	},

	onCommand: function(e) {
		if (!e && this.focussed) return this.prefetch();
		if (e && e.key && !e.shift) {
			switch (e.key) {
				case 'enter':
					if (this.element.value != this.opted) return true;
					if (this.selected && this.visible) {
						this.choiceSelect(this.selected);
						return !!(this.options.autoSubmit);
					}
					break;
				case 'up': case 'down':
					if (!this.prefetch() && this.queryValue !== null) {
						var up = (e.key == 'up');
						this.choiceOver((this.selected || this.choices)[
							(this.selected) ? ((up) ? 'getPrevious' : 'getNext') : ((up) ? 'getLast' : 'getFirst')
						](this.options.choicesMatch), true);
					}
					return false;
				case 'esc': case 'tab':
					this.hideChoices(true);
					break;
			}
		}
		return true;
	},

	setSelection: function(finish) {
		var input = this.selected.inputValue, value = input;
		var start = this.queryValue.length, end = input.length;
		if (input.substr(0, start).toLowerCase() != this.queryValue.toLowerCase()) start = 0;
		if (this.options.multiple) {
			var split = this.options.separatorSplit;
			value = this.element.value;
			start += this.queryIndex;
			end += this.queryIndex;
			var old = value.substr(this.queryIndex).split(split, 1)[0];
			value = value.substr(0, this.queryIndex) + input + value.substr(this.queryIndex + old.length);
			if (finish) {
				var space = /[^\s,]+/;
				var tokens = value.split(this.options.separatorSplit).filter(space.test, space);
				if (!this.options.allowDupes) tokens = [].combine(tokens);
				var sep = this.options.separator;
				value = tokens.join(sep) + sep;
				end = value.length;
			}
		}
		this.observer.setValue(value);
		this.opted = value;
		if (finish || this.selectMode == 'pick') start = end;
		this.element.selectRange(start, end);
		this.fireEvent('onSelection', [this.element, this.selected, value, input]);
	},

	showChoices: function() {
		var match = this.options.choicesMatch, first = this.choices.getFirst(match);
		this.selected = this.selectedValue = null;
		if (this.fix) {
			var pos = this.element.getCoordinates(this.relative), width = this.options.width || 'auto';
			this.choices.setStyles({
				'left': pos.left,
				'top': pos.bottom,
				'width': (width === true || width == 'inherit') ? pos.width : width
			});
		}
		if (!first) return;
		if (!this.visible) {
			this.visible = true;
			this.choices.setStyle('display', '');
			if (this.fx) this.fx.start(1);
			this.fireEvent('onShow', [this.element, this.choices]);
		}
		if (this.options.selectFirst || this.typeAhead || first.inputValue == this.queryValue) this.choiceOver(first, this.typeAhead);
		var items = this.choices.getChildren(match), max = this.options.maxChoices;
		var styles = {'overflowY': 'hidden', 'height': ''};
		this.overflown = false;
		if (items.length > max) {
			var item = items[max - 1];
			styles.overflowY = 'scroll';
			styles.height = item.getCoordinates(this.choices).bottom;
			this.overflown = true;
		};
		this.choices.setStyles(styles);
		this.fix.show();
	},

	hideChoices: function(clear) {
		if (clear) {
			var value = this.element.value;
			if (this.options.forceSelect) value = this.opted;
			if (this.options.autoTrim) {
				value = value.split(this.options.separatorSplit).filter($arguments(0)).join(this.options.separator);
			}
			this.observer.setValue(value);
		}
		if (!this.visible) return;
		this.visible = false;
		this.observer.clear();
		var hide = function(){
			this.choices.setStyle('display', 'none');
			this.fix.hide();
		}.bind(this);
		if (this.fx) this.fx.start(0).chain(hide);
		else hide();
		this.fireEvent('onHide', [this.element, this.choices]);
	},

	prefetch: function() {
		var value = this.element.value, query = value;
		if (this.options.multiple) {
			var split = this.options.separatorSplit;
			var values = value.split(split);
			var index = this.element.getCaretPosition();
			var toIndex = value.substr(0, index).split(split);
			var last = toIndex.length - 1;
			index -= toIndex[last].length;
			query = values[last];
		}
		if (query.length < this.options.minLength) {
			this.hideChoices();
		} else {
			if (query === this.queryValue || (this.visible && query == this.selectedValue)) {
				if (this.visible) return false;
				this.showChoices();
			} else {
				this.queryValue = query;
				this.queryIndex = index;
				if (!this.fetchCached()) this.query();
			}
		}
		return true;
	},

	fetchCached: function() {
		return false;
		if (!this.options.cache
			|| !this.cached
			|| !this.cached.length
			|| this.cached.length >= this.options.maxChoices
			|| this.queryValue) return false;
		this.update(this.filter(this.cached));
		return true;
	},

	update: function(tokens) {
		this.choices.empty();
		this.cached = tokens;
		if (!tokens || !tokens.length) {
			this.hideChoices();
		} else {
			if (this.options.maxChoices < tokens.length && !this.options.overflow) tokens.length = this.options.maxChoices;
			tokens.each(this.options.injectChoice || function(token){
				var choice = new Element('li', {'html': this.markQueryValue(token)});
				choice.inputValue = token;
				this.addChoiceEvents(choice).inject(this.choices);
			}, this);
			this.showChoices();
		}
	},

	choiceOver: function(choice, selection) {
		if (!choice || choice == this.selected) return;
		if (this.selected) this.selected.removeClass('autocompleter-selected');
		this.selected = choice.addClass('autocompleter-selected');
		this.fireEvent('onSelect', [this.element, this.selected, selection]);
		if (!selection) return;
		this.selectedValue = this.selected.inputValue;
		if (this.overflown) {
			var coords = this.selected.getCoordinates(this.choices), margin = this.options.overflowMargin,
				top = this.choices.scrollTop, height = this.choices.offsetHeight, bottom = top + height;
			if (coords.top - margin < top && top) this.choices.scrollTop = Math.max(coords.top - margin, 0);
			else if (coords.bottom + margin > bottom) this.choices.scrollTop = Math.min(coords.bottom - height + margin, bottom);
		}
		if (this.selectMode) this.setSelection();
	},

	choiceSelect: function(choice) {
		if (choice) this.choiceOver(choice);
		this.setSelection(true);
		this.queryValue = false;
		this.hideChoices();
	},

	filter: function(tokens) {
		return (tokens || this.tokens).filter(function(token) {
			return this.test(token);
		}, new RegExp(((this.options.filterSubset) ? '' : '^') + this.queryValue.escapeRegExp(), (this.options.filterCase) ? '' : 'i'));
	},

	/**
	 * markQueryValue
	 *
	 * Marks the queried word in the given string with <span class="autocompleter-queried">*</span>
	 * Call this i.e. from your custom parseChoices, same for addChoiceEvents
	 *
	 * @param		{String} Text
	 * @return		{String} Text
	 */
	markQueryValue: function(str) {
		return (!this.options.markQuery || !this.queryValue) ? str
			: str.replace(new RegExp('(' + ((this.options.filterSubset) ? '' : '^') + this.queryValue.escapeRegExp() + ')', (this.options.filterCase) ? '' : 'i'), '<span class="autocompleter-queried">$1</span>');
	},

	/**
	 * addChoiceEvents
	 *
	 * Appends the needed event handlers for a choice-entry to the given element.
	 *
	 * @param		{Element} Choice entry
	 * @return		{Element} Choice entry
	 */
	addChoiceEvents: function(el) {
		return el.addEvents({
			'mouseover': this.choiceOver.bind(this, [el]),
			'click': this.choiceSelect.bind(this, [el])
		});
	}
});


/**
 * Autocompleter.Local
 *
 * @version		1.1.1
 *
 * @todo: Caching, no-result handling!
 *
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */
Autocompleter.Local = new Class({

	Extends: Autocompleter.Base,

	options: {
		minLength: 0,
		delay: 200
	},

	initialize: function(element, tokens, options) {
		this.parent(element, options);
		this.tokens = tokens;
	},

	query: function() {
		this.update(this.filter());
	}

});


/**
 * Autocompleter.Remote
 *
 * @version		1.1.1
 *
 * @todo: Caching, no-result handling!
 *
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */

Autocompleter.Ajax = {};

Autocompleter.Ajax.Base = new Class({

	Extends: Autocompleter.Base,

	options: {
		postVar: 'value',
		postData: {},
		ajaxOptions: {},
		onRequest: $empty,
		onComplete: $empty
	},

	initialize: function(element, options) {
		this.parent(element, options);
		var indicator = document.id(this.options.indicator);
		if (indicator) {
			this.addEvents({
				'onRequest': indicator.show.bind(indicator),
				'onComplete': indicator.hide.bind(indicator)
			}, true);
		}
	},

	query: function(){
		var data = $unlink(this.options.postData);
		data[this.options.postVar] = this.queryValue;
		this.fireEvent('onRequest', [this.element, this.request, data, this.queryValue]);
		this.request.send({'data': data});
	},

	/**
	 * queryResponse - abstract
	 *
	 * Inherated classes have to extend this function and use this.parent(resp)
	 *
	 * @param		{String} Response
	 */
	queryResponse: function() {
		this.fireEvent('onComplete', [this.element, this.request, this.response]);
	}

});

Autocompleter.Ajax.Json = new Class({

	Extends: Autocompleter.Ajax.Base,

	initialize: function(el, url, options) {
		this.parent(el, options);
		this.request = new Request.JSON($merge({
			'url': url,
			'link': 'cancel'
		}, this.options.ajaxOptions)).addEvent('onComplete', this.queryResponse.bind(this));
	},

	queryResponse: function(response) {
		this.parent();
		this.update(response);
	}

});

Autocompleter.Ajax.Xhtml = new Class({

	Extends: Autocompleter.Ajax.Base,

	initialize: function(el, url, options) {
		this.parent(el, options);
		this.request = new Request.HTML($merge({
			'url': url,
			'link': 'cancel',
			'update': this.choices
		}, this.options.ajaxOptions)).addEvent('onComplete', this.queryResponse.bind(this));
	},

	queryResponse: function(tree, elements) {
		this.parent();
		if (!elements || !elements.length) {
			this.hideChoices();
		} else {
			this.choices.getChildren(this.options.choicesMatch).each(this.options.injectChoice || function(choice) {
				var value = choice.innerHTML;
				choice.inputValue = value;
				this.addChoiceEvents(choice.set('html', this.markQueryValue(value)));
			}, this);
			this.showChoices();
		}

	}

});


/*
Script: Autocompleter.JSONP.js
	Implements Request.JSONP support for the Autocompleter class.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/

Autocompleter.JSONP = new Class({

	Extends: Autocompleter.Ajax.Json,

	options: {
		postVar: 'query',
		jsonpOptions: {},
//		onRequest: $empty,
//		onComplete: $empty,
//		filterResponse: $empty
		minLength: 1
	},

	initialize: function(el, url, options) {
		this.url = url;
		this.setOptions(options);
		this.parent(el, options);
	},

	query: function(){
		var data = $unlink(this.options.jsonpOptions.data||{});
		data[this.options.postVar] = this.queryValue;
		this.jsonp = new Request.JSONP($merge({url: this.url, data: data},	this.options.jsonpOptions));
		this.jsonp.addEvent('onComplete', this.queryResponse.bind(this));
		this.fireEvent('onRequest', [this.element, this.jsonp, data, this.queryValue]);
		this.jsonp.send();
	},

	queryResponse: function(response) {
		this.parent();
		var data = (this.options.filter)?this.options.filter.run([response], this):response;
		this.update(data);
	}

});
Autocompleter.JsonP = Autocompleter.JSONP;

/**
 * Observer - Observe formelements for changes
 *
 * @version		1.0rc3
 *
 * @license		MIT-style license
 * @author		Harald Kirschner <mail [at] digitarald.de>
 * @copyright	Author
 */
var Observer = new Class({

	Implements: [Options, Events],

	options: {
		periodical: false,
		delay: 1000
	},

	initialize: function(el, onFired, options){
		this.setOptions(options);
		this.addEvent('onFired', onFired);
		this.element = document.id(el) || $$(el);
		/* Clientcide change */
		this.boundChange = this.changed.bind(this);
		this.resume();
	},

	changed: function() {
		var value = this.element.get('value');
		if ($equals(this.value, value)) return;
		this.clear();
		this.value = value;
		this.timeout = this.onFired.delay(this.options.delay, this);
	},

	setValue: function(value) {
		this.value = value;
		this.element.set('value', value);
		return this.clear();
	},

	onFired: function() {
		this.fireEvent('onFired', [this.value, this.element]);
	},

	clear: function() {
		$clear(this.timeout || null);
		return this;
	},
	/* Clientcide change */
	pause: function(){
		$clear(this.timeout);
		$clear(this.timer);
		this.element.removeEvent('keyup', this.boundChange);
		return this;
	},
	resume: function(){
		this.value = this.element.get('value');
		if (this.options.periodical) this.timer = this.changed.periodical(this.options.periodical, this);
		else this.element.addEvent('keyup', this.boundChange);
		return this;
	}

});

var $equals = function(obj1, obj2) {
	return (obj1 == obj2 || JSON.encode(obj1) == JSON.encode(obj2));
};

/*
Script: AutoCompleter.Clientcide.js
	Adds Clientcide css assets to autocompleter automatically.

License:
	http://www.clientcide.com/wiki/cnet-libraries#license
*/
(function(){
	Autocompleter.Base = Class.refactor(Autocompleter.Base, {
		options: {
			baseHref: 'http://www.cnet.com/html/rb/assets/global/autocompleter/'
		},
		initialize: function(a1,a2,a3) {
			this.previous(a1,a2,a3);
			this.writeStyle();
		},
		writeStyle: function(){
			window.addEvent('domready', function(){
				if (document.id('AutocompleterCss')) return;
				new Element('link', {
					rel: 'stylesheet',
					media: 'screen',
					type: 'text/css',
					href: this.options.baseHref+'Autocompleter.css',
					id: 'AutocompleterCss'
				}).inject(document.head);
			}.bind(this));
		}
	});
})();
if (window._JSON) {
	JSON.stringify = _JSON.stringify;
	JSON.parse = _JSON.parse;
}

String.implement({
	startsWith: function(s) {
		return this.substr(0,s.length)==s;
	},
	replaceAll: function(searchValue, replaceValue, regExOptions) {
		return this.replace(new RegExp(searchValue, $pick(regExOptions,"gi")), replaceValue);
	},
	gsub: function(search, replace) {
		return this.split(search).join(replace);
	},
	urlEncode: function() {
		if (this.indexOf("%") > -1) return this;
		else return escape(this);
	},
	htmlEntitiesEncode: function() {
		var enc = this.toString();
		enc = enc.gsub("&","&amp;");
		enc = enc.gsub("<","&lt;");
		enc = enc.gsub(">","&gt;");
		return enc;
	},
	injectHTML: function(inside) {
		var container = new Element("DIV", {"html": this.toString()});
		var children = container.getChildren();
		children.each(function(child) { child.inject(inside); });
		container.dispose();
		return children;
	},
	toClipboard: function() {
		try {
			document.execCommand('Copy', this.toString());
		} catch(e) {
			try {
				netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
			} catch(e) {
				if (Browser.Engine.gecko)
					alert("Browser security settings doesn't allow this action to be taken.\n\nSet the 'signed.applets.codebase_principal_support' property in the 'about:config' page to true/1 if you want to enable this feature.");
				return this;
			}
			try {
				clip = Components.classes["@mozilla.org/widget/clipboard;1"].createInstance(Components.interfaces.nsIClipboard);
			} catch(e) {
				return this;
			}
			try {
				transf = Components.classes["@mozilla.org/widget/transferable;1"].createInstance(Components.interfaces.nsITransferable);
			} catch(e) {
				return this;
			}
			transf.addDataFlavor("text/unicode");
			suppstr = Components.classes["@mozilla.org/supports-string;1"].createInstance(Components.interfaces.nsISupportsString);
			suppstr.data = this.toString();
			transf.setTransferData("text/unicode",suppstr,this.length*2);
			try {
				clipi = Components.interfaces.nsIClipboard;
			} catch(e) {
				return this;
			}
			clip.setData(transf,null,clipi.kGlobalClipboard);
		}
		return this;
	}
});

Element.tDataRegExp = new RegExp("_\\|JS:(.*)\\|_");

Element.implement({
	searchAttachedData: function() {
		this.getElements("[title]").each( function(elem) {
			elem.storeAttachedData();
		} );
	},

	// Cerca dati json inclusi nel parametro title e ne fa lo store in "tData". I dati json devono essere racchiusi tra "_|JS:" e "|_"
	storeAttachedData: function() {
		var t = this.get("title");
		var matches = Element.tDataRegExp.exec(t);
		try {
			var data = JSON.decode(matches[1]);
			this.store("tData", data);
			this.set("title", t.gsub(matches[0],""));
		} catch(e) {
			dbug.log(e);
		}
	},

	isVisible: function(recursive) {
		if (recursive && this.getParent()) {
			var parent=this.getParent();
			var element=this;
			var result=true;

			while (parent && !element.isBody() && result) {
				var visible = ((element.getStyle('display') != 'none') && (element.getStyle('visibility') != 'hidden') && (element.getStyle('opacity') != 0));
				if (!visible) result=false;
				element=element.getParent();
				parent=element.getParent();
			}

			return result;
		} else {
			return this.getStyle('display') != 'none';
		}
	},

	inlineEdit: function(options) {
		return new InlineEdit(this, options);
	},

	hide: function() {
		var d;
		try {
			d = this.getStyle('display');
			if (d=='none') d = '';
		} catch(e){}
		this.store('originalDisplay', d||'');
		this.setStyle('display','none');
		return this;
	},

	show: function(display) {
		original = this.retrieve('originalDisplay')?this.retrieve('originalDisplay'):this.get('originalDisplay');
		this.setStyle('display',(display || original || ''));
		return this;
	},

	getCells: function() {
		if ($defined(this.cells))
			return this.cells;
		else
			return this.getElements("td");
	},

	getSiblings: function() {
		return this.getAllPrevious().extend(this.getAllNext());
	},

	toQueryString: function(){
		var queryString = [];
		this.getElements('input, select, textarea', true).each(function(el){
			if (!el.name || el.disabled || el.type == 'submit' || el.type == 'reset' || el.type == 'file') return;
			var value = el.value;
			if (el.tagName.toLowerCase() == 'select') {
				value = Element.getSelected(el).map(function(opt){
					return opt.value;
				});
			} else if ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) {
				value = el.type == 'checkbox' ? '' : null;
			}
			$splat(value).each(function(val){
				if (typeof val != 'undefined') queryString.push(el.name + '=' + encodeURIComponent(val));
			});
		});
		return queryString.join('&');
	},

	toHash: function(){
		var hash = {};
		this.getElements('input[name][type!=submit], select[name], textarea[name]').each(function(el){
			if (el.disabled) return;
			var value = (el.tagName.toLowerCase() == 'select') ? Element.getSelected(el).map(function(opt){
				return opt.value;
			}) : ((el.type == 'radio' || el.type == 'checkbox') && !el.checked) ? null : el.value;
			hash[el.name] = value;
		});
		return hash;
	},

	cloneWithEvents: function(contents, keepid, type) {
		return this.clone(contents, keepid).cloneEvents(this, type);
	},

	isBody: function() {
		return (/^(?:body|html)$/i).test(this.tagName);
	},

	fxBlindDown: function(options) {
		options = $merge({
			direction: 'auto'
		}, options);

		if (!this.fullHeight) this.fullHeight = this.getDimensions().y;

		if (options.direction == 'auto')
			options.direction = this.getHeight() == 0 ? 'down' : 'up';

		var dim;
		if (options.direction == 'down')
			dim = [0, this.fullHeight];
		else
			dim = [this.fullHeight, 0];

		if (Browser.Engine.trident) {
			this.getElements('input').each(function(e){
				e.setStyle('border','1px solid #B6B6B7');
			});
			this.getElements('textarea').each(function(e){
				e.setStyle('border','1px solid #B6B6B7');
			});
		}

		return this.setStyles({height: dim[0]+"px", overflow: 'hidden'}).show().tween('height', dim);
	},

	highlightOpacity: function() {
		var fx = this.retrieve("highlightOpacityFx");
		if (!fx) {
			fx = new Fx.Morph(this, {
				link: "cancel",
				duration:500
			});
			fx.addEvent("onChainComplete", function() {
				this.start({
					'opacity':1
				});
			}.bind(fx));
			this.store("highlightOpacityFx", fx);
		}
		fx.start({
			'opacity':0
		});
		return this;
	},
	blinkFx: function(index){
		(function(){
			if (this.hasClass('blinked')){
				this.removeClass('blinked');
			} else {
				this.addClass('blinked');
			}
			index--;
			if (index>0)
				this.blinkFx(index);
		}).delay(150,this);
	},
	getFxFadedShowHide: function() {
		var fx = this.retrieve("fxFadedShowHide");
		if (!fx) {
			fx = new Fx.Morph(this, {
				link: "cancel"
			}).addEvent("onChainComplete", function() {
				if (this.getStyle("opacity") == 0) {
					this.hide();
				} else {
					this.setStyle("height","");
				}
			}.bind(this));
			this.store("fxFadedShowHide", fx);
		}
		return fx;
	},
	fxFadedHide: function() {
		if (this.isVisible()) {
			this.store("fxFadedShowHide-Height", this.getSize().y);
			this.getFxFadedShowHide().start({
				opacity: 0,
				height: 0
			});
		}
		return this;
	},
	fxFadedShow: function() {
		if (!this.isVisible()) {
			var h = $pick( this.retrieve("fxFadedShowHide-Height"), 0 );
			this.store("fxFadedShowHide-Height", 0);
			var morph = {opacity:1};
			if (h>0)
				morph.height = h;
			this.setStyles({
				display: '',
				opacity: 0
			}).getFxFadedShowHide().start(morph);
		}
		return this;
	}
});

if (typeof(StickyWin) != 'undefined') {
	//Fix per aggiungere scrolls al posizionamento delle finestre
	StickyWin.implement({
		position: function(options){
			this.positioned = true;
			this.setOptions(options);

			//FIX
			if (this.options.relativeTo != document.body) {
				if (!this.originalOffset) this.originalOffset = this.options.offset;
				var scrolls = this.options.relativeTo.getScrolls();
				this.options.offset.x = this.originalOffset.x + scrolls.x;
				this.options.offset.y = this.originalOffset.y + scrolls.y -5; // offset di 10px inspiegabile
			}

			this.win.position({
				allowNegative: $pick(this.options.allowNegative, this.options.relativeTo != document.body),
				relativeTo: this.options.relativeTo,
				position: this.options.position,
				offset: this.options.offset,
				edge: this.options.edge
			});
			if (this.shim) this.shim.position();
			return this;
		}
	});
}
Number.format_regex = /(\d+)(\d{3})/;
Number.implement({
	format: function(precision, decimal_point, thousands_sep) {
		decimal_point = $pick(decimal_point, ".");
		thousands_sep = $pick(thousands_sep, "");

		var x = this.toFloat().round(precision).toString().split("."), x1, x2;
		x1 = x[0];
		if (precision > 0) {
			if (x.length > 1) {
				if (x[1].length < precision)
					x[1] += "0".repeat( precision-x[1].length )
				x2 = x.length > 1 ? decimal_point + x[1] : "";
			} else {
				x2 = decimal_point+"0".repeat(precision);
			}
		} else {
			x2 = "";
		}
		if (thousands_sep != "") {
			while (Number.format_regex.test(x1)) {
				x1 = x1.replace(Number.format_regex, "$1" + thousands_sep + "$2");
			}
		}
		return x1 + x2;
	},

	humanize: function(precision, options) {
		options = $merge({startUnit: "", machineK: false, unitType: ""}, options);

		precision = $pick(precision, 0);
		num = this.toFloat();

		var units = ["","K","M","G","T","P"];
		var unitX = units.indexOf(options.startUnit);
		var divisor = options.machineK ? 1024 : 1000;

		while (num>=divisor && unitX<units.length) {
			unitX++;
			num /= divisor;
		}
		return num.localized()+units[unitX]+options.unitType;
	},

	localized: function (monetary) {
		var n = "", num = this.toFloat(), sign, sign_posn, sep_by_space, cs_precedes;
		if (num>=0) {
			sign = localeconv['positive_sign'];
			sign_posn = localeconv['p_sign_posn'];
			sep_by_space = localeconv['p_sep_by_space'];
			cs_precedes = localeconv['p_cs_precedes'];
		} else {
			sign = localeconv['negative_sign'];
			sign_posn = localeconv['n_sign_posn'];
			sep_by_space = localeconv['n_sep_by_space'];
			cs_precedes = localeconv['n_cs_precedes'];
		}

		if (monetary) {
			var symbol = localeconv['currency_symbol'];
			//-â‚¬ -#- â‚¬-
			//012345678
			var a = new Array(9);

			switch(sign_posn) {
				case 1: a[3] = sign; break;
				case 2: a[5] = sign; break;
				case 3: symbol = sign+symbol; break;
				case 4: symbol += sign; break;
				default: n += " [error sign_posn="+sign_posn+"&nbsp;!]";
			}

			if (cs_precedes) {
				a[1] = symbol;
				if (sep_by_space) a[2] = " ";
			} else {
				if (sep_by_space) a[6] = " ";
				a[7] = symbol;
			}
			a[4] = Math.abs(num).format(localeconv['frac_digits'], localeconv['mon_decimal_point'], localeconv['mon_thousands_sep']);
			n = a.join("");
		} else {
			n = Math.abs(num).format(localeconv['frac_digits'], localeconv['decimal_point'], localeconv['thousands_sep']);
			switch(sign_posn) {
				case 0: n = "("+n+")"; break;
				case 2: case 4: n += sign; break;
				case 1: case 3: n = sign+n; break;
				default: n += " [error sign_posn="+sign_posn+"&nbsp;!]";
			}
		}

		return n;
	}
});

Window.implement({
	getMedia: function() {
		var el = new Element("DIV", {"class": "no_print", styles: {"height":"0","width":"0"}}).inject(this.document.documentElement);
		var media = (el.getStyle("display") == "none") ? "print" : "screen";
		el.dispose();
		return media;
	}
});

Element.Events.valuechange = {
	base: "keyup",
	condition: function(event) {
		if ($pick( event.target.retrieve("last_value"), "") != event.target.value) {
			event.target.store("last_value", event.target.value);
			return true;
		} else return false;
	}
}

if (typeof(Sortables) != 'undefined') {
	Sortables.implement({
		getClone: function(element){
			if (!this.options.clone) return new Element('div').inject(document.body);
			if ($type(this.options.clone) == 'function') return this.options.clone.call(this, event, element, this.list);
			return element.clone(true).setStyles({
				'margin': '0px',
				'position': 'absolute',
				'display': 'none',
				'width': element.getStyle('width')
			}).inject(this.list).position(element.getPosition(element.offsetParent));
		},

		serialize: function() {
			var serial = [];
			this.list.getChildren().each(function(el, i){
				serial.push( "ids[]="+el.id.replace(/\D+/,"") );
			}, this);
			return serial.join("&");
		}
	});
}

Tips.implement({
	position: function(event){
		var size = window.getSize(), scroll = window.getScroll();
		var tip = {x: this.tip.offsetWidth, y: this.tip.offsetHeight};

		var alignOffsets = {x:0,y:0};
		if ($pick(this.options.alignment, 'right') == 'left')
			alignOffsets.x = -this.tip.getSize().x;
		if ($pick(this.options.verticalAlignment, 'bottom') == 'top')
			alignOffsets.y = -this.tip.getSize().y;

		var props = {x: 'left', y: 'top'};
		for (var z in props){
			var pos = event.page[z] + this.options.offsets[z] + alignOffsets[z];
			this.tip.setStyle(props[z], pos);
		}
	}
});

if (!document.getElementsByClassName) {
	Native.implement([Document, Element], {
		getElementsByClassName: function(className) {
			return this.getElements("."+className);
		}
	});
}

// http://blog.kassens.net/outerclick-event
(function(){
	var events;
	var check = function(e){
		var target = $(e.target);
		var parents = target.getParents();
		events.each(function(item){
			var element = item.element;
			if (element != target && !parents.contains(element))
				item.fn.call(element, e);
		});
	};
	Element.Events.outerClick = {
		onAdd: function(fn){
			if(!events) {
				window.addEvent('click', check);
				events = [];
			}
			events.push({element: this, fn: fn});
		},
		onRemove: function(fn){
			events = events.filter(function(item){
				return item.element != this || item.fn != fn;
			}, this);
			if (!events.length) {
				window.removeEvent('click', check);
				events = null;
			}
		}
	};
})();


var InlineEdit = new Class({Implements: [Options, Events],
	options: {
		type: "input"
	},
	initialize: function(element,options){
		this.setOptions(options);
		if (element.get("tag") != this.options.type.toLowerCase()){
			this.element = element;
			this.oldContent = this.element.get("html");
			var content = this.oldContent.trim().replace(new RegExp("<br />", "gi"), "\n");
			this.inputBox = new Element(this.options.type, { value: content }).setStyles({
				margin: 0,
				backgroundColor: "transparent",
				//width: this.element.getSize().x,
				width: "99.5%",
				fontSize: "1em",
				borderWidth: 0
			});
			if (!this.inputBox.get("value")) this.inputBox.set("html", content);
			this.setAllStyles();
			this.element.set("html", "");
			this.inputBox.inject(this.element);
			this.inputBox.focus.delay(300, this.inputBox);
			this.inputBox.addEvent("change",this.onSave.bind(this));
			this.inputBox.addEvent("blur",this.onSave.bind(this));
			this.inputBox.addEvent("keyup",this.onKeyUp.bindWithEvent(this));
		}
	},
	onKeyUp: function(e){
		if("enter" == e.key) this.onSave();
	},
	onSave: function(){
		this.inputBox.removeEvents();
		this.newContent = this.inputBox.get("value").trim().replace(new RegExp("\n", "gi"), "<br />");
		this.element.set("html", this.newContent);
		this.fireEvent("onComplete", [this.element, this.oldContent, this.newContent]);
	},
	setAllStyles: function() {
		["text-align", "font", "font-family", "font-weight", "line-height", "letter-spacing", "color"].each(function (property) {
			if (this.element.getStyle(property)) this.inputBox.setStyle(property, this.element.getStyle(property));
		}.bind(this));
	}
});

var InlineSelect = new Class({Implements: [Options, Events],
	value: 0,

	initialize: function(options) {
		this.setOptions(options);
		if (!this.options.element || !this.options.url) return null;
		this.build();
	},

	build: function() {
		this.element = $(this.options.element).addEvent("click", this.onClick.bind(this));
		document.documentElement.addEvent("click", this.documentClick.bindWithEvent(this));
		this.request = new Request({
			url: this.options.url,
			onSuccess: this.fillOptions.bind(this),
			onFailure: function() {
				onAjaxFailure();
				this.waiter.stop();
			}.bind(this)
		});

		this.optionsContainer = new Element("DIV", {
			"class": "inlineSelect"
		}).hide().inject(this.element, "after");
		if (this.options.className)
			this.optionsContainer.addClass(this.options.className);
		this.waiter = new Waiter(this.element);
	},

	onClick: function() {
		if (this.optionsContainer.isVisible())
			this.hideOptions();
		else
			this.showOptions();
	},

	documentClick: function(e) {
		e = new Event(e);
		if (e.target != this.element && !e.target.getParents().contains(this.element))
			this.hideOptions();
	},

	showOptions: function() {
		this.optionsContainer.set("html","").show();
		this.waiter.start();
		this.request.send(this.options.requestOptions);
	},

	hideOptions: function() {
		this.optionsContainer.hide();
		this.waiter.stop();
		this.request.cancel();
	},

	fillOptions: function(response) {
		var options = JSON.decode(response);
		options.each(function(option) {
			var optionDiv = new Element("DIV", {
				"class": "option",
				"html": option.text
			}).store("value", option.value).inject(this.optionsContainer);

			optionDiv.addEvent("click", this.onOptionClick.bind(this, [optionDiv]));
		}, this);
		if (tooltips) tooltips.init(this.optionsContainer);
		this.waiter.stop();
	},

	onOptionClick: function(option) {
		this.value = option.retrieve("value");
		this.fireEvent("change", [option]);
	}
});

var InlineSelectStatic = new Class({Implements: [Options, Events],
	value: 0,

	initialize: function(options) {
		this.setOptions(options);
		if (!this.options.element) return null;
		this.build();
	},

	build: function() {
		this.element = $(this.options.element).addEvent("click", this.elementClick.bind(this));
		document.documentElement.addEvent("click", this.documentClick.bindWithEvent(this));

		this.optionsContainer = new Element("DIV", {
			"class": "inlineSelect"
		}).hide().inject(this.element, "after");
		if (this.options.className)
			this.optionsContainer.addClass(this.options.className);
	},

	elementClick: function() {
		if (this.optionsContainer.isVisible())
			this.hideOptions();
		else
			this.showOptions();
	},

	documentClick: function(e) {
		e = new Event(e);
		if (e.target != this.element && !e.target.getParents().contains(this.element))
			this.hideOptions();
	},

	showOptions: function() {
		this.optionsContainer.set("html","").show();
		this.fillOptions( this.element.retrieve("inlineSelectData") );
	},

	hideOptions: function() {
		this.optionsContainer.hide();
	},

	fillOptions: function(options) {
		options = $pick(options, []);
		options.each(function(option) {
			var optionDiv = new Element("DIV", {
				"class": "option",
				"html": option
			}).inject(this.optionsContainer);

			optionDiv.addEvent("click", this.onOptionClick.bindWithEvent(this, [optionDiv]));
		}, this);
		if (tooltips) tooltips.init(this.optionsContainer);
	},

	onOptionClick: function(e, option) {
		e = new Event(e);
		e.stop();
		this.hideOptions();
		this.value = option.get("html");
		this.fireEvent("change", [option]);
	}
});

/*FormValidator.implement({
	watchFields: function(){
		this.getFields().each(function(el){
				el.addEvent('focus', function(){
					el.addClass('validation-passed').removeClass('validation-failed');
					if ($defined(el.getParent().getElement('.validation-advice')))
						this.hideAdvice('required',el);
				}.bind(this));
				el.addEvent('blur', this.validateField.pass([el, false], this));
			if (this.options.evaluateFieldsOnChange)
				el.addEvent('change', this.validateField.pass([el, true], this));
		}, this);
	}
});*/
FormValidator.implement({
	validate: function(event){
		var result = this.getFields().map(function(field){
			return field.isVisible(true) ? this.validateField(field, true) : true;
		}, this).every(function(v){ return v;});
		this.fireEvent('formValidate', [result, this.element, event]);
		if (this.options.stopOnFailure && !result && event) event.preventDefault();
		return result;
	}
});

//dbug.enable(true);

MooTools.lang.set('it-IT', 'Date', {

	months: ['Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio', 'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre'],
	days: ['Domenica', 'LunedÃ¬', 'MartedÃ¬', 'MercoledÃ¬', 'GiovedÃ¬', 'VenerdÃ¬', 'Sabato'],
	dateOrder: ['date', 'month', 'year'],
	shortDate: '%d/%m/%Y',
	shortTime: '%H:%M',
	AM: 'AM',
	PM: 'PM',
	ordinal: $lambda(''),

	lessThanMinuteAgo: 'meno di un minuto fa',
	minuteAgo: 'circa un minuto fa',
	minutesAgo: '{delta} minuti fa',
	hourAgo: 'circa un\'ora fa',
	hoursAgo: 'circa {delta} ore fa',
	dayAgo: '1 giorno fa',
	daysAgo: '{delta} giorni fa',
	lessThanMinuteUntil: 'menu di un minuto da ora',
	minuteUntil: 'circa un minuto da ora',
	minutesUntil: '{delta} minuti da ora',
	hourUntil: 'circa un\'ora da ora',
	hoursUntil: 'circa {delta} ore da ora',
	dayUntil: '1 giorno da ora',
	daysUntil: '{delta} giorni da ora'

});
MooTools.lang.setLanguage("it-IT");

Clientcide.setAssetLocation("/images/clientcide");
/*
 * Smoothbox v20080623 by Boris Popoff (http://gueschla.com)
 * To be used with mootools 1.2
 *
 * Based on Cody Lindley's Thickbox, MIT License
 *
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 */

// on page load call TB_init
window.addEvent('domready', TB_init);

// prevent javascript error before the content has loaded
TB_WIDTH = 0;
TB_HEIGHT = 0;
var TB_doneOnce = 0;

// add smoothbox to href elements that have a class of .smoothbox
function TB_init(){
    $$("a.smoothbox").each(function(el){
        el.onclick = TB_bind
    });
}

function TB_bind(event){
    var event = new Event(event);
    // stop default behaviour
    event.preventDefault();
    // remove click border
    this.blur();
    // get caption: either title or name attribute
    var caption = this.title || this.name || "";
    // get rel attribute for image groups
    var group = this.rel || false;
    // display the box for the elements href
    TB_show(caption, this.href, group);
    this.onclick = TB_bind;
    return false;
}

// called when the user clicks on a smoothbox link
function TB_show(caption, url, rel){

    // create iframe, overlay and box if non-existent

    if (!$("TB_overlay")) {
        new Element('iframe').setProperty('id', 'TB_HideSelect').injectInside(document.body);
        $('TB_HideSelect').setOpacity(0);
        new Element('div').setProperty('id', 'TB_overlay').injectInside(document.body);
        $('TB_overlay').setOpacity(0);
        TB_overlaySize();
        new Element('div').setProperty('id', 'TB_load').injectInside(document.body);
        $('TB_load').innerHTML = "<img src='loading.gif' />";
        TB_load_position();

        $('TB_overlay').set('tween', {
            duration: 400
        });
        $('TB_overlay').tween('opacity', 0, 0.6);

    }

    if (!$("TB_load")) {
        new Element('div').setProperty('id', 'TB_load').injectInside(document.body);
        $('TB_load').innerHTML = "<img src='loading.gif' />";
        TB_load_position();
    }

    if (!$("TB_window")) {
        new Element('div').setProperty('id', 'TB_window').injectInside(document.body);
        $('TB_window').setOpacity(0);
    }

    $("TB_overlay").onclick = TB_remove;
    window.onscroll = TB_position;

    // check if a query string is involved
    var baseURL = url.match(/(.+)?/)[1] || url;

    // regex to check if a href refers to an image
    var imageURL = /\.(jpe?g|png|gif|bmp)/gi;

    // check for images
    if (baseURL.match(imageURL)) {
        var dummy = {
            caption: "",
            url: "",
            html: ""
        };

        var prev = dummy, next = dummy, imageCount = "";

        // if an image group is given
        if (rel) {
            function getInfo(image, id, label){
                return {
                    caption: image.title,
                    url: image.href,
                    html: "<span id='TB_" + id + "'>&nbsp;&nbsp;<a href='#'>" + label + "</a></span>"
                }
            }

            // find the anchors that point to the group
            var imageGroup = [];
            $$("a.smoothbox").each(function(el){
                if (el.rel == rel) {
                    imageGroup[imageGroup.length] = el;
                }
            })

            var foundSelf = false;

            // loop through the anchors, looking for ourself, saving information about previous and next image
            for (var i = 0; i < imageGroup.length; i++) {
                var image = imageGroup[i];
                var urlTypeTemp = image.href.match(imageURL);

                // look for ourself
                if (image.href == url) {
                    foundSelf = true;
                    imageCount = "Image " + (i + 1) + " of " + (imageGroup.length);
                }
                else {
                    // when we found ourself, the current is the next image
                    if (foundSelf) {
                        next = getInfo(image, "next", "Next &gt;");
                        // stop searching
                        break;
                    }
                    else {
                        // didn't find ourself yet, so this may be the one before ourself
                        prev = getInfo(image, "prev", "&lt; Prev");
                    }
                }
            }
        }

        imgPreloader = new Image();
        imgPreloader.onload = function(){
            imgPreloader.onload = null;

            // Resizing large images
            var x = window.getWidth() - 150;
            var y = window.getHeight() - 150;
            var imageWidth = imgPreloader.width;
            var imageHeight = imgPreloader.height;
            if (imageWidth > x) {
                imageHeight = imageHeight * (x / imageWidth);
                imageWidth = x;
                if (imageHeight > y) {
                    imageWidth = imageWidth * (y / imageHeight);
                    imageHeight = y;
                }
            }
            else
                if (imageHeight > y) {
                    imageWidth = imageWidth * (y / imageHeight);
                    imageHeight = y;
                    if (imageWidth > x) {
                        imageHeight = imageHeight * (x / imageWidth);
                        imageWidth = x;
                    }
                }
            // End Resizing

            // TODO don't use globals
            TB_WIDTH = imageWidth + 30;
            TB_HEIGHT = imageHeight + 60;

            // TODO empty window content instead
            $("TB_window").innerHTML += "<a href='' id='TB_ImageOff' title='Close'><img id='TB_Image' src='" + url + "' width='" + imageWidth + "' height='" + imageHeight + "' alt='" + caption + "'/></a>" + "<div id='TB_caption'>" + caption + "<div id='TB_secondLine'>" + imageCount + prev.html + next.html + "</div></div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a></div>";

            $("TB_closeWindowButton").onclick = TB_remove;

            function buildClickHandler(image){
                return function(){
                    $("TB_window").dispose();
                    new Element('div').setProperty('id', 'TB_window').injectInside(document.body);

                    TB_show(image.caption, image.url, rel);
                    return false;
                };
            }
            var goPrev = buildClickHandler(prev);
            var goNext = buildClickHandler(next);
            if ($('TB_prev')) {
                $("TB_prev").onclick = goPrev;
            }

            if ($('TB_next')) {
                $("TB_next").onclick = goNext;
            }

            document.onkeydown = function(event){
                var event = new Event(event);
                switch (event.code) {
                    case 27:
                        TB_remove();
                        break;
                    case 190:
                        if ($('TB_next')) {
                            document.onkeydown = null;
                            goNext();
                        }
                        break;
                    case 188:
                        if ($('TB_prev')) {
                            document.onkeydown = null;
                            goPrev();
                        }
                        break;
                }
            }

            // TODO don't remove loader etc., just hide and show later
            $("TB_ImageOff").onclick = TB_remove;
            TB_position();
            TB_showWindow();
        }
        imgPreloader.src = url;

    }
    else { //code to show html pages
        var queryString = url.match(/\?(.+)/)[1];
        var params = TB_parseQuery(queryString);

        TB_WIDTH = (params['width'] * 1) + 30;
        TB_HEIGHT = (params['height'] * 1) + 40;

        var ajaxContentW = TB_WIDTH - 30, ajaxContentH = TB_HEIGHT - 45;

        if (url.indexOf('TB_iframe') != -1) {
            urlNoQuery = url.split('TB_');
            $("TB_window").innerHTML += "<div id='TB_title'><div id='TB_ajaxWindowTitle'>" + caption + "</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton' title='Close'>close</a></div></div><iframe frameborder='0' hspace='0' src='" + urlNoQuery[0] + "' id='TB_iframeContent' name='TB_iframeContent' style='width:" + (ajaxContentW + 29) + "px;height:" + (ajaxContentH + 17) + "px;' onload='TB_showWindow()'> </iframe>";
        }
        else {
            $("TB_window").innerHTML += "<div id='TB_title'><div id='TB_ajaxWindowTitle'>" + caption + "</div><div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>close</a></div></div><div id='TB_ajaxContent' style='width:" + ajaxContentW + "px;height:" + ajaxContentH + "px;'></div>";
        }

        $("TB_closeWindowButton").onclick = TB_remove;

        if (url.indexOf('TB_inline') != -1) {
            $("TB_ajaxContent").innerHTML = ($(params['inlineId']).innerHTML);
            TB_position();
            TB_showWindow();
        }
        else
            if (url.indexOf('TB_iframe') != -1) {
                TB_position();
                if (frames['TB_iframeContent'] == undefined) {//be nice to safari
                    $(document).keyup(function(e){
                        var key = e.keyCode;
                        if (key == 27) {
                            TB_remove()
                        }
                    });
                    TB_showWindow();
                }
            }
            else {
                var handlerFunc = function(){
                    TB_position();
                    TB_showWindow();
                };

				new Request.HTML({
                    method: 'get',
                    update: $("TB_ajaxContent"),
                    onComplete: handlerFunc
                }).get(url);
            }
    }

    window.onresize = function(){
        TB_position();
        TB_load_position();
        TB_overlaySize();
    }

    document.onkeyup = function(event){
        var event = new Event(event);
        if (event.code == 27) { // close
            TB_remove();
        }
    }

}

//helper functions below

function TB_showWindow(){
    //$("TB_load").dispose();
    //$("TB_window").setStyles({display:"block",opacity:'0'});

    if (TB_doneOnce == 0) {
        TB_doneOnce = 1;

        $('TB_window').set('tween', {
            duration: 250,
            onComplete: function(){
                if ($('TB_load')) {
                    $('TB_load').dispose();
                }
            }
        });
        $('TB_window').tween('opacity', 0, 1);

    }
    else {
        $('TB_window').setStyle('opacity', 1);
        if ($('TB_load')) {
            $('TB_load').dispose();
        }
    }
}

function TB_remove(){
    $("TB_overlay").onclick = null;
    document.onkeyup = null;
    document.onkeydown = null;

    if ($('TB_imageOff'))
        $("TB_imageOff").onclick = null;
    if ($('TB_closeWindowButton'))
        $("TB_closeWindowButton").onclick = null;
    if ($('TB_prev')) {
        $("TB_prev").onclick = null;
    }
    if ($('TB_next')) {
        $("TB_next").onclick = null;
    }


    $('TB_window').set('tween', {
        duration: 250,
        onComplete: function(){
            $('TB_window').dispose();
        }
    });
    $('TB_window').tween('opacity', 1, 0);



    $('TB_overlay').set('tween', {
        duration: 400,
        onComplete: function(){
            $('TB_overlay').dispose();
        }
    });
    $('TB_overlay').tween('opacity', 0.6, 0);

    window.onscroll = null;
    window.onresize = null;

    $('TB_HideSelect').dispose();
    TB_init();
    TB_doneOnce = 0;
    return false;
}

function TB_position(){
    $('TB_window').set('morph', {
        duration: 75
    });
    $('TB_window').morph({
		width: TB_WIDTH + 'px',
		left: (window.getScrollLeft() + (window.getWidth() - TB_WIDTH) / 2) + 'px',
		top: (window.getScrollTop() + (window.getHeight() - TB_HEIGHT) / 2) + 'px'
	});
}

function TB_overlaySize(){
    // we have to set this to 0px before so we can reduce the size / width of the overflow onresize
    $("TB_overlay").setStyles({
        "height": '0px',
        "width": '0px'
    });
    $("TB_HideSelect").setStyles({
        "height": '0px',
        "width": '0px'
    });
    $("TB_overlay").setStyles({
        "height": window.getScrollHeight() + 'px',
        "width": window.getScrollWidth() + 'px'
    });
    $("TB_HideSelect").setStyles({
        "height": window.getScrollHeight() + 'px',
        "width": window.getScrollWidth() + 'px'
    });
}

function TB_load_position(){
    if ($("TB_load")) {
        $("TB_load").setStyles({
            left: (window.getScrollLeft() + (window.getWidth() - 56) / 2) + 'px',
            top: (window.getScrollTop() + ((window.getHeight() - 20) / 2)) + 'px',
            display: "block"
        });
    }
}

function TB_parseQuery(query){
    // return empty object
    if (!query)
        return {};
    var params = {};

    // parse query
    var pairs = query.split(/[;&]/);
    for (var i = 0; i < pairs.length; i++) {
        var pair = pairs[i].split('=');
        if (!pair || pair.length != 2)
            continue;
        // unescape both key and value, replace "+" with spaces in value
        params[unescape(pair[0])] = unescape(pair[1]).replace(/\+/g, ' ');
    }
    return params;
}
window.jsTemplates = {};
var overtext=new Array();

var AdvancedFormValidator = new Class({
	Extends: FormValidator,

	makeAdvice: function(className, field, error, warn){
		var advice = this.parent(className, field, error, warn);

		if (["text", "password"].contains(field.get("type")) || field.get("tag") == "select") {
			advice.reveal = null;
			advice.addClass("validation-overfield");
			advice.setStyle("width", field.getSize().x-2);
		}

		advice.addEvent("click", function() {
			this.resetField(field);
			field.focus();
		}.bind(this));

		return advice;
	},

	insertAdvice: function(advice, field){
		if (field.hasClass("datePicker")) {
			advice.inject( field.getNext(), 'after' );
		} else {
			this.parent(advice, field);
		}
	}
});

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}

function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}

function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

/**Link esterni, apre una nuova pagina*/
function NewPage() {
	$$('a').each(function(a){
		var href=a.get('href');
		if (( ((href.indexOf('http://')==0)||(href.indexOf('https://')==0))&&(href.indexOf('investindustrial')==-1))||(a.get( "rel" ) == "external")) {
			a.target = "_blank";
		}
	});
}
function initLoad(){
	NewPage();
	$$("input[type=text][title]").each( function(element) {
		new OverText(element);
		var label = element.getNext(".overTxtLabel");
		label.addClass(element.get("name")).set("for", element.get("name"));
		label.addEvent("click", function() { element.focus(); });
	} );
	$$("textarea[title]").each( function(element) {
		new OverText(element);
		var label = element.getNext(".overTxtLabel");
		label.addClass(element.get("name")).set("for", element.get("name"));
		label.addEvent("click", function() { element.focus(); });
	} );
}
function initElementsDom() {
	window.scroller = new Fx.Scroll(window);
	window.smoothScroll = new Fx.SmoothScroll();
	$$('.waiter').each(function(elemW){
		elemW.store("waiter", new Waiter(elemW));
	});
	$$("form").each(function(elem) {
		//Security token
		var secToken = elem.getElement(".security");
		if (secToken && secToken.get("tag")=="input")
			new Request({
				url: "/antibotkey.ajax",
				data: {name: secToken.get("name")},
				onSuccess: function(key) {
					secToken.set("value", key);
				}
			}).send();

		//Validator
		elem.store("validator", new AdvancedFormValidator(elem, {
			warningPrefix: "",
			errorPrefix: ""
		}));
		if (elem.hasClass("target-blank")) elem.target = "_blank";
		if (elem.hasClass("waiter")) elem.store("waiter", new Waiter(elem));
		elem.addEvent("submit", function(e) {
			e = new Event(e);
			if (this.retrieve("validator").validate()) {
				var waiter = this.retrieve("waiter");
				if (waiter) waiter.start();
				return true;
			} else {
				e.stop();
				return false;
			}
		}.bindWithEvent(elem));
	});
	var toolTipOptionsContacts = {
		showDelay: 300,
		hideDelay: 300,
		fixed: false,
		offsets: {'x':0,'y':-5},
		verticalAlignment: 'top',
		className: 'tooltip'
	};
	new Tips('a.contactsMapElement', toolTipOptionsContacts);
}
window.addEvent('load', initLoad);
window.addEvent('domready', initElementsDom);
/*
Table sorting script  by Joost de Valk, check it out at http://www.joostdevalk.nl/code/sortable-table/.
Based on a script from http://www.kryogenix.org/code/browser/sorttable/.
Distributed under the MIT license: http://www.kryogenix.org/code/browser/licence.html .

Copyright (c) 1997-2007 Stuart Langridge, Joost de Valk.

Version 1.5.7
*/

/* You can change these values */
var image_path = "http://www.joostdevalk.nl/code/sortable-table/";
var europeandate = true;
var alternate_row_colors = true;

/* Don't change anything below this unless you know what you're doing */
window.addEvent("load", sortables_init);

var SORT_COLUMN_INDEX;
var thead = false;

function sortables_init() {
	// Find all tables with class sortable and make them sortable
	if (!document.getElementsByTagName) return;
	tbls = document.getElementsByTagName("table");
	for (ti=0;ti<tbls.length;ti++) {
		thisTbl = tbls[ti];
		if (((' '+thisTbl.className+' ').indexOf("sortable") != -1) && (thisTbl.id)) {
			ts_makeSortable(thisTbl);
		}
	}
}

function ts_makeSortable(t) {
	if (t.rows && t.rows.length > 0) {
		if (t.tHead && t.tHead.rows.length > 0) {
			var firstRow = t.tHead.rows[t.tHead.rows.length-1];
			thead = true;
		} else {
			var firstRow = t.rows[0];
		}
	}
	if (!firstRow) return;

	// We have a first row: assume it's the header, and make its contents clickable links
	for (var i=0;i<firstRow.cells.length;i++) {
		var cell = firstRow.cells[i];
		var txt = ts_getInnerText(cell);
		var addClass='';
		if ($defined($(cell).getElement('a'))&&($(cell).getElement('a').hasClass('asc'))) addClass='asc';

		if (cell.className != "unsortable" && cell.className.indexOf("unsortable") == -1) {
			cell.innerHTML = '<a href="javascript:void(0);" class="sortheader '+addClass+'" onclick="ts_resortTable(this, '+i+');">'+txt+'</a>';
		}
	}
	if (alternate_row_colors) {
		alternate(t);
	}
}

function ts_getInnerText(el) {
	if (typeof el == "string") return el;
	if (typeof el == "undefined") { return el };
	if (el.innerText) return el.innerText;	//Not needed but it is faster
	var str = "";

	var cs = el.childNodes;
	var l = cs.length;
	for (var i = 0; i < l; i++) {
		switch (cs[i].nodeType) {
			case 1: //ELEMENT_NODE
				str += ts_getInnerText(cs[i]);
				break;
			case 3:	//TEXT_NODE
				str += cs[i].nodeValue;
				break;
		}
	}
	return str;
}

function ts_resortTable(lnk, clid) {
	lnk=$(lnk);
	lnk.getParent('table').getElements('thead a').each(function(aCycle){
		if (lnk!=aCycle) {
			aCycle.removeClass('asc');
			aCycle.removeClass('desc');
		}
	});
	var newClass='asc';
	if (lnk.hasClass('asc')) {
		lnk.removeClass('asc');
		newClass='desc';
	} else if (lnk.hasClass('desc')) lnk.removeClass('desc');

	lnk.addClass(newClass);
	var td = lnk.parentNode;
	var column = clid || td.cellIndex;
	var t = getParent(td,'TABLE');
	// Work out a type for the column
	if (t.rows.length <= 1) return;
	var itm = "";
	var i = 0;
	while (itm == "" && i < t.tBodies[0].rows.length) {
		var itm = ts_getInnerText(t.tBodies[0].rows[i].cells[column]);
		itm = trim(itm);
		if (itm.substr(0,4) == "<!--" || itm.length == 0) {
			itm = "";
		}
		i++;
	}
	if (itm == "") return;
	sortfn = ts_sort_caseinsensitive;
	if (itm.match(/^\d\d[\/\.-][a-zA-z][a-zA-Z][a-zA-Z][\/\.-]\d\d\d\d$/)) sortfn = ts_sort_date;
	if (itm.match(/^\d\d[\/\.-]\d\d[\/\.-]\d\d\d{2}?$/)) sortfn = ts_sort_date;
	if (itm.match(/^-?[Â£$â‚¬Ã›Â¢Â´]\d/)) sortfn = ts_sort_numeric;
	if (itm.match(/^-?(\d+[,\.]?)+(E[-+][\d]+)?%?$/)) sortfn = ts_sort_numeric;
	SORT_COLUMN_INDEX = column;
	var firstRow = new Array();
	var newRows = new Array();
	for (k=0;k<t.tBodies.length;k++) {
		for (i=0;i<t.tBodies[k].rows[0].length;i++) {
			firstRow[i] = t.tBodies[k].rows[0][i];
		}
	}
	for (k=0;k<t.tBodies.length;k++) {
		if (!thead) {
			// Skip the first row
			for (j=1;j<t.tBodies[k].rows.length;j++) {
				newRows[j-1] = t.tBodies[k].rows[j];
			}
		} else {
			// Do NOT skip the first row
			for (j=0;j<t.tBodies[k].rows.length;j++) {
				newRows[j] = t.tBodies[k].rows[j];
			}
		}
	}
	newRows.sort(sortfn);
	if (lnk.hasClass('desc')) {
			newRows.reverse();
	}
    // We appendChild rows that already exist to the tbody, so it moves them rather than creating new ones
    // don't do sortbottom rows
    var strip=false;
    for (i=0; i<newRows.length; i++) {
		if (strip) $(newRows[i]).addClass('strip');
		else $(newRows[i]).removeClass('strip');

		strip=!strip;
		if (!newRows[i].className || (newRows[i].className && (newRows[i].className.indexOf('sortbottom') == -1))) {
			t.tBodies[0].appendChild(newRows[i]);
		}
	}
    // do sortbottom rows only
    for (i=0; i<newRows.length; i++) {
		if (newRows[i].className && (newRows[i].className.indexOf('sortbottom') != -1))
			t.tBodies[0].appendChild(newRows[i]);
	}
}

function getParent(el, pTagName) {
	if (el == null) {
		return null;
	} else if (el.nodeType == 1 && el.tagName.toLowerCase() == pTagName.toLowerCase()) {
		return el;
	} else {
		return getParent(el.parentNode, pTagName);
	}
}

function sort_date(date) {
	// y2k notes: two digit years less than 50 are treated as 20XX, greater than 50 are treated as 19XX
	dt = "00000000";
	if (date.length == 11) {
		mtstr = date.substr(3,3);
		mtstr = mtstr.toLowerCase();
		switch(mtstr) {
			case "jan": var mt = "01"; break;
			case "feb": var mt = "02"; break;
			case "mar": var mt = "03"; break;
			case "apr": var mt = "04"; break;
			case "may": var mt = "05"; break;
			case "jun": var mt = "06"; break;
			case "jul": var mt = "07"; break;
			case "aug": var mt = "08"; break;
			case "sep": var mt = "09"; break;
			case "oct": var mt = "10"; break;
			case "nov": var mt = "11"; break;
			case "dec": var mt = "12"; break;
			// default: var mt = "00";
		}
		dt = date.substr(7,4)+mt+date.substr(0,2);
		return dt;
	} else if (date.length == 10) {
		if (europeandate == false) {
			dt = date.substr(6,4)+date.substr(0,2)+date.substr(3,2);
			return dt;
		} else {
			dt = date.substr(6,4)+date.substr(3,2)+date.substr(0,2);
			return dt;
		}
	} else if (date.length == 8) {
		yr = date.substr(6,2);
		if (parseInt(yr) < 50) {
			yr = '20'+yr;
		} else {
			yr = '19'+yr;
		}
		if (europeandate == true) {
			dt = yr+date.substr(3,2)+date.substr(0,2);
			return dt;
		} else {
			dt = yr+date.substr(0,2)+date.substr(3,2);
			return dt;
		}
	}
	return dt;
}

function ts_sort_date(a,b) {
	dt1 = sort_date(ts_getInnerText(a.cells[SORT_COLUMN_INDEX]));
	dt2 = sort_date(ts_getInnerText(b.cells[SORT_COLUMN_INDEX]));

	if (dt1==dt2) {
		return 0;
	}
	if (dt1<dt2) {
		return -1;
	}
	return 1;
}
function ts_sort_numeric(a,b) {
	var aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
	aa = clean_num(aa);
	var bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
	bb = clean_num(bb);
	return compare_numeric(aa,bb);
}
function compare_numeric(a,b) {
	var a = parseFloat(a);
	a = (isNaN(a) ? 0 : a);
	var b = parseFloat(b);
	b = (isNaN(b) ? 0 : b);
	return a - b;
}
function ts_sort_caseinsensitive(a,b) {
/*	aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]).toLowerCase();
	bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]).toLowerCase();*/
	aa = trim($(a.cells[SORT_COLUMN_INDEX]).get('text')).toLowerCase();
	bb = trim($(b.cells[SORT_COLUMN_INDEX]).get('text')).toLowerCase();
	if (aa==bb) {
		return 0;
	}
	if (aa<bb) {
		return -1;
	}
	return 1;
}
function ts_sort_default(a,b) {
	aa = ts_getInnerText(a.cells[SORT_COLUMN_INDEX]);
	bb = ts_getInnerText(b.cells[SORT_COLUMN_INDEX]);
	if (aa==bb) {
		return 0;
	}
	if (aa<bb) {
		return -1;
	}
	return 1;
}
function addEvent(elm, evType, fn, useCapture)
// addEvent and removeEvent
// cross-browser event handling for IE5+,	NS6 and Mozilla
// By Scott Andrew
{
	if (elm.addEventListener){
		elm.addEventListener(evType, fn, useCapture);
		return true;
	} else if (elm.attachEvent){
		var r = elm.attachEvent("on"+evType, fn);
		return r;
	} else {
		alert("Handler could not be removed");
	}
}
function clean_num(str) {
	str = str.replace(new RegExp(/[^-?0-9.]/g),"");
	return str;
}
function trim(s) {
	return s.replace(/^\s+|\s+$/g, "");
}
function alternate(table) {
	// Take object table and get all it's tbodies.
	var tableBodies = table.getElementsByTagName("tbody");
	// Loop through these tbodies
	for (var i = 0; i < tableBodies.length; i++) {
		// Take the tbody, and get all it's rows
		var tableRows = tableBodies[i].getElementsByTagName("tr");
		// Loop through these rows
		// Start at 1 because we want to leave the heading row untouched
		for (var j = 0; j < tableRows.length; j++) {
			// Check if j is even, and apply classes for both possible results
			if ( (j % 2) == 0  ) {
				if ( !(tableRows[j].className.indexOf('odd') == -1) ) {
					tableRows[j].className = tableRows[j].className.replace('odd', 'even');
				} else {
					if ( tableRows[j].className.indexOf('even') == -1 ) {
						tableRows[j].className += " even";
					}
				}
			} else {
				if ( !(tableRows[j].className.indexOf('even') == -1) ) {
					tableRows[j].className = tableRows[j].className.replace('even', 'odd');
				} else {
					if ( tableRows[j].className.indexOf('odd') == -1 ) {
						tableRows[j].className += " odd";
					}
				}
			}
		}
	}
}
/*
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version 1.08
 */
var Cufon=(function(){var m=function(){return m.replace.apply(null,arguments)};var x=m.DOM={ready:(function(){var C=false,E={loaded:1,complete:1};var B=[],D=function(){if(C){return}C=true;for(var F;F=B.shift();F()){}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",D,false);window.addEventListener("pageshow",D,false)}if(!window.opera&&document.readyState){(function(){E[document.readyState]?D():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll("left");D()}catch(F){setTimeout(arguments.callee,1)}})()}q(window,"load",D);return function(F){if(!arguments.length){D()}else{C?F():B.push(F)}}})(),root:function(){return document.documentElement||document.body}};var n=m.CSS={Size:function(C,B){this.value=parseFloat(C);this.unit=String(C).match(/[a-z%]*$/)[0]||"px";this.convert=function(D){return D/B*this.value};this.convertFrom=function(D){return D/this.value*B};this.toString=function(){return this.value+this.unit}},addClass:function(C,B){var D=C.className;C.className=D+(D&&" ")+B;return C},color:j(function(C){var B={};B.color=C.replace(/^rgba\((.*?),\s*([\d.]+)\)/,function(E,D,F){B.opacity=parseFloat(F);return"rgb("+D+")"});return B}),fontStretch:j(function(B){if(typeof B=="number"){return B}if(/%$/.test(B)){return parseFloat(B)/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}[B]||1}),getStyle:function(C){var B=document.defaultView;if(B&&B.getComputedStyle){return new a(B.getComputedStyle(C,null))}if(C.currentStyle){return new a(C.currentStyle)}return new a(C.style)},gradient:j(function(F){var G={id:F,type:F.match(/^-([a-z]+)-gradient\(/)[1],stops:[]},C=F.substr(F.indexOf("(")).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);for(var E=0,B=C.length,D;E<B;++E){D=C[E].split("=",2).reverse();G.stops.push([D[1]||E/(B-1),D[0]])}return G}),quotedList:j(function(E){var D=[],C=/\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g,B;while(B=C.exec(E)){D.push(B[3]||B[1])}return D}),recognizesMedia:j(function(G){var E=document.createElement("style"),D,C,B;E.type="text/css";E.media=G;try{E.appendChild(document.createTextNode("/**/"))}catch(F){}C=g("head")[0];C.insertBefore(E,C.firstChild);D=(E.sheet||E.styleSheet);B=D&&!D.disabled;C.removeChild(E);return B}),removeClass:function(D,C){var B=RegExp("(?:^|\\s+)"+C+"(?=\\s|$)","g");D.className=D.className.replace(B,"");return D},supports:function(D,C){var B=document.createElement("span").style;if(B[D]===undefined){return false}B[D]=C;return B[D]===C},textAlign:function(E,D,B,C){if(D.get("textAlign")=="right"){if(B>0){E=" "+E}}else{if(B<C-1){E+=" "}}return E},textShadow:j(function(F){if(F=="none"){return null}var E=[],G={},B,C=0;var D=/(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;while(B=D.exec(F)){if(B[0]==","){E.push(G);G={};C=0}else{if(B[1]){G.color=B[1]}else{G[["offX","offY","blur"][C++]]=B[2]}}}E.push(G);return E}),textTransform:(function(){var B={uppercase:function(C){return C.toUpperCase()},lowercase:function(C){return C.toLowerCase()},capitalize:function(C){return C.replace(/\b./g,function(D){return D.toUpperCase()})}};return function(E,D){var C=B[D.get("textTransform")];return C?C(E):E}})(),whiteSpace:(function(){var D={inline:1,"inline-block":1,"run-in":1};var C=/^\s+/,B=/\s+$/;return function(H,F,G,E){if(E){if(E.nodeName.toLowerCase()=="br"){H=H.replace(C,"")}}if(D[F.get("display")]){return H}if(!G.previousSibling){H=H.replace(C,"")}if(!G.nextSibling){H=H.replace(B,"")}return H}})()};n.ready=(function(){var B=!n.recognizesMedia("all"),E=false;var D=[],H=function(){B=true;for(var K;K=D.shift();K()){}};var I=g("link"),J=g("style");function C(K){return K.disabled||G(K.sheet,K.media||"screen")}function G(M,P){if(!n.recognizesMedia(P||"all")){return true}if(!M||M.disabled){return false}try{var Q=M.cssRules,O;if(Q){search:for(var L=0,K=Q.length;O=Q[L],L<K;++L){switch(O.type){case 2:break;case 3:if(!G(O.styleSheet,O.media.mediaText)){return false}break;default:break search}}}}catch(N){}return true}function F(){if(document.createStyleSheet){return true}var L,K;for(K=0;L=I[K];++K){if(L.rel.toLowerCase()=="stylesheet"&&!C(L)){return false}}for(K=0;L=J[K];++K){if(!C(L)){return false}}return true}x.ready(function(){if(!E){E=n.getStyle(document.body).isUsable()}if(B||(E&&F())){H()}else{setTimeout(arguments.callee,10)}});return function(K){if(B){K()}else{D.push(K)}}})();function s(D){var C=this.face=D.face,B={"\u0020":1,"\u00a0":1,"\u3000":1};this.glyphs=D.glyphs;this.w=D.w;this.baseSize=parseInt(C["units-per-em"],10);this.family=C["font-family"].toLowerCase();this.weight=C["font-weight"];this.style=C["font-style"]||"normal";this.viewBox=(function(){var F=C.bbox.split(/\s+/);var E={minX:parseInt(F[0],10),minY:parseInt(F[1],10),maxX:parseInt(F[2],10),maxY:parseInt(F[3],10)};E.width=E.maxX-E.minX;E.height=E.maxY-E.minY;E.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")};return E})();this.ascent=-parseInt(C.ascent,10);this.descent=-parseInt(C.descent,10);this.height=-this.ascent+this.descent;this.spacing=function(L,N,E){var O=this.glyphs,M,K,G,P=[],F=0,J=-1,I=-1,H;while(H=L[++J]){M=O[H]||this.missingGlyph;if(!M){continue}if(K){F-=G=K[H]||0;P[I-1]-=G}F+=P[++I]=~~(M.w||this.w)+N+(B[H]?E:0);K=M.k}P.total=F;return P}}function f(){var C={},B={oblique:"italic",italic:"oblique"};this.add=function(D){(C[D.style]||(C[D.style]={}))[D.weight]=D};this.get=function(H,I){var G=C[H]||C[B[H]]||C.normal||C.italic||C.oblique;if(!G){return null}I={normal:400,bold:700}[I]||parseInt(I,10);if(G[I]){return G[I]}var E={1:1,99:0}[I%100],K=[],F,D;if(E===undefined){E=I>400}if(I==500){I=400}for(var J in G){if(!k(G,J)){continue}J=parseInt(J,10);if(!F||J<F){F=J}if(!D||J>D){D=J}K.push(J)}if(I<F){I=F}if(I>D){I=D}K.sort(function(M,L){return(E?(M>=I&&L>=I)?M<L:M>L:(M<=I&&L<=I)?M>L:M<L)?-1:1});return G[K[0]]}}function r(){function D(F,G){if(F.contains){return F.contains(G)}return F.compareDocumentPosition(G)&16}function B(G){var F=G.relatedTarget;if(!F||D(this,F)){return}C(this,G.type=="mouseover")}function E(F){C(this,F.type=="mouseenter")}function C(F,G){setTimeout(function(){var H=d.get(F).options;m.replace(F,G?h(H,H.hover):H,true)},10)}this.attach=function(F){if(F.onmouseenter===undefined){q(F,"mouseover",B);q(F,"mouseout",B)}else{q(F,"mouseenter",E);q(F,"mouseleave",E)}}}function u(){var C=[],D={};function B(H){var E=[],G;for(var F=0;G=H[F];++F){E[F]=C[D[G]]}return E}this.add=function(F,E){D[F]=C.push(E)-1};this.repeat=function(){var E=arguments.length?B(arguments):C,F;for(var G=0;F=E[G++];){m.replace(F[0],F[1],true)}}}function A(){var D={},B=0;function C(E){return E.cufid||(E.cufid=++B)}this.get=function(E){var F=C(E);return D[F]||(D[F]={})}}function a(B){var D={},C={};this.extend=function(E){for(var F in E){if(k(E,F)){D[F]=E[F]}}return this};this.get=function(E){return D[E]!=undefined?D[E]:B[E]};this.getSize=function(F,E){return C[F]||(C[F]=new n.Size(this.get(F),E))};this.isUsable=function(){return !!B}}function q(C,B,D){if(C.addEventListener){C.addEventListener(B,D,false)}else{if(C.attachEvent){C.attachEvent("on"+B,function(){return D.call(C,window.event)})}}}function v(C,B){var D=d.get(C);if(D.options){return C}if(B.hover&&B.hoverables[C.nodeName.toLowerCase()]){b.attach(C)}D.options=B;return C}function j(B){var C={};return function(D){if(!k(C,D)){C[D]=B.apply(null,arguments)}return C[D]}}function c(F,E){var B=n.quotedList(E.get("fontFamily").toLowerCase()),D;for(var C=0;D=B[C];++C){if(i[D]){return i[D].get(E.get("fontStyle"),E.get("fontWeight"))}}return null}function g(B){return document.getElementsByTagName(B)}function k(C,B){return C.hasOwnProperty(B)}function h(){var C={},B,F;for(var E=0,D=arguments.length;B=arguments[E],E<D;++E){for(F in B){if(k(B,F)){C[F]=B[F]}}}return C}function o(E,M,C,N,F,D){var K=document.createDocumentFragment(),H;if(M===""){return K}var L=N.separate;var I=M.split(p[L]),B=(L=="words");if(B&&t){if(/^\s/.test(M)){I.unshift("")}if(/\s$/.test(M)){I.push("")}}for(var J=0,G=I.length;J<G;++J){H=z[N.engine](E,B?n.textAlign(I[J],C,J,G):I[J],C,N,F,D,J<G-1);if(H){K.appendChild(H)}}return K}function l(D,M){var C=D.nodeName.toLowerCase();if(M.ignore[C]){return}var E=!M.textless[C];var B=n.getStyle(v(D,M)).extend(M);var F=c(D,B),G,K,I,H,L,J;if(!F){return}for(G=D.firstChild;G;G=I){K=G.nodeType;I=G.nextSibling;if(E&&K==3){if(H){H.appendData(G.data);D.removeChild(G)}else{H=G}if(I){continue}}if(H){D.replaceChild(o(F,n.whiteSpace(H.data,B,H,J),B,M,G,D),H);H=null}if(K==1){if(G.firstChild){if(G.nodeName.toLowerCase()=="cufon"){z[M.engine](F,null,B,M,G,D)}else{arguments.callee(G,M)}}J=G}}}var t=" ".split(/\s+/).length==0;var d=new A();var b=new r();var y=new u();var e=false;var z={},i={},w={autoDetect:false,engine:null,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,selector:(window.Sizzle||(window.jQuery&&function(B){return jQuery(B)})||(window.dojo&&dojo.query)||(window.Ext&&Ext.query)||(window.YAHOO&&YAHOO.util&&YAHOO.util.Selector&&YAHOO.util.Selector.query)||(window.$$&&function(B){return $$(B)})||(window.$&&function(B){return $(B)})||(document.querySelectorAll&&function(B){return document.querySelectorAll(B)})||g),separate:"words",textless:{dl:1,html:1,ol:1,table:1,tbody:1,thead:1,tfoot:1,tr:1,ul:1},textShadow:"none"};var p={words:/\s/.test("\u00a0")?/[^\S\u00a0]+/:/\s+/,characters:"",none:/^/};m.now=function(){x.ready();return m};m.refresh=function(){y.repeat.apply(y,arguments);return m};m.registerEngine=function(C,B){if(!B){return m}z[C]=B;return m.set("engine",C)};m.registerFont=function(D){if(!D){return m}var B=new s(D),C=B.family;if(!i[C]){i[C]=new f()}i[C].add(B);return m.set("fontFamily",'"'+C+'"')};m.replace=function(D,C,B){C=h(w,C);if(!C.engine){return m}if(!e){n.addClass(x.root(),"cufon-active cufon-loading");n.ready(function(){n.addClass(n.removeClass(x.root(),"cufon-loading"),"cufon-ready")});e=true}if(C.hover){C.forceHitArea=true}if(C.autoDetect){delete C.fontFamily}if(typeof C.textShadow=="string"){C.textShadow=n.textShadow(C.textShadow)}if(typeof C.color=="string"&&/^-/.test(C.color)){C.textGradient=n.gradient(C.color)}else{delete C.textGradient}if(!B){y.add(D,arguments)}if(D.nodeType||typeof D=="string"){D=[D]}n.ready(function(){for(var F=0,E=D.length;F<E;++F){var G=D[F];if(typeof G=="string"){m.replace(C.selector(G),C,true)}else{l(G,C)}}});return m};m.set=function(B,C){w[B]=C;return m};return m})();Cufon.registerEngine("canvas",(function(){var b=document.createElement("canvas");if(!b||!b.getContext||!b.getContext.apply){return}b=null;var a=Cufon.CSS.supports("display","inline-block");var e=!a&&(document.compatMode=="BackCompat"||/frameset|transitional/i.test(document.doctype.publicId));var f=document.createElement("style");f.type="text/css";f.appendChild(document.createTextNode(("cufon{text-indent:0;}@media screen,projection{cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;"+(e?"":"font-size:1px;line-height:1px;")+"}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}"+(a?"cufon canvas{position:relative;}":"cufon canvas{position:absolute;}")+"}@media print{cufon{padding:0;}cufon canvas{display:none;}}").replace(/;/g,"!important;")));document.getElementsByTagName("head")[0].appendChild(f);function d(p,h){var n=0,m=0;var g=[],o=/([mrvxe])([^a-z]*)/g,k;generate:for(var j=0;k=o.exec(p);++j){var l=k[2].split(",");switch(k[1]){case"v":g[j]={m:"bezierCurveTo",a:[n+~~l[0],m+~~l[1],n+~~l[2],m+~~l[3],n+=~~l[4],m+=~~l[5]]};break;case"r":g[j]={m:"lineTo",a:[n+=~~l[0],m+=~~l[1]]};break;case"m":g[j]={m:"moveTo",a:[n=~~l[0],m=~~l[1]]};break;case"x":g[j]={m:"closePath"};break;case"e":break generate}h[g[j].m].apply(h,g[j].a)}return g}function c(m,k){for(var j=0,h=m.length;j<h;++j){var g=m[j];k[g.m].apply(k,g.a)}}return function(V,w,P,t,C,W){var k=(w===null);if(k){w=C.getAttribute("alt")}var A=V.viewBox;var m=P.getSize("fontSize",V.baseSize);var B=0,O=0,N=0,u=0;var z=t.textShadow,L=[];if(z){for(var U=z.length;U--;){var F=z[U];var K=m.convertFrom(parseFloat(F.offX));var I=m.convertFrom(parseFloat(F.offY));L[U]=[K,I];if(I<B){B=I}if(K>O){O=K}if(I>N){N=I}if(K<u){u=K}}}var Z=Cufon.CSS.textTransform(w,P).split("");var E=V.spacing(Z,~~m.convertFrom(parseFloat(P.get("letterSpacing"))||0),~~m.convertFrom(parseFloat(P.get("wordSpacing"))||0));if(!E.length){return null}var h=E.total;O+=A.width-E[E.length-1];u+=A.minX;var s,n;if(k){s=C;n=C.firstChild}else{s=document.createElement("cufon");s.className="cufon cufon-canvas";s.setAttribute("alt",w);n=document.createElement("canvas");s.appendChild(n);if(t.printable){var S=document.createElement("cufontext");S.appendChild(document.createTextNode(w));s.appendChild(S)}}var aa=s.style;var H=n.style;var j=m.convert(A.height);var Y=Math.ceil(j);var M=Y/j;var G=M*Cufon.CSS.fontStretch(P.get("fontStretch"));var J=h*G;var Q=Math.ceil(m.convert(J+O-u));var o=Math.ceil(m.convert(A.height-B+N));n.width=Q;n.height=o;H.width=Q+"px";H.height=o+"px";B+=A.minY;H.top=Math.round(m.convert(B-V.ascent))+"px";H.left=Math.round(m.convert(u))+"px";var r=Math.max(Math.ceil(m.convert(J)),0)+"px";if(a){aa.width=r;aa.height=m.convert(V.height)+"px"}else{aa.paddingLeft=r;aa.paddingBottom=(m.convert(V.height)-1)+"px"}var X=n.getContext("2d"),D=j/A.height;X.scale(D,D*M);X.translate(-u,-B);X.save();function T(){var x=V.glyphs,ab,l=-1,g=-1,y;X.scale(G,1);while(y=Z[++l]){var ab=x[Z[l]]||V.missingGlyph;if(!ab){continue}if(ab.d){X.beginPath();if(ab.code){c(ab.code,X)}else{ab.code=d("m"+ab.d,X)}X.fill()}X.translate(E[++g],0)}X.restore()}if(z){for(var U=z.length;U--;){var F=z[U];X.save();X.fillStyle=F.color;X.translate.apply(X,L[U]);T()}}var q=t.textGradient;if(q){var v=q.stops,p=X.createLinearGradient(0,A.minY,0,A.maxY);for(var U=0,R=v.length;U<R;++U){p.addColorStop.apply(p,v[U])}X.fillStyle=p}else{X.fillStyle=P.get("color")}T();return s}})());Cufon.registerEngine("vml",(function(){var e=document.namespaces;if(!e){return}e.add("cvml","urn:schemas-microsoft-com:vml");e=null;var b=document.createElement("cvml:shape");b.style.behavior="url(#default#VML)";if(!b.coordsize){return}b=null;var h=(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:'+(h?"middle":"text-bottom")+";}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}</style>").replace(/;/g,"!important;"));function c(i,j){return a(i,/(?:em|ex|%)$|^[a-z-]+$/i.test(j)?"1em":j)}function a(l,m){if(m==="0"){return 0}if(/px$/i.test(m)){return parseFloat(m)}var k=l.style.left,j=l.runtimeStyle.left;l.runtimeStyle.left=l.currentStyle.left;l.style.left=m.replace("%","em");var i=l.style.pixelLeft;l.style.left=k;l.runtimeStyle.left=j;return i}function f(l,k,j,n){var i="computed"+n,m=k[i];if(isNaN(m)){m=k.get(n);k[i]=m=(m=="normal")?0:~~j.convertFrom(a(l,m))}return m}var g={};function d(p){var q=p.id;if(!g[q]){var n=p.stops,o=document.createElement("cvml:fill"),i=[];o.type="gradient";o.angle=180;o.focus="0";o.method="sigma";o.color=n[0][1];for(var m=1,l=n.length-1;m<l;++m){i.push(n[m][0]*100+"% "+n[m][1])}o.colors=i.join(",");o.color2=n[l][1];g[q]=o}return g[q]}return function(ac,G,Y,C,K,ad,W){var n=(G===null);if(n){G=K.alt}var I=ac.viewBox;var p=Y.computedFontSize||(Y.computedFontSize=new Cufon.CSS.Size(c(ad,Y.get("fontSize"))+"px",ac.baseSize));var y,q;if(n){y=K;q=K.firstChild}else{y=document.createElement("cufon");y.className="cufon cufon-vml";y.alt=G;q=document.createElement("cufoncanvas");y.appendChild(q);if(C.printable){var Z=document.createElement("cufontext");Z.appendChild(document.createTextNode(G));y.appendChild(Z)}if(!W){y.appendChild(document.createElement("cvml:shape"))}}var ai=y.style;var R=q.style;var l=p.convert(I.height),af=Math.ceil(l);var V=af/l;var P=V*Cufon.CSS.fontStretch(Y.get("fontStretch"));var U=I.minX,T=I.minY;R.height=af;R.top=Math.round(p.convert(T-ac.ascent));R.left=Math.round(p.convert(U));ai.height=p.convert(ac.height)+"px";var F=Y.get("color");var ag=Cufon.CSS.textTransform(G,Y).split("");var L=ac.spacing(ag,f(ad,Y,p,"letterSpacing"),f(ad,Y,p,"wordSpacing"));if(!L.length){return null}var k=L.total;var x=-U+k+(I.width-L[L.length-1]);var ah=p.convert(x*P),X=Math.round(ah);var O=x+","+I.height,m;var J="r"+O+"ns";var u=C.textGradient&&d(C.textGradient);var o=ac.glyphs,S=0;var H=C.textShadow;var ab=-1,aa=0,w;while(w=ag[++ab]){var D=o[ag[ab]]||ac.missingGlyph,v;if(!D){continue}if(n){v=q.childNodes[aa];while(v.firstChild){v.removeChild(v.firstChild)}}else{v=document.createElement("cvml:shape");q.appendChild(v)}v.stroked="f";v.coordsize=O;v.coordorigin=m=(U-S)+","+T;v.path=(D.d?"m"+D.d+"xe":"")+"m"+m+J;v.fillcolor=F;if(u){v.appendChild(u.cloneNode(false))}var ae=v.style;ae.width=X;ae.height=af;if(H){var s=H[0],r=H[1];var B=Cufon.CSS.color(s.color),z;var N=document.createElement("cvml:shadow");N.on="t";N.color=B.color;N.offset=s.offX+","+s.offY;if(r){z=Cufon.CSS.color(r.color);N.type="double";N.color2=z.color;N.offset2=r.offX+","+r.offY}N.opacity=B.opacity||(z&&z.opacity)||1;v.appendChild(N)}S+=L[aa++]}var M=v.nextSibling,t,A;if(C.forceHitArea){if(!M){M=document.createElement("cvml:rect");M.stroked="f";M.className="cufon-vml-cover";t=document.createElement("cvml:fill");t.opacity=0;M.appendChild(t);q.appendChild(M)}A=M.style;A.width=X;A.height=af}else{if(M){q.removeChild(M)}}ai.width=Math.max(Math.ceil(p.convert(k*P)),0);if(h){var Q=Y.computedYAdjust;if(Q===undefined){var E=Y.get("lineHeight");if(E=="normal"){E="1em"}else{if(!isNaN(E)){E+="em"}}Y.computedYAdjust=Q=0.5*(a(ad,E)-parseFloat(ai.height))}if(Q){ai.marginTop=Math.ceil(Q)+"px";ai.marginBottom=Q+"px"}}return y}})());
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * © 1990, 2002 Adobe Systems Incorporated. All rights reserved.
 * 
 * Trademark:
 * Helvetica is a trademark of Linotype Corp. registered in the U.S. Patent and
 * Trademark Office and may be registered in certain other jurisdictions in the
 * name of Linotype Corp. or its licensee Linotype GmbH.
 * 
 * Full name:
 * HelveticaNeueLTStd-LtCn
 * 
 * Designer:
 * Linotype Staff
 * 
 * Vendor URL:
 * http://www.adobe.com/type
 * 
 * License information:
 * http://www.adobe.com/type/legal.html
 */
Cufon.registerFont({"w":66,"face":{"font-family":"Helvetica","font-weight":300,"font-stretch":"condensed","units-per-em":"360","panose-1":"2 11 4 6 2 2 2 3 2 4","ascent":"257","descent":"-103","x-height":"4","bbox":"-60 -334 360 72.9331","underline-thickness":"18","underline-position":"-18","stemh":"18","stemv":"22","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":86,"k":{"\u201c":13,"\u2018":13,"T":13,"V":13,"W":13,"Y":13,"\u00dd":13,"\u0178":13,"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13}},"!":{"d":"35,-67r-4,-190r24,0r-4,190r-16,0xm31,0r0,-37r24,0r0,37r-24,0","w":86},"\"":{"d":"26,-171r0,-86r21,0r0,86r-21,0xm80,-171r0,-86r21,0r0,86r-21,0","w":126},"#":{"d":"68,-153r-7,56r44,0r7,-56r-44,0xm1,-81r0,-16r42,0r7,-56r-40,0r0,-16r42,0r11,-82r18,0r-11,82r44,0r11,-82r18,0r-11,82r40,0r0,16r-42,0r-7,56r39,0r0,16r-41,0r-11,81r-18,0r11,-81r-44,0r-11,81r-18,0r11,-81r-40,0","w":172},"$":{"d":"79,-143r0,-92v-27,3,-41,21,-41,44v0,28,18,40,41,48xm95,-116r0,101v26,-3,44,-20,44,-51v0,-30,-20,-41,-44,-50xm79,4v-46,-3,-71,-30,-69,-81r23,0v-2,36,13,59,46,62r0,-106v-32,-9,-64,-22,-64,-68v0,-37,23,-63,64,-66r0,-25r16,0r0,25v42,3,61,27,61,69r-24,0v0,-28,-11,-46,-37,-49r0,98v33,11,67,21,67,68v0,45,-26,69,-67,73r0,30r-16,0r0,-30","w":172},"%":{"d":"39,-189v0,39,10,51,25,51v15,0,26,-12,26,-51v0,-38,-11,-50,-26,-50v-15,0,-25,12,-25,50xm66,4r110,-259r18,0r-110,259r-18,0xm170,-62v0,39,10,50,25,50v15,0,26,-11,26,-50v0,-38,-11,-50,-26,-50v-15,0,-25,12,-25,50xm19,-189v0,-52,16,-66,45,-66v29,0,46,14,46,66v0,52,-17,67,-46,67v-29,0,-45,-15,-45,-67xm150,-62v0,-52,16,-66,45,-66v29,0,46,14,46,66v0,52,-17,66,-46,66v-29,0,-45,-14,-45,-66","w":259},"&":{"d":"171,0r-23,-31v-28,57,-140,40,-140,-33v0,-36,32,-64,58,-82v-40,-40,-41,-109,23,-111v30,0,50,19,50,47v0,21,-9,41,-46,67r56,77v6,-16,9,-32,9,-48r22,0v0,22,-6,45,-18,66r33,48r-24,0xm88,-239v-45,0,-31,52,-6,81v28,-22,35,-38,35,-52v0,-17,-12,-29,-29,-29xm137,-48r-60,-84v-36,25,-46,46,-46,66v0,61,85,66,106,18","w":193},"\u2019":{"d":"32,-220r0,-37r25,0v-1,39,6,73,-27,86v-2,-23,15,-21,12,-49r-10,0","w":86,"k":{"\u2019":39,"s":20,"\u0161":20}},"(":{"d":"67,-257r16,0v-56,97,-56,226,0,323r-16,0v-66,-118,-65,-205,0,-323","w":79},")":{"d":"13,66r-16,0v56,-97,56,-226,0,-323r16,0v65,118,64,205,0,323","w":79},"*":{"d":"52,-257r16,0r0,40r38,-12r5,15r-38,12r23,32r-12,10r-24,-33r-23,33r-13,-10r23,-32r-38,-12r5,-15r38,12r0,-40","w":120},"+":{"d":"99,0r0,-82r-82,0r0,-18r82,0r0,-82r18,0r0,82r82,0r0,18r-82,0r0,82r-18,0","w":216},",":{"d":"31,0r0,-37r24,0v-1,39,7,74,-26,87v-2,-24,15,-22,12,-50r-10,0","w":86,"k":{"\u201d":13,"\u2019":13," ":13}},"-":{"d":"21,-112r78,0r0,19r-78,0r0,-19","w":119},".":{"d":"31,0r0,-37r24,0r0,37r-24,0","w":86,"k":{" ":13}},"\/":{"d":"84,-261r20,0r-88,265r-20,0","w":100},"0":{"d":"38,-125v0,82,13,111,48,111v35,0,49,-29,49,-111v0,-82,-14,-112,-49,-112v-35,0,-48,30,-48,112xm15,-125v0,-75,13,-130,71,-130v58,0,72,55,72,130v0,75,-14,129,-72,129v-58,0,-71,-54,-71,-129","w":172},"1":{"d":"83,0r0,-195r-59,0r0,-16v43,0,63,-17,64,-44r16,0r0,255r-21,0","w":172},"2":{"d":"40,-175r-23,0v1,-49,24,-80,72,-80v35,0,66,20,66,69v0,73,-109,100,-115,167r117,0r0,19r-141,0v-4,-54,44,-91,80,-121v26,-22,36,-40,36,-64v0,-34,-19,-52,-45,-52v-29,0,-46,20,-47,62","w":172},"3":{"d":"67,-123r0,-18v38,3,60,-14,60,-48v0,-30,-14,-48,-42,-48v-26,0,-45,17,-45,53r-23,0v0,-42,23,-71,68,-71v72,0,90,106,24,121v30,4,49,30,49,61v0,46,-25,77,-73,77v-44,0,-69,-24,-71,-72r23,0v0,30,15,54,48,54v26,0,50,-15,50,-58v0,-39,-27,-55,-68,-51","w":172},"4":{"d":"110,0r0,-66r-98,0r0,-21r98,-168r21,0r0,170r30,0r0,19r-30,0r0,66r-21,0xm31,-85r79,0r-1,-133","w":172},"5":{"d":"35,-251r111,0r0,20r-94,0r-11,90v39,-52,117,-25,117,58v0,51,-26,87,-76,87v-40,0,-67,-24,-67,-69r23,0v0,29,16,51,47,51v31,0,50,-25,50,-73v0,-61,-73,-86,-94,-33r-21,0","w":172},"6":{"d":"154,-195r-23,0v-1,-25,-16,-42,-41,-42v-35,-1,-52,33,-53,117v23,-73,122,-44,122,37v0,48,-22,87,-71,87v-58,0,-74,-42,-74,-122v0,-84,16,-137,77,-137v40,0,62,25,63,60xm41,-79v0,33,13,65,48,65v35,0,47,-32,47,-65v0,-33,-12,-65,-47,-65v-35,0,-48,32,-48,65","w":172},"7":{"d":"15,-231r0,-20r143,0r0,20v-55,67,-86,162,-91,231r-25,0v4,-70,44,-170,94,-231r-121,0","w":172},"8":{"d":"38,-70v0,31,16,56,48,56v32,0,49,-25,49,-56v0,-31,-17,-57,-49,-57v-32,0,-48,26,-48,57xm86,4v-76,0,-100,-127,-25,-139v-23,-8,-39,-32,-39,-57v0,-42,27,-63,64,-63v68,0,89,102,26,119v29,6,46,32,46,64v0,48,-29,76,-72,76xm45,-191v0,27,14,46,41,46v28,0,41,-19,41,-46v0,-27,-13,-46,-41,-46v-27,0,-41,19,-41,46","w":172},"9":{"d":"19,-55r23,0v1,25,15,41,40,41v34,0,55,-36,53,-116v-23,72,-121,42,-121,-38v0,-48,22,-87,71,-87v58,0,74,43,74,123v0,84,-17,136,-78,136v-40,0,-61,-24,-62,-59xm37,-172v0,33,12,65,47,65v35,0,48,-32,48,-65v0,-33,-13,-65,-48,-65v-35,0,-47,32,-47,65","w":172},":":{"d":"31,-144r0,-36r24,0r0,36r-24,0xm31,0r0,-37r24,0r0,37r-24,0","w":86,"k":{" ":13}},";":{"d":"31,0r0,-37r24,0v-1,39,7,74,-26,87v-2,-24,15,-22,12,-50r-10,0xm31,-144r0,-36r24,0r0,36r-24,0","w":86},"<":{"d":"17,-81r0,-20r182,-84r0,19r-160,75r160,74r0,20","w":216},"=":{"d":"17,-117r0,-18r182,0r0,18r-182,0xm17,-47r0,-18r182,0r0,18r-182,0","w":216},">":{"d":"17,3r0,-20r160,-74r-160,-75r0,-19r182,84r0,20","w":216},"?":{"d":"82,-67r-22,0v-12,-63,57,-79,58,-132v0,-26,-16,-44,-40,-44v-31,0,-46,21,-46,60r-23,0v0,-45,21,-78,67,-78v65,-1,86,75,42,119v-19,19,-41,37,-36,75xm59,0r0,-37r25,0r0,37r-25,0","w":153},"@":{"d":"87,-104v0,22,9,37,31,37v39,0,67,-54,67,-87v0,-23,-9,-35,-31,-35v-39,0,-67,51,-67,85xm196,-177v5,-6,6,-17,10,-24r20,0r-41,127v0,5,4,9,10,9v32,0,64,-50,64,-87v0,-57,-52,-94,-108,-94v-71,0,-122,55,-122,117v0,65,54,117,122,117v39,0,80,-18,99,-49r22,0v-24,40,-72,65,-121,65v-80,0,-140,-60,-140,-133v0,-74,63,-132,140,-132v70,0,126,46,126,110v0,55,-46,102,-85,102v-15,0,-23,-9,-26,-24v-31,39,-99,31,-98,-29v0,-50,37,-105,88,-105v17,0,32,8,40,30","w":288},"A":{"d":"50,-94r80,0r-40,-145xm0,0r76,-257r28,0r76,257r-24,0r-21,-75r-90,0r-21,75r-24,0","w":180},"B":{"d":"43,-238r0,94v49,3,94,-3,94,-47v0,-50,-45,-48,-94,-47xm43,-125r0,106v54,3,102,-1,102,-53v0,-52,-48,-56,-102,-53xm20,0r0,-257r71,0v83,-7,90,101,30,120v30,9,47,30,47,65v0,45,-28,72,-77,72r-71,0","w":180},"C":{"d":"153,-87r23,0v-3,59,-30,91,-76,91v-53,0,-82,-41,-82,-133v0,-92,29,-132,82,-132v52,0,74,37,74,79r-23,0v0,-35,-18,-60,-51,-60v-37,0,-59,30,-59,113v0,83,22,114,59,114v32,0,50,-28,53,-72","w":186},"D":{"d":"20,0r0,-257r62,0v75,0,93,44,93,128v0,84,-18,129,-93,129r-62,0xm43,-238r0,219v80,4,109,-6,109,-109v0,-103,-28,-115,-109,-110","w":193},"E":{"d":"20,0r0,-257r128,0r0,19r-105,0r0,94r98,0r0,19r-98,0r0,106r108,0r0,19r-131,0","w":159},"F":{"d":"20,0r0,-257r128,0r0,19r-105,0r0,94r98,0r0,19r-98,0r0,125r-23,0","w":153,"k":{"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13,",":40,".":40}},"G":{"d":"154,-112r-61,0r0,-19r82,0r0,131r-18,0r0,-42v-8,28,-31,46,-57,46v-53,0,-82,-41,-82,-133v0,-92,29,-132,82,-132v49,0,71,32,74,76r-23,0v0,-31,-17,-57,-51,-57v-37,0,-59,30,-59,113v0,83,22,114,59,114v37,0,55,-37,54,-97","w":193},"H":{"d":"144,0r0,-128r-101,0r0,128r-23,0r0,-257r23,0r0,109r101,0r0,-109r23,0r0,257r-23,0","w":186},"I":{"d":"22,0r0,-257r23,0r0,257r-23,0"},"J":{"d":"65,4v-40,0,-61,-26,-58,-79r23,0v-1,36,7,60,34,60v25,0,39,-11,39,-52r0,-190r23,0r0,193v0,44,-20,68,-61,68","w":146},"K":{"d":"20,0r0,-257r23,0r1,135r98,-135r25,0r-79,107r87,150r-24,0r-77,-130r-31,40r0,90r-23,0","w":172},"L":{"d":"20,0r0,-257r23,0r0,238r107,0r0,19r-130,0","w":153,"k":{"T":27,"V":27,"W":27,"y":13,"\u00fd":13,"\u00ff":13,"Y":33,"\u00dd":33,"\u0178":33,"\u201d":33,"\u2019":33}},"M":{"d":"22,0r0,-257r40,0r63,228r62,-228r38,0r0,257r-23,0r-1,-235r-67,235r-21,0r-68,-235r0,235r-23,0","w":246},"N":{"d":"20,0r0,-257r31,0r99,224r0,-224r23,0r0,257r-31,0r-99,-224r0,224r-23,0","w":193},"O":{"d":"18,-129v0,-92,29,-132,82,-132v53,0,82,40,82,132v0,92,-29,133,-82,133v-53,0,-82,-41,-82,-133xm41,-129v0,83,22,114,59,114v37,0,59,-31,59,-114v0,-83,-22,-113,-59,-113v-37,0,-59,30,-59,113","w":200},"P":{"d":"43,-238r0,107v51,1,93,3,94,-53v1,-55,-41,-56,-94,-54xm20,0r0,-257r70,0v50,0,70,29,70,73v0,40,-19,72,-78,72r-39,0r0,112r-23,0","w":172,"k":{"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13,",":46,".":46}},"Q":{"d":"172,14r-25,-26v-70,43,-129,-1,-129,-117v0,-92,29,-132,82,-132v53,0,82,40,82,132v0,48,-8,83,-23,104r26,25xm132,-27r-29,-28r13,-13r28,27v10,-18,15,-48,15,-88v0,-83,-22,-113,-59,-113v-37,0,-59,30,-59,113v-1,101,36,134,91,102","w":200},"R":{"d":"20,0r0,-257r77,0v80,-8,89,117,20,130v61,-3,32,88,55,127r-27,0v-8,-14,-7,-38,-7,-58v0,-65,-38,-60,-95,-59r0,117r-23,0xm43,-238r0,101v51,3,97,-1,97,-50v0,-48,-45,-55,-97,-51","w":180,"k":{"T":6,"U":-2,"\u00da":-2,"\u00db":-2,"\u00dc":-2,"\u00d9":-2,"Y":6,"\u00dd":6,"\u0178":6}},"S":{"d":"156,-191r-23,0v0,-32,-15,-51,-46,-51v-31,0,-49,20,-49,46v0,77,125,35,125,125v0,50,-31,75,-78,75v-51,0,-77,-29,-75,-84r23,0v-2,39,13,65,51,65v32,0,56,-16,56,-52v0,-76,-125,-33,-125,-126v0,-40,26,-68,71,-68v48,0,70,24,70,70","w":172},"T":{"d":"68,0r0,-238r-66,0r0,-19r156,0r0,19r-67,0r0,238r-23,0","w":159,"k":{"\u00fc":27,"\u00f2":27,"\u00f6":27,"\u00ec":6,"\u00ee":6,"\u00ed":6,"\u00e8":27,"\u00eb":27,"\u00ea":27,"\u00e3":27,"\u00e5":27,"\u00e0":27,"\u00e4":27,"\u00e2":27,"w":27,"y":20,"\u00fd":20,"\u00ff":20,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":33,".":33,"-":20,"a":27,"\u00e6":27,"\u00e1":27,"e":27,"\u00e9":27,"i":6,"\u00ef":6,"o":27,"\u00f8":27,"\u0153":27,"\u00f3":27,"\u00f4":27,"\u00f5":27,"r":27,"u":27,"\u00fa":27,"\u00fb":27,"\u00f9":27,":":27,";":27}},"U":{"d":"17,-72r0,-185r23,0r0,185v0,39,16,57,50,57v34,0,50,-18,50,-57r0,-185r23,0r0,185v0,54,-26,76,-73,76v-47,0,-73,-22,-73,-76","w":180},"V":{"d":"69,0r-68,-257r25,0r58,233r57,-233r24,0r-67,257r-29,0","w":166,"k":{"\u00f6":6,"\u00f4":6,"\u00e8":6,"\u00eb":6,"\u00ea":6,"\u00e3":6,"\u00e5":6,"\u00e0":6,"\u00e4":6,"\u00e2":6,"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13,",":33,".":33,"-":6,"a":6,"\u00e6":6,"\u00e1":6,"e":6,"\u00e9":6,"o":6,"\u00f8":6,"\u0153":6,"\u00f3":6,"\u00f2":6,"\u00f5":6,"u":6,"\u00fa":6,"\u00fb":6,"\u00fc":6,"\u00f9":6,":":6,";":6}},"W":{"d":"58,0r-54,-257r23,0r46,226r44,-226r26,0r45,226r45,-226r23,0r-54,257r-29,0r-43,-226r-43,226r-29,0","w":259,"k":{"\u00f6":6,"\u00ea":6,"\u00e4":6,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,",":27,".":27,"-":6,"a":6,"\u00e6":6,"\u00e1":6,"\u00e2":6,"\u00e0":6,"\u00e5":6,"\u00e3":6,"e":6,"\u00e9":6,"\u00eb":6,"\u00e8":6,"o":6,"\u00f8":6,"\u0153":6,"\u00f3":6,"\u00f4":6,"\u00f2":6,"\u00f5":6}},"X":{"d":"142,0r-60,-111r-59,111r-23,0r70,-131r-66,-126r25,0r55,104r55,-104r23,0r-66,126r71,131r-25,0","w":166},"Y":{"d":"68,0r0,-103r-69,-154r24,0r57,128r56,-128r25,0r-70,154r0,103r-23,0","w":159,"k":{"\u00fc":13,"\u00f6":20,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":40,".":40,"-":27,"a":20,"\u00e6":20,"\u00e1":20,"\u00e2":20,"\u00e4":20,"\u00e0":20,"\u00e5":20,"\u00e3":20,"e":20,"\u00e9":20,"\u00ea":20,"\u00eb":20,"\u00e8":20,"i":6,"\u00ed":6,"\u00ee":6,"\u00ef":6,"\u00ec":6,"o":20,"\u00f8":20,"\u0153":20,"\u00f3":20,"\u00f4":20,"\u00f2":20,"\u00f5":20,"u":13,"\u00fa":13,"\u00fb":13,"\u00f9":13,":":13,";":13}},"Z":{"d":"8,0r0,-22r125,-216r-118,0r0,-19r142,0r0,22r-124,216r125,0r0,19r-150,0","w":166},"[":{"d":"30,66r0,-323r57,0r0,18r-36,0r0,287r36,0r0,18r-57,0","w":86},"\\":{"d":"-4,-261r20,0r88,265r-20,0","w":100},"]":{"d":"0,66r0,-18r35,0r0,-287r-35,0r0,-18r57,0r0,323r-57,0","w":86},"^":{"d":"181,-87r-73,-142r-73,142r-19,0r83,-164r18,0r83,164r-19,0","w":216},"_":{"d":"0,45r0,-18r180,0r0,18r-180,0","w":180},"\u2018":{"d":"30,-171v1,-39,-6,-73,27,-86v2,23,-16,22,-13,50r10,0r0,36r-24,0","w":86,"k":{"\u2018":39}},"a":{"d":"39,-134r-22,0v0,-39,19,-61,59,-61v84,0,54,94,54,163v0,14,5,17,17,16r0,16v-21,6,-41,0,-38,-28v-9,25,-29,32,-50,32v-61,0,-65,-96,-10,-107v24,-12,59,0,59,-41v0,-24,-14,-33,-33,-33v-26,0,-36,15,-36,43xm64,-14v40,0,48,-47,44,-94v-18,22,-74,12,-74,57v0,22,11,37,30,37","w":153},"b":{"d":"19,0r0,-257r21,0r1,95v5,-20,21,-33,45,-33v42,0,61,33,61,99v0,66,-19,100,-61,100v-24,1,-40,-16,-48,-36r0,32r-19,0xm40,-96v0,71,20,82,42,82v22,0,42,-11,42,-82v0,-71,-20,-81,-42,-81v-22,0,-42,10,-42,81","w":159},"c":{"d":"114,-63r22,0v-3,41,-26,67,-61,67v-40,0,-64,-28,-64,-100v0,-66,24,-99,66,-99v36,0,57,22,59,61r-22,0v-3,-30,-14,-43,-37,-43v-23,0,-43,14,-43,82v0,72,21,81,41,81v22,0,35,-16,39,-49","w":146},"d":{"d":"122,0v-1,-10,2,-24,-1,-32v-6,22,-24,36,-47,36v-42,0,-61,-34,-61,-100v0,-66,19,-99,61,-99v25,-1,39,15,46,33r0,-95r21,0r0,257r-19,0xm36,-96v0,71,20,82,42,82v22,0,42,-11,42,-82v0,-71,-20,-81,-42,-81v-22,0,-42,10,-42,81","w":159},"e":{"d":"117,-63r22,0v-3,41,-26,67,-62,67v-40,0,-64,-28,-64,-100v0,-66,24,-99,66,-99v44,0,63,35,61,100r-104,0v-2,53,18,81,41,81v23,0,36,-16,40,-49xm36,-113r81,0v-1,-48,-13,-64,-40,-64v-27,0,-40,16,-41,64","w":153},"f":{"d":"29,0r0,-173r-26,0r0,-18r26,0v-4,-43,3,-76,55,-68r0,18v-30,-9,-37,17,-34,50r34,0r0,18r-34,0r0,173r-21,0","w":86,"k":{"\u201d":-6,"\u2019":-6}},"g":{"d":"119,-162v3,-7,0,-20,1,-29r19,0r0,177v0,53,-20,80,-63,80v-37,0,-57,-20,-57,-47r22,0v0,18,17,29,36,29v37,0,43,-40,40,-82v-7,23,-25,34,-45,34v-30,0,-59,-20,-59,-96v0,-66,19,-99,61,-99v21,0,38,11,45,33xm36,-98v0,61,15,80,41,80v26,0,40,-19,40,-80v0,-61,-14,-79,-40,-79v-26,0,-41,18,-41,79","w":159},"h":{"d":"21,0r0,-257r21,0r1,92v5,-19,24,-30,47,-30v29,0,49,15,49,51r0,144r-22,0r0,-138v0,-26,-10,-39,-32,-39v-67,2,-36,113,-43,177r-21,0","w":159},"i":{"d":"22,0r0,-191r22,0r0,191r-22,0xm22,-220r0,-37r22,0r0,37r-22,0"},"j":{"d":"22,15r0,-206r22,0r0,213v-1,38,-23,47,-53,43r0,-18v20,3,31,-1,31,-32xm22,-220r0,-37r22,0r0,37r-22,0"},"k":{"d":"19,0r0,-257r21,0r1,161r74,-95r27,0r-58,71r68,120r-26,0r-57,-101r-29,34r0,67r-21,0","w":146},"l":{"d":"22,0r0,-257r22,0r0,257r-22,0"},"m":{"d":"22,0r0,-191r20,0r0,26v16,-42,83,-38,90,3v9,-21,24,-33,48,-33v27,0,45,15,45,49r0,146r-22,0r0,-143v0,-23,-11,-34,-30,-34v-62,0,-33,115,-39,177r-21,0r0,-143v0,-23,-11,-34,-30,-34v-62,0,-33,115,-39,177r-22,0","w":246},"n":{"d":"21,0r0,-191r19,0v1,8,-2,20,1,26v22,-45,98,-42,98,21r0,144r-22,0r0,-138v0,-26,-10,-39,-32,-39v-67,2,-36,113,-43,177r-21,0","w":159},"o":{"d":"11,-96v0,-66,24,-99,66,-99v42,0,66,33,66,99v0,67,-24,100,-66,100v-42,0,-66,-33,-66,-100xm34,-96v0,61,19,82,43,82v24,0,43,-21,43,-82v0,-61,-19,-81,-43,-81v-24,0,-43,20,-43,81","w":153},"p":{"d":"19,63r0,-254r19,0v1,8,-2,21,1,27v7,-18,23,-31,47,-31v42,0,61,34,61,100v0,66,-19,99,-61,99v-25,1,-39,-15,-46,-33r0,92r-21,0xm83,-177v-37,0,-43,33,-43,82v0,71,20,81,42,81v22,0,42,-10,42,-81v0,-69,-20,-82,-41,-82","w":159},"q":{"d":"120,63r-1,-92v-5,20,-21,33,-45,33v-42,0,-61,-33,-61,-99v0,-66,19,-100,61,-100v25,-1,39,15,48,31r0,-27r19,0r0,254r-21,0xm120,-95v-1,-50,-6,-82,-43,-82v-21,0,-41,13,-41,82v0,71,20,81,42,81v22,0,42,-10,42,-81","w":159},"r":{"d":"21,0r0,-191r21,0v1,9,-2,23,1,30v9,-23,29,-37,56,-33r0,21v-32,-5,-57,12,-57,53r0,120r-21,0","w":100,"k":{"v":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,",":27,".":27,"-":13}},"s":{"d":"107,-48v0,-49,-93,-39,-93,-92v0,-39,25,-55,57,-55v38,0,54,20,53,58r-22,0v1,-27,-9,-41,-31,-40v-43,0,-49,52,-9,64v29,10,67,26,67,60v0,33,-19,57,-59,57v-41,1,-61,-19,-59,-65r22,0v-1,30,10,48,36,47v23,0,38,-13,38,-34","w":140},"t":{"d":"29,-31r0,-142r-26,0r0,-18r26,0r0,-53r21,0r0,53r34,0r0,18r-34,0r0,137v-1,20,17,22,34,18r0,18v-27,5,-55,1,-55,-31","w":86},"u":{"d":"21,-47r0,-144r21,0r0,134v0,31,11,43,34,43v64,0,35,-114,41,-177r22,0r0,191r-19,0v-1,-8,2,-21,-1,-27v-22,46,-98,43,-98,-20","w":159},"v":{"d":"56,0r-53,-191r23,0r43,167r39,-167r23,0r-51,191r-24,0","w":133,"k":{",":20,".":20}},"w":{"d":"46,0r-42,-191r23,0r33,169r34,-169r27,0r33,169r32,-169r24,0r-43,191r-26,0r-35,-170r-34,170r-26,0","w":213,"k":{",":13,".":13}},"x":{"d":"107,0r-40,-82r-40,82r-25,0r52,-99r-50,-92r25,0r38,75r37,-75r25,0r-49,92r51,99r-24,0","w":133},"y":{"d":"58,2r-55,-193r23,0r43,165r39,-165r23,0r-56,206v-12,43,-25,50,-65,48r0,-18v32,7,41,-17,48,-43","w":133,"k":{",":20,".":20}},"z":{"d":"6,0r0,-18r91,-155r-86,0r0,-18r109,0r0,18r-90,155r90,0r0,18r-114,0","w":126},"{":{"d":"12,-104v56,-5,-30,-173,78,-153r0,18v-22,0,-36,-4,-36,24v-1,43,7,116,-24,120v32,2,24,78,24,119v0,28,14,24,36,24r0,18v-37,4,-57,-9,-57,-43v0,-34,10,-114,-21,-109r0,-18","w":86},"|":{"d":"31,4r0,-265r18,0r0,265r-18,0","w":79},"}":{"d":"75,-86v-56,5,29,172,-78,152r0,-18v22,0,36,4,35,-24v0,-43,-7,-116,25,-120v-33,-2,-25,-78,-25,-119v0,-28,-13,-24,-35,-24r0,-18v36,-3,57,10,57,43v0,35,-10,114,21,110r0,18","w":86},"~":{"d":"70,-112v14,-4,70,26,77,24v12,0,20,-8,31,-26r13,13v-15,21,-26,31,-45,31v-16,4,-61,-30,-78,-24v-16,0,-24,13,-30,26r-13,-13v8,-15,21,-31,45,-31","w":216},"\u00a1":{"d":"31,62r4,-190r16,0r4,190r-24,0xm31,-158r0,-37r24,0r0,37r-24,0","w":86},"\u00a2":{"d":"84,-14r0,-163v-21,3,-37,20,-37,82v0,67,18,80,37,81xm84,34r0,-30v-38,-2,-60,-31,-60,-100v0,-63,22,-96,60,-99r0,-30r10,0r0,30v34,2,53,24,55,61r-22,0v-2,-27,-12,-41,-33,-43r0,163v18,-4,30,-19,33,-49r22,0v-3,38,-23,63,-55,67r0,30r-10,0","w":172},"\u00a3":{"d":"33,-19v25,-17,54,4,80,4v15,0,28,-8,43,-18r10,16v-26,30,-76,18,-113,8v-15,0,-29,8,-35,11r-11,-17v35,-26,57,-59,38,-102r-36,0r0,-16r30,0v-8,-16,-23,-36,-22,-58v0,-41,34,-64,73,-64v44,0,70,30,70,74r-22,0v7,-69,-97,-74,-98,-12v0,18,14,45,23,60r54,0r0,16r-48,0v17,41,-3,69,-36,98","w":172},"\u2044":{"d":"-60,11r162,-272r18,0r-162,272r-18,0","w":60},"\u00a5":{"d":"75,0r0,-63r-51,0r0,-15r51,0v0,-12,1,-25,-4,-32r-47,0r0,-16r40,0r-59,-125r25,0r56,124r57,-124r24,0r-58,125r39,0r0,16r-46,0v-5,7,-4,20,-4,32r50,0r0,15r-50,0r0,63r-23,0","w":172},"\u0192":{"d":"40,-143r3,-16r38,0r9,-47v14,-52,38,-53,75,-50r-4,18v-32,-3,-41,-2,-53,52r-5,27r40,0r-3,16r-40,0r-27,138v-11,59,-29,74,-78,66r4,-18v34,5,42,2,54,-56r25,-130r-38,0","w":172},"\u00a7":{"d":"146,-208r-22,0v0,-22,-15,-35,-37,-35v-44,0,-51,48,-9,66v28,21,83,43,83,84v0,22,-15,41,-34,50v38,30,22,100,-38,97v-40,-2,-65,-25,-63,-62r22,0v0,26,12,44,40,44v47,0,49,-56,7,-74v-28,-21,-82,-43,-82,-83v0,-21,18,-42,37,-50v-44,-27,-18,-90,38,-90v37,0,58,22,58,53xm139,-94v0,-34,-53,-48,-76,-67v-41,24,-37,53,1,77r48,31v18,-9,27,-22,27,-41","w":173},"\u00a4":{"d":"21,-46r-13,-13r17,-17v-24,-28,-23,-71,0,-99r-17,-17r13,-12r16,16v26,-21,73,-21,99,1r17,-17r12,12r-17,17v23,25,23,74,1,99r16,17r-12,13r-17,-18v-27,23,-73,23,-99,1xm27,-125v0,35,28,61,59,61v31,0,60,-26,60,-61v0,-35,-29,-61,-60,-61v-31,0,-59,26,-59,61","w":172},"'":{"d":"32,-171r0,-86r22,0r0,86r-22,0","w":86},"\u201c":{"d":"74,-171v1,-38,-7,-73,26,-86v2,23,-15,22,-12,50r10,0r0,36r-24,0xm26,-171v1,-39,-6,-73,27,-86v2,23,-16,22,-13,50r11,0r0,36r-25,0","w":126},"\u00ab":{"d":"68,-91r0,-22r45,-50r0,24r-32,37r32,36r0,25xm21,-91r0,-22r45,-50r0,24r-33,37r33,36r0,25","w":133},"\u2039":{"d":"21,-91r0,-22r45,-50r0,24r-32,37r32,36r0,25","w":86},"\u203a":{"d":"21,-41r0,-25r32,-36r-32,-37r0,-24r45,50r0,22","w":86},"\ufb01":{"d":"109,0r0,-191r22,0r0,191r-22,0xm109,-220r0,-37r22,0r0,37r-22,0xm29,0r0,-173r-26,0r0,-18r26,0v-4,-43,3,-76,55,-68r0,18v-30,-9,-37,17,-34,50r34,0r0,18r-34,0r0,173r-21,0","w":153},"\ufb02":{"d":"109,0r0,-257r22,0r0,257r-22,0xm29,0r0,-173r-26,0r0,-18r26,0v-4,-43,3,-76,55,-68r0,18v-30,-9,-37,17,-34,50r34,0r0,18r-34,0r0,173r-21,0","w":153},"\u2013":{"d":"0,-112r180,0r0,19r-180,0r0,-19","w":180},"\u2020":{"d":"76,-176r0,-81r21,0r0,81r64,0r0,18r-64,0r0,210r-21,0r0,-210r-64,0r0,-18r64,0","w":172},"\u2021":{"d":"76,-257r21,0r0,74r64,0r0,18r-64,0r0,125r64,0r0,18r-64,0r0,74r-21,0r0,-74r-64,0r0,-18r64,0r0,-125r-64,0r0,-18r64,0r0,-74","w":172},"\u00b7":{"d":"23,-118v0,-11,9,-20,20,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-20,-9,-20,-20","w":86},"\u00b6":{"d":"70,50r0,-170v-32,0,-59,-30,-59,-66v-1,-73,61,-75,133,-71r0,307r-18,0r0,-291r-38,0r0,291r-18,0","w":173},"\u2022":{"d":"26,-129v0,-35,29,-64,64,-64v35,0,64,29,64,64v0,35,-29,65,-64,65v-35,0,-64,-30,-64,-65","w":180},"\u201a":{"d":"32,0r0,-37r25,0v-1,39,6,74,-27,87v-2,-24,15,-22,12,-50r-10,0","w":86},"\u201e":{"d":"28,0r0,-37r25,0v-1,39,6,74,-27,87v-2,-24,16,-22,13,-50r-11,0xm76,0r0,-37r24,0v-1,39,7,74,-26,87v-2,-24,15,-22,12,-50r-10,0","w":126},"\u201d":{"d":"28,-220r0,-37r25,0v-1,39,6,73,-27,86v-2,-23,16,-21,13,-49r-11,0xm76,-220r0,-37r24,0v-1,38,7,73,-26,86v-2,-23,15,-21,12,-49r-10,0","w":126,"k":{" ":13}},"\u00bb":{"d":"21,-41r0,-25r32,-36r-32,-37r0,-24r45,50r0,22xm68,-41r0,-25r32,-36r-32,-37r0,-24r45,50r0,22","w":133},"\u2026":{"d":"48,0r0,-37r24,0r0,37r-24,0xm168,0r0,-37r24,0r0,37r-24,0xm288,0r0,-37r24,0r0,37r-24,0","w":360},"\u2030":{"d":"39,-189v0,39,10,51,25,51v15,0,26,-12,26,-51v0,-38,-11,-50,-26,-50v-15,0,-25,12,-25,50xm62,4r111,-259r18,0r-111,259r-18,0xm161,-62v0,39,11,50,26,50v15,0,26,-11,26,-50v0,-38,-11,-50,-26,-50v-15,0,-26,12,-26,50xm19,-189v0,-52,16,-66,45,-66v29,0,46,14,46,66v0,52,-17,67,-46,67v-29,0,-45,-15,-45,-67xm142,-62v0,-52,16,-66,45,-66v29,0,46,14,46,66v0,52,-17,66,-46,66v-29,0,-45,-14,-45,-66xm270,-62v0,39,11,50,26,50v15,0,25,-11,25,-50v0,-38,-10,-50,-25,-50v-15,0,-26,12,-26,50xm250,-62v0,-52,17,-66,46,-66v29,0,45,14,45,66v0,52,-16,66,-45,66v-29,0,-46,-14,-46,-66","w":360},"\u00bf":{"d":"71,-129r22,0v12,64,-57,79,-58,133v0,26,17,44,41,44v31,0,46,-21,46,-60r23,0v0,45,-22,78,-68,78v-66,1,-85,-75,-41,-119v19,-19,40,-38,35,-76xm70,-158r0,-37r24,0r0,37r-24,0","w":153},"`":{"d":"-4,-266r26,0r27,51r-17,0"},"\u00b4":{"d":"45,-266r26,0r-36,51r-17,0"},"\u02c6":{"d":"10,-215r-22,0r35,-51r21,0r35,51r-22,0r-24,-36"},"\u02dc":{"d":"66,-258r16,0v1,32,-35,43,-59,22v-11,-10,-20,2,-22,14r-16,0v1,-30,34,-46,57,-23v11,11,24,-1,24,-13"},"\u00af":{"d":"-9,-233r0,-15r85,0r0,15r-85,0"},"\u02d8":{"d":"6,-261v0,35,53,38,55,0r16,0v-2,27,-20,44,-44,44v-24,0,-41,-17,-43,-44r16,0"},"\u02d9":{"d":"23,-222r0,-37r21,0r0,37r-21,0"},"\u00a8":{"d":"-4,-222r0,-37r21,0r0,37r-21,0xm50,-222r0,-37r21,0r0,37r-21,0"},"\u02da":{"d":"-1,-245v0,-19,15,-34,34,-34v19,0,35,15,35,34v0,19,-16,34,-35,34v-19,0,-34,-15,-34,-34xm12,-245v0,12,9,21,21,21v12,0,22,-9,22,-21v0,-12,-10,-21,-22,-21v-12,0,-21,9,-21,21"},"\u00b8":{"d":"12,29v11,-10,10,-32,34,-29v-4,7,-14,14,-15,21v18,-7,41,5,40,22v-1,32,-46,36,-70,23r4,-11v13,8,49,6,46,-10v1,-14,-24,-16,-34,-10"},"\u02dd":{"d":"18,-266r25,0r-35,51r-17,0xm72,-266r26,0r-36,51r-17,0"},"\u02db":{"d":"5,48v2,-19,16,-52,54,-50v-26,18,-35,32,-35,46v-1,20,28,19,41,10r5,10v-17,15,-68,11,-65,-16"},"\u02c7":{"d":"-12,-266r21,0r24,37r25,-37r21,0r-35,51r-22,0"},"\u2014":{"d":"0,-112r360,0r0,19r-360,0r0,-19","w":360},"\u00c6":{"d":"120,0r0,-75r-69,0r-29,75r-25,0r105,-257r142,0r0,19r-101,0r0,94r94,0r0,19r-94,0r0,106r104,0r0,19r-127,0xm58,-94r62,0r0,-144r-4,0","w":253},"\u00aa":{"d":"23,-217r-18,0v0,-25,13,-38,43,-38v58,-2,34,52,39,97v0,8,3,11,11,10r0,14v-13,5,-32,3,-29,-18v-11,34,-73,21,-67,-14v-3,-29,30,-35,55,-41v10,-3,12,-5,12,-16v0,-11,-9,-16,-22,-16v-17,0,-24,9,-24,22xm40,-148v23,2,34,-25,28,-50v-11,12,-47,7,-47,30v0,11,8,20,19,20","w":99},"\u0141":{"d":"20,0r0,-103r-25,17r0,-21r25,-18r0,-132r23,0r0,117r67,-46r0,21r-67,46r0,100r107,0r0,19r-130,0","w":153,"k":{"T":27,"V":27,"W":27,"y":13,"\u00fd":13,"\u00ff":13,"Y":33,"\u00dd":33,"\u0178":33,"\u201d":33,"\u2019":33}},"\u00d8":{"d":"56,-43r79,-185v-54,-35,-96,-4,-94,99v0,39,5,68,15,86xm144,-214r-78,185v9,10,20,14,34,14v37,0,59,-31,59,-114v0,-40,-6,-67,-15,-85xm48,15r-13,-6r11,-28v-19,-21,-28,-57,-28,-110v0,-114,51,-154,125,-120r9,-23r14,5r-12,28v19,21,28,57,28,110v0,113,-50,156,-124,121","w":200},"\u0152":{"d":"97,-15v66,0,51,-98,51,-162v0,-50,-16,-65,-51,-65v-37,0,-59,30,-59,113v0,83,22,114,59,114xm147,-236v3,-4,0,-15,1,-21r122,0r0,19r-99,0r0,94r92,0r0,19r-92,0r0,106r102,0r0,19r-125,0v-1,-7,2,-18,-1,-23v-8,18,-27,27,-50,27v-53,0,-82,-41,-82,-133v0,-92,29,-132,82,-132v27,0,41,9,50,25","w":280},"\u00ba":{"d":"3,-194v0,-41,16,-61,47,-61v32,0,46,20,46,61v0,41,-14,62,-46,62v-31,0,-47,-21,-47,-62xm23,-194v0,33,12,46,27,46v15,0,27,-13,27,-46v0,-33,-12,-45,-27,-45v-15,0,-27,12,-27,45","w":99},"\u00e6":{"d":"39,-134r-22,0v-11,-64,85,-84,102,-31v8,-19,25,-30,45,-30v43,0,58,32,58,100r-98,0v-2,48,13,81,37,81v21,0,38,-20,38,-49r22,0v2,74,-90,91,-108,28v-10,25,-27,39,-54,39v-33,0,-48,-21,-48,-54v0,-43,36,-53,73,-61v29,-6,23,-74,-11,-66v-23,0,-34,15,-34,43xm102,-103v-21,15,-68,12,-68,52v0,22,11,37,30,37v17,0,38,-13,38,-49r0,-40xm124,-113r75,0v0,-48,-15,-64,-37,-64v-22,0,-37,16,-38,64","w":233},"\u0131":{"d":"22,0r0,-191r22,0r0,191r-22,0"},"\u0142":{"d":"22,0r0,-114r-22,24r0,-22r22,-23r0,-122r22,0r0,99r22,-24v4,26,-12,33,-22,45r0,137r-22,0"},"\u00f8":{"d":"44,-36r55,-133v-38,-22,-64,0,-65,73v0,27,4,47,10,60xm109,-155r-55,132v38,24,65,1,66,-73v0,-27,-5,-46,-11,-59xm36,20r-13,-6r11,-27v-15,-16,-23,-44,-23,-83v-1,-80,39,-115,96,-92r10,-23r14,6r-12,27v15,16,24,43,24,82v2,81,-40,117,-97,92","w":153},"\u0153":{"d":"216,-63r22,0v0,71,-84,96,-108,28v-9,23,-25,39,-50,39v-42,0,-66,-33,-66,-100v0,-66,24,-99,66,-99v26,0,43,14,52,39v6,-25,23,-39,49,-39v43,0,59,32,59,100r-99,0v-3,48,14,81,38,81v21,0,37,-20,37,-49xm37,-96v0,61,18,82,41,82v23,0,42,-21,42,-82v0,-61,-19,-81,-42,-81v-23,0,-41,20,-41,81xm141,-113r76,0v0,-48,-16,-64,-38,-64v-22,0,-37,16,-38,64","w":253},"\u00df":{"d":"19,0r0,-194v0,-44,23,-66,60,-66v65,0,82,96,20,112v41,5,50,43,50,70v0,55,-33,88,-84,78r0,-18v35,8,60,-12,61,-61v0,-41,-19,-60,-59,-58r0,-18v30,1,47,-12,47,-44v0,-24,-12,-43,-36,-43v-22,0,-38,13,-38,50r0,192r-21,0","w":159},"\u00b9":{"d":"52,-101r0,-115r-39,0r0,-13v29,0,41,-11,42,-26r16,0r0,154r-19,0","w":112},"\u00ac":{"d":"181,-39r0,-78r-164,0r0,-18r182,0r0,96r-18,0","w":216},"\u00b5":{"d":"21,63r0,-254r21,0r0,134v0,31,11,43,34,43v64,0,35,-114,41,-177r22,0r0,191r-19,0v-1,-8,2,-21,-1,-27v-14,30,-51,39,-77,23r0,67r-21,0","w":159},"\u2122":{"d":"64,-109r0,-132r-49,0r0,-16r115,0r0,16r-48,0r0,132r-18,0xm235,-137r47,-120r30,0r0,148r-18,0r0,-132r-54,132r-11,0r-54,-132r0,132r-18,0r0,-148r31,0","w":356},"\u00d0":{"d":"20,0r0,-125r-20,0r0,-19r20,0r0,-113r62,0v75,0,93,44,93,128v0,84,-18,129,-93,129r-62,0xm43,-144r58,0r0,19r-58,0r0,106v80,4,109,-6,109,-109v0,-103,-28,-115,-109,-110r0,94","w":193},"\u00bd":{"d":"22,11r162,-272r18,0r-162,272r-18,0xm52,-101r0,-115r-39,0r0,-13v29,0,41,-11,42,-26r16,0r0,154r-19,0xm161,-105r-20,0v0,-30,16,-49,50,-49v48,0,62,61,19,88v-18,11,-46,32,-48,50r75,0r0,16r-94,0v-7,-52,71,-65,73,-112v0,-18,-12,-26,-27,-26v-17,0,-27,12,-28,33","w":259},"\u00b1":{"d":"99,-120r0,-62r18,0r0,62r82,0r0,18r-82,0r0,62r-18,0r0,-62r-82,0r0,-18r82,0xm17,0r0,-18r182,0r0,18r-182,0","w":216},"\u00de":{"d":"43,-187r0,106v51,1,94,3,94,-53v0,-56,-43,-55,-94,-53xm20,0r0,-257r23,0r0,50r48,0v48,0,69,30,69,73v0,40,-19,73,-78,73r-39,0r0,61r-23,0","w":172},"\u00bc":{"d":"204,0r0,-40r-67,0r0,-13r64,-101r21,0r0,101r20,0r0,13r-20,0r0,40r-18,0xm153,-53r51,0v-1,-25,2,-54,-1,-77xm32,11r163,-272r18,0r-163,272r-18,0xm52,-101r0,-115r-39,0r0,-13v29,0,41,-11,42,-26r16,0r0,154r-19,0","w":259},"\u00f7":{"d":"17,-82r0,-18r182,0r0,18r-182,0xm88,-165v0,-11,9,-20,20,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-20,-9,-20,-20xm88,-17v0,-11,9,-20,20,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-20,-9,-20,-20","w":216},"\u00a6":{"d":"31,4r0,-97r18,0r0,97r-18,0xm31,-164r0,-97r18,0r0,97r-18,0","w":79},"\u00b0":{"d":"36,-203v0,20,16,35,36,35v20,0,36,-15,36,-35v0,-20,-16,-36,-36,-36v-20,0,-36,16,-36,36xm21,-203v0,-28,23,-52,51,-52v28,0,51,24,51,52v0,28,-23,51,-51,51v-28,0,-51,-23,-51,-51","w":144},"\u00fe":{"d":"19,63r0,-320r21,0r1,98v6,-22,24,-36,45,-36v42,0,61,34,61,100v0,66,-19,99,-61,99v-25,1,-39,-15,-46,-33r0,92r-21,0xm40,-95v0,71,20,81,42,81v22,0,42,-10,42,-81v0,-71,-20,-82,-42,-82v-22,0,-42,11,-42,82","w":159},"\u00be":{"d":"204,0r0,-40r-67,0r0,-13r64,-101r21,0r0,101r20,0r0,13r-20,0r0,40r-18,0xm153,-53r51,0v-1,-25,2,-54,-1,-77xm43,11r163,-272r18,0r-163,272r-18,0xm43,-173v1,-6,-4,-17,6,-16v39,4,42,-49,6,-50v-14,0,-27,10,-27,27r-19,0v0,-26,14,-43,46,-43v50,0,61,63,18,73v50,11,39,84,-18,84v-30,0,-47,-15,-48,-44r20,0v0,13,10,28,28,28v14,0,31,-10,31,-31v0,-21,-18,-30,-43,-28","w":259},"\u00b2":{"d":"28,-206r-19,0v0,-30,15,-49,49,-49v48,0,63,63,19,89v-18,11,-46,31,-48,49r75,0r0,16r-94,0v-7,-52,71,-66,74,-112v0,-18,-12,-26,-27,-26v-17,0,-28,12,-29,33","w":112},"\u00ae":{"d":"192,-50r-47,-70r-33,0r0,70r-18,0r0,-158v50,-1,112,-7,112,44v0,28,-18,40,-39,44r46,70r-21,0xm112,-192r0,56v34,-1,76,8,76,-28v-1,-36,-42,-27,-76,-28xm11,-129v0,-73,60,-132,133,-132v73,0,133,59,133,132v0,73,-60,133,-133,133v-73,0,-133,-60,-133,-133xm29,-129v0,63,52,115,115,115v63,0,115,-52,115,-115v0,-63,-52,-114,-115,-114v-63,0,-115,51,-115,114","w":288},"\u2212":{"d":"17,-82r0,-18r182,0r0,18r-182,0","w":216},"\u00f0":{"d":"34,-94v0,59,19,80,43,80v24,0,43,-21,43,-80v0,-59,-19,-79,-43,-79v-24,0,-43,20,-43,79xm42,-215r-13,-12r26,-16v-8,-9,-17,-16,-26,-24r17,-12v10,8,18,17,27,26r26,-15r13,11r-27,16v33,36,58,80,58,145v0,67,-24,100,-66,100v-42,0,-66,-34,-66,-98v0,-64,26,-97,62,-97v14,0,26,9,36,18v-12,-21,-27,-40,-42,-57","w":153},"\u00d7":{"d":"176,-10r-68,-68r-68,68r-13,-13r68,-68r-68,-69r13,-12r68,68r68,-68r13,12r-68,69r68,68","w":216},"\u00b3":{"d":"43,-173v1,-6,-4,-17,6,-16v39,4,42,-49,6,-50v-14,0,-27,10,-27,27r-19,0v0,-26,14,-43,46,-43v50,0,61,63,18,73v50,11,39,84,-18,84v-30,0,-47,-15,-48,-44r20,0v0,13,10,28,28,28v14,0,31,-10,31,-31v0,-21,-18,-30,-43,-28","w":112},"\u00a9":{"d":"196,-101r20,0v-8,33,-34,57,-68,57v-49,0,-80,-37,-80,-85v0,-49,29,-83,79,-83v35,0,64,20,69,55r-20,0v-19,-65,-109,-37,-109,28v0,34,22,67,61,67v26,0,44,-17,48,-39xm11,-129v0,-73,60,-132,133,-132v73,0,133,59,133,132v0,73,-60,133,-133,133v-73,0,-133,-60,-133,-133xm29,-129v0,63,52,115,115,115v63,0,115,-52,115,-115v0,-63,-52,-114,-115,-114v-63,0,-115,51,-115,114","w":288},"\u00c1":{"d":"50,-94r80,0r-40,-145xm0,0r76,-257r28,0r76,257r-24,0r-21,-75r-90,0r-21,75r-24,0xm102,-320r25,0r-35,51r-17,0","w":180},"\u00c2":{"d":"50,-94r80,0r-40,-145xm0,0r76,-257r28,0r76,257r-24,0r-21,-75r-90,0r-21,75r-24,0xm66,-269r-21,0r34,-51r22,0r34,51r-21,0r-24,-36","w":180},"\u00c4":{"d":"50,-94r80,0r-40,-145xm0,0r76,-257r28,0r76,257r-24,0r-21,-75r-90,0r-21,75r-24,0xm52,-277r0,-37r22,0r0,37r-22,0xm106,-277r0,-37r22,0r0,37r-22,0","w":180},"\u00c0":{"d":"50,-94r80,0r-40,-145xm0,0r76,-257r28,0r76,257r-24,0r-21,-75r-90,0r-21,75r-24,0xm53,-320r25,0r27,51r-17,0","w":180},"\u00c5":{"d":"50,-94r80,0r-40,-145xm0,0r76,-257r28,0r76,257r-24,0r-21,-75r-90,0r-21,75r-24,0xm56,-300v0,-19,15,-34,34,-34v19,0,34,15,34,34v0,19,-15,35,-34,35v-19,0,-34,-16,-34,-35xm69,-300v0,12,9,22,21,22v12,0,21,-10,21,-22v0,-12,-9,-21,-21,-21v-12,0,-21,9,-21,21","w":180},"\u00c3":{"d":"50,-94r80,0r-40,-145xm0,0r76,-257r28,0r76,257r-24,0r-21,-75r-90,0r-21,75r-24,0xm122,-313r16,0v2,33,-36,45,-59,22v-13,-7,-19,4,-21,15r-16,0v0,-31,34,-46,57,-24v11,10,24,-1,23,-13","w":180},"\u00c7":{"d":"83,35v-11,-10,9,-21,13,-31v-50,-3,-78,-43,-78,-133v0,-92,29,-132,82,-132v52,0,74,37,74,79r-23,0v0,-35,-18,-60,-51,-60v-37,0,-59,30,-59,113v0,83,22,114,59,114v32,0,50,-28,53,-72r23,0v-3,54,-27,87,-67,91v-3,6,-12,12,-11,17v18,-7,41,5,40,22v-2,32,-47,36,-71,23r5,-11v13,9,49,6,46,-10v1,-14,-25,-16,-35,-10","w":186},"\u00c9":{"d":"20,0r0,-257r128,0r0,19r-105,0r0,94r98,0r0,19r-98,0r0,106r108,0r0,19r-131,0xm98,-320r25,0r-35,51r-17,0","w":159},"\u00ca":{"d":"20,0r0,-257r128,0r0,19r-105,0r0,94r98,0r0,19r-98,0r0,106r108,0r0,19r-131,0xm63,-269r-22,0r35,-51r21,0r35,51r-22,0r-24,-36","w":159},"\u00cb":{"d":"20,0r0,-257r128,0r0,19r-105,0r0,94r98,0r0,19r-98,0r0,106r108,0r0,19r-131,0xm49,-277r0,-37r21,0r0,37r-21,0xm103,-277r0,-37r21,0r0,37r-21,0","w":159},"\u00c8":{"d":"20,0r0,-257r128,0r0,19r-105,0r0,94r98,0r0,19r-98,0r0,106r108,0r0,19r-131,0xm49,-320r26,0r27,51r-17,0","w":159},"\u00cd":{"d":"22,0r0,-257r23,0r0,257r-23,0xm45,-320r25,0r-35,51r-17,0"},"\u00ce":{"d":"22,0r0,-257r23,0r0,257r-23,0xm9,-269r-21,0r34,-51r22,0r34,51r-21,0r-24,-36"},"\u00cf":{"d":"22,0r0,-257r23,0r0,257r-23,0xm-5,-277r0,-37r22,0r0,37r-22,0xm49,-277r0,-37r22,0r0,37r-22,0"},"\u00cc":{"d":"22,0r0,-257r23,0r0,257r-23,0xm-4,-320r26,0r27,51r-18,0"},"\u00d1":{"d":"20,0r0,-257r31,0r99,224r0,-224r23,0r0,257r-31,0r-99,-224r0,224r-23,0xm129,-313r16,0v2,32,-37,45,-59,22v-13,-7,-20,3,-22,15r-15,0v1,-31,33,-45,57,-24v11,10,24,-1,23,-13","w":193},"\u00d3":{"d":"18,-129v0,-92,29,-132,82,-132v53,0,82,40,82,132v0,92,-29,133,-82,133v-53,0,-82,-41,-82,-133xm41,-129v0,83,22,114,59,114v37,0,59,-31,59,-114v0,-83,-22,-113,-59,-113v-37,0,-59,30,-59,113xm112,-320r25,0r-35,51r-17,0","w":200},"\u00d4":{"d":"18,-129v0,-92,29,-132,82,-132v53,0,82,40,82,132v0,92,-29,133,-82,133v-53,0,-82,-41,-82,-133xm41,-129v0,83,22,114,59,114v37,0,59,-31,59,-114v0,-83,-22,-113,-59,-113v-37,0,-59,30,-59,113xm76,-269r-21,0r34,-51r22,0r34,51r-21,0r-24,-36","w":200},"\u00d6":{"d":"18,-129v0,-92,29,-132,82,-132v53,0,82,40,82,132v0,92,-29,133,-82,133v-53,0,-82,-41,-82,-133xm41,-129v0,83,22,114,59,114v37,0,59,-31,59,-114v0,-83,-22,-113,-59,-113v-37,0,-59,30,-59,113xm62,-277r0,-37r22,0r0,37r-22,0xm116,-277r0,-37r22,0r0,37r-22,0","w":200},"\u00d2":{"d":"18,-129v0,-92,29,-132,82,-132v53,0,82,40,82,132v0,92,-29,133,-82,133v-53,0,-82,-41,-82,-133xm41,-129v0,83,22,114,59,114v37,0,59,-31,59,-114v0,-83,-22,-113,-59,-113v-37,0,-59,30,-59,113xm63,-320r26,0r27,51r-18,0","w":200},"\u00d5":{"d":"18,-129v0,-92,29,-132,82,-132v53,0,82,40,82,132v0,92,-29,133,-82,133v-53,0,-82,-41,-82,-133xm41,-129v0,83,22,114,59,114v37,0,59,-31,59,-114v0,-83,-22,-113,-59,-113v-37,0,-59,30,-59,113xm132,-313r16,0v2,33,-36,45,-59,22v-13,-7,-19,4,-21,15r-16,0v0,-31,34,-46,57,-24v11,10,24,-1,23,-13","w":200},"\u0160":{"d":"156,-191r-23,0v0,-32,-15,-51,-46,-51v-31,0,-49,20,-49,46v0,77,125,35,125,125v0,50,-31,75,-78,75v-51,0,-77,-29,-75,-84r23,0v-2,39,13,65,51,65v32,0,56,-16,56,-52v0,-76,-125,-33,-125,-126v0,-40,26,-68,71,-68v48,0,70,24,70,70xm41,-320r21,0r24,36r25,-36r21,0r-35,51r-22,0","w":172},"\u00da":{"d":"17,-72r0,-185r23,0r0,185v0,39,16,57,50,57v34,0,50,-18,50,-57r0,-185r23,0r0,185v0,54,-26,76,-73,76v-47,0,-73,-22,-73,-76xm102,-320r25,0r-35,51r-17,0","w":180},"\u00db":{"d":"17,-72r0,-185r23,0r0,185v0,39,16,57,50,57v34,0,50,-18,50,-57r0,-185r23,0r0,185v0,54,-26,76,-73,76v-47,0,-73,-22,-73,-76xm66,-269r-21,0r34,-51r22,0r34,51r-21,0r-24,-36","w":180},"\u00dc":{"d":"17,-72r0,-185r23,0r0,185v0,39,16,57,50,57v34,0,50,-18,50,-57r0,-185r23,0r0,185v0,54,-26,76,-73,76v-47,0,-73,-22,-73,-76xm52,-277r0,-37r22,0r0,37r-22,0xm106,-277r0,-37r22,0r0,37r-22,0","w":180},"\u00d9":{"d":"17,-72r0,-185r23,0r0,185v0,39,16,57,50,57v34,0,50,-18,50,-57r0,-185r23,0r0,185v0,54,-26,76,-73,76v-47,0,-73,-22,-73,-76xm53,-320r25,0r27,51r-17,0","w":180},"\u00dd":{"d":"68,0r0,-103r-69,-154r24,0r57,128r56,-128r25,0r-70,154r0,103r-23,0xm91,-320r26,0r-35,51r-18,0","w":159,"k":{"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":40,".":40,"-":27,"a":20,"\u00e6":20,"\u00e1":20,"\u00e2":20,"\u00e4":20,"\u00e0":20,"\u00e5":20,"\u00e3":20,"e":20,"\u00e9":20,"\u00ea":20,"\u00eb":20,"\u00e8":20,"i":6,"\u00ed":6,"\u00ee":6,"\u00ef":6,"\u00ec":6,"o":20,"\u00f8":20,"\u0153":20,"\u00f3":20,"\u00f4":20,"\u00f6":20,"\u00f2":20,"\u00f5":20,"u":13,"\u00fa":13,"\u00fb":13,"\u00fc":13,"\u00f9":13,":":13,";":13}},"\u0178":{"d":"68,0r0,-103r-69,-154r24,0r57,128r56,-128r25,0r-70,154r0,103r-23,0xm42,-277r0,-37r22,0r0,37r-22,0xm96,-277r0,-37r22,0r0,37r-22,0","w":159,"k":{"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":40,".":40,"-":27,"a":20,"\u00e6":20,"\u00e1":20,"\u00e2":20,"\u00e4":20,"\u00e0":20,"\u00e5":20,"\u00e3":20,"e":20,"\u00e9":20,"\u00ea":20,"\u00eb":20,"\u00e8":20,"i":6,"\u00ed":6,"\u00ee":6,"\u00ef":6,"\u00ec":6,"o":20,"\u00f8":20,"\u0153":20,"\u00f3":20,"\u00f4":20,"\u00f6":20,"\u00f2":20,"\u00f5":20,"u":13,"\u00fa":13,"\u00fb":13,"\u00fc":13,"\u00f9":13,":":13,";":13}},"\u017d":{"d":"8,0r0,-22r125,-216r-118,0r0,-19r142,0r0,22r-124,216r125,0r0,19r-150,0xm37,-320r22,0r24,36r24,-36r22,0r-35,51r-22,0","w":166},"\u00e1":{"d":"39,-134r-22,0v0,-39,19,-61,59,-61v84,0,54,94,54,163v0,14,5,17,17,16r0,16v-21,6,-41,0,-38,-28v-9,25,-29,32,-50,32v-61,0,-65,-96,-10,-107v24,-12,59,0,59,-41v0,-24,-14,-33,-33,-33v-26,0,-36,15,-36,43xm64,-14v40,0,48,-47,44,-94v-18,22,-74,12,-74,57v0,22,11,37,30,37xm88,-266r26,0r-36,51r-17,0","w":153},"\u00e2":{"d":"39,-134r-22,0v0,-39,19,-61,59,-61v84,0,54,94,54,163v0,14,5,17,17,16r0,16v-21,6,-41,0,-38,-28v-9,25,-29,32,-50,32v-61,0,-65,-96,-10,-107v24,-12,59,0,59,-41v0,-24,-14,-33,-33,-33v-26,0,-36,15,-36,43xm64,-14v40,0,48,-47,44,-94v-18,22,-74,12,-74,57v0,22,11,37,30,37xm53,-215r-22,0r35,-51r21,0r35,51r-22,0r-23,-36","w":153},"\u00e4":{"d":"39,-134r-22,0v0,-39,19,-61,59,-61v84,0,54,94,54,163v0,14,5,17,17,16r0,16v-21,6,-41,0,-38,-28v-9,25,-29,32,-50,32v-61,0,-65,-96,-10,-107v24,-12,59,0,59,-41v0,-24,-14,-33,-33,-33v-26,0,-36,15,-36,43xm64,-14v40,0,48,-47,44,-94v-18,22,-74,12,-74,57v0,22,11,37,30,37xm39,-222r0,-37r21,0r0,37r-21,0xm93,-222r0,-37r21,0r0,37r-21,0","w":153},"\u00e0":{"d":"39,-134r-22,0v0,-39,19,-61,59,-61v84,0,54,94,54,163v0,14,5,17,17,16r0,16v-21,6,-41,0,-38,-28v-9,25,-29,32,-50,32v-61,0,-65,-96,-10,-107v24,-12,59,0,59,-41v0,-24,-14,-33,-33,-33v-26,0,-36,15,-36,43xm64,-14v40,0,48,-47,44,-94v-18,22,-74,12,-74,57v0,22,11,37,30,37xm40,-266r25,0r27,51r-17,0","w":153},"\u00e5":{"d":"39,-134r-22,0v0,-39,19,-61,59,-61v84,0,54,94,54,163v0,14,5,17,17,16r0,16v-21,6,-41,0,-38,-28v-9,25,-29,32,-50,32v-61,0,-65,-96,-10,-107v24,-12,59,0,59,-41v0,-24,-14,-33,-33,-33v-26,0,-36,15,-36,43xm64,-14v40,0,48,-47,44,-94v-18,22,-74,12,-74,57v0,22,11,37,30,37xm42,-245v0,-19,16,-34,35,-34v19,0,34,15,34,34v0,19,-15,34,-34,34v-19,0,-35,-15,-35,-34xm55,-245v0,12,10,21,22,21v12,0,21,-9,21,-21v0,-12,-9,-21,-21,-21v-12,0,-22,9,-22,21","w":153},"\u00e3":{"d":"39,-134r-22,0v0,-39,19,-61,59,-61v84,0,54,94,54,163v0,14,5,17,17,16r0,16v-21,6,-41,0,-38,-28v-9,25,-29,32,-50,32v-61,0,-65,-96,-10,-107v24,-12,59,0,59,-41v0,-24,-14,-33,-33,-33v-26,0,-36,15,-36,43xm64,-14v40,0,48,-47,44,-94v-18,22,-74,12,-74,57v0,22,11,37,30,37xm109,-258r16,0v1,22,-23,46,-45,29v-12,-9,-34,-17,-36,7r-16,0v1,-31,35,-46,58,-23v11,10,23,-2,23,-13","w":153},"\u00e7":{"d":"60,35v-11,-10,9,-21,13,-31v-39,-1,-62,-29,-62,-100v0,-66,24,-99,66,-99v36,0,57,22,59,61r-22,0v-3,-30,-14,-43,-37,-43v-23,0,-43,14,-43,82v0,72,21,81,41,81v22,0,35,-16,39,-49r22,0v-3,36,-22,62,-50,67v-3,6,-12,12,-12,17v18,-7,41,5,40,22v-1,32,-46,36,-70,23r4,-11v13,8,50,6,47,-10v1,-14,-25,-16,-35,-10","w":146},"\u00e9":{"d":"117,-63r22,0v-3,41,-26,67,-62,67v-40,0,-64,-28,-64,-100v0,-66,24,-99,66,-99v44,0,63,35,61,100r-104,0v-2,53,18,81,41,81v23,0,36,-16,40,-49xm36,-113r81,0v-1,-48,-13,-64,-40,-64v-27,0,-40,16,-41,64xm90,-266r26,0r-36,51r-17,0","w":153},"\u00ea":{"d":"117,-63r22,0v-3,41,-26,67,-62,67v-40,0,-64,-28,-64,-100v0,-66,24,-99,66,-99v44,0,63,35,61,100r-104,0v-2,53,18,81,41,81v23,0,36,-16,40,-49xm36,-113r81,0v-1,-48,-13,-64,-40,-64v-27,0,-40,16,-41,64xm55,-215r-22,0r35,-51r21,0r35,51r-22,0r-24,-36","w":153},"\u00eb":{"d":"117,-63r22,0v-3,41,-26,67,-62,67v-40,0,-64,-28,-64,-100v0,-66,24,-99,66,-99v44,0,63,35,61,100r-104,0v-2,53,18,81,41,81v23,0,36,-16,40,-49xm36,-113r81,0v-1,-48,-13,-64,-40,-64v-27,0,-40,16,-41,64xm41,-222r0,-37r21,0r0,37r-21,0xm95,-222r0,-37r21,0r0,37r-21,0","w":153},"\u00e8":{"d":"117,-63r22,0v-3,41,-26,67,-62,67v-40,0,-64,-28,-64,-100v0,-66,24,-99,66,-99v44,0,63,35,61,100r-104,0v-2,53,18,81,41,81v23,0,36,-16,40,-49xm36,-113r81,0v-1,-48,-13,-64,-40,-64v-27,0,-40,16,-41,64xm41,-266r26,0r27,51r-17,0","w":153},"\u00ed":{"d":"22,0r0,-191r22,0r0,191r-22,0xm45,-266r25,0r-35,51r-17,0"},"\u00ee":{"d":"22,0r0,-191r22,0r0,191r-22,0xm9,-215r-21,0r34,-51r22,0r34,51r-21,0r-24,-36"},"\u00ef":{"d":"22,0r0,-191r22,0r0,191r-22,0xm-5,-222r0,-37r22,0r0,37r-22,0xm49,-222r0,-37r22,0r0,37r-22,0"},"\u00ec":{"d":"22,0r0,-191r22,0r0,191r-22,0xm-4,-266r26,0r27,51r-18,0"},"\u00f1":{"d":"21,0r0,-191r19,0v1,8,-2,20,1,26v22,-45,98,-42,98,21r0,144r-22,0r0,-138v0,-26,-10,-39,-32,-39v-67,2,-36,113,-43,177r-21,0xm112,-258r16,0v1,22,-23,46,-45,29v-12,-9,-34,-17,-35,7r-16,0v0,-31,34,-46,57,-23v11,10,24,-1,23,-13","w":159},"\u00f3":{"d":"11,-96v0,-66,24,-99,66,-99v42,0,66,33,66,99v0,67,-24,100,-66,100v-42,0,-66,-33,-66,-100xm34,-96v0,61,19,82,43,82v24,0,43,-21,43,-82v0,-61,-19,-81,-43,-81v-24,0,-43,20,-43,81xm88,-266r26,0r-36,51r-17,0","w":153},"\u00f4":{"d":"11,-96v0,-66,24,-99,66,-99v42,0,66,33,66,99v0,67,-24,100,-66,100v-42,0,-66,-33,-66,-100xm34,-96v0,61,19,82,43,82v24,0,43,-21,43,-82v0,-61,-19,-81,-43,-81v-24,0,-43,20,-43,81xm53,-215r-22,0r35,-51r21,0r35,51r-22,0r-23,-36","w":153},"\u00f6":{"d":"11,-96v0,-66,24,-99,66,-99v42,0,66,33,66,99v0,67,-24,100,-66,100v-42,0,-66,-33,-66,-100xm34,-96v0,61,19,82,43,82v24,0,43,-21,43,-82v0,-61,-19,-81,-43,-81v-24,0,-43,20,-43,81xm39,-222r0,-37r21,0r0,37r-21,0xm93,-222r0,-37r21,0r0,37r-21,0","w":153},"\u00f2":{"d":"11,-96v0,-66,24,-99,66,-99v42,0,66,33,66,99v0,67,-24,100,-66,100v-42,0,-66,-33,-66,-100xm34,-96v0,61,19,82,43,82v24,0,43,-21,43,-82v0,-61,-19,-81,-43,-81v-24,0,-43,20,-43,81xm40,-266r25,0r27,51r-17,0","w":153},"\u00f5":{"d":"11,-96v0,-66,24,-99,66,-99v42,0,66,33,66,99v0,67,-24,100,-66,100v-42,0,-66,-33,-66,-100xm34,-96v0,61,19,82,43,82v24,0,43,-21,43,-82v0,-61,-19,-81,-43,-81v-24,0,-43,20,-43,81xm109,-258r16,0v1,22,-23,46,-45,29v-12,-9,-34,-17,-36,7r-16,0v1,-31,35,-46,58,-23v11,10,23,-2,23,-13","w":153},"\u0161":{"d":"107,-48v0,-49,-93,-39,-93,-92v0,-39,25,-55,57,-55v38,0,54,20,53,58r-22,0v1,-27,-9,-41,-31,-40v-43,0,-49,52,-9,64v29,10,67,26,67,60v0,33,-19,57,-59,57v-41,1,-61,-19,-59,-65r22,0v-1,30,10,48,36,47v23,0,38,-13,38,-34xm24,-266r22,0r24,37r24,-37r22,0r-35,51r-22,0","w":140},"\u00fa":{"d":"21,-47r0,-144r21,0r0,134v0,31,11,43,34,43v64,0,35,-114,41,-177r22,0r0,191r-19,0v-1,-8,2,-21,-1,-27v-22,46,-98,43,-98,-20xm91,-266r26,0r-35,51r-18,0","w":159},"\u00fb":{"d":"21,-47r0,-144r21,0r0,134v0,31,11,43,34,43v64,0,35,-114,41,-177r22,0r0,191r-19,0v-1,-8,2,-21,-1,-27v-22,46,-98,43,-98,-20xm56,-215r-21,0r34,-51r22,0r34,51r-21,0r-24,-36","w":159},"\u00fc":{"d":"21,-47r0,-144r21,0r0,134v0,31,11,43,34,43v64,0,35,-114,41,-177r22,0r0,191r-19,0v-1,-8,2,-21,-1,-27v-22,46,-98,43,-98,-20xm42,-222r0,-37r22,0r0,37r-22,0xm96,-222r0,-37r22,0r0,37r-22,0","w":159},"\u00f9":{"d":"21,-47r0,-144r21,0r0,134v0,31,11,43,34,43v64,0,35,-114,41,-177r22,0r0,191r-19,0v-1,-8,2,-21,-1,-27v-22,46,-98,43,-98,-20xm43,-266r25,0r27,51r-17,0","w":159},"\u00fd":{"d":"58,2r-55,-193r23,0r43,165r39,-165r23,0r-56,206v-12,43,-25,50,-65,48r0,-18v32,7,41,-17,48,-43xm78,-266r26,0r-36,51r-17,0","w":133,"k":{",":20,".":20}},"\u00ff":{"d":"58,2r-55,-193r23,0r43,165r39,-165r23,0r-56,206v-12,43,-25,50,-65,48r0,-18v32,7,41,-17,48,-43xm29,-222r0,-37r21,0r0,37r-21,0xm83,-222r0,-37r21,0r0,37r-21,0","w":133,"k":{",":20,".":20}},"\u017e":{"d":"6,0r0,-18r91,-155r-86,0r0,-18r109,0r0,18r-90,155r90,0r0,18r-114,0xm18,-266r21,0r24,37r24,-37r22,0r-35,51r-22,0","w":126},"\u2206":{"d":"11,0r0,-15r79,-241r23,0r78,241r0,15r-180,0xm31,-17r139,0r-70,-212","w":201},"\u2126":{"d":"17,-18v15,-1,34,2,47,-1v-23,-24,-43,-64,-43,-115v0,-73,40,-120,92,-120v54,0,90,52,90,118v0,54,-23,94,-44,118r48,0r0,18r-73,0r0,-13v25,-21,49,-63,49,-118v0,-47,-23,-105,-70,-105v-44,0,-72,46,-72,105v0,52,24,99,48,118r0,13r-72,0r0,-18","w":223},"\u03bc":{"d":"21,63r0,-254r21,0r0,134v0,31,11,43,34,43v64,0,35,-114,41,-177r22,0r0,191r-19,0v-1,-8,2,-21,-1,-27v-14,30,-51,39,-77,23r0,67r-21,0","w":159},"\u03c0":{"d":"167,-167r-25,0v1,50,-4,130,5,167r-20,0v-9,-34,-3,-119,-5,-167r-59,0v-2,49,-12,133,-24,167r-20,0v13,-38,23,-116,24,-167v-21,0,-29,1,-35,4r-4,-14v36,-16,115,-5,166,-8","w":176},"\u20ac":{"d":"172,-239r-9,19v-16,-10,-29,-17,-48,-17v-44,0,-55,39,-59,75r92,0r-6,19r-88,0r0,23r82,0r-6,20r-76,0v3,39,12,86,61,86v21,0,34,-10,49,-23r0,27v-16,11,-30,14,-50,14v-65,0,-80,-48,-84,-104r-25,0r7,-20r17,0r1,-23r-25,0r7,-19r19,0v6,-51,27,-94,85,-94v21,0,38,7,56,17","w":172},"\u2113":{"d":"134,-46r10,8v-13,25,-32,41,-57,41v-38,0,-51,-33,-51,-75v-6,5,-13,10,-19,16r-7,-12r26,-25r0,-99v0,-64,24,-83,46,-83v25,0,38,23,38,55v0,45,-26,89,-65,131v-3,45,12,75,36,75v20,0,35,-17,43,-32xm82,-259v-32,0,-28,103,-27,148v28,-34,51,-71,51,-109v0,-24,-7,-39,-24,-39","w":151},"\u212e":{"d":"300,-122r-235,2v2,26,-4,58,3,79v45,52,139,49,181,-5r21,0v-26,30,-68,50,-114,50v-79,0,-144,-57,-144,-129v0,-72,65,-130,144,-130v81,1,145,58,144,133xm247,-202v-35,-58,-136,-58,-179,-7v-6,20,-5,58,-1,80r180,-2r0,-71","w":312},"\u2202":{"d":"32,-246r-7,-15v63,-44,130,-9,129,115v0,89,-28,149,-81,149v-39,0,-59,-37,-59,-81v0,-56,33,-92,68,-92v28,0,47,21,52,32v8,-88,-43,-157,-102,-108xm75,-15v31,0,53,-45,57,-99v-5,-17,-22,-39,-47,-39v-27,0,-51,33,-51,74v0,39,16,64,41,64","w":170},"\u220f":{"d":"209,-231r-34,0r0,266r-20,0r0,-266r-93,0r0,266r-19,0r0,-266r-34,0r0,-19r200,0r0,19","w":217},"\u2211":{"d":"167,35r-159,0r0,-15r87,-127r-83,-128r0,-15r149,0r0,18r-122,1r79,121r-85,125r134,0r0,20","w":174},"\u2219":{"d":"23,-118v0,-11,9,-20,20,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-20,-9,-20,-20","w":86},"\u221a":{"d":"180,-297r-70,352r-19,0r-52,-169r-24,8r-4,-13r42,-16r42,135v2,9,4,20,5,26r65,-323r15,0","w":181},"\u221e":{"d":"238,-104v0,31,-24,51,-50,51v-21,0,-38,-13,-61,-39v-17,19,-35,39,-62,39v-27,0,-48,-22,-48,-50v0,-29,20,-51,50,-51v25,0,45,19,62,40v18,-20,34,-40,61,-40v28,0,48,21,48,50xm67,-67v22,0,39,-21,53,-36v-15,-18,-31,-38,-55,-38v-21,0,-33,18,-33,38v0,20,14,36,35,36xm189,-141v-23,0,-41,25,-53,37v22,24,35,37,53,37v21,0,34,-18,34,-36v0,-24,-15,-38,-34,-38","w":254},"\u222b":{"d":"46,-217v0,-61,14,-96,62,-83r-4,15v-36,-9,-39,21,-39,70v0,55,4,126,4,183v0,65,-15,96,-64,83r4,-15v37,8,41,-15,41,-68v0,-57,-4,-130,-4,-185","w":113},"\u2248":{"d":"58,-148v41,0,74,52,98,0r9,7v-8,17,-21,32,-41,32v-22,0,-45,-26,-68,-26v-15,0,-24,11,-32,25r-9,-7v9,-20,25,-31,43,-31xm58,-94v41,0,74,52,98,0r9,7v-8,17,-21,32,-41,32v-21,0,-45,-25,-67,-26v-15,0,-25,13,-33,26r-9,-8v9,-20,25,-31,43,-31","w":180},"\u2260":{"d":"127,-172r-15,32r51,0r0,14r-56,0r-22,49r78,0r0,14r-84,0r-17,38r-12,-5r15,-33r-48,0r0,-14r54,0r22,-49r-76,0r0,-14r82,0r17,-37","w":180},"\u2264":{"d":"162,-38r-144,-76r0,-14r144,-76r0,18r-128,65r128,65r0,18xm163,-9r-146,0r0,-15r146,0r0,15","w":180},"\u2265":{"d":"19,-204r144,76r0,14r-144,76r0,-18r128,-65r-128,-65r0,-18xm163,-9r-146,0r0,-15r146,0r0,15","w":180},"\u25ca":{"d":"164,-125r-65,139r-17,0r-64,-139r65,-139r17,0xm145,-124r-55,-121v-13,43,-36,80,-53,120v17,40,40,76,53,120","w":182},"\u00a0":{"w":86},"\u00ad":{"d":"21,-112r78,0r0,19r-78,0r0,-19","w":119},"\u02c9":{"d":"-9,-233r0,-15r85,0r0,15r-85,0"},"\u03a9":{"d":"17,-18v15,-1,34,2,47,-1v-23,-24,-43,-64,-43,-115v0,-73,40,-120,92,-120v54,0,90,52,90,118v0,54,-23,94,-44,118r48,0r0,18r-73,0r0,-13v25,-21,49,-63,49,-118v0,-47,-23,-105,-70,-105v-44,0,-72,46,-72,105v0,52,24,99,48,118r0,13r-72,0r0,-18","w":223},"\u2215":{"d":"-60,11r162,-272r18,0r-162,272r-18,0","w":60},"\u2010":{"d":"21,-112r78,0r0,19r-78,0r0,-19","w":119}}});
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * © 1990, 2002 Adobe Systems Incorporated. All rights reserved.
 * 
 * Trademark:
 * Helvetica is a trademark of Linotype Corp. registered in the U.S. Patent and
 * Trademark Office and may be registered in certain other jurisdictions in the
 * name of Linotype Corp. or its licensee Linotype GmbH.
 * 
 * Full name:
 * HelveticaNeueLTStd-Cn
 * 
 * Designer:
 * Linotype Staff
 * 
 * Vendor URL:
 * http://www.adobe.com/type
 * 
 * License information:
 * http://www.adobe.com/type/legal.html
 */
Cufon.registerFont({"w":166,"face":{"font-family":"HelveticaCn","font-weight":400,"font-stretch":"condensed","units-per-em":"360","panose-1":"2 11 5 6 3 5 2 3 2 4","ascent":"257","descent":"-103","x-height":"5","bbox":"-59 -336 360 76.2302","underline-thickness":"18","underline-position":"-18","stemh":"24","stemv":"30","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":86,"k":{"\u201c":13,"\u2018":13,"T":13,"V":13,"W":13,"Y":13,"\u00dd":13,"\u0178":13,"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13}},"!":{"d":"36,-67r-6,-190r33,0r-6,190r-21,0xm30,0r0,-35r33,0r0,35r-33,0","w":92},"\"":{"d":"31,-166r0,-91r24,0r0,91r-24,0xm91,-166r0,-91r24,0r0,91r-24,0","w":146},"#":{"d":"28,0r10,-74r-30,0r0,-24r33,0r7,-55r-32,0r0,-24r35,0r9,-73r24,0r-9,73r38,0r9,-73r23,0r-9,73r29,0r0,24r-32,0r-7,55r30,0r0,24r-33,0r-9,74r-24,0r10,-74r-38,0r-10,74r-24,0xm71,-153r-7,55r39,0r6,-55r-38,0","w":172},"$":{"d":"93,-110r0,89v22,-2,39,-18,39,-43v0,-27,-17,-38,-39,-46xm78,-146r0,-83v-22,3,-34,17,-34,40v0,24,15,35,34,43xm78,-255r0,-21r15,0r0,21v44,2,64,26,65,70r-32,0v0,-24,-8,-41,-33,-44r0,88v33,11,72,20,72,72v0,54,-37,72,-72,74r0,34r-15,0r0,-34v-54,-2,-70,-32,-70,-83r31,0v0,26,2,53,39,57r0,-94v-32,-10,-67,-22,-67,-71v0,-23,9,-65,67,-69","w":172},"%":{"d":"64,-136v20,0,21,-20,21,-50v0,-30,-1,-49,-21,-49v-20,0,-22,19,-22,49v0,30,2,50,22,50xm67,5r112,-260r25,0r-112,260r-25,0xm210,-14v20,0,21,-20,21,-50v0,-30,-1,-50,-21,-50v-20,0,-22,20,-22,50v0,30,2,50,22,50xm64,-117v-43,0,-47,-33,-47,-69v0,-36,4,-69,47,-69v43,0,47,33,47,69v0,36,-4,69,-47,69xm210,5v-43,0,-48,-33,-48,-69v0,-36,5,-69,48,-69v43,0,47,33,47,69v0,36,-4,69,-47,69","w":273},"&":{"d":"80,-172v4,8,8,10,13,2v24,-13,36,-63,-3,-63v-35,0,-29,42,-10,61xm134,-46r-57,-81v-21,12,-36,31,-36,58v0,56,70,60,93,23xm99,-144r51,73v5,-13,8,-27,10,-50r28,0v0,19,-11,62,-21,75r33,46r-34,0r-17,-24v-20,19,-36,29,-64,29v-63,0,-76,-48,-76,-71v-1,-37,28,-64,54,-81v-10,-18,-27,-36,-27,-60v0,-30,24,-50,53,-50v32,0,55,14,55,49v0,30,-26,47,-45,64","w":200},"\u2019":{"d":"27,-219r0,-38r33,0v-1,42,8,79,-33,91r0,-17v16,-7,15,-17,15,-36r-15,0","w":86,"k":{"\u2019":30,"s":20,"\u0161":20}},"(":{"d":"68,-257r17,0v-54,98,-51,225,0,323r-17,0v-70,-93,-70,-229,0,-323","w":86},")":{"d":"19,66r-18,0v56,-98,52,-225,0,-323r18,0v69,93,69,229,0,323","w":86},"*":{"d":"53,-214r0,-43r21,0r0,43r39,-15r8,21r-41,12r27,34r-18,13r-26,-36r-26,36r-18,-13r28,-34r-41,-12r8,-21","w":126},"+":{"d":"96,0r0,-79r-79,0r0,-24r79,0r0,-79r24,0r0,79r79,0r0,24r-79,0r0,79r-24,0","w":216},",":{"d":"27,0r0,-38r33,0v-1,42,8,79,-33,91r0,-17v16,-7,15,-17,15,-36r-15,0","w":86,"k":{"\u201d":13,"\u2019":13," ":13}},"-":{"d":"19,-88r0,-28r88,0r0,28r-88,0","w":126},".":{"d":"27,0r0,-38r33,0r0,38r-33,0","w":86,"k":{" ":13}},"\/":{"d":"-4,5r84,-267r24,0r-84,267r-24,0","w":100},"0":{"d":"86,5v-69,0,-72,-69,-72,-129v0,-56,3,-131,72,-131v69,0,73,68,73,131v0,54,-4,129,-73,129xm45,-124v0,54,2,105,41,105v39,0,41,-51,41,-105v0,-56,-2,-107,-41,-107v-39,0,-41,51,-41,107","w":172},"1":{"d":"24,-192r0,-21v32,-2,62,-6,63,-42r22,0r0,255r-31,0r0,-192r-54,0","w":172},"2":{"d":"158,-28r0,28r-143,0v0,-61,41,-93,76,-122v21,-18,34,-33,34,-61v0,-22,-10,-46,-37,-46v-39,0,-40,41,-40,55r-32,0v0,-48,20,-81,72,-81v59,0,69,46,69,68v3,80,-91,94,-109,159r110,0","w":172},"3":{"d":"65,-120r0,-24v36,4,56,-13,55,-45v0,-23,-10,-42,-34,-42v-33,0,-36,31,-36,50r-32,0v0,-44,21,-74,68,-74v53,0,65,38,65,66v1,27,-14,48,-39,56v29,6,47,24,47,59v0,46,-24,79,-73,79v-69,0,-72,-58,-72,-74r32,0v0,23,11,50,40,50v19,0,41,-9,41,-52v1,-36,-21,-53,-62,-49","w":172},"4":{"d":"103,-205v-24,37,-43,79,-65,118r65,0r0,-118xm11,-90r92,-165r30,0r0,168r29,0r0,25r-29,0r0,62r-30,0r0,-62r-92,0r0,-28","w":172},"5":{"d":"21,-119r14,-131r114,0r0,28r-90,0v-2,24,-9,52,-9,75v43,-42,108,-11,108,65v0,48,-21,87,-74,87v-60,0,-70,-50,-70,-71r32,0v0,13,5,47,39,47v36,0,42,-40,42,-66v0,-28,-11,-58,-43,-58v-22,0,-36,19,-36,25","w":172},"6":{"d":"154,-194r-31,0v0,-21,-12,-37,-34,-37v-49,0,-47,66,-44,97v5,-9,21,-29,49,-29v44,0,66,33,66,81v0,49,-24,87,-72,87v-71,0,-75,-68,-75,-121v0,-58,3,-139,77,-139v59,0,64,49,64,61xm48,-78v0,27,8,59,40,59v32,0,41,-32,41,-59v0,-27,-7,-59,-41,-59v-34,0,-40,32,-40,59","w":172},"7":{"d":"159,-224v-36,48,-78,136,-85,224r-35,0v12,-86,46,-163,91,-222r-116,0r0,-28r145,0r0,26","w":172},"8":{"d":"86,5v-93,0,-95,-121,-28,-141v-63,-19,-41,-127,28,-119v69,-8,92,100,28,119v67,21,64,141,-28,141xm86,-231v-23,0,-33,18,-33,42v0,24,10,41,33,41v23,0,34,-17,34,-41v0,-24,-11,-42,-34,-42xm45,-71v0,30,11,52,41,52v30,0,42,-22,42,-52v0,-30,-12,-53,-42,-53v-30,0,-41,23,-41,53","w":172},"9":{"d":"18,-56r32,0v0,21,12,37,34,37v49,0,47,-66,44,-97v-5,9,-21,29,-49,29v-44,0,-66,-33,-66,-81v0,-49,24,-87,72,-87v71,0,75,68,75,121v0,58,-3,139,-77,139v-59,0,-65,-49,-65,-61xm125,-172v0,-27,-8,-59,-40,-59v-32,0,-41,32,-41,59v0,27,7,59,41,59v34,0,40,-32,40,-59","w":172},":":{"d":"27,-144r0,-38r33,0r0,38r-33,0xm27,0r0,-38r33,0r0,38r-33,0","w":86,"k":{" ":13}},";":{"d":"27,0r0,-38r33,0v-1,42,8,79,-33,91r0,-17v16,-7,15,-17,15,-36r-15,0xm27,-144r0,-38r33,0r0,38r-33,0","w":86},"<":{"d":"17,-80r0,-22r182,-83r0,24r-154,70r154,70r0,24","w":216},"=":{"d":"17,-116r0,-24r182,0r0,24r-182,0xm17,-42r0,-24r182,0r0,24r-182,0","w":216},">":{"d":"17,3r0,-24r154,-70r-154,-70r0,-24r182,83r0,22","w":216},"?":{"d":"62,-67v-9,-63,55,-72,54,-127v0,-21,-12,-40,-35,-40v-35,0,-38,35,-38,53r-30,0v0,-42,21,-79,67,-79v43,0,67,29,67,68v0,55,-62,69,-57,125r-28,0xm59,0r0,-35r34,0r0,35r-34,0","w":159},"@":{"d":"86,-105v0,20,15,34,34,34v33,0,56,-49,56,-76v0,-16,-11,-36,-29,-36v-35,0,-61,45,-61,78xm188,-175v5,-6,5,-16,9,-23r20,0r-34,118v0,5,4,9,11,9v33,0,60,-38,60,-78v0,-54,-48,-91,-110,-91v-62,0,-110,48,-110,111v0,64,48,112,110,112v44,0,79,-14,98,-40r22,0v-23,40,-65,62,-120,62v-74,0,-134,-60,-134,-134v0,-74,60,-133,134,-133v78,0,134,46,134,111v0,62,-51,102,-93,102v-14,0,-24,-7,-26,-22v-26,37,-96,24,-96,-32v0,-50,33,-102,84,-102v18,0,33,8,41,30","w":288},"A":{"d":"-3,0r74,-257r43,0r69,257r-33,0r-19,-71r-82,0r-19,71r-33,0xm92,-221v-15,39,-23,84,-36,125r69,0","w":180,"k":{"p":-4,"Q":-4,"T":20,"V":7,"W":7,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"B":{"d":"53,-122r0,96r43,0v33,0,45,-22,45,-47v-1,-50,-40,-51,-88,-49xm21,0r0,-257v72,2,143,-17,145,66v1,24,-17,45,-38,54v32,8,46,32,46,64v0,79,-75,75,-153,73xm53,-231r0,85v42,-2,72,13,79,-43v5,-41,-36,-45,-79,-42","w":186},"C":{"d":"145,-88r33,0v-3,49,-22,93,-78,93v-73,0,-83,-69,-83,-134v0,-65,12,-133,83,-133v53,0,75,30,76,80r-33,0v-1,-29,-10,-54,-43,-54v-44,0,-50,48,-50,107v0,59,6,108,50,108v39,0,44,-36,45,-67","w":186},"D":{"d":"56,-231r0,205r33,0v55,0,61,-56,61,-102v0,-50,-3,-103,-61,-103r-33,0xm24,0r0,-257r69,0v80,0,90,57,90,128v0,65,-16,129,-87,129r-72,0","w":200,"k":{"Y":7,"\u00dd":7,"\u0178":7}},"E":{"d":"21,0r0,-257r133,0r0,28r-101,0r0,81r95,0r0,28r-95,0r0,92r105,0r0,28r-137,0"},"F":{"d":"21,0r0,-257r133,0r0,28r-101,0r0,81r95,0r0,28r-95,0r0,120r-32,0","w":159,"k":{"\u00eb":9,"\u00e3":7,"\u00e0":7,"\u00e4":7,"a":7,"\u00e6":7,"\u00e1":7,"\u00e2":7,"\u00e5":7,"A":19,"\u00c6":19,"\u00c1":19,"\u00c2":19,"\u00c4":19,"\u00c0":19,"\u00c5":19,"\u00c3":19,"e":9,"\u00e9":9,"\u00ea":9,"\u00e8":9,"i":6,"\u00ed":6,"\u00ee":6,"\u00ef":6,"\u00ec":6,"o":7,"\u00f8":7,"\u0153":7,"\u00f3":7,"\u00f4":7,"\u00f6":7,"\u00f2":7,"\u00f5":7,"r":7,",":40,".":40}},"G":{"d":"176,-186r-33,0v-1,-27,-12,-50,-43,-50v-44,0,-50,48,-50,107v0,59,6,108,50,108v44,0,47,-53,47,-87r-51,0r0,-26r80,0r0,134r-24,0r0,-35v-7,22,-28,40,-56,40v-67,0,-79,-65,-79,-134v0,-65,12,-133,83,-133v74,0,76,63,76,76","w":193},"H":{"d":"172,-257r0,257r-31,0r0,-124r-88,0r0,124r-32,0r0,-257r32,0r0,105r88,0r0,-105r31,0","w":193},"I":{"d":"21,0r0,-257r32,0r0,257r-32,0","w":73},"J":{"d":"132,-257r0,183v0,46,-11,79,-64,79v-51,0,-63,-34,-60,-80r30,0v-2,29,2,55,30,54v29,0,33,-19,33,-54r0,-182r31,0","w":153},"K":{"d":"21,0r0,-257r32,0r0,125r89,-125r35,0r-77,107r84,150r-35,0r-70,-124r-26,37r0,87r-32,0","w":180,"k":{"y":4,"\u00fd":4,"\u00ff":4,"o":7,"\u00f8":7,"\u0153":7,"\u00f3":7,"\u00f4":7,"\u00f6":7,"\u00f2":7,"\u00f5":7,"u":7,"\u00fa":7,"\u00fb":7,"\u00fc":7,"\u00f9":7}},"L":{"d":"21,0r0,-257r32,0r0,229r104,0r0,28r-136,0","w":159,"k":{"T":34,"V":27,"W":27,"Y":33,"\u00dd":33,"\u0178":33,"\u201d":33,"\u2019":33,"y":13,"\u00fd":13,"\u00ff":13}},"M":{"d":"22,0r0,-257r53,0r52,204r52,-204r53,0r0,257r-32,0r-1,-225r-56,225r-32,0r-58,-225r0,225r-31,0","w":253},"N":{"d":"21,0r0,-257r41,0r86,215r0,-215r31,0r0,257r-43,0r-83,-208r0,208r-32,0","w":200},"O":{"d":"100,-262v71,0,83,68,83,133v0,65,-12,134,-83,134v-71,0,-83,-69,-83,-134v0,-65,12,-133,83,-133xm100,-236v-44,0,-50,48,-50,107v0,59,6,108,50,108v44,0,50,-49,50,-108v0,-59,-6,-107,-50,-107","w":200,"k":{"Y":9,"\u00dd":9,"\u0178":9,"X":9}},"P":{"d":"21,0r0,-257r65,0v22,0,80,0,80,74v0,63,-47,80,-113,74r0,109r-32,0xm53,-231r0,96v46,2,78,1,80,-50v2,-42,-35,-50,-80,-46","w":173,"k":{"\u00e4":6,"a":6,"\u00e6":6,"\u00e1":6,"\u00e2":6,"\u00e0":6,"\u00e5":6,"\u00e3":6,"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13,"e":6,"\u00e9":6,"\u00ea":6,"\u00eb":6,"\u00e8":6,"o":6,"\u00f8":6,"\u0153":6,"\u00f3":6,"\u00f4":6,"\u00f6":6,"\u00f2":6,"\u00f5":6,",":46,".":46}},"Q":{"d":"170,15r-26,-23v-11,8,-26,13,-44,13v-71,0,-83,-69,-83,-134v0,-65,12,-133,83,-133v71,0,83,68,83,133v0,37,-4,76,-21,102r26,24xm123,-27r-24,-22r17,-20r24,22v15,-51,26,-189,-40,-189v-44,0,-50,48,-50,107v0,69,15,127,73,102","w":200},"R":{"d":"21,0r0,-257v71,-1,149,-10,149,64v0,29,-12,57,-40,66v57,-1,24,105,53,127r-39,0v-10,-15,-7,-52,-10,-77v-6,-53,-39,-33,-81,-37r0,114r-32,0xm53,-231r0,91v45,-3,78,14,84,-50v3,-39,-41,-44,-84,-41","w":186,"k":{"T":6,"W":-7,"Y":6,"\u00dd":6,"\u0178":6,"U":-7,"\u00da":-7,"\u00db":-7,"\u00dc":-7,"\u00d9":-7}},"S":{"d":"162,-190r-32,0v0,-27,-10,-46,-40,-46v-27,0,-42,15,-42,42v0,72,121,29,121,123v0,59,-44,76,-80,76v-60,0,-78,-31,-78,-86r32,0v0,29,2,60,48,60v25,0,45,-18,45,-45v0,-73,-122,-31,-122,-125v0,-24,11,-71,76,-71v49,0,71,25,72,72","w":180},"T":{"d":"99,-229r0,229r-32,0r0,-229r-64,0r0,-28r161,0r0,28r-65,0","k":{"\u00fc":27,"\u00f2":27,"\u00f6":27,"\u00ec":6,"\u00ee":6,"\u00ed":6,"\u00e8":27,"\u00eb":27,"\u00ea":27,"\u00e3":27,"\u00e5":27,"\u00e0":27,"\u00e4":27,"\u00e2":27,"w":27,"y":20,"\u00fd":20,"\u00ff":20,"a":27,"\u00e6":27,"\u00e1":27,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,"e":27,"\u00e9":27,"i":6,"\u00ef":6,"o":27,"\u00f8":27,"\u0153":27,"\u00f3":27,"\u00f4":27,"\u00f5":27,"r":27,",":33,".":33,"u":27,"\u00fa":27,"\u00fb":27,"\u00f9":27,"-":20,":":27,";":27}},"U":{"d":"18,-76r0,-181r32,0r0,181v0,38,12,55,43,55v34,0,44,-19,44,-55r0,-181r32,0r0,181v0,49,-26,81,-76,81v-51,0,-75,-28,-75,-81","w":186},"V":{"d":"62,0r-63,-257r33,0r52,221r50,-221r33,0r-65,257r-40,0","k":{"\u00f6":6,"\u00f4":6,"\u00e8":6,"\u00eb":6,"\u00ea":6,"\u00e3":6,"\u00e5":6,"\u00e0":6,"\u00e4":6,"\u00e2":6,"a":6,"\u00e6":6,"\u00e1":6,"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13,"e":6,"\u00e9":6,"o":6,"\u00f8":6,"\u0153":6,"\u00f3":6,"\u00f2":6,"\u00f5":6,",":33,".":33,"u":6,"\u00fa":6,"\u00fb":6,"\u00fc":6,"\u00f9":6,"-":6,":":6,";":6}},"W":{"d":"54,0r-51,-257r32,0r40,210r36,-210r38,0r37,210r39,-210r32,0r-53,257r-38,0r-36,-208r-37,208r-39,0","w":259,"k":{"\u00f6":6,"\u00ea":6,"\u00e4":6,"a":6,"\u00e6":6,"\u00e1":6,"\u00e2":6,"\u00e0":6,"\u00e5":6,"\u00e3":6,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,"e":6,"\u00e9":6,"\u00eb":6,"\u00e8":6,"o":6,"\u00f8":6,"\u0153":6,"\u00f3":6,"\u00f4":6,"\u00f2":6,"\u00f5":6,",":27,".":27,"-":6}},"X":{"d":"69,-131r-63,-126r35,0r47,96r47,-96r33,0r-64,126r68,131r-35,0r-51,-103r-52,103r-33,0","w":173},"Y":{"d":"67,-101r-68,-156r35,0r49,120r51,-120r33,0r-68,156r0,101r-32,0r0,-101","k":{"\u00fc":22,"\u00f6":27,"a":27,"\u00e6":27,"\u00e1":27,"\u00e2":27,"\u00e4":27,"\u00e0":27,"\u00e5":27,"\u00e3":27,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,"e":27,"\u00e9":27,"\u00ea":27,"\u00eb":27,"\u00e8":27,"i":11,"\u00ed":11,"\u00ee":11,"\u00ef":11,"\u00ec":11,"o":27,"\u00f8":27,"\u0153":27,"\u00f3":27,"\u00f4":27,"\u00f2":27,"\u00f5":27,",":40,".":40,"u":22,"\u00fa":22,"\u00fb":22,"\u00f9":22,"-":27,":":13,";":13}},"Z":{"d":"8,0r0,-27r116,-202r-109,0r0,-28r142,0r0,29r-116,200r117,0r0,28r-150,0"},"[":{"d":"28,66r0,-323r65,0r0,24r-37,0r0,275r37,0r0,24r-65,0","w":93},"\\":{"d":"80,5r-84,-267r24,0r84,267r-24,0","w":100},"]":{"d":"65,-257r0,323r-64,0r0,-24r36,0r0,-275r-36,0r0,-24r64,0","w":93},"^":{"d":"17,-94r82,-156r18,0r82,156r-24,0r-67,-130r-67,130r-24,0","w":216},"_":{"d":"0,45r0,-18r180,0r0,18r-180,0","w":180},"\u2018":{"d":"60,-204r0,38r-33,0v1,-42,-8,-79,33,-91r0,17v-15,7,-16,17,-16,36r16,0","w":86,"k":{"\u2018":30}},"a":{"d":"45,-136v-7,3,-21,0,-30,1v0,-44,19,-63,65,-63v59,0,59,35,59,55r0,108v-3,12,7,20,16,14r0,21v-19,3,-43,7,-46,-23v-23,46,-99,33,-99,-28v0,-46,41,-57,77,-66v39,-10,25,-57,-9,-57v-33,0,-33,31,-33,38xm108,-105v-19,21,-66,11,-66,53v0,19,6,33,27,33v40,0,42,-43,39,-86","w":159},"b":{"d":"48,-96v0,40,7,75,39,75v28,0,35,-31,35,-75v0,-46,-7,-76,-35,-76v-32,0,-39,39,-39,76xm20,0r0,-257r30,0r1,86v7,-17,25,-27,44,-27v52,0,59,62,59,102v0,54,-18,101,-63,101v-21,0,-38,-15,-42,-29r0,24r-29,0"},"c":{"d":"142,-134r-30,0v0,-19,-8,-40,-31,-40v-19,0,-38,9,-38,80v0,25,1,75,37,75v26,0,32,-27,32,-48r30,0v0,31,-16,72,-64,72v-47,0,-66,-33,-66,-99v0,-48,9,-104,68,-104v53,0,62,42,62,64","w":153,"k":{"l":7,"\u0142":7,"y":7,"\u00fd":7,"\u00ff":7}},"d":{"d":"44,-96v0,46,8,75,36,75v33,0,38,-31,38,-75v0,-37,-6,-76,-38,-76v-28,0,-36,30,-36,76xm147,-257r0,257r-29,0v-1,-7,2,-18,-1,-24v-4,14,-20,29,-41,29v-46,0,-63,-40,-63,-101v0,-40,6,-102,60,-102v18,-1,35,12,44,27r0,-86r30,0","k":{"y":-4,"\u00fd":-4,"\u00ff":-4}},"e":{"d":"46,-117r69,0v1,-28,-3,-57,-34,-57v-35,0,-35,38,-35,57xm147,-93r-102,0v0,30,0,74,37,74v29,0,33,-30,33,-44r30,0v0,21,-12,68,-65,68v-47,0,-67,-33,-67,-99v0,-48,10,-104,69,-104v64,0,65,56,65,105","w":159},"f":{"d":"29,0r0,-169r-28,0r0,-24r28,0v-5,-49,12,-74,64,-67r0,26v-18,-1,-34,-1,-34,18r0,23r33,0r0,24r-33,0r0,169r-30,0","w":93,"k":{"\u201d":-6,"\u2019":-6}},"g":{"d":"80,-172v-28,0,-36,30,-36,76v0,31,5,70,35,70v33,0,39,-30,39,-70v0,-37,-6,-76,-38,-76xm147,-193r0,181v0,58,-27,78,-66,78v-12,0,-58,0,-63,-48r30,0v1,18,15,24,31,24v50,0,38,-36,37,-68v-6,16,-25,26,-44,26v-56,0,-59,-70,-59,-96v0,-52,14,-102,63,-102v22,-1,36,17,42,30r0,-25r29,0","k":{"y":-4,"\u00fd":-4,"\u00ff":-4}},"h":{"d":"20,0r0,-257r30,0r1,86v8,-16,29,-27,46,-27v50,0,50,38,50,61r0,137r-30,0r0,-133v0,-15,-2,-39,-29,-39v-16,0,-38,11,-38,39r0,133r-30,0"},"i":{"d":"22,0r0,-193r30,0r0,193r-30,0xm22,-222r0,-35r30,0r0,35r-30,0","w":73},"j":{"d":"52,-193r0,212v2,37,-22,51,-60,46r0,-26v23,5,30,-7,30,-31r0,-201r30,0xm52,-257r0,35r-30,0r0,-35r30,0","w":73},"k":{"d":"95,-120r69,120r-35,0r-54,-95r-25,30r0,65r-30,0r0,-257r30,0r1,153r67,-89r36,0","w":159},"l":{"d":"22,0r0,-257r30,0r0,257r-30,0","w":73,"k":{"w":-4}},"m":{"d":"23,0r0,-193r28,0v1,7,-2,18,1,23v15,-35,80,-41,89,3v9,-17,25,-31,45,-31v51,0,51,38,51,61r0,137r-30,0r0,-133v0,-15,-1,-39,-26,-39v-14,0,-36,9,-36,39r0,133r-30,0r0,-133v0,-15,-1,-39,-26,-39v-14,0,-36,9,-36,39r0,133r-30,0","w":259},"n":{"d":"20,0r0,-193r29,0r0,23v8,-18,28,-28,47,-28v51,0,51,38,51,61r0,137r-30,0r0,-133v0,-15,-2,-39,-29,-39v-16,0,-38,11,-38,39r0,133r-30,0","k":{"y":-4,"\u00fd":-4,"\u00ff":-4}},"o":{"d":"10,-96v0,-54,15,-102,70,-102v56,0,69,48,69,102v0,54,-14,101,-69,101v-56,0,-70,-47,-70,-101xm79,-19v32,0,39,-35,39,-77v0,-42,-7,-78,-39,-78v-31,0,-37,36,-37,78v0,42,6,77,37,77","w":159,"k":{"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4}},"p":{"d":"48,-96v0,37,7,75,39,75v28,0,35,-29,35,-79v0,-42,-7,-72,-35,-72v-33,0,-39,32,-39,76xm20,63r0,-256r29,0r0,24v4,-14,21,-29,42,-29v46,0,63,41,63,98v0,44,-13,105,-63,105v-18,1,-32,-12,-41,-27r0,85r-30,0"},"q":{"d":"118,-96v0,-44,-5,-76,-38,-76v-28,0,-36,30,-36,72v0,50,8,79,36,79v32,0,38,-38,38,-75xm117,63r-1,-85v-7,17,-23,27,-40,27v-50,0,-63,-52,-63,-105v0,-57,17,-98,63,-98v22,-1,36,17,42,29r0,-24r29,0r0,256r-30,0"},"r":{"d":"20,0r0,-193r30,0v1,9,-2,22,1,29v10,-22,27,-40,55,-32r0,30v-26,-7,-56,5,-56,44r0,122r-30,0","w":106,"k":{"v":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,",":27,".":27,"-":13}},"s":{"d":"107,-51v0,-56,-94,-21,-94,-94v0,-36,28,-53,61,-53v56,0,59,39,59,62r-30,0v0,-24,-7,-38,-29,-38v-10,0,-31,2,-31,29v0,50,95,21,95,90v0,41,-27,60,-63,60v-66,0,-66,-48,-66,-68r30,0v0,23,6,44,36,44v10,0,32,-5,32,-32","w":146,"k":{"w":-4}},"t":{"d":"29,-193r0,-56r30,0r0,56r34,0r0,24r-34,0r0,124v-3,21,16,23,33,20r0,25v-29,6,-72,-1,-63,-36r0,-133r-28,0r0,-24r28,0","w":93},"u":{"d":"147,-193r0,193r-29,0v-1,-7,2,-18,-1,-23v-8,18,-27,28,-46,28v-51,0,-51,-38,-51,-61r0,-137r30,0r0,133v0,15,1,39,28,39v16,0,39,-11,39,-39r0,-133r30,0"},"v":{"d":"56,0r-52,-193r33,0r36,155r36,-155r34,0r-53,193r-34,0","w":146,"k":{",":20,".":20}},"w":{"d":"49,0r-45,-193r31,0r32,158r33,-158r35,0r33,158r30,-158r32,0r-46,193r-33,0r-35,-158r-32,158r-35,0","w":233,"k":{",":13,".":13}},"x":{"d":"55,-100r-49,-93r33,0r35,69r35,-69r33,0r-50,93r52,100r-33,0r-39,-76r-37,76r-33,0","w":146},"y":{"d":"60,4r-56,-197r33,0r39,155r33,-155r34,0r-56,206v-4,35,-31,57,-74,49r0,-23v28,7,45,-11,47,-35","w":146,"k":{"a":-4,"\u00e6":-4,"\u00e1":-4,"\u00e2":-4,"\u00e4":-4,"\u00e0":-4,"\u00e5":-4,"\u00e3":-4,",":20,".":20}},"z":{"d":"14,-167r0,-26r116,0r0,25r-86,142r86,0r0,26r-120,0r0,-24r87,-143r-83,0","w":140},"{":{"d":"1,-85r0,-21v57,-1,-6,-160,66,-151r26,0r0,24v-53,-11,-37,46,-37,91v0,37,-25,43,-32,47v8,1,32,11,32,46r0,62v-4,22,12,33,37,29r0,24v-40,1,-63,1,-65,-47v-1,-39,9,-104,-27,-104","w":93},"|":{"d":"28,5r0,-267r24,0r0,267r-24,0","w":79},"}":{"d":"93,-106r0,21v-58,0,5,160,-67,151r-25,0r0,-24v52,10,36,-47,36,-91v0,-37,25,-43,32,-47v-8,-1,-32,-11,-32,-46r0,-62v4,-21,-11,-33,-36,-29r0,-24v39,-1,62,-1,64,47v1,40,-8,104,28,104","w":93},"~":{"d":"147,-66v-25,0,-54,-27,-76,-27v-17,0,-30,16,-36,26r-15,-16v11,-15,26,-34,49,-34v25,0,53,28,76,28v17,0,30,-17,36,-27r15,17v-11,15,-26,33,-49,33","w":216},"\u00a1":{"d":"57,-127r6,190r-33,0r6,-190r21,0xm63,-194r0,35r-33,0r0,-35r33,0","w":92},"\u00a2":{"d":"82,-19r0,-155v-15,4,-29,20,-29,80v0,24,1,69,29,75xm82,36r0,-31v-42,-3,-61,-35,-61,-99v0,-46,9,-99,61,-104r0,-25r15,0r0,25v46,3,55,42,55,64r-31,0v0,-18,-6,-37,-24,-40r0,155v20,-5,24,-28,24,-48r31,0v0,30,-14,68,-55,72r0,31r-15,0","w":172},"\u00a3":{"d":"37,-24v40,-22,79,20,116,-13r13,24v-15,10,-32,18,-50,18v-35,0,-65,-27,-95,-3r-14,-23v28,-20,58,-55,37,-95r-34,0r0,-22r25,0v-8,-14,-18,-34,-18,-52v0,-41,33,-65,73,-65v42,0,71,23,71,73r-30,0v0,-27,-10,-49,-41,-49v-61,0,-41,58,-21,93r59,0r0,22r-51,0v19,40,-12,70,-40,92","w":172},"\u2044":{"d":"-59,11r157,-272r21,0r-156,272r-22,0","w":60},"\u00a5":{"d":"72,0r0,-55r-53,0r0,-22r53,0v0,-11,1,-23,-4,-29r-49,0r0,-22r40,0r-56,-122r35,0r49,117r51,-117r32,0r-54,122r39,0r0,22r-49,0v-5,6,-4,18,-4,29r53,0r0,22r-53,0r0,55r-30,0","w":172},"\u0192":{"d":"-6,62r5,-24v24,5,40,2,46,-31r28,-144r-37,0r4,-21r37,0v9,-53,18,-114,89,-98r-5,24v-45,-11,-46,36,-53,74r39,0r-4,21r-39,0r-29,148v-7,41,-35,57,-81,51","w":172},"\u00a7":{"d":"149,-208r-32,0v0,-19,-15,-30,-32,-30v-21,0,-30,15,-30,27v14,52,108,49,108,113v0,23,-15,41,-32,53v44,31,14,100,-42,100v-54,0,-66,-38,-66,-62r30,0v0,22,12,39,36,39v52,0,31,-57,1,-69v-28,-21,-79,-36,-79,-78v0,-26,14,-38,35,-51v-14,-9,-23,-27,-23,-44v0,-35,31,-52,62,-52v58,0,63,40,64,54xm41,-119v7,32,50,41,71,61v7,-4,20,-16,20,-35v0,-33,-45,-44,-67,-61v-10,7,-24,18,-24,35","w":173},"\u00a4":{"d":"33,-125v0,31,23,56,53,56v30,0,54,-25,54,-56v0,-31,-24,-55,-54,-55v-30,0,-53,24,-53,55xm6,-60r17,-17v-21,-25,-21,-70,0,-95r-17,-17r16,-16r17,17v25,-21,70,-21,95,0r17,-17r15,16r-17,17v22,25,22,70,0,95r17,17r-15,15r-17,-17v-25,21,-70,21,-95,0r-17,17","w":172},"'":{"d":"31,-166r0,-91r24,0r0,91r-24,0","w":86},"\u201c":{"d":"118,-204r0,38r-33,0v1,-42,-8,-79,33,-91r0,17v-15,7,-16,17,-16,36r16,0xm62,-204r0,38r-34,0v1,-43,-7,-79,34,-91r0,17v-15,7,-16,17,-16,36r16,0","w":146},"\u00ab":{"d":"71,-88r0,-28r51,-52r0,32r-33,34r33,34r0,31xm18,-88r0,-28r51,-52r0,32r-34,34r34,34r0,31","w":140},"\u2039":{"d":"18,-88r0,-28r51,-52r0,32r-34,34r34,34r0,31","w":86},"\u203a":{"d":"69,-116r0,28r-51,51r0,-31r33,-34r-33,-34r0,-32","w":86},"\ufb01":{"d":"29,0r0,-169r-28,0r0,-24r28,0v-5,-49,12,-74,64,-67r0,26v-18,-1,-34,-1,-34,18r0,23r33,0r0,24r-33,0r0,169r-30,0xm115,0r0,-193r30,0r0,193r-30,0xm115,-222r0,-35r30,0r0,35r-30,0"},"\ufb02":{"d":"29,0r0,-169r-28,0r0,-24r28,0v-5,-49,12,-74,64,-67r0,26v-18,-1,-34,-1,-34,18r0,23r33,0r0,24r-33,0r0,169r-30,0xm115,0r0,-257r30,0r0,257r-30,0","k":{"w":-4}},"\u2013":{"d":"0,-89r0,-26r180,0r0,26r-180,0","w":180},"\u2020":{"d":"72,-183r0,-74r30,0r0,74r62,0r0,26r-62,0r0,207r-30,0r0,-207r-62,0r0,-26r62,0","w":173},"\u2021":{"d":"72,-188r0,-69r30,0r0,69r62,0r0,26r-62,0r0,114r62,0r0,26r-62,0r0,72r-30,0r0,-72r-62,0r0,-26r62,0r0,-114r-62,0r0,-26r62,0","w":173},"\u00b7":{"d":"23,-118v0,-11,9,-20,20,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-20,-9,-20,-20","w":86},"\u00b6":{"d":"148,50r0,-288r-36,0r0,288r-24,0r0,-166v-44,0,-75,-30,-75,-67v-2,-75,80,-79,159,-74r0,307r-24,0","w":200},"\u2022":{"d":"26,-129v0,-35,29,-64,64,-64v35,0,64,29,64,64v0,35,-29,65,-64,65v-35,0,-64,-30,-64,-65","w":180},"\u201a":{"d":"27,0r0,-38r33,0v-1,42,8,79,-33,91r0,-17v16,-7,15,-17,15,-36r-15,0","w":86},"\u201e":{"d":"118,-38v-1,42,8,79,-33,91r0,-17v16,-7,16,-17,16,-36r-16,0r0,-38r33,0xm62,-38v-1,43,7,79,-34,91r0,-17v16,-7,16,-17,16,-36r-16,0r0,-38r34,0","w":146},"\u201d":{"d":"118,-257v-1,42,8,79,-33,91r0,-17v16,-7,16,-17,16,-36r-16,0r0,-38r33,0xm62,-257v-1,43,7,79,-34,91r0,-17v16,-7,16,-17,16,-36r-16,0r0,-38r34,0","w":146,"k":{" ":13}},"\u00bb":{"d":"122,-116r0,28r-51,51r0,-31r34,-34r-34,-34r0,-32xm69,-116r0,28r-51,51r0,-31r33,-34r-33,-34r0,-32","w":140},"\u2026":{"d":"44,0r0,-38r33,0r0,38r-33,0xm163,0r0,-38r34,0r0,38r-34,0xm283,0r0,-38r33,0r0,38r-33,0","w":360},"\u2030":{"d":"310,-14v20,0,21,-20,21,-50v0,-30,-1,-50,-21,-50v-20,0,-22,20,-22,50v0,30,2,50,22,50xm61,5r111,-260r26,0r-112,260r-25,0xm64,-136v20,0,21,-20,21,-50v0,-30,-1,-49,-21,-49v-20,0,-22,19,-22,49v0,30,2,50,22,50xm310,5v-43,0,-48,-33,-48,-69v0,-36,5,-69,48,-69v43,0,47,33,47,69v0,36,-4,69,-47,69xm64,-117v-43,0,-47,-33,-47,-69v0,-36,4,-69,47,-69v43,0,47,33,47,69v0,36,-4,69,-47,69xm198,-14v20,0,22,-20,22,-50v0,-30,-2,-50,-22,-50v-20,0,-21,20,-21,50v0,30,1,50,21,50xm198,5v-43,0,-47,-33,-47,-69v0,-36,4,-69,47,-69v43,0,48,33,48,69v0,36,-5,69,-48,69","w":373},"\u00bf":{"d":"98,-127v8,63,-54,73,-54,127v0,21,12,40,35,40v35,0,38,-34,38,-52r30,0v0,42,-21,78,-67,78v-43,0,-67,-28,-67,-67v0,-55,62,-69,57,-126r28,0xm100,-194r0,35r-33,0r0,-35r33,0","w":159},"`":{"d":"-6,-271r36,0r25,51r-22,0","w":73},"\u00b4":{"d":"19,-220r25,-51r35,0r-39,51r-21,0","w":73},"\u02c6":{"d":"-13,-220r36,-51r28,0r36,51r-28,0r-22,-31r-22,31r-28,0","w":73},"\u02dc":{"d":"17,-264v18,0,50,30,53,-2r20,0v0,18,-10,40,-31,40v-24,0,-51,-29,-56,2r-19,0v0,-21,14,-40,33,-40","w":73},"\u00af":{"d":"-11,-236r0,-19r95,0r0,19r-95,0","w":73},"\u02d8":{"d":"-8,-268r17,0v1,30,54,31,55,0r18,0v0,15,-9,46,-45,46v-36,0,-45,-31,-45,-46","w":73},"\u02d9":{"d":"23,-228r0,-37r28,0r0,37r-28,0","w":73},"\u00a8":{"d":"-6,-228r0,-37r28,0r0,37r-28,0xm52,-228r0,-37r28,0r0,37r-28,0","w":73},"\u02da":{"d":"1,-248v0,-20,16,-36,36,-36v20,0,35,16,35,36v0,20,-15,35,-35,35v-20,0,-36,-15,-36,-35xm16,-248v0,11,10,20,21,20v11,0,20,-9,20,-20v0,-11,-9,-21,-20,-21v-11,0,-21,10,-21,21","w":73},"\u00b8":{"d":"0,69r5,-12v10,4,48,7,43,-11v1,-21,-34,-3,-36,-17r21,-31r15,0v-4,7,-14,15,-14,22v18,-6,39,1,40,25v1,31,-50,38,-74,24","w":73},"\u02dd":{"d":"-18,-220r25,-51r35,0r-38,51r-22,0xm41,-220r25,-51r36,0r-39,51r-22,0","w":73},"\u02db":{"d":"1,48v0,-19,23,-51,64,-50v-31,23,-38,35,-38,47v0,22,26,17,39,9r6,12v-23,17,-71,14,-71,-18","w":73},"\u02c7":{"d":"87,-271r-37,51r-27,0r-36,-51r28,0r22,32r22,-32r28,0","w":73},"\u2014":{"d":"0,-89r0,-26r360,0r0,26r-360,0","w":360},"\u00c6":{"d":"116,-231r-50,135r54,0r0,-135r-4,0xm-3,0r99,-257r151,0r0,28r-96,0r0,81r90,0r0,28r-90,0r0,92r100,0r0,28r-131,0r0,-71r-63,0r-27,71r-33,0","w":259},"\u00aa":{"d":"52,-255v64,0,29,51,38,98v-2,8,5,12,11,9r0,15v-12,2,-34,2,-32,-16v-14,28,-71,19,-66,-17v-3,-28,28,-35,52,-40v26,-5,15,-34,-6,-32v-22,1,-21,16,-21,23r-22,0v0,-28,13,-40,46,-40xm69,-197v-12,11,-43,6,-42,30v0,9,4,18,16,18v25,-1,28,-21,26,-48","w":104},"\u0141":{"d":"-3,-71r0,-26r24,-17r0,-143r32,0r0,121r69,-50r0,25r-69,50r0,83r104,0r0,28r-136,0r0,-88","w":159,"k":{"T":34,"V":27,"W":27,"Y":33,"\u00dd":33,"\u0178":33,"\u201d":33,"\u2019":33,"y":13,"\u00fd":13,"\u00ff":13}},"\u00d8":{"d":"58,-55r71,-170v-7,-7,-16,-11,-29,-11v-64,-4,-54,126,-42,181xm142,-202r-70,170v7,7,16,11,28,11v64,4,54,-127,42,-181xm32,9r12,-29v-22,-26,-27,-68,-27,-109v0,-65,12,-133,83,-133v17,0,30,4,40,10r9,-21r19,8r-11,27v22,26,26,68,26,109v0,65,-12,134,-83,134v-16,0,-30,-4,-40,-10r-9,22","w":200,"k":{"Y":9,"\u00dd":9,"\u0178":9,"X":9}},"\u0152":{"d":"180,-120r0,92r98,0r0,28r-129,0v-1,-7,2,-18,-1,-23v-6,17,-26,28,-48,28v-71,0,-83,-65,-83,-134v0,-65,12,-133,83,-133v18,0,42,8,50,25r0,-20r124,0r0,28r-94,0r0,81r88,0r0,28r-88,0xm100,-21v70,-1,48,-84,48,-146v0,-36,-1,-69,-48,-69v-45,0,-51,48,-51,107v0,59,6,108,51,108","w":286},"\u00ba":{"d":"51,-255v38,0,47,30,47,61v0,32,-10,62,-47,62v-37,0,-45,-30,-45,-62v0,-31,8,-61,45,-61xm51,-149v33,-1,33,-88,0,-89v-31,1,-29,88,0,89","w":104},"\u00e6":{"d":"134,-117r65,0v1,-28,-4,-57,-32,-57v-33,0,-33,38,-33,57xm199,-63r30,0v0,21,-12,68,-61,68v-42,0,-48,-29,-52,-35v-9,21,-26,35,-54,35v-62,0,-71,-98,-16,-109v22,-11,58,-4,58,-42v0,-18,-8,-28,-28,-28v-31,1,-31,30,-31,39r-31,0v0,-44,20,-63,64,-63v26,-1,41,13,47,27v6,-16,27,-27,45,-27v59,2,62,56,61,105r-99,0v0,30,0,74,34,74v29,0,33,-30,33,-44xm104,-100v-17,15,-63,7,-63,48v0,18,8,33,27,33v50,-10,33,-41,36,-81","w":240},"\u0131":{"d":"22,0r0,-193r30,0r0,193r-30,0","w":73},"\u0142":{"d":"22,0r0,-99r-22,23r0,-28r22,-23r0,-130r30,0r0,98r21,-23r0,28r-21,23r0,131r-30,0","w":73,"k":{"w":-4}},"\u00f8":{"d":"112,-147r-52,121v38,24,58,-19,58,-70v0,-18,-1,-37,-6,-51xm48,-45r52,-122v-40,-24,-58,19,-58,71v0,19,1,37,6,51xm23,14r12,-27v-50,-53,-29,-224,75,-179r10,-21r17,7r-11,26v47,57,28,223,-76,179r-10,22","w":159,"k":{"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4}},"\u0153":{"d":"185,-198v59,2,62,56,61,105r-98,0v0,30,-1,74,33,74v29,0,33,-30,33,-44r30,0v0,21,-11,68,-60,68v-41,0,-51,-30,-52,-33v-9,21,-27,33,-50,33v-54,0,-68,-49,-68,-101v0,-52,14,-102,68,-102v27,0,41,11,53,33v9,-20,29,-33,50,-33xm120,-96v0,-40,-6,-78,-38,-78v-30,0,-36,38,-36,78v0,40,6,77,36,77v31,0,38,-37,38,-77xm182,-174v-33,0,-33,38,-33,57r65,0v1,-28,-4,-57,-32,-57","w":259},"\u00df":{"d":"17,0r0,-184v0,-45,14,-76,64,-76v65,0,87,97,24,112v34,0,51,31,51,67v1,46,-25,89,-85,81r0,-26v41,8,55,-26,54,-55v-1,-38,-18,-60,-53,-53r0,-24v24,2,40,-10,41,-38v0,-18,-6,-40,-32,-40v-31,0,-33,24,-33,47r0,189r-31,0","k":{"w":-4}},"\u00b9":{"d":"46,-101r0,-112r-34,0r0,-18v21,0,39,-2,40,-24r18,0r0,154r-24,0","w":112},"\u00ac":{"d":"175,-38r0,-78r-158,0r0,-24r182,0r0,102r-24,0","w":216},"\u00b5":{"d":"147,-193r0,193r-29,0v-1,-7,2,-18,-1,-23v-10,24,-42,36,-67,23r0,63r-30,0r0,-256r30,0r0,133v0,15,1,39,28,39v16,0,39,-11,39,-39r0,-133r30,0"},"\u2122":{"d":"67,-109r0,-126r-48,0r0,-22r118,0r0,22r-47,0r0,126r-23,0xm305,-109r0,-122r-50,122r-15,0r-50,-122r0,122r-24,0r0,-148r35,0r47,114r46,-114r35,0r0,148r-24,0","w":356},"\u00d0":{"d":"24,0r0,-122r-21,0r0,-24r21,0r0,-111r69,0v80,0,90,57,90,128v0,65,-16,129,-87,129r-72,0xm56,-26r33,0v55,0,61,-56,61,-102v0,-50,-3,-103,-61,-103r-33,0r0,85r48,0r0,24r-48,0r0,96","w":200,"k":{"Y":7,"\u00dd":7,"\u0178":7}},"\u00bd":{"d":"27,11r156,-272r21,0r-156,272r-21,0xm11,-213r0,-18v21,0,39,-2,40,-24r18,0r0,154r-24,0r0,-112r-34,0xm245,0r-94,0v-3,-57,72,-63,72,-111v0,-13,-7,-21,-24,-21v-21,0,-22,18,-22,27r-26,0v0,-28,13,-49,50,-49v58,0,61,71,19,92v-13,11,-34,25,-40,40r65,0r0,22","w":259},"\u00b1":{"d":"17,-106r0,-24r79,0r0,-52r24,0r0,52r79,0r0,24r-79,0r0,52r-24,0r0,-52r-79,0xm17,0r0,-24r182,0r0,24r-182,0","w":216},"\u00de":{"d":"21,0r0,-257r32,0r0,50r33,0v22,0,80,0,80,74v0,63,-47,81,-113,75r0,58r-32,0xm53,-181r0,97v46,2,78,1,80,-50v2,-42,-35,-51,-80,-47","w":173},"\u00bc":{"d":"163,-55r41,0v-1,-22,2,-47,-1,-67xm144,-57r58,-97r26,0r0,99r16,0r0,19r-16,0r0,36r-24,0r0,-36r-60,0r0,-21xm33,11r157,-272r21,0r-156,272r-22,0xm12,-213r0,-18v21,0,39,-2,40,-24r18,0r0,154r-24,0r0,-112r-34,0","w":259},"\u00f7":{"d":"17,-79r0,-24r182,0r0,24r-182,0xm88,-167v0,-11,9,-20,20,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-20,-9,-20,-20xm88,-15v0,-11,9,-20,20,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-20,-9,-20,-20","w":216},"\u00a6":{"d":"28,5r0,-106r24,0r0,106r-24,0xm28,-156r0,-106r24,0r0,106r-24,0","w":79},"\u00b0":{"d":"18,-201v0,-31,23,-54,54,-54v31,0,54,23,54,54v0,31,-23,53,-54,53v-31,0,-54,-22,-54,-53xm38,-201v0,19,15,34,34,34v19,0,34,-15,34,-34v0,-19,-15,-34,-34,-34v-19,0,-34,15,-34,34","w":144},"\u00fe":{"d":"48,-96v0,37,7,75,39,75v28,0,35,-29,35,-79v0,-42,-7,-72,-35,-72v-33,0,-39,32,-39,76xm20,63r0,-320r30,0r1,86v5,-17,24,-27,40,-27v46,0,63,41,63,98v0,44,-13,105,-63,105v-18,1,-32,-12,-41,-27r0,85r-30,0"},"\u00be":{"d":"171,-55r41,0v-1,-22,2,-47,-1,-67xm152,-57r58,-97r25,0r0,99r17,0r0,19r-17,0r0,36r-23,0r0,-36r-60,0r0,-21xm52,11r156,-272r22,0r-156,272r-22,0xm43,-171r0,-19v35,9,50,-45,15,-45v-20,0,-22,16,-22,24r-26,0v0,-26,13,-44,49,-44v59,2,58,63,14,73v18,6,35,13,35,37v0,28,-16,47,-49,47v-49,0,-52,-34,-52,-45r26,0v0,11,7,25,25,25v10,0,24,-5,24,-26v1,-19,-15,-29,-39,-27","w":259},"\u00b2":{"d":"102,-101r-94,0v-2,-56,71,-63,71,-111v0,-13,-7,-21,-24,-21v-21,0,-22,18,-22,27r-26,0v0,-28,13,-49,50,-49v58,0,61,71,19,92v-13,11,-34,26,-39,41r65,0r0,21","w":112},"\u00ae":{"d":"91,-50r0,-156v52,0,113,-8,113,46v0,28,-18,40,-42,43r45,67r-24,0r-43,-65r-26,0r0,65r-23,0xm114,-137v29,-2,68,8,67,-24v-1,-32,-38,-21,-67,-23r0,47xm10,-129v0,-74,60,-133,134,-133v74,0,134,59,134,133v0,74,-60,134,-134,134v-74,0,-134,-60,-134,-134xm144,-17v61,0,110,-50,110,-112v0,-62,-49,-111,-110,-111v-61,0,-110,49,-110,111v0,62,49,112,110,112","w":288},"\u2212":{"d":"17,-79r0,-24r182,0r0,24r-182,0","w":216},"\u00f0":{"d":"79,-169v-31,0,-37,38,-37,73v0,42,6,77,37,77v32,0,39,-35,39,-77v0,-35,-7,-73,-39,-73xm43,-214r-13,-15r25,-15v-8,-8,-18,-16,-28,-24r23,-10v9,8,18,15,26,22r27,-15r14,15r-26,14v37,37,58,78,58,146v0,54,-14,101,-69,101v-56,0,-70,-47,-70,-101v0,-60,31,-114,92,-91v-10,-15,-21,-29,-33,-42","w":159},"\u00d7":{"d":"173,-11r-65,-65r-65,65r-15,-15r65,-65r-65,-65r15,-15r65,64r65,-64r15,15r-65,65r65,65","w":216},"\u00b3":{"d":"42,-171r0,-19v21,2,34,-8,34,-25v0,-11,-6,-20,-19,-20v-20,0,-23,16,-23,24r-26,0v0,-26,13,-44,49,-44v59,1,59,63,15,73v18,6,35,13,35,37v0,28,-16,47,-49,47v-49,0,-52,-34,-52,-45r26,0v0,11,7,25,25,25v10,0,24,-5,24,-26v1,-19,-15,-29,-39,-27","w":112},"\u00a9":{"d":"195,-100r22,0v-5,37,-35,55,-71,55v-49,0,-79,-33,-79,-82v0,-92,137,-115,150,-27r-22,0v-19,-62,-104,-34,-104,27v0,34,21,61,55,61v27,0,45,-15,49,-34xm10,-129v0,-74,60,-133,134,-133v74,0,134,59,134,133v0,74,-60,134,-134,134v-74,0,-134,-60,-134,-134xm144,-17v61,0,110,-50,110,-112v0,-62,-49,-111,-110,-111v-61,0,-110,49,-110,111v0,62,49,112,110,112","w":288},"\u00c1":{"d":"-3,0r74,-257r43,0r69,257r-33,0r-19,-71r-82,0r-19,71r-33,0xm92,-221v-15,39,-23,84,-36,125r69,0xm75,-271r25,-51r35,0r-39,51r-21,0","w":180,"k":{"p":-4,"Q":-4,"T":20,"V":7,"W":7,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c2":{"d":"-3,0r74,-257r43,0r69,257r-33,0r-19,-71r-82,0r-19,71r-33,0xm92,-221v-15,39,-23,84,-36,125r69,0xm42,-271r37,-51r28,0r36,51r-29,0r-21,-32r-22,32r-29,0","w":180,"k":{"p":-4,"Q":-4,"T":20,"V":7,"W":7,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c4":{"d":"-3,0r74,-257r43,0r69,257r-33,0r-19,-71r-82,0r-19,71r-33,0xm92,-221v-15,39,-23,84,-36,125r69,0xm49,-280r0,-36r28,0r0,36r-28,0xm108,-280r0,-36r28,0r0,36r-28,0","w":180,"k":{"p":-4,"Q":-4,"T":20,"V":7,"W":7,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c0":{"d":"-3,0r74,-257r43,0r69,257r-33,0r-19,-71r-82,0r-19,71r-33,0xm92,-221v-15,39,-23,84,-36,125r69,0xm50,-322r35,0r26,51r-22,0","w":180,"k":{"p":-4,"Q":-4,"T":20,"V":7,"W":7,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c5":{"d":"-3,0r74,-257r43,0r69,257r-33,0r-19,-71r-82,0r-19,71r-33,0xm92,-221v-15,39,-23,84,-36,125r69,0xm57,-300v0,-20,16,-36,36,-36v20,0,35,16,35,36v0,20,-15,36,-35,36v-20,0,-36,-16,-36,-36xm72,-300v0,11,10,21,21,21v11,0,20,-10,20,-21v0,-11,-9,-20,-20,-20v-11,0,-21,9,-21,20","w":180,"k":{"p":-4,"Q":-4,"T":20,"V":7,"W":7,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c3":{"d":"-3,0r74,-257r43,0r69,257r-33,0r-19,-71r-82,0r-19,71r-33,0xm92,-221v-15,39,-23,84,-36,125r69,0xm73,-315v19,0,49,28,53,-3r19,0v0,18,-10,40,-31,40v-24,0,-50,-28,-55,3r-19,0v0,-21,14,-40,33,-40","w":180,"k":{"p":-4,"Q":-4,"T":20,"V":7,"W":7,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c7":{"d":"77,36v-13,-10,7,-21,11,-32v-62,-8,-71,-72,-71,-133v0,-65,12,-133,83,-133v53,0,75,30,76,80r-33,0v-1,-29,-10,-54,-43,-54v-44,0,-50,48,-50,107v0,59,6,108,50,108v39,0,44,-36,45,-67r33,0v-3,48,-21,92,-75,93v-2,5,-10,10,-9,15v18,-6,37,1,39,25v1,32,-49,38,-74,24r5,-12v10,4,48,7,43,-11v2,-13,-24,-15,-30,-10","w":186},"\u00c9":{"d":"21,0r0,-257r133,0r0,28r-101,0r0,81r95,0r0,28r-95,0r0,92r105,0r0,28r-137,0xm70,-271r25,-51r35,0r-39,51r-21,0"},"\u00ca":{"d":"21,0r0,-257r133,0r0,28r-101,0r0,81r95,0r0,28r-95,0r0,92r105,0r0,28r-137,0xm38,-271r36,-51r28,0r36,51r-28,0r-22,-32r-22,32r-28,0"},"\u00cb":{"d":"21,0r0,-257r133,0r0,28r-101,0r0,81r95,0r0,28r-95,0r0,92r105,0r0,28r-137,0xm45,-280r0,-36r28,0r0,36r-28,0xm103,-280r0,-36r28,0r0,36r-28,0"},"\u00c8":{"d":"21,0r0,-257r133,0r0,28r-101,0r0,81r95,0r0,28r-95,0r0,92r105,0r0,28r-137,0xm45,-322r36,0r25,51r-22,0"},"\u00cd":{"d":"21,0r0,-257r32,0r0,257r-32,0xm19,-271r25,-51r35,0r-39,51r-21,0","w":73},"\u00ce":{"d":"21,0r0,-257r32,0r0,257r-32,0xm-13,-271r36,-51r28,0r36,51r-28,0r-22,-32r-22,32r-28,0","w":73},"\u00cf":{"d":"21,0r0,-257r32,0r0,257r-32,0xm-6,-280r0,-36r28,0r0,36r-28,0xm52,-280r0,-36r28,0r0,36r-28,0","w":73},"\u00cc":{"d":"21,0r0,-257r32,0r0,257r-32,0xm-6,-322r36,0r25,51r-22,0","w":73},"\u00d1":{"d":"21,0r0,-257r41,0r86,215r0,-215r31,0r0,257r-43,0r-83,-208r0,208r-32,0xm81,-315v19,0,49,28,53,-3r19,0v0,18,-10,40,-31,40v-24,0,-50,-28,-55,3r-20,0v0,-21,15,-40,34,-40","w":200},"\u00d3":{"d":"100,-262v71,0,83,68,83,133v0,65,-12,134,-83,134v-71,0,-83,-69,-83,-134v0,-65,12,-133,83,-133xm100,-236v-44,0,-50,48,-50,107v0,59,6,108,50,108v44,0,50,-49,50,-108v0,-59,-6,-107,-50,-107xm82,-271r25,-51r36,0r-39,51r-22,0","w":200,"k":{"Y":9,"\u00dd":9,"\u0178":9,"X":9}},"\u00d4":{"d":"100,-262v71,0,83,68,83,133v0,65,-12,134,-83,134v-71,0,-83,-69,-83,-134v0,-65,12,-133,83,-133xm100,-236v-44,0,-50,48,-50,107v0,59,6,108,50,108v44,0,50,-49,50,-108v0,-59,-6,-107,-50,-107xm50,-271r36,-51r28,0r36,51r-28,0r-22,-32r-22,32r-28,0","w":200,"k":{"Y":9,"\u00dd":9,"\u0178":9,"X":9}},"\u00d6":{"d":"100,-262v71,0,83,68,83,133v0,65,-12,134,-83,134v-71,0,-83,-69,-83,-134v0,-65,12,-133,83,-133xm100,-236v-44,0,-50,48,-50,107v0,59,6,108,50,108v44,0,50,-49,50,-108v0,-59,-6,-107,-50,-107xm57,-280r0,-36r28,0r0,36r-28,0xm115,-280r0,-36r28,0r0,36r-28,0","w":200,"k":{"Y":9,"\u00dd":9,"\u0178":9,"X":9}},"\u00d2":{"d":"100,-262v71,0,83,68,83,133v0,65,-12,134,-83,134v-71,0,-83,-69,-83,-134v0,-65,12,-133,83,-133xm100,-236v-44,0,-50,48,-50,107v0,59,6,108,50,108v44,0,50,-49,50,-108v0,-59,-6,-107,-50,-107xm58,-322r35,0r25,51r-22,0","w":200,"k":{"Y":9,"\u00dd":9,"\u0178":9,"X":9}},"\u00d5":{"d":"100,-262v71,0,83,68,83,133v0,65,-12,134,-83,134v-71,0,-83,-69,-83,-134v0,-65,12,-133,83,-133xm100,-236v-44,0,-50,48,-50,107v0,59,6,108,50,108v44,0,50,-49,50,-108v0,-59,-6,-107,-50,-107xm81,-315v19,0,49,28,53,-3r19,0v0,18,-10,40,-31,40v-24,0,-50,-28,-55,3r-20,0v0,-21,15,-40,34,-40","w":200,"k":{"Y":9,"\u00dd":9,"\u0178":9,"X":9}},"\u0160":{"d":"162,-190r-32,0v0,-27,-10,-46,-40,-46v-27,0,-42,15,-42,42v0,72,121,29,121,123v0,59,-44,76,-80,76v-60,0,-78,-31,-78,-86r32,0v0,29,2,60,48,60v25,0,45,-18,45,-45v0,-73,-122,-31,-122,-125v0,-24,11,-71,76,-71v49,0,71,25,72,72xm140,-322r-36,51r-28,0r-36,-51r28,0r22,31r22,-31r28,0","w":180},"\u00da":{"d":"18,-76r0,-181r32,0r0,181v0,38,12,55,43,55v34,0,44,-19,44,-55r0,-181r32,0r0,181v0,49,-26,81,-76,81v-51,0,-75,-28,-75,-81xm76,-271r25,-51r35,0r-39,51r-21,0","w":186},"\u00db":{"d":"18,-76r0,-181r32,0r0,181v0,38,12,55,43,55v34,0,44,-19,44,-55r0,-181r32,0r0,181v0,49,-26,81,-76,81v-51,0,-75,-28,-75,-81xm44,-271r36,-51r28,0r36,51r-28,0r-22,-32r-22,32r-28,0","w":186},"\u00dc":{"d":"18,-76r0,-181r32,0r0,181v0,38,12,55,43,55v34,0,44,-19,44,-55r0,-181r32,0r0,181v0,49,-26,81,-76,81v-51,0,-75,-28,-75,-81xm50,-280r0,-36r28,0r0,36r-28,0xm109,-280r0,-36r28,0r0,36r-28,0","w":186},"\u00d9":{"d":"18,-76r0,-181r32,0r0,181v0,38,12,55,43,55v34,0,44,-19,44,-55r0,-181r32,0r0,181v0,49,-26,81,-76,81v-51,0,-75,-28,-75,-81xm51,-322r35,0r26,51r-22,0","w":186},"\u00dd":{"d":"67,-101r-68,-156r35,0r49,120r51,-120r33,0r-68,156r0,101r-32,0r0,-101xm65,-271r25,-51r36,0r-39,51r-22,0","k":{"a":27,"\u00e6":27,"\u00e1":27,"\u00e2":27,"\u00e4":27,"\u00e0":27,"\u00e5":27,"\u00e3":27,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,"e":27,"\u00e9":27,"\u00ea":27,"\u00eb":27,"\u00e8":27,"i":11,"\u00ed":11,"\u00ee":11,"\u00ef":11,"\u00ec":11,"o":27,"\u00f8":27,"\u0153":27,"\u00f3":27,"\u00f4":27,"\u00f6":27,"\u00f2":27,"\u00f5":27,",":40,".":40,"u":22,"\u00fa":22,"\u00fb":22,"\u00fc":22,"\u00f9":22,"-":27,":":13,";":13}},"\u0178":{"d":"67,-101r-68,-156r35,0r49,120r51,-120r33,0r-68,156r0,101r-32,0r0,-101xm40,-280r0,-36r28,0r0,36r-28,0xm98,-280r0,-36r28,0r0,36r-28,0","k":{"a":27,"\u00e6":27,"\u00e1":27,"\u00e2":27,"\u00e4":27,"\u00e0":27,"\u00e5":27,"\u00e3":27,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,"e":27,"\u00e9":27,"\u00ea":27,"\u00eb":27,"\u00e8":27,"i":11,"\u00ed":11,"\u00ee":11,"\u00ef":11,"\u00ec":11,"o":27,"\u00f8":27,"\u0153":27,"\u00f3":27,"\u00f4":27,"\u00f6":27,"\u00f2":27,"\u00f5":27,",":40,".":40,"u":22,"\u00fa":22,"\u00fb":22,"\u00fc":22,"\u00f9":22,"-":27,":":13,";":13}},"\u017d":{"d":"8,0r0,-27r116,-202r-109,0r0,-28r142,0r0,29r-116,200r117,0r0,28r-150,0xm134,-322r-37,51r-28,0r-36,-51r29,0r22,31r21,-31r29,0"},"\u00e1":{"d":"45,-136v-7,3,-21,0,-30,1v0,-44,19,-63,65,-63v59,0,59,35,59,55r0,108v-3,12,7,20,16,14r0,21v-19,3,-43,7,-46,-23v-23,46,-99,33,-99,-28v0,-46,41,-57,77,-66v39,-10,25,-57,-9,-57v-33,0,-33,31,-33,38xm108,-105v-19,21,-66,11,-66,53v0,19,6,33,27,33v40,0,42,-43,39,-86xm62,-220r25,-51r35,0r-38,51r-22,0","w":159},"\u00e2":{"d":"45,-136v-7,3,-21,0,-30,1v0,-44,19,-63,65,-63v59,0,59,35,59,55r0,108v-3,12,7,20,16,14r0,21v-19,3,-43,7,-46,-23v-23,46,-99,33,-99,-28v0,-46,41,-57,77,-66v39,-10,25,-57,-9,-57v-33,0,-33,31,-33,38xm108,-105v-19,21,-66,11,-66,53v0,19,6,33,27,33v40,0,42,-43,39,-86xm30,-220r36,-51r28,0r36,51r-28,0r-22,-31r-22,31r-28,0","w":159},"\u00e4":{"d":"45,-136v-7,3,-21,0,-30,1v0,-44,19,-63,65,-63v59,0,59,35,59,55r0,108v-3,12,7,20,16,14r0,21v-19,3,-43,7,-46,-23v-23,46,-99,33,-99,-28v0,-46,41,-57,77,-66v39,-10,25,-57,-9,-57v-33,0,-33,31,-33,38xm108,-105v-19,21,-66,11,-66,53v0,19,6,33,27,33v40,0,42,-43,39,-86xm37,-228r0,-37r28,0r0,37r-28,0xm95,-228r0,-37r28,0r0,37r-28,0","w":159},"\u00e0":{"d":"45,-136v-7,3,-21,0,-30,1v0,-44,19,-63,65,-63v59,0,59,35,59,55r0,108v-3,12,7,20,16,14r0,21v-19,3,-43,7,-46,-23v-23,46,-99,33,-99,-28v0,-46,41,-57,77,-66v39,-10,25,-57,-9,-57v-33,0,-33,31,-33,38xm108,-105v-19,21,-66,11,-66,53v0,19,6,33,27,33v40,0,42,-43,39,-86xm37,-271r36,0r25,51r-22,0","w":159},"\u00e5":{"d":"45,-136v-7,3,-21,0,-30,1v0,-44,19,-63,65,-63v59,0,59,35,59,55r0,108v-3,12,7,20,16,14r0,21v-19,3,-43,7,-46,-23v-23,46,-99,33,-99,-28v0,-46,41,-57,77,-66v39,-10,25,-57,-9,-57v-33,0,-33,31,-33,38xm108,-105v-19,21,-66,11,-66,53v0,19,6,33,27,33v40,0,42,-43,39,-86xm44,-248v0,-20,16,-36,36,-36v20,0,36,16,36,36v0,20,-16,35,-36,35v-20,0,-36,-15,-36,-35xm59,-248v0,11,10,20,21,20v11,0,20,-9,20,-20v0,-11,-9,-21,-20,-21v-11,0,-21,10,-21,21","w":159},"\u00e3":{"d":"45,-136v-7,3,-21,0,-30,1v0,-44,19,-63,65,-63v59,0,59,35,59,55r0,108v-3,12,7,20,16,14r0,21v-19,3,-43,7,-46,-23v-23,46,-99,33,-99,-28v0,-46,41,-57,77,-66v39,-10,25,-57,-9,-57v-33,0,-33,31,-33,38xm108,-105v-19,21,-66,11,-66,53v0,19,6,33,27,33v40,0,42,-43,39,-86xm60,-264v18,0,50,30,53,-2r20,0v0,18,-10,40,-31,40v-24,0,-51,-29,-56,2r-19,0v0,-21,14,-40,33,-40","w":159},"\u00e7":{"d":"60,36v-13,-9,6,-21,11,-31v-42,-4,-59,-36,-59,-99v0,-48,9,-104,68,-104v53,0,62,42,62,64r-30,0v0,-19,-8,-40,-31,-40v-19,0,-38,9,-38,80v0,25,1,75,37,75v26,0,32,-27,32,-48r30,0v0,29,-14,67,-56,72v-2,5,-10,10,-9,15v18,-6,37,1,39,25v1,32,-49,38,-74,24r6,-12v9,4,48,7,42,-11v2,-13,-24,-15,-30,-10","w":153,"k":{"l":7,"\u0142":7,"y":7,"\u00fd":7,"\u00ff":7}},"\u00e9":{"d":"46,-117r69,0v1,-28,-3,-57,-34,-57v-35,0,-35,38,-35,57xm147,-93r-102,0v0,30,0,74,37,74v29,0,33,-30,33,-44r30,0v0,21,-12,68,-65,68v-47,0,-67,-33,-67,-99v0,-48,10,-104,69,-104v64,0,65,56,65,105xm62,-220r25,-51r35,0r-38,51r-22,0","w":159},"\u00ea":{"d":"46,-117r69,0v1,-28,-3,-57,-34,-57v-35,0,-35,38,-35,57xm147,-93r-102,0v0,30,0,74,37,74v29,0,33,-30,33,-44r30,0v0,21,-12,68,-65,68v-47,0,-67,-33,-67,-99v0,-48,10,-104,69,-104v64,0,65,56,65,105xm30,-220r36,-51r28,0r36,51r-28,0r-22,-31r-22,31r-28,0","w":159},"\u00eb":{"d":"46,-117r69,0v1,-28,-3,-57,-34,-57v-35,0,-35,38,-35,57xm147,-93r-102,0v0,30,0,74,37,74v29,0,33,-30,33,-44r30,0v0,21,-12,68,-65,68v-47,0,-67,-33,-67,-99v0,-48,10,-104,69,-104v64,0,65,56,65,105xm37,-228r0,-37r28,0r0,37r-28,0xm95,-228r0,-37r28,0r0,37r-28,0","w":159},"\u00e8":{"d":"46,-117r69,0v1,-28,-3,-57,-34,-57v-35,0,-35,38,-35,57xm147,-93r-102,0v0,30,0,74,37,74v29,0,33,-30,33,-44r30,0v0,21,-12,68,-65,68v-47,0,-67,-33,-67,-99v0,-48,10,-104,69,-104v64,0,65,56,65,105xm37,-271r36,0r25,51r-22,0","w":159},"\u00ed":{"d":"22,0r0,-193r30,0r0,193r-30,0xm19,-220r25,-51r35,0r-39,51r-21,0","w":73},"\u00ee":{"d":"22,0r0,-193r30,0r0,193r-30,0xm-13,-220r36,-51r28,0r36,51r-28,0r-22,-31r-22,31r-28,0","w":73},"\u00ef":{"d":"22,0r0,-193r30,0r0,193r-30,0xm-6,-228r0,-37r28,0r0,37r-28,0xm52,-228r0,-37r28,0r0,37r-28,0","w":73},"\u00ec":{"d":"22,0r0,-193r30,0r0,193r-30,0xm-6,-271r36,0r25,51r-22,0","w":73},"\u00f1":{"d":"20,0r0,-193r29,0r0,23v8,-18,28,-28,47,-28v51,0,51,38,51,61r0,137r-30,0r0,-133v0,-15,-2,-39,-29,-39v-16,0,-38,11,-38,39r0,133r-30,0xm64,-264v18,1,49,29,53,-2r19,0v0,18,-10,40,-31,40v-24,0,-50,-28,-55,2r-19,0v0,-21,14,-40,33,-40","k":{"y":-4,"\u00fd":-4,"\u00ff":-4}},"\u00f3":{"d":"10,-96v0,-54,15,-102,70,-102v56,0,69,48,69,102v0,54,-14,101,-69,101v-56,0,-70,-47,-70,-101xm79,-19v32,0,39,-35,39,-77v0,-42,-7,-78,-39,-78v-31,0,-37,36,-37,78v0,42,6,77,37,77xm62,-220r25,-51r35,0r-38,51r-22,0","w":159,"k":{"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4}},"\u00f4":{"d":"10,-96v0,-54,15,-102,70,-102v56,0,69,48,69,102v0,54,-14,101,-69,101v-56,0,-70,-47,-70,-101xm79,-19v32,0,39,-35,39,-77v0,-42,-7,-78,-39,-78v-31,0,-37,36,-37,78v0,42,6,77,37,77xm30,-220r36,-51r28,0r36,51r-28,0r-22,-31r-22,31r-28,0","w":159,"k":{"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4}},"\u00f6":{"d":"10,-96v0,-54,15,-102,70,-102v56,0,69,48,69,102v0,54,-14,101,-69,101v-56,0,-70,-47,-70,-101xm79,-19v32,0,39,-35,39,-77v0,-42,-7,-78,-39,-78v-31,0,-37,36,-37,78v0,42,6,77,37,77xm37,-228r0,-37r28,0r0,37r-28,0xm95,-228r0,-37r28,0r0,37r-28,0","w":159,"k":{"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4}},"\u00f2":{"d":"10,-96v0,-54,15,-102,70,-102v56,0,69,48,69,102v0,54,-14,101,-69,101v-56,0,-70,-47,-70,-101xm79,-19v32,0,39,-35,39,-77v0,-42,-7,-78,-39,-78v-31,0,-37,36,-37,78v0,42,6,77,37,77xm37,-271r36,0r25,51r-22,0","w":159,"k":{"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4}},"\u00f5":{"d":"10,-96v0,-54,15,-102,70,-102v56,0,69,48,69,102v0,54,-14,101,-69,101v-56,0,-70,-47,-70,-101xm79,-19v32,0,39,-35,39,-77v0,-42,-7,-78,-39,-78v-31,0,-37,36,-37,78v0,42,6,77,37,77xm60,-264v18,0,50,30,53,-2r20,0v0,18,-10,40,-31,40v-24,0,-51,-29,-56,2r-19,0v0,-21,14,-40,33,-40","w":159,"k":{"w":-4,"y":-4,"\u00fd":-4,"\u00ff":-4}},"\u0161":{"d":"107,-51v0,-56,-94,-21,-94,-94v0,-36,28,-53,61,-53v56,0,59,39,59,62r-30,0v0,-24,-7,-38,-29,-38v-10,0,-31,2,-31,29v0,50,95,21,95,90v0,41,-27,60,-63,60v-66,0,-66,-48,-66,-68r30,0v0,23,6,44,36,44v10,0,32,-5,32,-32xm123,-271r-36,51r-28,0r-36,-51r28,0r22,32r22,-32r28,0","w":146,"k":{"w":-4}},"\u00fa":{"d":"147,-193r0,193r-29,0v-1,-7,2,-18,-1,-23v-8,18,-27,28,-46,28v-51,0,-51,-38,-51,-61r0,-137r30,0r0,133v0,15,1,39,28,39v16,0,39,-11,39,-39r0,-133r30,0xm66,-220r25,-51r35,0r-39,51r-21,0"},"\u00fb":{"d":"147,-193r0,193r-29,0v-1,-7,2,-18,-1,-23v-8,18,-27,28,-46,28v-51,0,-51,-38,-51,-61r0,-137r30,0r0,133v0,15,1,39,28,39v16,0,39,-11,39,-39r0,-133r30,0xm33,-220r37,-51r28,0r36,51r-29,0r-21,-31r-22,31r-29,0"},"\u00fc":{"d":"147,-193r0,193r-29,0v-1,-7,2,-18,-1,-23v-8,18,-27,28,-46,28v-51,0,-51,-38,-51,-61r0,-137r30,0r0,133v0,15,1,39,28,39v16,0,39,-11,39,-39r0,-133r30,0xm40,-228r0,-37r28,0r0,37r-28,0xm99,-228r0,-37r28,0r0,37r-28,0"},"\u00f9":{"d":"147,-193r0,193r-29,0v-1,-7,2,-18,-1,-23v-8,18,-27,28,-46,28v-51,0,-51,-38,-51,-61r0,-137r30,0r0,133v0,15,1,39,28,39v16,0,39,-11,39,-39r0,-133r30,0xm41,-271r35,0r26,51r-22,0"},"\u00fd":{"d":"60,4r-56,-197r33,0r39,155r33,-155r34,0r-56,206v-4,35,-31,57,-74,49r0,-23v28,7,45,-11,47,-35xm55,-220r25,-51r36,0r-39,51r-22,0","w":146,"k":{"a":-4,"\u00e6":-4,"\u00e1":-4,"\u00e2":-4,"\u00e4":-4,"\u00e0":-4,"\u00e5":-4,"\u00e3":-4,",":20,".":20}},"\u00ff":{"d":"60,4r-56,-197r33,0r39,155r33,-155r34,0r-56,206v-4,35,-31,57,-74,49r0,-23v28,7,45,-11,47,-35xm30,-228r0,-37r28,0r0,37r-28,0xm88,-228r0,-37r28,0r0,37r-28,0","w":146,"k":{"a":-4,"\u00e6":-4,"\u00e1":-4,"\u00e2":-4,"\u00e4":-4,"\u00e0":-4,"\u00e5":-4,"\u00e3":-4,",":20,".":20}},"\u017e":{"d":"14,-167r0,-26r116,0r0,25r-86,142r86,0r0,26r-120,0r0,-24r87,-143r-83,0xm120,-271r-36,51r-28,0r-36,-51r28,0r22,32r22,-32r28,0","w":140},"\u2206":{"d":"10,0r0,-18r77,-239r31,0r75,238r0,19r-183,0xm37,-23r128,0r-63,-198r-2,0","w":203},"\u2126":{"d":"15,-23v14,-1,33,2,45,-1v-22,-24,-41,-63,-41,-112v0,-70,40,-119,93,-119v56,0,90,55,90,117v0,52,-22,91,-42,115r46,0r0,23r-75,0r0,-17v50,-28,69,-213,-20,-213v-40,0,-65,43,-65,99v0,52,22,97,44,114r0,17r-75,0r0,-23","w":221},"\u03bc":{"d":"147,-193r0,193r-29,0v-1,-7,2,-18,-1,-23v-10,24,-42,36,-67,23r0,63r-30,0r0,-256r30,0r0,133v0,15,1,39,28,39v16,0,39,-11,39,-39r0,-133r30,0"},"\u03c0":{"d":"172,-162r-24,0v1,48,-4,126,5,162r-27,0v-9,-34,-4,-115,-5,-162r-54,0v-1,45,-10,126,-22,162r-27,0v12,-40,22,-115,23,-162v-19,0,-28,2,-34,4r-4,-19v35,-18,118,-7,172,-10","w":181},"\u20ac":{"d":"167,-238r-11,26v-13,-11,-25,-19,-42,-19v-40,0,-48,36,-51,69r82,0r-7,21r-76,0r0,20r70,0r-8,22r-62,0v1,33,7,80,50,80v21,0,37,-10,52,-23r0,32v-17,11,-34,15,-55,15v-64,0,-77,-50,-80,-104r-22,0r7,-22r14,0r1,-20r-23,0r8,-21r16,0v5,-50,24,-94,82,-94v22,0,37,6,55,18","w":172},"\u2113":{"d":"135,-50r13,11v-14,28,-34,42,-59,42v-41,0,-54,-32,-54,-71v-5,5,-12,10,-18,15r-8,-15r26,-25r0,-97v0,-63,25,-85,50,-85v26,0,40,24,40,57v0,44,-25,87,-64,129v-3,39,11,70,33,70v19,0,33,-16,41,-31xm86,-254v-30,0,-25,93,-25,137v26,-32,46,-67,46,-101v0,-22,-6,-36,-21,-36","w":154},"\u212e":{"d":"65,-49v36,61,143,59,185,4r20,0v-26,30,-68,50,-114,50v-80,0,-144,-58,-144,-130v0,-72,64,-130,144,-130v81,1,147,58,145,134r-236,1r0,71xm248,-202v-36,-57,-135,-58,-179,-7v-8,18,-5,59,-2,81r179,0v6,-20,0,-51,2,-74","w":313},"\u2202":{"d":"33,-240r-9,-22v64,-44,134,-9,134,116v0,91,-29,149,-83,149v-41,0,-61,-39,-61,-82v0,-57,32,-93,68,-93v27,0,44,20,49,30v10,-82,-44,-147,-98,-98xm41,-78v0,35,13,57,37,57v28,0,47,-44,51,-93v-5,-15,-20,-34,-43,-34v-25,0,-45,32,-45,70","w":174},"\u220f":{"d":"212,-225r-33,0r0,260r-26,0r0,-260r-85,0r0,260r-26,0r0,-260r-33,0r0,-26r203,0r0,26","w":221},"\u2211":{"d":"168,35r-160,0r0,-20r83,-123r-80,-123r0,-20r151,0r0,24v-37,2,-81,-4,-114,2r74,112r-81,121r127,0r0,27","w":174},"\u2219":{"d":"23,-118v0,-11,9,-20,20,-20v11,0,20,9,20,20v0,11,-9,20,-20,20v-11,0,-20,-9,-20,-20","w":86},"\u221a":{"d":"184,-299r-71,352r-23,0r-50,-166r-24,9r-5,-17r46,-18r38,127v3,10,3,24,7,29r62,-316r20,0","w":184},"\u221e":{"d":"240,-104v0,33,-24,54,-51,54v-21,0,-37,-12,-60,-39v-17,20,-36,39,-63,39v-27,0,-50,-23,-50,-53v0,-31,22,-53,52,-53v25,0,44,18,62,39v16,-18,33,-39,61,-39v28,0,49,21,49,52xm34,-102v0,19,14,35,35,35v21,0,36,-20,50,-35v-15,-18,-29,-38,-52,-38v-21,0,-33,18,-33,38xm189,-140v-22,0,-39,24,-50,36v21,24,33,37,51,37v21,0,32,-19,32,-36v0,-23,-14,-37,-33,-37","w":255},"\u222b":{"d":"45,-216v0,-63,19,-101,68,-86r-4,19v-36,-9,-38,22,-38,70v0,57,4,121,4,180v0,67,-18,101,-69,86r5,-21v33,10,39,-14,39,-65v0,-60,-5,-125,-5,-183","w":120},"\u2248":{"d":"58,-152v40,0,72,52,95,0r12,9v-8,18,-22,33,-42,33v-22,0,-46,-24,-67,-25v-15,0,-22,12,-30,25r-12,-9v9,-20,25,-33,44,-33xm58,-95v40,0,72,51,95,0r12,9v-9,18,-22,33,-42,33v-21,0,-44,-25,-66,-25v-15,0,-23,12,-31,25r-12,-9v9,-20,25,-33,44,-33","w":178},"\u2260":{"d":"128,-175r-14,32r48,0r0,18r-55,0r-21,47r76,0r0,18r-82,0r-17,37r-14,-5r14,-32r-47,0r0,-18r54,0r21,-47r-75,0r0,-18r82,0r16,-37","w":178},"\u2264":{"d":"161,-37r-143,-76r0,-19r143,-76r0,22r-125,64r125,63r0,22xm162,-5r-145,0r0,-19r145,0r0,19","w":178},"\u2265":{"d":"19,-208r143,76r0,19r-143,76r0,-22r124,-64r-124,-63r0,-22xm162,-5r-145,0r0,-19r145,0r0,19","w":178},"\u25ca":{"d":"167,-125r-64,139r-22,0r-63,-139r64,-140r22,0xm142,-125r-50,-115v-12,42,-34,76,-50,114v16,39,38,73,49,116","w":185},"\u00a0":{"w":86},"\u00ad":{"d":"19,-88r0,-28r88,0r0,28r-88,0","w":126},"\u02c9":{"d":"-11,-236r0,-19r95,0r0,19r-95,0","w":73},"\u03a9":{"d":"15,-23v14,-1,33,2,45,-1v-22,-24,-41,-63,-41,-112v0,-70,40,-119,93,-119v56,0,90,55,90,117v0,52,-22,91,-42,115r46,0r0,23r-75,0r0,-17v50,-28,69,-213,-20,-213v-40,0,-65,43,-65,99v0,52,22,97,44,114r0,17r-75,0r0,-23","w":221},"\u2215":{"d":"-59,11r157,-272r21,0r-156,272r-22,0","w":60},"\u2010":{"d":"19,-88r0,-28r88,0r0,28r-88,0","w":126}}});
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * © 1990, 2002 Adobe Systems Incorporated. All rights reserved.
 * 
 * Trademark:
 * Helvetica is a trademark of Linotype Corp. registered in the U.S. Patent and
 * Trademark Office and may be registered in certain other jurisdictions in the
 * name of Linotype Corp. or its licensee Linotype GmbH.
 * 
 * Full name:
 * HelveticaNeueLTStd-BdCn
 * 
 * Designer:
 * Linotype Staff
 * 
 * Vendor URL:
 * http://www.adobe.com/type
 * 
 * License information:
 * http://www.adobe.com/type/legal.html
 */
Cufon.registerFont({"w":172,"face":{"font-family":"HelveticaCn","font-weight":700,"font-stretch":"condensed","units-per-em":"360","panose-1":"2 11 7 6 3 5 2 3 2 4","ascent":"257","descent":"-103","x-height":"5","bbox":"-59 -346 384 80.5593","underline-thickness":"18","underline-position":"-18","stemh":"38","stemv":"50","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":86,"k":{"\u201c":13,"\u2018":13}},"!":{"d":"71,-72r-36,0r-7,-102r0,-83r50,0v1,65,-2,126,-7,185xm28,-48r50,0r0,48r-50,0r0,-48","w":106},"\"":{"d":"96,-141r0,-116r45,0r0,116r-45,0xm26,-141r0,-116r45,0r0,116r-45,0","w":166},"#":{"d":"0,-63r0,-40r31,0r6,-44r-26,0r0,-40r31,0r8,-63r34,0r-7,63r35,0r8,-63r34,0r-7,63r26,0r0,40r-31,0r-6,44r26,0r0,40r-31,0r-8,63r-34,0r7,-63r-35,0r-7,63r-35,0r8,-63r-27,0xm72,-147r-6,44r35,0r6,-44r-35,0"},"$":{"d":"97,-97r0,64v31,-7,25,-56,0,-64xm74,-159r0,-58v-24,6,-24,49,0,58xm74,36r0,-31v-63,-7,-72,-37,-71,-81r50,0v0,20,2,38,21,43r0,-73v-39,-9,-68,-36,-68,-75v0,-44,26,-69,68,-74r0,-25r23,0r0,25v55,5,67,36,66,73r-49,0v0,-18,-5,-31,-17,-35r0,68v35,16,73,23,73,77v0,52,-25,74,-73,77r0,31r-23,0"},"%":{"d":"201,-65v0,28,1,43,15,43v14,0,16,-15,16,-43v0,-26,-2,-40,-16,-40v-14,0,-15,14,-15,40xm162,-64v0,-46,9,-68,54,-68v45,0,54,22,54,68v0,46,-9,69,-54,69v-45,0,-54,-23,-54,-69xm10,-186v0,-46,9,-69,54,-69v45,0,54,23,54,69v0,46,-9,69,-54,69v-45,0,-54,-23,-54,-69xm48,-188v0,28,2,43,16,43v14,0,16,-15,16,-43v0,-26,-2,-40,-16,-40v-14,0,-16,14,-16,40xm50,11r147,-272r32,0r-147,272r-32,0","w":280},"&":{"d":"94,-225v-34,2,-20,42,-3,57v23,-10,42,-54,3,-57xm123,-51r-43,-62v-19,15,-26,28,-26,44v0,31,52,48,69,18xm115,-137r38,52v5,-11,9,-28,9,-38r45,0v0,28,-11,53,-26,75r34,48r-56,0r-14,-20v-13,15,-37,25,-62,25v-65,0,-79,-45,-79,-74v0,-30,20,-54,52,-74v-39,-40,-37,-116,39,-114v85,2,80,88,20,120","w":213},"\u2019":{"d":"71,-257v0,56,8,112,-48,116r0,-26v15,-3,20,-17,19,-34r-19,0r0,-56r48,0","w":93,"k":{"\u2019":23,"d":9,"s":13,"\u0161":13}},"(":{"d":"68,-257r39,0v-56,100,-56,223,0,323r-39,0v-68,-115,-67,-208,0,-323","w":106},")":{"d":"0,-257r38,0v68,115,69,208,0,323r-38,0v56,-100,56,-223,0,-323","w":106},"*":{"d":"55,-257r30,0r0,46r44,-14r9,28r-44,14r27,38r-24,17r-27,-38r-27,38r-24,-17r27,-38r-43,-14r9,-28r43,14r0,-46","w":140},"+":{"d":"86,0r0,-69r-69,0r0,-44r69,0r0,-69r44,0r0,69r69,0r0,44r-69,0r0,69r-44,0","w":216},",":{"d":"19,-56r48,0v0,56,8,111,-48,115r0,-25v15,-3,20,-17,19,-34r-19,0r0,-56","w":86,"k":{"\u201d":13,"\u2019":13," ":13}},"-":{"d":"16,-125r101,0r0,42r-101,0r0,-42","w":133},".":{"d":"19,-56r48,0r0,56r-48,0r0,-56","w":86,"k":{"\u201d":33,"\u2019":33," ":13}},"\/":{"d":"-1,5r81,-267r41,0r-82,267r-40,0","w":119},"0":{"d":"58,-135r0,27v0,64,6,79,28,79v23,0,28,-19,28,-85r0,-28v0,-64,-6,-79,-28,-79v-23,0,-28,20,-28,86xm6,-119v0,-71,4,-136,80,-136v62,0,80,34,80,124v0,71,-4,136,-80,136v-62,0,-80,-34,-80,-124"},"1":{"d":"117,0r-51,0r0,-180r-51,0r0,-34v36,1,59,-12,64,-41r38,0r0,255"},"2":{"d":"163,-40r0,40r-157,0v-4,-53,39,-98,78,-131v24,-20,26,-32,26,-58v0,-21,-9,-32,-25,-32v-26,0,-29,23,-29,50r-50,0v-3,-54,22,-83,80,-84v94,-2,94,106,36,151v-19,15,-50,44,-55,64r96,0"},"3":{"d":"7,-75r50,0v1,30,5,46,28,46v25,0,29,-19,29,-41v0,-30,-15,-48,-51,-43r0,-34v32,5,46,-13,46,-41v0,-24,-7,-33,-24,-33v-22,0,-27,17,-27,41r-47,0v0,-50,27,-75,75,-75v46,0,73,21,73,66v1,32,-17,50,-39,57v33,5,46,28,46,60v0,34,-14,77,-85,77v-50,0,-75,-30,-74,-80"},"4":{"d":"96,-93r-1,-97r-50,97r51,0xm5,-53r0,-42r85,-160r53,0r0,162r25,0r0,40r-25,0r0,53r-47,0r0,-53r-91,0"},"5":{"d":"153,-250r0,40r-94,0r-5,58v10,-13,25,-19,47,-19v49,0,62,42,62,82v0,56,-15,94,-81,94v-68,0,-77,-42,-76,-78r50,0v0,17,3,42,25,42v21,0,31,-17,31,-50v0,-42,-7,-54,-30,-54v-15,0,-23,10,-25,24r-46,0r9,-139r133,0"},"6":{"d":"162,-190r-50,0v0,-19,-6,-31,-23,-31v-30,0,-35,41,-31,77v9,-13,25,-22,47,-22v45,0,63,34,63,80v0,58,-26,91,-83,91v-71,0,-80,-57,-80,-119v0,-72,2,-141,86,-141v37,0,70,16,71,65xm59,-79v0,29,5,50,29,50v25,0,28,-21,28,-50v0,-35,-8,-48,-28,-48v-21,0,-29,13,-29,48"},"7":{"d":"8,-250r157,0r0,40v-42,59,-67,138,-75,210r-54,0v8,-62,29,-137,79,-205r-107,0r0,-45"},"8":{"d":"5,-72v-1,-33,16,-56,43,-64v-68,-24,-33,-132,38,-119v71,-12,107,93,39,119v27,9,43,31,43,64v0,29,-11,77,-82,77v-71,0,-81,-48,-81,-77xm61,-186v0,24,10,36,25,36v15,0,26,-12,26,-36v0,-23,-9,-35,-26,-35v-17,0,-25,12,-25,35xm57,-73v0,24,6,44,29,44v23,0,30,-20,30,-44v0,-24,-7,-44,-30,-44v-23,0,-29,20,-29,44"},"9":{"d":"11,-59r50,0v0,19,6,30,23,30v30,0,35,-41,31,-77v-9,13,-26,22,-48,22v-45,0,-62,-34,-62,-80v0,-58,25,-91,82,-91v71,0,81,57,81,119v0,72,-2,141,-86,141v-37,0,-70,-15,-71,-64xm57,-171v0,35,8,49,28,49v21,0,28,-14,28,-49v0,-29,-4,-50,-28,-50v-25,0,-28,21,-28,50"},":":{"d":"19,0r0,-56r48,0r0,56r-48,0xm19,-131r0,-57r48,0r0,57r-48,0","w":86},";":{"d":"19,-56r48,0v0,56,8,111,-48,115r0,-25v15,-3,20,-17,19,-34r-19,0r0,-56xm19,-188r48,0r0,57r-48,0r0,-57","w":86},"<":{"d":"17,-72r0,-38r182,-75r0,45r-122,49r122,49r0,45","w":216},"=":{"d":"17,-108r0,-45r182,0r0,45r-182,0xm17,-30r0,-44r182,0r0,44r-182,0","w":216},">":{"d":"17,3r0,-45r122,-49r-122,-49r0,-45r182,75r0,38","w":216},"?":{"d":"60,-177r-47,0v-2,-50,20,-82,71,-83v76,-2,98,77,54,126v-15,17,-37,32,-33,63r-44,0v-4,-41,14,-65,36,-86v20,-19,21,-68,-11,-69v-21,0,-27,23,-26,49xm58,-48r50,0r0,48r-50,0r0,-48","w":173},"@":{"d":"148,-162v-38,-2,-58,69,-15,74v40,2,61,-70,15,-74xm188,-176r5,-19r31,0r-23,105v0,5,2,7,7,7v14,0,38,-24,38,-62v0,-48,-46,-83,-96,-83v-57,0,-99,48,-99,100v0,55,47,99,102,99v33,0,59,-11,78,-23r32,0v-25,36,-65,57,-119,57v-74,0,-134,-60,-134,-134v0,-74,60,-133,134,-133v72,0,134,43,134,109v0,76,-68,103,-91,103v-15,1,-20,-8,-24,-19v-30,35,-96,19,-96,-42v0,-63,79,-124,121,-65","w":288},"A":{"d":"0,0r68,-257r64,0r68,257r-54,0r-12,-54r-68,0r-12,54r-54,0xm75,-97r50,0r-25,-115","w":200,"k":{"w":6,"T":20,"v":6,"V":4,"W":4,"y":6,"\u00fd":6,"\u00ff":6,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"B":{"d":"18,0r0,-257v75,2,160,-18,160,65v0,29,-15,48,-39,57v28,4,47,26,47,60v0,40,-21,75,-81,75r-87,0xm70,-219r0,67v32,2,56,-3,56,-33v0,-31,-23,-36,-56,-34xm70,-116r0,78v35,1,62,-1,62,-39v0,-39,-27,-40,-62,-39","w":200},"C":{"d":"180,-170r-52,0v0,-37,-8,-54,-31,-54v-26,0,-33,26,-33,99v0,78,12,92,34,92v19,0,32,-10,32,-65r52,0v0,55,-14,103,-82,103v-78,0,-87,-56,-87,-134v0,-78,9,-133,87,-133v74,0,80,55,80,92","w":193,"k":{"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6}},"D":{"d":"21,0r0,-257r84,0v72,0,85,49,85,125v0,91,-19,132,-88,132r-81,0xm72,-219r0,181v58,4,66,-10,67,-93v1,-69,-8,-94,-67,-88","w":206,"k":{"Y":20,"\u00dd":20,"\u0178":20,"A":12,"\u00c6":12,"\u00c1":12,"\u00c2":12,"\u00c4":12,"\u00c0":12,"\u00c5":12,"\u00c3":12,",":9,".":9}},"E":{"d":"18,-257r144,0r0,42r-92,0r0,61r86,0r0,42r-86,0r0,70r95,0r0,42r-147,0r0,-257","w":173},"F":{"d":"18,0r0,-257r144,0r0,42r-92,0r0,61r86,0r0,42r-86,0r0,112r-52,0","w":166,"k":{"\u00eb":7,"\u00e3":7,"\u00e0":7,"\u00e4":7,"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13,",":40,".":40,"a":7,"\u00e6":7,"\u00e1":7,"\u00e2":7,"\u00e5":7,"e":7,"\u00e9":7,"\u00ea":7,"\u00e8":7}},"G":{"d":"182,-181r-50,0v0,-19,-8,-43,-29,-43v-25,0,-36,26,-36,90v0,62,6,101,36,101v20,0,38,-32,32,-67r-34,0r0,-39r84,0r0,139r-38,0v-1,-7,2,-18,-1,-24v-12,20,-30,29,-54,29v-64,0,-77,-47,-77,-136v0,-86,21,-131,87,-131v57,0,80,29,80,81","w":200},"H":{"d":"18,0r0,-257r52,0r0,98r60,0r0,-98r52,0r0,257r-52,0r0,-114r-60,0r0,114r-52,0","w":200},"I":{"d":"72,0r-51,0r0,-257r51,0r0,257","w":92},"J":{"d":"99,-257r52,0r0,185v0,55,-25,77,-78,77v-59,0,-69,-38,-68,-86r48,0v-1,27,1,48,23,48v19,0,23,-13,23,-40r0,-184","w":166},"K":{"d":"18,-257r52,0r1,103r65,-103r56,0r-70,110r78,147r-58,0r-53,-105r-19,29r0,76r-52,0r0,-257","w":193},"L":{"d":"162,0r-144,0r0,-257r52,0r0,215r92,0r0,42","w":166,"k":{"T":27,"V":27,"W":27,"y":13,"\u00fd":13,"\u00ff":13,"Y":33,"\u00dd":33,"\u0178":33,"\u201d":33,"\u2019":33}},"M":{"d":"19,0r0,-257r77,0r38,181r37,-181r76,0r0,257r-47,0r-1,-205r-46,205r-40,0r-46,-205r0,205r-48,0","w":266},"N":{"d":"18,-257r60,0r63,176r0,-176r48,0r0,257r-59,0r-64,-180r0,180r-48,0r0,-257","w":206},"O":{"d":"13,-129v0,-78,9,-133,87,-133v78,0,88,55,88,133v0,78,-10,134,-88,134v-78,0,-87,-56,-87,-134xm64,-129v0,69,5,96,36,96v31,0,36,-27,36,-96v0,-69,-5,-95,-36,-95v-31,0,-36,26,-36,95","w":200,"k":{"T":9,"Y":9,"\u00dd":9,"\u0178":9,"A":9,"\u00c6":9,"\u00c1":9,"\u00c2":9,"\u00c4":9,"\u00c0":9,"\u00c5":9,"\u00c3":9,",":9,".":9}},"P":{"d":"18,0r0,-257r91,0v53,0,70,38,70,77v0,64,-44,82,-109,77r0,103r-52,0xm70,-219r0,78v34,2,57,-2,57,-38v0,-34,-21,-44,-57,-40","w":186,"k":{"\u00e4":9,"A":19,"\u00c6":19,"\u00c1":19,"\u00c2":19,"\u00c4":19,"\u00c0":19,"\u00c5":19,"\u00c3":19,",":54,".":54,"a":9,"\u00e6":9,"\u00e1":9,"\u00e2":9,"\u00e0":9,"\u00e5":9,"\u00e3":9,"e":9,"\u00e9":9,"\u00ea":9,"\u00eb":9,"\u00e8":9,"o":9,"\u00f8":9,"\u0153":9,"\u00f3":9,"\u00f4":9,"\u00f6":9,"\u00f2":9,"\u00f5":9}},"Q":{"d":"134,0v-10,4,-20,5,-34,5v-78,0,-87,-56,-87,-134v0,-78,9,-133,87,-133v78,0,88,55,88,133v0,44,-3,81,-20,105r27,28r-30,28xm64,-129v0,69,5,96,36,96v31,0,36,-27,36,-96v0,-69,-5,-95,-36,-95v-31,0,-36,26,-36,95","w":200},"R":{"d":"70,-219r0,74v35,2,60,-1,60,-38v0,-34,-26,-38,-60,-36xm18,0r0,-257v76,1,164,-16,164,66v0,34,-14,58,-43,64v35,5,42,25,42,79v0,29,3,39,11,48r-56,0v-19,-30,13,-108,-38,-109r-28,0r0,109r-52,0","w":200,"k":{"T":6,"W":-4,"Y":6,"\u00dd":6,"\u0178":6,"U":-4,"\u00da":-4,"\u00db":-4,"\u00dc":-4,"\u00d9":-4}},"S":{"d":"8,-80r52,0v-1,28,4,47,34,47v16,0,31,-10,31,-32v0,-23,-12,-32,-46,-44v-46,-16,-67,-34,-67,-77v0,-50,30,-76,79,-76v48,0,83,22,80,76r-50,0v0,-24,-8,-38,-28,-38v-42,0,-40,53,-3,65v40,13,89,38,89,85v0,54,-33,79,-89,79v-63,0,-84,-30,-82,-85","w":186},"T":{"d":"4,-257r164,0r0,42r-56,0r0,215r-52,0r0,-215r-56,0r0,-42","k":{"\u00fc":27,"\u00f2":27,"\u00f6":27,"\u00ec":6,"\u00ee":6,"\u00ed":6,"\u00e8":27,"\u00eb":27,"\u00ea":27,"\u00e3":27,"\u00e5":27,"\u00e0":27,"\u00e4":27,"\u00e2":27,"w":27,"y":20,"\u00fd":20,"\u00ff":20,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":33,".":33,"a":27,"\u00e6":27,"\u00e1":27,"e":27,"\u00e9":27,"o":27,"\u00f8":27,"\u0153":27,"\u00f3":27,"\u00f4":27,"\u00f5":27,"-":20,"i":6,"\u0131":6,"\u00ef":6,"r":27,"u":27,"\u00fa":27,"\u00fb":27,"\u00f9":27,":":27,";":27}},"U":{"d":"15,-257r52,0r0,179v0,26,6,45,30,45v24,0,30,-19,30,-45r0,-179r52,0r0,179v0,66,-40,83,-82,83v-42,0,-82,-14,-82,-83r0,-179","w":193},"V":{"d":"1,-257r56,0r37,190r38,-190r54,0r-59,257r-67,0","w":186,"k":{"\u00f6":9,"\u00f4":9,"\u00ee":9,"\u00e8":9,"\u00eb":9,"\u00ea":9,"\u00e3":6,"\u00e5":6,"\u00e0":6,"\u00e4":6,"\u00e2":6,"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13,",":33,".":26,"a":6,"\u00e6":6,"\u00e1":6,"e":9,"\u00e9":9,"o":9,"\u00f8":9,"\u0153":9,"\u00f3":9,"\u00f2":9,"\u00f5":9,"-":6,"i":9,"\u0131":9,"\u00ed":9,"\u00ef":9,"\u00ec":9,"u":11,"\u00fa":11,"\u00fb":11,"\u00fc":11,"\u00f9":11,":":6,";":6}},"W":{"d":"50,0r-47,-257r50,0r29,190r30,-190r50,0r31,190r28,-190r50,0r-47,257r-58,0r-30,-186r-28,186r-58,0","w":273,"k":{"\u00f6":6,"\u00ea":6,"\u00e4":6,"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6,",":27,".":27,"a":6,"\u00e6":6,"\u00e1":6,"\u00e2":6,"\u00e0":6,"\u00e5":6,"\u00e3":6,"e":6,"\u00e9":6,"\u00eb":6,"\u00e8":6,"o":6,"\u00f8":6,"\u0153":6,"\u00f3":6,"\u00f4":6,"\u00f2":6,"\u00f5":6,"-":6}},"X":{"d":"66,-130r-59,-127r57,0r34,83r32,-83r57,0r-60,127r64,130r-58,0r-37,-87r-37,87r-57,0","w":193},"Y":{"d":"1,-257r58,0r35,99r36,-99r56,0r-66,156r0,101r-52,0r0,-101","w":187,"k":{"\u00fc":22,"\u00f6":29,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":40,".":40,"a":29,"\u00e6":29,"\u00e1":29,"\u00e2":29,"\u00e4":29,"\u00e0":29,"\u00e5":29,"\u00e3":29,"e":29,"\u00e9":29,"\u00ea":29,"\u00eb":29,"\u00e8":29,"o":29,"\u00f8":29,"\u0153":29,"\u00f3":29,"\u00f4":29,"\u00f2":29,"\u00f5":29,"-":27,"i":9,"\u0131":9,"\u00ed":9,"\u00ee":9,"\u00ef":9,"\u00ec":9,"u":22,"\u00fa":22,"\u00fb":22,"\u00f9":22,":":13,";":13,"O":7,"\u00d8":7,"\u0152":7,"\u00d3":7,"\u00d4":7,"\u00d6":7,"\u00d2":7,"\u00d5":7,"S":6,"\u0160":6}},"Z":{"d":"9,0r0,-38r94,-177r-88,0r0,-42r148,0r0,39r-96,176r98,0r0,42r-156,0","w":173},"[":{"d":"29,66r0,-323r82,0r0,36r-38,0r0,251r38,0r0,36r-82,0","w":113},"\\":{"d":"80,5r-81,-267r40,0r82,267r-41,0","w":119},"]":{"d":"2,66r0,-36r38,0r0,-251r-38,0r0,-36r83,0r0,323r-83,0","w":113},"^":{"d":"65,-111r-45,0r68,-139r40,0r68,139r-45,0r-43,-89","w":216},"_":{"d":"180,45r-180,0r0,-18r180,0r0,18","w":180},"\u2018":{"d":"23,-141v0,-56,-8,-112,48,-116r0,25v-14,3,-20,18,-19,34r19,0r0,57r-48,0","w":93,"k":{"\u2018":23,"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13}},"a":{"d":"61,-134r-45,0v-2,-48,29,-65,68,-65v119,0,46,114,77,199r-48,0v-4,-6,-3,-16,-7,-20v-12,20,-25,25,-49,25v-35,0,-47,-29,-47,-55v0,-48,36,-61,77,-68v29,-5,27,-49,-3,-47v-17,0,-24,12,-23,31xm107,-97v-19,14,-49,12,-49,41v0,15,5,27,18,27v13,0,31,-9,31,-30r0,-38","w":173},"b":{"d":"66,-97v0,42,5,64,27,64v22,0,25,-22,25,-64v0,-42,-3,-64,-25,-64v-22,0,-27,22,-27,64xm17,0r0,-257r49,0v1,26,-2,57,1,81v10,-15,23,-23,42,-23v41,0,59,30,59,102v0,72,-18,102,-59,102v-20,1,-32,-10,-45,-26r0,21r-47,0","w":180},"c":{"d":"157,-124r-47,0v0,-19,-4,-39,-23,-39v-24,0,-28,22,-28,67v0,48,5,67,27,67v17,0,24,-14,24,-45r47,0v0,51,-20,79,-73,79v-50,0,-75,-24,-75,-102v0,-80,33,-102,79,-102v46,0,69,29,69,75","w":166,"k":{"y":4,"\u00fd":4,"\u00ff":4,"l":7,"\u0142":7}},"d":{"d":"62,-97v0,42,3,64,25,64v22,0,27,-22,27,-64v0,-42,-5,-64,-27,-64v-22,0,-25,22,-25,64xm116,0v-1,-6,2,-16,-1,-21v-11,18,-25,26,-44,26v-41,0,-59,-30,-59,-102v0,-72,18,-102,59,-102v20,-1,31,10,43,23r0,-81r49,0r0,257r-47,0","w":180},"e":{"d":"157,-89r-98,0v-1,28,3,60,25,60v17,0,23,-12,26,-36r44,0v-2,45,-23,70,-70,70v-72,0,-75,-56,-75,-104v0,-52,10,-100,77,-100v62,-1,72,46,71,110xm59,-119r51,0v-1,-30,-4,-46,-25,-46v-22,1,-27,24,-26,46","w":166,"k":{"x":4}},"f":{"d":"27,0r0,-160r-25,0r0,-34r25,0v-7,-57,24,-75,79,-67r0,35v-25,-3,-33,7,-29,32r29,0r0,34r-29,0r0,160r-50,0","w":106,"k":{"\u201d":-6,"\u2019":-6,"a":7,"\u00e6":7,"\u00e1":7,"\u00e2":7,"\u00e4":7,"\u00e0":7,"\u00e5":7,"\u00e3":7}},"g":{"d":"63,14v-1,13,12,20,24,21v29,2,30,-34,26,-61v-42,49,-100,23,-100,-74v0,-45,6,-99,60,-99v15,-1,30,9,41,27r0,-22r48,0r0,184v0,51,-23,76,-81,76v-42,0,-66,-19,-66,-52r48,0xm62,-91v0,27,4,51,25,51v21,0,27,-23,27,-56v0,-47,-6,-65,-26,-65v-22,0,-26,18,-26,70","w":180,"k":{"y":-4,"\u00fd":-4,"\u00ff":-4}},"h":{"d":"17,0r0,-257r49,0r1,83v22,-40,96,-34,96,30r0,144r-49,0r0,-134v0,-19,-6,-27,-21,-27v-17,0,-27,10,-27,32r0,129r-49,0","w":180},"i":{"d":"18,0r0,-194r50,0r0,194r-50,0xm18,-217r0,-43r50,0r0,43r-50,0","w":86},"j":{"d":"18,-4r0,-190r50,0r0,207v4,39,-27,54,-77,50r0,-36v21,2,27,-6,27,-31xm18,-217r0,-43r50,0r0,43r-50,0","w":86},"k":{"d":"18,-257r50,0r1,136r50,-73r55,0r-56,77r64,117r-55,0r-41,-80r-18,23r0,57r-50,0r0,-257","w":180},"l":{"d":"18,0r0,-257r50,0r0,257r-50,0","w":86},"m":{"d":"17,0r0,-194r47,0v1,6,-2,16,1,20v21,-36,83,-32,94,6v18,-49,97,-40,97,27r0,141r-49,0r0,-135v0,-16,-6,-26,-20,-26v-16,0,-26,12,-26,34r0,127r-49,0r0,-135v0,-16,-6,-26,-20,-26v-16,0,-26,12,-26,34r0,127r-49,0","w":272},"n":{"d":"17,0r0,-194r47,0v1,7,-2,18,1,23v22,-44,98,-39,98,27r0,144r-49,0r0,-134v0,-19,-6,-27,-21,-27v-17,0,-27,10,-27,32r0,129r-49,0","w":180,"k":{"y":-4,"\u00fd":-4,"\u00ff":-4}},"o":{"d":"10,-97v0,-66,19,-102,76,-102v60,0,77,35,77,102v0,66,-20,102,-77,102v-60,0,-76,-35,-76,-102xm60,-97v0,40,2,68,26,68v20,0,27,-20,27,-68v0,-48,-7,-68,-27,-68v-24,0,-26,28,-26,68","k":{"v":-4}},"p":{"d":"66,-97v0,42,5,64,27,64v22,0,25,-22,25,-64v0,-42,-3,-64,-25,-64v-22,0,-27,22,-27,64xm17,63r0,-257r47,0v1,6,-2,16,1,21v11,-18,25,-26,44,-26v41,0,59,30,59,102v0,72,-18,102,-59,102v-20,1,-31,-10,-43,-23r0,81r-49,0","w":180,"k":{",":6,".":6}},"q":{"d":"114,-97v0,-42,-5,-64,-27,-64v-22,0,-25,22,-25,64v0,42,3,64,25,64v22,0,27,-22,27,-64xm114,63v-1,-26,2,-57,-1,-81v-10,15,-23,23,-42,23v-41,0,-59,-30,-59,-102v0,-72,18,-102,59,-102v20,-1,32,10,45,26r0,-21r47,0r0,257r-49,0","w":180},"r":{"d":"17,0r0,-194r47,0v1,8,-2,20,1,26v11,-21,26,-35,53,-30r0,48v-27,-4,-52,2,-52,34r0,116r-49,0","w":119,"k":{"v":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,",":27,".":27,"q":6,"-":13}},"s":{"d":"8,-63r45,0v-1,21,7,33,26,34v30,2,32,-39,7,-45v-35,-8,-76,-24,-76,-66v0,-32,20,-59,71,-59v48,1,68,21,66,63r-44,0v6,-36,-44,-38,-46,-8v-2,19,34,28,52,33v73,20,46,122,-29,116v-58,-4,-73,-26,-72,-68","w":159},"t":{"d":"27,-194r0,-55r50,0r0,55r29,0r0,34r-29,0r0,105v-2,20,12,23,29,20r0,35v-45,5,-79,6,-79,-49r0,-111r-25,0r0,-34r25,0","w":106},"u":{"d":"116,0v-1,-7,2,-18,-1,-23v-22,44,-98,39,-98,-27r0,-144r49,0r0,134v0,19,6,27,21,27v17,0,27,-10,27,-32r0,-129r49,0r0,194r-47,0","w":180},"v":{"d":"81,-55v12,-44,17,-94,27,-139r50,0r-49,194r-57,0r-50,-194r52,0","w":159,"k":{",":20,".":20,"a":6,"\u00e6":6,"\u00e1":6,"\u00e2":6,"\u00e4":6,"\u00e0":6,"\u00e5":6,"\u00e3":6}},"w":{"d":"45,0r-42,-194r49,0r24,138r24,-138r54,0r26,138r23,-138r48,0r-42,194r-56,0r-27,-138r-24,138r-57,0","w":253,"k":{",":13,".":13}},"x":{"d":"83,-135r27,-59r52,0r-51,94r53,100r-52,0r-29,-63r-29,63r-51,0r52,-100r-50,-94r52,0","w":166},"y":{"d":"17,63r0,-37v23,5,39,-4,39,-26r-54,-194r52,0r29,134r25,-134r50,0r-47,181v-19,76,-31,77,-94,76","w":159,"k":{",":20,".":20,"a":6,"\u00e6":6,"\u00e1":6,"\u00e2":6,"\u00e4":6,"\u00e0":6,"\u00e5":6,"\u00e3":6}},"z":{"d":"9,0r0,-38r77,-115r-74,0r0,-41r133,0r0,38r-78,116r78,0r0,40r-136,0","w":153},"{":{"d":"11,-81r0,-29v55,-5,-10,-150,61,-147r32,0r0,36v-57,-7,6,112,-51,126v33,5,26,60,26,99v-1,19,5,29,25,26r0,36v-43,3,-69,-2,-69,-48v0,-37,10,-97,-24,-99","w":113},"|":{"d":"18,5r0,-267r44,0r0,267r-44,0","w":79},"}":{"d":"9,66r0,-36v57,7,-5,-111,51,-126v-33,-5,-26,-60,-26,-99v0,-19,-5,-29,-25,-26r0,-36v43,-3,70,2,70,48v0,37,-11,97,24,99r0,29v-54,6,10,150,-62,147r-32,0","w":113},"~":{"d":"69,-126v24,0,61,25,77,25v14,0,28,-16,32,-25r13,39v-10,18,-23,30,-44,30v-24,0,-62,-24,-77,-24v-14,0,-28,15,-32,24r-13,-38v10,-18,23,-31,44,-31","w":216},"\u00a1":{"d":"28,63v-1,-65,2,-126,7,-185r36,0r7,102r0,83r-50,0xm28,-146r0,-48r50,0r0,48r-50,0","w":106},"\u00a2":{"d":"80,-31r0,-132v-26,7,-27,121,0,132xm80,37r0,-32v-38,-2,-68,-20,-68,-100v0,-54,11,-100,68,-104r0,-27r19,0r0,27v31,2,62,15,62,74r-48,0v0,-15,-1,-33,-14,-38r0,132v14,-8,14,-30,14,-44r48,0v0,48,-18,75,-62,80r0,32r-19,0"},"\u00a3":{"d":"3,-110r0,-30r24,0v-33,-57,-16,-115,61,-115v49,0,78,22,79,75r-48,0v0,-22,-7,-41,-28,-41v-51,0,-25,55,-11,81r60,0r0,30r-50,0v7,33,-9,47,-30,71v36,-10,60,25,95,-7r16,34v-46,41,-104,-15,-154,14r-15,-31v29,-20,51,-47,38,-81r-37,0"},"\u2044":{"d":"-59,11r146,-272r32,0r-146,272r-32,0","w":60},"\u00a5":{"d":"64,0r0,-57r-51,0r0,-30r51,0v1,-10,0,-18,-4,-24r-47,0r0,-29r33,0r-52,-110r54,0r39,97r40,-97r52,0r-52,110r33,0r0,29r-47,0v-4,6,-5,14,-4,24r51,0r0,30r-51,0r0,57r-45,0"},"\u0192":{"d":"23,-125r6,-29r38,0v9,-66,27,-118,104,-102r-7,34v-40,-13,-41,34,-50,68r40,0r-6,29r-40,0r-23,124v-5,50,-40,72,-98,62r8,-33v27,6,37,-3,43,-34r23,-119r-38,0"},"\u00a7":{"d":"110,-204v0,-15,-8,-25,-25,-24v-30,3,-28,32,1,45v36,16,82,26,82,79v0,18,-11,41,-28,51v12,9,20,24,20,45v0,43,-28,63,-74,63v-51,-1,-73,-26,-72,-68r47,0v-8,40,53,44,49,10v-5,-49,-105,-46,-105,-107v0,-22,12,-42,32,-52v-48,-34,-11,-100,52,-100v49,0,69,24,69,58r-48,0xm47,-117v0,28,45,31,62,48v48,-35,-16,-63,-42,-75v-14,8,-20,18,-20,27","w":173},"\u00a4":{"d":"22,-39r-22,-22r18,-18v-18,-25,-19,-67,0,-92r-18,-18r22,-22r18,18v25,-18,67,-19,92,0r19,-18r22,22r-18,18v18,25,19,67,0,92r18,18r-22,22r-19,-18v-25,19,-67,20,-92,0xm42,-125v0,29,17,47,44,47v27,0,45,-18,45,-47v0,-29,-18,-46,-45,-46v-27,0,-44,17,-44,46"},"'":{"d":"24,-141r0,-116r45,0r0,116r-45,0","w":93},"\u201c":{"d":"95,-141v1,-55,-9,-112,47,-116r0,25v-14,3,-20,18,-19,34r19,0r0,57r-47,0xm24,-141v0,-56,-8,-112,48,-116r0,25v-14,3,-20,18,-19,34r19,0r0,57r-48,0","w":166,"k":{"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13}},"\u00ab":{"d":"81,-75r0,-58r54,-43r0,47r-29,25r29,25r0,47xm19,-75r0,-58r53,-43r0,47r-28,25r28,25r0,47","w":153},"\u2039":{"d":"17,-75r0,-58r53,-43r0,47r-28,25r28,25r0,47","w":86},"\u203a":{"d":"17,-32r0,-47r28,-25r-28,-25r0,-47r53,43r0,58","w":86},"\ufb01":{"d":"125,0r0,-194r50,0r0,194r-50,0xm125,-217r0,-43r50,0r0,43r-50,0xm27,0r0,-160r-25,0r0,-34r25,0v-7,-57,24,-75,79,-67r0,35v-25,-3,-33,7,-29,32r29,0r0,34r-29,0r0,160r-50,0","w":193},"\ufb02":{"d":"125,0r0,-260r50,0r0,260r-50,0xm27,0r0,-160r-25,0r0,-34r25,0v-7,-57,24,-75,79,-67r0,35v-25,-3,-33,7,-29,32r29,0r0,34r-29,0r0,160r-50,0","w":193},"\u2013":{"d":"0,-84r0,-40r180,0r0,40r-180,0","w":180},"\u2020":{"d":"62,-186r0,-71r49,0r0,71r61,0r0,41r-61,0r0,195r-49,0r0,-195r-61,0r0,-41r61,0"},"\u2021":{"d":"62,50r0,-69r-61,0r0,-40r61,0r0,-89r-61,0r0,-41r61,0r0,-68r49,0r0,68r61,0r0,41r-61,0r0,89r61,0r0,40r-61,0r0,69r-49,0"},"\u00b7":{"d":"8,-102v0,-19,16,-34,35,-34v19,0,35,15,35,34v0,19,-16,35,-35,35v-19,0,-35,-16,-35,-35","w":86},"\u00b6":{"d":"66,50r0,-171v-42,0,-66,-24,-66,-67v-2,-93,89,-64,168,-69r0,307r-38,0r0,-273r-26,0r0,273r-38,0"},"\u2022":{"d":"26,-129v0,-35,29,-64,64,-64v35,0,64,29,64,64v0,35,-29,65,-64,65v-35,0,-64,-30,-64,-65","w":180},"\u201a":{"d":"23,-56r48,0v0,56,8,111,-48,115r0,-25v15,-3,20,-17,19,-34r-19,0r0,-56","w":93},"\u201e":{"d":"95,0r0,-56r47,0v-1,55,9,111,-47,115r0,-25v15,-3,19,-17,18,-34r-18,0xm24,0r0,-56r48,0v0,56,8,111,-48,115r0,-25v15,-3,20,-17,19,-34r-19,0","w":166},"\u201d":{"d":"24,-201r0,-56r48,0v0,56,8,112,-48,116r0,-26v15,-3,20,-17,19,-34r-19,0xm95,-201r0,-56r47,0v-1,55,9,112,-47,116r0,-26v15,-3,19,-17,18,-34r-18,0","w":166,"k":{" ":13}},"\u00bb":{"d":"19,-32r0,-47r28,-25r-28,-25r0,-47r53,43r0,58xm81,-32r0,-47r28,-25r-28,-25r0,-47r54,43r0,58","w":153},"\u2026":{"d":"36,-56r48,0r0,56r-48,0r0,-56xm156,-56r48,0r0,56r-48,0r0,-56xm276,-56r48,0r0,56r-48,0r0,-56","w":360},"\u2030":{"d":"314,-65v0,28,2,43,16,43v14,0,16,-15,16,-43v0,-26,-2,-40,-16,-40v-14,0,-16,14,-16,40xm276,-64v0,-46,9,-68,54,-68v45,0,54,22,54,68v0,46,-9,69,-54,69v-45,0,-54,-23,-54,-69xm10,-186v0,-46,9,-69,54,-69v45,0,54,23,54,69v0,46,-9,69,-54,69v-45,0,-54,-23,-54,-69xm48,-188v0,28,2,43,16,43v14,0,16,-15,16,-43v0,-26,-2,-40,-16,-40v-14,0,-16,14,-16,40xm154,-64v0,-46,9,-68,54,-68v45,0,54,22,54,68v0,46,-9,69,-54,69v-45,0,-54,-23,-54,-69xm192,-65v0,28,2,43,16,43v14,0,16,-15,16,-43v0,-26,-2,-40,-16,-40v-14,0,-16,14,-16,40xm46,11r146,-272r32,0r-146,272r-32,0","w":393},"\u00bf":{"d":"113,-16r47,0v2,49,-20,80,-71,82v-77,2,-96,-76,-53,-125v15,-17,36,-33,32,-63r44,0v11,60,-47,72,-49,124v0,18,8,30,24,30v21,0,27,-22,26,-48xm115,-146r-50,0r0,-48r50,0r0,48","w":173},"`":{"d":"63,-216r-33,0r-36,-52r50,0","w":79},"\u00b4":{"d":"17,-216r19,-52r50,0r-36,52r-33,0","w":79},"\u02c6":{"d":"-14,-216r28,-52r52,0r28,52r-38,0r-17,-31r-17,31r-36,0","w":79},"\u02dc":{"d":"9,-220r-26,0v4,-45,36,-53,67,-34v10,5,22,-1,21,-11r25,0v-3,26,-15,45,-33,45v-21,0,-47,-30,-54,0","w":79},"\u00af":{"d":"-13,-257r106,0r0,27r-106,0r0,-27","w":79},"\u02d8":{"d":"-10,-268r23,0v1,30,53,30,54,0r23,0v0,19,-11,51,-50,51v-39,0,-50,-32,-50,-51","w":79},"\u02d9":{"d":"20,-262r40,0r0,42r-40,0r0,-42","w":79},"\u00a8":{"d":"-11,-220r0,-42r40,0r0,42r-40,0xm51,-220r0,-42r40,0r0,42r-40,0","w":79},"\u02da":{"d":"-1,-251v0,-23,18,-41,41,-41v23,0,41,18,41,41v0,23,-18,41,-41,41v-23,0,-41,-18,-41,-41xm19,-251v0,12,9,21,21,21v12,0,21,-9,21,-21v0,-12,-9,-21,-21,-21v-12,0,-21,9,-21,21","w":79},"\u00b8":{"d":"33,0r20,0r-14,22v20,-7,39,4,42,25v5,35,-57,40,-81,27r7,-17v10,7,43,10,43,-7v1,-19,-30,-5,-36,-17","w":79},"\u02dd":{"d":"-13,-216r19,-52r50,0r-35,52r-34,0xm46,-216r20,-52r50,0r-36,52r-34,0","w":79},"\u02db":{"d":"76,52r6,20v-24,16,-79,10,-73,-22v-1,-24,25,-54,68,-50v-31,22,-37,31,-37,43v-1,18,25,18,36,9","w":79},"\u02c7":{"d":"14,-216r-28,-52r38,0r17,30r17,-30r36,0r-28,52r-52,0","w":79},"\u2014":{"d":"0,-84r0,-40r360,0r0,40r-360,0","w":360},"\u00c6":{"d":"-2,0r97,-257r167,0r0,42r-85,0r0,61r79,0r0,42r-79,0r0,70r88,0r0,42r-138,0r0,-54r-57,0r-18,54r-54,0xm84,-97r43,0r0,-120r-3,0","w":273},"\u00aa":{"d":"57,-255v80,-2,33,64,52,120r-36,0v-2,-4,-3,-8,-4,-12v-14,29,-72,13,-65,-18v-3,-30,25,-37,53,-41v18,-2,15,-26,-1,-26v-11,0,-16,7,-15,17r-33,0v-2,-30,18,-39,49,-40xm69,-193v-11,7,-29,7,-29,23v0,8,3,15,11,15v16,2,20,-19,18,-38","w":113},"\u0141":{"d":"18,0r0,-92r-18,11r0,-38r18,-11r0,-127r52,0r0,94r45,-28r0,38r-45,28r0,83r92,0r0,42r-144,0","w":166,"k":{"T":27,"V":27,"W":27,"y":13,"\u00fd":13,"\u00ff":13,"Y":33,"\u00dd":33,"\u0178":33,"\u201d":33,"\u2019":33}},"\u00d8":{"d":"125,-211v-5,-9,-13,-13,-25,-13v-31,0,-36,26,-36,95v0,22,1,41,3,54xm134,-182v-22,43,-39,91,-59,136v5,9,13,13,25,13v31,0,36,-27,36,-96v0,-22,0,-39,-2,-53xm30,11r11,-25v-24,-22,-28,-64,-28,-115v0,-78,9,-133,87,-133v18,0,32,3,44,9r9,-22r17,7r-11,25v24,22,29,63,29,114v0,78,-10,134,-88,134v-18,0,-32,-3,-43,-9r-10,22","w":200,"k":{"T":9,"Y":9,"\u00dd":9,"\u0178":9,"A":9,"\u00c6":9,"\u00c1":9,"\u00c2":9,"\u00c4":9,"\u00c0":9,"\u00c5":9,"\u00c3":9,",":9,".":9}},"\u0152":{"d":"269,-257r0,42r-87,0r0,61r82,0r0,42r-82,0r0,70r90,0r0,42r-134,0v-1,-5,2,-12,-1,-15v-6,13,-27,20,-44,20v-75,0,-80,-68,-80,-136v0,-67,10,-131,77,-131v19,-1,37,7,48,19r0,-14r131,0xm64,-129v0,68,5,96,36,96v31,0,32,-24,32,-96v0,-72,-1,-95,-32,-95v-31,0,-36,27,-36,95","w":280},"\u00ba":{"d":"4,-193v0,-40,13,-62,53,-62v41,0,52,21,52,62v0,40,-12,61,-52,61v-41,0,-53,-20,-53,-61xm40,-193v0,22,2,38,17,38v12,0,16,-11,16,-38v0,-27,-4,-39,-16,-39v-15,0,-17,17,-17,39","w":113},"\u00e6":{"d":"107,-97v-19,13,-50,11,-50,41v0,15,6,27,19,27v13,0,31,-9,31,-30r0,-38xm153,-119r50,0v-1,-30,-5,-46,-25,-46v-21,1,-26,24,-25,46xm60,-134r-44,0v-2,-48,29,-65,68,-65v26,0,40,5,50,23v7,-15,25,-23,46,-23v62,-1,71,47,70,110r-97,0v-1,28,2,60,24,60v16,0,23,-12,26,-36r44,0v-2,45,-24,70,-70,70v-36,0,-51,-16,-58,-33v-15,29,-31,33,-62,33v-35,0,-47,-29,-47,-55v0,-48,36,-61,77,-68v29,-5,27,-49,-3,-47v-17,0,-26,12,-24,31","w":259},"\u0131":{"d":"18,0r0,-194r50,0r0,194r-50,0","w":86},"\u0142":{"d":"18,0r0,-102r-22,16r0,-32r22,-15r0,-124r50,0r0,91r23,-15r0,32r-23,15r0,134r-50,0","w":86},"\u00f8":{"d":"60,-67v17,-27,29,-58,45,-86v-4,-9,-10,-12,-19,-12v-32,0,-26,61,-26,98xm67,-41v4,8,9,12,19,12v20,0,27,-20,27,-68v0,-12,-1,-21,-1,-29xm19,13r13,-26v-17,-16,-22,-44,-22,-84v0,-84,48,-119,116,-94r12,-24r16,9r-14,25v17,16,23,44,23,84v0,83,-49,119,-116,94r-12,24","k":{"v":-4}},"\u0153":{"d":"256,-89r-98,0v-1,28,3,60,25,60v17,0,23,-12,26,-36r44,0v-2,45,-23,70,-67,70v-30,0,-45,-14,-50,-28v-7,18,-29,28,-54,28v-55,0,-72,-35,-72,-102v0,-66,20,-102,77,-102v27,0,41,9,51,27v10,-18,28,-27,47,-27v62,-1,72,46,71,110xm87,-29v19,0,26,-20,26,-68v0,-48,-6,-68,-26,-68v-24,0,-27,28,-27,68v0,40,2,68,27,68xm158,-119r51,0v-1,-30,-4,-46,-25,-46v-22,1,-27,24,-26,46","w":266,"k":{"x":4}},"\u00df":{"d":"64,0r-49,0r0,-190v0,-50,24,-72,76,-72v74,0,97,89,39,114v58,14,61,151,-25,150v-8,0,-18,0,-23,-1r0,-34v30,6,39,-16,38,-51v0,-30,-9,-47,-38,-44r0,-34v23,2,30,-11,30,-34v0,-17,-5,-32,-23,-32v-20,0,-25,16,-25,39r0,189","w":180},"\u00b9":{"d":"41,-101r0,-104r-32,0r0,-25v23,1,39,-7,42,-25r31,0r0,154r-41,0","w":112},"\u00ac":{"d":"154,-35r0,-73r-137,0r0,-45r182,0r0,118r-45,0","w":216},"\u00b5":{"d":"114,-65r0,-129r49,0r0,194r-47,0v-1,-7,2,-18,-1,-23v-13,22,-30,33,-49,25r0,61r-49,0r0,-257r49,0r0,134v0,19,6,27,21,27v17,0,27,-10,27,-32","w":180},"\u2122":{"d":"303,-108r-1,-102r-34,102r-36,0r-35,-102r0,102r-38,0r0,-149r61,0r31,90r29,-90r61,0r0,149r-38,0xm51,-108r0,-115r-40,0r0,-34r121,0r0,34r-40,0r0,115r-41,0","w":356},"\u00d0":{"d":"21,0r0,-113r-21,0r0,-39r21,0r0,-105r84,0v72,0,85,49,85,125v0,91,-19,132,-88,132r-81,0xm72,-219r0,67r34,0r0,39r-34,0r0,75v58,4,66,-10,67,-93v1,-69,-8,-94,-67,-88","w":206,"k":{"Y":20,"\u00dd":20,"\u0178":20,"A":12,"\u00c6":12,"\u00c1":12,"\u00c2":12,"\u00c4":12,"\u00c0":12,"\u00c5":12,"\u00c3":12,",":9,".":9}},"\u00bd":{"d":"26,11r146,-272r32,0r-146,272r-32,0xm33,-101r0,-104r-33,0r0,-25v23,1,39,-7,42,-25r31,0r0,154r-40,0xm260,0r-113,0v-4,-34,28,-63,55,-81v14,-9,17,-18,17,-29v0,-9,-6,-17,-15,-17v-15,0,-19,15,-19,27r-38,0v-2,-36,13,-53,58,-54v66,-2,70,58,31,86v-12,8,-39,27,-40,38r64,0r0,30","w":259},"\u00b1":{"d":"86,-143r0,-39r44,0r0,39r69,0r0,44r-69,0r0,39r-44,0r0,-39r-69,0r0,-44r69,0xm17,0r0,-45r182,0r0,45r-182,0","w":216},"\u00de":{"d":"18,0r0,-257r52,0r0,46r39,0v53,0,70,38,70,77v0,64,-44,82,-109,77r0,57r-52,0xm70,-173r0,78v34,2,57,-2,57,-38v0,-34,-21,-44,-57,-40","w":186},"\u00bc":{"d":"206,-57v-1,-17,2,-37,-1,-52r-31,52r32,0xm144,-28r0,-32r55,-94r45,0r0,97r16,0r0,29r-16,0r0,28r-38,0r0,-28r-62,0xm35,11r146,-272r32,0r-146,272r-32,0xm33,-101r0,-104r-33,0r0,-25v23,1,39,-7,42,-25r31,0r0,154r-40,0","w":259},"\u00f7":{"d":"17,-69r0,-44r182,0r0,44r-182,0xm73,-167v0,-19,16,-35,35,-35v19,0,35,16,35,35v0,19,-16,35,-35,35v-19,0,-35,-16,-35,-35xm73,-15v0,-19,16,-35,35,-35v19,0,35,16,35,35v0,19,-16,35,-35,35v-19,0,-35,-16,-35,-35","w":216},"\u00a6":{"d":"18,5r0,-98r44,0r0,98r-44,0xm18,-165r0,-97r44,0r0,97r-44,0","w":79},"\u00b0":{"d":"19,-202v0,-30,23,-53,53,-53v30,0,53,23,53,53v0,30,-23,54,-53,54v-30,0,-53,-24,-53,-54xm46,-202v0,14,12,26,26,26v14,0,26,-12,26,-26v0,-14,-12,-26,-26,-26v-14,0,-26,12,-26,26","w":144},"\u00fe":{"d":"66,-97v0,42,5,64,27,64v22,0,25,-22,25,-64v0,-42,-3,-64,-25,-64v-22,0,-27,22,-27,64xm17,63r0,-320r49,0r1,84v9,-18,23,-26,42,-26v41,0,59,30,59,102v0,72,-18,102,-59,102v-20,1,-31,-10,-43,-23r0,81r-49,0","w":180},"\u00be":{"d":"144,-28r0,-32r55,-94r45,0r0,97r16,0r0,29r-16,0r0,28r-38,0r0,-28r-62,0xm174,-57r32,0v-1,-17,2,-37,-1,-52xm49,11r146,-272r32,0r-146,272r-32,0xm3,-206v-1,-35,19,-45,52,-49v59,-6,69,62,28,74v21,4,29,17,29,36v0,21,-9,47,-61,47v-38,0,-52,-19,-51,-52r38,0v0,13,5,24,18,24v12,0,16,-9,16,-19v0,-14,-11,-25,-32,-22r0,-26v29,8,42,-35,15,-35v-13,0,-16,10,-16,22r-36,0","w":259},"\u00b2":{"d":"112,-101r-112,0v-4,-34,27,-62,54,-80v14,-9,18,-19,18,-30v0,-9,-6,-17,-15,-17v-15,0,-19,15,-19,27r-38,0v-2,-36,13,-53,58,-54v65,-3,68,58,31,86v-12,9,-39,27,-40,39r63,0r0,29","w":112},"\u00ae":{"d":"92,-57r0,-144v51,-2,111,-4,111,45v0,24,-15,37,-35,40r35,59r-34,0r-34,-57r-12,0r0,57r-31,0xm123,-175r0,35v22,-1,50,6,49,-18v-1,-23,-28,-16,-49,-17xm10,-129v0,-74,60,-133,134,-133v74,0,134,59,134,133v0,74,-60,134,-134,134v-74,0,-134,-60,-134,-134xm51,-129v0,52,39,96,93,96v54,0,93,-44,93,-96v0,-52,-39,-95,-93,-95v-54,0,-93,43,-93,95","w":288},"\u2212":{"d":"17,-69r0,-44r182,0r0,44r-182,0","w":216},"\u00f0":{"d":"60,-94v0,38,2,65,26,65v20,0,27,-19,27,-65v0,-44,-7,-64,-27,-64v-24,0,-26,28,-26,64xm38,-210r-14,-15r27,-16v-8,-8,-16,-16,-24,-23r38,-22v9,8,16,14,24,22r27,-16r15,15r-27,17v38,42,59,85,59,151v0,66,-20,102,-77,102v-60,0,-76,-35,-76,-102v0,-70,39,-113,89,-86v-9,-14,-20,-29,-33,-43"},"\u00d7":{"d":"21,-35r56,-56r-56,-56r31,-31r56,56r56,-56r31,31r-56,56r56,56r-31,31r-56,-56r-56,56","w":216},"\u00b3":{"d":"3,-206v-1,-35,19,-45,52,-49v59,-6,69,62,28,74v21,4,29,17,29,36v0,21,-9,47,-61,47v-38,0,-52,-19,-51,-52r38,0v0,13,5,24,18,24v12,0,16,-9,16,-19v0,-14,-11,-25,-32,-22r0,-26v29,8,42,-35,15,-35v-13,0,-16,10,-16,22r-36,0","w":112},"\u00a9":{"d":"178,-107r36,0v-16,93,-146,59,-139,-23v-10,-84,127,-110,138,-23r-35,0v-15,-44,-74,-22,-69,23v-7,47,60,66,69,23xm51,-129v0,52,39,96,93,96v54,0,93,-44,93,-96v0,-52,-39,-95,-93,-95v-54,0,-93,43,-93,95xm10,-129v0,-74,60,-133,134,-133v74,0,134,59,134,133v0,74,-60,134,-134,134v-74,0,-134,-60,-134,-134","w":288},"\u00c1":{"d":"0,0r68,-257r64,0r68,257r-54,0r-12,-54r-68,0r-12,54r-54,0xm75,-97r50,0r-25,-115xm77,-272r19,-52r50,0r-35,52r-34,0","w":200,"k":{"w":6,"T":20,"v":6,"V":4,"W":4,"y":6,"\u00fd":6,"\u00ff":6,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c2":{"d":"0,0r68,-257r64,0r68,257r-54,0r-12,-54r-68,0r-12,54r-54,0xm75,-97r50,0r-25,-115xm46,-272r28,-52r52,0r28,52r-38,0r-17,-31r-17,31r-36,0","w":200,"k":{"w":6,"T":20,"v":6,"V":4,"W":4,"y":6,"\u00fd":6,"\u00ff":6,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c4":{"d":"0,0r68,-257r64,0r68,257r-54,0r-12,-54r-68,0r-12,54r-54,0xm75,-97r50,0r-25,-115xm49,-275r0,-43r40,0r0,43r-40,0xm111,-275r0,-43r40,0r0,43r-40,0","w":200,"k":{"w":6,"T":20,"v":6,"V":4,"W":4,"y":6,"\u00fd":6,"\u00ff":6,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c0":{"d":"0,0r68,-257r64,0r68,257r-54,0r-12,-54r-68,0r-12,54r-54,0xm75,-97r50,0r-25,-115xm123,-272r-33,0r-36,-52r50,0","w":200,"k":{"w":6,"T":20,"v":6,"V":4,"W":4,"y":6,"\u00fd":6,"\u00ff":6,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c5":{"d":"0,0r68,-257r64,0r68,257r-54,0r-12,-54r-68,0r-12,54r-54,0xm75,-97r50,0r-25,-115xm59,-305v0,-23,18,-41,41,-41v23,0,41,18,41,41v0,23,-18,41,-41,41v-23,0,-41,-18,-41,-41xm79,-305v0,12,9,21,21,21v12,0,21,-9,21,-21v0,-12,-9,-21,-21,-21v-12,0,-21,9,-21,21","w":200,"k":{"w":6,"T":20,"v":6,"V":4,"W":4,"y":6,"\u00fd":6,"\u00ff":6,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c3":{"d":"0,0r68,-257r64,0r68,257r-54,0r-12,-54r-68,0r-12,54r-54,0xm75,-97r50,0r-25,-115xm69,-275r-25,0v3,-45,35,-54,66,-35v10,6,22,-1,21,-11r26,0v-3,26,-16,45,-34,45v-21,0,-47,-28,-54,1","w":200,"k":{"w":6,"T":20,"v":6,"V":4,"W":4,"y":6,"\u00fd":6,"\u00ff":6,"Y":20,"\u00dd":20,"\u0178":20,"\u201d":20,"\u2019":20}},"\u00c7":{"d":"77,33r17,-28v-72,-3,-81,-58,-81,-134v0,-78,9,-133,87,-133v74,0,80,55,80,92r-52,0v0,-37,-8,-54,-31,-54v-26,0,-33,26,-33,99v0,78,12,92,34,92v19,0,32,-10,32,-65r52,0v0,52,-12,97,-69,103r-10,17v19,-7,39,5,42,25v5,35,-58,40,-82,27r7,-17v10,7,43,10,43,-7v1,-19,-30,-5,-36,-17","w":193,"k":{"A":6,"\u00c6":6,"\u00c1":6,"\u00c2":6,"\u00c4":6,"\u00c0":6,"\u00c5":6,"\u00c3":6}},"\u00c9":{"d":"18,-257r144,0r0,42r-92,0r0,61r86,0r0,42r-86,0r0,70r95,0r0,42r-147,0r0,-257xm68,-272r19,-52r50,0r-35,52r-34,0","w":173},"\u00ca":{"d":"18,-257r144,0r0,42r-92,0r0,61r86,0r0,42r-86,0r0,70r95,0r0,42r-147,0r0,-257xm37,-272r28,-52r52,0r28,52r-38,0r-17,-31r-17,31r-36,0","w":173},"\u00cb":{"d":"18,-257r144,0r0,42r-92,0r0,61r86,0r0,42r-86,0r0,70r95,0r0,42r-147,0r0,-257xm40,-275r0,-43r40,0r0,43r-40,0xm102,-275r0,-43r40,0r0,43r-40,0","w":173},"\u00c8":{"d":"18,-257r144,0r0,42r-92,0r0,61r86,0r0,42r-86,0r0,70r95,0r0,42r-147,0r0,-257xm114,-272r-33,0r-36,-52r50,0","w":173},"\u00cd":{"d":"72,0r-51,0r0,-257r51,0r0,257xm23,-272r19,-52r50,0r-35,52r-34,0","w":92},"\u00ce":{"d":"72,0r-51,0r0,-257r51,0r0,257xm-8,-272r29,-52r51,0r28,52r-38,0r-16,-31r-18,31r-36,0","w":92},"\u00cf":{"d":"72,0r-51,0r0,-257r51,0r0,257xm-5,-275r0,-43r41,0r0,43r-41,0xm57,-275r0,-43r41,0r0,43r-41,0","w":92},"\u00cc":{"d":"72,0r-51,0r0,-257r51,0r0,257xm70,-272r-34,0r-35,-52r49,0","w":92},"\u00d1":{"d":"18,-257r60,0r63,176r0,-176r48,0r0,257r-59,0r-64,-180r0,180r-48,0r0,-257xm72,-275r-25,0v3,-45,35,-54,66,-35v10,6,22,-1,21,-11r26,0v-3,26,-16,45,-34,45v-21,1,-46,-28,-54,1","w":206},"\u00d3":{"d":"13,-129v0,-78,9,-133,87,-133v78,0,88,55,88,133v0,78,-10,134,-88,134v-78,0,-87,-56,-87,-134xm64,-129v0,69,5,96,36,96v31,0,36,-27,36,-96v0,-69,-5,-95,-36,-95v-31,0,-36,26,-36,95xm77,-272r19,-52r50,0r-35,52r-34,0","w":200,"k":{"T":9,"Y":9,"\u00dd":9,"\u0178":9,"A":9,"\u00c6":9,"\u00c1":9,"\u00c2":9,"\u00c4":9,"\u00c0":9,"\u00c5":9,"\u00c3":9,",":9,".":9}},"\u00d4":{"d":"13,-129v0,-78,9,-133,87,-133v78,0,88,55,88,133v0,78,-10,134,-88,134v-78,0,-87,-56,-87,-134xm64,-129v0,69,5,96,36,96v31,0,36,-27,36,-96v0,-69,-5,-95,-36,-95v-31,0,-36,26,-36,95xm46,-272r28,-52r52,0r28,52r-38,0r-17,-31r-17,31r-36,0","w":200,"k":{"T":9,"Y":9,"\u00dd":9,"\u0178":9,"A":9,"\u00c6":9,"\u00c1":9,"\u00c2":9,"\u00c4":9,"\u00c0":9,"\u00c5":9,"\u00c3":9,",":9,".":9}},"\u00d6":{"d":"13,-129v0,-78,9,-133,87,-133v78,0,88,55,88,133v0,78,-10,134,-88,134v-78,0,-87,-56,-87,-134xm64,-129v0,69,5,96,36,96v31,0,36,-27,36,-96v0,-69,-5,-95,-36,-95v-31,0,-36,26,-36,95xm49,-275r0,-43r40,0r0,43r-40,0xm111,-275r0,-43r40,0r0,43r-40,0","w":200,"k":{"T":9,"Y":9,"\u00dd":9,"\u0178":9,"A":9,"\u00c6":9,"\u00c1":9,"\u00c2":9,"\u00c4":9,"\u00c0":9,"\u00c5":9,"\u00c3":9,",":9,".":9}},"\u00d2":{"d":"13,-129v0,-78,9,-133,87,-133v78,0,88,55,88,133v0,78,-10,134,-88,134v-78,0,-87,-56,-87,-134xm64,-129v0,69,5,96,36,96v31,0,36,-27,36,-96v0,-69,-5,-95,-36,-95v-31,0,-36,26,-36,95xm123,-272r-33,0r-36,-52r50,0","w":200,"k":{"T":9,"Y":9,"\u00dd":9,"\u0178":9,"A":9,"\u00c6":9,"\u00c1":9,"\u00c2":9,"\u00c4":9,"\u00c0":9,"\u00c5":9,"\u00c3":9,",":9,".":9}},"\u00d5":{"d":"13,-129v0,-78,9,-133,87,-133v78,0,88,55,88,133v0,78,-10,134,-88,134v-78,0,-87,-56,-87,-134xm64,-129v0,69,5,96,36,96v31,0,36,-27,36,-96v0,-69,-5,-95,-36,-95v-31,0,-36,26,-36,95xm69,-275r-25,0v3,-45,35,-54,66,-35v10,6,22,-1,21,-11r26,0v-3,26,-16,45,-34,45v-21,0,-47,-28,-54,1","w":200,"k":{"T":9,"Y":9,"\u00dd":9,"\u0178":9,"A":9,"\u00c6":9,"\u00c1":9,"\u00c2":9,"\u00c4":9,"\u00c0":9,"\u00c5":9,"\u00c3":9,",":9,".":9}},"\u0160":{"d":"8,-80r52,0v-1,28,4,47,34,47v16,0,31,-10,31,-32v0,-23,-12,-32,-46,-44v-46,-16,-67,-34,-67,-77v0,-50,30,-76,79,-76v48,0,83,22,80,76r-50,0v0,-24,-8,-38,-28,-38v-42,0,-40,53,-3,65v40,13,89,38,89,85v0,54,-33,79,-89,79v-63,0,-84,-30,-82,-85xm68,-272r-28,-52r38,0r16,31r18,-31r36,0r-28,52r-52,0","w":186},"\u00da":{"d":"15,-257r52,0r0,179v0,26,6,45,30,45v24,0,30,-19,30,-45r0,-179r52,0r0,179v0,66,-40,83,-82,83v-42,0,-82,-14,-82,-83r0,-179xm73,-272r20,-52r50,0r-36,52r-34,0","w":193},"\u00db":{"d":"15,-257r52,0r0,179v0,26,6,45,30,45v24,0,30,-19,30,-45r0,-179r52,0r0,179v0,66,-40,83,-82,83v-42,0,-82,-14,-82,-83r0,-179xm43,-272r28,-52r52,0r28,52r-38,0r-17,-31r-17,31r-36,0","w":193},"\u00dc":{"d":"15,-257r52,0r0,179v0,26,6,45,30,45v24,0,30,-19,30,-45r0,-179r52,0r0,179v0,66,-40,83,-82,83v-42,0,-82,-14,-82,-83r0,-179xm46,-275r0,-43r40,0r0,43r-40,0xm108,-275r0,-43r40,0r0,43r-40,0","w":193},"\u00d9":{"d":"15,-257r52,0r0,179v0,26,6,45,30,45v24,0,30,-19,30,-45r0,-179r52,0r0,179v0,66,-40,83,-82,83v-42,0,-82,-14,-82,-83r0,-179xm120,-272r-34,0r-35,-52r50,0","w":193},"\u00dd":{"d":"1,-257r58,0r35,99r36,-99r56,0r-66,156r0,101r-52,0r0,-101xm70,-272r20,-52r49,0r-35,52r-34,0","w":187,"k":{"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":40,".":40,"a":29,"\u00e6":29,"\u00e1":29,"\u00e2":29,"\u00e4":29,"\u00e0":29,"\u00e5":29,"\u00e3":29,"e":29,"\u00e9":29,"\u00ea":29,"\u00eb":29,"\u00e8":29,"o":29,"\u00f8":29,"\u0153":29,"\u00f3":29,"\u00f4":29,"\u00f6":29,"\u00f2":29,"\u00f5":29,"-":27,"i":9,"\u0131":9,"\u00ed":9,"\u00ee":9,"\u00ef":9,"\u00ec":9,"u":22,"\u00fa":22,"\u00fb":22,"\u00fc":22,"\u00f9":22,":":13,";":13,"O":7,"\u00d8":7,"\u0152":7,"\u00d3":7,"\u00d4":7,"\u00d6":7,"\u00d2":7,"\u00d5":7,"S":6,"\u0160":6}},"\u0178":{"d":"1,-257r58,0r35,99r36,-99r56,0r-66,156r0,101r-52,0r0,-101xm42,-275r0,-43r41,0r0,43r-41,0xm104,-275r0,-43r41,0r0,43r-41,0","w":187,"k":{"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":40,".":40,"a":29,"\u00e6":29,"\u00e1":29,"\u00e2":29,"\u00e4":29,"\u00e0":29,"\u00e5":29,"\u00e3":29,"e":29,"\u00e9":29,"\u00ea":29,"\u00eb":29,"\u00e8":29,"o":29,"\u00f8":29,"\u0153":29,"\u00f3":29,"\u00f4":29,"\u00f6":29,"\u00f2":29,"\u00f5":29,"-":27,"i":9,"\u0131":9,"\u00ed":9,"\u00ee":9,"\u00ef":9,"\u00ec":9,"u":22,"\u00fa":22,"\u00fb":22,"\u00fc":22,"\u00f9":22,":":13,";":13,"O":7,"\u00d8":7,"\u0152":7,"\u00d3":7,"\u00d4":7,"\u00d6":7,"\u00d2":7,"\u00d5":7,"S":6,"\u0160":6}},"\u017d":{"d":"9,0r0,-38r94,-177r-88,0r0,-42r148,0r0,39r-96,176r98,0r0,42r-156,0xm61,-272r-28,-52r38,0r16,31r18,-31r36,0r-28,52r-52,0","w":173},"\u00e1":{"d":"61,-134r-45,0v-2,-48,29,-65,68,-65v119,0,46,114,77,199r-48,0v-4,-6,-3,-16,-7,-20v-12,20,-25,25,-49,25v-35,0,-47,-29,-47,-55v0,-48,36,-61,77,-68v29,-5,27,-49,-3,-47v-17,0,-24,12,-23,31xm107,-97v-19,14,-49,12,-49,41v0,15,5,27,18,27v13,0,31,-9,31,-30r0,-38xm63,-216r20,-52r49,0r-35,52r-34,0","w":173},"\u00e2":{"d":"61,-134r-45,0v-2,-48,29,-65,68,-65v119,0,46,114,77,199r-48,0v-4,-6,-3,-16,-7,-20v-12,20,-25,25,-49,25v-35,0,-47,-29,-47,-55v0,-48,36,-61,77,-68v29,-5,27,-49,-3,-47v-17,0,-24,12,-23,31xm107,-97v-19,14,-49,12,-49,41v0,15,5,27,18,27v13,0,31,-9,31,-30r0,-38xm33,-216r28,-52r52,0r28,52r-38,0r-17,-31r-17,31r-36,0","w":173},"\u00e4":{"d":"61,-134r-45,0v-2,-48,29,-65,68,-65v119,0,46,114,77,199r-48,0v-4,-6,-3,-16,-7,-20v-12,20,-25,25,-49,25v-35,0,-47,-29,-47,-55v0,-48,36,-61,77,-68v29,-5,27,-49,-3,-47v-17,0,-24,12,-23,31xm107,-97v-19,14,-49,12,-49,41v0,15,5,27,18,27v13,0,31,-9,31,-30r0,-38xm36,-220r0,-42r40,0r0,42r-40,0xm98,-220r0,-42r40,0r0,42r-40,0","w":173},"\u00e0":{"d":"61,-134r-45,0v-2,-48,29,-65,68,-65v119,0,46,114,77,199r-48,0v-4,-6,-3,-16,-7,-20v-12,20,-25,25,-49,25v-35,0,-47,-29,-47,-55v0,-48,36,-61,77,-68v29,-5,27,-49,-3,-47v-17,0,-24,12,-23,31xm107,-97v-19,14,-49,12,-49,41v0,15,5,27,18,27v13,0,31,-9,31,-30r0,-38xm110,-216r-34,0r-35,-52r50,0","w":173},"\u00e5":{"d":"61,-134r-45,0v-2,-48,29,-65,68,-65v119,0,46,114,77,199r-48,0v-4,-6,-3,-16,-7,-20v-12,20,-25,25,-49,25v-35,0,-47,-29,-47,-55v0,-48,36,-61,77,-68v29,-5,27,-49,-3,-47v-17,0,-24,12,-23,31xm107,-97v-19,14,-49,12,-49,41v0,15,5,27,18,27v13,0,31,-9,31,-30r0,-38xm46,-251v0,-23,18,-41,41,-41v23,0,41,18,41,41v0,23,-18,41,-41,41v-23,0,-41,-18,-41,-41xm66,-251v0,12,9,21,21,21v12,0,21,-9,21,-21v0,-12,-9,-21,-21,-21v-12,0,-21,9,-21,21","w":173},"\u00e3":{"d":"61,-134r-45,0v-2,-48,29,-65,68,-65v119,0,46,114,77,199r-48,0v-4,-6,-3,-16,-7,-20v-12,20,-25,25,-49,25v-35,0,-47,-29,-47,-55v0,-48,36,-61,77,-68v29,-5,27,-49,-3,-47v-17,0,-24,12,-23,31xm107,-97v-19,14,-49,12,-49,41v0,15,5,27,18,27v13,0,31,-9,31,-30r0,-38xm55,-220r-25,0v4,-44,36,-52,66,-34v10,6,22,-1,21,-11r26,0v-3,26,-15,45,-33,45v-21,1,-47,-30,-55,0","w":173},"\u00e7":{"d":"69,40v-14,-9,5,-23,9,-35v-46,-2,-69,-27,-69,-102v0,-80,33,-102,79,-102v46,0,69,29,69,75r-47,0v0,-19,-4,-39,-23,-39v-24,0,-28,22,-28,67v0,48,5,67,27,67v17,0,24,-14,24,-45r47,0v0,46,-17,73,-59,78r-11,18v20,-7,39,4,42,25v5,35,-57,40,-81,27r7,-17v10,7,42,10,43,-7v1,-12,-18,-14,-29,-10","w":166,"k":{"y":4,"\u00fd":4,"\u00ff":4,"l":7,"\u0142":7}},"\u00e9":{"d":"157,-89r-98,0v-1,28,3,60,25,60v17,0,23,-12,26,-36r44,0v-2,45,-23,70,-70,70v-72,0,-75,-56,-75,-104v0,-52,10,-100,77,-100v62,-1,72,46,71,110xm59,-119r51,0v-1,-30,-4,-46,-25,-46v-22,1,-27,24,-26,46xm60,-216r20,-52r49,0r-35,52r-34,0","w":166,"k":{"x":4}},"\u00ea":{"d":"157,-89r-98,0v-1,28,3,60,25,60v17,0,23,-12,26,-36r44,0v-2,45,-23,70,-70,70v-72,0,-75,-56,-75,-104v0,-52,10,-100,77,-100v62,-1,72,46,71,110xm59,-119r51,0v-1,-30,-4,-46,-25,-46v-22,1,-27,24,-26,46xm30,-216r28,-52r51,0r29,52r-39,0r-16,-31r-17,31r-36,0","w":166,"k":{"x":4}},"\u00eb":{"d":"157,-89r-98,0v-1,28,3,60,25,60v17,0,23,-12,26,-36r44,0v-2,45,-23,70,-70,70v-72,0,-75,-56,-75,-104v0,-52,10,-100,77,-100v62,-1,72,46,71,110xm59,-119r51,0v-1,-30,-4,-46,-25,-46v-22,1,-27,24,-26,46xm32,-220r0,-42r41,0r0,42r-41,0xm94,-220r0,-42r41,0r0,42r-41,0","w":166,"k":{"x":4}},"\u00e8":{"d":"157,-89r-98,0v-1,28,3,60,25,60v17,0,23,-12,26,-36r44,0v-2,45,-23,70,-70,70v-72,0,-75,-56,-75,-104v0,-52,10,-100,77,-100v62,-1,72,46,71,110xm59,-119r51,0v-1,-30,-4,-46,-25,-46v-22,1,-27,24,-26,46xm107,-216r-34,0r-35,-52r49,0","w":166,"k":{"x":4}},"\u00ed":{"d":"18,0r0,-194r50,0r0,194r-50,0xm20,-216r19,-52r50,0r-35,52r-34,0","w":86},"\u00ee":{"d":"18,0r0,-194r50,0r0,194r-50,0xm-11,-216r28,-52r52,0r28,52r-38,0r-17,-31r-17,31r-36,0","w":86},"\u00ef":{"d":"18,0r0,-194r50,0r0,194r-50,0xm-8,-220r0,-42r40,0r0,42r-40,0xm54,-220r0,-42r40,0r0,42r-40,0","w":86},"\u00ec":{"d":"18,0r0,-194r50,0r0,194r-50,0xm67,-216r-34,0r-36,-52r50,0","w":86},"\u00f1":{"d":"17,0r0,-194r47,0v1,7,-2,18,1,23v22,-44,98,-39,98,27r0,144r-49,0r0,-134v0,-19,-6,-27,-21,-27v-17,0,-27,10,-27,32r0,129r-49,0xm59,-220r-26,0v4,-45,36,-53,67,-34v10,5,22,-1,21,-11r26,0v-3,26,-16,45,-34,45v-21,0,-47,-30,-54,0","w":180,"k":{"y":-4,"\u00fd":-4,"\u00ff":-4}},"\u00f3":{"d":"10,-97v0,-66,19,-102,76,-102v60,0,77,35,77,102v0,66,-20,102,-77,102v-60,0,-76,-35,-76,-102xm60,-97v0,40,2,68,26,68v20,0,27,-20,27,-68v0,-48,-7,-68,-27,-68v-24,0,-26,28,-26,68xm63,-216r19,-52r50,0r-35,52r-34,0","k":{"v":-4}},"\u00f4":{"d":"10,-97v0,-66,19,-102,76,-102v60,0,77,35,77,102v0,66,-20,102,-77,102v-60,0,-76,-35,-76,-102xm60,-97v0,40,2,68,26,68v20,0,27,-20,27,-68v0,-48,-7,-68,-27,-68v-24,0,-26,28,-26,68xm32,-216r28,-52r52,0r28,52r-38,0r-16,-31r-18,31r-36,0","k":{"v":-4}},"\u00f6":{"d":"10,-97v0,-66,19,-102,76,-102v60,0,77,35,77,102v0,66,-20,102,-77,102v-60,0,-76,-35,-76,-102xm60,-97v0,40,2,68,26,68v20,0,27,-20,27,-68v0,-48,-7,-68,-27,-68v-24,0,-26,28,-26,68xm35,-220r0,-42r41,0r0,42r-41,0xm97,-220r0,-42r41,0r0,42r-41,0","k":{"v":-4}},"\u00f2":{"d":"10,-97v0,-66,19,-102,76,-102v60,0,77,35,77,102v0,66,-20,102,-77,102v-60,0,-76,-35,-76,-102xm60,-97v0,40,2,68,26,68v20,0,27,-20,27,-68v0,-48,-7,-68,-27,-68v-24,0,-26,28,-26,68xm110,-216r-34,0r-35,-52r49,0","k":{"v":-4}},"\u00f5":{"d":"10,-97v0,-66,19,-102,76,-102v60,0,77,35,77,102v0,66,-20,102,-77,102v-60,0,-76,-35,-76,-102xm60,-97v0,40,2,68,26,68v20,0,27,-20,27,-68v0,-48,-7,-68,-27,-68v-24,0,-26,28,-26,68xm55,-220r-25,0v3,-45,35,-52,66,-34v10,6,22,-1,21,-11r26,0v-3,26,-16,45,-34,45v-21,1,-46,-29,-54,0","k":{"v":-4}},"\u0161":{"d":"8,-63r45,0v-1,21,7,33,26,34v30,2,32,-39,7,-45v-35,-8,-76,-24,-76,-66v0,-32,20,-59,71,-59v48,1,68,21,66,63r-44,0v6,-36,-44,-38,-46,-8v-2,19,34,28,52,33v73,20,46,122,-29,116v-58,-4,-73,-26,-72,-68xm54,-216r-28,-52r38,0r17,30r17,-30r36,0r-28,52r-52,0","w":159},"\u00fa":{"d":"116,0v-1,-7,2,-18,-1,-23v-22,44,-98,39,-98,-27r0,-144r49,0r0,134v0,19,6,27,21,27v17,0,27,-10,27,-32r0,-129r49,0r0,194r-47,0xm67,-216r19,-52r50,0r-36,52r-33,0","w":180},"\u00fb":{"d":"116,0v-1,-7,2,-18,-1,-23v-22,44,-98,39,-98,-27r0,-144r49,0r0,134v0,19,6,27,21,27v17,0,27,-10,27,-32r0,-129r49,0r0,194r-47,0xm36,-216r28,-52r52,0r28,52r-38,0r-17,-31r-17,31r-36,0","w":180},"\u00fc":{"d":"116,0v-1,-7,2,-18,-1,-23v-22,44,-98,39,-98,-27r0,-144r49,0r0,134v0,19,6,27,21,27v17,0,27,-10,27,-32r0,-129r49,0r0,194r-47,0xm39,-220r0,-42r40,0r0,42r-40,0xm101,-220r0,-42r40,0r0,42r-40,0","w":180},"\u00f9":{"d":"116,0v-1,-7,2,-18,-1,-23v-22,44,-98,39,-98,-27r0,-144r49,0r0,134v0,19,6,27,21,27v17,0,27,-10,27,-32r0,-129r49,0r0,194r-47,0xm113,-216r-33,0r-36,-52r50,0","w":180},"\u00fd":{"d":"17,63r0,-37v23,5,39,-4,39,-26r-54,-194r52,0r29,134r25,-134r50,0r-47,181v-19,76,-31,77,-94,76xm57,-216r19,-52r50,0r-36,52r-33,0","w":159,"k":{",":20,".":20,"a":6,"\u00e6":6,"\u00e1":6,"\u00e2":6,"\u00e4":6,"\u00e0":6,"\u00e5":6,"\u00e3":6}},"\u00ff":{"d":"17,63r0,-37v23,5,39,-4,39,-26r-54,-194r52,0r29,134r25,-134r50,0r-47,181v-19,76,-31,77,-94,76xm29,-220r0,-42r40,0r0,42r-40,0xm91,-220r0,-42r40,0r0,42r-40,0","w":159,"k":{",":20,".":20,"a":6,"\u00e6":6,"\u00e1":6,"\u00e2":6,"\u00e4":6,"\u00e0":6,"\u00e5":6,"\u00e3":6}},"\u017e":{"d":"9,0r0,-38r77,-115r-74,0r0,-41r133,0r0,38r-78,116r78,0r0,40r-136,0xm51,-216r-28,-52r38,0r16,30r18,-30r36,0r-28,52r-52,0","w":153},"\u2206":{"d":"9,0r0,-26r70,-230r50,0r67,229r0,27r-187,0xm52,-36r100,0r-50,-166v-12,52,-33,115,-50,166","w":205},"\u2126":{"d":"11,-36v13,-1,30,2,41,-1v-19,-22,-37,-57,-37,-102v0,-63,38,-116,94,-116v109,0,106,165,53,219r42,0r0,36r-81,0r0,-26v35,-15,56,-190,-15,-190v-69,0,-55,174,-16,190r0,26r-81,0r0,-36","w":215},"\u03bc":{"d":"114,-65r0,-129r49,0r0,194r-47,0v-1,-7,2,-18,-1,-23v-13,22,-30,33,-49,25r0,61r-49,0r0,-257r49,0r0,134v0,19,6,27,21,27v17,0,27,-10,27,-32","w":180},"\u03c0":{"d":"183,-150r-22,0v1,47,-4,115,5,150r-41,0v-11,-32,-4,-105,-6,-150r-41,0v-1,37,-9,109,-21,150r-40,0v11,-44,19,-111,19,-150v-15,0,-24,1,-30,3r-4,-30v34,-21,127,-9,184,-12","w":190},"\u20ac":{"d":"86,-93v-4,66,39,77,78,37r0,45v-64,38,-133,9,-130,-82r-25,0r11,-28r13,0r1,-18r-25,0r11,-28r15,0v-1,-84,80,-111,137,-71r-16,36v-31,-34,-76,-15,-70,35r61,0r-11,28r-51,0r0,18r47,0r-10,28r-36,0"},"\u2113":{"d":"140,-62r16,18v-24,74,-127,56,-123,-16v-5,4,-11,9,-16,14r-10,-23v10,-9,18,-17,26,-26r0,-92v0,-61,27,-88,58,-88v30,0,43,27,43,63v0,41,-23,82,-60,122v-1,28,5,59,28,59v16,0,29,-16,38,-31xm74,-183r0,52v21,-28,36,-59,36,-84v0,-18,-5,-28,-17,-28v-9,0,-19,13,-19,60","w":161},"\u212e":{"d":"65,-49v36,61,143,59,185,4r20,0v-26,30,-68,50,-114,50v-80,0,-144,-58,-144,-130v0,-72,64,-130,144,-130v81,1,147,58,145,134r-236,1r0,71xm248,-202v-36,-57,-135,-58,-179,-7v-8,18,-5,59,-2,81r179,0v6,-20,0,-51,2,-74","w":313},"\u2202":{"d":"34,-229r-12,-34v65,-45,145,-11,145,115v0,94,-32,151,-89,151v-44,0,-65,-43,-65,-84v0,-85,76,-121,112,-71v2,-47,-17,-93,-51,-94v-18,0,-31,9,-40,17xm82,-35v30,1,66,-105,8,-105v-21,0,-35,30,-35,61v0,25,10,44,27,44","w":182},"\u220f":{"d":"220,-210r-30,0r0,245r-43,0r0,-245r-65,0r0,245r-42,0r0,-245r-31,0r0,-41r211,0r0,41","w":229},"\u2211":{"d":"169,35r-161,0r0,-30r76,-114r-74,-110r0,-32r154,0r0,38r-98,1r65,95r-73,110r111,0r0,42","w":175},"\u2219":{"d":"8,-102v0,-19,16,-34,35,-34v19,0,35,15,35,34v0,19,-16,35,-35,35v-19,0,-35,-16,-35,-35","w":86},"\u221a":{"d":"192,-302r-71,351r-34,0r-46,-157r-23,10r-7,-25r56,-23v12,46,29,92,37,141r58,-297r30,0","w":190},"\u221e":{"d":"192,-160v29,0,54,22,52,57v-5,69,-77,80,-113,21v-27,51,-115,51,-115,-20v0,-35,24,-58,56,-58v24,0,42,14,59,37v14,-15,31,-37,61,-37xm72,-68v18,0,32,-16,45,-32v-14,-19,-24,-36,-46,-36v-19,0,-31,15,-31,35v0,18,14,33,32,33xm189,-136v-20,0,-35,21,-45,33v20,25,30,35,47,35v38,-1,36,-68,-2,-68","w":259},"\u222b":{"d":"45,-212v0,-70,21,-107,79,-94r-4,31v-34,-10,-36,24,-36,67v0,59,5,107,5,172v0,68,-23,112,-80,93r5,-33v33,11,35,-13,36,-59v0,-66,-5,-115,-5,-177","w":134},"\u2248":{"d":"59,-159v28,0,40,25,61,25v12,0,20,-11,28,-25r15,14v-9,20,-25,36,-44,36v-21,0,-42,-26,-63,-25v-14,0,-21,12,-28,24r-16,-13v9,-21,26,-36,47,-36xm58,-96v29,0,41,25,62,25v12,0,20,-11,28,-25r15,14v-9,20,-25,35,-44,35v-20,0,-43,-25,-63,-25v-14,0,-21,13,-28,25r-16,-13v9,-20,26,-36,46,-36","w":175},"\u2260":{"d":"130,-179r-13,29r42,0r0,26r-51,0r-18,45r69,0r0,25r-78,0r-16,37r-19,-7r12,-30r-43,0r0,-25r52,0r19,-45r-71,0r0,-26r80,0r15,-36","w":175},"\u2264":{"d":"159,-36r-142,-76r0,-27r141,-76r0,30r-117,60r118,59r0,30xm160,3r-144,0r0,-26r144,0r0,26","w":175},"\u2265":{"d":"18,-215r141,76r0,27r-141,76r0,-30r117,-60r-117,-59r0,-30xm160,3r-144,0r0,-26r144,0r0,26","w":175},"\u25ca":{"d":"174,-125r-63,142r-35,0r-59,-142r62,-142r35,0xm136,-124r-41,-106v-8,39,-28,70,-41,104r41,106v10,-40,27,-69,41,-104","w":190},"\u00a0":{"w":86},"\u00ad":{"d":"16,-125r101,0r0,42r-101,0r0,-42","w":133},"\u02c9":{"d":"-13,-257r106,0r0,27r-106,0r0,-27","w":79},"\u03a9":{"d":"11,-36v13,-1,30,2,41,-1v-19,-22,-37,-57,-37,-102v0,-63,38,-116,94,-116v109,0,106,165,53,219r42,0r0,36r-81,0r0,-26v35,-15,56,-190,-15,-190v-69,0,-55,174,-16,190r0,26r-81,0r0,-36","w":215},"\u2215":{"d":"-59,11r146,-272r32,0r-146,272r-32,0","w":60},"\u2010":{"d":"16,-125r101,0r0,42r-101,0r0,-42","w":133}}});
/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * © 1988, 1990, 1993, 2002 Adobe Systems Incorporated. All rights reserved.
 * 
 * Trademark:
 * Helvetica is a trademark of Linotype Corp. registered in the U.S. Patent and
 * Trademark Office and may be registered in certain other jurisdictions in the
 * name of Linotype Corp. or its licensee Linotype GmbH.
 * 
 * Full name:
 * HelveticaNeueLTStd-Th
 * 
 * Designer:
 * Linotype Staff
 * 
 * Vendor URL:
 * http://www.adobe.com/type
 * 
 * License information:
 * http://www.adobe.com/type/legal.html
 */
Cufon.registerFont({"w":200,"face":{"font-family":"HelveticaThin","font-weight":250,"font-stretch":"normal","units-per-em":"360","panose-1":"2 11 4 3 2 2 2 2 2 4","ascent":"257","descent":"-103","x-height":"4","bbox":"-61 -334 375 77","underline-thickness":"18","underline-position":"-18","stemh":"12","stemv":"14","unicode-range":"U+0020-U+FB02"},"glyphs":{" ":{"w":100},"!":{"d":"38,-257r17,0r-4,191r-9,0xm56,0r-19,0r0,-37r19,0r0,37","w":93},"\"":{"d":"29,-175r0,-82r13,0r0,82r-13,0xm71,-175r0,-82r14,0r0,82r-14,0","w":113},"#":{"d":"149,-248r12,0r-11,79r39,0r0,12r-41,0r-9,62r40,0r0,12r-41,0r-12,83r-12,0r12,-83r-61,0r-12,83r-12,0r12,-83r-42,0r0,-12r44,0r8,-62r-42,0r0,-12r44,0r11,-79r12,0r-11,79r61,0xm75,-157r-8,62r60,0r9,-62r-61,0"},"$":{"d":"104,-125r0,117v41,0,76,-17,76,-58v0,-34,-37,-53,-76,-59xm93,-141r0,-108v-49,2,-67,24,-67,54v-1,41,34,46,67,54xm93,38r0,-32v-53,-5,-89,-29,-89,-91r14,0v0,45,25,74,75,77r0,-119v-39,-9,-80,-16,-81,-68v0,-16,5,-65,81,-68r0,-18r11,0r0,18v50,1,82,24,84,79r-14,0v-3,-47,-29,-65,-70,-66r0,112v47,7,98,33,90,72v0,53,-45,71,-90,72r0,32r-11,0"},"%":{"d":"206,4v-36,0,-60,-28,-60,-63v0,-36,23,-65,60,-65v38,0,60,28,60,65v0,34,-24,63,-60,63xm206,-8v29,0,46,-25,46,-51v0,-28,-16,-53,-46,-53v-30,0,-46,25,-46,53v0,26,18,51,46,51xm74,-125v-36,0,-60,-28,-60,-63v0,-36,24,-65,61,-65v38,0,59,28,59,65v0,34,-24,63,-60,63xm74,-136v29,0,46,-26,46,-52v0,-28,-16,-53,-46,-53v-30,0,-46,25,-46,53v0,26,18,52,46,52xm50,9r167,-266r14,0r-167,266r-14,0","w":280},"&":{"d":"94,-148v21,-14,48,-30,48,-60v0,-43,-81,-42,-81,0v0,25,21,43,33,60xm156,-49r-66,-83v-27,17,-61,35,-61,71v0,34,32,53,63,53v43,0,64,-39,64,-41xm196,0r-31,-38v-28,60,-151,57,-150,-23v0,-42,37,-62,67,-81v-16,-20,-34,-39,-34,-66v0,-27,27,-45,54,-45v28,0,54,16,54,45v0,37,-29,52,-54,70r61,75v5,-13,9,-28,9,-43r14,0v-1,19,-6,38,-13,55r42,51r-19,0","w":213},"\u2019":{"d":"45,-257v-1,35,5,71,-23,82v0,-17,16,-28,12,-45r-7,0r0,-37r18,0","w":73,"k":{"\u2019":28,"s":20,"\u0161":20}},"(":{"d":"82,66r-12,0v-62,-98,-61,-230,1,-329r12,0v-60,99,-62,230,-1,329","w":86},")":{"d":"5,-263r12,0v61,98,60,230,-1,329r-12,0v60,-99,62,-230,1,-329","w":86},"*":{"d":"58,-257r10,0r0,47r44,-15r4,10r-44,15r27,37r-8,7r-28,-38r-28,38r-9,-7r29,-37r-45,-15r4,-10r44,15r0,-47","w":126},"+":{"d":"101,-98r0,-83r14,0r0,83r84,0r0,14r-84,0r0,84r-14,0r0,-84r-84,0r0,-14r84,0","w":216},",":{"d":"36,45v-1,-18,16,-28,12,-45r-7,0r0,-37r18,0v-1,35,5,71,-23,82","w":100},"-":{"d":"102,-91r-77,0r0,-14r77,0r0,14","w":126},".":{"d":"59,0r-18,0r0,-37r18,0r0,37","w":100},"\/":{"d":"10,6r-15,0r115,-269r15,0","w":119},"0":{"d":"100,4v-72,0,-90,-68,-90,-128v0,-60,18,-129,90,-129v72,0,90,69,90,129v0,60,-18,128,-90,128xm100,-8v62,0,76,-66,76,-116v0,-50,-14,-117,-76,-117v-62,0,-76,67,-76,117v0,50,14,116,76,116"},"1":{"d":"119,-248r0,248r-14,0r0,-222v-18,19,-41,29,-66,32r0,-12v29,-4,53,-21,68,-46r12,0"},"2":{"d":"178,-185v0,84,-134,105,-144,171r148,0r0,14r-165,0v3,-90,148,-99,148,-185v0,-34,-30,-56,-62,-56v-45,0,-67,33,-67,76r-13,0v3,-59,29,-88,78,-88v42,0,77,22,77,68"},"3":{"d":"13,-82r14,0v-2,46,26,74,72,74v37,0,71,-21,71,-61v0,-48,-42,-60,-83,-57r0,-12v36,1,78,-9,78,-52v0,-35,-36,-51,-66,-51v-44,0,-64,30,-66,71r-14,0v0,-49,31,-83,80,-83v40,0,79,19,79,63v1,31,-21,51,-48,58v34,4,54,30,54,63v0,49,-39,73,-85,73v-55,0,-89,-31,-86,-86"},"4":{"d":"131,-248r14,0r0,173r42,0r0,12r-42,0r0,63r-14,0r0,-63r-121,0r0,-14xm131,-75r0,-155r-107,155r107,0"},"5":{"d":"21,-120r26,-128r125,0r0,11r-114,0r-21,100v42,-60,146,-23,146,55v0,49,-34,86,-84,86v-48,0,-89,-30,-86,-80r14,0v-1,41,32,68,72,68v42,0,70,-33,70,-74v0,-73,-101,-99,-134,-38r-14,0"},"6":{"d":"104,-8v40,0,69,-32,69,-71v0,-39,-29,-73,-69,-73v-41,0,-71,33,-71,73v0,41,32,71,71,71xm183,-187r-14,0v-5,-32,-29,-54,-62,-54v-68,0,-80,82,-77,130v11,-32,41,-53,74,-53v49,0,83,36,83,85v0,48,-35,83,-83,83v-69,0,-89,-56,-89,-116v0,-61,15,-141,92,-141v41,0,71,24,76,66"},"7":{"d":"20,-237r0,-11r160,0r0,13v-50,55,-95,113,-107,235r-15,0v5,-71,24,-145,109,-237r-147,0"},"8":{"d":"172,-71v0,-41,-33,-58,-72,-58v-39,0,-72,17,-72,58v0,44,34,63,72,63v38,0,72,-19,72,-63xm23,-190v0,-47,38,-63,77,-63v39,0,77,16,77,63v0,29,-18,47,-46,55v34,4,55,29,55,64v0,51,-38,75,-86,75v-48,0,-86,-24,-86,-75v-1,-36,23,-58,55,-65v-30,-6,-46,-26,-46,-54xm163,-190v0,-38,-30,-51,-63,-51v-33,0,-63,13,-63,51v0,35,31,49,63,49v32,0,63,-14,63,-49"},"9":{"d":"100,-96v41,0,71,-33,71,-73v0,-40,-31,-72,-71,-72v-40,0,-70,33,-70,72v0,39,30,73,70,73xm20,-61r13,0v5,32,30,53,63,53v68,0,80,-84,77,-127v-10,27,-34,51,-73,51v-50,0,-83,-35,-83,-85v0,-49,34,-84,83,-84v38,0,87,18,87,117v0,61,-14,140,-91,140v-41,0,-71,-23,-76,-65"},":":{"d":"41,-185r18,0r0,37r-18,0r0,-37xm59,0r-18,0r0,-37r18,0r0,37","w":100},";":{"d":"36,45v-1,-18,16,-28,12,-45r-7,0r0,-37r18,0v-1,35,5,71,-23,82xm41,-185r18,0r0,37r-18,0r0,-37","w":100},"<":{"d":"199,-185r0,15r-171,79r171,79r0,15r-182,-85r0,-19","w":216},"=":{"d":"199,-133r0,14r-182,0r0,-14r182,0xm199,-63r0,14r-182,0r0,-14r182,0","w":216},">":{"d":"17,3r0,-15r171,-79r-171,-79r0,-15r182,85r0,19","w":216},"?":{"d":"85,-65v-4,-71,67,-77,67,-134v0,-36,-28,-50,-58,-50v-43,0,-65,31,-65,72r-14,0v0,-51,28,-86,80,-86v38,0,71,20,71,64v0,68,-68,56,-67,134r-14,0xm83,0r0,-37r19,0r0,37r-19,0","w":186},"@":{"d":"121,-59v34,-1,66,-60,65,-95v0,-13,-3,-43,-33,-43v-41,0,-69,56,-69,94v0,27,16,44,37,44xm219,-202r-40,129v0,7,6,12,14,12v33,0,65,-50,65,-91v0,-60,-55,-99,-108,-99v-66,0,-120,57,-120,124v-1,121,163,162,220,67r16,0v-22,41,-69,66,-115,66v-77,0,-134,-61,-134,-136v0,-74,60,-133,132,-133v68,0,122,47,122,112v0,54,-45,103,-82,103v-13,0,-24,-8,-24,-25v-27,42,-95,27,-95,-29v0,-50,35,-107,85,-107v24,-1,35,18,41,33r8,-26r15,0","w":288},"A":{"d":"99,-257r17,0r102,257r-17,0r-33,-82r-123,0r-32,82r-17,0xm50,-96r113,0r-55,-146","w":213},"B":{"d":"39,-127r0,113v70,0,164,11,160,-58v-4,-75,-90,-51,-160,-55xm23,0r0,-257r103,0v99,-4,106,107,31,121v6,2,58,10,58,64v0,84,-106,73,-192,72xm39,-243r0,103r87,0v43,0,65,-22,65,-53v-2,-67,-88,-47,-152,-50","w":226},"C":{"d":"239,-180r-16,0v-7,-43,-45,-69,-88,-69v-67,0,-106,54,-106,120v0,66,39,121,106,121v50,0,89,-44,92,-92r16,0v-6,61,-51,106,-108,106v-77,0,-122,-60,-122,-135v0,-75,45,-134,122,-134v91,0,104,79,104,83","w":253},"D":{"d":"39,-243r0,229v100,3,171,6,171,-115v0,-105,-68,-114,-106,-114r-65,0xm23,0r0,-257r84,0v92,0,119,63,119,128v0,73,-38,129,-120,129r-83,0","w":240},"E":{"d":"39,-14r158,0r0,14r-174,0r0,-257r172,0r0,14r-156,0r0,103r147,0r0,13r-147,0r0,113","w":201},"F":{"d":"170,-127r-131,0r0,127r-16,0r0,-257r161,0r0,14r-145,0r0,103r131,0r0,13","w":185,"k":{"A":13,"\u00c6":13,"\u00c1":13,"\u00c2":13,"\u00c4":13,"\u00c0":13,"\u00c5":13,"\u00c3":13,",":42,".":42}},"G":{"d":"138,-126r108,0r0,126r-14,0v-1,-18,2,-39,-1,-55v-13,37,-52,61,-97,61v-78,0,-121,-59,-121,-133v0,-73,45,-136,122,-136v53,0,98,32,107,86r-16,0v-12,-44,-44,-72,-91,-72v-69,0,-106,58,-106,122v0,66,35,119,106,119v61,0,100,-41,97,-104r-94,0r0,-14","w":266},"H":{"d":"203,-127r-164,0r0,127r-16,0r0,-257r16,0r0,117r164,0r0,-117r16,0r0,257r-16,0r0,-127","w":241},"I":{"d":"23,0r0,-257r16,0r0,257r-16,0","w":61},"J":{"d":"7,-82r16,0v-3,38,4,74,55,74v59,0,57,-41,57,-77r0,-172r15,0r0,177v0,30,2,86,-70,86v-69,0,-73,-49,-73,-88","w":173},"K":{"d":"23,0r0,-257r16,0r0,148r161,-148r21,0r-118,107r125,150r-20,0r-116,-139r-53,48r0,91r-16,0","w":220},"L":{"d":"23,0r0,-257r16,0r0,243r145,0r0,14r-161,0","w":180,"k":{"T":33,"V":33,"W":27,"y":20,"\u00fd":20,"\u00ff":20,"Y":40,"\u00dd":40,"\u0178":40,"\u2019":28}},"M":{"d":"23,0r0,-257r22,0r102,239r99,-239r23,0r0,257r-16,0r-1,-238r-98,238r-16,0r-99,-238r0,238r-16,0","w":291},"N":{"d":"23,0r0,-257r19,0r164,236r0,-236r15,0r0,257r-18,0r-164,-238r0,238r-16,0","w":244},"O":{"d":"256,-129v0,75,-45,135,-122,135v-77,0,-123,-60,-123,-135v0,-75,46,-134,123,-134v77,0,122,59,122,134xm27,-129v0,66,40,121,107,121v67,0,106,-55,106,-121v0,-66,-39,-120,-106,-120v-67,0,-107,54,-107,120","w":266},"P":{"d":"39,-243r0,115r90,0v46,0,62,-30,62,-57v0,-19,-9,-58,-60,-58r-92,0xm23,0r0,-257v87,8,184,-33,184,72v0,45,-30,71,-81,71r-87,0r0,114r-16,0","w":212,"k":{"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":52,".":52}},"Q":{"d":"163,-66r41,30v67,-62,37,-213,-70,-213v-67,0,-107,54,-107,120v0,91,93,155,167,102r-39,-27xm249,13r-43,-30v-19,15,-43,23,-72,23v-77,0,-123,-60,-123,-135v0,-75,46,-134,123,-134v121,0,157,165,83,236r40,29","w":266},"R":{"d":"39,-131v70,-2,157,17,156,-59v-1,-71,-89,-50,-156,-53r0,112xm197,0v-18,-46,17,-117,-67,-117r-91,0r0,117r-16,0r0,-257v82,4,188,-23,188,66v1,36,-23,59,-55,67v69,3,40,85,59,124r-18,0","w":226},"S":{"d":"197,-66v0,-88,-175,-31,-175,-129v0,-49,45,-68,86,-68v54,0,95,22,98,79r-16,0v-2,-44,-34,-65,-82,-65v-29,0,-71,12,-71,54v0,84,176,29,176,129v0,53,-52,72,-91,72v-60,0,-109,-25,-108,-91r16,0v-3,56,41,77,92,77v31,0,75,-13,75,-58","w":226},"T":{"d":"85,-243r-90,0r0,-14r197,0r0,14r-91,0r0,243r-16,0r0,-243","w":186,"k":{"\u00fc":33,"\u0161":33,"\u00f2":33,"\u00f6":33,"\u00ec":5,"\u00ee":5,"\u00ed":5,"\u00e8":33,"\u00eb":33,"\u00ea":33,"\u00e3":33,"\u00e5":33,"\u00e0":33,"\u00e4":33,"\u00e2":33,"w":33,"y":33,"\u00fd":33,"\u00ff":33,"A":18,"\u00c6":18,"\u00c1":18,"\u00c2":18,"\u00c4":18,"\u00c0":18,"\u00c5":18,"\u00c3":18,",":40,".":40,"-":40,"a":33,"\u00e6":33,"\u00e1":33,"c":33,"\u00e7":33,"e":33,"\u00e9":33,"i":5,"\u00ef":5,"o":33,"\u00f8":33,"\u0153":33,"\u00f3":33,"\u00f4":33,"\u00f5":33,"r":33,"s":33,"u":33,"\u00fa":33,"\u00fb":33,"\u00f9":33,":":31,";":31}},"U":{"d":"23,-257r16,0r0,154v0,31,6,95,80,95v120,0,76,-144,84,-249r16,0v-7,119,36,264,-100,263v-91,0,-96,-75,-96,-109r0,-154","w":241},"V":{"d":"12,-257r88,243r89,-243r16,0r-96,257r-18,0r-96,-257r17,0","k":{"\u00f6":13,"\u00f4":13,"\u00e8":13,"\u00eb":13,"\u00ea":13,"\u00e3":13,"\u00e5":13,"\u00e0":13,"\u00e4":13,"\u00e2":13,"A":15,"\u00c6":15,"\u00c1":15,"\u00c2":15,"\u00c4":15,"\u00c0":15,"\u00c5":15,"\u00c3":15,",":33,".":33,"-":13,"a":13,"\u00e6":13,"\u00e1":13,"e":13,"\u00e9":13,"o":13,"\u00f8":13,"\u0153":13,"\u00f3":13,"\u00f2":13,"\u00f5":13,"r":6,"u":6,"\u00fa":6,"\u00fb":6,"\u00fc":6,"\u00f9":6,":":13,";":13}},"W":{"d":"72,0r-74,-257r16,0r68,240r68,-240r20,0r69,240r66,-240r17,0r-74,257r-18,0r-71,-243r-69,243r-18,0","w":320,"k":{"\u00f6":6,"\u00ea":6,"\u00e4":6,"A":2,"\u00c6":2,"\u00c1":2,"\u00c2":2,"\u00c4":2,"\u00c0":2,"\u00c5":2,"\u00c3":2,",":20,".":20,"-":13,"a":6,"\u00e6":6,"\u00e1":6,"\u00e2":6,"\u00e0":6,"\u00e5":6,"\u00e3":6,"e":6,"\u00e9":6,"\u00eb":6,"\u00e8":6,"i":-9,"\u00ed":-9,"\u00ee":-9,"\u00ef":-9,"\u00ec":-9,"o":6,"\u00f8":6,"\u0153":6,"\u00f3":6,"\u00f4":6,"\u00f2":6,"\u00f5":6,":":6,";":6}},"X":{"d":"90,-132r-90,-125r19,0r81,113r83,-113r18,0r-90,125r95,132r-19,0r-87,-120r-87,120r-19,0"},"Y":{"d":"103,-121r94,-136r17,0r-103,149r0,108r-16,0r0,-108r-103,-149r18,0","w":206,"k":{"\u00fc":13,"\u00f6":27,"v":6,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":42,".":42,"-":35,"a":27,"\u00e6":27,"\u00e1":27,"\u00e2":27,"\u00e4":27,"\u00e0":27,"\u00e5":27,"\u00e3":27,"e":27,"\u00e9":27,"\u00ea":27,"\u00eb":27,"\u00e8":27,"o":27,"\u00f8":27,"\u0153":27,"\u00f3":27,"\u00f4":27,"\u00f2":27,"\u00f5":27,"u":13,"\u00fa":13,"\u00fb":13,"\u00f9":13,":":20,";":20,"p":20,"q":27}},"Z":{"d":"10,-243r0,-14r180,0r0,14r-174,229r178,0r0,14r-194,0r0,-14r173,-229r-163,0","w":193},"[":{"d":"83,-251r-35,0r0,305r35,0r0,12r-49,0r0,-329r49,0r0,12","w":86},"\\":{"d":"125,6r-15,0r-115,-269r15,0","w":119},"]":{"d":"4,54r35,0r0,-305r-35,0r0,-12r49,0r0,329r-49,0r0,-12","w":86},"^":{"d":"202,-85r-15,0r-79,-152r-79,152r-15,0r85,-163r19,0","w":216},"_":{"d":"180,45r-180,0r0,-18r180,0r0,18","w":180},"\u2018":{"d":"51,-257v1,18,-16,28,-12,45r8,0r0,37r-19,0v1,-35,-5,-71,23,-82","w":73,"k":{"\u2018":28}},"a":{"d":"143,-105v-26,22,-118,0,-118,57v0,22,17,40,49,40v62,0,69,-53,69,-63r0,-34xm157,-141r0,107v-2,16,5,26,22,21r0,12v-29,6,-39,-11,-37,-36v-12,47,-130,65,-130,-11v0,-43,37,-52,68,-55v61,-4,63,-8,63,-38v0,-8,-9,-36,-51,-36v-33,0,-55,17,-57,49r-14,0v2,-41,27,-61,71,-61v32,0,65,10,65,48","w":180},"b":{"d":"108,-8v91,-2,90,-169,0,-169v-48,0,-71,34,-71,80v0,45,21,89,71,89xm23,0r0,-257r14,0r1,111v10,-29,40,-43,70,-43v54,0,80,41,80,92v0,88,-54,101,-80,101v-50,0,-65,-36,-71,-45r0,41r-14,0"},"c":{"d":"173,-128r-14,0v-3,-33,-29,-49,-62,-49v-46,0,-71,41,-71,83v0,50,23,86,71,86v35,0,59,-23,64,-57r14,0v-6,44,-38,69,-78,69v-60,0,-85,-47,-85,-98v0,-51,30,-95,85,-95v40,0,72,19,76,61","w":186},"d":{"d":"94,-8v47,0,69,-42,69,-84v0,-43,-21,-85,-69,-85v-49,0,-69,40,-69,85v0,44,21,84,69,84xm163,0v-1,-13,2,-29,-1,-40v-15,29,-38,44,-71,44v-56,0,-79,-45,-79,-96v0,-55,26,-97,82,-97v31,-1,57,18,69,45r0,-113r14,0r0,257r-14,0"},"e":{"d":"175,-91r-149,0v-1,44,22,83,68,83v35,0,60,-21,66,-55r14,0v-7,43,-36,67,-80,67v-54,0,-82,-42,-82,-93v0,-51,26,-100,82,-100v58,0,84,45,81,98xm26,-103r135,0v-1,-39,-25,-74,-67,-74v-41,0,-65,37,-68,74","w":186},"f":{"d":"33,-173r-33,0r0,-12r33,0v-6,-48,9,-87,57,-73r0,12v-21,-4,-43,-4,-43,24r0,37r38,0r0,12r-38,0r0,173r-14,0r0,-173","w":86,"k":{"\u2019":-6}},"g":{"d":"92,-177v-45,0,-66,40,-66,79v0,44,22,79,66,79v45,0,67,-37,67,-79v0,-41,-22,-79,-67,-79xm159,-185r14,0r0,175v0,14,0,81,-80,81v-40,0,-70,-15,-72,-58r14,0v3,33,29,46,59,46v65,0,65,-53,65,-65r0,-43v-13,27,-36,42,-67,42v-54,0,-80,-40,-80,-91v0,-49,28,-91,80,-91v29,0,57,14,67,42r0,-38","w":193},"h":{"d":"20,-257r14,0r1,112v9,-28,37,-44,66,-44v65,0,66,52,66,75r0,114r-14,0r0,-117v0,-19,-3,-60,-53,-60v-41,0,-66,32,-66,77r0,100r-14,0r0,-257","w":186},"i":{"d":"37,0r-14,0r0,-185r14,0r0,185xm37,-220r-14,0r0,-37r14,0r0,37","w":60},"j":{"d":"23,-185r14,0r0,205v2,29,-11,50,-49,46r0,-12v23,3,35,-3,35,-35r0,-204xm37,-220r-14,0r0,-37r14,0r0,37","w":60},"k":{"d":"21,0r0,-257r14,0r0,170r114,-98r19,0r-81,69r87,116r-18,0r-79,-105r-42,35r0,70r-14,0","w":166},"l":{"d":"23,-257r14,0r0,257r-14,0r0,-257","w":60},"m":{"d":"21,0r0,-185r13,0v1,12,-2,28,1,38v6,-23,30,-42,58,-42v35,0,52,20,56,39v19,-56,117,-55,117,24r0,126r-14,0r0,-127v0,-47,-33,-50,-44,-50v-33,0,-58,24,-58,68r0,109r-14,0r0,-127v0,-46,-31,-50,-43,-50v-26,0,-59,20,-59,68r0,109r-13,0","w":286},"n":{"d":"20,0r0,-185r14,0v1,13,-2,29,1,40v9,-28,37,-44,66,-44v65,0,66,52,66,75r0,114r-14,0r0,-117v0,-19,-3,-60,-53,-60v-41,0,-66,32,-66,77r0,100r-14,0","w":186},"o":{"d":"12,-93v0,-53,30,-96,84,-96v54,0,85,43,85,96v0,53,-31,97,-85,97v-54,0,-84,-44,-84,-97xm25,-93v0,44,25,85,71,85v46,0,72,-41,72,-85v0,-44,-26,-84,-72,-84v-46,0,-71,40,-71,84","w":193},"p":{"d":"105,-8v48,0,70,-38,70,-84v0,-42,-20,-85,-70,-85v-49,0,-68,41,-68,85v0,44,16,84,68,84xm37,-185v1,13,-2,31,1,42v6,-18,26,-46,67,-46v57,0,83,45,83,97v0,56,-26,96,-83,96v-32,1,-55,-15,-68,-43r0,105r-14,0r0,-251r14,0"},"q":{"d":"94,-8v48,0,69,-42,69,-85v0,-42,-22,-84,-69,-84v-48,0,-69,40,-69,84v0,45,20,85,69,85xm163,66r-1,-107v-10,29,-38,45,-68,45v-56,0,-82,-42,-82,-97v0,-51,23,-96,79,-96v34,-1,55,17,72,44r0,-40r14,0r0,251r-14,0"},"r":{"d":"34,-185v1,13,-2,30,1,41v7,-24,38,-43,71,-42r0,14v-32,-4,-72,25,-72,71r0,101r-14,0r0,-185r14,0","w":100,"k":{"v":-6,"y":-6,"\u00fd":-6,"\u00ff":-6,"\u2019":-6,",":27,".":27,"-":20}},"s":{"d":"33,-142v0,63,127,20,127,95v0,40,-40,51,-72,51v-42,0,-74,-23,-75,-66r14,0v2,34,28,54,61,54v24,0,59,-7,59,-39v0,-64,-128,-20,-128,-95v0,-37,36,-47,67,-47v39,0,69,17,69,59r-14,0v0,-33,-24,-47,-55,-47v-25,0,-53,9,-53,35","w":173},"t":{"d":"88,-185r0,12r-40,0r0,129v0,30,14,33,40,32r0,12v-28,2,-54,-2,-54,-44r0,-129r-34,0r0,-12r34,0r0,-58r14,0r0,58r40,0","w":93},"u":{"d":"167,-185r0,185r-14,0v-1,-13,2,-29,-1,-40v-9,28,-37,44,-66,44v-65,0,-66,-52,-66,-75r0,-114r14,0r0,117v0,19,2,60,52,60v41,0,67,-32,67,-77r0,-100r14,0","w":186},"v":{"d":"161,-185r-70,185r-17,0r-75,-185r16,0r68,169r62,-169r16,0","w":159,"k":{",":27,".":27}},"w":{"d":"14,-185r53,169r50,-169r19,0r51,169r52,-169r15,0r-59,185r-17,0r-52,-168r-51,168r-17,0r-59,-185r15,0","w":253,"k":{",":20,".":20}},"x":{"d":"-2,0r73,-97r-68,-88r19,0r58,77r58,-77r18,0r-67,88r73,97r-19,0r-63,-87r-65,87r-17,0","w":159},"y":{"d":"75,-1r-77,-184r16,0r69,169r63,-169r16,0r-80,205v-15,35,-18,48,-64,46r0,-12v44,-3,40,-13,57,-55","w":159,"k":{",":27,".":27}},"z":{"d":"20,-12r130,0r0,12r-147,0r0,-13r124,-160r-114,0r0,-12r131,0r0,13","w":153},"{":{"d":"105,-263r0,12v-50,-14,-36,53,-36,93v0,48,-20,56,-25,59v5,4,25,12,25,60v0,37,-17,107,36,93r0,12v-33,1,-48,0,-49,-42v-1,-42,9,-110,-26,-115r0,-14v36,-4,25,-74,26,-116v1,-42,16,-43,49,-42","w":119},"|":{"d":"33,77r0,-360r14,0r0,360r-14,0","w":79},"}":{"d":"14,66r0,-12v51,14,36,-52,36,-93v0,-48,21,-56,26,-60v-5,-3,-26,-11,-26,-59v0,-37,18,-108,-36,-93r0,-12v33,-1,49,0,50,42v1,42,-10,111,26,116r0,14v-35,4,-25,73,-26,115v-1,42,-17,43,-50,42","w":119},"~":{"d":"70,-110v27,-1,48,23,77,25v14,0,27,-15,33,-27r10,10v-9,14,-22,30,-43,30v-23,0,-51,-24,-75,-24v-21,0,-30,15,-35,27r-11,-11v11,-18,22,-30,44,-30","w":216},"\u00a1":{"d":"55,66r-17,0r4,-191r9,0xm37,-193r19,0r0,37r-19,0r0,-37","w":93},"\u00a2":{"d":"98,-8r0,-169v-43,3,-66,42,-66,83v0,48,22,83,66,86xm98,42r0,-38v-56,-3,-80,-48,-80,-98v0,-50,29,-92,80,-95r0,-32r11,0r0,32v37,2,67,21,71,61r-14,0v-3,-31,-26,-47,-57,-49r0,169v32,-3,55,-25,59,-57r13,0v-6,42,-35,66,-72,69r0,38r-11,0"},"\u00a3":{"d":"141,6v-43,0,-82,-31,-116,0r-9,-12v30,-24,56,-73,30,-113r-28,0r0,-12r22,0v-11,-19,-22,-40,-22,-63v0,-45,39,-69,82,-69v56,0,85,30,84,89r-13,0v0,-49,-22,-75,-71,-75v-42,0,-68,20,-68,54v0,26,14,45,23,64r58,0r0,12r-51,0v20,35,-1,88,-27,109v29,-27,70,2,104,2v21,0,36,-12,49,-24r8,12v-14,15,-34,26,-55,26"},"\u2044":{"d":"-61,9r168,-266r14,0r-167,266r-15,0","w":60},"\u00a5":{"d":"-3,-257r18,0r85,135r86,-135r17,0r-86,134r33,0r0,12r-43,0r0,28r43,0r0,12r-43,0r0,71r-14,0r0,-71r-43,0r0,-12r43,0r0,-28r-43,0r0,-12r33,0"},"\u0192":{"d":"2,64r2,-13v35,9,49,-11,56,-48r29,-146r-41,0r3,-11r40,0v11,-53,11,-122,86,-107r-2,14v-58,-19,-61,48,-69,93r43,0r-2,11r-43,0r-29,148v-1,26,-25,73,-73,59"},"\u00a7":{"d":"155,-49v42,-57,-53,-89,-88,-113v-17,6,-35,21,-35,41v0,51,68,57,99,85v4,1,16,-7,24,-13xm148,17v-1,-64,-129,-70,-129,-138v0,-23,19,-41,40,-49v-45,-36,-10,-93,40,-93v41,0,63,28,63,70r-14,0v1,-29,-17,-58,-49,-58v-21,0,-46,15,-46,38v0,67,130,61,128,136v0,28,-17,43,-40,49v14,13,21,24,21,45v0,36,-29,49,-61,49v-42,0,-65,-28,-65,-69r13,0v1,32,17,57,52,57v28,0,47,-11,47,-37"},"\u00a4":{"d":"187,-47r-10,10r-19,-20v-33,30,-83,29,-116,0r-20,20r-9,-9r20,-20v-29,-33,-30,-83,0,-116r-21,-20r10,-10r20,20v33,-28,83,-29,116,0r19,-19r10,9r-20,20v29,33,30,83,0,115xm100,-49v40,0,74,-33,74,-75v0,-42,-34,-76,-74,-76v-40,0,-73,34,-73,76v0,42,33,75,73,75"},"'":{"d":"30,-175r0,-82r14,0r0,82r-14,0","w":73},"\u201c":{"d":"46,-257v1,18,-16,28,-12,45r7,0r0,37r-18,0v1,-35,-5,-71,23,-82xm91,-257v1,18,-16,28,-12,45r8,0r0,37r-19,0v1,-35,-5,-71,23,-82","w":113},"\u00ab":{"d":"65,-44r-41,-47r0,-14r41,-47v3,31,-20,36,-30,54v10,18,32,24,30,54xm111,-44r-41,-47r0,-14r41,-47v3,31,-20,36,-30,54v10,18,32,24,30,54","w":140},"\u2039":{"d":"65,-44r-41,-47r0,-14r41,-47v3,31,-20,36,-30,54v10,18,32,24,30,54","w":93},"\u203a":{"d":"28,-44v-2,-31,21,-36,31,-54v-10,-18,-34,-23,-31,-54r41,47r0,14","w":93},"\ufb01":{"d":"0,-173r0,-12r33,0v-6,-48,9,-87,57,-73r0,12v-21,-4,-43,-4,-43,24r0,37r38,0r0,12r-38,0r0,173r-14,0r0,-173r-33,0xm103,-220r0,-37r14,0r0,37r-14,0xm103,0r0,-185r14,0r0,185r-14,0","w":140},"\ufb02":{"d":"0,-173r0,-12r33,0v-6,-48,9,-87,57,-73r0,12v-21,-4,-43,-4,-43,24r0,37r38,0r0,12r-38,0r0,173r-14,0r0,-173r-33,0xm103,0r0,-257r14,0r0,257r-14,0","w":140},"\u2013":{"d":"0,-91r0,-14r180,0r0,14r-180,0","w":180},"\u2020":{"d":"19,-185r74,0r0,-72r14,0r0,72r74,0r0,12r-74,0r0,226r-14,0r0,-226r-74,0r0,-12"},"\u2021":{"d":"93,-257r14,0r0,72r74,0r0,12r-74,0r0,142r74,0r0,12r-74,0r0,72r-14,0r0,-72r-74,0r0,-12r74,0r0,-142r-74,0r0,-12r74,0r0,-72"},"\u00b7":{"d":"50,-94v-24,0,-24,-40,0,-40v25,0,25,40,0,40","w":100},"\u00b6":{"d":"98,53r0,-170v-42,0,-74,-31,-74,-69v0,-76,81,-74,158,-71r0,310r-14,0r0,-298r-56,0r0,298r-14,0","w":216},"\u2022":{"d":"26,-129v0,-36,28,-64,64,-64v36,0,64,28,64,64v0,36,-28,65,-64,65v-36,0,-64,-29,-64,-65","w":180},"\u201a":{"d":"45,-37v-1,35,5,71,-23,82v-1,-18,16,-28,12,-45r-7,0r0,-37r18,0","w":73},"\u201e":{"d":"90,-37v-1,35,5,71,-23,82v-1,-18,17,-28,13,-45r-8,0r0,-37r18,0xm45,-37v-1,35,5,71,-23,82v-1,-18,16,-28,12,-45r-7,0r0,-37r18,0","w":113},"\u201d":{"d":"90,-257v-1,35,5,71,-23,82v0,-18,17,-28,13,-45r-8,0r0,-37r18,0xm45,-257v-1,35,5,71,-23,82v0,-17,16,-28,12,-45r-7,0r0,-37r18,0","w":113},"\u00bb":{"d":"29,-44v-2,-30,20,-36,30,-54v-10,-18,-33,-23,-30,-54r41,47r0,14xm75,-44v-2,-30,20,-36,30,-54v-10,-18,-33,-23,-30,-54r41,47r0,14","w":140},"\u2026":{"d":"51,0r0,-37r18,0r0,37r-18,0xm171,0r0,-37r18,0r0,37r-18,0xm291,0r0,-37r18,0r0,37r-18,0","w":360},"\u2030":{"d":"190,4v-37,0,-55,-25,-55,-61v0,-34,22,-60,55,-60v34,0,54,25,54,60v0,36,-19,61,-54,61xm189,-8v27,0,41,-21,41,-49v0,-26,-14,-48,-41,-48v-27,0,-41,20,-41,48v0,28,11,49,41,49xm318,4v-37,0,-55,-25,-55,-61v0,-34,22,-60,55,-60v34,0,54,25,54,60v0,36,-19,61,-54,61xm318,-8v27,0,41,-21,41,-49v0,-26,-14,-48,-41,-48v-27,0,-42,20,-42,48v0,28,12,49,42,49xm69,-253v34,0,55,25,55,60v0,36,-20,62,-55,62v-37,0,-55,-26,-55,-62v0,-34,22,-60,55,-60xm69,-241v-27,0,-41,20,-41,48v0,28,11,50,41,50v27,0,41,-22,41,-50v0,-26,-14,-48,-41,-48xm38,9r167,-266r15,0r-168,266r-14,0","w":386},"\u00bf":{"d":"102,-127v4,70,-68,77,-68,133v0,36,28,51,58,51v43,0,65,-31,65,-72r14,0v0,51,-28,86,-80,86v-38,0,-70,-21,-70,-65v0,-68,68,-55,67,-133r14,0xm103,-193r0,37r-18,0r0,-37r18,0","w":186},"`":{"d":"51,-213r-14,0r-48,-50r19,0","w":60},"\u00b4":{"d":"9,-213r44,-50r18,0r-48,50r-14,0","w":60},"\u02c6":{"d":"23,-263r14,0r42,50r-14,0r-35,-41r-35,41r-14,0","w":60},"\u02dc":{"d":"55,-217v-23,-2,-60,-40,-67,0r-10,0v2,-16,11,-32,28,-32v22,0,60,40,66,0r10,0v-2,16,-9,33,-27,32","w":60},"\u00af":{"d":"74,-226r-87,0r0,-12r87,0r0,12","w":60},"\u02d8":{"d":"67,-263r12,0v-3,54,-95,57,-98,0r12,0v11,46,66,39,74,0","w":60},"\u02d9":{"d":"38,-214r-16,0r0,-37r16,0r0,37","w":60},"\u00a8":{"d":"9,-214r-15,0r0,-37r15,0r0,37xm66,-214r-16,0r0,-37r16,0r0,37","w":60},"\u02da":{"d":"-6,-230v0,-20,16,-36,36,-36v20,0,36,16,36,36v0,20,-16,35,-36,35v-20,0,-36,-15,-36,-35xm4,-230v0,14,12,26,26,26v14,0,26,-12,26,-26v0,-14,-12,-26,-26,-26v-14,0,-26,12,-26,26","w":60},"\u00b8":{"d":"10,27v11,-9,10,-29,32,-27v-4,7,-15,14,-16,21v17,-7,40,0,40,23v0,32,-52,31,-69,19r4,-9v14,7,51,15,51,-10v0,-21,-24,-19,-37,-12","w":60},"\u02dd":{"d":"-7,-213r-13,0r43,-50r18,0xm50,-213r-13,0r43,-50r18,0","w":60},"\u02db":{"d":"40,0r9,0v-27,23,-32,33,-32,49v0,21,32,19,39,1r9,3v-5,13,-17,23,-33,23v-9,0,-31,-1,-31,-27v0,-8,4,-30,39,-49","w":60},"\u02c7":{"d":"35,-213r-14,0r-42,-50r14,0r35,41r35,-41r14,0","w":60},"\u2014":{"d":"47,-91r0,-14r266,0r0,14r-266,0","w":360},"\u00c6":{"d":"-3,0r134,-257r176,0r0,14r-136,0r0,103r126,0r0,13r-126,0r0,113r137,0r0,14r-153,0r0,-91r-96,0r-48,91r-14,0xm155,-105r0,-138r-17,0r-72,138r89,0","w":313},"\u00aa":{"d":"90,-199v-16,13,-74,0,-74,33v0,14,11,25,29,25v52,0,45,-27,45,-58xm22,-215r-12,0v3,-25,20,-38,48,-38v22,0,44,7,44,31r0,64v-1,9,2,15,12,13v1,7,-1,11,-7,10v-18,1,-14,-11,-17,-21v-5,28,-85,40,-85,-10v0,-27,24,-34,44,-35v40,-3,41,-5,41,-23v0,-29,-70,-24,-68,9","w":111},"\u0141":{"d":"23,-257r16,0r0,138r84,-52r0,13r-84,51r0,93r145,0r0,14r-161,0r0,-97r-31,19r0,-13r31,-19r0,-147","w":180,"k":{"T":33,"V":33,"W":27,"y":20,"\u00fd":20,"\u00ff":20,"Y":40,"\u00dd":40,"\u0178":40,"\u2019":28}},"\u00d8":{"d":"215,-210r-156,171v18,19,44,31,75,31v99,0,134,-131,81,-202xm51,-48r156,-171v-18,-19,-42,-30,-73,-30v-99,0,-135,128,-83,201xm12,-6r29,-31v-63,-79,-22,-226,93,-226v35,0,62,12,83,33r25,-27r9,9r-25,27v63,78,23,227,-92,227v-35,0,-64,-12,-85,-33r-27,30","w":266},"\u0152":{"d":"131,-8v31,0,68,-16,75,-38r0,-162v-6,-27,-42,-41,-72,-41v-70,0,-107,57,-107,122v0,65,33,119,104,119xm222,-243r0,103r136,0r0,13r-136,0r0,113r153,0r0,14r-169,0r0,-24v-12,15,-38,30,-76,30v-76,0,-119,-58,-119,-133v0,-73,43,-136,121,-136v27,0,56,10,74,30r0,-24r168,0r0,14r-152,0","w":380},"\u00ba":{"d":"60,-132v-37,0,-57,-25,-57,-60v0,-35,20,-61,57,-61v37,0,57,26,57,61v0,35,-20,60,-57,60xm60,-141v31,0,45,-24,45,-51v0,-27,-14,-51,-45,-51v-31,0,-45,24,-45,51v0,27,14,51,45,51","w":120},"\u00e6":{"d":"160,-103r134,0v1,-40,-25,-74,-66,-74v-45,0,-65,34,-68,74xm146,-104v-23,22,-121,-5,-121,57v0,28,27,39,53,39v47,-2,76,-39,68,-96xm308,-91r-148,0v-3,45,21,83,68,83v35,0,59,-19,64,-54r14,0v-4,80,-136,90,-152,13v-14,31,-40,53,-76,53v-35,0,-66,-15,-66,-51v0,-44,39,-53,67,-55v32,-3,67,4,67,-32v0,-30,-18,-43,-54,-43v-33,0,-56,15,-59,50r-14,0v3,-43,32,-62,73,-62v34,0,60,12,66,47v12,-32,37,-47,70,-47v57,0,85,45,80,98","w":320},"\u0131":{"d":"37,0r-14,0r0,-185r14,0r0,185","w":60},"\u0142":{"d":"23,-120r0,-137r14,0r0,126r23,-18v2,20,-15,20,-23,30r0,119r-14,0r0,-108r-23,18v-2,-20,15,-20,23,-30","w":60},"\u00f8":{"d":"39,-40r108,-114v-11,-14,-29,-23,-51,-23v-66,-2,-88,86,-57,137xm154,-144r-108,114v12,14,29,22,50,22v65,1,90,-85,58,-136xm185,-176r-21,22v39,59,9,158,-68,158v-25,0,-45,-10,-59,-25r-19,21r-9,-8r21,-22v-39,-58,-13,-159,66,-159v26,0,46,9,60,25r20,-21","w":193},"\u0153":{"d":"91,-8v50,0,62,-45,62,-82v0,-45,-15,-87,-62,-87v-92,0,-88,170,0,169xm309,-91r-142,0v-3,42,16,83,65,83v34,0,53,-21,61,-53r14,0v-9,39,-33,65,-75,65v-40,1,-65,-21,-73,-54v-9,35,-32,54,-69,54v-58,0,-78,-45,-78,-94v0,-53,24,-99,79,-99v37,-1,60,21,70,54v10,-36,33,-54,71,-54v56,0,80,47,77,98xm167,-103r128,0v0,-39,-21,-74,-63,-74v-44,0,-66,35,-65,74","w":320},"\u00df":{"d":"75,-136r0,-12v35,0,65,-16,65,-54v0,-32,-24,-47,-54,-47v-36,0,-51,21,-51,56r0,193r-14,0r0,-193v0,-44,21,-68,65,-68v38,0,68,19,68,59v0,31,-15,50,-43,58v37,4,56,30,56,67v0,79,-49,77,-92,77r0,-12v36,0,78,1,78,-65v0,-48,-34,-59,-78,-59","w":180},"\u00b9":{"d":"75,-249r0,150r-12,0r0,-134v-11,12,-25,19,-42,20r0,-10v18,-3,33,-12,43,-26r11,0","w":119},"\u00ac":{"d":"185,-39r0,-80r-168,0r0,-14r182,0r0,94r-14,0","w":216},"\u00b5":{"d":"167,-185r0,185r-14,0v-1,-13,2,-29,-1,-40v-14,47,-83,59,-118,24r0,82r-14,0r0,-251r14,0r0,117v0,19,2,60,52,60v41,0,67,-32,67,-77r0,-100r14,0","w":186},"\u2122":{"d":"145,-257r0,12r-51,0r0,136r-12,0r0,-136r-51,0r0,-12r114,0xm195,-257r55,125r55,-125r21,0r0,148r-12,0r-1,-136r-60,136r-6,0r-62,-136r0,136r-11,0r0,-148r21,0","w":356},"\u00d0":{"d":"23,-143r0,-114r84,0v92,0,119,63,119,128v0,73,-38,129,-120,129r-83,0r0,-131r-25,0r0,-12r25,0xm39,-143r95,0r0,12r-95,0r0,117v100,3,171,6,171,-115v0,-105,-68,-114,-106,-114r-65,0r0,100","w":240},"\u00bd":{"d":"44,9r167,-266r14,0r-167,266r-14,0xm77,-249r0,150r-12,0r0,-134v-11,12,-25,19,-42,20r0,-10v18,-3,33,-12,43,-26r11,0xm281,-111v-1,48,-85,59,-95,101r96,0r0,10r-108,0v0,-57,95,-62,95,-112v0,-16,-12,-32,-40,-32v-28,0,-40,18,-41,45r-11,0v2,-32,14,-55,52,-55v29,0,52,14,52,43","w":300},"\u00b1":{"d":"101,-113r0,-68r14,0r0,68r84,0r0,13r-84,0r0,68r-14,0r0,-68r-84,0r0,-13r84,0xm17,0r0,-14r182,0r0,14r-182,0","w":216},"\u00de":{"d":"23,0r0,-257r16,0r0,43v83,6,168,-28,168,72v0,45,-30,71,-81,71r-87,0r0,71r-16,0xm39,-200r0,115r90,0v46,0,62,-31,62,-58v0,-19,-9,-57,-60,-57r-92,0","w":213},"\u00bc":{"d":"225,-149r17,0r0,102r26,0r0,10r-26,0r0,37r-11,0r0,-37r-78,0r0,-10xm231,-47r-1,-90r-64,90r65,0xm54,9r168,-266r14,0r-167,266r-15,0xm87,-249r0,150r-11,0r0,-134v-11,12,-25,19,-42,20r0,-10v18,-3,33,-12,43,-26r10,0","w":300},"\u00f7":{"d":"199,-84r-182,0r0,-14r182,0r0,14xm90,-163v0,-10,8,-18,18,-18v10,0,19,8,19,18v0,10,-9,19,-19,19v-10,0,-18,-9,-18,-19xm90,-18v0,-10,8,-19,18,-19v10,0,19,9,19,19v0,10,-9,18,-19,18v-10,0,-18,-8,-18,-18","w":216},"\u00a6":{"d":"33,32r0,-90r14,0r0,90r-14,0xm33,-148r0,-90r14,0r0,90r-14,0","w":79},"\u00b0":{"d":"72,-241v-22,0,-38,18,-38,40v0,22,16,39,38,39v22,0,38,-17,38,-39v0,-22,-16,-40,-38,-40xm72,-150v-29,0,-51,-22,-51,-51v0,-29,22,-52,51,-52v29,0,51,23,51,52v0,29,-22,51,-51,51","w":144},"\u00fe":{"d":"105,-8v48,0,70,-38,70,-84v0,-42,-20,-85,-70,-85v-49,0,-68,41,-68,85v0,44,16,84,68,84xm23,66r0,-323r14,0r1,114v6,-18,26,-46,67,-46v57,0,83,45,83,97v0,56,-26,96,-83,96v-32,1,-55,-15,-68,-43r0,105r-14,0"},"\u00be":{"d":"236,-149r17,0r0,102r26,0r0,10r-26,0r0,37r-11,0r0,-37r-78,0r0,-10xm71,9r168,-266r14,0r-167,266r-15,0xm242,-47r-1,-90r-64,90r65,0xm12,-149r11,0v-1,27,18,44,47,44v23,0,45,-14,45,-36v0,-27,-27,-34,-54,-32r0,-10v23,1,51,-5,51,-30v0,-20,-23,-30,-42,-30v-28,0,-42,18,-43,42r-11,0v0,-31,20,-52,56,-52v26,0,51,12,51,40v0,18,-13,31,-32,34v22,2,36,18,36,38v0,31,-25,45,-55,45v-39,0,-61,-18,-60,-53","w":300},"\u00b2":{"d":"113,-210v-1,49,-85,60,-96,101r97,0r0,10r-108,0v0,-57,95,-62,95,-112v0,-16,-12,-32,-40,-32v-28,0,-40,18,-41,45r-11,0v2,-32,14,-55,52,-55v29,0,52,14,52,43","w":119},"\u00ae":{"d":"95,-49r0,-159v50,0,112,-8,112,44v0,26,-18,38,-41,42r47,73r-15,0r-48,-73r-41,0r0,73r-14,0xm109,-196r0,62v37,-1,84,9,84,-31v0,-40,-46,-30,-84,-31xm144,-251v-69,0,-121,53,-121,122v0,68,52,123,121,123v69,0,121,-55,121,-123v0,-69,-52,-122,-121,-122xm144,-263v75,0,135,59,135,134v0,75,-60,135,-135,135v-75,0,-135,-60,-135,-135v0,-75,60,-134,135,-134","w":288},"\u2212":{"d":"199,-84r-182,0r0,-14r182,0r0,14","w":216},"\u00f0":{"d":"97,-170v-47,0,-72,38,-72,80v0,42,23,82,72,82v49,0,71,-39,71,-82v0,-42,-24,-80,-71,-80xm53,-210r38,-21v-12,-9,-25,-18,-37,-24r10,-8v14,8,28,16,39,25r42,-23r7,8r-39,22v45,36,68,82,68,141v0,52,-27,94,-84,94v-58,0,-85,-41,-85,-94v0,-76,92,-126,144,-66v-10,-24,-32,-49,-56,-68r-40,22","w":193},"\u00d7":{"d":"28,-21r70,-70r-70,-70r10,-10r70,71r70,-71r10,10r-70,70r70,70r-10,10r-70,-70r-70,70","w":216},"\u00b3":{"d":"6,-149r12,0v-1,27,17,44,46,44v23,0,46,-14,46,-36v0,-27,-27,-34,-54,-32r0,-10v23,1,50,-5,50,-30v0,-20,-23,-30,-42,-30v-28,0,-41,18,-42,42r-12,0v0,-31,20,-52,56,-52v26,0,52,12,52,40v0,18,-13,31,-32,34v22,2,35,18,35,38v0,31,-25,45,-55,45v-39,0,-61,-18,-60,-53","w":119},"\u00a9":{"d":"144,-251v-69,0,-121,53,-121,122v0,68,52,123,121,123v69,0,121,-55,121,-123v0,-69,-52,-122,-121,-122xm216,-158r-14,0v-5,-27,-27,-44,-55,-44v-42,0,-67,31,-67,73v0,41,26,74,68,74v29,0,47,-19,54,-46r14,0v-4,35,-33,58,-68,58v-49,0,-81,-37,-81,-86v0,-91,136,-117,149,-29xm144,-263v75,0,135,59,135,134v0,75,-60,135,-135,135v-75,0,-135,-60,-135,-135v0,-75,60,-134,135,-134","w":288},"\u00c1":{"d":"99,-257r17,0r102,257r-17,0r-33,-82r-123,0r-32,82r-17,0xm50,-96r113,0r-55,-146xm86,-275r43,-50r19,0r-49,50r-13,0","w":213},"\u00c2":{"d":"99,-257r17,0r102,257r-17,0r-33,-82r-123,0r-32,82r-17,0xm50,-96r113,0r-55,-146xm99,-325r15,0r42,50r-14,0r-35,-41r-35,41r-14,0","w":213},"\u00c4":{"d":"99,-257r17,0r102,257r-17,0r-33,-82r-123,0r-32,82r-17,0xm50,-96r113,0r-55,-146xm86,-276r-16,0r0,-37r16,0r0,37xm143,-276r-16,0r0,-37r16,0r0,37","w":213},"\u00c0":{"d":"99,-257r17,0r102,257r-17,0r-33,-82r-123,0r-32,82r-17,0xm50,-96r113,0r-55,-146xm127,-275r-13,0r-48,-50r18,0","w":213},"\u00c5":{"d":"99,-257r17,0r102,257r-17,0r-33,-82r-123,0r-32,82r-17,0xm50,-96r113,0r-55,-146xm69,-298v0,-20,16,-36,36,-36v20,0,35,16,35,36v0,20,-15,36,-35,36v-20,0,-36,-16,-36,-36xm79,-298v0,14,12,26,26,26v14,0,26,-12,26,-26v0,-14,-12,-26,-26,-26v-14,0,-26,12,-26,26","w":213},"\u00c3":{"d":"99,-257r17,0r102,257r-17,0r-33,-82r-123,0r-32,82r-17,0xm50,-96r113,0r-55,-146xm131,-279v-22,-2,-60,-42,-66,0r-10,0v2,-16,11,-32,27,-32v23,1,60,41,66,0r11,0v-3,16,-10,34,-28,32","w":213},"\u00c7":{"d":"239,-180r-16,0v-7,-43,-45,-69,-88,-69v-67,0,-106,54,-106,120v0,66,39,121,106,121v50,0,89,-44,92,-92r16,0v-6,61,-51,106,-109,106v-4,5,-9,9,-12,15v17,-7,41,-1,41,23v0,32,-52,31,-69,19r4,-9v14,7,51,15,51,-10v0,-21,-25,-20,-37,-12v-11,-8,7,-18,10,-27v-69,-6,-109,-63,-109,-134v0,-75,45,-134,122,-134v91,0,104,79,104,83","w":253},"\u00c9":{"d":"39,-14r158,0r0,14r-174,0r0,-257r172,0r0,14r-156,0r0,103r147,0r0,13r-147,0r0,113xm80,-275r43,-50r19,0r-48,50r-14,0","w":201},"\u00ca":{"d":"39,-14r158,0r0,14r-174,0r0,-257r172,0r0,14r-156,0r0,103r147,0r0,13r-147,0r0,113xm94,-325r14,0r42,50r-14,0r-35,-41r-35,41r-14,0","w":201},"\u00cb":{"d":"39,-14r158,0r0,14r-174,0r0,-257r172,0r0,14r-156,0r0,103r147,0r0,13r-147,0r0,113xm84,-276r-16,0r0,-37r16,0r0,37xm141,-276r-16,0r0,-37r16,0r0,37","w":201},"\u00c8":{"d":"39,-14r158,0r0,14r-174,0r0,-257r172,0r0,14r-156,0r0,103r147,0r0,13r-147,0r0,113xm122,-275r-14,0r-48,-50r18,0","w":201},"\u00cd":{"d":"23,0r0,-257r16,0r0,257r-16,0xm10,-275r43,-50r19,0r-49,50r-13,0","w":61},"\u00ce":{"d":"23,0r0,-257r16,0r0,257r-16,0xm23,-325r15,0r42,50r-14,0r-35,-41r-35,41r-14,0","w":61},"\u00cf":{"d":"23,0r0,-257r16,0r0,257r-16,0xm10,-276r-16,0r0,-37r16,0r0,37xm67,-276r-16,0r0,-37r16,0r0,37","w":61},"\u00cc":{"d":"23,0r0,-257r16,0r0,257r-16,0xm51,-275r-13,0r-48,-50r18,0","w":61},"\u00d1":{"d":"23,0r0,-257r19,0r164,236r0,-236r15,0r0,257r-18,0r-164,-238r0,238r-16,0xm147,-279v-23,-2,-60,-42,-66,0r-11,0v2,-16,11,-32,28,-32v22,1,60,41,66,0r10,0v-2,16,-9,33,-27,32","w":244},"\u00d3":{"d":"256,-129v0,75,-45,135,-122,135v-77,0,-123,-60,-123,-135v0,-75,46,-134,123,-134v77,0,122,59,122,134xm27,-129v0,66,40,121,107,121v67,0,106,-55,106,-121v0,-66,-39,-120,-106,-120v-67,0,-107,54,-107,120xm113,-275r43,-50r18,0r-48,50r-13,0","w":266},"\u00d4":{"d":"256,-129v0,75,-45,135,-122,135v-77,0,-123,-60,-123,-135v0,-75,46,-134,123,-134v77,0,122,59,122,134xm27,-129v0,66,40,121,107,121v67,0,106,-55,106,-121v0,-66,-39,-120,-106,-120v-67,0,-107,54,-107,120xm126,-325r14,0r42,50r-14,0r-35,-41r-35,41r-13,0","w":266},"\u00d6":{"d":"256,-129v0,75,-45,135,-122,135v-77,0,-123,-60,-123,-135v0,-75,46,-134,123,-134v77,0,122,59,122,134xm27,-129v0,66,40,121,107,121v67,0,106,-55,106,-121v0,-66,-39,-120,-106,-120v-67,0,-107,54,-107,120xm113,-276r-16,0r0,-37r16,0r0,37xm170,-276r-16,0r0,-37r16,0r0,37","w":266},"\u00d2":{"d":"256,-129v0,75,-45,135,-122,135v-77,0,-123,-60,-123,-135v0,-75,46,-134,123,-134v77,0,122,59,122,134xm27,-129v0,66,40,121,107,121v67,0,106,-55,106,-121v0,-66,-39,-120,-106,-120v-67,0,-107,54,-107,120xm154,-275r-13,0r-48,-50r18,0","w":266},"\u00d5":{"d":"256,-129v0,75,-45,135,-122,135v-77,0,-123,-60,-123,-135v0,-75,46,-134,123,-134v77,0,122,59,122,134xm27,-129v0,66,40,121,107,121v67,0,106,-55,106,-121v0,-66,-39,-120,-106,-120v-67,0,-107,54,-107,120xm158,-279v-23,-2,-60,-42,-66,0r-11,0v2,-16,11,-32,28,-32v22,1,60,41,66,0r10,0v-2,16,-9,33,-27,32","w":266},"\u0160":{"d":"197,-66v0,-88,-175,-31,-175,-129v0,-49,45,-68,86,-68v54,0,95,22,98,79r-16,0v-2,-44,-34,-65,-82,-65v-29,0,-71,12,-71,54v0,84,176,29,176,129v0,53,-52,72,-91,72v-60,0,-109,-25,-108,-91r16,0v-3,56,41,77,92,77v31,0,75,-13,75,-58xm118,-275r-14,0r-41,-50r13,0r35,41r36,-41r13,0","w":226},"\u00da":{"d":"23,-257r16,0r0,154v0,31,6,95,80,95v120,0,76,-144,84,-249r16,0v-7,119,36,264,-100,263v-91,0,-96,-75,-96,-109r0,-154xm100,-275r44,-50r18,0r-48,50r-14,0","w":241},"\u00db":{"d":"23,-257r16,0r0,154v0,31,6,95,80,95v120,0,76,-144,84,-249r16,0v-7,119,36,264,-100,263v-91,0,-96,-75,-96,-109r0,-154xm114,-325r14,0r42,50r-14,0r-35,-41r-35,41r-14,0","w":241},"\u00dc":{"d":"23,-257r16,0r0,154v0,31,6,95,80,95v120,0,76,-144,84,-249r16,0v-7,119,36,264,-100,263v-91,0,-96,-75,-96,-109r0,-154xm100,-276r-15,0r0,-37r15,0r0,37xm157,-276r-16,0r0,-37r16,0r0,37","w":241},"\u00d9":{"d":"23,-257r16,0r0,154v0,31,6,95,80,95v120,0,76,-144,84,-249r16,0v-7,119,36,264,-100,263v-91,0,-96,-75,-96,-109r0,-154xm142,-275r-13,0r-49,-50r19,0","w":241},"\u00dd":{"d":"103,-121r94,-136r17,0r-103,149r0,108r-16,0r0,-108r-103,-149r18,0xm83,-275r43,-50r18,0r-48,50r-13,0","w":206,"k":{"v":6,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":42,".":42,"-":35,"a":27,"\u00e6":27,"\u00e1":27,"\u00e2":27,"\u00e4":27,"\u00e0":27,"\u00e5":27,"\u00e3":27,"e":27,"\u00e9":27,"\u00ea":27,"\u00eb":27,"\u00e8":27,"o":27,"\u00f8":27,"\u0153":27,"\u00f3":27,"\u00f4":27,"\u00f6":27,"\u00f2":27,"\u00f5":27,"u":13,"\u00fa":13,"\u00fb":13,"\u00fc":13,"\u00f9":13,":":20,";":20,"p":20,"q":27}},"\u0178":{"d":"103,-121r94,-136r17,0r-103,149r0,108r-16,0r0,-108r-103,-149r18,0xm83,-276r-16,0r0,-37r16,0r0,37xm140,-276r-16,0r0,-37r16,0r0,37","w":206,"k":{"v":6,"A":20,"\u00c6":20,"\u00c1":20,"\u00c2":20,"\u00c4":20,"\u00c0":20,"\u00c5":20,"\u00c3":20,",":42,".":42,"-":35,"a":27,"\u00e6":27,"\u00e1":27,"\u00e2":27,"\u00e4":27,"\u00e0":27,"\u00e5":27,"\u00e3":27,"e":27,"\u00e9":27,"\u00ea":27,"\u00eb":27,"\u00e8":27,"o":27,"\u00f8":27,"\u0153":27,"\u00f3":27,"\u00f4":27,"\u00f6":27,"\u00f2":27,"\u00f5":27,"u":13,"\u00fa":13,"\u00fb":13,"\u00fc":13,"\u00f9":13,":":20,";":20,"p":20,"q":27}},"\u017d":{"d":"10,-243r0,-14r180,0r0,14r-174,229r178,0r0,14r-194,0r0,-14r173,-229r-163,0xm102,-275r-15,0r-41,-50r13,0r35,41r36,-41r13,0","w":193},"\u00e1":{"d":"143,-105v-26,22,-118,0,-118,57v0,22,17,40,49,40v62,0,69,-53,69,-63r0,-34xm157,-141r0,107v-2,16,5,26,22,21r0,12v-29,6,-39,-11,-37,-36v-12,47,-130,65,-130,-11v0,-43,37,-52,68,-55v61,-4,63,-8,63,-38v0,-8,-9,-36,-51,-36v-33,0,-55,17,-57,49r-14,0v2,-41,27,-61,71,-61v32,0,65,10,65,48xm69,-213r44,-50r18,0r-48,50r-14,0","w":180},"\u00e2":{"d":"143,-105v-26,22,-118,0,-118,57v0,22,17,40,49,40v62,0,69,-53,69,-63r0,-34xm157,-141r0,107v-2,16,5,26,22,21r0,12v-29,6,-39,-11,-37,-36v-12,47,-130,65,-130,-11v0,-43,37,-52,68,-55v61,-4,63,-8,63,-38v0,-8,-9,-36,-51,-36v-33,0,-55,17,-57,49r-14,0v2,-41,27,-61,71,-61v32,0,65,10,65,48xm83,-263r14,0r42,50r-14,0r-35,-41r-35,41r-14,0","w":180},"\u00e4":{"d":"143,-105v-26,22,-118,0,-118,57v0,22,17,40,49,40v62,0,69,-53,69,-63r0,-34xm157,-141r0,107v-2,16,5,26,22,21r0,12v-29,6,-39,-11,-37,-36v-12,47,-130,65,-130,-11v0,-43,37,-52,68,-55v61,-4,63,-8,63,-38v0,-8,-9,-36,-51,-36v-33,0,-55,17,-57,49r-14,0v2,-41,27,-61,71,-61v32,0,65,10,65,48xm69,-214r-15,0r0,-37r15,0r0,37xm126,-214r-15,0r0,-37r15,0r0,37","w":180},"\u00e0":{"d":"143,-105v-26,22,-118,0,-118,57v0,22,17,40,49,40v62,0,69,-53,69,-63r0,-34xm157,-141r0,107v-2,16,5,26,22,21r0,12v-29,6,-39,-11,-37,-36v-12,47,-130,65,-130,-11v0,-43,37,-52,68,-55v61,-4,63,-8,63,-38v0,-8,-9,-36,-51,-36v-33,0,-55,17,-57,49r-14,0v2,-41,27,-61,71,-61v32,0,65,10,65,48xm111,-213r-13,0r-49,-50r19,0","w":180},"\u00e5":{"d":"143,-105v-26,22,-118,0,-118,57v0,22,17,40,49,40v62,0,69,-53,69,-63r0,-34xm157,-141r0,107v-2,16,5,26,22,21r0,12v-29,6,-39,-11,-37,-36v-12,47,-130,65,-130,-11v0,-43,37,-52,68,-55v61,-4,63,-8,63,-38v0,-8,-9,-36,-51,-36v-33,0,-55,17,-57,49r-14,0v2,-41,27,-61,71,-61v32,0,65,10,65,48xm54,-230v0,-20,16,-36,36,-36v20,0,36,16,36,36v0,20,-16,35,-36,35v-20,0,-36,-15,-36,-35xm64,-230v0,14,12,26,26,26v14,0,26,-12,26,-26v0,-14,-12,-26,-26,-26v-14,0,-26,12,-26,26","w":180},"\u00e3":{"d":"143,-105v-26,22,-118,0,-118,57v0,22,17,40,49,40v62,0,69,-53,69,-63r0,-34xm157,-141r0,107v-2,16,5,26,22,21r0,12v-29,6,-39,-11,-37,-36v-12,47,-130,65,-130,-11v0,-43,37,-52,68,-55v61,-4,63,-8,63,-38v0,-8,-9,-36,-51,-36v-33,0,-55,17,-57,49r-14,0v2,-41,27,-61,71,-61v32,0,65,10,65,48xm115,-217v-22,-2,-60,-41,-66,0r-11,0v2,-16,11,-32,28,-32v21,0,61,41,66,0r10,0v-2,16,-9,33,-27,32","w":180},"\u00e7":{"d":"173,-128r-14,0v-3,-33,-29,-49,-62,-49v-46,0,-71,41,-71,83v0,50,23,86,71,86v35,0,59,-23,64,-57r14,0v-6,42,-35,67,-73,69v-4,6,-13,11,-13,17v17,-7,40,0,40,23v0,33,-52,30,-69,19r4,-9v14,7,52,15,52,-10v0,-21,-25,-20,-37,-12v-13,-7,7,-19,11,-28v-55,-3,-78,-48,-78,-98v0,-51,30,-95,85,-95v40,0,72,19,76,61","w":186},"\u00e9":{"d":"175,-91r-149,0v-1,44,22,83,68,83v35,0,60,-21,66,-55r14,0v-7,43,-36,67,-80,67v-54,0,-82,-42,-82,-93v0,-51,26,-100,82,-100v58,0,84,45,81,98xm26,-103r135,0v-1,-39,-25,-74,-67,-74v-41,0,-65,37,-68,74xm73,-213r43,-50r18,0r-48,50r-13,0","w":186},"\u00ea":{"d":"175,-91r-149,0v-1,44,22,83,68,83v35,0,60,-21,66,-55r14,0v-7,43,-36,67,-80,67v-54,0,-82,-42,-82,-93v0,-51,26,-100,82,-100v58,0,84,45,81,98xm26,-103r135,0v-1,-39,-25,-74,-67,-74v-41,0,-65,37,-68,74xm86,-263r14,0r42,50r-13,0r-36,-41r-35,41r-13,0","w":186},"\u00eb":{"d":"175,-91r-149,0v-1,44,22,83,68,83v35,0,60,-21,66,-55r14,0v-7,43,-36,67,-80,67v-54,0,-82,-42,-82,-93v0,-51,26,-100,82,-100v58,0,84,45,81,98xm26,-103r135,0v-1,-39,-25,-74,-67,-74v-41,0,-65,37,-68,74xm73,-214r-16,0r0,-37r16,0r0,37xm130,-214r-16,0r0,-37r16,0r0,37","w":186},"\u00e8":{"d":"175,-91r-149,0v-1,44,22,83,68,83v35,0,60,-21,66,-55r14,0v-7,43,-36,67,-80,67v-54,0,-82,-42,-82,-93v0,-51,26,-100,82,-100v58,0,84,45,81,98xm26,-103r135,0v-1,-39,-25,-74,-67,-74v-41,0,-65,37,-68,74xm114,-213r-13,0r-48,-50r18,0","w":186},"\u00ed":{"d":"37,0r-14,0r0,-185r14,0r0,185xm10,-213r43,-50r18,0r-48,50r-13,0","w":60},"\u00ee":{"d":"37,0r-14,0r0,-185r14,0r0,185xm23,-263r14,0r42,50r-13,0r-36,-41r-35,41r-13,0","w":60},"\u00ef":{"d":"37,0r-14,0r0,-185r14,0r0,185xm10,-214r-16,0r0,-37r16,0r0,37xm67,-214r-16,0r0,-37r16,0r0,37","w":60},"\u00ec":{"d":"37,0r-14,0r0,-185r14,0r0,185xm51,-213r-13,0r-48,-50r18,0","w":60},"\u00f1":{"d":"20,0r0,-185r14,0v1,13,-2,29,1,40v9,-28,37,-44,66,-44v65,0,66,52,66,75r0,114r-14,0r0,-117v0,-19,-3,-60,-53,-60v-41,0,-66,32,-66,77r0,100r-14,0xm118,-217v-22,-2,-60,-41,-66,0r-11,0v2,-16,11,-32,28,-32v21,0,61,41,66,0r10,0v-2,16,-9,33,-27,32","w":186},"\u00f3":{"d":"12,-93v0,-53,30,-96,84,-96v54,0,85,43,85,96v0,53,-31,97,-85,97v-54,0,-84,-44,-84,-97xm25,-93v0,44,25,85,71,85v46,0,72,-41,72,-85v0,-44,-26,-84,-72,-84v-46,0,-71,40,-71,84xm76,-213r43,-50r19,0r-49,50r-13,0","w":193},"\u00f4":{"d":"12,-93v0,-53,30,-96,84,-96v54,0,85,43,85,96v0,53,-31,97,-85,97v-54,0,-84,-44,-84,-97xm25,-93v0,44,25,85,71,85v46,0,72,-41,72,-85v0,-44,-26,-84,-72,-84v-46,0,-71,40,-71,84xm89,-263r15,0r41,50r-13,0r-36,-41r-34,41r-14,0","w":193},"\u00f6":{"d":"12,-93v0,-53,30,-96,84,-96v54,0,85,43,85,96v0,53,-31,97,-85,97v-54,0,-84,-44,-84,-97xm25,-93v0,44,25,85,71,85v46,0,72,-41,72,-85v0,-44,-26,-84,-72,-84v-46,0,-71,40,-71,84xm76,-214r-16,0r0,-37r16,0r0,37xm133,-214r-16,0r0,-37r16,0r0,37","w":193},"\u00f2":{"d":"12,-93v0,-53,30,-96,84,-96v54,0,85,43,85,96v0,53,-31,97,-85,97v-54,0,-84,-44,-84,-97xm25,-93v0,44,25,85,71,85v46,0,72,-41,72,-85v0,-44,-26,-84,-72,-84v-46,0,-71,40,-71,84xm117,-213r-13,0r-48,-50r18,0","w":193},"\u00f5":{"d":"12,-93v0,-53,30,-96,84,-96v54,0,85,43,85,96v0,53,-31,97,-85,97v-54,0,-84,-44,-84,-97xm25,-93v0,44,25,85,71,85v46,0,72,-41,72,-85v0,-44,-26,-84,-72,-84v-46,0,-71,40,-71,84xm121,-217v-22,-1,-60,-41,-66,0r-10,0v2,-16,11,-32,27,-32v22,0,61,41,66,0r11,0v-3,16,-10,33,-28,32","w":193},"\u0161":{"d":"33,-142v0,63,127,20,127,95v0,40,-40,51,-72,51v-42,0,-74,-23,-75,-66r14,0v2,34,28,54,61,54v24,0,59,-7,59,-39v0,-64,-128,-20,-128,-95v0,-37,36,-47,67,-47v39,0,69,17,69,59r-14,0v0,-33,-24,-47,-55,-47v-25,0,-53,9,-53,35xm91,-213r-14,0r-41,-50r13,0r35,41r36,-41r13,0","w":173},"\u00fa":{"d":"167,-185r0,185r-14,0v-1,-13,2,-29,-1,-40v-9,28,-37,44,-66,44v-65,0,-66,-52,-66,-75r0,-114r14,0r0,117v0,19,2,60,52,60v41,0,67,-32,67,-77r0,-100r14,0xm73,-213r43,-50r18,0r-48,50r-13,0","w":186},"\u00fb":{"d":"167,-185r0,185r-14,0v-1,-13,2,-29,-1,-40v-9,28,-37,44,-66,44v-65,0,-66,-52,-66,-75r0,-114r14,0r0,117v0,19,2,60,52,60v41,0,67,-32,67,-77r0,-100r14,0xm86,-263r14,0r42,50r-13,0r-36,-41r-35,41r-13,0","w":186},"\u00fc":{"d":"167,-185r0,185r-14,0v-1,-13,2,-29,-1,-40v-9,28,-37,44,-66,44v-65,0,-66,-52,-66,-75r0,-114r14,0r0,117v0,19,2,60,52,60v41,0,67,-32,67,-77r0,-100r14,0xm73,-214r-16,0r0,-37r16,0r0,37xm130,-214r-16,0r0,-37r16,0r0,37","w":186},"\u00f9":{"d":"167,-185r0,185r-14,0v-1,-13,2,-29,-1,-40v-9,28,-37,44,-66,44v-65,0,-66,-52,-66,-75r0,-114r14,0r0,117v0,19,2,60,52,60v41,0,67,-32,67,-77r0,-100r14,0xm114,-213r-13,0r-48,-50r18,0","w":186},"\u00fd":{"d":"75,-1r-77,-184r16,0r69,169r63,-169r16,0r-80,205v-15,35,-18,48,-64,46r0,-12v44,-3,40,-13,57,-55xm59,-213r44,-50r18,0r-48,50r-14,0","w":159,"k":{",":27,".":27}},"\u00ff":{"d":"75,-1r-77,-184r16,0r69,169r63,-169r16,0r-80,205v-15,35,-18,48,-64,46r0,-12v44,-3,40,-13,57,-55xm59,-214r-15,0r0,-37r15,0r0,37xm116,-214r-16,0r0,-37r16,0r0,37","w":159,"k":{",":27,".":27}},"\u017e":{"d":"20,-12r130,0r0,12r-147,0r0,-13r124,-160r-114,0r0,-12r131,0r0,13xm82,-213r-15,0r-41,-50r14,0r35,41r35,-41r13,0","w":153},"\u2206":{"d":"13,0r0,-12r96,-243r14,0r96,243r0,12r-206,0xm25,-11r180,0r-89,-228r-2,0","w":231},"\u2126":{"d":"21,-11v18,-1,41,2,57,-1v-28,-24,-52,-65,-52,-118v0,-75,49,-122,107,-122v61,0,105,53,105,121v1,57,-29,98,-54,120r59,0r0,11r-81,0r0,-8v32,-20,63,-64,63,-122v0,-49,-31,-111,-92,-111v-58,0,-94,52,-94,112v0,55,31,101,62,121r0,8r-80,0r0,-11","w":263},"\u03bc":{"d":"167,-185r0,185r-14,0v-1,-13,2,-29,-1,-40v-14,47,-83,59,-118,24r0,82r-14,0r0,-251r14,0r0,117v0,19,2,60,52,60v41,0,67,-32,67,-77r0,-100r14,0","w":186},"\u03c0":{"d":"187,-172r-32,0v1,50,-5,137,6,172v-26,2,-18,-9,-18,-50r0,-122r-78,0v-3,51,-15,141,-29,172r-13,0v15,-36,26,-118,29,-172v-27,0,-36,2,-44,5r-3,-8v41,-16,128,-5,184,-8","w":197},"\u20ac":{"d":"121,4v-57,2,-89,-48,-93,-100r-24,0r6,-12r17,0v-1,-12,-1,-24,0,-35r-23,0r6,-12r18,0v2,-26,11,-59,34,-77v48,-38,106,-25,129,18r-8,13v-19,-45,-72,-57,-115,-20v-17,15,-24,45,-26,66r119,0r-5,12r-115,0v-1,13,-1,25,0,35r102,0r-6,12r-95,0v2,19,8,40,20,57v38,50,92,35,126,3r0,17v-14,13,-41,23,-67,23"},"\u2113":{"d":"149,-44r8,5v-14,25,-34,41,-62,41v-42,-1,-56,-36,-55,-76r-22,19r-6,-9v10,-9,20,-16,28,-25r0,-103v0,-66,28,-81,49,-81v27,0,40,23,40,53v0,47,-32,92,-78,136v-9,89,73,94,98,40xm51,-195r0,96v36,-39,67,-77,67,-119v0,-26,-9,-45,-31,-45v-15,0,-36,18,-36,68","w":166},"\u212e":{"d":"64,-49v36,61,143,59,183,3r20,0v-26,30,-67,50,-113,50v-78,0,-142,-57,-142,-128v0,-71,64,-129,142,-129v80,1,145,58,144,132r-234,2r0,70xm245,-200v-34,-61,-147,-58,-181,1v1,23,-3,52,2,72r178,0v3,-22,0,-49,1,-73","w":309},"\u2202":{"d":"36,-248r-6,-9v66,-45,141,-8,140,114v0,78,-28,146,-88,146v-44,0,-65,-39,-65,-80v0,-54,36,-89,75,-89v36,0,59,27,65,39v10,-103,-54,-174,-121,-121xm30,-79v0,41,20,71,53,71v40,0,66,-45,72,-101v-7,-19,-30,-47,-62,-47v-34,0,-63,34,-63,77","w":189},"\u220f":{"d":"236,-236r-42,0r0,270r-12,0r0,-270r-119,0r0,270r-12,0r0,-270r-41,0r0,-11r226,0r0,11","w":245},"\u2211":{"d":"189,34r-181,0r0,-9r105,-131r-100,-133r0,-8r171,0r0,11r-152,1r96,128r-102,129r163,0r0,12","w":198},"\u2219":{"d":"50,-94v-24,0,-24,-40,0,-40v25,0,25,40,0,40","w":100},"\u221a":{"d":"198,-292r-80,347r-14,0r-60,-171r-27,10r-4,-10r40,-14r58,169r75,-331r12,0","w":199},"\u221e":{"d":"259,-103v0,32,-25,53,-52,53v-24,0,-41,-17,-67,-44v-19,21,-39,44,-69,44v-28,0,-52,-24,-52,-52v0,-30,23,-53,54,-53v27,0,49,24,68,45v21,-23,40,-45,69,-45v31,0,49,22,49,52xm31,-102v0,23,16,42,42,42v25,0,44,-27,60,-42v-17,-19,-36,-43,-64,-43v-24,0,-38,21,-38,43xm208,-145v-26,0,-48,29,-61,42v26,26,41,43,61,43v25,0,39,-21,39,-42v0,-28,-17,-43,-39,-43","w":278},"\u222b":{"d":"51,-216v0,-58,18,-96,62,-78r-4,9v-37,-14,-46,20,-46,70v0,54,5,131,5,184v0,60,-6,77,-45,85v-14,0,-25,-5,-16,-16v3,1,9,5,17,5v28,-9,31,-23,31,-75v0,-53,-4,-131,-4,-184","w":117},"\u2248":{"d":"66,-148v46,0,86,58,115,0r7,6v-9,17,-22,32,-45,32v-25,0,-52,-28,-79,-28v-18,0,-29,12,-38,27r-7,-5v11,-21,27,-32,47,-32xm66,-91v46,0,86,58,115,0r7,6v-9,17,-22,31,-45,31v-24,0,-53,-27,-79,-27v-18,0,-29,13,-38,27r-7,-5v11,-21,27,-32,47,-32","w":207},"\u2260":{"d":"143,-177r-18,38r62,0r0,10r-67,0r-27,56r94,0r0,10r-98,0r-21,44r-9,-4r19,-40r-59,0r0,-10r64,0r26,-56r-90,0r0,-10r95,0r20,-43","w":207},"\u2264":{"d":"186,-32r-164,-82r0,-11r164,-81r0,13r-151,74r151,73r0,14xm187,-6r-168,0r0,-11r168,0r0,11","w":207},"\u2265":{"d":"22,-206r164,81r0,11r-164,82r0,-14r151,-74r-151,-73r0,-13xm187,-6r-168,0r0,-11r168,0r0,11","w":207},"\u25ca":{"d":"179,-123r-74,138r-10,0r-74,-138r74,-140r10,0xm166,-123r-67,-128v-20,44,-45,85,-66,127r68,128v18,-45,44,-84,65,-127"},"\u00a0":{"w":100},"\u00ad":{"d":"102,-91r-77,0r0,-14r77,0r0,14","w":126},"\u02c9":{"d":"74,-226r-87,0r0,-12r87,0r0,12","w":60},"\u03a9":{"d":"21,-11v18,-1,41,2,57,-1v-28,-24,-52,-65,-52,-118v0,-75,49,-122,107,-122v61,0,105,53,105,121v1,57,-29,98,-54,120r59,0r0,11r-81,0r0,-8v32,-20,63,-64,63,-122v0,-49,-31,-111,-92,-111v-58,0,-94,52,-94,112v0,55,31,101,62,121r0,8r-80,0r0,-11","w":263},"\u2215":{"d":"-61,9r168,-266r14,0r-167,266r-15,0","w":60},"\u2010":{"d":"102,-91r-77,0r0,-14r77,0r0,14","w":126}}});
