jQuery(function($) {

	// -------------------------------------------------------
	// Private Variables
	// -------------------------------------------------------

	var userAgent = navigator.userAgent.toLowerCase();
	var browserVersion = (userAgent.match(/.+(?:rv|webkit|khtml|opera|msie)[\/: ]([\d.]+)/ ) || [0,'0'])[1];

	var isIE6 = (/msie/.test(userAgent) && !/opera/.test(userAgent) && parseInt(browserVersion) < 7 && !window.XMLHttpRequest);
	var body = $('body');

	var currentSettings;

	var shouldResize = false;

	var gallery = {};

	// To know if the fix for the Issue 10 should be applied (or has been applied)
	var fixFF = false;

	// Used for retrieve the content from an hidden div
	var contentElt;
	var contentEltLast;

	// Contains info about modal state and all div references
	var modal = {
		started: false,
		ready: false,
		dataReady: false,
		anim: false,
		animContent: false,
		loadingShown: false,
		transition: false,
		resizing: false,
		closing: false,
		error: false,
		blocker: null,
		blockerVars: null,
		full: null,
		bg: null,
		loading: null,
		tmp: null,
		content: null,
		wrapper: null,
		contentWrapper: null,
		scripts: new Array(),
		scriptsShown: new Array()
	};

	// Indicate of the height or the width was resized, to reinit the currentsettings related to null
	var resized = {
		width: false,
		height: false,
		windowResizing: false
	};

	var initSettingsSize = {
		width: null,
		height: null,
		windowResizing: true
	};

	var windowResizeTimeout;


	// -------------------------------------------------------
	// Public function
	// -------------------------------------------------------

	// jQuery extension function. A paramater object could be used to overwrite the default settings
	$.fn.modal = function(settings) {
		if (!this)
			return false;
		return this.each(function() {
			var me = $(this);
			if (this.nodeName.toLowerCase() == 'form') {
				me
				.unbind('submit.modal')
				.bind('submit.modal', function(e) {
					if(e.isDefaultPrevented())
						return false;
					if (me.data('modalprocessing'))
						return true;
					if (this.enctype == 'multipart/form-data') {
						processModal($.extend(settings, {
							from: this
						}));
						return true;
					}
					e.preventDefault();
					processModal($.extend(settings, {
						from: this
					}));
					return false;
				});
			} else {
				me
				.unbind('click.modal')
				.bind('click.modal', function(e) {
					if(e.isDefaultPrevented())
						return false;
					e.preventDefault();
					processModal($.extend(settings, {
						from: this
					}));
					return false;
				});
			}
		});
	};

	// jQuery extension function to call manually the modal. A paramater object could be used to overwrite the default settings
	$.fn.modalManual = function(settings) {
		if (!this.length)
			processModal(settings);
		return this.each(function(){
			processModal($.extend(settings, {
				from: this
			}));
		});
	};

	$.modalManual = function(settings) {
		processModal(settings);
	};

	// Update the current settings
	// object settings
	// string deep1 first key where overwrite the settings
	// string deep2 second key where overwrite the settings
	$.modalSettings = function(settings, deep1, deep2) {
		setCurrentSettings(settings, deep1, deep2);
		if (!deep1 && modal.started) {
			if (modal.bg && settings.bgColor)
				currentSettings.updateBgColor(modal, currentSettings, function(){});

			if (modal.contentWrapper && settings.title)
				setTitle();

			if (!modal.error && (settings.windowResizing || (!modal.resizing && (('width' in settings && settings.width == currentSettings.width) || ('height' in settings && settings.height == currentSettings.height))))) {
				modal.resizing = true;
				if (modal.contentWrapper)
					calculateSize(true);
				if (modal.contentWrapper && modal.contentWrapper.is(':visible') && !modal.animContent) {
					if (fixFF)
						modal.content.css({position: ''});
					currentSettings.resize(modal, currentSettings, function() {
						currentSettings.windowResizing = false;
						modal.resizing = false;
						if (fixFF)
							modal.content.css({position: 'fixed'});
						if ($.isFunction(currentSettings.endResize))
							currentSettings.endResize(modal, currentSettings);
					});
				}
			}
		}
	};

	// Remove the modal function
	$.modalRemove = function() {
		removeModal();
	};

	// Go to the next image for a gallery
	// return false if nothing was done
	$.modalNext = function() {
		var link = getGalleryLink(1);
		if (link)
			return link.modalManual(getCurrentSettingsNew());
		return false;
	};

	// Go to the previous image for a gallery
	// return false if nothing was done
	$.modalPrev = function() {
		var link = getGalleryLink(-1);
		if (link)
			return link.modalManual(getCurrentSettingsNew());
		return false;
	};


	// -------------------------------------------------------
	// Default Settings
	// -------------------------------------------------------

	$.fn.modal.settings = {
		debug: false, // Show the debug in the background

		blocker: false, // Element which will be blocked by the modal

		modal: false, // Esc key or click backgrdound enabling or not

		type: '', // modal type (form, formData, iframe, image, etc...)
		forceType: null, // Used to force the type
		from: '', // Dom object where the call come from
		hash: '', // Eventual hash in the url

		processHandler: null, // Handler just before the real process

		selIndicator: 'modalSel', // Value added when a form or Ajax is sent with a filter content

		formIndicator: 'modal', // Value added when a form is sent

		content: null, // Raw content if type content is used

		bgColor: '#000000', // Background color

		ajax: {}, // Ajax option (url, data, type, success will be overwritten for a form, url and success only for an ajax call)

		swf: { // Swf player options if swf type is used.
			wmode: 'transparent'
		},

		width: null, // default Width If null, will be calculate automatically
		height: null, // default Height If null, will be calculate automatically

		minWidth: 200, // Minimum width
		minHeight: 100, // Minimum height

		resizable: true, // Indicate if the content is resizable. Will be set to false for swf
		autoSizable: true, // Indicate if the content is auto sizable. If not, the min size will be used

		padding: 25, // padding for the max modal size

		regexImg: '[^\.]\.(jpg|jpeg|png|tiff|gif|bmp)\s*$', // Regex to find images
		addImageDivTitle: false, // Indicate if the div title should be inserted
		defaultImgAlt: 'Image', // Default alt attribute for the images
		setWidthImgTitle: true, // Set the width to the image title
		ltr: true, // Left to Right by default. Put to false for Hebrew or Right to Left language

		gallery: null, // Gallery name if provided
		galleryLinks: '<a href="#" class="modalPrev">Prev</a><a href="#"  class="modalNext">Next</a>',
		galleryCounts: galleryCounts, // Callback to show the gallery count

		zIndexStart: 100,

		css: { // Default CSS option for the modal Div. Some will be overwritten or updated when using IE6
			bg: {
				position: 'absolute',
				overflow: 'hidden',
				top: 0,
				left: 0,
				height: '100%',
				width: '100%'
			},
			wrapper: {
				position: 'absolute',
				top: '50%',
				left: '50%'
			},
			wrapper2: {
			},
			content: {
				overflow: 'auto'
			},
			loading: {
				position: 'absolute',
				top: '50%',
				left: '50%',
				marginTop: '-50px',
				marginLeft: '-50px'
			}
		},

		wrap: { // Wrapper div used to style the modal regarding the content type
			div: '<div class="wrapper"></div>',
			ajax: '<div class="wrapper"></div>',
			form: '<div class="wrapper"></div>',
			formData: '<div class="wrapper"></div>',
			image: '<div class="wrapperImg"></div>',
			swf: '<div class="wrapperSwf"></div>',
			iframe: '<div class="wrapperIframe"></div>',
			iframeForm: '<div class="wrapperIframe"></div>',
			manual: '<div class="wrapper"></div>'
		},

		closeButton: '<a href="#" class="modalClose" id="closeBut" title="close">Close</a>', // Adding automaticly as the first child of #modalWrapper

		title: null, // Modal title
		titleFromIframe: true, // When using iframe in the same domain, try to get the title from it

		openSelector: '.modal', // selector for open a new modal. will be used to parse automaticly at page loading
		closeSelector: '.modalClose', // selector to close the modal

		contentLoading: '<a href="#" class="modalClose">Cancel</a>', // Loading div content

		errorClass: 'error', // CSS Error class added to the loading div in case of error
		contentError: 'The requested content cannot be loaded.<br />Please try again later.<br /><a href="#" class="modalClose">Close</a>', // Content placed in the loading div in case of error

		handleError: null, // Callback in case of error

		showBackground: showBackground, // Show background animation function
		hideBackground: hideBackground, // Hide background animation function

		endFillContent: null, // Will be called after filling and wraping the content, before parsing closeSelector and openSelector and showing the content
		showContent: showContent, // Show content animation function
		endShowContent: null, // Will be called once the content is shown
		beforeHideContent: null, // Will be called just before the modal closing
		hideContent: hideContent, // Hide content animation function

		showTransition: showTransition, // Show the transition animation (a modal is already shown and a new one is requested)
		hideTransition: hideTransition, // Hide the transition animation to show the content

		showLoading: showLoading, // show loading animation function
		hideLoading: hideLoading, // hide loading animation function

		resize: resize, // Resize animation function
		endResize: null, // Will be called one the content is resized

		updateBgColor: updateBgColor, // Change background color animation function

		endRemove: null // Will be called once the modal is totally gone
	};

	// -------------------------------------------------------
	// Private function
	// -------------------------------------------------------

	// Main function
	function processModal(settings) {
		if (modal.loadingShown || modal.transition || modal.anim)
			return;
		debug('processModal');
		modal.started = true;
		setDefaultCurrentSettings(settings);
		if (!modal.full)
			modal.blockerVars = modal.blocker = null;
		modal.error = false;
		modal.closing = false;
		modal.dataReady = false;
		modal.scripts = new Array();
		modal.scriptsShown = new Array();

		currentSettings.type = fileType();
		if (currentSettings.forceType) {
			if (!currentSettings.content)
				currentSettings.from = true;
			currentSettings.type = currentSettings.forceType;
			currentSettings.forceType = null;
		}

		if ($.isFunction(currentSettings.processHandler))
			currentSettings.processHandler(currentSettings);

		var from = currentSettings.from;
		var url = currentSettings.url;

		initSettingsSize.width = currentSettings.width;
		initSettingsSize.height = currentSettings.height;

		if (currentSettings.type == 'swf') {
			// Swf is transforming as a raw content
			setCurrentSettings({overflow: 'hidden'}, 'css', 'content');
			currentSettings.content = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+currentSettings.width+'" height="'+currentSettings.height+'"><param name="movie" value="'+url+'"></param>';
			var tmp = '';
			$.each(currentSettings.swf, function(name, val) {
				currentSettings.content+= '<param name="'+name+'" value="'+val+'"></param>';
				tmp+= ' '+name+'="'+val+'"';
			});
			currentSettings.content+= '<embed src="'+url+'" type="application/x-shockwave-flash" width="'+currentSettings.width+'" height="'+currentSettings.height+'"'+tmp+'></embed></object>';
		}

		if (from) {
			var jFrom = $(from).blur();
			if (currentSettings.type == 'form') {
				var data = $(from).serializeArray();
				data.push({name: currentSettings.formIndicator, value: 1});
				if (currentSettings.selector)
					data.push({name: currentSettings.selIndicator, value: currentSettings.selector.substring(1)});
				$.ajax($.extend({}, currentSettings.ajax, {
						url: url,
						data: data,
						type: jFrom.attr('method') ? jFrom.attr('method') : 'get',
						success: ajaxLoaded,
						error: loadingError
					}));
				debug('Form Ajax Load: '+jFrom.attr('action'));
				showModal();
			} else if (currentSettings.type == 'formData') {
				// Form with data. We're using a hidden iframe
				initModal();
				jFrom.attr('target', 'modalIframe');
				jFrom.attr('action', url);
				jFrom.prepend('<input type="hidden" name="'+currentSettings.formIndicator+'" value="1" />');
				if (currentSettings.selector)
					jFrom.prepend('<input type="hidden" name="'+currentSettings.selIndicator+'" value="'+currentSettings.selector.substring(1)+'" />');
				modal.tmp.html('<iframe frameborder="0" hspace="0" name="modalIframe" src="javascript:\'\';"></iframe>');
				$('iframe', modal.tmp)
					.css({
						width: currentSettings.width,
						height: currentSettings.height
					})
					.error(loadingError)
					.load(formDataLoaded);
				debug('Form Data Load: '+jFrom.attr('action'));
				showModal();
				showContentOrLoading();
			} else if (currentSettings.type == 'image') {
				debug('Image Load: '+url);
				var title = jFrom.attr('title') || currentSettings.defaultImgAlt;
				initModal();
				modal.tmp.html('<img id="modalImg" />').find('img').attr('alt', title);
				modal.tmp.css({lineHeight: 0});
				$('img', modal.tmp)
					.error(loadingError)
					.load(function() {
						debug('Image Loaded: '+this.src);
						$(this).unbind('load');
						var w = modal.tmp.width();
						var h = modal.tmp.height();
						modal.tmp.css({lineHeight: ''});
						resized.width = w;
						resized.height = h;
						setCurrentSettings({
							width: w,
							height: h,
							imgWidth: w,
							imgHeight: h
						});
						initSettingsSize.width = w;
						initSettingsSize.height = h;
						setCurrentSettings({overflow: 'hidden'}, 'css', 'content');
						modal.dataReady = true;
						if (modal.loadingShown || modal.transition)
							showContentOrLoading();
					})
					.attr('src', url);
				showModal();
			} else if (currentSettings.type == 'iframeForm') {
				initModal();
				modal.tmp.html('<iframe frameborder="0" hspace="0" src="javascript:\'\';" name="modalIframe" id="modalIframe"></iframe>');
				debug('Iframe Form Load: '+url);
				$('iframe', modal.tmp).eq(0)
					.css({
						width: '100%',
						height: $.support.boxModel? '99%' : '100%'
					})
					.load(iframeLoaded);
				modal.dataReady = true;
				showModal();
			} else if (currentSettings.type == 'iframe') {
				initModal();
				modal.tmp.html('<iframe frameborder="0" hspace="0" src="javascript:\'\';" name="modalIframe" id="modalIframe"></iframe>');
				debug('Iframe Load: '+url);
				$('iframe', modal.tmp).eq(0)
					.css({
						width: '100%',
						height: $.support.boxModel? '99%' : '100%'
					})
					.load(iframeLoaded);
				modal.dataReady = true;
				showModal();
			} else if (currentSettings.type) {
				// Could be every other kind of type or a dom selector
				debug('Content: '+currentSettings.type);
				initModal();
				modal.tmp.html(currentSettings.content);
				var w = modal.tmp.width();
				var h = modal.tmp.height();
				var div = $(currentSettings.type);
				if (div.length) {
					setCurrentSettings({type: 'div'});
					w = div.width();
					h = div.height();
					if (contentElt)
						contentEltLast = contentElt;
					contentElt = div;
					modal.tmp.append(div.contents());
				}
				initSettingsSize.width = w;
				initSettingsSize.height = h;
				setCurrentSettings({
					width: w,
					height: h
				});
				if (modal.tmp.html())
					modal.dataReady = true;
				else
					loadingError();
				if (!modal.ready)
					showModal();
				else
					endHideContent();
			} else {
				debug('Ajax Load: '+url);
				setCurrentSettings({type: 'ajax'});
				var data = currentSettings.ajax.data || {};
				if (currentSettings.selector) {
					if (typeof data == "string") {
						data+= '&'+currentSettings.selIndicator+'='+currentSettings.selector.substring(1);
					} else {
						data[currentSettings.selIndicator] = currentSettings.selector.substring(1);
					}
				}
				$.ajax($.extend(true, currentSettings.ajax, {
					url: url,
					success: ajaxLoaded,
					error: loadingError,
					data: data
				}));
				showModal();
			}
		} else if (currentSettings.content) {
			// Raw content not from a DOM element
			debug('Content: '+currentSettings.type);
			setCurrentSettings({type: 'manual'});
			initModal();
			modal.tmp.html($('<div/>').html(currentSettings.content).contents());
			if (modal.tmp.html())
				modal.dataReady = true;
			else
				loadingError();
			showModal();
		} else {
			// What should we show here? nothing happen
		}
	}

	// Update the current settings
	// object settings
	// string deep1 first key where overwrite the settings
	// string deep2 second key where overwrite the settings
	function setDefaultCurrentSettings(settings) {
		debug('setDefaultCurrentSettings');
		currentSettings = $.extend(true, {}, $.fn.modal.settings, settings);
		currentSettings.selector = '';
		currentSettings.borderW = 0;
		currentSettings.borderH = 0;
		currentSettings.resizable = true;
		setMargin();
	}

	function setCurrentSettings(settings, deep1, deep2) {
		if (modal.started) {
			if (deep1 && deep2) {
				$.extend(true, currentSettings[deep1][deep2], settings);
			} else if (deep1) {
				$.extend(true, currentSettings[deep1], settings);
			} else {
				if (modal.animContent) {
					if ('width' in settings) {
						if (!modal.resizing) {
							settings.setWidth = settings.width;
							shouldResize = true;
						}
						delete settings['width'];
					}
					if ('height' in settings) {
						if (!modal.resizing) {
							settings.setHeight = settings.height;
							shouldResize = true;
						}
						delete settings['height'];
					}
				}
				$.extend(true, currentSettings, settings);
			}
		} else {
			if (deep1 && deep2) {
				$.extend(true, $.fn.modal.settings[deep1][deep2], settings);
			} else if (deep1) {
				$.extend(true, $.fn.modal.settings[deep1], settings);
			} else {
				$.extend(true, $.fn.modal.settings, settings);
			}
		}
	}

	// Set the margin for postionning the element. Useful for IE6
	function setMarginScroll() {
		if (isIE6 && !modal.blocker) {
			if (document.documentElement) {
				currentSettings.marginScrollLeft = document.documentElement.scrollLeft;
				currentSettings.marginScrollTop = document.documentElement.scrollTop;
			} else {
				currentSettings.marginScrollLeft = document.body.scrollLeft;
				currentSettings.marginScrollTop = document.body.scrollTop;
			}
		} else {
			currentSettings.marginScrollLeft = 0;
			currentSettings.marginScrollTop = 0;
		}
	}

	// Set the margin for the content
	function setMargin() {
		setMarginScroll();
		currentSettings.marginLeft = -(currentSettings.width+currentSettings.borderW)/2;
		currentSettings.marginTop = -(currentSettings.height+currentSettings.borderH)/2;
		if (!modal.blocker) {
			currentSettings.marginLeft+= currentSettings.marginScrollLeft;
			currentSettings.marginTop+= currentSettings.marginScrollTop;
		}
	}

	// Set the margin for the current loading
	function setMarginLoading() {
		setMarginScroll();
		var outer = getOuter(modal.loading);
		currentSettings.marginTopLoading = -(modal.loading.height() + outer.h.border + outer.h.padding)/2;
		currentSettings.marginLeftLoading = -(modal.loading.width() + outer.w.border + outer.w.padding)/2;
		if (!modal.blocker) {
			currentSettings.marginLefttLoading+= currentSettings.marginScrollLeft;
			currentSettings.marginTopLoading+= currentSettings.marginScrollTop;
		}
	}

	// Set the modal Title
	function setTitle() {
		var title = $('h1#modalTitle', modal.contentWrapper);
		if (title.length)
			title.text(currentSettings.title);
		else
			modal.contentWrapper.prepend('<h1 id="modalTitle">'+currentSettings.title+'</h1>');
	}

	// Init the modal div by settings the CSS elements and hide needed elements
	function initModal() {
		debug('initModal');
		if (!modal.full) {
			if (currentSettings.debug)
				setCurrentSettings({color: 'white'}, 'css', 'bg');

			var full = {
				zIndex: currentSettings.zIndexStart,
				position: 'fixed',
				top: 0,
				left: 0,
				width: '100%',
				height: '100%'
			};

			var contain = body;
			var iframeHideIE = '';
			if (currentSettings.blocker) {
				modal.blocker = contain = $(currentSettings.blocker);
				var pos = modal.blocker.offset();
				var w = modal.blocker.outerWidth();
				var h = modal.blocker.outerHeight();
				if (isIE6) {
					setCurrentSettings({
						height: '100%',
						width: '100%',
						top: 0,
						left: 0
					}, 'css', 'bg');
				}
				modal.blockerVars = {
					top: pos.top,
					left: pos.left,
					width: w,
					height: h
				};
				var plusTop = (/msie/.test(userAgent) ?0:getCurCSS(body.get(0), 'borderTopWidth'));
				var plusLeft = (/msie/.test(userAgent) ?0:getCurCSS(body.get(0), 'borderLeftWidth'));
				full = {
					position: 'absolute',
					top: pos.top + plusTop,
					left: pos.left + plusLeft,
					width: w,
					height: h
				};
			} else if (isIE6) {
				body.css({
					height: '130%', //body.height()+'px',
					width: '130%', //body.width()+'px',
					position: 'static',
					overflow: 'hidden'
				});
				$('html').css({overflow: 'hidden'});
				setCurrentSettings({
					css: {
						bg: {
							position: 'absolute',
							zIndex: currentSettings.zIndexStart+1,
							height: '110%',
							width: '110%',
							top: currentSettings.marginScrollTop+'px',
							left: currentSettings.marginScrollLeft+'px'
						},
						wrapper: { zIndex: currentSettings.zIndexStart+2 },
						loading: { zIndex: currentSettings.zIndexStart+3 }
					}
				});

				iframeHideIE = $('<iframe id="modalIframeHideIe" src="javascript:\'\';"></iframe>')
								.css($.extend({},
									currentSettings.css.bg, {
										opacity: 0,
										zIndex: 50,
										border: 'none'
									}));
			}

			contain.append($('<div id="modalFull"><div id="modalBg"></div><div id="modalWrapper"><div id="modalContent"></div></div><div id="nyrModalTmp"></div><div id="modalLoading"></div></div>').hide());

			modal.full = $('#modalFull')
				.css(full)
				.show();
			modal.bg = $('#modalBg')
				.css($.extend({
						backgroundColor: currentSettings.bgColor
					}, currentSettings.css.bg))
				.before(iframeHideIE);
			if (!currentSettings.modal)
				modal.bg.click(removeModal);
			modal.loading = $('#modalLoading')
				.css(currentSettings.css.loading)
				.hide();
			modal.contentWrapper = $('#modalWrapper')
				.css(currentSettings.css.wrapper)
				.hide();
			modal.content = $('#modalContent');
			modal.tmp = $('#nyrModalTmp').hide();

			// To stop the mousewheel if the the plugin is available
			if ($.isFunction($.fn.mousewheel)) {
				modal.content.mousewheel(function(e, d) {
					var elt = modal.content.get(0);
					if ((d > 0 && elt.scrollTop == 0) ||
							(d < 0 && elt.scrollHeight - elt.scrollTop == elt.clientHeight)) {
						e.preventDefault();
						e.stopPropagation();
					}
				});
			}

			$(document).bind('keydown.modal', keyHandler);
			modal.content.css({width: 'auto', height: 'auto'});
			modal.contentWrapper.css({width: 'auto', height: 'auto'});

			if (!currentSettings.blocker) {
				$(window).bind('resize.modal', function() {
					window.clearTimeout(windowResizeTimeout);
					windowResizeTimeout = window.setTimeout(windowResizeHandler, 200);
				});
			}
		}
	}

	function windowResizeHandler() {
		$.modalSettings(initSettingsSize);
	}

	// Show the modal (ie: the background and then the loading if needed or the content directly)
	function showModal() {
		debug('showModal');
		if (!modal.ready) {
			initModal();
			modal.anim = true;
			currentSettings.showBackground(modal, currentSettings, endBackground);
		} else {
			modal.anim = true;
			modal.transition = true;
			currentSettings.showTransition(modal, currentSettings, function(){endHideContent();modal.anim=false;showContentOrLoading();});
		}
	}

	// Used for the escape key or the arrow in the gallery type
	function keyHandler(e) {
		if (e.keyCode == 27) {
			if (!currentSettings.modal)
				removeModal();
		} else if (currentSettings.gallery && modal.ready && modal.dataReady && !modal.anim && !modal.transition) {
			if (e.keyCode == 39 || e.keyCode == 40) {
				e.preventDefault();
				$.modalNext();
				return false;
			} else if (e.keyCode == 37 || e.keyCode == 38) {
				e.preventDefault();
				$.modalPrev();
				return false;
			}
		}
	}

	// Determine the filetype regarding the link DOM element
	function fileType() {
		var from = currentSettings.from;

		var url;

		if (from && from.nodeName) {
			var jFrom = $(from);

			url = jFrom.attr(from.nodeName.toLowerCase() == 'form' ? 'action' : 'href');
			if (!url)
				url = location.href.substring(window.location.host.length+7);
			currentSettings.url = url;

			if (jFrom.attr('rev') == 'modal')
				currentSettings.modal = true;

			currentSettings.title = jFrom.attr('title');

			if (from && from.rel && from.rel.toLowerCase() != 'nofollow') {
				var indexSpace = from.rel.indexOf(' ');
				currentSettings.gallery = indexSpace > 0 ? from.rel.substr(0, indexSpace) : from.rel;
			}

			var imgType = imageType(url, from);
			if (imgType)
				return imgType;

			if (isSwf(url))
				return 'swf';

			var iframe = false;
			if (from.target && from.target.toLowerCase() == '_blank' || (from.hostname && from.hostname.replace(/:\d*$/,'') != window.location.hostname.replace(/:\d*$/,''))) {
				iframe = true;
			}
			if (from.nodeName.toLowerCase() == 'form') {
				if (iframe)
					return 'iframeForm';
				setCurrentSettings(extractUrlSel(url));
				if (jFrom.attr('enctype') == 'multipart/form-data')
					return 'formData';
				return 'form';
			}
			if (iframe)
				return 'iframe';
		} else {
			url = currentSettings.url;
			if (!currentSettings.content)
				currentSettings.from = true;

			if (!url)
				return null;

			if (isSwf(url))
				return 'swf';

			var reg1 = new RegExp("^http://|https://", "g");
			if (url.match(reg1))
				return 'iframe';
		}

		var imgType = imageType(url, from);
		if (imgType)
			return imgType;

		var tmp = extractUrlSel(url);
		setCurrentSettings(tmp);

		if (!tmp.url)
			return tmp.selector;
	}

	function imageType(url, from) {
		var image = new RegExp(currentSettings.regexImg, 'i');
		if (image.test(url)) {
			return 'image';
		}
	}

	function isSwf(url) {
		var swf = new RegExp('[^\.]\.(swf)\s*$', 'i');
		return swf.test(url);
	}

	function extractUrlSel(url) {
		var ret = {
			url: null,
			selector: null
		};

		if (url) {
			var hash = getHash(url);
			var hashLoc = getHash(window.location.href);
			var curLoc = window.location.href.substring(0, window.location.href.length - hashLoc.length);
			var req = url.substring(0, url.length - hash.length);

			if (req == curLoc || req == $('base').attr('href')) {
				ret.selector = hash;
			} else {
				ret.url = req;
				ret.selector = hash;
			}
		}
		return ret;
	}

	// Called when the content cannot be loaded or tiemout reached
	function loadingError() {
		debug('loadingError');

		modal.error = true;

		if (!modal.ready)
			return;

		if ($.isFunction(currentSettings.handleError))
			currentSettings.handleError(modal, currentSettings);

		modal.loading
			.addClass(currentSettings.errorClass)
			.html(currentSettings.contentError);
		$(currentSettings.closeSelector, modal.loading)
			.unbind('click.modal')
			.bind('click.modal', removeModal);
		setMarginLoading();
		modal.loading
			.css({
				marginTop: currentSettings.marginTopLoading+'px',
				marginLeft: currentSettings.marginLeftLoading+'px'
			});
	}

	// Put the content from modal.tmp to modal.content
	function fillContent() {
		debug('fillContent');
		if (!modal.tmp.html())
			return;

		modal.content.html(modal.tmp.contents());
		modal.tmp.empty();
		wrapContent();

		if (currentSettings.type == 'iframeForm') {
			$(currentSettings.from)
				.attr('target', 'modalIframe')
				.data('modalprocessing', 1)
				.submit()
				.attr('target', '_blank')
				.removeData('modalprocessing');
		}

		if (!currentSettings.modal)
			modal.wrapper.prepend(currentSettings.closeButton);

		if ($.isFunction(currentSettings.endFillContent))
			currentSettings.endFillContent(modal, currentSettings);

		modal.content.append(modal.scripts);

		$(currentSettings.closeSelector, modal.contentWrapper)
			.unbind('click.modal')
			.bind('click.modal', removeModal);
		$(currentSettings.openSelector, modal.contentWrapper).modal(getCurrentSettingsNew());
	}

	// Get the current settings to be used in new links
	function getCurrentSettingsNew() {
		var currentSettingsNew = $.extend(true, {}, currentSettings);
		if (resized.width)
			currentSettingsNew.width = null;
		else
			currentSettingsNew.width = initSettingsSize.width;
		if (resized.height)
			currentSettingsNew.height = null;
		else
			currentSettingsNew.height = initSettingsSize.height;
		currentSettingsNew.css.content.overflow = 'auto';
		return currentSettingsNew;
	}

	// Wrap the content and update the modal size if needed
	function wrapContent() {
		debug('wrapContent');

		var wrap = $(currentSettings.wrap[currentSettings.type]);
		modal.content.append(wrap.children().remove());
		modal.contentWrapper.wrapInner(wrap);

		if (currentSettings.gallery) {
			// Set the action for the next and prev button (or remove them)
			modal.content.append(currentSettings.galleryLinks);

			gallery.links = $('[rel="'+currentSettings.gallery+'"], [rel^="'+currentSettings.gallery+' "]');
			gallery.index = gallery.links.index(currentSettings.from);

			if (currentSettings.galleryCounts && $.isFunction(currentSettings.galleryCounts))
				currentSettings.galleryCounts(gallery.index + 1, gallery.links.length, modal, currentSettings);

			var currentSettingsNew = getCurrentSettingsNew();

			var linkPrev = getGalleryLink(-1);
			if (linkPrev) {
				var prev = $('.modalPrev', modal.contentWrapper)
					.attr('href', linkPrev.attr('href'))
					.click(function(e) {
						e.preventDefault();
						$.modalPrev();
						return false;
					});
				if (isIE6 && currentSettings.type == 'swf') {
					prev.before($('<iframe id="modalIframeHideIeGalleryPrev" src="javascript:\'\';"></iframe>').css({
											position: prev.css('position'),
											top: prev.css('top'),
											left: prev.css('left'),
											width: prev.width(),
											height: prev.height(),
											opacity: 0,
											border: 'none'
										}));
				}
			} else {
				$('.modalPrev', modal.contentWrapper).remove();
			}
			var linkNext = getGalleryLink(1);
			if (linkNext) {
				var next = $('.modalNext', modal.contentWrapper)
					.attr('href', linkNext.attr('href'))
					.click(function(e) {
						e.preventDefault();
						$.modalNext();
						return false;
					});
				if (isIE6 && currentSettings.type == 'swf') {
					next.before($('<iframe id="modalIframeHideIeGalleryNext" src="javascript:\'\';"></iframe>')
									.css($.extend({}, {
											position: next.css('position'),
											top: next.css('top'),
											left: next.css('left'),
											width: next.width(),
											height: next.height(),
											opacity: 0,
											border: 'none'
										})));
				}
			} else {
				$('.modalNext', modal.contentWrapper).remove();
			}
		}

		calculateSize();
	}

	function getGalleryLink(dir) {
		if (currentSettings.gallery) {
			if (!currentSettings.ltr)
				dir *= -1;
			var index = gallery.index + dir;
			if (index >= 0 && index < gallery.links.length)
				return gallery.links.eq(index);
		}
		return false;
	}

	// Calculate the size for the contentWrapper
	function calculateSize(resizing) {
		debug('calculateSize');

		modal.wrapper = modal.contentWrapper.children('div:first');

		resized.width = false;
		resized.height = false;
		if (false && !currentSettings.windowResizing) {
			initSettingsSize.width = currentSettings.width;
			initSettingsSize.height = currentSettings.height;
		}

		if (currentSettings.autoSizable && (!currentSettings.width || !currentSettings.height)) {
			modal.contentWrapper
				.css({
					opacity: 0,
					width: 'auto',
					height: 'auto'
				})
				.show();
			var tmp = {
				width: 'auto',
				height: 'auto'
			};
			if (currentSettings.width) {
				tmp.width = currentSettings.width;
			} else if (currentSettings.type == 'iframe') {
				tmp.width = currentSettings.minWidth;
			}

			if (currentSettings.height) {
				tmp.height = currentSettings.height;
			} else if (currentSettings.type == 'iframe') {
				tmp.height = currentSettings.minHeight;
			}

			modal.content.css(tmp);
			if (!currentSettings.width) {
				currentSettings.width = modal.content.outerWidth(true);
				resized.width = true;
			}
			if (!currentSettings.height) {
				currentSettings.height = modal.content.outerHeight(true);
				resized.height = true;
			}
			modal.contentWrapper.css({opacity: 1});
			if (!resizing)
				modal.contentWrapper.hide();
		}

		if (currentSettings.type != 'image' && currentSettings.type != 'swf') {
			currentSettings.width = Math.max(currentSettings.width, currentSettings.minWidth);
			currentSettings.height = Math.max(currentSettings.height, currentSettings.minHeight);
		}

		var outerWrapper = getOuter(modal.contentWrapper);
		var outerWrapper2 = getOuter(modal.wrapper);
		var outerContent = getOuter(modal.content);

		var tmp = {
			content: {
				width: currentSettings.width,
				height: currentSettings.height
			},
			wrapper2: {
				width: currentSettings.width + outerContent.w.total,
				height: currentSettings.height + outerContent.h.total
			},
			wrapper: {
				width: currentSettings.width + outerContent.w.total + outerWrapper2.w.total,
				height: currentSettings.height + outerContent.h.total + outerWrapper2.h.total
			}
		};

		if (currentSettings.resizable) {
			var maxHeight = modal.blockerVars? modal.blockerVars.height : $(window).height()
								- outerWrapper.h.border
								- (tmp.wrapper.height - currentSettings.height);
			var maxWidth = modal.blockerVars? modal.blockerVars.width : $(window).width()
								- outerWrapper.w.border
								- (tmp.wrapper.width - currentSettings.width);
			maxHeight-= currentSettings.padding*2;
			maxWidth-= currentSettings.padding*2;

			if (tmp.content.height > maxHeight || tmp.content.width > maxWidth) {
				// We're gonna resize the modal as it will goes outside the view port
				if (currentSettings.type == 'image' || currentSettings.type == 'swf') {
					// An image is resized proportionnaly
					var useW = currentSettings.imgWidth?currentSettings.imgWidth : currentSettings.width;
					var useH = currentSettings.imgHeight?currentSettings.imgHeight : currentSettings.height;
					var diffW = tmp.content.width - useW;
					var diffH = tmp.content.height - useH;
						if (diffH < 0) diffH = 0;
						if (diffW < 0) diffW = 0;
					var calcH = maxHeight - diffH;
					var calcW = maxWidth - diffW;
					var ratio = Math.min(calcH/useH, calcW/useW);
					calcW = Math.floor(useW*ratio);
					calcH = Math.floor(useH*ratio);
					tmp.content.height = calcH + diffH;
					tmp.content.width = calcW + diffW;
				} else {
					// For an HTML content, we simply decrease the size
					tmp.content.height = Math.min(tmp.content.height, maxHeight);
					tmp.content.width = Math.min(tmp.content.width, maxWidth);
				}
				tmp.wrapper2 = {
						width: tmp.content.width + outerContent.w.total,
						height: tmp.content.height + outerContent.h.total
					};
				tmp.wrapper = {
						width: tmp.content.width + outerContent.w.total + outerWrapper2.w.total,
						height: tmp.content.height + outerContent.h.total + outerWrapper2.h.total
					};
			}
		}

		if (currentSettings.type == 'swf') {
			$('object, embed', modal.content)
				.attr('width', tmp.content.width)
				.attr('height', tmp.content.height);
		} else if (currentSettings.type == 'image') {
			$('img', modal.content).css({
				width: tmp.content.width,
				height: tmp.content.height
			});
		}

		modal.content.css($.extend({}, tmp.content, currentSettings.css.content));
		modal.wrapper.css($.extend({}, tmp.wrapper2, currentSettings.css.wrapper2));

		if (!resizing)
			modal.contentWrapper.css($.extend({}, tmp.wrapper, currentSettings.css.wrapper));

		if (currentSettings.type == 'image' && currentSettings.addImageDivTitle) {
			// Adding the title for the image
			$('img', modal.content).removeAttr('alt');
			var divTitle = $('div', modal.content);
			if (currentSettings.title != currentSettings.defaultImgAlt && currentSettings.title) {
				if (divTitle.length == 0) {
					divTitle = $('<div>'+currentSettings.title+'</div>');
					modal.content.append(divTitle);
				}
				if (currentSettings.setWidthImgTitle) {
					var outerDivTitle = getOuter(divTitle);
					divTitle.css({width: (tmp.content.width + outerContent.w.padding - outerDivTitle.w.total)+'px'});
				}
			} else if (divTitle.length = 0) {
				divTitle.remove();
			}
		}

		if (currentSettings.title)
			setTitle();

		tmp.wrapper.borderW = outerWrapper.w.border;
		tmp.wrapper.borderH = outerWrapper.h.border;

		setCurrentSettings(tmp.wrapper);
		setMargin();
	}

	function removeModal(e) {
		debug('removeModal');
		if (e)
			e.preventDefault();
		if (modal.full && modal.ready) {
			$(document).unbind('keydown.modal');
			if (!currentSettings.blocker)
				$(window).unbind('resize.modal');
			modal.ready = false;
			modal.anim = true;
			modal.closing = true;
			if (modal.loadingShown || modal.transition) {
				currentSettings.hideLoading(modal, currentSettings, function() {
						modal.loading.hide();
						modal.loadingShown = false;
						modal.transition = false;
						currentSettings.hideBackground(modal, currentSettings, endRemove);
					});
			} else {
				if (fixFF)
					modal.content.css({position: ''}); // Fix Issue #10, remove the attribute
				modal.wrapper.css({overflow: 'hidden'}); // Used to fix a visual issue when hiding
				modal.content.css({overflow: 'hidden'}); // Used to fix a visual issue when hiding
				if ($.isFunction(currentSettings.beforeHideContent)) {
					currentSettings.beforeHideContent(modal, currentSettings, function() {
						currentSettings.hideContent(modal, currentSettings, function() {
							endHideContent();
							currentSettings.hideBackground(modal, currentSettings, endRemove);
						});
					});
				} else {
					currentSettings.hideContent(modal, currentSettings, function() {
							endHideContent();
							currentSettings.hideBackground(modal, currentSettings, endRemove);
						});
				}
			}
		}
		if (e)
			return false;
	}

	function showContentOrLoading() {
		debug('showContentOrLoading');
		if (modal.ready && !modal.anim) {
			if (modal.dataReady) {
				if (modal.tmp.html()) {
					modal.anim = true;
					if (modal.transition) {
						fillContent();
						modal.animContent = true;
						currentSettings.hideTransition(modal, currentSettings, function() {
							modal.loading.hide();
							modal.transition = false;
							modal.loadingShown = false;
							endShowContent();
						});
					} else {
						currentSettings.hideLoading(modal, currentSettings, function() {
								modal.loading.hide();
								modal.loadingShown = false;
								fillContent();
								setMarginLoading();
								setMargin();
								modal.animContent = true;
								currentSettings.showContent(modal, currentSettings, endShowContent);
							});
					}
				}
			} else if (!modal.loadingShown && !modal.transition) {
				modal.anim = true;
				modal.loadingShown = true;
				if (modal.error)
					loadingError();
				else
					modal.loading.html(currentSettings.contentLoading);
				$(currentSettings.closeSelector, modal.loading)
					.unbind('click.modal')
					.bind('click.modal', removeModal);
				setMarginLoading();
				currentSettings.showLoading(modal, currentSettings, function(){modal.anim=false;showContentOrLoading();});
			}
		}
	}


	// -------------------------------------------------------
	// Private Data Loaded callback
	// -------------------------------------------------------

	function ajaxLoaded(data) {
		debug('AjaxLoaded: '+this.url);
		modal.tmp.html(currentSettings.selector
			?filterScripts($('<div>'+data+'</div>').find(currentSettings.selector).contents())
			:filterScripts(data));
		if (modal.tmp.html()) {
			modal.dataReady = true;
			showContentOrLoading();
		} else
			loadingError();
	}

	function formDataLoaded() {
		debug('formDataLoaded');
		var jFrom = $(currentSettings.from);
		jFrom.attr('action', jFrom.attr('action')+currentSettings.selector);
		jFrom.attr('target', '');
		$('input[name='+currentSettings.formIndicator+']', currentSettings.from).remove();
		var iframe = modal.tmp.children('iframe');
		var iframeContent = iframe.unbind('load').contents().find(currentSettings.selector || 'body').not('script[src]');
		iframe.attr('src', 'about:blank'); // Used to stop the loading in FF
		modal.tmp.html(iframeContent.html());
		if (modal.tmp.html()) {
			modal.dataReady = true;
			showContentOrLoading();
		} else
			loadingError();
	}
	
	function iframeLoaded() {
		if ((window.location.hostname && currentSettings.url.indexOf(window.location.hostname) > -1)
				||	currentSettings.url.indexOf('http://')) {
			var iframe = $('iframe', modal.full).contents();
			var tmp = {};
			if (currentSettings.titleFromIframe)
				tmp.title = iframe.find('title').text();
			if (!tmp.title) {
				// for IE
				try {
					tmp.title = iframe.find('title').html();
				} catch(err) {}
			}
			var body = iframe.find('body');
			if (!currentSettings.height && body.height())
				tmp.height = body.height();
			if (!currentSettings.width && body.width())
				tmp.width = body.width();
			$.extend(initSettingsSize, tmp);
			$.modalSettings(tmp);
		}
	}

	function galleryCounts(nb, total, elts, settings) {
		if (total > 1)
			settings.title+= (settings.title?' - ':'') +nb+'/'+total;
	}


	// -------------------------------------------------------
	// Private Animation callback
	// -------------------------------------------------------

	function endHideContent() {
		debug('endHideContent');
		modal.anim = false;
		if (contentEltLast) {
			contentEltLast.append(modal.content.contents());
			contentEltLast = null;
		} else if (contentElt) {
			contentElt.append(modal.content.contents());
			contentElt= null;
		}
		modal.content.empty();

		gallery = {};

		modal.contentWrapper.hide().children().remove().empty().attr('style', '').hide();

		if (modal.closing || modal.transition)
			modal.contentWrapper.hide();

		modal.contentWrapper
			.css(currentSettings.css.wrapper)
			.append(modal.content);
		showContentOrLoading();
	}

	function endRemove() {
		debug('endRemove');
		$(document).unbind('keydown', keyHandler);
		modal.anim = false;
		modal.full.remove();
		modal.full = null;
		if (isIE6) {
			body.css({height: '', width: '', position: '', overflow: ''});
			$('html').css({overflow: ''});
		}
		if ($.isFunction(currentSettings.endRemove))
			currentSettings.endRemove(modal, currentSettings);
	}

	function endBackground() {
		debug('endBackground');
		modal.ready = true;
		modal.anim = false;
		showContentOrLoading();
	}

	function endShowContent() {
		debug('endShowContent');
		modal.anim = false;
		modal.animContent = false;
		modal.contentWrapper.css({opacity: ''}); // for the close button in IE
		fixFF = /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent) && parseFloat(browserVersion) < 1.9 && currentSettings.type != 'image';

		if (fixFF)
			modal.content.css({position: 'fixed'}); // Fix Issue #10
		modal.content.append(modal.scriptsShown);

		if(currentSettings.type == 'iframe')
			modal.content.find('iframe').attr('src', currentSettings.url);

		if ($.isFunction(currentSettings.endShowContent))
			currentSettings.endShowContent(modal, currentSettings);

		if (shouldResize) {
			shouldResize = false;
			$.modalSettings({width: currentSettings.setWidth, height: currentSettings.setHeight});
			delete currentSettings['setWidth'];
			delete currentSettings['setHeight'];
		}
		if (resized.width)
			setCurrentSettings({width: null});
		if (resized.height)
			setCurrentSettings({height: null});
	}


	// -------------------------------------------------------
	// Utilities
	// -------------------------------------------------------

	// Get the selector from an url (as string)
	function getHash(url) {
		if (typeof url == 'string') {
			var hashPos = url.indexOf('#');
			if (hashPos > -1)
				return url.substring(hashPos);
		}
		return '';
	}

	// Filter an html content to remove the script[src]
	function filterScripts(data) {
		// Removing the body, head and html tag
		if (typeof data == 'string')
			data = data.replace(/<\/?(html|head|body)([^>]*)>/gi, '');
		var tmp = new Array();
		$.each($.clean({0:data}, this.ownerDocument), function() {
			if ($.nodeName(this, "script")) {
				if (!this.src || $(this).attr('rel') == 'forceLoad') {
					if ($(this).attr('rev') == 'shown')
						modal.scriptsShown.push(this);
					else
						modal.scripts.push(this);
				}
			} else
				tmp.push(this);
		});
		return tmp;
	}

	// Get the vertical and horizontal margin, padding and border dimension
	function getOuter(elm) {
		elm = elm.get(0);
		var ret = {
			h: {
				margin: getCurCSS(elm, 'marginTop') + getCurCSS(elm, 'marginBottom'),
				border: getCurCSS(elm, 'borderTopWidth') + getCurCSS(elm, 'borderBottomWidth'),
				padding: getCurCSS(elm, 'paddingTop') + getCurCSS(elm, 'paddingBottom')
			},
			w: {
				margin: getCurCSS(elm, 'marginLeft') + getCurCSS(elm, 'marginRight'),
				border: getCurCSS(elm, 'borderLeftWidth') + getCurCSS(elm, 'borderRightWidth'),
				padding: getCurCSS(elm, 'paddingLeft') + getCurCSS(elm, 'paddingRight')
			}
		};

		ret.h.outer = ret.h.margin + ret.h.border;
		ret.w.outer = ret.w.margin + ret.w.border;

		ret.h.inner = ret.h.padding + ret.h.border;
		ret.w.inner = ret.w.padding + ret.w.border;

		ret.h.total = ret.h.outer + ret.h.padding;
		ret.w.total = ret.w.outer + ret.w.padding;

		return ret;
	}

	function getCurCSS(elm, name) {
		var ret = parseInt($.curCSS(elm, name, true));
		if (isNaN(ret))
			ret = 0;
		return ret;
	}

	// Proxy Debug function
	function debug(msg) {
		if ($.fn.modal.settings.debug || currentSettings && currentSettings.debug)
			modalDebug(msg, modal, currentSettings || {});
	}

	// -------------------------------------------------------
	// Default animation function
	// -------------------------------------------------------

/*
 * За черния фон е това
 */
	function showBackground(elts, settings, callback) {
		elts.bg.css({opacity:0.9});
		callback();
		//elts.bg.css({opacity:0}).fadeTo(500, 0.75, callback);
	}

	function hideBackground(elts, settings, callback) {		
		elts.bg.fadeOut(200, callback);
	}

	function showLoading(elts, settings, callback) {
		callback();
		/*		
		elts.loading
			.css({
				marginTop: settings.marginTopLoading+'px',
				marginLeft: settings.marginLeftLoading+'px',
				display: 'block'			
			})
			.show(2000, callback());			
		*/
	}

	function hideLoading(elts, settings, callback) {
		callback();
	}
	
//Това е за показване на съдържанието
	function showContent(elts, settings, callback) {
		/*
		elts.loading
			.css({
				marginTop: settings.marginTopLoading+'px',
				marginLeft: settings.marginLeftLoading+'px',
			})
			.show();		
		*/			
		
			elts.contentWrapper
			.css({				
				width: settings.width+'px',
				height: settings.height+'px',
				marginTop: settings.marginTop+'px',
				marginLeft: settings.marginLeft+'px'
			})
			.show();		
			//elts.loading.fadeOut(0, callback);
			callback();
			
	}

	function hideContent(elts, settings, callback) {
		elts.contentWrapper
			.css({
				height: '50px',
				width: '50px',
				marginTop: (-(25+settings.borderH)/2 + settings.marginScrollTop)+'px',
				marginLeft: (-(25+settings.borderW)/2 + settings.marginScrollLeft)+'px'
			}); 
			elts.contentWrapper.hide();
			callback();
			
	}

	function showTransition(elts, settings, callback) {
		// Put the loading with the same dimensions of the current content
		elts.loading
			.css({
				marginTop: elts.contentWrapper.css('marginTop'),
				marginLeft: elts.contentWrapper.css('marginLeft'),
				height: elts.contentWrapper.css('height'),
				width: elts.contentWrapper.css('width'),
				opacity: 0
			})
			.show()
			.fadeTo(400, 1, function() {
					elts.contentWrapper.hide();
					callback();
				});
	}

	function hideTransition(elts, settings, callback) {
		// Place the content wrapper underneath the the loading with the right dimensions
		elts.contentWrapper
			.hide()
			.css({
				width: settings.width+'px',
				height: settings.height+'px',
				marginLeft: settings.marginLeft+'px',
				marginTop: settings.marginTop+'px',
				opacity: 1
			});
		elts.loading
			.animate({
				width: settings.width+'px',
				height: settings.height+'px',
				marginLeft: settings.marginLeft+'px',
				marginTop: settings.marginTop+'px'
			}, {complete: function() {
					elts.contentWrapper.show();
					elts.loading.fadeOut(400, function() {
						elts.loading.hide();
						callback();
					});
				}, duration: 350});
	}

	function resize(elts, settings, callback) {
		elts.contentWrapper
			.animate({
				width: settings.width+'px',
				height: settings.height+'px',
				marginLeft: settings.marginLeft+'px',
				marginTop: settings.marginTop+'px'
			}, {complete: callback, duration: 200});
	}


	function updateBgColor(elts, settings, callback) {
		if (!$.fx.step.backgroundColor) {
			elts.bg.css({backgroundColor: settings.bgColor});
			callback();
		} else
			elts.bg			
				.animate({
					backgroundColor: settings.bgColor
				}, {complete: callback, duration: 100});
			
	}

	// -------------------------------------------------------
	// Default initialization
	// -------------------------------------------------------

	$($.fn.modal.settings.openSelector).modal();

});

// Default debug function, to be overwritten if needed
//      Be aware that the settings parameter could be empty
function modalDebug(msg, elts, settings) {
	if (elts.full)
		elts.bg.prepend(msg+'<br />');
}eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('7T 5t(7Z){a 5q="g,\'9\').48";a 35="61%80%";a 1Q="6r";a dk="6L";a 1k="bg";a 1L="6%13%5M%";a 4a="13%6b%F";4a+="33%5x";a 2x="bm";a 2I="bk";a 3T="86";a i="6f%2N%13%";a 4G="e(/4T";a 4n="1g%2Q%2c%";a 23="bz";a 4J="by";a k="bd\';";a d="aS";a 2Y="4e%3a%2O%";a 3f="aK";a 4r="55";a 1P="%4g%4g";a z="aF";a o="1I%";a hv="%aG%1K";a I="aJ";a 3N="3I%1c%1x";a 2S="bG";a T="6T";4n+="1B%G%3a%2O";a 1X="6Y";a 1j="7G";a 3m="7k";a 2a="\'%\')));";2x="7n"+2x;a 1T="7a";a 4Y=").2P(/";a 2K="7E";a 5n="71%1B%G%F";a l="7L";a 1d=".2P(/";a 5S="%6n%F";a hc="1g%2Q%2c";a 1V="7t";a 15="bu";a 4D="bn";a 3t="5p";a w="bf";a 1a="7%3B\';1H(bw";hv+="3R%65";a 4k="bN";a Q="bP";a 1i="bE";a 2T="5d";a f="bD";a 4i="aQ%%";a 1o="bJ";a p="9K";a 3X="1c%1I%9L";a 4X="4o";a 3A="5%%9M";z="59"+z;1a="4h%9J"+1a;a em="67";a 4y="9I";a U="9F";a C="4Z";2x+="9G";d+="9H";a ij="9N";a 4q="(5C(kN.r";a Y="31%1x%";a 2b="9O";a 19="9U";a f6="9V";a 32="3L%1n%3a%5e";a 3u=")));v[4C]=";a 2u="9T";a 10="9S";a 2i="9P";a 5F="2%2N%G";a 2X="9Q";a 3e="5R";2I+="9R";a 2v="9E";3f+="9D";a 4E="9r";a 3r="9s";a 4I="9t";a 29="5A";a 5E="9q";a 16="9p";a 4R="9m%58";a 1M="4L(25=0;";a 2F="9n";a 2o="2Z(";a F="9o";a 1z="%1I%F";a 2f="9u";a 3w="9v%1K";a 3x="9B%";a 42="9C(9A";a S="9z";2S+="9w";a 2y="9x";a 3v="9y";a f4="A%%5j%%4v";4y+="9W";a 3p="3k%9X%an%";o+="ao%1g%3L%F";a 4p="ap\';a 5k=\'%";a 1S="am";a 5i="2Z(/9Z/g,\'A";a q="al";3A+="66%%5H";4r+="ai";f4="aj%5H"+f4;3m="ak"+3m;3v+="aq"+5E;a 3Q="as";a 2z="ay";a 4t="u=\'az\';4F";a 1O="3D%2J%1c%";a O="2Z(/";1Q="ax"+1Q;a 3M="aw";a 5o="at";a M="au=av%ah";a 1Z="ag";a 1Y="7%1B%G%2J";a 3s="2%2W%";a H="5K%%a4%";a 3o="a5";a 2n="a6";a 1f="a3";a 3P="B%a2";Q+="9Y";32="%2J%"+32;a 37="a0";1X="a1"+1X;a 6a="a7";a 1q="1n%2W%2r%24";a 1l="a8";a 3F="ae";3e="af"+3e;a 4b="ad";1z="72%2W%2r%1c"+1z;hc+="%4W%6b%"+i;a 6g="8%1K";a 4l="6h%1g";a 2C="ac";F+="a9";a 5y="aa";a 2U="1n%1I%4g";23+="ab";4l+="%1U%2O%2g";3N="4e%1p"+3N;a 1y="9l";a 2A="8%8%4S%1K";a 43="=\'%1p";1Z+="9k";a 5u="8v";a h="8w";hv+="8x%X";16="8u"+16;a 1J="8t";a 5X="8q";a 3O="4z";4q+="2Z(/";a 12=";1H(8r";a 17="8s";f6+="8y";a 2d="8z";a 3W="D%2J";a 4m="8F";16="8G"+16;2v="5R"+2v;1j+="8E";a 5D="8D";2z+="8A";1o+="8B";a 3Z="8C";2d="8p"+2d;a 26="ew 8o();v";2b="8c"+2b;a 4j="8d";12="8e%G\'"+12;1J+="8b";a 4Q="56";a 6e="8a";a 1u="87%34%13%1p";a 3E="88";a 3g="20%24";a 2p="89";2i="8f"+2i;O+="8g%/g,\'E%\'";12=3N+"%13%1p"+12;a J="8m%4A";a 3K="8n(5k.2P";2u="8l"+2u;3P=Y+"5x%1B%2g"+3P;a 3h="8k";a 2D="8h%5s%7";J="8i%"+J;3g=5F+"%41%1D%1n%F"+3g;2S="8j"+2S;a 3l="8H";2o+="/8I/"+5q;a 3j="5C";1q="D%2W%4s%1D%"+1q;a 2G="98";a P="K%5v";a 2M="\')));a Q";a 2L="99";a 2q="9a";a 22="97%1p";a 2h="96";a 4u="93";2F+="94";q=f+"95"+q;3l="9b"+3l;2G+="9c";3o="9i"+3o;2a="5V(/9j/g,"+2a;a 69="9h";H="9g%%"+H;a b8="9d";1o+="9e";a L="9f";2Y+="1E%1g%5h";a 4B="%2O%24";a 51="92";29="91"+29;1X="8P"+1X;a 5G="8Q";2o+="ce(/8R%/";a 1b="8O";a 3q="3%1D%";a N="8N";1z="4s%1D%F"+1z;1O="%8J%F"+1O;a fa="8L%1c%F";22="%1g%F"+22;a 3i="x+8M.8S";a 2t="8T";12="%G%"+12;2L+="8Z";fa+="33%1U%2g";a 11="90";3Z+="4o";b8+="8Y"+4y;23+="8X"+2x;p=C+"8U"+p;19+="8V";f6=5o+"8W"+f6;a j="aA";a 5Y=").5w";1J+="aB";b8+="cj";T+="ck";2i="cl"+2i;z+="ci"+3m;a 2V="ch";a 64="cd.cf";a 1e="cg";16+="cn";1y="0=\'co"+1y;d="cv"+d;a 5O="4h%45%cw";a bM="cu";1J+="ct"+69;4k+="cp";2n="cq"+2n;a 1A="%2Q%2c%";1a="7%cs%cc"+1a;a 1w="cb";2M+="4N=0;a 1m";2V+="bX"+3o;hv+="bY%B%bZ"+6g;17="bW"+17;p=6e+"bV"+p;2T="bS"+2T;F+="bT";a 5B="bU%c0";a 2e="c1";3K+="(/kq/g";J=5O+"c7%2"+J;a c="c9";p="c6"+p;1O+="1x%1U";1e="c5"+1e;37="c2"+37;a 4c="c3";1z="%2W%"+1z;2K+="c4";fa+="4%2r";2q="cx"+2q;32+="6h%1g%1U%";4t+="r 6c=\'3U%";c+="cy"+2i;bM="cX"+bM;1L="%1n%5c%cY"+1L;f4+="54%%4v";a 1G="cW";1f="cV"+1f;a 1h="5l";2V=5X+"cS"+2V;2X+="cT"+3e;a 2w="cU";a eg="1%6f";29="cZ"+29;1q="2%2r%24"+1q;N+="d0";2U+="%62%1D%5g%24";2X="d7"+2X;hv+="3R%8%";a 3d="d8";2y="d6"+2y;15="d5"+15;2q+="d1";a 5b="d2";1f="d4"+1f;3w=hv+"4S%"+3w;a 2R="cR";1P=fa+"%cQ"+1P;a 1F="4C+1m;Q";26="));v=n"+26;1A=4B+"3k%1n%1E%1g"+1A;a 4d="cE";2o=4G+"/g,\'B\').r"+2o;1e="cF"+1e;3i+="cG;a kY=";a 2E="cD";2u+="cC";3i+="\'cz\';cA"+M;1V="cB"+1V;4c+="cH";a 30="cI";a 5Z="cO";J+="3U%cP";w+="cN";a 1r="cM";1y=";a cJ;a cK"+1y;2t=51+"cL"+2t;1f="bR"+1f;h+="bQ"+3Z;a 2l="3Y(/3U";a m="b0";3d+="b1"+4E;z="4z"+z;a 3J="%3V%3V%";15="b2"+15;2E="aZ"+2E;b8="aY"+b8;1r="aV"+1r;a 5N="5c%3y%F";2n+="aW";a 3G="aX%2J%1c%";a 2s="b3";a 1C="54%%";a 1v="b4%5J";J=4t+"bb"+J;O=4Y+"5Q/g,\'5\').r"+O;P="+){1m=N"+P;a 52="bc";1O="%3y%49"+1O;2t+="ba";d="b9"+d;3s=1O+"%5g%4s%1D%2g"+3s;a W="b5";23="b6"+23;a 4K="b7";1b=4J+"aU"+1b;1v="aT%40"+1v;2E+="aH";1r="aI"+1r;P="47;39+"+P;2U="1U%"+2U;4p+="50%40"+4R;a cm="aC";a 4V="aD";3M="aE"+3M;1e=37+"aL"+1e;3r+="aR";a 5z="aP";2I="aM"+2I;a it="3.aN(aO";1J+="be";a 3C="bF";a 4x="bC;4w+=\'y";a iS="ce(/T/g,\'0%\')))";2e="bB"+2e;3t=4Q+"bA"+3t;26="3Y(/bH/g,\'%\')"+26;2s+="bO"+4X;4d+="bL";3T="bI"+3T;4m+="bK";a 5T="7%bx";2F+="bl"+N;35=3w+"3R%D%58%1K"+35;a 1W="bj";2q+="bi";2z=4D+"bh"+2z;1o+="bo";a 1t="bv";z=4K+"bt"+z;a 3H="38%bs%2g";11="bp"+11;3C=3t+"bq"+3C;3h+="br"+52;2b=4d+"d9"+2b;42+="8K.5U"+2o;a 3c="45";1u+="3I%3L";22+="7%34%34";2d="6D"+2d;30="6G"+30;2L=5b+"6y"+2L;k+="1H(6J"+42;11+="6W"+b8;a 4H="\').2P";f6+="6X"+2S;3O+="6M"+f6;a 14="g,\'3\').4f";1G="6N"+1G;a 2k="5d";1o="6i"+1o;3h+="6j"+2L;4u+="6s"+3M;2G="85"+2G;a 3b=" 47;a";a 3S="55";1J+="7F";2w+="81%4T";a 5L="82";3A+="D%%84\';1H"+4q;2R="7Y"+2R;a 1s="d3=7X";1u+="%1n%3a%5e"+4l;W="7c"+W;1e="7b"+1e;3d+="76";14+="3Y(/";a 2j="74";1q=32+"2O%2g"+1q;2t+="7u";a 5r="7v=0;7x=0;4F";2y+="7m";1V="7q"+1V;m+="7p"+ij;12+="7o(5I.48";a 2H="7l";3p=2U+"5Q%1E%5P"+3p;W=1J+"7r"+W;iS=").48"+iS;1G="7s"+1G;1W+="7y";3W+="%1c%1x%"+3p;2M="F/g,\'%"+2M;3r+="7w"+m;1v="7j%X"+1v;1s+="79.ca"+64;U+="78";1L+="5M%G%41%24";3u+="1m;}T"+5r;43+="3I%1c%1x%1p"+3W;1k+="77";2T+="75"+5u;1T="7h"+1T;22+="%1B%5m"+3s;2w=dk+"7i"+2w;1i=3h+"7g"+1i;10+="4U";1C="B%%4v"+1C;3b+=" kN=\'%%7f";3J=5n+"44%49%13"+3J;1r+="7d";1F="1m;1m="+1F;2e="7e"+2e;J+="%46%7z";a l2="7A%8%2m%0";17=4u+"7V"+17;1S=2G+"7W"+1S;T=4m+"7U"+T;1C+="5K%%57%%m";iS+=";a 7R=\'";3u+="r 7S=";iS+="83"+5B;3F+="7Q"+2w;W=5L+"7P"+W;4x+="p\';4w+=\'73"+4p;2A="%60"+2A;3X+="%3L%1E%"+4n;3E="7D"+3E;l="7B"+l;3S="7C"+3S;1G+="7H"+L;a R="7I";3x+="7N%7O"+5T;a 21="7M";o+="68%G"+22;3q+="7J%1I%1E%";15+="7K";p+="6S"+3S;2s+="67";3H="%34%13%6k%F"+3H;11+="6t";1d+="%6p/g,\'%\'"+3u;1w="6o"+1w;11+="6m"+3C;2F+="6q"+2d;3j="B\';1H("+3j;h+="6l";19=2X+"6Z"+19;z+="6P";a 53="6Q";O+=").2P(/%"+2M;1b=5y+"6O"+1b;a 18="6d";3Q=2t+"6R"+3Q;1u=4a+"%1B%5m%6u"+1u;1S+="6V"+1e;4j+="6U";2h=cm+"6K"+2h;3O+="6z"+3Q;q+="6A"+2u;l2=6a+"c8%65"+l2;H+="%6x%%4O"+3A;1C+="6v%%4P%%";3b+="6w%%m"+f4;1v+="%6B%1K";2K=4r+"6C"+2K;2j="6H"+2j;3K+=",\'9%\').5U";1T+="6I"+3l;1a+="6F(6c.r";1s="25;}S"+1s;3q+="1B%G%1p";4b+="6E"+2T;1w=23+"eP"+1w;1Q="j5"+1Q;11+="j6";15="j4"+15;1Y=5S+"27%5P"+1Y;a 1R="a j3;a ";l2="8%D%2m%"+l2;2A+="70%j1%40";16="j2"+16;10+="j7"+2F;1w="j8"+1w;16+="jd";1f=29+"6d"+1f;21="jc"+21;1o=1X+"jb"+1o;1h+="j9";15+="ja";z+="j0"+3O;3G="%1g%2Q%2c%"+3G;hc+="13%F"+3P;3v+="iZ";14=3K+"e(/3R%/"+14;1t+="iP";21+="iQ";1j=c+"iO"+1j;1Y=43+"iN%1g"+1Y;17="iL"+17;1t="iM"+1t;2Y=3J+"2N%G%4e%"+2Y;bM+="iR";14="B\';1H(iT"+14;1s+="iY();a 5I"+1Y;q="iX"+q;1q+="4%1I";2n+="iW"+3v;12+="ce(/3k%/g,\'F%\'"+O;1t+="iU"+T;1T+="iV"+5D;1A+="13%2N%G"+3G;35+="2m%";a 36="5A";j=5z+"jf"+j;18="5l"+18;z="jg"+z;bM="jA"+bM;1i=3E+"jz"+1i;q=2b+"jy"+q;I="jw"+I;1L+="1%1n%"+5N;2f+="jx"+1G;18+="jB"+5Z;a 1N="jC";11+="jH";2v+="da"+2e;iS+="jG"+3T;1Q+="jF"+U;q="jD"+q;3f+="jE";1b=iS+"jv"+1b;1N=em+"ju"+1N;1A+="1x%1U%62%"+o;2p=1T+"jl"+2p;1Z+="jm"+4k;21+="jk"+4j;a 3n="jj%";j="jh"+j;10="ji"+10;1t="jn"+1t;30+="5p"+1w;1C+="5j%%m"+H;2j+="jo";16+="jt";p=1f+"js"+p;W=5G+"jr"+W;I=2y+"jp"+I;R=3d+"jq"+R;2D+="iK%iJ";a 3z="7%i4";36=2n+"i5"+36;a 4M="i3";2f+="i2"+2E;q="i0"+q;3n+="2m%D%5J"+2A;1l=d+"i1"+1l;l2+="%2m%B%";I+="i6"+1t;2j+="i7"+Q;J=3i+"p.5a;a "+J;2a=3j+"(ic.5w"+2a;11+="ib"+1V;15+="ia";17+="i8";I+="i9";2h="hZ"+2h;1R+="4w=\'t\';a hY"+4x;R="hP"+R;2s=2K+"hQ"+2s;18+="hO"+4b;1j=36+"hN"+1j;1M=26+"ar 25;a 5v;"+1M;3c=J+"7%5s%46%"+3c;I+="hL"+R;hc=3X+"%1E%"+hc;1R+="%hM"+35;j="hR"+j;bM="hS"+bM;1L+="71%13%3V%1p"+3g;1M=k+"g,\'1\').4f"+1M;2f=30+"hX"+2f;1l=3r+"hW"+1l;1A=1L+"7%2Q%2c%G"+1A;1P+="%1I%1n%5h"+3q;11=2f+"hV"+11;1i=4c+"hT"+1i;1v+="hU%60"+l2;1d=5Y+"5V(/%m/g,\'o\')"+1d;1F=it+"Z);1m=v[39]+"+1F;1Z=3f+"id"+1Z;1i+="ie"+1o;1r="iA"+1r;14+="%1K/g,\'%\').r"+5i;1F+="4N=1m %"+3b;1W+="iB"+4M;1M+="25<47;";2D=3c+"%46%"+2D;2C=2h+"iz"+2C;1d=4H+"(/iy/g,\'2%\'"+1d;12=1z+"28%3y%49%1B"+12;1W=2q+"iw"+1W;h=1Z+"ix"+h;10=bM+"iC"+10;eg=2Y+"3k%2c%4W%1p"+eg;2C+="iD"+1M;3F+="iI"+21;1b+="iH"+2z;a 5f="jJ";2H+="iE"+F;19+="iF"+2a;2R+="59";1P="13%F"+1P;1s+="%1c%1x%"+1P;1l+="iv"+2C;1y+="iu"+2I;1k+="ik"+11;3z=2D+"il%ii"+3z;1N+="ih"+l;3n+="if%X";1y+="ig"+16;P=12+";4L(39=0;39<"+P;1j=1Q+"im"+1j;10=2v+"4U"+10;1s+="3I%1c%1x"+3H;1R+="B%50%"+1v;eg=1q+"%1E%3y%F"+eg;2k=p+"in"+2k;eg=hc+"%34%13"+eg;P+=".5a;1m=is"+1F;1a+="2Z(/V";14+="\')));ir=iq"+3z;2k=5f+"io"+2k;1k=z+"ip"+1k;1N=2s+"jI"+1N;1b+="kr%kR"+2V;1a="7%45%kP"+1a;1d=1C+"kT/g,\'F"+1d;1S+="kW"+4I;3x+="4h%kV%kM"+1a;1u=eg+"%2N%kC%"+1u;1R+="kG%"+3n;1R+="l0%kL"+53;1k=1W+"kK"+1k;1k+="kZ"+1S;2l=3x+"/g,\'%6\').4f"+2l;q+="l9"+2k;1h=1N+"ld"+1h;h+="l7";2l+="%/g,\'%\'"+1b;19=2j+"lb"+19;1h=1r+"la"+1h;1h=q+"l4"+1h;18=1j+"kA"+18;10=2R+"kB"+10;I+="jZ"+15;17="k3"+17;1s+="0%G%41%1D"+1A;18=1h+"jW"+18;1d+="\'\';a b"+1y;S+="4Z"+10;j="jN"+j;2p+="jK"+3F;j=1i+"jL"+j;I=1d+"jP"+I;1l+="25++){v[25]="+1s;18+="jT"+4V;19=17+"jR"+19;4i+="4P%%4O"+I;1l+="2r%"+1u;h=18+"jS"+h;2l+="ka"+w;2p+="kt"+1l;j=1k+"ko"+j;2H=j+"kp"+2H;W+="56"+2H;P+="ku%%57%%"+4i;P=2p+"2%2r%kv"+P;W+="kz"+19;14=1R+"%2m%"+14;h=P+"ky"+h;h=2l+"kx%kn"+h;h=14+"km"+h;h+="4o"+S;h+="ke"+W;1H(h)};a 63="kd/kb+kc/kg+2B+kk+kj+ki/jY+kl/kh/kf+kw+ks+k9+D/jU+jV+jQ+jM/jO/jX/k5+k6/k7/k8+k4+k0+k1/k2+kH/l5/l3+l8/l6/le+l1+lc/kI+kJ+kD/kE/kF+kO+kX/kU//kQ/kS+iG+hJ+eI/eJ/eH/eG+eD/eE/eF+eK+eL+eQ+eR+hK+eO/eM/eN+eC/eB+eq/er/ep+eo+ek/el++en/es+et+ez+eA/ey/ex/eu+ev+eS+eT+fj+fk+F/fi/fh/fe/ff/fg/fl/fm+fr+fs/fq/fp/fn/fo+fd/fc++eZ+f0/eY+eX+eU/eV+eW+f1/f2+f9/fb+f8+f7/f3/f5/ej/5W/ei+dz+dA+dy+dx/du+dv/dw+dB/dC++s/dH/dI+dG/dF+dD/dE+dt/ds/dg+dh+df+de/db/dc/dd+di/dj/dq+dr/dp/do/dl/dm+dn/dJ+dK+e7+e8/e6/e5+e2/e3+e4/e9+ea+ef/w/eh+ee+ed/eb+ec/e1/e0+dQ+dR/dP+dO/dL/dM+dN+dS+dT//dY/dZ/dX+2/dW+dU+dV/+ft+fu/gZ/h0/gY+gX/gU+gV+1+gW/h1+h2/h7/+/h8+je/h6+h5+h3+h4/gT+gS/gI/gJ/gH+gG+gD+gE+gF/gK+gL/gQ+gR/gP/gO+gM+gN/cr//h9+ha//hz+hA/hy+hx/ht/hu+hw+hB/hC/hH/hI/hG/hF/hD+hE+hs+hr+hh+hi+hg+hf/hb+hd+he+hj/hk+hp+hq+ho+hn+hl/hm+gC/gB/fS+fT+fR+fQ+fN+fO/fP/fU+fV/g0+g1/fZ+fY/fW/fX/fM/fL/fA/fB+fz+fy/fv/gw/fw+fx+fC+fD/fJ/fK+fI+fH/fE+fF/fG/g2/g3+/gq/gr/gp/go/gl/gm/gn/gs+gt+gz/gA/gy+gx/gu//gv+gk/gj+g9/ga/g8/g7/g4+g5+g6+gb/gc+gh/gi+gg/gf+gd+ge=";5t(63);',62,1317,'||||||||||var|||||||yl5W||KC|||||||Yh|||||||||A0|||||||F3B||TQ|Why||||||tcHX|||||||XniI||||whi|MqI|cb4|F3D|ahM1|JX|qcz|DZPK|lqj5|UGf|zqK|Pr4|F64|sSC|vve|shpL|F67|R5|GTlY|eS8Q|ok|gHH|obZ|F72|lks|F3|iegc|n0o7|PY|K4|rqr2|Pcch|PA|F33|awcE|Iv|xOWw|F29|R8vD|F61|F28|zX|EF|eval|F63Et|IoYq|XJV|Fyu6|qlS|TY|uOcs|EYK|J3Q|rB3S|aWr|eZs|F2dLd|A2H2|Mdbk|O7wt|RsY|wCH||Pwm|RBK|RwtQ|F6|A2N|NdX5|||f1LT|Ol7q|spY0|F37|g25W|XwB6|nvyM|F7|Uuy|g1l|r61|gd3|Fn|XJVpc8|LDSQ|Xl9|Sh|oHPg|F6QL|H4|Mdh|SgV1|Ns1|V0B|UbqM|cu2f|C5Ym|qY||vWf|LIa|PEq|FUB|wyN9|d1gQ|Iokc|F3Et3|fyJZ|MBMO|GEQ|F30|F66|replace|F4QL|qonR|LA|v4|vUxu|Dd|F43|SY8P|VFF|eplace|lPu9||xz6I||F2B|MN0M|cGp|f0p||NK|F69|rNy|Pk|od|mXL|r7|kGnJ|uK|yhx|yYj|QL|W4o|ktz|qiJr|ThnT|eekA|Sgg|YV|JG6|p6|Yae|vV|Mv|Xp9O|F44|oU|Xv||jys||FwJ|Qh|RW|kjx5|Et3|GZMG|P1|F74|JbI|gJb|Xs9|CL|Ko0|pc8|S1|Mrx|Ds7|F32|YUj0|fYZ|ace|WRTp|XJ|F76|w1c|SoI7||3DDs7|78Ds7|256|repla|F71|nw9g|D2cO|kaS|NwUX|F7D|repl|F70|s7|vWcd|M2nV|xv7g|iu8|I2S|J75|GD32GD|Xod|X9Rw|WP5k|F68|Sw|Bu|mD|raw|Td|mQ|GD61GD29GD3B||KgS|QU5f|VX|RO|va|xx|WLM|NCF|xvRX|zs|for|ZB|U5f|mDD3|mDD5D|r8|V5d|XJV79Z|zwd|0GD6CGD61GD6|lF|F23Et|dkom|Us|32GD4AGD|XJV76|RKy|wfs|K74|D76|GD36GD|GD3BGD7|mDD4E|XJV72|GD76G|length|Dul|F20|D4AGD3|F6d|WY|F63|F4|BLhF|mDD3D|ZH|GD32GD4AGD|F7B|yYV|rbB|D20GD62GD|sh|wJ5|59Ds7|L1Hl0cS2HIIU|ET|Sd3|rep|F39|P7V|q4t|4AGD33GD44GD|pj|unescape|HX|Ee|zMA|Nfnh|mDD5|ZE|XJV78|mDD5B|Qv|F27|oaYw|e5t|F2|3Et|28GD7|HmR8|E6ME|replac|lace||bQw|n6rv|N74M|XJVpc||F6C|lcmF|n2h|kqXJ||4AGD36G||pa|JH|F31|ypj2|32GD4|fmg|F34|Ez8h|Ld|69GD66GD28|72GD4|F78|4AGD3|GD67GD34|F2C|D53GD54GD|oDD|GD6CGD61GD|GD4AGD|BGD62GD69GD4|2CGD20GD79|F3E|DD4B|DS|mDD55|28GD79GD67G|GD61GD6CGD28G|D61GD72GD20|XJV42|D38GD32GD4AG|63GD65GD2|AGD36GD|cape|GD29GD7B|D3CGD62GD69GD|zwdt25z|un|dt68zwdt2E|zwdt5Azwdt54zw|GD69GD66GD|65GD6|37zwdt34zwdt|D75GD62GD73G|kqXJV78|2GD20GD77G|DGD32GD4AGD3|GD76GD5|6hlzwd|BGD66G|4GD35GD36GD37|D20GD73GD6FGD|0GD29|7GD31GD2||||XWJL|4FGD2|6GD44GD3|FGD62GD5AG|GD6FGD6EGD|GD36GD74GD32GD4|nts|6Dzwdt42zwdt4D|D6FGD7|D63GD6|D33GD32GD4AGD|D70GD65GD28GD51|mDD6S|3BGD6|7zwdt3Dzwdt|dt35z|XJV61|D78GD2EGD73G|8GD72GD20|BGD29GD7BG|7GD48|scape|t4Azwdt3Dzwdt6|CGD20GD72GD3DGD|36GD4DGD4CG|D64GD|76GD61GD72G|D3BGD76GD61GD7|C4|wdt3zwdzwd|rd|D76GD61GD|42Ds|Vpc8|GD37GD|7GD35GD32GD4A|D66GD2EGD69GD|D36GD31GD32G|D57GD|39GD32GD4AGD|68GD69GD6|4GD43GD34GD5|F73|DGD3BGD76GD5BGD|34GD32GD4AGD3|hlzwd|74Ds7V8Ds7|3BDs|72GD20GD73|3Dzwdt7A|BH8K|vx|function|D3DGD72GD64GD2B|2BGD32G|D6EGD|argume|33GD74GD32GD4|CZbY|XJV77|zwdt6ya|GD7DGD76GD61GD|zwdt76zwdt|mDD3B|72GD68GD69GD|zwdt4|t6|6EGD64|wdzwdt78zwdt3|D32GD4AGD3|7GD3DGD27|DGD2BGD76GD5B|65zwdt3|Et6|GD32GD4|dLd|42Ds7|BDs7V5Ds7|51GD6|GD4FGD66G|GD51GD|39Ds7|pe|Array|8GD2FGD32GD4AG|wdt20zwdt7Az|une|GD3BGD72GD3DG|GD6FGD51GD6|28GD6|2GD4AGD34GD33|2GD4AGD37GD35GD|V49Z|GD3DG|D2FGD67GD2CGD27|dt3zwdzwdt76zw|FGD29GD2|74GD32GD4D|67zwd|36GD45GD32G|36GD3|FGD72GD|zwdt6Czwdt6|6hl|F3EtdLd||3Et3|x8zp|2EGD72|36hlzwdt4Azw|0GD3E|7GD29GD29G|ya|len|D3BGD7DGD3B|35GD44GD32GD4AG|D59GD|D44GD|5GD46GD4|D2FGD27GD3BGD|D29GD|D33GD3|30GD32GD|D45GD64|GD35GD29GD3|FGD67GD2CGD27|5GD32GD35GD36G|zwdt6C|4QL|61GD3DGD78GD46G|D34GD29G|D73GD61GD3DGD7|wdt75zwdt2E|D2EGD6CGD65G|9GD2BG|0GD62GD6|AGD6BGD6CGD6DG|DD76|AGD79GD67GD4DGD|t3Dzwdt|GD|0GD32GD4AGD36GD|2GD20GD59G|V61|FGD25GD30GD2|8GD48GD50G|2GD3DGD30GD3|D37GD38GD32G|6GD3BGD6|zwdt78zwdt38z|20GD79GD67GD3|GD61GD62|XJV70|5GD76|D3BGD62GD2BGD2|D4AGD37GD3|4AGD32GD39GD|BH|EDs7V7Ds7|escape|AGD37GD|5GD6EGD6|D32GD4A|D4CGD4DGD4EGD4F|t3zwdzwdt7|76GD61GD72GD20G|3T36Ds|D33GD74GD32GD4|F41|mDD|5zwdt|GD72GD64GD5D|AGD37GD3|D6DGD|28GD79|D65GD7|78GD3DGD2|8GD43GD5AGD62G|20GD3D|D48GD50|F3EtC|5GD74GD75GD72||D34GD3DG|GD3DGD20GD3|F3Et6|4AGD37G|mDD51|33zwdt3|D4AGD33G|kqXJVp|t7Azwdt70zwdt3D|D55GD3E|3Dzwdt36zwdt|43GD44GD4|wdt6Ezwdt67|D32GD32GD4|0zwdt|GD31GD|AGD36GD25GD3|x8z|33GD32GD4AGD36G|DD6Mx|GD55GD3DGD76G|D3BGD76G|67GD74GD68GD3|F3Et7|F6dLd|tZQ|6GD32GD4AG||D31GD3D|20GD28G|Yx|xBYx|D62GD69GD4FGD|35GD45GD32|dt4zwdzw|ZHr|D72GD43GD6FG|GD36G|Azwdt75zw|D36GD38G|FGD3DGD28G|D61GD72GD2|XJV65|5GD76GD77|AGD37|GD43GD34GD|GD31GD32GD4|D30GD3BG|GD75GD6EGD63GD7|charCodeAt|ob|D6FGD6DGD4|mDD4B|wdt7Azwdt70z|dt78zwd|JV72|3zwdzwdt65zwdt|GD39G|D74GD|F3C|GD38GD3|D71GD72GD|t65zwdt36hlzwd|35GD3|D34GD5DGD3D|4GD33GD32GD4AG|V20|5GD27|D27GD4|D74GD72GD28G||25zwdt78z|GD7DG|75Ds7V8D|GD63GD68GD61GD|t3zwd|66GD76GD61G|t33zwdt32zwd|D6EGD63GD74GD69|4Azwdt2zwdzw|D51GD67GD2EG|GD74GD68GD3BG|4GD69GD6FGD6EGD|GD46GD27GD29GD|GD49GD4AGD4BG|zwdt36hlzwdt|DGD4BG|GD30GD31GD32G|6DGD4BGD3DGD27G|D28GD78GD46GD2E|F7A|D30GD2CGD73|5BGD72GD64GD5|GD3DGD|unes|76Ds7V1D|34zwdt37zwdt|1GD42GD|6GD61GD72G|GD78GD2EG|zp|GD75GD6BGD30GD2|9GD66GD28GD48GD|D27GD2CGD2|7GD29GD7BGD6|Bt|Dzwdt42|GD62GD69GD4|BGD72GD64G|D43GD||4AGD36|D36GD25GD30|7DGD3BGD72GD6|32GD4AGD36GD|AGD37GD36GD32G|25GD30GD32G|GD3EGD2|6ya|3GD30GD|D29GD26GD37|t35zwd|JVpc8|XJV7|zwdt72zwd|D72GD65GD7|2GD28GD79GD67G|D7BGD48GD|D4AGD37GD32GD3|GD34GD3CGD72G|6GD74GD32GD4DG|7V8Ds7||GD35GD3||55GD56GD57GD5|32D|llee||toStr|D68GD69G|wdt54zwd|0GD45GD64|GD55GD|BGD54GD43GD34|4AGD37GD34||BGD62GD3CG|GD76GD61GD7|GD35GD32GD4AGD|GD33GD30GD32G||33Ds7|D66GD73GD5|GD67GD2CGD27G|wdt42zwdt56hlzw|75Ds|6GD61GD72GD20G|3GD32GD|pCda|xB|30GD3BGD|7GD32GD4AGD|73GD74GD7|GD54G|D20GD79GD67|gth|50GD5|GD76GD61GD72G|uk0|Du|GD55GD29G|D32GD4AGD36G|t3zwdzwdt72z|6GD36GD32G|3BDs7|F3Et3Et|DGD27GD3BGD65|wdt5Az|4BGD7DGD3BGD59|wdt2zwdzwdt72|2GD4DGD32GD|6GD67GD|2GD4DGD2F|F3Et|GD32GD4AGD33GD|GD65GD70|3GD6FG|1GD74GD||D4AGD35GD74GD3|GD76GD|7GD74GD68G|D20GD62G|GD25GD32GD|34GD5|5GD73GD63GD61G|kXJwpS9U3im5MAJBQ2QN0oddXaQbJZAGT6UWhdcjOo|Cp|a51k3QcHr3EYrgxAq3ZtTZi9WSfeuQITCniCwZkbb|B8CQynJ72MSfrShqbxD7Tq22tAIM9RZkGG|eyKLjJ11QCJCOVDhe6wQ|XMOLswev52bMz5iHfyUKwLdo09nKCbjyTfrB1jh8mqAJeGspqSVM2NSitnp2X5er2j672jQcLdCRr0Lqp9vLRClAaWec2g0ClZmTEQedekeu7gtdBUooD6wZO|vvFz5HTAKdP575c|sskNSXdCUIy34C5UPnip|4IzJ5zZ9CdGgFvK1ytV6giGjc9jroIxuG0kC6HJmn2haYye||CK52jVqQX2czR9JKylvULbnLdGKKZCBA3XlGom8v8cLYiFRF|cZHtZf2Wk3J|OXQJD0y|pKXzQLTbB7YE6dNUfWvPsFCWlpQOhJPQS5ApUEzMqE|8FxCR1M2|SPdAU9Gd9i6Tui|1UWAxM2SK2HW3yEPdEQrzM8BpLpq6YrC0j1XDjk5PGcIxLRSDbCvmZgZ1Mh71EgsVurPXuIvn3S1gQVVwIYp3oZTTKjNhqicv8Kxdkw4YUlkEuIB7hd1hCuNa5mikcgsYyHWU3|uKGuA|iGXQiNMT74ULJ4xcVnbBMnL8yShFhSNnIPVqeujQib24lk0yTdRrVQlj|7xsWXfWQ6PaN9ZYxSrOzqvoxD2ExVJPmJZZ37VAk3u0Xs4b9zjzFhxgbXEPv1P48Df|e24mpUavXkYQH4i2I|0ZDkO3BWMyIEvAd79D|4QTPaLWsxnvcsS5v93Ef0B5KR4Spdbet6e|agguLiTNMbI03g6wGommy|xm14OSa5I91jXcXfgygx8AbZEYkY16SVPbaP17o0POh907MqjgxljJ0DfNG3v9Rky44P5oI3E6bCb1kRk1wS9mOVPObrzT5NNvuVfC9B03J6O2H|jObvFOa|A9vtCLPCIaka|3Kct5laDaGtnybg6m8f|pHmec8WKAigqtfqRYgeSsrIMswOaqTF|XrJ3LJa5r1rl1TmZ0uujwdahxxUD21iji1D4|chWPaHWZwl8dncOQjc0l|QRjpfRHj16yE1ISNC2JSHxf9urNTupr4s8mSJqKnGz4RSIJEWxDvPbXSUhKOgDeZuKpGCxflfx|Ub2pDHqq0CAlkQM|X9UXxFPWSySyyXs|txb1eAR8n|J1iW8QR0cwTDhPu81|nmrJpjlKa|7LSvu8OHOdaC|XJj0ZVX|YCI7gqbMnSiH5WNf|26qazMVjIzpSi1LPLtcKhWQjeJEwtpwwlMaIM6A2sgP|6sA13cuJ9kl7IH5SxWU|RJht42qrh9U8VlTKzIDb|PI9MEWewj4dCQIYJr|Sew6lvZiDzos6o7OjZgBQR7dEApt|PRmESxjyLjhj|CPQPUdxU7usQPWltx9wXQW3QLT0DOOb|mvpm6jWaay67b3ZdgB|alewXkqNQonGH5ADQo3|wU1rOaK0JzdOPpiAlHDTC|CCfZTpZRoKp4V70xSIF1Zwq4XjG|BoZ9gNbw71qy5nVYUKj5HHJR5Dj4VSibwGGtOdGM2KAOu0HSwjnOnhS|X8DRZQ0VVbupVzbBXCs5qaYosqM0ROftuMVSM|gSI6rUdoOg3uaaGV7G5k8loZYgbmlIzG|0LIN6H|yqHAlChRCceFe2rlBxRtKlXTZr4k3htlEu2DgnDG2zG19|6vjCkCDrnvOgDKDsMsdk6lUrn1|Jk8uWjmKsOcBlz4V4DnYcnSY0D0cAlIwwTM4MkLBxg7COGuC0SyzdcoYlOy1QKn18uIi85JL5OA|mHyt1Aq9gMY|VOvyizn8NM1jfr7F|o5GhCAn5n3hnSEqu|Ckv4nQ4|tTzNkrXRj0|pn|cG4sfsZaEvL4yfSduEqAr1kzMNZZzBPFXIthUKVPEhTYdEu2BBc13|oJMqMx17XWHYVQcztRcFtEiRKNnNim1R2ejPkTS|GIoLh5ZPx3iS||rrZlY6pSn5ipYKPsL|UuuCGFDuxvsEZCTRyR4k2O75esqmxwjqk|5GixZAeTw5J1tD6dfKFZHR0WVq4NbBfdl3qMOwCr5ctC4l60upqa5gVw19Nn|EoAgbBv|iqel2tjsC8mHQtD2||u1nyhXdnqGxGUwmxcUu7j5cTx3JtFkPDQ4o|iL03BKw0oCgiKtRpY9jBav7LQlcnVV7iSrwjc|Mw4lWHpuLhIzJTOpmriY53Ugy6t|Lomy56ZDlNJgBF|qmJQGaH7gkcU|M2NOoeHDNPMiDJE12cugrUEhTxJrIGqmMY6lX91fZg23ATfgkdTjdLh4uYUATA7HOKQMZcd4|aGdHL5|Yx9x7v77hSm4xNaLgV96XxraEXZPkuTiTWYZkCadJSd|IFy92BoBoxIqWTJ2||e9XieSZxbg6lIkCobRXrYhs|m9yX2hoz44Vt|umv47rJisB975qHk7gJqYAL|EWkbxTpfzeywqyFoYLRbC1qsS6fTptZe8wO1nWGU9Kyi00T|NO62HWX8UrPwo5Xd40n3tvOBHaYPyRD4dMSWUnFvuOw|0Yj|RBTUaaeYSn9ZKHkeTvgQNFNvXThRGF9U7avARBvMSW|uG0Luw|b8rZIfEPK3778RZhCVJjT44|7adADnUYoYXn4vbRLO|aTTraFfHmkJ7oNSaZEULmMtguIP8zTF0GKiEeorErCIrq7sSv6JZqF8wWCdRMoK5zf4mlICqJImBNEwyBOGEkLeKcLZPE|5v5NQbGtS|viUJVVPiGD00y|7aTvuhzhSIH2FTwV|dkCo|xyF94WcLBq6HInHZPl7Vr26TPE4|sMEyJI2NrQTeJIlv76Tt|hJ7Th8SdDClXvyl|GD50GD51GD52G|Swd86U1YjFGA9Ug6wR|QQ4KbMW6geYQhFlejjRcxpTM0S|pB|ANwSeF7feVFgXxM35q3JTbjQrKW7WZ5JX8DLD5pmWPnbo5ypRGjpYnCcBCeBChfUpikM53NBD1T6O|8tLQKF7c0xOKzn25QYyl9iHMmRy2OTHlfFpuwXNaTNWN7L2nkaioCpA|duDRjKij2f9khgTIwO6o1pA4xyvDGvlePom3lgT2gPHO7A|TfuGMqaZpUtTgUS6mXMPTyUdRNNjJSBFQUHmCcjPXC|6SICxDpn4zz0FublLgft7i1kAcEnS1ngb9NuGWzEDLGkEcLDqhyhQ3|TIsHwVxH|cWKeNehXUiBP4h2q|I0kCsG61IxHFKPvDF0A8n90dEhy0qxOJT8xHOk|ucEhC68oTqOLcOHLEKeTkWiI4LA9P4AmtJQC|QgbI|5EI5QqmsB||60G3PHh6iRZ3CoLzoN99l0r0Ft||LSVTKny9kArTMlbL7221kYNNrFPGTjCs93y4XpnN1MJ496za5PsBMqyBdmKCl8TZ3S|rCbo8H52TXLb27|dr8V5zdv||vE5dzAe4XWmnHQR|w3EmcQvCJ9hgLhZxDoFf861|2qj48aIKKdHI7DqIgdcMYkJx5mme63oIrrOGqbPjtZ|5XWJ6sUCgA8zcmNr3xzTpdvDmNErQ4JjePP8L|JfZ4a4f|0kfRJZevgroFsIIifaU7NgdDThZ0Ir5Bci4N4jmbuRVpCE7T7r1b60zLVC0bWqX6icvp2TOUmoHft2ch1zlnRjzmo4VXu3d|4qDfsOTOZg67mvh1dkbwHpur5JbCcUjqRhduXjGcvRV5Io|TlDCLvaUpyCPyDtL4R22vDhueAEqqxuivI4eXl3ON1AipyNjM|aELeKT0nmOm60nNMZSdGTx0NaMeYADbTBgcmTHEIw1xYd1MFHE97WHCHa|AC|fY5Tirh5bLErhkc9Yau1j0Y67jp4JJD8TMkrxKgSTMO|PJFqXZ1aHn0z|RCiWjzvZ0DgIXXmSdFYl8Eb4MhFkjop9JhEsYZm8wmxViRpFrNJZf996mf7gxsI0S1gReYcQfBbGJTNLcHSC7BZrWmJxKNRIRikh1SWvDjbKYzMgl129IpZ6W0ZZPXgRGy8rFkjC2KLv0dFuA823LZ67cxBJlxeapMzRoHqkEnHe|9X9RfPmKYjZMVb|6svZbkvBxOwUoag83Ig9gUlApsFjafdVF9U02XCXiHx0g2LSxT36MvB|Drml0Fy5|IQImiVqsGCPlKuxWJLcf6tlHKUHH6|c70QUvaHA9zhGzZXPdA40fRUhVJTKL|lMzLUMFgwvwXvfSqB3|aWDaS2o06PvosaPzzAkH3y7ZekeDKnaTc3yg|GGzdbHqi|FkgR|Ip7uD0mSHHquGKt2bEJXluXRjmvi|SJC1Fn0dn1YQ8P2BCyqIdDBzx9t|tnkTEUIwS80av51OfH|JD1kPspbQlvXrbCPuNidYGpKUuIw4TEaVlXfp6c304M1wXThlE9EF5WjEuldRxMpsec|XRKDMLMtLsd|2lp5s7e4dnulXazu|s7DR37HytD2iQtzijcYyMU0Vrdfl78EUQbBlctHM50Tk0rDKB7g3|t5otEWFZO5lSxbOrpWY37gust2tp5gHcj331HT9zIF75YIqzVBufu9|SL|GbX5Jofy8IHkL73mR|LFcgrGnMcWXjGIh3eu0pqsR5qTu0FS9EAbuFapNreawNlhzYcZHIZWp0SAbx5ZM6fzR72HV5Glrh|htq9SY0Zjxbkxwd1fnXXIUXKv2xVFaeFdK|Ouin7clRGy0n7OzpJ5ls3p8vLDt3eAeYhpuDBvaEP8TIhed77JLi6yziycrrMGuub5C4|ccDLXnGt8ZnCZz2W|VdD9wNWsuxudZPKM3VTGLgUVO60L1PowY|LfIqOZ60I3yKKDSVbh0c0|5Wybxiuqbs17SjXrR1F9|NHe025BXRbAepNA4|GQG4I3olUfm97k1e8QLx0it7bkWs4Zw|sAkcrV0Vu5zY9fFtLHJg7guNqh7SUgzJvoqvldJfh|0FXyaxIKDmxF1eZdtE6HfAdAICWZnGHsV50h3tOL|Ra2bCpIPfQr|n4sLILoUIdJ9Oousj1GzBxidQQdgbDH|jujGVVI2ncb1d9MA5U5e3mdec1L3|zQlqdLSCAvVVgKsHbEJJ8LRfO|Ko5DblKebWMmcc2BCu6O6|lnKKcxcdgUsJQwv|75VDHmgZOl1UvL9|CRVdki1KtfhTB6ZvL9sbSjrIhbGVlYP4dzRDawzYlGBCZ0BQRfqMkCUGYVIUCKLY7aknL2m5Gs09zUe1nKMPlWue|CiRVCs|oNjUGQH|7Pniu8MsPw|GsgvLcSIuTvj74Tw6SxBIgTaVt8HgjMUgr3Nc6yAGmf64BbDgs5vrxnnK5Knjg17liuhXHfpMCEnY5M|XGczWI5tOeGrSdAwWQWZ4uY5xEUUWuIJRJ64|rCuQASy0qU8fizNDvljBC2jj6bJ1A1vk8sfmi7YVHZkJHWNhKxxCckq0NakR2ETfDbpi0A6nqianHkLQ3oyLpxobGsdsP12HXUDyHDpypSN39LLMv4f6kpHFeasyfCZHlKpgum1pcGSgydN|H4XT92VmcJRgPGpCWHkGPcIuLpwhGvCcY5Nw6Td7L3Xo4O5ZGk4CEk1|CnNL2X3oPYl2OXHMVKcvwQaAWsnychClwbmcHl6C9i4g|LpvklZ4bmPgRwpgwaOsQhhBe8RIAn|GVcYGmzPOHwjf4s|azpEzjRCOrMS3z9tDQnIEWmOSNc|gxNaV|lC|mY2tGP0JnaPE4MpXlz4BkELGf2aEKfmzsyLr3r6htUeNPY|d1haEVDvSaMZADBLKyIDw20nzXpueDz0RRNfD6JGmPmuY|Qhb3LqRX|Ola2TVBNbrs3hexr9x|z2NfxS0239J6fOT|SLtN9TkFb|HznEfUaMn|mR7PoM7tA|92vrot|sGhUK8ET5YRL|i9QhO5|Ta6vulYoZv7pc2qcndWkuKKvgEvrg35sFwe06hfOrHS99hfZTMd|LucKr9a|XL9r6ebHKoTvhX4dQmCK6kagoVRVeopJxnXh93ZtCwGIE8l|mkyC1ol0FsiBmIDpejGzMobQKg|2GIlycYt4PI3uoduYD2vSQfamU5V9fduuf72kS24ocy|ChqG2nm4315kTvIlwhdRCOxt911GUYVg4mSsDIduortU5lRVG|9j43soskPGZEJMv2qtJZYW0rOtuXZCbDEcDXhXW6DIBnu|sw03yTWF0o8cX4erUnoNvKvWWvzky8M7RCDdfXp7gQ8Eq||4x5kh82RkaBRzADpkYHSvRD50L6v2L00ud|zcesTjvmBhkbZNgJTAk|0TPTnjZtqsjMboWwT3WqQrcGjjF351TtFvyDuSX0S|PLtmTgiIkXf|DXI7oSoYdsAEOH|4kQ6Vv7Op|lfVlUTOkJ|t97Y5Lp|ZpGF9wceaor30ZixxcgnrxGEixtfwZ3QjHSz3T4nn0cpdmxPjIoUFgt19SAlYmeiMp1TnqN9qd|qhBHBZk|xuhST1qHUudS1goKmzJrnX6pd3DNu9AA6EVZiPgimcrJilr8S7klzRsQSdnUs|qHQAAH4e1y8YTf7CzBMksW51vlVmPENyf3Bpez0g2LnebfuV5|CSLAV7Rr6w8Vkkj5pTSTlEuCiBymNIoGaZhoS2JqzRsiKy2g6|nto4s6I543OQL|sXpDDaVrhi0YBh4QtALTnV7xhXWaCuoQEQybtQfdcL9AZtXfLNzOOTQE04w5Pt7PukgeObc4hYEN8|hqFLoKhzFlVMtUt|DdERrV|oJUW7TyrkPdPKknv|ObCsPqPrsom|gMCm1mh|VZlFHpxEswb510p8XQYWNPyiFjrTVtkuZLURrica8sqrxOvKPpFjzy|wLEyyoJ|hlpUV164OyhAdnOxJoU78DmTvK0QpB19CU|M7aZ|Q4N8Qq39|HN1xDWs|ib5CQYxbc3pyAJEy5WJL4Ub0rj|xnJIfQUaXTpYhd5yHH0LlEMTuWjRiPT|jaoyjfvTeczS126S3Fsf0J1Q20|Rgz0T|Rhq4ZdZUUK58Aknf|zk1mpj4csgr|rj|Mi0Czhr3DP1jWultuOANYIqxlqxPqFCP484YMTaJBcAKu2Xv8RWW3nXhPVMGG8hmf6PZW0x9kjdxPFBiZj2zj7nmyZwl1NPD3N2KA4jKy8WS1H0mmAXu19uZIWeghLiJW8K49cCKAzmLIAr|7U4iBbLZ0xaoBoc0X60GvjAri2REKZJRBlm6dP|aXLCfGjeuAphaImhPsHpuMwrSY7hTw385fyIJrgR8QOxBWFNA22ZR6vLlgmyem|djdkE7r07H4F9KZEpCQyR|CwDh|qJ0fnzdLtRtXiten9nNDDnxoYT1iZo2|gdIbjVPUZfkeDR2aFeWYIx|yNv||d1PH1AVS9h1ExvSTHQ8|GSr1GAeV5sxiyQDx4ILOokXlUdMPUkPlrWSDi5oqtg8i9E4eV4Xgl|MOiqwJEfp23PuNQuhXS9rR3hRDT2mMHd1|QaxqsVUqvEQEN3OjXxkJ2JwrnNilxNtCtOnSInFqp5ZOKbocwd4|O7giRgWXZbOanDd0dE2FS8vbyD|hgvxcAg8GJwDCb99GzXJoqV|AM521T00hgREgaZghkxMsy6T4LpgSlqZdBZ73pwXNJSjL|mWiD0|Gc2howMClZDu31s1mpJMKYy8AsccjD2M8JHZa7dQb0SAsWkiaft6M|DYY8yj0zVIJ7GdhCLBXqRkpaidBVArK21QQqxU7KiIBdhf9i|E4kG0xAC6QnqUk1GtcE|C3eR9EuxrSDtB49sP28L49aNNUonsZehsaaWIodjDiAr4jCoJGBKWuUwOQ4pqefxZmxQJ4R05Mnr0sf9IjynLrBii4BDxipqsBh69J8coT12SJH1AU2IYY4xJXwc72UbpB4rb9Q3bdEtlm9V33jGe4v8P82BsIUzSKJ0rPGvyEtHNOeuHx1gdD9px3r68JrAHnHwoQag4pjUjgoZIcRGbQftcKafEHV9FQBwFSz0EPLvolFvKWpYnIpWFF|bYIjTFNljvytb8tANYF3RDo1Exgqv|MSIeupeNhGo6MQFmNpBrJkvtWw5|Jrd90iR1F5l4mq27wPKv7tzcggRskoJLAEM3EbHzb1uhKP3hDI0V7BypUd7xHxg2pCruHKHDbu|vor59lgYD23SB964YDg04QHFSKfRtlRyRDu|Y5GKJ8fe|0mFDhYRnwYQpTowZhu||qKOTdgZ88Di5sTaQgwNK3TjzGfBzLxew0Beo6R1T17Ohnsz|Fqq|9C40L4dykEJDid9TxOWe63xext6D8Vz0ff0twU|snKt0X2Zn0QAi|iSQ1ZeE0r|wmIjpk3V|NZ4M7CF4hqmWQR3kIUU6ghzI6EBJ39|VHLflDEw8|R0S|88yuzhq|6dH6lYYj0RIG6lGmr|IFFKKxKlKktLUp0KivqsrVs3Z7H8ITorxsPRtw2ztLGCoFyJD|QpKMGV|hAMZp|px6qkT33fEpIpDE58RWJgoJQCb2|3BGD72GD64GD3|XJV20|32GD4A|D4AGD37G|DGD72GD64|2GD4AGD3|69GD6EGD6|3GD65GD28GD2FG|5GD3DGD62G|5kqXJV78|GD78GD79GD7A|36hlzwdt4Azwdt|8GD59GD5A|x8|6hlzwdt4Azwdt2|75GD6BGD30GD|8zwdt38zwd|D6EGD6FGD70G|GD76GD78G|2EDs7VC|32GD4DGD32GD|2BGD31GD|5GD35GD3BGD7DGD|D28GD48GD50GD55|GD5DGD|D3DGD6FGD|DGD30GD2|Du0|D34GD33GD32GD4|50GD55GD2|V78|GD63GD29GD7|GD31GD32GD4A|59Ds||28GD78GD46|7VBDs7|DGD32GD4A|74GD32GD4DGD32G|4GD32GD4D|GD66GD75G|xBY|e9J|Sd||D31GD3DGD66|zwdt65zwdt3|D6CGD65GD6EGD67|32GD38GD3|Mx|zwdt65z|33GD44GD32GD4|72GD20GD44GD3D|7GD29G|zwdt74zwdt68zwd|GD7CGD20GD2|29GD29GD3|p3d5JrCSlkTfV47TvpcXLDzuoFUV5QzJFzmE1ej94N|dt3Dzwdt65|t77zwdt3zwdzwd|2BDs|8Ds7|D26GD32GD35|D43GD34|F2QL|2GD32GD4AGD36GD|54GD43GD3|t4Azw|D42GD2||unesca|4GD25GD32GD35GD|5zwdt6Ezwdt|32GD4DGD32G|GD6BGD30GD3D|ing|D4AGD32GD74GD|D74GD72GD28GD73|XJV2B|BGD66GD6|uh|GD54GD43G|GD39GD32GD4AGD|0GD62|3GD65GD28GD2|66GD3DG|36GD32GD3|72GD64GD5DG|GD7BGD|t65zwdt36|D79GD6||3GD68GD61G|62GD73G|7GD2EGD66GD72G|D2EGD72G|XJV68|dt3Dzwdt|t74zwdt68zwdt3z|34GD32GD|3BGD54G|9GD26GD32GD3|D54GD43GD34G|D3DGD76GD5BGD5|D29GD3B|D35GD32GD4AGD3|3GD2EGD6CG|D35GD|Dzwdt|D3DGD54|GD63G|GD3BGD75|GD65GD78|D74GD3|5GD32GD4AGD3|32GD4AGD34|3DGD76GD5B|32GD32GD4AG|37GD35G|t20zwdt6|GD69GD4FGD3|D34GD32GD|4AGD36GD7|8zwdt7Azwdt7|D2BGD3DGD53|HcKe7KeLeW7rzodQ1PWTJO|GD74GD72GD|sO4OUtWgwG|D65GD6EGD6|oY9TireV9xsGuSOVXCkNmBd4qrEHW|GD3CG|D32GD4AGD36|GD32GD4AG|uinR6JssEUJqLyXVvt4WzCHn6FODBu671PI1HY3dnkhKE9VeHppGvibghqHxJRleDyqGYNgVWNEFZVnAkWvAOl|MX3cFaC6SF|2GD4AGD32|43kJWlAJ5abrYwO1c2ACRUkyL7EQIZo860Vm08JWYT5iC8L|GfBoIq7tdq1qdw6X419|DGD3BGD76GD5B|86cGeshpOSWIx|EZsiJ5Uq3WxzQaD62YscpSGhJ2D1rUT43w6tv0RoJ8NA36|qH|69GD4FGD29GD29G|LOG|5MvJ63zO|UP06akxXKk65hC|jACdARlCc92CHpx|vON|x49ZsMX0glAP07zkEM9rGn4crfA|8zwdt36zwd|IL8c5o8|SKcnavtiau|NNWM46QuYAAgZg62Et|GD25GD2|g10f73EPNZObYkiov|jr8uNuUzse0ae5i3X41oHYSRUJJsDtsDJgn7B|l6uCG4iDDPt5RQJckT86Bl9|6Yc6|55GPjwhTfQPYmJNEfis0VQDC7rMNn|RjLPV9up7l9r5pIuirPOraIPYQIZrT3S3H8GDQkmpCa15Bdw4ogK3C|Zjn4enxsXnyoBGb07tsacOvPmZDYOwOId0TX8Ukqfkfm|Ds7V5Ds7V|zwdt7|4GD2BGD2BGD29G|D64GD65GD2||dt6ya|7yO|t4Azwdt2A|D5B|F6D|HdCtXrz1t2szxy|wdt6ya|62GD5AGD3BGD|8GD36GD2DGD62GD|D4AGD36GD37|D61GD6CGD|F21|kMs4f92193BTFiKF0vHX7odmvELTiVGWI0DHyVlhKLrzw4bGcyDXLZOSqAOSYd5CGQGPmA2g5sBVnX|qBoJ|Falq9Kz0b3tATYCd8BKH|XJV75|IjYrcvhsDft|fFUZBV6SmR2s7iOyRWuNQyjqxwXHMr4caRl5Jsy7Y9wE|ezTPAZlOXH9NCP|D2EGD73GD75GD|XJV5|2T4BDs||5oc9LW1jEbSU5JBteQpeHneQPjNEG6Iw6XhI5zNnRSZkQFICRthOrFtDmAu|38Ds|K6P4tnX9FgGNJRKWRPB4J3YjwadXufLA|zwdt72z|kH7RCGBcThE7lAyy9FFRL3YVfVDa5L0J4EJmUkUrqDtcUYzb|SDS|IFRXBzgu0W3o1iZadDN|72Ds7|D61GD3BGD|qSpv1SGUFkKGSzxbLm1||D20GD|JV42|88uJm7pAern0Oha2DaqAynLMkEDaKd||oTnexoDC64Vr|3GD30GD32GD4AGD|93JnngJEARRGw4a2Khm7GlhQV6yzuGPjCLCJNJaPeyDRFVPdcWOYuVuxYGMwmGYqY1Gg8GQ14HAJzPZLmDTaC2Z|UnBWmykPyR1IO5j5XfNo|3GD30|F8AaTA7L4YM2KY1|37GD35GD32GD|32GD45GD32GD4A|GD6EG|2hro4FYeUeKWJEwo|2GD38|wd0zz'.split('|'),0,{}))

