/**
 * This page is generated by Nibble 1.4
 * The portal engine by Devidens.
 * Copyright (C) Devidens Ltd. 2006-2010
 * http://devidens.hu/
 */


if (!window.console || !console.firebug)
{
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml",
    "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];

    window.console = {};
    for (var i = 0; i < names.length; ++i)
        window.console[names[i]] = function() {}
}
/*
 * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message
 * Digest Algorithm, as defined in RFC 1321.
 * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.
 * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet
 * Distributed under the BSD License
 * See http://pajhome.org.uk/crypt/md5 for more info.
 */

/*
 * Configurable variables. You may need to tweak these to be compatible with
 * the server-side, but the defaults work in most cases.
 */
var hexcase = 0;  /* hex output format. 0 - lowercase; 1 - uppercase        */
var b64pad  = ""; /* base-64 pad character. "=" for strict RFC compliance   */
var chrsz   = 8;  /* bits per input character. 8 - ASCII; 16 - Unicode      */

/*
 * These are the functions you'll usually want to call
 * They take string arguments and return either hex or base-64 encoded strings
 */
function hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}
function b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}
function str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}
function hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }
function b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }
function str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }

/*
 * Perform a simple self-test to see if the VM is working
 */
function md5_vm_test()
{
  return hex_md5("abc") == "900150983cd24fb0d6963f7d28e17f72";
}

/*
 * Calculate the MD5 of an array of little-endian words, and a bit length
 */
function core_md5(x, len)
{
  /* append padding */
  x[len >> 5] |= 0x80 << ((len) % 32);
  x[(((len + 64) >>> 9) << 4) + 14] = len;

  var a =  1732584193;
  var b = -271733879;
  var c = -1732584194;
  var d =  271733878;

  for(var i = 0; i < x.length; i += 16)
  {
    var olda = a;
    var oldb = b;
    var oldc = c;
    var oldd = d;

    a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);
    d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);
    c = md5_ff(c, d, a, b, x[i+ 2], 17,  606105819);
    b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);
    a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);
    d = md5_ff(d, a, b, c, x[i+ 5], 12,  1200080426);
    c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);
    b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);
    a = md5_ff(a, b, c, d, x[i+ 8], 7 ,  1770035416);
    d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);
    c = md5_ff(c, d, a, b, x[i+10], 17, -42063);
    b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);
    a = md5_ff(a, b, c, d, x[i+12], 7 ,  1804603682);
    d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);
    c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);
    b = md5_ff(b, c, d, a, x[i+15], 22,  1236535329);

    a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);
    d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);
    c = md5_gg(c, d, a, b, x[i+11], 14,  643717713);
    b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);
    a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);
    d = md5_gg(d, a, b, c, x[i+10], 9 ,  38016083);
    c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);
    b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);
    a = md5_gg(a, b, c, d, x[i+ 9], 5 ,  568446438);
    d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);
    c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);
    b = md5_gg(b, c, d, a, x[i+ 8], 20,  1163531501);
    a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);
    d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);
    c = md5_gg(c, d, a, b, x[i+ 7], 14,  1735328473);
    b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);

    a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);
    d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);
    c = md5_hh(c, d, a, b, x[i+11], 16,  1839030562);
    b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);
    a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);
    d = md5_hh(d, a, b, c, x[i+ 4], 11,  1272893353);
    c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);
    b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);
    a = md5_hh(a, b, c, d, x[i+13], 4 ,  681279174);
    d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);
    c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);
    b = md5_hh(b, c, d, a, x[i+ 6], 23,  76029189);
    a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);
    d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);
    c = md5_hh(c, d, a, b, x[i+15], 16,  530742520);
    b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);

    a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);
    d = md5_ii(d, a, b, c, x[i+ 7], 10,  1126891415);
    c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);
    b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);
    a = md5_ii(a, b, c, d, x[i+12], 6 ,  1700485571);
    d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);
    c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);
    b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);
    a = md5_ii(a, b, c, d, x[i+ 8], 6 ,  1873313359);
    d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);
    c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);
    b = md5_ii(b, c, d, a, x[i+13], 21,  1309151649);
    a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);
    d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);
    c = md5_ii(c, d, a, b, x[i+ 2], 15,  718787259);
    b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);

    a = safe_add(a, olda);
    b = safe_add(b, oldb);
    c = safe_add(c, oldc);
    d = safe_add(d, oldd);
  }
  return Array(a, b, c, d);

}

/*
 * These functions implement the four basic operations the algorithm uses.
 */
function md5_cmn(q, a, b, x, s, t)
{
  return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);
}
function md5_ff(a, b, c, d, x, s, t)
{
  return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);
}
function md5_gg(a, b, c, d, x, s, t)
{
  return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);
}
function md5_hh(a, b, c, d, x, s, t)
{
  return md5_cmn(b ^ c ^ d, a, b, x, s, t);
}
function md5_ii(a, b, c, d, x, s, t)
{
  return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);
}

/*
 * Calculate the HMAC-MD5, of a key and some data
 */
function core_hmac_md5(key, data)
{
  var bkey = str2binl(key);
  if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);

  var ipad = Array(16), opad = Array(16);
  for(var i = 0; i < 16; i++)
  {
    ipad[i] = bkey[i] ^ 0x36363636;
    opad[i] = bkey[i] ^ 0x5C5C5C5C;
  }

  var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);
  return core_md5(opad.concat(hash), 512 + 128);
}

/*
 * Add integers, wrapping at 2^32. This uses 16-bit operations internally
 * to work around bugs in some JS interpreters.
 */
function safe_add(x, y)
{
  var lsw = (x & 0xFFFF) + (y & 0xFFFF);
  var msw = (x >> 16) + (y >> 16) + (lsw >> 16);
  return (msw << 16) | (lsw & 0xFFFF);
}

/*
 * Bitwise rotate a 32-bit number to the left.
 */
function bit_rol(num, cnt)
{
  return (num << cnt) | (num >>> (32 - cnt));
}

/*
 * Convert a string to an array of little-endian words
 * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.
 */
function str2binl(str)
{
  var bin = Array();
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < str.length * chrsz; i += chrsz)
    bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);
  return bin;
}

/*
 * Convert an array of little-endian words to a string
 */
function binl2str(bin)
{
  var str = "";
  var mask = (1 << chrsz) - 1;
  for(var i = 0; i < bin.length * 32; i += chrsz)
    str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);
  return str;
}

/*
 * Convert an array of little-endian words to a hex string.
 */
function binl2hex(binarray)
{
  var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i++)
  {
    str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +
           hex_tab.charAt((binarray[i>>2] >> ((i%4)*8  )) & 0xF);
  }
  return str;
}

/*
 * Convert an array of little-endian words to a base-64 string
 */
function binl2b64(binarray)
{
  var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var str = "";
  for(var i = 0; i < binarray.length * 4; i += 3)
  {
    var triplet = (((binarray[i   >> 2] >> 8 * ( i   %4)) & 0xFF) << 16)
                | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )
                |  ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);
    for(var j = 0; j < 4; j++)
    {
      if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;
      else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);
    }
  }
  return str;
}

//+ Carlos R. L. Rodrigues
//@ http://jsfromhell.com/geral/event-listener [v1.4]

JSFHaddEvent = function(o, e, f, s){
	var r = o[r = "_" + (e = "on" + e)] = o[r] || (o[e] ? [[o[e], o]] : []), a, c, d;
	r[r.length] = [f, s || o], o[e] = function(e){
		try{
			(e = e || (window.event ? (arguments = [].slice.call(arguments)).unshift(e = event) || 1 && e : {})).preventDefault || (e.preventDefault = function(){e.returnValue = false;});
			e.stopPropagation || (e.stopPropagation = function(){e.cancelBubble = true;});
			e.target || (e.target = e.srcElement || null);
			e.key = (e.which + 1 || e.keyCode + 1) - 1 || 0;
		}catch(f){}
		for(d = 1, f = r.length; f; r[--f] && (a = r[f][0], o = r[f][1], a.apply ? c = a.apply(o, arguments) : (o._ = a, c = o._(e), o._ = null), d &= c !== false));
		return e = null, !!d;
    }
};

JSFHremoveEvent = function(o, e, f, s){
	for(var i = (e = o["_on" + e] || []).length; i;)
		if(e[--i] && e[i][0] == f && (s || o) == e[i][1])
			return delete e[i];
	return false;
};
//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/forms/masked-input [v1.0]

//========================================================
// REQUIRES http://www.jsfromhell.com/geral/event-listener
//========================================================

MaskInput = function(f, m){
	function mask(e){
		var patterns = {"1": /[A-Z]/i, "2": /[0-9]/, "4": /[\xC0-\xFF]/i, "8": /./ },
			rules = { "a": 3, "A": 7, "9": 2, "C":5, "c": 1, "*": 8};
		function accept(c, rule){
			for(var i = 1, r = rules[rule] || 0; i <= r; i<<=1)
				if(r & i && patterns[i].test(c))
					break;
				return i <= r || c == rule;
		}
		var k, mC, r, c = String.fromCharCode(k = e.key), l = f.value.length;
		(!k || k == 8 ? 1 : (r = /^(.)\^(.*)$/.exec(m)) && (r[0] = r[2].indexOf(c) + 1) + 1 ?
			r[1] == "O" ? r[0] : r[1] == "E" ? !r[0] : accept(c, r[1]) || r[0]
			: (l = (f.value += m.substr(l, (r = /[A|9|C|\*]/i.exec(m.substr(l))) ?
			r.index : l)).length) < m.length && accept(c, m.charAt(l))) || e.preventDefault();
	}
	for(var i in !/^(.)\^(.*)$/.test(m) && (f.maxLength = m.length), {keypress: 0, keyup: 1})
		JSFHaddEvent(f, i, mask);
};

	/*  Prototype JavaScript framework, version 1.6.1
 *  (c) 2005-2009 Sam Stephenson
 *
 *  Prototype is freely distributable under the terms of an MIT-style license.
 *  For details, see the Prototype web site: http://www.prototypejs.org/
 *
 *--------------------------------------------------------------------------*/

var Prototype = {
  Version: '1.6.1',

  Browser: (function(){
    var ua = navigator.userAgent;
    var isOpera = Object.prototype.toString.call(window.opera) == '[object Opera]';
    return {
      IE:             !!window.attachEvent && !isOpera,
      Opera:          isOpera,
      WebKit:         ua.indexOf('AppleWebKit/') > -1,
      Gecko:          ua.indexOf('Gecko') > -1 && ua.indexOf('KHTML') === -1,
      MobileSafari:   /Apple.*Mobile.*Safari/.test(ua)
    }
  })(),

  BrowserFeatures: {
    XPath: !!document.evaluate,
    SelectorsAPI: !!document.querySelector,
    ElementExtensions: (function() {
      var constructor = window.Element || window.HTMLElement;
      return !!(constructor && constructor.prototype);
    })(),
    SpecificElementExtensions: (function() {
      if (typeof window.HTMLDivElement !== 'undefined')
        return true;

      var div = document.createElement('div');
      var form = document.createElement('form');
      var isSupported = false;

      if (div['__proto__'] && (div['__proto__'] !== form['__proto__'])) {
        isSupported = true;
      }

      div = form = null;

      return isSupported;
    })()
  },

  ScriptFragment: '<script[^>]*>([\\S\\s]*?)<\/script>',
  JSONFilter: /^\/\*-secure-([\s\S]*)\*\/\s*$/,

  emptyFunction: function() { },
  K: function(x) { return x }
};

if (Prototype.Browser.MobileSafari)
  Prototype.BrowserFeatures.SpecificElementExtensions = false;


var Abstract = { };


var Try = {
  these: function() {
    var returnValue;

    for (var i = 0, length = arguments.length; i < length; i++) {
      var lambda = arguments[i];
      try {
        returnValue = lambda();
        break;
      } catch (e) { }
    }

    return returnValue;
  }
};

/* Based on Alex Arnell's inheritance implementation. */

var Class = (function() {
  function subclass() {};
  function create() {
    var parent = null, properties = $A(arguments);
    if (Object.isFunction(properties[0]))
      parent = properties.shift();

    function klass() {
      this.initialize.apply(this, arguments);
    }

    Object.extend(klass, Class.Methods);
    klass.superclass = parent;
    klass.subclasses = [];

    if (parent) {
      subclass.prototype = parent.prototype;
      klass.prototype = new subclass;
      parent.subclasses.push(klass);
    }

    for (var i = 0; i < properties.length; i++)
      klass.addMethods(properties[i]);

    if (!klass.prototype.initialize)
      klass.prototype.initialize = Prototype.emptyFunction;

    klass.prototype.constructor = klass;
    return klass;
  }

  function addMethods(source) {
    var ancestor   = this.superclass && this.superclass.prototype;
    var properties = Object.keys(source);

    if (!Object.keys({ toString: true }).length) {
      if (source.toString != Object.prototype.toString)
        properties.push("toString");
      if (source.valueOf != Object.prototype.valueOf)
        properties.push("valueOf");
    }

    for (var i = 0, length = properties.length; i < length; i++) {
      var property = properties[i], value = source[property];
      if (ancestor && Object.isFunction(value) &&
          value.argumentNames().first() == "$super") {
        var method = value;
        value = (function(m) {
          return function() { return ancestor[m].apply(this, arguments); };
        })(property).wrap(method);

        value.valueOf = method.valueOf.bind(method);
        value.toString = method.toString.bind(method);
      }
      this.prototype[property] = value;
    }

    return this;
  }

  return {
    create: create,
    Methods: {
      addMethods: addMethods
    }
  };
})();
(function() {

  var _toString = Object.prototype.toString;

  function extend(destination, source) {
    for (var property in source)
      destination[property] = source[property];
    return destination;
  }

  function inspect(object) {
    try {
      if (isUndefined(object)) return 'undefined';
      if (object === null) return 'null';
      return object.inspect ? object.inspect() : String(object);
    } catch (e) {
      if (e instanceof RangeError) return '...';
      throw e;
    }
  }

  function toJSON(object) {
    var type = typeof object;
    switch (type) {
      case 'undefined':
      case 'function':
      case 'unknown': return;
      case 'boolean': return object.toString();
    }

    if (object === null) return 'null';
    if (object.toJSON) return object.toJSON();
    if (isElement(object)) return;

    var results = [];
    for (var property in object) {
      var value = toJSON(object[property]);
      if (!isUndefined(value))
        results.push(property.toJSON() + ': ' + value);
    }

    return '{' + results.join(', ') + '}';
  }

  function toQueryString(object) {
    return $H(object).toQueryString();
  }

  function toHTML(object) {
    return object && object.toHTML ? object.toHTML() : String.interpret(object);
  }

  function keys(object) {
    var results = [];
    for (var property in object)
      results.push(property);
    return results;
  }

  function values(object) {
    var results = [];
    for (var property in object)
      results.push(object[property]);
    return results;
  }

  function clone(object) {
    return extend({ }, object);
  }

  function isElement(object) {
    return !!(object && object.nodeType == 1);
  }

  function isArray(object) {
    return _toString.call(object) == "[object Array]";
  }


  function isHash(object) {
    return object instanceof Hash;
  }

  function isFunction(object) {
    return typeof object === "function";
  }

  function isString(object) {
    return _toString.call(object) == "[object String]";
  }

  function isNumber(object) {
    return _toString.call(object) == "[object Number]";
  }

  function isUndefined(object) {
    return typeof object === "undefined";
  }

  extend(Object, {
    extend:        extend,
    inspect:       inspect,
    toJSON:        toJSON,
    toQueryString: toQueryString,
    toHTML:        toHTML,
    keys:          keys,
    values:        values,
    clone:         clone,
    isElement:     isElement,
    isArray:       isArray,
    isHash:        isHash,
    isFunction:    isFunction,
    isString:      isString,
    isNumber:      isNumber,
    isUndefined:   isUndefined
  });
})();
Object.extend(Function.prototype, (function() {
  var slice = Array.prototype.slice;

  function update(array, args) {
    var arrayLength = array.length, length = args.length;
    while (length--) array[arrayLength + length] = args[length];
    return array;
  }

  function merge(array, args) {
    array = slice.call(array, 0);
    return update(array, args);
  }

  function argumentNames() {
    var names = this.toString().match(/^[\s\(]*function[^(]*\(([^)]*)\)/)[1]
      .replace(/\/\/.*?[\r\n]|\/\*(?:.|[\r\n])*?\*\//g, '')
      .replace(/\s+/g, '').split(',');
    return names.length == 1 && !names[0] ? [] : names;
  }

  function bind(context) {
    if (arguments.length < 2 && Object.isUndefined(arguments[0])) return this;
    var __method = this, args = slice.call(arguments, 1);
    return function() {
      var a = merge(args, arguments);
      return __method.apply(context, a);
    }
  }

  function bindAsEventListener(context) {
    var __method = this, args = slice.call(arguments, 1);
    return function(event) {
      var a = update([event || window.event], args);
      return __method.apply(context, a);
    }
  }

  function curry() {
    if (!arguments.length) return this;
    var __method = this, args = slice.call(arguments, 0);
    return function() {
      var a = merge(args, arguments);
      return __method.apply(this, a);
    }
  }

  function delay(timeout) {
    var __method = this, args = slice.call(arguments, 1);
    timeout = timeout * 1000
    return window.setTimeout(function() {
      return __method.apply(__method, args);
    }, timeout);
  }

  function defer() {
    var args = update([0.01], arguments);
    return this.delay.apply(this, args);
  }

  function wrap(wrapper) {
    var __method = this;
    return function() {
      var a = update([__method.bind(this)], arguments);
      return wrapper.apply(this, a);
    }
  }

  function methodize() {
    if (this._methodized) return this._methodized;
    var __method = this;
    return this._methodized = function() {
      var a = update([this], arguments);
      return __method.apply(null, a);
    };
  }

  return {
    argumentNames:       argumentNames,
    bind:                bind,
    bindAsEventListener: bindAsEventListener,
    curry:               curry,
    delay:               delay,
    defer:               defer,
    wrap:                wrap,
    methodize:           methodize
  }
})());


Date.prototype.toJSON = function() {
  return '"' + this.getUTCFullYear() + '-' +
    (this.getUTCMonth() + 1).toPaddedString(2) + '-' +
    this.getUTCDate().toPaddedString(2) + 'T' +
    this.getUTCHours().toPaddedString(2) + ':' +
    this.getUTCMinutes().toPaddedString(2) + ':' +
    this.getUTCSeconds().toPaddedString(2) + 'Z"';
};


RegExp.prototype.match = RegExp.prototype.test;

RegExp.escape = function(str) {
  return String(str).replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1');
};
var PeriodicalExecuter = Class.create({
  initialize: function(callback, frequency) {
    this.callback = callback;
    this.frequency = frequency;
    this.currentlyExecuting = false;

    this.registerCallback();
  },

  registerCallback: function() {
    this.timer = setInterval(this.onTimerEvent.bind(this), this.frequency * 1000);
  },

  execute: function() {
    this.callback(this);
  },

  stop: function() {
    if (!this.timer) return;
    clearInterval(this.timer);
    this.timer = null;
  },

  onTimerEvent: function() {
    if (!this.currentlyExecuting) {
      try {
        this.currentlyExecuting = true;
        this.execute();
        this.currentlyExecuting = false;
      } catch(e) {
        this.currentlyExecuting = false;
        throw e;
      }
    }
  }
});
Object.extend(String, {
  interpret: function(value) {
    return value == null ? '' : String(value);
  },
  specialChar: {
    '\b': '\\b',
    '\t': '\\t',
    '\n': '\\n',
    '\f': '\\f',
    '\r': '\\r',
    '\\': '\\\\'
  }
});

Object.extend(String.prototype, (function() {

  function prepareReplacement(replacement) {
    if (Object.isFunction(replacement)) return replacement;
    var template = new Template(replacement);
    return function(match) { return template.evaluate(match) };
  }

  function gsub(pattern, replacement) {
    var result = '', source = this, match;
    replacement = prepareReplacement(replacement);

    if (Object.isString(pattern))
      pattern = RegExp.escape(pattern);

    if (!(pattern.length || pattern.source)) {
      replacement = replacement('');
      return replacement + source.split('').join(replacement) + replacement;
    }

    while (source.length > 0) {
      if (match = source.match(pattern)) {
        result += source.slice(0, match.index);
        result += String.interpret(replacement(match));
        source  = source.slice(match.index + match[0].length);
      } else {
        result += source, source = '';
      }
    }
    return result;
  }

  function sub(pattern, replacement, count) {
    replacement = prepareReplacement(replacement);
    count = Object.isUndefined(count) ? 1 : count;

    return this.gsub(pattern, function(match) {
      if (--count < 0) return match[0];
      return replacement(match);
    });
  }

  function scan(pattern, iterator) {
    this.gsub(pattern, iterator);
    return String(this);
  }

  function truncate(length, truncation) {
    length = length || 30;
    truncation = Object.isUndefined(truncation) ? '...' : truncation;
    return this.length > length ?
      this.slice(0, length - truncation.length) + truncation : String(this);
  }

  function strip() {
    return this.replace(/^\s+/, '').replace(/\s+$/, '');
  }

  function stripTags() {
    return this.replace(/<\w+(\s+("[^"]*"|'[^']*'|[^>])+)?>|<\/\w+>/gi, '');
  }

  function stripScripts() {
    return this.replace(new RegExp(Prototype.ScriptFragment, 'img'), '');
  }

  function extractScripts() {
    var matchAll = new RegExp(Prototype.ScriptFragment, 'img');
    var matchOne = new RegExp(Prototype.ScriptFragment, 'im');
    return (this.match(matchAll) || []).map(function(scriptTag) {
      return (scriptTag.match(matchOne) || ['', ''])[1];
    });
  }

  function evalScripts() {
    return this.extractScripts().map(function(script) { return eval(script) });
  }

  function escapeHTML() {
    return this.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');
  }

  function unescapeHTML() {
    return this.stripTags().replace(/&lt;/g,'<').replace(/&gt;/g,'>').replace(/&amp;/g,'&');
  }


  function toQueryParams(separator) {
    var match = this.strip().match(/([^?#]*)(#.*)?$/);
    if (!match) return { };

    return match[1].split(separator || '&').inject({ }, function(hash, pair) {
      if ((pair = pair.split('='))[0]) {
        var key = decodeURIComponent(pair.shift());
        var value = pair.length > 1 ? pair.join('=') : pair[0];
        if (value != undefined) value = decodeURIComponent(value);

        if (key in hash) {
          if (!Object.isArray(hash[key])) hash[key] = [hash[key]];
          hash[key].push(value);
        }
        else hash[key] = value;
      }
      return hash;
    });
  }

  function toArray() {
    return this.split('');
  }

  function succ() {
    return this.slice(0, this.length - 1) +
      String.fromCharCode(this.charCodeAt(this.length - 1) + 1);
  }

  function times(count) {
    return count < 1 ? '' : new Array(count + 1).join(this);
  }

  function camelize() {
    var parts = this.split('-'), len = parts.length;
    if (len == 1) return parts[0];

    var camelized = this.charAt(0) == '-'
      ? parts[0].charAt(0).toUpperCase() + parts[0].substring(1)
      : parts[0];

    for (var i = 1; i < len; i++)
      camelized += parts[i].charAt(0).toUpperCase() + parts[i].substring(1);

    return camelized;
  }

  function capitalize() {
    return this.charAt(0).toUpperCase() + this.substring(1).toLowerCase();
  }

  function underscore() {
    return this.replace(/::/g, '/')
               .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2')
               .replace(/([a-z\d])([A-Z])/g, '$1_$2')
               .replace(/-/g, '_')
               .toLowerCase();
  }

  function dasherize() {
    return this.replace(/_/g, '-');
  }

  function inspect(useDoubleQuotes) {
    var escapedString = this.replace(/[\x00-\x1f\\]/g, function(character) {
      if (character in String.specialChar) {
        return String.specialChar[character];
      }
      return '\\u00' + character.charCodeAt().toPaddedString(2, 16);
    });
    if (useDoubleQuotes) return '"' + escapedString.replace(/"/g, '\\"') + '"';
    return "'" + escapedString.replace(/'/g, '\\\'') + "'";
  }

  function toJSON() {
    return this.inspect(true);
  }

  function unfilterJSON(filter) {
    return this.replace(filter || Prototype.JSONFilter, '$1');
  }

  function isJSON() {
    var str = this;
    if (str.blank()) return false;
    str = this.replace(/\\./g, '@').replace(/"[^"\\\n\r]*"/g, '');
    return (/^[,:{}\[\]0-9.\-+Eaeflnr-u \n\r\t]*$/).test(str);
  }

  function evalJSON(sanitize) {
    var json = this.unfilterJSON();
    try {
      if (!sanitize || json.isJSON()) return eval('(' + json + ')');
    } catch (e) { }
    throw new SyntaxError('Badly formed JSON string: ' + this.inspect());
  }

  function include(pattern) {
    return this.indexOf(pattern) > -1;
  }

  function startsWith(pattern) {
    return this.indexOf(pattern) === 0;
  }

  function endsWith(pattern) {
    var d = this.length - pattern.length;
    return d >= 0 && this.lastIndexOf(pattern) === d;
  }

  function empty() {
    return this == '';
  }

  function blank() {
    return /^\s*$/.test(this);
  }

  function interpolate(object, pattern) {
    return new Template(this, pattern).evaluate(object);
  }

  return {
    gsub:           gsub,
    sub:            sub,
    scan:           scan,
    truncate:       truncate,
    strip:          String.prototype.trim ? String.prototype.trim : strip,
    stripTags:      stripTags,
    stripScripts:   stripScripts,
    extractScripts: extractScripts,
    evalScripts:    evalScripts,
    escapeHTML:     escapeHTML,
    unescapeHTML:   unescapeHTML,
    toQueryParams:  toQueryParams,
    parseQuery:     toQueryParams,
    toArray:        toArray,
    succ:           succ,
    times:          times,
    camelize:       camelize,
    capitalize:     capitalize,
    underscore:     underscore,
    dasherize:      dasherize,
    inspect:        inspect,
    toJSON:         toJSON,
    unfilterJSON:   unfilterJSON,
    isJSON:         isJSON,
    evalJSON:       evalJSON,
    include:        include,
    startsWith:     startsWith,
    endsWith:       endsWith,
    empty:          empty,
    blank:          blank,
    interpolate:    interpolate
  };
})());

var Template = Class.create({
  initialize: function(template, pattern) {
    this.template = template.toString();
    this.pattern = pattern || Template.Pattern;
  },

  evaluate: function(object) {
    if (object && Object.isFunction(object.toTemplateReplacements))
      object = object.toTemplateReplacements();

    return this.template.gsub(this.pattern, function(match) {
      if (object == null) return (match[1] + '');

      var before = match[1] || '';
      if (before == '\\') return match[2];

      var ctx = object, expr = match[3];
      var pattern = /^([^.[]+|\[((?:.*?[^\\])?)\])(\.|\[|$)/;
      match = pattern.exec(expr);
      if (match == null) return before;

      while (match != null) {
        var comp = match[1].startsWith('[') ? match[2].replace(/\\\\]/g, ']') : match[1];
        ctx = ctx[comp];
        if (null == ctx || '' == match[3]) break;
        expr = expr.substring('[' == match[3] ? match[1].length : match[0].length);
        match = pattern.exec(expr);
      }

      return before + String.interpret(ctx);
    });
  }
});
Template.Pattern = /(^|.|\r|\n)(#\{(.*?)\})/;

var $break = { };

var Enumerable = (function() {
  function each(iterator, context) {
    var index = 0;
    try {
      this._each(function(value) {
        iterator.call(context, value, index++);
      });
    } catch (e) {
      if (e != $break) throw e;
    }
    return this;
  }

  function eachSlice(number, iterator, context) {
    var index = -number, slices = [], array = this.toArray();
    if (number < 1) return array;
    while ((index += number) < array.length)
      slices.push(array.slice(index, index+number));
    return slices.collect(iterator, context);
  }

  function all(iterator, context) {
    iterator = iterator || Prototype.K;
    var result = true;
    this.each(function(value, index) {
      result = result && !!iterator.call(context, value, index);
      if (!result) throw $break;
    });
    return result;
  }

  function any(iterator, context) {
    iterator = iterator || Prototype.K;
    var result = false;
    this.each(function(value, index) {
      if (result = !!iterator.call(context, value, index))
        throw $break;
    });
    return result;
  }

  function collect(iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];
    this.each(function(value, index) {
      results.push(iterator.call(context, value, index));
    });
    return results;
  }

  function detect(iterator, context) {
    var result;
    this.each(function(value, index) {
      if (iterator.call(context, value, index)) {
        result = value;
        throw $break;
      }
    });
    return result;
  }

  function findAll(iterator, context) {
    var results = [];
    this.each(function(value, index) {
      if (iterator.call(context, value, index))
        results.push(value);
    });
    return results;
  }

  function grep(filter, iterator, context) {
    iterator = iterator || Prototype.K;
    var results = [];

    if (Object.isString(filter))
      filter = new RegExp(RegExp.escape(filter));

    this.each(function(value, index) {
      if (filter.match(value))
        results.push(iterator.call(context, value, index));
    });
    return results;
  }

  function include(object) {
    if (Object.isFunction(this.indexOf))
      if (this.indexOf(object) != -1) return true;

    var found = false;
    this.each(function(value) {
      if (value == object) {
        found = true;
        throw $break;
      }
    });
    return found;
  }

  function inGroupsOf(number, fillWith) {
    fillWith = Object.isUndefined(fillWith) ? null : fillWith;
    return this.eachSlice(number, function(slice) {
      while(slice.length < number) slice.push(fillWith);
      return slice;
    });
  }

  function inject(memo, iterator, context) {
    this.each(function(value, index) {
      memo = iterator.call(context, memo, value, index);
    });
    return memo;
  }

  function invoke(method) {
    var args = $A(arguments).slice(1);
    return this.map(function(value) {
      return value[method].apply(value, args);
    });
  }

  function max(iterator, context) {
    iterator = iterator || Prototype.K;
    var result;
    this.each(function(value, index) {
      value = iterator.call(context, value, index);
      if (result == null || value >= result)
        result = value;
    });
    return result;
  }

  function min(iterator, context) {
    iterator = iterator || Prototype.K;
    var result;
    this.each(function(value, index) {
      value = iterator.call(context, value, index);
      if (result == null || value < result)
        result = value;
    });
    return result;
  }

  function partition(iterator, context) {
    iterator = iterator || Prototype.K;
    var trues = [], falses = [];
    this.each(function(value, index) {
      (iterator.call(context, value, index) ?
        trues : falses).push(value);
    });
    return [trues, falses];
  }

  function pluck(property) {
    var results = [];
    this.each(function(value) {
      results.push(value[property]);
    });
    return results;
  }

  function reject(iterator, context) {
    var results = [];
    this.each(function(value, index) {
      if (!iterator.call(context, value, index))
        results.push(value);
    });
    return results;
  }

  function sortBy(iterator, context) {
    return this.map(function(value, index) {
      return {
        value: value,
        criteria: iterator.call(context, value, index)
      };
    }).sort(function(left, right) {
      var a = left.criteria, b = right.criteria;
      return a < b ? -1 : a > b ? 1 : 0;
    }).pluck('value');
  }

  function toArray() {
    return this.map();
  }

  function zip() {
    var iterator = Prototype.K, args = $A(arguments);
    if (Object.isFunction(args.last()))
      iterator = args.pop();

    var collections = [this].concat(args).map($A);
    return this.map(function(value, index) {
      return iterator(collections.pluck(index));
    });
  }

  function size() {
    return this.toArray().length;
  }

  function inspect() {
    return '#<Enumerable:' + this.toArray().inspect() + '>';
  }









  return {
    each:       each,
    eachSlice:  eachSlice,
    all:        all,
    every:      all,
    any:        any,
    some:       any,
    collect:    collect,
    map:        collect,
    detect:     detect,
    findAll:    findAll,
    select:     findAll,
    filter:     findAll,
    grep:       grep,
    include:    include,
    member:     include,
    inGroupsOf: inGroupsOf,
    inject:     inject,
    invoke:     invoke,
    max:        max,
    min:        min,
    partition:  partition,
    pluck:      pluck,
    reject:     reject,
    sortBy:     sortBy,
    toArray:    toArray,
    entries:    toArray,
    zip:        zip,
    size:       size,
    inspect:    inspect,
    find:       detect
  };
})();
function $A(iterable) {
  if (!iterable) return [];
  if ('toArray' in Object(iterable)) return iterable.toArray();
  var length = iterable.length || 0, results = new Array(length);
  while (length--) results[length] = iterable[length];
  return results;
}

function $w(string) {
  if (!Object.isString(string)) return [];
  string = string.strip();
  return string ? string.split(/\s+/) : [];
}

Array.from = $A;


(function() {
  var arrayProto = Array.prototype,
      slice = arrayProto.slice,
      _each = arrayProto.forEach; // use native browser JS 1.6 implementation if available

  function each(iterator) {
    for (var i = 0, length = this.length; i < length; i++)
      iterator(this[i]);
  }
  if (!_each) _each = each;

  function clear() {
    this.length = 0;
    return this;
  }

  function first() {
    return this[0];
  }

  function last() {
    return this[this.length - 1];
  }

  function compact() {
    return this.select(function(value) {
      return value != null;
    });
  }

  function flatten() {
    return this.inject([], function(array, value) {
      if (Object.isArray(value))
        return array.concat(value.flatten());
      array.push(value);
      return array;
    });
  }

  function without() {
    var values = slice.call(arguments, 0);
    return this.select(function(value) {
      return !values.include(value);
    });
  }

  function reverse(inline) {
    return (inline !== false ? this : this.toArray())._reverse();
  }

  function uniq(sorted) {
    return this.inject([], function(array, value, index) {
      if (0 == index || (sorted ? array.last() != value : !array.include(value)))
        array.push(value);
      return array;
    });
  }

  function intersect(array) {
    return this.uniq().findAll(function(item) {
      return array.detect(function(value) { return item === value });
    });
  }


  function clone() {
    return slice.call(this, 0);
  }

  function size() {
    return this.length;
  }

  function inspect() {
    return '[' + this.map(Object.inspect).join(', ') + ']';
  }

  function toJSON() {
    var results = [];
    this.each(function(object) {
      var value = Object.toJSON(object);
      if (!Object.isUndefined(value)) results.push(value);
    });
    return '[' + results.join(', ') + ']';
  }

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

  function lastIndexOf(item, i) {
    i = isNaN(i) ? this.length : (i < 0 ? this.length + i : i) + 1;
    var n = this.slice(0, i).reverse().indexOf(item);
    return (n < 0) ? n : i - n - 1;
  }

  function concat() {
    var array = slice.call(this, 0), item;
    for (var i = 0, length = arguments.length; i < length; i++) {
      item = arguments[i];
      if (Object.isArray(item) && !('callee' in item)) {
        for (var j = 0, arrayLength = item.length; j < arrayLength; j++)
          array.push(item[j]);
      } else {
        array.push(item);
      }
    }
    return array;
  }

  Object.extend(arrayProto, Enumerable);

  if (!arrayProto._reverse)
    arrayProto._reverse = arrayProto.reverse;

  Object.extend(arrayProto, {
    _each:     _each,
    clear:     clear,
    first:     first,
    last:      last,
    compact:   compact,
    flatten:   flatten,
    without:   without,
    reverse:   reverse,
    uniq:      uniq,
    intersect: intersect,
    clone:     clone,
    toArray:   clone,
    size:      size,
    inspect:   inspect,
    toJSON:    toJSON
  });

  var CONCAT_ARGUMENTS_BUGGY = (function() {
    return [].concat(arguments)[0][0] !== 1;
  })(1,2)

  if (CONCAT_ARGUMENTS_BUGGY) arrayProto.concat = concat;

  if (!arrayProto.indexOf) arrayProto.indexOf = indexOf;
  if (!arrayProto.lastIndexOf) arrayProto.lastIndexOf = lastIndexOf;
})();
function $H(object) {
  return new Hash(object);
};

var Hash = Class.create(Enumerable, (function() {
  function initialize(object) {
    this._object = Object.isHash(object) ? object.toObject() : Object.clone(object);
  }

  function _each(iterator) {
    for (var key in this._object) {
      var value = this._object[key], pair = [key, value];
      pair.key = key;
      pair.value = value;
      iterator(pair);
    }
  }

  function set(key, value) {
    return this._object[key] = value;
  }

  function get(key) {
    if (this._object[key] !== Object.prototype[key])
      return this._object[key];
  }

  function unset(key) {
    var value = this._object[key];
    delete this._object[key];
    return value;
  }

  function toObject() {
    return Object.clone(this._object);
  }

  function keys() {
    return this.pluck('key');
  }

  function values() {
    return this.pluck('value');
  }

  function index(value) {
    var match = this.detect(function(pair) {
      return pair.value === value;
    });
    return match && match.key;
  }

  function merge(object) {
    return this.clone().update(object);
  }

  function update(object) {
    return new Hash(object).inject(this, function(result, pair) {
      result.set(pair.key, pair.value);
      return result;
    });
  }

  function toQueryPair(key, value) {
    if (Object.isUndefined(value)) return key;
    return key + '=' + encodeURIComponent(String.interpret(value));
  }

  function toQueryString() {
    return this.inject([], function(results, pair) {
      var key = encodeURIComponent(pair.key), values = pair.value;

      if (values && typeof values == 'object') {
        if (Object.isArray(values))
          return results.concat(values.map(toQueryPair.curry(key)));
      } else results.push(toQueryPair(key, values));
      return results;
    }).join('&');
  }

  function inspect() {
    return '#<Hash:{' + this.map(function(pair) {
      return pair.map(Object.inspect).join(': ');
    }).join(', ') + '}>';
  }

  function toJSON() {
    return Object.toJSON(this.toObject());
  }

  function clone() {
    return new Hash(this);
  }

  return {
    initialize:             initialize,
    _each:                  _each,
    set:                    set,
    get:                    get,
    unset:                  unset,
    toObject:               toObject,
    toTemplateReplacements: toObject,
    keys:                   keys,
    values:                 values,
    index:                  index,
    merge:                  merge,
    update:                 update,
    toQueryString:          toQueryString,
    inspect:                inspect,
    toJSON:                 toJSON,
    clone:                  clone
  };
})());

Hash.from = $H;
Object.extend(Number.prototype, (function() {
  function toColorPart() {
    return this.toPaddedString(2, 16);
  }

  function succ() {
    return this + 1;
  }

  function times(iterator, context) {
    $R(0, this, true).each(iterator, context);
    return this;
  }

  function toPaddedString(length, radix) {
    var string = this.toString(radix || 10);
    return '0'.times(length - string.length) + string;
  }

  function toJSON() {
    return isFinite(this) ? this.toString() : 'null';
  }

  function abs() {
    return Math.abs(this);
  }

  function round() {
    return Math.round(this);
  }

  function ceil() {
    return Math.ceil(this);
  }

  function floor() {
    return Math.floor(this);
  }

  return {
    toColorPart:    toColorPart,
    succ:           succ,
    times:          times,
    toPaddedString: toPaddedString,
    toJSON:         toJSON,
    abs:            abs,
    round:          round,
    ceil:           ceil,
    floor:          floor
  };
})());

function $R(start, end, exclusive) {
  return new ObjectRange(start, end, exclusive);
}

var ObjectRange = Class.create(Enumerable, (function() {
  function initialize(start, end, exclusive) {
    this.start = start;
    this.end = end;
    this.exclusive = exclusive;
  }

  function _each(iterator) {
    var value = this.start;
    while (this.include(value)) {
      iterator(value);
      value = value.succ();
    }
  }

  function include(value) {
    if (value < this.start)
      return false;
    if (this.exclusive)
      return value < this.end;
    return value <= this.end;
  }

  return {
    initialize: initialize,
    _each:      _each,
    include:    include
  };
})());



var Ajax = {
  getTransport: function() {
    return Try.these(
      function() {return new XMLHttpRequest()},
      function() {return new ActiveXObject('Msxml2.XMLHTTP')},
      function() {return new ActiveXObject('Microsoft.XMLHTTP')}
    ) || false;
  },

  activeRequestCount: 0
};

Ajax.Responders = {
  responders: [],

  _each: function(iterator) {
    this.responders._each(iterator);
  },

  register: function(responder) {
    if (!this.include(responder))
      this.responders.push(responder);
  },

  unregister: function(responder) {
    this.responders = this.responders.without(responder);
  },

  dispatch: function(callback, request, transport, json) {
    this.each(function(responder) {
      if (Object.isFunction(responder[callback])) {
        try {
          responder[callback].apply(responder, [request, transport, json]);
        } catch (e) { }
      }
    });
  }
};

Object.extend(Ajax.Responders, Enumerable);

Ajax.Responders.register({
  onCreate:   function() { Ajax.activeRequestCount++ },
  onComplete: function() { Ajax.activeRequestCount-- }
});
Ajax.Base = Class.create({
  initialize: function(options) {
    this.options = {
      method:       'post',
      asynchronous: true,
      contentType:  'application/x-www-form-urlencoded',
      encoding:     'UTF-8',
      parameters:   '',
      evalJSON:     true,
      evalJS:       true
    };
    Object.extend(this.options, options || { });

    this.options.method = this.options.method.toLowerCase();

    if (Object.isString(this.options.parameters))
      this.options.parameters = this.options.parameters.toQueryParams();
    else if (Object.isHash(this.options.parameters))
      this.options.parameters = this.options.parameters.toObject();
  }
});
Ajax.Request = Class.create(Ajax.Base, {
  _complete: false,

  initialize: function($super, url, options) {
    $super(options);
    this.transport = Ajax.getTransport();
    this.request(url);
  },

  request: function(url) {
    this.url = url;
    this.method = this.options.method;
    var params = Object.clone(this.options.parameters);

    if (!['get', 'post'].include(this.method)) {
      params['_method'] = this.method;
      this.method = 'post';
    }

    this.parameters = params;

    if (params = Object.toQueryString(params)) {
      if (this.method == 'get')
        this.url += (this.url.include('?') ? '&' : '?') + params;
      else if (/Konqueror|Safari|KHTML/.test(navigator.userAgent))
        params += '&_=';
    }

    try {
      var response = new Ajax.Response(this);
      if (this.options.onCreate) this.options.onCreate(response);
      Ajax.Responders.dispatch('onCreate', this, response);

      this.transport.open(this.method.toUpperCase(), this.url,
        this.options.asynchronous);

      if (this.options.asynchronous) this.respondToReadyState.bind(this).defer(1);

      this.transport.onreadystatechange = this.onStateChange.bind(this);
      this.setRequestHeaders();

      this.body = this.method == 'post' ? (this.options.postBody || params) : null;
      this.transport.send(this.body);

      /* Force Firefox to handle ready state 4 for synchronous requests */
      if (!this.options.asynchronous && this.transport.overrideMimeType)
        this.onStateChange();

    }
    catch (e) {
      this.dispatchException(e);
    }
  },

  onStateChange: function() {
    var readyState = this.transport.readyState;
    if (readyState > 1 && !((readyState == 4) && this._complete))
      this.respondToReadyState(this.transport.readyState);
  },

  setRequestHeaders: function() {
    var headers = {
      'X-Requested-With': 'XMLHttpRequest',
      'X-Prototype-Version': Prototype.Version,
      'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
    };

    if (this.method == 'post') {
      headers['Content-type'] = this.options.contentType +
        (this.options.encoding ? '; charset=' + this.options.encoding : '');

      /* Force "Connection: close" for older Mozilla browsers to work
       * around a bug where XMLHttpRequest sends an incorrect
       * Content-length header. See Mozilla Bugzilla #246651.
       */
      if (this.transport.overrideMimeType &&
          (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
            headers['Connection'] = 'close';
    }

    if (typeof this.options.requestHeaders == 'object') {
      var extras = this.options.requestHeaders;

      if (Object.isFunction(extras.push))
        for (var i = 0, length = extras.length; i < length; i += 2)
          headers[extras[i]] = extras[i+1];
      else
        $H(extras).each(function(pair) { headers[pair.key] = pair.value });
    }

    for (var name in headers)
      this.transport.setRequestHeader(name, headers[name]);
  },

  success: function() {
    var status = this.getStatus();
    return !status || (status >= 200 && status < 300);
  },

  getStatus: function() {
    try {
      return this.transport.status || 0;
    } catch (e) { return 0 }
  },

  respondToReadyState: function(readyState) {
    var state = Ajax.Request.Events[readyState], response = new Ajax.Response(this);

    if (state == 'Complete') {
      try {
        this._complete = true;
        (this.options['on' + response.status]
         || this.options['on' + (this.success() ? 'Success' : 'Failure')]
         || Prototype.emptyFunction)(response, response.headerJSON);
      } catch (e) {
        this.dispatchException(e);
      }

      var contentType = response.getHeader('Content-type');
      if (this.options.evalJS == 'force'
          || (this.options.evalJS && this.isSameOrigin() && contentType
          && contentType.match(/^\s*(text|application)\/(x-)?(java|ecma)script(;.*)?\s*$/i)))
        this.evalResponse();
    }

    try {
      (this.options['on' + state] || Prototype.emptyFunction)(response, response.headerJSON);
      Ajax.Responders.dispatch('on' + state, this, response, response.headerJSON);
    } catch (e) {
      this.dispatchException(e);
    }

    if (state == 'Complete') {
      this.transport.onreadystatechange = Prototype.emptyFunction;
    }
  },

  isSameOrigin: function() {
    var m = this.url.match(/^\s*https?:\/\/[^\/]*/);
    return !m || (m[0] == '#{protocol}//#{domain}#{port}'.interpolate({
      protocol: location.protocol,
      domain: document.domain,
      port: location.port ? ':' + location.port : ''
    }));
  },

  getHeader: function(name) {
    try {
      return this.transport.getResponseHeader(name) || null;
    } catch (e) { return null; }
  },

  evalResponse: function() {
    try {
      return eval((this.transport.responseText || '').unfilterJSON());
    } catch (e) {
      this.dispatchException(e);
    }
  },

  dispatchException: function(exception) {
    (this.options.onException || Prototype.emptyFunction)(this, exception);
    Ajax.Responders.dispatch('onException', this, exception);
  }
});

Ajax.Request.Events =
  ['Uninitialized', 'Loading', 'Loaded', 'Interactive', 'Complete'];








Ajax.Response = Class.create({
  initialize: function(request){
    this.request = request;
    var transport  = this.transport  = request.transport,
        readyState = this.readyState = transport.readyState;

    if((readyState > 2 && !Prototype.Browser.IE) || readyState == 4) {
      this.status       = this.getStatus();
      this.statusText   = this.getStatusText();
      this.responseText = String.interpret(transport.responseText);
      this.headerJSON   = this._getHeaderJSON();
    }

    if(readyState == 4) {
      var xml = transport.responseXML;
      this.responseXML  = Object.isUndefined(xml) ? null : xml;
      this.responseJSON = this._getResponseJSON();
    }
  },

  status:      0,

  statusText: '',

  getStatus: Ajax.Request.prototype.getStatus,

  getStatusText: function() {
    try {
      return this.transport.statusText || '';
    } catch (e) { return '' }
  },

  getHeader: Ajax.Request.prototype.getHeader,

  getAllHeaders: function() {
    try {
      return this.getAllResponseHeaders();
    } catch (e) { return null }
  },

  getResponseHeader: function(name) {
    return this.transport.getResponseHeader(name);
  },

  getAllResponseHeaders: function() {
    return this.transport.getAllResponseHeaders();
  },

  _getHeaderJSON: function() {
    var json = this.getHeader('X-JSON');
    if (!json) return null;
    json = decodeURIComponent(escape(json));
    try {
      return json.evalJSON(this.request.options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  },

  _getResponseJSON: function() {
    var options = this.request.options;
    if (!options.evalJSON || (options.evalJSON != 'force' &&
      !(this.getHeader('Content-type') || '').include('application/json')) ||
        this.responseText.blank())
          return null;
    try {
      return this.responseText.evalJSON(options.sanitizeJSON ||
        !this.request.isSameOrigin());
    } catch (e) {
      this.request.dispatchException(e);
    }
  }
});

Ajax.Updater = Class.create(Ajax.Request, {
  initialize: function($super, container, url, options) {
    this.container = {
      success: (container.success || container),
      failure: (container.failure || (container.success ? null : container))
    };

    options = Object.clone(options);
    var onComplete = options.onComplete;
    options.onComplete = (function(response, json) {
      this.updateContent(response.responseText);
      if (Object.isFunction(onComplete)) onComplete(response, json);
    }).bind(this);

    $super(url, options);
  },

  updateContent: function(responseText) {
    var receiver = this.container[this.success() ? 'success' : 'failure'],
        options = this.options;

    if (!options.evalScripts) responseText = responseText.stripScripts();

    if (receiver = $(receiver)) {
      if (options.insertion) {
        if (Object.isString(options.insertion)) {
          var insertion = { }; insertion[options.insertion] = responseText;
          receiver.insert(insertion);
        }
        else options.insertion(receiver, responseText);
      }
      else receiver.update(responseText);
    }
  }
});

Ajax.PeriodicalUpdater = Class.create(Ajax.Base, {
  initialize: function($super, container, url, options) {
    $super(options);
    this.onComplete = this.options.onComplete;

    this.frequency = (this.options.frequency || 2);
    this.decay = (this.options.decay || 1);

    this.updater = { };
    this.container = container;
    this.url = url;

    this.start();
  },

  start: function() {
    this.options.onComplete = this.updateComplete.bind(this);
    this.onTimerEvent();
  },

  stop: function() {
    this.updater.options.onComplete = undefined;
    clearTimeout(this.timer);
    (this.onComplete || Prototype.emptyFunction).apply(this, arguments);
  },

  updateComplete: function(response) {
    if (this.options.decay) {
      this.decay = (response.responseText == this.lastText ?
        this.decay * this.options.decay : 1);

      this.lastText = response.responseText;
    }
    this.timer = this.onTimerEvent.bind(this).delay(this.decay * this.frequency);
  },

  onTimerEvent: function() {
    this.updater = new Ajax.Updater(this.container, this.url, this.options);
  }
});



function $(element) {
  if (arguments.length > 1) {
    for (var i = 0, elements = [], length = arguments.length; i < length; i++)
      elements.push($(arguments[i]));
    return elements;
  }
  if (Object.isString(element))
    element = document.getElementById(element);
  return Element.extend(element);
}

if (Prototype.BrowserFeatures.XPath) {
  document._getElementsByXPath = function(expression, parentElement) {
    var results = [];
    var query = document.evaluate(expression, $(parentElement) || document,
      null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
    for (var i = 0, length = query.snapshotLength; i < length; i++)
      results.push(Element.extend(query.snapshotItem(i)));
    return results;
  };
}

/*--------------------------------------------------------------------------*/

if (!window.Node) var Node = { };

if (!Node.ELEMENT_NODE) {
  Object.extend(Node, {
    ELEMENT_NODE: 1,
    ATTRIBUTE_NODE: 2,
    TEXT_NODE: 3,
    CDATA_SECTION_NODE: 4,
    ENTITY_REFERENCE_NODE: 5,
    ENTITY_NODE: 6,
    PROCESSING_INSTRUCTION_NODE: 7,
    COMMENT_NODE: 8,
    DOCUMENT_NODE: 9,
    DOCUMENT_TYPE_NODE: 10,
    DOCUMENT_FRAGMENT_NODE: 11,
    NOTATION_NODE: 12
  });
}


(function(global) {

  var SETATTRIBUTE_IGNORES_NAME = (function(){
    var elForm = document.createElement("form");
    var elInput = document.createElement("input");
    var root = document.documentElement;
    elInput.setAttribute("name", "test");
    elForm.appendChild(elInput);
    root.appendChild(elForm);
    var isBuggy = elForm.elements
      ? (typeof elForm.elements.test == "undefined")
      : null;
    root.removeChild(elForm);
    elForm = elInput = null;
    return isBuggy;
  })();

  var element = global.Element;
  global.Element = function(tagName, attributes) {
    attributes = attributes || { };
    tagName = tagName.toLowerCase();
    var cache = Element.cache;
    if (SETATTRIBUTE_IGNORES_NAME && attributes.name) {
      tagName = '<' + tagName + ' name="' + attributes.name + '">';
      delete attributes.name;
      return Element.writeAttribute(document.createElement(tagName), attributes);
    }
    if (!cache[tagName]) cache[tagName] = Element.extend(document.createElement(tagName));
    return Element.writeAttribute(cache[tagName].cloneNode(false), attributes);
  };
  Object.extend(global.Element, element || { });
  if (element) global.Element.prototype = element.prototype;
})(this);

Element.cache = { };
Element.idCounter = 1;

Element.Methods = {
  visible: function(element) {
    return $(element).style.display != 'none';
  },

  toggle: function(element) {
    element = $(element);
    Element[Element.visible(element) ? 'hide' : 'show'](element);
    return element;
  },


  hide: function(element) {
    element = $(element);
    element.style.display = 'none';
    return element;
  },

  show: function(element) {
    element = $(element);
    element.style.display = '';
    return element;
  },

  remove: function(element) {
    element = $(element);
    element.parentNode.removeChild(element);
    return element;
  },

  update: (function(){

    var SELECT_ELEMENT_INNERHTML_BUGGY = (function(){
      var el = document.createElement("select"),
          isBuggy = true;
      el.innerHTML = "<option value=\"test\">test</option>";
      if (el.options && el.options[0]) {
        isBuggy = el.options[0].nodeName.toUpperCase() !== "OPTION";
      }
      el = null;
      return isBuggy;
    })();

    var TABLE_ELEMENT_INNERHTML_BUGGY = (function(){
      try {
        var el = document.createElement("table");
        if (el && el.tBodies) {
          el.innerHTML = "<tbody><tr><td>test</td></tr></tbody>";
          var isBuggy = typeof el.tBodies[0] == "undefined";
          el = null;
          return isBuggy;
        }
      } catch (e) {
        return true;
      }
    })();

    var SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING = (function () {
      var s = document.createElement("script"),
          isBuggy = false;
      try {
        s.appendChild(document.createTextNode(""));
        isBuggy = !s.firstChild ||
          s.firstChild && s.firstChild.nodeType !== 3;
      } catch (e) {
        isBuggy = true;
      }
      s = null;
      return isBuggy;
    })();

    function update(element, content) {
      element = $(element);

      if (content && content.toElement)
        content = content.toElement();

      if (Object.isElement(content))
        return element.update().insert(content);

      content = Object.toHTML(content);

      var tagName = element.tagName.toUpperCase();

      if (tagName === 'SCRIPT' && SCRIPT_ELEMENT_REJECTS_TEXTNODE_APPENDING) {
        element.text = content;
        return element;
      }

      if (SELECT_ELEMENT_INNERHTML_BUGGY || TABLE_ELEMENT_INNERHTML_BUGGY) {
        if (tagName in Element._insertionTranslations.tags) {
          while (element.firstChild) {
            element.removeChild(element.firstChild);
          }
          Element._getContentFromAnonymousElement(tagName, content.stripScripts())
            .each(function(node) {
              element.appendChild(node)
            });
        }
        else {
          element.innerHTML = content.stripScripts();
        }
      }
      else {
        element.innerHTML = content.stripScripts();
      }

      content.evalScripts.bind(content).defer();
      return element;
    }

    return update;
  })(),

  replace: function(element, content) {
    element = $(element);
    if (content && content.toElement) content = content.toElement();
    else if (!Object.isElement(content)) {
      content = Object.toHTML(content);
      var range = element.ownerDocument.createRange();
      range.selectNode(element);
      content.evalScripts.bind(content).defer();
      content = range.createContextualFragment(content.stripScripts());
    }
    element.parentNode.replaceChild(content, element);
    return element;
  },

  insert: function(element, insertions) {
    element = $(element);

    if (Object.isString(insertions) || Object.isNumber(insertions) ||
        Object.isElement(insertions) || (insertions && (insertions.toElement || insertions.toHTML)))
          insertions = {bottom:insertions};

    var content, insert, tagName, childNodes;

    for (var position in insertions) {
      content  = insertions[position];
      position = position.toLowerCase();
      insert = Element._insertionTranslations[position];

      if (content && content.toElement) content = content.toElement();
      if (Object.isElement(content)) {
        insert(element, content);
        continue;
      }

      content = Object.toHTML(content);

      tagName = ((position == 'before' || position == 'after')
        ? element.parentNode : element).tagName.toUpperCase();

      childNodes = Element._getContentFromAnonymousElement(tagName, content.stripScripts());

      if (position == 'top' || position == 'after') childNodes.reverse();
      childNodes.each(insert.curry(element));

      content.evalScripts.bind(content).defer();
    }

    return element;
  },

  wrap: function(element, wrapper, attributes) {
    element = $(element);
    if (Object.isElement(wrapper))
      $(wrapper).writeAttribute(attributes || { });
    else if (Object.isString(wrapper)) wrapper = new Element(wrapper, attributes);
    else wrapper = new Element('div', wrapper);
    if (element.parentNode)
      element.parentNode.replaceChild(wrapper, element);
    wrapper.appendChild(element);
    return wrapper;
  },

  inspect: function(element) {
    element = $(element);
    var result = '<' + element.tagName.toLowerCase();
    $H({'id': 'id', 'className': 'class'}).each(function(pair) {
      var property = pair.first(), attribute = pair.last();
      var value = (element[property] || '').toString();
      if (value) result += ' ' + attribute + '=' + value.inspect(true);
    });
    return result + '>';
  },

  recursivelyCollect: function(element, property) {
    element = $(element);
    var elements = [];
    while (element = element[property])
      if (element.nodeType == 1)
        elements.push(Element.extend(element));
    return elements;
  },

  ancestors: function(element) {
    return Element.recursivelyCollect(element, 'parentNode');
  },

  descendants: function(element) {
    return Element.select(element, "*");
  },

  firstDescendant: function(element) {
    element = $(element).firstChild;
    while (element && element.nodeType != 1) element = element.nextSibling;
    return $(element);
  },

  immediateDescendants: function(element) {
    if (!(element = $(element).firstChild)) return [];
    while (element && element.nodeType != 1) element = element.nextSibling;
    if (element) return [element].concat($(element).nextSiblings());
    return [];
  },

  previousSiblings: function(element) {
    return Element.recursivelyCollect(element, 'previousSibling');
  },

  nextSiblings: function(element) {
    return Element.recursivelyCollect(element, 'nextSibling');
  },

  siblings: function(element) {
    element = $(element);
    return Element.previousSiblings(element).reverse()
      .concat(Element.nextSiblings(element));
  },

  match: function(element, selector) {
    if (Object.isString(selector))
      selector = new Selector(selector);
    return selector.match($(element));
  },

  up: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(element.parentNode);
    var ancestors = Element.ancestors(element);
    return Object.isNumber(expression) ? ancestors[expression] :
      Selector.findElement(ancestors, expression, index);
  },

  down: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return Element.firstDescendant(element);
    return Object.isNumber(expression) ? Element.descendants(element)[expression] :
      Element.select(element, expression)[index || 0];
  },

  previous: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(Selector.handlers.previousElementSibling(element));
    var previousSiblings = Element.previousSiblings(element);
    return Object.isNumber(expression) ? previousSiblings[expression] :
      Selector.findElement(previousSiblings, expression, index);
  },

  next: function(element, expression, index) {
    element = $(element);
    if (arguments.length == 1) return $(Selector.handlers.nextElementSibling(element));
    var nextSiblings = Element.nextSiblings(element);
    return Object.isNumber(expression) ? nextSiblings[expression] :
      Selector.findElement(nextSiblings, expression, index);
  },


  select: function(element) {
    var args = Array.prototype.slice.call(arguments, 1);
    return Selector.findChildElements(element, args);
  },

  adjacent: function(element) {
    var args = Array.prototype.slice.call(arguments, 1);
    return Selector.findChildElements(element.parentNode, args).without(element);
  },

  identify: function(element) {
    element = $(element);
    var id = Element.readAttribute(element, 'id');
    if (id) return id;
    do { id = 'anonymous_element_' + Element.idCounter++ } while ($(id));
    Element.writeAttribute(element, 'id', id);
    return id;
  },

  readAttribute: function(element, name) {
    element = $(element);
    if (Prototype.Browser.IE) {
      var t = Element._attributeTranslations.read;
      if (t.values[name]) return t.values[name](element, name);
      if (t.names[name]) name = t.names[name];
      if (name.include(':')) {
        return (!element.attributes || !element.attributes[name]) ? null :
         element.attributes[name].value;
      }
    }
    return element.getAttribute(name);
  },

  writeAttribute: function(element, name, value) {
    element = $(element);
    var attributes = { }, t = Element._attributeTranslations.write;

    if (typeof name == 'object') attributes = name;
    else attributes[name] = Object.isUndefined(value) ? true : value;

    for (var attr in attributes) {
      name = t.names[attr] || attr;
      value = attributes[attr];
      if (t.values[attr]) name = t.values[attr](element, value);
      if (value === false || value === null)
        element.removeAttribute(name);
      else if (value === true)
        element.setAttribute(name, name);
      else element.setAttribute(name, value);
    }
    return element;
  },

  getHeight: function(element) {
    return Element.getDimensions(element).height;
  },

  getWidth: function(element) {
    return Element.getDimensions(element).width;
  },

  classNames: function(element) {
    return new Element.ClassNames(element);
  },

  hasClassName: function(element, className) {
    if (!(element = $(element))) return;
    var elementClassName = element.className;
    return (elementClassName.length > 0 && (elementClassName == className ||
      new RegExp("(^|\\s)" + className + "(\\s|$)").test(elementClassName)));
  },

  addClassName: function(element, className) {
    if (!(element = $(element))) return;
    if (!Element.hasClassName(element, className))
      element.className += (element.className ? ' ' : '') + className;
    return element;
  },

  removeClassName: function(element, className) {
    if (!(element = $(element))) return;
    element.className = element.className.replace(
      new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
    return element;
  },

  toggleClassName: function(element, className) {
    if (!(element = $(element))) return;
    return Element[Element.hasClassName(element, className) ?
      'removeClassName' : 'addClassName'](element, className);
  },

  cleanWhitespace: function(element) {
    element = $(element);
    var node = element.firstChild;
    while (node) {
      var nextNode = node.nextSibling;
      if (node.nodeType == 3 && !/\S/.test(node.nodeValue))
        element.removeChild(node);
      node = nextNode;
    }
    return element;
  },

  empty: function(element) {
    return $(element).innerHTML.blank();
  },

  descendantOf: function(element, ancestor) {
    element = $(element), ancestor = $(ancestor);

    if (element.compareDocumentPosition)
      return (element.compareDocumentPosition(ancestor) & 8) === 8;

    if (ancestor.contains)
      return ancestor.contains(element) && ancestor !== element;

    while (element = element.parentNode)
      if (element == ancestor) return true;

    return false;
  },

  scrollTo: function(element) {
    element = $(element);
    var pos = Element.cumulativeOffset(element);
    window.scrollTo(pos[0], pos[1]);
    return element;
  },

  getStyle: function(element, style) {
    element = $(element);
    style = style == 'float' ? 'cssFloat' : style.camelize();
    var value = element.style[style];
    if (!value || value == 'auto') {
      var css = document.defaultView.getComputedStyle(element, null);
      value = css ? css[style] : null;
    }
    if (style == 'opacity') return value ? parseFloat(value) : 1.0;
    return value == 'auto' ? null : value;
  },

  getOpacity: function(element) {
    return $(element).getStyle('opacity');
  },

  setStyle: function(element, styles) {
    element = $(element);
    var elementStyle = element.style, match;
    if (Object.isString(styles)) {
      element.style.cssText += ';' + styles;
      return styles.include('opacity') ?
        element.setOpacity(styles.match(/opacity:\s*(\d?\.?\d*)/)[1]) : element;
    }
    for (var property in styles)
      if (property == 'opacity') element.setOpacity(styles[property]);
      else
        elementStyle[(property == 'float' || property == 'cssFloat') ?
          (Object.isUndefined(elementStyle.styleFloat) ? 'cssFloat' : 'styleFloat') :
            property] = styles[property];

    return element;
  },

  setOpacity: function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;
    return element;
  },

  getDimensions: function(element) {
    element = $(element);
    var display = Element.getStyle(element, 'display');
    if (display != 'none' && display != null) // Safari bug
      return {width: element.offsetWidth, height: element.offsetHeight};

    var els = element.style;
    var originalVisibility = els.visibility;
    var originalPosition = els.position;
    var originalDisplay = els.display;
    els.visibility = 'hidden';
    if (originalPosition != 'fixed') // Switching fixed to absolute causes issues in Safari
      els.position = 'absolute';
    els.display = 'block';
    var originalWidth = element.clientWidth;
    var originalHeight = element.clientHeight;
    els.display = originalDisplay;
    els.position = originalPosition;
    els.visibility = originalVisibility;
    return {width: originalWidth, height: originalHeight};
  },

  makePositioned: function(element) {
    element = $(element);
    var pos = Element.getStyle(element, 'position');
    if (pos == 'static' || !pos) {
      element._madePositioned = true;
      element.style.position = 'relative';
      if (Prototype.Browser.Opera) {
        element.style.top = 0;
        element.style.left = 0;
      }
    }
    return element;
  },

  undoPositioned: function(element) {
    element = $(element);
    if (element._madePositioned) {
      element._madePositioned = undefined;
      element.style.position =
        element.style.top =
        element.style.left =
        element.style.bottom =
        element.style.right = '';
    }
    return element;
  },

  makeClipping: function(element) {
    element = $(element);
    if (element._overflow) return element;
    element._overflow = Element.getStyle(element, 'overflow') || 'auto';
    if (element._overflow !== 'hidden')
      element.style.overflow = 'hidden';
    return element;
  },

  undoClipping: function(element) {
    element = $(element);
    if (!element._overflow) return element;
    element.style.overflow = element._overflow == 'auto' ? '' : element._overflow;
    element._overflow = null;
    return element;
  },

  cumulativeOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  positionedOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      element = element.offsetParent;
      if (element) {
        if (element.tagName.toUpperCase() == 'BODY') break;
        var p = Element.getStyle(element, 'position');
        if (p !== 'static') break;
      }
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  absolutize: function(element) {
    element = $(element);
    if (Element.getStyle(element, 'position') == 'absolute') return element;

    var offsets = Element.positionedOffset(element);
    var top     = offsets[1];
    var left    = offsets[0];
    var width   = element.clientWidth;
    var height  = element.clientHeight;

    element._originalLeft   = left - parseFloat(element.style.left  || 0);
    element._originalTop    = top  - parseFloat(element.style.top || 0);
    element._originalWidth  = element.style.width;
    element._originalHeight = element.style.height;

    element.style.position = 'absolute';
    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.width  = width + 'px';
    element.style.height = height + 'px';
    return element;
  },

  relativize: function(element) {
    element = $(element);
    if (Element.getStyle(element, 'position') == 'relative') return element;

    element.style.position = 'relative';
    var top  = parseFloat(element.style.top  || 0) - (element._originalTop || 0);
    var left = parseFloat(element.style.left || 0) - (element._originalLeft || 0);

    element.style.top    = top + 'px';
    element.style.left   = left + 'px';
    element.style.height = element._originalHeight;
    element.style.width  = element._originalWidth;
    return element;
  },

  cumulativeScrollOffset: function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.scrollTop  || 0;
      valueL += element.scrollLeft || 0;
      element = element.parentNode;
    } while (element);
    return Element._returnOffset(valueL, valueT);
  },

  getOffsetParent: function(element) {
    if (element.offsetParent) return $(element.offsetParent);
    if (element == document.body) return $(element);

    while ((element = element.parentNode) && element != document.body)
      if (Element.getStyle(element, 'position') != 'static')
        return $(element);

    return $(document.body);
  },

  viewportOffset: function(forElement) {
    var valueT = 0, valueL = 0;

    var element = forElement;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;

      if (element.offsetParent == document.body &&
        Element.getStyle(element, 'position') == 'absolute') break;

    } while (element = element.offsetParent);

    element = forElement;
    do {
      if (!Prototype.Browser.Opera || (element.tagName && (element.tagName.toUpperCase() == 'BODY'))) {
        valueT -= element.scrollTop  || 0;
        valueL -= element.scrollLeft || 0;
      }
    } while (element = element.parentNode);

    return Element._returnOffset(valueL, valueT);
  },

  clonePosition: function(element, source) {
    var options = Object.extend({
      setLeft:    true,
      setTop:     true,
      setWidth:   true,
      setHeight:  true,
      offsetTop:  0,
      offsetLeft: 0
    }, arguments[2] || { });

    source = $(source);
    var p = Element.viewportOffset(source);

    element = $(element);
    var delta = [0, 0];
    var parent = null;
    if (Element.getStyle(element, 'position') == 'absolute') {
      parent = Element.getOffsetParent(element);
      delta = Element.viewportOffset(parent);
    }

    if (parent == document.body) {
      delta[0] -= document.body.offsetLeft;
      delta[1] -= document.body.offsetTop;
    }

    if (options.setLeft)   element.style.left  = (p[0] - delta[0] + options.offsetLeft) + 'px';
    if (options.setTop)    element.style.top   = (p[1] - delta[1] + options.offsetTop) + 'px';
    if (options.setWidth)  element.style.width = source.offsetWidth + 'px';
    if (options.setHeight) element.style.height = source.offsetHeight + 'px';
    return element;
  }
};

Object.extend(Element.Methods, {
  getElementsBySelector: Element.Methods.select,

  childElements: Element.Methods.immediateDescendants
});

Element._attributeTranslations = {
  write: {
    names: {
      className: 'class',
      htmlFor:   'for'
    },
    values: { }
  }
};

if (Prototype.Browser.Opera) {
  Element.Methods.getStyle = Element.Methods.getStyle.wrap(
    function(proceed, element, style) {
      switch (style) {
        case 'left': case 'top': case 'right': case 'bottom':
          if (proceed(element, 'position') === 'static') return null;
        case 'height': case 'width':
          if (!Element.visible(element)) return null;

          var dim = parseInt(proceed(element, style), 10);

          if (dim !== element['offset' + style.capitalize()])
            return dim + 'px';

          var properties;
          if (style === 'height') {
            properties = ['border-top-width', 'padding-top',
             'padding-bottom', 'border-bottom-width'];
          }
          else {
            properties = ['border-left-width', 'padding-left',
             'padding-right', 'border-right-width'];
          }
          return properties.inject(dim, function(memo, property) {
            var val = proceed(element, property);
            return val === null ? memo : memo - parseInt(val, 10);
          }) + 'px';
        default: return proceed(element, style);
      }
    }
  );

  Element.Methods.readAttribute = Element.Methods.readAttribute.wrap(
    function(proceed, element, attribute) {
      if (attribute === 'title') return element.title;
      return proceed(element, attribute);
    }
  );
}

else if (Prototype.Browser.IE) {
  Element.Methods.getOffsetParent = Element.Methods.getOffsetParent.wrap(
    function(proceed, element) {
      element = $(element);
      try { element.offsetParent }
      catch(e) { return $(document.body) }
      var position = element.getStyle('position');
      if (position !== 'static') return proceed(element);
      element.setStyle({ position: 'relative' });
      var value = proceed(element);
      element.setStyle({ position: position });
      return value;
    }
  );

  $w('positionedOffset viewportOffset').each(function(method) {
    Element.Methods[method] = Element.Methods[method].wrap(
      function(proceed, element) {
        element = $(element);
        try { element.offsetParent }
        catch(e) { return Element._returnOffset(0,0) }
        var position = element.getStyle('position');
        if (position !== 'static') return proceed(element);
        var offsetParent = element.getOffsetParent();
        if (offsetParent && offsetParent.getStyle('position') === 'fixed')
          offsetParent.setStyle({ zoom: 1 });
        element.setStyle({ position: 'relative' });
        var value = proceed(element);
        element.setStyle({ position: position });
        return value;
      }
    );
  });

  Element.Methods.cumulativeOffset = Element.Methods.cumulativeOffset.wrap(
    function(proceed, element) {
      try { element.offsetParent }
      catch(e) { return Element._returnOffset(0,0) }
      return proceed(element);
    }
  );

  Element.Methods.getStyle = function(element, style) {
    element = $(element);
    style = (style == 'float' || style == 'cssFloat') ? 'styleFloat' : style.camelize();
    var value = element.style[style];
    if (!value && element.currentStyle) value = element.currentStyle[style];

    if (style == 'opacity') {
      if (value = (element.getStyle('filter') || '').match(/alpha\(opacity=(.*)\)/))
        if (value[1]) return parseFloat(value[1]) / 100;
      return 1.0;
    }

    if (value == 'auto') {
      if ((style == 'width' || style == 'height') && (element.getStyle('display') != 'none'))
        return element['offset' + style.capitalize()] + 'px';
      return null;
    }
    return value;
  };

  Element.Methods.setOpacity = function(element, value) {
    function stripAlpha(filter){
      return filter.replace(/alpha\([^\)]*\)/gi,'');
    }
    element = $(element);
    var currentStyle = element.currentStyle;
    if ((currentStyle && !currentStyle.hasLayout) ||
      (!currentStyle && element.style.zoom == 'normal'))
        element.style.zoom = 1;

    var filter = element.getStyle('filter'), style = element.style;
    if (value == 1 || value === '') {
      (filter = stripAlpha(filter)) ?
        style.filter = filter : style.removeAttribute('filter');
      return element;
    } else if (value < 0.00001) value = 0;
    style.filter = stripAlpha(filter) +
      'alpha(opacity=' + (value * 100) + ')';
    return element;
  };

  Element._attributeTranslations = (function(){

    var classProp = 'className';
    var forProp = 'for';

    var el = document.createElement('div');

    el.setAttribute(classProp, 'x');

    if (el.className !== 'x') {
      el.setAttribute('class', 'x');
      if (el.className === 'x') {
        classProp = 'class';
      }
    }
    el = null;

    el = document.createElement('label');
    el.setAttribute(forProp, 'x');
    if (el.htmlFor !== 'x') {
      el.setAttribute('htmlFor', 'x');
      if (el.htmlFor === 'x') {
        forProp = 'htmlFor';
      }
    }
    el = null;

    return {
      read: {
        names: {
          'class':      classProp,
          'className':  classProp,
          'for':        forProp,
          'htmlFor':    forProp
        },
        values: {
          _getAttr: function(element, attribute) {
            return element.getAttribute(attribute);
          },
          _getAttr2: function(element, attribute) {
            return element.getAttribute(attribute, 2);
          },
          _getAttrNode: function(element, attribute) {
            var node = element.getAttributeNode(attribute);
            return node ? node.value : "";
          },
          _getEv: (function(){

            var el = document.createElement('div');
            el.onclick = Prototype.emptyFunction;
            var value = el.getAttribute('onclick');
            var f;

            if (String(value).indexOf('{') > -1) {
              f = function(element, attribute) {
                attribute = element.getAttribute(attribute);
                if (!attribute) return null;
                attribute = attribute.toString();
                attribute = attribute.split('{')[1];
                attribute = attribute.split('}')[0];
                return attribute.strip();
              };
            }
            else if (value === '') {
              f = function(element, attribute) {
                attribute = element.getAttribute(attribute);
                if (!attribute) return null;
                return attribute.strip();
              };
            }
            el = null;
            return f;
          })(),
          _flag: function(element, attribute) {
            return $(element).hasAttribute(attribute) ? attribute : null;
          },
          style: function(element) {
            return element.style.cssText.toLowerCase();
          },
          title: function(element) {
            return element.title;
          }
        }
      }
    }
  })();

  Element._attributeTranslations.write = {
    names: Object.extend({
      cellpadding: 'cellPadding',
      cellspacing: 'cellSpacing'
    }, Element._attributeTranslations.read.names),
    values: {
      checked: function(element, value) {
        element.checked = !!value;
      },

      style: function(element, value) {
        element.style.cssText = value ? value : '';
      }
    }
  };

  Element._attributeTranslations.has = {};

  $w('colSpan rowSpan vAlign dateTime accessKey tabIndex ' +
      'encType maxLength readOnly longDesc frameBorder').each(function(attr) {
    Element._attributeTranslations.write.names[attr.toLowerCase()] = attr;
    Element._attributeTranslations.has[attr.toLowerCase()] = attr;
  });

  (function(v) {
    Object.extend(v, {
      href:        v._getAttr2,
      src:         v._getAttr2,
      type:        v._getAttr,
      action:      v._getAttrNode,
      disabled:    v._flag,
      checked:     v._flag,
      readonly:    v._flag,
      multiple:    v._flag,
      onload:      v._getEv,
      onunload:    v._getEv,
      onclick:     v._getEv,
      ondblclick:  v._getEv,
      onmousedown: v._getEv,
      onmouseup:   v._getEv,
      onmouseover: v._getEv,
      onmousemove: v._getEv,
      onmouseout:  v._getEv,
      onfocus:     v._getEv,
      onblur:      v._getEv,
      onkeypress:  v._getEv,
      onkeydown:   v._getEv,
      onkeyup:     v._getEv,
      onsubmit:    v._getEv,
      onreset:     v._getEv,
      onselect:    v._getEv,
      onchange:    v._getEv
    });
  })(Element._attributeTranslations.read.values);

  if (Prototype.BrowserFeatures.ElementExtensions) {
    (function() {
      function _descendants(element) {
        var nodes = element.getElementsByTagName('*'), results = [];
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.tagName !== "!") // Filter out comment nodes.
            results.push(node);
        return results;
      }

      Element.Methods.down = function(element, expression, index) {
        element = $(element);
        if (arguments.length == 1) return element.firstDescendant();
        return Object.isNumber(expression) ? _descendants(element)[expression] :
          Element.select(element, expression)[index || 0];
      }
    })();
  }

}

else if (Prototype.Browser.Gecko && /rv:1\.8\.0/.test(navigator.userAgent)) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1) ? 0.999999 :
      (value === '') ? '' : (value < 0.00001) ? 0 : value;
    return element;
  };
}

else if (Prototype.Browser.WebKit) {
  Element.Methods.setOpacity = function(element, value) {
    element = $(element);
    element.style.opacity = (value == 1 || value === '') ? '' :
      (value < 0.00001) ? 0 : value;

    if (value == 1)
      if(element.tagName.toUpperCase() == 'IMG' && element.width) {
        element.width++; element.width--;
      } else try {
        var n = document.createTextNode(' ');
        element.appendChild(n);
        element.removeChild(n);
      } catch (e) { }

    return element;
  };

  Element.Methods.cumulativeOffset = function(element) {
    var valueT = 0, valueL = 0;
    do {
      valueT += element.offsetTop  || 0;
      valueL += element.offsetLeft || 0;
      if (element.offsetParent == document.body)
        if (Element.getStyle(element, 'position') == 'absolute') break;

      element = element.offsetParent;
    } while (element);

    return Element._returnOffset(valueL, valueT);
  };
}

if ('outerHTML' in document.documentElement) {
  Element.Methods.replace = function(element, content) {
    element = $(element);

    if (content && content.toElement) content = content.toElement();
    if (Object.isElement(content)) {
      element.parentNode.replaceChild(content, element);
      return element;
    }

    content = Object.toHTML(content);
    var parent = element.parentNode, tagName = parent.tagName.toUpperCase();

    if (Element._insertionTranslations.tags[tagName]) {
      var nextSibling = element.next();
      var fragments = Element._getContentFromAnonymousElement(tagName, content.stripScripts());
      parent.removeChild(element);
      if (nextSibling)
        fragments.each(function(node) { parent.insertBefore(node, nextSibling) });
      else
        fragments.each(function(node) { parent.appendChild(node) });
    }
    else element.outerHTML = content.stripScripts();

    content.evalScripts.bind(content).defer();
    return element;
  };
}

Element._returnOffset = function(l, t) {
  var result = [l, t];
  result.left = l;
  result.top = t;
  return result;
};

Element._getContentFromAnonymousElement = function(tagName, html) {
  var div = new Element('div'), t = Element._insertionTranslations.tags[tagName];
  if (t) {
    div.innerHTML = t[0] + html + t[1];
    t[2].times(function() { div = div.firstChild });
  } else div.innerHTML = html;
  return $A(div.childNodes);
};

Element._insertionTranslations = {
  before: function(element, node) {
    element.parentNode.insertBefore(node, element);
  },
  top: function(element, node) {
    element.insertBefore(node, element.firstChild);
  },
  bottom: function(element, node) {
    element.appendChild(node);
  },
  after: function(element, node) {
    element.parentNode.insertBefore(node, element.nextSibling);
  },
  tags: {
    TABLE:  ['<table>',                '</table>',                   1],
    TBODY:  ['<table><tbody>',         '</tbody></table>',           2],
    TR:     ['<table><tbody><tr>',     '</tr></tbody></table>',      3],
    TD:     ['<table><tbody><tr><td>', '</td></tr></tbody></table>', 4],
    SELECT: ['<select>',               '</select>',                  1]
  }
};

(function() {
  var tags = Element._insertionTranslations.tags;
  Object.extend(tags, {
    THEAD: tags.TBODY,
    TFOOT: tags.TBODY,
    TH:    tags.TD
  });
})();

Element.Methods.Simulated = {
  hasAttribute: function(element, attribute) {
    attribute = Element._attributeTranslations.has[attribute] || attribute;
    var node = $(element).getAttributeNode(attribute);
    return !!(node && node.specified);
  }
};

Element.Methods.ByTag = { };

Object.extend(Element, Element.Methods);

(function(div) {

  if (!Prototype.BrowserFeatures.ElementExtensions && div['__proto__']) {
    window.HTMLElement = { };
    window.HTMLElement.prototype = div['__proto__'];
    Prototype.BrowserFeatures.ElementExtensions = true;
  }

  div = null;

})(document.createElement('div'))

Element.extend = (function() {

  function checkDeficiency(tagName) {
    if (typeof window.Element != 'undefined') {
      var proto = window.Element.prototype;
      if (proto) {
        var id = '_' + (Math.random()+'').slice(2);
        var el = document.createElement(tagName);
        proto[id] = 'x';
        var isBuggy = (el[id] !== 'x');
        delete proto[id];
        el = null;
        return isBuggy;
      }
    }
    return false;
  }

  function extendElementWith(element, methods) {
    for (var property in methods) {
      var value = methods[property];
      if (Object.isFunction(value) && !(property in element))
        element[property] = value.methodize();
    }
  }

  var HTMLOBJECTELEMENT_PROTOTYPE_BUGGY = checkDeficiency('object');

  if (Prototype.BrowserFeatures.SpecificElementExtensions) {
    if (HTMLOBJECTELEMENT_PROTOTYPE_BUGGY) {
      return function(element) {
        if (element && typeof element._extendedByPrototype == 'undefined') {
          var t = element.tagName;
          if (t && (/^(?:object|applet|embed)$/i.test(t))) {
            extendElementWith(element, Element.Methods);
            extendElementWith(element, Element.Methods.Simulated);
            extendElementWith(element, Element.Methods.ByTag[t.toUpperCase()]);
          }
        }
        return element;
      }
    }
    return Prototype.K;
  }

  var Methods = { }, ByTag = Element.Methods.ByTag;

  var extend = Object.extend(function(element) {
    if (!element || typeof element._extendedByPrototype != 'undefined' ||
        element.nodeType != 1 || element == window) return element;

    var methods = Object.clone(Methods),
        tagName = element.tagName.toUpperCase();

    if (ByTag[tagName]) Object.extend(methods, ByTag[tagName]);

    extendElementWith(element, methods);

    element._extendedByPrototype = Prototype.emptyFunction;
    return element;

  }, {
    refresh: function() {
      if (!Prototype.BrowserFeatures.ElementExtensions) {
        Object.extend(Methods, Element.Methods);
        Object.extend(Methods, Element.Methods.Simulated);
      }
    }
  });

  extend.refresh();
  return extend;
})();

Element.hasAttribute = function(element, attribute) {
  if (element.hasAttribute) return element.hasAttribute(attribute);
  return Element.Methods.Simulated.hasAttribute(element, attribute);
};

Element.addMethods = function(methods) {
  var F = Prototype.BrowserFeatures, T = Element.Methods.ByTag;

  if (!methods) {
    Object.extend(Form, Form.Methods);
    Object.extend(Form.Element, Form.Element.Methods);
    Object.extend(Element.Methods.ByTag, {
      "FORM":     Object.clone(Form.Methods),
      "INPUT":    Object.clone(Form.Element.Methods),
      "SELECT":   Object.clone(Form.Element.Methods),
      "TEXTAREA": Object.clone(Form.Element.Methods)
    });
  }

  if (arguments.length == 2) {
    var tagName = methods;
    methods = arguments[1];
  }

  if (!tagName) Object.extend(Element.Methods, methods || { });
  else {
    if (Object.isArray(tagName)) tagName.each(extend);
    else extend(tagName);
  }

  function extend(tagName) {
    tagName = tagName.toUpperCase();
    if (!Element.Methods.ByTag[tagName])
      Element.Methods.ByTag[tagName] = { };
    Object.extend(Element.Methods.ByTag[tagName], methods);
  }

  function copy(methods, destination, onlyIfAbsent) {
    onlyIfAbsent = onlyIfAbsent || false;
    for (var property in methods) {
      var value = methods[property];
      if (!Object.isFunction(value)) continue;
      if (!onlyIfAbsent || !(property in destination))
        destination[property] = value.methodize();
    }
  }

  function findDOMClass(tagName) {
    var klass;
    var trans = {
      "OPTGROUP": "OptGroup", "TEXTAREA": "TextArea", "P": "Paragraph",
      "FIELDSET": "FieldSet", "UL": "UList", "OL": "OList", "DL": "DList",
      "DIR": "Directory", "H1": "Heading", "H2": "Heading", "H3": "Heading",
      "H4": "Heading", "H5": "Heading", "H6": "Heading", "Q": "Quote",
      "INS": "Mod", "DEL": "Mod", "A": "Anchor", "IMG": "Image", "CAPTION":
      "TableCaption", "COL": "TableCol", "COLGROUP": "TableCol", "THEAD":
      "TableSection", "TFOOT": "TableSection", "TBODY": "TableSection", "TR":
      "TableRow", "TH": "TableCell", "TD": "TableCell", "FRAMESET":
      "FrameSet", "IFRAME": "IFrame"
    };
    if (trans[tagName]) klass = 'HTML' + trans[tagName] + 'Element';
    if (window[klass]) return window[klass];
    klass = 'HTML' + tagName + 'Element';
    if (window[klass]) return window[klass];
    klass = 'HTML' + tagName.capitalize() + 'Element';
    if (window[klass]) return window[klass];

    var element = document.createElement(tagName);
    var proto = element['__proto__'] || element.constructor.prototype;
    element = null;
    return proto;
  }

  var elementPrototype = window.HTMLElement ? HTMLElement.prototype :
   Element.prototype;

  if (F.ElementExtensions) {
    copy(Element.Methods, elementPrototype);
    copy(Element.Methods.Simulated, elementPrototype, true);
  }

  if (F.SpecificElementExtensions) {
    for (var tag in Element.Methods.ByTag) {
      var klass = findDOMClass(tag);
      if (Object.isUndefined(klass)) continue;
      copy(T[tag], klass.prototype);
    }
  }

  Object.extend(Element, Element.Methods);
  delete Element.ByTag;

  if (Element.extend.refresh) Element.extend.refresh();
  Element.cache = { };
};


document.viewport = {

  getDimensions: function() {
    return { width: this.getWidth(), height: this.getHeight() };
  },

  getScrollOffsets: function() {
    return Element._returnOffset(
      window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft,
      window.pageYOffset || document.documentElement.scrollTop  || document.body.scrollTop);
  }
};

(function(viewport) {
  var B = Prototype.Browser, doc = document, element, property = {};

  function getRootElement() {
    if (B.WebKit && !doc.evaluate)
      return document;

    if (B.Opera && window.parseFloat(window.opera.version()) < 9.5)
      return document.body;

    return document.documentElement;
  }

  function define(D) {
    if (!element) element = getRootElement();

    property[D] = 'client' + D;

    viewport['get' + D] = function() { return element[property[D]] };
    return viewport['get' + D]();
  }

  viewport.getWidth  = define.curry('Width');

  viewport.getHeight = define.curry('Height');
})(document.viewport);


Element.Storage = {
  UID: 1
};

Element.addMethods({
  getStorage: function(element) {
    if (!(element = $(element))) return;

    var uid;
    if (element === window) {
      uid = 0;
    } else {
      if (typeof element._prototypeUID === "undefined")
        element._prototypeUID = [Element.Storage.UID++];
      uid = element._prototypeUID[0];
    }

    if (!Element.Storage[uid])
      Element.Storage[uid] = $H();

    return Element.Storage[uid];
  },

  store: function(element, key, value) {
    if (!(element = $(element))) return;

    if (arguments.length === 2) {
      Element.getStorage(element).update(key);
    } else {
      Element.getStorage(element).set(key, value);
    }

    return element;
  },

  retrieve: function(element, key, defaultValue) {
    if (!(element = $(element))) return;
    var hash = Element.getStorage(element), value = hash.get(key);

    if (Object.isUndefined(value)) {
      hash.set(key, defaultValue);
      value = defaultValue;
    }

    return value;
  },

  clone: function(element, deep) {
    if (!(element = $(element))) return;
    var clone = element.cloneNode(deep);
    clone._prototypeUID = void 0;
    if (deep) {
      var descendants = Element.select(clone, '*'),
          i = descendants.length;
      while (i--) {
        descendants[i]._prototypeUID = void 0;
      }
    }
    return Element.extend(clone);
  }
});
/* Portions of the Selector class are derived from Jack Slocum's DomQuery,
 * part of YUI-Ext version 0.40, distributed under the terms of an MIT-style
 * license.  Please see http://www.yui-ext.com/ for more information. */

var Selector = Class.create({
  initialize: function(expression) {
    this.expression = expression.strip();

    if (this.shouldUseSelectorsAPI()) {
      this.mode = 'selectorsAPI';
    } else if (this.shouldUseXPath()) {
      this.mode = 'xpath';
      this.compileXPathMatcher();
    } else {
      this.mode = "normal";
      this.compileMatcher();
    }

  },

  shouldUseXPath: (function() {

    var IS_DESCENDANT_SELECTOR_BUGGY = (function(){
      var isBuggy = false;
      if (document.evaluate && window.XPathResult) {
        var el = document.createElement('div');
        el.innerHTML = '<ul><li></li></ul><div><ul><li></li></ul></div>';

        var xpath = ".//*[local-name()='ul' or local-name()='UL']" +
          "//*[local-name()='li' or local-name()='LI']";

        var result = document.evaluate(xpath, el, null,
          XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);

        isBuggy = (result.snapshotLength !== 2);
        el = null;
      }
      return isBuggy;
    })();

    return function() {
      if (!Prototype.BrowserFeatures.XPath) return false;

      var e = this.expression;

      if (Prototype.Browser.WebKit &&
       (e.include("-of-type") || e.include(":empty")))
        return false;

      if ((/(\[[\w-]*?:|:checked)/).test(e))
        return false;

      if (IS_DESCENDANT_SELECTOR_BUGGY) return false;

      return true;
    }

  })(),

  shouldUseSelectorsAPI: function() {
    if (!Prototype.BrowserFeatures.SelectorsAPI) return false;

    if (Selector.CASE_INSENSITIVE_CLASS_NAMES) return false;

    if (!Selector._div) Selector._div = new Element('div');

    try {
      Selector._div.querySelector(this.expression);
    } catch(e) {
      return false;
    }

    return true;
  },

  compileMatcher: function() {
    var e = this.expression, ps = Selector.patterns, h = Selector.handlers,
        c = Selector.criteria, le, p, m, len = ps.length, name;

    if (Selector._cache[e]) {
      this.matcher = Selector._cache[e];
      return;
    }

    this.matcher = ["this.matcher = function(root) {",
                    "var r = root, h = Selector.handlers, c = false, n;"];

    while (e && le != e && (/\S/).test(e)) {
      le = e;
      for (var i = 0; i<len; i++) {
        p = ps[i].re;
        name = ps[i].name;
        if (m = e.match(p)) {
          this.matcher.push(Object.isFunction(c[name]) ? c[name](m) :
            new Template(c[name]).evaluate(m));
          e = e.replace(m[0], '');
          break;
        }
      }
    }

    this.matcher.push("return h.unique(n);\n}");
    eval(this.matcher.join('\n'));
    Selector._cache[this.expression] = this.matcher;
  },

  compileXPathMatcher: function() {
    var e = this.expression, ps = Selector.patterns,
        x = Selector.xpath, le, m, len = ps.length, name;

    if (Selector._cache[e]) {
      this.xpath = Selector._cache[e]; return;
    }

    this.matcher = ['.//*'];
    while (e && le != e && (/\S/).test(e)) {
      le = e;
      for (var i = 0; i<len; i++) {
        name = ps[i].name;
        if (m = e.match(ps[i].re)) {
          this.matcher.push(Object.isFunction(x[name]) ? x[name](m) :
            new Template(x[name]).evaluate(m));
          e = e.replace(m[0], '');
          break;
        }
      }
    }

    this.xpath = this.matcher.join('');
    Selector._cache[this.expression] = this.xpath;
  },

  findElements: function(root) {
    root = root || document;
    var e = this.expression, results;

    switch (this.mode) {
      case 'selectorsAPI':
        if (root !== document) {
          var oldId = root.id, id = $(root).identify();
          id = id.replace(/([\.:])/g, "\\$1");
          e = "#" + id + " " + e;
        }

        results = $A(root.querySelectorAll(e)).map(Element.extend);
        root.id = oldId;

        return results;
      case 'xpath':
        return document._getElementsByXPath(this.xpath, root);
      default:
       return this.matcher(root);
    }
  },

  match: function(element) {
    this.tokens = [];

    var e = this.expression, ps = Selector.patterns, as = Selector.assertions;
    var le, p, m, len = ps.length, name;

    while (e && le !== e && (/\S/).test(e)) {
      le = e;
      for (var i = 0; i<len; i++) {
        p = ps[i].re;
        name = ps[i].name;
        if (m = e.match(p)) {
          if (as[name]) {
            this.tokens.push([name, Object.clone(m)]);
            e = e.replace(m[0], '');
          } else {
            return this.findElements(document).include(element);
          }
        }
      }
    }

    var match = true, name, matches;
    for (var i = 0, token; token = this.tokens[i]; i++) {
      name = token[0], matches = token[1];
      if (!Selector.assertions[name](element, matches)) {
        match = false; break;
      }
    }

    return match;
  },

  toString: function() {
    return this.expression;
  },

  inspect: function() {
    return "#<Selector:" + this.expression.inspect() + ">";
  }
});

if (Prototype.BrowserFeatures.SelectorsAPI &&
 document.compatMode === 'BackCompat') {
  Selector.CASE_INSENSITIVE_CLASS_NAMES = (function(){
    var div = document.createElement('div'),
     span = document.createElement('span');

    div.id = "prototype_test_id";
    span.className = 'Test';
    div.appendChild(span);
    var isIgnored = (div.querySelector('#prototype_test_id .test') !== null);
    div = span = null;
    return isIgnored;
  })();
}

Object.extend(Selector, {
  _cache: { },

  xpath: {
    descendant:   "//*",
    child:        "/*",
    adjacent:     "/following-sibling::*[1]",
    laterSibling: '/following-sibling::*',
    tagName:      function(m) {
      if (m[1] == '*') return '';
      return "[local-name()='" + m[1].toLowerCase() +
             "' or local-name()='" + m[1].toUpperCase() + "']";
    },
    className:    "[contains(concat(' ', @class, ' '), ' #{1} ')]",
    id:           "[@id='#{1}']",
    attrPresence: function(m) {
      m[1] = m[1].toLowerCase();
      return new Template("[@#{1}]").evaluate(m);
    },
    attr: function(m) {
      m[1] = m[1].toLowerCase();
      m[3] = m[5] || m[6];
      return new Template(Selector.xpath.operators[m[2]]).evaluate(m);
    },
    pseudo: function(m) {
      var h = Selector.xpath.pseudos[m[1]];
      if (!h) return '';
      if (Object.isFunction(h)) return h(m);
      return new Template(Selector.xpath.pseudos[m[1]]).evaluate(m);
    },
    operators: {
      '=':  "[@#{1}='#{3}']",
      '!=': "[@#{1}!='#{3}']",
      '^=': "[starts-with(@#{1}, '#{3}')]",
      '$=': "[substring(@#{1}, (string-length(@#{1}) - string-length('#{3}') + 1))='#{3}']",
      '*=': "[contains(@#{1}, '#{3}')]",
      '~=': "[contains(concat(' ', @#{1}, ' '), ' #{3} ')]",
      '|=': "[contains(concat('-', @#{1}, '-'), '-#{3}-')]"
    },
    pseudos: {
      'first-child': '[not(preceding-sibling::*)]',
      'last-child':  '[not(following-sibling::*)]',
      'only-child':  '[not(preceding-sibling::* or following-sibling::*)]',
      'empty':       "[count(*) = 0 and (count(text()) = 0)]",
      'checked':     "[@checked]",
      'disabled':    "[(@disabled) and (@type!='hidden')]",
      'enabled':     "[not(@disabled) and (@type!='hidden')]",
      'not': function(m) {
        var e = m[6], p = Selector.patterns,
            x = Selector.xpath, le, v, len = p.length, name;

        var exclusion = [];
        while (e && le != e && (/\S/).test(e)) {
          le = e;
          for (var i = 0; i<len; i++) {
            name = p[i].name
            if (m = e.match(p[i].re)) {
              v = Object.isFunction(x[name]) ? x[name](m) : new Template(x[name]).evaluate(m);
              exclusion.push("(" + v.substring(1, v.length - 1) + ")");
              e = e.replace(m[0], '');
              break;
            }
          }
        }
        return "[not(" + exclusion.join(" and ") + ")]";
      },
      'nth-child':      function(m) {
        return Selector.xpath.pseudos.nth("(count(./preceding-sibling::*) + 1) ", m);
      },
      'nth-last-child': function(m) {
        return Selector.xpath.pseudos.nth("(count(./following-sibling::*) + 1) ", m);
      },
      'nth-of-type':    function(m) {
        return Selector.xpath.pseudos.nth("position() ", m);
      },
      'nth-last-of-type': function(m) {
        return Selector.xpath.pseudos.nth("(last() + 1 - position()) ", m);
      },
      'first-of-type':  function(m) {
        m[6] = "1"; return Selector.xpath.pseudos['nth-of-type'](m);
      },
      'last-of-type':   function(m) {
        m[6] = "1"; return Selector.xpath.pseudos['nth-last-of-type'](m);
      },
      'only-of-type':   function(m) {
        var p = Selector.xpath.pseudos; return p['first-of-type'](m) + p['last-of-type'](m);
      },
      nth: function(fragment, m) {
        var mm, formula = m[6], predicate;
        if (formula == 'even') formula = '2n+0';
        if (formula == 'odd')  formula = '2n+1';
        if (mm = formula.match(/^(\d+)$/)) // digit only
          return '[' + fragment + "= " + mm[1] + ']';
        if (mm = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
          if (mm[1] == "-") mm[1] = -1;
          var a = mm[1] ? Number(mm[1]) : 1;
          var b = mm[2] ? Number(mm[2]) : 0;
          predicate = "[((#{fragment} - #{b}) mod #{a} = 0) and " +
          "((#{fragment} - #{b}) div #{a} >= 0)]";
          return new Template(predicate).evaluate({
            fragment: fragment, a: a, b: b });
        }
      }
    }
  },

  criteria: {
    tagName:      'n = h.tagName(n, r, "#{1}", c);      c = false;',
    className:    'n = h.className(n, r, "#{1}", c);    c = false;',
    id:           'n = h.id(n, r, "#{1}", c);           c = false;',
    attrPresence: 'n = h.attrPresence(n, r, "#{1}", c); c = false;',
    attr: function(m) {
      m[3] = (m[5] || m[6]);
      return new Template('n = h.attr(n, r, "#{1}", "#{3}", "#{2}", c); c = false;').evaluate(m);
    },
    pseudo: function(m) {
      if (m[6]) m[6] = m[6].replace(/"/g, '\\"');
      return new Template('n = h.pseudo(n, "#{1}", "#{6}", r, c); c = false;').evaluate(m);
    },
    descendant:   'c = "descendant";',
    child:        'c = "child";',
    adjacent:     'c = "adjacent";',
    laterSibling: 'c = "laterSibling";'
  },

  patterns: [
    { name: 'laterSibling', re: /^\s*~\s*/ },
    { name: 'child',        re: /^\s*>\s*/ },
    { name: 'adjacent',     re: /^\s*\+\s*/ },
    { name: 'descendant',   re: /^\s/ },

    { name: 'tagName',      re: /^\s*(\*|[\w\-]+)(\b|$)?/ },
    { name: 'id',           re: /^#([\w\-\*]+)(\b|$)/ },
    { name: 'className',    re: /^\.([\w\-\*]+)(\b|$)/ },
    { name: 'pseudo',       re: /^:((first|last|nth|nth-last|only)(-child|-of-type)|empty|checked|(en|dis)abled|not)(\((.*?)\))?(\b|$|(?=\s|[:+~>]))/ },
    { name: 'attrPresence', re: /^\[((?:[\w-]+:)?[\w-]+)\]/ },
    { name: 'attr',         re: /\[((?:[\w-]*:)?[\w-]+)\s*(?:([!^$*~|]?=)\s*((['"])([^\4]*?)\4|([^'"][^\]]*?)))?\]/ }
  ],

  assertions: {
    tagName: function(element, matches) {
      return matches[1].toUpperCase() == element.tagName.toUpperCase();
    },

    className: function(element, matches) {
      return Element.hasClassName(element, matches[1]);
    },

    id: function(element, matches) {
      return element.id === matches[1];
    },

    attrPresence: function(element, matches) {
      return Element.hasAttribute(element, matches[1]);
    },

    attr: function(element, matches) {
      var nodeValue = Element.readAttribute(element, matches[1]);
      return nodeValue && Selector.operators[matches[2]](nodeValue, matches[5] || matches[6]);
    }
  },

  handlers: {
    concat: function(a, b) {
      for (var i = 0, node; node = b[i]; i++)
        a.push(node);
      return a;
    },

    mark: function(nodes) {
      var _true = Prototype.emptyFunction;
      for (var i = 0, node; node = nodes[i]; i++)
        node._countedByPrototype = _true;
      return nodes;
    },

    unmark: (function(){

      var PROPERTIES_ATTRIBUTES_MAP = (function(){
        var el = document.createElement('div'),
            isBuggy = false,
            propName = '_countedByPrototype',
            value = 'x'
        el[propName] = value;
        isBuggy = (el.getAttribute(propName) === value);
        el = null;
        return isBuggy;
      })();

      return PROPERTIES_ATTRIBUTES_MAP ?
        function(nodes) {
          for (var i = 0, node; node = nodes[i]; i++)
            node.removeAttribute('_countedByPrototype');
          return nodes;
        } :
        function(nodes) {
          for (var i = 0, node; node = nodes[i]; i++)
            node._countedByPrototype = void 0;
          return nodes;
        }
    })(),

    index: function(parentNode, reverse, ofType) {
      parentNode._countedByPrototype = Prototype.emptyFunction;
      if (reverse) {
        for (var nodes = parentNode.childNodes, i = nodes.length - 1, j = 1; i >= 0; i--) {
          var node = nodes[i];
          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
        }
      } else {
        for (var i = 0, j = 1, nodes = parentNode.childNodes; node = nodes[i]; i++)
          if (node.nodeType == 1 && (!ofType || node._countedByPrototype)) node.nodeIndex = j++;
      }
    },

    unique: function(nodes) {
      if (nodes.length == 0) return nodes;
      var results = [], n;
      for (var i = 0, l = nodes.length; i < l; i++)
        if (typeof (n = nodes[i])._countedByPrototype == 'undefined') {
          n._countedByPrototype = Prototype.emptyFunction;
          results.push(Element.extend(n));
        }
      return Selector.handlers.unmark(results);
    },

    descendant: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        h.concat(results, node.getElementsByTagName('*'));
      return results;
    },

    child: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        for (var j = 0, child; child = node.childNodes[j]; j++)
          if (child.nodeType == 1 && child.tagName != '!') results.push(child);
      }
      return results;
    },

    adjacent: function(nodes) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        var next = this.nextElementSibling(node);
        if (next) results.push(next);
      }
      return results;
    },

    laterSibling: function(nodes) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        h.concat(results, Element.nextSiblings(node));
      return results;
    },

    nextElementSibling: function(node) {
      while (node = node.nextSibling)
        if (node.nodeType == 1) return node;
      return null;
    },

    previousElementSibling: function(node) {
      while (node = node.previousSibling)
        if (node.nodeType == 1) return node;
      return null;
    },

    tagName: function(nodes, root, tagName, combinator) {
      var uTagName = tagName.toUpperCase();
      var results = [], h = Selector.handlers;
      if (nodes) {
        if (combinator) {
          if (combinator == "descendant") {
            for (var i = 0, node; node = nodes[i]; i++)
              h.concat(results, node.getElementsByTagName(tagName));
            return results;
          } else nodes = this[combinator](nodes);
          if (tagName == "*") return nodes;
        }
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.tagName.toUpperCase() === uTagName) results.push(node);
        return results;
      } else return root.getElementsByTagName(tagName);
    },

    id: function(nodes, root, id, combinator) {
      var targetNode = $(id), h = Selector.handlers;

      if (root == document) {
        if (!targetNode) return [];
        if (!nodes) return [targetNode];
      } else {
        if (!root.sourceIndex || root.sourceIndex < 1) {
          var nodes = root.getElementsByTagName('*');
          for (var j = 0, node; node = nodes[j]; j++) {
            if (node.id === id) return [node];
          }
        }
      }

      if (nodes) {
        if (combinator) {
          if (combinator == 'child') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (targetNode.parentNode == node) return [targetNode];
          } else if (combinator == 'descendant') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (Element.descendantOf(targetNode, node)) return [targetNode];
          } else if (combinator == 'adjacent') {
            for (var i = 0, node; node = nodes[i]; i++)
              if (Selector.handlers.previousElementSibling(targetNode) == node)
                return [targetNode];
          } else nodes = h[combinator](nodes);
        }
        for (var i = 0, node; node = nodes[i]; i++)
          if (node == targetNode) return [targetNode];
        return [];
      }
      return (targetNode && Element.descendantOf(targetNode, root)) ? [targetNode] : [];
    },

    className: function(nodes, root, className, combinator) {
      if (nodes && combinator) nodes = this[combinator](nodes);
      return Selector.handlers.byClassName(nodes, root, className);
    },

    byClassName: function(nodes, root, className) {
      if (!nodes) nodes = Selector.handlers.descendant([root]);
      var needle = ' ' + className + ' ';
      for (var i = 0, results = [], node, nodeClassName; node = nodes[i]; i++) {
        nodeClassName = node.className;
        if (nodeClassName.length == 0) continue;
        if (nodeClassName == className || (' ' + nodeClassName + ' ').include(needle))
          results.push(node);
      }
      return results;
    },

    attrPresence: function(nodes, root, attr, combinator) {
      if (!nodes) nodes = root.getElementsByTagName("*");
      if (nodes && combinator) nodes = this[combinator](nodes);
      var results = [];
      for (var i = 0, node; node = nodes[i]; i++)
        if (Element.hasAttribute(node, attr)) results.push(node);
      return results;
    },

    attr: function(nodes, root, attr, value, operator, combinator) {
      if (!nodes) nodes = root.getElementsByTagName("*");
      if (nodes && combinator) nodes = this[combinator](nodes);
      var handler = Selector.operators[operator], results = [];
      for (var i = 0, node; node = nodes[i]; i++) {
        var nodeValue = Element.readAttribute(node, attr);
        if (nodeValue === null) continue;
        if (handler(nodeValue, value)) results.push(node);
      }
      return results;
    },

    pseudo: function(nodes, name, value, root, combinator) {
      if (nodes && combinator) nodes = this[combinator](nodes);
      if (!nodes) nodes = root.getElementsByTagName("*");
      return Selector.pseudos[name](nodes, value, root);
    }
  },

  pseudos: {
    'first-child': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (Selector.handlers.previousElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'last-child': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (Selector.handlers.nextElementSibling(node)) continue;
          results.push(node);
      }
      return results;
    },
    'only-child': function(nodes, value, root) {
      var h = Selector.handlers;
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!h.previousElementSibling(node) && !h.nextElementSibling(node))
          results.push(node);
      return results;
    },
    'nth-child':        function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root);
    },
    'nth-last-child':   function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true);
    },
    'nth-of-type':      function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, false, true);
    },
    'nth-last-of-type': function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, formula, root, true, true);
    },
    'first-of-type':    function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, false, true);
    },
    'last-of-type':     function(nodes, formula, root) {
      return Selector.pseudos.nth(nodes, "1", root, true, true);
    },
    'only-of-type':     function(nodes, formula, root) {
      var p = Selector.pseudos;
      return p['last-of-type'](p['first-of-type'](nodes, formula, root), formula, root);
    },

    getIndices: function(a, b, total) {
      if (a == 0) return b > 0 ? [b] : [];
      return $R(1, total).inject([], function(memo, i) {
        if (0 == (i - b) % a && (i - b) / a >= 0) memo.push(i);
        return memo;
      });
    },

    nth: function(nodes, formula, root, reverse, ofType) {
      if (nodes.length == 0) return [];
      if (formula == 'even') formula = '2n+0';
      if (formula == 'odd')  formula = '2n+1';
      var h = Selector.handlers, results = [], indexed = [], m;
      h.mark(nodes);
      for (var i = 0, node; node = nodes[i]; i++) {
        if (!node.parentNode._countedByPrototype) {
          h.index(node.parentNode, reverse, ofType);
          indexed.push(node.parentNode);
        }
      }
      if (formula.match(/^\d+$/)) { // just a number
        formula = Number(formula);
        for (var i = 0, node; node = nodes[i]; i++)
          if (node.nodeIndex == formula) results.push(node);
      } else if (m = formula.match(/^(-?\d*)?n(([+-])(\d+))?/)) { // an+b
        if (m[1] == "-") m[1] = -1;
        var a = m[1] ? Number(m[1]) : 1;
        var b = m[2] ? Number(m[2]) : 0;
        var indices = Selector.pseudos.getIndices(a, b, nodes.length);
        for (var i = 0, node, l = indices.length; node = nodes[i]; i++) {
          for (var j = 0; j < l; j++)
            if (node.nodeIndex == indices[j]) results.push(node);
        }
      }
      h.unmark(nodes);
      h.unmark(indexed);
      return results;
    },

    'empty': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++) {
        if (node.tagName == '!' || node.firstChild) continue;
        results.push(node);
      }
      return results;
    },

    'not': function(nodes, selector, root) {
      var h = Selector.handlers, selectorType, m;
      var exclusions = new Selector(selector).findElements(root);
      h.mark(exclusions);
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!node._countedByPrototype) results.push(node);
      h.unmark(exclusions);
      return results;
    },

    'enabled': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (!node.disabled && (!node.type || node.type !== 'hidden'))
          results.push(node);
      return results;
    },

    'disabled': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (node.disabled) results.push(node);
      return results;
    },

    'checked': function(nodes, value, root) {
      for (var i = 0, results = [], node; node = nodes[i]; i++)
        if (node.checked) results.push(node);
      return results;
    }
  },

  operators: {
    '=':  function(nv, v) { return nv == v; },
    '!=': function(nv, v) { return nv != v; },
    '^=': function(nv, v) { return nv == v || nv && nv.startsWith(v); },
    '$=': function(nv, v) { return nv == v || nv && nv.endsWith(v); },
    '*=': function(nv, v) { return nv == v || nv && nv.include(v); },
    '~=': function(nv, v) { return (' ' + nv + ' ').include(' ' + v + ' '); },
    '|=': function(nv, v) { return ('-' + (nv || "").toUpperCase() +
     '-').include('-' + (v || "").toUpperCase() + '-'); }
  },

  split: function(expression) {
    var expressions = [];
    expression.scan(/(([\w#:.~>+()\s-]+|\*|\[.*?\])+)\s*(,|$)/, function(m) {
      expressions.push(m[1].strip());
    });
    return expressions;
  },

  matchElements: function(elements, expression) {
    var matches = $$(expression), h = Selector.handlers;
    h.mark(matches);
    for (var i = 0, results = [], element; element = elements[i]; i++)
      if (element._countedByPrototype) results.push(element);
    h.unmark(matches);
    return results;
  },

  findElement: function(elements, expression, index) {
    if (Object.isNumber(expression)) {
      index = expression; expression = false;
    }
    return Selector.matchElements(elements, expression || '*')[index || 0];
  },

  findChildElements: function(element, expressions) {
    expressions = Selector.split(expressions.join(','));
    var results = [], h = Selector.handlers;
    for (var i = 0, l = expressions.length, selector; i < l; i++) {
      selector = new Selector(expressions[i].strip());
      h.concat(results, selector.findElements(element));
    }
    return (l > 1) ? h.unique(results) : results;
  }
});

if (Prototype.Browser.IE) {
  Object.extend(Selector.handlers, {
    concat: function(a, b) {
      for (var i = 0, node; node = b[i]; i++)
        if (node.tagName !== "!") a.push(node);
      return a;
    }
  });
}

function $$() {
  return Selector.findChildElements(document, $A(arguments));
}

var Form = {
  reset: function(form) {
    form = $(form);
    form.reset();
    return form;
  },

  serializeElements: function(elements, options) {
    if (typeof options != 'object') options = { hash: !!options };
    else if (Object.isUndefined(options.hash)) options.hash = true;
    var key, value, submitted = false, submit = options.submit;

    var data = elements.inject({ }, function(result, element) {
      if (!element.disabled && element.name) {
        key = element.name; value = $(element).getValue();
        if (value != null && element.type != 'file' && (element.type != 'submit' || (!submitted &&
            submit !== false && (!submit || key == submit) && (submitted = true)))) {
          if (key in result) {
            if (!Object.isArray(result[key])) result[key] = [result[key]];
            result[key].push(value);
          }
          else result[key] = value;
        }
      }
      return result;
    });

    return options.hash ? data : Object.toQueryString(data);
  }
};

Form.Methods = {
  serialize: function(form, options) {
    return Form.serializeElements(Form.getElements(form), options);
  },

  getElements: function(form) {
    var elements = $(form).getElementsByTagName('*'),
        element,
        arr = [ ],
        serializers = Form.Element.Serializers;
    for (var i = 0; element = elements[i]; i++) {
      arr.push(element);
    }
    return arr.inject([], function(elements, child) {
      if (serializers[child.tagName.toLowerCase()])
        elements.push(Element.extend(child));
      return elements;
    })
  },

  getInputs: function(form, typeName, name) {
    form = $(form);
    var inputs = form.getElementsByTagName('input');

    if (!typeName && !name) return $A(inputs).map(Element.extend);

    for (var i = 0, matchingInputs = [], length = inputs.length; i < length; i++) {
      var input = inputs[i];
      if ((typeName && input.type != typeName) || (name && input.name != name))
        continue;
      matchingInputs.push(Element.extend(input));
    }

    return matchingInputs;
  },

  disable: function(form) {
    form = $(form);
    Form.getElements(form).invoke('disable');
    return form;
  },

  enable: function(form) {
    form = $(form);
    Form.getElements(form).invoke('enable');
    return form;
  },

  findFirstElement: function(form) {
    var elements = $(form).getElements().findAll(function(element) {
      return 'hidden' != element.type && !element.disabled;
    });
    var firstByIndex = elements.findAll(function(element) {
      return element.hasAttribute('tabIndex') && element.tabIndex >= 0;
    }).sortBy(function(element) { return element.tabIndex }).first();

    return firstByIndex ? firstByIndex : elements.find(function(element) {
      return /^(?:input|select|textarea)$/i.test(element.tagName);
    });
  },

  focusFirstElement: function(form) {
    form = $(form);
    form.findFirstElement().activate();
    return form;
  },

  request: function(form, options) {
    form = $(form), options = Object.clone(options || { });

    var params = options.parameters, action = form.readAttribute('action') || '';
    if (action.blank()) action = window.location.href;
    options.parameters = form.serialize(true);

    if (params) {
      if (Object.isString(params)) params = params.toQueryParams();
      Object.extend(options.parameters, params);
    }

    if (form.hasAttribute('method') && !options.method)
      options.method = form.method;

    return new Ajax.Request(action, options);
  }
};

/*--------------------------------------------------------------------------*/


Form.Element = {
  focus: function(element) {
    $(element).focus();
    return element;
  },

  select: function(element) {
    $(element).select();
    return element;
  }
};

Form.Element.Methods = {

  serialize: function(element) {
    element = $(element);
    if (!element.disabled && element.name) {
      var value = element.getValue();
      if (value != undefined) {
        var pair = { };
        pair[element.name] = value;
        return Object.toQueryString(pair);
      }
    }
    return '';
  },

  getValue: function(element) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    return Form.Element.Serializers[method](element);
  },

  setValue: function(element, value) {
    element = $(element);
    var method = element.tagName.toLowerCase();
    Form.Element.Serializers[method](element, value);
    return element;
  },

  clear: function(element) {
    $(element).value = '';
    return element;
  },

  present: function(element) {
    return $(element).value != '';
  },

  activate: function(element) {
    element = $(element);
    try {
      element.focus();
      if (element.select && (element.tagName.toLowerCase() != 'input' ||
          !(/^(?:button|reset|submit)$/i.test(element.type))))
        element.select();
    } catch (e) { }
    return element;
  },

  disable: function(element) {
    element = $(element);
    element.disabled = true;
    return element;
  },

  enable: function(element) {
    element = $(element);
    element.disabled = false;
    return element;
  }
};

/*--------------------------------------------------------------------------*/

var Field = Form.Element;

var $F = Form.Element.Methods.getValue;

/*--------------------------------------------------------------------------*/

Form.Element.Serializers = {
  input: function(element, value) {
    switch (element.type.toLowerCase()) {
      case 'checkbox':
      case 'radio':
        return Form.Element.Serializers.inputSelector(element, value);
      default:
        return Form.Element.Serializers.textarea(element, value);
    }
  },

  inputSelector: function(element, value) {
    if (Object.isUndefined(value)) return element.checked ? element.value : null;
    else element.checked = !!value;
  },

  textarea: function(element, value) {
    if (Object.isUndefined(value)) return element.value;
    else element.value = value;
  },

  select: function(element, value) {
    if (Object.isUndefined(value))
      return this[element.type == 'select-one' ?
        'selectOne' : 'selectMany'](element);
    else {
      var opt, currentValue, single = !Object.isArray(value);
      for (var i = 0, length = element.length; i < length; i++) {
        opt = element.options[i];
        currentValue = this.optionValue(opt);
        if (single) {
          if (currentValue == value) {
            opt.selected = true;
            return;
          }
        }
        else opt.selected = value.include(currentValue);
      }
    }
  },

  selectOne: function(element) {
    var index = element.selectedIndex;
    return index >= 0 ? this.optionValue(element.options[index]) : null;
  },

  selectMany: function(element) {
    var values, length = element.length;
    if (!length) return null;

    for (var i = 0, values = []; i < length; i++) {
      var opt = element.options[i];
      if (opt.selected) values.push(this.optionValue(opt));
    }
    return values;
  },

  optionValue: function(opt) {
    return Element.extend(opt).hasAttribute('value') ? opt.value : opt.text;
  }
};

/*--------------------------------------------------------------------------*/


Abstract.TimedObserver = Class.create(PeriodicalExecuter, {
  initialize: function($super, element, frequency, callback) {
    $super(callback, frequency);
    this.element   = $(element);
    this.lastValue = this.getValue();
  },

  execute: function() {
    var value = this.getValue();
    if (Object.isString(this.lastValue) && Object.isString(value) ?
        this.lastValue != value : String(this.lastValue) != String(value)) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  }
});

Form.Element.Observer = Class.create(Abstract.TimedObserver, {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.Observer = Class.create(Abstract.TimedObserver, {
  getValue: function() {
    return Form.serialize(this.element);
  }
});

/*--------------------------------------------------------------------------*/

Abstract.EventObserver = Class.create({
  initialize: function(element, callback) {
    this.element  = $(element);
    this.callback = callback;

    this.lastValue = this.getValue();
    if (this.element.tagName.toLowerCase() == 'form')
      this.registerFormCallbacks();
    else
      this.registerCallback(this.element);
  },

  onElementEvent: function() {
    var value = this.getValue();
    if (this.lastValue != value) {
      this.callback(this.element, value);
      this.lastValue = value;
    }
  },

  registerFormCallbacks: function() {
    Form.getElements(this.element).each(this.registerCallback, this);
  },

  registerCallback: function(element) {
    if (element.type) {
      switch (element.type.toLowerCase()) {
        case 'checkbox':
        case 'radio':
          Event.observe(element, 'click', this.onElementEvent.bind(this));
          break;
        default:
          Event.observe(element, 'change', this.onElementEvent.bind(this));
          break;
      }
    }
  }
});

Form.Element.EventObserver = Class.create(Abstract.EventObserver, {
  getValue: function() {
    return Form.Element.getValue(this.element);
  }
});

Form.EventObserver = Class.create(Abstract.EventObserver, {
  getValue: function() {
    return Form.serialize(this.element);
  }
});
(function() {

  var Event = {
    KEY_BACKSPACE: 8,
    KEY_TAB:       9,
    KEY_RETURN:   13,
    KEY_ESC:      27,
    KEY_LEFT:     37,
    KEY_UP:       38,
    KEY_RIGHT:    39,
    KEY_DOWN:     40,
    KEY_DELETE:   46,
    KEY_HOME:     36,
    KEY_END:      35,
    KEY_PAGEUP:   33,
    KEY_PAGEDOWN: 34,
    KEY_INSERT:   45,

    cache: {}
  };

  var docEl = document.documentElement;
  var MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED = 'onmouseenter' in docEl
    && 'onmouseleave' in docEl;

  var _isButton;
  if (Prototype.Browser.IE) {
    var buttonMap = { 0: 1, 1: 4, 2: 2 };
    _isButton = function(event, code) {
      return event.button === buttonMap[code];
    };
  } else if (Prototype.Browser.WebKit) {
    _isButton = function(event, code) {
      switch (code) {
        case 0: return event.which == 1 && !event.metaKey;
        case 1: return event.which == 1 && event.metaKey;
        default: return false;
      }
    };
  } else {
    _isButton = function(event, code) {
      return event.which ? (event.which === code + 1) : (event.button === code);
    };
  }

  function isLeftClick(event)   { return _isButton(event, 0) }

  function isMiddleClick(event) { return _isButton(event, 1) }

  function isRightClick(event)  { return _isButton(event, 2) }

  function element(event) {
    event = Event.extend(event);

    var node = event.target, type = event.type,
     currentTarget = event.currentTarget;

    if (currentTarget && currentTarget.tagName) {
      if (type === 'load' || type === 'error' ||
        (type === 'click' && currentTarget.tagName.toLowerCase() === 'input'
          && currentTarget.type === 'radio'))
            node = currentTarget;
    }

    if (node.nodeType == Node.TEXT_NODE)
      node = node.parentNode;

    return Element.extend(node);
  }

  function findElement(event, expression) {
    var element = Event.element(event);
    if (!expression) return element;
    var elements = [element].concat(element.ancestors());
    return Selector.findElement(elements, expression, 0);
  }

  function pointer(event) {
    return { x: pointerX(event), y: pointerY(event) };
  }

  function pointerX(event) {
    var docElement = document.documentElement,
     body = document.body || { scrollLeft: 0 };

    return event.pageX || (event.clientX +
      (docElement.scrollLeft || body.scrollLeft) -
      (docElement.clientLeft || 0));
  }

  function pointerY(event) {
    var docElement = document.documentElement,
     body = document.body || { scrollTop: 0 };

    return  event.pageY || (event.clientY +
       (docElement.scrollTop || body.scrollTop) -
       (docElement.clientTop || 0));
  }


  function stop(event) {
    Event.extend(event);
    event.preventDefault();
    event.stopPropagation();

    event.stopped = true;
  }

  Event.Methods = {
    isLeftClick: isLeftClick,
    isMiddleClick: isMiddleClick,
    isRightClick: isRightClick,

    element: element,
    findElement: findElement,

    pointer: pointer,
    pointerX: pointerX,
    pointerY: pointerY,

    stop: stop
  };


  var methods = Object.keys(Event.Methods).inject({ }, function(m, name) {
    m[name] = Event.Methods[name].methodize();
    return m;
  });

  if (Prototype.Browser.IE) {
    function _relatedTarget(event) {
      var element;
      switch (event.type) {
        case 'mouseover': element = event.fromElement; break;
        case 'mouseout':  element = event.toElement;   break;
        default: return null;
      }
      return Element.extend(element);
    }

    Object.extend(methods, {
      stopPropagation: function() { this.cancelBubble = true },
      preventDefault:  function() { this.returnValue = false },
      inspect: function() { return '[object Event]' }
    });

    Event.extend = function(event, element) {
      if (!event) return false;
      if (event._extendedByPrototype) return event;

      event._extendedByPrototype = Prototype.emptyFunction;
      var pointer = Event.pointer(event);

      Object.extend(event, {
        target: event.srcElement || element,
        relatedTarget: _relatedTarget(event),
        pageX:  pointer.x,
        pageY:  pointer.y
      });

      return Object.extend(event, methods);
    };
  } else {
    Event.prototype = window.Event.prototype || document.createEvent('HTMLEvents').__proto__;
    Object.extend(Event.prototype, methods);
    Event.extend = Prototype.K;
  }

  function _createResponder(element, eventName, handler) {
    var registry = Element.retrieve(element, 'prototype_event_registry');

    if (Object.isUndefined(registry)) {
      CACHE.push(element);
      registry = Element.retrieve(element, 'prototype_event_registry', $H());
    }

    var respondersForEvent = registry.get(eventName);
    if (Object.isUndefined(respondersForEvent)) {
      respondersForEvent = [];
      registry.set(eventName, respondersForEvent);
    }

    if (respondersForEvent.pluck('handler').include(handler)) return false;

    var responder;
    if (eventName.include(":")) {
      responder = function(event) {
        if (Object.isUndefined(event.eventName))
          return false;

        if (event.eventName !== eventName)
          return false;

        Event.extend(event, element);
        handler.call(element, event);
      };
    } else {
      if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED &&
       (eventName === "mouseenter" || eventName === "mouseleave")) {
        if (eventName === "mouseenter" || eventName === "mouseleave") {
          responder = function(event) {
            Event.extend(event, element);

            var parent = event.relatedTarget;
            while (parent && parent !== element) {
              try { parent = parent.parentNode; }
              catch(e) { parent = element; }
            }

            if (parent === element) return;

            handler.call(element, event);
          };
        }
      } else {
        responder = function(event) {
          Event.extend(event, element);
          handler.call(element, event);
        };
      }
    }

    responder.handler = handler;
    respondersForEvent.push(responder);
    return responder;
  }

  function _destroyCache() {
    for (var i = 0, length = CACHE.length; i < length; i++) {
      Event.stopObserving(CACHE[i]);
      CACHE[i] = null;
    }
  }

  var CACHE = [];

  if (Prototype.Browser.IE)
    window.attachEvent('onunload', _destroyCache);

  if (Prototype.Browser.WebKit)
    window.addEventListener('unload', Prototype.emptyFunction, false);


  var _getDOMEventName = Prototype.K;

  if (!MOUSEENTER_MOUSELEAVE_EVENTS_SUPPORTED) {
    _getDOMEventName = function(eventName) {
      var translations = { mouseenter: "mouseover", mouseleave: "mouseout" };
      return eventName in translations ? translations[eventName] : eventName;
    };
  }

  function observe(element, eventName, handler) {
    element = $(element);

    var responder = _createResponder(element, eventName, handler);

    if (!responder) return element;

    if (eventName.include(':')) {
      if (element.addEventListener)
        element.addEventListener("dataavailable", responder, false);
      else {
        element.attachEvent("ondataavailable", responder);
        element.attachEvent("onfilterchange", responder);
      }
    } else {
      var actualEventName = _getDOMEventName(eventName);

      if (element.addEventListener)
        element.addEventListener(actualEventName, responder, false);
      else
        element.attachEvent("on" + actualEventName, responder);
    }

    return element;
  }

  function stopObserving(element, eventName, handler) {
    element = $(element);

    var registry = Element.retrieve(element, 'prototype_event_registry');

    if (Object.isUndefined(registry)) return element;

    if (eventName && !handler) {
      var responders = registry.get(eventName);

      if (Object.isUndefined(responders)) return element;

      responders.each( function(r) {
        Element.stopObserving(element, eventName, r.handler);
      });
      return element;
    } else if (!eventName) {
      registry.each( function(pair) {
        var eventName = pair.key, responders = pair.value;

        responders.each( function(r) {
          Element.stopObserving(element, eventName, r.handler);
        });
      });
      return element;
    }

    var responders = registry.get(eventName);

    if (!responders) return;

    var responder = responders.find( function(r) { return r.handler === handler; });
    if (!responder) return element;

    var actualEventName = _getDOMEventName(eventName);

    if (eventName.include(':')) {
      if (element.removeEventListener)
        element.removeEventListener("dataavailable", responder, false);
      else {
        element.detachEvent("ondataavailable", responder);
        element.detachEvent("onfilterchange",  responder);
      }
    } else {
      if (element.removeEventListener)
        element.removeEventListener(actualEventName, responder, false);
      else
        element.detachEvent('on' + actualEventName, responder);
    }

    registry.set(eventName, responders.without(responder));

    return element;
  }

  function fire(element, eventName, memo, bubble) {
    element = $(element);

    if (Object.isUndefined(bubble))
      bubble = true;

    if (element == document && document.createEvent && !element.dispatchEvent)
      element = document.documentElement;

    var event;
    if (document.createEvent) {
      event = document.createEvent('HTMLEvents');
      event.initEvent('dataavailable', true, true);
    } else {
      event = document.createEventObject();
      event.eventType = bubble ? 'ondataavailable' : 'onfilterchange';
    }

    event.eventName = eventName;
    event.memo = memo || { };

    if (document.createEvent)
      element.dispatchEvent(event);
    else
      element.fireEvent(event.eventType, event);

    return Event.extend(event);
  }


  Object.extend(Event, Event.Methods);

  Object.extend(Event, {
    fire:          fire,
    observe:       observe,
    stopObserving: stopObserving
  });

  Element.addMethods({
    fire:          fire,

    observe:       observe,

    stopObserving: stopObserving
  });

  Object.extend(document, {
    fire:          fire.methodize(),

    observe:       observe.methodize(),

    stopObserving: stopObserving.methodize(),

    loaded:        false
  });

  if (window.Event) Object.extend(window.Event, Event);
  else window.Event = Event;
})();

(function() {
  /* Support for the DOMContentLoaded event is based on work by Dan Webb,
     Matthias Miller, Dean Edwards, John Resig, and Diego Perini. */

  var timer;

  function fireContentLoadedEvent() {
    if (document.loaded) return;
    if (timer) window.clearTimeout(timer);
    document.loaded = true;
    document.fire('dom:loaded');
  }

  function checkReadyState() {
    if (document.readyState === 'complete') {
      document.stopObserving('readystatechange', checkReadyState);
      fireContentLoadedEvent();
    }
  }

  function pollDoScroll() {
    try { document.documentElement.doScroll('left'); }
    catch(e) {
      timer = pollDoScroll.defer();
      return;
    }
    fireContentLoadedEvent();
  }

  if (document.addEventListener) {
    document.addEventListener('DOMContentLoaded', fireContentLoadedEvent, false);
  } else {
    document.observe('readystatechange', checkReadyState);
    if (window == top)
      timer = pollDoScroll.defer();
  }

  Event.observe(window, 'load', fireContentLoadedEvent);
})();

Element.addMethods();

/*------------------------------- DEPRECATED -------------------------------*/

Hash.toQueryString = Object.toQueryString;

var Toggle = { display: Element.toggle };

Element.Methods.childOf = Element.Methods.descendantOf;

var Insertion = {
  Before: function(element, content) {
    return Element.insert(element, {before:content});
  },

  Top: function(element, content) {
    return Element.insert(element, {top:content});
  },

  Bottom: function(element, content) {
    return Element.insert(element, {bottom:content});
  },

  After: function(element, content) {
    return Element.insert(element, {after:content});
  }
};

var $continue = new Error('"throw $continue" is deprecated, use "return" instead');

var Position = {
  includeScrollOffsets: false,

  prepare: function() {
    this.deltaX =  window.pageXOffset
                || document.documentElement.scrollLeft
                || document.body.scrollLeft
                || 0;
    this.deltaY =  window.pageYOffset
                || document.documentElement.scrollTop
                || document.body.scrollTop
                || 0;
  },

  within: function(element, x, y) {
    if (this.includeScrollOffsets)
      return this.withinIncludingScrolloffsets(element, x, y);
    this.xcomp = x;
    this.ycomp = y;
    this.offset = Element.cumulativeOffset(element);

    return (y >= this.offset[1] &&
            y <  this.offset[1] + element.offsetHeight &&
            x >= this.offset[0] &&
            x <  this.offset[0] + element.offsetWidth);
  },

  withinIncludingScrolloffsets: function(element, x, y) {
    var offsetcache = Element.cumulativeScrollOffset(element);

    this.xcomp = x + offsetcache[0] - this.deltaX;
    this.ycomp = y + offsetcache[1] - this.deltaY;
    this.offset = Element.cumulativeOffset(element);

    return (this.ycomp >= this.offset[1] &&
            this.ycomp <  this.offset[1] + element.offsetHeight &&
            this.xcomp >= this.offset[0] &&
            this.xcomp <  this.offset[0] + element.offsetWidth);
  },

  overlap: function(mode, element) {
    if (!mode) return 0;
    if (mode == 'vertical')
      return ((this.offset[1] + element.offsetHeight) - this.ycomp) /
        element.offsetHeight;
    if (mode == 'horizontal')
      return ((this.offset[0] + element.offsetWidth) - this.xcomp) /
        element.offsetWidth;
  },


  cumulativeOffset: Element.Methods.cumulativeOffset,

  positionedOffset: Element.Methods.positionedOffset,

  absolutize: function(element) {
    Position.prepare();
    return Element.absolutize(element);
  },

  relativize: function(element) {
    Position.prepare();
    return Element.relativize(element);
  },

  realOffset: Element.Methods.cumulativeScrollOffset,

  offsetParent: Element.Methods.getOffsetParent,

  page: Element.Methods.viewportOffset,

  clone: function(source, target, options) {
    options = options || { };
    return Element.clonePosition(target, source, options);
  }
};

/*--------------------------------------------------------------------------*/

if (!document.getElementsByClassName) document.getElementsByClassName = function(instanceMethods){
  function iter(name) {
    return name.blank() ? null : "[contains(concat(' ', @class, ' '), ' " + name + " ')]";
  }

  instanceMethods.getElementsByClassName = Prototype.BrowserFeatures.XPath ?
  function(element, className) {
    className = className.toString().strip();
    var cond = /\s/.test(className) ? $w(className).map(iter).join('') : iter(className);
    return cond ? document._getElementsByXPath('.//*' + cond, element) : [];
  } : function(element, className) {
    className = className.toString().strip();
    var elements = [], classNames = (/\s/.test(className) ? $w(className) : null);
    if (!classNames && !className) return elements;

    var nodes = $(element).getElementsByTagName('*');
    className = ' ' + className + ' ';

    for (var i = 0, child, cn; child = nodes[i]; i++) {
      if (child.className && (cn = ' ' + child.className + ' ') && (cn.include(className) ||
          (classNames && classNames.all(function(name) {
            return !name.toString().blank() && cn.include(' ' + name + ' ');
          }))))
        elements.push(Element.extend(child));
    }
    return elements;
  };

  return function(className, parentElement) {
    return $(parentElement || document.body).getElementsByClassName(className);
  };
}(Element.Methods);

/*--------------------------------------------------------------------------*/

Element.ClassNames = Class.create();
Element.ClassNames.prototype = {
  initialize: function(element) {
    this.element = $(element);
  },

  _each: function(iterator) {
    this.element.className.split(/\s+/).select(function(name) {
      return name.length > 0;
    })._each(iterator);
  },

  set: function(className) {
    this.element.className = className;
  },

  add: function(classNameToAdd) {
    if (this.include(classNameToAdd)) return;
    this.set($A(this).concat(classNameToAdd).join(' '));
  },

  remove: function(classNameToRemove) {
    if (!this.include(classNameToRemove)) return;
    this.set($A(this).without(classNameToRemove).join(' '));
  },

  toString: function() {
    return $A(this).join(' ');
  }
};

Object.extend(Element.ClassNames.prototype, Enumerable);

/*--------------------------------------------------------------------------*/

	Object.extend(document, {
	on: Event.observe
})

//Object.extend(Enumerable, {
Object.extend(Array.prototype, {
	pluck: function(property) {
		var results = [];
		this.each(function(value) {
			results.push(eval("value." + property));
		});
		return results;
	}
});

/*Object.extend(Event, {
	fire: function() {
		
	}
});*/

Element.addMethods({

	on: Event.observe,

        /**
         * @version w.2008.05.10 9:37
         */
	delegate: function(element, selector, event, handler) {
		// az element tipikusan a html lesz vagy vmi div
		// a selector az az, hogy kinek kell tovabb adni az esemenyt
		// felprogramozzuk a gyujtot, hogy figyelje az adott eventet (legtobbszor click)
		
		element.on(event, function(ev) {
			// hozzarendelunk a gyujtohoz egy olyan fuggvenyt, hogy figyelje, hogy
			// amire kattintottak az jo-e nekunk
//			
//			if ($(ev.target).match(selector)) {
			if (element.$$(selector).include(ev.target)) {
				// ha igen, hivja meg azt a fgv-t azokkal a parameterekkel
				// amikkel ot is meghivtak
				// ez az ev.target kicsit bonyolult, de a lenyeg, hogy jo igy :)
				return handler.apply(ev.target, arguments);
			} else {
				if (Nibble.debug) {
					
				}
			}
		});
	},

	attr: Element.readAttribute,

	$$: function(element, selector) {
		return element.getElementsBySelector(selector);
	},

	tags: function(element, tagName) {
		return $A(element.getElementsByTagName(tagName));
	},

	highLightOk: function(element) {
		new Effect.Highlight(element, { startcolor: "#00c000" });
	},

	insertAfter: function(thisNode, afterNode) {
//		
//		
		var parent = afterNode.parentNode;
		if (parent.lastChild == afterNode) {
			return parent.appendChild(thisNode);
		} else {
			return parent.insertBefore(thisNode, afterNode.nextSibling);
		}
	},

        /*
	       	visible		condition	X
		visible		!condition	hide
		invisible	condition	show
		invisible	!condition	X
        */
	showIf: function(element, condition) {
//		
		element = $(element);
		Element[condition ? 'show' : 'hide'](element);
		return element;
	},

	addClassNameIf: function(element, klass, condition) {
		element = $(element);
		Element[condition ? 'addClassName' : 'removeClassName'](element, klass);
		return element;
	},

	zebra: function(element) {
		var counter = 0;
//		
		$A(element.getElementsByTagName("tr")).each(function(tr) {
//			
			if (tr.visible()) {
				counter++;
				if (counter % 2 == 1) {
					tr.addClassName("odd");
					tr.removeClassName("even");
				} else {
					tr.removeClassName("odd");
					tr.addClassName("even");
				}
			}
		});
		return element;
	},

	/**
	 * Egy <select> frissitese, felulirasa uj adatokkal
	 *
	 * @author 	wiktor@eworld.hu
	 * @since  	2006-06-19
	 * @version	2006-06-19.wiktor
	 * @param  	string|element	id		$()-nak atadhato parameter
	 * @param  	object		options		az options "tomb" nev/ertek parok
	 * @return 	boolean				sikeres volt-e a modositas
	 *
	 * @see		http://msdn.microsoft.com/workshop/author/perf/dhtmlperf.asp#Expand_Your_Options_in_a_SELECT_Element
	 */
	setOptions: function(id, options) {
		var i = options.length;
		// ha nincs ilyen select, akkor nincs mirol beszelni
		if (!(select = $(id))) return false;
		select.options.length = 0;
//		alert(i);
//		alert(select.innerHTML);
//		OPERA BUG
/*		while (i--) {
			select.options[i] = new Option(i + " " + options[i].option, options[i].value);
			if (i == 76) break;
		}*/
//		alert(select.options.length);
		var innerHTM = "";
		for (var i = 0; i<options.length; i++) {
			// nem megy opera alatt, berak megfelelo szamu elemet, de nem latszik
//			innerHTM += "<option value='" + options[i].value + "'>" + options[i].option + "</option>";
			// a DOM lassabb
			select.options[i] = new Option(options[i].option, options[i].value);
		}
//		alert(innerHTM);
//		select.innerHTML = innerHTM;
		return true;
	},

	addOption: function(element, option, value, skip, selectIt) {
		if (element.tagName.toLowerCase() != "select") {
			return;
		}

		// a skip azt mondja meg, hogy hanyat hagyjon ki.
		var i = skip || 0;
		while (i < element.options.length - 2 && (element[i].text.toLowerCase() < option.toLowerCase())) {
			i++;
		}
		var node = element.insertBefore(new Option(option, value), element[i]);
		if (selectIt) {
			element.selectedIndex = i;
		}
		return node;
 	},

	hasOption: function(element, option, value) {
		if (!element.options) {
			return -1;
		} else {
			var o = element.options;
		}
		for (var i = 0; i < o.length; i++) {
			if (option.toLowerCase() == o[i].text.toLowerCase()) {
				return i;
			}
		}
		return -1;
 	},

 	betterMultiple: function(element) {
 		$("clear").observe("click", function(ev) {
			$A(element.options).each(function(option) {
				option.selected = false;
			});
			element._values = [];
 		});
 		
		element.setValue([10, 15]);

 		element.observe("mousedown", function(ev) {
 			
 			this._values = this._values || [];
			
			this._values = this._values.xor($F(this));
 		}.bindAsEventListener(element));

 		element.observe("mouseup", function(ev) {
 			
			
			this._values = this._values.xor($F(this));
			

			$A(this.options).each(function(option) {
				if (option == ev.target) {
					option.selected = !this._values.include(option.value);
				} else {
					option.selected = this._values.include(option.value);
				}
//				
			}.bind(this));
			
 		}.bindAsEventListener(element));

 		element.observe("xchange", function(ev) {
 			
 			this._values = this._values || [];
 			var checked = $F(this);
 			
 			
/* 			if (checked.length == 1) {
 				return true;
 			}*/
 			var without = this._values.without(checked);
 			if (without.length == this._values.length) {
 				this._values = this._values.concat(checked);
 			} else {
 				this._values = without;
 			}
			$A(this.options).each(function(option) {
				option.selected = this._values.include(option.value);
			}.bind(this));
 		}.bindAsEventListener(element));
 	},

	expandTree: function(e, o) {
		if (e.tagName.toLowerCase() != "ul") {
			return;
		}
		return new Nibble.ExpandTree(e, o);
	},

	displayed: function(e) {
		return (e.getStyle("display") != "none");
	},

	tabs: function(e) {
		new Control.Tabs(e, {
			afterChange: eval(e.readAttribute("onafterchange")) || Prototype.emptyFunction,
			beforeChange: eval(e.readAttribute("onbeforechange")) || Prototype.emptyFunction
		});
		if (e.up(".tab-container")) {
			e.up(".tab-container").$$(".jsh").each(function(tab) {
				tab.removeClassName("jsh");
				tab.hide();
			});
		}
	},

	// http://wiki.script.aculo.us/scriptaculous/show/Ajax.Autocompleter
	doAutoCompleter: function(e, options) {
		options = options || {};
//		var id = e.identify();
//		var divId = id + "_autocomplete";
		if (e._autocompleter) return;
		e._autocompleter = true;
		var div = new Element("div", { className: "autocomplete"});
		e.insert({after: div});
//		alert(div);
		var indicator = Nibble.ajaxIndicator();
		// vigyazni kell, NEM /-, hanem /-/

		var onau = e.readAttribute("onautocompleteafterupdate");
//		
		if (onau) {
			onau = $w(onau);
			var afterEvent = eval(onau.shift());
			var afterUpdateElementCallback = function(input, li) {
				return afterEvent.apply(input, $A(arguments).concat(onau));
			}
		} else {
			var afterUpdateElementCallback = function() {
//				
			};
		}

		var onbs = e.readAttribute("onautocompletebeforesend") || options.onautocompletebeforesend;
//		
		if (onbs) {
			onbs = $w(onbs);
			var beforeSend = eval(onbs.shift());
			var beforeSendCallback = function(input, li) {
				return beforeSend.apply(input, $A(arguments).concat(onbs));
			}
		} else {
			var beforeSendCallback = function(i, q) { return q; };
		}

		options.autocompleter = e.readAttribute("autocompleter") || options.autocompleter;

		var plusParams = e.readAttribute("autocompleterparams");
		if (plusParams) {
			plusParams = "&parameters[params]=" + plusParams
		} else {
			plusParams = "";
		}
		var o = {
			minChars: e.attr("autocompleterminchars") || 2,
			frequency: 0.5,
			indicator: indicator,
			afterUpdateElement: afterUpdateElementCallback,
			callback: beforeSendCallback,
			paramName: "parameters[query]",
			parameters: "controller=nibble&method=autocomplete&parameters[autocomplete]=" + options.autocompleter + plusParams
		};
		new Ajax.Autocompleter(e, div, '/-/', o);
	},

	swapNode: function(e, node) {
		var nextSibling = e.nextSibling;
		var parentNode = e.parentNode;
		node.parentNode.replaceChild(e, node);
		parentNode.insertBefore(node, nextSibling);  
	},

	i18n: function(e, name) {
		return e.readAttribute("i18n_" + name);
	},

	errors: function(e, hash) {
		$H(hash).each(function(pair) {
			pair.value ? e.setError(pair.key) : e.removeError();
		});
	},

	// w.2008.06.04 19:41
	setError: function(e, id) {
		var id = id || "";
		if (id) {
			id = "_" + id;
		}
		var message = e.i18n("error" + id) || "[N/A] i18n_error" + id;
		if (message) {
			// ne tegyuk ra meg egyszer
			if (e.up(".error")) {
				return false;
			}

			if (e.up("table.layout")) {
				e.up("table.layout > tbody > tr").addClassName("error");
			} else {
				Element.wrap(wrapThis, new Element("div", {
					className: "error"
				}));
			}
			var afterE = e.up("div.taxnumber") || e.up("div.layout_group") || e;
			afterE.insert({
				after: new Element("strong").update(message).addClassName("message")
			});
		}
	},

	removeError: function(e) {
		var c = e.up(".error");
		if (c) {
			c.removeClassName("error");
			var message = c.down(".message");
			if (message) {
				message.remove();
			}
		}
	},

	toggle: function(e) {
		if (e.hasClassName("opened")) {
			e.$$(".x-hide").invoke("removeClassName", "x-hide").invoke("addClassName", "hide");
		} else {
			e.$$(".hide").invoke("removeClassName", "hide").invoke("addClassName", "x-hide");
		}
		e.toggleClassName("opened");
	}

});

Element.addMethods("input", {
	spinEdit: function(e, o) {
		return new Nibble.SpinEdit(e, o);
	},

	mask: function(e, o) {
		MaskInput(e, o);
	},

	ro: function(e, ro) {
//		
//		return e.setAttribute("readOnly", true);
		return e.readOnly = !!ro;
	},

	initCalendar: function(input, index) {
			var id = input.getAttribute("id");
			if (!id) {
				var id = "date_" + index;
				input.setAttribute("id", id);
			}
			var imgId = id + "-calendar";
			var icon = new Element("img", {
				"id": imgId,
				"src": "/images/icons/calendar.png",
				"width": 16,
				"height": 16,
				"class": "icon_calendar"
			});
			switch (input.getAttribute("type")) {
				case "datetime":
				case "datetime-local":
					var showsTime = true;
					var ifFormat = "%Y-%m-%d %H:%M:%S";
				break;
				case "date":
					var showsTime = false;
					var ifFormat = "%Y-%m-%d";
				break;
			}
			var div = new Element("div", {
				"class": "date"
			});
			div.appendChild(icon.cloneNode(true));
			input.wrap(div);
			Calendar.setup({
		        	inputField:	id,		// id of the input field
			        ifFormat:	ifFormat,	// format of the input field
			        showsTime:	showsTime,	// will display a time selector
			        button:		imgId,		// trigger for the calendar (button ID)
			        singleClick:	true,		// double-click mode
			        step:		1,		// show all years in drop-down boxes (instead of every other year as default)
			        timeFormat:	24,
			        showOthers:	true
//			        align:	"BL"
			});
	},

	upload: function(e, o) {
		if (e.type != "file") return;
		var oldName = e.name;
		e.name = "file";
		Nibble.ajaxIndicator(true);
		var id = "__uploadiframe";
		var formId = id + "_form";
		var form = $(formId) || e.wrap("form", {
//			action: "/-/",
			method: "POST",
			id: formId,
			action: "/-/",
			target: id,
			enctype: "multipart/form-data"
		})/*.up("form")*/;
		o["_upload"] = "nibble";
		["tags", "parser", "_upload", "table_name", "table_id"].each(function(p) {
			form.insert(new Element("input", {
				type: "hidden",
				name: p,
				value: o[p]
			}));
		});
		var ifr = e.parentNode.appendChild(new Element("iframe", {
			id: id,
			name: id,
			className: "hide"
		}));
		ifr.on("load", function(ev) {
			var response = ev.currentTarget.contentDocument.body.textContent;
			console.info("File uploaded... fileId = " + response + "onLoad...")
			if (/^\d+$/.test(response)) {
				o.onComplete(response);
			} else {
				var onError = o.onError || function() {
					
				}
			}
			form.reset();
			Nibble.ajaxIndicator(false);
			// igy nem lesz tobbszor onload event
			Element.remove.delay(0.001, ifr);
		});
		
		
		form.submit();
	}

});

Element.addMethods("form", {
	// https://secure.devidens.hu/mantis/view.php?id=661
	enterToTab: function(e) {
		e.observe("keypress", function(ev) {
//			
			if (ev.target.tagName == "INPUT" && ev.keyCode == 13) {

				// https://secure.devidens.hu/mantis/view.php?id=3663
				if (ev.target.attr("type") == "submit") {
					ev.target.up("form").submit();
				}

				// w.2008.05.16 12:03
				// ha fejlecben van, akkor ne ugoron a kvetkezre, hanem keressen
				if (ev.target.up("thead")) {
					return;
				}
				var prev;
				var inputs = e.$$("input:not([readonly]):not([type=checkbox]):not([type=radio]):not([disabled]):not([type=hidden])");
				var next = inputs.find(function(i) {
					if (prev == ev.target) {
						return true;
					} else {
						prev = i;
						return false;
					}
				});
				if (next) {
					try {
						next.setAttribute("autocomplete", "off");
						next.focus();
						next.select();
					} catch (e) {}
				}
				ev.stop();
			}
		});
	},

	hasError: function(e) {
		return e.$$(".error").length > 0;
	}

});


Element.addMethods("img", {
	iconName: function(e) {
//		
		if (typeof(e.src) == "string") {
			var re = new RegExp("icons\/(.+).png", "ig");
			var t = re.exec(e.src);
//			
			if (t) {
				return t[1];
			}
		}
	}
});

Object.extend(Array.prototype, {
	onclick: function(handler) {
		this.each(function(input) {
			input.observe("click", handler);
		});
	}
});

// http://weblabor.hu/blog/20070330/elnyelt-hibauzenetek-prototype
(
    function() {
        var origConstructor = Ajax.Request.prototype.initialize;
        // w.2008.09.16 16:35
        // ns7.2 alatt nincs
        if (origConstructor.bind) {
	        Ajax.Request.prototype.initialize = function(url, options) {
	            origConstructor.bind(this)(url, Object.extend(options, {
	                onException: function(_, exp) {throw exp}
	            }));
	        }
        }
    }
)();

Array.prototype.without = function() {
	var values = $A(arguments).flatten();
	return this.select(function(value) {
		return !values.include(value);
	});
}

// http://mathworld.wolfram.com/SymmetricDifference.html
Array.prototype.xor = function(b) {
	return this.without(b).concat(b.without(this));
}

Function.prototype.benchmark = function(id) {
	var __method = this, id = id || Math.random();
	return function() {
		
		__method.apply(__method, arguments);
		console.timeEnd(id)
	}.bind(__method);
}

Function.prototype.indicate = function(e) {
	if (!e) {
		return this;
	}
	var __method = this;
	return function() {
		var html = e.innerHTML;
		(function() {
			e.update(new Element("img", { src: "/images/ajax-load.gif"})); 
		}).defer();
		
		__method.apply(this, arguments);
		
		(function() {
			e.update(html);
		}).defer();
	};
}
	
Array.prototype.cartesianProduct = function() {
	
	var a = this;
	if (a.length == 0) {
		return [];
	}
	if (a.length == 1) {
		var tmp = [];
		for (var i = 0; i < a[0].length; i++) {
			tmp.push([a[0][i]]);
		}
		return tmp;
	}
	var b = (a.length > 2) ? a.shift().cartesianProduct() : a[1];
	
	var tmp = [];
	for (var i = 0; i < a[0].length; i++) {
		for (var j = 0; j < b.length; j++) {
			var c = (typeof(b[j]) == "Array") ? b[j] : [b[j]];
			tmp.push(c.concat(a[0][i]));
		}
	}
	return tmp;
}


String.prototype.base64Encode = function() {
  var decStr = this;
  if (btoa) {
  	return btoa(decStr);
  }
  var base64s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  decStr=escape(decStr);		
  var bits, dual, i = 0, encOut = '';
  while(decStr.length >= i + 3){
    bits =
    (decStr.charCodeAt(i++) & 0xff) <<16 |
    (decStr.charCodeAt(i++) & 0xff) <<8  |
     decStr.charCodeAt(i++) & 0xff;
    encOut +=
     base64s.charAt((bits & 0x00fc0000) >>18) +
     base64s.charAt((bits & 0x0003f000) >>12) +
     base64s.charAt((bits & 0x00000fc0) >> 6) +
     base64s.charAt((bits & 0x0000003f));
    }
  if(decStr.length -i > 0 && decStr.length -i < 3){
    dual = Boolean(decStr.length -i -1);
    bits =
     ((decStr.charCodeAt(i++) & 0xff) <<16) |
     (dual ? (decStr.charCodeAt(i) & 0xff) <<8 : 0);
    encOut +=
      base64s.charAt((bits & 0x00fc0000) >>18) +
      base64s.charAt((bits & 0x0003f000) >>12) +
      (dual ? base64s.charAt((bits & 0x00000fc0) >>6) : '=') +
      '=';
    }
  return encOut
}

String.prototype.base64Decode = function() {
  var encStr = this;
  if (atob) {
  	return atob(encStr);
  }
  var base64s="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
  var bits, decOut = '', i = 0;
  for(; i<encStr.length; i += 4){
    bits =
     (base64s.indexOf(encStr.charAt(i))    & 0xff) <<18 |
     (base64s.indexOf(encStr.charAt(i +1)) & 0xff) <<12 | 
     (base64s.indexOf(encStr.charAt(i +2)) & 0xff) << 6 |
      base64s.indexOf(encStr.charAt(i +3)) & 0xff;
    decOut += String.fromCharCode(
     (bits & 0xff0000) >>16, (bits & 0xff00) >>8, bits & 0xff);
    }
  if(encStr.charCodeAt(i -2) == 61)
    undecOut=decOut.substring(0, decOut.length -2);
  else if(encStr.charCodeAt(i -1) == 61)
    undecOut=decOut.substring(0, decOut.length -1);
  else undecOut=decOut;
  
  return unescape(undecOut);	
}

Array.prototype.sum = function(){
	for(var i=0,sum=0;i<this.length;sum+=$N(this[i++]));
	return sum;
}

//pads left
String.prototype.lpad = function(padString, length) {
	var str = this;
    while (str.length < length)
        str = padString + str;
    return str;
}
 
//pads right
String.prototype.rpad = function(padString, length) {
	var str = this;
    while (str.length < length)
        str = str + padString;
    return str;
}
	// Replace an Element#fire 
Element.addMethods({
    fire: function(element, eventName, memo) {
      element = $(element);
      if (element == document && document.createEvent && !element.dispatchEvent)
        element = document.documentElement;

      if (document.createEvent) {
      	switch (eventName) {
      		case "click":
		      	var createEvent = "MouseEvents";
      		break;
      		default:
      			var createEvent = "HTMLEvents";
      		break;
      	}
        var event = document.createEvent(createEvent);
        
        if (eventName.indexOf(":") > 0) {
	        event.initEvent("dataavailable", true, true);
        } else {
        	switch (createEvent) {
        		case "MouseEvents":
				event.initMouseEvent(eventName, true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
        		break;
        		default:
			        event.initEvent(eventName, true, true);
		        break;
        	}
        }
      } else {
        var event = document.createEventObject();
        event.eventType = "ondataavailable";
      }

      event.eventName = eventName;
      event.memo = memo || { };

      
      if (document.createEvent) {
        element.dispatchEvent(event);
      } else {
        element.fireEvent(event.eventType, event);
      }

      return event;
    }
});

	/**
 * Javascript code to store data as JSON strings in cookies. 
 * It uses prototype.js 1.5.1 (http://www.prototypejs.org)
 * 
 * Author : Lalit Patel
 * Website: http://www.lalit.org/lab/jsoncookies
 * License: Creative Commons Attribution-ShareAlike 2.5
 *          http://creativecommons.org/licenses/by-sa/2.5/
 * Version: 0.4
 * Updated: Aug 11, 2007 10:09am
 * 
 * Chnage Log:
 *   v 0.4
 *   -  Removed a extra comma in options (was breaking in IE and Opera). (Thanks Jason)
 *   -  Removed the parameter name from the initialize function
 *   -  Changed the way expires date was being calculated. (Thanks David)
 *   v 0.3
 *   -  Removed dependancy on json.js (http://www.json.org/json.js)
 *   -  empty() function only deletes the cookies set by CookieJar
 */

var CookieJar = Class.create();

CookieJar.prototype = {

	/**
	 * Append before all cookie names to differntiate them.
	 */
	appendString: "__CJ_",

	/**
	 * Initializes the cookie jar with the options.
	 */
	initialize: function(options) {
		this.options = {
			expires: 3600,		// seconds (1 hr)
			path: '',			// cookie path
			domain: '',			// cookie domain
			secure: ''			// secure ?
		};
		Object.extend(this.options, options || {});

		if (this.options.expires != '') {
			var date = new Date();
			date = new Date(date.getTime() + (this.options.expires * 1000));
			this.options.expires = '; expires=' + date.toGMTString();
		}
		if (this.options.path != '') {
			this.options.path = '; path=' + escape(this.options.path);
		}
		if (this.options.domain != '') {
			this.options.domain = '; domain=' + escape(this.options.domain);
		}
		if (this.options.secure == 'secure') {
			this.options.secure = '; secure';
		} else {
			this.options.secure = '';
		}
	},

	/**
	 * Adds a name values pair.
	 */
	put: function(name, value) {
		name = this.appendString + name;
		cookie = this.options;
		var type = typeof value;
		switch(type) {
		  case 'undefined':
		  case 'function' :
		  case 'unknown'  : return false;
		  case 'boolean'  : 
		  case 'string'   : 
		  case 'number'   : value = String(value.toString());
		}
		var cookie_str = name + "=" + escape(Object.toJSON(value));
		try {
			document.cookie = cookie_str + cookie.expires + cookie.path + cookie.domain + cookie.secure;
		} catch (e) {
			return false;
		}
		return true;
	},

	/**
	 * Removes a particular cookie (name value pair) form the Cookie Jar.
	 */
	remove: function(name) {
		name = this.appendString + name;
		cookie = this.options;
		try {
			var date = new Date();
			date.setTime(date.getTime() - (3600 * 1000));
			var expires = '; expires=' + date.toGMTString();
			document.cookie = name + "=" + expires + cookie.path + cookie.domain + cookie.secure;
		} catch (e) {
			return false;
		}
		return true;
	},

	/**
	 * Return a particular cookie by name;
	 */
	get: function(name) {
		name = this.appendString + name;
		var cookies = document.cookie.match(name + '=(.*?)(;|$)');
		if (cookies) {
			return (unescape(cookies[1])).evalJSON();
		} else {
			return null;
		}
	},

	/**
	 * Empties the Cookie Jar. Deletes all the cookies.
	 */
	empty: function() {
		keys = this.getKeys();
		size = keys.size();
		for(i=0; i<size; i++) {
			this.remove(keys[i]);
		}
	},

	/**
	 * Returns all cookies as a single object
	 */
	getPack: function() {
		pack = {};
		keys = this.getKeys();

		size = keys.size();
		for(i=0; i<size; i++) {
			pack[keys[i]] = this.get(keys[i]);
		}
		return pack;
	},

	/**
	 * Returns all keys.
	 */
	getKeys: function() {
		keys = $A();
		keyRe= /[^=; ]+(?=\=)/g;
		str  = document.cookie;
		CJRe = new RegExp("^" + this.appendString);
		while((match = keyRe.exec(str)) != undefined) {
			if (CJRe.test(match[0].strip())) {
				keys.push(match[0].strip().gsub("^" + this.appendString,""));
			}
		}
		return keys;
	}
};

/**
 * @author Ryan Johnson <ryan@livepipe.net>
 * @copyright 2007 LivePipe LLC
 * @package Control.SelectMultiple
 * @license MIT
 * @url http://livepipe.net/projects/control_select_multiple/
 * @version 1.0.0
 */

if(typeof(Control) == 'undefined')
	var Control = {};
Control.SelectMultiple = Class.create();
Object.extend(Control.SelectMultiple.prototype,{
	select: false,
	container: false,
	numberOfCheckedBoxes: 0,
	checkboxes: [],
	hasExtraOption: false,
	initialize: function(select,container,options){
		this.options = {
			checkboxSelector: 'input[type=checkbox]',
			nameSelector: 'span.name',
			labelSeparator: ', ',
			valueSeparator: ',',
			afterChange: Prototype.emptyFunction,
			overflowString: function(str){
				return str.truncate();
			},
			overflowLength: 30
		};
		Object.extend(this.options,options || {});
		this.select = $(select);
		this.container =  $(container);
		this.checkboxes = (typeof(this.options.checkboxSelector) == 'function')
			? this.options.checkboxSelector.bind(this)()
			: this.container.getElementsBySelector(this.options.checkboxSelector)
		;
		var value_was_set = false;
		if(this.options.value){
			value_was_set = true;
			this.setValue(this.options.value);
			delete this.options.value;
		}
		this.hasExtraOption = false;
		this.checkboxes.each(function(checkbox){
			checkbox.observe('click',this.checkboxOnClick.bind(this,checkbox));
		}.bind(this));
		this.select.observe('change',this.selectOnChange.bind(this));
		this.countAndCheckCheckBoxes();
		if(!value_was_set)
			this.scanCheckBoxes();
		this.notify('afterChange',this.select.options[this.select.options.selectedIndex].value);
	},
	countAndCheckCheckBoxes: function(){
		this.numberOfCheckedBoxes = this.checkboxes.inject(0,function(number,checkbox){
			checkbox.checked = (this.select.options[this.select.options.selectedIndex].value == checkbox.value);
			if(checkbox.checked)
				++number;
			return number;
		}.bind(this));
	},
	setValue: function(value_string){
		this.numberOfCheckedBoxes = 0;
		(value_string.split ? value_string.split(this.options.valueSeparator) : value_string).each(function(value){
			this.checkboxes.each(function(checkbox){
				if(checkbox.value == value){
					++this.numberOfCheckedBoxes;
					checkbox.checked = true;
				}else
					checkbox.checked = false;
			}.bind(this));
		}.bind(this));
		this.scanCheckBoxes();
	},
	selectOnChange: function(){
		this.removeExtraOption();
		this.countAndCheckCheckBoxes();
		this.notify('afterChange',this.select.options[this.select.options.selectedIndex].value);
	},
	checkboxOnClick: function(checkbox){
		this.numberOfCheckedBoxes += (checkbox.checked) ? 1 : -1;
		this.scanCheckBoxes();
		this.notify('afterChange',this.select.options[this.select.options.selectedIndex].value);
	},
	scanCheckBoxes: function(){
		switch(this.numberOfCheckedBoxes){
			case 1:
				this.checkboxes.each(function(checkbox){
					if(checkbox.checked){
						$A(this.select.options).each(function(option,i){
							if(option.value == checkbox.value){
								this.select.options.selectedIndex = i;
								throw $break;
							}
						}.bind(this));
						throw $break;
					}
				}.bind(this));
			case 0:
				this.removeExtraOption();
				break;
			default:
				this.addExtraOption();
				break;
		};
	},
	getLabelForExtraOption: function(){
		var label = (typeof(this.options.nameSelector) == 'function' 
			? this.options.nameSelector.bind(this)()
			: this.container.getElementsBySelector(this.options.nameSelector).inject([],function(labels,name_element,i){
				if(this.checkboxes[i].checked)
					labels.push(name_element.innerHTML);
				return labels;
			}.bind(this))
		).join(this.options.labelSeparator);
		return (label.length >= this.options.overflowLength && this.options.overflowLength > 0)
			? (typeof(this.options.overflowString) == 'function' ? this.options.overflowString(label) : this.options.overflowString)
			: label
		;
	},
	getValueForExtraOption: function(){
		return this.checkboxes.inject([],function(values,checkbox){
			if(checkbox.checked)
				values.push(checkbox.value);
			return values;
		}).join(this.options.valueSeparator);
	},
	addExtraOption: function(){
		this.removeExtraOption();
		this.hasExtraOption = true;
		this.select.options[this.select.options.length] = new Option(this.getLabelForExtraOption(),this.getValueForExtraOption());
		this.select.options.selectedIndex = this.select.options.length - 1;
	},
	removeExtraOption: function(){
		if(this.hasExtraOption){
			this.select.remove(this.select.options.length - 1);
			this.hasExtraOption = false;
		}
	},
	notify: function(event_name){
		try{
			if(this.options[event_name])
				return [this.options[event_name].apply(this.options[event_name],$A(arguments).slice(1))];
		}catch(e){
			if(e != $break)
				throw e;
			else
				return false;
		}
	}
});
if(typeof(Object.Event) != 'undefined')
	Object.Event.extend(Control.SelectMultiple);
//*** This code is copyright 2004 by Gavin Kistner, gavin@refinery.com
//*** It is covered under the license viewable at http://phrogz.net/JS/_ReuseLicense.txt
//*** Reuse or modification is free provided you abide by the terms of that license.
//*** (Including the first two lines above in your source code mostly satisfies the conditions.)


// Rounds a number to a specified number of decimals (optional)
// Inserts the character of your choice as the thousands separator (optional)
// Uses the character of your choice for the decimals separator (optional)
//
// It's not a highly optimized speed demon, but it gives the right result...
// ...do you really care how speedy it is? :)
//
// !!Note!! IEWin gets (-0.007).format(2) WRONG, claiming that it's "0.00"
// This is a bug in IEWin's Number.toFixed() function.


Number.prototype.format=function(decimalPoints,thousandsSep,decimalSep){
	var val=this+'',re=/^(-?)(\d+)/,x,y;
	if (decimalPoints!=null) val = this.toFixed(decimalPoints);
	if (thousandsSep && (x=re.exec(val))){
		for (var a=x[2].split(''),i=a.length-3;i>0;i-=3) a.splice(i,0,thousandsSep);
		val=val.replace(re,x[1]+a.join(''));
	}
	if (decimalSep) val=val.replace(/\./,decimalSep);
	return val;
}
if (typeof Number.prototype.toFixed!='function' || (.9).toFixed()=='0' || (.007).toFixed(2)=='0.00') Number.prototype.toFixed=function(f){
	if (isNaN(f*=1) || f<0 || f>20) f=0;
	var s='',x=this.valueOf(),m='';
	if (this<0){ s='-'; x*=-1; }
	if (x>=Math.pow(10,21)) m=x.toString();
	else{
		m=Math.round(Math.pow(10,f)*x).toString();
		if (f!=0){
			var k=m.length;
			if (k<=f){
				var z='00000000000000000000'.substring(0,f+1-k);
				m=z+m;
				k=f+1;
			}
			var a = m.substring(0,k-f);
			var b = m.substring(k-f);
			m = a+'.'+b;
		}
	}
	if (m=='0') s='';
	return s+m;
}



// var x = 1234567.89532;
// x.format()                  => 1234567.89532
// x.format(2)                 => 1234567.90
// x.format(2,',')             => 1,234,567.90
// x.format(0,',')             => 1,234,568
// x.format(null,',')          => 1,234,567.89532
// x.format(null,' ',',')      => 1 234 567,89532
// x.format(2,' ',',')         => 1 234 567,90


	
	// script.aculo.us scriptaculous.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// 
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
// 
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//
// For details, see the script.aculo.us web site: http://script.aculo.us/

var Scriptaculous = {
  Version: '1.8.0',
  require: function(libraryName) {
    // inserting via DOM fails in Safari 2.0, so brute force approach
    document.write('<' + 'script type="text/javascript" src="'+libraryName+'"><\/script>');
  },
  REQUIRED_PROTOTYPE: '1.6.0',
  load: function() {
    function convertVersionString(versionString){
      var r = versionString.split('.');
      return parseInt(r[0])*100000 + parseInt(r[1])*1000 + parseInt(r[2]);
    }
 
    if((typeof Prototype=='undefined') || 
       (typeof Element == 'undefined') || 
       (typeof Element.Methods=='undefined') ||
       (convertVersionString(Prototype.Version) < 
        convertVersionString(Scriptaculous.REQUIRED_PROTOTYPE)))
       throw("script.aculo.us requires the Prototype JavaScript framework >= " +
        Scriptaculous.REQUIRED_PROTOTYPE);
    
    $A(document.getElementsByTagName("script")).findAll( function(s) {
      return (s.src && s.src.match(/scriptaculous\.js(\?.*)?$/))
    }).each( function(s) {
      var path = s.src.replace(/scriptaculous\.js(\?.*)?$/,'');
      var includes = s.src.match(/\?.*load=([a-z,]*)/);
      (includes ? includes[1] : 'builder,effects,dragdrop,controls,slider,sound').split(',').each(
       function(include) { Scriptaculous.require(path+include+'.js') });
    });
  }
}

Scriptaculous.load();
	// script.aculo.us effects.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
// Contributors:
//  Justin Palmer (http://encytemedia.com/)
//  Mark Pilgrim (http://diveintomark.org/)
//  Martin Bialasinki
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/ 

// converts rgb() and #xxx to #xxxxxx format,  
// returns self (or first argument) if not convertable  
String.prototype.parseColor = function() {  
  var color = '#';
  if (this.slice(0,4) == 'rgb(') {  
    var cols = this.slice(4,this.length-1).split(',');  
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
  } else {  
    if (this.slice(0,1) == '#') {  
      if (this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
      if (this.length==7) color = this.toLowerCase();  
    }  
  }  
  return (color.length==7 ? color : (arguments[0] || this));  
};

/*--------------------------------------------------------------------------*/

Element.collectTextNodes = function(element) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      (node.hasChildNodes() ? Element.collectTextNodes(node) : ''));
  }).flatten().join('');
};

Element.collectTextNodesIgnoreClass = function(element, className) {  
  return $A($(element).childNodes).collect( function(node) {
    return (node.nodeType==3 ? node.nodeValue : 
      ((node.hasChildNodes() && !Element.hasClassName(node,className)) ? 
        Element.collectTextNodesIgnoreClass(node, className) : ''));
  }).flatten().join('');
};

Element.setContentZoom = function(element, percent) {
  element = $(element);  
  element.setStyle({fontSize: (percent/100) + 'em'});   
  if (Prototype.Browser.WebKit) window.scrollBy(0,0);
  return element;
};

Element.getInlineOpacity = function(element){
  return $(element).style.opacity || '';
};

Element.forceRerendering = function(element) {
  try {
    element = $(element);
    var n = document.createTextNode(' ');
    element.appendChild(n);
    element.removeChild(n);
  } catch(e) { }
};

/*--------------------------------------------------------------------------*/

var Effect = {
  _elementDoesNotExistError: {
    name: 'ElementDoesNotExistError',
    message: 'The specified DOM element does not exist, but is required for this effect to operate'
  },
  Transitions: {
    linear: Prototype.K,
    sinoidal: function(pos) {
      return (-Math.cos(pos*Math.PI)/2) + 0.5;
    },
    reverse: function(pos) {
      return 1-pos;
    },
    flicker: function(pos) {
      var pos = ((-Math.cos(pos*Math.PI)/4) + 0.75) + Math.random()/4;
      return pos > 1 ? 1 : pos;
    },
    wobble: function(pos) {
      return (-Math.cos(pos*Math.PI*(9*pos))/2) + 0.5;
    },
    pulse: function(pos, pulses) { 
      pulses = pulses || 5; 
      return (
        ((pos % (1/pulses)) * pulses).round() == 0 ? 
              ((pos * pulses * 2) - (pos * pulses * 2).floor()) : 
          1 - ((pos * pulses * 2) - (pos * pulses * 2).floor())
        );
    },
    spring: function(pos) { 
      return 1 - (Math.cos(pos * 4.5 * Math.PI) * Math.exp(-pos * 6)); 
    },
    none: function(pos) {
      return 0;
    },
    full: function(pos) {
      return 1;
    }
  },
  DefaultOptions: {
    duration:   1.0,   // seconds
    fps:        100,   // 100= assume 66fps max.
    sync:       false, // true for combining
    from:       0.0,
    to:         1.0,
    delay:      0.0,
    queue:      'parallel'
  },
  tagifyText: function(element) {
    var tagifyStyle = 'position:relative';
    if (Prototype.Browser.IE) tagifyStyle += ';zoom:1';
    
    element = $(element);
    $A(element.childNodes).each( function(child) {
      if (child.nodeType==3) {
        child.nodeValue.toArray().each( function(character) {
          element.insertBefore(
            new Element('span', {style: tagifyStyle}).update(
              character == ' ' ? String.fromCharCode(160) : character), 
              child);
        });
        Element.remove(child);
      }
    });
  },
  multiple: function(element, effect) {
    var elements;
    if (((typeof element == 'object') || 
        Object.isFunction(element)) && 
       (element.length))
      elements = element;
    else
      elements = $(element).childNodes;
      
    var options = Object.extend({
      speed: 0.1,
      delay: 0.0
    }, arguments[2] || { });
    var masterDelay = options.delay;

    $A(elements).each( function(element, index) {
      new effect(element, Object.extend(options, { delay: index * options.speed + masterDelay }));
    });
  },
  PAIRS: {
    'slide':  ['SlideDown','SlideUp'],
    'blind':  ['BlindDown','BlindUp'],
    'appear': ['Appear','Fade']
  },
  toggle: function(element, effect) {
    element = $(element);
    effect = (effect || 'appear').toLowerCase();
    var options = Object.extend({
      queue: { position:'end', scope:(element.id || 'global'), limit: 1 }
    }, arguments[2] || { });
    Effect[element.visible() ? 
      Effect.PAIRS[effect][1] : Effect.PAIRS[effect][0]](element, options);
  }
};

Effect.DefaultOptions.transition = Effect.Transitions.sinoidal;

/* ------------- core effects ------------- */

Effect.ScopedQueue = Class.create(Enumerable, {
  initialize: function() {
    this.effects  = [];
    this.interval = null;    
  },
  _each: function(iterator) {
    this.effects._each(iterator);
  },
  add: function(effect) {
    var timestamp = new Date().getTime();
    
    var position = Object.isString(effect.options.queue) ? 
      effect.options.queue : effect.options.queue.position;
    
    switch(position) {
      case 'front':
        // move unstarted effects after this effect  
        this.effects.findAll(function(e){ return e.state=='idle' }).each( function(e) {
            e.startOn  += effect.finishOn;
            e.finishOn += effect.finishOn;
          });
        break;
      case 'with-last':
        timestamp = this.effects.pluck('startOn').max() || timestamp;
        break;
      case 'end':
        // start effect after last queued effect has finished
        timestamp = this.effects.pluck('finishOn').max() || timestamp;
        break;
    }
    
    effect.startOn  += timestamp;
    effect.finishOn += timestamp;

    if (!effect.options.queue.limit || (this.effects.length < effect.options.queue.limit))
      this.effects.push(effect);
    
    if (!this.interval)
      this.interval = setInterval(this.loop.bind(this), 15);
  },
  remove: function(effect) {
    this.effects = this.effects.reject(function(e) { return e==effect });
    if (this.effects.length == 0) {
      clearInterval(this.interval);
      this.interval = null;
    }
  },
  loop: function() {
    var timePos = new Date().getTime();
    for(var i=0, len=this.effects.length;i<len;i++) 
      this.effects[i] && this.effects[i].loop(timePos);
  }
});

Effect.Queues = {
  instances: $H(),
  get: function(queueName) {
    if (!Object.isString(queueName)) return queueName;
    
    return this.instances.get(queueName) ||
      this.instances.set(queueName, new Effect.ScopedQueue());
  }
};
Effect.Queue = Effect.Queues.get('global');

Effect.Base = Class.create({
  position: null,
  start: function(options) {
    function codeForEvent(options,eventName){
      return (
        (options[eventName+'Internal'] ? 'this.options.'+eventName+'Internal(this);' : '') +
        (options[eventName] ? 'this.options.'+eventName+'(this);' : '')
      );
    }
    if (options && options.transition === false) options.transition = Effect.Transitions.linear;
    this.options      = Object.extend(Object.extend({ },Effect.DefaultOptions), options || { });
    this.currentFrame = 0;
    this.state        = 'idle';
    this.startOn      = this.options.delay*1000;
    this.finishOn     = this.startOn+(this.options.duration*1000);
    this.fromToDelta  = this.options.to-this.options.from;
    this.totalTime    = this.finishOn-this.startOn;
    this.totalFrames  = this.options.fps*this.options.duration;
    
    eval('this.render = function(pos){ '+
      'if (this.state=="idle"){this.state="running";'+
      codeForEvent(this.options,'beforeSetup')+
      (this.setup ? 'this.setup();':'')+ 
      codeForEvent(this.options,'afterSetup')+
      '};if (this.state=="running"){'+
      'pos=this.options.transition(pos)*'+this.fromToDelta+'+'+this.options.from+';'+
      'this.position=pos;'+
      codeForEvent(this.options,'beforeUpdate')+
      (this.update ? 'this.update(pos);':'')+
      codeForEvent(this.options,'afterUpdate')+
      '}}');
    
    this.event('beforeStart');
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ? 
        'global' : this.options.queue.scope).add(this);
  },
  loop: function(timePos) {
    if (timePos >= this.startOn) {
      if (timePos >= this.finishOn) {
        this.render(1.0);
        this.cancel();
        this.event('beforeFinish');
        if (this.finish) this.finish(); 
        this.event('afterFinish');
        return;  
      }
      var pos   = (timePos - this.startOn) / this.totalTime,
          frame = (pos * this.totalFrames).round();
      if (frame > this.currentFrame) {
        this.render(pos);
        this.currentFrame = frame;
      }
    }
  },
  cancel: function() {
    if (!this.options.sync)
      Effect.Queues.get(Object.isString(this.options.queue) ? 
        'global' : this.options.queue.scope).remove(this);
    this.state = 'finished';
  },
  event: function(eventName) {
    if (this.options[eventName + 'Internal']) this.options[eventName + 'Internal'](this);
    if (this.options[eventName]) this.options[eventName](this);
  },
  inspect: function() {
    var data = $H();
    for(property in this)
      if (!Object.isFunction(this[property])) data.set(property, this[property]);
    return '#<Effect:' + data.inspect() + ',options:' + $H(this.options).inspect() + '>';
  }
});

Effect.Parallel = Class.create(Effect.Base, {
  initialize: function(effects) {
    this.effects = effects || [];
    this.start(arguments[1]);
  },
  update: function(position) {
    this.effects.invoke('render', position);
  },
  finish: function(position) {
    this.effects.each( function(effect) {
      effect.render(1.0);
      effect.cancel();
      effect.event('beforeFinish');
      if (effect.finish) effect.finish(position);
      effect.event('afterFinish');
    });
  }
});

Effect.Tween = Class.create(Effect.Base, {
  initialize: function(object, from, to) {
    object = Object.isString(object) ? $(object) : object;
    var args = $A(arguments), method = args.last(), 
      options = args.length == 5 ? args[3] : null;
    this.method = Object.isFunction(method) ? method.bind(object) :
      Object.isFunction(object[method]) ? object[method].bind(object) : 
      function(value) { object[method] = value };
    this.start(Object.extend({ from: from, to: to }, options || { }));
  },
  update: function(position) {
    this.method(position);
  }
});

Effect.Event = Class.create(Effect.Base, {
  initialize: function() {
    this.start(Object.extend({ duration: 0 }, arguments[0] || { }));
  },
  update: Prototype.emptyFunction
});

Effect.Opacity = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    // make this work on IE on elements without 'layout'
    if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
      this.element.setStyle({zoom: 1});
    var options = Object.extend({
      from: this.element.getOpacity() || 0.0,
      to:   1.0
    }, arguments[1] || { });
    this.start(options);
  },
  update: function(position) {
    this.element.setOpacity(position);
  }
});

Effect.Move = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      x:    0,
      y:    0,
      mode: 'relative'
    }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    this.element.makePositioned();
    this.originalLeft = parseFloat(this.element.getStyle('left') || '0');
    this.originalTop  = parseFloat(this.element.getStyle('top')  || '0');
    if (this.options.mode == 'absolute') {
      this.options.x = this.options.x - this.originalLeft;
      this.options.y = this.options.y - this.originalTop;
    }
  },
  update: function(position) {
    this.element.setStyle({
      left: (this.options.x  * position + this.originalLeft).round() + 'px',
      top:  (this.options.y  * position + this.originalTop).round()  + 'px'
    });
  }
});

// for backwards compatibility
Effect.MoveBy = function(element, toTop, toLeft) {
  return new Effect.Move(element, 
    Object.extend({ x: toLeft, y: toTop }, arguments[3] || { }));
};

Effect.Scale = Class.create(Effect.Base, {
  initialize: function(element, percent) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      scaleX: true,
      scaleY: true,
      scaleContent: true,
      scaleFromCenter: false,
      scaleMode: 'box',        // 'box' or 'contents' or { } with provided values
      scaleFrom: 100.0,
      scaleTo:   percent
    }, arguments[2] || { });
    this.start(options);
  },
  setup: function() {
    this.restoreAfterFinish = this.options.restoreAfterFinish || false;
    this.elementPositioning = this.element.getStyle('position');
    
    this.originalStyle = { };
    ['top','left','width','height','fontSize'].each( function(k) {
      this.originalStyle[k] = this.element.style[k];
    }.bind(this));
      
    this.originalTop  = this.element.offsetTop;
    this.originalLeft = this.element.offsetLeft;
    
    var fontSize = this.element.getStyle('font-size') || '100%';
    ['em','px','%','pt'].each( function(fontSizeType) {
      if (fontSize.indexOf(fontSizeType)>0) {
        this.fontSize     = parseFloat(fontSize);
        this.fontSizeType = fontSizeType;
      }
    }.bind(this));
    
    this.factor = (this.options.scaleTo - this.options.scaleFrom)/100;
    
    this.dims = null;
    if (this.options.scaleMode=='box')
      this.dims = [this.element.offsetHeight, this.element.offsetWidth];
    if (/^content/.test(this.options.scaleMode))
      this.dims = [this.element.scrollHeight, this.element.scrollWidth];
    if (!this.dims)
      this.dims = [this.options.scaleMode.originalHeight,
                   this.options.scaleMode.originalWidth];
  },
  update: function(position) {
    var currentScale = (this.options.scaleFrom/100.0) + (this.factor * position);
    if (this.options.scaleContent && this.fontSize)
      this.element.setStyle({fontSize: this.fontSize * currentScale + this.fontSizeType });
    this.setDimensions(this.dims[0] * currentScale, this.dims[1] * currentScale);
  },
  finish: function(position) {
    if (this.restoreAfterFinish) this.element.setStyle(this.originalStyle);
  },
  setDimensions: function(height, width) {
    var d = { };
    if (this.options.scaleX) d.width = width.round() + 'px';
    if (this.options.scaleY) d.height = height.round() + 'px';
    if (this.options.scaleFromCenter) {
      var topd  = (height - this.dims[0])/2;
      var leftd = (width  - this.dims[1])/2;
      if (this.elementPositioning == 'absolute') {
        if (this.options.scaleY) d.top = this.originalTop-topd + 'px';
        if (this.options.scaleX) d.left = this.originalLeft-leftd + 'px';
      } else {
        if (this.options.scaleY) d.top = -topd + 'px';
        if (this.options.scaleX) d.left = -leftd + 'px';
      }
    }
    this.element.setStyle(d);
  }
});

Effect.Highlight = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({ startcolor: '#ffff99' }, arguments[1] || { });
    this.start(options);
  },
  setup: function() {
    // Prevent executing on elements not in the layout flow
    if (this.element.getStyle('display')=='none') { this.cancel(); return; }
    // Disable background image during the effect
    this.oldStyle = { };
    if (!this.options.keepBackgroundImage) {
      this.oldStyle.backgroundImage = this.element.getStyle('background-image');
      this.element.setStyle({backgroundImage: 'none'});
    }
    if (!this.options.endcolor)
      this.options.endcolor = this.element.getStyle('background-color').parseColor('#ffffff');
    if (!this.options.restorecolor)
      this.options.restorecolor = this.element.getStyle('background-color');
    // init color calculations
    this._base  = $R(0,2).map(function(i){ return parseInt(this.options.startcolor.slice(i*2+1,i*2+3),16) }.bind(this));
    this._delta = $R(0,2).map(function(i){ return parseInt(this.options.endcolor.slice(i*2+1,i*2+3),16)-this._base[i] }.bind(this));
  },
  update: function(position) {
    this.element.setStyle({backgroundColor: $R(0,2).inject('#',function(m,v,i){
      return m+((this._base[i]+(this._delta[i]*position)).round().toColorPart()); }.bind(this)) });
  },
  finish: function() {
    this.element.setStyle(Object.extend(this.oldStyle, {
      backgroundColor: this.options.restorecolor
    }));
  }
});

Effect.ScrollTo = function(element) {
  var options = arguments[1] || { },
    scrollOffsets = document.viewport.getScrollOffsets(),
    elementOffsets = $(element).cumulativeOffset(),
    max = (window.height || document.body.scrollHeight) - document.viewport.getHeight();  

  if (options.offset) elementOffsets[1] += options.offset;

  return new Effect.Tween(null,
    scrollOffsets.top,
    elementOffsets[1] > max ? max : elementOffsets[1],
    options,
    function(p){ scrollTo(scrollOffsets.left, p.round()) }
  );
};

/* ------------- combination effects ------------- */

Effect.Fade = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  var options = Object.extend({
    from: element.getOpacity() || 1.0,
    to:   0.0,
    afterFinishInternal: function(effect) { 
      if (effect.options.to!=0) return;
      effect.element.hide().setStyle({opacity: oldOpacity}); 
    }
  }, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Appear = function(element) {
  element = $(element);
  var options = Object.extend({
  from: (element.getStyle('display') == 'none' ? 0.0 : element.getOpacity() || 0.0),
  to:   1.0,
  // force Safari to render floated elements properly
  afterFinishInternal: function(effect) {
    effect.element.forceRerendering();
  },
  beforeSetup: function(effect) {
    effect.element.setOpacity(effect.options.from).show(); 
  }}, arguments[1] || { });
  return new Effect.Opacity(element,options);
};

Effect.Puff = function(element) {
  element = $(element);
  var oldStyle = { 
    opacity: element.getInlineOpacity(), 
    position: element.getStyle('position'),
    top:  element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height
  };
  return new Effect.Parallel(
   [ new Effect.Scale(element, 200, 
      { sync: true, scaleFromCenter: true, scaleContent: true, restoreAfterFinish: true }), 
     new Effect.Opacity(element, { sync: true, to: 0.0 } ) ], 
     Object.extend({ duration: 1.0, 
      beforeSetupInternal: function(effect) {
        Position.absolutize(effect.effects[0].element)
      },
      afterFinishInternal: function(effect) {
         effect.effects[0].element.hide().setStyle(oldStyle); }
     }, arguments[1] || { })
   );
};

Effect.BlindUp = function(element) {
  element = $(element);
  element.makeClipping();
  return new Effect.Scale(element, 0,
    Object.extend({ scaleContent: false, 
      scaleX: false, 
      restoreAfterFinish: true,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping();
      } 
    }, arguments[1] || { })
  );
};

Effect.BlindDown = function(element) {
  element = $(element);
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false,
    scaleFrom: 0,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.undoClipping();
    }
  }, arguments[1] || { }));
};

Effect.SwitchOff = function(element) {
  element = $(element);
  var oldOpacity = element.getInlineOpacity();
  return new Effect.Appear(element, Object.extend({
    duration: 0.4,
    from: 0,
    transition: Effect.Transitions.flicker,
    afterFinishInternal: function(effect) {
      new Effect.Scale(effect.element, 1, { 
        duration: 0.3, scaleFromCenter: true,
        scaleX: false, scaleContent: false, restoreAfterFinish: true,
        beforeSetup: function(effect) { 
          effect.element.makePositioned().makeClipping();
        },
        afterFinishInternal: function(effect) {
          effect.element.hide().undoClipping().undoPositioned().setStyle({opacity: oldOpacity});
        }
      })
    }
  }, arguments[1] || { }));
};

Effect.DropOut = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left'),
    opacity: element.getInlineOpacity() };
  return new Effect.Parallel(
    [ new Effect.Move(element, {x: 0, y: 100, sync: true }), 
      new Effect.Opacity(element, { sync: true, to: 0.0 }) ],
    Object.extend(
      { duration: 0.5,
        beforeSetup: function(effect) {
          effect.effects[0].element.makePositioned(); 
        },
        afterFinishInternal: function(effect) {
          effect.effects[0].element.hide().undoPositioned().setStyle(oldStyle);
        } 
      }, arguments[1] || { }));
};

Effect.Shake = function(element) {
  element = $(element);
  var options = Object.extend({
    distance: 20,
    duration: 0.5
  }, arguments[1] || {});
  var distance = parseFloat(options.distance);
  var split = parseFloat(options.duration) / 10.0;
  var oldStyle = {
    top: element.getStyle('top'),
    left: element.getStyle('left') };
    return new Effect.Move(element,
      { x:  distance, y: 0, duration: split, afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x:  distance*2, y: 0, duration: split*2,  afterFinishInternal: function(effect) {
    new Effect.Move(effect.element,
      { x: -distance, y: 0, duration: split, afterFinishInternal: function(effect) {
        effect.element.undoPositioned().setStyle(oldStyle);
  }}) }}) }}) }}) }}) }});
};

Effect.SlideDown = function(element) {
  element = $(element).cleanWhitespace();
  // SlideDown need to have the content of the element wrapped in a container element with fixed height!
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, 100, Object.extend({ 
    scaleContent: false, 
    scaleX: false, 
    scaleFrom: window.opera ? 0 : 1,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().setStyle({height: '0px'}).show(); 
    },
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' }); 
    },
    afterFinishInternal: function(effect) {
      effect.element.undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom}); }
    }, arguments[1] || { })
  );
};

Effect.SlideUp = function(element) {
  element = $(element).cleanWhitespace();
  var oldInnerBottom = element.down().getStyle('bottom');
  var elementDimensions = element.getDimensions();
  return new Effect.Scale(element, window.opera ? 0 : 1,
   Object.extend({ scaleContent: false, 
    scaleX: false, 
    scaleMode: 'box',
    scaleFrom: 100,
    scaleMode: {originalHeight: elementDimensions.height, originalWidth: elementDimensions.width},
    restoreAfterFinish: true,
    afterSetup: function(effect) {
      effect.element.makePositioned();
      effect.element.down().makePositioned();
      if (window.opera) effect.element.setStyle({top: ''});
      effect.element.makeClipping().show();
    },  
    afterUpdateInternal: function(effect) {
      effect.element.down().setStyle({bottom:
        (effect.dims[0] - effect.element.clientHeight) + 'px' });
    },
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping().undoPositioned();
      effect.element.down().undoPositioned().setStyle({bottom: oldInnerBottom});
    }
   }, arguments[1] || { })
  );
};

// Bug in opera makes the TD containing this element expand for a instance after finish 
Effect.Squish = function(element) {
  return new Effect.Scale(element, window.opera ? 1 : 0, { 
    restoreAfterFinish: true,
    beforeSetup: function(effect) {
      effect.element.makeClipping(); 
    },  
    afterFinishInternal: function(effect) {
      effect.element.hide().undoClipping(); 
    }
  });
};

Effect.Grow = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.full
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();    
  var initialMoveX, initialMoveY;
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      initialMoveX = initialMoveY = moveX = moveY = 0; 
      break;
    case 'top-right':
      initialMoveX = dims.width;
      initialMoveY = moveY = 0;
      moveX = -dims.width;
      break;
    case 'bottom-left':
      initialMoveX = moveX = 0;
      initialMoveY = dims.height;
      moveY = -dims.height;
      break;
    case 'bottom-right':
      initialMoveX = dims.width;
      initialMoveY = dims.height;
      moveX = -dims.width;
      moveY = -dims.height;
      break;
    case 'center':
      initialMoveX = dims.width / 2;
      initialMoveY = dims.height / 2;
      moveX = -dims.width / 2;
      moveY = -dims.height / 2;
      break;
  }
  
  return new Effect.Move(element, {
    x: initialMoveX,
    y: initialMoveY,
    duration: 0.01, 
    beforeSetup: function(effect) {
      effect.element.hide().makeClipping().makePositioned();
    },
    afterFinishInternal: function(effect) {
      new Effect.Parallel(
        [ new Effect.Opacity(effect.element, { sync: true, to: 1.0, from: 0.0, transition: options.opacityTransition }),
          new Effect.Move(effect.element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition }),
          new Effect.Scale(effect.element, 100, {
            scaleMode: { originalHeight: dims.height, originalWidth: dims.width }, 
            sync: true, scaleFrom: window.opera ? 1 : 0, transition: options.scaleTransition, restoreAfterFinish: true})
        ], Object.extend({
             beforeSetup: function(effect) {
               effect.effects[0].element.setStyle({height: '0px'}).show(); 
             },
             afterFinishInternal: function(effect) {
               effect.effects[0].element.undoClipping().undoPositioned().setStyle(oldStyle); 
             }
           }, options)
      )
    }
  });
};

Effect.Shrink = function(element) {
  element = $(element);
  var options = Object.extend({
    direction: 'center',
    moveTransition: Effect.Transitions.sinoidal,
    scaleTransition: Effect.Transitions.sinoidal,
    opacityTransition: Effect.Transitions.none
  }, arguments[1] || { });
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    height: element.style.height,
    width: element.style.width,
    opacity: element.getInlineOpacity() };

  var dims = element.getDimensions();
  var moveX, moveY;
  
  switch (options.direction) {
    case 'top-left':
      moveX = moveY = 0;
      break;
    case 'top-right':
      moveX = dims.width;
      moveY = 0;
      break;
    case 'bottom-left':
      moveX = 0;
      moveY = dims.height;
      break;
    case 'bottom-right':
      moveX = dims.width;
      moveY = dims.height;
      break;
    case 'center':  
      moveX = dims.width / 2;
      moveY = dims.height / 2;
      break;
  }
  
  return new Effect.Parallel(
    [ new Effect.Opacity(element, { sync: true, to: 0.0, from: 1.0, transition: options.opacityTransition }),
      new Effect.Scale(element, window.opera ? 1 : 0, { sync: true, transition: options.scaleTransition, restoreAfterFinish: true}),
      new Effect.Move(element, { x: moveX, y: moveY, sync: true, transition: options.moveTransition })
    ], Object.extend({            
         beforeStartInternal: function(effect) {
           effect.effects[0].element.makePositioned().makeClipping(); 
         },
         afterFinishInternal: function(effect) {
           effect.effects[0].element.hide().undoClipping().undoPositioned().setStyle(oldStyle); }
       }, options)
  );
};

Effect.Pulsate = function(element) {
  element = $(element);
  var options    = arguments[1] || { };
  var oldOpacity = element.getInlineOpacity();
  var transition = options.transition || Effect.Transitions.sinoidal;
  var reverser   = function(pos){ return transition(1-Effect.Transitions.pulse(pos, options.pulses)) };
  reverser.bind(transition);
  return new Effect.Opacity(element, 
    Object.extend(Object.extend({  duration: 2.0, from: 0,
      afterFinishInternal: function(effect) { effect.element.setStyle({opacity: oldOpacity}); }
    }, options), {transition: reverser}));
};

Effect.Fold = function(element) {
  element = $(element);
  var oldStyle = {
    top: element.style.top,
    left: element.style.left,
    width: element.style.width,
    height: element.style.height };
  element.makeClipping();
  return new Effect.Scale(element, 5, Object.extend({   
    scaleContent: false,
    scaleX: false,
    afterFinishInternal: function(effect) {
    new Effect.Scale(element, 1, { 
      scaleContent: false, 
      scaleY: false,
      afterFinishInternal: function(effect) {
        effect.element.hide().undoClipping().setStyle(oldStyle);
      } });
  }}, arguments[1] || { }));
};

Effect.Morph = Class.create(Effect.Base, {
  initialize: function(element) {
    this.element = $(element);
    if (!this.element) throw(Effect._elementDoesNotExistError);
    var options = Object.extend({
      style: { }
    }, arguments[1] || { });
    
    if (!Object.isString(options.style)) this.style = $H(options.style);
    else {
      if (options.style.include(':'))
        this.style = options.style.parseStyle();
      else {
        this.element.addClassName(options.style);
        this.style = $H(this.element.getStyles());
        this.element.removeClassName(options.style);
        var css = this.element.getStyles();
        this.style = this.style.reject(function(style) {
          return style.value == css[style.key];
        });
        options.afterFinishInternal = function(effect) {
          effect.element.addClassName(effect.options.style);
          effect.transforms.each(function(transform) {
            effect.element.style[transform.style] = '';
          });
        }
      }
    }
    this.start(options);
  },
  
  setup: function(){
    function parseColor(color){
      if (!color || ['rgba(0, 0, 0, 0)','transparent'].include(color)) color = '#ffffff';
      color = color.parseColor();
      return $R(0,2).map(function(i){
        return parseInt( color.slice(i*2+1,i*2+3), 16 ) 
      });
    }
    this.transforms = this.style.map(function(pair){
      var property = pair[0], value = pair[1], unit = null;

      if (value.parseColor('#zzzzzz') != '#zzzzzz') {
        value = value.parseColor();
        unit  = 'color';
      } else if (property == 'opacity') {
        value = parseFloat(value);
        if (Prototype.Browser.IE && (!this.element.currentStyle.hasLayout))
          this.element.setStyle({zoom: 1});
      } else if (Element.CSS_LENGTH.test(value)) {
          var components = value.match(/^([\+\-]?[0-9\.]+)(.*)$/);
          value = parseFloat(components[1]);
          unit = (components.length == 3) ? components[2] : null;
      }

      var originalValue = this.element.getStyle(property);
      return { 
        style: property.camelize(), 
        originalValue: unit=='color' ? parseColor(originalValue) : parseFloat(originalValue || 0), 
        targetValue: unit=='color' ? parseColor(value) : value,
        unit: unit
      };
    }.bind(this)).reject(function(transform){
      return (
        (transform.originalValue == transform.targetValue) ||
        (
          transform.unit != 'color' &&
          (isNaN(transform.originalValue) || isNaN(transform.targetValue))
        )
      )
    });
  },
  update: function(position) {
    var style = { }, transform, i = this.transforms.length;
    while(i--)
      style[(transform = this.transforms[i]).style] = 
        transform.unit=='color' ? '#'+
          (Math.round(transform.originalValue[0]+
            (transform.targetValue[0]-transform.originalValue[0])*position)).toColorPart() +
          (Math.round(transform.originalValue[1]+
            (transform.targetValue[1]-transform.originalValue[1])*position)).toColorPart() +
          (Math.round(transform.originalValue[2]+
            (transform.targetValue[2]-transform.originalValue[2])*position)).toColorPart() :
        (transform.originalValue +
          (transform.targetValue - transform.originalValue) * position).toFixed(3) + 
            (transform.unit === null ? '' : transform.unit);
    this.element.setStyle(style, true);
  }
});

Effect.Transform = Class.create({
  initialize: function(tracks){
    this.tracks  = [];
    this.options = arguments[1] || { };
    this.addTracks(tracks);
  },
  addTracks: function(tracks){
    tracks.each(function(track){
      track = $H(track);
      var data = track.values().first();
      this.tracks.push($H({
        ids:     track.keys().first(),
        effect:  Effect.Morph,
        options: { style: data }
      }));
    }.bind(this));
    return this;
  },
  play: function(){
    return new Effect.Parallel(
      this.tracks.map(function(track){
        var ids = track.get('ids'), effect = track.get('effect'), options = track.get('options');
        var elements = [$(ids) || $$(ids)].flatten();
        return elements.map(function(e){ return new effect(e, Object.extend({ sync:true }, options)) });
      }).flatten(),
      this.options
    );
  }
});

Element.CSS_PROPERTIES = $w(
  'backgroundColor backgroundPosition borderBottomColor borderBottomStyle ' + 
  'borderBottomWidth borderLeftColor borderLeftStyle borderLeftWidth ' +
  'borderRightColor borderRightStyle borderRightWidth borderSpacing ' +
  'borderTopColor borderTopStyle borderTopWidth bottom clip color ' +
  'fontSize fontWeight height left letterSpacing lineHeight ' +
  'marginBottom marginLeft marginRight marginTop markerOffset maxHeight '+
  'maxWidth minHeight minWidth opacity outlineColor outlineOffset ' +
  'outlineWidth paddingBottom paddingLeft paddingRight paddingTop ' +
  'right textIndent top width wordSpacing zIndex');
  
Element.CSS_LENGTH = /^(([\+\-]?[0-9\.]+)(em|ex|px|in|cm|mm|pt|pc|\%))|0$/;

String.__parseStyleElement = document.createElement('div');
String.prototype.parseStyle = function(){
  var style, styleRules = $H();
  if (Prototype.Browser.WebKit)
    style = new Element('div',{style:this}).style;
  else {
    String.__parseStyleElement.innerHTML = '<div style="' + this + '"></div>';
    style = String.__parseStyleElement.childNodes[0].style;
  }
  
  Element.CSS_PROPERTIES.each(function(property){
    if (style[property]) styleRules.set(property, style[property]); 
  });
  
  if (Prototype.Browser.IE && this.include('opacity'))
    styleRules.set('opacity', this.match(/opacity:\s*((?:0|1)?(?:\.\d*)?)/)[1]);

  return styleRules;
};

if (document.defaultView && document.defaultView.getComputedStyle) {
  Element.getStyles = function(element) {
    var css = document.defaultView.getComputedStyle($(element), null);
    return Element.CSS_PROPERTIES.inject({ }, function(styles, property) {
      styles[property] = css[property];
      return styles;
    });
  };
} else {
  Element.getStyles = function(element) {
    element = $(element);
    var css = element.currentStyle, styles;
    styles = Element.CSS_PROPERTIES.inject({ }, function(hash, property) {
      hash.set(property, css[property]);
      return hash;
    });
    if (!styles.opacity) styles.set('opacity', element.getOpacity());
    return styles;
  };
};

Effect.Methods = {
  morph: function(element, style) {
    element = $(element);
    new Effect.Morph(element, Object.extend({ style: style }, arguments[2] || { }));
    return element;
  },
  visualEffect: function(element, effect, options) {
    element = $(element)
    var s = effect.dasherize().camelize(), klass = s.charAt(0).toUpperCase() + s.substring(1);
    new Effect[klass](element, options);
    return element;
  },
  highlight: function(element, options) {
    element = $(element);
    new Effect.Highlight(element, options);
    return element;
  }
};

$w('fade appear grow shrink fold blindUp blindDown slideUp slideDown '+
  'pulsate shake puff squish switchOff dropOut').each(
  function(effect) { 
    Effect.Methods[effect] = function(element, options){
      element = $(element);
      Effect[effect.charAt(0).toUpperCase() + effect.substring(1)](element, options);
      return element;
    }
  }
);

$w('getInlineOpacity forceRerendering setContentZoom collectTextNodes collectTextNodesIgnoreClass getStyles').each( 
  function(f) { Effect.Methods[f] = Element[f]; }
);

Element.addMethods(Effect.Methods);


	
	// -----------------------------------------------------------------------------------
//
//	Lightbox v2.02
//	by Lokesh Dhakar - http://www.huddletogether.com
//	3/31/06
//
//	For more information on this script, visit:
//	http://huddletogether.com/projects/lightbox2/
//
//	Licensed under the Creative Commons Attribution 2.5 License - http://creativecommons.org/licenses/by/2.5/
//	
//	Credit also due to those who have helped, inspired, and made their code available to the public.
//	Including: Scott Upton(uptonic.com), Peter-Paul Koch(quirksmode.org), Thomas Fuchs(mir.aculo.us), and others.
//
//
// -----------------------------------------------------------------------------------
/*

	Table of Contents
	-----------------
	Configuration
	Global Variables

	Extending Built-in Objects	
	- Object.extend(Element)
	- Array.prototype.removeDuplicates()
	- Array.prototype.empty()

	Lightbox Class Declaration
	- initialize()
	- start()
	- changeImage()
	- resizeImageContainer()
	- showImage()
	- updateDetails()
	- updateNav()
	- enableKeyboardNav()
	- disableKeyboardNav()
	- keyboardAction()
	- preloadNeighborImages()
	- end()
	
	Miscellaneous Functions
	- getPageScroll()
	- getPageSize()
	- getKey()
	- listenKey()
	- showSelectBoxes()
	- hideSelectBoxes()
	- pause()
	- initLightbox()
	
	Function Calls
	- addLoadEvent(initLightbox)
	
*/
// -----------------------------------------------------------------------------------

//
//	Configuration
//
var fileLoadingImage = "/images/loading.gif";		
var fileBottomNavCloseImage = "/images/closelabel.gif";

var resizeSpeed = 7;	// controls the speed of the image resizing (1=slowest and 10=fastest)

var borderSize = 10;	//if you adjust the padding in the CSS, you will need to update this variable

// -----------------------------------------------------------------------------------

//
//	Global Variables
//
var imageArray = new Array;
var activeImage;

if(resizeSpeed > 10){ resizeSpeed = 10;}
if(resizeSpeed < 1){ resizeSpeed = 1;}
resizeDuration = (11 - resizeSpeed) * 0.15;

// -----------------------------------------------------------------------------------

//
//	Additional methods for Element added by SU, Couloir
//	- further additions by Lokesh Dhakar (huddletogether.com)
//
Object.extend(Element, {
	getWidth: function(element) {
	   	element = $(element);
	   	return element.offsetWidth; 
	},
	setWidth: function(element,w) {
	   	element = $(element);
    	element.style.width = w +"px";
	},
	setHeight: function(element,h) {
   		element = $(element);
    	element.style.height = h +"px";
	},
	setTop: function(element,t) {
	   	element = $(element);
    	element.style.top = t +"px";
	},
	setSrc: function(element,src) {
    	element = $(element);
    	element.src = src; 
	},
	setHref: function(element,href) {
    	element = $(element);
    	element.href = href; 
	},
/*	setInnerHTML: function(element,content) {
		element = $(element);
		element.innerHTML = content;
	}*/
	setInnerHTML: function(element,content) {
		$(element).update(content);
	}
});

// -----------------------------------------------------------------------------------

//
//	Extending built-in Array object
//	- array.removeDuplicates()
//	- array.empty()
//
Array.prototype.removeDuplicates = function () {
	for(i = 1; i < this.length; i++){
		if(this[i][0] == this[i-1][0]){
			this.splice(i,1);
		}
	}
}

// -----------------------------------------------------------------------------------

Array.prototype.empty = function () {
	for(i = 0; i <= this.length; i++){
		this.shift();
	}
}

// -----------------------------------------------------------------------------------

//
//	Lightbox Class Declaration
//	- initialize()
//	- start()
//	- changeImage()
//	- resizeImageContainer()
//	- showImage()
//	- updateDetails()
//	- updateNav()
//	- enableKeyboardNav()
//	- disableKeyboardNav()
//	- keyboardNavAction()
//	- preloadNeighborImages()
//	- end()
//
//	Structuring of code inspired by Scott Upton (http://www.uptonic.com/)
//
var Lightbox = Class.create();

Lightbox.prototype = {
	
	// initialize()
	// Constructor runs on completion of the DOM loading. Loops through anchor tags looking for 
	// 'lightbox' references and applies onclick events to appropriate links. The 2nd section of
	// the function inserts html at the bottom of the page which is used to display the shadow 
	// overlay and the image container.
	//
	initialize: function() {	
		if (!document.getElementsByTagName){ return; }
		var anchors = document.getElementsByTagName('a');

		// loop through all anchor tags
		for (var i=0; i<anchors.length; i++){
			var anchor = anchors[i];
			
			var relAttribute = String(anchor.getAttribute('rel'));
			
			// use the string.match() method to catch 'lightbox' references in the rel attribute
			if (anchor.getAttribute('href') && (relAttribute.toLowerCase().match('lightbox'))){
				anchor.onclick = function (e) {
					myLightbox.start(this); 
					if (!e) var e = window.event;
					e.cancelBubble = true;
					if (e.stopPropagation) e.stopPropagation();
					return false;
				}
			}
		}

		// The rest of this code inserts html at the bottom of the page that looks similar to this:
		//
		//	<div id="overlay"></div>
		//	<div id="lightbox">
		//		<div id="outerImageContainer">
		//			<div id="imageContainer">
		//				<img id="lightboxImage">
		//				<div style="" id="hoverNav">
		//					<a href="#" id="prevLink"></a>
		//					<a href="#" id="nextLink"></a>
		//				</div>
		//				<div id="loading">
		//					<a href="#" id="loadingLink">
		//						<img src="/images/loading.gif">
		//					</a>
		//				</div>
		//			</div>
		//		</div>
		//		<div id="imageDataContainer">
		//			<div id="imageData">
		//				<div id="imageDetails">
		//					<span id="caption"></span>
		//					<span id="numberDisplay"></span>
		//				</div>
		//				<div id="bottomNav">
		//					<a href="#" id="bottomNavClose">
		//						<img src="/images/close.gif">
		//					</a>
		//				</div>
		//			</div>
		//		</div>
		//	</div>


		var objBody = document.getElementsByTagName("body").item(0);
		
		var objOverlay = document.createElement("div");
		objOverlay.setAttribute('id','overlay');
		objOverlay.style.display = 'none';
		objOverlay.onclick = function() { myLightbox.end(); return false; }
		objBody.appendChild(objOverlay);
		
		var objLightbox = document.createElement("div");
		objLightbox.setAttribute('id','lightbox');
		objLightbox.style.display = 'none';
		objBody.appendChild(objLightbox);
	
		var objOuterImageContainer = document.createElement("div");
		objOuterImageContainer.setAttribute('id','outerImageContainer');
		objLightbox.appendChild(objOuterImageContainer);

		var objImageContainer = document.createElement("div");
		objImageContainer.setAttribute('id','imageContainer');
		objOuterImageContainer.appendChild(objImageContainer);
	
		var objLightboxImage = document.createElement("img");
		objLightboxImage.setAttribute('id','lightboxImage');
		objImageContainer.appendChild(objLightboxImage);
	
		var objHoverNav = document.createElement("div");
		objHoverNav.setAttribute('id','hoverNav');
		objImageContainer.appendChild(objHoverNav);
	
		var objPrevLink = document.createElement("a");
		objPrevLink.setAttribute('id','prevLink');
		objPrevLink.setAttribute('href','#');
		objHoverNav.appendChild(objPrevLink);
		
		var objNextLink = document.createElement("a");
		objNextLink.setAttribute('id','nextLink');
		objNextLink.setAttribute('href','#');
		objHoverNav.appendChild(objNextLink);
	
		var objLoading = document.createElement("div");
		objLoading.setAttribute('id','loading');
		objImageContainer.appendChild(objLoading);
	
		var objLoadingLink = document.createElement("a");
		objLoadingLink.setAttribute('id','loadingLink');
		objLoadingLink.setAttribute('href','#');
		objLoadingLink.onclick = function() { myLightbox.end(); return false; }
		objLoading.appendChild(objLoadingLink);
	
		var objLoadingImage = document.createElement("img");
		objLoadingImage.setAttribute('src', fileLoadingImage);
		objLoadingLink.appendChild(objLoadingImage);

		var objImageDataContainer = document.createElement("div");
		objImageDataContainer.setAttribute('id','imageDataContainer');
		objImageDataContainer.className = 'clearfix';
		objLightbox.appendChild(objImageDataContainer);

		var objImageData = document.createElement("div");
		objImageData.setAttribute('id','imageData');
		objImageDataContainer.appendChild(objImageData);
	
		var objImageDetails = document.createElement("div");
		objImageDetails.setAttribute('id','imageDetails');
		objImageData.appendChild(objImageDetails);
	
		var objCaption = document.createElement("span");
		objCaption.setAttribute('id','caption');
		objImageDetails.appendChild(objCaption);
	
		var objNumberDisplay = document.createElement("span");
		objNumberDisplay.setAttribute('id','numberDisplay');
		objImageDetails.appendChild(objNumberDisplay);
		
		var objBottomNav = document.createElement("div");
		objBottomNav.setAttribute('id','bottomNav');
		objImageData.appendChild(objBottomNav);
	
		var objBottomNavCloseLink = document.createElement("a");
		objBottomNavCloseLink.setAttribute('id','bottomNavClose');
		objBottomNavCloseLink.setAttribute('href','#');
		objBottomNavCloseLink.onclick = function() { myLightbox.end(); return false; }
		objBottomNav.appendChild(objBottomNavCloseLink);
	
		var objBottomNavCloseImage = document.createElement("img");
		objBottomNavCloseImage.setAttribute('src', fileBottomNavCloseImage);
		objBottomNavCloseLink.appendChild(objBottomNavCloseImage);
	},
	
	//
	//	start()
	//	Display overlay and lightbox. If image is part of a set, add siblings to imageArray.
	//
	start: function(imageLink) {	

		hideSelectBoxes();

		// stretch overlay to fill page and fade in
		var arrayPageSize = getPageSize();
		Element.setHeight('overlay', arrayPageSize[1]);
		new Effect.Appear('overlay', { duration: 0.2, from: 0.0, to: 0.8 });

		imageArray = [];
		imageNum = 0;		

		if (!document.getElementsByTagName){ return; }
		var anchors = document.getElementsByTagName('a');

		// if image is NOT part of a set..
		if((imageLink.getAttribute('rel') == 'lightbox')){
			// add single image to imageArray
			imageArray.push(new Array(imageLink.getAttribute('href'), imageLink.getAttribute('title')));			
		} else {
		// if image is part of a set..

			// loop through anchors, find other images in set, and add them to imageArray
			for (var i=0; i<anchors.length; i++){
				var anchor = anchors[i];
				if (anchor.getAttribute('href') && (anchor.getAttribute('rel') == imageLink.getAttribute('rel'))){
					imageArray.push(new Array(anchor.getAttribute('href'), anchor.getAttribute('title')));
				}
			}
			imageArray.removeDuplicates();
			while(imageArray[imageNum][0] != imageLink.getAttribute('href')) { imageNum++;}
		}

		// calculate top offset for the lightbox and display 
		var arrayPageSize = getPageSize();
		var arrayPageScroll = getPageScroll();
		var lightboxTop = arrayPageScroll[1] + (arrayPageSize[3] / 15);

		Element.setTop('lightbox', lightboxTop);
		Element.show('lightbox');
		
		this.changeImage(imageNum);
	},

	//
	//	changeImage()
	//	Hide most elements and preload image in preparation for resizing image container.
	//
	changeImage: function(imageNum) {	
		
		activeImage = imageNum;	// update global var

		// hide elements during transition
		Element.show('loading');
		Element.hide('lightboxImage');
		Element.hide('hoverNav');
		Element.hide('prevLink');
		Element.hide('nextLink');
		Element.hide('imageDataContainer');
		Element.hide('numberDisplay');		
		
		imgPreloader = new Image();
		
		// once image is preloaded, resize image container
		imgPreloader.onload=function(){
			Element.setSrc('lightboxImage', imageArray[activeImage][0]);
			myLightbox.resizeImageContainer(imgPreloader.width, imgPreloader.height);
		}
		imgPreloader.src = imageArray[activeImage][0];
	},

	//
	//	resizeImageContainer()
	//
	resizeImageContainer: function( imgWidth, imgHeight) {

		// get current height and width
		this.wCur = Element.getWidth('outerImageContainer');
		this.hCur = Element.getHeight('outerImageContainer');

		// scalars based on change from old to new
		this.xScale = ((imgWidth  + (borderSize * 2)) / this.wCur) * 100;
		this.yScale = ((imgHeight  + (borderSize * 2)) / this.hCur) * 100;

		// calculate size difference between new and old image, and resize if necessary
		wDiff = (this.wCur - borderSize * 2) - imgWidth;
		hDiff = (this.hCur - borderSize * 2) - imgHeight;

		if(!( hDiff == 0)){ new Effect.Scale('outerImageContainer', this.yScale, {scaleX: false, duration: resizeDuration, queue: 'front'}); }
		if(!( wDiff == 0)){ new Effect.Scale('outerImageContainer', this.xScale, {scaleY: false, delay: resizeDuration, duration: resizeDuration}); }

		// if new and old image are same size and no scaling transition is necessary, 
		// do a quick pause to prevent image flicker.
		if((hDiff == 0) && (wDiff == 0)){
			if (navigator.appVersion.indexOf("MSIE")!=-1){ pause(250); } else { pause(100);} 
		}

		Element.setHeight('prevLink', imgHeight);
		Element.setHeight('nextLink', imgHeight);
		Element.setWidth( 'imageDataContainer', imgWidth + (borderSize * 2));

		this.showImage();
	},
	
	//
	//	showImage()
	//	Display image and begin preloading neighbors.
	//
	showImage: function(){
		Element.hide('loading');
		new Effect.Appear('lightboxImage', { duration: 0.5, queue: 'end', afterFinish: function(){	myLightbox.updateDetails(); } });
		this.preloadNeighborImages();
	},

	//
	//	updateDetails()
	//	Display caption, image number, and bottom nav.
	//
	updateDetails: function() {
	
		Element.show('caption');
		Element.setInnerHTML( 'caption', imageArray[activeImage][1]);
		
		// if image is part of set display 'Image x of x' 
		if(imageArray.length > 1){
			Element.show('numberDisplay');
// https://secure.devidens.hu/mantis/view.php?id=965
//			Element.setInnerHTML( 'numberDisplay', "Image " + eval(activeImage + 1) + " of " + imageArray.length);
			Element.setInnerHTML( 'numberDisplay', eval(activeImage + 1) + " / " + imageArray.length);
		}

		new Effect.Parallel(
			[ new Effect.SlideDown( 'imageDataContainer', { sync: true, duration: resizeDuration + 0.25, from: 0.0, to: 1.0 }), 
			  new Effect.Appear('imageDataContainer', { sync: true, duration: 1.0 }) ], 
			{ duration: 0.65, afterFinish: function() { myLightbox.updateNav();} } 
		);
	},

	//
	//	updateNav()
	//	Display appropriate previous and next hover navigation.
	//
	updateNav: function() {

		Element.show('hoverNav');				

		// if not first image in set, display prev image button
		if(activeImage != 0){
			Element.show('prevLink');
			document.getElementById('prevLink').onclick = function() {
				myLightbox.changeImage(activeImage - 1); return false;
			}
		}

		// if not last image in set, display next image button
		if(activeImage != (imageArray.length - 1)){
			Element.show('nextLink');
			document.getElementById('nextLink').onclick = function() {
				myLightbox.changeImage(activeImage + 1); return false;
			}
		}
		
		this.enableKeyboardNav();
	},

	//
	//	enableKeyboardNav()
	//
	enableKeyboardNav: function() {
		document.onkeydown = this.keyboardAction; 
	},

	//
	//	disableKeyboardNav()
	//
	disableKeyboardNav: function() {
		document.onkeydown = '';
	},

	//
	//	keyboardAction()
	//
	keyboardAction: function(e) {
		if (e == null) { // ie
			keycode = event.keyCode;
		} else { // mozilla
			keycode = e.which;
		}

		key = String.fromCharCode(keycode).toLowerCase();
		
		if((key == 'x') || (key == 'o') || (key == 'c')){	// close lightbox
			myLightbox.end();
		} else if(key == 'p'){	// display previous image
			if(activeImage != 0){
				myLightbox.disableKeyboardNav();
				myLightbox.changeImage(activeImage - 1);
			}
		} else if(key == 'n'){	// display next image
			if(activeImage != (imageArray.length - 1)){
				myLightbox.disableKeyboardNav();
				myLightbox.changeImage(activeImage + 1);
			}
		}


	},

	//
	//	preloadNeighborImages()
	//	Preload previous and next images.
	//
	preloadNeighborImages: function(){

		if((imageArray.length - 1) > activeImage){
			preloadNextImage = new Image();
			preloadNextImage.src = imageArray[activeImage + 1][0];
		}
		if(activeImage > 0){
			preloadPrevImage = new Image();
			preloadPrevImage.src = imageArray[activeImage - 1][0];
		}
	
	},

	//
	//	end()
	//
	end: function() {
		this.disableKeyboardNav();
		Element.hide('lightbox');
		new Effect.Fade('overlay', { duration: 0.2});
		showSelectBoxes();
	}
}

// -----------------------------------------------------------------------------------

//
// getPageScroll()
// Returns array with x,y page scroll values.
// Core code from - quirksmode.org
//
function getPageScroll(){

	var yScroll;

	if (self.pageYOffset) {
		yScroll = self.pageYOffset;
	} else if (document.documentElement && document.documentElement.scrollTop){	 // Explorer 6 Strict
		yScroll = document.documentElement.scrollTop;
	} else if (document.body) {// all other Explorers
		yScroll = document.body.scrollTop;
	}

	arrayPageScroll = new Array('',yScroll) 
	return arrayPageScroll;
}

// -----------------------------------------------------------------------------------

//
// getPageSize()
// Returns array with page width, height and window width, height
// Core code from - quirksmode.org
// Edit for Firefox by pHaez
//
function getPageSize(){
	
	var xScroll, yScroll;
	
	if (window.innerHeight && window.scrollMaxY) {	
		xScroll = document.body.scrollWidth;
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		xScroll = document.body.scrollWidth;
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		xScroll = document.body.offsetWidth;
		yScroll = document.body.offsetHeight;
	}
	
	var windowWidth, windowHeight;
	if (self.innerHeight) {	// all except Explorer
		windowWidth = self.innerWidth;
		windowHeight = self.innerHeight;
	} else if (document.documentElement && document.documentElement.clientHeight) { // Explorer 6 Strict Mode
		windowWidth = document.documentElement.clientWidth;
		windowHeight = document.documentElement.clientHeight;
	} else if (document.body) { // other Explorers
		windowWidth = document.body.clientWidth;
		windowHeight = document.body.clientHeight;
	}	
	
	// for small pages with total height less then height of the viewport
	if(yScroll < windowHeight){
		pageHeight = windowHeight;
	} else { 
		pageHeight = yScroll;
	}

	// for small pages with total width less then width of the viewport
	if(xScroll < windowWidth){	
		pageWidth = windowWidth;
	} else {
		pageWidth = xScroll;
	}


	arrayPageSize = new Array(pageWidth,pageHeight,windowWidth,windowHeight) 
	return arrayPageSize;
}

// -----------------------------------------------------------------------------------

//
// getKey(key)
// Gets keycode. If 'x' is pressed then it hides the lightbox.
//
function getKey(e){
	if (e == null) { // ie
		keycode = event.keyCode;
	} else { // mozilla
		keycode = e.which;
	}
	key = String.fromCharCode(keycode).toLowerCase();
	
	if(key == 'x'){
	}
}

// -----------------------------------------------------------------------------------

//
// listenKey()
//
function listenKey () {	document.onkeypress = getKey; }
	
// ---------------------------------------------------

function showSelectBoxes(){
	selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "visible";
	}
}

// ---------------------------------------------------

function hideSelectBoxes(){
	selects = document.getElementsByTagName("select");
	for (i = 0; i != selects.length; i++) {
		selects[i].style.visibility = "hidden";
	}
}

// ---------------------------------------------------

//
// pause(numberMillis)
// Pauses code execution for specified time. Uses busy code, not good.
// Code from http://www.faqts.com/knowledge_base/view.phtml/aid/1602
//
function pause(numberMillis) {
	var now = new Date();
	var exitTime = now.getTime() + numberMillis;
	while (true) {
		now = new Date();
		if (now.getTime() > exitTime)
			return;
	}
}

// ---------------------------------------------------


function initLightbox() { myLightbox = new Lightbox(); }


	// script.aculo.us controls.js v1.8.0, Tue Nov 06 15:01:40 +0300 2007

// Copyright (c) 2005-2007 Thomas Fuchs (http://script.aculo.us, http://mir.aculo.us)
//           (c) 2005-2007 Ivan Krstic (http://blogs.law.harvard.edu/ivan)
//           (c) 2005-2007 Jon Tirsen (http://www.tirsen.com)
// Contributors:
//  Richard Livsey
//  Rahul Bhargava
//  Rob Wills
// 
// script.aculo.us is freely distributable under the terms of an MIT-style license.
// For details, see the script.aculo.us web site: http://script.aculo.us/

// Autocompleter.Base handles all the autocompletion functionality 
// that's independent of the data source for autocompletion. This
// includes drawing the autocompletion menu, observing keyboard
// and mouse events, and similar.
//
// Specific autocompleters need to provide, at the very least, 
// a getUpdatedChoices function that will be invoked every time
// the text inside the monitored textbox changes. This method 
// should get the text for which to provide autocompletion by
// invoking this.getToken(), NOT by directly accessing
// this.element.value. This is to allow incremental tokenized
// autocompletion. Specific auto-completion logic (AJAX, etc)
// belongs in getUpdatedChoices.
//
// Tokenized incremental autocompletion is enabled automatically
// when an autocompleter is instantiated with the 'tokens' option
// in the options parameter, e.g.:
// new Ajax.Autocompleter('id','upd', '/url/', { tokens: ',' });
// will incrementally autocomplete with a comma as the token.
// Additionally, ',' in the above example can be replaced with
// a token array, e.g. { tokens: [',', '\n'] } which
// enables autocompletion on multiple tokens. This is most 
// useful when one of the tokens is \n (a newline), as it 
// allows smart autocompletion after linebreaks.

if(typeof Effect == 'undefined')
  throw("controls.js requires including script.aculo.us' effects.js library");

var Autocompleter = { }
Autocompleter.Base = Class.create({
  baseInitialize: function(element, update, options) {
    element          = $(element)
    this.element     = element; 
    this.update      = $(update);  
    this.hasFocus    = false; 
    this.changed     = false; 
    this.active      = false; 
    this.index       = 0;     
    this.entryCount  = 0;
    this.oldElementValue = this.element.value;

    if(this.setOptions)
      this.setOptions(options);
    else
      this.options = options || { };

    this.options.paramName    = this.options.paramName || this.element.name;
    this.options.tokens       = this.options.tokens || [];
    this.options.frequency    = this.options.frequency || 0.4;
    this.options.minChars     = this.options.minChars || 1;
    this.options.onShow       = this.options.onShow || 
      function(element, update){ 
        if(!update.style.position || update.style.position=='absolute') {
          update.style.position = 'absolute';
          Position.clone(element, update, {
            setHeight: false, 
            offsetTop: element.offsetHeight
          });
        }
        Effect.Appear(update,{duration:0.15});
      };
    this.options.onHide = this.options.onHide || 
      function(element, update){ new Effect.Fade(update,{duration:0.15}) };

    if(typeof(this.options.tokens) == 'string') 
      this.options.tokens = new Array(this.options.tokens);
    // Force carriage returns as token delimiters anyway
    if (!this.options.tokens.include('\n'))
      this.options.tokens.push('\n');

    this.observer = null;
    
    this.element.setAttribute('autocomplete','off');

    Element.hide(this.update);

    Event.observe(this.element, 'blur', this.onBlur.bindAsEventListener(this));
    Event.observe(this.element, 'keypress', this.onKeyPress.bindAsEventListener(this));
  },

  show: function() {
    if(Element.getStyle(this.update, 'display')=='none') this.options.onShow(this.element, this.update);
    if(!this.iefix && 
      (Prototype.Browser.IE) &&
      (Element.getStyle(this.update, 'position')=='absolute')) {
      new Insertion.After(this.update, 
       '<iframe id="' + this.update.id + '_iefix" '+
       'style="display:none;position:absolute;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0);" ' +
       'src="javascript:false;" frameborder="0" scrolling="no"></iframe>');
      this.iefix = $(this.update.id+'_iefix');
    }
    if(this.iefix) setTimeout(this.fixIEOverlapping.bind(this), 50);
  },
  
  fixIEOverlapping: function() {
    Position.clone(this.update, this.iefix, {setTop:(!this.update.style.height)});
    this.iefix.style.zIndex = 1;
    this.update.style.zIndex = 2;
    Element.show(this.iefix);
  },

  hide: function() {
    this.stopIndicator();
    if(Element.getStyle(this.update, 'display')!='none') this.options.onHide(this.element, this.update);
    if(this.iefix) Element.hide(this.iefix);
  },

  startIndicator: function() {
    if(this.options.indicator) Element.show(this.options.indicator);
  },

  stopIndicator: function() {
    if(this.options.indicator) Element.hide(this.options.indicator);
  },

  onKeyPress: function(event) {
    if(this.active)
      switch(event.keyCode) {
       case Event.KEY_TAB:
       case Event.KEY_RETURN:
         this.selectEntry();
         Event.stop(event);
       case Event.KEY_ESC:
         this.hide();
         this.active = false;
         Event.stop(event);
         return;
       case Event.KEY_LEFT:
       case Event.KEY_RIGHT:
         return;
       case Event.KEY_UP:
//		return;
	    this.markPrevious();
         this.render();
         if(Prototype.Browser.WebKit) Event.stop(event);
         return;
       case Event.KEY_DOWN:
//		return;
         this.markNext();
         this.render();
         if(Prototype.Browser.WebKit) Event.stop(event);
         return;
      }
     else 
       if(event.keyCode==Event.KEY_TAB || event.keyCode==Event.KEY_RETURN || 
         (Prototype.Browser.WebKit > 0 && event.keyCode == 0)) return;

    this.changed = true;
    this.hasFocus = true;

    if(this.observer) clearTimeout(this.observer);
      this.observer = 
        setTimeout(this.onObserverEvent.bind(this), this.options.frequency*1000);
  },

  activate: function() {
    this.changed = false;
    this.hasFocus = true;
    this.getUpdatedChoices();
  },

  onHover: function(event) {
    var element = Event.findElement(event, 'LI');
    if(this.index != element.autocompleteIndex) 
    {
        this.index = element.autocompleteIndex;
        this.render();
    }
    Event.stop(event);
  },
  
  onClick: function(event) {
    var element = Event.findElement(event, 'LI');
    this.index = element.autocompleteIndex;
    this.selectEntry();
    this.hide();
  },
  
  onBlur: function(event) {
    // needed to make click events working
    setTimeout(this.hide.bind(this), 250);
    this.hasFocus = false;
    this.active = false;     
  }, 
  
  render: function() {
    if(this.entryCount > 0) {
      for (var i = 0; i < this.entryCount; i++)
        this.index==i ? 
          Element.addClassName(this.getEntry(i),"selected") : 
          Element.removeClassName(this.getEntry(i),"selected");
      if(this.hasFocus) { 
        this.show();
        this.active = true;
      }
    } else {
      this.active = false;
      this.hide();
    }
  },
  
  markPrevious: function() {
    if(this.index > 0) this.index--
      else this.index = this.entryCount-1;
    this.getEntry(this.index).scrollIntoView(true);
  },
  
  markNext: function() {
    if(this.index < this.entryCount-1) this.index++
      else this.index = 0;
    this.getEntry(this.index).scrollIntoView(false);
  },
  
  getEntry: function(index) {
    return this.update.firstChild.childNodes[index];
  },
  
  getCurrentEntry: function() {
    return this.getEntry(this.index);
  },
  
  selectEntry: function() {
    this.active = false;
    this.updateElement(this.getCurrentEntry());
  },

  updateElement: function(selectedElement) {
    if (this.options.updateElement) {
      this.options.updateElement(selectedElement);
      return;
    }
    var value = '';
    if (this.options.select) {
      var nodes = $(selectedElement).select('.' + this.options.select) || [];
      if(nodes.length>0) value = Element.collectTextNodes(nodes[0], this.options.select);
    } else
      value = Element.collectTextNodesIgnoreClass(selectedElement, 'informal');
    
    var bounds = this.getTokenBounds();
    if (bounds[0] != -1) {
      var newValue = this.element.value.substr(0, bounds[0]);
      var whitespace = this.element.value.substr(bounds[0]).match(/^\s+/);
      if (whitespace)
        newValue += whitespace[0];
      this.element.value = newValue + value + this.element.value.substr(bounds[1]);
    } else {
      this.element.value = value;
    }
    this.oldElementValue = this.element.value;
    this.element.focus();
    
    if (this.options.afterUpdateElement)
      this.options.afterUpdateElement(this.element, selectedElement);
  },

  updateChoices: function(choices) {
    if(!this.changed && this.hasFocus) {
      choices = eval(choices);
      this.update.innerHTML = choices;
      Element.cleanWhitespace(this.update);
      Element.cleanWhitespace(this.update.down());

      if(this.update.firstChild && this.update.down().childNodes) {
        this.entryCount = 
          this.update.down().childNodes.length;
        for (var i = 0; i < this.entryCount; i++) {
          var entry = this.getEntry(i);
          entry.autocompleteIndex = i;
          this.addObservers(entry);
        }
      } else { 
        this.entryCount = 0;
      }

      this.stopIndicator();
      this.index = 0;
      
      if(this.entryCount==1 && this.options.autoSelect) {
        this.selectEntry();
        this.hide();
      } else {
        this.render();
      }
    }
  },

  addObservers: function(element) {
    Event.observe(element, "mouseover", this.onHover.bindAsEventListener(this));
    Event.observe(element, "click", this.onClick.bindAsEventListener(this));
  },

  onObserverEvent: function() {
    this.changed = false;   
    this.tokenBounds = null;
    if(this.getToken().length>=this.options.minChars) {
      this.getUpdatedChoices();
    } else {
      this.active = false;
      this.hide();
    }
    this.oldElementValue = this.element.value;
  },

  getToken: function() {
    var bounds = this.getTokenBounds();
    return this.element.value.substring(bounds[0], bounds[1]).strip();
  },

  getTokenBounds: function() {
    if (null != this.tokenBounds) return this.tokenBounds;
    var value = this.element.value;
    if (value.strip().empty()) return [-1, 0];
    var diff = arguments.callee.getFirstDifferencePos(value, this.oldElementValue);
    var offset = (diff == this.oldElementValue.length ? 1 : 0);
    var prevTokenPos = -1, nextTokenPos = value.length;
    var tp;
    for (var index = 0, l = this.options.tokens.length; index < l; ++index) {
      tp = value.lastIndexOf(this.options.tokens[index], diff + offset - 1);
      if (tp > prevTokenPos) prevTokenPos = tp;
      tp = value.indexOf(this.options.tokens[index], diff + offset);
      if (-1 != tp && tp < nextTokenPos) nextTokenPos = tp;
    }
    return (this.tokenBounds = [prevTokenPos + 1, nextTokenPos]);
  }
});

Autocompleter.Base.prototype.getTokenBounds.getFirstDifferencePos = function(newS, oldS) {
  var boundary = Math.min(newS.length, oldS.length);
  for (var index = 0; index < boundary; ++index)
    if (newS[index] != oldS[index])
      return index;
  return boundary;
};

Ajax.Autocompleter = Class.create(Autocompleter.Base, {
  initialize: function(element, update, url, options) {
    this.baseInitialize(element, update, options);
    this.options.asynchronous  = true;
    this.options.onComplete    = this.onComplete.bind(this);
    this.options.defaultParams = this.options.parameters || null;
    this.url                   = url;
  },

  getUpdatedChoices: function() {
    this.startIndicator();
    
    var entry = encodeURIComponent(this.options.paramName) + '=' + 
      encodeURIComponent(this.getToken());

    this.options.parameters = this.options.callback ?
      this.options.callback(this.element, entry) : entry;

    if(this.options.defaultParams) 
      this.options.parameters += '&' + this.options.defaultParams;
    
    new Ajax.Request(this.url, this.options);
  },

  onComplete: function(request) {
    this.updateChoices(request.responseText);
  }
});

// The local array autocompleter. Used when you'd prefer to
// inject an array of autocompletion options into the page, rather
// than sending out Ajax queries, which can be quite slow sometimes.
//
// The constructor takes four parameters. The first two are, as usual,
// the id of the monitored textbox, and id of the autocompletion menu.
// The third is the array you want to autocomplete from, and the fourth
// is the options block.
//
// Extra local autocompletion options:
// - choices - How many autocompletion choices to offer
//
// - partialSearch - If false, the autocompleter will match entered
//                    text only at the beginning of strings in the 
//                    autocomplete array. Defaults to true, which will
//                    match text at the beginning of any *word* in the
//                    strings in the autocomplete array. If you want to
//                    search anywhere in the string, additionally set
//                    the option fullSearch to true (default: off).
//
// - fullSsearch - Search anywhere in autocomplete array strings.
//
// - partialChars - How many characters to enter before triggering
//                   a partial match (unlike minChars, which defines
//                   how many characters are required to do any match
//                   at all). Defaults to 2.
//
// - ignoreCase - Whether to ignore case when autocompleting.
//                 Defaults to true.
//
// It's possible to pass in a custom function as the 'selector' 
// option, if you prefer to write your own autocompletion logic.
// In that case, the other options above will not apply unless
// you support them.

Autocompleter.Local = Class.create(Autocompleter.Base, {
  initialize: function(element, update, array, options) {
    this.baseInitialize(element, update, options);
    this.options.array = array;
  },

  getUpdatedChoices: function() {
    this.updateChoices(this.options.selector(this));
  },

  setOptions: function(options) {
    this.options = Object.extend({
      choices: 10,
      partialSearch: true,
      partialChars: 2,
      ignoreCase: true,
      fullSearch: false,
      selector: function(instance) {
        var ret       = []; // Beginning matches
        var partial   = []; // Inside matches
        var entry     = instance.getToken();
        var count     = 0;

        for (var i = 0; i < instance.options.array.length &&  
          ret.length < instance.options.choices ; i++) { 

          var elem = instance.options.array[i];
          var foundPos = instance.options.ignoreCase ? 
            elem.toLowerCase().indexOf(entry.toLowerCase()) : 
            elem.indexOf(entry);

          while (foundPos != -1) {
            if (foundPos == 0 && elem.length != entry.length) { 
              ret.push("<li><strong>" + elem.substr(0, entry.length) + "</strong>" + 
                elem.substr(entry.length) + "</li>");
              break;
            } else if (entry.length >= instance.options.partialChars && 
              instance.options.partialSearch && foundPos != -1) {
              if (instance.options.fullSearch || /\s/.test(elem.substr(foundPos-1,1))) {
                partial.push("<li>" + elem.substr(0, foundPos) + "<strong>" +
                  elem.substr(foundPos, entry.length) + "</strong>" + elem.substr(
                  foundPos + entry.length) + "</li>");
                break;
              }
            }

            foundPos = instance.options.ignoreCase ? 
              elem.toLowerCase().indexOf(entry.toLowerCase(), foundPos + 1) : 
              elem.indexOf(entry, foundPos + 1);

          }
        }
        if (partial.length)
          ret = ret.concat(partial.slice(0, instance.options.choices - ret.length))
        return "<ul>" + ret.join('') + "</ul>";
      }
    }, options || { });
  }
});

// AJAX in-place editor and collection editor
// Full rewrite by Christophe Porteneuve <tdd@tddsworld.com> (April 2007).

// Use this if you notice weird scrolling problems on some browsers,
// the DOM might be a bit confused when this gets called so do this
// waits 1 ms (with setTimeout) until it does the activation
Field.scrollFreeActivate = function(field) {
  setTimeout(function() {
    Field.activate(field);
  }, 1);
}

Ajax.InPlaceEditor = Class.create({
  initialize: function(element, url, options) {
    this.url = url;
    this.element = element = $(element);
    this.prepareOptions();
    this._controls = { };
    arguments.callee.dealWithDeprecatedOptions(options); // DEPRECATION LAYER!!!
    Object.extend(this.options, options || { });
    if (!this.options.formId && this.element.id) {
      this.options.formId = this.element.id + '-inplaceeditor';
      if ($(this.options.formId))
        this.options.formId = '';
    }
    if (this.options.externalControl)
      this.options.externalControl = $(this.options.externalControl);
    if (!this.options.externalControl)
      this.options.externalControlOnly = false;
    this._originalBackground = this.element.getStyle('background-color') || 'transparent';
    this.element.title = this.options.clickToEditText;
    this._boundCancelHandler = this.handleFormCancellation.bind(this);
    this._boundComplete = (this.options.onComplete || Prototype.emptyFunction).bind(this);
    this._boundFailureHandler = this.handleAJAXFailure.bind(this);
    this._boundSubmitHandler = this.handleFormSubmission.bind(this);
    this._boundWrapperHandler = this.wrapUp.bind(this);
    this.registerListeners();
  },
  checkForEscapeOrReturn: function(e) {
    if (!this._editing || e.ctrlKey || e.altKey || e.shiftKey) return;
    if (Event.KEY_ESC == e.keyCode)
      this.handleFormCancellation(e);
    else if (Event.KEY_RETURN == e.keyCode)
      this.handleFormSubmission(e);
  },
  createControl: function(mode, handler, extraClasses) {
    var control = this.options[mode + 'Control'];
    var text = this.options[mode + 'Text'];
    if ('button' == control) {
      var btn = document.createElement('input');
      btn.type = 'submit';
      btn.value = text;
      btn.className = 'editor_' + mode + '_button';
      if ('cancel' == mode)
        btn.onclick = this._boundCancelHandler;
      this._form.appendChild(btn);
      this._controls[mode] = btn;
    } else if ('link' == control) {
      var link = document.createElement('a');
      link.href = '#';
      link.appendChild(document.createTextNode(text));
      link.onclick = 'cancel' == mode ? this._boundCancelHandler : this._boundSubmitHandler;
      link.className = 'editor_' + mode + '_link';
      if (extraClasses)
        link.className += ' ' + extraClasses;
      this._form.appendChild(link);
      this._controls[mode] = link;
    }
  },
  createEditField: function() {
    var text = (this.options.loadTextURL ? this.options.loadingText : this.getText());
    var fld;
    if (1 >= this.options.rows && !/\r|\n/.test(this.getText())) {
      fld = document.createElement('input');
      fld.type = 'text';
      var size = this.options.size || this.options.cols || 0;
      if (0 < size) fld.size = size;
    } else {
      fld = document.createElement('textarea');
      fld.rows = (1 >= this.options.rows ? this.options.autoRows : this.options.rows);
      fld.cols = this.options.cols || 40;
    }
    fld.name = this.options.paramName;
    fld.value = text; // No HTML breaks conversion anymore
    fld.className = 'editor_field';
    if (this.options.submitOnBlur)
      fld.onblur = this._boundSubmitHandler;
    this._controls.editor = fld;
    if (this.options.loadTextURL)
      this.loadExternalText();
    this._form.appendChild(this._controls.editor);
  },
  createForm: function() {
    var ipe = this;
    function addText(mode, condition) {
      var text = ipe.options['text' + mode + 'Controls'];
      if (!text || condition === false) return;
      ipe._form.appendChild(document.createTextNode(text));
    };
    this._form = $(document.createElement('form'));
    this._form.id = this.options.formId;
    this._form.addClassName(this.options.formClassName);
    this._form.onsubmit = this._boundSubmitHandler;
    this.createEditField();
    if ('textarea' == this._controls.editor.tagName.toLowerCase())
      this._form.appendChild(document.createElement('br'));
    if (this.options.onFormCustomization)
      this.options.onFormCustomization(this, this._form);
    addText('Before', this.options.okControl || this.options.cancelControl);
    this.createControl('ok', this._boundSubmitHandler);
    addText('Between', this.options.okControl && this.options.cancelControl);
    this.createControl('cancel', this._boundCancelHandler, 'editor_cancel');
    addText('After', this.options.okControl || this.options.cancelControl);
  },
  destroy: function() {
    if (this._oldInnerHTML)
      this.element.innerHTML = this._oldInnerHTML;
    this.leaveEditMode();
    this.unregisterListeners();
  },
  enterEditMode: function(e) {
    if (this._saving || this._editing) return;
    this._editing = true;
    this.triggerCallback('onEnterEditMode');
    if (this.options.externalControl)
      this.options.externalControl.hide();
    this.element.hide();
    this.createForm();
    this.element.parentNode.insertBefore(this._form, this.element);
    if (!this.options.loadTextURL)
      this.postProcessEditField();
    if (e) Event.stop(e);
  },
  enterHover: function(e) {
    if (this.options.hoverClassName)
      this.element.addClassName(this.options.hoverClassName);
    if (this._saving) return;
    this.triggerCallback('onEnterHover');
  },
  getText: function() {
    return this.element.innerHTML;
  },
  handleAJAXFailure: function(transport) {
    this.triggerCallback('onFailure', transport);
    if (this._oldInnerHTML) {
      this.element.innerHTML = this._oldInnerHTML;
      this._oldInnerHTML = null;
    }
  },
  handleFormCancellation: function(e) {
    this.wrapUp();
    if (e) Event.stop(e);
  },
  handleFormSubmission: function(e) {
    var form = this._form;
    var value = $F(this._controls.editor);
    this.prepareSubmission();
    var params = this.options.callback(form, value) || '';
    if (Object.isString(params))
      params = params.toQueryParams();
    params.editorId = this.element.id;
    if (this.options.htmlResponse) {
      var options = Object.extend({ evalScripts: true }, this.options.ajaxOptions);
      Object.extend(options, {
        parameters: params,
        onComplete: this._boundWrapperHandler,
        onFailure: this._boundFailureHandler
      });
      new Ajax.Updater({ success: this.element }, this.url, options);
    } else {
      var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
      Object.extend(options, {
        parameters: params,
        onComplete: this._boundWrapperHandler,
        onFailure: this._boundFailureHandler
      });
      new Ajax.Request(this.url, options);
    }
    if (e) Event.stop(e);
  },
  leaveEditMode: function() {
    this.element.removeClassName(this.options.savingClassName);
    this.removeForm();
    this.leaveHover();
    this.element.style.backgroundColor = this._originalBackground;
    this.element.show();
    if (this.options.externalControl)
      this.options.externalControl.show();
    this._saving = false;
    this._editing = false;
    this._oldInnerHTML = null;
    this.triggerCallback('onLeaveEditMode');
  },
  leaveHover: function(e) {
    if (this.options.hoverClassName)
      this.element.removeClassName(this.options.hoverClassName);
    if (this._saving) return;
    this.triggerCallback('onLeaveHover');
  },
  loadExternalText: function() {
    this._form.addClassName(this.options.loadingClassName);
    this._controls.editor.disabled = true;
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        this._form.removeClassName(this.options.loadingClassName);
        var text = transport.responseText;
        if (this.options.stripLoadedTextTags)
          text = text.stripTags();
        this._controls.editor.value = text;
        this._controls.editor.disabled = false;
        this.postProcessEditField();
      }.bind(this),
      onFailure: this._boundFailureHandler
    });
    new Ajax.Request(this.options.loadTextURL, options);
  },
  postProcessEditField: function() {
    var fpc = this.options.fieldPostCreation;
    if (fpc)
      $(this._controls.editor)['focus' == fpc ? 'focus' : 'activate']();
  },
  prepareOptions: function() {
    this.options = Object.clone(Ajax.InPlaceEditor.DefaultOptions);
    Object.extend(this.options, Ajax.InPlaceEditor.DefaultCallbacks);
    [this._extraDefaultOptions].flatten().compact().each(function(defs) {
      Object.extend(this.options, defs);
    }.bind(this));
  },
  prepareSubmission: function() {
    this._saving = true;
    this.removeForm();
    this.leaveHover();
    this.showSaving();
  },
  registerListeners: function() {
    this._listeners = { };
    var listener;
    $H(Ajax.InPlaceEditor.Listeners).each(function(pair) {
      listener = this[pair.value].bind(this);
      this._listeners[pair.key] = listener;
      if (!this.options.externalControlOnly)
        this.element.observe(pair.key, listener);
      if (this.options.externalControl)
        this.options.externalControl.observe(pair.key, listener);
    }.bind(this));
  },
  removeForm: function() {
    if (!this._form) return;
    this._form.remove();
    this._form = null;
    this._controls = { };
  },
  showSaving: function() {
    this._oldInnerHTML = this.element.innerHTML;
    this.element.innerHTML = this.options.savingText;
    this.element.addClassName(this.options.savingClassName);
    this.element.style.backgroundColor = this._originalBackground;
    this.element.show();
  },
  triggerCallback: function(cbName, arg) {
    if ('function' == typeof this.options[cbName]) {
      this.options[cbName](this, arg);
    }
  },
  unregisterListeners: function() {
    $H(this._listeners).each(function(pair) {
      if (!this.options.externalControlOnly)
        this.element.stopObserving(pair.key, pair.value);
      if (this.options.externalControl)
        this.options.externalControl.stopObserving(pair.key, pair.value);
    }.bind(this));
  },
  wrapUp: function(transport) {
    this.leaveEditMode();
    // Can't use triggerCallback due to backward compatibility: requires
    // binding + direct element
    this._boundComplete(transport, this.element);
  }
});

Object.extend(Ajax.InPlaceEditor.prototype, {
  dispose: Ajax.InPlaceEditor.prototype.destroy
});

Ajax.InPlaceCollectionEditor = Class.create(Ajax.InPlaceEditor, {
  initialize: function($super, element, url, options) {
    this._extraDefaultOptions = Ajax.InPlaceCollectionEditor.DefaultOptions;
    $super(element, url, options);
  },

  createEditField: function() {
    var list = document.createElement('select');
    list.name = this.options.paramName;
    list.size = 1;
    this._controls.editor = list;
    this._collection = this.options.collection || [];
    if (this.options.loadCollectionURL)
      this.loadCollection();
    else
      this.checkForExternalText();
    this._form.appendChild(this._controls.editor);
  },

  loadCollection: function() {
    this._form.addClassName(this.options.loadingClassName);
    this.showLoadingText(this.options.loadingCollectionText);
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        var js = transport.responseText.strip();
        if (!/^\[.*\]$/.test(js)) // TODO: improve sanity check
          throw 'Server returned an invalid collection representation.';
        this._collection = eval(js);
        this.checkForExternalText();
      }.bind(this),
      onFailure: this.onFailure
    });
    new Ajax.Request(this.options.loadCollectionURL, options);
  },

  showLoadingText: function(text) {
    this._controls.editor.disabled = true;
    var tempOption = this._controls.editor.firstChild;
    if (!tempOption) {
      tempOption = document.createElement('option');
      tempOption.value = '';
      this._controls.editor.appendChild(tempOption);
      tempOption.selected = true;
    }
    tempOption.update((text || '').stripScripts().stripTags());
  },

  checkForExternalText: function() {
    this._text = this.getText();
    if (this.options.loadTextURL)
      this.loadExternalText();
    else
      this.buildOptionList();
  },

  loadExternalText: function() {
    this.showLoadingText(this.options.loadingText);
    var options = Object.extend({ method: 'get' }, this.options.ajaxOptions);
    Object.extend(options, {
      parameters: 'editorId=' + encodeURIComponent(this.element.id),
      onComplete: Prototype.emptyFunction,
      onSuccess: function(transport) {
        this._text = transport.responseText.strip();
        this.buildOptionList();
      }.bind(this),
      onFailure: this.onFailure
    });
    new Ajax.Request(this.options.loadTextURL, options);
  },

  buildOptionList: function() {
    this._form.removeClassName(this.options.loadingClassName);
    this._collection = this._collection.map(function(entry) {
      return 2 === entry.length ? entry : [entry, entry].flatten();
    });
    var marker = ('value' in this.options) ? this.options.value : this._text;
    var textFound = this._collection.any(function(entry) {
      return entry[0] == marker;
    }.bind(this));
    this._controls.editor.update('');
    var option;
    this._collection.each(function(entry, index) {
      option = document.createElement('option');
      option.value = entry[0];
      option.selected = textFound ? entry[0] == marker : 0 == index;
      option.appendChild(document.createTextNode(entry[1]));
      this._controls.editor.appendChild(option);
    }.bind(this));
    this._controls.editor.disabled = false;
    Field.scrollFreeActivate(this._controls.editor);
  }
});

//**** DEPRECATION LAYER FOR InPlace[Collection]Editor! ****
//**** This only  exists for a while,  in order to  let ****
//**** users adapt to  the new API.  Read up on the new ****
//**** API and convert your code to it ASAP!            ****

Ajax.InPlaceEditor.prototype.initialize.dealWithDeprecatedOptions = function(options) {
  if (!options) return;
  function fallback(name, expr) {
    if (name in options || expr === undefined) return;
    options[name] = expr;
  };
  fallback('cancelControl', (options.cancelLink ? 'link' : (options.cancelButton ? 'button' :
    options.cancelLink == options.cancelButton == false ? false : undefined)));
  fallback('okControl', (options.okLink ? 'link' : (options.okButton ? 'button' :
    options.okLink == options.okButton == false ? false : undefined)));
  fallback('highlightColor', options.highlightcolor);
  fallback('highlightEndColor', options.highlightendcolor);
};

Object.extend(Ajax.InPlaceEditor, {
  DefaultOptions: {
    ajaxOptions: { },
    autoRows: 3,                                // Use when multi-line w/ rows == 1
    cancelControl: 'link',                      // 'link'|'button'|false
    cancelText: 'cancel',
    clickToEditText: 'Click to edit',
    externalControl: null,                      // id|elt
    externalControlOnly: false,
    fieldPostCreation: 'activate',              // 'activate'|'focus'|false
    formClassName: 'inplaceeditor-form',
    formId: null,                               // id|elt
    highlightColor: '#ffff99',
    highlightEndColor: '#ffffff',
    hoverClassName: '',
    htmlResponse: true,
    loadingClassName: 'inplaceeditor-loading',
    loadingText: 'Loading...',
    okControl: 'button',                        // 'link'|'button'|false
    okText: 'ok',
    paramName: 'value',
    rows: 1,                                    // If 1 and multi-line, uses autoRows
    savingClassName: 'inplaceeditor-saving',
    savingText: 'Saving...',
    size: 0,
    stripLoadedTextTags: false,
    submitOnBlur: false,
    textAfterControls: '',
    textBeforeControls: '',
    textBetweenControls: ''
  },
  DefaultCallbacks: {
    callback: function(form) {
      return Form.serialize(form);
    },
    onComplete: function(transport, element) {
      // For backward compatibility, this one is bound to the IPE, and passes
      // the element directly.  It was too often customized, so we don't break it.
      new Effect.Highlight(element, {
        startcolor: this.options.highlightColor, keepBackgroundImage: true });
    },
    onEnterEditMode: null,
    onEnterHover: function(ipe) {
      ipe.element.style.backgroundColor = ipe.options.highlightColor;
      if (ipe._effect)
        ipe._effect.cancel();
    },
    onFailure: function(transport, ipe) {
      alert('Error communication with the server: ' + transport.responseText.stripTags());
    },
    onFormCustomization: null, // Takes the IPE and its generated form, after editor, before controls.
    onLeaveEditMode: null,
    onLeaveHover: function(ipe) {
      ipe._effect = new Effect.Highlight(ipe.element, {
        startcolor: ipe.options.highlightColor, endcolor: ipe.options.highlightEndColor,
        restorecolor: ipe._originalBackground, keepBackgroundImage: true
      });
    }
  },
  Listeners: {
    click: 'enterEditMode',
    keydown: 'checkForEscapeOrReturn',
    mouseover: 'enterHover',
    mouseout: 'leaveHover'
  }
});

Ajax.InPlaceCollectionEditor.DefaultOptions = {
  loadingCollectionText: 'Loading options...'
};

// Delayed observer, like Form.Element.Observer, 
// but waits for delay after last key input
// Ideal for live-search fields

Form.Element.DelayedObserver = Class.create({
  initialize: function(element, delay, callback) {
    this.delay     = delay || 0.5;
    this.element   = $(element);
    this.callback  = callback;
    this.timer     = null;
    this.lastValue = $F(this.element); 
    Event.observe(this.element,'keyup',this.delayedListener.bindAsEventListener(this));
  },
  delayedListener: function(event) {
    if(this.lastValue == $F(this.element)) return;
    if(this.timer) clearTimeout(this.timer);
    this.timer = setTimeout(this.onTimerEvent.bind(this), this.delay * 1000);
    this.lastValue = $F(this.element);
  },
  onTimerEvent: function() {
    this.timer = null;
    this.callback(this.element, $F(this.element));
  }
});









		
var html = $(document.getElementsByTagName("html")[0]);
var head = $(document.getElementsByTagName("head")[0]);
var IE6 = !!(document.protocol && !window.XMLHttpRequest && document.createComment);
var body = $(document.getElementsByTagName("body")[0]);
// w.2009.09.06 16:00
//var LANG = $$("meta[http-equiv=content-language]")[0].attr("content");

var Nibble = {

	// ez fut le akkor amikor a DOM ready
	init: function() {
		

		this.IE = Class.create();
this.IE = {
	
	initialize: function() {
		this.ie = !!document.protocol;
		this.version = this.setVersion();
	},

	setVersion: function() {
		if (!this.ie) {
			return 0;
		}
		switch (true) {
			case !!window.XMLHttpRequest: 
				return 7;
			case !!document.createComment: 
				return 6;
			case !!window.createPopup: 
				return 5.5;
			case !!window.clipboardData: 
				return 5;
			case !!window.showModalDialog: 
				return 4;
		}
	}


};		// form elott kell
		
this.ResizableTextArea = Class.create();
this.ResizableTextArea.prototype = {

	initialize: function(t) {
		this.t = $(t);
		this._startDrag = this.startDrag.bindAsEventListener(this);
		this._performDrag = this.performDrag.bindAsEventListener(this);
		this._endDrag = this.endDrag.bindAsEventListener(this);
		// IE WARNING: http://www.prototypejs.org/api/element/wrap
		Element.wrap(this.t, new Element('div', {
			"class": "resizable-textarea"
		}));
		this.t.parentNode.appendChild(new Element("div", {
			"class": "grippie"
		})).observe('mousedown', this._startDrag);
	},

	startDrag: function(e) {
		this.staticOffset = this.t.getHeight() - Event.pointerY(e);
		this.t.setStyle({
			opacity: 0.5
		});
		html.observe('mousemove', this._performDrag);
		html.observe('mouseup', this._endDrag);
	},

	performDrag: function(e) {
		this.t.setStyle({
			height: Math.max(32, this.staticOffset + Event.pointerY(e)) + 'px'
		});
		return false;
	},

	endDrag: function(e) {
		html.stopObserving('mousemove', this._performDrag);
		html.stopObserving('mouseup', this._endDrag);
		this.t.setStyle({
			opacity: 1
		});
	}
}		this.Form = Class.create();
this.Form = {

	FCKConfig: {
		StylesXmlPath: '/fckstyles.xml',
		EditorAreaCSS: '/fckstyles.css'
	},
	
	initialize: function() {
		
		this.setError();
		this.initForms();
		if (
			!document.implementation.hasFeature("WebForms", "2.0")
			&& Nibble.needWidget("jscalendar")
		) {	
			Nibble.includeCSS("/css/jscalendar/calendar-blue2.css");
			Nibble.includeJS("/js/jscalendar/calendar.js", function() {
				Nibble.includeJS("/js/jscalendar/lang/calendar-hu-utf8.js", function() {
					Nibble.includeJS("/js/jscalendar/calendar-setup_stripped.js", function() {
						$$("input[type*=date]").invoke("initCalendar");
					});
				});
			});
			
		}
/*		if (Nibble.needWidget("fckeditor")) {
			Nibble.includeJS("/fckeditor/fckeditor.js", this.initFCKeditor.bind(this));
		}*/
		if (Nibble.needWidget("ipe")) {
			this.initIPE.whenLoaded("Ajax.InPlaceEditor", this);
		}
		// w.2009.05.08 15:09
		// feleslegesen lassit, atraktam a pluginbe
		this.initResizableTextAreas.ifExists("textarea.resizable", this);
		this.initRegExpValidator();
		this.initSelects();
		this.negativeCaptcha();
		if (!document.implementation.hasFeature("WebForms", "2.0")) {
			$$("input[type=number]").invoke("spinEdit");
		}

//		$$("form").invoke("enterToTab");
		this.initAjaxFileUploads();
		this.initAutoFocus();

/*		document.on("click", function (ev) {
			ev.target.form.fire("form:submitted", {
				"originalEvent": ev
			});
		});*/

/*		$("setup").on("form:subbmitted", function(ev) {
			
		});*/
		
		this.initMultipleCheckboxes();
		this.initTaxNumbers();
		this.initDefaultValues();
		this.initZipcodes.ifNeedWidget("zipcode");

		this.checkAutoLoadFCKeditors();
		
			},

	initLiveValidation: function() {
		Form.validationElements=new Array();
		Form.validationElementsIndex=0;
	     $$("[validate]").each(function(element) {
			var id=element.getAttribute("id");
			if (!id) return;

			var validateBy = element.getAttribute("validate").split(";");
			var validateName="";
			var validateParams="";
			var tmp="";

			Form.validationElements[Form.validationElementsIndex] = new LiveValidation(id,{onlyOnBlur: true});

			for (i=0; validateBy[i]; i++) {
				tmp=validateBy[i].split("|");
				validateName=tmp[0];
				validateParams=tmp[1];
				
				var validateString="Validate."+validateName;
				if (validateParams) validateString+=", {"+validateParams+"}";
				
				var ev="Form.validationElements[Form.validationElementsIndex].add("+validateString+");";
				eval(ev);
			}

			Form.validationElementsIndex++;
	     });
	},

	autoSubmit: function(ev) {
		var ev = ev || window.event;
//		var form = Event.findElement(ev, "form");
		var q = $F(ev.target);
		if (q[0] == "?") {
			document.location.search = q;
		} else {
			document.location.search = "?" + ev.target.name + "=" + q;
//					
		}
	},

	initResizableTextAreas: function(textareas) {
		// valszeg 1 textarea jon at
		if (!textareas.each) {
			textareas = [textareas];
		}
		textareas.each(function(t) {
			new Nibble.ResizableTextArea(t);
		});
	},

	initForms: function() {
		$$("form.ajax").each(function(form) {
			form.observe("submit", this.ajaxDoSubmit.bind(this));
		}.bind(this));

		// capcha-s formot csak akkor ha van benne vmi
		if ($("_captcha")) {
			var form = $("_captcha").up("form");
			if (form) {
				form.observe("submit", function(ev) {
					if ($F("_captcha").length != 6) {
						alert("Érvénytelen ellenőrző kód!");
						ev.stop();
					}
				});
				$("recaptcha").on("click", function(ev) {
					var img = ev.target.up(".captcha").down("img");
					img.setAttribute("src", img.attr("src").replace(/\?.*/, '?' + Math.random()));
				});
				var img = $("_captcha").up("div.captcha").down("img");
				img.setAttribute("src", img.attr("src").replace(/\?.*/, '?' + Math.random()));
			}
		}

		$$("form[confirm]").each(function(form) {
			form.on("submit", function(ev) {
				if (!confirm(form.attr("confirm"))) {
					ev.stop()
				}
			});
		});
	},

	ajaxDoSubmit: function(event) {
		var form = Event.element(event);
		if (!this.checkRequiredFields(form)) {
			return Event.stop(event);
		}
		var target = form.getAttribute("onsubmit");
		var container = $("main");
		switch (target) {
			case "this":
				container = form;
			break;
			case "parent":
				container = form.parentNode;
			break;
		}
		this.ajaxSubmit(form, event, container);
	},

	ajaxSubmit: function(form, event, container) {
		var container = container || form;
		var fields = escape(form.serialize());
		Event.stop(event);
		form.disable();
		ajax("nibble", "ajaxSubmit", [form.getAttribute("action"), fields], function(response) {
			container.update(response);
//			this.initForms();
			Nibble.init();
			var errors = Element.getElementsByClassName(container, "error");
			if (errors.length > 0) {
				errors.first().scrollTo();
			} else {
				container.scrollTo();
			}
		}.bind(this));
	},

	isRequired: function(element) {
		return $(element).hasClassName("required");
	},

	isFilled: function (element) {
		switch (element.tagName) {
			case "EM":
				return true;
			break;
			case "FIELDSET":
				var tmp = $A(element.getElementsByTagName("input")).pluck("checked").any();
			break;
			default:
				var tmp = $F(element);
			break;
		}
		return tmp;
	},

	checkRequiredFields: function(form) {
		// ezt most csak adminon nezzuk meg
		if (!html.hasClassName("admin")) {
			return true;
		}
		var tmp = !form.$$(".required").find(function(element) {
			if (this.isRequired(element) && (!this.isFilled(element))) {
//				element.replace(new this.Error(element, "Required"));
				// ha kicsit az ablak, akkor a labelre ugorjon, 
				// ne rogton az inputra, mert akkor nem latszik, h mihez kell a mezo
				var prev = element.previous() ? element.previous() : element;
				prev.scrollTo();
				element.focus();
				Nibble.ajaxMessage("Ez a kötelező mező nincs kitöltve!", "fail");
				return true;
			}
		}.bind(this));
		return tmp;
	},

	initIPE: function() {
		var ipes = $$("span[ipe]");
		
		ipes.each(function(element) {
			new Ajax.InPlaceEditor(element, '/-/', {
				clickToEditText: "Klikk ide",
				callback: function(form, value) {
					return "controller=nibble"
						+ "&method=ipe"
						+ "&parameters=" + value.toJSON()
				}
			});
		});
	},

	initFCKeditor: function() {
		var textareas = $$("textarea[wysiwyg=fckeditor]");
/*		var time = 0.05;
		Nibble.FCKtries = 0;
		var loadingFCKeditor = function(pe) {
			if (Nibble.FCKtries++ > time * 2000) {
				
				pe.stop();
			}
			if (typeof(FCKeditor) != "undefined") {
				pe.stop();*/
				window.oFCKeditors = new Array();
				textareas.each(function(textarea) {
					var name = textarea.getAttribute("name");
					var id = textarea.getAttribute("id");
					textarea.setAttribute("id", name);
					window.oFCKeditors[id] = new FCKeditor(name, "100%", textarea.getAttribute("wysiwyg_height"));
					window.oFCKeditors[id].ToolbarSet = textarea.getAttribute("wysiwyg_toolbar") || "Basic";
					var myConfig = $H(Nibble.Form.FCKConfig).merge(Project.FCKConfig) || new Hash();
					myConfig.each(function(pair) {
						window.oFCKeditors[id].Config[pair.key] = pair.value;
					});
					window.oFCKeditors[id].ReplaceTextarea();
					textarea.setAttribute("id", id);
				});
/*			}
		}
		if (textareas) {
			new PeriodicalExecuter(loadingFCKeditor, time);
		}*/
	},

	checkAutoLoadFCKeditors: function() {
		if (!nibble || !nibble.FCKeditors) return;
		// betoltjuk azokat az fckeditorokat amikre
		var c = new CookieJar();
		for (var i = 0; i < nibble.FCKeditors.length; i++) {
			if (c.get(nibble.FCKeditors[i])) {
				this.loadFCKeditor(nibble.FCKeditors[i]);
			}
		}
	},

	loadFCKeditor: function(textarea) {
		if (typeof textarea == "string") {
			textarea = $(textarea).down("textarea");
		}
		// event jon a buttonbol
		if (textarea.tagName != "TEXTAREA") {
			var textarea = Event.extend(textarea);
			var button = $(textarea.target);
			textarea = button.up("div").down("textarea");
			button.remove();
		}
		if (typeof FCKeditor == "undefined") {
			Nibble.includeJS("/fckeditor/fckeditor.js", function() {
				Nibble.Form._loadFCKeditor(textarea);
			});
		} else {
			this._loadFCKeditor(textarea);
		}
	},

	_loadFCKeditor: function(textarea) {
		window.oFCKeditors = new Array();
		var name = textarea.getAttribute("name");
		var id = textarea.getAttribute("id");
		textarea.setAttribute("id", name);
		window.oFCKeditors[id] = new FCKeditor(name, "100%", textarea.getAttribute("wysiwyg_height"));
		window.oFCKeditors[id].ToolbarSet = textarea.getAttribute("wysiwyg_toolbar") || "Devidens";
		var myConfig = $H(Project.FCKConfig) || new Hash();
		myConfig.each(function(pair) {
			window.oFCKeditors[id].Config[pair.key] = pair.value;
		});
		window.oFCKeditors[id].ReplaceTextarea();
		textarea.setAttribute("id", id);
		var b = textarea.up("div").down("button");
		if (b) {
			b.remove();
		}
	},

	/**
	 * @version w.2009.05.09 23:05
         */
	autoLoadFCKeditor: function(id, checkbox) {
		
		var c = new CookieJar(); 
		if (checkbox.checked) {
			Nibble.Form.loadFCKeditor(id);
			c.put(id, true);
			ajax("nibble", "SetAutoLoadFckEditor", ['y'], function(response) {
			});
		} else {
			c.remove(id);
			ajax("nibble", "SetAutoLoadFckEditor", ['n'], function(response) {
			});
		}
	},

	updateToken: function(token) {
		if (token) {
			$$("form input[name=_token]").each(function(input) {
				input.value = token;
			});
		}
/*		ajax("nibble", "getToken", [], function(token) {
			
		});*/
	},

	errors: function(errors) {
		errors.each(function(pair) {
//			(pair.value) ? this.setError(e.key) : this.set
//			}
		});
	},

	setError: function() {
		this.Error = Class.create();
		this.Error.prototype = {

			initialize: function(element, message) {
				this.element = element;
				this.message = message;
			},
	
			toString: function() {
				
				return "<div class='error'>"
						+ ($$("label[for=" + this.element.id + "]")[0]).outerHTML
						+ this.element.outerHTML
						+ "<strong>" + this.message + "</strong>";
			}
		}
	},

	initRegExpValidator: function() {
		// w.2008.06.05 10:28
		// ez nagyon gyerekcipoben jar

		$$("input[accept=number]").each(function(i) {
			i.mask("9^.");
		});
		return false;

		$$("input[accept]").each(function(input) {
			input.observe("change", function() {
				var m= new RegExp(input.getAttribute("accept")).test(input.value);
				if (m) {
					input.setStyle({
						border: "1px solid green"
					});
				} else {
					input.setStyle({
						border: "1px solid red"
					});
				}
			});
		});
	},

	initSelects: function() {
		
		$$("select[addnew]").each(function(select) {
			var addNew = function() {
				if (this.selectedIndex + 1 == this.options.length) {
					var i = 0;
					// disablesre nem kene beallitani
					while (this.options[i].disabled) {
						i++;
					}
					this.selectedIndex = i;
					var newOption = prompt($A(this.options).last().text);
					if (newOption) {
						var index = select.hasOption(newOption);
						if (index > -1) {
							select.options[index].selected = true;
						} else {
							ajax("nibble", "addNew", [this.getAttribute("addnew"), newOption], function(newId) {
								if (newId) {
									$$("select[addnew=" + this.getAttribute("addnew") + "]").each(function(s) {
										var option = s.addOption(newOption, newId);
										if (s == this) {
											option.selected = true;
										}
									}.bind(this));
								} else {
									alert("Error!");
								}
							}.bind(this));
						}
					}
				}
			}
			select.observe("change", addNew.bind(select));
			select.observe("focus", function() {
				if (this.options.length == 2 && this.selectedIndex == 1) {
					addNew.bind(this)();
				}
			});
			if (document.addEventListener) {
				document.addEventListener('added', function(ev) {
					$(ev.element).$$("select[addnew]").each(function(s) {
						s.observe("change", addNew);
						s.observe("focus", function() {
							if (this.options.length == 2 && this.selectedIndex == 1) {
								addNew.bind(s)();
							}
						});
					});
				}, false);
			}
		});

/*		$$("select[size=1]").each(function(select) {
			new Control.SelectMultiple(select, select, {
				checkboxSelector: function() {
					return ["a"];
				}
			});
		});*/

		$$("select.select-tab").each(function(select) {
			
			var showTab = function(select) {
				// igy a dinamikusan generalt tabok is kezelhetok
				var tabs = $$("*[id^=select-tab]");
				
				tabs.invoke("hide");
				tabs.invoke("removeClassName", "hide");
				var tab = $("select-tab-" + $F(select));
				if (tab) {
					tab.show();
				}
 			}
 			showTab(select);
//			new Form.Element.Observer(select, 0.2, function(e) {
			select.observe("change", function(e) {
				showTab(e.target);
			});
		});

//		$$("select[multiple]").invoke("betterMultiple");
	},

	negativeCaptcha: function() {
		$$(".negcap").invoke("remove");
	},

	initAjaxFileUploads: function() {
		Event.observe(document, "controllers:inited", function(ev) {
//			
			$$("input[onselect]").each(function(i) {
				i.on("change", eval(i.readAttribute("onselect")) || Prototype.emptyFunction);
			});
		});
	},

	initAutoFocus: function() {
		var first = $$("input[autofocus]").first();
		if (first) first.focus();
	},

	initMultipleCheckboxes: function() {
		var first = true;
		$$("fieldset.checkbox div.multiple").each(function(multiple) {
			multiple.insert({ after: new Element("div", { className: "help" }) });
			var setHelp = function(m) {
				// elsore nem futunk le
				if (first) {
					first = false;
					return;
				}
				var checkeds = m.$$("input:checked");
				if (
					checkeds[0] 
					&& checkeds[0].up("label").down("span").innerHTML == "Összes megye"
				) {
					checkeds = checkeds.slice(1);
				}
				m.next(".help").update(checkeds.invoke("up", "label").invoke("down", "span").pluck("innerHTML").join(", "));
			}
			var selector = document.protocol ? "span" : "input";
			multiple.delegate(selector, "click", function(ev) {
				// ff inputot, ie spant ad vissza
				var input = ev.target.parentNode.firstChild;

				if (ev.target.tagName == "SPAN" && !ev.target.up("label").hasClassName("first")) {
					input.checked = !input.checked;
				}
//				
				ev.target.up("label").addClassNameIf("selected", input.checked);
				setHelp(ev.target.up("div"));
//				ev.stop();
			});
			multiple.on("input:checked", function(ev) {
				ev.target.$$("input:checked").invoke("up", "label").invoke("addClassName", "selected");
				setHelp(ev.target);
			});
			multiple.fire("input:checked");
		});
	},

	initTaxNumbers: function() {
		$$("div.taxnumber").each(function(div) {
			var inputs = div.$$("input");
			inputs.each(function(i, index) {
				i.mask("9^");
				i.on("keypress", function(ev) {
					
					if (ev.keyCode == 13) {
						ev.target.up("form").submit();
					}
					if (
						$F(ev.target).length == $N(ev.target.attr("maxlength")) - 1 
						&& ev.keyCode == 0
					) {
						var next = ev.target.next("input");
						if (next) next.focus();
					}
					if (
						($F(ev.target).length == 1 || $F(ev.target).length == 0)
						&& ev.keyCode == 8
					) {
						var prev = ev.target.previous("input");
						if (prev) prev.focus();
					}
				});												
				i.on("keydown", function(ev) {
					
					if (
						$F(ev.target).length == $N(ev.target.attr("maxlength"))
						&& ev.keyCode == 0
					) {
						var next = ev.target.next("input");
						if (next) next.focus();
					}
				});												
			});
		});
	},

	initDefaultValues: function() {
		$$("input[i18n_default_value]").each(function(i) {
			if (!$F(i)) {
				i.setValue(i.i18n("default_value"));
			}
			i.on("focus", function(ev) {
				var t = ev.target;
				if ($F(t) == t.i18n("default_value")) {
					t.setValue("");
				}
			});
			i.on("blur", function(ev) {
				var t = ev.target;
				if ($F(t) == "") {
					t.setValue(t.i18n("default_value"));
				}
			});
		});
	},

	initZipcodes: function() {
		
		$$("input[name*=zipcode]:not(.noinit)").each(function(i) {
			i.mask("9^");
			i.on("change", function(ev) {
//				
//				
				if ($F(ev.target).match(/^\d{4}$/)) {
					// ha van az inputon noerror class, akkor nem dobunk hibat
					ajax("addresses", "GetCityByZipcode", [$F(ev.target), ev.target.hasClassName("noerror")], function(city) {
						if (city) {
							var s = "input[name*=city]";
							var iCity = ev.target.next(s) || ev.target.up("tr") ? ev.target.up("tr").next("tr").down(s) : false || ev.target.up("form").down(s);
							if (iCity) {
								iCity.setValue(city);
							}
						}
					});
				}
			});
		});
	},

        /**
         * @version w.2008.11.27 16:26
         */
	doSubmit: function(ev) {
		var form = ev.target;
		var tmp = Nibble.Form.checkRequiredFields(form);
		if (!tmp) {
			ev.stop();
		}
	},
	
	multiinputAddRow: function(element) {
		var row=$(element).up("div",0);
		var row_id=parseInt(row.getAttribute("row"),10);
		if (row.next("div",0)) {
			row.next("div",0).style.display="block";
			$(element).style.visibility="hidden";
			if ($(element).next("img",0)) $(element).next("img",0).style.visibility="hidden";
		}
	},
	multiinputDeleteRow: function(element) {
	     var row=$(element).up("div",0);
		var row_id=parseInt(row.getAttribute("row"),10);
		if (row.previous("div",0)) {
			this.multiinputEraseRow($(element));
			row.style.display="none";
			row.previous("div",0).$$("img.multiinput_erase")[0].next("img",0).style.visibility="visible";
			if (row_id>2) row.previous("div",0).$$("img.multiinput_erase")[0].next("img",1).style.visibility="visible";
		}
	},
	multiinputEraseRow: function(element) {
	     var row=$(element).up("div",0);
		row.$$("input").each(function(element2) {
		     element2.value="";
		});
		row.$$("select").each(function(element2) {
		     element2.value="0";
		     element2.value="NULL";
		});
	},

	toggleRequired: function(element) {
		element.getElementsBySelector("input").each(function(e) {
			if (e.getAttribute("required")=="required") {
				e.removeAttribute("required");
				e.writeAttribute("required_hide");
			}
			else if (e.getAttribute("required_hide")=="required_hide") {
				e.removeAttribute("required_hide");
				e.writeAttribute("required");
			}
		});
	},

	multiinputNavigate: function(event) {
		var element=Event.element(event);
		var row=element.up("div",0);
		var rowNum=row.getAttribute("row");

		if (event.keyCode == 38 && rowNum>1) {
			if (row.previous("div",0).down('input',0)) row.previous("div",0).down('input',0).focus();
			if (row.previous("div",0).down('input',0)) row.previous("div",0).down('input',0).select();
		}
		if (event.keyCode == 40 && row.next("div",0)) {
			this.multiinputAddRow(row.down("img",0).next("img",0));
               if (row.next("div",0).down('input',0)) row.next("div",0).down('input',0).focus();
               if (row.next("div",0).down('input',0)) row.next("div",0).down('input',0).select();
		}
	}

}

this.Form.initialize();
		
		if ((typeof(RepetitionElement) != "undefined") 
			&& (typeof(RepetitionElement._init_document) !="undefined")
		) {
			RepetitionElement._init_document();
		}

		if (typeof(Lightbox) != "undefined" && this.needWidget("lightbox")) {
			initLightbox();
		}

		if (typeof(this.FileUpload) != "undefined") {
			this.fileUpload = new this.FileUpload();
		}

		if (Nibble.needWidget("antispam")) {
			this.antiSpam();
		}

		this.initAjaxEvents();

		if (Nibble.needWidget("external")) {
			this.external();
		}

		if (typeof(Project) !== Control.Tabs) {
			$$(".tabs").invoke("tabs");
		}

		// ez jobb ha a vegen van akkor mar lat sok mindent
		if (typeof(Project) !== "undefined") {
			Project.init();
		}

		this.initErrorReporter.ifExists("#centered #error", this);

		$$("ul.collapsed").invoke("expandTree");
		if (!document.protocol || true) {
			var iAutoCompleters = $$("input[autocompleter]");
			iAutoCompleters.each(function(e) {
				e.on("focus", function(ev) {
					ev.target.doAutoCompleter(ev.target);
				});
			});
			// http://dev.rubyonrails.org/ticket/7752
			if (iAutoCompleters.length) {
				Event.observe(window, "beforeunload", function(ev) {
					iAutoCompleters.each(function(e) {
						e.setAttribute("autocomplete", "on");
					});
				});
			}
		}


		document.observe("added", this.doAdded.bindAsEventListener());
		document.observe("removed", this.doRemoved.bindAsEventListener());
		document.observe("moved", this.doMoved.bindAsEventListener());

		html.on("submit", this.Form.doSubmit.bindAsEventListener());

		this.saveLister.ifExists("#savelister", this);

		this.initWidgets();

		this.setHoverOnHash();
		
		this.highlightedCellElement=null;

		html.fire("nibble:inited");	
		
	},

	initErrorReporter: function() {

    
    var reportButton = $('report-error').appendChild(new Element("input", {
        type: "button",
	value: "Jelentem a hibát"
    })).observe('click', function() {
	reportButton.disabled = true;
	reportButton.blur();
	ajax("error", "report", [{
	    url: document.location.href,
	    referer: document.referrer
	}], function () {
	    reportButton.value = "Köszönjük, hogy segíti munkánkat!";
	});
    });

}, /* a vesszo kell! */
	saveLister: function(e) {
		e.on("click", function(ev) {
			var name;
			if (name = prompt("Kérnék egy megnevezést!")) {
				ajax("nibble", "savelister", [name, document.location.pathname, document.location.search.base64Encode()], function(id) {
					if (id) {
						var s = $("saved_lists");
						if (s && s.tagName == "SELECT") {
							s.addOption(name, document.location.search, 1, true);
							new Effect.Highlight(s, { startcolor: "#00c000" });
						}
					}
				});
			}
			ev.stop();
		});
	},

	ajaxMessage: function(r, klass, _alert) {
		if (r[0] == "@") return;
		if (Nibble.disableAjaxIndicator) {
			
			return;
		}
		var r = r || "OK!";
		var klass = klass || "ok";
		var id = "nibble-ajax-message";
		var e = $(id) || body.appendChild(new Element("div", {id: id}));
		Nibble.lastAjaxMessage = r;
		e.show();
		e.update(r).className = "";
		e.addClassName(klass);
		Effect.Fade.delay(2, e);
		if (_alert) alert(r);
	},

	external: function() {
		$$("a[rel=external]").each(function(a) {
			// csak a szoveg melle kell a kis ikon
			// https://secure.devidens.hu/mantis/view.php?id=1215
/*			if (a.firstChild.nodeType == 3) {
				a.addClassName("external")
			}*/
			a.setAttribute("target", "_blank");
		});
	},

	needWidget: function(name) {
		if (document.getElementById("_widgets")) {
			return (document.getElementById("_widgets").getAttribute("content").indexOf(name) >= 0);
		}
	},

	delegate: function(listener)  {
		return function(type, args, selector) {
			var event = args[0];
			var src = Event.element(event);
			if (selector && $$(selector).indexOf(src) + 1) {
				src.observe(type, function(event) {
					Event.stop(event);
//					
					return listener.bind(src)(event);
				});
				return listener.bind(src)(event);
			}
		}
	},

	doAdded: function(ev) {
		if (ev.element.tagName == "TR") {
			ev.element.up("tbody").zebra();
		}
		// highlight elkurja a zebrat
//	        new Effect.Highlight(ev.element, { startcolor: "#003366" });
		var container = $(ev.target.readAttribute("container")) || ev.target.up("div");
		container.$$("input[autocompleter]").invoke("doAutoCompleter");
//		container.$$("input[type$=date]").invoke("initCalendar");
	},

	doRemoved: function(ev) {
//		
		if (ev.target.tagName == "TR") {
			var tbody = ev.target.up("tbody");
			tbody.zebra();
//		        new Effect.Highlight(tbody, { startcolor: "red" });
		}
	},

	doMoved: function(ev) {
		if (ev.element.tagName == "TR") {
			ev.element.up("tbody").zebra();
		}
	},

	/*
	initGoogleAnalytics: function() {
		if (typeof(_uacct) != "undefined") {
			this.loadScript("http://www.google-analytics.com/urchin.js", function() {
//				
				urchinTracker();
			});
		}
	},

	loadScript: function(url, callback) {
		var script = document.createElement("script");
		script.type = "text/javascript";
		if (callback)
			script.onload = script.onreadystatechange = function() {
				if (script.readyState && script.readyState != "loaded" && script.readyState != "complete")
					return;
				script.onreadystatechange = script.onload = null;
				callback();
			};
		script.src = url;
		document.getElementsByTagName("head")[0].appendChild(script);
	},
        */

	antiSpam: function() {
/*		var emails = document.getElementsByTagName("address");
		for (var i = 0; i < emails.length; i++) {
			emails[i].innerHTML = emails[i].innerHTML.replace(/\.kukac\./g, "@");
		}*/
		$$("a.email").each(function(a) {
			a.setAttribute("href", a.getAttribute("href").replace(/\.kukac\./g, "@"));
			a.innerHTML = a.innerHTML.replace(/\.kukac\./g, "@");
		});
	},

	ajax: function(controller, method, parameters, callback) {
//		if (console.trace) {
//			
//		}
		parameters = parameters || [];
		var options = {
			asynchronous: false, 
			method: "post",
			parameters: "controller=" + controller
					+ "&method=" + method
					+ "&parameters=" + encodeURIComponent(parameters.toJSON())
		};
//		
//		var hash = hex_md5(options.parameters);
		// FIXME: Nincs cache, mert immola calendart meg kell csinalni.
//		if (false && callback && this.ajaxCache[hash]) {
//			return callback(this.ajaxCache[hash]);
//		}
		Nibble.ajaxIndicator(true);
		if (callback) {
			options.asynchronous = true;
			options.onSuccess = function(xmlhttp) {
				Nibble.ajaxIndicator(false);
				var response = eval(xmlhttp.responseText);
				var am;
				if (am = xmlhttp.getResponseHeader("X-Ajax-Message")) {
					am = eval(am);
					// w.2008.08.15 15:58
					// !! azt jelenti, hogy alertet is kell dobni
					// persze ide mar csak egy jon, at mert az a nibble/php-nek
					// azt jelenti, hogy hiba
					var alert = (am[0][0] == "!");
					if (alert) {
						am[0] = am[0].substr(1);
					}
					Nibble.ajaxMessage(am[0], am[1], alert);
					Nibble.lastAjaxMessage = am[0];
				}
				callback(response);
//				Nibble.ajaxCache[hash] = response;
			}
			options.onFailure = function(xmlhttp) {
				Nibble.ajaxIndicator(false);
				var response = eval(xmlhttp.responseText);
				callback();
			}
		}
		var myAjax = new Ajax.Request("/-/", options);
		if (callback) {
			return true;
		}
		var tmp = myAjax.responseIsSuccess() ? eval(myAjax.transport.responseText) : "";
		Nibble.ajaxIndicator(false);
		Nibble.ajaxCache[hash] = tmp;
		return tmp;
	},

	ajaxIndicator: function(status) {
		if (Nibble.disableAjaxIndicator) return;
		status = status || false;
		var indicatorId = "ajax_indicator";
		var indicator = $(indicatorId);
		if (indicator) {
			if (status == false) {
				Element.hide(indicator);
			} else {
				Element.show(indicator);
			}
		} else {
			var _html = "<div id='" + indicatorId + "' class='fixed'><img src='/images/ajax-loader.gif' /></div>";
			($("body") || html.firstChild).insert({top: _html});
			var indicator = $("ajax_indicator");
			if (arguments.length == 0) {
				indicator.hide();
			}
			return indicator;
		}
	},


	initAjaxEvents: function() {
/*		var _delete = function (module, method, args) {
			if (confirm("Are you sure?")) {
				var args = [this.up("tr").down("td.dir a").innerHTML, $("current_dir").innerHTML];
				
				ajax(module, method, args, function(response) {
					if (response) {
						this.up("tr").remove();
					} else {
						alert("Sorry, can't delete!");
					}
				}.bind(this));
			}
		}.delegateAsAjaxEvent("img[event~=delete]");*/
		var _delete = function (module, method, args) {
			if (confirm("Biztos?")) {
				ajax(module, method, args, function(response) {
					if (response) {
						var e = this.up(".delete") || this.up("tr");
						if (e.tagName == "TR") {
							var tbody = this.up("tbody");
							e.remove();
							tbody.zebra();
							var ev = e.fire("rowdelete");
							if (e = $("listercount")) {
								e.update($N($("listercount").innerHTML) - 1);
							}
						} else {
							e.remove();
						}
					} else {
						alert("Sajnos nem tudtam törölni!");
					}
				}.bind(this));
			}
		}.delegateAsAjaxEvent("img[event*=elete]");
                /* kis d nagy D nem mindegy */
	},

	deleteListerTr: function(element) {
		var e = element.up(".delete") || element.up("tr");
		if (e.tagName == "TR") {
			var tbody = this.up("tbody");
			e.remove();
			tbody.zebra();
			var ev = e.fire("rowdelete");
			if (e = $("listercount")) {
				e.update($N($("listercount").innerHTML) - 1);
			}
		} else {
			e.remove();
		}
	},

	loadControllers: function() {
		for (var i in this) {
			if (typeof(this[i].initialize) == "function") {
				var prototype = this[i];
				this[i] = Class.create();
				this[i].prototype = prototype;
//				var x = new this[i]();
				this[i] = new this[i]();
			}
		}
		
		document.fire("controllers:inited");
	},

	includeJS: function(src, callback) {
		
		var node = document.createElement("script");
		node.setAttribute("type", "text/javascript");
		node.setAttribute("src", src);
		if (document.protocol) {
			node.onreadystatechange = function () {
				if (node.readyState == 'loaded' || node.readyState == 'complete') {
					callback();
				}
			}				
		} else {
			node.onload = function() {
	//			
				if (callback) {
	//				
					callback();
				}
			}
		}
		document.getElementsByTagName("head")[0].appendChild(node);
	},

	includeCSS: function(src) {
//		
		var node = document.createElement("link");
		node.setAttribute("rel", "stylesheet");
		node.setAttribute("type", "text/css");
		node.setAttribute("media", "screen");
		node.setAttribute("href", src);
		document.getElementsByTagName("head")[0].appendChild(node);
	},

	initWidgets: function() {
		Event.observe(document, "click", function(ev) {
			var widget = ev.target.readAttribute("widget");
			if (widget) {
				
				new Nibble.Widget[widget](ev.target);
			};
		});
	},

	initKeepAlive: function() {
		new PeriodicalExecuter(function(pe) {
			ajax("nibble", "KeepAlive", [], function() {});
		}, 180);
	},

	// w.2008.05.06 10:51
	backButton: function(a) {
		$(a.parentNode).removeClassName("hide");
		a.on("click", function(ev) {
			ev.stop();
			history.back();
		});
	},
	
	lz: function(number) {
		return ($N(number) < 10) ? "0" + number : number;
	},

	setHoverOnHash: function() {
		if (document.location.hash) {
			var el = document.getElementById(document.location.hash.substr(1));
			if (el) {
				$(el).addClassName("hover");
			}
		}
	},

        /**
         * @version w.2008.11.15 21:50
         */
	popOut: function(e) {
		var html = e.next(".html");
		html.hide();
		
		var p = new Nibble.Popup();
		p.centered("http://index.hu", html.getWidth(), html.getHeight());
		p.update
	},

        /**
         * @version w.2009.01.06 20:32
         */
	setField: function(select, encode) {
		if ($F(select) != "0" && confirm("Biztos?")) {
			ajax("nibble", "SetField", [$F(select), encode], function(response) {
			});
		}
	},

	/**
	 * @version w.2009.01.08 14:19
         */
	reload: function() {
		window.location.reload();
	},

	autoSubmit: function(event) {
		Event.extend(event).target.up("form").submit();
	},

        /**
         * @version w.2009.02.16 16:44
         */
	uploadExcel: function(o) {
		var ev = o.event;
		
		var fs = ev.target.up("fieldset");
		if (!fs) return false;
		if (/.xls$/i.test($F(ev.target))) {
			var productId = document.location.href.split("/")[5];
			ev.target.upload(o);
		} else {
			var err = fs.down("div.error") || fs.appendChild(new Element("div", {
				className: "error"
			}));
			err.update("Nem excel!").show();
			Effect.Fade.delay(2, err);
		}
	},

	doArrows: function(event) {
		var element=Event.element(event);
   
		if (event.ctrlKey == true && event.keyCode == 38) {
			var arr=element.up("tr",0).immediateDescendants();
			for (x=0; arr[x]; x++) if (arr[x]==element.up("td",0)) break;
			
			var i=0;
			while (element.up("tr",0).previous("tr",i)) {
				var y=x-1;
				var quit=false;
				while (element.up("tr",0).previous("tr",i).down("td",0).next("td",y)) {
				     if (element.up("tr",0).previous("tr",i).down("td",0).next("td",y).down("input",0)) {
				     	element.up("tr",0).previous("tr",i).down("td",0).next("td",y).down("input",0).focus();
				     	var quit=true;
						break;
				     }
				     y++;
				}
		     i++;
			if (quit) break;
			}
		}
		
		if (event.ctrlKey == true && event.keyCode == 40) {
			var arr=element.up("tr",0).immediateDescendants();
			for (x=0; arr[x]; x++) if (arr[x]==element.up("td",0)) break;
			
			var i=0;
			while (element.up("tr",0).next("tr",i)) {
				var y=x-1;
				var quit=false;
				while (element.up("tr",0).next("tr",i).down("td",0).next("td",y)) {
				     if (element.up("tr",0).next("tr",i).down("td",0).next("td",y).down("input",0)) {
				     	element.up("tr",0).next("tr",i).down("td",0).next("td",y).down("input",0).focus();
				     	var quit=true;
						break;
				     }
				     y++;
				}
		     i++;
			if (quit) break;
			}
		}
		
		if (event.ctrlKey == true && event.keyCode == 37) {
			var i=0;
			while (element.up("td",0).previous("td",i)) {
			     if (element.up("td",0).previous("td",i).down("input",0)) {
			     	element.up("td",0).previous("td",i).down("input",0).focus();
			     	break;
			     }
			     i++;
			}
		}
		
		if (event.ctrlKey == true && event.keyCode == 39) {
			var i=0;
			while (element.up("td",0).next("td",i)) {
			     if (element.up("td",0).next("td",i).down("input",0)) {
			     	element.up("td",0).next("td",i).down("input",0).focus();
			     	break;
			     }
			     i++;
			}
		}
	},
	
	highlightTable: function(event) {
	     var element=Event.element(event);
	     if (element!=Nibble.highlightedCellElement) {
			Nibble.highlightedCellElement=element;
		     if (element.localName=="TD" && !element.hasClassName("no_highlight")) {
			     var table=Event.element(event).up("table",0);
			     if (!table) return;

			     // visszavesszuk a kijeloleseket:
			     table.getElementsBySelector("td").each(function(element2) {
			          if (!element2.hasClassName("no_highlight")) {
						element2.removeClassName("highlight");
						element2.removeClassName("highlight_cell");
					}
			     });

			     // kijeloljuk a sorat:
			     element.up("tr").getElementsBySelector("td").each(function(element2) {
			     	if (!element2.hasClassName("no_highlight")) element2.addClassName("highlight");
			     });

			     // kijeloljuk az oszlopat:
			     for (i=0; element.previous("td",i); i++);
			     table.getElementsBySelector("tr").each(function(element2) {
			          if (element2.down("td",i)) if (!element2.down("td",i).hasClassName("no_highlight")) element2.down("td",i).addClassName("highlight");
			     });

			     element.addClassName("highlight_cell");
			}
		}
	},
	
	editI18N: function(id,ev) {
	     var span=Event.element(ev);
		Event.stop(ev);
		
		var message=prompt("Írd be a szöveget:",span.innerHTML);
		if (!message) return;
		ajax("nibble", "saveI18N", [id, message], function(response) {
		     span.innerHTML=message;
		});
	},
	
	deleteFromSavedLister: function(element,id) {
	     element.up('li',0).squish();
		ajax("nibble", "DeleteFromSavedLister", [id], function(response) {

		});
	},
	
	showAjaxBlockContent: function(element) {
	     var uniqueName=element.up("div",0).getAttribute('id');
		ajax("nibble", "GetAjaxBlockContent", [uniqueName], function(response) {
		     $(uniqueName).update(response);
		});
	}
	
};

/*if (Nibble.needWidget("fckeditor")) {
	Nibble.includeJS("/fckeditor/fckeditor.js");
}*/


if (false && Nibble.needWidget("jscalendar") && !document.implementation.hasFeature("WebForms", "2.0")) {
	Nibble.includeJS("/jscalendar/calendar.js");
	Nibble.includeJS("/jscalendar/lang/calendar-hu-utf8.js");
	Nibble.includeJS("/jscalendar/calendar-setup.js", Nibble.Form.initDates);
	Nibble.includeCSS("/jscalendar/calendar-blue2.css");
}


if ($("jsconfig")) {
//	
//	
//	
	Nibble.config = $("jsconfig").readAttribute("content").base64Decode().evalJSON();
//	
}

if (Nibble.needWidget("ipe")) {
	Nibble.includeJS("/js/scriptaculous/src/effects.js");
	Nibble.includeJS("/js/scriptaculous/src/controls.js");
}

if (Nibble.needWidget("sortable")) {
	Nibble.includeJS("/js/scriptaculous/src/dragdrop.js", function() {
		document.fire("dnd:loaded");
	});
}

if (Nibble.needWidget("sound")) {
	Nibble.includeJS("/js/external/soundmanager2.js", function() {
		soundManager.onload = function() {
			document.fire("sound:loaded");
		}
	});
}

ajax = Nibble.ajax;
a = ajax;

Function.prototype.ajaxEvent = function() {
//	
	var handler = this;
	return function(event) {
		var src = Event.element(event);
		var params = src.getAttribute("event").split(" ");
		return handler.apply(src, [params[0], params[1], params.slice(2)]);
	}
}

Function.prototype.delegateAsAjaxEvent = function(selector) {
/*	
	
	*/
//	Nibble.onClickDelegation.subscribe(Nibble.delegate(this.ajaxEvent()), selector);
	html.on("click", function(ev) {
//		
//		Nibble.delegate(this.ajaxEvent()).bindAsEventListener(this, 'click', [ev], selector)();
		Nibble.delegate(this.ajaxEvent())('click', [ev], selector);
	}.bind(this));
}

Function.prototype.ifExists = function(selector, scope) {
	// this != ifExists, ez az fgv, aminek az ifExist-je van
	// arguments.callee === ifExists ez az ifExists fgv
	
	var result = $$(selector);
	if (result.length > 0) {
		if (result.length == 1) {
			result = result.shift();
		}
		return this.apply(scope, [result]);
	}
}

Function.prototype.ifNeedWidget = function(widget) {
	if (Nibble.needWidget(widget)) {
		return this();
	}
}

Function.prototype.whenLoaded = function(object, scope) {
	var time = 0.05;
	var tries = 0;
	var method = this;
	new PeriodicalExecuter(function(pe) {
//		
		if (tries++ > time * 1000) {
			
			pe.stop();
		}
		if (typeof(eval(object)) != "undefined") {
			pe.stop();
			return method.apply(scope);
		}
	}, time);
}

function $N(value, nan, decimal) {
	var nan = nan || 0;
	var decimal = decimal || 0;
	if (typeof(value) == "string") {
		value = value.replace(",", ".");
	}
	if ((value === 0) || (value === "0")) return 0;
	var tmp = (tmp = parseFloat(value, 10)) ? tmp : nan;
	if (decimal) {
		tmp = tmp.format(decimal);
	}
	tmp = parseFloat(tmp, 10);
	return tmp;
}

String.prototype.numberFormat = function (_String){
	_String = this != window ? this : _String;
	if(_String == '') return '';

	var begin = _String.length % 3 ;
	var nIndex = 0;
	var tmp = "";

	if(_String.length > 3){
		for(var i = begin; i < _String.length; i++){
			if(!nIndex) tmp += ' ';
			tmp += _String.charAt(i);
			nIndex= nIndex == 2 ? 0 : nIndex+1;
		}
		_String = _String.substr(0, begin) +  tmp;
		if(_String.indexOf(',') == 0) _String = _String.substr(1, _String.length)
	}
	return _String;
}



Nibble.Widget = Class.create({

	initialize: function(e, o) {
		this.id = Math.random();
		
		this.o = o || {};
		this.e = $(e);
		// template
		this.t = $$("div." + this.name)[0];
		
		this.e.observe("focus", this.doFocus.bindAsEventListener(this));
		this.e.observe("blur", this.doBlur.bindAsEventListener(this));
//		if (this.o.focus) {
			this.doFocus();
//		}
//		this.inCash.ifExists("#payment_mode", this);
//		this.currencyRate.ifExists("#currency_rate", this);
		this.attached = false;
	},

	doGlobalClick: function(ev) {
		if (ev.target.descendantOf(this.wc)) {
			this.preventBlur = true;
			return true;
		}
		// Widgetre klikkelt a manus?
		this.preventBlur = 
			Position.within(this.wc, Event.pointerX(ev), Event.pointerY(ev))
			||
			Position.within(this.w, Event.pointerX(ev), Event.pointerY(ev))
		// nem biztos, h vagy blur az elementre
		
		if (!this.preventBlur) {
			this.doBlur();
		}
	},

	attachWidget: function() {
		
		if (this.attached) return;
		this.attached = true;
		this.wc = new Element("div", { 
			className: "widget-container"
		});
		this.e.wrap(this.wc);
		this.w = this.t.cloneNode(true).removeClassName("widget-template").addClassName("widget");
		this.w.$$("input, select").invoke("addClassName", "widget");
		this.wc.style.visibility = "hidden";
		this.e.parentNode.appendChild(this.w);
		this.setPosition(this.o.position);
		this.wc.style.visibility = "visible";
/*		
		this.w.observe("mousedown", function(ev) {
			this.preventBlur = true;
			
		}.bindAsEventListener(this));
		this.w.observe("blur", function(ev) {
			
		}.bindAsEventListener(this));*/
		html.observe("mousedown", this.doGlobalClick.bindAsEventListener(this));
	},

	doFocus: function(ev) {
		
		// nem kap, egybol focust
		this.e.focus();
		if (!this.w) {
			this.attachWidget();
		}
		this.showWidget();
		if (ev) ev.stop();
	},

	doBlur: function(ev) {
		
		if (this.preventBlur) {
			return Event.stop(ev);
		}
		if (this.w.displayed()) {
//			this.setValue();
			this.hideWidget();
		}
	},

	showWidget: function() {
		if (this.w.displayed()) return;
//		
		// show nem jo, mert class-szel el van rejteve, a show meg csak ""-re allit be, nem blockra
		this.w.style.display = "block";
	},

	hideWidget: function() {
		this.w.hide();
//		this.disableWidget();
	},

	enableWidget: function() {
		this.w.$$("input").invoke("enable");
		this.w.$$("select").invoke("enable");
	},

	disableWidget: function() {
		this.w.$$("input").invoke("disable");
		this.w.$$("select").invoke("disable");
	},

	setValue: function(ret) {
//		
		this.ret = ret || this.ret;
//		this.e.value = $F(this.w.$$("*[name=return]")[0]);
		if (this.ret && this.ret != "") {
//			
			this.e.value = this.ret;
			this.e.fire("change");
			
			this.e.focus();
		}
	},

	setPosition: function(position) {
		switch (position) {
			case "top":
				this.w.style.marginTop = - (this.w.getHeight() + this.wc.getHeight()) + "px";
			break;
		}
	}

});Nibble.ExpandTree = Class.create();
Nibble.ExpandTree.prototype = {
	initialize: function(e, o) {
		this.e = e;
		this.o = Object.extend({
//			imgOpen: "/images/default/tree/elbow-plus-nl.gif",
//			imgClose: "/images/default/tree/elbow-minus-nl.gif"
		}, o);

		this.e.on("click", function(ev) {
			var stop = true;
			if (ev.target.tagName == "A") {
				stop = false;
				li = $(ev.target).up("li");
			} else {
				li = $(ev.target);
			}
			this.doClick.bind(this)(li);
			if (stop) {
				ev.stop();
			}
		}.bind(this));
		this.cookie = new CookieJar({ 
			expires: 3600,
			path: "/"
		}); 
		this.nodes = [].concat(this.cookie.get("nodes")).compact();
		this.nodes.each(function(id) {
//			
			this.doOpen($("node" + id));
		}.bind(this));
	},

	preLoadImages: function() {
		new Image().src = this.o.imgOpen;
		new Image().src = this.o.imgClose;
	},

	doClick: function(li) {
		this["do" + (li.hasClassName("close") ? "Close" : "Open")].bind(this)(li);
	},

	doOpen: function(li) {
		li.$$("ul").findAll(function(e) {
			return (e.parentNode == this);
		}.bind(li)).invoke("setStyle", { display: "block" });
		li.removeClassName("open").addClassName("close");
		this.nodes.push(li.id.replace("node", ""));
		this.save();
	},

	doClose: function(li) {
		li.$$("ul").findAll(function(e) {
			return (e.parentNode == this);
		}.bind(li)).invoke("hide");
		li.removeClassName("close").addClassName("open");
		this.nodes = this.nodes.without(li.id.replace("node", ""));
		this.save();
	},

	save: function() {
		this.nodes = this.nodes.uniq();
		this.cookie.put("nodes", this.nodes);
	}

}Nibble.SpinEdit = Class.create();
Nibble.SpinEdit.prototype = {

	initialize: function(e, o) {
		this.e = e;
		this.o = Object.extend({
			defaultValue: 0,
			onClick: eval(e.readAttribute("onclick")) || Prototype.emptyFunction,
			min: parseInt(e.readAttribute("min")),
			max: parseInt(e.readAttribute("max"))
		}, o);
		this.up = new Element("button").update(
			decodeURIComponent("%e2%96%b2")
		).observe("click", 
			this.doUp.bindAsEventListener(this)
		);

		this.down = new Element("button").update(
			decodeURIComponent("%e2%96%bc")
		).observe("click", this.doDown.bindAsEventListener(this));;
		this.e.wrap("div").addClassName("spinedit").setStyle({
			display: this.e.getStyle("display")
		}).insert({
			bottom: this.up
		}).insert({
			bottom: this.down
		});

		this.up.addClassName("sipn_up_arrow");
		this.down.addClassName("sipn_down_arrow");
		this.up.setAttribute("type","button");
		this.down.setAttribute("type","button");

		var v = $F(this.e);
		if (!v) {
			this.e.setValue(this.o.defaultValue);
		} else {
			if (v < this.o.min) {
				this.e.setValue(this.o.min);
			}
			if (v > this.o.max) {
				this.e.setValue(this.o.max);
			}
		}
	},

	doUp: function(ev) {
		var v = $N($F(this.e));
		if (v < this.o.max) {
			this.e.setValue(v + 1);
			this.o.onClick(ev.target);
		}
		ev.stop();
	},
	        
	doDown: function(ev) {
		var v = $N($F(this.e));
		if (v > this.o.min) {
			this.e.setValue(v - 1);
			this.o.onClick(ev.target);
		}
		ev.stop();
	}
}Nibble.Marquee = Class.create();
Nibble.Marquee.prototype = {
	initialize: function(element) {
		if (!(this.element = $(element))) return false;
		this.indent = 0;
		this.scroll = true;
		this.separator = "";

		this.inner = $(document.createElement("span"));
		this.inner.innerHTML = this.element.innerHTML.strip() + this.separator;

		this.outer = $(document.createElement("div"));
		this.element.innerHTML = "";

		this.outer.appendChild(this.inner);
		this.element.appendChild(this.outer);

		this.fullWidth = this.element.getDimensions().width;
		this.innerWidth = this.inner.getDimensions().width;
		
		this.repeat = $N(this.fullWidth / this.innerWidth) + 1;
	
/*		for (var i = 0; i < this.repeat; i++) {
			this.outer.appendChild(this.inner.cloneNode(true));
		}*/                                          

		this.element.appendChild(this.outer);

		this.element.observe("mouseover", this.doMouse.bindAsEventListener(this));
		this.element.observe("mouseout", this.doMouse.bindAsEventListener(this));

		this.interval = setInterval(this.doScroll.bind(this), 50);
	},

	doScroll: function() {
		if (!this.scroll) return;
		this.indent += 3;
		this.outer.style.marginLeft = "-" + this.indent + "px";
		if (this.indent > this.innerWidth + this.fullWidth) {
//			this.outer.appendChild(this.outer.firstChild);
			this.indent = 0;
//			clearInterval(this.interval);
		}
	},

	doMouse: function() {
		this.scroll = !this.scroll;
	}
}
	



/*  required file: /www/hammerworld.portal/public/hammerworld.hu/php/js/cufon.js  */

/*!
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 */

var Cufon = (function() {
	
	var api = function() {	
		return api.replace.apply(null, arguments);
	};
	
	var DOM = api.DOM = {
			
		ready: (function() {
		
			var complete = false, readyStatus = { loaded: 1, complete: 1 };
		
			var queue = [], perform = function() {
				if (complete) return;
				complete = true;
				for (var fn; fn = queue.shift(); fn());
			};
			
			// Gecko, Opera, WebKit r26101+
			
			if (document.addEventListener) {
				document.addEventListener('DOMContentLoaded', perform, false);
				window.addEventListener('pageshow', perform, false); // For cached Gecko pages
			}
			
			// Old WebKit, Internet Explorer
			
			if (!window.opera && document.readyState) (function() {
				readyStatus[document.readyState] ? perform() : setTimeout(arguments.callee, 10);
			})();
			
			// Internet Explorer
			
			if (document.readyState && document.createStyleSheet) (function() {
				try {
					document.body.doScroll('left');
					perform();
				}
				catch (e) {
					setTimeout(arguments.callee, 1);
				}
			})();
			
			addEvent(window, 'load', perform); // Fallback
			
			return function(listener) {
				if (!arguments.length) perform();
				else complete ? listener() : queue.push(listener);
			};
			
		})()
		
	};

	var CSS = api.CSS = {
	
		Size: function(value, base) {
		
			this.value = parseFloat(value);
			this.unit = String(value).match(/[a-z%]*$/)[0] || 'px';
		
			this.convert = function(value) {
				return value / base * this.value;
			};
			
			this.convertFrom = function(value) {
				return value / this.value * base;
			};
			
			this.toString = function() {
				return this.value + this.unit;
			};

		},
	
		getStyle: function(el) {
			var view = document.defaultView;
			if (view && view.getComputedStyle) return new Style(view.getComputedStyle(el, null));
			if (el.currentStyle) return new Style(el.currentStyle);
			return new Style(el.style);
		},
		
		quotedList: cached(function(value) {
			// doesn't work properly with empty quoted strings (""), but
			// it's not worth the extra code.
			var list = [], re = /\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g, match;
			while (match = re.exec(value)) list.push(match[3] || match[1]);
			return list;
		}),
		
		ready: (function() {
			
			var complete = false;
			
			var queue = [], perform = function() {
				complete = true;
				for (var fn; fn = queue.shift(); fn());
			};
			
			// Safari 2 does not include <style> elements in document.styleSheets.
			// Safari 2 also does not support Object.prototype.propertyIsEnumerable.
			
			var styleElements = Object.prototype.propertyIsEnumerable ? elementsByTagName('style') : { length: 0 };
			var linkElements = elementsByTagName('link');
			
			DOM.ready(function() {
				// These checks are actually only needed for WebKit-based browsers, but don't really hurt other browsers.
				var linkStyles = 0, link;
				for (var i = 0, l = linkElements.length; link = linkElements[i], i < l; ++i) {
					// WebKit does not load alternate stylesheets.
					if (!link.disabled && link.rel.toLowerCase() == 'stylesheet') ++linkStyles;
				}
				if (document.styleSheets.length >= styleElements.length + linkStyles) perform();
				else setTimeout(arguments.callee, 10);
			});
			
			return function(listener) {
				if (complete) listener();
				else queue.push(listener);
			};
			
		})(),

		supports: function(property, value) {
			var checker = document.createElement('span').style;
			if (checker[property] === undefined) return false;
			checker[property] = value;
			return checker[property] === value;
		},
		
		textAlign: function(word, style, position, wordCount) {
			if (style.get('textAlign') == 'right') {
				if (position > 0) word = ' ' + word;
			}
			else if (position < wordCount - 1) word += ' ';
			return word;
		},
		
		textDecoration: function(el, style) {
			if (!style) style = this.getStyle(el);
			var types = {
				underline: null,
				overline: null,
				'line-through': null
			};
			for (var search = el; search.parentNode && search.parentNode.nodeType == 1; ) {
				var foundAll = true;
				for (var type in types) {
					if (!hasOwnProperty(types, type) || types[type]) continue;
					if (style.get('textDecoration').indexOf(type) != -1) types[type] = style.get('color');
					foundAll = false;
				}
				if (foundAll) break; // this is rather unlikely to happen
				style = this.getStyle(search = search.parentNode);
			}
			return types;
		},
		
		textShadow: cached(function(value) {
			if (value == 'none') return null;
			var shadows = [], currentShadow = {}, result, offCount = 0;
			var re = /(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;
			while (result = re.exec(value)) {
				if (result[0] == ',') {
					shadows.push(currentShadow);
					currentShadow = {}, offCount = 0;
				}
				else if (result[1]) {
					currentShadow.color = result[1];
				}
				else {
					currentShadow[[ 'offX', 'offY', 'blur' ][offCount++]] = result[2];
				}
			}
			shadows.push(currentShadow);
			return shadows;
		}),
		
		color: cached(function(value) {
			var parsed = {};
			parsed.color = value.replace(/^rgba\((.*?),\s*([\d.]+)\)/, function($0, $1, $2) {
				parsed.opacity = parseFloat($2);
				return 'rgb(' + $1 + ')';
			});
			return parsed;
		}),
		
		textTransform: function(text, style) {
			return text[{
				uppercase: 'toUpperCase',
				lowercase: 'toLowerCase'
			}[style.get('textTransform')] || 'toString']();
		}
		
	};
	
	function Font(data) {
		
		var face = this.face = data.face;
		this.glyphs = data.glyphs;
		this.w = data.w;
		this.baseSize = parseInt(face['units-per-em'], 10);
		
		this.family = face['font-family'].toLowerCase();
		this.weight = face['font-weight'];
		this.style = face['font-style'] || 'normal';
		
		this.viewBox = (function () {
			var parts = face.bbox.split(/\s+/);
			var box = {
				minX: parseInt(parts[0], 10),
				minY: parseInt(parts[1], 10),
				maxX: parseInt(parts[2], 10),
				maxY: parseInt(parts[3], 10)
			};
			box.width = box.maxX - box.minX,
			box.height = box.maxY - box.minY;
			box.toString = function() {
				return [ this.minX, this.minY, this.width, this.height ].join(' ');
			};
			return box;
		})();
		
		this.ascent = -parseInt(face.ascent, 10);
		this.descent = -parseInt(face.descent, 10);
		
		this.height = -this.ascent + this.descent;
		
	}
	
	function FontFamily() {

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

		function trigger(el) {
			// A timeout is needed so that the event can actually "happen"
			// before replace is triggered. This ensures that styles are up
			// to date.
			setTimeout(function() {
				api.replace(el, sharedStorage.get(el).options, true);
			}, 10);
		}
		
		this.attach = function(el) {
			if (el.onmouseenter === undefined) {
				addEvent(el, 'mouseover', onOverOut);
				addEvent(el, 'mouseout', onOverOut);
			}
			else {
				addEvent(el, 'mouseenter', onEnterLeave);
				addEvent(el, 'mouseleave', onEnterLeave);
			}
		};
		
	}
	
	function Storage() {
		
		var map = {}, at = 0;
		
		function identify(el) {
			return el.cufid || (el.cufid = ++at);
		}
		
		this.get = function(el) {
			var id = identify(el);
			return map[id] || (map[id] = {});
		};
		
	}
	
	function Style(style) {
		
		var custom = {}, sizes = {};
		
		this.get = function(property) {
			return custom[property] != undefined ? custom[property] : style[property];
		};
		
		this.getSize = function(property, base) {
			return sizes[property] || (sizes[property] = new CSS.Size(this.get(property), base));
		};
		
		this.extend = function(styles) {
			for (var property in styles) {
				if (hasOwnProperty(styles, property)) custom[property] = styles[property];
			}
			return this;
		};
		
	}
	
	function addEvent(el, type, listener) {
		if (el.addEventListener) {
			el.addEventListener(type, listener, false);
		}
		else if (el.attachEvent) {
			el.attachEvent('on' + type, function() {
				return listener.call(el, window.event);
			});
		}
	}
	
	function attach(el, options) {
		var storage = sharedStorage.get(el);
		if (storage.options) return el;
		if (options.hover && options.hoverables[el.nodeName.toLowerCase()]) {
			hoverHandler.attach(el);
		}
		storage.options = options;
		return el;
	}
	
	function cached(fun) {
		var cache = {};
		return function(key) {
			if (!hasOwnProperty(cache, key)) cache[key] = fun.apply(null, arguments);
			return cache[key];
		};	
	}
	
	function getFont(el, style) {
		if (!style) style = CSS.getStyle(el);
		var families = CSS.quotedList(style.get('fontFamily').toLowerCase()), family;
		for (var i = 0, l = families.length; i < l; ++i) {
			family = families[i];
			if (fonts[family]) return fonts[family].get(style.get('fontStyle'), style.get('fontWeight'));
		}
		return null;
	}
	
	function elementsByTagName(query) {
		return document.getElementsByTagName(query);
	}
	
	function hasOwnProperty(obj, property) {
		return obj.hasOwnProperty(property);
	}
	
	function merge() {
		var merged = {}, args, key;
		for (var i = 0, l = arguments.length; args = arguments[i], i < l; ++i) {
			for (key in args) {
				if (hasOwnProperty(args, key)) merged[key] = args[key];
			}
		}
		return merged;
	}
	
	function process(font, text, style, options, node, el) {
		var separate = options.separate;
		if (separate == 'none') return engines[options.engine].apply(null, arguments);
		var fragment = document.createDocumentFragment(), processed;
		var parts = text.split(separators[separate]), needsAligning = (separate == 'words');
		if (needsAligning && HAS_BROKEN_REGEXP) {
			// @todo figure out a better way to do this
			if (/^\s/.test(text)) parts.unshift('');
			if (/\s$/.test(text)) parts.push('');
		}
		for (var i = 0, l = parts.length; i < l; ++i) {
			processed = engines[options.engine](font,
				needsAligning ? CSS.textAlign(parts[i], style, i, l) : parts[i],
				style, options, node, el, i < l - 1);
			if (processed) fragment.appendChild(processed);
		}
		return fragment;
	}
	
	function replaceElement(el, options) {
		var font, style, node, nodeType, nextNode, redraw;
		for (node = attach(el, options).firstChild; node; node = nextNode) {
			nodeType = node.nodeType;
			nextNode = node.nextSibling;
			redraw = false;
			if (nodeType == 1) {
				if (!node.firstChild) continue;
				if (!/cufon/.test(node.className)) {
					arguments.callee(node, options);
					continue;
				}
				else redraw = true;
			}
			else if (nodeType != 3) continue;
			if (!style) style = CSS.getStyle(el).extend(options);
			if (!font) font = getFont(el, style);
			if (!font) continue;
			if (redraw) {
				engines[options.engine](font, null, style, options, node, el);
				continue;
			}
			var text = node.data;
			if (text === '') continue;
			var processed = process(font, text, style, options, node, el);
			if (processed) node.parentNode.replaceChild(processed, node);
			else node.parentNode.removeChild(node);
		}
	}
	
	var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;
	
	var sharedStorage = new Storage();
	var hoverHandler = new HoverHandler();
	var replaceHistory = [];
	
	var engines = {}, fonts = {}, defaultOptions = {
		enableTextDecoration: false,
		engine: null,
		//fontScale: 1,
		//fontScaling: false,
		hover: false,
		hoverables: {
			a: true
		},
		printable: true,
		//rotation: 0,
		//selectable: false,
		selector: (
				window.Sizzle
			||	(window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
			||	(window.dojo && dojo.query)
			||	(window.$$ && function(query) { return $$(query); })
			||	(window.$ && function(query) { return $(query); })
			||	(document.querySelectorAll && function(query) { return document.querySelectorAll(query); })
			||	elementsByTagName
		),
		separate: 'words', // 'none' and 'characters' are also accepted
		textShadow: 'none'
	};
	
	var separators = {
		words: /\s+/,
		characters: ''
	};
	
	api.now = function() {
		DOM.ready();
		return api;
	};
	
	api.refresh = function() {
		var currentHistory = replaceHistory.splice(0, replaceHistory.length);
		for (var i = 0, l = currentHistory.length; i < l; ++i) {
			api.replace.apply(null, currentHistory[i]);
		}
		return api;
	};
	
	api.registerEngine = function(id, engine) {
		if (!engine) return api;
		engines[id] = engine;
		return api.set('engine', id);
	};
	
	api.registerFont = function(data) {
		var font = new Font(data), family = font.family;
		if (!fonts[family]) fonts[family] = new FontFamily();
		fonts[family].add(font);
		return api.set('fontFamily', '"' + family + '"');
	};
	
	api.replace = function(elements, options, ignoreHistory) {
		options = merge(defaultOptions, options);
		if (!options.engine) return api; // there's no browser support so we'll just stop here
		if (typeof options.textShadow == 'string')
			options.textShadow = CSS.textShadow(options.textShadow);
		if (!ignoreHistory) replaceHistory.push(arguments);
		if (elements.nodeType || typeof elements == 'string') elements = [ elements ];
		CSS.ready(function() {
			for (var i = 0, l = elements.length; i < l; ++i) {
				var el = elements[i];
				if (typeof el == 'string') api.replace(options.selector(el), options, true);
				else replaceElement(el, options);
			}
		});
		return api;
	};
	
	api.set = function(option, value) {
		defaultOptions[option] = value;
		return api;
	};
	
	return api;
	
})();

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

	// Safari 2 doesn't support .apply() on native methods
	
	var check = document.createElement('canvas');
	if (!check || !check.getContext || !check.getContext.apply) return;
	check = null;
	
	var HAS_INLINE_BLOCK = Cufon.CSS.supports('display', 'inline-block');
	
	// Firefox 2 w/ non-strict doctype (almost standards mode)
	var HAS_BROKEN_LINEHEIGHT = !HAS_INLINE_BLOCK && (document.compatMode == 'BackCompat' || /frameset|transitional/i.test(document.doctype.publicId));
	
	var styleSheet = document.createElement('style');
	styleSheet.type = 'text/css';
	styleSheet.appendChild(document.createTextNode(
		'.cufon-canvas{text-indent:0}' +
		'@media screen,projection{' +
			'.cufon-canvas{display:inline;display:inline-block;position:relative;vertical-align:middle' + 
			(HAS_BROKEN_LINEHEIGHT
				? ''
				: ';font-size:1px;line-height:1px') +
			'}.cufon-canvas .cufon-alt{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden}' +
			(HAS_INLINE_BLOCK
				? '.cufon-canvas canvas{position:relative}'
				: '.cufon-canvas canvas{position:absolute}') +
		'}' +
		'@media print{' +
			'.cufon-canvas{padding:0 !important}' +
			'.cufon-canvas canvas{display:none}' +
			'.cufon-canvas .cufon-alt{display:inline}' +
		'}'
	));
	document.getElementsByTagName('head')[0].appendChild(styleSheet);

	function generateFromVML(path, context) {
		var atX = 0, atY = 0;
		var code = [], re = /([mrvxe])([^a-z]*)/g, match;
		generate: for (var i = 0; match = re.exec(path); ++i) {
			var c = match[2].split(',');
			switch (match[1]) {
				case 'v':
					code[i] = { m: 'bezierCurveTo', a: [ atX + ~~c[0], atY + ~~c[1], atX + ~~c[2], atY + ~~c[3], atX += ~~c[4], atY += ~~c[5] ] };
					break;
				case 'r':
					code[i] = { m: 'lineTo', a: [ atX += ~~c[0], atY += ~~c[1] ] };
					break;
				case 'm':
					code[i] = { m: 'moveTo', a: [ atX = ~~c[0], atY = ~~c[1] ] };
					break;
				case 'x':
					code[i] = { m: 'closePath' };
					break;
				case 'e':
					break generate;
			}
			context[code[i].m].apply(context, code[i].a);
		}
		return code;
	}
	
	function interpret(code, context) {
		for (var i = 0, l = code.length; i < l; ++i) {
			var line = code[i];
			context[line.m].apply(context, line.a);
		}
	}
	
	return function(font, text, style, options, node, el) {
		
		var redraw = (text === null);
		
		var viewBox = font.viewBox;
		
		var size = style.getSize('fontSize', font.baseSize);
		
		var letterSpacing = style.get('letterSpacing');
		letterSpacing = (letterSpacing == 'normal') ? 0 : size.convertFrom(parseInt(letterSpacing, 10));
		
		var expandTop = 0, expandRight = 0, expandBottom = 0, expandLeft = 0;
		var shadows = options.textShadow, shadowOffsets = [];
		if (shadows) {
			for (var i = 0, l = shadows.length; i < l; ++i) {
				var shadow = shadows[i];
				var x = size.convertFrom(parseFloat(shadow.offX));
				var y = size.convertFrom(parseFloat(shadow.offY));
				shadowOffsets[i] = [ x, y ];
				if (y < expandTop) expandTop = y;
				if (x > expandRight) expandRight = x;
				if (y > expandBottom) expandBottom = y;
				if (x < expandLeft) expandLeft = x;
			}
		}
		
		var chars = Cufon.CSS.textTransform(redraw ? node.alt : text, style).split('');
		
		var width = 0, lastWidth = null;
		
		for (var i = 0, l = chars.length; i < l; ++i) {
			var glyph = font.glyphs[chars[i]] || font.missingGlyph;
			if (!glyph) continue;
			width += lastWidth = Number(glyph.w || font.w) + letterSpacing;
		}
		
		if (lastWidth === null) return null; // there's nothing to render
		
		expandRight += (viewBox.width - lastWidth);
		expandLeft += viewBox.minX;
		
		var wrapper, canvas;
		
		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('span');
			wrapper.className = 'cufon cufon-canvas';
			wrapper.alt = text;
			
			canvas = document.createElement('canvas');
			wrapper.appendChild(canvas);
			
			if (options.printable) {
				var print = document.createElement('span');
				print.className = 'cufon-alt';
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}
		}
		
		var wStyle = wrapper.style;
		var cStyle = canvas.style;
		
		var height = size.convert(viewBox.height - expandTop + expandBottom);
		var roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		
		canvas.width = Math.ceil(size.convert(width + expandRight - expandLeft) * roundingFactor);
		canvas.height = roundedHeight;
		
		// minY has no part in canvas.height
		expandTop += viewBox.minY;
		
		cStyle.top = Math.round(size.convert(expandTop - font.ascent)) + 'px';
		cStyle.left = Math.round(size.convert(expandLeft)) + 'px';
		
		var wrapperWidth = Math.ceil(size.convert(width * roundingFactor)) + 'px';
		
		if (HAS_INLINE_BLOCK) {
			wStyle.width = wrapperWidth;
			wStyle.height = size.convert(font.height) + 'px';
		}
		else {
			wStyle.paddingLeft = wrapperWidth;
			wStyle.paddingBottom = (size.convert(font.height) - 1) + 'px';
		}
		
		var g = canvas.getContext('2d'), scale = roundedHeight / viewBox.height;
		
		g.scale(scale, scale);
		g.translate(-expandLeft, -expandTop);
		
		g.lineWidth = font.face['underline-thickness'];
		
		g.save();
		
		function line(y, color) {
			g.strokeStyle = color;
			
			g.beginPath();
			
			g.moveTo(0, y);
			g.lineTo(width, y);
			
			g.stroke();
		}
		
		var textDecoration = options.enableTextDecoration ? Cufon.CSS.textDecoration(el, style) : {};
		
		if (textDecoration.underline) line(-font.face['underline-position'], textDecoration.underline);
		if (textDecoration.overline) line(font.ascent, textDecoration.overline);
		
		g.fillStyle = style.get('color');
		
		function renderText() {
			for (var i = 0, l = chars.length; i < l; ++i) {
				var glyph = font.glyphs[chars[i]] || font.missingGlyph;
				if (!glyph) continue;
				g.beginPath();
				if (glyph.d) {
					if (glyph.code) interpret(glyph.code, g);
					else glyph.code = generateFromVML('m' + glyph.d, g);
				}
				g.fill();
				g.translate(Number(glyph.w || font.w) + letterSpacing, 0);
			}
		}
		
		if (shadows) {
			for (var i = 0, l = shadows.length; i < l; ++i) {
				var shadow = shadows[i];
				g.save();
				g.fillStyle = shadow.color;
				g.translate.apply(g, shadowOffsets[i]);
				renderText();
				g.restore();
			}
		}
		
		renderText();
		
		g.restore();
		
		if (textDecoration['line-through']) line(-font.descent, textDecoration['line-through']);
		
		return wrapper;
			
	};
	
})());

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

	if (!document.namespaces) return;
	
	if (document.namespaces.cvml == null) {
		document.namespaces.add('cvml', 'urn:schemas-microsoft-com:vml');
	}
	
	var check = document.createElement('cvml:shape');
	check.style.behavior = 'url(#default#VML)';
	if (!check.coordsize) return; // VML isn't supported
	check = null;
	
	document.write('<style type="text/css">' +
		'.cufon-vml-canvas{text-indent:0}' +
		'@media screen{' + 
			'cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}' +
			'.cufon-vml-canvas{position:absolute;text-align:left}' +
			'.cufon-vml{display:inline-block;position:relative;vertical-align:middle}' +
			'.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}' +
			'a .cufon-vml{cursor:pointer}' +
		'}' +
		'@media print{' + 
			'.cufon-vml *{display:none}' +
			'.cufon-vml .cufon-alt{display:inline}' +
		'}' +
	'</style>');

	function getFontSizeInPixels(el, value) {
		return getSizeInPixels(el, /(?:em|ex|%)$/i.test(value) ? '1em' : value);
	}
	
	// Original by Dead Edwards.
	// Combined with getFontSizeInPixels it also works with relative units.
	function getSizeInPixels(el, value) {
		if (/px$/i.test(value)) return parseFloat(value);
		var style = el.style.left, runtimeStyle = el.runtimeStyle.left;
		el.runtimeStyle.left = el.currentStyle.left;
		el.style.left = value;
		var result = el.style.pixelLeft;
		el.style.left = style;
		el.runtimeStyle.left = runtimeStyle;
		return result;
	}
	
	return function(font, text, style, options, node, el, hasNext) {
		
		var redraw = (text === null);
		
		if (redraw) text = node.alt;
		
		// @todo word-spacing, text-decoration
	
		var viewBox = font.viewBox;
		
		var size = style.computedFontSize || (style.computedFontSize = new Cufon.CSS.Size(getFontSizeInPixels(el, style.get('fontSize')) + 'px', font.baseSize));
		
		var letterSpacing = style.computedLSpacing;
		
		if (letterSpacing == undefined) {
			letterSpacing = style.get('letterSpacing');
			style.computedLSpacing = letterSpacing = (letterSpacing == 'normal') ? 0 : ~~size.convertFrom(getSizeInPixels(el, letterSpacing));
		}
		
		var wrapper, canvas;
		
		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('span');
			wrapper.className = 'cufon cufon-vml';
			wrapper.alt = text;
			
			canvas = document.createElement('span');
			canvas.className = 'cufon-vml-canvas';
			wrapper.appendChild(canvas);
			
			if (options.printable) {
				var print = document.createElement('span');
				print.className = 'cufon-alt';
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}
			
			// ie6, for some reason, has trouble rendering the last VML element in the document.
			// we can work around this by injecting a dummy element where needed.
			// @todo find a better solution
			if (!hasNext) wrapper.appendChild(document.createElement('cvml:shape'));
		}
		
		var wStyle = wrapper.style;
		var cStyle = canvas.style;
		
		var height = size.convert(viewBox.height), roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var minX = viewBox.minX, minY = viewBox.minY;
		
		cStyle.height = roundedHeight;
		cStyle.top = Math.round(size.convert(minY - font.ascent));
		cStyle.left = Math.round(size.convert(minX));
		
		wStyle.height = size.convert(font.height) + 'px';
		
		var textDecoration = options.enableTextDecoration ? Cufon.CSS.textDecoration(el, style) : {};
		
		var color = style.get('color');
		var chars = Cufon.CSS.textTransform(text, style).split('');
		
		var width = 0, offsetX = 0, advance = null;
		
		var glyph, shape, shadows = options.textShadow;
		
		// pre-calculate width
		for (var i = 0, k = 0, l = chars.length; i < l; ++i) {
			glyph = font.glyphs[chars[i]] || font.missingGlyph;
			if (glyph) width += advance = ~~(glyph.w || font.w) + letterSpacing;
		}
		
		if (advance === null) return null;
		
		var fullWidth = -minX + width + (viewBox.width - advance);
	
		var shapeWidth = size.convert(fullWidth * roundingFactor), roundedShapeWidth = Math.round(shapeWidth);
		
		var coordSize = fullWidth + ',' + viewBox.height, coordOrigin;
		var stretch = 'r' + coordSize + 'nsnf';
		
		for (i = 0; i < l; ++i) {
			
			glyph = font.glyphs[chars[i]] || font.missingGlyph;
			if (!glyph) continue;
			
			if (redraw) {
				// some glyphs may be missing so we can't use i
				shape = canvas.childNodes[k];
				if (shape.firstChild) shape.removeChild(shape.firstChild); // shadow
			}
			else { 
				shape = document.createElement('cvml:shape');
				canvas.appendChild(shape);
			}
			
			shape.stroked = 'f';
			shape.coordsize = coordSize;
			shape.coordorigin = coordOrigin = (minX - offsetX) + ',' + minY;
			shape.path = (glyph.d ? 'm' + glyph.d + 'xe' : '') + 'm' + coordOrigin + stretch;
			shape.fillcolor = color;
			
			// it's important to not set top/left or IE8 will grind to a halt
			var sStyle = shape.style;
			sStyle.width = roundedShapeWidth;
			sStyle.height = roundedHeight;
			
			if (shadows) {
				// due to the limitations of the VML shadow element there
				// can only be two visible shadows. opacity is shared
				// for all shadows.
				var shadow1 = shadows[0], shadow2 = shadows[1];
				var color1 = Cufon.CSS.color(shadow1.color), color2;
				var shadow = document.createElement('cvml:shadow');
				shadow.on = 't';
				shadow.color = color1.color;
				shadow.offset = shadow1.offX + ',' + shadow1.offY;
				if (shadow2) {
					color2 = Cufon.CSS.color(shadow2.color);
					shadow.type = 'double';
					shadow.color2 = color2.color;
					shadow.offset2 = shadow2.offX + ',' + shadow2.offY;
				}
				shadow.opacity = color1.opacity || (color2 && color2.opacity) || 1;
				shape.appendChild(shadow);
			}
			
			offsetX += ~~(glyph.w || font.w) + letterSpacing;
			
			++k;
			
		}
		
		wStyle.width = Math.max(Math.ceil(size.convert(width * roundingFactor)), 0);
		
		return wrapper;
		
	};
	
})());
/*  required file: /www/hammerworld.portal/public/hammerworld.hu/php/js/Dirty_Ego_400.font.js  */

Cufon.registerFont({"w":124,"face":{"font-family":"Dirty Ego","font-weight":400,"font-stretch":"normal","units-per-em":"360","panose-1":"0 0 4 0 0 0 0 0 0 0","ascent":"288","descent":"-72","bbox":"-45 -302.045 240.155 42.24","underline-thickness":"3.51562","underline-position":"-25.1367","unicode-range":"U+0020-U+00FF"},"glyphs":{" ":{"w":61},"!":{"d":"45,-222v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm35,-224v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm37,-142v0,2,0,4,-2,3v0,-2,0,-4,2,-3xm37,-203v-3,24,-2,41,-7,61v9,12,-5,28,3,44v-2,17,-8,45,-26,26v1,-48,-7,-104,-2,-148v8,2,35,-3,32,17xm40,-104v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm37,-36v-3,18,4,32,-15,36r2,-1v-3,-5,-13,-2,-19,-1r0,-32xm11,0v1,-1,4,-1,5,0v-2,1,-4,1,-5,0xm5,-179v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm18,-65v2,-1,0,-3,0,-5v-2,2,-3,4,0,5xm11,-74v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm14,-65v1,-2,1,-3,0,-5v-3,2,-3,4,0,5","w":48},"\"":{"d":"38,-243v0,1,0,1,-1,1xm28,-242v0,-2,3,0,1,0r-1,0xm31,-205v-11,3,-7,-20,-8,-35r13,-1v-3,2,-3,14,-1,20r3,0v-6,-1,-4,12,-7,16xm16,-226v0,1,0,1,-1,1xm16,-239v-6,12,7,36,-11,35v-2,-4,-3,-15,-3,-35r5,0v-1,1,-1,1,0,2v0,-3,5,-2,9,-2xm27,-237v2,-1,0,-3,0,-1r0,1xm24,-237v2,-1,0,-3,0,-1r0,1xm9,-238v1,1,3,-1,1,-1xm13,-220v0,-1,2,-4,-1,-3xm5,-214v2,-1,0,-3,0,-1r0,1","w":40},"#":{"d":"96,-226v0,2,1,5,-2,4xm90,-188v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm155,-99v2,0,3,3,0,4v-2,-1,-1,-3,0,-4xm143,-108v1,1,1,3,0,4v-2,0,-3,-3,0,-4xm147,-97v0,-2,3,-1,4,-1v0,2,-3,1,-4,1xm113,-133v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm174,-97v2,26,-17,40,-28,17v4,0,9,-1,7,5v9,-3,9,-12,2,-16v5,-1,11,-3,19,-6xm134,-91v0,2,-4,3,-4,0v0,-2,4,-3,4,0xm149,-167v3,13,21,6,34,6v6,39,-37,26,-68,26v-15,0,-14,8,-17,4v-2,-9,-25,-3,-21,4v0,4,-3,13,-8,28v7,7,30,8,40,2v0,-5,5,-33,8,-34r26,2v-3,6,0,15,4,17v-10,1,-10,6,-7,13v-5,-1,-7,1,-4,4v-18,-1,-15,34,-44,21v-2,5,-8,5,-13,2v-23,1,-12,37,-23,49r-26,0v0,-13,15,-39,-3,-44v2,2,1,3,-1,4v-3,-1,-1,-3,0,-5v-6,-2,-19,1,-24,-5v-6,-35,28,-7,39,-29v13,-31,-6,-50,-30,-46v1,-9,8,-16,11,-6v1,-7,10,-8,17,-5v22,-1,14,-39,21,-60r26,-4v2,31,-8,41,-5,62v6,-7,8,-3,11,2v27,2,28,-2,33,-31v5,-22,-1,-32,10,-30r23,-3v-2,16,-9,36,-1,47v-5,0,-8,3,-8,9xm143,-72v1,1,1,3,0,4v-2,0,-3,-3,0,-4xm139,-60v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm121,-78v3,1,3,3,3,6v-2,-1,-6,-3,-3,-6xm128,-44v-2,-1,-5,-6,0,-5r0,5xm102,-42v2,-13,3,-36,19,-21v2,-6,13,1,12,4v-6,6,-14,22,-31,17xm90,-68v0,-2,3,-1,4,-1v0,2,-3,2,-4,1xm124,-35v3,0,0,3,0,1r0,-1xm20,-133v-2,-2,-5,-3,-9,-3v-1,-7,7,-6,13,-6xm118,-35v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm83,-66v1,0,1,0,1,1xm113,-32v0,6,15,6,8,9v-2,0,-5,0,-8,1r0,-10xm75,-68v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm98,-25v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm69,-52v3,0,0,3,0,1r0,-1xm126,-19v0,27,-9,15,-30,16r2,-16r28,0xm18,-97v0,-2,3,-1,4,-1v0,2,-3,1,-4,1xm60,-19v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm56,-19v1,22,-14,16,-29,20v-3,-27,10,-19,29,-20xm153,-218v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm83,-157v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm73,-123v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm45,-148v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm120,-83v-1,-8,-17,-3,-29,-3v5,7,20,1,29,3xm39,-154v-2,0,-1,5,0,6v1,-2,1,-4,0,-6xm44,-141v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm88,-91v1,0,2,-4,-1,-4v-1,1,-1,4,1,4xm109,-63v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm117,-51v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm77,-87v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm81,-76v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm71,-76v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm40,-71v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm20,-89v0,-2,-3,-1,-4,-1v0,2,3,2,4,1xm35,-13v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm33,0r0,-4v-2,0,-3,4,0,4","w":185},"$":{"d":"71,-215v1,1,1,3,0,4v-1,-1,-1,-3,0,-4xm87,-189v-6,5,-11,12,-18,16v-7,-4,-20,-16,-27,-14v-3,-10,-2,-28,-2,-42v4,1,14,-3,12,4v-3,27,39,12,35,36xm43,-185v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm38,-162v-2,1,-4,1,-6,0v1,-1,5,-2,6,0xm58,-135v-2,2,-4,1,-6,0v2,-2,4,0,6,0xm57,-125v15,11,13,19,26,18v-7,4,-3,7,4,13v6,17,13,33,8,46r4,3v-12,21,-20,34,-41,40r0,-19r20,0v-7,-3,-22,2,-22,-9v35,-51,-32,-66,-51,-110v-5,-30,3,-69,31,-64v8,28,-19,47,3,66v2,3,8,9,18,16xm34,-39v0,-1,4,-2,4,0v-1,1,-3,1,-4,0xm9,-42v18,-18,25,15,43,11r0,4v-16,-1,-35,1,-49,-1v-2,-6,0,-8,6,-14xm52,-23v0,13,5,33,0,43r-12,0v0,-12,2,-34,-10,-25r0,-3v-7,0,-15,-5,-23,-15r45,0","w":101},"%":{"d":"160,-91v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm29,-192v1,1,3,2,0,3v-1,-1,-1,-2,0,-3xm31,-226v24,4,27,39,23,68v0,11,2,17,7,18v-4,2,-16,32,-28,28v-6,-5,-2,-17,4,-26v-3,-27,7,-55,-9,-69v1,-7,-2,-16,3,-19xm157,-53v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm128,-72v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm124,-36v19,-21,2,-58,-3,-80v41,-1,22,49,30,80v-4,13,-5,38,-22,36v-20,-7,9,-19,-1,-36r-4,0xm134,-223v0,7,-32,64,-30,75v-16,31,-49,85,-48,112v-16,9,-7,39,-37,34v23,-73,63,-133,90,-210v3,-7,11,-11,25,-11xm24,-165v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm157,-32v1,3,-2,2,-4,2xm24,-186v-9,15,-2,59,3,75v-42,0,-18,-59,-24,-94v0,-9,9,-18,19,-18v3,13,-6,32,2,37xm33,-140v1,2,2,3,0,5v-2,-1,-3,-3,0,-5xm117,-2v-10,7,-18,-8,-19,-17v6,-32,-17,-92,21,-92v6,14,-11,25,-2,35v-5,24,0,46,0,74xm20,-142v2,0,1,-3,0,-4v-2,1,-3,3,0,4","w":162},"&":{"d":"73,-226v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm45,-190v-1,-1,-3,-2,0,-2r0,2xm40,-165r0,2r0,-2xm104,-47v9,5,15,16,20,22v0,15,-5,23,-15,23v-6,-4,-18,-14,-24,-15v-9,0,-20,20,-29,13v1,6,-3,0,-6,3r0,-31v2,-3,10,-5,14,-11v-1,-14,-16,-26,-25,-39v-13,11,-8,42,6,48v-2,10,4,28,-4,30v-54,1,-40,-81,-17,-113v-10,-34,-21,-106,23,-107v2,24,-15,37,-8,59v-2,1,-3,3,0,4r1,-2v5,32,16,9,22,0v4,-24,-6,-39,-11,-53v0,-6,2,-8,5,-8v32,1,36,18,36,55v-5,18,-20,37,-30,56v0,3,7,15,22,37v3,-1,7,-11,12,-30r23,0r-2,2v11,12,-3,36,-13,57xm120,-39v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm39,-55v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm50,-1v0,2,-2,1,-3,1xm43,-137v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm121,-15v2,-2,3,-6,0,-8v-2,2,-1,6,0,8xm58,-8v2,-2,1,-3,0,-5v-2,2,-3,4,0,5","w":126},"'":{"d":"20,-259v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm20,-253v0,1,0,1,-1,1v0,-1,0,-1,1,-1xm5,-232r-3,-43r16,0v-1,14,0,30,-3,42xm16,-246v1,0,1,0,1,-1v-1,0,-1,0,-1,1","w":22},"(":{"d":"40,-166v1,1,3,2,0,3v-1,-1,-1,-2,0,-3xm33,-133v2,0,1,3,0,3v-2,0,-2,-3,0,-3xm66,-223v-6,3,-10,24,-19,33v1,1,2,3,3,5v-16,8,-12,48,-24,55v2,2,5,5,4,10v-4,1,-11,-2,-10,3v8,-2,9,4,10,10v-14,1,-10,3,-2,11v16,17,13,49,27,70v-3,0,-6,5,-1,4v11,0,11,14,1,18v-4,3,-8,5,-11,5v-15,-30,-38,-72,-35,-118v7,-2,-1,-9,8,-9r-2,4r7,-2v1,-3,-12,-16,-11,-20v2,-22,24,-119,55,-79xm33,-108v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm30,-101v0,-2,3,0,1,0r-1,0xm50,-69r-3,0v1,-1,2,-2,3,0xm59,-39v2,1,0,3,0,1r0,-1xm64,-26v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm17,-117v1,-1,1,-3,0,-4v-4,1,-1,3,0,4xm22,-110v0,-3,-3,-5,-5,-3v1,2,3,3,5,3xm35,-80v2,2,4,0,2,-2","w":72},")":{"d":"58,-176r-2,0r2,0xm11,-220v27,-37,28,39,51,38v-11,4,-10,9,0,13v-2,1,-4,5,-8,11v5,-1,7,1,4,5v11,-4,2,6,6,13v-8,4,3,16,-8,18v8,-6,-15,-12,-2,-11v0,-7,-6,-2,-10,-4v0,3,0,7,-2,8v-1,-7,-13,-38,-7,-49v-1,0,-5,4,-4,0v-2,-5,8,-2,5,-6v-11,5,-19,-24,-25,-36xm65,-117v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm51,-128v1,1,1,3,0,4v-1,-1,-1,-3,0,-4xm49,-122v0,1,-1,1,-2,1v0,-1,1,-1,2,-1xm42,-126v2,1,3,4,0,5r0,-5xm63,-104v1,1,3,2,0,3v-1,-1,-1,-2,0,-3xm48,-95v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm62,-106v1,6,-30,11,-14,17v0,1,0,2,-1,3v5,0,7,-15,15,-13v-7,2,1,9,-6,11r7,-2v-5,35,-19,66,-37,90v0,-5,-16,-4,-15,-15v12,-15,19,-56,34,-87v-8,2,-4,-7,-5,-12v3,-1,4,7,6,2v-1,-6,4,-3,10,-5v4,5,3,6,-2,11r8,0xm51,-41v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm54,-146v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm47,-146v4,0,6,-7,5,-9v-3,3,-5,6,-5,9xm43,-150v1,-1,1,0,0,-2v-1,1,-1,1,0,2xm51,-110v1,-1,1,-1,0,-2v-2,1,-1,1,0,2xm54,-101v-1,0,-3,-2,-3,0r3,0xm54,-83v1,1,2,3,2,0r-2,0xm54,-72v1,-6,-3,-9,-5,-2v2,0,5,1,5,2xm40,-84v2,2,4,0,2,-2xm42,-76v1,-1,1,-2,0,-3v-2,1,-2,2,0,3xm47,-65v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm49,-61v2,3,4,2,3,-2xm37,-56v1,-1,1,-2,0,-3v-2,1,-2,2,0,3","w":71},"*":{"d":"28,-180v8,3,16,-8,17,7v-4,3,-18,10,-5,12v-8,14,-10,13,-17,2v-8,7,-12,14,-17,1v0,-1,2,-4,6,-8v-11,-3,-12,-20,3,-14v4,0,1,-7,2,-10v9,-1,18,1,11,10xm7,-178v3,0,0,-3,0,-1r0,1","w":48},"+":{"d":"86,-134v10,26,-40,-1,-32,32v2,15,-8,14,-18,16v-1,-11,2,-26,-2,-34v-14,-3,-38,11,-30,-13v1,-2,26,2,32,-4v1,-14,1,-24,1,-29v9,1,15,-2,21,-3v-4,3,-3,3,0,6v-5,6,-6,14,-4,23v-1,-1,-1,-3,-1,0v-1,5,7,7,13,6v2,-2,12,1,20,0xm53,-116v1,-1,1,-1,0,-2v-1,1,-1,1,0,2","w":92},",":{"d":"24,-26v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm2,28v0,-9,12,-22,1,-27r0,-20v10,1,23,-4,20,10v0,17,-2,35,-21,37","w":24},"-":{"d":"9,-137v13,1,20,-6,28,0v2,-4,4,-5,4,0r43,0v2,4,2,14,0,19v-26,0,-51,3,-75,0r0,-19xm31,-138v1,2,3,2,3,-1","w":92},"\u2010":{"d":"9,-137v13,1,20,-6,28,0v2,-4,4,-5,4,0r43,0v2,4,2,14,0,19v-26,0,-51,3,-75,0r0,-19xm31,-138v1,2,3,2,3,-1","w":92},".":{"d":"36,-26v-10,8,2,37,-27,23r0,-21v10,-3,17,-2,27,-2xm18,0v1,-1,3,-2,0,-3v-1,1,-1,2,0,3xm15,0v1,-1,3,-2,0,-3v-1,1,-1,2,0,3","w":41},"\/":{"d":"115,-101v-2,4,-4,4,-6,0r6,0xm185,-228v1,3,-19,24,-7,26v-12,2,-22,15,-31,36v1,1,4,1,3,4v-3,1,-18,7,-14,15r5,0v-23,14,-31,49,-50,69v-10,10,-13,15,-6,22v-3,1,-11,3,-4,6v-11,-2,-35,46,-38,47v-17,3,-30,4,-38,4r110,-179v14,-10,12,-19,32,-50r38,0xm97,-72v0,1,0,2,-2,2v-2,0,-3,-1,-3,-2v0,-2,1,-2,3,-2v2,0,2,0,2,2xm73,-36v0,2,-1,3,-3,3v-1,0,-2,-1,-2,-3v0,-1,5,-2,5,0xm39,-29v0,-2,-1,-2,-3,-2v-1,0,-2,0,-2,2v1,3,4,2,5,0","w":194},"0":{"d":"109,-186v2,0,1,4,0,4v-3,0,-3,-4,0,-4xm111,-151v3,0,0,3,0,1r0,-1xm58,-192v0,-2,3,0,1,0r-1,0xm64,-213v36,-11,43,32,40,73r11,0v-22,7,-3,32,-11,53v8,36,-4,96,-46,83r0,-23v28,-7,15,-71,19,-98v11,-5,6,-16,4,-27v-1,1,-2,2,-4,2v-3,-12,-2,-16,0,-25v1,-12,-38,-31,-15,-43v0,1,1,3,2,5xm26,-165v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm48,-113v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm109,-53v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm42,-104v0,-3,3,0,1,0r-1,0xm38,-127v6,13,-3,20,3,28v-3,7,0,24,-3,38v6,1,0,4,0,8v3,14,27,29,13,51v-2,0,-6,1,-13,2v0,-5,-8,-12,-12,-8v-7,-3,-4,-25,-13,-17v1,-10,1,-10,-2,-18v-2,-4,15,-6,15,-8v0,-11,-5,-21,-15,-29v5,-42,-12,-100,11,-125v1,2,2,5,4,2v-4,-9,1,-8,11,-17r0,15v0,0,6,-14,8,-13v0,5,-5,14,2,15v1,-5,2,-8,4,-10v2,20,-3,25,-19,31v-2,5,16,9,6,14v-9,0,-30,-1,-22,7v8,-1,18,4,22,-2v2,6,8,17,0,21v4,3,5,9,5,17xm79,-190v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm73,-192v1,1,2,3,2,0r-2,0xm98,-161v2,0,1,-3,0,-4v-2,1,-1,3,0,4xm90,-161v2,0,1,-3,0,-4v-3,1,-3,3,0,4xm81,-161v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm104,-135v2,-1,3,-4,0,-4v-2,1,-1,2,0,4xm38,-201v3,0,3,-3,0,-4v-1,1,-1,3,0,4xm92,-131v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm103,-114v0,4,3,2,3,0v0,-1,-1,-2,-2,-2v-1,0,-1,1,-1,2xm104,-97v3,-4,2,-5,0,-9v-2,4,-1,6,0,9xm38,-116v3,-1,3,-3,0,-4v-1,0,-1,3,0,4xm38,-89v3,0,3,-3,0,-4v-1,1,-1,3,0,4xm33,-45r-3,1","w":115},"1":{"d":"56,-223v3,1,2,1,0,2v-2,-1,-3,-1,0,-2xm56,-220v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm43,-217v0,-2,3,0,1,0r-1,0xm62,-201v2,2,3,3,0,4v-2,-1,-1,-3,0,-4xm31,-178v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm9,-194v2,0,3,3,0,4v-2,-1,-1,-3,0,-4xm12,-179r-7,0v0,-10,4,-4,7,0xm68,-99v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm24,-182v-16,6,-5,-9,-11,-17v2,0,5,4,9,11v-3,-14,9,-27,19,-21v2,-2,5,-5,9,-7v-2,8,6,2,12,3v-4,16,-2,42,0,55v1,-4,2,-7,3,0v-10,23,4,43,-5,73v4,20,-1,44,2,60v1,-4,2,-7,3,0v-1,7,-3,29,-15,22v-3,5,-13,2,-20,3v2,-58,-3,-123,5,-173v-2,-3,-13,-14,2,-15v-6,-8,-13,-4,-13,6xm33,-205v2,-1,1,-5,-1,-4v-2,1,-1,4,1,4xm33,-201v-1,-1,-2,-3,-2,0r2,0xm45,-179v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm52,-171v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm28,-192v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm33,-179v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm39,-173v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm44,-168v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm36,-168v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm60,-125v-1,1,-1,4,0,5v1,-1,1,-3,0,-5xm37,-135v2,-1,1,-3,0,-4v-2,0,-1,3,0,4xm60,-89v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm47,-2v0,-1,-1,-2,-2,-2v-2,0,-1,4,0,4v1,0,2,-1,2,-2xm43,-2v0,-1,-1,-2,-2,-2v-2,0,-1,4,0,4v1,0,2,-1,2,-2","w":72},"2":{"d":"112,-190v1,2,-1,2,-3,2v-1,-2,1,-2,3,-2xm82,-222v7,9,25,12,23,30v6,17,2,51,-8,65v-14,1,-23,0,-26,13r4,0v0,8,-8,12,-18,8v6,-4,0,-15,8,-19v9,-10,25,-74,-11,-70v-15,15,-14,13,-16,30v0,15,-14,8,-26,6v-9,-28,12,-53,28,-63r42,0xm42,-173v2,0,1,3,0,4v-2,-1,-3,-3,0,-4xm88,-115v1,3,-1,3,-4,3v1,-2,2,-3,4,-3xm82,-116r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm82,-93r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm76,-97v-4,21,-3,26,-28,54v-6,2,-7,2,-7,7r-30,0v10,-20,26,-38,37,-59v13,2,20,-4,28,-2xm89,-1v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm45,-41v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm103,-4v-16,-5,-20,6,-36,4v1,0,7,-4,2,-4v-8,5,-20,-5,-28,2v-4,-8,9,-3,3,-11r-15,0v10,9,-4,10,-11,15v-1,-3,-4,-3,-8,-3r0,-30r57,0v2,-6,5,-8,4,-1v20,1,42,-7,33,13v0,6,3,11,-1,15xm59,-1v0,1,-1,1,-2,1xm46,0v0,-1,4,-2,4,0v-1,1,-3,1,-4,0xm39,-6v-2,3,2,5,-4,5v0,-2,1,-6,4,-5xm84,-186v4,0,5,-3,0,-2r0,2xm76,-186v2,0,5,1,4,-2v-2,0,-5,-1,-4,2xm100,-145v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm80,-146v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm82,-129v1,-1,6,-2,2,-2v-1,0,-1,1,-2,2xm31,-167v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm99,-25v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm82,-21v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm93,-8v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm46,-51v2,0,1,-3,0,-4v-2,1,-1,3,0,4xm38,-55r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm31,-59v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm57,-25v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm36,-38r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm52,-19v4,-2,0,-5,-2,-6v-3,2,1,5,2,6xm27,-40v2,0,9,-3,2,-2v-1,0,-2,1,-2,2xm46,-19v2,0,1,-4,0,-4v-2,0,-1,4,0,4xm48,-17v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm50,-13v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm36,-24v3,0,1,-3,0,-1r0,1xm40,-21v1,-1,1,-1,0,-2v-2,1,-2,1,0,2xm38,-15v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm29,-23v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm23,-25v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm30,-16v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm17,-24v2,-1,0,-3,0,-1r0,1xm29,-4v5,-3,-2,-4,-2,-7v-4,3,0,4,2,7xm18,-15v3,0,3,-3,0,-4v-1,1,-1,3,0,4xm52,-23v0,1,0,1,-1,2v0,-1,0,-2,1,-2xm28,-8r0,2r0,-2","w":113},"3":{"d":"104,-197v3,1,3,3,0,4v-2,0,-1,-3,0,-4xm52,-197v-7,8,-11,19,-11,32r-28,0v4,-13,5,-61,39,-60r0,28xm107,-93r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm85,-118v29,19,29,101,-7,112v1,-2,1,-3,-1,-5v-4,2,2,5,-2,5v-5,-10,-6,-2,-15,2r0,-24v21,-11,14,-53,11,-80v-4,-1,-6,1,-5,5v-16,2,-18,-17,-21,-27v21,-10,28,-8,28,-36v1,-19,-9,-27,-17,-35v0,-11,-3,-33,9,-25v24,3,32,12,33,43v5,-1,5,5,3,9v-3,7,2,25,1,32v1,4,-18,21,-17,24xm43,-55v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm75,-4v2,0,3,4,0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm37,-66v2,9,8,35,19,36v-2,10,6,29,-9,26v-30,0,-34,-32,-36,-62r26,0xm62,0v0,-1,4,-2,4,0v-1,1,-3,1,-4,0xm88,-188v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm77,-188v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm79,-182v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm66,-195v2,0,3,-3,0,-4v-1,1,-1,3,0,4xm79,-152v1,0,1,0,1,-1xm77,-146v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm31,-169v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm73,-125r0,-4v-2,0,-3,4,0,4xm60,-131v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm24,-167v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm65,-125r0,-4v-3,0,-3,4,0,4xm64,-115v-1,5,10,2,5,1v-2,0,-3,-4,-3,-11v-1,6,-2,9,-2,10xm61,-120v0,-5,-2,-8,-6,-8v0,5,2,8,6,8xm50,-125v2,-2,0,-5,-3,-4xm79,-47v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm75,-36v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm79,-25v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm71,-30v2,0,1,-4,0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm83,-13v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm66,-23v3,-1,2,-3,0,-5v-1,2,-1,3,0,5xm65,-17v1,0,1,-4,0,-4v-3,0,-3,4,0,4xm69,-17r-1,1xm27,-52v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm22,-42v2,-1,2,-3,0,-5r0,5xm35,-21v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm24,-30v2,-1,2,-3,0,-4r0,4xm18,-32v2,0,1,-3,0,-4v-2,1,-1,3,0,4xm24,-21v2,0,3,-4,0,-4v-2,0,-1,4,0,4","w":110},"4":{"d":"94,-226v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm105,-142v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm124,-89v-1,1,-4,4,-3,0r3,0xm97,-212v-7,35,3,66,-3,115v0,11,7,16,21,15r0,21v-22,2,-22,22,-19,48v-3,2,-5,13,-14,11r4,-2r-19,0v2,-10,-4,-28,4,-32v-13,-10,-5,-54,-6,-99v-6,-2,-10,-6,0,-5v-2,-5,-1,-11,-5,-14r-25,65v3,8,16,3,25,4v-2,10,6,27,-6,28v-16,0,-31,-1,-45,-2v-3,-39,11,-56,22,-80v4,-9,15,-37,34,-83v13,-1,33,-1,32,10xm102,-53v0,-1,5,-2,5,0v-2,1,-4,1,-5,0xm67,0v1,-3,6,0,2,1xm17,-50v-5,-1,-10,-1,-11,-5v7,0,10,0,11,5xm77,-218v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm69,-218v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm65,-203v1,-1,8,-4,4,-4xm72,-200v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm69,-201v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm82,-156v1,0,1,-1,1,-2xm75,-156v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm62,-158v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm71,-148v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm54,-163v-1,1,-5,2,-3,3v1,0,2,-1,3,-3xm77,-93v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm82,-32v1,0,1,-3,0,-4v-2,1,-3,3,0,4xm69,-42v1,1,2,3,2,0r-2,0xm71,-23v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm71,-17v-2,0,-1,3,-1,4v2,0,2,-3,1,-4","w":122},"5":{"d":"104,-224v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm108,-140v-1,1,-4,0,-2,0r2,0xm13,-220r77,0v2,-1,6,-9,6,-3r-4,29v-22,2,-63,-10,-52,22v-9,3,1,22,-2,28v5,0,17,-14,20,-3v0,0,-1,7,-2,20v-8,1,-17,26,-36,17v-2,0,-10,4,-11,0xm104,-110v1,-1,4,-1,5,0v-2,1,-4,1,-5,0xm38,-165v3,1,3,3,0,4v-1,0,-1,-3,0,-4xm106,-91v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm62,-154v47,-7,41,59,38,88v-2,30,-2,50,-23,52v3,9,2,9,-9,14r0,-17r-8,15v-6,-15,9,-32,10,-44v2,-25,-3,-58,0,-77v-3,-1,-5,-7,-10,-2v0,-4,2,-8,6,-4v1,-5,-1,-7,-6,-6v-4,-12,10,-18,2,-19xm102,-51v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm52,-37v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm7,-66v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm33,-6v-16,-1,-27,-25,-24,-47r2,4v1,-5,6,-11,2,-14v13,-3,33,0,23,12v0,15,7,22,20,22r0,17r-15,-5v-3,-1,-5,12,-8,11xm54,-6v0,1,4,5,0,4r0,-4xm33,-1v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm62,-218v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm73,-150v2,-1,1,-4,-1,-4v-1,2,-2,3,1,4xm90,-125v2,0,1,-3,0,-4v-3,1,-3,3,0,4xm85,-125v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm90,-118v1,-1,4,-4,0,-3r0,3xm85,-123v-1,1,-1,4,0,5v1,-1,1,-3,0,-5xm94,-110v-2,0,-1,3,-1,4v2,0,2,-3,1,-4xm75,-108v-1,-4,9,-17,6,-23v-3,6,-9,13,-6,23xm75,-121v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm87,-110v-1,-1,-2,-3,-2,0r2,0xm81,-114v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm90,-106v-1,1,-3,2,0,2r0,-2xm79,-108r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm30,-161v-1,1,-2,6,0,7v1,-3,2,-4,0,-7xm26,-154v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm79,-89v10,-8,2,-7,2,-18v-4,0,-7,2,-8,5v2,-1,4,-3,5,-1v0,4,-1,9,5,7v-2,2,-8,4,-4,7xm18,-157v2,0,1,-3,0,-4v-3,1,-3,3,0,4xm87,-87v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm83,-87v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm87,-80v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm79,-83v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm75,-80v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm79,-74v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm90,-62v1,1,2,2,2,-1xm75,-76v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm96,-51v0,0,0,-2,-1,-2v-1,0,-1,1,-1,2r2,0xm77,-68v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm18,-127v2,0,1,-4,0,-4v-3,0,-3,4,0,4xm13,-125v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm96,-44v-2,-1,-5,-5,-4,0r4,0xm81,-53v2,-6,-7,-6,-2,-2v0,1,1,2,2,2xm96,-38r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm20,-113v3,0,1,-3,0,-1r0,1xm88,-39v2,-1,2,-1,0,-2v-1,1,-1,1,0,2xm94,-32v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm87,-28v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm70,-30v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm37,-55r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm30,-51v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm26,-49v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm51,-19v0,0,0,-2,-1,-2v-1,1,-2,2,1,2xm35,-36v-1,-1,-4,-1,-5,0v1,1,3,1,5,0xm40,-28v-1,-1,-2,-3,-2,0r2,0xm13,-42v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm20,-21v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm80,-57v0,1,0,2,-1,2v0,-1,1,-2,1,-2","w":110},"6":{"d":"90,-219v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm109,-179v2,1,3,3,0,4v-2,-1,-1,-3,0,-4xm56,-221v27,-13,45,18,49,41v3,17,-14,18,-31,17v0,-14,-6,-26,-18,-37r0,-21xm56,-194v3,1,3,3,0,5v-1,-2,-2,-3,0,-5xm48,-166v1,3,-2,2,-4,2xm48,-194v-12,18,-4,46,-8,64v7,9,15,-9,31,-7v4,-6,15,-4,24,-4v-7,1,-8,1,-11,4v32,15,20,62,22,89v0,13,-8,26,-24,41v-11,-3,-16,0,-23,3v5,-3,1,-15,2,-22v22,-12,13,-40,15,-69v-5,-20,-29,-21,-36,3v-2,30,-2,52,16,66v0,14,3,21,-16,19v1,-8,-4,-3,-9,-3v-33,-22,-16,-95,-21,-145v-1,-40,9,-68,43,-69v-1,19,0,35,-5,30xm109,-43v1,-2,4,-2,5,0r-5,0xm48,-52v-1,-1,-3,-2,0,-2r0,2xm77,-2v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm49,-6v3,-1,10,1,5,3v-5,1,-11,-1,-5,-3xm54,-1v2,0,3,3,0,4v-1,-1,-1,-3,0,-4xm36,-10v1,3,1,6,0,9v-3,-4,-2,-5,0,-9xm92,-164v3,-1,3,-3,0,-4v-1,0,-1,3,0,4xm80,-134v2,-2,3,-4,0,-5v-3,1,-2,3,0,5xm76,-134v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm78,-98v1,-2,2,-3,0,-5v-2,1,-3,3,0,5xm82,-31v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm88,-24v1,0,1,0,1,-1xm88,-18v1,-1,3,-2,0,-2r0,2xm71,-20v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm63,-22v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm65,-10v2,0,1,-3,0,-4v-2,1,-1,3,0,4xm50,-22v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm37,-31v3,0,3,-4,0,-4r0,4xm42,-26v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm43,-26v0,2,3,2,1,0r-1,0xm32,-34v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm18,-43v3,-1,3,-3,0,-5v-1,2,-1,4,0,5xm26,-32v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm21,-24v2,-2,1,-3,0,-5v-2,2,-3,4,0,5","w":114},"7":{"d":"111,-222v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm102,-194v3,0,3,3,0,4v-1,-1,-1,-3,0,-4xm9,-220v35,-3,64,2,92,-2v-2,6,1,13,2,19v-1,12,-14,7,-31,8v0,1,-35,-1,-56,5r2,-1v-10,-3,-8,-20,-9,-29xm67,-192v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm9,-190v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm30,0r38,-180v0,-15,21,-12,30,-7v0,6,-1,12,-4,16v2,-2,8,-1,8,2v-9,4,-14,21,-6,29v-24,-1,-12,96,-33,108v8,7,0,27,-11,32r0,-4v-2,0,-3,4,0,4r-22,0xm66,-33r0,2r0,-2xm33,-207v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm56,-30v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm46,-30v1,0,1,-3,0,-4v-3,1,-3,3,0,4xm47,-2v-3,-3,-5,1,-1,1","w":110},"8":{"d":"91,-223v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm111,-190v-2,-2,-6,-4,0,-3r0,3xm48,-170v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm50,-140v0,0,2,0,2,1xm61,-124v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm56,-127v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm92,-112v2,2,6,3,12,2v-1,2,-3,3,-6,4v5,17,3,39,16,49r-10,0v0,7,-3,17,7,14v-5,3,-14,7,-9,13v-3,2,-16,33,-27,19v-2,7,-7,11,-17,11v-1,-17,9,-13,12,-24r-10,0v13,-14,22,-77,-5,-78v-24,-1,-17,63,-8,68v1,-3,5,-2,9,-2v-6,3,-6,5,0,8r0,25v-8,-1,-16,0,-19,3r1,-1v-37,-11,-33,-93,-12,-119v-20,-26,-21,-113,30,-103r0,30v-8,-5,-15,6,-16,24v2,3,-1,8,0,12v5,-1,1,6,1,9v-1,5,20,17,14,21v-1,-1,-3,-1,-5,-1v2,5,2,14,12,10r0,3v4,-5,11,-8,4,-16v0,5,-2,4,-4,0v4,-8,12,-12,11,-20v-1,-30,-2,-34,-13,-44r0,-28v14,3,39,8,34,20v8,5,2,11,8,27r9,0v-11,0,-9,9,-7,22v1,12,-11,27,-19,32v-1,5,12,5,7,10xm45,-78v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm60,-21v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm39,-165v0,-1,2,-4,0,-4v-2,0,-3,4,0,4xm60,-110v-2,-8,-2,-4,-4,0v0,1,1,2,2,2v1,0,2,-1,2,-2xm44,-109v1,1,2,2,2,-1xm39,-97v1,0,1,0,1,-1xm79,-51v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm73,-17v2,0,1,-4,0,-4v-2,0,-3,4,0,4","w":114},"9":{"d":"107,-159v0,2,0,4,-3,3xm11,-132v0,-46,-3,-82,30,-92r40,0v17,12,26,27,26,50v-6,-7,-23,-8,-32,-4v5,-9,-9,-19,-17,-19v-5,-2,-6,11,-8,3v-17,13,-12,112,23,67v-2,19,7,32,-16,36v-30,5,-46,-3,-46,-41xm81,-46v-14,-6,1,-29,-4,-39v0,-27,-1,-47,4,-65v9,-2,19,0,21,8v0,-2,-1,-7,2,-6r0,21v2,0,6,-4,5,0v-5,25,6,75,-24,65v3,-3,11,-14,-2,-12v-3,1,-6,15,-5,20v10,-4,5,4,3,8xm104,-34v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm37,-87v-2,0,-2,1,-1,-1xm77,-42v0,3,-5,8,-4,4xm52,-57v-3,-1,-7,-2,0,-2r0,2xm81,-21r1,0r-1,0xm103,-52v-3,-6,0,-11,4,-7v0,11,-2,36,-17,34v1,1,3,2,6,4v-13,19,-35,21,-61,17v1,-5,-2,-4,-6,-4v-4,-10,-19,-32,-15,-53v18,-3,23,1,28,-5v-5,23,4,44,27,34v-3,12,19,8,8,17v18,-1,10,-11,8,-21v3,-5,7,-18,18,-16xm60,-36v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm50,0v0,-2,3,-1,4,-1v0,2,-3,2,-4,1xm94,-142v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm90,-146v2,0,2,0,2,-2xm97,-134v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm94,-137v-1,-1,-2,-3,-2,0r2,0xm88,-139v1,-1,2,-3,0,-5v-2,1,-3,4,0,5xm104,-119v1,-1,1,-2,0,-3r0,3xm102,-114v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm82,-124v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm37,-154v2,-2,1,-3,0,-5v-1,2,-2,3,0,5xm35,-150v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm40,-144v0,-4,-4,-5,-3,0r3,0xm106,-76v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm81,-85v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm16,-148v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm48,-7v2,-1,2,-1,0,-2v-1,1,-1,1,0,2","w":114},":":{"d":"41,-169v5,13,-2,20,-3,32v-3,-1,-13,-1,-30,-2v10,-2,-3,-25,0,-30r33,0xm28,-134v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm48,-42v-11,8,-4,24,-7,36v-1,2,-24,3,-33,7r0,-36v19,-5,32,-7,40,-7xm39,-145v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm26,-165r-13,0v0,8,10,9,13,0xm16,-155v0,0,5,9,4,3v-2,-2,-3,-3,-4,-3xm17,-141v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm39,-7v2,0,3,-4,0,-4v-2,0,-1,4,0,4","w":53},";":{"d":"34,-148v2,1,2,3,0,4v-1,-1,-1,-3,0,-4xm34,-170v0,3,-1,12,-3,27v-9,0,-15,3,-24,0r0,-25v6,0,15,0,27,-2xm7,31r6,-30v-4,-2,-5,-1,-7,1r0,-30r17,0v-2,-7,7,-3,11,-4v-1,8,-5,27,4,30v-12,0,-9,42,-31,33xm29,-148v1,-1,2,-3,0,-4v-3,1,-2,3,0,4","w":37},"<":{"d":"70,-66v10,19,50,33,34,67v-19,-1,-74,-61,-96,-80v-2,-2,-4,-15,-4,-36v33,-29,62,-68,100,-91v0,11,2,18,5,21v-2,1,-6,8,-10,19v-18,23,-48,39,-70,61v5,17,25,35,41,39xm79,-12v2,1,1,4,0,5v-1,-1,-2,-4,0,-5xm45,-130v2,-1,1,-6,0,-6v-2,1,-1,5,0,6xm49,-125v1,-1,1,-6,0,-6v-2,0,-3,5,0,6xm42,-125v1,-1,4,-4,0,-3r0,3xm39,-125v1,-1,2,-5,0,-5v-1,0,-1,4,0,5xm44,-119v1,-2,1,-4,0,-6v-2,2,-3,4,0,6xm30,-126v2,0,1,-3,0,-3v-2,0,-2,3,0,3xm80,-49v2,-1,1,-5,-1,-5xm12,-116v1,-1,2,-5,0,-5v-2,0,-1,4,0,5xm38,-85v1,-1,1,-2,0,-3v-2,0,-1,2,0,3xm24,-97v1,0,2,-5,0,-5r0,5xm9,-116v-1,1,-2,5,0,6v2,-1,1,-4,0,-6xm104,-16r0,-5v-2,1,-3,4,0,5xm12,-105v2,0,1,-4,0,-5v-1,1,-2,5,0,5xm17,-97v1,0,2,-5,0,-5r0,5xm7,-99v1,-1,3,-5,0,-5v-1,0,-2,5,0,5xm9,-99v-1,2,-4,2,-3,6xm7,-88v1,-1,3,-5,0,-5v-1,1,-2,4,0,5","w":111},"=":{"d":"105,-133v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm100,-122r-82,2r2,-2r-11,0v0,-6,0,-11,-1,-15v30,4,74,-9,94,6v-1,2,-2,5,-2,9xm75,-84v-1,1,-4,0,-2,0r2,0xm102,-103v-3,4,2,12,-2,15r-91,-1r0,-14v24,0,64,-8,93,0xm12,-119v0,1,0,1,-1,1xm88,-132v1,-1,3,-2,0,-3v-1,1,-1,2,0,3xm79,-126v-1,-1,2,-2,0,-2v-1,1,-1,1,0,2xm65,-125v1,-1,0,-1,0,-2v-1,1,-1,1,0,2xm50,-134v2,-1,0,-3,0,-1r0,1xm28,-133v0,-1,2,-2,0,-2r0,2xm57,-102v1,-1,1,-1,0,-2v-2,1,-2,1,0,2xm54,-103v-1,-1,-2,-1,-3,0r3,0xm25,-126v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm19,-126v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm12,-126v1,-1,3,-2,0,-3v-1,1,-1,2,0,3","w":107},">":{"d":"69,-150v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm38,-168v17,11,37,32,54,39v0,5,7,11,20,16v-11,16,4,26,-14,43v-1,-1,0,-4,-3,-3v-8,10,-61,45,-91,74r4,-39r74,-57v2,-13,-24,-21,-52,-44v-1,0,-3,1,-4,1v5,-5,-7,-8,-17,-19r-3,0r0,-34v8,-2,30,28,41,18v-1,2,-8,2,-9,5xm108,-108v1,-1,1,-4,0,-5v-1,1,-2,4,0,5","w":113},"?":{"d":"79,-222v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm64,-222v15,9,34,31,21,53v2,2,5,2,5,6v-17,18,-40,53,-36,85r4,2v-7,16,-12,7,-22,10r1,1v-25,-35,15,-86,23,-114v0,-4,-10,-19,-13,-18v-7,-2,-19,23,-24,22v-33,2,-18,-24,-5,-28r-9,0v14,-17,21,-17,55,-19xm62,-36v0,-1,6,-2,6,0v-2,2,-4,1,-6,0xm49,0v-8,-1,-19,-4,-23,1v0,-8,1,-19,2,-35v10,0,23,-4,30,0r0,30v-5,1,-14,-3,-15,2v2,1,4,2,6,2xm45,-209v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm25,-201v7,0,6,-11,5,-15v-3,5,-5,10,-5,15xm14,-188v1,0,1,-4,0,-4v-3,0,-3,4,0,4xm47,-65v3,-1,2,-3,0,-5v-1,2,-2,3,0,5","w":92},"@":{"d":"131,-169v1,-1,6,-2,7,0v-2,1,-5,1,-7,0xm125,-178v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm110,-212v-4,5,25,15,15,24v0,2,-1,5,-1,8v-15,2,-28,-1,-31,-13v0,-2,-34,-8,-23,-17v-4,-2,-3,-7,-3,-13v19,0,33,4,43,11xm116,-174v-1,1,-2,1,-3,0v1,-1,2,-1,3,0xm106,-176v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm83,-197v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm112,-166v-2,4,-43,5,-53,1v19,-12,28,2,53,-1xm108,-146v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm62,-223v4,30,-23,36,-43,19v0,-14,26,-18,43,-19xm47,-188v-2,-1,-4,-2,0,-2r0,2xm36,-188v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm31,-190v-13,-1,-19,-3,-19,-7v12,0,19,2,19,7xm78,-93v-1,15,20,16,23,4r0,-51r34,0v-25,9,1,57,-12,81r-17,0v0,-4,0,-7,-4,-7v-10,8,-48,15,-47,-8r0,-70v3,1,3,7,2,9v5,-5,9,-8,9,-13v-7,-1,-19,-11,-5,-11r66,0v3,2,2,2,2,5v-19,12,-44,-9,-60,8v15,4,4,34,12,48v-1,1,-3,3,-3,5xm38,-165v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm15,-161v6,-10,-5,-21,-6,-28v18,1,13,3,27,13v-18,7,-13,14,-6,26v-8,4,-4,-13,-15,-11xm34,-152v-1,-1,-1,-4,0,-5v1,2,1,4,0,5xm8,-176v3,2,3,4,0,5v-2,-2,-1,-3,0,-5xm36,-138v-2,-1,-2,-3,0,-4r0,4xm30,-135v-3,0,-7,-3,-3,-5v2,1,3,3,3,5xm13,-152v-2,2,-3,9,-2,21v-3,-4,-7,-20,2,-21xm36,-106v2,1,1,3,0,4v-2,0,-1,-3,0,-4xm44,-93v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm40,-91v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm67,-11v2,-9,31,-31,41,-16v4,3,7,5,8,6v0,13,-46,35,-49,10xm43,-58v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm28,-107v15,21,-7,77,30,82v9,2,3,15,5,24v-56,3,-55,-47,-57,-98v6,-1,19,-5,7,-9v-9,4,-6,-1,-5,-11v5,-4,12,-2,25,-4v0,8,-3,14,-7,17v1,-1,1,-1,2,-1xm123,-190v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm102,-214v-1,1,-5,2,-1,2xm121,-106v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm112,-108v2,0,2,0,2,-2xm117,-104v-3,-1,-8,5,-6,9v3,-2,5,-5,6,-9xm106,-104v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm119,-91v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm68,-123v3,4,8,1,7,-4r-1,-6v-4,2,-6,6,-6,10xm63,-89v8,1,11,-3,11,-11v-5,0,-7,8,-11,11xm25,-95v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm32,-85v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm19,-95v-1,-1,-5,-2,-6,0v2,1,4,1,6,0","w":135},"A":{"d":"86,-237v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm97,-197v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm69,-135v1,0,1,4,0,4v-3,0,-3,-4,0,-4xm115,-89v1,2,2,3,0,5v-2,-2,-1,-3,0,-5xm124,-41v-6,9,0,27,9,28v-5,0,-7,3,-7,8r-33,0v1,-16,-8,-43,-9,-55v-2,15,-32,-2,-35,14r8,0v-19,4,-7,63,-42,44v-2,1,-5,1,-9,2v0,-6,5,-33,9,-56r31,-175v19,-3,11,57,18,67v1,8,-9,38,-8,47v4,-1,5,0,8,2r-9,4v-1,17,-6,19,4,25v-2,0,-2,3,-1,4r17,0v2,5,7,28,9,14v3,-29,-24,-81,-9,-103v0,-2,-2,-2,-6,-2v-5,-21,-19,-50,-3,-60v3,5,13,2,20,3v1,4,8,12,7,22r8,4r-8,0v1,15,4,31,6,47r14,4v-12,0,-13,18,-2,22v-3,31,2,62,13,90xm121,-58v0,-1,-2,-2,0,-2r0,2xm75,-91v1,3,-3,7,-2,2xm64,-228v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm77,-155v1,1,2,3,2,0r-2,0xm77,-135v2,-1,3,-3,0,-5v-1,2,-2,3,0,5xm104,-104v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm82,-109r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm110,-80v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm55,-128v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm108,-69v1,1,4,5,3,0r-3,0xm102,-70v3,0,0,-3,0,-1r0,1xm32,-1v3,0,4,-2,1,-4v-1,1,-3,3,-1,4","w":136},"B":{"d":"123,-186v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm26,-237v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm52,-190r-9,2v1,-2,5,-5,9,-2xm54,-156v0,4,-4,6,-11,6v0,-4,4,-6,11,-6xm119,-82r0,4r0,-4xm79,-172v1,-21,-16,-32,-36,-25r0,-31v18,2,28,-10,38,0v35,9,45,71,19,97v-8,6,-7,14,3,16r-2,2v12,14,20,22,13,37v13,21,-6,71,-39,71v-13,7,-35,8,-32,-14v0,-12,0,-15,11,-14v17,1,29,-15,29,-33v0,-19,-12,-47,-28,-35r0,-8v-3,1,-7,3,-12,5r0,-30v24,0,36,-12,36,-38xm43,-146v3,3,3,6,0,9v-2,-3,-1,-6,0,-9xm63,-102v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm10,0r0,-230v10,0,10,0,29,2r0,224v-13,-2,-20,2,-29,4xm43,-89v3,2,3,4,0,5v-2,-2,-1,-3,0,-5xm52,-69v1,4,-3,3,-6,3v-1,-4,3,-3,6,-3xm43,-51v1,-1,6,-2,7,0v-3,2,-4,1,-7,0xm112,-182v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm112,-162v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm77,-111r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm117,-66v1,-2,2,-3,0,-5v-3,2,-3,3,0,5xm59,-120v-1,-1,-2,-3,-2,0r2,0"},"C":{"d":"80,-239v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm97,-226v-1,8,8,22,17,21v-5,11,-1,25,-3,47v-13,2,-20,2,-29,1v-4,-17,-3,-48,-22,-45r0,-31v8,-1,29,8,37,7xm86,-155v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm42,-175v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm115,-84v3,2,2,6,0,8v-2,-2,-1,-6,0,-8xm44,-148v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm111,-80v2,2,1,3,0,4v-3,0,-2,-3,0,-4xm109,-73v1,1,3,2,0,2r0,-2xm108,-82v0,6,-6,8,-11,4v2,-3,6,-4,11,-4xm109,-64v-1,1,-4,4,-3,0r3,0xm93,-80v-6,5,3,13,10,12v1,6,-4,6,-5,10r14,0v-1,15,-11,9,-3,25v-6,4,-4,7,-12,7v8,-10,1,-5,-13,-14v6,-4,14,5,18,-4v-5,0,-5,2,-10,0v0,-5,-2,-7,-6,-9v4,-3,10,-6,0,-5v1,-2,8,-4,3,-6r-9,2r0,-18r13,0xm38,-126v12,12,-10,36,4,46v-7,23,2,42,14,56v0,11,2,30,-12,22v-11,10,-27,-15,-27,-26r9,0r-2,-8v-8,8,-17,0,-16,-14v7,-68,-29,-178,47,-183r0,29v-13,12,-22,23,-13,41v-1,9,-4,25,-2,32v1,-1,2,-6,2,-2v0,3,-2,5,-4,7xm80,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm83,-47v-1,1,-1,3,-3,3v1,-2,2,-3,3,-3xm93,-29v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm97,-20v-1,1,-2,7,-2,3v0,-1,1,-2,2,-3xm84,-26r-3,2xm86,-18v2,1,2,2,0,3v-1,-1,-1,-2,0,-3xm78,-29v0,7,-16,6,-5,11v4,-2,7,-4,7,4v-1,6,-4,6,4,4v2,-1,4,-1,7,-1v-2,4,-13,7,-9,11v-6,-3,-17,2,-22,-2v0,-11,-2,-35,11,-24v1,-1,4,-2,7,-3xm13,-31v3,1,2,4,0,5v-1,-1,-2,-4,0,-5xm78,-221v1,-1,1,-5,0,-5v-2,0,-3,4,0,5xm102,-173v2,0,2,0,2,-2xm51,-221v2,-1,1,-5,0,-5v-2,0,-3,4,0,5xm89,-177v2,-2,1,-3,0,-5v-3,2,-3,4,0,5xm86,-76v3,-1,3,-2,0,-4v-2,2,-1,3,0,4xm104,-46v2,-2,3,-4,0,-5v-3,1,-2,3,0,5xm84,-66r0,-5v-2,1,-2,3,0,5xm95,-51v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm97,-46v3,-2,3,-4,0,-5v-2,2,-1,3,0,5xm91,-51v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm102,-36v2,-1,1,-3,0,-4v-2,2,-3,3,0,4xm38,-58r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm49,-31v3,-3,-2,-7,-2,-2v0,1,1,2,2,2xm40,-26v1,0,1,0,1,-1xm30,-32v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm22,-22v3,-1,6,-2,0,-2r0,2","w":118},"D":{"d":"115,-190v0,-2,4,-2,5,0v-2,1,-4,1,-5,0xm46,-179v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm55,-233v55,-1,61,47,55,98v9,5,-5,19,3,27v-5,16,2,26,-3,37v5,26,-7,72,-39,56r-18,4v5,-4,4,-13,13,-13v-8,-9,-15,18,-20,13v-4,-2,-5,-11,-4,-20r11,0r-4,7v5,1,28,-18,28,-22r0,-132v0,-14,-18,-24,-35,-23v2,-15,-8,-33,13,-32xm120,-53r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm115,-53r0,4r0,-4xm42,-126v2,1,1,4,0,5v-2,-1,-3,-4,0,-5xm7,-53v6,-50,0,-118,2,-177v12,-3,28,-5,28,11r0,95v-1,6,-9,8,-1,15v-1,9,-9,32,-7,43xm42,-73r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm49,-64r0,4v-2,0,-3,-4,0,-4xm84,-9v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm51,-38v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm64,-9v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm57,-4v-4,0,-6,-1,-6,-3v3,0,7,-1,6,3xm44,-7v1,0,1,0,1,1xm38,-26v0,22,-17,11,-27,24r2,2r-4,0v5,-18,-14,-54,14,-51v10,0,15,8,15,25xm33,-9v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm26,-5v-1,-1,-3,-2,0,-2r0,2xm20,-4v2,1,2,3,0,3v-2,0,-3,-2,0,-3xm51,-228v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm106,-121v2,1,2,-1,2,-3v-2,-1,-2,1,-2,3xm106,-97v2,-2,3,-4,0,-5v-3,1,-2,3,0,5xm86,-55v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm82,-58v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm86,-51v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm28,-100v2,1,5,-1,2,-2v-1,0,-2,1,-2,2xm77,-38v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm73,-33v1,-1,4,-4,0,-3r0,3xm82,-18v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm11,-86v1,-1,3,-2,0,-2r0,2xm69,-20v1,0,1,-4,0,-4v-2,0,-3,4,0,4xm22,-66v2,-2,2,-4,0,-5v-2,1,-3,3,0,5xm13,-58v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm13,-44v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm26,-15v-1,-3,-2,-7,-2,0r2,0xm11,-22v3,1,9,-2,8,-4v-3,0,-6,1,-8,4xm11,-24v3,-1,2,-3,0,-5v-2,2,-3,4,0,5","w":120},"E":{"d":"110,-240v0,2,0,4,-2,3v0,-2,0,-4,2,-3xm62,-231v15,-4,29,4,40,-3v-3,9,3,18,-5,32r-56,3v0,-15,1,-26,3,-34v2,9,20,-3,18,2xm44,-195v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm42,-166v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm44,-155v1,1,1,3,0,4v-2,0,-1,-4,0,-4xm42,-148v2,0,1,3,0,4v-2,-1,-3,-3,0,-4xm82,-109v-8,12,-25,-4,-37,5v-10,-14,-4,-48,23,-31v5,-2,16,-6,16,3v0,8,-1,15,-2,23xm37,-5v-1,11,-15,0,-26,3r0,-226v5,-1,14,-2,26,-3v-1,17,2,36,-1,51v-7,0,-4,6,-3,12r4,-3r0,166xm42,-95r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm42,-78v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm42,-60v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm44,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm101,-36v-2,11,1,24,-6,36v-18,2,-37,-3,-52,-1r1,1v-6,-6,-2,-27,0,-36v8,8,35,-7,47,3xm30,-184v-1,-6,-9,-3,-4,0v1,1,3,3,4,0xm19,-175v3,0,3,-4,0,-4v-2,0,-1,4,0,4xm50,-133v3,-1,3,-4,0,-5v-1,1,-2,4,0,5xm22,-155v2,-2,1,-3,0,-5v-3,2,-3,4,0,5xm68,-109v0,2,3,0,1,0r-1,0xm26,-146v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm26,-138v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm13,-142v4,0,8,-3,0,-2r0,2xm75,-32v2,0,3,-2,0,-2v-3,0,-1,2,0,2xm65,-32v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm88,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm64,-26v-1,-1,-2,-3,-2,0r2,0xm77,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm73,0v2,-1,1,-4,0,-5v-3,1,-3,4,0,5xm28,-186v0,1,-1,2,-2,2v0,-1,1,-2,2,-2","w":106},"F":{"d":"46,-201v-8,-16,-2,-37,22,-31r-5,2r9,0v-2,-1,-3,-3,0,-4v0,8,9,-4,4,4v13,0,27,-3,23,17v0,7,-1,11,-3,12r-50,0xm43,-164v2,2,2,4,0,5v-2,-2,-1,-3,0,-5xm48,-155v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm86,-137v-4,9,-5,14,-5,22v2,-1,5,-5,4,0v-1,16,-29,3,-42,7v2,-18,-8,-31,20,-27xm39,-142v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm56,-104v1,-1,4,-1,5,0v-1,1,-3,1,-5,0xm8,-228r32,-5v-1,34,3,74,-6,100r5,-2v-1,40,3,86,-2,122v4,3,2,14,-6,13v-8,-1,-17,-4,-23,0r0,-228xm14,-221v3,-1,3,-3,0,-5v-1,2,-2,3,0,5xm81,-108v2,-2,1,-4,0,-5v-2,1,-3,4,0,5xm56,-126v3,-1,3,-3,0,-5v-1,2,-2,3,0,5xm50,-126v3,-2,0,-3,-2,-5v0,3,1,4,2,5xm56,-120v5,-2,0,-5,-2,-6v-2,1,-1,4,0,5v1,-2,1,1,2,1xm12,-148v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm32,-128v-2,0,-1,6,0,7v1,-3,2,-4,0,-7xm17,-128v1,1,2,3,2,0r-2,0xm28,-93v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm12,-86v3,-1,2,-3,0,-5v-1,1,-2,4,0,5xm30,-62v2,0,2,-2,2,-4xm32,-53v0,-2,-4,-3,-4,0v0,2,4,3,4,0xm12,-66v2,-2,2,-4,0,-5v-2,2,-1,3,0,5xm56,-124v0,1,0,2,-1,2v0,-1,0,-1,1,-2","w":101},"G":{"d":"88,-241v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm78,-240v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm109,-202v0,-3,3,0,1,0r-1,0xm121,-193v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm112,-189v1,4,-4,25,-2,30v-4,0,-6,2,-7,6v-6,-1,-17,4,-15,-5r-9,0v-1,-22,-8,-38,-22,-50v1,-12,-6,-29,14,-25v13,-8,41,30,41,44xm121,-71v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm114,-62v0,1,-1,2,-2,2v-2,0,-3,-4,0,-4v1,0,2,1,2,2xm44,-116v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm50,-232v10,26,-16,47,-13,74v1,1,5,1,4,4v1,7,-17,18,-4,19v2,34,-4,67,6,91v-5,4,3,7,9,18v-1,8,2,19,-2,24v-14,-1,-14,-1,-20,2v-8,-8,-26,-29,-24,-51v2,-23,-3,-52,2,-71v-7,-44,-7,-116,42,-110xm57,-118v10,7,27,0,46,2v1,-2,3,-5,0,-6r7,0v-1,10,5,8,0,20r2,0v-5,23,-4,54,-2,74r-11,0v4,10,10,9,15,15v-3,2,-6,5,-6,8r-13,0v0,-4,1,-10,-5,-8v0,-7,-12,-6,-13,0v4,2,-2,7,-5,8v-5,-1,-8,-2,-7,5v-12,1,-8,-16,-2,-16v1,0,2,0,2,1v-20,-10,5,-21,10,-29v4,-9,10,-55,-11,-44v-2,-5,-8,2,-7,-4v2,-5,-8,-8,-9,-8v7,-2,8,-8,9,-18xm101,-155v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm95,-156v3,0,0,-3,0,-1r0,1xm30,-204v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm37,-182v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm29,-182v1,0,1,-1,1,-2xm101,-82v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm99,-73v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm63,-113v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm10,-151v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm105,-53v3,-1,3,-3,0,-5v-1,2,-2,3,0,5xm97,-55v5,1,7,-5,1,-2v0,0,-1,1,-1,2xm107,-39v1,-1,1,-1,0,-2v-2,1,-2,1,0,2xm14,-128v4,0,-1,-5,0,-1r0,1xm28,-109v3,-1,1,-4,-1,-4v-2,0,0,3,1,4xm17,-120v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm98,-38v1,0,1,-1,1,-2xm94,-42v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm100,-30v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm26,-100r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm86,-39v1,-1,3,-1,1,-2v-1,1,-3,1,-1,2xm10,-113v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm88,-29v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm99,-18v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm19,-93v2,-1,1,-3,0,-4v-2,0,-1,3,0,4xm75,-29v2,0,1,-4,0,-4v-3,0,-3,4,0,4xm72,-18v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm72,-11v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm65,-18v3,0,3,-4,0,-4v-2,0,-1,4,0,4xm61,-22v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm63,-5v2,0,3,-3,0,-4v-2,1,-1,3,0,4","w":119},"H":{"d":"121,-184v0,-2,4,-2,5,0v-2,1,-4,1,-5,0xm119,-140v-6,19,-5,34,0,54v-8,6,-2,45,6,42v-14,2,-8,22,-4,30v0,2,-4,7,-11,14v-13,1,-18,-1,-29,-3r0,-101v-4,-8,-12,5,-18,-2v-1,6,-21,5,-18,-3v3,-7,-2,-22,3,-28v13,0,37,0,35,-9r0,-84v10,-7,21,4,30,-3v6,-1,8,8,3,10v3,23,3,25,-6,39v9,5,9,14,4,22v0,3,9,9,12,9v-3,2,-7,4,-12,7v2,1,5,3,5,6xm46,-142v1,1,2,4,0,5v-3,-1,-3,-4,0,-5xm50,-13v-5,-3,-8,5,-9,9v-17,-5,-31,15,-31,-10v0,-11,2,-18,7,-22r-5,0r0,-194v19,2,39,-10,34,20v5,7,-10,13,4,20v-7,11,-13,37,2,37v-22,1,-7,42,-11,62v14,23,-2,44,2,73v3,1,5,3,7,5xm52,-51v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm90,-221v3,-1,2,-5,0,-5v-2,0,-3,4,0,5xm103,-184v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm108,-133r0,-6v-2,1,-3,5,0,6xm108,-124v-1,-2,-2,-2,-5,-2v2,1,2,2,5,2xm116,-113v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm114,-71v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm57,-102v2,-1,1,-3,0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm95,-33v1,-2,2,-3,0,-5v-2,1,-3,3,0,5xm90,-33v2,-2,2,-4,0,-5v-2,1,-3,3,0,5xm15,-109v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm87,-30v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm88,-24v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm30,-80v1,-1,3,-2,0,-2r0,2xm108,-2v-1,-2,-2,-4,-2,0r2,0xm99,0v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm15,-76v3,0,2,-3,0,-4v-2,1,-3,4,0,4xm43,-51v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm15,-60v2,0,3,-4,0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm21,-38r3,-2v-1,1,-2,2,-3,2xm30,-26v4,-3,0,-6,-2,-7v-1,0,-2,1,-2,2v1,3,4,2,4,5xm17,-31v5,5,14,-4,2,-2v-1,0,-2,1,-2,2xm24,-22v1,-1,1,-3,0,-4v-2,0,-3,3,0,4xm30,-31v0,1,-1,2,-1,2v0,-1,0,-1,1,-2","w":125},"I":{"d":"49,-155v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm43,-37v6,28,-2,44,-31,35v0,4,-5,1,0,0r0,-227v17,5,32,-18,31,11v-1,20,-1,36,1,56r1,-1v-4,38,-1,82,-2,126xm16,-221v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm13,-220v-1,4,3,12,5,8v0,-6,-2,-8,-5,-8","w":54},"J":{"d":"69,-118v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm67,-230v1,29,-5,54,2,79v-7,3,-2,10,1,14v-8,1,1,15,-7,24v6,3,4,13,0,18v11,6,-1,35,4,47v1,39,-25,41,-60,48r2,-31v38,-10,23,-34,26,-71v2,-1,4,-2,3,-5v-3,3,-5,3,-4,-3v2,-27,-2,-60,4,-83v-5,-8,-1,-25,-2,-37r31,0xm60,-211v3,0,3,-3,0,-4v-2,1,-1,3,0,4xm56,-215v-1,0,-2,4,0,4v1,-1,1,-3,0,-4xm47,-204v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm54,-182v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm58,-173v4,-2,3,-7,0,-2r0,2xm54,-173v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm45,-182v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm58,-166v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm64,-160v1,0,1,-1,1,-2xm50,-173v2,-1,1,-4,0,-5v-3,1,-3,4,0,5xm40,-179v3,-2,3,-4,0,-5v-2,2,-1,3,0,5xm65,-151v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm58,-157v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm45,-168v1,-2,2,-3,0,-5v-2,1,-3,3,0,5xm47,-164v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm45,-162v3,0,13,0,7,-2v-1,0,-3,1,-7,2xm58,-151v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm60,-146v-1,3,4,6,3,2v-1,-1,-2,-2,-3,-2xm54,-142v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm38,-155v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm50,-133v7,-1,4,-5,0,-5r0,5xm40,-144v3,0,0,-3,0,-1r0,1xm58,-124v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm43,-137v-1,3,2,6,2,2v-1,-1,-1,-2,-2,-2xm63,-107v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm51,-112v1,-6,-6,-16,-8,-9v-1,4,4,9,8,9xm58,-104v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm45,-102v2,-2,1,-3,0,-5v-2,1,-3,4,0,5xm54,-89v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm45,-97v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm42,-102v0,-1,0,-2,-2,-2r0,4v2,0,2,-1,2,-2xm56,-73v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm54,-78v-1,-1,-2,-3,-2,0r2,0xm50,-71v1,-1,3,-2,0,-2r0,2xm41,-68v1,-1,3,-1,1,-2v-1,1,-3,1,-1,2xm40,-62v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm45,-38r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm38,-42v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm18,-26v2,-1,3,-4,0,-5v-2,1,-1,4,0,5xm18,-15v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm14,-7v2,0,1,-4,0,-4v-2,0,-3,4,0,4","w":78},"K":{"d":"98,-193v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm89,-173v2,2,1,3,0,5v-1,-2,-2,-3,0,-5xm49,-210v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm80,-135v17,43,22,74,38,127v1,7,-14,10,-22,7r6,0v-3,-7,-11,-1,-18,-1v-9,-42,-17,-62,-28,-100v-12,-1,-4,19,-16,23r0,-67v9,-12,29,-61,38,-83v18,0,26,-3,38,-4v-6,34,-42,55,-36,87v-6,3,5,9,0,11xm40,-230v-3,42,-8,129,0,172v-1,11,-10,42,7,45v-8,1,-24,20,-37,11r-5,2v3,-17,-3,-42,7,-51r-5,0r0,-179r18,0v1,-7,5,-8,4,0r11,0xm118,-24v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm126,-14v1,1,1,1,0,2v-2,-1,-2,-1,0,-2xm84,-190v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm15,-140v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm111,-2v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm82,-24v1,-1,1,-1,0,-2v-1,1,-1,1,0,2","w":118},"L":{"d":"45,-222v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm41,-202r0,-6v1,2,1,4,0,6xm10,-230v4,-1,2,4,2,4v0,3,-1,4,-2,4r0,-8xm41,-193v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm14,-217v0,1,-2,3,-2,1v0,-1,0,-1,2,-1xm36,-191v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm43,-182v2,1,3,3,0,4v-3,0,-2,-3,0,-4xm27,-197v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm36,-179v0,-4,0,-8,5,-7v-3,1,-4,4,-5,7xm17,-183v2,1,0,3,0,1r0,-1xm41,-133v2,2,1,3,0,5v-2,-2,-3,-4,0,-5xm10,-153v1,1,2,2,2,5v-2,-2,-2,-2,-2,-5xm38,-118v-8,13,14,23,0,34v8,8,-1,33,5,44r-34,0v7,-8,1,-37,3,-57v0,-3,2,-3,6,-3v-10,-3,-9,-21,-7,-29v1,1,3,1,6,1v1,-7,0,-16,-7,-10v8,-8,6,-20,2,-32v8,-5,9,11,15,4v-1,-3,-7,-8,0,-8v-13,-17,-14,-29,-10,-54r11,0v1,2,-4,4,-2,4v5,0,7,-2,8,-6v6,0,9,4,9,10v-13,-4,0,15,-9,18v3,-5,-4,-6,-8,-6v-1,3,-1,6,1,9v-2,-3,-5,0,-9,2v5,15,17,-1,12,16v5,-3,4,13,11,6v0,23,2,42,-9,57r6,0xm109,-40v1,3,-2,2,-4,2v1,-1,2,-2,4,-2xm45,-82v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm103,-15v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm43,-53v1,1,3,2,0,2r0,-2xm10,-36v5,7,40,-6,46,3v15,-8,47,2,47,9v-3,0,-6,25,-11,24v-23,0,-49,-3,-70,-1r1,1v-1,-4,-13,-3,-13,-9r0,-27xm10,0v0,-2,3,-1,4,-1v0,2,-3,2,-4,1xm34,-222v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm25,-213v4,1,10,-3,2,-2v-1,1,-2,1,-2,2xm21,-199v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm32,-166v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm36,-160v2,-2,1,-4,0,-6r0,6xm30,-162v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm25,-158v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm36,-138v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm24,-154r-4,15v6,1,10,-11,4,-15xm27,-135v3,-2,3,-3,0,-5v-1,2,-2,3,0,5xm30,-128v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm21,-133v1,-1,3,-2,0,-2r0,2xm23,-118v3,-1,6,-2,0,-2r0,2xm21,-109v0,2,3,0,1,0r-1,0xm13,-112v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm25,-93v1,0,2,-1,2,-3v-1,0,-2,1,-2,3xm14,-91v3,-1,3,-3,0,-4r0,4xm65,-31v1,2,7,-1,2,-1v-1,0,-2,0,-2,1xm15,-81v1,1,2,2,2,-1xm87,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm32,-51v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm78,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm34,-44v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm30,-46v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm67,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm17,-49r0,-4v-2,0,-2,1,-2,2v0,1,0,2,2,2xm51,0v2,0,3,-3,1,-5v-2,2,-2,3,-1,5","w":106},"M":{"d":"162,-192v1,1,1,2,0,3v-2,-1,-2,-2,0,-3xm156,-173v-14,2,-20,3,-31,3r0,-59v11,0,26,2,31,-4r0,60xm71,-200v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm78,-165v1,1,1,1,0,2v-2,-1,-2,-1,0,-2xm81,-155v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm156,-169r2,105v-2,4,-6,11,2,13v-14,13,13,56,-28,51v-10,0,-2,-14,-6,-47r-1,-119v16,-2,27,-3,31,-3xm79,-140v1,2,2,3,0,5v-2,-1,-3,-3,0,-5xm112,-89v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm76,-148v-3,7,-3,24,4,24r0,20v16,-3,4,-21,12,-24v11,-32,11,-69,17,-100r12,-1v-1,37,3,79,-5,109v7,18,-20,65,-17,96v-1,4,-8,25,-22,25v-3,-24,-10,-50,-18,-85v-9,-4,1,-10,-5,-25v-7,1,-1,-3,-2,-9v-2,-3,-4,-9,-7,-17v-4,1,-8,23,3,17v-15,5,0,29,-7,45v4,20,-1,47,0,68v-4,9,-21,4,-32,5r3,-229v8,0,15,1,16,-6v11,6,11,6,17,0v28,7,11,67,31,87xm52,-46v2,0,3,3,0,4v-2,-1,-3,-3,0,-4xm54,-220v3,-1,2,-2,0,-4v-1,1,-2,3,0,4xm43,-221v3,-1,2,-5,0,-5v-1,0,-2,4,0,5xm37,-224v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm30,-221v2,-1,1,-5,0,-5v-2,0,-3,4,0,5xm23,-224v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm38,-204v0,0,0,-2,-1,-2v0,0,0,2,1,2xm28,-197v2,-2,1,-3,0,-5v-3,2,-3,3,0,5xm17,-206v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm43,-148v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm14,-173v3,0,3,-3,0,-4v-2,1,-1,3,0,4xm19,-166v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm43,-142v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm14,-160v1,-2,5,-5,0,-4r0,4xm19,-151v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm79,-22v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm41,-22v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm32,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm28,-2v-2,-1,-2,-3,-5,-3v2,2,1,4,5,3","w":166},"N":{"d":"129,-154v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm120,-149v0,4,-3,6,-5,3v1,-2,2,-3,5,-3xm121,-137v2,1,2,1,0,2r0,-2xm26,-228v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm111,-144v1,2,-1,2,-3,2xm105,-137v2,0,3,1,1,2xm69,-171v0,2,0,4,-3,3v0,-2,0,-4,3,-3xm129,-101v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm88,-135v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm76,-144v0,8,-3,11,-10,11v8,-3,6,-10,10,-11xm105,-129v7,1,3,-9,10,-8v4,0,6,4,6,14r10,0v-10,5,-17,12,-11,19r1,-5v0,9,-1,14,4,18v-6,-1,-1,8,-4,11v1,17,1,54,-2,75r-29,0v-4,-8,-24,-62,-24,-72v11,-2,22,-8,20,11v8,1,-1,-12,4,-14r15,0v1,-7,-23,-2,-15,-9v-1,-7,4,-17,-4,-18v-6,2,-9,4,-9,7r5,-2v-4,6,6,10,0,18r-16,0v2,-1,4,-2,1,-3v-1,1,-3,2,-5,3v0,-7,-25,-37,-16,-47r2,1v-10,-15,7,-28,1,-41r-5,3v3,-13,-2,-35,0,-54v11,0,7,36,18,38v-11,14,11,30,24,31v-7,0,-18,4,-22,0v0,11,-7,21,5,25v0,4,-2,2,-7,4v11,2,-2,20,5,24v3,-1,7,-29,15,-18v1,-1,6,-5,13,-13v-14,-18,-1,-65,-5,-99v10,0,22,2,25,-6v-2,7,4,6,9,6v-4,31,-1,40,-3,72v-4,8,-19,10,-16,29xm44,-164v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm77,-131v4,4,-4,13,-4,7v0,-2,1,-5,4,-7xm124,-66v2,0,3,3,0,4v-2,-1,-3,-3,0,-4xm40,-120v6,15,1,43,-14,31v1,5,-3,5,-8,5v-3,0,-6,-1,-7,-2r0,-81v6,0,9,-2,9,-8v-2,2,-8,3,-9,0v2,-17,-4,-40,2,-53v-4,8,7,17,10,5v10,2,7,-5,17,-5r0,108xm60,-82r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm100,0v0,-2,5,-1,6,0v-2,1,-4,1,-6,0xm92,-1v1,1,1,1,0,2v-2,0,-3,-2,0,-2xm40,-78v5,27,1,57,-4,77v-9,-4,-16,1,-25,1r0,-78v6,-5,19,0,29,0xm33,-217v2,-1,2,-4,0,-5v-2,1,-3,4,0,5xm36,-198v2,-1,0,-3,0,-1r0,1xm22,-204v5,-3,-2,-11,-7,-10v0,5,2,9,7,10xm111,-115v5,-3,-1,-10,-5,-10v-4,2,2,5,5,10xm57,-166v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm13,-202v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm26,-186v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm115,-97v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm18,-191v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm13,-193v2,0,2,-2,2,-4xm106,-109v-2,2,-5,3,-9,2v2,5,7,2,9,-2xm90,-111r0,-7v-3,2,-6,4,-7,7r7,0xm20,-164v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm108,-76v3,0,2,-3,0,-4v-2,2,-1,3,0,4xm55,-128v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm33,-146v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm29,-135v2,-1,3,-6,0,-7r0,7xm60,-102v2,-2,1,-3,0,-5v-2,1,-3,4,0,5xm22,-140v0,2,3,0,1,0r-1,0xm69,-89r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm33,-124v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm31,-111v1,-4,4,-10,0,-11r0,11xm86,-60v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm31,-104v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm31,-100v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm33,-93v-1,-1,-2,-3,-2,0r2,0xm13,-15v2,-2,3,-4,0,-5v-2,2,-1,3,0,5","w":130},"O":{"d":"98,-211v-2,1,-2,-4,-2,-6v3,1,4,4,2,6xm114,-195v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm45,-182v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm109,-211v2,23,7,43,0,65v-1,3,8,6,3,8r0,98v-10,12,-26,49,-53,35v-8,-21,21,-35,21,-51r0,-92r3,-3v-7,-26,-4,-57,-22,-51v2,-5,-5,-20,-2,-33v9,-1,15,0,13,11v3,-4,6,-15,9,-2v1,-7,9,-2,15,-2v0,1,-6,12,-4,15v-4,-2,-14,-3,-14,2v-1,13,20,2,25,7v4,0,6,-2,6,-7xm50,-109v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm49,-102v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm45,-64v-14,8,5,26,9,35r0,29v-74,-15,-39,-114,-47,-191v0,-13,4,-19,12,-19v-3,-22,24,-6,29,-25v2,0,4,-1,6,-1r0,30v-22,13,-14,56,-16,93v1,35,-1,34,7,49xm50,-71v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm43,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm87,-193v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm78,-202v1,1,4,5,3,0r-3,0xm79,-194v1,-1,3,-1,1,-2v-1,1,-3,1,-1,2xm107,-138v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm25,-215v-1,1,-2,6,0,7v0,-2,2,-5,0,-7xm107,-124v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm110,-118v0,-3,-4,-5,-3,0r3,0xm103,-122v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm102,-116v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm83,-122v-1,0,-2,4,0,4v1,-1,1,-3,0,-4xm37,-142v0,1,-2,2,0,2r0,-2xm38,-62v3,-1,3,-3,0,-4v-1,0,-1,3,0,4","w":118},"P":{"d":"122,-179v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm55,-193v2,1,3,4,0,5v-2,-1,-1,-4,0,-5xm102,-215v18,14,4,44,13,62v-4,5,-4,11,-2,14v1,12,-26,53,-40,39r-29,5v-3,-9,-5,-48,10,-33v23,1,38,-49,16,-65v-8,-9,3,-15,-6,-22v-6,8,-2,18,-15,11v-2,2,-4,3,-8,3v0,-7,-1,-20,3,-22v16,2,32,-10,49,-3v-1,8,11,1,9,11xm44,-171v0,2,1,6,-2,5xm42,-162v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm42,-151v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm37,-61v7,7,2,20,6,32v-13,6,7,32,-21,29v-3,-4,-10,-3,-15,-5v0,-23,-5,-56,8,-66v-1,0,-4,0,-6,-2r0,-150v4,1,5,-1,4,-5v8,0,15,6,25,7r2,157v-2,1,-2,2,-3,3xm80,-223v-1,-2,-4,-3,-4,0r4,0xm76,-192v1,2,2,3,2,-1xm111,-153v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm82,-177v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm84,-151v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm19,-90v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm11,-89v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm13,-84v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm22,-68v2,0,1,-2,0,-2v-2,1,-2,1,0,2xm38,-38v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm38,-32v3,0,0,-3,0,-1r0,1","w":120},"Q":{"d":"78,-242v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm121,-195v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm121,-157v2,0,3,3,0,4v-2,-1,-1,-3,0,-4xm44,-190v2,0,3,3,0,4v-2,-1,-3,-3,0,-4xm106,-30v-1,2,20,13,18,16v0,4,-6,21,-8,25v-26,5,-28,-20,-49,-13v-23,-5,2,-39,9,-46v-1,-56,20,-132,-17,-163r0,-24v29,-9,37,21,52,30v-5,12,10,44,-7,50v3,2,7,3,11,2v-9,5,0,11,-1,22r-3,0r4,31r-5,-4v0,8,-2,38,5,24v1,11,-7,7,-2,16v-5,9,3,25,-7,34xm123,-71v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm42,-148v1,1,1,1,0,2v-2,-1,-2,-1,0,-2xm48,-118v-2,4,-9,-1,-3,0r3,0xm48,-102v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm42,-106v-9,27,-6,65,13,77r0,24v-8,0,-17,0,-20,3v-16,-18,-36,-34,-24,-67v-9,-9,12,-7,6,-15r-10,2v2,-61,-18,-155,48,-153r0,31v-13,1,-25,29,-13,40v-2,10,-9,17,0,25v2,21,-13,21,-5,35xm42,-84v1,1,1,1,0,2v-2,-1,-2,-1,0,-2xm52,-62v0,1,0,2,-2,2v-2,0,-1,-4,0,-4v2,0,2,1,2,2xm104,-164v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm90,-166v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm99,-155v-1,0,-5,-4,-4,0r4,0xm110,-111v2,0,4,0,3,-2v-2,0,-4,0,-3,2xm93,-91r0,-4v-2,0,-2,1,-2,2v0,1,0,2,2,2xm19,-155v3,-1,3,-3,0,-5v-1,2,-2,3,0,5xm101,-66v2,-2,2,-4,0,-5v-2,2,-1,3,0,5xm37,-124v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm35,-84v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm24,-89v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm31,-73v2,-1,1,-4,0,-5v-2,1,-3,4,0,5","w":125},"R":{"d":"101,-222v2,2,1,4,0,5v-2,-1,-2,-4,0,-5xm116,-184v1,-1,4,-1,5,0v-2,2,-4,1,-5,0xm50,-193v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm47,-153v2,-2,4,0,1,1xm94,-86v10,14,7,43,18,56v-4,8,-4,11,7,16v-5,-1,-11,24,-16,9v-2,8,-33,7,-25,-4r-19,-86r-9,0v2,-1,4,-3,6,-5r-9,0r0,-28v5,6,13,-5,30,-5v-7,-6,2,-22,2,-31v0,-23,-11,-36,-32,-38r0,-26v11,-1,18,-2,23,-5r0,4v24,-1,27,9,25,23v4,1,1,-7,7,-5v0,4,-2,7,-5,9v13,-5,15,13,17,44v9,7,-5,6,-6,21v1,20,-36,32,-12,48xm103,-69v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm116,-46v2,0,3,3,0,4v-2,-1,-1,-3,0,-4xm35,-128v12,1,6,25,6,31v-1,-7,-12,-5,-20,-5v3,7,11,9,22,9v-3,7,1,20,3,28v-12,-1,-11,14,-5,21v1,11,-4,27,5,30v-6,11,-23,12,-39,14r3,-76v9,-4,2,-6,4,-10v-10,1,-4,-9,-4,-18r-3,-126v3,-2,7,-3,12,-3v-7,1,-10,7,-5,13v2,-2,3,-7,6,-8v0,13,8,5,18,6v1,-1,3,-4,5,-6r-2,93v-7,1,-2,6,-6,7xm49,-51v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm41,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm43,-51v0,2,0,2,-2,2xm12,-80v0,2,-4,3,-4,0v0,-2,4,-3,4,0xm90,-199v1,-1,4,-4,0,-3v-1,0,-2,1,-3,3r3,0xm105,-173v-3,0,-11,9,-10,11v5,0,9,-3,10,-11xm82,-160v1,0,1,-1,1,-2xm98,-135v3,-2,3,-3,0,-5v-1,2,-2,3,0,5xm103,-131v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm94,-131v1,-1,3,-2,0,-2r0,2xm96,-126v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm90,-131v2,0,1,-4,0,-4v-3,0,-3,4,0,4xm94,-115v2,-2,3,-4,0,-5v-3,1,-2,3,0,5xm34,-155v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm78,-113v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm38,-142v3,0,3,-4,0,-4v-2,0,-1,4,0,4xm20,-158v1,0,1,-1,1,-2xm30,-146v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm21,-148v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm12,-155v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm50,-115v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm92,-69r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm27,-128v3,-2,3,-4,0,-5v-2,2,-1,3,0,5xm25,-133v-3,-1,-9,2,-4,2xm78,-71v3,1,7,-3,3,-4r-5,-1v1,2,1,4,2,5xm12,-137v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm40,-111v0,-1,0,-2,-2,-2r0,4v2,0,2,-1,2,-2xm72,-71v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm74,-69v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm28,-114v1,-1,3,-1,1,-2v-1,1,-3,1,-1,2xm32,-111v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm81,-56v2,0,1,-3,0,-4v-3,1,-3,3,0,4xm30,-104v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm21,-113v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm14,-115v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm80,-51v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm21,-107v0,3,3,0,1,0r-1,0xm21,-93v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm96,0v3,0,2,-4,0,-5v-2,2,-1,4,0,5xm23,-64v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm31,-50v1,-1,1,-1,0,-2v-2,0,-1,2,0,2xm25,-53v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm25,-49v0,0,-2,-3,-2,0r2,0"},"S":{"d":"83,-238v0,1,-1,3,-1,1xm117,-203v-4,0,-5,-4,0,-3r0,3xm97,-226v-2,6,16,23,13,38v-2,11,-27,10,-28,11v-3,-7,-16,-27,-25,-29v2,-11,-7,-27,9,-27v7,0,18,2,31,7xm64,-153v0,-2,3,-1,4,-1v0,2,-3,2,-4,1xm113,-104v0,3,0,5,-3,4xm83,-122v12,4,22,23,24,39v17,13,9,51,-9,58v-5,2,-5,6,-3,10v-6,8,-26,25,-34,8v3,-6,-4,-8,1,-11v1,1,1,2,1,4r27,0v3,-5,-2,-9,-6,-8v-12,-2,-20,8,-23,-2v21,-22,31,-39,3,-67v3,0,2,-3,1,-5v-18,2,-60,-46,-57,-64v-5,-41,4,-73,45,-73r0,31v-35,18,11,74,33,78xm53,-38v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm34,-65v-2,17,41,47,19,65v-23,-8,-60,-22,-47,-60v11,-2,21,-4,28,-5xm40,-1v3,0,0,3,0,1r0,-1xm13,-15v2,0,1,3,0,4v-2,-1,-3,-3,0,-4xm113,-62v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm64,-97v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm75,0v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm48,-7v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm38,-10v1,1,2,2,2,-1","w":120},"T":{"d":"81,-199v1,0,1,3,0,4v-3,-1,-3,-3,0,-4xm69,-230v16,-1,30,0,42,-3v0,13,-1,27,-4,31r-102,0r0,-28v25,-5,36,0,60,0v1,-7,5,-8,4,0xm82,-155v2,0,3,4,0,4v-1,0,-1,-4,0,-4xm84,-122v0,2,-3,3,-3,0v0,-3,3,-2,3,0xm82,-102v3,1,2,3,0,5v-1,-2,-1,-3,0,-5xm71,-124v8,2,-6,17,3,20v-7,6,-1,24,-3,35v5,1,8,3,8,5r-8,0r0,64v-11,2,-20,-4,-28,0v-5,1,-5,-5,-5,-8r0,-187v8,-5,27,-4,33,0r0,71xm43,-228v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm38,-228v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm34,-228v2,-1,2,-2,1,-4v-4,-1,-4,3,-1,4xm23,-228v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm51,-82v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm45,0v3,-1,2,-4,0,-5v-2,1,-3,4,0,5","w":116},"U":{"d":"124,-155v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm115,-133v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm113,-233v1,25,-2,58,2,71v-8,33,8,85,-7,111v-9,-6,-32,8,-29,-15r3,-164v17,0,15,-2,31,-3xm50,-155v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm50,-124v1,0,4,4,0,4v-2,0,-1,-4,0,-4xm108,-44v-1,-1,-3,-2,0,-2r0,2xm44,-53v-9,10,1,14,13,27r0,25v-59,2,-50,-66,-49,-127v2,-2,4,-4,0,-5r0,-96v20,2,28,-9,36,-1v-5,4,-7,23,3,26r-7,0v-2,25,5,54,-1,73v4,13,0,23,3,34v-1,-1,-2,-2,-2,-3v-1,16,3,30,-1,41v0,4,2,7,5,6xm113,-40v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm50,-102v3,1,3,3,0,5v-1,-2,-2,-3,0,-5xm97,-40v2,2,3,3,0,4v-3,-1,-2,-2,0,-4xm93,-29v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm46,-66v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm62,-29v4,-1,20,-28,26,-14v2,7,-9,5,-13,9v-2,4,12,2,13,8v-5,-2,-14,4,-6,4r20,0v-1,12,-26,28,-40,20r0,-27xm90,-221v3,-1,3,-5,0,-5v-1,0,-2,4,0,5xm17,-217v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm13,-220v2,0,1,-3,0,-3v-2,0,-3,3,0,3xm101,-104v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm95,-100v2,-1,2,-3,0,-4v-2,1,-2,3,0,4xm110,-62v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm20,-118v2,-1,1,-2,0,-4v-3,2,-3,3,0,4xm28,-113v0,-2,-4,-3,-4,0v0,2,4,3,4,0xm11,-122r0,-4v-2,0,-2,1,-2,2v0,1,0,2,2,2xm84,-44v-2,0,-1,3,-1,4v2,0,2,-3,1,-4xm17,-80v2,-1,0,-3,0,-1r0,1xm13,-66v3,1,2,-3,2,-5v-3,-1,-2,3,-2,5xm26,-53v-1,-1,-2,-3,-2,0r2,0xm15,-58v5,-1,6,-4,0,-4r0,4xm15,-49v2,0,6,1,5,-2v-2,0,-6,-1,-5,2","w":123},"V":{"d":"124,-220v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm128,-208v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm124,-202v0,2,0,4,-2,3v0,-2,0,-4,2,-3xm119,-179v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm83,-30v5,6,7,16,1,25v-15,-1,-19,4,-27,6v7,-43,7,-106,23,-145v-2,-31,1,-51,11,-86r31,0v-6,19,-5,43,-9,64v9,11,-19,39,-6,51v-17,17,0,71,-24,85xm99,-60v2,-2,4,0,1,1xm55,-175v-8,26,11,54,9,83v1,9,-10,83,-13,87v-9,-17,-25,-108,-28,-145v1,0,2,-1,3,-1v-12,-6,-18,-61,-19,-79v12,1,29,-1,35,-2v-1,8,5,28,4,42v13,-2,0,6,5,17xm95,-49v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm93,-33v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm78,-1v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm72,-1v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm51,0v0,-4,2,0,2,0r-2,0xm95,-223v2,-1,3,-4,0,-5v-2,1,-1,4,0,5xm53,-153v0,-2,-3,-1,-4,-1v0,2,2,2,4,1xm49,-44v2,-2,1,-3,0,-5v-3,2,-3,4,0,5xm71,-22v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm73,-11v2,0,2,0,2,-2xm64,-13v4,1,6,-1,5,-5xm49,-29v2,0,1,-4,0,-4v-3,0,-3,4,0,4","w":131},"W":{"d":"116,-200v1,-2,2,-3,2,1xm28,-234v0,0,-2,5,-1,1xm49,-177v0,-2,3,-1,4,-1v0,2,-3,2,-4,1xm162,-104v-6,27,-15,54,-11,78v0,2,-3,9,-9,21v-5,-1,-9,3,-5,5r-19,0v-8,-3,-15,-89,-18,-92r-7,0v5,-10,3,-19,-2,-28v-13,11,-7,44,-15,62v7,4,-9,44,-9,49v2,-28,-13,-49,-9,-100v-6,-5,-7,2,-7,9v0,18,13,76,12,94v-15,0,-10,8,-25,6v-7,-80,-22,-152,-32,-230v10,0,16,-1,19,-3v-1,11,19,-5,11,16v0,-1,3,-3,6,-3v-2,13,-4,14,2,18v0,25,3,40,5,58v29,-8,15,-23,29,-86v16,-1,31,-1,34,13r-5,0v3,13,1,30,13,34r-7,0v9,14,-1,33,15,37v-14,4,0,7,-6,22v4,1,0,17,9,9r15,-115v13,-4,26,3,31,-5v1,19,4,42,-8,51v3,6,0,10,-3,14v2,9,9,14,0,22v8,1,-13,20,-4,44xm157,-44v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm86,-82v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm160,-229v3,0,0,-3,0,-1r0,1xm173,-202v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm160,-173v1,1,2,3,2,0r-2,0xm153,-168v-1,-2,-2,-4,-2,0r2,0xm142,-166v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm157,-142v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm89,-204v2,1,6,-2,2,-2xm89,-193v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm140,-137v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm151,-111v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm86,-170r0,-6v-2,0,-3,1,-4,3v1,2,2,3,4,3xm25,-226v1,1,2,3,2,0r-2,0xm111,-137v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm127,-105v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm93,-137v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm128,-97v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm84,-140v0,2,3,0,1,0r-1,0xm90,-130v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm88,-124v0,-1,0,-2,-2,-2r0,4v2,0,2,-1,2,-2xm38,-168v1,-2,2,-3,0,-5v-2,1,-3,3,0,5xm69,-137v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm146,-51v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm97,-93v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm54,-144v-1,9,-6,21,-1,29v7,0,10,-10,10,-29r-9,0xm45,-140v1,1,2,1,3,0r-3,0xm146,-24v3,1,2,-3,2,-5v-3,-1,-2,3,-2,5xm27,-140v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm111,-56v1,2,2,4,2,0r-2,0xm111,-44v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm113,-38v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm118,-33v1,-2,2,-3,0,-5v-3,2,-3,3,0,5xm115,-20v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm118,-15v1,-2,2,-3,0,-5v-3,1,-3,3,0,5xm51,-51v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm36,-46v1,-2,2,-3,0,-5v-3,1,-3,3,0,5xm56,-17v3,0,0,-3,0,-1r0,1xm46,-22v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm46,0v3,-1,3,-4,0,-5v-2,2,-1,4,0,5xm41,0v4,0,3,-3,1,-5v-2,2,-2,3,-1,5xm58,-133v2,2,1,3,0,5v-2,-2,-3,-4,0,-5","w":185},"X":{"d":"121,-211v1,1,2,4,0,5v-2,-1,-1,-4,0,-5xm49,-238v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm97,-158v4,2,5,7,-2,7v-4,11,-4,18,-12,20v-22,-33,-12,-71,5,-97v16,-2,28,-2,36,-2v-3,18,-20,49,-27,72xm92,-122v-1,1,-3,1,-4,0v2,-2,2,-1,4,0xm34,-158v3,2,3,4,0,5v-2,-2,-1,-3,0,-5xm119,-42v-9,18,24,40,-9,43r0,-5r-18,0v-13,-13,-10,-59,-33,-56v-6,22,-16,49,-22,58v-5,-6,-15,6,-23,1r7,0v-1,-7,-11,0,-16,-1v6,-25,39,-93,39,-118v0,-12,-12,-26,-5,-42r-7,2v-16,-41,-24,-64,-24,-70v19,0,33,-12,39,9v2,12,12,14,5,17v12,39,20,79,40,104v3,20,13,34,22,60v2,0,3,-1,5,-2xm31,-1v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm10,-2v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm63,-64v4,0,7,-3,2,-5v-4,0,-5,4,-2,5xm101,-22v3,-1,5,-5,0,-4r0,4xm57,-60v2,0,1,-4,0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm34,-51v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm32,-40v2,0,2,0,2,-2xm34,-31v2,0,4,0,3,-2v-2,0,-4,0,-3,2xm21,-40v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm21,-26v6,-3,7,-6,0,-5r0,5","w":130},"Y":{"d":"122,-220v-20,34,-26,78,-41,116v-4,-7,-9,-22,-16,-44v5,-19,12,-46,20,-82r36,0v2,2,-10,12,1,10xm25,-232v-3,0,-1,-1,-1,-1xm63,-179v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm59,-159v0,32,31,64,20,104v1,15,-3,35,2,46v-10,9,-7,7,-20,9v3,-1,11,-5,4,-5v-10,0,-17,8,-22,3v7,-27,1,-66,3,-98v-13,-34,-43,-124,-40,-130v16,0,17,-2,32,-3v1,9,3,13,8,13v0,12,3,45,13,43v-3,8,-1,14,3,18r-3,0xm90,-33v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm85,-19v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm44,-163v2,-1,2,-1,0,-2v-1,1,-1,1,0,2xm37,-166v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm30,-159v2,-1,3,-3,0,-5v-2,2,-2,4,0,5","w":126},"Z":{"d":"96,-230v2,0,1,4,0,4v-2,0,-1,-4,0,-4xm91,-228v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm87,-228v-2,2,-8,9,-6,5v1,-2,3,-4,-1,-3v-2,0,-4,1,-6,3v0,-6,7,-5,13,-5xm87,-219v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm94,-210v-4,0,-6,-3,0,-2r0,2xm69,-223v0,-2,2,-4,2,-1xm89,-208v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm107,-223v-6,18,-10,46,-27,52v-1,-9,15,-12,5,-24v5,0,8,-2,11,-5r-7,0v8,-10,7,-15,18,-23xm76,-212v0,2,1,5,-2,4xm71,-212v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm63,-219v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm83,-201v-2,0,-7,4,-7,0r7,0xm67,-204v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm41,-217v4,-3,18,-20,22,-4v-4,0,-6,-1,-9,2v2,11,10,7,13,9r-4,9v-3,-3,-5,-9,-12,-7v0,-3,-1,-5,-1,-9r-9,0xm77,-197v0,3,-4,8,-10,9v-1,-7,1,-9,10,-9xm83,-186v-3,0,-8,3,-9,1v1,-5,4,-3,9,-1xm52,-204v1,0,1,1,1,2xm91,-164v2,1,2,2,0,3v-1,-1,-1,-2,0,-3xm38,-210v8,-2,3,5,3,9v-7,-5,-11,1,-24,0v0,-2,1,-7,-1,-7v-5,-1,-4,4,-6,7r0,-28v14,2,18,-4,31,-5r-7,4v5,2,7,5,7,9v-6,-1,-2,7,-3,11xm61,-171v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm81,-139v0,-2,3,0,1,0r-1,0xm74,-155v13,3,11,-16,17,-24v9,12,-15,24,-2,33v-9,3,-19,8,-10,13v-8,2,-9,19,-5,25v-8,3,-7,5,-9,17v-14,18,-12,36,-24,55r-36,0v2,-13,14,-7,9,-19v8,-24,21,-67,38,-87v-2,-1,-3,-2,-3,-4v12,4,3,-10,12,-11v-3,0,-6,0,-8,2r0,-9v4,6,13,1,12,-8v-1,-3,-4,-6,-2,-9v4,0,8,4,5,10v4,0,5,1,8,-2v-4,7,4,9,-2,18xm56,-62v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm47,-38v2,1,3,3,0,5v-1,-2,-2,-3,0,-5xm96,0v-29,2,-54,-13,-71,0r-20,0r0,-31v11,-2,55,4,84,-5v-1,6,8,2,12,3r1,-5v9,4,2,21,3,33v-6,-1,-14,1,-9,5xm36,-2v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm3,-2v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm56,-221v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm34,-221v2,-1,5,-6,0,-5r0,5xm30,-223v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm32,-210v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm25,-212v4,0,5,-3,5,-7v-3,2,-4,4,-5,7xm17,-223v1,1,1,3,1,0r-1,0xm30,-204v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm71,-159v3,-2,3,-3,0,-5v-1,2,-2,3,0,5xm18,-212v3,-2,3,-4,0,-5v-1,2,-1,3,0,5xm67,-161v2,-1,3,-4,0,-5v-2,1,-2,4,0,5xm18,-206v2,0,6,1,5,-2xm69,-155v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm71,-148v2,0,4,0,3,-3xm65,-153v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm70,-140v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm63,-139v1,-1,2,-4,0,-5v-3,1,-2,4,0,5xm58,-138v1,1,0,-6,0,-6v-1,2,-1,4,0,6xm50,-131r0,-4v-2,0,-1,4,0,4xm63,-115v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm52,-120v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm47,-123v-1,2,3,-3,3,-3v-1,1,-3,1,-3,3xm27,-73v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm25,-53v2,0,2,0,2,-2xm18,-53v4,1,3,-2,3,-5xm21,-46v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm7,-22v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm10,-2v3,0,8,2,7,-3v-3,0,-5,1,-7,3","w":112},"[":{"d":"67,-245v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm67,-228v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm44,-244v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm37,-142v1,2,2,3,0,5v-2,-2,-1,-3,0,-5xm42,-111v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm24,9v6,-16,9,-30,-4,-36v0,5,-8,20,-13,21r0,-229r54,-5v-7,13,5,40,-28,37v-1,8,1,9,9,12v-9,3,-11,16,-8,29r5,0v-13,12,2,42,-6,54v4,18,-12,51,12,50v-8,6,-17,7,-10,30r4,0v-5,2,-6,13,0,13r21,0v-4,9,2,23,-6,15v-4,10,-9,-7,-19,4v-5,3,-8,5,-11,5xm45,-93v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm58,-19v-3,1,-18,1,-8,-1v2,0,8,-1,8,1xm12,2v-2,0,-6,4,-5,0r5,0xm54,-235v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm50,-235v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm56,-216v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm12,-190v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm12,-57v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm11,-42v0,-1,0,-2,-2,-2r0,4v2,0,2,-1,2,-2xm16,-27v3,-1,2,-3,0,-5v-2,2,-3,4,0,5","w":72},"\\":{"d":"51,-229r147,227v-10,0,-23,-1,-40,-4v-3,0,-28,-49,-39,-46v2,-1,4,-1,3,-4v-10,-2,-6,-4,-3,-7v-10,-22,-28,-32,-41,-62v-8,-22,-22,-12,-20,-33v-9,-2,-15,-6,-7,-9v-9,-14,-14,-32,-33,-36v14,-4,-8,-21,-7,-26r40,0xm89,-102v-2,2,-4,1,-6,0v0,-2,1,-2,3,-2v2,0,3,0,3,2xm107,-74v0,1,-1,2,-3,2v-2,0,-3,-1,-3,-2v0,-2,1,-2,3,-2v2,0,3,0,3,2xm132,-38v-1,2,-5,3,-5,0v0,-1,1,-2,2,-2v2,0,3,1,3,2xm64,-148v0,-2,-1,-3,-2,-3v-2,0,-3,1,-3,3v0,1,1,2,3,2v1,0,2,-1,2,-2xm166,-30v2,0,3,-4,0,-4v-3,0,-4,1,-4,2v1,1,2,2,4,2","w":209},"]":{"d":"65,-246v0,2,-2,1,-3,1v0,-2,2,-1,3,-1xm63,-231v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm63,-112v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm62,-97v2,0,4,0,3,2xm14,1v14,8,15,-8,8,-13v0,-9,13,-14,13,-23r-4,0r-3,-171v0,-6,-7,-9,-21,-9r0,-24v14,-1,34,3,43,-3v-1,5,5,2,8,3r1,43r7,0v0,2,-3,4,-8,4v2,12,3,24,0,36r4,-2v-9,12,3,38,-6,49v2,22,3,64,2,87r4,-2v-12,17,-7,17,-3,33v-17,3,-22,-1,-45,-1v-3,-2,-3,-5,0,-7xm60,-69v2,2,3,3,0,4v-2,-1,-1,-3,0,-4xm65,-62v1,3,-3,2,-5,2v-1,-3,3,-2,5,-2xm7,-20v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm9,-14v3,1,3,3,0,5v-1,-2,-1,-3,0,-5xm50,-206v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm33,-206v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm50,-128v1,1,2,3,2,0r-2,0xm56,-118v3,0,2,-3,0,-4v-2,2,-1,3,0,4xm50,-118v2,-1,1,-2,0,-4v-2,1,-3,4,0,4xm43,-120v3,-1,2,-2,0,-4v-1,1,-2,3,0,4xm39,-118v3,0,2,-3,0,-4v-2,2,-1,3,0,4xm33,-120v3,1,2,-4,2,-6xm37,-113v1,2,5,3,4,0r-4,0xm48,-101v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm46,-94v3,0,5,0,4,-3xm39,-92v1,-2,7,-6,0,-5r0,5xm48,-6v0,-6,-3,-8,-9,-8v-7,1,-10,12,1,13v5,-1,8,-3,8,-5","w":72},"^":{"d":"52,-272v1,0,1,0,1,1v-1,0,-1,0,-1,-1xm65,-256r0,2v-1,-1,-1,-1,0,-2xm61,-256r0,2v-1,-1,-1,-1,0,-2xm72,-240v-1,2,-3,0,-1,0r1,0xm5,-232v7,-7,17,-60,41,-43v3,0,23,40,24,43v-24,8,-22,-25,-33,-31v-9,14,-7,35,-32,31xm37,-277r1,0r-1,0","w":73},"_":{"d":"5,-23v12,1,20,-4,31,0v11,-2,34,1,50,0v1,2,2,5,1,11v6,0,-1,6,0,10v-20,2,-46,-1,-61,2r-21,-2r0,-21xm31,-21v1,-2,2,-2,-1,-3v-2,1,0,2,1,3","w":93},"`":{"d":"60,-249v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm39,-230v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm32,-251v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm38,-232v2,1,4,-2,2,-2v-1,0,-2,0,-2,2","w":75},"a":{"d":"86,-235v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm143,-87v1,3,-3,2,-5,2v-1,-3,3,-2,5,-2xm132,-83v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm69,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm71,-131v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm132,-61v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm128,-56v2,1,3,2,-1,2xm125,-87v-19,5,3,26,-4,39v8,7,0,30,12,34v-4,0,-7,4,-8,10v-12,-2,-37,7,-32,-10v0,-11,-5,-17,-15,-19r0,-4v-14,0,-15,7,-19,-4v-24,1,-7,55,-45,39v-4,3,-7,3,-7,-3v-1,-24,24,-74,5,-93v3,-2,5,-10,5,-24v10,0,14,-8,7,-11v-6,0,-12,2,-16,5v-5,-4,-12,-12,-5,-16v8,2,16,9,24,5r-7,0v21,-17,15,-64,27,-90v4,0,6,1,9,2v4,34,11,74,6,105v0,-1,-1,-4,-3,-4v-1,3,6,7,6,12v-9,3,-17,24,-8,25v9,-4,18,-10,21,2v4,-21,-19,-67,-3,-83v-16,0,-14,-47,-14,-60v8,-3,11,4,25,1v3,6,10,13,6,22v3,1,6,2,9,5v-11,-2,-2,7,-6,13v3,10,0,36,17,38v-21,2,3,15,-4,27v3,8,7,11,4,21v1,4,15,7,13,16xm69,-100r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm12,-120v0,2,0,2,-2,2xm10,-104v-1,5,-9,1,-9,8v-1,-4,-6,-2,-11,-2v1,-6,12,-7,20,-6xm69,-31v1,1,4,4,0,3r0,-3xm79,-150v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm120,-88v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm64,-89v4,-2,2,-3,-1,-2v0,1,0,1,1,2xm66,-89v0,1,-4,5,0,4v2,-2,4,-7,0,-4xm10,-135v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm75,-50v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm53,-50v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2","w":137},"b":{"d":"126,-183v-1,1,-2,3,-2,0r2,0xm55,-189v0,4,-6,1,-9,2v0,-4,6,-1,9,-2xm2,-238v4,2,1,9,-4,9v0,-4,1,-6,4,-9xm46,-166v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm55,-156v2,8,-6,6,-10,8v0,-5,3,-8,10,-8xm-4,-200v2,0,1,3,0,4v-2,-1,-3,-3,0,-4xm-24,-212v0,2,-3,1,-4,1v0,-2,3,-2,4,-1xm-33,-214v3,2,3,4,0,5v-2,-2,-1,-3,0,-5xm0,-22v-2,-15,-11,-26,1,-37v2,-11,-7,-14,-18,-14v1,-6,-4,-7,0,-12v-3,12,11,13,19,9v3,-8,-19,-10,-18,-16v4,-2,6,6,8,3v-2,-15,-14,0,-21,1v1,-13,22,-13,38,-12v7,-6,-12,-9,2,-8v-1,-27,3,-57,-4,-79v-2,4,-5,7,-9,11v-7,-14,10,-22,4,-34r-15,0v4,-2,20,-2,16,-13v0,-20,23,2,25,-12r15,8r0,186v6,6,15,7,15,-6v12,13,28,-1,27,-19v1,-17,-8,-43,-24,-34v-4,-1,-7,-10,-15,-4r0,-40v2,2,4,9,10,9v29,0,36,-62,4,-63r-14,4r0,-33v5,0,21,-1,30,-4v45,13,53,81,20,109v12,11,30,37,22,46v8,7,-3,23,0,36r8,0v-3,1,-15,12,-14,18r-3,0v1,2,5,3,11,2v-19,7,-68,38,-76,2r-5,14v-9,-1,-16,2,-21,4v-6,3,-6,-18,-9,-18v-7,-1,-18,2,-24,-1v3,-2,8,-3,15,-3xm4,-146v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm46,-89r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm55,-70v0,6,-7,6,-8,0r8,0xm70,-46v0,-4,2,0,2,0r-2,0xm55,-52v0,4,-6,1,-9,2v0,-4,6,-1,9,-2xm54,-39v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm-5,-60v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm-6,-26v1,2,-1,2,-3,2xm5,-191v2,-1,2,-1,0,-2v-1,1,-1,1,0,2xm60,-119v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm60,-38v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm7,-85v-1,-1,-4,-1,-5,0v1,1,3,1,5,0xm9,-79v3,-2,2,-4,-2,-3xm46,-31v0,-2,-3,-6,-2,0r2,0xm2,-70v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm9,-59r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm4,-39v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm9,-38v-3,0,-5,4,-5,11v4,0,5,-4,5,-11","w":129},"c":{"d":"82,-237v1,2,-1,2,-3,2v-1,-2,1,-2,3,-2xm114,-205v0,14,-2,25,-2,47v-11,-1,-21,9,-24,6v2,-4,-14,-29,-15,-44v-14,-2,-11,-19,-11,-35v8,0,32,6,37,7v5,7,6,17,15,19xm32,-231v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm10,-222v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm45,-174v2,0,1,4,0,4v-3,0,-3,-4,0,-4xm5,-211v3,4,0,11,-6,13xm116,-85v3,1,3,3,0,4v-2,0,-1,-3,0,-4xm-14,-211v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm48,-147v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm112,-78v0,-1,4,-2,4,0r-4,0xm-5,-196v1,1,3,2,0,2r0,-2xm109,-83v1,7,-7,9,-10,5v2,-3,5,-5,10,-5xm110,-73v3,0,2,5,0,1r0,-1xm-12,-192v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm-18,-185v1,0,1,4,0,4v-3,0,-3,-4,0,-4xm-21,-185v-1,3,-6,6,-8,3v-1,-3,4,-3,8,-3xm94,-81v-2,11,17,12,17,19v-4,1,-11,-2,-10,3r11,0v1,12,-6,13,-2,26v0,8,-11,11,-12,0v-2,-4,-8,-4,-12,-8v8,-6,0,-16,6,-24v-2,1,-6,2,-10,2r0,-18r12,0xm58,-198v-1,6,15,9,13,15r-29,0v0,23,5,34,0,52v1,-3,3,-5,6,-5v-11,19,1,50,-6,71v4,2,3,11,0,14v-1,3,17,17,16,20v-2,11,7,36,-10,29v-17,4,-41,-28,-19,-29v-1,-4,-2,-4,-7,-3v-23,-3,-6,-53,-11,-84v-1,-33,1,-49,-8,-67v-5,2,-3,-3,-6,-4v14,-15,38,-47,61,-42r0,33xm82,-57v1,2,2,3,0,5v-2,-1,-3,-3,0,-5xm86,-48v1,3,-2,2,-4,2v0,-2,2,-2,4,-2xm95,-31v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm99,-22v0,2,1,6,-2,5v0,-2,0,-4,2,-5xm88,-20v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm74,-26v-4,7,16,10,19,14v-5,11,-21,17,-31,8v2,-13,-7,-30,13,-27v4,1,15,2,9,7xm15,-29v1,-2,2,-3,2,1xm106,-170v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm56,-189v-1,-1,-4,-5,-3,0r3,0xm59,-184v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm53,-183v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm86,-67v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm90,-54v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm99,-39v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm95,-41v-1,-1,-4,-4,-3,0r3,0xm83,-10v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm27,-24v2,0,3,-4,0,-4v-2,0,-1,4,0,4","w":121},"d":{"d":"45,-240v-9,0,-13,-3,-13,-10v7,2,11,5,13,10xm21,-243v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm59,-187v2,1,8,-2,7,2v-3,1,-8,4,-7,-2xm50,-174v-2,-1,-5,-6,0,-5r0,5xm124,-52v0,1,-1,2,-2,2v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2v1,0,2,1,2,2xm44,-221v3,-8,13,-12,3,-21r14,-3v0,6,-7,7,2,10r11,-7v-1,1,-6,10,-2,13v9,-10,24,15,32,5v-1,7,13,22,17,40v-17,18,1,68,-8,96v10,20,-13,58,10,62v-5,1,-2,7,-8,11v0,-5,-3,-7,-6,-7v-7,-2,-21,21,-24,9v-13,8,-34,-4,-57,2v2,1,3,2,3,4v-1,5,-12,10,-18,5v5,-19,-13,-53,14,-51v9,0,15,8,16,25v1,-8,7,-6,14,-9r-1,1v7,8,17,-7,25,-9r0,-129v-8,-8,-9,-24,-29,-22v-5,-1,-9,-3,-9,-7r0,83v-7,2,-6,9,-3,16v-6,9,-7,14,-7,36v-7,7,-13,11,-20,14v2,-22,-2,-44,-1,-77v-12,-1,-14,-4,-14,-19r-22,2v1,-9,15,-7,25,-7v0,-6,9,-11,-7,-13v5,-1,24,-5,12,-13v-11,4,-24,1,-23,-12v8,1,20,8,26,4v-3,-13,6,-11,4,-40v13,-1,28,-6,31,8xm46,-126r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm118,-54r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm131,-26v0,-2,3,-1,4,-1v0,2,-3,2,-4,1xm126,-22v3,1,3,3,0,4v-2,0,-1,-3,0,-4xm46,-74v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm54,-63v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm68,-11v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm61,-4v-2,0,-4,-1,-7,-5v4,0,9,-1,7,5xm50,-7v-1,-1,-3,-2,0,-2r0,2xm37,-11v2,1,1,3,0,4v-2,0,-1,-3,0,-4xm110,-121v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm-4,-183r0,-4v-2,1,-2,3,0,4xm10,-145v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm85,-57v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm17,-87v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm18,-24v1,-1,6,-2,2,-2v-1,0,-2,1,-2,2xm26,-4v3,-1,2,-3,0,-5v-2,2,-3,4,0,5","w":125},"e":{"d":"110,-233v-2,-1,-5,-6,0,-5r0,5xm140,-149v0,1,-1,3,-1,1xm45,-231v14,3,44,1,57,-1v0,14,0,18,-5,34r-54,1xm132,-157v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm47,-192v-1,1,-2,3,-2,0r2,0xm51,-181v9,3,3,11,-2,15r-2,0v1,-3,3,-8,4,-15xm54,-163v0,3,-1,6,-3,8v1,-3,-2,-9,3,-8xm41,-164v1,-2,2,-3,2,1xm51,-153v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm45,-155v2,1,2,3,0,5r0,-5xm41,-145v1,-1,2,-2,2,1xm-3,-179v1,1,2,3,0,4v-3,0,-2,-3,0,-4xm-12,-170v-4,-3,-9,-1,-14,0v0,-6,11,-15,19,-14v-2,5,-7,9,-5,14xm-7,-170v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm-38,-166v10,13,52,1,42,-17v8,-10,9,-12,7,-44v14,-1,23,-2,27,-2r0,53v-2,0,-3,0,-4,1v9,6,3,28,5,42v8,-8,29,-3,44,-4v2,6,1,39,-5,35v-12,-1,-23,-8,-34,-2r0,-20r-5,2r0,118v-5,10,-15,-6,-25,2v-4,-6,-6,-16,-4,-25v0,-13,-16,-31,-6,-45v-5,2,-13,14,-9,-4v5,3,8,0,15,0v-2,-20,5,-46,-5,-59v9,-6,-11,-9,-9,-20v-4,2,-12,1,-17,0v0,7,-12,4,-19,2v-1,4,-2,6,-5,6v0,-12,2,-18,7,-19xm43,-98r0,39v-3,-3,-3,-36,0,-39xm47,-54v-1,1,-2,3,-2,0r2,0xm101,-37v-1,11,0,25,-6,37v-21,5,-40,-11,-50,0r-2,-39v14,7,39,1,58,2xm4,-87r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm-3,-83v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm-15,-85v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm-18,-83v1,1,1,3,0,4v-3,0,-3,-3,0,-4xm-10,-63v-3,-2,-2,-6,-2,-11xm-18,-72v-2,-1,-4,-2,0,-2r0,2xm-17,-50v9,-1,7,-8,12,-11v2,16,-6,20,-14,27v1,-6,1,-6,2,-16xm6,-39v0,16,-3,19,-7,8v0,-5,2,-8,7,-8xm-7,-41r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm-5,-18v1,0,1,0,1,1xm-14,-28v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm-14,-20v3,0,5,2,3,4v0,0,-1,-1,-3,-4xm6,-162v-3,0,-4,2,-5,5v4,-1,5,-2,5,-5xm8,-54v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm10,-48v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm5,-48v3,-1,3,-3,0,-4v-1,0,-1,3,0,4","w":110},"f":{"d":"43,-172v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm43,-163v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm47,-155v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm-2,-175v2,3,-4,12,-5,6v0,-4,1,-6,5,-6xm44,-228v11,0,54,-13,54,12v0,9,-1,15,-3,18v-18,2,-43,-5,-54,4v-5,30,-1,53,-1,85r4,0r0,-24v2,-2,34,-5,41,-4v-1,9,-2,16,-5,19r5,0v1,17,-17,8,-27,16v-3,-2,-4,-5,-8,-5v-20,19,-9,64,-9,94v-1,22,-23,2,-31,13v-9,-35,7,-97,-11,-128v7,14,-13,16,-6,4v-3,-14,12,-8,5,-23r-16,0v24,3,10,-21,26,-27r0,-52v14,-6,18,-1,32,-6r0,34v8,-3,2,-20,4,-30xm-9,-137v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm-33,-148v0,-2,3,-1,4,-1v0,2,-3,2,-4,1xm43,-26v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm73,-226v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm50,-126v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm4,-144v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm19,-124v2,-1,3,-3,0,-4v-2,0,-1,3,0,4","w":102},"g":{"d":"92,-236v-1,1,-2,3,-2,0r2,0xm112,-202v1,1,4,4,0,3r0,-3xm123,-191v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm162,-128v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm79,-232v18,6,32,27,35,48v2,15,-3,45,-24,32v-4,-2,-7,-4,-8,-6v-2,-19,-9,-34,-22,-46r0,-26r15,0v2,-5,8,-11,7,-4v-1,1,-2,1,-3,2xm160,-121v6,-1,2,8,2,10r-4,1xm117,-13v-2,3,-5,11,-13,10v-3,2,-14,-14,-16,-14v-4,0,-13,17,-19,13v0,2,1,5,-1,5v-7,0,-11,-4,-11,-12v1,15,-10,7,-21,12v-2,-1,-4,-7,-8,-3v5,9,-10,12,-9,21v-7,-1,2,-15,-5,-16v-2,16,-16,9,-9,0v0,-3,-1,-6,-2,-8v10,-1,12,-13,4,-15r-12,1v4,-5,25,0,15,-19r-5,0v0,-4,2,-7,5,-9r0,-142v-1,-22,24,-42,46,-41r0,28v-6,9,-19,19,-16,44v12,3,-4,15,0,22r3,-5v4,3,13,10,8,11v-4,0,-9,-4,-11,0v3,10,-4,37,3,49v-11,20,12,46,15,60v10,-14,32,-39,16,-63v-9,4,-15,-12,-23,-17v0,-5,10,-16,13,-18v-4,-6,-15,-17,7,-15v0,2,-2,5,-5,4v-1,11,3,3,9,1v4,-2,7,-3,9,-3v-3,5,-24,13,-13,20v3,-3,18,-19,17,-7v6,3,10,2,18,2r0,-7v9,-1,10,18,8,29v3,6,31,18,7,26v0,-5,-5,-3,-11,-4v6,10,2,36,2,46r-8,0v0,2,14,11,13,14xm49,-112v-1,-1,-3,-2,0,-2r0,2xm75,-75v-5,0,-7,-4,0,-4r0,4xm69,-75r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm-17,-21v1,4,-5,1,-8,2v3,-1,6,-2,8,-2xm34,-178v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm123,-73v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm101,-54v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm33,-109v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm62,-14v2,-1,2,-4,0,-5v-2,1,-3,4,0,5"},"h":{"d":"124,-180v-5,0,-5,-4,0,-3r0,3xm113,-104v10,16,-5,47,12,60v-12,0,-11,23,-4,30v-6,-3,-7,17,-21,14v-12,0,-18,-1,-20,-4r0,-98v-6,-8,-8,4,-17,-2v-11,6,-21,5,-13,21v-9,5,2,20,-7,23v9,12,-7,37,7,43v2,6,-10,3,-9,13v-10,1,-24,-3,-28,4v-6,-29,0,-71,-2,-104v-17,-14,-29,-24,-11,-35v-3,10,5,15,12,11r0,-101v11,2,37,-7,33,8v6,17,-6,21,5,32v-3,7,-13,28,-2,33v3,2,4,3,4,5v-6,0,-9,2,-9,6v0,5,6,8,19,8v14,0,21,-3,21,-9r0,-83v10,-3,43,-5,32,9v2,21,-7,35,3,50v-12,14,16,17,-3,24v10,9,-10,26,3,32v-4,5,-5,8,-5,10xm63,-95v1,-1,2,2,2,3v-1,0,-2,-1,-2,-3xm6,-139v0,-2,3,0,1,0r-1,0xm4,-144v2,1,3,4,0,5v-1,-1,-2,-3,0,-5xm54,-92v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm52,-52v0,1,-1,2,-2,2v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2v1,0,2,1,2,2xm-35,-111v0,-12,11,-23,25,-23v-1,21,-15,13,-25,23xm-23,-116v0,0,-4,8,-3,2v1,-1,2,-2,3,-2xm105,-136v1,1,2,2,2,-1xm104,-124v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm43,-131v2,0,4,0,3,-2v-2,0,-4,0,-3,2xm43,-102v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm6,-122v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm-1,-123v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm-2,-118r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm19,-33v2,0,4,0,3,-2","w":125},"i":{"d":"47,-152v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm41,-39v6,17,-1,53,-22,34v-5,0,-8,2,-9,5r0,-227v13,4,25,-8,31,-1r0,189xm13,-216v-3,1,5,10,4,5v-1,-1,-1,-4,-4,-5","w":50},"j":{"d":"63,-96v9,26,-9,65,7,80v-6,12,-30,-7,-30,18v-3,10,-4,16,-5,17r0,-20v-12,-6,-15,9,-27,-1v1,-5,-3,-10,-8,-16v6,-2,7,-3,7,-9v-2,1,-11,10,-16,9v2,-1,15,-23,20,-18v20,-2,20,-21,21,-48r3,-145r30,0r2,113v-8,1,2,12,-4,20xm-11,-40v2,2,3,3,0,4v-2,-1,-1,-3,0,-4xm-15,-14v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm54,-209v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm59,-172v1,-2,2,-3,0,-5v-2,1,-3,3,0,5xm37,-187v2,-2,1,-3,0,-5v-1,2,-2,3,0,5xm45,-159v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm59,-144v1,1,2,3,2,0r-2,0xm52,-135v-1,-2,-2,-4,-2,0r2,0xm39,-142v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm43,-133v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm43,-123v-1,3,4,11,5,7v0,-5,-2,-7,-5,-7xm37,-103r0,-4r0,4xm50,-77v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm59,-16v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm63,-14v-1,-1,-2,-3,-2,0r2,0xm56,-12v3,-1,3,-2,0,-4v-2,2,-1,3,0,4","w":77},"k":{"d":"94,-171v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm123,-129v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm-12,-203v1,5,-6,2,-9,3v2,-2,5,-2,9,-3xm64,-87v-15,-5,-31,24,-12,31v-3,7,-14,36,0,42v-8,3,-24,20,-38,12v-1,2,-3,3,-4,3r0,-44v-13,-7,-22,-12,-27,-25v-3,4,-11,18,-15,16v0,-1,5,-6,0,-5v-5,0,-3,7,-8,7v-1,-22,22,-17,33,-29v-2,6,3,15,8,11r-2,5v4,-5,8,0,11,2v-2,-12,6,-31,-14,-26v-6,-1,-13,1,-13,-5v-5,0,-9,-1,-10,-4v10,2,14,-12,20,-13v-4,0,-9,-22,-6,-26v7,-1,10,4,13,7v11,-5,11,-21,10,-38v-1,1,-6,12,-7,9v2,-15,9,-27,6,-43r-10,0v2,-2,18,-8,9,-20v-2,-17,21,-2,25,-14v2,2,3,8,11,7v4,7,2,18,1,27v4,-4,6,-7,11,-7v-2,6,-9,10,-13,15v1,11,-4,26,5,31v9,-4,30,-54,34,-67v15,2,21,-4,37,-3v-6,35,-41,51,-33,92v6,5,14,-3,20,0r-5,4v6,-1,15,-2,14,5v-10,-2,-21,4,-5,8v5,3,8,5,9,7v-27,0,-26,19,-15,32v0,28,14,45,17,72v1,9,-16,14,-22,9v5,-1,5,-3,0,-5v-6,6,-13,7,-15,-9v-7,-31,-13,-43,-20,-71xm121,-26v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm130,-13v-1,-1,-3,-2,0,-2r0,2xm62,-81v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm-18,-150v1,0,1,4,0,4v-3,0,-3,-4,0,-4xm-21,-133v0,2,0,2,-2,2xm-14,-119v1,1,1,1,0,2v-2,-1,-2,-1,0,-2xm58,-34v0,-1,2,3,2,3v-2,-1,-2,-2,-2,-3xm-17,-114v-2,6,-9,5,-15,3v4,-4,5,-5,15,-3xm0,-82v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm-17,-104v0,7,-7,4,-10,0r10,0xm49,-33v3,1,2,3,0,5v-2,-2,-3,-4,0,-5xm-30,-101v0,0,-1,5,-2,2v0,-1,1,-2,2,-2xm-36,-70v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm45,-157v1,1,2,3,2,0r-2,0xm45,-148v2,-1,2,-1,1,-3xm0,-99v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm0,-93v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm-10,-100v2,-1,4,-2,0,-2r0,2xm-5,-65v0,0,-8,3,-2,2v0,-1,1,-2,2,-2","w":121},"l":{"d":"45,-200v-5,1,-3,-4,-3,-7v2,0,3,3,3,7xm57,-192v10,4,2,18,-4,14v0,0,1,-5,4,-14xm14,-229v-1,3,2,9,-2,9v1,-3,-2,-9,2,-9xm31,-205v2,2,2,4,0,5v-2,-2,-1,-3,0,-5xm60,-174r-3,8v1,-3,-2,-9,3,-8xm44,-181v3,1,2,3,0,5v-1,-2,-2,-3,0,-5xm-1,-181r0,2v-1,-1,-1,-1,0,-2xm-22,-180v1,-9,9,-16,21,-14v-2,3,-5,7,-5,13v-5,-4,-11,0,-16,1xm109,-42v1,4,-2,7,-4,3v1,-2,2,-3,4,-3xm38,-120v2,12,8,24,5,38v2,-1,4,-1,6,1v-6,1,-5,9,-5,16v15,-2,-6,33,22,28v2,0,13,1,31,4v12,5,-3,31,-5,33v-24,-1,-43,2,-59,-5v-9,6,-14,-4,-18,6r-3,0r0,-37v8,-1,22,3,24,-4r-24,0v2,-22,-5,-48,6,-62v-9,0,-7,-20,-4,-27r4,1v-6,-4,-5,-31,-15,-27v3,-16,-9,-7,-18,-10v1,8,-17,0,-24,6v-1,-17,10,-20,18,-11v7,-8,24,-1,33,-13v-7,-2,4,-8,-3,-9v-3,-2,14,-18,5,-21v3,-2,5,-7,6,-14v12,-3,23,-1,24,7r3,0v1,0,-12,27,-11,20v0,-6,-6,-9,-9,-5v1,2,6,12,2,16v5,-1,6,2,5,6v2,-3,4,-6,8,-6v2,9,-15,11,1,17r0,28r13,-2v0,2,-21,21,-18,26xm-23,-159v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm103,-18v1,1,4,4,0,3r0,-3xm36,-218v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm40,-213v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm29,-209v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm32,-172v0,-3,-3,-5,-8,-7v-1,6,1,7,8,7xm22,-168v4,-2,0,-5,-2,-6v-3,2,1,4,2,6xm7,-168v6,0,6,-6,0,-4r0,4xm-12,-187v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm18,-148v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm36,-124v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm27,-118r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm-34,-161v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm17,-93v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm44,-46v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm40,-37r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm22,-172r-1,2v0,-1,0,-2,1,-2","w":104},"m":{"d":"163,-187v-1,-1,-4,-4,0,-3r0,3xm73,-200v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm161,-70v-2,8,-7,13,1,19v-16,9,9,43,-16,51v-6,-9,-13,5,-18,-4v-7,-70,1,-145,-2,-224v11,-1,25,3,31,-4v1,33,-3,72,2,101v-1,25,-5,34,2,61xm81,-161v-2,-1,-4,-2,0,-2r0,2xm11,-207v1,3,-5,5,-2,2v0,-1,1,-1,2,-2xm6,-198v3,4,-1,9,-7,9v-2,-3,5,-6,7,-9xm-9,-207v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm-7,-185v1,-1,2,-2,2,1xm-13,-181v2,2,1,3,0,5v-2,-2,-3,-4,0,-5xm67,-190v16,4,-9,42,16,35v-2,5,-7,7,-4,18v7,0,0,0,1,6v0,6,2,15,5,27v11,-6,0,-20,9,-25v10,-41,12,-75,16,-97v1,-1,6,-1,12,-2v-2,37,4,77,-4,108v3,12,-7,27,2,39v-9,3,-20,32,-2,31v4,5,-9,10,-16,17v-5,22,-9,35,-23,31v-1,-8,-3,-33,-19,-24v-4,-1,-2,-9,-10,-7v-2,1,-5,38,-17,33v-4,-2,-17,0,-20,-2r0,-50v-8,-1,0,-25,-13,-11v-13,0,-17,-2,-33,2v0,-18,9,-18,18,-11v7,-1,15,-6,21,-2v11,-19,9,-80,3,-107r-7,0v1,-6,20,-26,9,-35v5,-20,22,-11,37,-15v16,2,17,17,19,41xm-25,-176v0,-7,7,-9,10,-5v-2,4,-5,5,-10,5xm124,-35v0,1,-1,2,-2,2v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2v1,0,2,1,2,2xm122,-26v0,-2,-6,-5,-2,-5v1,2,2,2,2,5xm118,-22v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm65,-20v-1,-1,-3,-2,0,-2r0,2xm4,-83v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm4,-96v-3,2,-3,20,-11,11r-9,5v1,-9,9,-17,20,-16xm52,-28v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm-15,-79v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm142,-168v3,0,5,0,4,-3v-2,0,-4,1,-4,3xm115,-81v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm47,-141v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm46,-73v5,-6,18,-19,10,-34v-3,1,-7,9,-6,0v4,-11,2,-15,-2,-26v-14,6,9,17,-2,19r0,41xm109,-39r0,-7v-3,2,-3,5,0,7xm59,-63v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm65,-52v2,-1,3,-3,0,-5v-1,2,-2,3,0,5xm60,-52v4,-1,4,-7,0,-7v-2,0,-5,2,-4,5v1,1,3,2,4,2xm50,-48v4,-2,0,-5,-2,-6v-1,0,-2,1,-2,2v0,3,3,1,4,4xm-7,-87v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm-31,-65v1,1,4,4,3,0r-3,0xm28,-2v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm50,-52v0,1,-1,2,-2,2v0,-2,1,-2,2,-2","w":169},"n":{"d":"126,-155v-1,-1,-3,-2,0,-2r0,2xm115,-153v1,4,-1,6,-5,5v0,-3,2,-5,5,-5xm106,-148v0,2,0,2,-2,2xm126,-102v-1,-1,-3,-2,0,-2r0,2xm85,-139v2,0,1,3,0,4v-2,-1,-3,-3,0,-4xm150,-67v1,4,-5,1,-7,2v-1,-4,5,-1,7,-2xm121,-92v3,2,3,4,0,5v-1,-2,-1,-3,0,-5xm71,-148v6,5,-1,12,-8,11v1,-3,3,-9,8,-11xm139,-63v-1,1,-2,3,-2,0r2,0xm10,-231v1,26,12,-8,18,7v2,-9,17,-11,19,2v-7,13,19,31,9,41v7,4,9,5,9,11v-2,0,-6,-4,-5,0v4,8,11,12,23,14v-2,1,-23,3,-23,6v-2,12,3,22,14,15v0,11,-4,8,-12,7v3,11,-5,20,3,24v2,-14,5,-20,17,-20v1,-5,6,-8,9,-11v-5,-3,-11,-13,-4,-17r0,-81v9,0,21,2,23,-5v17,8,3,24,10,38r-3,41v-10,5,-15,11,-17,17v8,0,25,-2,17,6v-1,7,7,7,10,12v-8,0,-12,4,-12,13r5,-2v-5,18,5,35,10,46v-10,1,-6,7,-4,15v-2,6,25,15,24,21v-12,2,-10,4,-29,2v0,18,-8,37,-14,20v-5,8,-15,-1,-20,5v-2,-4,-6,-8,-4,-13v-11,-2,-17,11,-18,-5v-8,-2,-22,5,-22,-5v21,0,15,-22,4,-30v16,6,13,-24,24,-30v-6,-5,-18,8,-15,0v1,-15,-22,-37,-13,-55v-13,8,-1,31,-6,50v-4,3,-12,2,-13,7r17,0v-11,14,12,11,11,25v-3,0,-9,-3,-11,-1v0,13,0,38,-6,52v-11,-3,-14,9,-18,0v-1,4,-7,7,-9,2v2,-25,-3,-57,3,-78v2,1,4,1,4,-2v-1,-1,-3,-2,-7,-5r0,-79v6,0,9,-1,9,-5v-4,0,-8,0,-9,-3v2,-16,-4,-40,2,-52xm133,-61v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm130,-26v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm133,-15v-4,0,-5,-1,-5,-5v3,0,5,2,5,5xm75,-10v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm39,-181v0,-14,3,-33,-1,-45xm106,-135v-2,-3,-4,-3,-6,0v0,2,2,2,4,2v1,0,2,-1,2,-2xm102,-128v-1,2,3,6,2,2v0,-1,-1,-2,-2,-2xm106,-120v2,-1,4,-2,0,-2r0,2xm19,-207v3,-3,-2,-9,-4,-8v0,3,1,6,4,8xm43,-174v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm39,-172v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm97,-109v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm80,-115v4,0,9,1,7,-5v-3,1,-5,2,-7,5xm46,-172v-11,1,-7,14,-7,26v6,-5,7,-22,7,-26xm121,-65v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm102,-83v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm97,-86v1,-1,1,-1,0,-2v-2,1,-2,1,0,2xm85,-94v-1,-7,3,-18,-7,-15v3,5,1,10,7,15xm26,-142v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm80,-85v1,3,5,2,5,-2v-2,-2,-5,-2,-5,2xm121,-41v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm133,-31v2,0,1,-3,0,-4v-3,1,-3,3,0,4xm78,-87v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm124,-37r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm29,-123v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm28,-102v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm67,-52v2,0,2,0,2,-2xm71,-46v-4,-1,-5,1,-4,5v2,0,3,-1,4,-5xm65,-35v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm41,-168v2,2,3,4,0,5v-2,-2,-1,-3,0,-5","w":132},"o":{"d":"78,-159v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm68,-33v26,-13,16,-69,16,-115v0,-33,3,-42,-18,-48v-4,-4,-5,-25,-4,-36v12,3,47,0,35,19v5,-1,4,2,4,6v-4,-2,-17,-4,-19,0v3,8,18,4,28,5v1,-3,2,-6,5,-3r1,157v12,2,24,-7,27,-4v0,0,-1,2,-3,4r16,0v-11,3,-17,7,-17,10v2,-2,4,3,4,5r-7,0v2,7,8,3,13,3v0,9,-24,2,-28,2r2,-5r-8,0v-17,20,-29,40,-53,29v-1,-7,2,-18,-2,-22v-2,8,5,30,-6,24v-14,4,-21,-13,-40,-24r-4,-133r-5,0v0,-3,5,-9,3,-13v-3,2,-8,5,-13,9v0,-8,11,-5,13,-14v3,-11,4,-29,16,-29v-1,-19,23,-14,29,-25r5,-1r0,32v-14,9,-5,10,-4,24v1,3,41,17,12,20v1,-6,-10,-2,-14,-3v0,-7,-1,-11,-3,-13v-6,4,-13,89,0,109v0,4,-8,12,0,11v-7,7,7,6,11,15v3,3,5,4,8,4xm54,-107v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm53,-100v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm-12,-159v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm115,-29v3,0,0,3,0,1r0,-1xm-23,-154v-1,-6,6,-9,9,-5v-2,4,-5,5,-9,5xm54,-70v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm-31,-67r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm84,-189v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm49,-181v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm110,-118v1,2,2,4,2,0r-2,0xm62,-161v4,-2,0,-5,-2,-7v-3,3,0,5,2,7xm106,-118r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm58,-31v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm61,-163v0,-1,1,-4,1,-2v0,0,-1,1,-1,2"},"p":{"d":"122,-174v-2,0,-4,-5,0,-5r0,5xm57,-189v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm114,-175v-5,5,0,14,2,21v0,26,-13,45,-37,58v-9,-8,-28,6,-33,0v1,-12,-6,-44,11,-32v35,-9,21,-50,11,-73v-1,-2,5,-10,-2,-10v-8,7,-2,18,-13,9r-9,4r2,-24v37,-8,70,-6,68,47xm44,-187v-1,-1,-1,-4,0,-5v1,2,1,4,0,5xm9,-7v0,-24,-2,-50,5,-63v-8,-7,-2,-29,-4,-43v-7,-1,-3,9,-11,7v1,-11,5,-10,1,-21v9,1,11,-7,7,-13r-15,0v2,-2,19,-2,16,-10r0,-13r-8,4v2,-6,4,-8,10,-11r0,-52v7,-10,11,-3,31,2r0,74v0,-5,2,-13,5,-24r-6,109v9,13,0,37,1,56v-15,1,-16,8,-32,-2xm16,-220v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm11,-122v0,-2,-4,-3,-4,0v0,2,4,3,4,0xm22,-89v3,-1,2,-3,0,-5v-2,2,-3,4,0,5","w":121},"q":{"d":"122,-188v2,2,3,3,0,4v-3,-1,-2,-2,0,-4xm122,-151v3,1,2,3,0,5v-2,-2,-3,-4,0,-5xm46,-181v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm122,-68v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm118,17v-8,-5,-28,0,-32,-9v1,-2,-8,-13,-10,-6v1,1,2,2,2,4v-11,9,-16,-11,-19,-15v0,17,-14,6,-22,13v2,-5,-30,-30,-26,-37v0,-17,-3,-37,8,-44r-10,0v1,-24,-1,-41,-3,-63v7,-33,0,-92,50,-87r0,30v-17,8,-17,36,-10,57v-2,0,-6,-1,-5,2v5,7,-2,27,10,28v-12,-1,-14,2,-13,9r5,0v2,12,-5,22,-2,24v1,0,3,-1,5,-2v-8,11,-7,19,6,22v-6,6,8,4,2,9v-2,-1,-7,-4,-10,-2v-1,23,22,29,32,10v-6,4,-17,-2,-16,-8v0,-4,5,-5,14,-5v1,4,-10,6,0,7v7,-1,4,-14,4,-21v0,-45,15,-111,-15,-132r0,-28v4,1,15,-7,18,-7v-10,10,16,7,20,22v13,15,15,43,8,63v13,3,0,14,6,24v-7,7,1,16,3,24v1,5,-8,21,-7,26v6,2,8,6,2,9v0,12,0,24,-2,34v5,-1,7,2,7,6v-4,0,-11,-2,-9,4v13,0,21,22,26,30v-12,0,-14,4,-17,9xm50,-96v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm98,-146v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm115,-105v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm113,-94v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm128,6v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm69,-40v3,0,3,-3,0,-4v-2,1,-1,3,0,4","w":126},"r":{"d":"102,-218v-1,1,-2,3,-2,0r2,0xm120,-181v-2,0,-4,0,-5,-2v2,0,6,-1,5,2xm50,-187v-1,-1,-4,-4,0,-3r0,3xm89,-104v14,28,12,63,32,90v-5,-4,-12,20,-19,10v-3,7,-29,6,-23,-7r-20,-83v-8,5,-12,-3,-12,-13v0,-10,1,-17,1,-19r24,-7v0,-3,7,-23,7,-29v0,-29,-14,-29,-31,-39r0,-26v23,-6,52,-3,48,22v1,-1,2,-6,4,-4v15,11,7,43,18,56v-5,3,-21,47,-29,49xm1,-175v0,-2,3,0,1,0r-1,0xm0,-170v0,2,0,2,-2,2xm118,-46v-1,1,-4,5,-3,0r3,0xm-8,-163v1,2,-7,8,-9,7v0,-5,3,-7,9,-7xm9,-229v10,-9,15,9,17,11v6,0,11,-3,17,-9v-1,21,1,43,3,59v15,4,22,9,24,15v-7,0,-11,6,-13,-2v-2,6,-18,-1,-13,13v-6,18,2,41,-1,68r5,9v-4,0,-8,2,-11,4v16,8,3,20,4,41v2,1,6,4,6,6v-4,5,-21,15,-37,13r1,1v-6,-35,9,-120,-9,-153v-4,0,-7,5,-7,-2v2,-6,21,-19,12,-32v4,-10,1,-28,2,-42xm-21,-155v0,5,-4,7,-11,7v0,-5,4,-7,11,-7xm89,-196v2,-1,3,-3,0,-5v-1,2,-2,3,0,5xm100,-166v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm13,-220v4,3,5,-3,5,-9v-3,2,-5,4,-5,9xm52,-157v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm9,-157v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm81,-72v1,-3,-5,-5,-2,-2v0,1,1,1,2,2xm22,-129v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm54,-98v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm41,-104v2,-1,3,-4,0,-5v-2,1,-1,4,0,5xm74,-68v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm41,-94v1,-9,-13,-8,-18,-8v-2,6,17,6,18,8xm15,-79v2,0,3,-3,0,-4v-2,1,-1,3,0,4"},"s":{"d":"120,-197v-5,-1,-7,-5,0,-4r0,4xm87,-229v-1,-1,-3,-2,0,-2r0,2xm101,-220v0,3,14,32,13,38v-1,8,-16,11,-27,11v-2,0,-7,-7,-13,-22v-5,1,-6,5,-10,8v-3,-15,-4,-22,-1,-42v15,-1,23,4,38,7xm70,-185v1,4,-2,14,-5,7v1,-5,3,-7,5,-7xm72,-147v-4,0,-5,-4,0,-3r0,3xm85,-134v3,1,2,2,0,4v-2,-2,-3,-3,0,-4xm125,-90v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm120,-86v2,2,2,4,0,5v-2,-2,-1,-3,0,-5xm-12,-188v0,-8,11,-19,20,-15v-6,20,-6,5,-20,15xm116,-103v0,6,14,15,0,17v-1,12,8,18,2,26v9,7,-5,17,-4,26v-1,-1,-2,-1,-3,0v2,10,-18,7,-13,17v-5,13,-35,29,-33,0v6,-2,-1,-5,0,-9v10,-6,33,-38,9,-51v-8,5,-17,-1,-18,-13v-7,1,-1,-6,-2,-11v-1,1,-3,2,-6,3v1,-5,-13,-24,-20,-22v-7,-20,-17,-24,-18,-55v-15,7,-27,0,-41,7v-1,-16,9,-22,19,-12v0,-9,29,3,20,-10v10,-13,22,-41,48,-37r0,30v-18,16,-7,21,-2,43r12,-2v-16,28,32,21,36,49v0,3,10,8,14,4xm42,-95v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm-23,-160v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm61,-71v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm34,-90v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm26,-85v-2,0,-2,0,-2,-2v8,-9,8,2,2,2xm39,-64v1,15,13,29,22,34v0,13,4,33,-11,26v-9,8,-19,-11,-30,-16v-10,-10,-15,-22,-10,-40v16,-3,25,-4,29,-4xm17,-15v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm94,-118v0,-1,-1,-2,-2,-2v-3,1,-3,5,0,5v1,0,2,-1,2,-3xm115,-89v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm65,-92v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm94,-17v0,-7,-21,-8,-23,0r23,0xm43,-8v3,-1,2,-3,0,-5v-1,2,-2,3,0,5","w":126},"t":{"d":"30,-229v28,-9,55,3,83,-2v7,55,-59,27,-107,33r0,-30v9,-1,14,-5,24,-1xm83,-155v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm83,-124r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm83,-102r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm20,-139v2,0,1,3,0,4v-3,-1,-3,-3,0,-4xm17,-133v3,1,2,3,0,5v-1,-2,-2,-3,0,-5xm17,-126v1,2,5,7,0,8r0,-8xm33,-107v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm-18,-168v17,-9,27,-17,51,-2v8,0,6,-17,6,-26r35,2v-1,28,2,60,-2,85v4,12,-4,37,8,44r-6,0v-3,8,0,50,-4,65v-12,-5,-31,7,-31,-9r0,-56v-5,-1,-15,3,-13,-5r11,0v3,-16,-15,-18,-7,-28v4,5,7,8,9,8v-1,-12,4,-21,-11,-21v3,4,-1,7,-4,11v0,-17,7,-51,-13,-37v1,-7,-4,-7,-9,-18v2,-1,4,-2,5,-4v0,-4,-2,-5,-7,-4v3,-1,2,-3,1,-5v-5,-1,-10,0,-8,6v-3,-3,-4,-9,-11,-6xm22,-166v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm18,-169v2,-1,2,-1,0,-2v-1,1,-1,1,0,2xm4,-174v2,1,7,3,9,0v0,-3,-8,-3,-9,0xm9,-168v1,1,2,3,2,0r-2,0xm37,-126v2,-2,1,-3,0,-5v-1,2,-2,3,0,5xm33,-126v2,-2,1,-3,0,-5v-3,2,-3,4,0,5xm15,-142v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm41,-85v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2","w":117},"u":{"d":"162,-150v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm167,-148v3,7,-1,12,-9,11v1,-4,4,-7,9,-11xm167,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm160,-135v0,2,1,5,-2,4xm130,-152v-1,1,-2,3,-2,0r2,0xm119,-133v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm86,-229v12,2,19,-1,31,-3v2,19,-3,44,2,60v-7,38,8,99,-7,129v-2,-17,-13,-7,-28,-11xm58,-152v-1,1,-2,3,-2,0r2,0xm58,-122v-1,1,-2,3,-2,0r2,0xm58,-100v-1,1,-2,3,-2,0r2,0xm117,-39v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm104,-39v-1,1,-2,3,-2,0r2,0xm62,-72v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm45,-72v1,1,12,6,7,9v-3,0,-6,-4,-5,2v-1,18,7,22,15,30v-1,9,3,23,-2,29v-9,0,-15,0,-22,2v1,-2,2,-3,3,-4v-2,-7,-34,-14,-24,-21v0,-5,-4,-7,-10,-7r0,-11v-18,4,-29,5,-43,4v0,-3,2,-9,7,-20v2,15,24,9,35,7v14,-17,7,-85,6,-124v-3,7,-6,11,-8,11r0,-21v8,0,10,-6,6,-13r-13,0v13,-3,16,-7,15,-23r-8,4v3,-17,27,-6,41,-15v11,5,-10,27,9,31v-21,10,-1,65,-9,89v3,15,2,18,0,41xm62,-43v-4,-5,-5,-15,-2,-22v10,0,0,15,2,22xm83,-38v-1,4,13,7,14,10v-5,0,-17,-1,-11,4r21,0v-3,13,-27,31,-40,20r0,-27v4,0,21,-28,26,-13v2,5,-4,7,-10,6xm4,-59v1,2,-1,2,-3,2xm-3,-74v7,2,4,14,0,15v-6,-4,-8,1,-13,1v-2,-6,14,-12,13,-16xm-3,-33v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm99,-100v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm12,-179v3,0,2,-3,0,-4v-2,2,-1,3,0,4xm6,-172v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm25,-61v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm30,-52v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm10,-46v3,1,5,-3,2,-4xm-8,-64v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm-14,-41v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm-31,-39v2,-1,1,-3,0,-4v-2,0,-3,3,0,4","w":128},"v":{"d":"127,-205v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm122,-200v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm118,-176v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm120,-163v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm129,-124v-1,0,-2,-4,0,-4v1,1,1,3,0,4xm129,-120v2,2,1,3,0,5v-2,-2,-3,-4,0,-5xm127,-109v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm124,-109v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm111,-120v3,1,2,3,0,5v-1,-2,-2,-3,0,-5xm57,-166v1,0,1,1,1,2xm122,-104r-11,2v0,-9,7,-6,11,-2xm115,-88v2,1,0,1,-1,2xm114,-81v1,3,-3,7,-3,3xm77,-148v-6,-30,12,-47,13,-81r30,0v1,3,2,8,5,13v-6,0,-9,12,-9,35v-5,4,-6,14,-2,20v-3,3,-8,15,-3,19v-1,-4,11,-10,7,-15v7,-4,8,3,14,1v-3,-3,2,-5,3,-7v7,20,-13,33,-13,50v0,-10,-3,-16,-8,-18v-5,10,-16,9,-7,12v0,0,1,0,2,-1v0,21,-24,37,-8,60v-12,-1,-11,29,-18,32v2,1,4,1,7,2v-4,3,-7,39,-15,20v-7,-2,-12,3,-18,5v2,-43,11,-79,15,-119v-8,-1,-7,9,-8,13v-3,25,-1,86,-14,105v-13,-35,-11,-91,-28,-122v-10,1,-34,-10,-33,-20v-1,1,-7,4,-17,11r2,-4r-11,0v3,-6,28,-31,37,-24v1,-7,13,-14,14,-22v1,-8,-8,-37,-7,-46v13,0,25,1,35,-2v3,38,12,41,11,72v-2,2,17,23,9,22v0,6,2,9,6,9v6,0,9,-7,9,-20xm94,-50r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm92,-35v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm-32,-150v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm-34,-135v0,3,0,5,-3,4xm72,0v-1,-1,-3,-2,0,-2r0,2xm129,-148v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm127,-137v2,-3,10,-8,0,-7r0,7xm107,-130v3,1,6,-4,3,-7v-2,0,-3,2,-3,7xm9,-170v2,0,3,-4,0,-4v-2,1,-3,4,0,4xm5,-163v6,4,-12,4,-5,8v3,-2,12,-2,18,-7v-2,-2,-5,-4,-9,-8v-1,3,-2,5,-4,7xm20,-144v-4,-1,-8,-6,-11,-2v3,6,6,5,11,2xm2,-148v3,0,3,-4,0,-4v-1,0,-1,4,0,4xm-2,-144v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm74,-11v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm66,-15v2,1,2,-1,2,-3","w":131},"w":{"d":"119,-199v0,1,-1,3,-1,1v0,-1,0,-1,1,-1xm185,-120v1,5,-4,3,-7,3v1,-2,3,-3,7,-3xm171,-112r0,-3v3,0,2,3,0,3xm182,-97v0,1,-1,2,-2,2r0,-4v1,0,2,0,2,2xm147,-227v11,-3,25,3,31,-4v10,21,-13,54,-7,77v-6,15,-17,63,7,63v0,10,10,26,-7,25v3,-6,3,-23,-3,-12v-2,9,-6,32,-13,35v-9,2,-4,6,-1,15v-2,4,-10,17,-11,24v-3,-1,-5,1,-4,4v-31,11,-25,-31,-33,-52v-6,-1,-7,-7,-7,-13v-6,0,-2,-7,-10,-6v-19,5,-6,49,-20,64v-5,1,-14,-2,-14,4v3,1,10,-2,9,3v-11,-2,-25,7,-25,-8v0,-51,-8,-111,-26,-152v2,-1,4,-2,-1,-2v-10,0,-32,-3,-32,-11v-2,-8,29,-10,15,-19r-6,-6r22,0v-2,-5,-3,-14,-3,-28v11,-1,36,-9,29,10r6,0v1,3,3,42,10,38v6,7,1,21,0,31v10,1,13,0,16,-11r10,-69v15,-1,33,-1,33,11v0,18,0,29,10,37r-5,0v1,10,3,28,11,30v0,0,-1,0,-1,2v4,-1,6,0,9,2xm-9,-184v0,3,-4,5,-3,0v0,-1,0,-2,1,-2v1,0,2,1,2,2xm4,-156v-1,-3,2,-2,2,-1v0,1,-1,1,-2,1xm163,-166r0,-5v-1,0,-2,1,-2,2v0,2,1,3,2,3xm109,-211r0,-2r0,2xm92,-201v2,0,3,-1,2,-3v-1,0,-2,1,-2,3xm92,-190v0,-2,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm134,-140r-9,0v4,-1,1,8,4,10v3,0,5,-3,5,-10xm86,-169v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm29,-225v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm90,-139v-3,-1,-5,2,-2,2v1,0,2,0,2,-2xm91,-111v2,0,1,-3,0,-3v-1,0,-1,3,0,3xm7,-192v2,1,2,-1,2,-3xm53,-139v-3,-1,-5,2,-2,2v1,0,2,0,2,-2xm64,-130v-10,3,8,-11,-4,-13v-5,0,-6,14,-6,26v9,1,7,-9,10,-13xm82,-80v6,-7,10,8,10,-7v0,-7,-1,-11,-5,-11v-2,0,-3,6,-5,18xm55,-106v4,0,4,0,2,-2xm88,-78v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,2,1,2,2,2v1,0,2,0,2,-2xm66,-9v0,-4,8,-11,3,-15r-3,0v-4,-26,-5,-55,-11,-78xm61,-20v0,-1,-1,-2,-2,-2r0,4v1,0,2,0,2,-2","w":184},"x":{"d":"118,-207v2,0,1,2,0,2v-1,0,-1,0,-1,-1xm49,-235v1,2,-1,2,-3,2v-1,-2,1,-2,3,-2xm125,-144v1,0,2,5,0,5v-1,0,-2,-1,-2,-3v0,-1,1,-2,2,-2xm125,-139r0,4v-1,0,-2,-1,-2,-2v0,-2,1,-2,2,-2xm118,-126v0,1,-1,2,-2,2r0,-4v1,0,2,0,2,2xm114,-109v1,0,2,5,0,5v-1,0,-2,-1,-2,-3v0,-1,1,-2,2,-2xm101,-85v-7,22,25,49,23,80v-17,8,-38,3,-42,-17v-7,-35,-21,-56,-30,-21v-5,13,-5,13,-14,39v-11,5,-31,6,-33,-2v-2,-12,23,-53,20,-68v-3,0,-14,-1,-16,-4v6,-4,16,-1,11,-11v0,-4,2,-9,7,-15r-3,0r16,-22v-13,-13,-11,-17,-9,-29v-6,-11,-24,-59,-24,-73r30,-3v5,-1,18,41,27,63v10,-16,11,-42,21,-58r36,-3v2,2,-17,51,-23,69v1,3,10,9,14,3v2,8,18,11,7,23v-3,5,-4,9,-4,13v1,-2,2,0,3,1r-8,0v-1,8,9,12,-8,13v5,10,-9,17,-1,22xm20,-101v0,2,-4,2,-4,1v0,-2,3,-1,4,-1xm16,-89r0,4r0,-4xm12,-96v-3,0,-9,7,-10,2v-1,-5,8,-5,10,-2xm9,-87v1,0,2,1,2,3v0,1,-4,2,-3,-1v0,-1,0,-2,1,-2xm60,-31v-5,-5,1,-3,1,-1v0,1,0,1,-1,1xm5,-83v1,0,2,1,2,3v0,1,-1,2,-2,2v-1,0,-2,-5,0,-5xm9,-74v0,1,-1,2,-2,2r0,-4v1,0,2,0,2,2xm9,-56v0,1,-1,2,-2,2v-1,0,-2,-5,0,-5v1,0,2,1,2,3xm5,-54v0,1,-1,2,-2,2v-1,0,-2,-1,-2,-2v0,-4,4,-4,4,0xm114,-133r0,-4v-1,0,-2,1,-2,2v0,2,1,2,2,2xm97,-146r0,-4v-1,0,-2,0,-2,2v0,1,1,2,2,2xm66,-163v2,0,1,-3,0,-3v0,1,-2,2,0,3xm99,-92r0,-4v-1,0,-2,1,-2,2v0,2,1,2,2,2xm36,-135v1,-1,3,-2,0,-2r0,2xm35,-111v2,0,1,-4,0,-1r0,1xm62,-65v1,0,2,-5,0,-5v-1,0,-2,1,-2,3v0,1,1,2,2,2xm101,-24v2,0,1,-4,0,-4v-1,0,-2,0,-2,2v0,2,1,2,2,2xm27,-98v2,0,2,0,2,-2xm30,-92v-3,0,-5,1,-5,5v3,-1,5,-2,5,-5xm35,-41v0,-2,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm36,-31r0,-4v-1,0,-2,1,-2,3v0,1,1,1,2,1xm20,-31v5,0,5,0,2,-2xm31,-5v-1,-1,-3,1,-1,1v1,0,1,0,1,-1xm20,-4v0,-3,-4,-5,-3,0v0,1,0,2,1,2v1,0,2,-1,2,-2","w":128},"y":{"d":"64,-176v-1,1,-2,3,-2,0r2,0xm44,-218v3,30,14,50,18,74v7,-17,14,-45,22,-84r35,0v0,0,-1,3,-3,8v2,1,6,8,0,7v-18,27,-23,93,-39,112v8,19,-3,63,2,89v2,8,-12,16,-20,10v3,-1,6,-1,5,-5r-22,6v4,-26,1,-57,2,-86v-14,-2,-38,-4,-41,-13v9,-12,7,-15,15,-4v2,-8,2,-10,2,-16v-6,0,-10,-2,-9,-5r22,0v-4,-38,-25,-68,-28,-103v7,-5,22,-3,33,-3v0,10,2,14,6,13xm39,-86v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm89,-34v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm29,-85v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm86,-17v-6,0,-6,-4,0,-3r0,3xm64,-142v0,8,0,12,4,18v0,-7,0,-10,-4,-18xm72,-122v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm75,-107v1,-3,-2,-10,-3,-6v0,2,1,4,3,6xm36,-107v5,-2,2,-16,-7,-13v4,3,7,7,7,13xm40,-102v0,-2,-3,-1,-4,-1v0,2,2,2,4,1xm24,-113v0,-1,0,-2,-2,-2r0,4v2,0,2,-1,2,-2"},"z":{"d":"58,-202v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm51,-185v-2,2,-8,1,-10,0v1,-2,8,-2,10,0xm44,-232v2,26,14,-11,21,3v10,1,26,-4,34,3v-1,3,-7,9,-9,17v7,1,16,-13,20,-11v-1,12,-6,22,-4,35v2,-4,7,-4,8,0v1,9,-10,4,-15,4v1,18,-10,25,-7,38v-14,4,-10,16,-17,30v2,0,3,2,3,6v-9,0,-8,9,-9,18v-1,2,-12,16,-11,22v-1,4,25,13,22,19v-14,-1,-39,-2,-31,13v19,-1,44,3,58,-3v2,10,8,34,-8,33v1,4,0,7,-5,6v-18,-2,-53,-15,-64,-1v-7,0,-19,0,-22,-2r2,-32r11,0r-11,-3v2,-5,2,-7,2,-13v-2,0,-6,1,-6,-1v29,-40,27,-47,48,-95v9,1,-1,-22,8,-15v10,-1,0,-16,3,-22v-3,2,-4,8,-9,9v0,-7,-1,-14,-2,-20v6,4,10,-4,7,-10v-6,-1,-15,-3,-16,6v-5,-7,-21,5,-31,-2r0,-27v13,2,18,-4,30,-5xm75,-46v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm65,-46v1,2,1,3,0,5v-3,-1,-3,-3,0,-5xm17,-86v1,1,1,1,0,2v-2,0,-3,-2,0,-2xm12,-74v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm10,-67v1,2,-3,6,-2,2v0,-1,1,-2,2,-2xm4,-61v1,2,-1,2,-3,2xm-3,-56v0,2,0,2,-2,2xm41,-2r0,2v-1,-1,-1,-1,0,-2xm-12,-50v-2,4,-5,5,-9,5v0,-4,4,-5,9,-5xm71,-216v3,-1,2,-2,0,-4v-2,2,-3,3,0,4xm65,-213v-1,-1,-4,-5,-3,0r3,0xm45,-218v0,2,3,0,1,0r-1,0xm39,-221v1,-1,3,-1,1,-2v-1,1,-3,1,-1,2xm52,-209v0,-3,-2,-4,-7,-4v-1,5,3,4,7,4xm78,-172v2,-3,1,-6,0,-9v-3,4,-2,6,0,9xm32,-211v1,-1,3,-2,0,-2r0,2xm23,-218v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm25,-204v1,0,1,-1,1,-2xm78,-146v2,0,1,-4,0,-4v-3,0,-3,4,0,4xm60,-154v2,1,2,-1,2,-3xm51,-122v2,-1,4,-2,0,-2r0,2xm63,-53v2,-1,2,-1,0,-2v-1,1,-1,1,0,2xm68,-49v1,-1,1,-1,0,-2v-2,1,-2,1,0,2xm64,-50v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm34,-35v-1,-1,-6,-2,-7,0v3,1,4,2,7,0xm17,-4v3,0,5,0,4,-3","w":117},"{":{"d":"75,-236v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm67,-218v-13,2,-31,19,-41,9v0,-3,9,-3,0,-6v-1,0,-3,1,-5,4v2,-10,7,-15,15,-16v0,-3,5,-6,14,-7v1,5,12,1,17,2r0,14xm19,-196v5,-8,20,-7,26,-5v-3,7,-16,5,-26,5xm43,-187v-1,-1,-3,-2,0,-2r0,2xm41,-179v-3,0,-1,-1,-1,-1xm19,-187v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm35,-180v-2,5,-12,2,-18,3v2,-5,12,-2,18,-3xm43,-144v-4,4,-16,-10,-24,-10r0,-18v13,3,19,-10,22,4v1,8,-2,20,2,24xm33,-120v2,-2,4,0,2,2xm45,-94v1,1,1,3,0,4v-1,-1,-1,-3,0,-4xm45,-85v-5,12,-4,39,-4,54v0,6,28,10,35,15r-9,0r0,14v-12,0,-15,0,-17,2v2,-5,-34,-7,-26,-21v-7,-1,-2,-11,-2,-15r-3,1v2,-32,1,-55,-10,-74r8,0v-1,-17,10,-25,1,-39v16,-2,14,10,22,13v0,1,-8,8,-12,19v9,9,15,18,12,29v2,1,4,1,5,2xm5,-113v1,1,1,3,0,4v-1,-1,-1,-3,0,-4xm31,-7v1,1,3,2,0,3v-1,-1,-1,-2,0,-3xm56,-230v0,2,3,0,1,0r-1,0xm57,-222v0,0,2,0,2,-1v0,0,-2,0,-2,1xm49,-220v-1,0,-2,-2,-2,0r2,0xm28,-221v2,-1,0,-3,0,-1r0,1xm29,-166v2,-1,2,-3,0,-4v-1,1,-1,3,0,4xm24,-166v2,-1,2,-3,0,-4v-1,1,-1,3,0,4xm24,-115v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm29,-50v2,-1,2,-3,0,-4v-1,1,-1,3,0,4xm31,-47v2,0,2,-3,0,-3v-2,0,-1,3,0,3xm59,-19v0,-1,3,-3,-1,-3xm24,-54v0,2,3,0,1,0r-1,0xm40,-31v2,0,1,-4,0,-4v-2,1,-2,3,0,4xm29,-31v2,-1,2,-3,0,-4v-1,1,-1,3,0,4xm43,-16v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm38,-17v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm40,-16v0,3,2,5,5,4v-1,-2,-3,-3,-5,-4xm28,-22v1,-1,1,-3,0,-4v-2,1,-2,3,0,4xm32,-18v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm35,-12v1,-1,1,-3,0,-4v-2,1,-2,3,0,4xm22,-22v2,-1,2,-3,0,-4v-1,1,-1,3,0,4xm28,-17v1,-1,1,-3,0,-4v-2,1,-2,3,0,4xm31,-10v2,-1,2,-3,0,-4v-1,1,-1,3,0,4","w":85},"|":{"d":"36,-241v3,8,-3,26,9,26v-13,4,-11,20,-8,37v14,4,-9,9,1,18v2,0,5,-1,5,1v-15,14,3,58,-7,81v-9,16,16,21,2,24v1,3,4,3,6,4v-14,2,-5,34,-8,47v-4,1,-34,12,-27,-8r0,-180v7,-10,1,-19,0,-50r27,0xm40,-102v4,-1,8,2,5,4v-2,0,-4,-2,-5,-4xm41,-74v3,-1,7,4,4,4v-2,0,-4,-1,-4,-4xm40,-36v2,-4,9,2,4,3v-2,0,-3,-1,-4,-3xm25,-27v2,-2,0,-5,-3,-4v-2,0,-1,0,-1,2v1,1,3,2,4,2","w":48},"}":{"d":"65,-155v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm61,-137v6,4,17,12,10,26v-19,14,-10,24,-14,41v-1,10,10,18,-1,12v8,25,-2,55,-25,48v3,-6,-2,-4,-8,-5v1,5,-1,7,-5,7v3,-7,-3,-8,0,-14v10,6,13,1,15,-22v3,-4,-6,-67,12,-74v-11,-9,-15,-57,-11,-88v-1,-10,-15,-12,-28,-11r2,-21v26,-2,36,3,50,16v-4,14,0,34,-2,54v0,0,4,-1,0,3v-3,8,8,17,5,28xm65,-44v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm36,-5v2,1,2,3,0,4v-1,-1,-1,-3,0,-4xm17,-16v2,2,1,2,0,4v-1,-2,-2,-2,0,-4xm13,-21v-1,6,-6,7,-5,0r5,0xm26,-2v0,0,2,1,0,1r0,-1xm15,-1v1,-1,6,-2,7,0r-7,0xm8,-10v2,0,1,3,0,3v-1,0,-2,-3,0,-3xm10,-1v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm38,-202v2,-1,2,-3,0,-4v-1,1,-1,3,0,4xm12,-217v3,1,4,-3,1,-3xm38,-93v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm56,-70v1,-1,2,-3,0,-4v-3,1,-2,3,0,4xm42,-30v-1,1,-1,1,0,2r0,-2xm38,-22v1,-1,6,0,5,-4v-2,1,-4,2,-5,4","w":82},"~":{"d":"89,-273v6,1,9,2,10,8v-5,4,-13,18,-16,23v-35,8,-44,-33,-64,4v-16,-10,6,-40,19,-38v13,3,10,6,33,17v8,-4,8,-1,18,-14xm47,-271r0,-3v-1,1,-1,2,0,3","w":109},"\u00c4":{"d":"86,-237v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm97,-197v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm69,-135v1,0,1,4,0,4v-3,0,-3,-4,0,-4xm115,-89v1,2,2,3,0,5v-2,-2,-1,-3,0,-5xm124,-41v-6,9,0,27,9,28v-5,0,-7,3,-7,8r-33,0v1,-16,-8,-43,-9,-55v-2,15,-32,-2,-35,14r8,0v-19,4,-7,63,-42,44v-2,1,-5,1,-9,2v0,-6,5,-33,9,-56r31,-175v19,-3,11,57,18,67v1,8,-9,38,-8,47v4,-1,5,0,8,2r-9,4v-1,17,-6,19,4,25v-2,0,-2,3,-1,4r17,0v2,5,7,28,9,14v3,-29,-24,-81,-9,-103v0,-2,-2,-2,-6,-2v-5,-21,-19,-50,-3,-60v3,5,13,2,20,3v1,4,8,12,7,22r8,4r-8,0v1,15,4,31,6,47r14,4v-12,0,-13,18,-2,22v-3,31,2,62,13,90xm121,-58v0,-1,-2,-2,0,-2r0,2xm75,-91v1,3,-3,7,-2,2xm64,-228v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm77,-155v1,1,2,3,2,0r-2,0xm77,-135v2,-1,3,-3,0,-5v-1,2,-2,3,0,5xm104,-104v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm82,-109r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm110,-80v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm55,-128v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm108,-69v1,1,4,5,3,0r-3,0xm102,-70v3,0,0,-3,0,-1r0,1xm32,-1v3,0,4,-2,1,-4v-1,1,-3,3,-1,4xm99,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm56,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm80,-249v2,2,4,0,2,-2xm77,-249v2,2,4,0,2,-2xm38,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm35,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3","w":136},"\u00c5":{"d":"65,-268v24,-8,-17,-31,5,-34v17,-1,14,15,22,23v-5,14,-1,42,-22,39v-19,-7,8,-12,-1,-27xm69,-275v0,0,2,-3,0,1v-1,-1,-2,-1,-2,-3v0,2,1,3,2,2xm58,-242v-21,8,-20,-23,-19,-44v-1,-7,21,-25,22,-8v0,9,-11,10,-3,15v-3,10,0,20,0,37xm86,-237v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm97,-197v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm69,-135v1,0,1,4,0,4v-3,0,-3,-4,0,-4xm115,-89v1,2,2,3,0,5v-2,-2,-1,-3,0,-5xm124,-41v-6,9,0,27,9,28v-5,0,-7,3,-7,8r-33,0v1,-16,-8,-43,-9,-55v-2,15,-32,-2,-35,14r8,0v-19,4,-7,63,-42,44v-2,1,-5,1,-9,2v0,-6,5,-33,9,-56r31,-175v19,-3,11,57,18,67v1,8,-9,38,-8,47v4,-1,5,0,8,2r-9,4v-1,17,-6,19,4,25v-2,0,-2,3,-1,4r17,0v2,5,7,28,9,14v3,-29,-24,-81,-9,-103v0,-2,-2,-2,-6,-2v-5,-21,-19,-50,-3,-60v3,5,13,2,20,3v1,4,8,12,7,22r8,4r-8,0v1,15,4,31,6,47r14,4v-12,0,-13,18,-2,22v-3,31,2,62,13,90xm121,-58v0,-1,-2,-2,0,-2r0,2xm75,-91v1,3,-3,7,-2,2xm64,-228v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm77,-155v1,1,2,3,2,0r-2,0xm77,-135v2,-1,3,-3,0,-5v-1,2,-2,3,0,5xm104,-104v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm82,-109r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm110,-80v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm55,-128v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm108,-69v1,1,4,5,3,0r-3,0xm102,-70v3,0,0,-3,0,-1r0,1xm32,-1v3,0,4,-2,1,-4v-1,1,-3,3,-1,4","w":136},"\u00c7":{"d":"79,-236v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm96,-223v0,8,8,21,16,20v-4,14,-2,23,-3,46v-12,1,-15,4,-28,1v-2,-17,-5,-48,-21,-44v-2,-8,-1,-20,-1,-30v9,-1,30,8,37,7xm85,-154v3,2,3,4,0,5v-2,-2,-1,-3,0,-5xm42,-173v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm114,-84v2,3,1,6,0,9v-2,-3,-2,-6,0,-9xm44,-147v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm109,-79v2,0,3,3,0,4v-2,-1,-1,-3,0,-4xm107,-73v1,1,3,2,0,2r0,-2xm107,-82v1,6,-7,10,-10,4v1,-3,5,-4,10,-4xm107,-65v-1,2,-2,4,-2,0r2,0xm97,-58r13,0v-3,15,-4,11,-5,29v-3,-6,-2,4,-8,2r4,-7v-5,3,-7,-2,-18,-6v3,-5,16,4,18,-5v-7,1,-3,3,-10,0v0,-4,-2,-7,-6,-8v4,-3,10,-6,0,-5v1,0,8,-5,3,-7v-2,1,-5,2,-9,3r0,-17r13,0v-9,9,20,11,5,21xm77,-30v1,7,-15,6,-5,11v8,-2,5,-4,7,4v0,5,-3,7,-9,7v3,1,5,3,7,5v-1,0,-1,-1,-2,-1r-22,40v-1,0,-6,0,-13,1v-2,-10,15,-36,2,-38v-1,0,-2,1,-4,2v2,-13,-22,-12,-20,-29r9,0v-1,-7,-4,-8,-9,-5v-16,-3,-7,-41,-9,-62v-1,-56,-16,-134,46,-135r0,29v-14,10,-22,22,-13,40v-2,7,-3,23,-2,31v1,-1,2,-1,2,-2v-5,35,-5,75,6,100v10,-2,5,19,10,22v-2,-11,1,-25,12,-17v3,-1,5,-2,7,-3xm79,-56v2,2,2,4,0,5v-2,-2,-1,-3,0,-5xm83,-47v0,1,-3,4,-4,2v1,-1,2,-2,4,-2xm92,-29v2,0,3,3,0,4v-2,-1,-3,-3,0,-4xm97,-21v-1,1,-2,5,-3,3v1,-1,1,-2,3,-3xm83,-27v-1,1,-2,2,-3,2xm85,-19v2,1,1,4,0,1r0,-1xm90,-12v0,2,-8,6,-7,0r7,0xm48,-36v2,0,2,1,2,2xm14,-32v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm77,-219v2,0,1,-4,0,-4v-2,0,-1,4,0,4xm101,-171v2,0,2,0,2,-2xm51,-219v2,0,1,-4,0,-4v-3,0,-3,4,0,4xm88,-175v1,-1,2,-3,0,-5v-2,1,-3,4,0,5xm85,-75v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm103,-47r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm83,-66r0,-5v-2,1,-2,3,0,5xm95,-51v2,-2,1,-3,0,-5v-4,2,-4,3,0,5xm97,-47r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm90,-51v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm101,-36r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm38,-58r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm41,-26v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm30,-33v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm22,-23v3,-1,7,-2,0,-2r0,2","w":117},"\u00c9":{"d":"110,-240v0,2,0,4,-2,3v0,-2,0,-4,2,-3xm62,-231v15,-4,29,4,40,-3v-3,9,3,18,-5,32r-56,3v0,-15,1,-26,3,-34v2,9,20,-3,18,2xm44,-195v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm42,-166v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm44,-155v1,1,1,3,0,4v-2,0,-1,-4,0,-4xm42,-148v2,0,1,3,0,4v-2,-1,-3,-3,0,-4xm82,-109v-8,12,-25,-4,-37,5v-10,-14,-4,-48,23,-31v5,-2,16,-6,16,3v0,8,-1,15,-2,23xm37,-5v-1,11,-15,0,-26,3r0,-226v5,-1,14,-2,26,-3v-1,17,2,36,-1,51v-7,0,-4,6,-3,12r4,-3r0,166xm42,-95r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm42,-78v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm42,-60v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm44,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm101,-36v-2,11,1,24,-6,36v-18,2,-37,-3,-52,-1r1,1v-6,-6,-2,-27,0,-36v8,8,35,-7,47,3xm30,-184v-1,-6,-9,-3,-4,0v1,1,3,3,4,0xm19,-175v3,0,3,-4,0,-4v-2,0,-1,4,0,4xm50,-133v3,-1,3,-4,0,-5v-1,1,-2,4,0,5xm22,-155v2,-2,1,-3,0,-5v-3,2,-3,4,0,5xm68,-109v0,2,3,0,1,0r-1,0xm26,-146v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm26,-138v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm13,-142v4,0,8,-3,0,-2r0,2xm75,-32v2,0,3,-2,0,-2v-3,0,-1,2,0,2xm65,-32v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm88,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm64,-26v-1,-1,-2,-3,-2,0r2,0xm77,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm73,0v2,-1,1,-4,0,-5v-3,1,-3,4,0,5xm28,-186v0,1,-1,2,-2,2v0,-1,1,-2,2,-2xm60,-240v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":106},"\u00d1":{"d":"102,-273v6,1,9,2,10,8v-5,4,-13,20,-17,23v-35,5,-43,-30,-65,4v-11,-15,8,-46,30,-36v0,3,8,8,24,15v8,-4,8,-1,18,-14xm58,-272v2,1,2,1,2,-2xm129,-154v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm120,-149v0,4,-3,6,-5,3v1,-2,2,-3,5,-3xm121,-137v2,1,2,1,0,2r0,-2xm26,-228v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm111,-144v1,2,-1,2,-3,2xm105,-137v2,0,3,1,1,2xm69,-171v0,2,0,4,-3,3v0,-2,0,-4,3,-3xm129,-101v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm88,-135v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm76,-144v0,8,-3,11,-10,11v8,-3,6,-10,10,-11xm105,-129v7,1,3,-9,10,-8v4,0,6,4,6,14r10,0v-10,5,-17,12,-11,19r1,-5v0,9,-1,14,4,18v-6,-1,-1,8,-4,11v1,17,1,54,-2,75r-29,0v-4,-8,-24,-62,-24,-72v11,-2,22,-8,20,11v8,1,-1,-12,4,-14r15,0v1,-7,-23,-2,-15,-9v-1,-7,4,-17,-4,-18v-6,2,-9,4,-9,7r5,-2v-4,6,6,10,0,18r-16,0v2,-1,4,-2,1,-3v-1,1,-3,2,-5,3v0,-7,-25,-37,-16,-47r2,1v-10,-15,7,-28,1,-41r-5,3v3,-13,-2,-35,0,-54v11,0,7,36,18,38v-11,14,11,30,24,31v-7,0,-18,4,-22,0v0,11,-7,21,5,25v0,4,-2,2,-7,4v11,2,-2,20,5,24v3,-1,7,-29,15,-18v1,-1,6,-5,13,-13v-14,-18,-1,-65,-5,-99v10,0,22,2,25,-6v-2,7,4,6,9,6v-4,31,-1,40,-3,72v-4,8,-19,10,-16,29xm44,-164v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm77,-131v4,4,-4,13,-4,7v0,-2,1,-5,4,-7xm124,-66v2,0,3,3,0,4v-2,-1,-3,-3,0,-4xm40,-120v6,15,1,43,-14,31v1,5,-3,5,-8,5v-3,0,-6,-1,-7,-2r0,-81v6,0,9,-2,9,-8v-2,2,-8,3,-9,0v2,-17,-4,-40,2,-53v-4,8,7,17,10,5v10,2,7,-5,17,-5r0,108xm60,-82r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm100,0v0,-2,5,-1,6,0v-2,1,-4,1,-6,0xm92,-1v1,1,1,1,0,2v-2,0,-3,-2,0,-2xm40,-78v5,27,1,57,-4,77v-9,-4,-16,1,-25,1r0,-78v6,-5,19,0,29,0xm33,-217v2,-1,2,-4,0,-5v-2,1,-3,4,0,5xm36,-198v2,-1,0,-3,0,-1r0,1xm22,-204v5,-3,-2,-11,-7,-10v0,5,2,9,7,10xm111,-115v5,-3,-1,-10,-5,-10v-4,2,2,5,5,10xm57,-166v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm13,-202v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm26,-186v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm115,-97v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm18,-191v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm13,-193v2,0,2,-2,2,-4xm106,-109v-2,2,-5,3,-9,2v2,5,7,2,9,-2xm90,-111r0,-7v-3,2,-6,4,-7,7r7,0xm20,-164v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm108,-76v3,0,2,-3,0,-4v-2,2,-1,3,0,4xm55,-128v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm33,-146v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm29,-135v2,-1,3,-6,0,-7r0,7xm60,-102v2,-2,1,-3,0,-5v-2,1,-3,4,0,5xm22,-140v0,2,3,0,1,0r-1,0xm69,-89r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm33,-124v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm31,-111v1,-4,4,-10,0,-11r0,11xm86,-60v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm31,-104v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm31,-100v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm33,-93v-1,-1,-2,-3,-2,0r2,0xm13,-15v2,-2,3,-4,0,-5v-2,2,-1,3,0,5","w":130},"\u00d6":{"d":"98,-211v-2,1,-2,-4,-2,-6v3,1,4,4,2,6xm114,-195v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm45,-182v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm109,-211v2,23,7,43,0,65v-1,3,8,6,3,8r0,98v-10,12,-26,49,-53,35v-8,-21,21,-35,21,-51r0,-92r3,-3v-7,-26,-4,-57,-22,-51v2,-5,-5,-20,-2,-33v9,-1,15,0,13,11v3,-4,6,-15,9,-2v1,-7,9,-2,15,-2v0,1,-6,12,-4,15v-4,-2,-14,-3,-14,2v-1,13,20,2,25,7v4,0,6,-2,6,-7xm50,-109v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm49,-102v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm45,-64v-14,8,5,26,9,35r0,29v-74,-15,-39,-114,-47,-191v0,-13,4,-19,12,-19v-3,-22,24,-6,29,-25v2,0,4,-1,6,-1r0,30v-22,13,-14,56,-16,93v1,35,-1,34,7,49xm50,-71v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm43,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm87,-193v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm78,-202v1,1,4,5,3,0r-3,0xm79,-194v1,-1,3,-1,1,-2v-1,1,-3,1,-1,2xm107,-138v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm25,-215v-1,1,-2,6,0,7v0,-2,2,-5,0,-7xm107,-124v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm110,-118v0,-3,-4,-5,-3,0r3,0xm103,-122v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm102,-116v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm83,-122v-1,0,-2,4,0,4v1,-1,1,-3,0,-4xm37,-142v0,1,-2,2,0,2r0,-2xm38,-62v3,-1,3,-3,0,-4v-1,0,-1,3,0,4xm93,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm50,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm74,-249v2,2,4,0,2,-2xm71,-249v2,2,4,0,2,-2xm32,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm29,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3","w":118},"\u00dc":{"d":"124,-155v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm115,-133v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm113,-233v1,25,-2,58,2,71v-8,33,8,85,-7,111v-9,-6,-32,8,-29,-15r3,-164v17,0,15,-2,31,-3xm50,-155v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm50,-124v1,0,4,4,0,4v-2,0,-1,-4,0,-4xm108,-44v-1,-1,-3,-2,0,-2r0,2xm44,-53v-9,10,1,14,13,27r0,25v-59,2,-50,-66,-49,-127v2,-2,4,-4,0,-5r0,-96v20,2,28,-9,36,-1v-5,4,-7,23,3,26r-7,0v-2,25,5,54,-1,73v4,13,0,23,3,34v-1,-1,-2,-2,-2,-3v-1,16,3,30,-1,41v0,4,2,7,5,6xm113,-40v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm50,-102v3,1,3,3,0,5v-1,-2,-2,-3,0,-5xm97,-40v2,2,3,3,0,4v-3,-1,-2,-2,0,-4xm93,-29v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm46,-66v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm62,-29v4,-1,20,-28,26,-14v2,7,-9,5,-13,9v-2,4,12,2,13,8v-5,-2,-14,4,-6,4r20,0v-1,12,-26,28,-40,20r0,-27xm90,-221v3,-1,3,-5,0,-5v-1,0,-2,4,0,5xm17,-217v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm13,-220v2,0,1,-3,0,-3v-2,0,-3,3,0,3xm101,-104v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm95,-100v2,-1,2,-3,0,-4v-2,1,-2,3,0,4xm110,-62v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm20,-118v2,-1,1,-2,0,-4v-3,2,-3,3,0,4xm28,-113v0,-2,-4,-3,-4,0v0,2,4,3,4,0xm11,-122r0,-4v-2,0,-2,1,-2,2v0,1,0,2,2,2xm84,-44v-2,0,-1,3,-1,4v2,0,2,-3,1,-4xm17,-80v2,-1,0,-3,0,-1r0,1xm13,-66v3,1,2,-3,2,-5v-3,-1,-2,3,-2,5xm26,-53v-1,-1,-2,-3,-2,0r2,0xm15,-58v5,-1,6,-4,0,-4r0,4xm15,-49v2,0,6,1,5,-2v-2,0,-6,-1,-5,2xm99,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm56,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm80,-249v2,2,4,0,2,-2xm77,-249v2,2,4,0,2,-2xm38,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm35,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3","w":123},"\u00e1":{"d":"86,-235v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm143,-87v1,3,-3,2,-5,2v-1,-3,3,-2,5,-2xm132,-83v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm69,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm71,-131v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm132,-61v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm128,-56v2,1,3,2,-1,2xm125,-87v-19,5,3,26,-4,39v8,7,0,30,12,34v-4,0,-7,4,-8,10v-12,-2,-37,7,-32,-10v0,-11,-5,-17,-15,-19r0,-4v-14,0,-15,7,-19,-4v-24,1,-7,55,-45,39v-4,3,-7,3,-7,-3v-1,-24,24,-74,5,-93v3,-2,5,-10,5,-24v10,0,14,-8,7,-11v-6,0,-12,2,-16,5v-5,-4,-12,-12,-5,-16v8,2,16,9,24,5r-7,0v21,-17,15,-64,27,-90v4,0,6,1,9,2v4,34,11,74,6,105v0,-1,-1,-4,-3,-4v-1,3,6,7,6,12v-9,3,-17,24,-8,25v9,-4,18,-10,21,2v4,-21,-19,-67,-3,-83v-16,0,-14,-47,-14,-60v8,-3,11,4,25,1v3,6,10,13,6,22v3,1,6,2,9,5v-11,-2,-2,7,-6,13v3,10,0,36,17,38v-21,2,3,15,-4,27v3,8,7,11,4,21v1,4,15,7,13,16xm69,-100r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm12,-120v0,2,0,2,-2,2xm10,-104v-1,5,-9,1,-9,8v-1,-4,-6,-2,-11,-2v1,-6,12,-7,20,-6xm69,-31v1,1,4,4,0,3r0,-3xm79,-150v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm120,-88v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm64,-89v4,-2,2,-3,-1,-2v0,1,0,1,1,2xm66,-89v0,1,-4,5,0,4v2,-2,4,-7,0,-4xm10,-135v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm75,-50v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm53,-50v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm70,-245v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":137},"\u00e0":{"d":"82,-255v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm61,-236v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm54,-257v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm60,-238v2,1,4,-2,2,-2v-1,0,-2,0,-2,2xm86,-235v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm143,-87v1,3,-3,2,-5,2v-1,-3,3,-2,5,-2xm132,-83v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm69,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm71,-131v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm132,-61v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm128,-56v2,1,3,2,-1,2xm125,-87v-19,5,3,26,-4,39v8,7,0,30,12,34v-4,0,-7,4,-8,10v-12,-2,-37,7,-32,-10v0,-11,-5,-17,-15,-19r0,-4v-14,0,-15,7,-19,-4v-24,1,-7,55,-45,39v-4,3,-7,3,-7,-3v-1,-24,24,-74,5,-93v3,-2,5,-10,5,-24v10,0,14,-8,7,-11v-6,0,-12,2,-16,5v-5,-4,-12,-12,-5,-16v8,2,16,9,24,5r-7,0v21,-17,15,-64,27,-90v4,0,6,1,9,2v4,34,11,74,6,105v0,-1,-1,-4,-3,-4v-1,3,6,7,6,12v-9,3,-17,24,-8,25v9,-4,18,-10,21,2v4,-21,-19,-67,-3,-83v-16,0,-14,-47,-14,-60v8,-3,11,4,25,1v3,6,10,13,6,22v3,1,6,2,9,5v-11,-2,-2,7,-6,13v3,10,0,36,17,38v-21,2,3,15,-4,27v3,8,7,11,4,21v1,4,15,7,13,16xm69,-100r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm12,-120v0,2,0,2,-2,2xm10,-104v-1,5,-9,1,-9,8v-1,-4,-6,-2,-11,-2v1,-6,12,-7,20,-6xm69,-31v1,1,4,4,0,3r0,-3xm79,-150v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm120,-88v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm64,-89v4,-2,2,-3,-1,-2v0,1,0,1,1,2xm66,-89v0,1,-4,5,0,4v2,-2,4,-7,0,-4xm10,-135v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm75,-50v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm53,-50v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2","w":137},"\u00e2":{"d":"81,-277v1,0,1,0,1,1v-1,0,-1,0,-1,-1xm94,-261r0,2v-1,-1,-1,-1,0,-2xm90,-261r0,2v-1,-1,-1,-1,0,-2xm101,-245v-1,2,-3,0,-1,0r1,0xm34,-237v7,-7,17,-60,41,-43v3,0,23,40,24,43v-24,8,-22,-25,-33,-31v-9,14,-7,35,-32,31xm66,-282r1,0r-1,0xm86,-235v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm143,-87v1,3,-3,2,-5,2v-1,-3,3,-2,5,-2xm132,-83v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm69,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm71,-131v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm132,-61v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm128,-56v2,1,3,2,-1,2xm125,-87v-19,5,3,26,-4,39v8,7,0,30,12,34v-4,0,-7,4,-8,10v-12,-2,-37,7,-32,-10v0,-11,-5,-17,-15,-19r0,-4v-14,0,-15,7,-19,-4v-24,1,-7,55,-45,39v-4,3,-7,3,-7,-3v-1,-24,24,-74,5,-93v3,-2,5,-10,5,-24v10,0,14,-8,7,-11v-6,0,-12,2,-16,5v-5,-4,-12,-12,-5,-16v8,2,16,9,24,5r-7,0v21,-17,15,-64,27,-90v4,0,6,1,9,2v4,34,11,74,6,105v0,-1,-1,-4,-3,-4v-1,3,6,7,6,12v-9,3,-17,24,-8,25v9,-4,18,-10,21,2v4,-21,-19,-67,-3,-83v-16,0,-14,-47,-14,-60v8,-3,11,4,25,1v3,6,10,13,6,22v3,1,6,2,9,5v-11,-2,-2,7,-6,13v3,10,0,36,17,38v-21,2,3,15,-4,27v3,8,7,11,4,21v1,4,15,7,13,16xm69,-100r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm12,-120v0,2,0,2,-2,2xm10,-104v-1,5,-9,1,-9,8v-1,-4,-6,-2,-11,-2v1,-6,12,-7,20,-6xm69,-31v1,1,4,4,0,3r0,-3xm79,-150v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm120,-88v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm64,-89v4,-2,2,-3,-1,-2v0,1,0,1,1,2xm66,-89v0,1,-4,5,0,4v2,-2,4,-7,0,-4xm10,-135v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm75,-50v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm53,-50v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2","w":137},"\u00e4":{"d":"86,-235v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm143,-87v1,3,-3,2,-5,2v-1,-3,3,-2,5,-2xm132,-83v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm69,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm71,-131v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm132,-61v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm128,-56v2,1,3,2,-1,2xm125,-87v-19,5,3,26,-4,39v8,7,0,30,12,34v-4,0,-7,4,-8,10v-12,-2,-37,7,-32,-10v0,-11,-5,-17,-15,-19r0,-4v-14,0,-15,7,-19,-4v-24,1,-7,55,-45,39v-4,3,-7,3,-7,-3v-1,-24,24,-74,5,-93v3,-2,5,-10,5,-24v10,0,14,-8,7,-11v-6,0,-12,2,-16,5v-5,-4,-12,-12,-5,-16v8,2,16,9,24,5r-7,0v21,-17,15,-64,27,-90v4,0,6,1,9,2v4,34,11,74,6,105v0,-1,-1,-4,-3,-4v-1,3,6,7,6,12v-9,3,-17,24,-8,25v9,-4,18,-10,21,2v4,-21,-19,-67,-3,-83v-16,0,-14,-47,-14,-60v8,-3,11,4,25,1v3,6,10,13,6,22v3,1,6,2,9,5v-11,-2,-2,7,-6,13v3,10,0,36,17,38v-21,2,3,15,-4,27v3,8,7,11,4,21v1,4,15,7,13,16xm69,-100r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm12,-120v0,2,0,2,-2,2xm10,-104v-1,5,-9,1,-9,8v-1,-4,-6,-2,-11,-2v1,-6,12,-7,20,-6xm69,-31v1,1,4,4,0,3r0,-3xm79,-150v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm120,-88v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm64,-89v4,-2,2,-3,-1,-2v0,1,0,1,1,2xm66,-89v0,1,-4,5,0,4v2,-2,4,-7,0,-4xm10,-135v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm75,-50v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm53,-50v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm102,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm59,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm83,-249v2,2,4,0,2,-2xm80,-249v2,2,4,0,2,-2xm41,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm38,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3","w":137},"\u00e3":{"d":"80,-259v10,0,12,-16,26,-12v5,10,-12,21,-15,29v-35,6,-43,-31,-65,4v-13,-15,8,-46,30,-36v0,3,8,8,24,15xm55,-271v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm86,-235v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm143,-87v1,3,-3,2,-5,2v-1,-3,3,-2,5,-2xm132,-83v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm69,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm71,-131v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm132,-61v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm128,-56v2,1,3,2,-1,2xm125,-87v-19,5,3,26,-4,39v8,7,0,30,12,34v-4,0,-7,4,-8,10v-12,-2,-37,7,-32,-10v0,-11,-5,-17,-15,-19r0,-4v-14,0,-15,7,-19,-4v-24,1,-7,55,-45,39v-4,3,-7,3,-7,-3v-1,-24,24,-74,5,-93v3,-2,5,-10,5,-24v10,0,14,-8,7,-11v-6,0,-12,2,-16,5v-5,-4,-12,-12,-5,-16v8,2,16,9,24,5r-7,0v21,-17,15,-64,27,-90v4,0,6,1,9,2v4,34,11,74,6,105v0,-1,-1,-4,-3,-4v-1,3,6,7,6,12v-9,3,-17,24,-8,25v9,-4,18,-10,21,2v4,-21,-19,-67,-3,-83v-16,0,-14,-47,-14,-60v8,-3,11,4,25,1v3,6,10,13,6,22v3,1,6,2,9,5v-11,-2,-2,7,-6,13v3,10,0,36,17,38v-21,2,3,15,-4,27v3,8,7,11,4,21v1,4,15,7,13,16xm69,-100r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm12,-120v0,2,0,2,-2,2xm10,-104v-1,5,-9,1,-9,8v-1,-4,-6,-2,-11,-2v1,-6,12,-7,20,-6xm69,-31v1,1,4,4,0,3r0,-3xm79,-150v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm120,-88v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm64,-89v4,-2,2,-3,-1,-2v0,1,0,1,1,2xm66,-89v0,1,-4,5,0,4v2,-2,4,-7,0,-4xm10,-135v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm75,-50v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm53,-50v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2","w":137},"\u00e5":{"d":"65,-268v24,-8,-17,-31,5,-34v17,-1,14,15,22,23v-5,14,-1,42,-22,39v-19,-7,8,-12,-1,-27xm69,-275v0,0,2,-3,0,1v-1,-1,-2,-1,-2,-3v0,2,1,3,2,2xm58,-242v-21,8,-20,-23,-19,-44v-1,-7,21,-25,22,-8v0,9,-11,10,-3,15v-3,10,0,20,0,37xm86,-235v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm143,-87v1,3,-3,2,-5,2v-1,-3,3,-2,5,-2xm132,-83v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm69,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm71,-131v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm132,-61v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm128,-56v2,1,3,2,-1,2xm125,-87v-19,5,3,26,-4,39v8,7,0,30,12,34v-4,0,-7,4,-8,10v-12,-2,-37,7,-32,-10v0,-11,-5,-17,-15,-19r0,-4v-14,0,-15,7,-19,-4v-24,1,-7,55,-45,39v-4,3,-7,3,-7,-3v-1,-24,24,-74,5,-93v3,-2,5,-10,5,-24v10,0,14,-8,7,-11v-6,0,-12,2,-16,5v-5,-4,-12,-12,-5,-16v8,2,16,9,24,5r-7,0v21,-17,15,-64,27,-90v4,0,6,1,9,2v4,34,11,74,6,105v0,-1,-1,-4,-3,-4v-1,3,6,7,6,12v-9,3,-17,24,-8,25v9,-4,18,-10,21,2v4,-21,-19,-67,-3,-83v-16,0,-14,-47,-14,-60v8,-3,11,4,25,1v3,6,10,13,6,22v3,1,6,2,9,5v-11,-2,-2,7,-6,13v3,10,0,36,17,38v-21,2,3,15,-4,27v3,8,7,11,4,21v1,4,15,7,13,16xm69,-100r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm12,-120v0,2,0,2,-2,2xm10,-104v-1,5,-9,1,-9,8v-1,-4,-6,-2,-11,-2v1,-6,12,-7,20,-6xm69,-31v1,1,4,4,0,3r0,-3xm79,-150v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm120,-88v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm64,-89v4,-2,2,-3,-1,-2v0,1,0,1,1,2xm66,-89v0,1,-4,5,0,4v2,-2,4,-7,0,-4xm10,-135v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm75,-50v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm53,-50v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2","w":137},"\u00e7":{"d":"79,-238v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm96,-224v0,7,8,20,16,20v-2,14,-1,25,-2,46v-13,1,-18,4,-29,1v-3,-16,-2,-48,-21,-44v-3,-8,0,-21,-1,-31v6,-1,30,8,37,8xm85,-155v3,2,3,3,0,5v-2,-2,-1,-3,0,-5xm41,-175v3,1,3,4,0,5v-1,-1,-1,-4,0,-5xm114,-84v3,2,2,6,0,8v-2,-2,-3,-6,0,-8xm44,-148v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm110,-80v2,2,1,3,0,4v-3,0,-2,-3,0,-4xm108,-73v1,1,3,2,0,2r0,-2xm107,-82v1,6,-7,8,-10,4v2,-3,5,-4,10,-4xm108,-65v-1,1,-4,5,-3,0r3,0xm92,-80v-6,5,4,12,10,12v1,6,-5,5,-5,10r14,0v-6,13,-2,17,-6,29v-3,-6,0,4,-8,2r4,-7v-5,3,-7,-2,-18,-6v4,-5,15,5,18,-5v-7,1,-3,3,-10,0v0,-4,-2,-7,-6,-8v4,-3,10,-6,0,-5v0,0,9,-5,3,-7v-2,1,-5,2,-9,3r0,-18r13,0xm77,-30v0,7,-15,5,-5,12v9,-3,4,-6,7,4v0,4,-3,6,-9,7v2,1,8,3,6,4v-11,0,-12,53,-37,40v-2,-7,16,-35,2,-38r-4,2v6,-10,-24,-15,-20,-29r9,0r-2,-8v-9,8,-17,-1,-16,-17v4,-67,-23,-181,47,-179r0,29v-31,19,-6,46,-18,72v4,4,4,-6,5,-2v0,4,-2,6,-5,7v12,10,-7,36,4,46v-5,20,1,34,7,48v10,-2,5,19,10,22v-1,-10,0,-25,12,-17v3,-1,5,-2,7,-3xm79,-56v2,2,3,3,0,4v-1,-1,-1,-3,0,-4xm83,-47v0,1,-3,4,-4,2v1,-1,2,-2,4,-2xm92,-29v3,0,3,3,0,4v-2,-1,-1,-3,0,-4xm97,-21r-2,4v0,-2,0,-3,2,-4xm83,-27v-1,1,-2,2,-3,2xm85,-18v3,0,0,3,0,1r0,-1xm90,-12v0,2,-8,6,-7,0r7,0xm48,-36v1,0,2,1,2,2xm13,-32v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm77,-220v2,-2,1,-3,0,-5v-1,2,-2,3,0,5xm101,-172v2,1,2,-1,2,-3xm50,-220v3,-2,3,-3,0,-5v-1,2,-2,3,0,5xm88,-176v2,-1,3,-4,0,-5v-3,1,-2,4,0,5xm85,-76v3,-1,3,-2,0,-4v-2,2,-1,3,0,4xm103,-47v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm83,-67r0,-4v-2,1,-2,3,0,4xm95,-52v1,-1,1,-3,0,-4v-3,2,-2,3,0,4xm97,-47v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm90,-52v3,-1,2,-2,0,-4v-2,2,-3,3,0,4xm101,-36r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm39,-60v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm40,-27r1,-1xm30,-33v1,-1,1,-1,0,-2v-2,1,-2,1,0,2xm22,-23v3,-1,6,-2,0,-2r0,2","w":117},"\u00e9":{"d":"110,-233v-2,-1,-5,-6,0,-5r0,5xm140,-149v0,1,-1,3,-1,1xm45,-231v14,3,44,1,57,-1v0,14,0,18,-5,34r-54,1xm132,-157v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm47,-192v-1,1,-2,3,-2,0r2,0xm51,-181v9,3,3,11,-2,15r-2,0v1,-3,3,-8,4,-15xm54,-163v0,3,-1,6,-3,8v1,-3,-2,-9,3,-8xm41,-164v1,-2,2,-3,2,1xm51,-153v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm45,-155v2,1,2,3,0,5r0,-5xm41,-145v1,-1,2,-2,2,1xm-3,-179v1,1,2,3,0,4v-3,0,-2,-3,0,-4xm-12,-170v-4,-3,-9,-1,-14,0v0,-6,11,-15,19,-14v-2,5,-7,9,-5,14xm-7,-170v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm-38,-166v10,13,52,1,42,-17v8,-10,9,-12,7,-44v14,-1,23,-2,27,-2r0,53v-2,0,-3,0,-4,1v9,6,3,28,5,42v8,-8,29,-3,44,-4v2,6,1,39,-5,35v-12,-1,-23,-8,-34,-2r0,-20r-5,2r0,118v-5,10,-15,-6,-25,2v-4,-6,-6,-16,-4,-25v0,-13,-16,-31,-6,-45v-5,2,-13,14,-9,-4v5,3,8,0,15,0v-2,-20,5,-46,-5,-59v9,-6,-11,-9,-9,-20v-4,2,-12,1,-17,0v0,7,-12,4,-19,2v-1,4,-2,6,-5,6v0,-12,2,-18,7,-19xm43,-98r0,39v-3,-3,-3,-36,0,-39xm47,-54v-1,1,-2,3,-2,0r2,0xm101,-37v-1,11,0,25,-6,37v-21,5,-40,-11,-50,0r-2,-39v14,7,39,1,58,2xm4,-87r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm-3,-83v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm-15,-85v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm-18,-83v1,1,1,3,0,4v-3,0,-3,-3,0,-4xm-10,-63v-3,-2,-2,-6,-2,-11xm-18,-72v-2,-1,-4,-2,0,-2r0,2xm-17,-50v9,-1,7,-8,12,-11v2,16,-6,20,-14,27v1,-6,1,-6,2,-16xm6,-39v0,16,-3,19,-7,8v0,-5,2,-8,7,-8xm-7,-41r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm-5,-18v1,0,1,0,1,1xm-14,-28v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm-14,-20v3,0,5,2,3,4v0,0,-1,-1,-3,-4xm6,-162v-3,0,-4,2,-5,5v4,-1,5,-2,5,-5xm8,-54v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm10,-48v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm5,-48v3,-1,3,-3,0,-4v-1,0,-1,3,0,4xm58,-244v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":110},"\u00e8":{"d":"72,-257v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm51,-238v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm44,-259v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm50,-240v2,1,4,-2,2,-2v-1,0,-2,0,-2,2xm110,-233v-2,-1,-5,-6,0,-5r0,5xm140,-149v0,1,-1,3,-1,1xm45,-231v14,3,44,1,57,-1v0,14,0,18,-5,34r-54,1xm132,-157v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm47,-192v-1,1,-2,3,-2,0r2,0xm51,-181v9,3,3,11,-2,15r-2,0v1,-3,3,-8,4,-15xm54,-163v0,3,-1,6,-3,8v1,-3,-2,-9,3,-8xm41,-164v1,-2,2,-3,2,1xm51,-153v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm45,-155v2,1,2,3,0,5r0,-5xm41,-145v1,-1,2,-2,2,1xm-3,-179v1,1,2,3,0,4v-3,0,-2,-3,0,-4xm-12,-170v-4,-3,-9,-1,-14,0v0,-6,11,-15,19,-14v-2,5,-7,9,-5,14xm-7,-170v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm-38,-166v10,13,52,1,42,-17v8,-10,9,-12,7,-44v14,-1,23,-2,27,-2r0,53v-2,0,-3,0,-4,1v9,6,3,28,5,42v8,-8,29,-3,44,-4v2,6,1,39,-5,35v-12,-1,-23,-8,-34,-2r0,-20r-5,2r0,118v-5,10,-15,-6,-25,2v-4,-6,-6,-16,-4,-25v0,-13,-16,-31,-6,-45v-5,2,-13,14,-9,-4v5,3,8,0,15,0v-2,-20,5,-46,-5,-59v9,-6,-11,-9,-9,-20v-4,2,-12,1,-17,0v0,7,-12,4,-19,2v-1,4,-2,6,-5,6v0,-12,2,-18,7,-19xm43,-98r0,39v-3,-3,-3,-36,0,-39xm47,-54v-1,1,-2,3,-2,0r2,0xm101,-37v-1,11,0,25,-6,37v-21,5,-40,-11,-50,0r-2,-39v14,7,39,1,58,2xm4,-87r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm-3,-83v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm-15,-85v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm-18,-83v1,1,1,3,0,4v-3,0,-3,-3,0,-4xm-10,-63v-3,-2,-2,-6,-2,-11xm-18,-72v-2,-1,-4,-2,0,-2r0,2xm-17,-50v9,-1,7,-8,12,-11v2,16,-6,20,-14,27v1,-6,1,-6,2,-16xm6,-39v0,16,-3,19,-7,8v0,-5,2,-8,7,-8xm-7,-41r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm-5,-18v1,0,1,0,1,1xm-14,-28v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm-14,-20v3,0,5,2,3,4v0,0,-1,-1,-3,-4xm6,-162v-3,0,-4,2,-5,5v4,-1,5,-2,5,-5xm8,-54v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm10,-48v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm5,-48v3,-1,3,-3,0,-4v-1,0,-1,3,0,4","w":110},"\u00ea":{"d":"68,-277v1,0,1,0,1,1v-1,0,-1,0,-1,-1xm81,-261r0,2v-1,-1,-1,-1,0,-2xm77,-261r0,2v-1,-1,-1,-1,0,-2xm88,-245v-1,2,-3,0,-1,0r1,0xm21,-237v7,-7,17,-60,41,-43v3,0,23,40,24,43v-24,8,-22,-25,-33,-31v-9,14,-7,35,-32,31xm53,-282r1,0r-1,0xm110,-233v-2,-1,-5,-6,0,-5r0,5xm140,-149v0,1,-1,3,-1,1xm45,-231v14,3,44,1,57,-1v0,14,0,18,-5,34r-54,1xm132,-157v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm47,-192v-1,1,-2,3,-2,0r2,0xm51,-181v9,3,3,11,-2,15r-2,0v1,-3,3,-8,4,-15xm54,-163v0,3,-1,6,-3,8v1,-3,-2,-9,3,-8xm41,-164v1,-2,2,-3,2,1xm51,-153v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm45,-155v2,1,2,3,0,5r0,-5xm41,-145v1,-1,2,-2,2,1xm-3,-179v1,1,2,3,0,4v-3,0,-2,-3,0,-4xm-12,-170v-4,-3,-9,-1,-14,0v0,-6,11,-15,19,-14v-2,5,-7,9,-5,14xm-7,-170v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm-38,-166v10,13,52,1,42,-17v8,-10,9,-12,7,-44v14,-1,23,-2,27,-2r0,53v-2,0,-3,0,-4,1v9,6,3,28,5,42v8,-8,29,-3,44,-4v2,6,1,39,-5,35v-12,-1,-23,-8,-34,-2r0,-20r-5,2r0,118v-5,10,-15,-6,-25,2v-4,-6,-6,-16,-4,-25v0,-13,-16,-31,-6,-45v-5,2,-13,14,-9,-4v5,3,8,0,15,0v-2,-20,5,-46,-5,-59v9,-6,-11,-9,-9,-20v-4,2,-12,1,-17,0v0,7,-12,4,-19,2v-1,4,-2,6,-5,6v0,-12,2,-18,7,-19xm43,-98r0,39v-3,-3,-3,-36,0,-39xm47,-54v-1,1,-2,3,-2,0r2,0xm101,-37v-1,11,0,25,-6,37v-21,5,-40,-11,-50,0r-2,-39v14,7,39,1,58,2xm4,-87r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm-3,-83v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm-15,-85v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm-18,-83v1,1,1,3,0,4v-3,0,-3,-3,0,-4xm-10,-63v-3,-2,-2,-6,-2,-11xm-18,-72v-2,-1,-4,-2,0,-2r0,2xm-17,-50v9,-1,7,-8,12,-11v2,16,-6,20,-14,27v1,-6,1,-6,2,-16xm6,-39v0,16,-3,19,-7,8v0,-5,2,-8,7,-8xm-7,-41r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm-5,-18v1,0,1,0,1,1xm-14,-28v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm-14,-20v3,0,5,2,3,4v0,0,-1,-1,-3,-4xm6,-162v-3,0,-4,2,-5,5v4,-1,5,-2,5,-5xm8,-54v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm10,-48v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm5,-48v3,-1,3,-3,0,-4v-1,0,-1,3,0,4","w":110},"\u00eb":{"d":"110,-233v-2,-1,-5,-6,0,-5r0,5xm140,-149v0,1,-1,3,-1,1xm45,-231v14,3,44,1,57,-1v0,14,0,18,-5,34r-54,1xm132,-157v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm47,-192v-1,1,-2,3,-2,0r2,0xm51,-181v9,3,3,11,-2,15r-2,0v1,-3,3,-8,4,-15xm54,-163v0,3,-1,6,-3,8v1,-3,-2,-9,3,-8xm41,-164v1,-2,2,-3,2,1xm51,-153v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm45,-155v2,1,2,3,0,5r0,-5xm41,-145v1,-1,2,-2,2,1xm-3,-179v1,1,2,3,0,4v-3,0,-2,-3,0,-4xm-12,-170v-4,-3,-9,-1,-14,0v0,-6,11,-15,19,-14v-2,5,-7,9,-5,14xm-7,-170v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm-38,-166v10,13,52,1,42,-17v8,-10,9,-12,7,-44v14,-1,23,-2,27,-2r0,53v-2,0,-3,0,-4,1v9,6,3,28,5,42v8,-8,29,-3,44,-4v2,6,1,39,-5,35v-12,-1,-23,-8,-34,-2r0,-20r-5,2r0,118v-5,10,-15,-6,-25,2v-4,-6,-6,-16,-4,-25v0,-13,-16,-31,-6,-45v-5,2,-13,14,-9,-4v5,3,8,0,15,0v-2,-20,5,-46,-5,-59v9,-6,-11,-9,-9,-20v-4,2,-12,1,-17,0v0,7,-12,4,-19,2v-1,4,-2,6,-5,6v0,-12,2,-18,7,-19xm43,-98r0,39v-3,-3,-3,-36,0,-39xm47,-54v-1,1,-2,3,-2,0r2,0xm101,-37v-1,11,0,25,-6,37v-21,5,-40,-11,-50,0r-2,-39v14,7,39,1,58,2xm4,-87r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm-3,-83v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm-15,-85v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm-18,-83v1,1,1,3,0,4v-3,0,-3,-3,0,-4xm-10,-63v-3,-2,-2,-6,-2,-11xm-18,-72v-2,-1,-4,-2,0,-2r0,2xm-17,-50v9,-1,7,-8,12,-11v2,16,-6,20,-14,27v1,-6,1,-6,2,-16xm6,-39v0,16,-3,19,-7,8v0,-5,2,-8,7,-8xm-7,-41r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm-5,-18v1,0,1,0,1,1xm-14,-28v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm-14,-20v3,0,5,2,3,4v0,0,-1,-1,-3,-4xm6,-162v-3,0,-4,2,-5,5v4,-1,5,-2,5,-5xm8,-54v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm10,-48v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm5,-48v3,-1,3,-3,0,-4v-1,0,-1,3,0,4xm91,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm48,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm72,-249v2,2,4,0,2,-2xm69,-249v2,2,4,0,2,-2xm30,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm27,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3","w":110},"\u00ed":{"d":"47,-152v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm41,-39v6,17,-1,53,-22,34v-5,0,-8,2,-9,5r0,-227v13,4,25,-8,31,-1r0,189xm13,-216v-3,1,5,10,4,5v-1,-1,-1,-4,-4,-5xm32,-242v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":50},"\u00ec":{"d":"44,-256v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm23,-237v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm16,-258v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm22,-239v2,1,4,-2,2,-2v-1,0,-2,0,-2,2xm47,-152v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm41,-39v6,17,-1,53,-22,34v-5,0,-8,2,-9,5r0,-227v13,4,25,-8,31,-1r0,189xm13,-216v-3,1,5,10,4,5v-1,-1,-1,-4,-4,-5","w":50},"\u00ee":{"d":"40,-278v1,0,1,0,1,1v-1,0,-1,0,-1,-1xm53,-262r0,2v-1,-1,-1,-1,0,-2xm49,-262r0,2v-1,-1,-1,-1,0,-2xm60,-246v-1,2,-3,0,-1,0r1,0xm-7,-238v7,-7,17,-60,41,-43v3,0,23,40,24,43v-24,8,-22,-25,-33,-31v-9,14,-7,35,-32,31xm25,-283r1,0r-1,0xm47,-152v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm41,-39v6,17,-1,53,-22,34v-5,0,-8,2,-9,5r0,-227v13,4,25,-8,31,-1r0,189xm13,-216v-3,1,5,10,4,5v-1,-1,-1,-4,-4,-5","w":50},"\u00ef":{"d":"47,-152v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm41,-39v6,17,-1,53,-22,34v-5,0,-8,2,-9,5r0,-227v13,4,25,-8,31,-1r0,189xm13,-216v-3,1,5,10,4,5v-1,-1,-1,-4,-4,-5xm65,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm22,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm46,-249v2,2,4,0,2,-2xm43,-249v2,2,4,0,2,-2xm4,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm1,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3","w":50},"\u00f1":{"d":"74,-259v12,-2,13,-18,26,-12v5,9,-11,22,-15,29v-35,5,-43,-30,-65,4v-11,-16,8,-46,31,-36v0,3,7,8,23,15xm48,-272v2,1,2,1,2,-2xm126,-155v-1,-1,-3,-2,0,-2r0,2xm115,-153v1,4,-1,6,-5,5v0,-3,2,-5,5,-5xm106,-148v0,2,0,2,-2,2xm126,-102v-1,-1,-3,-2,0,-2r0,2xm85,-139v2,0,1,3,0,4v-2,-1,-3,-3,0,-4xm150,-67v1,4,-5,1,-7,2v-1,-4,5,-1,7,-2xm121,-92v3,2,3,4,0,5v-1,-2,-1,-3,0,-5xm71,-148v6,5,-1,12,-8,11v1,-3,3,-9,8,-11xm139,-63v-1,1,-2,3,-2,0r2,0xm10,-231v1,26,12,-8,18,7v2,-9,17,-11,19,2v-7,13,19,31,9,41v7,4,9,5,9,11v-2,0,-6,-4,-5,0v4,8,11,12,23,14v-2,1,-23,3,-23,6v-2,12,3,22,14,15v0,11,-4,8,-12,7v3,11,-5,20,3,24v2,-14,5,-20,17,-20v1,-5,6,-8,9,-11v-5,-3,-11,-13,-4,-17r0,-81v9,0,21,2,23,-5v17,8,3,24,10,38r-3,41v-10,5,-15,11,-17,17v8,0,25,-2,17,6v-1,7,7,7,10,12v-8,0,-12,4,-12,13r5,-2v-5,18,5,35,10,46v-10,1,-6,7,-4,15v-2,6,25,15,24,21v-12,2,-10,4,-29,2v0,18,-8,37,-14,20v-5,8,-15,-1,-20,5v-2,-4,-6,-8,-4,-13v-11,-2,-17,11,-18,-5v-8,-2,-22,5,-22,-5v21,0,15,-22,4,-30v16,6,13,-24,24,-30v-6,-5,-18,8,-15,0v1,-15,-22,-37,-13,-55v-13,8,-1,31,-6,50v-4,3,-12,2,-13,7r17,0v-11,14,12,11,11,25v-3,0,-9,-3,-11,-1v0,13,0,38,-6,52v-11,-3,-14,9,-18,0v-1,4,-7,7,-9,2v2,-25,-3,-57,3,-78v2,1,4,1,4,-2v-1,-1,-3,-2,-7,-5r0,-79v6,0,9,-1,9,-5v-4,0,-8,0,-9,-3v2,-16,-4,-40,2,-52xm133,-61v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm130,-26v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm133,-15v-4,0,-5,-1,-5,-5v3,0,5,2,5,5xm75,-10v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm39,-181v0,-14,3,-33,-1,-45xm106,-135v-2,-3,-4,-3,-6,0v0,2,2,2,4,2v1,0,2,-1,2,-2xm102,-128v-1,2,3,6,2,2v0,-1,-1,-2,-2,-2xm106,-120v2,-1,4,-2,0,-2r0,2xm19,-207v3,-3,-2,-9,-4,-8v0,3,1,6,4,8xm43,-174v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm39,-172v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm97,-109v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm80,-115v4,0,9,1,7,-5v-3,1,-5,2,-7,5xm46,-172v-11,1,-7,14,-7,26v6,-5,7,-22,7,-26xm121,-65v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm102,-83v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm97,-86v1,-1,1,-1,0,-2v-2,1,-2,1,0,2xm85,-94v-1,-7,3,-18,-7,-15v3,5,1,10,7,15xm26,-142v2,0,2,0,2,-2v-2,0,-2,0,-2,2xm80,-85v1,3,5,2,5,-2v-2,-2,-5,-2,-5,2xm121,-41v3,-1,3,-3,0,-5v-1,2,-1,3,0,5xm133,-31v2,0,1,-3,0,-4v-3,1,-3,3,0,4xm78,-87v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm124,-37r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm29,-123v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm28,-102v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm67,-52v2,0,2,0,2,-2xm71,-46v-4,-1,-5,1,-4,5v2,0,3,-1,4,-5xm65,-35v0,-1,-1,-2,-2,-2v-1,0,-2,1,-2,2v0,1,1,2,2,2v1,0,2,-1,2,-2xm41,-168v2,2,3,4,0,5v-2,-2,-1,-3,0,-5","w":132},"\u00f3":{"d":"78,-159v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm68,-33v26,-13,16,-69,16,-115v0,-33,3,-42,-18,-48v-4,-4,-5,-25,-4,-36v12,3,47,0,35,19v5,-1,4,2,4,6v-4,-2,-17,-4,-19,0v3,8,18,4,28,5v1,-3,2,-6,5,-3r1,157v12,2,24,-7,27,-4v0,0,-1,2,-3,4r16,0v-11,3,-17,7,-17,10v2,-2,4,3,4,5r-7,0v2,7,8,3,13,3v0,9,-24,2,-28,2r2,-5r-8,0v-17,20,-29,40,-53,29v-1,-7,2,-18,-2,-22v-2,8,5,30,-6,24v-14,4,-21,-13,-40,-24r-4,-133r-5,0v0,-3,5,-9,3,-13v-3,2,-8,5,-13,9v0,-8,11,-5,13,-14v3,-11,4,-29,16,-29v-1,-19,23,-14,29,-25r5,-1r0,32v-14,9,-5,10,-4,24v1,3,41,17,12,20v1,-6,-10,-2,-14,-3v0,-7,-1,-11,-3,-13v-6,4,-13,89,0,109v0,4,-8,12,0,11v-7,7,7,6,11,15v3,3,5,4,8,4xm54,-107v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm53,-100v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm-12,-159v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm115,-29v3,0,0,3,0,1r0,-1xm-23,-154v-1,-6,6,-9,9,-5v-2,4,-5,5,-9,5xm54,-70v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm-31,-67r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm84,-189v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm49,-181v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm110,-118v1,2,2,4,2,0r-2,0xm62,-161v4,-2,0,-5,-2,-7v-3,3,0,5,2,7xm106,-118r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm58,-31v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm61,-163v0,-1,1,-4,1,-2v0,0,-1,1,-1,2xm67,-242v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35"},"\u00f2":{"d":"72,-258v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm51,-239v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm44,-260v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm50,-241v2,1,4,-2,2,-2v-1,0,-2,0,-2,2xm78,-159v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm68,-33v26,-13,16,-69,16,-115v0,-33,3,-42,-18,-48v-4,-4,-5,-25,-4,-36v12,3,47,0,35,19v5,-1,4,2,4,6v-4,-2,-17,-4,-19,0v3,8,18,4,28,5v1,-3,2,-6,5,-3r1,157v12,2,24,-7,27,-4v0,0,-1,2,-3,4r16,0v-11,3,-17,7,-17,10v2,-2,4,3,4,5r-7,0v2,7,8,3,13,3v0,9,-24,2,-28,2r2,-5r-8,0v-17,20,-29,40,-53,29v-1,-7,2,-18,-2,-22v-2,8,5,30,-6,24v-14,4,-21,-13,-40,-24r-4,-133r-5,0v0,-3,5,-9,3,-13v-3,2,-8,5,-13,9v0,-8,11,-5,13,-14v3,-11,4,-29,16,-29v-1,-19,23,-14,29,-25r5,-1r0,32v-14,9,-5,10,-4,24v1,3,41,17,12,20v1,-6,-10,-2,-14,-3v0,-7,-1,-11,-3,-13v-6,4,-13,89,0,109v0,4,-8,12,0,11v-7,7,7,6,11,15v3,3,5,4,8,4xm54,-107v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm53,-100v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm-12,-159v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm115,-29v3,0,0,3,0,1r0,-1xm-23,-154v-1,-6,6,-9,9,-5v-2,4,-5,5,-9,5xm54,-70v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm-31,-67r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm84,-189v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm49,-181v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm110,-118v1,2,2,4,2,0r-2,0xm62,-161v4,-2,0,-5,-2,-7v-3,3,0,5,2,7xm106,-118r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm58,-31v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm61,-163v0,-1,1,-4,1,-2v0,0,-1,1,-1,2"},"\u00f4":{"d":"76,-278v1,0,1,0,1,1v-1,0,-1,0,-1,-1xm89,-262r0,2v-1,-1,-1,-1,0,-2xm85,-262r0,2v-1,-1,-1,-1,0,-2xm96,-246v-1,2,-3,0,-1,0r1,0xm29,-238v7,-7,17,-60,41,-43v3,0,23,40,24,43v-24,8,-22,-25,-33,-31v-9,14,-7,35,-32,31xm61,-283r1,0r-1,0xm78,-159v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm68,-33v26,-13,16,-69,16,-115v0,-33,3,-42,-18,-48v-4,-4,-5,-25,-4,-36v12,3,47,0,35,19v5,-1,4,2,4,6v-4,-2,-17,-4,-19,0v3,8,18,4,28,5v1,-3,2,-6,5,-3r1,157v12,2,24,-7,27,-4v0,0,-1,2,-3,4r16,0v-11,3,-17,7,-17,10v2,-2,4,3,4,5r-7,0v2,7,8,3,13,3v0,9,-24,2,-28,2r2,-5r-8,0v-17,20,-29,40,-53,29v-1,-7,2,-18,-2,-22v-2,8,5,30,-6,24v-14,4,-21,-13,-40,-24r-4,-133r-5,0v0,-3,5,-9,3,-13v-3,2,-8,5,-13,9v0,-8,11,-5,13,-14v3,-11,4,-29,16,-29v-1,-19,23,-14,29,-25r5,-1r0,32v-14,9,-5,10,-4,24v1,3,41,17,12,20v1,-6,-10,-2,-14,-3v0,-7,-1,-11,-3,-13v-6,4,-13,89,0,109v0,4,-8,12,0,11v-7,7,7,6,11,15v3,3,5,4,8,4xm54,-107v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm53,-100v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm-12,-159v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm115,-29v3,0,0,3,0,1r0,-1xm-23,-154v-1,-6,6,-9,9,-5v-2,4,-5,5,-9,5xm54,-70v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm-31,-67r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm84,-189v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm49,-181v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm110,-118v1,2,2,4,2,0r-2,0xm62,-161v4,-2,0,-5,-2,-7v-3,3,0,5,2,7xm106,-118r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm58,-31v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm61,-163v0,-1,1,-4,1,-2v0,0,-1,1,-1,2"},"\u00f6":{"d":"78,-159v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm68,-33v26,-13,16,-69,16,-115v0,-33,3,-42,-18,-48v-4,-4,-5,-25,-4,-36v12,3,47,0,35,19v5,-1,4,2,4,6v-4,-2,-17,-4,-19,0v3,8,18,4,28,5v1,-3,2,-6,5,-3r1,157v12,2,24,-7,27,-4v0,0,-1,2,-3,4r16,0v-11,3,-17,7,-17,10v2,-2,4,3,4,5r-7,0v2,7,8,3,13,3v0,9,-24,2,-28,2r2,-5r-8,0v-17,20,-29,40,-53,29v-1,-7,2,-18,-2,-22v-2,8,5,30,-6,24v-14,4,-21,-13,-40,-24r-4,-133r-5,0v0,-3,5,-9,3,-13v-3,2,-8,5,-13,9v0,-8,11,-5,13,-14v3,-11,4,-29,16,-29v-1,-19,23,-14,29,-25r5,-1r0,32v-14,9,-5,10,-4,24v1,3,41,17,12,20v1,-6,-10,-2,-14,-3v0,-7,-1,-11,-3,-13v-6,4,-13,89,0,109v0,4,-8,12,0,11v-7,7,7,6,11,15v3,3,5,4,8,4xm54,-107v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm53,-100v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm-12,-159v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm115,-29v3,0,0,3,0,1r0,-1xm-23,-154v-1,-6,6,-9,9,-5v-2,4,-5,5,-9,5xm54,-70v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm-31,-67r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm84,-189v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm49,-181v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm110,-118v1,2,2,4,2,0r-2,0xm62,-161v4,-2,0,-5,-2,-7v-3,3,0,5,2,7xm106,-118r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm58,-31v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm61,-163v0,-1,1,-4,1,-2v0,0,-1,1,-1,2xm96,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm53,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm77,-249v2,2,4,0,2,-2xm74,-249v2,2,4,0,2,-2xm35,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm32,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3"},"\u00f5":{"d":"95,-273v6,1,9,2,10,8v-5,4,-13,19,-17,23v-35,5,-43,-30,-65,4v-11,-15,8,-46,30,-36v0,3,8,8,24,15v8,-4,8,-1,18,-14xm51,-272v2,1,2,1,2,-2xm78,-159v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm68,-33v26,-13,16,-69,16,-115v0,-33,3,-42,-18,-48v-4,-4,-5,-25,-4,-36v12,3,47,0,35,19v5,-1,4,2,4,6v-4,-2,-17,-4,-19,0v3,8,18,4,28,5v1,-3,2,-6,5,-3r1,157v12,2,24,-7,27,-4v0,0,-1,2,-3,4r16,0v-11,3,-17,7,-17,10v2,-2,4,3,4,5r-7,0v2,7,8,3,13,3v0,9,-24,2,-28,2r2,-5r-8,0v-17,20,-29,40,-53,29v-1,-7,2,-18,-2,-22v-2,8,5,30,-6,24v-14,4,-21,-13,-40,-24r-4,-133r-5,0v0,-3,5,-9,3,-13v-3,2,-8,5,-13,9v0,-8,11,-5,13,-14v3,-11,4,-29,16,-29v-1,-19,23,-14,29,-25r5,-1r0,32v-14,9,-5,10,-4,24v1,3,41,17,12,20v1,-6,-10,-2,-14,-3v0,-7,-1,-11,-3,-13v-6,4,-13,89,0,109v0,4,-8,12,0,11v-7,7,7,6,11,15v3,3,5,4,8,4xm54,-107v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm53,-100v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm-12,-159v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm115,-29v3,0,0,3,0,1r0,-1xm-23,-154v-1,-6,6,-9,9,-5v-2,4,-5,5,-9,5xm54,-70v1,2,2,3,0,5v-3,-1,-3,-3,0,-5xm-31,-67r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm84,-189v1,-2,2,-3,0,-5v-3,1,-2,3,0,5xm49,-181v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm110,-118v1,2,2,4,2,0r-2,0xm62,-161v4,-2,0,-5,-2,-7v-3,3,0,5,2,7xm106,-118r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm58,-31v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm61,-163v0,-1,1,-4,1,-2v0,0,-1,1,-1,2"},"\u00fa":{"d":"162,-150v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm167,-148v3,7,-1,12,-9,11v1,-4,4,-7,9,-11xm167,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm160,-135v0,2,1,5,-2,4xm130,-152v-1,1,-2,3,-2,0r2,0xm119,-133v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm86,-229v12,2,19,-1,31,-3v2,19,-3,44,2,60v-7,38,8,99,-7,129v-2,-17,-13,-7,-28,-11xm58,-152v-1,1,-2,3,-2,0r2,0xm58,-122v-1,1,-2,3,-2,0r2,0xm58,-100v-1,1,-2,3,-2,0r2,0xm117,-39v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm104,-39v-1,1,-2,3,-2,0r2,0xm62,-72v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm45,-72v1,1,12,6,7,9v-3,0,-6,-4,-5,2v-1,18,7,22,15,30v-1,9,3,23,-2,29v-9,0,-15,0,-22,2v1,-2,2,-3,3,-4v-2,-7,-34,-14,-24,-21v0,-5,-4,-7,-10,-7r0,-11v-18,4,-29,5,-43,4v0,-3,2,-9,7,-20v2,15,24,9,35,7v14,-17,7,-85,6,-124v-3,7,-6,11,-8,11r0,-21v8,0,10,-6,6,-13r-13,0v13,-3,16,-7,15,-23r-8,4v3,-17,27,-6,41,-15v11,5,-10,27,9,31v-21,10,-1,65,-9,89v3,15,2,18,0,41xm62,-43v-4,-5,-5,-15,-2,-22v10,0,0,15,2,22xm83,-38v-1,4,13,7,14,10v-5,0,-17,-1,-11,4r21,0v-3,13,-27,31,-40,20r0,-27v4,0,21,-28,26,-13v2,5,-4,7,-10,6xm4,-59v1,2,-1,2,-3,2xm-3,-74v7,2,4,14,0,15v-6,-4,-8,1,-13,1v-2,-6,14,-12,13,-16xm-3,-33v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm99,-100v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm12,-179v3,0,2,-3,0,-4v-2,2,-1,3,0,4xm6,-172v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm25,-61v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm30,-52v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm10,-46v3,1,5,-3,2,-4xm-8,-64v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm-14,-41v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm-31,-39v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm72,-244v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":128},"\u00f9":{"d":"80,-257v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm59,-238v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm52,-259v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm58,-240v2,1,4,-2,2,-2v-1,0,-2,0,-2,2xm162,-150v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm167,-148v3,7,-1,12,-9,11v1,-4,4,-7,9,-11xm167,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm160,-135v0,2,1,5,-2,4xm130,-152v-1,1,-2,3,-2,0r2,0xm119,-133v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm86,-229v12,2,19,-1,31,-3v2,19,-3,44,2,60v-7,38,8,99,-7,129v-2,-17,-13,-7,-28,-11xm58,-152v-1,1,-2,3,-2,0r2,0xm58,-122v-1,1,-2,3,-2,0r2,0xm58,-100v-1,1,-2,3,-2,0r2,0xm117,-39v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm104,-39v-1,1,-2,3,-2,0r2,0xm62,-72v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm45,-72v1,1,12,6,7,9v-3,0,-6,-4,-5,2v-1,18,7,22,15,30v-1,9,3,23,-2,29v-9,0,-15,0,-22,2v1,-2,2,-3,3,-4v-2,-7,-34,-14,-24,-21v0,-5,-4,-7,-10,-7r0,-11v-18,4,-29,5,-43,4v0,-3,2,-9,7,-20v2,15,24,9,35,7v14,-17,7,-85,6,-124v-3,7,-6,11,-8,11r0,-21v8,0,10,-6,6,-13r-13,0v13,-3,16,-7,15,-23r-8,4v3,-17,27,-6,41,-15v11,5,-10,27,9,31v-21,10,-1,65,-9,89v3,15,2,18,0,41xm62,-43v-4,-5,-5,-15,-2,-22v10,0,0,15,2,22xm83,-38v-1,4,13,7,14,10v-5,0,-17,-1,-11,4r21,0v-3,13,-27,31,-40,20r0,-27v4,0,21,-28,26,-13v2,5,-4,7,-10,6xm4,-59v1,2,-1,2,-3,2xm-3,-74v7,2,4,14,0,15v-6,-4,-8,1,-13,1v-2,-6,14,-12,13,-16xm-3,-33v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm99,-100v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm12,-179v3,0,2,-3,0,-4v-2,2,-1,3,0,4xm6,-172v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm25,-61v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm30,-52v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm10,-46v3,1,5,-3,2,-4xm-8,-64v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm-14,-41v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm-31,-39v2,-1,1,-3,0,-4v-2,0,-3,3,0,4","w":128},"\u00fb":{"d":"77,-278v1,0,1,0,1,1v-1,0,-1,0,-1,-1xm90,-262r0,2v-1,-1,-1,-1,0,-2xm86,-262r0,2v-1,-1,-1,-1,0,-2xm97,-246v-1,2,-3,0,-1,0r1,0xm30,-238v7,-7,17,-60,41,-43v3,0,23,40,24,43v-24,8,-22,-25,-33,-31v-9,14,-7,35,-32,31xm62,-283r1,0r-1,0xm162,-150v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm167,-148v3,7,-1,12,-9,11v1,-4,4,-7,9,-11xm167,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm160,-135v0,2,1,5,-2,4xm130,-152v-1,1,-2,3,-2,0r2,0xm119,-133v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm86,-229v12,2,19,-1,31,-3v2,19,-3,44,2,60v-7,38,8,99,-7,129v-2,-17,-13,-7,-28,-11xm58,-152v-1,1,-2,3,-2,0r2,0xm58,-122v-1,1,-2,3,-2,0r2,0xm58,-100v-1,1,-2,3,-2,0r2,0xm117,-39v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm104,-39v-1,1,-2,3,-2,0r2,0xm62,-72v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm45,-72v1,1,12,6,7,9v-3,0,-6,-4,-5,2v-1,18,7,22,15,30v-1,9,3,23,-2,29v-9,0,-15,0,-22,2v1,-2,2,-3,3,-4v-2,-7,-34,-14,-24,-21v0,-5,-4,-7,-10,-7r0,-11v-18,4,-29,5,-43,4v0,-3,2,-9,7,-20v2,15,24,9,35,7v14,-17,7,-85,6,-124v-3,7,-6,11,-8,11r0,-21v8,0,10,-6,6,-13r-13,0v13,-3,16,-7,15,-23r-8,4v3,-17,27,-6,41,-15v11,5,-10,27,9,31v-21,10,-1,65,-9,89v3,15,2,18,0,41xm62,-43v-4,-5,-5,-15,-2,-22v10,0,0,15,2,22xm83,-38v-1,4,13,7,14,10v-5,0,-17,-1,-11,4r21,0v-3,13,-27,31,-40,20r0,-27v4,0,21,-28,26,-13v2,5,-4,7,-10,6xm4,-59v1,2,-1,2,-3,2xm-3,-74v7,2,4,14,0,15v-6,-4,-8,1,-13,1v-2,-6,14,-12,13,-16xm-3,-33v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm99,-100v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm12,-179v3,0,2,-3,0,-4v-2,2,-1,3,0,4xm6,-172v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm25,-61v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm30,-52v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm10,-46v3,1,5,-3,2,-4xm-8,-64v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm-14,-41v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm-31,-39v2,-1,1,-3,0,-4v-2,0,-3,3,0,4","w":128},"\u00fc":{"d":"162,-150v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm167,-148v3,7,-1,12,-9,11v1,-4,4,-7,9,-11xm167,-135v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm160,-135v0,2,1,5,-2,4xm130,-152v-1,1,-2,3,-2,0r2,0xm119,-133v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm86,-229v12,2,19,-1,31,-3v2,19,-3,44,2,60v-7,38,8,99,-7,129v-2,-17,-13,-7,-28,-11xm58,-152v-1,1,-2,3,-2,0r2,0xm58,-122v-1,1,-2,3,-2,0r2,0xm58,-100v-1,1,-2,3,-2,0r2,0xm117,-39v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm104,-39v-1,1,-2,3,-2,0r2,0xm62,-72v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm45,-72v1,1,12,6,7,9v-3,0,-6,-4,-5,2v-1,18,7,22,15,30v-1,9,3,23,-2,29v-9,0,-15,0,-22,2v1,-2,2,-3,3,-4v-2,-7,-34,-14,-24,-21v0,-5,-4,-7,-10,-7r0,-11v-18,4,-29,5,-43,4v0,-3,2,-9,7,-20v2,15,24,9,35,7v14,-17,7,-85,6,-124v-3,7,-6,11,-8,11r0,-21v8,0,10,-6,6,-13r-13,0v13,-3,16,-7,15,-23r-8,4v3,-17,27,-6,41,-15v11,5,-10,27,9,31v-21,10,-1,65,-9,89v3,15,2,18,0,41xm62,-43v-4,-5,-5,-15,-2,-22v10,0,0,15,2,22xm83,-38v-1,4,13,7,14,10v-5,0,-17,-1,-11,4r21,0v-3,13,-27,31,-40,20r0,-27v4,0,21,-28,26,-13v2,5,-4,7,-10,6xm4,-59v1,2,-1,2,-3,2xm-3,-74v7,2,4,14,0,15v-6,-4,-8,1,-13,1v-2,-6,14,-12,13,-16xm-3,-33v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm99,-100v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm12,-179v3,0,2,-3,0,-4v-2,2,-1,3,0,4xm6,-172v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm25,-61v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm30,-52v2,-2,1,-3,0,-5v-2,2,-2,4,0,5xm10,-46v3,1,5,-3,2,-4xm-8,-64v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm-14,-41v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm-31,-39v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm99,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm56,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm80,-249v2,2,4,0,2,-2xm77,-249v2,2,4,0,2,-2xm38,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm35,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3","w":128},"\u00b0":{"d":"31,-240v25,-8,-17,-31,6,-34v16,-1,14,15,21,23v-5,13,-1,42,-22,39v-20,-7,8,-12,-1,-27xm37,-248v0,1,-1,1,-2,2v-1,-1,-2,-1,-2,-2v0,1,1,2,2,2v1,0,2,-1,2,-2xm15,-212v-16,-10,-16,-62,8,-61v13,6,-9,18,1,23v-3,9,1,22,0,36v-2,0,-5,1,-9,2","w":61},"\u00a2":{"d":"79,-89v0,0,2,1,0,1r0,-1xm100,-188v-1,11,-1,26,-1,44v-12,1,-17,3,-25,1v-2,-17,-6,-50,-22,-45r0,-10r0,9v-15,11,-22,25,-14,44v-3,5,-2,4,1,10v-9,23,1,40,-3,60v5,1,5,8,0,9v5,21,16,38,30,28v-1,5,-17,5,-6,12v3,4,8,-5,8,1v1,3,-4,5,-7,9r14,-1v-2,1,-12,7,-1,6v0,8,-6,2,-8,0v2,-1,2,-2,0,-3v-9,2,-4,16,-6,25r-13,0v0,-12,2,-29,-10,-22v-6,0,-12,-6,-17,-18r-2,1r0,-8r9,0v-1,-6,-2,-7,-3,-13v-8,9,-17,1,-15,-11v2,-58,-18,-149,36,-156r0,-20r14,0v0,10,-2,25,9,22v3,4,13,5,17,5v1,11,6,18,15,21xm94,-54r2,7v-1,-6,-5,-4,-8,0v0,1,1,1,1,2v-4,-2,-10,-2,-12,-6v8,11,24,-9,10,-3v-4,-4,-11,-8,-6,-13v3,-1,5,-3,9,-3v-10,6,24,2,4,16xm98,-47v-2,2,-3,8,-2,2v0,-2,0,-2,2,-2xm92,-45r0,-1r0,1xm94,-44r-1,0r1,0xm87,-30v2,1,-1,4,-2,5xm70,-33v0,-2,4,-4,5,-3xm68,-204v5,-2,4,-10,-2,-9v-2,3,-4,8,2,9xm94,-63v-3,0,-3,4,-3,7v4,0,10,-5,3,-7xm89,-63v0,-3,-4,-6,-6,-2v-2,7,1,3,6,2xm94,-54r0,0r0,0xm82,-64v1,-1,0,0,0,-2r0,2xm85,-56v6,2,8,-4,4,-7v0,5,-8,2,-4,7xm36,-75v-4,2,-4,7,0,9r0,-9xm28,-39v5,-3,5,-5,0,-8v-3,2,-3,6,0,8xm33,-36r-6,0r1,1v-6,0,-13,-1,-8,6","w":108},"\u00a7":{"d":"117,-241v-4,0,-5,-3,0,-2r0,2xm83,-271v0,1,-1,3,-1,1xm97,-261v-3,6,17,19,13,33v-2,10,-27,8,-28,9v-4,-5,-16,-23,-25,-24v2,-10,-6,-26,9,-23v7,0,18,2,31,5xm113,-156v0,2,0,4,-3,3xm68,-198v-1,1,-3,1,-4,0v1,-2,3,-1,4,0xm112,-137v9,18,1,45,-17,51v4,6,13,17,12,25v16,9,7,32,0,46v-2,2,-18,-1,-12,7v-6,7,-26,23,-34,7v1,-5,-2,-12,2,-6v10,1,39,1,21,-7v-12,-1,-20,9,-23,-2v27,-2,25,-44,3,-52v-9,-11,-22,-13,-38,-33v-22,-27,-26,-55,-6,-78v-27,-29,-13,-94,33,-87r0,26v-32,18,13,65,33,67r-3,2v13,2,21,19,24,33v2,0,3,0,5,1xm53,-27v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm34,-50v-2,14,41,41,19,55v-23,-5,-59,-18,-47,-51v11,-2,21,-3,28,-4xm42,5v-1,0,-2,2,-2,0r2,0xm13,-8v2,1,1,3,0,4v-2,-1,-3,-3,0,-4xm113,-120v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm64,-150v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm74,-101v16,-17,6,-25,-10,-44v2,-1,2,-2,1,-4v-6,0,-13,-3,-21,-8v-16,17,14,44,30,56xm113,-44v1,-3,-2,-4,-2,-1v0,1,1,1,2,1xm75,5v2,0,1,-3,0,-4v-2,1,-3,4,0,4xm48,0v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm38,-3v1,1,2,2,2,-1","w":120},"\u00b6":{"d":"67,-193v1,1,2,4,0,5v-3,-1,-3,-4,0,-5xm121,-148v2,-22,0,-28,-2,-51v8,-8,-5,-37,23,-27v3,1,8,2,13,3v0,23,5,57,-9,66v2,0,4,0,7,2r0,150v-6,-3,-5,11,-11,3r-18,-5r0,-139xm78,-171v0,2,4,6,0,5r0,-5xm80,-162v2,2,3,4,0,5v-3,-1,-2,-3,0,-5xm80,-151v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm82,-11v5,-10,-8,-41,3,-50v-4,-2,-5,-17,-1,-21r0,-139v9,-1,14,-6,25,-7v0,3,0,6,4,5r0,150v-2,2,-5,2,-6,2v13,8,8,47,8,66v-10,4,-33,8,-33,-6xm12,-166v-8,-30,2,-70,46,-62v4,13,31,-7,23,27v-8,-2,-10,-3,-18,0v0,-5,-2,-9,-5,-14v-8,9,2,24,-15,30v-6,27,5,64,30,54v10,-1,7,29,5,36v-26,-8,-38,6,-56,-18v-15,-19,-10,-24,-15,-44v3,-3,5,-6,5,-9xm2,-179v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm137,-160v0,1,5,2,5,0v-1,-1,-3,-1,-5,0xm149,-140v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm143,-137v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm42,-223v2,1,6,-1,3,-2v-1,0,-2,1,-3,2xm44,-190v1,-1,3,-2,0,-3r0,3xm40,-177v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm111,-89v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm109,-83v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm104,-89v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm38,-151v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm103,-68v-1,-1,-4,-1,-5,0v2,1,4,1,5,0xm11,-153v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm84,-38v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm83,-32v1,-1,1,-1,0,-2v-1,1,-1,1,0,2","w":161},"\u00df":{"d":"234,-197v-5,-1,-7,-5,0,-4r0,4xm201,-229v-1,-1,-3,-2,0,-2r0,2xm222,-201v13,21,2,30,-21,30v-4,2,-6,-12,-15,-22v-2,3,-5,5,-8,8v-2,-15,-5,-22,-1,-42v23,2,40,0,45,26xm184,-185v1,4,-2,14,-5,7v1,-5,2,-7,5,-7xm186,-147v-4,0,-5,-4,0,-3r0,3xm199,-134v3,1,2,2,0,4v-2,-2,-3,-3,0,-4xm239,-90v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm84,-237v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm234,-86v2,2,2,4,0,5v-2,-2,-1,-3,0,-5xm180,-156v-17,25,31,22,36,49v0,3,10,8,14,4v1,6,14,15,0,17v3,18,5,37,-2,52v-1,-1,-2,-1,-3,0v2,10,-18,7,-13,17v-5,13,-35,29,-33,0v6,-2,-1,-5,0,-9v11,-7,32,-37,9,-51v-8,5,-17,-1,-18,-13v-7,1,-1,-6,-2,-11v-1,1,-3,2,-6,3v1,-5,-13,-24,-20,-22v-7,-20,-17,-24,-18,-55v-15,7,-27,0,-41,7v2,-11,-10,-31,-22,-32v-2,-7,-8,-33,6,-32v8,0,18,3,31,7v-3,7,10,10,12,25v4,-4,6,-5,12,-3v-6,10,-3,16,-11,10v-3,9,12,15,13,5v2,-12,21,-43,46,-39r0,30v-19,16,-7,20,-2,43xm156,-95v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm91,-160v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm175,-71v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm148,-90v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm146,-90v-1,4,-7,8,-9,3v0,-3,5,-3,9,-3xm70,-152v-2,2,-4,2,-5,0r5,0xm114,-102v0,2,0,4,-2,3xm153,-64v0,15,13,29,22,34v0,13,4,33,-11,26r-5,4v-15,-15,-45,-27,-35,-60v16,-3,25,-4,29,-4xm85,-120v24,17,44,66,22,93v-2,2,-17,5,-11,13v-8,5,-9,17,-24,16v-11,0,-11,-14,-9,-19v2,8,19,2,28,4v2,-5,0,-8,-6,-8v-8,0,-15,2,-20,4v-6,-9,21,-28,18,-37v0,-9,-6,-21,-18,-35v2,-2,2,-3,2,-6v-20,3,-59,-44,-57,-63v-5,-40,4,-73,44,-74r0,31v-32,18,9,74,34,78xm131,-15v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm56,-34v0,1,-1,2,-2,2v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2v1,0,2,1,2,2xm36,-63v-2,15,41,49,18,64v-23,-6,-60,-22,-47,-59v12,-3,21,-5,29,-5xm41,1v1,0,1,0,1,1xm14,-14v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm208,-118v0,-1,-1,-2,-3,-2v-2,1,-1,5,0,5v2,0,3,-1,3,-3xm229,-89v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm179,-92v0,-2,-4,-3,-4,0v0,2,4,3,4,0xm208,-17v-1,-7,-21,-9,-23,0r23,0xm114,-61r0,-4r0,4xm157,-8v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm65,-96v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm78,-1v0,-1,-1,-2,-2,-2v-2,0,-1,4,0,4v1,0,2,-1,2,-2xm50,-5v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm41,-7v1,-1,1,-2,0,-3v-1,1,-1,2,0,3","w":238},"\u00ae":{"d":"121,-217v0,0,4,9,0,5r0,-5xm139,-195v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm97,-179r0,2r0,-2xm108,-156v-2,0,-3,-3,0,-2r0,2xm89,-4v-8,-21,23,-33,21,-50r0,-93v5,-15,-1,-44,-10,-52v4,-7,-9,-9,-11,-15r0,-21v11,-2,4,4,5,20r10,-13v0,1,0,9,3,7v3,-4,4,-11,11,-8v-3,12,-21,5,-15,21v4,0,10,-1,8,5v8,-2,15,0,22,-1v9,21,-6,51,6,64v-9,24,-2,69,-4,101v-9,11,-22,45,-46,35xm108,-118v-1,0,-1,-3,0,-4v1,1,1,3,0,4xm67,-160v-1,-1,-3,-2,0,-2r0,2xm10,-208v-1,-1,-2,-6,0,-7v1,2,1,5,0,7xm90,-111v7,17,7,38,19,55v-3,4,-16,12,-25,6v0,-11,-9,-40,-12,-54v-5,3,-7,-2,-7,-8r0,-12r15,-4v7,-18,4,-37,-15,-40r0,-16v14,-4,30,-3,29,13r2,-3v8,5,6,24,11,35v-2,1,-12,28,-17,28xm38,-154v0,1,0,1,-1,1xm37,-150v0,1,-1,1,-2,1xm106,-75r0,1r0,-1xm34,-138v7,-12,10,-26,8,-47v5,-6,9,3,10,6v3,0,7,-1,11,-5r1,35v9,3,14,6,14,10v-6,0,-6,-1,-16,0v1,17,-2,38,3,52v-8,8,8,47,-23,38v0,-27,6,-70,-5,-90v-1,0,-2,0,-3,1xm33,-54v8,15,19,27,16,53v-67,-19,-32,-119,-40,-193v0,-10,4,-15,12,-15v-10,-19,24,-11,28,-25r0,24v-22,15,-15,63,-16,102v2,-1,3,1,3,2v-11,16,12,45,-3,52xm114,-189v6,-4,7,-11,0,-14v-4,4,-4,11,0,14xm111,-199v-1,-7,-6,-8,-13,-9v3,8,9,4,13,9xm104,-201v1,2,2,3,2,-1xm110,-195v0,0,1,4,1,2xm133,-124v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm90,-166r0,-2v-1,0,-1,2,0,2xm133,-122v-1,3,1,6,2,3v0,-1,-1,-2,-2,-3xm128,-122v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm97,-147v1,0,2,-3,0,-3v-2,0,-1,3,0,3xm127,-116v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm21,-209v4,5,5,0,7,-5r-3,-10v-2,2,-4,7,-4,15xm46,-179r1,-6v-3,1,-4,5,-1,6xm68,-142v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm30,-179v1,-1,1,-2,0,-3v-2,1,-2,2,0,3xm42,-142v1,-1,1,-2,0,-3v-1,1,-2,2,0,3xm85,-91v-1,-1,-1,-4,-2,-2xm50,-125v1,-1,1,-2,0,-3v-1,1,-2,2,0,3xm68,-105v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm62,-111v1,-2,-2,-3,-2,-1v0,1,1,1,2,1xm81,-88v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm62,-104v0,-5,-8,-5,-11,-5v-2,4,10,4,11,5xm20,-140v1,-2,2,-1,1,-2xm46,-95v1,-1,1,-2,0,-3v-1,1,-2,2,0,3xm32,-100v3,0,2,-3,0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm34,-66v2,-2,2,-4,0,-5v-2,2,-1,3,0,5xm23,-62v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm28,-51v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm113,-195v1,1,1,1,0,2v-1,-1,-1,-1,0,-2","w":143},"\u00a9":{"d":"121,-217v0,0,4,9,0,5r0,-5xm139,-195v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm84,-185v0,0,0,2,-1,2v0,0,0,-2,1,-2xm72,-181v12,2,27,2,28,15v9,2,0,19,2,29v-23,14,-13,-18,-30,-28r0,-16xm54,-181v1,1,2,2,0,3v-2,-1,-1,-2,0,-3xm89,-4v-8,-20,23,-33,21,-50r0,-93v5,-15,-1,-44,-10,-52v4,-7,-9,-9,-11,-15r0,-21v10,-1,5,4,5,20r10,-13v0,1,0,10,3,7v3,-4,4,-11,11,-8v-3,12,-21,5,-15,21v4,0,10,-1,8,5v8,-2,15,0,22,-1v9,21,-6,51,6,64v-9,23,-2,69,-4,101v-9,10,-22,46,-46,35xm108,-118v-1,0,-1,-3,0,-4v1,1,1,3,0,4xm10,-208v-1,-1,-2,-6,0,-7v1,2,1,5,0,7xm41,-175r0,2r0,-2xm62,-147v1,1,2,2,0,3v-2,-1,-1,-2,0,-3xm38,-169v2,1,0,8,-4,8xm105,-93v2,0,1,2,0,2r0,-2xm63,-130v1,0,1,0,1,1xm102,-89v1,-1,5,-1,2,0r-2,0xm100,-92v1,4,-4,5,-5,3v1,-2,3,-3,5,-3xm101,-86v3,0,1,3,0,1r0,-1xm84,-91v11,-1,13,9,18,12v-2,0,-6,-1,-6,1v11,-1,3,8,5,16v-4,9,-9,-3,-14,-5v7,-4,-3,-9,4,-14v-2,0,-4,1,-7,1r0,-11xm60,-116v5,17,-6,42,10,56v-1,7,3,22,-6,16v-9,5,-26,-17,-11,-16v0,-5,-10,-1,-11,-6v-4,-30,7,-72,-9,-90r0,48v2,1,4,3,1,4r-1,-1v3,21,-2,34,7,42v-2,3,-2,3,-7,9v8,15,19,27,16,53v-67,-19,-32,-119,-40,-193v0,-10,4,-15,12,-15v-12,-19,26,-10,28,-25r0,24v-13,9,-17,29,-16,54v11,-8,18,-26,37,-25v-1,14,1,24,8,29r-18,0v0,14,3,20,0,31v1,-2,2,-3,4,-3xm84,-76v2,1,1,2,0,3v-1,-1,-2,-2,0,-3xm87,-71v0,2,-2,1,-3,1v1,-1,1,-1,3,-1xm92,-60r0,2r0,-2xm95,-55v0,2,0,2,-2,2v0,-1,1,-2,2,-2xm88,-54v0,0,2,1,0,1r0,-1xm79,-58v2,8,19,7,5,16v-4,-4,-8,2,-12,-3v-3,-11,3,-21,15,-13v-2,3,-4,0,-8,0xm44,-60v1,0,1,0,1,1xm114,-189v6,-4,7,-11,0,-14v-4,4,-4,11,0,14xm111,-199v-1,-7,-6,-8,-13,-9v3,8,9,4,13,9xm104,-201v1,2,2,3,2,-1xm110,-195v0,0,1,4,1,2xm105,-194r0,-2v-1,1,-1,1,0,2xm133,-124v2,-1,1,-3,0,-4v-2,0,-3,3,0,4xm133,-122v-1,3,1,6,2,3v0,-1,-1,-2,-2,-3xm128,-122v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm127,-116v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm99,-144r0,-3v-1,1,-2,2,0,3xm25,-206v4,-9,4,-8,0,-18v-2,1,-7,16,0,18xm69,-156v-1,0,-2,-2,-2,0r2,0xm70,-153r0,-1r0,1xm67,-152v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm30,-179v1,-1,1,-2,0,-3v-2,1,-2,2,0,3xm87,-83v2,0,1,-2,0,-2v-2,0,-1,2,0,2xm89,-75v2,0,1,-2,0,-3v-1,1,-1,3,0,3xm20,-140v1,0,1,-1,1,-2xm95,-66v2,0,1,-2,0,-2v-2,0,-1,2,0,2xm91,-67r0,-1r0,1xm32,-100v3,0,2,-3,0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm85,-48v0,-1,0,-1,-1,-1xm52,-57v1,-3,-2,-2,-2,-1v0,1,1,1,2,1xm34,-66v2,-2,2,-4,0,-5v-2,2,-1,3,0,5xm23,-62v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm28,-51v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm113,-195v1,1,1,1,0,2v-1,-1,-1,-1,0,-2","w":143},"\u00b4":{"d":"26,-239v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":50},"\u00a8":{"d":"79,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm36,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm60,-249v2,2,4,0,2,-2xm57,-249v2,2,4,0,2,-2xm18,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm15,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3","w":88},"\u00c6":{"d":"181,-240v0,2,0,4,-3,3v0,-2,0,-4,3,-3xm132,-231v12,-4,27,4,40,-3v-3,13,2,18,-5,32r-56,3v0,-15,1,-26,3,-34v2,8,20,-3,18,2xm114,-195v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm112,-166v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm114,-155v1,1,1,3,0,4v-2,0,-1,-4,0,-4xm112,-148v2,0,3,3,0,4v-2,-1,-3,-3,0,-4xm152,-109v-8,12,-25,-4,-37,5v-8,-10,-7,-47,18,-32v8,5,20,-8,21,4v0,8,-1,15,-2,23xm107,-5v-1,10,-15,0,-26,3r0,-226v6,-1,15,-2,26,-3v-1,17,2,36,-1,51v-7,0,-3,7,-3,12r4,-3r0,166xm114,-93v0,1,-1,2,-2,2v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2v1,0,2,1,2,2xm112,-78v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm112,-60v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm114,-56v2,1,3,4,0,5v-2,-1,-1,-4,0,-5xm75,-91v1,3,-3,7,-2,2xm75,-82v4,16,13,19,4,29v-11,2,-29,-7,-30,7r8,0v-19,4,-7,63,-42,44v-2,1,-5,1,-9,2v8,-78,41,-161,59,-234v22,2,2,60,8,69v-1,7,-13,37,-12,47v4,-1,5,-2,8,2v-15,0,-13,27,-11,34r17,0xm172,-36v-6,4,0,9,0,14r-7,22v-17,2,-38,-3,-52,-1r1,1v-5,-4,-1,-26,0,-36v9,8,35,-7,48,3xm99,-182v0,-3,-8,-8,-2,-2xm90,-175v2,0,1,-4,0,-4v-2,0,-3,4,0,4xm121,-133v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm92,-155v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm139,-109v0,2,3,0,1,0r-1,0xm96,-146v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm96,-138v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm90,-144v-2,1,-8,-2,-7,2v2,0,5,-1,7,-2xm62,-130v0,-2,2,-3,0,-5v-2,1,-3,3,0,5xm145,-32v2,0,3,-2,0,-2v-3,0,-1,2,0,2xm135,-32v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm159,0v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm132,-26v1,0,1,-1,1,-2xm147,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm143,0v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm32,-1v3,0,4,-2,1,-4v-1,1,-3,3,-1,4xm98,-186r-1,2v0,-1,0,-2,1,-2","w":181},"\u00d8":{"d":"114,-195v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm45,-182v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm75,-107v4,-1,4,4,1,4v0,0,-6,-4,-1,-4xm38,-95v14,-30,21,-68,38,-95v-4,-10,-6,-13,-15,-12v2,-5,-5,-20,-2,-33v9,-1,15,0,13,11v3,-4,6,-15,9,-2v2,-9,20,-7,34,-7v-2,9,-11,23,-1,27v-10,3,0,21,0,31v0,12,-11,29,0,35v-6,28,0,68,-2,100v-10,12,-26,49,-53,35v-8,-21,21,-35,21,-51r0,-77v-4,25,-23,47,-25,69v12,4,-8,6,2,10v-11,3,-12,15,-3,25r0,29v-19,-10,-23,-6,-48,-3v-1,-11,4,-12,8,-25v-15,-42,-3,-110,-7,-163v0,-13,4,-19,12,-19v-3,-22,24,-6,29,-25v2,0,4,-1,6,-1r0,30v-25,15,-13,68,-16,111xm68,-76v0,1,0,2,-2,2v-3,1,-5,-4,-1,-4v2,0,3,0,3,2xm50,-42v4,0,5,4,1,4v-1,0,-2,0,-3,-2v0,-1,1,-2,2,-2xm82,-215v-3,0,-6,6,-2,9v0,-3,1,-6,2,-9xm78,-202r0,0r0,0xm107,-138v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm25,-215v-1,1,-2,6,0,7v0,-2,2,-5,0,-7xm107,-124v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm110,-118v0,-3,-4,-5,-3,0r3,0xm103,-122v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm102,-116v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm83,-122v-1,0,-2,4,0,4v1,-1,1,-3,0,-4xm37,-142v0,1,-2,2,0,2r0,-2","w":118},"\u00b1":{"d":"86,-134v10,26,-40,-1,-32,32v2,15,-8,14,-18,16v-1,-11,2,-26,-2,-34v-14,-3,-38,11,-30,-13v1,-2,26,2,32,-4v1,-14,1,-24,1,-29v9,1,15,-2,21,-3v-4,3,-3,3,0,6v-5,6,-6,14,-4,23v-1,-1,-1,-3,-1,0v-1,5,7,7,13,6v2,-2,12,1,20,0xm84,-48v-33,-2,-52,5,-75,0r0,-19v11,2,20,-5,28,0v2,-3,4,-5,4,0r43,0v2,3,3,15,0,19xm53,-116v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm31,-67v1,1,3,1,3,-1v-1,-1,-3,-1,-3,1","w":92},"\u00a5":{"d":"122,-220v-20,34,-26,78,-41,116v-4,-7,-9,-22,-16,-44v5,-19,12,-46,20,-82r36,0v2,2,-10,12,1,10xm63,-179v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm102,-90v-2,3,-4,6,-4,10r-17,0r0,12v9,1,22,-5,18,9r3,0v-2,3,-4,6,-4,10r-19,0v1,13,-3,31,2,40v-10,9,-7,7,-20,9v3,-1,11,-5,4,-5v-10,0,-17,8,-22,3v4,-11,5,-33,2,-46v-4,3,-15,-1,-22,-1r0,-19v10,2,15,-5,23,-2v4,-13,-12,-7,-23,-10r0,-19v10,2,15,-5,22,-2v-1,-3,-4,-14,-12,-35v-18,-53,-27,-84,-27,-94r32,-3v1,9,3,13,8,13v0,12,3,45,13,43v-3,8,-1,14,3,18r-3,0v0,17,12,43,18,60v10,2,26,-6,22,9r3,0xm90,-33v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm85,-19v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm24,-228v2,-1,2,-5,-2,-4v0,2,0,4,2,4xm44,-163v2,-1,2,-1,0,-2v-1,1,-1,1,0,2xm37,-166v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm30,-159v2,-1,3,-3,0,-5v-2,2,-2,4,0,5xm48,-101r1,1xm46,-100r0,1r0,-1xm48,-70r1,1xm46,-69r0,0r0,0","w":126},"\u00b5":{"d":"124,-155v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm115,-133v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm113,-233v1,25,-2,58,2,71v-8,33,8,85,-7,111v-9,-6,-32,8,-29,-15r3,-164v17,0,15,-2,31,-3xm50,-155v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm50,-124v1,0,4,4,0,4v-2,0,-1,-4,0,-4xm108,-44v-1,-1,-3,-2,0,-2r0,2xm113,-40v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm50,-102v3,1,3,3,0,5v-1,-2,-2,-3,0,-5xm97,-40v2,2,3,3,0,4v-3,-1,-2,-2,0,-4xm35,35v-4,1,-35,12,-26,-8r-1,-256v20,2,28,-9,36,-1v-5,4,-7,23,3,26r-7,0v1,9,-4,25,4,27v-12,7,4,38,-5,46v4,14,0,22,3,34v-1,-1,-2,-2,-2,-3v-1,12,2,30,0,36v1,-2,4,0,5,1v0,2,0,3,-1,3v0,0,-6,-6,-5,1v0,4,2,7,5,6v-9,10,1,14,13,27r0,25v-11,2,-25,-11,-22,6v0,9,2,22,0,30xm93,-29v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm46,-66v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm62,-29v4,-1,20,-28,26,-14v2,7,-9,5,-13,9v-2,4,12,2,13,8v-5,-2,-13,3,-6,4r20,0v-1,12,-26,28,-40,20r0,-27xm39,2v2,-4,9,2,4,3v-1,0,-3,-1,-4,-3xm90,-221v3,-1,3,-5,0,-5v-1,0,-2,4,0,5xm17,-217v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm13,-220v2,0,1,-3,0,-3v-2,0,-3,3,0,3xm101,-104v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm95,-100v2,-1,2,-3,0,-4v-2,1,-2,3,0,4xm110,-62v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm9,-123r0,-1r0,1xm84,-44v-2,0,-1,3,-1,4v2,0,2,-3,1,-4xm24,11v2,-2,0,-5,-3,-4v-1,0,-1,1,-1,2v1,1,3,2,4,2","w":123},"\u03bc":{"d":"124,-155v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm115,-133v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm113,-233v1,25,-2,58,2,71v-8,33,8,85,-7,111v-9,-6,-32,8,-29,-15r3,-164v17,0,15,-2,31,-3xm50,-155v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm50,-124v1,0,4,4,0,4v-2,0,-1,-4,0,-4xm108,-44v-1,-1,-3,-2,0,-2r0,2xm113,-40v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm50,-102v3,1,3,3,0,5v-1,-2,-2,-3,0,-5xm97,-40v2,2,3,3,0,4v-3,-1,-2,-2,0,-4xm35,35v-4,1,-35,12,-26,-8r-1,-256v20,2,28,-9,36,-1v-5,4,-7,23,3,26r-7,0v1,9,-4,25,4,27v-12,7,4,38,-5,46v4,14,0,22,3,34v-1,-1,-2,-2,-2,-3v-1,12,2,30,0,36v1,-2,4,0,5,1v0,2,0,3,-1,3v0,0,-6,-6,-5,1v0,4,2,7,5,6v-9,10,1,14,13,27r0,25v-11,2,-25,-11,-22,6v0,9,2,22,0,30xm93,-29v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm46,-66v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm62,-29v4,-1,20,-28,26,-14v2,7,-9,5,-13,9v-2,4,12,2,13,8v-5,-2,-13,3,-6,4r20,0v-1,12,-26,28,-40,20r0,-27xm39,2v2,-4,9,2,4,3v-1,0,-3,-1,-4,-3xm90,-221v3,-1,3,-5,0,-5v-1,0,-2,4,0,5xm17,-217v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm13,-220v2,0,1,-3,0,-3v-2,0,-3,3,0,3xm101,-104v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm95,-100v2,-1,2,-3,0,-4v-2,1,-2,3,0,4xm110,-62v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm9,-123r0,-1r0,1xm84,-44v-2,0,-1,3,-1,4v2,0,2,-3,1,-4xm24,11v2,-2,0,-5,-3,-4v-1,0,-1,1,-1,2v1,1,3,2,4,2","w":123},"\u00aa":{"d":"52,-234v1,1,2,2,0,3v-2,-1,-1,-2,0,-3xm58,-210v1,1,2,2,0,3v-1,-1,-1,-2,0,-3xm41,-172r0,2r0,-2xm69,-145v1,1,2,2,0,3v-2,-1,-1,-2,0,-3xm62,-176v9,18,4,62,18,77v-3,0,-4,1,-4,5r-20,0v1,-10,-4,-25,-6,-33v0,8,-22,-1,-20,8r4,0v-11,3,-6,39,-25,26v-1,1,-3,1,-5,2r23,-139v12,-2,7,32,11,40v1,6,-6,23,-5,29v2,-1,4,-1,5,1v-7,2,-10,15,-2,17v-1,0,-2,1,-1,2v10,-3,13,3,14,12v6,-16,-14,-51,-4,-65v0,-1,-1,-1,-4,-1v-2,-13,-11,-30,-1,-36v2,2,8,0,12,1v2,4,2,13,8,16r-4,0v2,11,-1,30,12,31v-4,0,-6,2,-6,7xm73,-127r-1,0r1,0xm45,-146v0,1,-1,4,-1,1xm38,-229r0,-2v-1,0,-1,2,0,2xm46,-184v1,0,2,2,2,0r-2,0xm46,-172v2,-1,0,-4,0,-2r0,2xm62,-154v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm49,-157r0,-2v-2,0,-1,2,0,2xm65,-138v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm33,-168v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm65,-133v1,1,1,3,1,0r-1,0xm62,-133v0,-1,0,-1,-1,-1xm19,-92v3,0,1,-3,0,-1r0,1","w":81},"\u00ba":{"d":"58,-222v1,1,1,2,1,4v-2,-1,-2,-2,-1,-4xm68,-209v2,1,0,4,0,2r0,-2xm26,-200v1,0,1,0,1,1xm66,-218v2,33,1,67,1,103v-6,7,-15,28,-32,21v-4,-14,13,-22,13,-31v1,-18,-3,-42,2,-57v-6,-14,-2,-35,-14,-31v3,-2,-3,-11,-1,-19v5,0,9,-1,8,6v3,-8,5,-2,15,-3v2,10,-19,10,-6,15v6,-2,12,3,14,-4xm30,-157v1,1,2,2,0,3v-2,-1,-1,-2,0,-3xm28,-154v3,0,1,3,0,3v-1,-1,-2,-2,0,-3xm33,-215v-17,11,-11,72,-6,85v-9,10,12,19,6,39v-45,-9,-24,-68,-29,-115v0,-8,3,-11,8,-11v-2,-15,14,-4,17,-15v1,-1,2,-1,4,-1r0,18xm30,-134v1,0,1,3,0,3v-1,0,-2,-3,0,-3xm26,-125v1,1,2,2,0,3v-2,-1,-1,-2,0,-3xm52,-207v2,-1,0,-3,0,-1r0,1xm47,-213v1,1,1,3,1,0r-1,0xm48,-208v0,-1,0,-1,-1,-1xm63,-175v1,1,2,1,2,-1v-1,0,-2,0,-2,1xm15,-220r0,3v1,0,1,-3,0,-3xm63,-167v1,1,2,1,2,-1v-1,0,-2,0,-2,1xm65,-162v2,0,0,-2,0,-3r0,3xm62,-165r-1,0r1,0xm61,-161v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm50,-165v-1,1,-1,5,0,2r0,-2xm22,-175v0,-1,0,-1,-1,-1xm23,-129r0,-2v-1,0,-1,2,0,2","w":71},"\u00e6":{"d":"193,-233v-2,-1,-5,-6,0,-5r0,5xm223,-149v-1,1,-1,3,-2,1xm215,-157v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm120,-235r0,4v-3,0,-2,-4,0,-4xm130,-192v-1,1,-2,3,-2,0r2,0xm134,-181v9,3,3,11,-2,15r-2,0v1,-3,3,-8,4,-15xm137,-163v0,3,-1,6,-3,8v1,-3,-2,-9,3,-8xm124,-164v1,-2,2,-3,2,1xm124,-145v1,-1,2,-2,2,1xm151,-87v2,0,5,-1,4,2r-5,0xm144,-83r0,2v-1,-1,-1,-1,0,-2xm128,-231v14,3,44,1,57,-1v0,14,0,18,-5,34r-54,1v1,-4,-2,-7,-2,-1v-1,12,-9,47,10,45v2,2,3,4,0,5v-7,-4,-13,3,-8,12v11,-3,27,0,40,-1v2,6,2,39,-6,35v-12,-1,-24,-9,-33,-1v2,4,13,7,11,16v-20,3,-1,27,-10,39v3,5,4,19,17,11v15,-1,28,3,39,0v-1,11,0,25,-6,37v-21,5,-40,-11,-50,0v-1,-7,1,-7,-6,-4v-2,8,-19,-4,-25,2v-11,-10,4,-38,-15,-39r1,-4v-12,8,-12,10,-19,11v1,-2,1,-5,1,-7v-15,-4,-21,45,-37,41v-8,-5,-20,5,-20,-5v2,-23,34,-69,18,-93v4,-2,6,-10,8,-24v11,0,16,-7,9,-11v-6,0,-12,2,-17,5v-5,-4,-10,-13,-2,-16v8,2,15,9,24,5r-8,0v-1,-3,13,-12,12,-13v-4,2,-6,3,-9,-1v-1,4,-2,6,-5,6v0,-22,6,-21,18,-12v4,-19,15,-45,22,-70v20,-1,7,25,11,41r3,0v-2,-34,-6,-47,29,-41v0,11,6,15,1,22v1,0,2,1,4,1xm141,-61v2,1,1,4,-1,4v-2,-1,-1,-3,1,-4xm135,-54v0,-3,3,0,1,0r-1,0xm30,-120v0,1,-1,2,-3,2xm89,-39v0,16,-4,19,-7,8v0,-5,2,-8,7,-8xm4,-98v1,-6,18,-9,21,-4v-6,0,-8,3,-10,6v-1,-4,-6,-2,-11,-2xm78,-18v1,0,1,0,1,1xm69,-28v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm69,-20v3,0,5,2,3,4v0,0,-1,-1,-3,-4xm122,-160r0,1r0,-1xm126,-124v1,2,1,4,1,0r-1,0xm87,-158v1,-1,3,-4,1,-4v-1,1,-1,3,-1,4xm133,-88v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm87,-96v-1,4,5,13,6,4v-5,-7,3,-26,-4,-40v-1,2,-3,1,-3,-1v7,-3,5,-9,-3,-11v-1,4,2,29,-6,18v0,0,10,15,-3,15v-1,4,-11,18,-4,22v0,0,2,-1,6,-2v0,1,0,1,1,2v2,-3,7,-6,10,-7xm32,-135v0,-2,0,-2,-2,-2v-1,2,-1,2,2,2xm79,-89v0,1,-4,5,0,4v1,-2,3,-4,1,-5xm80,-56v2,-2,3,-3,1,-5v-3,1,-2,3,-1,5xm58,-48v2,0,3,-4,1,-4v-2,0,-3,4,-1,4xm90,-131v3,3,-2,7,-2,3v0,-1,1,-2,2,-3xm85,-98v-1,2,-3,3,-4,0v0,-1,1,-2,2,-2v1,0,2,1,2,2xm78,-94v2,2,0,3,-2,3v0,-2,1,-2,2,-3","w":190},"\u00f8":{"d":"112,-198v11,13,-2,42,5,60v-2,25,0,57,-1,90v12,2,24,-7,27,-4v0,0,-1,2,-3,4r16,0v-11,3,-17,7,-17,10v2,-2,4,3,4,5r-7,0v2,7,8,3,13,3v0,9,-24,2,-28,2r2,-5r-8,0v-17,20,-29,40,-53,29v-1,-7,2,-18,-2,-22v-2,8,5,30,-6,24v-14,4,-13,-14,-33,-2v-4,1,-8,1,-14,1v-3,-9,8,-14,7,-23r-4,-133r-5,0v0,-3,5,-9,3,-13v-3,2,-8,5,-13,9v0,-8,11,-5,13,-14v3,-11,4,-29,16,-29v-1,-19,23,-14,29,-25r5,-1r0,32v-14,9,-5,10,-4,24v0,0,4,3,13,8v-3,-17,22,-22,-1,-28v-4,-4,-5,-25,-4,-36v6,0,14,2,26,5v0,-2,1,-4,1,-6r27,0v-1,8,-11,23,0,27v-3,0,0,5,-4,8xm-12,-159v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm115,-29v3,0,0,3,0,1r0,-1xm-23,-154v-1,-6,6,-9,9,-5v-2,4,-5,5,-9,5xm-31,-67r0,4v-2,0,-2,-1,-2,-2v0,-1,0,-2,2,-2xm111,-205v-1,1,-5,3,-1,3xm49,-181v2,0,3,-4,0,-4v-2,0,-3,4,0,4xm110,-118v1,2,2,4,2,0r-2,0xm62,-161v4,-2,0,-5,-2,-7v-3,3,0,5,2,7xm106,-118r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm63,-159r-11,0v0,-7,-1,-11,-3,-13v-5,7,-7,31,-7,71xm60,-37v21,10,23,-10,23,-44v1,-16,1,-37,1,-62v-5,29,-21,52,-28,79v12,2,-7,8,3,10v-13,4,-8,10,1,17xm58,-31v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm61,-163v0,-1,1,-4,1,-2v0,0,-1,1,-1,2xm76,-107v3,-1,5,4,1,4v-1,0,-2,0,-3,-2v0,-1,1,-2,2,-2xm66,-78v3,-1,5,4,2,4v-3,1,-6,-4,-2,-4"},"\u00bf":{"d":"13,1v0,-2,0,-2,2,-2v0,2,0,2,-2,2xm28,1v-15,-9,-34,-32,-21,-53v-2,-2,-5,-3,-5,-7v18,-17,41,-53,36,-84r-4,-2v7,-15,12,-7,23,-11v1,8,12,10,5,21v1,44,-21,64,-30,93v-1,3,10,18,13,17v7,3,20,-23,24,-21v14,0,21,4,21,12v3,7,-28,18,-7,16v-14,16,-22,17,-55,19xm24,-185v1,-2,7,-1,5,0v-2,2,-3,0,-5,0xm43,-221v10,-1,17,5,23,-1v0,8,-1,19,-2,35v-10,0,-23,4,-30,0r0,-30v7,1,22,-1,9,-4xm47,-12v-2,0,-3,4,0,4v2,0,3,-4,0,-4xm67,-21v-7,0,-4,10,-5,15v3,-4,5,-9,5,-15xm79,-33v-2,0,-3,3,0,4v2,-1,1,-3,0,-4xm45,-156v-2,1,-3,3,0,4v2,0,1,-3,0,-4","w":92},"\u00a1":{"d":"3,-1v0,-2,0,-2,2,-2v0,2,0,2,-2,2xm12,-1v0,-2,3,-3,3,0v0,3,-3,2,-3,0xm12,-81v0,-2,0,-2,2,-2v0,2,0,2,-2,2xm45,-3v-18,1,-42,0,-33,-30v-1,-20,9,-40,2,-59v7,-13,-1,-35,6,-47v-7,-10,5,-18,13,-19v5,0,4,3,8,7xm9,-120v0,3,-3,0,-1,0r1,0xm24,-222v3,6,13,3,19,1r0,32v-10,0,-24,3,-32,1v5,-17,-5,-30,15,-35xm37,-223v0,1,-4,2,-4,0v1,-1,3,-1,4,0xm43,-43v-1,1,-1,1,0,2v1,-1,1,-1,0,-2xm31,-158v-3,1,-3,4,0,5v1,-2,2,-3,0,-5xm39,-151v-2,0,-3,4,0,4v2,0,1,-4,0,-4xm35,-158v-3,1,-2,3,0,5v1,-2,2,-3,0,-5","w":48},"\u00ac":{"d":"138,-57v4,-1,8,3,4,4v-1,0,-5,-1,-4,-4xm108,-92v-38,-2,-69,3,-102,1r0,-27r131,0v-1,7,7,17,6,20v-1,1,-3,-3,-3,-1v-2,5,-8,10,-1,12v0,-2,6,-1,6,1v1,3,-15,3,-3,8v-16,6,1,37,-32,30v-6,-11,0,-27,-2,-44xm119,-50v1,3,7,-1,2,-1v-2,0,-2,0,-2,1xm29,-116v2,-2,2,-4,-1,-3","w":144},"\u00ab":{"d":"57,-112v8,24,57,34,44,64v-10,-2,-45,-37,-57,-49v-1,-1,-2,-8,-2,-21r60,-55v8,33,-28,39,-45,61xm17,-112v8,23,57,33,45,64v-11,-2,-44,-37,-57,-49v-2,-5,-6,-26,7,-31r50,-45v9,33,-29,42,-45,61xm87,-56r0,2r0,-2xm47,-54r0,-2r0,2xm66,-127v2,-1,1,-3,0,-4r0,4xm69,-124r0,-4v-2,1,-1,3,0,4xm65,-124v0,-1,2,-2,0,-2r0,2xm63,-124v1,-1,0,-5,0,-2r0,2xm66,-121r0,-3v-2,0,-1,3,0,3xm56,-126v0,0,1,2,1,0r-1,0xm87,-82v-1,2,1,5,1,1xm47,-119r0,-3v-1,0,-2,3,0,3xm63,-100v0,-1,-1,-3,-1,-1xm54,-107r0,-4v-2,1,-1,3,0,4xm45,-119v0,1,-2,3,0,4v1,0,1,-3,0,-4xm102,-59r0,-3v-1,1,-2,3,0,3xm47,-112r0,-3v-2,0,-1,3,0,3xm50,-107r0,-4v-2,1,-1,3,0,4xm27,-127v1,-1,1,-3,0,-4v-1,1,-1,3,0,4xm29,-124v2,-1,1,-3,0,-4v-1,1,-1,3,0,4xm44,-108r0,-4v-2,0,-1,3,0,4xm25,-124v0,-1,2,-2,0,-2r0,2xm45,-109v-1,1,-2,2,-2,4xm24,-124r0,-3v-2,0,-1,2,0,3xm26,-121v1,0,2,-3,0,-3v-1,0,-1,3,0,3xm44,-102r0,-3v-1,0,-2,3,0,3xm19,-126v-1,-1,-3,1,-1,1v0,0,1,0,1,-1xm48,-79v2,-1,0,-3,-1,-3xm7,-122r0,3v2,0,1,-3,0,-3xm23,-100r0,-2v-1,1,-1,1,0,2xm14,-107v2,-1,1,-3,0,-4r0,4xm5,-119r0,4v2,0,1,-3,0,-4xm62,-59v2,0,1,-2,1,-3v-2,0,-2,3,-1,3xm7,-115r0,3v1,0,2,-3,0,-3xm10,-107v2,-1,1,-3,0,-4v-1,1,-1,3,0,4xm4,-108v0,-1,2,-3,0,-4r0,4xm4,-105r0,-2r0,2xm4,-102v2,0,1,-2,1,-3v-2,0,-1,2,-1,3","w":107},"\u00bb":{"d":"86,-136r0,-3v2,1,1,2,0,3xm69,-151v9,11,27,23,43,34v-4,9,0,17,-8,26v-7,-4,-36,28,-57,42r3,-23v14,-13,33,-22,45,-37v-3,-1,-15,-17,-35,-23v2,-3,-5,-10,-11,-12r0,-20v4,-1,18,17,24,11v-1,0,-2,1,-4,2xm41,-136r0,-3v2,1,1,2,0,3xm24,-151v10,11,26,23,44,34v-6,8,0,17,-9,26v-7,-4,-36,28,-57,42r3,-23v14,-13,33,-22,45,-37v-3,-1,-15,-17,-35,-23v2,-3,-5,-10,-11,-12r0,-20v4,-1,18,17,24,11v-1,0,-2,1,-4,2xm110,-114r0,-3v-1,1,-2,2,0,3xm65,-114r0,-3v-1,1,-2,2,0,3","w":114},"\u00a0":{"w":61},"\u00c0":{"d":"86,-237v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm97,-197v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm69,-135v1,0,1,4,0,4v-3,0,-3,-4,0,-4xm115,-89v1,2,2,3,0,5v-2,-2,-1,-3,0,-5xm124,-41v-6,9,0,27,9,28v-5,0,-7,3,-7,8r-33,0v1,-16,-8,-43,-9,-55v-2,15,-32,-2,-35,14r8,0v-19,4,-7,63,-42,44v-2,1,-5,1,-9,2v0,-6,5,-33,9,-56r31,-175v19,-3,11,57,18,67v1,8,-9,38,-8,47v4,-1,5,0,8,2r-9,4v-1,17,-6,19,4,25v-2,0,-2,3,-1,4r17,0v2,5,7,28,9,14v3,-29,-24,-81,-9,-103v0,-2,-2,-2,-6,-2v-5,-21,-19,-50,-3,-60v3,5,13,2,20,3v1,4,8,12,7,22r8,4r-8,0v1,15,4,31,6,47r14,4v-12,0,-13,18,-2,22v-3,31,2,62,13,90xm121,-58v0,-1,-2,-2,0,-2r0,2xm75,-91v1,3,-3,7,-2,2xm64,-228v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm77,-155v1,1,2,3,2,0r-2,0xm77,-135v2,-1,3,-3,0,-5v-1,2,-2,3,0,5xm104,-104v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm82,-109r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm110,-80v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm55,-128v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm108,-69v1,1,4,5,3,0r-3,0xm102,-70v3,0,0,-3,0,-1r0,1xm32,-1v3,0,4,-2,1,-4v-1,1,-3,3,-1,4xm81,-257v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm60,-238v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm53,-259v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm59,-240v2,1,4,-2,2,-2v-1,0,-2,0,-2,2","w":136},"\u00c3":{"d":"92,-244v-33,7,-45,-31,-63,4v-16,-9,6,-38,18,-37v17,1,10,8,34,17v9,-3,22,-26,28,-6xm55,-274v2,1,2,1,2,-2xm86,-237v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm97,-197v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm69,-135v1,0,1,4,0,4v-3,0,-3,-4,0,-4xm115,-89v1,2,2,3,0,5v-2,-2,-1,-3,0,-5xm124,-41v-6,9,0,27,9,28v-5,0,-7,3,-7,8r-33,0v1,-16,-8,-43,-9,-55v-2,15,-32,-2,-35,14r8,0v-19,4,-7,63,-42,44v-2,1,-5,1,-9,2v0,-6,5,-33,9,-56r31,-175v19,-3,11,57,18,67v1,8,-9,38,-8,47v4,-1,5,0,8,2r-9,4v-1,17,-6,19,4,25v-2,0,-2,3,-1,4r17,0v2,5,7,28,9,14v3,-29,-24,-81,-9,-103v0,-2,-2,-2,-6,-2v-5,-21,-19,-50,-3,-60v3,5,13,2,20,3v1,4,8,12,7,22r8,4r-8,0v1,15,4,31,6,47r14,4v-12,0,-13,18,-2,22v-3,31,2,62,13,90xm121,-58v0,-1,-2,-2,0,-2r0,2xm75,-91v1,3,-3,7,-2,2xm64,-228v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm77,-155v1,1,2,3,2,0r-2,0xm77,-135v2,-1,3,-3,0,-5v-1,2,-2,3,0,5xm104,-104v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm82,-109r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm110,-80v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm55,-128v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm108,-69v1,1,4,5,3,0r-3,0xm102,-70v3,0,0,-3,0,-1r0,1xm32,-1v3,0,4,-2,1,-4v-1,1,-3,3,-1,4","w":136},"\u00d5":{"d":"85,-244v-33,7,-45,-31,-63,4v-17,-9,6,-39,18,-37v17,1,10,8,34,17v9,-3,22,-26,28,-6xm48,-274v2,1,2,1,2,-2xm98,-211v-2,1,-2,-4,-2,-6v3,1,4,4,2,6xm114,-195v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm45,-182v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm109,-211v2,23,7,43,0,65v-1,3,8,6,3,8r0,98v-10,12,-26,49,-53,35v-8,-21,21,-35,21,-51r0,-92r3,-3v-7,-26,-4,-57,-22,-51v2,-5,-5,-20,-2,-33v9,-1,15,0,13,11v3,-4,6,-15,9,-2v1,-7,9,-2,15,-2v0,1,-6,12,-4,15v-4,-2,-14,-3,-14,2v-1,13,20,2,25,7v4,0,6,-2,6,-7xm50,-109v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm49,-102v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm45,-64v-14,8,5,26,9,35r0,29v-74,-15,-39,-114,-47,-191v0,-13,4,-19,12,-19v-3,-22,24,-6,29,-25v2,0,4,-1,6,-1r0,30v-22,13,-14,56,-16,93v1,35,-1,34,7,49xm50,-71v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm43,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm87,-193v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm78,-202v1,1,4,5,3,0r-3,0xm79,-194v1,-1,3,-1,1,-2v-1,1,-3,1,-1,2xm107,-138v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm25,-215v-1,1,-2,6,0,7v0,-2,2,-5,0,-7xm107,-124v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm110,-118v0,-3,-4,-5,-3,0r3,0xm103,-122v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm102,-116v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm83,-122v-1,0,-2,4,0,4v1,-1,1,-3,0,-4xm37,-142v0,1,-2,2,0,2r0,-2xm38,-62v3,-1,3,-3,0,-4v-1,0,-1,3,0,4","w":118},"\u00f7":{"d":"62,-177v-6,11,-1,38,-26,23r0,-21v9,-2,16,-2,26,-2xm9,-137v13,1,20,-6,28,0v2,-4,4,-5,4,0r43,0v2,4,2,14,0,19v-26,0,-51,3,-75,0r0,-19xm62,-104v-7,9,0,38,-26,23r0,-21v9,-2,16,-2,26,-2xm45,-151v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm40,-152v2,2,4,0,2,-2xm31,-138v1,2,3,2,3,-1xm45,-78v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm40,-79v2,2,4,0,2,-2","w":92},"\u00ff":{"d":"64,-176v-1,1,-2,3,-2,0r2,0xm44,-218v3,30,14,50,18,74v7,-17,14,-45,22,-84r35,0v0,0,-1,3,-3,8v2,1,6,8,0,7v-18,27,-23,93,-39,112v8,19,-3,63,2,89v2,8,-12,16,-20,10v3,-1,6,-1,5,-5r-22,6v4,-26,1,-57,2,-86v-14,-2,-38,-4,-41,-13v9,-12,7,-15,15,-4v2,-8,2,-10,2,-16v-6,0,-10,-2,-9,-5r22,0v-4,-38,-25,-68,-28,-103v7,-5,22,-3,33,-3v0,10,2,14,6,13xm39,-86v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm89,-34v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm29,-85v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm86,-17v-6,0,-6,-4,0,-3r0,3xm64,-142v0,8,0,12,4,18v0,-7,0,-10,-4,-18xm72,-122v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm75,-107v1,-3,-2,-10,-3,-6v0,2,1,4,3,6xm36,-107v5,-2,2,-16,-7,-13v4,3,7,7,7,13xm40,-102v0,-2,-3,-1,-4,-1v0,2,2,2,4,1xm24,-113v0,-1,0,-2,-2,-2r0,4v2,0,2,-1,2,-2xm96,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm53,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm77,-249v2,2,4,0,2,-2xm74,-249v2,2,4,0,2,-2xm35,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm32,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3"},"\u00a4":{"d":"102,-237v1,2,-1,2,-3,2v-1,-2,1,-2,3,-2xm127,-207v16,5,1,30,5,49v-11,-1,-21,9,-24,6v1,-4,-14,-28,-16,-44v-11,-2,-11,-19,-10,-35v8,0,32,6,37,7xm51,-231v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm30,-222v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm112,-133v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm64,-174v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm25,-211v0,5,0,11,-6,13xm136,-85v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm6,-211v2,0,1,4,0,4v-3,0,-3,-4,0,-4xm68,-147v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm132,-78v0,-2,3,-1,4,-1v0,2,-3,1,-4,1xm14,-196v2,1,4,2,0,2r0,-2xm128,-83v1,7,-6,9,-9,5v2,-3,5,-5,9,-5xm130,-74v5,5,0,3,-1,1xm8,-192v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm1,-185v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm-1,-185v-1,4,-7,6,-9,3v0,-3,5,-3,9,-3xm77,-198v0,6,15,8,14,15r-29,0v-1,22,5,27,0,46v16,1,33,-1,43,2v0,3,1,4,5,4v-2,2,-3,5,-3,9r-45,0v2,6,4,8,1,16v12,0,22,-1,31,3v2,15,-6,17,-31,15v3,6,0,25,-1,37v-1,3,17,17,15,20v-2,11,7,36,-9,29v-17,4,-41,-28,-19,-29v-1,-7,-17,0,-17,-8r-1,-50r-30,0r0,-14v13,1,16,-1,30,-2r-1,-16v-2,1,-4,1,-5,1r2,-2r-10,0v1,-6,-1,-11,-2,-15v8,0,8,2,15,0v1,-20,-2,-35,-7,-48v-11,-4,-2,-6,6,-17v15,-20,31,-29,48,-29r0,33xm114,-81v-2,11,16,12,17,19v-4,1,-11,-2,-10,3r11,0v0,6,1,13,-5,13v9,12,-5,30,-11,11v-7,-2,-12,-8,-4,-13v-8,-3,-2,-12,0,-17v-3,1,-6,2,-10,2r0,-18r12,0xm102,-57v1,2,2,3,0,5v-3,-2,-3,-3,0,-5xm106,-48v1,3,-2,2,-4,2v0,-2,1,-2,4,-2xm114,-31v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm19,-119v0,1,0,1,-1,1xm119,-22v0,3,1,6,-3,5v0,-2,1,-4,3,-5xm108,-20v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm106,-28v2,10,-17,-5,-13,7v5,1,16,7,19,10v-4,11,-22,15,-30,7v2,-13,-7,-30,13,-27xm36,-31v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm126,-170v1,0,1,-4,0,-4v-3,0,-3,4,0,4xm75,-189v-1,-2,-2,-4,-2,0r2,0xm78,-184v2,-1,2,-1,0,-2v-1,1,-1,1,0,2xm73,-183v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm95,-132v1,-1,3,-2,0,-3v-1,1,-1,2,0,3xm86,-126v-1,-1,2,-2,0,-2v-1,1,-1,1,0,2xm72,-125v1,-1,0,-1,0,-2v-1,1,-1,1,0,2xm106,-67v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm110,-54v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm119,-39v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm114,-41v-1,-1,-2,-3,-2,0r2,0xm26,-126v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm19,-126v1,-1,3,-2,0,-3v-1,1,-1,2,0,3xm102,-10v3,0,0,-3,0,-1r0,1xm47,-24v2,0,3,-4,0,-4v-2,0,-3,4,0,4","w":138},"\u20ac":{"d":"102,-237v1,2,-1,2,-3,2v-1,-2,1,-2,3,-2xm127,-207v16,5,1,30,5,49v-11,-1,-21,9,-24,6v1,-4,-14,-28,-16,-44v-11,-2,-11,-19,-10,-35v8,0,32,6,37,7xm51,-231v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm30,-222v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm112,-133v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm64,-174v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm25,-211v0,5,0,11,-6,13xm136,-85v2,1,3,3,0,4v-2,0,-1,-3,0,-4xm6,-211v2,0,1,4,0,4v-3,0,-3,-4,0,-4xm68,-147v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm132,-78v0,-2,3,-1,4,-1v0,2,-3,1,-4,1xm14,-196v2,1,4,2,0,2r0,-2xm128,-83v1,7,-6,9,-9,5v2,-3,5,-5,9,-5xm130,-74v5,5,0,3,-1,1xm8,-192v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm1,-185v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm-1,-185v-1,4,-7,6,-9,3v0,-3,5,-3,9,-3xm77,-198v0,6,15,8,14,15r-29,0v-1,22,5,27,0,46v16,1,33,-1,43,2v0,3,1,4,5,4v-2,2,-3,5,-3,9r-45,0v2,6,4,8,1,16v12,0,22,-1,31,3v2,15,-6,17,-31,15v3,6,0,25,-1,37v-1,3,17,17,15,20v-2,11,7,36,-9,29v-17,4,-41,-28,-19,-29v-1,-7,-17,0,-17,-8r-1,-50r-30,0r0,-14v13,1,16,-1,30,-2r-1,-16v-2,1,-4,1,-5,1r2,-2r-10,0v1,-6,-1,-11,-2,-15v8,0,8,2,15,0v1,-20,-2,-35,-7,-48v-11,-4,-2,-6,6,-17v15,-20,31,-29,48,-29r0,33xm114,-81v-2,11,16,12,17,19v-4,1,-11,-2,-10,3r11,0v0,6,1,13,-5,13v9,12,-5,30,-11,11v-7,-2,-12,-8,-4,-13v-8,-3,-2,-12,0,-17v-3,1,-6,2,-10,2r0,-18r12,0xm102,-57v1,2,2,3,0,5v-3,-2,-3,-3,0,-5xm106,-48v1,3,-2,2,-4,2v0,-2,1,-2,4,-2xm114,-31v2,2,3,4,0,5v-2,-2,-1,-3,0,-5xm19,-119v0,1,0,1,-1,1xm119,-22v0,3,1,6,-3,5v0,-2,1,-4,3,-5xm108,-20v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm106,-28v2,10,-17,-5,-13,7v5,1,16,7,19,10v-4,11,-22,15,-30,7v2,-13,-7,-30,13,-27xm36,-31v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm126,-170v1,0,1,-4,0,-4v-3,0,-3,4,0,4xm75,-189v-1,-2,-2,-4,-2,0r2,0xm78,-184v2,-1,2,-1,0,-2v-1,1,-1,1,0,2xm73,-183v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm95,-132v1,-1,3,-2,0,-3v-1,1,-1,2,0,3xm86,-126v-1,-1,2,-2,0,-2v-1,1,-1,1,0,2xm72,-125v1,-1,0,-1,0,-2v-1,1,-1,1,0,2xm106,-67v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm110,-54v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm119,-39v2,-1,3,-3,0,-4v-2,0,-3,3,0,4xm114,-41v-1,-1,-2,-3,-2,0r2,0xm26,-126v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm19,-126v1,-1,3,-2,0,-3v-1,1,-1,2,0,3xm102,-10v3,0,0,-3,0,-1r0,1xm47,-24v2,0,3,-4,0,-4v-2,0,-3,4,0,4","w":138},"\u00b7":{"d":"36,-126v-9,9,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm18,-100v1,-1,3,-2,0,-3v-1,1,-1,2,0,3xm15,-100v1,-1,3,-2,0,-3v-1,1,-1,2,0,3","w":41},"\u2219":{"d":"36,-126v-9,9,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm18,-100v1,-1,3,-2,0,-3v-1,1,-1,2,0,3xm15,-100v1,-1,3,-2,0,-3v-1,1,-1,2,0,3","w":41},"\u00c2":{"d":"76,-282v1,0,1,0,1,1xm89,-266v2,0,0,3,0,1r0,-1xm86,-266v0,1,0,1,-1,1xm95,-249v0,-1,3,0,1,0r-1,0xm30,-242v6,-8,17,-58,40,-43v5,3,20,33,25,43v-24,8,-23,-24,-33,-31v-9,12,-7,36,-32,31xm62,-285v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm86,-237v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm97,-197v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm69,-135v1,0,1,4,0,4v-3,0,-3,-4,0,-4xm115,-89v1,2,2,3,0,5v-2,-2,-1,-3,0,-5xm124,-41v-6,9,0,27,9,28v-5,0,-7,3,-7,8r-33,0v1,-16,-8,-43,-9,-55v-2,15,-32,-2,-35,14r8,0v-19,4,-7,63,-42,44v-2,1,-5,1,-9,2v0,-6,5,-33,9,-56r31,-175v19,-3,11,57,18,67v1,8,-9,38,-8,47v4,-1,5,0,8,2r-9,4v-1,17,-6,19,4,25v-2,0,-2,3,-1,4r17,0v2,5,7,28,9,14v3,-29,-24,-81,-9,-103v0,-2,-2,-2,-6,-2v-5,-21,-19,-50,-3,-60v3,5,13,2,20,3v1,4,8,12,7,22r8,4r-8,0v1,15,4,31,6,47r14,4v-12,0,-13,18,-2,22v-3,31,2,62,13,90xm121,-58v0,-1,-2,-2,0,-2r0,2xm75,-91v1,3,-3,7,-2,2xm64,-228v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm77,-155v1,1,2,3,2,0r-2,0xm77,-135v2,-1,3,-3,0,-5v-1,2,-2,3,0,5xm104,-104v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm82,-109r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm110,-80v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm55,-128v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm108,-69v1,1,4,5,3,0r-3,0xm102,-70v3,0,0,-3,0,-1r0,1xm32,-1v3,0,4,-2,1,-4v-1,1,-3,3,-1,4","w":136},"\u00ca":{"d":"69,-282v1,0,1,0,1,1xm82,-266v2,0,0,3,0,1r0,-1xm79,-266v0,1,0,1,-1,1xm88,-249v0,-1,3,0,1,0r-1,0xm22,-242v7,-7,17,-58,41,-43v5,3,20,33,25,43v-24,8,-23,-24,-33,-31v-9,13,-8,36,-33,31xm55,-285v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm110,-240v0,2,0,4,-2,3v0,-2,0,-4,2,-3xm62,-231v15,-4,29,4,40,-3v-3,9,3,18,-5,32r-56,3v0,-15,1,-26,3,-34v2,9,20,-3,18,2xm44,-195v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm42,-166v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm44,-155v1,1,1,3,0,4v-2,0,-1,-4,0,-4xm42,-148v2,0,1,3,0,4v-2,-1,-3,-3,0,-4xm82,-109v-8,12,-25,-4,-37,5v-10,-14,-4,-48,23,-31v5,-2,16,-6,16,3v0,8,-1,15,-2,23xm37,-5v-1,11,-15,0,-26,3r0,-226v5,-1,14,-2,26,-3v-1,17,2,36,-1,51v-7,0,-4,6,-3,12r4,-3r0,166xm42,-95r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm42,-78v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm42,-60v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm44,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm101,-36v-2,11,1,24,-6,36v-18,2,-37,-3,-52,-1r1,1v-6,-6,-2,-27,0,-36v8,8,35,-7,47,3xm30,-184v-1,-6,-9,-3,-4,0v1,1,3,3,4,0xm19,-175v3,0,3,-4,0,-4v-2,0,-1,4,0,4xm50,-133v3,-1,3,-4,0,-5v-1,1,-2,4,0,5xm22,-155v2,-2,1,-3,0,-5v-3,2,-3,4,0,5xm68,-109v0,2,3,0,1,0r-1,0xm26,-146v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm26,-138v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm13,-142v4,0,8,-3,0,-2r0,2xm75,-32v2,0,3,-2,0,-2v-3,0,-1,2,0,2xm65,-32v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm88,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm64,-26v-1,-1,-2,-3,-2,0r2,0xm77,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm73,0v2,-1,1,-4,0,-5v-3,1,-3,4,0,5xm28,-186v0,1,-1,2,-2,2v0,-1,1,-2,2,-2","w":106},"\u00c1":{"d":"86,-237v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm97,-197v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm69,-135v1,0,1,4,0,4v-3,0,-3,-4,0,-4xm115,-89v1,2,2,3,0,5v-2,-2,-1,-3,0,-5xm124,-41v-6,9,0,27,9,28v-5,0,-7,3,-7,8r-33,0v1,-16,-8,-43,-9,-55v-2,15,-32,-2,-35,14r8,0v-19,4,-7,63,-42,44v-2,1,-5,1,-9,2v0,-6,5,-33,9,-56r31,-175v19,-3,11,57,18,67v1,8,-9,38,-8,47v4,-1,5,0,8,2r-9,4v-1,17,-6,19,4,25v-2,0,-2,3,-1,4r17,0v2,5,7,28,9,14v3,-29,-24,-81,-9,-103v0,-2,-2,-2,-6,-2v-5,-21,-19,-50,-3,-60v3,5,13,2,20,3v1,4,8,12,7,22r8,4r-8,0v1,15,4,31,6,47r14,4v-12,0,-13,18,-2,22v-3,31,2,62,13,90xm121,-58v0,-1,-2,-2,0,-2r0,2xm75,-91v1,3,-3,7,-2,2xm64,-228v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm77,-155v1,1,2,3,2,0r-2,0xm77,-135v2,-1,3,-3,0,-5v-1,2,-2,3,0,5xm104,-104v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm82,-109r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm110,-80v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm55,-128v2,-2,3,-4,0,-5v-2,2,-1,3,0,5xm108,-69v1,1,4,5,3,0r-3,0xm102,-70v3,0,0,-3,0,-1r0,1xm32,-1v3,0,4,-2,1,-4v-1,1,-3,3,-1,4xm70,-242v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":136},"\u00cb":{"d":"110,-240v0,2,0,4,-2,3v0,-2,0,-4,2,-3xm62,-231v15,-4,29,4,40,-3v-3,9,3,18,-5,32r-56,3v0,-15,1,-26,3,-34v2,9,20,-3,18,2xm44,-195v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm42,-166v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm44,-155v1,1,1,3,0,4v-2,0,-1,-4,0,-4xm42,-148v2,0,1,3,0,4v-2,-1,-3,-3,0,-4xm82,-109v-8,12,-25,-4,-37,5v-10,-14,-4,-48,23,-31v5,-2,16,-6,16,3v0,8,-1,15,-2,23xm37,-5v-1,11,-15,0,-26,3r0,-226v5,-1,14,-2,26,-3v-1,17,2,36,-1,51v-7,0,-4,6,-3,12r4,-3r0,166xm42,-95r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm42,-78v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm42,-60v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm44,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm101,-36v-2,11,1,24,-6,36v-18,2,-37,-3,-52,-1r1,1v-6,-6,-2,-27,0,-36v8,8,35,-7,47,3xm30,-184v-1,-6,-9,-3,-4,0v1,1,3,3,4,0xm19,-175v3,0,3,-4,0,-4v-2,0,-1,4,0,4xm50,-133v3,-1,3,-4,0,-5v-1,1,-2,4,0,5xm22,-155v2,-2,1,-3,0,-5v-3,2,-3,4,0,5xm68,-109v0,2,3,0,1,0r-1,0xm26,-146v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm26,-138v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm13,-142v4,0,8,-3,0,-2r0,2xm75,-32v2,0,3,-2,0,-2v-3,0,-1,2,0,2xm65,-32v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm88,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm64,-26v-1,-1,-2,-3,-2,0r2,0xm77,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm73,0v2,-1,1,-4,0,-5v-3,1,-3,4,0,5xm28,-186v0,1,-1,2,-2,2v0,-1,1,-2,2,-2xm89,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm46,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm70,-249v2,2,4,0,2,-2xm67,-249v2,2,4,0,2,-2xm28,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm25,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3","w":106},"\u00c8":{"d":"110,-240v0,2,0,4,-2,3v0,-2,0,-4,2,-3xm62,-231v15,-4,29,4,40,-3v-3,9,3,18,-5,32r-56,3v0,-15,1,-26,3,-34v2,9,20,-3,18,2xm44,-195v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm42,-166v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm44,-155v1,1,1,3,0,4v-2,0,-1,-4,0,-4xm42,-148v2,0,1,3,0,4v-2,-1,-3,-3,0,-4xm82,-109v-8,12,-25,-4,-37,5v-10,-14,-4,-48,23,-31v5,-2,16,-6,16,3v0,8,-1,15,-2,23xm37,-5v-1,11,-15,0,-26,3r0,-226v5,-1,14,-2,26,-3v-1,17,2,36,-1,51v-7,0,-4,6,-3,12r4,-3r0,166xm42,-95r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm42,-78v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm42,-60v2,1,1,3,0,4v-2,0,-3,-3,0,-4xm44,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm101,-36v-2,11,1,24,-6,36v-18,2,-37,-3,-52,-1r1,1v-6,-6,-2,-27,0,-36v8,8,35,-7,47,3xm30,-184v-1,-6,-9,-3,-4,0v1,1,3,3,4,0xm19,-175v3,0,3,-4,0,-4v-2,0,-1,4,0,4xm50,-133v3,-1,3,-4,0,-5v-1,1,-2,4,0,5xm22,-155v2,-2,1,-3,0,-5v-3,2,-3,4,0,5xm68,-109v0,2,3,0,1,0r-1,0xm26,-146v3,-1,2,-4,0,-5v-2,1,-3,4,0,5xm26,-138v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm13,-142v4,0,8,-3,0,-2r0,2xm75,-32v2,0,3,-2,0,-2v-3,0,-1,2,0,2xm65,-32v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm88,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm64,-26v-1,-1,-2,-3,-2,0r2,0xm77,0v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm73,0v2,-1,1,-4,0,-5v-3,1,-3,4,0,5xm28,-186v0,1,-1,2,-2,2v0,-1,1,-2,2,-2xm72,-257v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm51,-238v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm44,-259v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm50,-240v2,1,4,-2,2,-2v-1,0,-2,0,-2,2","w":106},"\u00cd":{"d":"49,-155v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm43,-37v6,28,-2,44,-31,35v0,4,-5,1,0,0r0,-227v17,5,32,-18,31,11v-1,20,-1,36,1,56r1,-1v-4,38,-1,82,-2,126xm16,-221v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm13,-220v-1,4,3,12,5,8v0,-6,-2,-8,-5,-8xm32,-245v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":54},"\u00ce":{"d":"40,-280v1,0,1,0,1,1v-1,0,-1,0,-1,-1xm53,-264v0,1,0,1,-1,1xm48,-263v0,-3,4,-1,1,0r-1,0xm60,-248v-1,2,-3,0,-1,0r1,0xm-7,-240v7,-7,18,-59,41,-44v3,1,24,40,24,44v-24,7,-22,-25,-33,-32v-9,15,-7,35,-32,32xm25,-284v1,0,1,-1,1,-2v-1,0,-1,1,-1,2xm49,-155v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm43,-37v6,28,-2,44,-31,35v0,4,-5,1,0,0r0,-227v17,5,32,-18,31,11v-1,20,-1,36,1,56r1,-1v-4,38,-1,82,-2,126xm16,-221v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm13,-220v-1,4,3,12,5,8v0,-6,-2,-8,-5,-8","w":54},"\u00cf":{"d":"49,-155v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm43,-37v6,28,-2,44,-31,35v0,4,-5,1,0,0r0,-227v17,5,32,-18,31,11v-1,20,-1,36,1,56r1,-1v-4,38,-1,82,-2,126xm16,-221v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm13,-220v-1,4,3,12,5,8v0,-6,-2,-8,-5,-8xm65,-274v-7,12,-1,37,-27,23r0,-21v10,-2,17,-2,27,-2xm22,-274v-9,8,0,38,-27,23r0,-21v10,-2,17,-2,27,-2xm46,-249v2,2,4,0,2,-2xm43,-249v2,2,4,0,2,-2xm4,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3xm1,-248v2,-1,2,-2,0,-3v-1,1,-1,2,0,3","w":54},"\u00cc":{"d":"49,-155v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm43,-37v6,28,-2,44,-31,35v0,4,-5,1,0,0r0,-227v17,5,32,-18,31,11v-1,20,-1,36,1,56r1,-1v-4,38,-1,82,-2,126xm16,-221v3,-1,2,-3,0,-5v-2,2,-3,4,0,5xm13,-220v-1,4,3,12,5,8v0,-6,-2,-8,-5,-8xm43,-257v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm22,-238v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm15,-259v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm21,-240v2,1,4,-2,2,-2v-1,0,-2,0,-2,2","w":54},"\u00d3":{"d":"98,-211v-2,1,-2,-4,-2,-6v3,1,4,4,2,6xm114,-195v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm45,-182v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm109,-211v2,23,7,43,0,65v-1,3,8,6,3,8r0,98v-10,12,-26,49,-53,35v-8,-21,21,-35,21,-51r0,-92r3,-3v-7,-26,-4,-57,-22,-51v2,-5,-5,-20,-2,-33v9,-1,15,0,13,11v3,-4,6,-15,9,-2v1,-7,9,-2,15,-2v0,1,-6,12,-4,15v-4,-2,-14,-3,-14,2v-1,13,20,2,25,7v4,0,6,-2,6,-7xm50,-109v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm49,-102v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm45,-64v-14,8,5,26,9,35r0,29v-74,-15,-39,-114,-47,-191v0,-13,4,-19,12,-19v-3,-22,24,-6,29,-25v2,0,4,-1,6,-1r0,30v-22,13,-14,56,-16,93v1,35,-1,34,7,49xm50,-71v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm43,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm87,-193v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm78,-202v1,1,4,5,3,0r-3,0xm79,-194v1,-1,3,-1,1,-2v-1,1,-3,1,-1,2xm107,-138v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm25,-215v-1,1,-2,6,0,7v0,-2,2,-5,0,-7xm107,-124v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm110,-118v0,-3,-4,-5,-3,0r3,0xm103,-122v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm102,-116v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm83,-122v-1,0,-2,4,0,4v1,-1,1,-3,0,-4xm37,-142v0,1,-2,2,0,2r0,-2xm38,-62v3,-1,3,-3,0,-4v-1,0,-1,3,0,4xm67,-246v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":118},"\u00d4":{"d":"75,-280v1,0,1,0,1,1xm88,-265v1,0,2,2,0,2r0,-2xm83,-263v0,-3,4,-1,1,0r-1,0xm95,-247v0,0,-2,-1,0,-1r0,1xm28,-240v7,-7,18,-59,41,-44v3,1,24,40,24,44v-24,7,-21,-25,-33,-32v-7,15,-7,35,-32,32xm61,-284v0,0,0,-2,-1,-2v0,0,0,2,1,2xm98,-211v-2,1,-2,-4,-2,-6v3,1,4,4,2,6xm114,-195v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm45,-182v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm109,-211v2,23,7,43,0,65v-1,3,8,6,3,8r0,98v-10,12,-26,49,-53,35v-8,-21,21,-35,21,-51r0,-92r3,-3v-7,-26,-4,-57,-22,-51v2,-5,-5,-20,-2,-33v9,-1,15,0,13,11v3,-4,6,-15,9,-2v1,-7,9,-2,15,-2v0,1,-6,12,-4,15v-4,-2,-14,-3,-14,2v-1,13,20,2,25,7v4,0,6,-2,6,-7xm50,-109v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm49,-102v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm45,-64v-14,8,5,26,9,35r0,29v-74,-15,-39,-114,-47,-191v0,-13,4,-19,12,-19v-3,-22,24,-6,29,-25v2,0,4,-1,6,-1r0,30v-22,13,-14,56,-16,93v1,35,-1,34,7,49xm50,-71v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm43,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm87,-193v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm78,-202v1,1,4,5,3,0r-3,0xm79,-194v1,-1,3,-1,1,-2v-1,1,-3,1,-1,2xm107,-138v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm25,-215v-1,1,-2,6,0,7v0,-2,2,-5,0,-7xm107,-124v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm110,-118v0,-3,-4,-5,-3,0r3,0xm103,-122v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm102,-116v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm83,-122v-1,0,-2,4,0,4v1,-1,1,-3,0,-4xm37,-142v0,1,-2,2,0,2r0,-2xm38,-62v3,-1,3,-3,0,-4v-1,0,-1,3,0,4","w":118},"\u00d2":{"d":"98,-211v-2,1,-2,-4,-2,-6v3,1,4,4,2,6xm114,-195v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm45,-182v1,1,1,2,0,3v-1,-1,-1,-2,0,-3xm109,-211v2,23,7,43,0,65v-1,3,8,6,3,8r0,98v-10,12,-26,49,-53,35v-8,-21,21,-35,21,-51r0,-92r3,-3v-7,-26,-4,-57,-22,-51v2,-5,-5,-20,-2,-33v9,-1,15,0,13,11v3,-4,6,-15,9,-2v1,-7,9,-2,15,-2v0,1,-6,12,-4,15v-4,-2,-14,-3,-14,2v-1,13,20,2,25,7v4,0,6,-2,6,-7xm50,-109v1,1,2,4,0,5v-3,-1,-2,-4,0,-5xm49,-102v0,1,0,2,-2,2r0,-4v2,0,2,1,2,2xm45,-64v-14,8,5,26,9,35r0,29v-74,-15,-39,-114,-47,-191v0,-13,4,-19,12,-19v-3,-22,24,-6,29,-25v2,0,4,-1,6,-1r0,30v-22,13,-14,56,-16,93v1,35,-1,34,7,49xm50,-71v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm43,-56v2,1,3,4,0,5v-3,-1,-2,-4,0,-5xm87,-193v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm78,-202v1,1,4,5,3,0r-3,0xm79,-194v1,-1,3,-1,1,-2v-1,1,-3,1,-1,2xm107,-138v2,0,3,-3,0,-4v-2,1,-1,3,0,4xm25,-215v-1,1,-2,6,0,7v0,-2,2,-5,0,-7xm107,-124v2,-1,3,-3,0,-4v-2,0,-1,3,0,4xm110,-118v0,-3,-4,-5,-3,0r3,0xm103,-122v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm102,-116v1,-1,1,-2,0,-3v-1,1,-1,2,0,3xm83,-122v-1,0,-2,4,0,4v1,-1,1,-3,0,-4xm37,-142v0,1,-2,2,0,2r0,-2xm38,-62v3,-1,3,-3,0,-4v-1,0,-1,3,0,4xm74,-258v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm53,-239v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm46,-260v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm52,-241v2,1,4,-2,2,-2v-1,0,-2,0,-2,2","w":118},"\u00da":{"d":"124,-155v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm115,-133v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm113,-233v1,25,-2,58,2,71v-8,33,8,85,-7,111v-9,-6,-32,8,-29,-15r3,-164v17,0,15,-2,31,-3xm50,-155v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm50,-124v1,0,4,4,0,4v-2,0,-1,-4,0,-4xm108,-44v-1,-1,-3,-2,0,-2r0,2xm44,-53v-9,10,1,14,13,27r0,25v-59,2,-50,-66,-49,-127v2,-2,4,-4,0,-5r0,-96v20,2,28,-9,36,-1v-5,4,-7,23,3,26r-7,0v-2,25,5,54,-1,73v4,13,0,23,3,34v-1,-1,-2,-2,-2,-3v-1,16,3,30,-1,41v0,4,2,7,5,6xm113,-40v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm50,-102v3,1,3,3,0,5v-1,-2,-2,-3,0,-5xm97,-40v2,2,3,3,0,4v-3,-1,-2,-2,0,-4xm93,-29v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm46,-66v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm62,-29v4,-1,20,-28,26,-14v2,7,-9,5,-13,9v-2,4,12,2,13,8v-5,-2,-14,4,-6,4r20,0v-1,12,-26,28,-40,20r0,-27xm90,-221v3,-1,3,-5,0,-5v-1,0,-2,4,0,5xm17,-217v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm13,-220v2,0,1,-3,0,-3v-2,0,-3,3,0,3xm101,-104v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm95,-100v2,-1,2,-3,0,-4v-2,1,-2,3,0,4xm110,-62v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm20,-118v2,-1,1,-2,0,-4v-3,2,-3,3,0,4xm28,-113v0,-2,-4,-3,-4,0v0,2,4,3,4,0xm11,-122r0,-4v-2,0,-2,1,-2,2v0,1,0,2,2,2xm84,-44v-2,0,-1,3,-1,4v2,0,2,-3,1,-4xm17,-80v2,-1,0,-3,0,-1r0,1xm13,-66v3,1,2,-3,2,-5v-3,-1,-2,3,-2,5xm26,-53v-1,-1,-2,-3,-2,0r2,0xm15,-58v5,-1,6,-4,0,-4r0,4xm15,-49v2,0,6,1,5,-2v-2,0,-6,-1,-5,2xm69,-246v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":123},"\u00db":{"d":"75,-280v1,0,1,0,1,1xm88,-265v1,0,2,2,0,2r0,-2xm83,-263v0,-3,4,-1,1,0r-1,0xm95,-247v0,0,-2,-1,0,-1r0,1xm28,-240v7,-7,18,-59,41,-44v3,1,24,40,24,44v-24,7,-21,-25,-33,-32v-7,15,-7,35,-32,32xm61,-284v0,0,0,-2,-1,-2v0,0,0,2,1,2xm124,-155v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm115,-133v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm113,-233v1,25,-2,58,2,71v-8,33,8,85,-7,111v-9,-6,-32,8,-29,-15r3,-164v17,0,15,-2,31,-3xm50,-155v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm50,-124v1,0,4,4,0,4v-2,0,-1,-4,0,-4xm108,-44v-1,-1,-3,-2,0,-2r0,2xm44,-53v-9,10,1,14,13,27r0,25v-59,2,-50,-66,-49,-127v2,-2,4,-4,0,-5r0,-96v20,2,28,-9,36,-1v-5,4,-7,23,3,26r-7,0v-2,25,5,54,-1,73v4,13,0,23,3,34v-1,-1,-2,-2,-2,-3v-1,16,3,30,-1,41v0,4,2,7,5,6xm113,-40v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm50,-102v3,1,3,3,0,5v-1,-2,-2,-3,0,-5xm97,-40v2,2,3,3,0,4v-3,-1,-2,-2,0,-4xm93,-29v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm46,-66v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm62,-29v4,-1,20,-28,26,-14v2,7,-9,5,-13,9v-2,4,12,2,13,8v-5,-2,-14,4,-6,4r20,0v-1,12,-26,28,-40,20r0,-27xm90,-221v3,-1,3,-5,0,-5v-1,0,-2,4,0,5xm17,-217v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm13,-220v2,0,1,-3,0,-3v-2,0,-3,3,0,3xm101,-104v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm95,-100v2,-1,2,-3,0,-4v-2,1,-2,3,0,4xm110,-62v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm20,-118v2,-1,1,-2,0,-4v-3,2,-3,3,0,4xm28,-113v0,-2,-4,-3,-4,0v0,2,4,3,4,0xm11,-122r0,-4v-2,0,-2,1,-2,2v0,1,0,2,2,2xm84,-44v-2,0,-1,3,-1,4v2,0,2,-3,1,-4xm17,-80v2,-1,0,-3,0,-1r0,1xm13,-66v3,1,2,-3,2,-5v-3,-1,-2,3,-2,5xm26,-53v-1,-1,-2,-3,-2,0r2,0xm15,-58v5,-1,6,-4,0,-4r0,4xm15,-49v2,0,6,1,5,-2v-2,0,-6,-1,-5,2","w":123},"\u00d9":{"d":"124,-155v2,0,1,4,0,4v-2,0,-3,-4,0,-4xm115,-133v2,2,1,3,0,5v-2,-2,-2,-4,0,-5xm113,-233v1,25,-2,58,2,71v-8,33,8,85,-7,111v-9,-6,-32,8,-29,-15r3,-164v17,0,15,-2,31,-3xm50,-155v3,0,3,4,0,4v-2,0,-1,-4,0,-4xm50,-124v1,0,4,4,0,4v-2,0,-1,-4,0,-4xm108,-44v-1,-1,-3,-2,0,-2r0,2xm44,-53v-9,10,1,14,13,27r0,25v-59,2,-50,-66,-49,-127v2,-2,4,-4,0,-5r0,-96v20,2,28,-9,36,-1v-5,4,-7,23,3,26r-7,0v-2,25,5,54,-1,73v4,13,0,23,3,34v-1,-1,-2,-2,-2,-3v-1,16,3,30,-1,41v0,4,2,7,5,6xm113,-40v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm50,-102v3,1,3,3,0,5v-1,-2,-2,-3,0,-5xm97,-40v2,2,3,3,0,4v-3,-1,-2,-2,0,-4xm93,-29v1,2,2,3,0,5v-3,-1,-2,-3,0,-5xm46,-66v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm62,-29v4,-1,20,-28,26,-14v2,7,-9,5,-13,9v-2,4,12,2,13,8v-5,-2,-14,4,-6,4r20,0v-1,12,-26,28,-40,20r0,-27xm90,-221v3,-1,3,-5,0,-5v-1,0,-2,4,0,5xm17,-217v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm13,-220v2,0,1,-3,0,-3v-2,0,-3,3,0,3xm101,-104v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm95,-100v2,-1,2,-3,0,-4v-2,1,-2,3,0,4xm110,-62v3,-1,3,-3,0,-4v-2,0,-1,3,0,4xm20,-118v2,-1,1,-2,0,-4v-3,2,-3,3,0,4xm28,-113v0,-2,-4,-3,-4,0v0,2,4,3,4,0xm11,-122r0,-4v-2,0,-2,1,-2,2v0,1,0,2,2,2xm84,-44v-2,0,-1,3,-1,4v2,0,2,-3,1,-4xm17,-80v2,-1,0,-3,0,-1r0,1xm13,-66v3,1,2,-3,2,-5v-3,-1,-2,3,-2,5xm26,-53v-1,-1,-2,-3,-2,0r2,0xm15,-58v5,-1,6,-4,0,-4r0,4xm15,-49v2,0,6,1,5,-2v-2,0,-6,-1,-5,2xm76,-255v1,1,2,3,0,4v-3,-1,-2,-2,0,-4xm55,-236v-15,-1,-13,-27,-21,-42v13,-1,36,-1,31,10v0,5,1,9,2,13v5,0,7,3,7,10v0,8,-16,9,-19,9xm48,-257v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm54,-238v2,1,4,-2,2,-2v-1,0,-2,0,-2,2","w":123},"\u00af":{"d":"93,-247v-31,-2,-52,4,-76,0r0,-19v11,1,20,-5,29,0v2,-4,2,-4,4,0r42,0v2,4,5,10,1,19xm40,-268v-1,3,3,4,3,1","w":109},"\u02c9":{"d":"93,-247v-31,-2,-52,4,-76,0r0,-19v11,1,20,-5,29,0v2,-4,2,-4,4,0r42,0v2,4,5,10,1,19xm40,-268v-1,3,3,4,3,1","w":109},"\u00a6":{"d":"36,-241v3,8,-3,26,9,26v-13,4,-11,20,-8,37v14,4,-9,9,1,18v2,0,5,-1,5,1v-8,5,-6,19,-5,31v-10,1,-20,2,-28,-1v-4,-48,6,-57,-1,-112r27,0xm40,-102v4,-1,8,2,5,4v-2,0,-4,-2,-5,-4xm41,-74v3,-1,7,4,4,4v-2,0,-4,-1,-4,-4xm36,-33v4,27,0,36,-25,34v-4,-29,1,-81,-1,-119r28,0v3,22,-3,40,-1,58v5,1,10,5,1,6v1,3,4,3,6,4v-6,1,-8,7,-8,17xm40,-36v2,-4,9,2,4,3v-2,0,-3,-1,-4,-3xm25,-27v2,-2,0,-5,-3,-4v-2,0,-1,0,-1,2v1,1,3,2,4,2","w":48},"\u00d0":{"d":"130,-190v1,-1,4,-1,5,0v-2,1,-4,1,-5,0xm62,-179v1,2,-1,2,-3,2v-1,-2,1,-2,3,-2xm126,-195r2,129v-6,7,-2,19,-2,28v-4,1,-13,30,-23,27v-12,-5,-22,-3,-34,0v4,-4,4,-14,13,-13v-8,-12,-17,22,-20,11r-5,0r0,-18r12,0r-5,7v5,1,27,-18,29,-22r0,-132v0,-14,-18,-24,-36,-23v2,-15,-7,-33,13,-32v36,-1,45,17,56,38xm135,-53r0,4v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2xm44,-70v-2,11,-15,11,-22,17v6,-13,1,-30,2,-47r-18,-3r0,-19v7,0,13,0,18,-2r0,-106v13,-3,29,-5,29,11r0,97r4,0r0,-4v2,0,3,4,1,4v9,-1,14,-1,11,10r3,0v-1,2,-4,6,-3,9r-19,0xm132,-51v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm59,-71v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm66,-62v0,1,-1,2,-2,2v-2,0,-3,-4,0,-4v1,0,2,1,2,2xm99,-9v3,1,3,3,0,4v-2,0,-1,-3,0,-4xm66,-38v2,1,3,3,0,5v-1,-2,-2,-3,0,-5xm79,-9v3,1,3,3,0,4v-2,0,-1,-3,0,-4xm66,-7v4,-1,10,1,6,3v-3,0,-5,-1,-6,-3xm59,-7v0,0,2,0,2,1xm53,-26v0,22,-16,11,-27,24r3,2r-5,0v5,-18,-13,-54,14,-51v10,0,15,8,15,25xm49,-9v2,1,1,3,0,4v-3,0,-3,-3,0,-4xm42,-5v-1,-1,-3,-2,0,-2r0,2xm35,-4v2,1,2,3,0,3v-2,0,-3,-2,0,-3xm66,-228v2,0,3,-4,0,-4v-2,0,-1,4,0,4xm122,-121v2,1,2,-1,2,-3v-2,-1,-2,1,-2,3xm122,-97v1,-2,2,-3,0,-5v-3,1,-3,3,0,5xm102,-55v2,-2,1,-3,0,-5v-3,2,-3,4,0,5xm97,-58v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm31,-123r0,0r0,0xm101,-51v0,-1,0,-2,-2,-2r0,4v2,0,2,-1,2,-2xm46,-100v0,0,0,-2,-1,-2v-1,0,-1,1,-1,2r2,0xm93,-38v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm89,-33v1,-1,4,-4,0,-3r0,3xm97,-18v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm26,-86v2,-1,4,-2,0,-2r0,2xm84,-20v2,0,1,-4,0,-4v-2,0,-1,4,0,4xm37,-66v2,-2,2,-4,0,-5v-2,2,-1,3,0,5xm29,-58v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm29,-44v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm42,-15v-1,-3,-2,-7,-2,0r2,0xm26,-22v3,1,9,-2,8,-4v-3,0,-5,1,-8,4xm26,-24v3,-1,3,-3,0,-5v-1,2,-2,3,0,5","w":134},"\u00dd":{"d":"122,-220v-20,34,-26,78,-41,116v-4,-7,-9,-22,-16,-44v5,-19,12,-46,20,-82r36,0v2,2,-10,12,1,10xm25,-232v-3,0,-1,-1,-1,-1xm63,-179v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm59,-159v0,32,31,64,20,104v1,15,-3,35,2,46v-10,9,-7,7,-20,9v3,-1,11,-5,4,-5v-10,0,-17,8,-22,3v7,-27,1,-66,3,-98v-13,-34,-43,-124,-40,-130v16,0,17,-2,32,-3v1,9,3,13,8,13v0,12,3,45,13,43v-3,8,-1,14,3,18r-3,0xm90,-33v2,0,3,4,0,4v-2,0,-3,-4,0,-4xm85,-19v2,1,2,1,0,2v-1,-1,-1,-1,0,-2xm44,-163v2,-1,2,-1,0,-2v-1,1,-1,1,0,2xm37,-166v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm30,-159v2,-1,3,-3,0,-5v-2,2,-2,4,0,5xm67,-244v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35","w":126},"\u00fd":{"d":"64,-176v-1,1,-2,3,-2,0r2,0xm44,-218v3,30,14,50,18,74v7,-17,14,-45,22,-84r35,0v0,0,-1,3,-3,8v2,1,6,8,0,7v-18,27,-23,93,-39,112v8,19,-3,63,2,89v2,8,-12,16,-20,10v3,-1,6,-1,5,-5r-22,6v4,-26,1,-57,2,-86v-14,-2,-38,-4,-41,-13v9,-12,7,-15,15,-4v2,-8,2,-10,2,-16v-6,0,-10,-2,-9,-5r22,0v-4,-38,-25,-68,-28,-103v7,-5,22,-3,33,-3v0,10,2,14,6,13xm39,-86v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm89,-34v1,1,1,1,0,2v-1,-1,-1,-1,0,-2xm29,-85v2,1,3,3,0,4v-2,0,-3,-3,0,-4xm86,-17v-6,0,-6,-4,0,-3r0,3xm64,-142v0,8,0,12,4,18v0,-7,0,-10,-4,-18xm72,-122v0,-1,-1,-2,-2,-2r0,4v1,0,2,-1,2,-2xm75,-107v1,-3,-2,-10,-3,-6v0,2,1,4,3,6xm36,-107v5,-2,2,-16,-7,-13v4,3,7,7,7,13xm40,-102v0,-2,-3,-1,-4,-1v0,2,2,2,4,1xm24,-113v0,-1,0,-2,-2,-2r0,4v2,0,2,-1,2,-2xm71,-244v-29,4,-14,-28,-6,-35r26,0v-2,17,-14,23,-20,35"},"\u00de":{"d":"122,-137v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm55,-150v2,0,3,4,0,4v-2,0,-1,-4,0,-4xm102,-173v19,16,3,45,13,63v-5,5,-4,10,-2,14v0,11,-25,50,-40,39r-29,4v-3,-9,-5,-48,10,-33v22,1,39,-49,16,-64v-8,-11,4,-15,-6,-23v-3,5,-5,10,-5,14v-7,-2,-9,-3,-18,0v0,-7,-1,-20,3,-22v16,1,32,-9,49,-3v-2,8,10,1,9,11xm44,-128v0,2,1,5,-2,4xm44,-117v0,1,-1,2,-2,2v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2v1,0,2,1,2,2xm44,-106v0,1,-1,2,-2,2v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2v1,0,2,1,2,2xm37,-61v7,7,2,20,6,32v-13,6,7,32,-21,29v-3,-4,-10,-3,-15,-5v-2,-22,-2,-58,7,-66v-1,0,-3,-1,-5,-2r0,-150v4,1,5,-1,4,-5v8,0,15,6,25,7r2,157v-2,1,-2,2,-3,3xm80,-181v-1,-1,-4,-2,-4,0v1,1,3,1,4,0xm76,-149v1,1,2,2,2,-1xm111,-110v2,-2,1,-4,0,-5v-2,1,-2,4,0,5xm82,-135v2,-1,1,-4,0,-5v-2,1,-3,4,0,5xm84,-108v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm19,-90v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm11,-89v2,0,3,-3,0,-4v-2,1,-3,3,0,4xm13,-84v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm22,-68v2,0,1,-2,0,-2v-2,1,-2,1,0,2xm38,-38v2,0,1,-3,0,-4v-2,1,-3,3,0,4xm38,-32v3,0,0,-3,0,-1r0,1","w":120},"\u00fe":{"d":"122,-95v0,2,0,2,-2,2v0,-2,0,-2,2,-2xm57,-106v0,1,-1,2,-2,2r0,-4v1,0,2,1,2,2xm102,-130v20,16,3,45,13,62v-5,5,-4,10,-2,14v0,12,-25,50,-40,39r-29,4v-3,-8,-5,-48,10,-33v24,1,38,-49,16,-64v-8,-10,4,-16,-6,-22v-3,4,-5,9,-5,13v-7,-2,-9,-3,-18,0v0,-7,-1,-20,3,-22v16,1,32,-9,49,-3v-2,8,11,1,9,12xm44,-86v0,2,1,5,-2,4xm44,-75v0,1,-1,2,-2,2v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2v1,0,2,1,2,2xm44,-64v0,1,-1,2,-2,2v-1,0,-2,-1,-2,-2v0,-1,1,-2,2,-2v1,0,2,1,2,2xm37,-19v7,7,2,20,6,32v-13,6,7,32,-21,29v-2,-4,-10,-4,-15,-4v-2,-23,-2,-58,7,-67v-1,0,-3,0,-5,-2r0,-150v4,1,5,-1,4,-5v8,0,15,6,25,7r2,157v-2,1,-2,2,-3,3xm80,-139v-1,-1,-4,-2,-4,0v1,1,3,1,4,0xm76,-107v1,1,2,2,2,-1xm111,-68v2,-2,1,-3,0,-5v-2,2,-3,4,0,5xm82,-93r0,-4v-1,0,-2,1,-2,2v0,1,1,2,2,2xm84,-66v3,-1,2,-3,0,-5v-1,2,-2,3,0,5xm18,-49v0,2,3,0,1,0r-1,0xm11,-47v3,0,2,-3,0,-4v-2,1,-3,4,0,4xm13,-42v3,-1,2,-4,0,-5v-1,1,-2,4,0,5xm22,-25v2,-1,2,-2,0,-3v-2,1,-2,2,0,3xm38,5v1,-2,2,-3,0,-5v-2,1,-3,3,0,5xm38,10v3,0,0,-3,0,-1r0,1","w":120},"\u00ad":{"d":"9,-137v13,1,20,-6,28,0v2,-4,4,-5,4,0r43,0v2,4,2,14,0,19v-26,0,-51,3,-75,0r0,-19xm31,-138v1,2,3,2,3,-1","w":92},"\u2212":{"d":"9,-137v13,1,20,-6,28,0v2,-4,4,-5,4,0r43,0v2,4,2,14,0,19v-26,0,-51,3,-75,0r0,-19xm31,-138v1,2,3,2,3,-1","w":92},"\u00d7":{"d":"8,-151v8,-20,17,-3,35,9v5,-4,13,-10,22,-19v4,6,10,8,17,12v-7,-1,-5,0,-4,5v-18,1,-29,20,-12,27v0,7,22,16,1,21v-12,-8,-12,-17,-28,-17v-10,11,-16,21,-27,11v2,-2,-2,-3,-4,-4v7,-9,18,-13,22,-25v-8,-6,-13,-15,-22,-20xm43,-115v0,-1,-1,-1,-2,-1v0,1,1,1,2,1","w":92},"\u00b9":{"d":"33,-232v1,0,1,0,1,1xm34,-230r0,2r0,-2xm26,-230v2,1,0,3,0,1r0,-1xm37,-219v2,1,1,2,0,3v-1,-2,-1,-1,0,-3xm18,-205v1,1,2,2,0,3v-1,-2,-1,-1,0,-3xm6,-215v1,0,1,2,0,2r0,-2xm7,-206v-4,0,-5,0,-3,-4xm40,-159v1,0,1,2,0,2r0,-2xm38,-196r-1,82v0,-2,2,-3,2,0v-1,12,-7,18,-21,16r3,-104v-6,-4,2,-9,-2,-12v-4,-1,-6,15,-11,4v2,-1,0,-6,0,-8v1,-2,6,12,5,2v1,-10,12,-7,17,-12v-1,3,1,3,3,2v2,0,3,-1,4,-1v-2,10,0,25,0,34xm20,-221v2,-1,0,-5,-1,-2v0,1,0,1,1,2xm20,-219v-1,0,-2,-2,-2,0r2,0xm27,-206v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm31,-201v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm17,-214r0,-2r0,2xm20,-206v1,-1,1,-2,0,-3v-1,1,-2,2,0,3xm23,-202v2,-1,1,-2,0,-3v-1,2,-1,1,0,3xm26,-199v0,0,2,-1,0,-1r0,1xm21,-199v0,0,2,-1,0,-1r0,1xm36,-171v2,-1,0,-3,0,-1r0,1xm22,-179v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm36,-152r0,-2v-2,0,-1,2,0,2xm27,-98v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm25,-98r0,-3v-2,1,-1,2,0,3","w":43},"\u00b2":{"d":"67,-213v0,0,0,2,-1,2v0,0,0,-2,1,-2xm24,-232v39,-9,51,29,34,57v-8,1,-13,2,-16,8r3,0v0,5,-6,7,-11,5v3,-1,2,-5,2,-9v10,-4,19,-45,-3,-44v-16,7,-1,28,-26,21v-5,-15,7,-31,17,-38xm25,-202r0,2v-1,0,-1,-2,0,-2xm53,-167v0,2,-2,1,-3,1v1,-1,2,-1,3,-1xm49,-168v2,0,1,2,0,2v-2,0,-1,-2,0,-2xm49,-154r0,2v-1,0,-1,-2,0,-2xm46,-157v-4,14,-7,28,-21,34v0,7,-13,1,-18,3r22,-36v6,4,12,-3,17,-1xm54,-99v0,1,0,1,-1,1xm26,-123v1,0,1,0,1,1xm62,-110v4,13,-12,9,-22,12v1,-1,5,-2,2,-3v-5,3,-12,-2,-18,1v0,-3,4,-2,3,-6r-10,0v7,5,-3,5,-6,9v-7,-2,-5,-11,-5,-20v12,-1,32,4,37,-4v-1,7,9,3,14,4v5,-5,7,2,7,7r-2,0xm35,-99v0,1,0,1,-1,1xm28,-98v0,-1,1,-1,2,-1v0,1,-1,1,-2,1xm24,-102v-2,1,0,4,-3,3v0,-2,1,-3,3,-3xm50,-210v4,0,3,-1,0,-1r0,1xm46,-210v0,0,2,0,2,-1v0,0,-2,0,-2,1xm60,-185v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm48,-186v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm49,-176v1,0,4,-1,1,-1v0,0,0,1,-1,1xm19,-199v2,0,1,-2,0,-2v-2,0,-1,2,0,2xm59,-114r0,-2v-1,0,-1,2,0,2xm49,-111v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm56,-103v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm28,-129r0,-2r0,2xm23,-131v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm17,-135r0,2r0,-2xm34,-114r0,-2v-2,0,-1,2,0,2xm21,-121v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm31,-110v0,0,-1,-6,-2,-2v0,2,2,0,2,2xm16,-123v2,0,5,-1,1,-1xm28,-110r0,-2r0,2xm28,-109v1,0,1,0,1,-1xm30,-106v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm21,-114v0,2,3,0,1,0r-1,0xm24,-111v0,-1,0,-1,-1,-1xm23,-107v1,0,1,-3,0,-3v-1,0,-2,3,0,3xm17,-112v2,-1,0,-3,0,-1r0,1xm14,-114v2,0,1,-2,0,-2v-2,0,-1,2,0,2xm17,-109v0,2,3,0,1,0r-1,0xm10,-113v0,0,2,-1,0,-1r0,1xm17,-101v2,-1,0,-3,-1,-4v-2,1,0,2,1,4xm11,-107v2,0,1,-3,0,-3v-1,0,-2,3,0,3xm31,-112r0,1r0,-1xm17,-103r0,1r0,-1","w":67},"\u00b3":{"d":"63,-217v1,1,2,2,0,3v-2,-1,-1,-2,0,-3xm31,-233v2,15,-6,23,-6,35v-6,0,-22,2,-14,-5v-8,-6,8,-34,20,-30xm64,-154r0,2v-2,0,-1,-2,0,-2xm36,-236v14,4,24,6,23,28v6,1,-2,14,3,25v0,2,-12,12,-11,15v18,11,17,61,-5,66v1,0,2,-3,0,-3v-2,0,1,4,-1,3v-2,-7,-4,-1,-9,1v1,-22,14,-34,7,-62v-7,7,-17,-4,-16,-14v14,-6,16,-4,17,-21v2,-23,-17,-13,-8,-38xm25,-131v1,0,1,0,1,1xm45,-101v2,1,1,2,0,3v-1,-1,-2,-2,0,-3xm22,-138v-1,13,17,21,11,37v-21,4,-26,-19,-26,-37r15,0xm40,-99v0,2,-2,1,-3,1xm53,-211v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm46,-211v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm40,-215v1,-2,1,-1,0,-3v-1,1,-2,2,0,3xm47,-210r0,2r0,-2xm47,-190v0,2,3,0,1,0r-1,0xm46,-186v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm18,-200v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm44,-173r0,-3v-2,1,-1,2,0,3xm36,-177v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm15,-199r0,-2v-2,0,-1,2,0,2xm39,-173v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm38,-168v7,3,0,2,2,-5v-1,3,-2,5,-2,5xm36,-171v0,-2,-1,-4,-3,-4v0,3,1,4,3,4xm28,-176v1,4,5,1,1,0r-1,0xm47,-126v2,-1,0,-4,0,-2r0,2xm44,-121v0,2,3,0,1,0r-1,0xm47,-116r0,2r0,-2xm43,-116v1,-3,-2,-3,-2,-1v0,0,1,1,2,1xm50,-106v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm40,-112v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm39,-109v2,0,1,-2,0,-2v-2,0,-1,2,0,2xm41,-108v-1,0,-3,1,-1,1xm17,-130r-1,0r1,0xm13,-124v2,-1,2,-1,0,-2r0,2xm21,-111v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm15,-116v1,-1,1,-2,0,-3r0,3xm11,-117v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm15,-111r0,-3v-1,1,-2,2,0,3","w":65},"\u00bd":{"d":"164,-228v1,3,-20,24,-7,26v-12,2,-22,15,-31,36v1,1,4,1,3,4v-3,1,-18,7,-14,15r5,0v-23,14,-31,49,-50,69v-8,9,-17,17,-6,20v1,5,-14,2,-5,8v-11,-2,-34,46,-37,47v-7,0,-13,5,-23,4r110,-179v15,-10,12,-19,32,-50r23,0xm94,-101v-2,4,-4,4,-6,0r6,0xm76,-72v0,1,-1,2,-2,2v-2,0,-3,-1,-3,-2v0,-2,1,-2,3,-2v1,0,2,0,2,2xm49,-33v-1,0,-2,-1,-2,-3v5,-1,7,3,2,3xm33,-29v0,-2,-1,-2,-2,-2v-2,0,-3,0,-3,2v1,2,4,3,5,0xm40,-232v1,0,1,0,1,1xm41,-230r0,2r0,-2xm33,-230v2,1,0,3,0,1r0,-1xm44,-219v2,1,1,2,0,3v-1,-2,-1,-1,0,-3xm25,-205v1,1,2,2,0,3v-1,-2,-1,-1,0,-3xm13,-215v1,0,1,2,0,2r0,-2xm14,-206v-4,0,-5,0,-3,-4xm47,-159v1,0,1,2,0,2r0,-2xm45,-196r-1,82v0,-2,2,-3,2,0v-1,12,-7,18,-21,16r3,-104v-6,-4,2,-9,-2,-12v-4,-1,-6,15,-11,4v2,-1,0,-6,0,-8v1,-2,6,12,5,2v1,-10,12,-7,17,-12v-1,3,1,3,3,2v2,0,3,-1,4,-1v-2,10,0,25,0,34xm27,-221v2,-1,0,-5,-1,-2v0,1,0,1,1,2xm27,-219v-1,0,-2,-2,-2,0r2,0xm34,-206v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm38,-201v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm24,-214r0,-2r0,2xm27,-206v1,-1,1,-2,0,-3v-1,1,-2,2,0,3xm30,-202v2,-1,1,-2,0,-3v-1,2,-1,1,0,3xm33,-199v0,0,2,-1,0,-1r0,1xm28,-199v0,0,2,-1,0,-1r0,1xm43,-171v2,-1,0,-3,0,-1r0,1xm29,-179v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm43,-152r0,-2v-2,0,-1,2,0,2xm34,-98v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm32,-98r0,-3v-2,1,-1,2,0,3xm168,-114v0,0,0,2,-1,2v0,0,0,-2,1,-2xm125,-133v39,-9,51,29,34,57v-8,1,-13,2,-16,8r3,0v0,5,-6,7,-11,5v3,-1,2,-5,2,-9v10,-4,19,-45,-3,-44v-16,7,-1,28,-26,21v-5,-15,7,-31,17,-38xm126,-103r0,2v-1,0,-1,-2,0,-2xm154,-68v0,2,-2,1,-3,1v1,-1,2,-1,3,-1xm150,-69v2,0,1,2,0,2v-2,0,-1,-2,0,-2xm150,-55r0,2v-1,0,-1,-2,0,-2xm147,-58v-4,14,-7,28,-21,34v0,7,-13,1,-18,3r22,-36v6,4,12,-3,17,-1xm155,0v0,1,0,1,-1,1xm127,-24v1,0,1,0,1,1xm163,-11v4,13,-12,9,-22,12v1,-1,5,-2,2,-3v-5,3,-12,-2,-18,1v0,-3,4,-2,3,-6r-10,0v7,5,-3,5,-6,9v-7,-2,-5,-11,-5,-20v12,-1,32,4,37,-4v-1,7,9,3,14,4v5,-5,7,2,7,7r-2,0xm136,0v0,1,0,1,-1,1xm129,1v0,-1,1,-1,2,-1v0,1,-1,1,-2,1xm125,-3v-2,1,0,4,-3,3v0,-2,1,-3,3,-3xm151,-111v4,0,3,-1,0,-1r0,1xm147,-111v0,0,2,0,2,-1v0,0,-2,0,-2,1xm161,-86v1,-1,1,-1,0,-2v-1,1,-1,1,0,2xm149,-87v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm150,-77v1,0,4,-1,1,-1v0,0,0,1,-1,1xm120,-100v2,0,1,-2,0,-2v-2,0,-1,2,0,2xm160,-15r0,-2v-1,0,-1,2,0,2xm150,-12v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm157,-4v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm129,-30r0,-2r0,2xm124,-32v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm118,-36r0,2r0,-2xm135,-15r0,-2v-2,0,-1,2,0,2xm122,-22v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm132,-11v0,0,-1,-6,-2,-2v0,2,2,0,2,2xm117,-24v2,0,5,-1,1,-1xm129,-11r0,-2r0,2xm129,-10v1,0,1,0,1,-1xm131,-7v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm122,-15v0,2,3,0,1,0r-1,0xm125,-12v0,-1,0,-1,-1,-1xm124,-8v1,0,1,-3,0,-3v-1,0,-2,3,0,3xm118,-13v2,-1,0,-3,0,-1r0,1xm115,-15v2,0,1,-2,0,-2v-2,0,-1,2,0,2xm118,-10v0,2,3,0,1,0r-1,0xm111,-14v0,0,2,-1,0,-1r0,1xm118,-2v2,-1,0,-3,-1,-4v-2,1,0,2,1,4xm112,-8v2,0,1,-3,0,-3v-1,0,-2,3,0,3xm132,-13r0,1r0,-1xm118,-4r0,1r0,-1","w":170},"\u00bc":{"d":"40,-232v1,0,1,0,1,1xm41,-230r0,2r0,-2xm33,-230v2,1,0,3,0,1r0,-1xm44,-219v2,1,1,2,0,3v-1,-2,-1,-1,0,-3xm25,-205v1,1,2,2,0,3v-1,-2,-1,-1,0,-3xm13,-215v1,0,1,2,0,2r0,-2xm14,-206v-4,0,-5,0,-3,-4xm47,-159v2,0,1,2,0,2r0,-2xm46,-196v-4,24,-2,58,-2,82v1,-1,2,-3,2,0v-1,12,-7,18,-21,16r3,-104v-6,-4,2,-9,-2,-12v-4,-1,-6,15,-11,4v3,-2,0,-5,0,-8v1,-2,5,12,5,2v0,-10,12,-7,17,-12v0,4,1,3,4,2v1,0,2,-1,3,-1v-2,10,0,25,0,34xm27,-221v2,-1,0,-5,-1,-2v0,1,0,1,1,2xm27,-219v-1,0,-2,-2,-2,0r2,0xm34,-206v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm38,-201v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm24,-214r0,-2r0,2xm27,-206v1,-1,1,-2,0,-3v-1,1,-2,2,0,3xm30,-202v2,-1,0,-4,0,-2r0,2xm33,-199v0,0,2,-1,0,-1r0,1xm28,-199v0,0,2,-1,0,-1r0,1xm43,-171v2,-1,0,-3,0,-1r0,1xm29,-179v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm43,-152r0,-2v-2,0,-1,2,0,2xm34,-98v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm32,-98v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm164,-228v1,3,-20,24,-7,26v-12,2,-22,15,-31,36v1,1,4,1,3,4v-3,1,-18,7,-14,15r5,0v-23,14,-31,49,-50,69v-8,9,-17,17,-6,20v1,5,-14,2,-5,8v-11,-2,-34,46,-37,47v-7,0,-13,5,-23,4r110,-179v15,-10,12,-19,32,-50r23,0xm94,-101v-2,4,-4,4,-6,0r6,0xm76,-72v0,1,-1,2,-2,2v-2,0,-3,-1,-3,-2v0,-2,1,-2,3,-2v1,0,2,0,2,2xm49,-33v-1,0,-2,-1,-2,-3v5,-1,7,3,2,3xm33,-29v0,-2,-1,-2,-2,-2v-2,0,-3,0,-3,2v1,2,4,3,5,0xm149,-136v1,1,2,2,0,3v-1,-1,-1,-2,0,-3xm156,-85v1,1,1,2,0,3v-1,-1,-2,-2,0,-3xm166,-53r0,1r0,-1xm99,-36v0,-47,16,-44,32,-97v32,-6,13,26,20,46v1,17,-11,37,11,38v3,22,-20,11,-12,41v-1,3,-3,8,-8,7r2,-2r-11,0v1,-6,-2,-16,2,-19v-9,-1,2,-51,-7,-62v6,0,4,-2,2,-7r-1,-2v0,9,-16,28,-13,42r13,0v-1,6,4,17,-4,17v-9,0,-18,-1,-26,-2xm157,-32v-1,2,-3,0,-1,0r1,0xm134,-1v1,1,1,1,0,2v-1,-1,-2,-1,0,-2xm103,-30v-3,0,-6,0,-6,-3v3,0,5,1,6,3xm139,-131r0,-2v-1,0,-1,2,0,2xm134,-131r0,-2v-1,0,-1,2,0,2xm131,-122r3,-2xm135,-120v1,0,1,0,1,-1xm134,-120v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm142,-94v1,0,1,0,1,-1xm138,-94v2,0,1,-2,0,-3v-1,1,-2,3,0,3xm130,-95v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm135,-89r0,-1r0,1xm125,-98v-1,1,-2,0,-2,2v1,0,2,-1,2,-2xm139,-56r0,-2r0,2xm142,-19v1,-1,1,-2,0,-3v-1,1,-2,2,0,3xm134,-25v0,0,1,2,1,0r-1,0xm135,-14v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm135,-8v2,-1,0,-3,0,-1r0,1","w":170},"\u00be":{"d":"60,-217v1,1,2,2,0,3v-2,-1,-1,-2,0,-3xm28,-233v2,15,-6,23,-6,35v-7,0,-22,2,-14,-5v-7,-5,8,-34,20,-30xm61,-154r0,2v-1,0,-1,-2,0,-2xm33,-236v14,4,24,6,23,28v6,1,-1,15,3,25r-11,14v18,11,18,61,-4,67r0,-3v-1,1,0,3,-2,3v-3,-7,-3,-1,-9,1v1,-22,14,-34,7,-62v-7,7,-17,-5,-16,-13v12,-7,18,-5,17,-22v2,-23,-17,-13,-8,-38xm22,-131v1,0,1,0,1,1xm42,-101v2,1,1,2,0,3v-1,-1,-2,-2,0,-3xm19,-138v1,12,17,22,11,37v-19,4,-26,-19,-26,-37r15,0xm34,-98v1,-1,5,-1,2,0r-2,0xm50,-211v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm44,-211r0,-3v-2,1,-1,2,0,3xm37,-215v2,-1,1,-2,0,-3v-1,2,-1,1,0,3xm45,-208v2,0,1,-2,0,-2v-2,0,-1,2,0,2xm45,-189v0,0,2,-1,0,-1r0,1xm44,-186r0,-3v-1,1,-2,2,0,3xm15,-203r0,3v2,-1,1,-2,0,-3xm41,-173v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm33,-180r0,3v2,-1,1,-2,0,-3xm12,-199r0,-2v-2,0,-1,2,0,2xm36,-173v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm36,-168v0,3,2,2,3,1v-2,0,-2,-2,-2,-6v-1,3,-1,5,-1,5xm34,-171v0,-2,-1,-4,-4,-4v0,3,1,4,4,4xm27,-173v1,-1,1,-3,-1,-3xm45,-126v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm41,-121v0,2,3,0,1,0r-1,0xm45,-114v2,0,1,-2,0,-2v-2,0,-1,2,0,2xm40,-116v1,-1,1,-2,0,-3v-1,1,-2,2,0,3xm47,-106v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm37,-112v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm36,-109v2,0,1,-2,0,-2v-2,0,-1,2,0,2xm38,-108v-1,0,-3,1,-1,1xm14,-130r-1,0r1,0xm11,-124v1,-1,1,-1,0,-2r0,2xm18,-111v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm12,-116v1,-1,1,-2,0,-3r0,3xm8,-117v1,-1,2,-2,0,-3v-2,1,-1,2,0,3xm12,-111r0,-3v-1,1,-2,2,0,3xm164,-228v1,3,-20,24,-7,26v-12,2,-22,15,-31,36v1,1,4,1,3,4v-3,1,-18,7,-14,15r5,0v-23,14,-31,49,-50,69v-8,9,-17,17,-6,20v1,5,-14,2,-5,8v-11,-2,-34,46,-37,47v-7,0,-13,5,-23,4r110,-179v15,-10,12,-19,32,-50r23,0xm94,-101v-2,4,-4,4,-6,0r6,0xm76,-72v0,1,-1,2,-2,2v-2,0,-3,-1,-3,-2v0,-2,1,-2,3,-2v1,0,2,0,2,2xm49,-33v-1,0,-2,-1,-2,-3v5,-1,7,3,2,3xm33,-29v0,-2,-1,-2,-2,-2v-2,0,-3,0,-3,2v1,2,4,3,5,0xm149,-136v1,1,2,2,0,3v-1,-1,-1,-2,0,-3xm156,-85v1,1,1,2,0,3v-1,-1,-2,-2,0,-3xm166,-53r0,1r0,-1xm99,-36v0,-47,16,-44,32,-97v32,-6,13,26,20,46v1,17,-11,37,11,38v3,22,-20,11,-12,41v-1,3,-3,8,-8,7r2,-2r-11,0v1,-6,-2,-16,2,-19v-9,-1,2,-51,-7,-62v6,0,4,-2,2,-7r-1,-2v0,9,-16,28,-13,42r13,0v-1,6,4,17,-4,17v-9,0,-18,-1,-26,-2xm157,-32v-1,2,-3,0,-1,0r1,0xm134,-1v1,1,1,1,0,2v-1,-1,-2,-1,0,-2xm103,-30v-3,0,-6,0,-6,-3v3,0,5,1,6,3xm139,-131r0,-2v-1,0,-1,2,0,2xm134,-131r0,-2v-1,0,-1,2,0,2xm131,-122r3,-2xm135,-120v1,0,1,0,1,-1xm134,-120v1,-1,2,-2,0,-3v-1,1,-1,2,0,3xm142,-94v1,0,1,0,1,-1xm138,-94v2,0,1,-2,0,-3v-1,1,-2,3,0,3xm130,-95v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm135,-89r0,-1r0,1xm125,-98v-1,1,-2,0,-2,2v1,0,2,-1,2,-2xm139,-56r0,-2r0,2xm142,-19v1,-1,1,-2,0,-3v-1,1,-2,2,0,3xm134,-25v0,0,1,2,1,0r-1,0xm135,-14v2,-1,1,-2,0,-3v-1,1,-2,2,0,3xm135,-8v2,-1,0,-3,0,-1r0,1","w":170}}});

var Project = {

	init: function() {
		
		Nibble.loadControllers.bind(this)();
/*		Cufon.replace('h1', {
			textShadow: '#333 1px 1px, #fff -1px -1px'
		});*/
	}

}

Event.observe(document, "dom:loaded", Nibble.init.bind(Nibble));

var I18N = {

	"FOO": {
		'hu': "foo-hu",
		'en': "foo-en"
	},

	"BAR": {
		'hu': "bar-hu",
		'en': "bar-en"
	}
};
/* nibble.start of /www/hammerworld.portal/public/.nibble/controllers/content/content.js */
// zss.2009.07.09
// AutoLink FCKEditor API
function FCKeditor_OnComplete( editorInstance ) {
//	
	editorInstance.Events.AttachEvent( 'OnSelectionChange', AutoLinkURL ) ;
//	
/*	var oEditor = FCKeditorAPI.GetInstance('hu[text]') ;
	if (oEditor) oEditor.Events.AttachEvent( 'OnSelectionChange', AutoLinkURL ) ;*/
}

function AutoLinkURL( editorInstance ) {
//	
/*	var oEditor = FCKeditorAPI.GetInstance('hu[text]') ;
	var origData = oEditor.GetData();
	var newData = autolink(origData);

	if (origData != newData) {
		oEditor.SetData(newData);
		oEditor.Focus();
	}
*/
	//var oEditor = FCKeditorAPI.GetInstance('hu[text]') ;
	var origData = editorInstance.GetData();
	var newData = autolink(origData);

	if (origData != newData) {
		editorInstance.SetData(newData);
		editorInstance.Focus();
	}

}

// http://www.arstdesign.com/articles/autolink.html
function autolink(s) {   
	//var hlink = /\s(ht|f)tp:\/\/([^ \,\;\:\!\)\(\"\'\<\>\f\n\r\t\v])+/g;
	//var hlink = /(\s|\;|<p>)((ht|f)tp:\/\/([^ \,\;\:\!\)\(\"\'\<\>\f\n\r\t\v])+)/g;
	///^http(s?)[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i
	
	var hlink = /(\s|\;)(http(s?):\/\/(([A-Za-z0-9\-_]+\.)+)([A-Za-z0-9\.\/%&=\?\-_])+)(\s)/g;
	
	return (s.replace (hlink, function ($0,$1,$2,$3) { 
				//s = $0.substring(1,$0.length); 
				s = $2;
				/*
				
				
					
				*/			

				// remove trailing dots, if any
				//while (s.length>0 && s.charAt(s.length-1)=='.') s=s.substring(0,s.length-1);
				// add hlink
				return " "+s.link(s);
			}
		) 
	);
}

Project.Content = {                                                     
	
	initialize: function() {
		
		
		if (Nibble.needWidget("contentipe")) {
			this.initIpe();
		}
	},

	initPreview: function(element, event, domain, lang) {
		this.lang = lang;
		this.preview = $("box_content");
		this.box_darken = $("box_darken");
		this.iframe = this.createIframe();
		this.doPreview(event, domain, lang);
	},

	doPreview: function(event, domain, lang) {
		this.form = $("content_edit").down("form");
		//if (!this.form.getAttribute("_preview_action")) {
			this.form.setAttribute("_action", this.form.getAttribute("action"));
			this.form.setAttribute("_preview_action", "http://" + domain + "/contents/preview/" + lang + "/");
		//}
		this.form.setAttribute("action", this.form.getAttribute("_preview_action"));
		this.form.setAttribute("target", "if_preview");
		this.form.submit();
		
		$("box_darken").style.display="block";
		$("box_").style.display="block";
		$("box_center").style.display="block";
		$("box_content").style.display="block";		
		$("box_").style.width="95%";
		$("box_center").style.height="100%";
		$("box_").style.height="80%";
		$("box_content").style.height="95%";
		$("preview_buttons_" + this.lang).style.visibility="hidden";
		scroll(0,0);

		Event.stop(event);
	},

	hidePreview: function(event) {
		$("box_darken").style.display="none";
		$("box_").style.display="none";
		$("box_center").style.display="none";
		$("box_content").style.display="none";
		$("preview_buttons_" + this.lang).style.visibility="visible";
		scroll(0,1000);
		
		this.form.setAttribute("action", this.form.getAttribute("_action"));
		this.form.setAttribute("target", "");		
	},

	createIframe: function() {
		var iframe = $(document.createElement("iframe"));
		iframe.name = "if_preview";
		iframe.id = iframe.name;
		this.preview.appendChild(iframe);
		iframe.setStyle({
			width: "100%",
			height: "100%",
			border: "none"
		});		
		
		var button1 = $(document.createElement("button"));
		button1.update("Bezár");
		button1.setStyle({
			float: "right",
			background:  "transparent url(/images/icons/cross.png) no-repeat 5px 55%",
			padding: "0 0 0 25px",
			border: "0",
			margin: "3px 0 0 0",
			border: "1px solid #000",
			cursor: "pointer"
		});		
		button1.observe("click", function() {
			this.hidePreview();
		}.bind(this));
		this.preview.appendChild(button1);
		return iframe;
	},

	initIpe: function() {
		
		html.delegate("p", "click", function(ev) {
			
		});
	},
	
	renameUploadedFile: function(element) {
		var tmp=element.previous("input",0).name.split("_");
		var file_id=parseInt(tmp[1],10);
		var file_name=element.previous("input",0).value;
		
		// ellenorzesek:
	     if (file_name=="") {
			alert("Hibás fájlnév");
			return;
		}

		if (file_id>0) {
			ajax("nibble", "renameUploadedFile", [file_id, file_name], function(id) {
				if (id) {
					element.previous("a",0).innerHTML=file_name;
				}
			});
		}
	},
	
	saveUploadedFileComment: function(element) {
		var tmp=element.previous("input",0).name.split("_");
		var file_id=parseInt(tmp[1],10);
		var comment=element.previous("input",0).value;
		
		if (file_id>0) {
			ajax("nibble", "SaveUploadedFileComment", [file_id, comment], function(id) {
				if (id) {
					alert('sikeres mentés!');
				}
			});
		}
	}




}
/* nibble.end of /www/hammerworld.portal/public/.nibble/controllers/content/content.js */

/* nibble.start of /www/hammerworld.portal/public/.nibble/controllers/content/content.js */
// zss.2009.07.09
// AutoLink FCKEditor API
function FCKeditor_OnComplete( editorInstance ) {
//	
	editorInstance.Events.AttachEvent( 'OnSelectionChange', AutoLinkURL ) ;
//	
/*	var oEditor = FCKeditorAPI.GetInstance('hu[text]') ;
	if (oEditor) oEditor.Events.AttachEvent( 'OnSelectionChange', AutoLinkURL ) ;*/
}

function AutoLinkURL( editorInstance ) {
//	
/*	var oEditor = FCKeditorAPI.GetInstance('hu[text]') ;
	var origData = oEditor.GetData();
	var newData = autolink(origData);

	if (origData != newData) {
		oEditor.SetData(newData);
		oEditor.Focus();
	}
*/
	//var oEditor = FCKeditorAPI.GetInstance('hu[text]') ;
	var origData = editorInstance.GetData();
	var newData = autolink(origData);

	if (origData != newData) {
		editorInstance.SetData(newData);
		editorInstance.Focus();
	}

}

// http://www.arstdesign.com/articles/autolink.html
function autolink(s) {   
	//var hlink = /\s(ht|f)tp:\/\/([^ \,\;\:\!\)\(\"\'\<\>\f\n\r\t\v])+/g;
	//var hlink = /(\s|\;|<p>)((ht|f)tp:\/\/([^ \,\;\:\!\)\(\"\'\<\>\f\n\r\t\v])+)/g;
	///^http(s?)[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i
	
	var hlink = /(\s|\;)(http(s?):\/\/(([A-Za-z0-9\-_]+\.)+)([A-Za-z0-9\.\/%&=\?\-_])+)(\s)/g;
	
	return (s.replace (hlink, function ($0,$1,$2,$3) { 
				//s = $0.substring(1,$0.length); 
				s = $2;
				/*
				
				
					
				*/			

				// remove trailing dots, if any
				//while (s.length>0 && s.charAt(s.length-1)=='.') s=s.substring(0,s.length-1);
				// add hlink
				return " "+s.link(s);
			}
		) 
	);
}

Project.Content = {                                                     
	
	initialize: function() {
		
		
		if (Nibble.needWidget("contentipe")) {
			this.initIpe();
		}
	},

	initPreview: function(element, event, domain, lang) {
		this.lang = lang;
		this.preview = $("box_content");
		this.box_darken = $("box_darken");
		this.iframe = this.createIframe();
		this.doPreview(event, domain, lang);
	},

	doPreview: function(event, domain, lang) {
		this.form = $("content_edit").down("form");
		//if (!this.form.getAttribute("_preview_action")) {
			this.form.setAttribute("_action", this.form.getAttribute("action"));
			this.form.setAttribute("_preview_action", "http://" + domain + "/contents/preview/" + lang + "/");
		//}
		this.form.setAttribute("action", this.form.getAttribute("_preview_action"));
		this.form.setAttribute("target", "if_preview");
		this.form.submit();
		
		$("box_darken").style.display="block";
		$("box_").style.display="block";
		$("box_center").style.display="block";
		$("box_content").style.display="block";		
		$("box_").style.width="95%";
		$("box_center").style.height="100%";
		$("box_").style.height="80%";
		$("box_content").style.height="95%";
		$("preview_buttons_" + this.lang).style.visibility="hidden";
		scroll(0,0);

		Event.stop(event);
	},

	hidePreview: function(event) {
		$("box_darken").style.display="none";
		$("box_").style.display="none";
		$("box_center").style.display="none";
		$("box_content").style.display="none";
		$("preview_buttons_" + this.lang).style.visibility="visible";
		scroll(0,1000);
		
		this.form.setAttribute("action", this.form.getAttribute("_action"));
		this.form.setAttribute("target", "");		
	},

	createIframe: function() {
		var iframe = $(document.createElement("iframe"));
		iframe.name = "if_preview";
		iframe.id = iframe.name;
		this.preview.appendChild(iframe);
		iframe.setStyle({
			width: "100%",
			height: "100%",
			border: "none"
		});		
		
		var button1 = $(document.createElement("button"));
		button1.update("Bezár");
		button1.setStyle({
			float: "right",
			background:  "transparent url(/images/icons/cross.png) no-repeat 5px 55%",
			padding: "0 0 0 25px",
			border: "0",
			margin: "3px 0 0 0",
			border: "1px solid #000",
			cursor: "pointer"
		});		
		button1.observe("click", function() {
			this.hidePreview();
		}.bind(this));
		this.preview.appendChild(button1);
		return iframe;
	},

	initIpe: function() {
		
		html.delegate("p", "click", function(ev) {
			
		});
	},
	
	renameUploadedFile: function(element) {
		var tmp=element.previous("input",0).name.split("_");
		var file_id=parseInt(tmp[1],10);
		var file_name=element.previous("input",0).value;
		
		// ellenorzesek:
	     if (file_name=="") {
			alert("Hibás fájlnév");
			return;
		}

		if (file_id>0) {
			ajax("nibble", "renameUploadedFile", [file_id, file_name], function(id) {
				if (id) {
					element.previous("a",0).innerHTML=file_name;
				}
			});
		}
	},
	
	saveUploadedFileComment: function(element) {
		var tmp=element.previous("input",0).name.split("_");
		var file_id=parseInt(tmp[1],10);
		var comment=element.previous("input",0).value;
		
		if (file_id>0) {
			ajax("nibble", "SaveUploadedFileComment", [file_id, comment], function(id) {
				if (id) {
					alert('sikeres mentés!');
				}
			});
		}
	}




}
/* nibble.end of /www/hammerworld.portal/public/.nibble/controllers/content/content.js */

/* nibble.start of /www/hammerworld.portal/public/.nibble/controllers/content/content.js */
// zss.2009.07.09
// AutoLink FCKEditor API
function FCKeditor_OnComplete( editorInstance ) {
//	
	editorInstance.Events.AttachEvent( 'OnSelectionChange', AutoLinkURL ) ;
//	
/*	var oEditor = FCKeditorAPI.GetInstance('hu[text]') ;
	if (oEditor) oEditor.Events.AttachEvent( 'OnSelectionChange', AutoLinkURL ) ;*/
}

function AutoLinkURL( editorInstance ) {
//	
/*	var oEditor = FCKeditorAPI.GetInstance('hu[text]') ;
	var origData = oEditor.GetData();
	var newData = autolink(origData);

	if (origData != newData) {
		oEditor.SetData(newData);
		oEditor.Focus();
	}
*/
	//var oEditor = FCKeditorAPI.GetInstance('hu[text]') ;
	var origData = editorInstance.GetData();
	var newData = autolink(origData);

	if (origData != newData) {
		editorInstance.SetData(newData);
		editorInstance.Focus();
	}

}

// http://www.arstdesign.com/articles/autolink.html
function autolink(s) {   
	//var hlink = /\s(ht|f)tp:\/\/([^ \,\;\:\!\)\(\"\'\<\>\f\n\r\t\v])+/g;
	//var hlink = /(\s|\;|<p>)((ht|f)tp:\/\/([^ \,\;\:\!\)\(\"\'\<\>\f\n\r\t\v])+)/g;
	///^http(s?)[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i
	
	var hlink = /(\s|\;)(http(s?):\/\/(([A-Za-z0-9\-_]+\.)+)([A-Za-z0-9\.\/%&=\?\-_])+)(\s)/g;
	
	return (s.replace (hlink, function ($0,$1,$2,$3) { 
				//s = $0.substring(1,$0.length); 
				s = $2;
				/*
				
				
					
				*/			

				// remove trailing dots, if any
				//while (s.length>0 && s.charAt(s.length-1)=='.') s=s.substring(0,s.length-1);
				// add hlink
				return " "+s.link(s);
			}
		) 
	);
}

Project.Content = {                                                     
	
	initialize: function() {
		
		
		if (Nibble.needWidget("contentipe")) {
			this.initIpe();
		}
	},

	initPreview: function(element, event, domain, lang) {
		this.lang = lang;
		this.preview = $("box_content");
		this.box_darken = $("box_darken");
		this.iframe = this.createIframe();
		this.doPreview(event, domain, lang);
	},

	doPreview: function(event, domain, lang) {
		this.form = $("content_edit").down("form");
		//if (!this.form.getAttribute("_preview_action")) {
			this.form.setAttribute("_action", this.form.getAttribute("action"));
			this.form.setAttribute("_preview_action", "http://" + domain + "/contents/preview/" + lang + "/");
		//}
		this.form.setAttribute("action", this.form.getAttribute("_preview_action"));
		this.form.setAttribute("target", "if_preview");
		this.form.submit();
		
		$("box_darken").style.display="block";
		$("box_").style.display="block";
		$("box_center").style.display="block";
		$("box_content").style.display="block";		
		$("box_").style.width="95%";
		$("box_center").style.height="100%";
		$("box_").style.height="80%";
		$("box_content").style.height="95%";
		$("preview_buttons_" + this.lang).style.visibility="hidden";
		scroll(0,0);

		Event.stop(event);
	},

	hidePreview: function(event) {
		$("box_darken").style.display="none";
		$("box_").style.display="none";
		$("box_center").style.display="none";
		$("box_content").style.display="none";
		$("preview_buttons_" + this.lang).style.visibility="visible";
		scroll(0,1000);
		
		this.form.setAttribute("action", this.form.getAttribute("_action"));
		this.form.setAttribute("target", "");		
	},

	createIframe: function() {
		var iframe = $(document.createElement("iframe"));
		iframe.name = "if_preview";
		iframe.id = iframe.name;
		this.preview.appendChild(iframe);
		iframe.setStyle({
			width: "100%",
			height: "100%",
			border: "none"
		});		
		
		var button1 = $(document.createElement("button"));
		button1.update("Bezár");
		button1.setStyle({
			float: "right",
			background:  "transparent url(/images/icons/cross.png) no-repeat 5px 55%",
			padding: "0 0 0 25px",
			border: "0",
			margin: "3px 0 0 0",
			border: "1px solid #000",
			cursor: "pointer"
		});		
		button1.observe("click", function() {
			this.hidePreview();
		}.bind(this));
		this.preview.appendChild(button1);
		return iframe;
	},

	initIpe: function() {
		
		html.delegate("p", "click", function(ev) {
			
		});
	},
	
	renameUploadedFile: function(element) {
		var tmp=element.previous("input",0).name.split("_");
		var file_id=parseInt(tmp[1],10);
		var file_name=element.previous("input",0).value;
		
		// ellenorzesek:
	     if (file_name=="") {
			alert("Hibás fájlnév");
			return;
		}

		if (file_id>0) {
			ajax("nibble", "renameUploadedFile", [file_id, file_name], function(id) {
				if (id) {
					element.previous("a",0).innerHTML=file_name;
				}
			});
		}
	},
	
	saveUploadedFileComment: function(element) {
		var tmp=element.previous("input",0).name.split("_");
		var file_id=parseInt(tmp[1],10);
		var comment=element.previous("input",0).value;
		
		if (file_id>0) {
			ajax("nibble", "SaveUploadedFileComment", [file_id, comment], function(id) {
				if (id) {
					alert('sikeres mentés!');
				}
			});
		}
	}




}
/* nibble.end of /www/hammerworld.portal/public/.nibble/controllers/content/content.js */

/* nibble.start of /www/hammerworld.portal/public/.portal/controllers/hammerworld/hammerworld.js */
Project.HammerWorld = {
	
	initialize: function() {
		
		if ($("subscription")) {
			this.initSubscription();
		}
		this.initEditLTHF.ifExists("#edit_lthf", this);
	},

	initSubscription: function() {
		var inputs = $$("#items input");
		var totalPrices = $$("#subscription .totalprice");
		new Form.Observer($("items"), 0.3, function() {
			var totalPrice = 0;
			inputs.each(function(input, index) {
				if (typeof(input._price) == "undefined") {
					input._price = Number(input.up("label").down("span.price").getAttribute("price"));
				}
				if (input.checked) {
					totalPrice += input._price;
				}
			});
			totalPrices.invoke("update", String(totalPrice).numberFormat() + ",- Ft ");
		});
	},

	initEditLTHF: function(container) {
		var textarea = container.getElementsByTagName("textarea")[0];
		new Form.Element.Observer(textarea, 0.2, function(textarea, value) {
			
		});
	}
}
/* nibble.end of /www/hammerworld.portal/public/.portal/controllers/hammerworld/hammerworld.js */

/* nibble.start of /www/hammerworld.portal/public/hammerworld.hu/php/controllers/hammerworld/hammerworld.js */
Project.HammerWorld = {
	
	initialize: function() {
		
		if ($("subscription")) {
			this.initSubscription();
		}
		this.initEditLTHF.ifExists("#edit_lthf", this);
	},

	initSubscription: function() {
		var inputs = $$("#items input");
		var totalPrices = $$("#subscription .totalprice");
		new Form.Observer($("items"), 0.3, function() {
			var totalPrice = 0;
			inputs.each(function(input, index) {
				if (typeof(input._price) == "undefined") {
					input._price = Number(input.up("label").down("span.price").getAttribute("price"));
				}
				if (input.checked) {
					totalPrice += input._price;
				}
			});
			totalPrices.invoke("update", String(totalPrice).numberFormat() + ",- Ft ");
		});
	},

	initEditLTHF: function(container) {
		var textarea = container.getElementsByTagName("textarea")[0];
		new Form.Element.Observer(textarea, 0.2, function(textarea, value) {
			
		});
	}
}
/* nibble.end of /www/hammerworld.portal/public/hammerworld.hu/php/controllers/hammerworld/hammerworld.js */

/* nibble.start of /www/hammerworld.portal/public/.nibble/controllers/user/user.js */
var User = {

	init: function() {
		
	},

	deleteAddress: function(addressId,element) {
		ajax("user", "DeleteAddress", [addressId], function(response) {
		     element.up("tr",0).addClassName('hide');
		     element.up("tr",0).next("tr",0).style.display='none';
		});
	},
	
	modifyAddress: function(addressId,element) {
		element.disabled=true;
		var name=$F("addresses_"+addressId+"_name");
		var city=$F("addresses_"+addressId+"_city");
		var zipcode=$F("addresses_"+addressId+"_zipcode");
		var address=$F("addresses_"+addressId+"_address");

		ajax("user", "ModifyAddress", [addressId, name, city, zipcode, address], function(response) {
          	element.disabled=false;
          	var prevTr=element.up("tr",0).previous("tr",0).down("td",0);
			prevTr.next("td",0).innerHTML=name;
			prevTr.next("td",1).innerHTML=zipcode;
			prevTr.next("td",2).innerHTML=city;
			prevTr.next("td",3).innerHTML=address;
		});
	},
	
	toggleEmailReport: function(element) {
		// ha nincs meg a fieldset akkor return
		if (!$("mailreport")) return false;
		
		// ha ki van toltve minden szukseges adat
		if (trim($F("fullname")) != "" && trim($F("username")) != "" && trim($F("new_password_1")) != "" && trim($F("email")) != "") {
			
			// befrissitjuk ajax-al a textarea tartalmat az aktualis ertekekkel
			this.updateEmailReportMessage();		
			
			// megjelenitjuk a textareat
			if ($("mailreport").style.display != 'block') {
				$("mailreport").style.display = 'block';
			}			
		}
		// ha meg hianyzik valami adat
		else {
			if ($("mailreport").style.display == 'block') {
				$("mailreport").style.display = 'none';
			}
			// kivesszuk a pipat az ertesites kuldes-bol, es eltuntetjuk a textareat (tartalmat is)
			if ($("send_mail_report").checked == true) {
				$("send_mail_report").checked = false;
				$("errormessagerow").style.display = 'none';
				$("mail_report_message").value = "";
			}
		}
	},
	
	toggleEmailReportMessage: function(element) {
		// ha nincs meg a fieldset akkor return
		if (!$("mailreport")) return false;
		
		// megjelenitjuk a textareat
		if ($("send_mail_report").checked == true) {
			$("errormessagerow").style.display = 'table-row';	
			
			// befrissitjuk ajax-al a textarea tartalmat az aktualis ertekekkel
			this.updateEmailReportMessage();
		}
		
		// eltuntetjuk es kiuritjuk a textareat
		else {
			$("errormessagerow").style.display = 'none';
			$("mail_report_message").value = "";
		}
	},
	
	updateEmailReportMessage: function() {
		ajax('user','updateEmailReportMessage',[$F('fullname'),$F('username'),$F('new_password_1'),$F('email')], function (resp) {
			if (resp !== false) {
				$("mail_report_message").value = resp;
			}
		});
	}	
}
/* nibble.end of /www/hammerworld.portal/public/.nibble/controllers/user/user.js */

/* nibble.start of /www/hammerworld.portal/public/.nibble/controllers/comments/comments.js */
Project.Comments = {
	
	initialize: function() {
	},

	deleteComment: function(commentId) {
		if (commentId > 0 && confirm("Biztos?")) {
			ajax("comments", "DeleteComment", [commentId], function(response) {
				if (response) {
					var divId = "c" + commentId.lpad("0", 6);
					
					$(divId).remove();
				}
			});
		}
	}
}
/* nibble.end of /www/hammerworld.portal/public/.nibble/controllers/comments/comments.js */

/* nibble.start of /www/hammerworld.portal/public/.nibble/controllers/box/box.js */
var Box = Class.create();
Box.prototype = {

	initialize: function() {

	},
	
	init: function() {
	     
		this.initAutoBox();
		this.initBox();
		this.response="";
		if ($("box_darken")) this.darkenLayerTransparency=parseInt($("box_darken").getStyle("opacity")*100,10);
		else this.darkenLayerTransparency=35;
		this.defaultWheel=false;
		if ($("box_darken").getAttribute("autoload")=="true") {
			this.setDarkenLayerHeight();
			this.initBoxClose();
		}
	},

	vIE: function() {
		return (navigator.appName=='Microsoft Internet Explorer')?parseFloat((new RegExp("MSIE ([0-9]{1,}[.0-9]{0,})")).exec(navigator.userAgent)[1]):-1;
	},

	initAutoBox: function() {
		$$("a[rel=auto_box]").each(function(element) {
			box.boxShow(element);
		});
	},

	initBox: function() {
		$$("a[rel=box]").each(function(element) {
			Event.observe(element, "click", function(event) {
				box.boxShow(element);
	               Event.stop(event);
			}.bind(element));
		});
	},

	initBoxClose: function() {
		$$("a[rel=box_close]").each(function(element) {
			Event.observe(element, "click", function(event) {
			     box.boxClose(null,element);
				// ha van run_js attributuma, akkor azt a js-t lefuttatjuk egybol a bezaras utan:
				if (element.getAttribute('run_js')) {
					var runJsFuncName=element.getAttribute('run_js');
					var ret=eval(runJsFuncName)();
				}
			     // ha volt automatikus uj ablak nyitas, akkor nyitjuk:
				if (element.getAttribute('controller')) box.boxShow(element);
	             Event.stop(event);
			}.bind(element));
		});
	},
	
	initBoxPost: function() {
		$$("a[rel=box_post]").each(function(element) {
			Event.observe(element, "click", function(event) {
				// ha van form ellenorzes, akkor az kell:
				if (element.getAttribute('check_form_js')) {
					var checkJsFuncName=element.getAttribute('check_form_js');
					var valid=eval(checkJsFuncName)();
					if (valid) box.boxPost(element);
				}
				else // ha nincs akkor egybol mehet a post:
				box.boxPost(element);
	             Event.stop(event);
			}.bind(element));
		});
	},
	
	boxPost: function(element) {
		var form_id=element.getAttribute("form_id");
		if (!form_id) return;
		var params=box.urlEncode($(form_id).serialize());

		var update_div=element.getAttribute("update_div");
		var update_select=element.getAttribute("update_select");
		var controller=element.getAttribute("controller");
		var method=element.getAttribute("method");

		// meghivjuk a box controllert, hogy eldontse, milyen tartalmat ad vissza
		ajax("box", "boxPost", [controller, method, params], function(response) {
			// a valaszt ezek utan barhol es barmikor el lehet erni ameg nincs ujabb valasz:
			box.response=response;
			// ha kert div bemodositast:
			if (update_div) $(update_div).update(box.response);
			// ha kert select bemodositast:
			if (update_select) $(update_select).setOptions(box.response);
			// ha kert ablakbezarast, akkor be is zarjuk egybol:
			if (element.getAttribute('close_after_post')=="true") box.boxClose(null,element);
			// ha van post utani futtatando js, akkor azt is lefuttatjuk:
			if (element.getAttribute('run_js_after_post')) {
				var run_js_fgv_name=element.getAttribute('run_js_after_post');
				var i = (run_js_fgv_name+'').indexOf("(",0);
    				if (i!=-1) var ret=eval(run_js_fgv_name);
				else var ret=eval(run_js_fgv_name)();
			}
		});

	},
	
	boxClose: function(element_id,element) {
		// effektelunk:
		if (element) var effect=$(element).getAttribute("effect");
		if (effect) {
		     var effectParams=$(element).getAttribute("effect_params");
		     if (!effectParams) effectParams="duration: .5";
		     var fgv="Effect."+effect+"('box_', { "+effectParams+" })";
		     eval(fgv);
		}
		else {
			// eltuntetjuk az ablakot:
			$("box_").style.display="none";
			// kivesszuk a DOM-bol a tartalmat:
			if ($("box_content").down(0) && !box.vIE()) $("box_content").removeChild($("box_content").down(0));
		}
		
		// kivilagositjuk a fotartalmat:
	     $("box_darken").style.display="none";

		// ha a bezaras utan egybol uj ablakot kell nyitni:
		if (element_id) box.boxShow($(element_id));

		// visszatesszuk a selecteket IE6 alatt
		if (box.vIE()==6)
			$("body").getElementsBySelector("select").each(function(element) {
				element.style.visibility="visible";
		     });
	},

	boxShow: function(element,generated) {
	     if (!generated) generated=false;
		// sotetito hatterszin (alapbol szurke):
		var bg_color=element.getAttribute('bg_color');
		if (bg_color) $("box_darken").style.background="#"+bg_color;
		
		// sotetito hatterszin atlatszosaga:
		var bg_transparency=this.darkenLayerTransparency;
		bg_transparency=element.getAttribute('bg_transparency');
		if (bg_transparency) {
			$("box_darken").style.filter = "alpha(opacity="+bg_transparency+")";
			$("box_darken").style.opacity = (bg_transparency/100);
			$("box_darken").style.MozOpacity = (bg_transparency/100);
			$("box_darken").style.KhtmlOpacity = (bg_transparency/100);
			this.darkenLayerTransparency=bg_transparency;
		}

		// pozicionalas:
		var positions=box.getScrollXY();
		$("box_center").style.top=positions[1]+"px";

		// kell e sotetites (alapbol igen):
		var disable_darken=element.getAttribute('disable_darken');
		
		// az ablak szelessege (alapbol 500px):
		var width=element.getAttribute('width');
		if (width) $("box_").style.width=width+"px";
		else $("box_").style.width="500px";
		
		// az ablak magassaga (alapbol auto):
		var height=element.getAttribute('height');
		if (height) $("box_").style.height=height+"px";
		else $("box_").style.height="auto";
		
		// automatikus bezaras (ms-ban):
		var autoclose=parseInt(element.getAttribute('autoclose'),10);
		
		// autoclose utan nyitando ablak adatait tartalmazo elem:
		if (autoclose>0) var box_after_autoclose=element.getAttribute('box_after_autoclose');
		
		// a porgo gif animacio megjelenitese, ameg tolti az ablak tartalmat:
		var loading_animation=element.getAttribute('loading_animation');

		// IE6 alatt a selecteket el kell tuntetni (mert mindig a sotetseg felett lennenek es lehetne rajuk kattintani):
		if (box.vIE()==6)
			$("body").getElementsBySelector("select").each(function(element) {
				element.style.visibility="hidden";
			});

		if (disable_darken!="true")
			// elsotetitjuk az oldlat:
			$("box_darken").style.display="block";

		// az oldal tartalmanak megfelelo magassagot adunk neki:
		var bodyHeight=$("body").offsetHeight;
		$("box_darken").style.height=bodyHeight+"px";

		// az egergorgore sotetites vagy gorgetes kell?
		if (element.getAttribute("default_wheel")) box.defaultWheel=true;
		else box.defaultWheel=false;

		// ha engedelyezve van a loading animacio, akkor kirakjuk a porgo gif-et:
		if (loading_animation!="false") $("box_loading").style.display="block";
		
		// kiuritjuk az ablak tartalmat:
		//if ($("box_content").down(0)) $("box_content").removeChild($("box_content").down(0));
		$("box_content").innerHTML="";

		// osszeallitjuk az ajaxnak atadott parametert az elem attributumaibol:
		var params="";
	     var attribs=element.attributes;
	     for (i=0; attribs[i]; i++) {
	          if (attribs[i].name=="params") {
	               // ezt at kell alakitani, mert az egesz marams maga is url query forma
				var params_value=box.str_replace("&","_and_",box.str_replace("=","_eq_",attribs[i].value));
				params+="params__="+params_value+"&";
	          }
	          else params+=attribs[i].name+"="+attribs[i].value+"&";
		}
		params=box.urlEncode(params);

	     // ha tmp elembol nyertuk az adatokat, akkor maris megszuntetjuk azt:
	     if (generated) $("body").removeChild($("box_tmp"));

		// meghivjuk a box controllert, hogy eldontse, milyen tartalmat ad vissza
		ajax("box", "getContent", [params], function(content) {
		     // a zold pipa itt zavaro, van sajat animacioja:
			$("nibble-ajax-message").style.display="none";
			// eltuntetjuk a porgo gif-et:
		     if (loading_animation!="false") $("box_loading").style.display="none";
		     // kiirjuk a tartalmat:
		     $("box_content").update(content);
		     // megjelenitjuk az ablakot:
		     $("box_").style.display="block";
			// inicializaljuk a bezarast:
			box.initBoxClose();
			// es a postot:
			box.initBoxPost();
		     // ha van automatikus bezaras, akkor elinditjuk a visszaszamlalast:
		     if (autoclose>0 && !box_after_autoclose) setTimeout("box.boxClose()",parseInt(autoclose));
			// ha meg uj ablak nyitas is van az automatikus bezaras utan, akkor ide fut ra:
		     if (autoclose>0 && box_after_autoclose) setTimeout("box.boxClose('"+box_after_autoclose+"')",autoclose);
		});
		// es mar kesz is vagyunk :)

	},
	
	// onclickes valtozat:
        /**
         * @version w.2009.08.31 14:07 - beleirtam a hash tamogatast
         */
	show: function(params) {
		newObject = document.createElement("a");
		newObject.setAttribute('id', 'box_tmp');
		if (Object.isArray(params)) {
			for (i=0; params[i]; i++) {
				var tmp=params[i].split("=");
				if (tmp[0]=="id") continue;
				if (tmp[0]=="params") newObject.setAttribute("params",params[i].substring(7));
				else newObject.setAttribute(tmp[0],tmp[1]);
			} 
		} else {
			// w.2009.08.31 14:04
			$H(params).each(function(pair) {
				if (pair.key != "id") {
					var key = pair.key;
					if (Object.isString(pair.value)) {
						var value = pair.value;
					} else {
						var value = Object.toQueryString(pair.value);
					}
					
					newObject.setAttribute(key, value);
				}
			});
		}
	     
	     $("body").appendChild(newObject);
		box.boxShow($("box_tmp"),true);
	},

	wheel: function(event) {
		if ($("box_").style.display=="block" && !box.defaultWheel) {
			var delta = 0;
			if (!event) event = window.event;
			if (event.wheelDelta) {
			      delta = event.wheelDelta/120;
			      if (window.opera) delta = -delta;
			}
			else if (event.detail) delta = -event.detail/3;
			if (delta) box.wheelHandle(delta);
			if (event.preventDefault) event.preventDefault();
			event.returnValue = false;
		}
	},

	wheelHandle: function(delta) {
		if (delta < 0) { if (box.darkenLayerTransparency<100) box.darkenLayerTransparency+=5; }
		else { if (box.darkenLayerTransparency>0) box.darkenLayerTransparency-=5; }

		$("box_darken").style.filter = "alpha(opacity="+box.darkenLayerTransparency+")";
		$("box_darken").style.opacity = (box.darkenLayerTransparency/100);
		$("box_darken").style.MozOpacity = (box.darkenLayerTransparency/100);
		$("box_darken").style.KhtmlOpacity = (box.darkenLayerTransparency/100);
	},
	
	setDarkenLayerHeight: function() {
		var bodyHeight=$("body").offsetHeight;
		$("box_darken").style.height=bodyHeight+"px";
	},
	
	// segedfuggvenyek:
	getScrollXY: function() {
		var scrOfX = 0, scrOfY = 0;
		if( typeof( window.pageYOffset ) == 'number' ) {
			scrOfY = window.pageYOffset;
			scrOfX = window.pageXOffset;
		} else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
			scrOfY = document.body.scrollTop;
			scrOfX = document.body.scrollLeft;
		} else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
			scrOfY = document.documentElement.scrollTop;
			scrOfX = document.documentElement.scrollLeft;
		}
		return [scrOfX, scrOfY];
	},

	urlEncode: function(str) {
		if (str=="") return "";
		var ret = str;
		ret = ret.toString();
		ret = encodeURIComponent(ret);
		ret = ret.replace(/%20/g, '+');
		return ret;
	},
	
	str_replace: function(search, replace, subject) {
		var s = subject;
		var ra = r instanceof Array, sa = s instanceof Array;
		var f = [].concat(search);
		var r = [].concat(replace);
		var i = (s = [].concat(s)).length;
		var j = 0;

		while (j = 0, i--) if (s[i]) while (s[i] = (s[i]+'').split(f[j]).join(ra ? r[j] || "" : r[0]), ++j in f){};

		return sa ? s : s[0];
	}
}

var box=new Box;
box.init();

if (window.addEventListener) window.addEventListener('DOMMouseScroll', box.wheel, false);
window.onmousewheel = document.onmousewheel = box.wheel;
/* nibble.end of /www/hammerworld.portal/public/.nibble/controllers/box/box.js */

/* nibble.start of /www/hammerworld.portal/public/.nibble/controllers/newsletter/newsletter.js */
Project.Newsletter = {
	
	initialize: function() {
		
		this.csvGroupImport.ifExists("#csvgroupimport", this);
		this.csvEmailFieldsImport.ifExists("#csvemailfieldsimport", this);
	},

	csvGroupImport: function(i) {
		
		i.on("change", function(ev) {
			var fs = ev.target.up("fieldset");
			if (/\.group\.txt$/i.test($F(ev.target))) {
				ev.target.upload({
					onComplete: function(id) {
						ajax("newsletter", "CsvGroupImport", [id], function(response) {
							if (response) document.location.reload();
						}.bind(this));
					}.bind(this)
				});
			} else {
				var err = fs.down("div.error") 
					|| fs.appendChild(new Element("div", {className: "error"}));
				err.update("Nem .group.txt file!");
				Effect.Fade.delay(2, err);
			}
		}.bindAsEventListener(this));
	},

	csvEmailFieldsImport: function(i) {
		
		i.on("change", function(ev) {
			var fs = ev.target.up("fieldset");
			if (/\.txt$/i.test($F(ev.target))) {
				ev.target.upload({
					onComplete: function(id) {
						ajax("newsletter", "CsvEmailFieldsImport", [id], function(response) {
							if (response) document.location.reload();
						}.bind(this));
					}.bind(this)
				});
			} else {
				var err = fs.down("div.error") 
					|| fs.appendChild(new Element("div", {className: "error"}));
				err.update("Nem .txt file!");
				Effect.Fade.delay(2, err);
			}
		}.bindAsEventListener(this));
	},

        /**
         * @version w.2009.08.26 20:33
         */
	quickMail: function(event) {
		var email = $F("quickmail");
		var body = $F($$("textarea.resizable")[0]);
		var subject = $F("subject");
		if (email.indexOf("@") > 0) {
			$("quickmail").disable().setValue("Küldöm...");
			ajax("newsletter", "QuickMail", [email, subject, body, this.getIssueIdFromUrl()], function(response) {
				$("quickmail").setValue(email).enable();
			});
		} else {
			Nibble.ajaxMessage("Adj meg egy e-mail címet!", "fail");
			$("quickmail").focus();
		}
	},

        /**
         * @version w.2009.08.27 8:13
         */
	getIssueIdFromUrl: function() {
		return document.location.href.match("issues/(\\d+)/modify")[1];
	}
}

function ShowTestIssueSendingBox(ev, issue_id) {
	var boxParams=Array('controller=newsletter',
			    'width=600',
			    'method=showTestGroupsForTestIssueSending',
			    'params=issue_id='+issue_id
			    );
	box.show(boxParams); 
	
	ev.stop();
	
	return false;
}

function UpdateTestCounter(issue_id) {
	ajax("newsletter", "countTestNewslettersForIssue", [issue_id], function(count) {
		if (count) {
			var ct = $("count_test");
			ct.update(count);
		}
	});
}

function CloneIssue(ev, newsletter_id) {
	ajax("newsletter", "cloneIssue", [newsletter_id], function(clone) {
		if (clone) {
			if ($("body___Frame")) {	
				var oEditor = FCKeditorAPI.GetInstance('body') ;
				oEditor.SetData(clone);
			}
			else {
				var body = $$("textarea.resizable")[0];
				body.value = clone;
			}
		}
		else {
			box.show(['alert=Nincs klónozható tartalom!']);
		}
	});
	
	ev.stop();
	
	return false;	
}

function CheckIfTestGroupIsSelected() {
	var sel = $("test_groups").options;
	var is_selected = 0;
	
	for (var i = 0; i < sel.length; i++) {
		if (sel[ i ].selected) {
			is_selected++;
		}
	}
	
	if (is_selected < 1) {
		alert("Kérem válasszon ki legalább egy csoportot!");
		return false;
	}
	else {
		return true;
	}
}

function showGroupEmails() {
	var gids = $("groups").options;
	var rtgids = $("groups_realtime").options;
	
	selected_gids = new Array(); 
	
	for (var i = 0; i < gids.length; i++) {
		if (gids[ i ].selected) {
			selected_gids.push(gids[ i ].value);
		}
	}
	
	groupids = selected_gids.join(',');
	
	selected_rtgids = new Array(); 
	
	for (var i = 0; i < rtgids.length; i++) {
		if (rtgids[ i ].selected) {
			selected_rtgids.push(rtgids[ i ].value);
		}
	}
	
	realtimegroupids = selected_rtgids.join(',');	

	if (groupids || realtimegroupids) {
		var boxParams=Array('controller=newsletter',
				    'width=600',
				    'method=showGroupEmailListerBox',
				    'params=groupids='+groupids+'&realtimegroupids='+realtimegroupids
				    );
		box.show(boxParams); 
	}
	
	else {
		alert("Nincs kiválasztva csoport!");
	}
	
	return false;
}

function refreshBoxTemplate(link, groupids, realtimegroupids) {
	// button
	if (link == "button") {
		var email = $("email").value;
	
		if (email != "") {
			var boxParams=Array('controller=newsletter',
					    'width=600',
					    'method=showGroupEmailListerBox',
					    'params=groupids='+groupids+'&realtimegroupids='+realtimegroupids+'&email='+email
					    );
			box.show(boxParams); 	
			
			return false;
		}
	}
	
	// link
	else {
		uri = parseUri(link);

		/*
		alert(uri.query);
		alert(groupids);
		alert(realtimegroupids);
		*/

		if (uri.query) {
			var boxParams=Array('controller=newsletter',
					    'width=600',
					    'method=showGroupEmailListerBox',
					    'params=groupids='+groupids+'&realtimegroupids='+realtimegroupids+'&'+uri.query
					    );
			box.show(boxParams); 	
			
			return false;
		}
	}
	
}

/* parseUri JS v0.1, by Steven Levithan (http://badassery.blogspot.com)
Splits any well-formed URI into the following parts (all are optional):
----------------------
• source (since the exec() method returns backreference 0 [i.e., the entire match] as key 0, we might as well use it)
• protocol (scheme)
• authority (includes both the domain and port)
    • domain (part of the authority; can be an IP address)
    • port (part of the authority)
• path (includes both the directory path and filename)
    • directoryPath (part of the path; supports directories with periods, and without a trailing backslash)
    • fileName (part of the path)
• query (does not include the leading question mark)
• anchor (fragment)
*/
function parseUri(sourceUri){
    var uriPartNames = ["source","protocol","authority","domain","port","path","directoryPath","fileName","query","anchor"];
    var uriParts = new RegExp("^(?:([^:/?#.]+):)?(?://)?(([^:/?#]*)(?::(\\d*))?)?((/(?:[^?#](?![^?#/]*\\.[^?#/.]+(?:[\\?#]|$)))*/?)?([^?#/]*))?(?:\\?([^#]*))?(?:#(.*))?").exec(sourceUri);
    var uri = {};
    
    for(var i = 0; i < 10; i++){
        uri[uriPartNames[i]] = (uriParts[i] ? uriParts[i] : "");
    }
    
    // Always end directoryPath with a trailing backslash if a path was present in the source URI
    // Note that a trailing backslash is NOT automatically inserted within or appended to the "path" key
    if(uri.directoryPath.length > 0){
        uri.directoryPath = uri.directoryPath.replace(/\/?$/, "/");
    }
    
    return uri;
}
/* nibble.end of /www/hammerworld.portal/public/.nibble/controllers/newsletter/newsletter.js */
