Greasy Fork

Greasy Fork is available in English.

Enhanced word highlight

在搜索引擎和任意网页获得增强的高亮!

当前为 2023-12-29 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name           Enhanced word highlight
// @name:en        Enhanced word highlight
// @namespace      http://userscripts.org/users/86496
// @description    在搜索引擎和任意网页获得增强的高亮!
// @description:en Enhanced keywords highlight for Search Engines and All !
// @match          *://*/*
// @exclude        http://maps.google.com/*
// @exclude        https://maps.google.com/*
// @grant          GM_log
// @grant          GM_xmlhttpRequest
// @grant          GM_getValue
// @grant          GM_setValue
// @grant          GM_openInTab
// @grant          GM_registerMenuCommand
// @license        GNU GPLv3
// @version        1.8.0
// ==/UserScript==

// great credit for original script wright os0x [http://userscripts.org/scripts/show/43419]
// hzhbest modded  | detail in http://userscripts.org/scripts/show/64877
// 180: get history search kw from supported search engines by last click; fix configbox abnormality; 切分中英文关键词;style fix;fix bug getting history search kw; add delay for title; get kw in search engines dynamically;
// TODO: 在搜索引擎内按em、strong元素增加关键词

//console.time("highlight");
function l() {	//debug
	var args = Array.prototype.slice.call(arguments);
	console.log.apply(console, args);
}

(function word_hightlight(loaded) {

	//if (window.top != window.self) return; //don't run on frames or iframes

	// check browser
	if (!loaded && window.opera && document.readyState == 'interactive') {
		document.addEventListener('DOMContentLoaded', function () {
			loaded = true;
			word_hightlight(true);
		}, false);
		window.addEventListener('load', function () {
			if (!loaded) {
				word_hightlight(true);
			}
		}, false);
		return;
	}
	if (document.contentType && !/html/i.test(document.contentType)) return;
	// check api
	/* var getv, setv
	if (typeof GM_getValue == "function") {
		getv = GM_getValue;
		setv = GM_setValue;
	} else { // workaround functions, creadit to ww_start_t
		setv = function (cookieName, cookieValue, lifeTime) {
			if (!cookieName) { return; }
			if (lifeTime == "delete") { lifeTime = -10; } else { lifeTime = 31536000; }
			document.cookie = escape(cookieName) + "=" + escape(getRecoverableString(cookieValue)) +
				";expires=" + (new Date((new Date()).getTime() + (1000 * lifeTime))).toGMTString() + ";path=/";
		};
		getv = function (cookieName, oDefault) {
			var cookieJar = document.cookie.split("; ");
			for (var x = 0; x < cookieJar.length; x++) {
				var oneCookie = cookieJar[x].split("=");
				if (oneCookie[0] == escape(cookieName)) {
					try {
						eval('var footm = ' + unescape(oneCookie[1]));
					} catch (e) { return oDefault; }
					return footm;
				}
			}
			return oDefault;
		};
	} */

	//{	values >
	var isOpera = !!this.opera,
		isFirefox = !!this.Components,
		isChromium = !!this.chromium,
		isSafari = this.getMatchedCSSRules && !isChromium;

	const STYLE_COLOR = ['#FFFF80', '#99ccff', '#ff99cc', '#66cc66', '#cc99ff', '#ffcc66', '#66aaaa', '#dd9966', '#aaaaaa', '#dd6699'];
	const BORDER_COLOR = ['#aaaa20', '#4477aa', '#aa4477', '#117711', '#7744aa', '#aa7711', '#115555', '#884411', '#555555', '#881144'];
	//浅一点的一套配色
	const STYLE_COLOR_2 = ['#FFFFa0', '#bbeeff', '#ffbbcc', '#88ee88', '#ccbbff', '#ffee88', '#88cccc', '#ffbb88', '#cccccc', '#ffaabb'];
	const BORDER_COLOR_2 = ['#aaaa40', '#6699aa', '#aa6699', '#339933', '#9966aa', '#aa9933', '#337777', '#aa6633', '#777777', '#aa3366'];
	// button color: normal bg / active bg / disabled bg / border color.
	const but_c = '#cce5cc', but_ca = '#FFD000', but_cd = '#999999', but_cb = '#669966', but_ch = '#bdcfbd';
	const a_day = 24 * 3600 * 1000;

	// lexicon 词汇表
	// highlighted word:高亮词:已用于被高亮的单个【字符串】
	// highlight(s):高亮:在页面中针对高亮词形成的带高亮效果【节点】
	// navigate:寻觅:在页面中对寻找某高亮词或不指定高亮词的高亮的位置的【动作】
	// keyword:关键词:通过自动高亮功能识别到的高亮词候选的单个【字符串】
	// word:词:任何输入到Ewh的单个【字符串】
	// map:分布图:显示各高亮在页面分布相对位置的【画布节点】
	// viewport:指示窗:显示当前窗口可见区域在页面相对位置的【画布节点】
	// panel:高亮面板:Ewh主要功能【节点】,上面有控制按钮和高亮按钮
	// highlight button:高亮按钮:在高亮面板上代表并可用于寻觅各高亮词的高亮的【节点】
	// turn off:停用:保留高亮面板但不显示各高亮的【动作】,可重新turn on
	// disable:禁用:不保留高亮功能在当前窗口不显示并不再显示高亮的【动作】,可重新添加词来重启高亮
	// window:窗口:显示网页的浏览器【组件】;不同于浏览器窗口,一个浏览器窗口包含了其功能按钮和窗口,甚至通过多标签页包含多个窗口

	// Initialize value
	const PRE = 'wordhighlight';
	const ID_PRE = PRE + '_id', ST_PRE = PRE + '_store', PO_PRE = PRE + '_position', CO_PRE = PRE + '_config', HS_PRE = PRE + '_histore';
	const STYLE_CLASS = '0123456789'.split('').map(function (a, i) { return PRE + '_word' + i; });
	var setuped = false;		//初始启动状态:否
	var highlight_off = false;	//初始停用状态:否
	var addKeyword = true;		//初始添加状态:是(关键词输入框为“Add”而非“New”)
	var keyword = '';			//关键词文本
	var words = [];				//关键词对象数组 [{text1,ison1,exp,...},{text2,ison2},...]
	var word_lists = [];		//对应单个关键词按钮的对象数组,其中按钮位于word_inputs_list内
	var word_inputs_list;		//容纳word_lists的外框元素,位于panel内
	var layers;					//高亮元素highligh的数组
	var positions = [];			//高亮元素的指针位置,[#0:不指定高亮,#1:第一个词,#2:第二个词,……]
	var xp_all = new $XE('descendant::highlight[starts-with(@name,"' + PRE + '_word")]', document.body);
	//body中所有name属性为高亮标识开头的highlight元素进行xpath检索的检索体对象
	//该对象的get方法输出highlight元素的数组(不是nodelist),调用get方法以获取最新的highlight元素数组
	const keyCodeStr = {			//key press 事件返回的which代码对应按键键名对应表对象
		8: 'BAC',
		9: 'TAB',
		10: 'RET',
		13: 'RET',
		27: 'ESC',
		33: 'PageUp',
		34: 'PageDown',
		35: 'End',
		36: 'Home',
		37: 'Left',
		38: 'Up',
		39: 'Right',
		40: 'Down',
		45: 'Insert',
		46: 'Delete',
		112: 'F1',
		113: 'F2',
		114: 'F3',
		115: 'F4',
		116: 'F5',
		117: 'F6',
		118: 'F7',
		119: 'F8',
		120: 'F9',
		121: 'F10',
		122: 'F11',
		123: 'F12'
	};
	const whichStr = {
		32: 'SPC'
	};
	var htmlDoc = isChromium ? document.implementation.createHTMLDocument('hogehoge') : document;	//文档根节点
	var highlight_reset = function () { };		//重置高亮的预定义函数
	var canvas;			//分布图底板canvas
	var cw;				//分布图位置指示canvas
	var c2context;		//分布图指示标canvas 2D图形
	var nav;			//分布图容器
	var root = /BackCompat/i.test(document.compatMode) ? document.body : document.documentElement;	//页面根节点
	const CanvasWidth = 150;	//分布图基础宽度
	var ratio = 1;				//分布图位置指示与实际比例
	var aside, section, td0, lock, edit, off, text_input, posi_tip, posi_tip_timer, inputBOX;	// panel elements
	var main_sheet, move_sheet, inst_sheet, config_sheet;	// style sheets
	var pausetimer, onpause;	// 关键词导航时暂停刷新的计时器和状态标志
	var loadedtime;		// 脚本启动时间(数字串)
	var keyword_histore;		// 搜索结果关键词继承数组,[{,,,timestamp},{url,title,kw,time},...]

	//language detection
	const lang = navigator.language;
	const _L = (lang.indexOf('zh-') == -1) ? 0 : 1;
	// string arrays
	const _ti = { // en/zh locale string for tooltip.
		edit: ['Edit current keywords', '编辑现有关键词'],
		edit_a: ['Confirm editing keywords', '确认编辑关键词'],
		off: ['Toggle all keywords\' highlight', '切换全部关键词的高亮'],
		td0: ['Double-click to minimize the panel', '双击最小化面板'],
		td0_a: ['Double-click to restore Ewh panel', '双击恢复 Ewh 面板'],
		lock: ['Lock current set of keywords', '锁定当前的关键词组'],
		lock_a: ['Current locked keyword(s):', '当前锁定的关键词组:'],
		lock_u: ['Function not supported by this browser', '此浏览器不支持该功能'],
		close: ['Close Enhanced word highlight', '关闭关键词高亮'],
		kwL: ['Left click to the next; Right click to the previous', '左击跳到下一个;右击跳到上一个'],
		check: [['Toggle highlight of "', '"'], ['切换“', '”的高亮']],
		mapl: ['Toggle highlight map locking status', '切换高亮分布图的锁定状态'],
		ad_nw: ['Toggle add/new keywords for highlight', '切换添加/取代关键词的高亮'],
		subm: ['Submit keywords', '提交关键词'],
		clos: ['Close input box', '关闭输入框']
	};
	const _di = { // en/zh locale string for dialog.
		confT: ['Enhanced word highlight Advanced Config', 'Enhanced word highlight 高级设置'],
		ap_option: ['What auto-pager tool do you mostly use?', '你主要用那种自动翻页工具?'],
		ap_option1: ['Autopagerize GM script', 'Autopagerize GM 脚本'],
		ap_option2: ['Autopager extension', 'Autopager 扩展'],
		ap_option3: ['Other (can handle all auto-paging tools', '其他(能应付任何自动翻页工具)'],
		off_short_words: ['Skip highlighting of short words?', '是否忽略短词的高亮?'],
		off_short_words1: ['Don\'t skip', '否'],
		off_short_words2: ['One-letter/digit word', '忽略单个字母/数字的词'],
		off_short_words3: ['One- and two-letter/digit word', '忽略一至两个字母/数字的词'],
		split_cn_en_words: ['Split Chinese characters and English characters', '切分中英文关键词'],
		split_cn_en_words1: ['keep them as it is', '保持原样不切分'],
		split_cn_en_words2: ['Split to make individual keywords', '切分成独立的关键词'],
		skip_word_list: ['Skip highlighting of words below: (separate words with a space in between)', '忽略以下词的高亮:(使用空格分隔各词)'],
		no_auto_hili: ['Disable auto-highlight (auto-capture keywords for highlight) ?', '是否禁用自动高亮(自动抓取关键词来高亮)?'],
		no_auto_hili1: ['Enable', '不禁用'],
		no_auto_hili2: ['Completely disable', '完全禁用'],
		no_auto_hili3: ['Disable only on pages from search result links', '仅在搜索结果链接打开的页面上禁用'],
		no_auto_hili4: ['Disable for search keywords', '对搜索关键词禁用'],
		sort_keywords: ['Highligh longer words first. Recommended, except for highlighting regular expression.', '优先高亮长词,推荐选择,需要高亮正则表达式的除外。'],
		sort_keywords1: ['Sort words before highlight', '高亮前先排序目标词'],
		save_panel_pos: ['If you have your own favorite panel position, check this.', '如果你希望面板默认在你喜欢的位置显示,就开启这功能。'],
		save_panel_pos1: ['Save panel position', '保存面板位置'],
		show_indc_bar: ['Check this and a transparent indicator bar will appear when navigating through highlights, telling which row the current highlight is.', '若该功能开启,在查找高亮时会显示半透明指示条以标示当前高亮所在的行。'],
		show_indc_bar1: ['Show indicator bar when navigating', '查找关键词时显示指示条'],
		button_yes: ['OK', '确定'],
		button_no: ['Cancel', '取消'],
	};
	//}

	// #### Config I #### --------------------------{{

	// List of url patterns; Array('NAME', 'KEYWORD_PREFIX', 'URL_PATTERN', 'RESULT_BOX')搜索引擎信息数组
	const urlArr = [
		['Google', 'q', '.google.'],
		['Yahoo', 'p', 'search.yahoo.'],
		['Baidu', 'wd', '.baidu.com'],
		['Baidu', 'word', '.baidu.com'],
		['Ask', 'q', 'www.ask.com'],
		['Bing', 'q', '.bing.com'],
		['cnki', 'kw', '.cnki.net'],
		['sogou', 'query', 'www.sogou.com'],
		['weibo', 'q', 's.weibo.com'],
		['duckduckgo', 'q', 'duckduckgo.com'],			//https://duckduckgo.com/?q=DDG&t=h_&ia=web
		['greasyfork', 'q', 'greasyfork.org'],			//http://greasyfork.icu/zh-CN/scripts?q=%E9%AB%98%E4%BA%AE
		['ecosia', 'q', 'www.ecosia.org'],			//https://www.ecosia.org/search?q=%E7%9C%BC%E7%90%83%E8%B7%9F%E8%B8%AA
		['360', 'q', '.so.com'],
		['Yandex', 'text', 'yandex.com'],
		['#common1', 'search_query', '']			// 常见关键词参数前缀,如YouTube
	];

	// List of IDs of query input boxes; Array('#SEARCHBOX_ID#', 'SEARCHPAGE SPEC_URL')
	const queryArr = [
		['query', '/search'],		// most common
		['search', ''],				// most common
		['keyword', ''],			// most common
		['script_q', 'userscripts.org/scripts/search'],			// userscripts.org
		['search-q', '/search']		// addons.mozilla.org
	];

	// keybinds
	const KEY_NEXT = 'n';			// "n"			Next occurrence
	const KEY_PREV = 'N';			// "Shift-n"	Previous occurrence
	const KEY_SEARCH = 'M-/';		// "Alt-/"		Add keywords
	const KEY_OFF = 'M-,';		// "Alt-,"		Suspend highlight
	const KEY_CLOSE = 'C-M-/';	// "Ctrl-Alt-/"	Disable highlight
	const KEY_EDIT = 'M-.';		// "Alt-."		Edit highlight
	const KEY_REFRESH = 'r';		// "r"			Refresh highlight

	// delay of highlighting (ms)
	const delay = 500;

	// delay repetition for document title
	var retry_for_title = 10;

	// instant highlight selected keywords
	const instant = true;

	// restore focus and scroll position after closing keyword input box with shortcut key?
	// mainly useful for keyboard navigation, not recommend for mouse navigation.
	const refocus = false;

	// minimize the panel initially?
	var panel_hide = false;

	// #### Config I #### --------------------------}}

	if (window.top.document.location.href != window.self.document.location.href) panel_hide = true; //hide panel in iframes

	// #### Config II #### --------------------------{{
	var CFG = {
		ap_option: 2,
		// What's your main auto-pager tool?
		// 0 - Autopagerize (GM script, obsolete)
		// 1 - AuroPager (Firefox extension, obsolete)
		// 2 - Other (Other auto-paging scripts or extensions)

		off_short_words: 1,
		// turn off short keywords (one or two letters or number) by default?
		//	0-no, 1-one letter, 2-one or two letters

		split_cn_en_words: 0,
		// split Chinese charaters and English characters
		// 0-no, 1-yes

		skip_word_list: "the to in on among between and a an of by with",
		// skip highlighting word list, lowercase only; fully capitalized keyword not affected by this list
		// For example you can add "IT" to highlight even if you have "it" in this list.

		no_auto_hili: 0,
		// Stop auto-highlight?
		// 0-no, 1-yes, 2-only pages from search results, 3-any search keywords

		sort_keywords: 1,
		// sort keywords? 0-no, 1-yes
		//<!> Setting this to "yes" will produce better highlight result,
		//	while "no" will perform faster and support ReExp input better.

		save_panel_pos: 0,
		// save panel position? 0-no, 1-yes

		show_indc_bar: 1,
		// show indicator bar when navigating? 0-no, 1-yes
	};
	// #### Config II #### --------------------------}}

	// 设置对话框规范题目设置
	const config_setting = [
		// id —— 与CFG对应的设置变量名
		// title —— 设置题目文本
		// type —— 题目的类型:
		// 		text:文本描述
		// 		fill:填空 → 储存文本
		// 		check:单选(单项是否;choices.length == 1;多项选一;choices.length>1) → 储存选项数字(非选为0)
		// 		multi:多选(choices.length>1) → 储存各选项数组[1,1,0,……],非选为0,已选为1
		// choices —— 与题目类型相关的选项数组
		{
			id: "ap_option",
			title: _di.ap_option[_L],
			type: "check",
			choices: [_di.ap_option1[_L], _di.ap_option2[_L], _di.ap_option3[_L]]
		},
		{
			id: "off_short_words",
			title: _di.off_short_words[_L],
			type: "check",
			choices: [_di.off_short_words1[_L], _di.off_short_words2[_L], _di.off_short_words3[_L]]
		},
		{
			id: "split_cn_en_words",
			title: _di.split_cn_en_words[_L],
			type: "check",
			choices: [_di.split_cn_en_words1[_L], _di.split_cn_en_words2[_L]]
		},
		{
			id: "skip_word_list",
			title: _di.skip_word_list[_L],
			type: "fill",
			choices: []
		},
		{
			id: "no_auto_hili",
			title: _di.no_auto_hili[_L],
			type: "check",
			choices: [_di.no_auto_hili1[_L], _di.no_auto_hili2[_L], _di.no_auto_hili3[_L], _di.no_auto_hili4[_L]]
		},
		{
			id: "sort_keywords",
			title: _di.sort_keywords[_L],
			type: "check",
			choices: [_di.sort_keywords1[_L]]
		},
		{
			id: "save_panel_pos",
			title: _di.save_panel_pos[_L],
			type: "check",
			choices: [_di.save_panel_pos1[_L]]
		},
		{
			id: "show_indc_bar",
			title: _di.show_indc_bar[_L],
			type: "check",
			choices: [_di.show_indc_bar1[_L]]
		},
	];

	// GM APIs available?
	if (typeof GM_getValue == "function") var gm_ok = true;
	var panel_pos_arr = ['right:-1px;', 'bottom:-1px;'];
	if (gm_ok) {
		// Configs
		var confstr = GM_getValue(CO_PRE);	//提取GM储存的设置
		if (!!confstr && confstr.slice(0, 1) === "{") {	//如果设置是对象文本(JSON)
			CFG = JSON.parse(confstr);		//则载入
		} else {							//否则将默认设置写入储存
			GM_setValue(CO_PRE, JSON.stringify(CFG));
		}
		// Locked keywords
		var keyword_locked = GM_getValue(ST_PRE);
		// Histore keywords
		if (CFG.no_auto_hili == 0) {
			loadedtime = new Date().valueOf();
			var confhs = GM_getValue(HS_PRE);
			if (!!confhs && confstr.slice(0, 1) === "{") {
				keyword_histore = JSON.parse(confhs); console.log('keyword_histore.length: ', keyword_histore.length);
				if (keyword_histore.length > 1 && loadedtime > (keyword_histore[0].time + 7 * a_day)) { // 每七天清理超过七天前的记录

					let i;
					for (i = 1; i < keyword_histore.length; i++) {
						if (loadedtime <= (keyword_histore[i].time + 7 * a_day)) {
							break;
						}
					}
					keyword_histore.splice(1, i - 1);
					GM_setValue(HS_PRE, JSON.stringify(keyword_histore));
				} else if (loadedtime > (keyword_histore[0].time + a_day)) {	// 每天更新时间戳
					keyword_histore[0].time = loadedtime;
					GM_setValue(HS_PRE, JSON.stringify(keyword_histore));
				}
			} else {
				keyword_histore = [{
					kw: '[null]',
					url: '[null]',
					title: '[for timestamp only]',
					time: loadedtime
				}];
				GM_setValue(HS_PRE, JSON.stringify(keyword_histore));
			}
		}
		// Saved position
		if (CFG.save_panel_pos) panel_pos_arr = GM_getValue(PO_PRE, panel_pos_arr.join('|')).split('|');
		// Configs menu
		window.addEventListener('load', function () { GM_registerMenuCommand(_di.confT[_L], config_box); }, false);

		unsafeWindow.EWH_iSearch = function () { instant_search(false, null); };
		unsafeWindow.EWH_cClose = function () { command_close(); };
	}

	// main process
	init_keyboard();
	var retry;

	retry = setInterval(() => {
		if (document.title.length > 0 || retry_for_title == 0) {		// 尝试多次后放弃
			clearInterval(retry);
			if (load_keyword() !== false || init_keyword() !== false) {	// 找寻可高亮的关键词并高亮
				setup();
			}
			setTimeout(function () {									// 延时设置监视器,若标题变化则重新高亮
				var watch = document.querySelector('title');
				new (window.MutationObserver || window.WebKitMutationObserver)(function (mutations) {
					// console.log('标题变了', document.title);
					command_close();
					window.name.replace(PRE + '::CLOSED::', '');
					if (load_keyword() !== false || init_keyword() !== false) {
						setup();
					}
				}).observe(watch, { childList: true, subtree: true, characterData: true });
			}, 1000);
		} else {
			retry_for_title -= 1;									// 尝试次数减一
		}
	}, delay);

	// Functions

	// 对目标文档(元素)对指定关键词数组进行高亮 ##
	function highlight(doc, ext_word) {
		var _words, _index;
		if (ext_word && ext_word.words) {					// 如果有指定关键词对象,则引用其中的关键词数组和起始点
			_words = ext_word.words;
			_index = ext_word.index;
		} else {											// 否则使用全局 words 数组对象,从零起始
			_words = words;
			_index = 0;
		}
		if (_words.length <= 0) {							// 数组无元素则退出
			return;
		}
		var exd_words, xw;									// 转化后的正则,转化后的xpath
		if (_words.length === 1 && _words[0].exp) {
			exd_words = _words.map(function (e) { return e.exp; });
			xw = '';
		} else {
			exd_words = _words.map(function (w) { return w.text.test ? w.text : new RegExp('(?!<##@)(' + w.text.replace(/\W/g, '\\$&') + ')(?!%##)', 'ig'); });
			xw = ' and (' + _words.map(function (w) { return ' contains(translate(self::text(),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ"),' + escapeXPathExpr(w.text.toUpperCase()) + ') '; }).join(' or ') + ') ';
		}
		$X('descendant::text()[string-length(normalize-space(self::text())) > 0 ' + xw + ' and not(ancestor::textarea or ancestor::highlight or ancestor::script or ancestor::style or ancestor::aside)]', doc).forEach(function (text_node) {
			var df, text = text_node.nodeValue, id_index = 0;
			var parent = text_node.parentNode, range = document.createRange();
			var replace_strings = [];
			var new_text = exd_words.reduce(function (txt, ew, i) {
				var _i = i + _index;
				if (words[_i].ison) {
					txt = txt.replace(ew, function ($0, $1) {
						replace_strings[id_index] = '<highlight class="' + STYLE_CLASS[_i % 10] + '" name="' + PRE + '_word' + _i + '">' + $1 + '</highlight>';
						return '##@' + (id_index++) + '%##';
					});
				}
				return txt;
			}, text).
				replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').
				replace(/##@(\d+)%##/g, function ($0, $1) {
					return replace_strings[$1] || '';
				});
			if (replace_strings.length) {
				try {
					if (isChromium) {
						range.selectNodeContents(htmlDoc.documentElement);
					} else {
						range.selectNode(text_node);
					}
					df = range.createContextualFragment(new_text);
					if (df.firstChild) parent.replaceChild(df, text_node);
					range.detach();
				} catch (e) {
					error(e);
				}
			}
		});

	}

	// 生成主css样式表
	function addsheet() {
		if (!main_sheet) {
			// 高亮样式
			var hilistyles = STYLE_COLOR.map(function (rgb, i) {
				return 'highlight.' + PRE + '_word' + i + ',.' + PRE + '_item' + i + '{background:' + rgb + '!important;}';
			});
			// 高亮边框样式
			var borderstyles = BORDER_COLOR.map(function (rgb, i) {
				return 'div.' + PRE + '_item' + i + '{outline:1px solid ' + rgb + '!important;}';
			});
			main_sheet = addCSS([
				//高亮关键字样式
				'highlight[class^="' + PRE + '_word"]{color: black !important; font: inherit !important; display: inline  !important;  margin:0 !important; padding:0 !important; text-align:inherit !important; float:none !important; position:static !important;}',
				// 高亮面板样式
				'#' + PRE + '_words * {font-size: initial !important; padding: initial !important; margin: initial !important; line-height: initial !important;}',
				'#' + PRE + '_words, #' + PRE + '_words *{font-family: Arial ;}',
				'#' + PRE + '_words{line-height: 1 !important; position: fixed; z-index: 60000; opacity:0.8;list-style-type: none; margin: 0 !important; padding: 0 !important; width: auto; max-width: 100%;' + panel_pos_arr[0] + panel_pos_arr[1] + '}',
				'#' + PRE + '_words > section{clear: right; line-height: 1 !important; border: 1px solid #d6d6d6; background: #fff; display: block; position: relative;}',
				'#' + PRE + '_words * {margin: 0 !important; padding: 0 !important; width: auto; height: auto;}',
				'#' + PRE + '_words:hover{opacity: 1;}',
				'#' + PRE + '_words:hover > section{opacity: 1; border-color: #333;}',
				// 拖动手柄样式
				'#' + PRE + '_words #_ewh_handle{background: #999999; width:10px !important; min-width: unset !important; cursor: move;}',
				'#' + PRE + '_words:hover #_ewh_handle{background: #333;}',
				'#' + PRE + '_words.ewh_hide #_ewh_handle{cursor: pointer;}',
				// 高亮分布图样式
				'#' + PRE + '_words > nav{display: none; width: 100%; padding: 3px !important; position: relative; min-height: 0 !important;}',
				'#' + PRE + '_words.ewh_dragging > nav{display: none !important;}',
				'#' + PRE + '_words > nav > canvas.backport{background: rgba(0,0,0,0.5);cursor: pointer; position: absolute; right: 6px; z-index: 3;}',
				'#' + PRE + '_words > nav > canvas.viewport{background: rgba(79,168,255,0.7); cursor: default; position: absolute; bottom: 0px;}',//outline:6px solid rgba(79,168,255,0.7);
				'#' + PRE + '_words:hover > nav{display: block;}',
				'#' + PRE + '_words > nav._locked{display: block;}',
				'#' + PRE + '_words:hover > nav > canvas.backport{bottom: 0px;}',
				'#' + PRE + '_words > nav._locked > canvas.backport{bottom: 0px;}',
				// 高亮编辑框样式
				'#' + PRE + '_words.ewh_edit{opacity:1;}',
				'#' + PRE + '_words.ewh_edit #' + PRE + '_word_inputs_list{display: none;}',
				'#' + PRE + '_words form.' + PRE + '_editor{display: none;}',
				'#' + PRE + '_words.ewh_edit form.' + PRE + '_editor{display: inline-block;}',
				'#' + PRE + '_words.ewh_edit form.' + PRE + '_editor input{min-width: 80px;}',
				// 高亮关键字按钮样式
				'#' + PRE + '_words > section > table {border: 0; margin: 0 !important; padding: 0 !important; border-spacing: 2px; border-collapse: separate !important;}',
				'#' + PRE + '_words > section > * {vertical-align: middle;}',
				'#' + PRE + '_words > section td {border: none;}',
				'#' + PRE + '_words > section .' + PRE + '_ctrl{font-size: 10pt !important; display: block !important; max-width: 0; max-height: 19pt; overflow: hidden; position: relative; transition: all 0.3s ease-in-out 5s;}',
				'#' + PRE + '_words:hover > section .' + PRE + '_ctrl{max-width: 200px; transition: all 0.1s ease-in-out 0s;}',
				'#' + PRE + '_words > section .' + PRE + '_ctrl > input{display:inline; position: relative; width:13pt; height:19pt; margin-right:1px; background:' + but_c + '; border:0px solid ' + but_cb + ';cursor:pointer; font-size:10pt !important; color:black;}',
				'#' + PRE + '_words > section .' + PRE + '_ctrl > input._active{background:' + but_ca + ';}',
				'#' + PRE + '_words > section .' + PRE + '_ctrl > input._disable{background:' + but_cd + ' !important; cursor: default;}',
				'#' + PRE + '_words > section .' + PRE + '_ctrl > input:hover{background:' + but_ch + '; outline:1px solid ' + but_cb + '!important; z-index: 100;}',
				'#' + PRE + '_word_inputs_list {padding: 0 !important; margin: 0.2em !important; display: inline-block; border: none !important;}',
				'#' + PRE + '_word_inputs_list > div{display: inline-block; margin: 0.1em 0.2em !important; position: relative; padding: 0 4px !important; user-select: none;}',
				'#' + PRE + '_word_inputs_list > div.ewh_disable{background: white !important; outline: 1px solid #999 !important;}',
				'#' + PRE + '_word_inputs_list > div > div{line-height: 18pt !important; font-size: 12pt !important; cursor: pointer; color: black !important;}',
				'#' + PRE + '_word_inputs_list > div > input{cursor: pointer;}',
				'#' + PRE + '_word_inputs_list > div > input[type=checkbox]{display: none; position: absolute; right: 0px; top: 0px; opacity: 0.7;}',
				'#' + PRE + '_word_inputs_list > div:hover{outline-width: 2px !important;}',
				'#' + PRE + '_word_inputs_list > div:hover > input[type=checkbox]{display: block;}',
				'#' + PRE + '_word_inputs_list > div > input[type=checkbox]:hover{opacity: 1;}',
				// 分布图按钮样式
				'#' + PRE + '_words > section td#_ewh_maplock > input {display: inline; width: 1.3em; margin: 0.1em 0.1em !important; background: #FAFAFA; border: none; cursor: pointer; font-size: 10pt !important; color: #4d4d4d;}',
				'#' + PRE + '_words > section td#_ewh_maplock > input:hover {background:' + but_c + ';}',
				'#' + PRE + '_words > section td#_ewh_maplock > input._active {background:' + but_ca + ';}',
				// 指示条样式
				'@keyframes fadeit {from {opacity: 1;} to {opacity: 0;}}',
				'.' + PRE + '_bar{background: rgba(29,163,63,.3); position: absolute; z-index:99999; width:100%; min-height: 10px; animation-name: fadeit; animation-duration: 3s;}',
			].concat(hilistyles, borderstyles).join('\n'));
		}
		if (!move_sheet) addmovesheet()
	}

	// 生成突出高亮样式表
	function addmovesheet() {
		move_sheet = addCSS('.wordhighlight_em{outline: 4px solid #FF7B00; -webkit-outline: 4px solid #FF7B00; text-decoration: blink;}');
	}

	// 启动:生成面板,形成面板互动机制,生成分布图和分布图互动机制,可拖动绑定,自动翻页响应,开始高亮全文档 ##
	function setup(init) {		//输入:若init=true,则无视panel_hide的状态,不隐藏面板
		setuped = true;
		addsheet();
		l("setup...", keyword, words);
		// build ui
		aside = creaElemIn('aside', document.body);	//基底容器
		aside.id = PRE + '_words';
		section = creaElemIn('section', aside);		//主容器
		var table_COL = creaElemIn('table', section);	//排版容器
		table_COL.setAttribute('cellspacing', '0');
		table_COL.setAttribute('cellpadding', '0');
		var tbdy_COL = creaElemIn('tbody', table_COL);	//表主体
		var tr_COL = creaElemIn('tr', tbdy_COL);		//表行体
		td0 = creaElemIn('td', tr_COL);				//拖动手柄
		td0.id = '_ewh_handle';
		td0.title = _ti.td0[_L];
		var td1 = creaElemIn('td', tr_COL);			//功能按钮区
		var td2 = creaElemIn('td', tr_COL);			//高亮按钮区
		var td3 = creaElemIn('td', tr_COL);			//分布图按钮区
		td3.id = '_ewh_maplock';
		var editor = creaElemIn('form', td2);		//关键词编辑表单
		editor.className = PRE + '_editor';
		text_input = creaElemIn('input', editor);	//关键期编辑输入框
		text_input.type = 'text';
		var ctrl = creaElemIn('div', td1);			//控制按钮框架
		ctrl.className = PRE + '_ctrl';
		var close_button = creaElemIn('input', ctrl);	//关闭按钮
		close_button.type = 'button';
		close_button.className = 'c_b';
		close_button.value = 'X';
		close_button.title = _ti.close[_L];
		off = creaElemIn('input', ctrl);			//停用按钮
		off.type = 'button';
		off.value = 'O';
		off.title = _ti.off[_L];
		lock = creaElemIn('input', ctrl);			//锁定按钮
		lock.type = 'button';
		lock.value = 'L';
		edit = creaElemIn('input', ctrl);			//编辑按钮
		edit.type = 'button';
		edit.value = 'E';
		edit.title = _ti.edit[_L];
		word_inputs_list = creaElemIn('div', td2);	//高亮按钮外框容器
		word_inputs_list.id = PRE + '_word_inputs_list';
		word_inputs_list.className = PRE + '_inputs';
		var maplock = creaElemIn('input', td3);		//分布图按钮
		maplock.type = 'button';
		maplock.value = '▲';
		maplock.title = _ti.mapl[_L];

		// add interactivity
		edit.addEventListener('click', command_edit, false);
		off.addEventListener('click', command_off, false);
		close_button.addEventListener('click', command_close, false);
		editor.addEventListener('submit', function (e) {
			command_edit();
			e.preventDefault();
			e.stopPropagation();
		}, false);
		if (gm_ok) {
			lock.title = _ti.lock[_L];
			lock.className = (keyword_locked) ? '_active' : '';
			lock.addEventListener('click', function () {
				if (aside.className == 'ewh_edit') return;
				if (keyword_locked) {
					lock.className = '';
					lock.title = _ti.lock[_L];
					GM_setValue(ST_PRE, '');
					keyword_locked = '';
					//				lock.value = 'Lock: Off';
				} else {
					lock.className = '_active';
					lock.title = _ti.lock_a[_L] + ' ' + keyword;
					GM_setValue(ST_PRE, keyword);
					keyword_locked = keyword;
					//				lock.value = 'Lock: On';
				}
			}, false);
		} else {
			lock.title = _ti.lock_u[_L];
			lock.className = '_disable';
		}
		td0.addEventListener('dblclick', function (evt) {
			if (panel_hide) {
				aside.style.right = '0px';
				aside.className = '';
				panel_hide = false;
				this.title = _ti.td0[_L];
			} else {
				aside.style.right = (14 - aside.offsetWidth) + 'px';
				aside.className = 'ewh_hide';
				panel_hide = true;
				this.title = _ti.td0_a[_L];
			}
		}, false);
		maplock.addEventListener('click', function () {
			if (!nav.className) {
				nav.className = '_locked';
				this.value = '▼';
				this.className = '_active';
			}
			else {
				nav.className = '';
				this.value = '▲';
				this.className = '';
			}
		}, false);

		// enable drag
		var drag = endrag(aside, { x: 'right', y: 'bottom' }, td0);	// 在td0上拖动鼠标对aside面板的right和bottom属性进行拖动联动(实现可拖动功能)
		drag.hook('__drag_begin', function (e) {	// 对drag对象的hook方法进行输入:如果面板是编辑或隐藏状态,则不允许拖动:可拖动的话不显示分布图
			if (this.target && ((this.target.className === 'ewh_edit') || (this.target.className === 'ewh_hide'))) {
				return false;
			} else {
				this.target.classList.add('ewh_dragging');
			}
		});
		drag.hook('__drag_end', function (e) {	// 对drag对象的hook方法进行输入:如果面板是保存位置状态,结束拖动时储存位置
			if (CFG.save_panel_pos && this.target.style.right && gm_ok) {
				var h_pos = 'right:' + this.target.style.right + ';';
				var v_pos = 'bottom:' + this.target.style.bottom + ';';
				GM_setValue(PO_PRE, h_pos + '|' + v_pos);
			}
			this.target.classList.remove('ewh_dragging');
		});

		// build map
		nav = document.createElement('nav');
		aside.insertBefore(nav, aside.firstChild);
		canvas = creaElemIn('canvas', nav);
		canvas.className = 'backport';
		cw = creaElemIn('canvas', nav);
		cw.className = 'viewport';
		var c2 = c2context = canvas.getContext('2d');

		// /+drag codes by grea
		// scrolling per events
		var perf = 2, perfic = 0;
		var moveTo = function (evt) {
			if (perfic++ % perf || !window.drgg) return;
			var x = (evt.offsetX || evt.layerX) / ratio - root.clientWidth / 2;
			var y = (evt.offsetY || evt.layerY) / ratio - root.clientHeight / 2;
			window.scrollTo(x, y);
		}
		canvas.addEventListener('mousedown', function (e) { window.drgg = true; moveTo(e); }, false);
		canvas.addEventListener('mousemove', function (e) { moveTo(e); }, false);
		canvas.addEventListener('mouseup', function (e) { window.drgg = false; moveTo(e); }, false);
		canvas.addEventListener('mouseout', function (e) { window.drgg = false; moveTo(e); }, false);
		// +/codes end

		// add AutoPager page change detector
		if (CFG.ap_option) {
			var pagef = 5, pagefic = 0;
			var docHeight = document.body.scrollHeight, pageChanged;
			var checkpage = function () {
				if ((pagefic++ % pagef == 0) && (document.body.scrollHeight > docHeight)) {
					switch (CFG.ap_option) {
						case 1:
							after_load();
							break;
						case 2:
							resetup();
							break;
					}
					docHeight = document.body.scrollHeight;
				}
			}
		}

		// sync with map & check page
		window.addEventListener('scroll', function () {
			var x = window.scrollX * ratio;
			var y = window.scrollY * ratio;
			cw.style.bottom = (canvas.height - cw.height - y) + 'px';
			cw.style.right = (canvas.width - cw.width - x + 6) + 'px';
			if (CFG.ap_option && (window.name != PRE + '::CLOSED::') && !onpause) checkpage();
		}, false);

		// go to highlight
		highlight(document.body);
		word_lists = create_inputlist(words);
		layers = xp_all.get();
		draw_wordmap();
		if (!CFG.ap_option) init_autopager();
		if (panel_hide && !init) {
			aside.style.right = (14 - aside.offsetWidth) + 'px';
			aside.className = 'ewh_hide';
			td0.title = _ti.td0_a[_L];
		}
	}

	// 清除指定或所有高亮
	function restore_words(layer_s) {
		(layer_s || xp_all.get()).forEach(function (layer, i) {
			var parent = layer.parentNode;
			while (layer.firstChild) {
				parent.insertBefore(layer.firstChild, layer);
			}
			parent.removeChild(layer);
			parent.normalize();	//文本节点整合
		});
	}

	// 绘制分布图
	function draw_wordmap() {
		var c2 = c2context;
		var _height = root.clientHeight * 0.95;
		if (_height > CanvasWidth * (root.scrollHeight / root.scrollWidth)) {
			canvas.width = CanvasWidth;
			canvas.height = CanvasWidth * (root.scrollHeight / root.scrollWidth);
			ratio = CanvasWidth / root.scrollWidth;
		} else {
			canvas.height = _height;
			canvas.width = _height * (root.scrollWidth / root.scrollHeight);
			ratio = _height / root.scrollHeight;
		}
		cw.width = root.clientWidth * ratio;
		cw.height = root.clientHeight * ratio;
		cw.style.bottom = (canvas.height - cw.height - window.pageYOffset * ratio) + 'px';
		cw.style.right = (canvas.width - cw.width + 6) + 'px';
		c2.clearRect(0, 0, window.innerWidth, window.innerHeight);
		c2.beginPath();
		word_lists.forEach(function (item, i) {
			if (words[i].ison) {
				c2.fillStyle = STYLE_COLOR[i % 10];
				item.get_w().forEach(function (ly, j) {
					var recs = ly.getClientRects();
					for (var i = 0, l = recs.length; i < l; ++i) {
						var rec = recs[i];
						var x = Math.max(ratio * (root.scrollLeft + rec.left), 2);
						var y = Math.max(ratio * (root.scrollTop + rec.top), 2);
						var width = Math.max(ratio * (rec.width || (rec.right - rec.left)), 2);
						var height = Math.max(ratio * (rec.height || (rec.bottom - rec.top)), 2);
						c2.fillRect(x, y, width, height);
					}
				});
			}
		});
		c2.fill();
	}

	// 添加新的关键词高亮及相关
	function add_word(word) {
		var word_tmp = init_words(word);
		var new_len = 0;
		for (let i = 0; i < word_tmp.length; i++) {			// 检查每个新词
			var isfound;
			for (let j = 0; j < words.length; j++) {		// 遍历旧词数组
				if (words[j].text == word_tmp[i].text) {	// 重复的词仅吸收启用属性
					words[j].ison = words[j].ison || word_tmp[i].ison;
					isfound = true;
					break;
				}
			}
			if (!isfound) {									// 旧词数组中无,则添加
				words.push(word_tmp[i]);
				new_len += 1;
			}
		}
		if (CFG.sort_keywords) {							// 如果排序关键词,则重新高亮全部
			words.sort((a, b) => {
				return b.text.length - a.text.length;
			});
			resetup();
		} else {											// 否则高亮new_len个新词
			let old_len = words.length - new_len;			// 旧词数量
			let new_wds = words.slice(old_len);				// 新词(对象)数组
			highlight(document.body, {						// 对新词,从旧词数为起点进行高亮
				words: new_wds,
				index: old_len
			});
			word_lists.push.apply(word_lists, create_inputlist(new_wds, old_len));	// 同上添加到word_lists中
			layers = xp_all.get();
			draw_wordmap();
		}
	}

	// 重启高亮:
	function resetup() {
		//if (!setuped) {setup(); return;}
		restore_words();		//清除原有高亮
		word_lists.forEach(function (item) { item.item.parentNode.removeChild(item.item); });	//清除已有高亮按钮
		highlight(document.body);	//按现有 words 进行高亮
		layers = xp_all.get();		//提取高亮
		word_lists = create_inputlist(words);	//重新生成高亮按钮
		draw_wordmap();				//重绘分布图
	}

	// 获取可见父级元素
	function getVisParent(elem) {
		var pos = elem.getBoundingClientRect(), pelem;
		if (pos.top == 0 && pos.width == 0 && pos.height == 0) {
			elem = elem.parentNode;
			pelem = getVisParent(elem);
		} else {
			pelem = elem;
		}
		return pelem;
	}
	// 滚动页面到目标元素
	function move(node) {
		if (!node) return;
		var _em_bar;
		var vnode = getVisParent(node);
		if (node.getBoundingClientRect) {
			var pos = vnode.getBoundingClientRect();	// 获取元素可见父级的位置对象(相对窗口显示区域)
			var pos_t = pos.top;
			var scl_y = window.scrollY;
			var node_h = node.offsetHeight;				// 元素高度
			document.documentElement.scrollTop = document.body.scrollTop = scl_y + pos_t - window.innerHeight / 2 - node_h / 2;	// 滚动位置:元素显示顶边距(不是与页面顶边距),加页面纵位移,减半窗口内高,加元素高度
			if (CFG.show_indc_bar) {	// 如果启用指示条,则创建指示条元素并显示到指定高度
				_em_bar = creaElemIn('div', document.body);
				_em_bar.className = PRE + "_bar";
				_em_bar.setAttribute('style', 'height:' + node_h + 'px; top:' + (scl_y + pos_t) + 'px;');
			}
		} else {
			vnode.scrollIntoView();
		}
		vnode.classList.add("wordhighlight_em");			// 在classname中加上突出样式名
		setTimeout(function () {
			vnode.classList.remove("wordhighlight_em");	// 在classname中去除突出样式名
			if (_em_bar) document.body.removeChild(_em_bar);	// 如果有指示条则删除
		}, 3000);
	}

	// 新建或添加words列表到并更新word_lists关键词元素数组 ##
	function create_inputlist(ext_word, start) {	//输入:关键词对象数组,添加到的位置
		positions[0] = -1;							//不指定高亮词的高亮指针位置“归零”
		var _index = start || 0;					// 编号从给定开始,否则从零开始
		return ext_word.map(function (w, i) {		//遍历 ext_word 数组, => w 代表单个关键词对象
			var _i = i + _index;			//当前词的高亮编号;如果无 start ,则为零否则加上已有高亮词数量; _i+1 为高亮指针位置专用高亮编号
			var btn = creaElemIn('div', word_inputs_list);
			btn.className = PRE + '_item' + _i % 10;	//根据位置定颜色(最多十种,所以求余)
			var label = creaElemIn('div', btn);		//高亮按钮主体
			var check = creaElemIn('input', btn);	//高亮按钮开关

			(!CFG.sort_keywords && positions[_i + 1]) || (positions[_i + 1] = -1); //如果不排序且当前高亮编号已有则略过;否则当前高亮编号指针位置“归零”

			var xp = new $XE('descendant::highlight[@name="' + PRE + '_word' + _i + '"]', document.body); //提取当前编号关键词的所有高亮元素的对象体(使用其get方法)
			var xp_count = new $XE('count(descendant::highlight[@name="' + PRE + '_word' + _i + '"])', document.body); //对当前编号关键词的所有高亮计数的对象体(使用其get方法)
			var wheelfunction = (evt) => {	//响应鼠标滚轮事件
				evt.stopPropagation();
				evt.preventDefault();
				onpause = true;
				clearTimeout(pausetimer);
				pausetimer = setTimeout(() => {
					onpause = false;
				}, 1000);
				var layers = xp.get();
				var ct = (-evt.deltaY || -evt.detail);
				ct < 0 ? next(_i + 1, layers) : prev(_i + 1, layers);
				//return false;
			};
			// https://stackoverflow.com/a/32215631/2755602
			var wheelEvt = "onwheel" in document.createElement("div") ? "wheel" : (document.onmousewheel !== undefined ? "mousewheel" : "DOMMouseScroll");	//compatibility fix for Chrome-core browsers

			label.className = PRE + '_label' + _i % 10;
			label.id = ID_PRE + '_label' + _i;
			label.title = _ti.kwL[_L];
			label.textContent = w.text + ' (' + xp_count.get({ result_type: XPathResult.NUMBER_TYPE }).numberValue + ')';
			label.addEventListener(wheelEvt, (evt) => {			//在高亮按钮上滚动滚轮
				var _j = parseInt(evt.target.id.replace(ID_PRE + '_label', ''));
				if (word_lists[_j].check.checked) {				//如果相应开关开着则响应
					wheelfunction(evt);
				}
			}, false);
			label.addEventListener('click', function (evt) {	//左键点击高亮按钮
				evt.preventDefault();
				var _j = parseInt(evt.target.id.replace(ID_PRE + '_label', ''));
				if (word_lists[_j].check.checked) {
					var layers = xp.get();						//获取全部高亮
					next(_j + 1, layers);						//跳到当前词的下一个高亮
				}
			}, false);
			label.addEventListener('contextmenu', function (evt) {	//右键点击高亮按钮
				evt.preventDefault(); //prevent activating context menu
				evt.stopPropagation();
				var _j = parseInt(evt.target.id.replace(ID_PRE + '_label', ''));
				if (word_lists[_j].check.checked) {
					var layers = xp.get();						//获取全部高亮
					prev(_j + 1, layers);						//跳到当前词的下一个高亮
				}
			}, false);

			check.id = ID_PRE + '_check' + _i;
			check.type = 'checkbox';
			check.checked = words[_i].ison;
			check.title = _ti.check[_L][0] + w.text + _ti.check[_L][1];
			if (!words[_i].ison) {
				btn.className += ' ewh_disable';
			}
			check.addEventListener('change', function (evt) {
				var _j = parseInt(evt.target.id.replace(ID_PRE + '_check', ''));
				words[_j].ison = check.checked;
				if (check.checked) {
					highlight(document.body, { words: [words[_j]], index: _j });
					after_load(null, _j);
					this.parentNode.className = this.parentNode.className.replace(' ewh_disable', '');
				} else {
					restore_words(xp.get());
					draw_wordmap();
					this.parentNode.className += ' ewh_disable';
				}
			}, false);

			var list = {
				item: btn,
				word: w.text,
				label: label,
				check: check,
				get_count: xp_count.get,
				get_w: xp.get
			};
			return list;
		});
	}

	// 对target拖动handle时,实现拖动的功能
	// 输入:目标元素target,拖动位置参考系opt,拖动手柄handle)
	// 输入opt:形如【{x:'right',y:'bottom'}】
	function endrag(target, opt, handle) {
		var p_x, p_y, isDragging;
		endrag = function (target, opt, handle) {
			return new endrag.proto(target, opt || {}, handle);
		}
		endrag.proto = function (target, opt, handle) {
			var self = this;
			this.target = target;
			this.style = target.style;
			this.handle = handle;
			var _x = opt.x !== 'right';
			var _y = opt.y !== 'bottom';
			this.x = _x ? 'left' : 'right';
			this.y = _y ? 'top' : 'bottom';
			p_x = this.x;
			p_y = this.y;
			this.xd = _x ? -1 : 1;
			this.yd = _y ? -1 : 1;
			this.computed_style = document.defaultView.getComputedStyle(target, '');
			this.drag_begin = function (e) { self.__drag_begin(e); };
			this.handle.addEventListener('mousedown', this.drag_begin, false); //only drag on handler
			this.dragging = function (e) { self.__dragging(e); };
			document.addEventListener('mousemove', this.dragging, false);
			this.drag_end = function (e) { self.__drag_end(e); };
			document.addEventListener('mouseup', this.drag_end, false);
		};
		endrag.proto.prototype = {
			__drag_begin: function (e) {
				if (e.button == 0) {
					var _c = this.computed_style;
					this.isDragging = isDragging = true;
					this.position = {
						_x: parseFloat(_c[this.x]),
						_y: parseFloat(_c[this.y]),
						x: e.pageX,
						y: e.pageY
					};
					e.preventDefault();
				}
			},
			__dragging: function (e) {
				if (!this.isDragging) return;
				var x = Math.floor(e.pageX), y = Math.floor(e.pageY), p = this.position;
				// prevent moving out of window
				var x_border = window.innerWidth - 40, y_border = window.innerHeight - 20;
				if (x - window.pageXOffset > x_border) x = window.pageXOffset + x_border;
				if (y - window.pageYOffset > y_border) y = window.pageYOffset + y_border;
				p._x = p._x + (p.x - x) * this.xd;
				p._y = p._y + (p.y - y) * this.yd;
				this.style[this.x] = p._x + 'px';
				this.style[this.y] = p._y + 'px';
				p.x = x;
				p.y = y;
			},
			__drag_end: function (e) {
				if (e.button == 0) {
					if (this.isDragging) {
						this.isDragging = isDragging = false;
					}
				}
			},
			hook: function (method, func) {
				if (typeof this[method] === 'function') {
					var o = this[method];
					this[method] = function () {
						if (func.apply(this, arguments) === false) {
							return;
						}
						o.apply(this, arguments);
					};
				}
			}
		};
		return endrag(target, opt, handle);
	}

	// 从设置中加载锁定关键词
	function load_keyword() {
		if (keyword_locked) {
			keyword = keyword_locked;
			prep_keyword();
			return true;
		} else {
			return false;
		}
	}

	// 获取自动高亮的关键词:通过各获取过程得到keyword文本,转递给prep_keyword()生成words关键词列表
	function init_keyword() {
		if (CFG.no_auto_hili == 1) return false;	// 如果不自动高亮,直接退出
		var name = window.name;
		if (CFG.no_auto_hili !== 0 || name == (PRE + '::CLOSED::')) {	// 如果不搜索高亮或本窗口已清理高亮,则不再继承高亮
			var _no_refer = true;
		}

		if (CFG.no_auto_hili != 3) init_KW_UA(); 				//l(101,keyword);	// 如果允许搜索网站高亮,从搜索网站获取
		if (!keyword) init_KW_IH(); 							//l(102,keyword);	// 如果上一步找不到,则进行继承高亮
		if (!_no_refer && !keyword) init_KW_RF();				//l(103,keyword);	// 如果继承高亮了还找不到,则从页面来源获取
		if (!_no_refer && !keyword) init_KW_HS();				//l(104,keyword);	// 如果上一步依然找不到,则历史搜索高亮获取
		if (CFG.no_auto_hili != 3 && !keyword) init_KW_QA();	//l(105,keyword);	// 如果允许搜索网站高亮且还是找不到,则从搜索框获取(避免高亮了搜索框默认内容)

		keyword = trim(keyword);	// 清除前后杂物

		if (keyword) {
			window.name = PRE + '::' + encodeURIComponent(keyword);	// 在窗口内名中加入关键词,用于继承高亮
			prep_keyword();//l(104,keyword);	// 生成words列表
			return true;
		} else {//l(105,'false');
			return false;
		}
	}

	// 将目标链接加入histore
	function addToHistore(target) {
		var new_histore = {
			url: target.href,
			kw: keyword,
			title: target.textContent,
			time: new Date().valueOf()
		};
		keyword_histore.push(new_histore);
		GM_setValue(HS_PRE, JSON.stringify(keyword_histore));
	}

	// 找到目标相关的链接
	function getTargetLink(evt) {
		var et = evt.target, dt = document.activeElement;
		if (et.tagName == "A" && !!et.href) {
			return et;
		} else if (!!dt && dt.tagName == "A" && !!dt.href) {
			return dt;
		} else {
			for (let l = 0; l < 3; l++) {
				et = et.parentNode;
				if (et.tagName == "A" && !!et.href) {
					return et;
				}
			}
			return false;
		}
	}

	// 从已知特征的搜索网站网址中获取关键词(一般搜索结果页面内高亮)
	function init_KW_UA() {		//for Search Results
		var host = location.host, h = document.location.href, e = -1;
		for (let i = 0; i < urlArr.length; i++) {
			if (host.indexOf(urlArr[i][2]) != -1 && h.indexOf(urlArr[i][1]) != -1) {
				e = i;
				break;
			}
		}
		if (e >= 0) {
			keyword = get_KW_from_URL(h, urlArr[e]);//l(keyword);
			if (CFG.no_auto_hili == 0) {				// 如果允许搜索结果再打开网页高亮,则将被打开的搜索链接记录
				document.addEventListener('mousedown', (evt) => {
					var target = getTargetLink(evt);
					if (!!target) {
						addToHistore(target);
					}
				});
				document.addEventListener('keyup', (evt) => {
					if (evt.code === 13) {
						var target = getTargetLink(evt);
						if (!!target) {
							addToHistore(target);
						}
					}
				});
			}
		}
	}

	// 从已知id的搜索输入框中获取关键词(其他搜索结果页面内高亮)
	function init_KW_QA() {	//for other search result pages
		var srul = location.href;
		for (var z = 0; z < queryArr.length; z++) {
			var iq = document.getElementById(queryArr[z][0]);
			if (!!iq && iq.tagName == "INPUT" && srul.indexOf(queryArr[z][1]) > -1) {
				keyword = clean(iq.value);
				if (CFG.no_auto_hili == 0) {				// 如果允许搜索结果再打开网页高亮,则将被打开的搜索链接记录
					document.addEventListener('mousedown', (evt) => {
						var target = getTargetLink(evt);
						if (!!target) {
							addToHistore(target);
						}
					});
					document.addEventListener('keyup', (evt) => {
						if (evt.code === 13) {
							var target = getTargetLink(evt);
							if (!!target) {
								addToHistore(target);
							}
						}
					});
				}
				break;
			}
		}
	}

	// 从referer(页面打开来源,通常是点开的链接所在的页面url;但若页面有防跟踪机制不给出正确referer的话这功能无法正常运作)获取关键词(搜索结果跳转高亮):输出keyword文本
	function init_KW_RF() {		//for Pages from Results
		var host = location.host, ref = document.referrer, e = -1;
		for (let i = 0; i < urlArr.length; i++) {
			if (CFG.no_auto_hili == 3 && host.indexOf(urlArr[i][2]) != -1) return;
			if (ref.indexOf(urlArr[i][2]) != -1 && ref.indexOf(urlArr[i][1]) != -1) e = i;
		}
		if (e >= 0) {
			keyword = get_KW_from_URL(ref, urlArr[e]);//l(keyword);
		}
	}

	// 从窗口(标签页)内名(window.name)中获取关键词(继承高亮):输出keyword文本
	function init_KW_IH() { 	//look for keywords in name
		if (window.name.indexOf(PRE) == 0 && window.name != (PRE + '::CLOSED::')) {
			keyword = (new RegExp(PRE + '\\d*::(.+)').exec(decodeURIComponent(window.name))[1]) || '';//l(102.1,keyword);
		}//l(102.2,keyword);
	}

	// 从url中提取搜索关键词(针对Google、百度作专门处理),输入url和对应搜索引擎信息数组,输出关键词文本
	function get_KW_from_URL(sUrl, sArr) {
		if (sArr[0] == 'Google' && !!getUriParam(sUrl, 'url')) sUrl = sUrl.replace(/%25/g, '%');	// if it is from Google's redirect link
		var kwtmp, KW;
		KW = getUriParam(sUrl, sArr[1]);// l(sArr[1] + ", " + KW);
		if (!!KW) KW = KW.replace(/\+/g, ' ');//l('gku:',KW);
		if (sArr[0] == 'Baidu' && document.characterSet !== "UTF-8") {
			kwtmp = urlDecode(KW);	// 如果是百度且非utf-8  //2017-5-27百度似乎已经主用utf-8  //20170922 helloBibo 增加了“&& urlsearch.indexOf('ie=UTF-8') == -1” //20230505百度真的默认utf-8,修改识别方式
		} else {
			kwtmp = decodeURIComponent(KW);
		}
		return clean(kwtmp);
	}

	// 从url中提取名为【param】的参数的值;提取不到返回空字符
	function getUriParam(surl, param) {
		var result = surl.match(new RegExp("(\\?|&)" + param + "(\\[\\])?=([^&]*)"));
		return result ? result[3] : '';
	}

	// 从历史搜索高亮中获取关键词,输出到keyword
	function init_KW_HS() {
		if (CFG.no_auto_hili == 0) {
			for (let i = keyword_histore.length - 1; i >= 0; i--) {	// 从最近历史开始查找
				const histore = keyword_histore[i];
				const url = location.href;
				const title = document.title;
				// 最好是网址匹配,有跳转的话就对比去除空格的网页标题前四十个字符
				if (url == histore.url) {
					keyword = histore.kw;
					break;
				} else if (title.length > 0 && title.replace(/\s/g, '').slice(0, 40) == histore.title.replace(/\s/g, '').slice(0, 40)) {
					keyword = histore.kw;
					break;
				}
			}
		}
	}

	// 将给定关键词文本整理成关键词列表(数组)
	function prep_keyword() {
		words = init_words(keyword);
	}

	// 去除回行、前后空格、【句点加号】组合
	function trim(str) {
		return str.replace(/[\n\r]+/g, ' ').replace(/^\s+|\s+$/g, '').replace(/\.+\s|\.+$/g, '');
	}

	// 清除搜索关键词中的修饰功能部分,例如站内、标题搜索,逻辑运算词等
	function clean(str) {
		return str.replace(/(?:(?:\s?(?:site|(?:all)?in(?:url|title|anchor|text)):|(?:\s|^)-)\S*|(\s)(?:OR|AND)\s|[()])/g, '$1');
	}

	// 在中文和英文间增加空格
	function splitCnEnWords(str) {
		return str.replace(
			/([^\s\w\p{P}])([\w\p{P}]+)/gu,			// 中文接英文
			(match, p1, p2) => {
				return /[a-zA-Z0-9]/.test(p2) ? p1 + ' ' + p2 : match;
			}
		)
			.replace(
				/([\w\p{P}]+)([^\s\w\p{P}])/gu,			// 英文接中文
				(match, p1, p2) => {
					return /[a-zA-Z0-9]/.test(p1) ? p1 + ' ' + p2 : match;
				}
			);
	}

	// 输出不重复元素的数组
	function uniq(arr) {
		return arr.reduce((output, current) => {
			return output.includes(current) ? output : output.concat(current);
		}, []);
	}

	// arr.sort 使用,比较前后两字符串的长度,输出差值
	function word_length_Comp(a, b) {
		return (b.length - a.length);
	}

	// 将自动获取的关键词转化为关键词列表(对象)
	function init_words(word) {
		var erg = word.match(new RegExp("^ ?/(.+)/([gim]+)?$"));	// 判别是否正则表达式
		var word_op = [], word_s;	// 输出关键词数组、临时数组
		if (erg) {
			var ew = erg[1], flag = erg[2] || '';	// 提取出正则表达式的表达式部分和标记部分
			word_op = [{
				text: ew,
				ison: true,
				exp: new RegExp('(?!<##@)(' + ew + ')(?!%##)', flag),
				toString: function () { return ew; }
			}];	//输出单元素数组:正则对象
		} else if (word) {	// 如果非正则且有内容
			var ret = [];		// 限定词数组
			if (CFG.split_cn_en_words) {
				word = splitCnEnWords(word);
			}
			var eword = word.replace(/"([^"]+)"/g, function ($0, $1) { $1 && ret.push($1); return ''; });	// 提取限定词(用半角双引号括起来的部分)并从word中去除,单独加入限定词数组
			word_s = eword.split(/[\+\s:\|#]/).filter(function (w) { return !!w; }).concat(ret);	// 切分关键词,去除非内容切分形成数组,并在数组后加上限定词数组
			word_s = uniq(word_s);
			if (CFG.sort_keywords) word_s = word_s.sort(word_length_Comp);	// ###如果启用了关键词排序,则按长度排序;关键词列表去重
			for (const w of word_s) {
				let w_op = {				// 初始化输出数组的元素:对象
					text: w,				// text-关键词文本
					ison: true				// ison-关键词高亮开关
				};
				// 如果启用了不高亮短词,则对匹配关键词关闭高亮开关
				if ((CFG.off_short_words == 1 && /^[a-z0-9]$/i.test(w)) || (CFG.off_short_words == 2 && /^[a-z0-9]{2}$/i.test(w))) {
					w_op.ison = false;
				}
				// 如果有不高亮词表,对匹配关键词关闭高亮开关,匹配小写和首字母大写
				if (CFG.skip_word_list.length) {
					var swl = CFG.skip_word_list.split(' ');
					for (var s of swl) {
						if (w.replace(w[0], w[0].toLowerCase()) == s) w_op.ison = false;
					}
				}
				word_op.push(w_op);
			}
		}
		return word_op;
	}

	// 移动到下一个高亮的位置并提示
	function next(index, _layers) {	// 输入:当前关键词index(序号),当前关键词layers(高亮元素)
		_layers || (_layers = (layers || (layers = xp_all.get())));	// 如果有输入则使用,否则以当前全局layers或者即时获取来使用
		index || (index = 0);	// 如果有输入则使用,否则为不指定关键词
		move(_layers[++positions[index]] || (positions[index] = 0, _layers[positions[index]]));	// 移动到layers下一个高亮位置;如果没有下一个位置则重置为零并移动过去
		position_box(index);	// 显示指针位置提示
	}

	// 移动到上一个高亮的位置并提示
	function prev(index, _layers) {
		_layers || (_layers = (layers || (layers = xp_all.get())));
		index || (index = 0);
		move(_layers[--positions[index]] || (positions[index] = _layers.length - 1, _layers[positions[index]]));
		position_box(index);
	}

	// 当前高亮指针位置提示:在面板或当前正在查找的高亮关键词按钮上方,显示当前查找到的高亮的指针位置
	function position_box(index) {
		var tip_style = `
			background:white; color:black; border:1px solid black; box-shadow:0 2px 4px #444444;
			 position:absolute; left:30px; z-index:1025; height:20px; top:-20px; width:40px;
			font-size:16px !important; text-align:center;
		`;
		if (!posi_tip) {	// 如果提示框不存在则新建
			posi_tip = creaElemIn('div', section);
			posi_tip.style = tip_style;
		}
		clearTimeout(posi_tip_timer);	// 提示框计时重置
		posi_tip.style.display = 'block';	// 显示
		posi_tip.innerHTML = positions[index] + 1;	// 提示框内容为指针位置(index为关键词(按钮)序号,index=0即不指定关键词)
		if (index == 0) {
			posi_tip.style.left = '30px';
		} else {
			posi_tip.style.left = (word_lists[index - 1].item.offsetLeft + (word_lists[index - 1].item.clientWidth - 40) / 2) + 'px';
		}
		posi_tip_timer = setTimeout(function () { posi_tip.style.display = 'none'; }, 3000);	// 三秒后隐藏提示框
	}

	// 决定击键处理方式:如果有Minibuffer则调用,否则直接由keydown触发按键识别
	function init_keyboard() {
		/* if (isOpera) {
		} else if (window.Minibuffer) {
			init_minibuffer();
			return;
		} else {
			window.addEventListener('GM_MinibufferLoaded', init_minibuffer, false);
		} */
		/* if (!window.chromium && false) {	//实际上不执行第一条,只执行keydown
			document.addEventListener('keypress', keyhandler, false);
		} else { */
		document.addEventListener('keydown', keyhandler, false);
		// }
	}

	// minibuffer处理:跟keyhandler一样
	function init_minibuffer() {
		if (window.Minibuffer) {
			document.removeEventListener('keypress', keyhandler, false);
		}
		var mini = window.Minibuffer;
		mini.addCommand({
			name: 'keyword-search',
			command: function (stdin) {
				keyword += ' ' + this.args.join(' ');
				keyword = trim(keyword);
				prep_keyword();
				if (setuped) resetup();
				else setup();
				return stdin;
			}
		});
		mini.addShortcutkey({
			key: KEY_NEXT,
			command: next,
			description: 'emphasis next keyword'
		});
		mini.addShortcutkey({
			key: KEY_PREV,
			command: prev,
			description: 'emphasis prev keyword'
		});
		mini.addShortcutkey({
			key: KEY_SEARCH,
			command: function (e) {
				instant_search();
			},
			description: 'emphasis prev keyword'
		});
	}

	// 按键evt.which转换为键名
	function get_key(evt) {
		var key = String.fromCharCode(evt.which),
			ctrl = evt.ctrlKey ? 'C-' : '',
			meta = (evt.metaKey || evt.altKey) ? 'M-' : '';
		if (!evt.shiftKey) {
			key = key.toLowerCase();
		}
		if (evt.ctrlKey && evt.which >= 186 && evt.which < 192) {
			key = String.fromCharCode(evt.which - 144);
		}
		if (evt.key && evt.key !== 'Enter' && !/^U\+/.test(evt.key)) {
			key = evt.key;
		} else if (evt.which !== evt.keyCode) {
			key = keyCodeStr[evt.keyCode] || whichStr[evt.which] || key;
		} else if (evt.which <= 32) {
			key = keyCodeStr[evt.keyCode] || whichStr[evt.which];
		}
		return ctrl + meta + key;
	}

	// 按键识别:根据键名调用相应过程
	function keyhandler(evt) {
		//console.log(evt);
		var fullkey = get_key(evt);
		//console.log(fullkey);
		if (fullkey == KEY_SEARCH) {
			evt.preventDefault();
			evt.stopPropagation();
			instant_search((evt.target.id == PRE + '_textinput') ? true : false, evt.target);
		} else if (/^(?:input|textarea)$/i.test(evt.target.localName)) {
			return;
		} else if (setuped) {
			switch (fullkey) {
				case KEY_NEXT:
					next();
					break;
				case KEY_PREV:
					prev();
					break;
				case KEY_OFF:
					command_off();
					break;
				case KEY_CLOSE:
					command_close();
					break;
				case KEY_EDIT:
					command_edit();
					break;
				case KEY_REFRESH:
					resetup();
					break;
			}
		}
	}

	// X按钮:清理高亮并关闭面板
	function command_close() {
		if (!!aside.parentNode) aside.parentNode.removeChild(aside);
		if (document.getElementById(PRE + '_textinputbox')) document.body.removeChild(inputBOX);
		instant_search.input = null;
		restore_words();
		if (!!main_sheet) main_sheet = removeCnode(main_sheet);
		if (!!move_sheet) move_sheet = removeCnode(move_sheet);
		if (!!inst_sheet) inst_sheet = removeCnode(inst_sheet);
		if (!!config_sheet) config_sheet = removeCnode(config_sheet);
		window.name = PRE + '::CLOSED::';
		word_lists = [];
		// _words = [];
		setuped = false;
		highlight_reset();
	}

	function removeCnode(sheet) {
		if (!!sheet.parentNode) {
			sheet.parentNode.removeChild(sheet);
			return false;
		}
	}

	// O按钮:切换全部高亮状态
	function command_off() {
		if (aside.className == 'ewh_edit') return;

		if (!highlight_off) {
			restore_words();
			for (var i in word_lists) {
				word_lists[i].check.checked = false;
				word_lists[i].item.className += ' ewh_disable'
			}
			off.className = '_active'
			highlight_off = true;
		} else {
			word_lists = [];
			word_inputs_list.innerHTML = '';
			resetup();
			for (i in word_lists) {
				word_lists[i].check.checked = true;
				word_lists[i].item.className = word_lists[i].item.className.replace(' ewh_disable', '');
			}
			off.className = '';
			highlight_off = false;
		}
		draw_wordmap();
	}

	// E按钮:切换编辑状态(显隐关键词编辑框/关键词列表)
	function command_edit() {
		if (aside.className == 'ewh_edit') {
			//			aside.style.width = 'auto';
			//			edit.value = 'Edit';
			edit.className = '';
			edit.title = _ti.edit[_L];
			if (gm_ok) lock.className = lock.className.replace(' _disable', '');
			off.className = '';
			highlight_off = false;
			aside.className = '';
			keyword = trim(text_input.value);
			prep_keyword();
			window.name = PRE + '::' + encodeURIComponent(keyword);
			resetup();
		} else {
			var _aside_w = aside.offsetWidth;
			//			edit.value = 'Set';
			edit.className = '_active';
			edit.title = _ti.edit_a[_L];
			if (gm_ok) lock.className += ' _disable';
			off.className += ' _disable';
			aside.className = 'ewh_edit';
			text_input.value = keyword;
			text_input.focus();
			var t_width = (Math.max(320, _aside_w) - 135) + 'px';
			text_input.style = 'width:' + t_width + ';height:22px; margin:2px 0 !important; font-size:15px !important;';
			//			aside.style.width = Math.max(320,_aside_w) +'px';
		}
	}

	// 激活关键词输入框,并进行即时查找当前输入的单个关键词
	// 输入_r:在关键词输入框中再触发(true)的话关闭关键词输入框(用于快捷键激活/关闭)
	function instant_search(_r, e_target) {
		var input_cancel = function () {
			if (refocus) {
				var top = document.body.scrollTop || document.documentElement.scrollTop;
				var left = document.body.scrollLeft || document.documentElement.scrollLeft;
			}
			document.body.removeChild(inputBOX);
			instant_search.input = null;
			if (refocus && e_target) {
				e_target.focus();
				document.body.scrollTop = document.documentElement.scrollTop = top;
				document.body.scrollLeft = document.documentElement.scrollLeft = left;
			}
		};
		if (_r) {
			input_cancel();
			return;
		}
		var input_comfirm = function (text, toAdd) {
			if (!text && setuped) return;
			if (toAdd) {
				keyword = trim(((setuped) ? keyword : '') + ' ' + text);
				if (setuped) {
					add_word(text);
				} else {
					prep_keyword();
					setup(true);
				}
			} else {
				keyword = trim(text);
				prep_keyword();
				if (setuped) {
					resetup();
				}
				else setup(true);
			}
			window.name = PRE + '::' + encodeURIComponent(keyword);
			if (instant_search.input) { instant_search.input.select(); }
		};

		var selectedText;
		if (/^(?:input)$/i.test(e_target.localName)) {	// 在input中按快捷键则提取input中文本
			selectedText = e_target.value;
		} else {										// 否则提取选中文本
			selectedText = getSelection().toString();
		}
		if (instant && selectedText) {
			input_comfirm(selectedText, true);
			return;
		}
		if (instant_search.input) {
			(instant_search.input.value = selectedText) && instant_search.input.select();
			// instant_search.input.focus();
			return;
		}

		if (!inst_sheet) {
			inst_sheet = addCSS([
				'#' + PRE + '_textinputbox{border:1px solid #333; margin:0px; padding:0px; position:fixed; bottom:34px; left:5%; z-index:60000; background:#fff; box-shadow: #333 3px 3px 2px; color:#000; color:#000; font-weight:bold; max-width:70%; font-size:16pt; height:auto; opacity:0.95;}',
				'#' + PRE + '_textinputbox input[type=button]{padding:0;  display:inline; margin:0.1em 0.2em; width:1.4em; height:1.4em; background:' + but_c + '; border:1px solid #996666; cursor:pointer; font-size:12pt; color:black;}',
				'#' + PRE + '_textinputbox label{padding:0; display:inline;}',
				'#' + PRE + '_textinputbox,#' + PRE + '_textinputbox *{font-family: Arial;}',
				'#' + PRE + '_textinput{border:none; margin:0 0 0 5px; padding:0px; max-width:80%; height:100%; background:#fff; color:#000; font-weight:bold; font-size:inherit;}'
			].join('\n'));
		}
		if (!move_sheet) addmovesheet();

		inputBOX = creaElemIn('div', document.body);
		inputBOX.id = PRE + '_textinputbox';
		inputBOX.setAttribute('class', PRE + '_inbox');
		var inputCHECK = creaElemIn('input', inputBOX);
		inputCHECK.type = 'checkbox';
		inputCHECK.checked = addKeyword;
		inputCHECK.title = _ti.ad_nw[_L];
		var inputCHECKlabel = creaElemIn('label', inputBOX);
		inputCHECKlabel.textContent = (addKeyword) ? 'Add' : 'New';
		inputCHECKlabel.title = inputCHECK.title;
		var i_C_id = inputCHECK.id = 'Add_Check';
		inputCHECKlabel.htmlFor = i_C_id;
		var input = instant_search.input = creaElemIn('input', inputBOX);
		input.id = PRE + '_textinput';
		var go_button = creaElemIn('input', inputBOX);
		go_button.type = 'button';
		go_button.value = '\u2192';
		go_button.title = _ti.subm[_L];
		var close_button = creaElemIn('input', inputBOX);
		close_button.type = 'button';
		close_button.value = 'X';
		close_button.title = _ti.clos[_L];

		inputCHECK.addEventListener('change', function () {
			inputCHECKlabel.textContent = (this.checked) ? 'Add' : 'New';
			addKeyword = this.checked;
			input.focus();
		}, false);
		go_button.addEventListener('click', function () {
			input_comfirm(input.value, addKeyword);
		}, false);
		close_button.addEventListener('click', input_cancel, false);
		input.addEventListener('keydown', function (evt) {
			var fullkey = get_key(evt);
			l(fullkey);
			switch (fullkey) {
				case 'RET':
					evt.preventDefault();
					evt.stopPropagation();
					input_comfirm(this.value, addKeyword);
					break;
				case 'Escape':
					input_cancel();
			}
		}, false);
		input.addEventListener('input', function (e) {			// 在输入同时查找输入内容
			var text = input.value.toUpperCase();
			if (!/\S/.test(text) || text.length < 2) return;	// 如果文本为非字符或单字符则忽略
			var x = 'descendant::text()[contains(translate(self::text(),"abcdefghijklmnopqrstuvwxyz","ABCDEFGHIJKLMNOPQRSTUVWXYZ"),' + escapeXPathExpr(text) + ') and not(ancestor::textarea) and not(ancestor::script) and not(ancestor::style)]/parent::*';
			var node = document.evaluate(x, document.body, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
			if (node) move(node);
		}, false);
		if (selectedText.toString()) {
			input.value = selectedText.toString();
			input.select();
		} else if (keyword && !setuped) {
			input.value = keyword;
			input.select();
		} else input.focus();
	}

	// 创建设置题目工具
	function addconfigs(setting, dest, prefix, configstore) {
		// 参数 settings :包含【id,title,type,choices】的对象,给定设置的题目
		// 		dest :设置题目插入的容器节点
		// 		prefix :设置题目节点id的前缀字符串
		// 		configstore :储存设置选项数据的对象
		var dbox = {	//设置项构造器
			addsetting: function (setting, basenode, prefix, config) {
				var setbox = creaElemIn('div', basenode);
				setbox.className = '_setbox';
				creaElemIn('br', setbox);
				if (setting.title.length !== 0) {
					var titlebox = this.addtextnode(setting.title, setbox);
					titlebox.className = '_titlebox';
				}
				var ind;
				switch (setting.type) {
					case 'fill':	//填空
						var inputbox = creaElemIn('input', setbox);
						inputbox.type = 'text';
						inputbox.style = 'width: 90%; height: 2em;';
						inputbox.id = prefix + setting.id;
						inputbox.value = config[setting.id];
						inputbox.addEventListener('blur', () => {
							config[this.id.replace(prefix, '')] = this.value;
						});
						break;
					case 'check':
						if (setting.choices.length == 1) {	//单选单
							var checknode = this.addcheckbox(prefix + setting.id, setting.choices[0], setbox);
							checknode.name = prefix + setting.id;
							checknode.checked = !!(config[setting.id] == 1);
							checknode.addEventListener('change', (event) => {
								config[event.target.id.replace(prefix, '')] = (event.target.checked) ? 1 : 0;
							});
						} else if (setting.choices.length > 1) {	//多选单
							var radionodes = [];
							setting.choices.forEach((choice, ind) => {
								radionodes[ind] = this.addradiobox(prefix + setting.id + ind, choice, setbox);
								radionodes[ind].name = prefix + setting.id;
								radionodes[ind].checked = (ind == config[setting.id]);
								radionodes[ind].addEventListener('change', (event) => {
									config[event.target.name.replace(prefix, '')] = Number(event.target.id.replace(event.target.name, ''));
								});
							});
						}
						break;
					case 'multi':
						var checknodes = [];
						setting.choices.forEach((choice, ind) => {
							checknodes[ind] = this.addcheckbox(prefix + setting.id + ind, choice, setbox);
							checknodes[ind].name = prefix + setting.id;
							checknodes[ind].checked = !!(config[setting.id][ind] == 1);
							checknodes[ind].addEventListener('change', (event) => {
								config[event.target.name.replace(prefix, '')][Number(event.target.id.replace(event.target.name, ''))] = (event.target.checked) ? 1 : 0;
							});
						});
						break;
					case 'text':	//纯文本/描述
						setting.choices.forEach((choice, ind) => {
							this.addtextnode(choice, setbox);
						});
				}
			},
			addtextnode: function (text, basenode) {
				var textnode = creaElemIn('p', basenode);
				textnode.innerHTML = text;
				return textnode;
			},
			addcheckbox: function (id, text, basenode) {
				var checknode = creaElemIn('input', basenode);
				checknode.id = id;
				checknode.type = 'checkbox';
				var checklabel = creaElemIn('label', basenode);
				checklabel.innerHTML = text;
				checklabel.htmlFor = checknode.id;
				creaElemIn('br', basenode);
				return checknode;
			},
			addradiobox: function (id, text, basenode) {
				var radionode = creaElemIn('input', basenode);
				radionode.id = id;
				radionode.type = 'radio';
				var radiolabel = creaElemIn('label', basenode);
				radiolabel.innerHTML = text;
				radiolabel.htmlFor = radionode.id;
				creaElemIn('br', basenode);
				return radionode;
			},
		};
		dbox.addsetting(setting, dest, prefix, configstore);
	}

	// 构建设置对话框并且建立存取设置机制
	function config_box() {
		var cancconfig = function () {
			document.body.removeChild(confBOXBack);
			CFG = JSON.parse(GM_getValue(CO_PRE));	//从GM储存中恢复原有设置(放弃更改)
		}
		var saveconfig = function () {
			document.body.removeChild(confBOXBack);
			GM_setValue(CO_PRE, JSON.stringify(CFG));	//将设置存入GM储存
			location.reload();
		};

		// 设置对话框构建
		var confBOXBack = creaElemIn('div', document.body);	//半透明白色背景
		confBOXBack.className = PRE + '_cb';
		var confBOX = creaElemIn('div', confBOXBack);	//设置对话框主框
		confBOX.className = PRE + '_cbox';
		var confTOP = creaElemIn('div', confBOX);	//设置对话框标题头
		var confTitle = creaElemIn('h3', confTOP);	//设置对话框标题
		confTitle.innerHTML = _di.confT[_L];
		var confBk = creaElemIn('div', confTOP);	//按钮框
		confBk.className = PRE + '_bbox';
		var confBy = creaElemIn('input', confBk);	//确定按钮
		confBy.type = 'button';
		confBy.value = _di.button_yes[_L];
		confBy.addEventListener('click', saveconfig, false);
		var confBn = creaElemIn('input', confBk);	//取消按钮
		confBn.type = 'button';
		confBn.value = _di.button_no[_L];
		confBn.addEventListener('click', cancconfig, false);
		var confSk = creaElemIn('div', confBOX);	//选项框
		confSk.className = PRE + '_cobox';

		config_setting.forEach((item, index) => {
			addconfigs(item, confSk, PRE, CFG);
		});
		if (!config_sheet) {
			config_sheet = addCSS([
				'.' + PRE + '_cb{background:#ffffffaa;position:fixed;top:0;left:0;width:100%;height:100%;text-align:center;z-index:30000;}',
				'.' + PRE + '_cbox{line-height:1.2;border:1px solid #333;border-left-width:10px;width:600px;height:90%;margin:30px auto auto auto;padding:5px;color: black !important;background: white; box-shadow: 0 0 15px 2px #b5b5b5;text-align:left;position: relative;}',
				'.' + PRE + '_cbox h3{font-weight:800;border-bottom:1px solid black;width:100%;margin:15px auto 10px auto;font-size: 15pt !important;}',
				'.' + PRE + '_bbox{width: 150px; text-align: center; position: absolute; top: 20px; right: 20px;}',
				'.' + PRE + '_bbox input{width: 56px;margin: 0 6px;}',
				'.' + PRE + '_cobox{height: 92%; overflow-y:scroll;}',
				'.' + PRE + '_cobox ._setbox{display: block; padding: 3px 0;}',
				'.' + PRE + '_cobox ._titlebox{background: #e0f5ff; padding: 3px 0;}',
				'.' + PRE + '_cobox input{color: black !important;}',
				'.' + PRE + '_cobox label{min-width: 80%;color: black !important;display:inline-block;}',
				'.' + PRE + '_cobox label:hover{background: #eeeeff;}'
			].join('\n'));
		}
	}

	// 在高亮(关键词或页面)改变后,延时重新计数高亮数和重绘分布图
	function after_load(e, _ind) {
		var cmd = function (_ind) {
			if (!_ind) {
				word_lists.forEach(function (item) {
					item.label.textContent = item.word + ' (' + item.get_count({ result_type: XPathResult.NUMBER_TYPE }).numberValue + ')';
				});
			} else {
				word_lists[_ind].label.textContent = word_lists[_ind].word + ' (' + word_lists[_ind].get_count({ result_type: XPathResult.NUMBER_TYPE }).numberValue + ')';
			}
			layers = xp_all.get();
			draw_wordmap();
			if (panel_hide) { aside.style.right = (14 - aside.offsetWidth) + 'px'; }
		}
		setTimeout(cmd, delay + 100, _ind);
	}

	// add event listener to insert / renew highlights when autopager add pages
	function init_autopager(e) {
		var page = 0, disabled = false;
		var inserted_highlight = function (e) {
			setTimeout(highlight, delay, e.target);
		};
		window.addEventListener('AutoPatchWork.DOMNodeInserted', inserted_highlight, false);
		window.addEventListener('AutoPatchWork.pageloaded', after_load, false);
		window.addEventListener('AutoPagerize_DOMNodeInserted', inserted_highlight, false);
		window.addEventListener('GM_AutoPagerizeNextPageLoaded', after_load, false);
		window.addEventListener('Super_preloaderPageLoaded', resetup, false);
		highlight_reset = function () {
			window.removeEventListener('AutoPatchWork.DOMNodeInserted', inserted_highlight, false);
			window.removeEventListener('AutoPatchWork.pageloaded', after_load, false);
			window.removeEventListener('AutoPagerize_DOMNodeInserted', inserted_highlight, false);
			window.removeEventListener('GM_AutoPagerizeNextPageLoaded', after_load, false);
			window.removeEventListener('Super_preloaderPageLoaded', resetup, false);
		}
	}

	// get an element by css selector
	function qElem(cssselector) {
		return document.querySelector(cssselector);
	}

	// get all elements by css selector
	function qaElem(cssselector) {
		return document.querySelectorAll(cssselector);
	}

	// get elements as an arry from xpath, detail ver
	function $X(exp, context, resolver, result_type) {
		context || (context = document);
		var Doc = context.ownerDocument || context;
		var result = Doc.evaluate(exp, context, resolver, result_type || XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
		if (result_type) return result;
		for (var i = 0, len = result.snapshotLength, res = new Array(len); i < len; i++) {
			res[i] = result.snapshotItem(i);
		}
		return res;
	}

	// get elements as an arry from xpath, simple ver
	function $XE(exp, context) {
		var xe = new XPathEvaluator();
		var resolver = xe.createNSResolver(document.documentElement);
		//var defaultNS = document.lookupNamespaceURI(window.opera ? '' : null);
		var defaultNS = (document.documentElement.nodeName !== 'HTML') ? context.namespaceURI : null;
		if (defaultNS) {
			var defaultPrefix = '__default__';
			if (!isChromium) {
				exp = addDefaultPrefix(exp, defaultPrefix);
			}
			var defaultResolver = resolver;
			resolver = function (prefix) {
				return (prefix == defaultPrefix) ? defaultNS : defaultResolver.lookupNamespaceURI(prefix);
			};
		}
		var ex = xe.createExpression(exp, resolver);
		this.get = function (param) {
			param || (param = {});
			var result = this.result =
				ex.evaluate(param.context || context, param.result_type || XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, this.result);
			if (param.result_type) return result;
			for (var i = 0, len = result.snapshotLength, res = new Array(len); i < len; i++) {
				res[i] = result.snapshotItem(i);
			}
			return res;
		};
	}

	// via AutoPagerize Thx! nanto_vi
	function addDefaultPrefix(xpath, prefix) {
		var tokenPattern = /([A-Za-z_\u00c0-\ufffd][\w\-.\u00b7-\ufffd]*|\*)\s*(::?|\()?|(".*?"|'.*?'|\d+(?:\.\d*)?|\.(?:\.|\d+)?|[\)\]])|(\/\/?|!=|[<>]=?|[\(\[|,=+-])|([@$])/g;
		var TERM = 1, OPERATOR = 2, MODIFIER = 3;
		var tokenType = OPERATOR;
		prefix += ':';
		function replacer(token, identifier, suffix, term, operator, modifier) {
			if (suffix) {
				tokenType =
					(suffix == ':' || (suffix == '::' && (identifier == 'attribute' || identifier == 'namespace')))
						? MODIFIER : OPERATOR;
			} else if (identifier) {
				if (tokenType == OPERATOR && identifier != '*') {
					token = prefix + token;
				}
				tokenType = (tokenType == TERM) ? OPERATOR : TERM;
			} else {
				tokenType = term ? TERM : operator ? OPERATOR : MODIFIER;
			}
			return token;
		}
		return xpath.replace(tokenPattern, replacer);
	}

	// http://d.hatena.ne.jp/amachang/20090917/1253179486
	function escapeXPathExpr(text) {
		var matches = text.match(/[^"]+|"/g);
		function esc(t) {
			return t == '"' ? ('\'' + t + '\'') : ('"' + t + '"');
		}
		if (matches) {
			if (matches.length == 1) {
				return esc(matches[0]);
			} else {
				var results = [];
				for (var i = 0, len = matches.length; i < len; i++) {
					results.push(esc(matches[i]));
				}
				return 'concat(' + results.join(', ') + ')';
			}
		} else {
			return '""';
		}
	}

	// reduce https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Array/reduce#Compatibility
	function reduce(arr, fun) {
		var len = arr.length, i = 0, rv;
		if (arguments.length >= 3) rv = arguments[2];
		else {
			do {
				if (i in arr) {
					rv = arr[i++]; break;
				}
				if (++i >= len) throw new TypeError();
			} while (true)
		};
		for (; i < len; i++) { if (i in arr) rv = fun.call(null, rv, arr[i], i, arr); }
		return rv;
	}

	function error(e) {
		if (isOpera) {
			opera.postError(e);
		} else if (window.console) {
			console.error(e);
		}
	}

	// add style sheet to the document
	function addCSS(css) {
		var sheet, self = arguments.callee;
		if (document.createStyleSheet) { // for IE
			sheet = document.createStyleSheet();
			sheet.cssText = css;
			return sheet;
		} else {
			let head = document.getElementsByTagName('head')[0] || document.documentElement;
			sheet = creaElemIn('style', head);
			sheet.type = 'text/css';
			sheet.textContent = css;
			return sheet;
		}
	}

	// get the accumulative offsetTop of target element
	function getY(oElement) {
		var iReturnValue = 0;
		while (oElement != null) {
			iReturnValue += oElement.offsetTop;
			oElement = oElement.offsetParent;
		}
		return iReturnValue;
	}

	// create some element and append to the destination
	function creaElemIn(tagname, destin) {
		var theElem = destin.appendChild(document.createElement(tagname));
		return theElem;
	}

	/** Get elements by className
	* @function getElementsByClassName
	* @param string className
	* @param optional string tag restrict to specified tag
	* @param optional node restrict to childNodes of specified node
	* @return Array of nodes
	* @author Jonathan Snook, http://www.snook.ca/jonathan
	* @author Robert Nyman, http://www.robertnyman.com
	*/
	function getElementsByClassName(className, tag, elm) {
		var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
		tag = tag || "*";
		elm = elm || document;
		var elements = (tag == "*" && elm.all) ? elm.all : elm.getElementsByTagName(tag);
		var returnElements = [];
		var current;
		var length = elements.length;
		for (var i = 0; i < length; i++) {
			current = elements[i];
			if (testClass.test(current.className)) {
				returnElements.push(current);
			}
		}
		return returnElements;
	}

	// GM api to cookie function
	function getRecoverableString(oVar, notFirst) {
		var oType = typeof (oVar);
		if ((oType == 'null') || (oType == 'object' && !oVar)) {
			return 'null';
		}
		if (oType == 'undefined') { return 'window.uDfXZ0_d'; }
		if (oType == 'object') {
			//Safari throws errors when comparing non-objects with window/document/etc
			if (oVar == window) { return 'window'; }
			if (oVar == document) { return 'document'; }
			if (oVar == document.body) { return 'document.body'; }
			if (oVar == document.documentElement) { return 'document.documentElement'; }
		}
		if (oVar.nodeType && (oVar.childNodes || oVar.ownerElement)) { return '{error:\'DOM node\'}'; }
		if (!notFirst) {
			Object.prototype.toRecoverableString = function (oBn) {
				if (this.tempLockIgnoreMe) { return '{\'LoopBack\'}'; }
				this.tempLockIgnoreMe = true;
				var retVal = '{', sepChar = '', j;
				for (var i in this) {
					if (i == 'toRecoverableString' || i == 'tempLockIgnoreMe' || i == 'prototype' || i == 'constructor') { continue; }
					if (oBn && (i == 'index' || i == 'input' || i == 'length' || i == 'toRecoverableObString')) { continue; }
					j = this[i];
					if (!i.match(basicObPropNameValStr)) {
						//for some reason, you cannot use unescape when defining peoperty names inline
						for (var x = 0; x < cleanStrFromAr.length; x++) {
							i = i.replace(cleanStrFromAr[x], cleanStrToAr[x]);
						}
						i = '\'' + i + '\'';
					} else if (window.ActiveXObject && navigator.userAgent.indexOf('Mac') + 1 && !navigator.__ice_version && window.ScriptEngine && ScriptEngine() == 'JScript' && i.match(/^\d+$/)) {
						//IE mac does not allow numerical property names to be used unless they are quoted
						i = '\'' + i + '\'';
					}
					retVal += sepChar + i + ':' + getRecoverableString(j, true);
					sepChar = ',';
				}
				retVal += '}';
				this.tempLockIgnoreMe = false;
				return retVal;
			};
			Array.prototype.toRecoverableObString = Object.prototype.toRecoverableString;
			Array.prototype.toRecoverableString = function () {
				if (this.tempLock) { return '[\'LoopBack\']'; }
				if (!this.length) {
					var oCountProp = 0;
					for (var i in this) { if (i != 'toRecoverableString' && i != 'toRecoverableObString' && i != 'tempLockIgnoreMe' && i != 'prototype' && i != 'constructor' && i != 'index' && i != 'input' && i != 'length') { oCountProp++; } }
					if (oCountProp) { return this.toRecoverableObString(true); }
				}
				this.tempLock = true;
				var retVal = '[';
				for (i = 0; i < this.length; i++) {
					retVal += (i ? ',' : '') + getRecoverableString(this[i], true);
				}
				retVal += ']';
				delete this.tempLock;
				return retVal;
			};
			Boolean.prototype.toRecoverableString = function () {
				return '' + this + '';
			};
			Date.prototype.toRecoverableString = function () {
				return 'new Date(' + this.getTime() + ')';
			};
			Function.prototype.toRecoverableString = function () {
				return this.toString().replace(/^\s+|\s+$/g, '').replace(/^function\s*\w*\([^\)]*\)\s*\{\s*\[native\s+code\]\s*\}$/i, 'function (){[\'native code\'];}');
			};
			Number.prototype.toRecoverableString = function () {
				if (isNaN(this)) { return 'Number.NaN'; }
				if (this == Number.POSITIVE_INFINITY) { return 'Number.POSITIVE_INFINITY'; }
				if (this == Number.NEGATIVE_INFINITY) { return 'Number.NEGATIVE_INFINITY'; }
				return '' + this + '';
			};
			RegExp.prototype.toRecoverableString = function () {
				return '\/' + this.source + '\/' + (this.global ? 'g' : '') + (this.ignoreCase ? 'i' : '');
			};
			String.prototype.toRecoverableString = function () {
				var oTmp = escape(this);
				if (oTmp == this) { return '\'' + this + '\''; }
				return 'unescape(\'' + oTmp + '\')';
			};
		}
		if (!oVar.toRecoverableString) { return '{error:\'internal object\'}'; }
		var oTmp = oVar.toRecoverableString();
		if (!notFirst) {
			//prevent it from changing for...in loops that the page may be using
			delete Object.prototype.toRecoverableString;
			delete Array.prototype.toRecoverableObString;
			delete Array.prototype.toRecoverableString;
			delete Boolean.prototype.toRecoverableString;
			delete Date.prototype.toRecoverableString;
			delete Function.prototype.toRecoverableString;
			delete Number.prototype.toRecoverableString;
			delete RegExp.prototype.toRecoverableString;
			delete String.prototype.toRecoverableString;
		}
		return oTmp;
	}


	// GB2312 to UTF-8 function set; urlDecode(url_gb2312_string)
	function urlDecode(str) {

		var UnicodeChr = function () {
			return '00A4,00A7,00A8,00B0,00B1,00B7,00D7,00E0,00E1,00E8,00E9,00EA,00EC,00ED,00F2,00F3,00F7,00F9,00FA,00FC,0101,0113,011B,012B,014D,016B,01CE,01D0,01D2,01D4,01D6,01D8,01DA,01DC,02C7,02C9,0391,0392,0393,0394,0395,0396,0397,0398,0399,039A,039B,039C,039D,039E,039F,03A0,03A1,03A3,03A4,03A5,03A6,03A7,03A8,03A9,03B1,03B2,03B3,03B4,03B5,03B6,03B7,03B8,03B9,03BA,03BB,03BC,03BD,03BE,03BF,03C0,03C1,03C3,03C4,03C5,03C6,03C7,03C8,03C9,0401,0410,0411,0412,0413,0414,0415,0416,0417,0418,0419,041A,041B,041C,041D,041E,041F,0420,0421,0422,0423,0424,0425,0426,0427,0428,0429,042A,042B,042C,042D,042E,042F,0430,0431,0432,0433,0434,0435,0436,0437,0438,0439,043A,043B,043C,043D,043E,043F,0440,0441,0442,0443,0444,0445,0446,0447,0448,0449,044A,044B,044C,044D,044E,044F,0451,2014,2016,2018,2019,201C,201D,2026,2030,2032,2033,203B,2103,2116,2160,2161,2162,2163,2164,2165,2166,2167,2168,2169,216A,216B,2190,2191,2192,2193,2208,220F,2211,221A,221D,221E,2220,2225,2227,2228,2229,222A,222B,222E,2234,2235,2236,2237,223D,2248,224C,2260,2261,2264,2265,226E,226F,2299,22A5,2312,2460,2461,2462,2463,2464,2465,2466,2467,2468,2469,2474,2475,2476,2477,2478,2479,247A,247B,247C,247D,247E,247F,2480,2481,2482,2483,2484,2485,2486,2487,2488,2489,248A,248B,248C,248D,248E,248F,2490,2491,2492,2493,2494,2495,2496,2497,2498,2499,249A,249B,2500,2501,2502,2503,2504,2505,2506,2507,2508,2509,250A,250B,250C,250D,250E,250F,2510,2511,2512,2513,2514,2515,2516,2517,2518,2519,251A,251B,251C,251D,251E,251F,2520,2521,2522,2523,2524,2525,2526,2527,2528,2529,252A,252B,252C,252D,252E,252F,2530,2531,2532,2533,2534,2535,2536,2537,2538,2539,253A,253B,253C,253D,253E,253F,2540,2541,2542,2543,2544,2545,2546,2547,2548,2549,254A,254B,25A0,25A1,25B2,25B3,25C6,25C7,25CB,25CE,25CF,2605,2606,2640,2642,3000,3001,3002,3003,3005,3008,3009,300A,300B,300C,300D,300E,300F,3010,3011,3013,3014,3015,3016,3017,3041,3042,3043,3044,3045,3046,3047,3048,3049,304A,304B,304C,304D,304E,304F,3050,3051,3052,3053,3054,3055,3056,3057,3058,3059,305A,305B,305C,305D,305E,305F,3060,3061,3062,3063,3064,3065,3066,3067,3068,3069,306A,306B,306C,306D,306E,306F,3070,3071,3072,3073,3074,3075,3076,3077,3078,3079,307A,307B,307C,307D,307E,307F,3080,3081,3082,3083,3084,3085,3086,3087,3088,3089,308A,308B,308C,308D,308E,308F,3090,3091,3092,3093,30A1,30A2,30A3,30A4,30A5,30A6,30A7,30A8,30A9,30AA,30AB,30AC,30AD,30AE,30AF,30B0,30B1,30B2,30B3,30B4,30B5,30B6,30B7,30B8,30B9,30BA,30BB,30BC,30BD,30BE,30BF,30C0,30C1,30C2,30C3,30C4,30C5,30C6,30C7,30C8,30C9,30CA,30CB,30CC,30CD,30CE,30CF,30D0,30D1,30D2,30D3,30D4,30D5,30D6,30D7,30D8,30D9,30DA,30DB,30DC,30DD,30DE,30DF,30E0,30E1,30E2,30E3,30E4,30E5,30E6,30E7,30E8,30E9,30EA,30EB,30EC,30ED,30EE,30EF,30F0,30F1,30F2,30F3,30F4,30F5,30F6,3105,3106,3107,3108,3109,310A,310B,310C,310D,310E,310F,3110,3111,3112,3113,3114,3115,3116,3117,3118,3119,311A,311B,311C,311D,311E,311F,3120,3121,3122,3123,3124,3125,3126,3127,3128,3129,3220,3221,3222,3223,3224,3225,3226,3227,3228,3229,4E00,4E01,4E03,4E07,4E08,4E09,4E0A,4E0B,4E0C,4E0D,4E0E,4E10,4E11,4E13,4E14,4E15,4E16,4E18,4E19,4E1A,4E1B,4E1C,4E1D,4E1E,4E22,4E24,4E25,4E27,4E28,4E2A,4E2B,4E2C,4E2D,4E30,4E32,4E34,4E36,4E38,4E39,4E3A,4E3B,4E3D,4E3E,4E3F,4E43,4E45,4E47,4E48,4E49,4E4B,4E4C,4E4D,4E4E,4E4F,4E50,4E52,4E53,4E54,4E56,4E58,4E59,4E5C,4E5D,4E5E,4E5F,4E60,4E61,4E66,4E69,4E70,4E71,4E73,4E7E,4E86,4E88,4E89,4E8B,4E8C,4E8D,4E8E,4E8F,4E91,4E92,4E93,4E94,4E95,4E98,4E9A,4E9B,4E9F,4EA0,4EA1,4EA2,4EA4,4EA5,4EA6,4EA7,4EA8,4EA9,4EAB,4EAC,4EAD,4EAE,4EB2,4EB3,4EB5,4EBA,4EBB,4EBF,4EC0,4EC1,4EC2,4EC3,4EC4,4EC5,4EC6,4EC7,4EC9,4ECA,4ECB,4ECD,4ECE,4ED1,4ED3,4ED4,4ED5,4ED6,4ED7,4ED8,4ED9,4EDD,4EDE,4EDF,4EE1,4EE3,4EE4,4EE5,4EE8,4EEA,4EEB,4EEC,4EF0,4EF2,4EF3,4EF5,4EF6,4EF7,4EFB,4EFD,4EFF,4F01,4F09,4F0A,4F0D,4F0E,4F0F,4F10,4F11,4F17,4F18,4F19,4F1A,4F1B,4F1E,4F1F,4F20,4F22,4F24,4F25,4F26,4F27,4F2A,4F2B,4F2F,4F30,4F32,4F34,4F36,4F38,4F3A,4F3C,4F3D,4F43,4F46,4F4D,4F4E,4F4F,4F50,4F51,4F53,4F55,4F57,4F58,4F59,4F5A,4F5B,4F5C,4F5D,4F5E,4F5F,4F60,4F63,4F64,4F65,4F67,4F69,4F6C,4F6F,4F70,4F73,4F74,4F76,4F7B,4F7C,4F7E,4F7F,4F83,4F84,4F88,4F89,4F8B,4F8D,4F8F,4F91,4F94,4F97,4F9B,4F9D,4FA0,4FA3,4FA5,4FA6,4FA7,4FA8,4FA9,4FAA,4FAC,4FAE,4FAF,4FB5,4FBF,4FC3,4FC4,4FC5,4FCA,4FCE,4FCF,4FD0,4FD1,4FD7,4FD8,4FDA,4FDC,4FDD,4FDE,4FDF,4FE1,4FE3,4FE6,4FE8,4FE9,4FEA,4FED,4FEE,4FEF,4FF1,4FF3,4FF8,4FFA,4FFE,500C,500D,500F,5012,5014,5018,5019,501A,501C,501F,5021,5025,5026,5028,5029,502A,502C,502D,502E,503A,503C,503E,5043,5047,5048,504C,504E,504F,5055,505A,505C,5065,506C,5076,5077,507B,507E,507F,5080,5085,5088,508D,50A3,50A5,50A7,50A8,50A9,50AC,50B2,50BA,50BB,50CF,50D6,50DA,50E6,50E7,50EC,50ED,50EE,50F3,50F5,50FB,5106,5107,510B,5112,5121,513F,5140,5141,5143,5144,5145,5146,5148,5149,514B,514D,5151,5154,5155,5156,515A,515C,5162,5165,5168,516B,516C,516D,516E,5170,5171,5173,5174,5175,5176,5177,5178,5179,517B,517C,517D,5180,5181,5182,5185,5188,5189,518C,518D,5192,5195,5196,5197,5199,519B,519C,51A0,51A2,51A4,51A5,51AB,51AC,51AF,51B0,51B1,51B2,51B3,51B5,51B6,51B7,51BB,51BC,51BD,51C0,51C4,51C6,51C7,51C9,51CB,51CC,51CF,51D1,51DB,51DD,51E0,51E1,51E4,51EB,51ED,51EF,51F0,51F3,51F5,51F6,51F8,51F9,51FA,51FB,51FC,51FD,51FF,5200,5201,5202,5203,5206,5207,5208,520A,520D,520E,5211,5212,5216,5217,5218,5219,521A,521B,521D,5220,5224,5228,5229,522B,522D,522E,5230,5233,5236,5237,5238,5239,523A,523B,523D,523F,5240,5241,5242,5243,524A,524C,524D,5250,5251,5254,5256,525C,525E,5261,5265,5267,5269,526A,526F,5272,527D,527F,5281,5282,5288,5290,5293,529B,529D,529E,529F,52A0,52A1,52A2,52A3,52A8,52A9,52AA,52AB,52AC,52AD,52B1,52B2,52B3,52BE,52BF,52C3,52C7,52C9,52CB,52D0,52D2,52D6,52D8,52DF,52E4,52F0,52F9,52FA,52FE,52FF,5300,5305,5306,5308,530D,530F,5310,5315,5316,5317,5319,531A,531D,5320,5321,5323,5326,532A,532E,5339,533A,533B,533E,533F,5341,5343,5345,5347,5348,5349,534A,534E,534F,5351,5352,5353,5355,5356,5357,535A,535C,535E,535F,5360,5361,5362,5363,5364,5366,5367,5369,536B,536E,536F,5370,5371,5373,5374,5375,5377,5378,537A,537F,5382,5384,5385,5386,5389,538B,538C,538D,5395,5398,539A,539D,539F,53A2,53A3,53A5,53A6,53A8,53A9,53AE,53B6,53BB,53BF,53C1,53C2,53C8,53C9,53CA,53CB,53CC,53CD,53D1,53D4,53D6,53D7,53D8,53D9,53DB,53DF,53E0,53E3,53E4,53E5,53E6,53E8,53E9,53EA,53EB,53EC,53ED,53EE,53EF,53F0,53F1,53F2,53F3,53F5,53F6,53F7,53F8,53F9,53FB,53FC,53FD,5401,5403,5404,5406,5408,5409,540A,540C,540D,540E,540F,5410,5411,5412,5413,5415,5416,5417,541B,541D,541E,541F,5420,5421,5423,5426,5427,5428,5429,542B,542C,542D,542E,542F,5431,5432,5434,5435,5438,5439,543B,543C,543E,5440,5443,5446,5448,544A,544B,5450,5452,5453,5454,5455,5456,5457,5458,5459,545B,545C,5462,5464,5466,5468,5471,5472,5473,5475,5476,5477,5478,547B,547C,547D,5480,5482,5484,5486,548B,548C,548E,548F,5490,5492,5494,5495,5496,5499,549A,549B,549D,54A3,54A4,54A6,54A7,54A8,54A9,54AA,54AB,54AC,54AD,54AF,54B1,54B3,54B4,54B8,54BB,54BD,54BF,54C0,54C1,54C2,54C4,54C6,54C7,54C8,54C9,54CC,54CD,54CE,54CF,54D0,54D1,54D2,54D3,54D4,54D5,54D7,54D9,54DA,54DC,54DD,54DE,54DF,54E5,54E6,54E7,54E8,54E9,54EA,54ED,54EE,54F2,54F3,54FA,54FC,54FD,54FF,5501,5506,5507,5509,550F,5510,5511,5514,551B,5520,5522,5523,5524,5527,552A,552C,552E,552F,5530,5531,5533,5537,553C,553E,553F,5541,5543,5544,5546,5549,554A,5550,5555,5556,555C,5561,5564,5565,5566,5567,556A,556C,556D,556E,5575,5576,5577,5578,557B,557C,557E,5580,5581,5582,5583,5584,5587,5588,5589,558A,558B,558F,5591,5594,5598,5599,559C,559D,559F,55A7,55B1,55B3,55B5,55B7,55B9,55BB,55BD,55BE,55C4,55C5,55C9,55CC,55CD,55D1,55D2,55D3,55D4,55D6,55DC,55DD,55DF,55E1,55E3,55E4,55E5,55E6,55E8,55EA,55EB,55EC,55EF,55F2,55F3,55F5,55F7,55FD,55FE,5600,5601,5608,5609,560C,560E,560F,5618,561B,561E,561F,5623,5624,5627,562C,562D,5631,5632,5634,5636,5639,563B,563F,564C,564D,564E,5654,5657,5658,5659,565C,5662,5664,5668,5669,566A,566B,566C,5671,5676,567B,567C,5685,5686,568E,568F,5693,56A3,56AF,56B7,56BC,56CA,56D4,56D7,56DA,56DB,56DD,56DE,56DF,56E0,56E1,56E2,56E4,56EB,56ED,56F0,56F1,56F4,56F5,56F9,56FA,56FD,56FE,56FF,5703,5704,5706,5708,5709,570A,571C,571F,5723,5728,5729,572A,572C,572D,572E,572F,5730,5733,5739,573A,573B,573E,5740,5742,5747,574A,574C,574D,574E,574F,5750,5751,5757,575A,575B,575C,575D,575E,575F,5760,5761,5764,5766,5768,5769,576A,576B,576D,576F,5773,5776,5777,577B,577C,5782,5783,5784,5785,5786,578B,578C,5792,5793,579B,57A0,57A1,57A2,57A3,57A4,57A6,57A7,57A9,57AB,57AD,57AE,57B2,57B4,57B8,57C2,57C3,57CB,57CE,57CF,57D2,57D4,57D5,57D8,57D9,57DA,57DD,57DF,57E0,57E4,57ED,57EF,57F4,57F8,57F9,57FA,57FD,5800,5802,5806,5807,580B,580D,5811,5815,5819,581E,5820,5821,5824,582A,5830,5835,5844,584C,584D,5851,5854,5858,585E,5865,586B,586C,587E,5880,5881,5883,5885,5889,5892,5893,5899,589A,589E,589F,58A8,58A9,58BC,58C1,58C5,58D1,58D5,58E4,58EB,58EC,58EE,58F0,58F3,58F6,58F9,5902,5904,5907,590D,590F,5914,5915,5916,5919,591A,591C,591F,5924,5925,5927,5929,592A,592B,592D,592E,592F,5931,5934,5937,5938,5939,593A,593C,5941,5942,5944,5947,5948,5949,594B,594E,594F,5951,5954,5955,5956,5957,5958,595A,5960,5962,5965,5973,5974,5976,5978,5979,597D,5981,5982,5983,5984,5986,5987,5988,598A,598D,5992,5993,5996,5997,5999,599E,59A3,59A4,59A5,59A8,59A9,59AA,59AB,59AE,59AF,59B2,59B9,59BB,59BE,59C6,59CA,59CB,59D0,59D1,59D2,59D3,59D4,59D7,59D8,59DA,59DC,59DD,59E3,59E5,59E8,59EC,59F9,59FB,59FF,5A01,5A03,5A04,5A05,5A06,5A07,5A08,5A09,5A0C,5A11,5A13,5A18,5A1C,5A1F,5A20,5A23,5A25,5A29,5A31,5A32,5A34,5A36,5A3C,5A40,5A46,5A49,5A4A,5A55,5A5A,5A62,5A67,5A6A,5A74,5A75,5A76,5A77,5A7A,5A7F,5A92,5A9A,5A9B,5AAA,5AB2,5AB3,5AB5,5AB8,5ABE,5AC1,5AC2,5AC9,5ACC,5AD2,5AD4,5AD6,5AD8,5ADC,5AE0,5AE1,5AE3,5AE6,5AE9,5AEB,5AF1,5B09,5B16,5B17,5B32,5B34,5B37,5B40,5B50,5B51,5B53,5B54,5B55,5B57,5B58,5B59,5B5A,5B5B,5B5C,5B5D,5B5F,5B62,5B63,5B64,5B65,5B66,5B69,5B6A,5B6C,5B70,5B71,5B73,5B75,5B7A,5B7D,5B80,5B81,5B83,5B84,5B85,5B87,5B88,5B89,5B8B,5B8C,5B8F,5B93,5B95,5B97,5B98,5B99,5B9A,5B9B,5B9C,5B9D,5B9E,5BA0,5BA1,5BA2,5BA3,5BA4,5BA5,5BA6,5BAA,5BAB,5BB0,5BB3,5BB4,5BB5,5BB6,5BB8,5BB9,5BBD,5BBE,5BBF,5BC2,5BC4,5BC5,5BC6,5BC7,5BCC,5BD0,5BD2,5BD3,5BDD,5BDE,5BDF,5BE1,5BE4,5BE5,5BE8,5BEE,5BF0,5BF8,5BF9,5BFA,5BFB,5BFC,5BFF,5C01,5C04,5C06,5C09,5C0A,5C0F,5C11,5C14,5C15,5C16,5C18,5C1A,5C1C,5C1D,5C22,5C24,5C25,5C27,5C2C,5C31,5C34,5C38,5C39,5C3A,5C3B,5C3C,5C3D,5C3E,5C3F,5C40,5C41,5C42,5C45,5C48,5C49,5C4A,5C4B,5C4E,5C4F,5C50,5C51,5C55,5C59,5C5E,5C60,5C61,5C63,5C65,5C66,5C6E,5C6F,5C71,5C79,5C7A,5C7F,5C81,5C82,5C88,5C8C,5C8D,5C90,5C91,5C94,5C96,5C97,5C98,5C99,5C9A,5C9B,5C9C,5CA2,5CA3,5CA9,5CAB,5CAC,5CAD,5CB1,5CB3,5CB5,5CB7,5CB8,5CBD,5CBF,5CC1,5CC4,5CCB,5CD2,5CD9,5CE1,5CE4,5CE5,5CE6,5CE8,5CEA,5CED,5CF0,5CFB,5D02,5D03,5D06,5D07,5D0E,5D14,5D16,5D1B,5D1E,5D24,5D26,5D27,5D29,5D2D,5D2E,5D34,5D3D,5D3E,5D47,5D4A,5D4B,5D4C,5D58,5D5B,5D5D,5D69,5D6B,5D6C,5D6F,5D74,5D82,5D99,5D9D,5DB7,5DC5,5DCD,5DDB,5DDD,5DDE,5DE1,5DE2,5DE5,5DE6,5DE7,5DE8,5DE9,5DEB,5DEE,5DEF,5DF1,5DF2,5DF3,5DF4,5DF7,5DFD,5DFE,5E01,5E02,5E03,5E05,5E06,5E08,5E0C,5E0F,5E10,5E11,5E14,5E15,5E16,5E18,5E19,5E1A,5E1B,5E1C,5E1D,5E26,5E27,5E2D,5E2E,5E31,5E37,5E38,5E3B,5E3C,5E3D,5E42,5E44,5E45,5E4C,5E54,5E55,5E5B,5E5E,5E61,5E62,5E72,5E73,5E74,5E76,5E78,5E7A,5E7B,5E7C,5E7D,5E7F,5E80,5E84,5E86,5E87,5E8A,5E8B,5E8F,5E90,5E91,5E93,5E94,5E95,5E96,5E97,5E99,5E9A,5E9C,5E9E,5E9F,5EA0,5EA5,5EA6,5EA7,5EAD,5EB3,5EB5,5EB6,5EB7,5EB8,5EB9,5EBE,5EC9,5ECA,5ED1,5ED2,5ED3,5ED6,5EDB,5EE8,5EEA,5EF4,5EF6,5EF7,5EFA,5EFE,5EFF,5F00,5F01,5F02,5F03,5F04,5F08,5F0A,5F0B,5F0F,5F11,5F13,5F15,5F17,5F18,5F1B,5F1F,5F20,5F25,5F26,5F27,5F29,5F2A,5F2D,5F2F,5F31,5F39,5F3A,5F3C,5F40,5F50,5F52,5F53,5F55,5F56,5F57,5F58,5F5D,5F61,5F62,5F64,5F66,5F69,5F6A,5F6C,5F6D,5F70,5F71,5F73,5F77,5F79,5F7B,5F7C,5F80,5F81,5F82,5F84,5F85,5F87,5F88,5F89,5F8A,5F8B,5F8C,5F90,5F92,5F95,5F97,5F98,5F99,5F9C,5FA1,5FA8,5FAA,5FAD,5FAE,5FB5,5FB7,5FBC,5FBD,5FC3,5FC4,5FC5,5FC6,5FC9,5FCC,5FCD,5FCF,5FD0,5FD1,5FD2,5FD6,5FD7,5FD8,5FD9,5FDD,5FE0,5FE1,5FE4,5FE7,5FEA,5FEB,5FED,5FEE,5FF1,5FF5,5FF8,5FFB,5FFD,5FFE,5FFF,6000,6001,6002,6003,6004,6005,6006,600A,600D,600E,600F,6012,6014,6015,6016,6019,601B,601C,601D,6020,6021,6025,6026,6027,6028,6029,602A,602B,602F,6035,603B,603C,603F,6041,6042,6043,604B,604D,6050,6052,6055,6059,605A,605D,6062,6063,6064,6067,6068,6069,606A,606B,606C,606D,606F,6070,6073,6076,6078,6079,607A,607B,607C,607D,607F,6083,6084,6089,608C,608D,6092,6094,6096,609A,609B,609D,609F,60A0,60A3,60A6,60A8,60AB,60AC,60AD,60AF,60B1,60B2,60B4,60B8,60BB,60BC,60C5,60C6,60CA,60CB,60D1,60D5,60D8,60DA,60DC,60DD,60DF,60E0,60E6,60E7,60E8,60E9,60EB,60EC,60ED,60EE,60EF,60F0,60F3,60F4,60F6,60F9,60FA,6100,6101,6106,6108,6109,610D,610E,610F,6115,611A,611F,6120,6123,6124,6126,6127,612B,613F,6148,614A,614C,614E,6151,6155,615D,6162,6167,6168,6170,6175,6177,618B,618E,6194,619D,61A7,61A8,61A9,61AC,61B7,61BE,61C2,61C8,61CA,61CB,61D1,61D2,61D4,61E6,61F5,61FF,6206,6208,620A,620B,620C,620D,620E,620F,6210,6211,6212,6215,6216,6217,6218,621A,621B,621F,6221,6222,6224,6225,622A,622C,622E,6233,6234,6237,623D,623E,623F,6240,6241,6243,6247,6248,6249,624B,624C,624D,624E,6251,6252,6253,6254,6258,625B,6263,6266,6267,6269,626A,626B,626C,626D,626E,626F,6270,6273,6276,6279,627C,627E,627F,6280,6284,6289,628A,6291,6292,6293,6295,6296,6297,6298,629A,629B,629F,62A0,62A1,62A2,62A4,62A5,62A8,62AB,62AC,62B1,62B5,62B9,62BB,62BC,62BD,62BF,62C2,62C4,62C5,62C6,62C7,62C8,62C9,62CA,62CC,62CD,62CE,62D0,62D2,62D3,62D4,62D6,62D7,62D8,62D9,62DA,62DB,62DC,62DF,62E2,62E3,62E5,62E6,62E7,62E8,62E9,62EC,62ED,62EE,62EF,62F1,62F3,62F4,62F6,62F7,62FC,62FD,62FE,62FF,6301,6302,6307,6308,6309,630E,6311,6316,631A,631B,631D,631E,631F,6320,6321,6322,6323,6324,6325,6328,632A,632B,632F,6332,6339,633A,633D,6342,6343,6345,6346,6349,634B,634C,634D,634E,634F,6350,6355,635E,635F,6361,6362,6363,6367,6369,636D,636E,6371,6376,6377,637A,637B,6380,6382,6387,6388,6389,638A,638C,638E,638F,6390,6392,6396,6398,63A0,63A2,63A3,63A5,63A7,63A8,63A9,63AA,63AC,63AD,63AE,63B0,63B3,63B4,63B7,63B8,63BA,63BC,63BE,63C4,63C6,63C9,63CD,63CE,63CF,63D0,63D2,63D6,63DE,63E0,63E1,63E3,63E9,63EA,63ED,63F2,63F4,63F6,63F8,63FD,63FF,6400,6401,6402,6405,640B,640C,640F,6410,6413,6414,641B,641C,641E,6420,6421,6426,642A,642C,642D,6434,643A,643D,643F,6441,6444,6445,6446,6447,6448,644A,6452,6454,6458,645E,6467,6469,646D,6478,6479,647A,6482,6484,6485,6487,6491,6492,6495,6496,6499,649E,64A4,64A9,64AC,64AD,64AE,64B0,64B5,64B7,64B8,64BA,64BC,64C0,64C2,64C5,64CD,64CE,64D0,64D2,64D7,64D8,64DE,64E2,64E4,64E6,6500,6509,6512,6518,6525,652B,652E,652F,6534,6535,6536,6538,6539,653B,653E,653F,6545,6548,6549,654C,654F,6551,6555,6556,6559,655B,655D,655E,6562,6563,6566,656B,656C,6570,6572,6574,6577,6587,658B,658C,6590,6591,6593,6597,6599,659B,659C,659F,65A1,65A4,65A5,65A7,65A9,65AB,65AD,65AF,65B0,65B9,65BC,65BD,65C1,65C3,65C4,65C5,65C6,65CB,65CC,65CE,65CF,65D2,65D6,65D7,65E0,65E2,65E5,65E6,65E7,65E8,65E9,65EC,65ED,65EE,65EF,65F0,65F1,65F6,65F7,65FA,6600,6602,6603,6606,660A,660C,660E,660F,6613,6614,6615,6619,661D,661F,6620,6625,6627,6628,662D,662F,6631,6634,6635,6636,663C,663E,6641,6643,664B,664C,664F,6652,6653,6654,6655,6656,6657,665A,665F,6661,6664,6666,6668,666E,666F,6670,6674,6676,6677,667A,667E,6682,6684,6687,668C,6691,6696,6697,669D,66A7,66A8,66AE,66B4,66B9,66BE,66D9,66DB,66DC,66DD,66E6,66E9,66F0,66F2,66F3,66F4,66F7,66F9,66FC,66FE,66FF,6700,6708,6709,670A,670B,670D,6710,6714,6715,6717,671B,671D,671F,6726,6728,672A,672B,672C,672D,672F,6731,6734,6735,673A,673D,6740,6742,6743,6746,6748,6749,674C,674E,674F,6750,6751,6753,6756,675C,675E,675F,6760,6761,6765,6768,6769,676A,676D,676F,6770,6772,6773,6775,6777,677C,677E,677F,6781,6784,6787,6789,678B,6790,6795,6797,6798,679A,679C,679D,679E,67A2,67A3,67A5,67A7,67A8,67AA,67AB,67AD,67AF,67B0,67B3,67B5,67B6,67B7,67B8,67C1,67C3,67C4,67CF,67D0,67D1,67D2,67D3,67D4,67D8,67D9,67DA,67DC,67DD,67DE,67E0,67E2,67E5,67E9,67EC,67EF,67F0,67F1,67F3,67F4,67FD,67FF,6800,6805,6807,6808,6809,680A,680B,680C,680E,680F,6811,6813,6816,6817,681D,6821,6829,682A,6832,6833,6837,6838,6839,683C,683D,683E,6840,6841,6842,6843,6844,6845,6846,6848,6849,684A,684C,684E,6850,6851,6853,6854,6855,6860,6861,6862,6863,6864,6865,6866,6867,6868,6869,686B,6874,6876,6877,6881,6883,6885,6886,688F,6893,6897,68A2,68A6,68A7,68A8,68AD,68AF,68B0,68B3,68B5,68C0,68C2,68C9,68CB,68CD,68D2,68D5,68D8,68DA,68E0,68E3,68EE,68F0,68F1,68F5,68F9,68FA,68FC,6901,6905,690B,690D,690E,6910,6912,691F,6920,6924,692D,6930,6934,6939,693D,693F,6942,6954,6957,695A,695D,695E,6960,6963,6966,696B,696E,6971,6977,6978,6979,697C,6980,6982,6984,6986,6987,6988,6989,698D,6994,6995,6998,699B,699C,69A7,69A8,69AB,69AD,69B1,69B4,69B7,69BB,69C1,69CA,69CC,69CE,69D0,69D4,69DB,69DF,69E0,69ED,69F2,69FD,69FF,6A0A,6A17,6A18,6A1F,6A21,6A28,6A2A,6A2F,6A31,6A35,6A3D,6A3E,6A44,6A47,6A50,6A58,6A59,6A5B,6A61,6A65,6A71,6A79,6A7C,6A80,6A84,6A8E,6A90,6A91,6A97,6AA0,6AA9,6AAB,6AAC,6B20,6B21,6B22,6B23,6B24,6B27,6B32,6B37,6B39,6B3A,6B3E,6B43,6B46,6B47,6B49,6B4C,6B59,6B62,6B63,6B64,6B65,6B66,6B67,6B6A,6B79,6B7B,6B7C,6B81,6B82,6B83,6B84,6B86,6B87,6B89,6B8A,6B8B,6B8D,6B92,6B93,6B96,6B9A,6B9B,6BA1,6BAA,6BB3,6BB4,6BB5,6BB7,6BBF,6BC1,6BC2,6BC5,6BCB,6BCD,6BCF,6BD2,6BD3,6BD4,6BD5,6BD6,6BD7,6BD9,6BDB,6BE1,6BEA,6BEB,6BEF,6BF3,6BF5,6BF9,6BFD,6C05,6C06,6C07,6C0D,6C0F,6C10,6C11,6C13,6C14,6C15,6C16,6C18,6C19,6C1A,6C1B,6C1F,6C21,6C22,6C24,6C26,6C27,6C28,6C29,6C2A,6C2E,6C2F,6C30,6C32,6C34,6C35,6C38,6C3D,6C40,6C41,6C42,6C46,6C47,6C49,6C4A,6C50,6C54,6C55,6C57,6C5B,6C5C,6C5D,6C5E,6C5F,6C60,6C61,6C64,6C68,6C69,6C6A,6C70,6C72,6C74,6C76,6C79,6C7D,6C7E,6C81,6C82,6C83,6C85,6C86,6C88,6C89,6C8C,6C8F,6C90,6C93,6C94,6C99,6C9B,6C9F,6CA1,6CA3,6CA4,6CA5,6CA6,6CA7,6CA9,6CAA,6CAB,6CAD,6CAE,6CB1,6CB2,6CB3,6CB8,6CB9,6CBB,6CBC,6CBD,6CBE,6CBF,6CC4,6CC5,6CC9,6CCA,6CCC,6CD0,6CD3,6CD4,6CD5,6CD6,6CD7,6CDB,6CDE,6CE0,6CE1,6CE2,6CE3,6CE5,6CE8,6CEA,6CEB,6CEE,6CEF,6CF0,6CF1,6CF3,6CF5,6CF6,6CF7,6CF8,6CFA,6CFB,6CFC,6CFD,6CFE,6D01,6D04,6D07,6D0B,6D0C,6D0E,6D12,6D17,6D19,6D1A,6D1B,6D1E,6D25,6D27,6D2A,6D2B,6D2E,6D31,6D32,6D33,6D35,6D39,6D3B,6D3C,6D3D,6D3E,6D41,6D43,6D45,6D46,6D47,6D48,6D4A,6D4B,6D4D,6D4E,6D4F,6D51,6D52,6D53,6D54,6D59,6D5A,6D5C,6D5E,6D60,6D63,6D66,6D69,6D6A,6D6E,6D6F,6D74,6D77,6D78,6D7C,6D82,6D85,6D88,6D89,6D8C,6D8E,6D91,6D93,6D94,6D95,6D9B,6D9D,6D9E,6D9F,6DA0,6DA1,6DA3,6DA4,6DA6,6DA7,6DA8,6DA9,6DAA,6DAB,6DAE,6DAF,6DB2,6DB5,6DB8,6DBF,6DC0,6DC4,6DC5,6DC6,6DC7,6DCB,6DCC,6DD1,6DD6,6DD8,6DD9,6DDD,6DDE,6DE0,6DE1,6DE4,6DE6,6DEB,6DEC,6DEE,6DF1,6DF3,6DF7,6DF9,6DFB,6DFC,6E05,6E0A,6E0C,6E0D,6E0E,6E10,6E11,6E14,6E16,6E17,6E1A,6E1D,6E20,6E21,6E23,6E24,6E25,6E29,6E2B,6E2D,6E2F,6E32,6E34,6E38,6E3A,6E43,6E44,6E4D,6E4E,6E53,6E54,6E56,6E58,6E5B,6E5F,6E6B,6E6E,6E7E,6E7F,6E83,6E85,6E86,6E89,6E8F,6E90,6E98,6E9C,6E9F,6EA2,6EA5,6EA7,6EAA,6EAF,6EB1,6EB2,6EB4,6EB6,6EB7,6EBA,6EBB,6EBD,6EC1,6EC2,6EC7,6ECB,6ECF,6ED1,6ED3,6ED4,6ED5,6ED7,6EDA,6EDE,6EDF,6EE0,6EE1,6EE2,6EE4,6EE5,6EE6,6EE8,6EE9,6EF4,6EF9,6F02,6F06,6F09,6F0F,6F13,6F14,6F15,6F20,6F24,6F29,6F2A,6F2B,6F2D,6F2F,6F31,6F33,6F36,6F3E,6F46,6F47,6F4B,6F4D,6F58,6F5C,6F5E,6F62,6F66,6F6D,6F6E,6F72,6F74,6F78,6F7A,6F7C,6F84,6F88,6F89,6F8C,6F8D,6F8E,6F9C,6FA1,6FA7,6FB3,6FB6,6FB9,6FC0,6FC2,6FC9,6FD1,6FD2,6FDE,6FE0,6FE1,6FEE,6FEF,7011,701A,701B,7023,7035,7039,704C,704F,705E,706B,706C,706D,706F,7070,7075,7076,7078,707C,707E,707F,7080,7085,7089,708A,708E,7092,7094,7095,7096,7099,709C,709D,70AB,70AC,70AD,70AE,70AF,70B1,70B3,70B7,70B8,70B9,70BB,70BC,70BD,70C0,70C1,70C2,70C3,70C8,70CA,70D8,70D9,70DB,70DF,70E4,70E6,70E7,70E8,70E9,70EB,70EC,70ED,70EF,70F7,70F9,70FD,7109,710A,7110,7113,7115,7116,7118,7119,711A,7126,712F,7130,7131,7136,7145,714A,714C,714E,715C,715E,7164,7166,7167,7168,716E,7172,7173,7178,717A,717D,7184,718A,718F,7194,7198,7199,719F,71A0,71A8,71AC,71B3,71B5,71B9,71C3,71CE,71D4,71D5,71E0,71E5,71E7,71EE,71F9,7206,721D,7228,722A,722C,7230,7231,7235,7236,7237,7238,7239,723B,723D,723F,7247,7248,724C,724D,7252,7256,7259,725B,725D,725F,7261,7262,7266,7267,7269,726E,726F,7272,7275,7279,727A,727E,727F,7280,7281,7284,728A,728B,728D,728F,7292,729F,72AC,72AD,72AF,72B0,72B4,72B6,72B7,72B8,72B9,72C1,72C2,72C3,72C4,72C8,72CD,72CE,72D0,72D2,72D7,72D9,72DE,72E0,72E1,72E8,72E9,72EC,72ED,72EE,72EF,72F0,72F1,72F2,72F3,72F4,72F7,72F8,72FA,72FB,72FC,7301,7303,730A,730E,7313,7315,7316,7317,731B,731C,731D,731E,7321,7322,7325,7329,732A,732B,732C,732E,7331,7334,7337,7338,7339,733E,733F,734D,7350,7352,7357,7360,736C,736D,736F,737E,7384,7387,7389,738B,738E,7391,7396,739B,739F,73A2,73A9,73AB,73AE,73AF,73B0,73B2,73B3,73B7,73BA,73BB,73C0,73C2,73C8,73C9,73CA,73CD,73CF,73D0,73D1,73D9,73DE,73E0,73E5,73E7,73E9,73ED,73F2,7403,7405,7406,7409,740A,740F,7410,741A,741B,7422,7425,7426,7428,742A,742C,742E,7430,7433,7434,7435,7436,743C,7441,7455,7457,7459,745A,745B,745C,745E,745F,746D,7470,7476,7477,747E,7480,7481,7483,7487,748B,748E,7490,749C,749E,74A7,74A8,74A9,74BA,74D2,74DC,74DE,74E0,74E2,74E3,74E4,74E6,74EE,74EF,74F4,74F6,74F7,74FF,7504,750D,750F,7511,7513,7518,7519,751A,751C,751F,7525,7528,7529,752B,752C,752D,752F,7530,7531,7532,7533,7535,7537,7538,753A,753B,753E,7540,7545,7548,754B,754C,754E,754F,7554,7559,755A,755B,755C,7565,7566,756A,7572,7574,7578,7579,757F,7583,7586,758B,758F,7591,7592,7594,7596,7597,7599,759A,759D,759F,75A0,75A1,75A3,75A4,75A5,75AB,75AC,75AE,75AF,75B0,75B1,75B2,75B3,75B4,75B5,75B8,75B9,75BC,75BD,75BE,75C2,75C3,75C4,75C5,75C7,75C8,75C9,75CA,75CD,75D2,75D4,75D5,75D6,75D8,75DB,75DE,75E2,75E3,75E4,75E6,75E7,75E8,75EA,75EB,75F0,75F1,75F4,75F9,75FC,75FF,7600,7601,7603,7605,760A,760C,7610,7615,7617,7618,7619,761B,761F,7620,7622,7624,7625,7626,7629,762A,762B,762D,7630,7633,7634,7635,7638,763C,763E,763F,7640,7643,764C,764D,7654,7656,765C,765E,7663,766B,766F,7678,767B,767D,767E,7682,7684,7686,7687,7688,768B,768E,7691,7693,7696,7699,76A4,76AE,76B1,76B2,76B4,76BF,76C2,76C5,76C6,76C8,76CA,76CD,76CE,76CF,76D0,76D1,76D2,76D4,76D6,76D7,76D8,76DB,76DF,76E5,76EE,76EF,76F1,76F2,76F4,76F8,76F9,76FC,76FE,7701,7704,7707,7708,7709,770B,770D,7719,771A,771F,7720,7722,7726,7728,7729,772D,772F,7735,7736,7737,7738,773A,773C,7740,7741,7743,7747,7750,7751,775A,775B,7761,7762,7763,7765,7766,7768,776B,776C,7779,777D,777E,777F,7780,7784,7785,778C,778D,778E,7791,7792,779F,77A0,77A2,77A5,77A7,77A9,77AA,77AC,77B0,77B3,77B5,77BB,77BD,77BF,77CD,77D7,77DB,77DC,77E2,77E3,77E5,77E7,77E9,77EB,77EC,77ED,77EE,77F3,77F6,77F8,77FD,77FE,77FF,7800,7801,7802,7809,780C,780D,7811,7812,7814,7816,7817,7818,781A,781C,781D,781F,7823,7825,7826,7827,7829,782C,782D,7830,7834,7837,7838,7839,783A,783B,783C,783E,7840,7845,7847,784C,784E,7850,7852,7855,7856,7857,785D,786A,786B,786C,786D,786E,7877,787C,7887,7889,788C,788D,788E,7891,7893,7897,7898,789A,789B,789C,789F,78A1,78A3,78A5,78A7,78B0,78B1,78B2,78B3,78B4,78B9,78BE,78C1,78C5,78C9,78CA,78CB,78D0,78D4,78D5,78D9,78E8,78EC,78F2,78F4,78F7,78FA,7901,7905,7913,791E,7924,7934,793A,793B,793C,793E,7940,7941,7946,7948,7949,7953,7956,7957,795A,795B,795C,795D,795E,795F,7960,7962,7965,7967,7968,796D,796F,7977,7978,797A,7980,7981,7984,7985,798A,798F,799A,79A7,79B3,79B9,79BA,79BB,79BD,79BE,79C0,79C1,79C3,79C6,79C9,79CB,79CD,79D1,79D2,79D5,79D8,79DF,79E3,79E4,79E6,79E7,79E9,79EB,79ED,79EF,79F0,79F8,79FB,79FD,7A00,7A02,7A03,7A06,7A0B,7A0D,7A0E,7A14,7A17,7A1A,7A1E,7A20,7A23,7A33,7A37,7A39,7A3B,7A3C,7A3D,7A3F,7A46,7A51,7A57,7A70,7A74,7A76,7A77,7A78,7A79,7A7A,7A7F,7A80,7A81,7A83,7A84,7A86,7A88,7A8D,7A91,7A92,7A95,7A96,7A97,7A98,7A9C,7A9D,7A9F,7AA0,7AA5,7AA6,7AA8,7AAC,7AAD,7AB3,7ABF,7ACB,7AD6,7AD9,7ADE,7ADF,7AE0,7AE3,7AE5,7AE6,7AED,7AEF,7AF9,7AFA,7AFD,7AFF,7B03,7B04,7B06,7B08,7B0A,7B0B,7B0F,7B11,7B14,7B15,7B19,7B1B,7B1E,7B20,7B24,7B25,7B26,7B28,7B2A,7B2B,7B2C,7B2E,7B31,7B33,7B38,7B3A,7B3C,7B3E,7B45,7B47,7B49,7B4B,7B4C,7B4F,7B50,7B51,7B52,7B54,7B56,7B58,7B5A,7B5B,7B5D,7B60,7B62,7B6E,7B71,7B72,7B75,7B77,7B79,7B7B,7B7E,7B80,7B85,7B8D,7B90,7B94,7B95,7B97,7B9C,7B9D,7BA1,7BA2,7BA6,7BA7,7BA8,7BA9,7BAA,7BAB,7BAC,7BAD,7BB1,7BB4,7BB8,7BC1,7BC6,7BC7,7BCC,7BD1,7BD3,7BD9,7BDA,7BDD,7BE1,7BE5,7BE6,7BEA,7BEE,7BF1,7BF7,7BFC,7BFE,7C07,7C0B,7C0C,7C0F,7C16,7C1F,7C26,7C27,7C2A,7C38,7C3F,7C40,7C41,7C4D,7C73,7C74,7C7B,7C7C,7C7D,7C89,7C91,7C92,7C95,7C97,7C98,7C9C,7C9D,7C9E,7C9F,7CA2,7CA4,7CA5,7CAA,7CAE,7CB1,7CB2,7CB3,7CB9,7CBC,7CBD,7CBE,7CC1,7CC5,7CC7,7CC8,7CCA,7CCC,7CCD,7CD5,7CD6,7CD7,7CD9,7CDC,7CDF,7CE0,7CE8,7CEF,7CF8,7CFB,7D0A,7D20,7D22,7D27,7D2B,7D2F,7D6E,7D77,7DA6,7DAE,7E3B,7E41,7E47,7E82,7E9B,7E9F,7EA0,7EA1,7EA2,7EA3,7EA4,7EA5,7EA6,7EA7,7EA8,7EA9,7EAA,7EAB,7EAC,7EAD,7EAF,7EB0,7EB1,7EB2,7EB3,7EB5,7EB6,7EB7,7EB8,7EB9,7EBA,7EBD,7EBE,7EBF,7EC0,7EC1,7EC2,7EC3,7EC4,7EC5,7EC6,7EC7,7EC8,7EC9,7ECA,7ECB,7ECC,7ECD,7ECE,7ECF,7ED0,7ED1,7ED2,7ED3,7ED4,7ED5,7ED7,7ED8,7ED9,7EDA,7EDB,7EDC,7EDD,7EDE,7EDF,7EE0,7EE1,7EE2,7EE3,7EE5,7EE6,7EE7,7EE8,7EE9,7EEA,7EEB,7EED,7EEE,7EEF,7EF0,7EF1,7EF2,7EF3,7EF4,7EF5,7EF6,7EF7,7EF8,7EFA,7EFB,7EFC,7EFD,7EFE,7EFF,7F00,7F01,7F02,7F03,7F04,7F05,7F06,7F07,7F08,7F09,7F0B,7F0C,7F0D,7F0E,7F0F,7F11,7F12,7F13,7F14,7F15,7F16,7F17,7F18,7F19,7F1A,7F1B,7F1C,7F1D,7F1F,7F20,7F21,7F22,7F23,7F24,7F25,7F26,7F27,7F28,7F29,7F2A,7F2B,7F2C,7F2D,7F2E,7F2F,7F30,7F31,7F32,7F33,7F34,7F35,7F36,7F38,7F3A,7F42,7F44,7F45,7F50,7F51,7F54,7F55,7F57,7F58,7F5A,7F5F,7F61,7F62,7F68,7F69,7F6A,7F6E,7F71,7F72,7F74,7F79,7F7E,7F81,7F8A,7F8C,7F8E,7F94,7F9A,7F9D,7F9E,7F9F,7FA1,7FA4,7FA7,7FAF,7FB0,7FB2,7FB8,7FB9,7FBC,7FBD,7FBF,7FC1,7FC5,7FCA,7FCC,7FCE,7FD4,7FD5,7FD8,7FDF,7FE0,7FE1,7FE5,7FE6,7FE9,7FEE,7FF0,7FF1,7FF3,7FFB,7FFC,8000,8001,8003,8004,8005,8006,800B,800C,800D,8010,8012,8014,8015,8016,8017,8018,8019,801C,8020,8022,8025,8026,8027,8028,8029,802A,8031,8033,8035,8036,8037,8038,803B,803D,803F,8042,8043,8046,804A,804B,804C,804D,8052,8054,8058,805A,8069,806A,8071,807F,8080,8083,8084,8086,8087,8089,808B,808C,8093,8096,8098,809A,809B,809C,809D,809F,80A0,80A1,80A2,80A4,80A5,80A9,80AA,80AB,80AD,80AE,80AF,80B1,80B2,80B4,80B7,80BA,80BC,80BD,80BE,80BF,80C0,80C1,80C2,80C3,80C4,80C6,80CC,80CD,80CE,80D6,80D7,80D9,80DA,80DB,80DC,80DD,80DE,80E1,80E4,80E5,80E7,80E8,80E9,80EA,80EB,80EC,80ED,80EF,80F0,80F1,80F2,80F3,80F4,80F6,80F8,80FA,80FC,80FD,8102,8106,8109,810A,810D,810E,810F,8110,8111,8112,8113,8114,8116,8118,811A,811E,812C,812F,8131,8132,8136,8138,813E,8146,8148,814A,814B,814C,8150,8151,8153,8154,8155,8159,815A,8160,8165,8167,8169,816D,816E,8170,8171,8174,8179,817A,817B,817C,817D,817E,817F,8180,8182,8188,818A,818F,8191,8198,819B,819C,819D,81A3,81A6,81A8,81AA,81B3,81BA,81BB,81C0,81C1,81C2,81C3,81C6,81CA,81CC,81E3,81E7,81EA,81EC,81ED,81F3,81F4,81FB,81FC,81FE,8200,8201,8202,8204,8205,8206,820C,820D,8210,8212,8214,821B,821C,821E,821F,8221,8222,8223,8228,822A,822B,822C,822D,822F,8230,8231,8233,8234,8235,8236,8237,8238,8239,823B,823E,8244,8247,8249,824B,824F,8258,825A,825F,8268,826E,826F,8270,8272,8273,8274,8279,827A,827D,827E,827F,8282,8284,8288,828A,828B,828D,828E,828F,8291,8292,8297,8298,8299,829C,829D,829F,82A1,82A4,82A5,82A6,82A8,82A9,82AA,82AB,82AC,82AD,82AE,82AF,82B0,82B1,82B3,82B4,82B7,82B8,82B9,82BD,82BE,82C1,82C4,82C7,82C8,82CA,82CB,82CC,82CD,82CE,82CF,82D1,82D2,82D3,82D4,82D5,82D7,82D8,82DB,82DC,82DE,82DF,82E0,82E1,82E3,82E4,82E5,82E6,82EB,82EF,82F1,82F4,82F7,82F9,82FB,8301,8302,8303,8304,8305,8306,8307,8308,8309,830C,830E,830F,8311,8314,8315,8317,831A,831B,831C,8327,8328,832B,832C,832D,832F,8331,8333,8334,8335,8336,8338,8339,833A,833C,8340,8343,8346,8347,8349,834F,8350,8351,8352,8354,835A,835B,835C,835E,835F,8360,8361,8363,8364,8365,8366,8367,8368,8369,836A,836B,836C,836D,836E,836F,8377,8378,837B,837C,837D,8385,8386,8389,838E,8392,8393,8398,839B,839C,839E,83A0,83A8,83A9,83AA,83AB,83B0,83B1,83B2,83B3,83B4,83B6,83B7,83B8,83B9,83BA,83BC,83BD,83C0,83C1,83C5,83C7,83CA,83CC,83CF,83D4,83D6,83D8,83DC,83DD,83DF,83E0,83E1,83E5,83E9,83EA,83F0,83F1,83F2,83F8,83F9,83FD,8401,8403,8404,8406,840B,840C,840D,840E,840F,8411,8418,841C,841D,8424,8425,8426,8427,8428,8431,8438,843C,843D,8446,8451,8457,8459,845A,845B,845C,8461,8463,8469,846B,846C,846D,8471,8473,8475,8476,8478,847A,8482,8487,8488,8489,848B,848C,848E,8497,8499,849C,84A1,84AF,84B2,84B4,84B8,84B9,84BA,84BD,84BF,84C1,84C4,84C9,84CA,84CD,84D0,84D1,84D3,84D6,84DD,84DF,84E0,84E3,84E5,84E6,84EC,84F0,84FC,84FF,850C,8511,8513,8517,851A,851F,8521,852B,852C,8537,8538,8539,853A,853B,853C,853D,8543,8548,8549,854A,8556,8559,855E,8564,8568,8572,8574,8579,857A,857B,857E,8584,8585,8587,858F,859B,859C,85A4,85A8,85AA,85AE,85AF,85B0,85B7,85B9,85C1,85C9,85CF,85D0,85D3,85D5,85DC,85E4,85E9,85FB,85FF,8605,8611,8616,8627,8629,8638,863C,864D,864E,864F,8650,8651,8654,865A,865E,8662,866B,866C,866E,8671,8679,867A,867B,867C,867D,867E,867F,8680,8681,8682,868A,868B,868C,868D,8693,8695,869C,869D,86A3,86A4,86A7,86A8,86A9,86AA,86AC,86AF,86B0,86B1,86B4,86B5,86B6,86BA,86C0,86C4,86C6,86C7,86C9,86CA,86CB,86CE,86CF,86D0,86D1,86D4,86D8,86D9,86DB,86DE,86DF,86E4,86E9,86ED,86EE,86F0,86F1,86F2,86F3,86F4,86F8,86F9,86FE,8700,8702,8703,8707,8708,8709,870A,870D,8712,8713,8715,8717,8718,871A,871C,871E,8721,8722,8723,8725,8729,872E,8731,8734,8737,873B,873E,873F,8747,8748,8749,874C,874E,8753,8757,8759,8760,8763,8764,8765,876E,8770,8774,8776,877B,877C,877D,877E,8782,8783,8785,8788,878B,878D,8793,8797,879F,87A8,87AB,87AC,87AD,87AF,87B3,87B5,87BA,87BD,87C0,87C6,87CA,87CB,87D1,87D2,87D3,87DB,87E0,87E5,87EA,87EE,87F9,87FE,8803,880A,8813,8815,8816,881B,8821,8822,8832,8839,883C,8840,8844,8845,884C,884D,8854,8857,8859,8861,8862,8863,8864,8865,8868,8869,886B,886C,886E,8870,8872,8877,887D,887E,887F,8881,8882,8884,8885,8888,888B,888D,8892,8896,889C,88A2,88A4,88AB,88AD,88B1,88B7,88BC,88C1,88C2,88C5,88C6,88C9,88CE,88D2,88D4,88D5,88D8,88D9,88DF,88E2,88E3,88E4,88E5,88E8,88F0,88F1,88F3,88F4,88F8,88F9,88FC,88FE,8902,890A,8910,8912,8913,8919,891A,891B,8921,8925,892A,892B,8930,8934,8936,8941,8944,895E,895F,8966,897B,897F,8981,8983,8986,89C1,89C2,89C4,89C5,89C6,89C7,89C8,89C9,89CA,89CB,89CC,89CE,89CF,89D0,89D1,89D2,89D6,89DA,89DC,89DE,89E3,89E5,89E6,89EB,89EF,89F3,8A00,8A07,8A3E,8A48,8A79,8A89,8A8A,8A93,8B07,8B26,8B66,8B6C,8BA0,8BA1,8BA2,8BA3,8BA4,8BA5,8BA6,8BA7,8BA8,8BA9,8BAA,8BAB,8BAD,8BAE,8BAF,8BB0,8BB2,8BB3,8BB4,8BB5,8BB6,8BB7,8BB8,8BB9,8BBA,8BBC,8BBD,8BBE,8BBF,8BC0,8BC1,8BC2,8BC3,8BC4,8BC5,8BC6,8BC8,8BC9,8BCA,8BCB,8BCC,8BCD,8BCE,8BCF,8BD1,8BD2,8BD3,8BD4,8BD5,8BD6,8BD7,8BD8,8BD9,8BDA,8BDB,8BDC,8BDD,8BDE,8BDF,8BE0,8BE1,8BE2,8BE3,8BE4,8BE5,8BE6,8BE7,8BE8,8BE9,8BEB,8BEC,8BED,8BEE,8BEF,8BF0,8BF1,8BF2,8BF3,8BF4,8BF5,8BF6,8BF7,8BF8,8BF9,8BFA,8BFB,8BFC,8BFD,8BFE,8BFF,8C00,8C01,8C02,8C03,8C04,8C05,8C06,8C07,8C08,8C0A,8C0B,8C0C,8C0D,8C0E,8C0F,8C10,8C11,8C12,8C13,8C14,8C15,8C16,8C17,8C18,8C19,8C1A,8C1B,8C1C,8C1D,8C1F,8C20,8C21,8C22,8C23,8C24,8C25,8C26,8C27,8C28,8C29,8C2A,8C2B,8C2C,8C2D,8C2E,8C2F,8C30,8C31,8C32,8C33,8C34,8C35,8C36,8C37,8C41,8C46,8C47,8C49,8C4C,8C55,8C5A,8C61,8C62,8C6A,8C6B,8C73,8C78,8C79,8C7A,8C82,8C85,8C89,8C8A,8C8C,8C94,8C98,8D1D,8D1E,8D1F,8D21,8D22,8D23,8D24,8D25,8D26,8D27,8D28,8D29,8D2A,8D2B,8D2C,8D2D,8D2E,8D2F,8D30,8D31,8D32,8D33,8D34,8D35,8D36,8D37,8D38,8D39,8D3A,8D3B,8D3C,8D3D,8D3E,8D3F,8D40,8D41,8D42,8D43,8D44,8D45,8D46,8D47,8D48,8D49,8D4A,8D4B,8D4C,8D4D,8D4E,8D4F,8D50,8D53,8D54,8D55,8D56,8D58,8D59,8D5A,8D5B,8D5C,8D5D,8D5E,8D60,8D61,8D62,8D63,8D64,8D66,8D67,8D6B,8D6D,8D70,8D73,8D74,8D75,8D76,8D77,8D81,8D84,8D85,8D8A,8D8B,8D91,8D94,8D9F,8DA3,8DB1,8DB3,8DB4,8DB5,8DB8,8DBA,8DBC,8DBE,8DBF,8DC3,8DC4,8DC6,8DCB,8DCC,8DCE,8DCF,8DD1,8DD6,8DD7,8DDA,8DDB,8DDD,8DDE,8DDF,8DE3,8DE4,8DE8,8DEA,8DEB,8DEC,8DEF,8DF3,8DF5,8DF7,8DF8,8DF9,8DFA,8DFB,8DFD,8E05,8E09,8E0A,8E0C,8E0F,8E14,8E1D,8E1E,8E1F,8E22,8E23,8E29,8E2A,8E2C,8E2E,8E2F,8E31,8E35,8E39,8E3A,8E3D,8E40,8E41,8E42,8E44,8E47,8E48,8E49,8E4A,8E4B,8E51,8E52,8E59,8E66,8E69,8E6C,8E6D,8E6F,8E70,8E72,8E74,8E76,8E7C,8E7F,8E81,8E85,8E87,8E8F,8E90,8E94,8E9C,8E9E,8EAB,8EAC,8EAF,8EB2,8EBA,8ECE,8F66,8F67,8F68,8F69,8F6B,8F6C,8F6D,8F6E,8F6F,8F70,8F71,8F72,8F73,8F74,8F75,8F76,8F77,8F78,8F79,8F7A,8F7B,8F7C,8F7D,8F7E,8F7F,8F81,8F82,8F83,8F84,8F85,8F86,8F87,8F88,8F89,8F8A,8F8B,8F8D,8F8E,8F8F,8F90,8F91,8F93,8F94,8F95,8F96,8F97,8F98,8F99,8F9A,8F9B,8F9C,8F9E,8F9F,8FA3,8FA8,8FA9,8FAB,8FB0,8FB1,8FB6,8FB9,8FBD,8FBE,8FC1,8FC2,8FC4,8FC5,8FC7,8FC8,8FCE,8FD0,8FD1,8FD3,8FD4,8FD5,8FD8,8FD9,8FDB,8FDC,8FDD,8FDE,8FDF,8FE2,8FE4,8FE5,8FE6,8FE8,8FE9,8FEA,8FEB,8FED,8FEE,8FF0,8FF3,8FF7,8FF8,8FF9,8FFD,9000,9001,9002,9003,9004,9005,9006,9009,900A,900B,900D,900F,9010,9011,9012,9014,9016,9017,901A,901B,901D,901E,901F,9020,9021,9022,9026,902D,902E,902F,9035,9036,9038,903B,903C,903E,9041,9042,9044,9047,904D,904F,9050,9051,9052,9053,9057,9058,905B,9062,9063,9065,9068,906D,906E,9074,9075,907D,907F,9080,9082,9083,9088,908B,9091,9093,9095,9097,9099,909B,909D,90A1,90A2,90A3,90A6,90AA,90AC,90AE,90AF,90B0,90B1,90B3,90B4,90B5,90B6,90B8,90B9,90BA,90BB,90BE,90C1,90C4,90C5,90C7,90CA,90CE,90CF,90D0,90D1,90D3,90D7,90DB,90DC,90DD,90E1,90E2,90E6,90E7,90E8,90EB,90ED,90EF,90F4,90F8,90FD,90FE,9102,9104,9119,911E,9122,9123,912F,9131,9139,9143,9146,9149,914A,914B,914C,914D,914E,914F,9150,9152,9157,915A,915D,915E,9161,9162,9163,9164,9165,9169,916A,916C,916E,916F,9170,9171,9172,9174,9175,9176,9177,9178,9179,917D,917E,917F,9185,9187,9189,918B,918C,918D,9190,9191,9192,919A,919B,91A2,91A3,91AA,91AD,91AE,91AF,91B4,91B5,91BA,91C7,91C9,91CA,91CC,91CD,91CE,91CF,91D1,91DC,9274,928E,92AE,92C8,933E,936A,938F,93CA,93D6,943E,946B,9485,9486,9487,9488,9489,948A,948B,948C,948D,948E,948F,9490,9492,9493,9494,9495,9497,9499,949A,949B,949C,949D,949E,949F,94A0,94A1,94A2,94A3,94A4,94A5,94A6,94A7,94A8,94A9,94AA,94AB,94AC,94AD,94AE,94AF,94B0,94B1,94B2,94B3,94B4,94B5,94B6,94B7,94B8,94B9,94BA,94BB,94BC,94BD,94BE,94BF,94C0,94C1,94C2,94C3,94C4,94C5,94C6,94C8,94C9,94CA,94CB,94CC,94CD,94CE,94D0,94D1,94D2,94D5,94D6,94D7,94D8,94D9,94DB,94DC,94DD,94DE,94DF,94E0,94E1,94E2,94E3,94E4,94E5,94E7,94E8,94E9,94EA,94EB,94EC,94ED,94EE,94EF,94F0,94F1,94F2,94F3,94F4,94F5,94F6,94F7,94F8,94F9,94FA,94FC,94FD,94FE,94FF,9500,9501,9502,9503,9504,9505,9506,9507,9508,9509,950A,950B,950C,950D,950E,950F,9510,9511,9512,9513,9514,9515,9516,9517,9518,9519,951A,951B,951D,951E,951F,9521,9522,9523,9524,9525,9526,9528,9529,952A,952B,952C,952D,952E,952F,9530,9531,9532,9534,9535,9536,9537,9538,9539,953A,953B,953C,953E,953F,9540,9541,9542,9544,9545,9546,9547,9549,954A,954C,954D,954E,954F,9550,9551,9552,9553,9554,9556,9557,9558,9559,955B,955C,955D,955E,955F,9561,9562,9563,9564,9565,9566,9567,9568,9569,956A,956B,956C,956D,956F,9570,9571,9572,9573,9576,957F,95E8,95E9,95EA,95EB,95ED,95EE,95EF,95F0,95F1,95F2,95F3,95F4,95F5,95F6,95F7,95F8,95F9,95FA,95FB,95FC,95FD,95FE,9600,9601,9602,9603,9604,9605,9606,9608,9609,960A,960B,960C,960D,960E,960F,9610,9611,9612,9614,9615,9616,9617,9619,961A,961C,961D,961F,9621,9622,962A,962E,9631,9632,9633,9634,9635,9636,963B,963C,963D,963F,9640,9642,9644,9645,9646,9647,9648,9649,964B,964C,964D,9650,9654,9655,965B,965F,9661,9662,9664,9667,9668,9669,966A,966C,9672,9674,9675,9676,9677,9685,9686,9688,968B,968D,968F,9690,9694,9697,9698,9699,969C,96A7,96B0,96B3,96B6,96B9,96BC,96BD,96BE,96C0,96C1,96C4,96C5,96C6,96C7,96C9,96CC,96CD,96CE,96CF,96D2,96D5,96E0,96E8,96E9,96EA,96EF,96F3,96F6,96F7,96F9,96FE,9700,9701,9704,9706,9707,9708,9709,970D,970E,970F,9713,9716,971C,971E,972A,972D,9730,9732,9738,9739,973E,9752,9753,9756,9759,975B,975E,9760,9761,9762,9765,9769,9773,9774,9776,977C,9785,978B,978D,9791,9792,9794,9798,97A0,97A3,97AB,97AD,97AF,97B2,97B4,97E6,97E7,97E9,97EA,97EB,97EC,97ED,97F3,97F5,97F6,9875,9876,9877,9878,9879,987A,987B,987C,987D,987E,987F,9880,9881,9882,9883,9884,9885,9886,9887,9888,9889,988A,988C,988D,988F,9890,9891,9893,9894,9896,9897,9898,989A,989B,989C,989D,989E,989F,98A0,98A1,98A2,98A4,98A5,98A6,98A7,98CE,98D1,98D2,98D3,98D5,98D8,98D9,98DA,98DE,98DF,98E7,98E8,990D,9910,992E,9954,9955,9963,9965,9967,9968,9969,996A,996B,996C,996D,996E,996F,9970,9971,9972,9974,9975,9976,9977,997A,997C,997D,997F,9980,9981,9984,9985,9986,9987,9988,998A,998B,998D,998F,9990,9991,9992,9993,9994,9995,9996,9997,9998,9999,99A5,99A8,9A6C,9A6D,9A6E,9A6F,9A70,9A71,9A73,9A74,9A75,9A76,9A77,9A78,9A79,9A7A,9A7B,9A7C,9A7D,9A7E,9A7F,9A80,9A81,9A82,9A84,9A85,9A86,9A87,9A88,9A8A,9A8B,9A8C,9A8F,9A90,9A91,9A92,9A93,9A96,9A97,9A98,9A9A,9A9B,9A9C,9A9D,9A9E,9A9F,9AA0,9AA1,9AA2,9AA3,9AA4,9AA5,9AA7,9AA8,9AB0,9AB1,9AB6,9AB7,9AB8,9ABA,9ABC,9AC0,9AC1,9AC2,9AC5,9ACB,9ACC,9AD1,9AD3,9AD8,9ADF,9AE1,9AE6,9AEB,9AED,9AEF,9AF9,9AFB,9B03,9B08,9B0F,9B13,9B1F,9B23,9B2F,9B32,9B3B,9B3C,9B41,9B42,9B43,9B44,9B45,9B47,9B48,9B49,9B4D,9B4F,9B51,9B54,9C7C,9C7F,9C81,9C82,9C85,9C86,9C87,9C88,9C8B,9C8D,9C8E,9C90,9C91,9C92,9C94,9C95,9C9A,9C9B,9C9C,9C9E,9C9F,9CA0,9CA1,9CA2,9CA3,9CA4,9CA5,9CA6,9CA7,9CA8,9CA9,9CAB,9CAD,9CAE,9CB0,9CB1,9CB2,9CB3,9CB4,9CB5,9CB6,9CB7,9CB8,9CBA,9CBB,9CBC,9CBD,9CC3,9CC4,9CC5,9CC6,9CC7,9CCA,9CCB,9CCC,9CCD,9CCE,9CCF,9CD0,9CD3,9CD4,9CD5,9CD6,9CD7,9CD8,9CD9,9CDC,9CDD,9CDE,9CDF,9CE2,9E1F,9E20,9E21,9E22,9E23,9E25,9E26,9E28,9E29,9E2A,9E2B,9E2C,9E2D,9E2F,9E31,9E32,9E33,9E35,9E36,9E37,9E38,9E39,9E3A,9E3D,9E3E,9E3F,9E41,9E42,9E43,9E44,9E45,9E46,9E47,9E48,9E49,9E4A,9E4B,9E4C,9E4E,9E4F,9E51,9E55,9E57,9E58,9E5A,9E5B,9E5C,9E5E,9E63,9E64,9E66,9E67,9E68,9E69,9E6A,9E6B,9E6C,9E6D,9E70,9E71,9E73,9E7E,9E7F,9E82,9E87,9E88,9E8B,9E92,9E93,9E9D,9E9F,9EA6,9EB4,9EB8,9EBB,9EBD,9EBE,9EC4,9EC9,9ECD,9ECE,9ECF,9ED1,9ED4,9ED8,9EDB,9EDC,9EDD,9EDF,9EE0,9EE2,9EE5,9EE7,9EE9,9EEA,9EEF,9EF9,9EFB,9EFC,9EFE,9F0B,9F0D,9F0E,9F10,9F13,9F17,9F19,9F20,9F22,9F2C,9F2F,9F37,9F39,9F3B,9F3D,9F3E,9F44,9F50,9F51,9F7F,9F80,9F83,9F84,9F85,9F86,9F87,9F88,9F89,9F8A,9F8B,9F8C,9F99,9F9A,9F9B,9F9F,9FA0,FF01,FF02,FF03,FF04,FF05,FF06,FF07,FF08,FF09,FF0A,FF0B,FF0C,FF0D,FF0E,FF0F,FF10,FF11,FF12,FF13,FF14,FF15,FF16,FF17,FF18,FF19,FF1A,FF1B,FF1C,FF1D,FF1E,FF1F,FF20,FF21,FF22,FF23,FF24,FF25,FF26,FF27,FF28,FF29,FF2A,FF2B,FF2C,FF2D,FF2E,FF2F,FF30,FF31,FF32,FF33,FF34,FF35,FF36,FF37,FF38,FF39,FF3A,FF3B,FF3C,FF3D,FF3E,FF3F,FF40,FF41,FF42,FF43,FF44,FF45,FF46,FF47,FF48,FF49,FF4A,FF4B,FF4C,FF4D,FF4E,FF4F,FF50,FF51,FF52,FF53,FF54,FF55,FF56,FF57,FF58,FF59,FF5A,FF5B,FF5C,FF5D,FF5E,FFE0,FFE1,FFE3,FFE5';
		}

		var AnsicodeChr = function () {
			return 'A1E8,A1EC,A1A7,A1E3,A1C0,A1A4,A1C1,A8A4,A8A2,A8A8,A8A6,A8BA,A8AC,A8AA,A8B0,A8AE,A1C2,A8B4,A8B2,A8B9,A8A1,A8A5,A8A7,A8A9,A8AD,A8B1,A8A3,A8AB,A8AF,A8B3,A8B5,A8B6,A8B7,A8B8,A1A6,A1A5,A6A1,A6A2,A6A3,A6A4,A6A5,A6A6,A6A7,A6A8,A6A9,A6AA,A6AB,A6AC,A6AD,A6AE,A6AF,A6B0,A6B1,A6B2,A6B3,A6B4,A6B5,A6B6,A6B7,A6B8,A6C1,A6C2,A6C3,A6C4,A6C5,A6C6,A6C7,A6C8,A6C9,A6CA,A6CB,A6CC,A6CD,A6CE,A6CF,A6D0,A6D1,A6D2,A6D3,A6D4,A6D5,A6D6,A6D7,A6D8,A7A7,A7A1,A7A2,A7A3,A7A4,A7A5,A7A6,A7A8,A7A9,A7AA,A7AB,A7AC,A7AD,A7AE,A7AF,A7B0,A7B1,A7B2,A7B3,A7B4,A7B5,A7B6,A7B7,A7B8,A7B9,A7BA,A7BB,A7BC,A7BD,A7BE,A7BF,A7C0,A7C1,A7D1,A7D2,A7D3,A7D4,A7D5,A7D6,A7D8,A7D9,A7DA,A7DB,A7DC,A7DD,A7DE,A7DF,A7E0,A7E1,A7E2,A7E3,A7E4,A7E5,A7E6,A7E7,A7E8,A7E9,A7EA,A7EB,A7EC,A7ED,A7EE,A7EF,A7F0,A7F1,A7D7,A1AA,A1AC,A1AE,A1AF,A1B0,A1B1,A1AD,A1EB,A1E4,A1E5,A1F9,A1E6,A1ED,A2F1,A2F2,A2F3,A2F4,A2F5,A2F6,A2F7,A2F8,A2F9,A2FA,A2FB,A2FC,A1FB,A1FC,A1FA,A1FD,A1CA,A1C7,A1C6,A1CC,A1D8,A1DE,A1CF,A1CE,A1C4,A1C5,A1C9,A1C8,A1D2,A1D3,A1E0,A1DF,A1C3,A1CB,A1D7,A1D6,A1D5,A1D9,A1D4,A1DC,A1DD,A1DA,A1DB,A1D1,A1CD,A1D0,A2D9,A2DA,A2DB,A2DC,A2DD,A2DE,A2DF,A2E0,A2E1,A2E2,A2C5,A2C6,A2C7,A2C8,A2C9,A2CA,A2CB,A2CC,A2CD,A2CE,A2CF,A2D0,A2D1,A2D2,A2D3,A2D4,A2D5,A2D6,A2D7,A2D8,A2B1,A2B2,A2B3,A2B4,A2B5,A2B6,A2B7,A2B8,A2B9,A2BA,A2BB,A2BC,A2BD,A2BE,A2BF,A2C0,A2C1,A2C2,A2C3,A2C4,A9A4,A9A5,A9A6,A9A7,A9A8,A9A9,A9AA,A9AB,A9AC,A9AD,A9AE,A9AF,A9B0,A9B1,A9B2,A9B3,A9B4,A9B5,A9B6,A9B7,A9B8,A9B9,A9BA,A9BB,A9BC,A9BD,A9BE,A9BF,A9C0,A9C1,A9C2,A9C3,A9C4,A9C5,A9C6,A9C7,A9C8,A9C9,A9CA,A9CB,A9CC,A9CD,A9CE,A9CF,A9D0,A9D1,A9D2,A9D3,A9D4,A9D5,A9D6,A9D7,A9D8,A9D9,A9DA,A9DB,A9DC,A9DD,A9DE,A9DF,A9E0,A9E1,A9E2,A9E3,A9E4,A9E5,A9E6,A9E7,A9E8,A9E9,A9EA,A9EB,A9EC,A9ED,A9EE,A9EF,A1F6,A1F5,A1F8,A1F7,A1F4,A1F3,A1F0,A1F2,A1F1,A1EF,A1EE,A1E2,A1E1,A1A1,A1A2,A1A3,A1A8,A1A9,A1B4,A1B5,A1B6,A1B7,A1B8,A1B9,A1BA,A1BB,A1BE,A1BF,A1FE,A1B2,A1B3,A1BC,A1BD,A4A1,A4A2,A4A3,A4A4,A4A5,A4A6,A4A7,A4A8,A4A9,A4AA,A4AB,A4AC,A4AD,A4AE,A4AF,A4B0,A4B1,A4B2,A4B3,A4B4,A4B5,A4B6,A4B7,A4B8,A4B9,A4BA,A4BB,A4BC,A4BD,A4BE,A4BF,A4C0,A4C1,A4C2,A4C3,A4C4,A4C5,A4C6,A4C7,A4C8,A4C9,A4CA,A4CB,A4CC,A4CD,A4CE,A4CF,A4D0,A4D1,A4D2,A4D3,A4D4,A4D5,A4D6,A4D7,A4D8,A4D9,A4DA,A4DB,A4DC,A4DD,A4DE,A4DF,A4E0,A4E1,A4E2,A4E3,A4E4,A4E5,A4E6,A4E7,A4E8,A4E9,A4EA,A4EB,A4EC,A4ED,A4EE,A4EF,A4F0,A4F1,A4F2,A4F3,A5A1,A5A2,A5A3,A5A4,A5A5,A5A6,A5A7,A5A8,A5A9,A5AA,A5AB,A5AC,A5AD,A5AE,A5AF,A5B0,A5B1,A5B2,A5B3,A5B4,A5B5,A5B6,A5B7,A5B8,A5B9,A5BA,A5BB,A5BC,A5BD,A5BE,A5BF,A5C0,A5C1,A5C2,A5C3,A5C4,A5C5,A5C6,A5C7,A5C8,A5C9,A5CA,A5CB,A5CC,A5CD,A5CE,A5CF,A5D0,A5D1,A5D2,A5D3,A5D4,A5D5,A5D6,A5D7,A5D8,A5D9,A5DA,A5DB,A5DC,A5DD,A5DE,A5DF,A5E0,A5E1,A5E2,A5E3,A5E4,A5E5,A5E6,A5E7,A5E8,A5E9,A5EA,A5EB,A5EC,A5ED,A5EE,A5EF,A5F0,A5F1,A5F2,A5F3,A5F4,A5F5,A5F6,A8C5,A8C6,A8C7,A8C8,A8C9,A8CA,A8CB,A8CC,A8CD,A8CE,A8CF,A8D0,A8D1,A8D2,A8D3,A8D4,A8D5,A8D6,A8D7,A8D8,A8D9,A8DA,A8DB,A8DC,A8DD,A8DE,A8DF,A8E0,A8E1,A8E2,A8E3,A8E4,A8E5,A8E6,A8E7,A8E8,A8E9,A2E5,A2E6,A2E7,A2E8,A2E9,A2EA,A2EB,A2EC,A2ED,A2EE,D2BB,B6A1,C6DF,CDF2,D5C9,C8FD,C9CF,CFC2,D8A2,B2BB,D3EB,D8A4,B3F3,D7A8,C7D2,D8A7,CAC0,C7F0,B1FB,D2B5,B4D4,B6AB,CBBF,D8A9,B6AA,C1BD,D1CF,C9A5,D8AD,B8F6,D1BE,E3DC,D6D0,B7E1,B4AE,C1D9,D8BC,CDE8,B5A4,CEAA,D6F7,C0F6,BED9,D8AF,C4CB,BEC3,D8B1,C3B4,D2E5,D6AE,CEDA,D5A7,BAF5,B7A6,C0D6,C6B9,C5D2,C7C7,B9D4,B3CB,D2D2,D8BF,BEC5,C6F2,D2B2,CFB0,CFE7,CAE9,D8C0,C2F2,C2D2,C8E9,C7AC,C1CB,D3E8,D5F9,CAC2,B6FE,D8A1,D3DA,BFF7,D4C6,BBA5,D8C1,CEE5,BEAE,D8A8,D1C7,D0A9,D8BD,D9EF,CDF6,BFBA,BDBB,BAA5,D2E0,B2FA,BAE0,C4B6,CFED,BEA9,CDA4,C1C1,C7D7,D9F1,D9F4,C8CB,D8E9,D2DA,CAB2,C8CA,D8EC,D8EA,D8C6,BDF6,C6CD,B3F0,D8EB,BDF1,BDE9,C8D4,B4D3,C2D8,B2D6,D7D0,CACB,CBFB,D5CC,B8B6,CFC9,D9DA,D8F0,C7AA,D8EE,B4FA,C1EE,D2D4,D8ED,D2C7,D8EF,C3C7,D1F6,D6D9,D8F2,D8F5,BCFE,BCDB,C8CE,B7DD,B7C2,C6F3,D8F8,D2C1,CEE9,BCBF,B7FC,B7A5,D0DD,D6DA,D3C5,BBEF,BBE1,D8F1,C9A1,CEB0,B4AB,D8F3,C9CB,D8F6,C2D7,D8F7,CEB1,D8F9,B2AE,B9C0,D9A3,B0E9,C1E6,C9EC,CBC5,CBC6,D9A4,B5E8,B5AB,CEBB,B5CD,D7A1,D7F4,D3D3,CCE5,BACE,D9A2,D9DC,D3E0,D8FD,B7F0,D7F7,D8FE,D8FA,D9A1,C4E3,D3B6,D8F4,D9DD,D8FB,C5E5,C0D0,D1F0,B0DB,BCD1,D9A6,D9A5,D9AC,D9AE,D9AB,CAB9,D9A9,D6B6,B3DE,D9A8,C0FD,CACC,D9AA,D9A7,D9B0,B6B1,B9A9,D2C0,CFC0,C2C2,BDC4,D5EC,B2E0,C7C8,BFEB,D9AD,D9AF,CEEA,BAEE,C7D6,B1E3,B4D9,B6ED,D9B4,BFA1,D9DE,C7CE,C0FE,D9B8,CBD7,B7FD,D9B5,D9B7,B1A3,D3E1,D9B9,D0C5,D9B6,D9B1,D9B2,C1A9,D9B3,BCF3,D0DE,B8A9,BEE3,D9BD,D9BA,B0B3,D9C2,D9C4,B1B6,D9BF,B5B9,BEF3,CCC8,BAF2,D2D0,D9C3,BDE8,B3AB,D9C5,BEEB,D9C6,D9BB,C4DF,D9BE,D9C1,D9C0,D5AE,D6B5,C7E3,D9C8,BCD9,D9CA,D9BC,D9CB,C6AB,D9C9,D7F6,CDA3,BDA1,D9CC,C5BC,CDB5,D9CD,D9C7,B3A5,BFFE,B8B5,C0FC,B0F8,B4F6,D9CE,D9CF,B4A2,D9D0,B4DF,B0C1,D9D1,C9B5,CFF1,D9D2,C1C5,D9D6,C9AE,D9D5,D9D4,D9D7,CBDB,BDA9,C6A7,D9D3,D9D8,D9D9,C8E5,C0DC,B6F9,D8A3,D4CA,D4AA,D0D6,B3E4,D5D7,CFC8,B9E2,BFCB,C3E2,B6D2,CDC3,D9EE,D9F0,B5B3,B6B5,BEA4,C8EB,C8AB,B0CB,B9AB,C1F9,D9E2,C0BC,B9B2,B9D8,D0CB,B1F8,C6E4,BEDF,B5E4,D7C8,D1F8,BCE6,CADE,BCBD,D9E6,D8E7,C4DA,B8D4,C8BD,B2E1,D4D9,C3B0,C3E1,DAA2,C8DF,D0B4,BEFC,C5A9,B9DA,DAA3,D4A9,DAA4,D9FB,B6AC,B7EB,B1F9,D9FC,B3E5,BEF6,BFF6,D2B1,C0E4,B6B3,D9FE,D9FD,BEBB,C6E0,D7BC,DAA1,C1B9,B5F2,C1E8,BCF5,B4D5,C1DD,C4FD,BCB8,B7B2,B7EF,D9EC,C6BE,BFAD,BBCB,B5CA,DBC9,D0D7,CDB9,B0BC,B3F6,BBF7,DBCA,BAAF,D4E4,B5B6,B5F3,D8D6,C8D0,B7D6,C7D0,D8D7,BFAF,DBBB,D8D8,D0CC,BBAE,EBBE,C1D0,C1F5,D4F2,B8D5,B4B4,B3F5,C9BE,C5D0,C5D9,C0FB,B1F0,D8D9,B9CE,B5BD,D8DA,D6C6,CBA2,C8AF,C9B2,B4CC,BFCC,B9F4,D8DB,D8DC,B6E7,BCC1,CCEA,CFF7,D8DD,C7B0,B9D0,BDA3,CCDE,C6CA,D8E0,D8DE,D8DF,B0FE,BEE7,CAA3,BCF4,B8B1,B8EE,D8E2,BDCB,D8E4,D8E3,C5FC,D8E5,D8E6,C1A6,C8B0,B0EC,B9A6,BCD3,CEF1,DBBD,C1D3,B6AF,D6FA,C5AC,BDD9,DBBE,DBBF,C0F8,BEA2,C0CD,DBC0,CAC6,B2AA,D3C2,C3E3,D1AB,DBC2,C0D5,DBC3,BFB1,C4BC,C7DA,DBC4,D9E8,C9D7,B9B4,CEF0,D4C8,B0FC,B4D2,D0D9,D9E9,DECB,D9EB,D8B0,BBAF,B1B1,B3D7,D8CE,D4D1,BDB3,BFEF,CFBB,D8D0,B7CB,D8D1,C6A5,C7F8,D2BD,D8D2,C4E4,CAAE,C7A7,D8A6,C9FD,CEE7,BBDC,B0EB,BBAA,D0AD,B1B0,D7E4,D7BF,B5A5,C2F4,C4CF,B2A9,B2B7,B1E5,DFB2,D5BC,BFA8,C2AC,D8D5,C2B1,D8D4,CED4,DAE0,CEC0,D8B4,C3AE,D3A1,CEA3,BCB4,C8B4,C2D1,BEED,D0B6,DAE1,C7E4,B3A7,B6F2,CCFC,C0FA,C0F7,D1B9,D1E1,D8C7,B2DE,C0E5,BAF1,D8C8,D4AD,CFE1,D8C9,D8CA,CFC3,B3F8,BEC7,D8CB,DBCC,C8A5,CFD8,C8FE,B2CE,D3D6,B2E6,BCB0,D3D1,CBAB,B7B4,B7A2,CAE5,C8A1,CADC,B1E4,D0F0,C5D1,DBC5,B5FE,BFDA,B9C5,BEE4,C1ED,DFB6,DFB5,D6BB,BDD0,D5D9,B0C8,B6A3,BFC9,CCA8,DFB3,CAB7,D3D2,D8CF,D2B6,BAC5,CBBE,CCBE,DFB7,B5F0,DFB4,D3F5,B3D4,B8F7,DFBA,BACF,BCAA,B5F5,CDAC,C3FB,BAF3,C0F4,CDC2,CFF2,DFB8,CFC5,C2C0,DFB9,C2F0,BEFD,C1DF,CDCC,D2F7,B7CD,DFC1,DFC4,B7F1,B0C9,B6D6,B7D4,BAAC,CCFD,BFD4,CBB1,C6F4,D6A8,DFC5,CEE2,B3B3,CEFC,B4B5,CEC7,BAF0,CEE1,D1BD,DFC0,B4F4,B3CA,B8E6,DFBB,C4C5,DFBC,DFBD,DFBE,C5BB,DFBF,DFC2,D4B1,DFC3,C7BA,CED8,C4D8,DFCA,DFCF,D6DC,DFC9,DFDA,CEB6,BAC7,DFCE,DFC8,C5DE,C9EB,BAF4,C3FC,BED7,DFC6,DFCD,C5D8,D5A6,BACD,BECC,D3BD,B8C0,D6E4,DFC7,B9BE,BFA7,C1FC,DFCB,DFCC,DFD0,DFDB,DFE5,DFD7,DFD6,D7C9,DFE3,DFE4,E5EB,D2A7,DFD2,BFA9,D4DB,BFC8,DFD4,CFCC,DFDD,D1CA,DFDE,B0A7,C6B7,DFD3,BAE5,B6DF,CDDB,B9FE,D4D5,DFDF,CFEC,B0A5,DFE7,DFD1,D1C6,DFD5,DFD8,DFD9,DFDC,BBA9,DFE0,DFE1,DFE2,DFE6,DFE8,D3B4,B8E7,C5B6,DFEA,C9DA,C1A8,C4C4,BFDE,CFF8,D5DC,DFEE,B2B8,BADF,DFEC,DBC1,D1E4,CBF4,B4BD,B0A6,DFF1,CCC6,DFF2,DFED,DFE9,DFEB,DFEF,DFF0,BBBD,DFF3,DFF4,BBA3,CADB,CEA8,E0A7,B3AA,E0A6,E0A1,DFFE,CDD9,DFFC,DFFA,BFD0,D7C4,C9CC,DFF8,B0A1,DFFD,DFFB,E0A2,E0A8,B7C8,C6A1,C9B6,C0B2,DFF5,C5BE,D8C4,DFF9,C4F6,E0A3,E0A4,E0A5,D0A5,E0B4,CCE4,E0B1,BFA6,E0AF,CEB9,E0AB,C9C6,C0AE,E0AE,BAED,BAB0,E0A9,DFF6,E0B3,E0B8,B4AD,E0B9,CFB2,BAC8,E0B0,D0FA,E0AC,D4FB,DFF7,C5E7,E0AD,D3F7,E0B6,E0B7,E0C4,D0E1,E0BC,E0C9,E0CA,E0BE,E0AA,C9A4,E0C1,E0B2,CAC8,E0C3,E0B5,CECB,CBC3,E0CD,E0C6,E0C2,E0CB,E0BA,E0BF,E0C0,E0C5,E0C7,E0C8,E0CC,E0BB,CBD4,E0D5,E0D6,E0D2,E0D0,BCCE,E0D1,B8C2,D8C5,D0EA,C2EF,E0CF,E0BD,E0D4,E0D3,E0D7,E0DC,E0D8,D6F6,B3B0,D7EC,CBBB,E0DA,CEFB,BAD9,E0E1,E0DD,D2AD,E0E2,E0DB,E0D9,E0DF,E0E0,E0DE,E0E4,C6F7,D8AC,D4EB,E0E6,CAC9,E0E5,B8C1,E0E7,E0E8,E0E9,E0E3,BABF,CCE7,E0EA,CFF9,E0EB,C8C2,BDC0,C4D2,E0EC,E0ED,C7F4,CBC4,E0EE,BBD8,D8B6,D2F2,E0EF,CDC5,B6DA,E0F1,D4B0,C0A7,B4D1,CEA7,E0F0,E0F2,B9CC,B9FA,CDBC,E0F3,C6D4,E0F4,D4B2,C8A6,E0F6,E0F5,E0F7,CDC1,CAA5,D4DA,DBD7,DBD9,DBD8,B9E7,DBDC,DBDD,B5D8,DBDA,DBDB,B3A1,DBDF,BBF8,D6B7,DBE0,BEF9,B7BB,DBD0,CCAE,BFB2,BBB5,D7F8,BFD3,BFE9,BCE1,CCB3,DBDE,B0D3,CEEB,B7D8,D7B9,C6C2,C0A4,CCB9,DBE7,DBE1,C6BA,DBE3,DBE8,C5F7,DBEA,DBE9,BFC0,DBE6,DBE5,B4B9,C0AC,C2A2,DBE2,DBE4,D0CD,DBED,C0DD,DBF2,B6E2,DBF3,DBD2,B9B8,D4AB,DBEC,BFD1,DBF0,DBD1,B5E6,DBEB,BFE5,DBEE,DBF1,DBF9,B9A1,B0A3,C2F1,B3C7,DBEF,DBF8,C6D2,DBF4,DBF5,DBF7,DBF6,DBFE,D3F2,B2BA,DBFD,DCA4,DBFB,DBFA,DBFC,C5E0,BBF9,DCA3,DCA5,CCC3,B6D1,DDC0,DCA1,DCA2,C7B5,B6E9,DCA7,DCA6,DCA9,B1A4,B5CC,BFB0,D1DF,B6C2,DCA8,CBFA,EBF3,CBDC,CBFE,CCC1,C8FB,DCAA,CCEE,DCAB,DBD3,DCAF,DCAC,BEB3,CAFB,DCAD,C9CA,C4B9,C7BD,DCAE,D4F6,D0E6,C4AB,B6D5,DBD4,B1DA,DBD5,DBD6,BABE,C8C0,CABF,C8C9,D7B3,C9F9,BFC7,BAF8,D2BC,E2BA,B4A6,B1B8,B8B4,CFC4,D9E7,CFA6,CDE2,D9ED,B6E0,D2B9,B9BB,E2B9,E2B7,B4F3,CCEC,CCAB,B7F2,D8B2,D1EB,BABB,CAA7,CDB7,D2C4,BFE4,BCD0,B6E1,DEC5,DEC6,DBBC,D1D9,C6E6,C4CE,B7EE,B7DC,BFFC,D7E0,C6F5,B1BC,DEC8,BDB1,CCD7,DECA,DEC9,B5EC,C9DD,B0C2,C5AE,C5AB,C4CC,BCE9,CBFD,BAC3,E5F9,C8E7,E5FA,CDFD,D7B1,B8BE,C2E8,C8D1,E5FB,B6CA,BCCB,D1FD,E6A1,C3EE,E6A4,E5FE,E6A5,CDD7,B7C1,E5FC,E5FD,E6A3,C4DD,E6A8,E6A7,C3C3,C6DE,E6AA,C4B7,E6A2,CABC,BDE3,B9C3,E6A6,D0D5,CEAF,E6A9,E6B0,D2A6,BDAA,E6AD,E6AF,C0D1,D2CC,BCA7,E6B1,D2F6,D7CB,CDFE,CDDE,C2A6,E6AB,E6AC,BDBF,E6AE,E6B3,E6B2,E6B6,E6B8,C4EF,C4C8,BEEA,C9EF,E6B7,B6F0,C3E4,D3E9,E6B4,E6B5,C8A2,E6BD,E6B9,C6C5,CDF1,E6BB,E6BC,BBE9,E6BE,E6BA,C0B7,D3A4,E6BF,C9F4,E6C3,E6C4,D0F6,C3BD,C3C4,E6C2,E6C1,E6C7,CFB1,EBF4,E6CA,E6C5,BCDE,C9A9,BCB5,CFD3,E6C8,E6C9,E6CE,E6D0,E6D1,E6CB,B5D5,E6CC,E6CF,C4DB,E6C6,E6CD,E6D2,E6D4,E6D3,E6D5,D9F8,E6D6,E6D7,D7D3,E6DD,E6DE,BFD7,D4D0,D7D6,B4E6,CBEF,E6DA,D8C3,D7CE,D0A2,C3CF,E6DF,BCBE,B9C2,E6DB,D1A7,BAA2,C2CF,D8AB,CAEB,E5EE,E6DC,B7F5,C8E6,C4F5,E5B2,C4FE,CBFC,E5B3,D5AC,D3EE,CAD8,B0B2,CBCE,CDEA,BAEA,E5B5,E5B4,D7DA,B9D9,D6E6,B6A8,CDF0,D2CB,B1A6,CAB5,B3E8,C9F3,BFCD,D0FB,CAD2,E5B6,BBC2,CFDC,B9AC,D4D7,BAA6,D1E7,CFFC,BCD2,E5B7,C8DD,BFED,B1F6,CBDE,BCC5,BCC4,D2FA,C3DC,BFDC,B8BB,C3C2,BAAE,D4A2,C7DE,C4AF,B2EC,B9D1,E5BB,C1C8,D5AF,E5BC,E5BE,B4E7,B6D4,CBC2,D1B0,B5BC,CAD9,B7E2,C9E4,BDAB,CEBE,D7F0,D0A1,C9D9,B6FB,E6D8,BCE2,B3BE,C9D0,E6D9,B3A2,DECC,D3C8,DECD,D2A2,DECE,BECD,DECF,CAAC,D2FC,B3DF,E5EA,C4E1,BEA1,CEB2,C4F2,BED6,C6A8,B2E3,BED3,C7FC,CCEB,BDEC,CEDD,CABA,C6C1,E5EC,D0BC,D5B9,E5ED,CAF4,CDC0,C2C5,E5EF,C2C4,E5F0,E5F8,CDCD,C9BD,D2D9,E1A8,D3EC,CBEA,C6F1,E1AC,E1A7,E1A9,E1AA,E1AF,B2ED,E1AB,B8DA,E1AD,E1AE,E1B0,B5BA,E1B1,E1B3,E1B8,D1D2,E1B6,E1B5,C1EB,E1B7,D4C0,E1B2,E1BA,B0B6,E1B4,BFF9,E1B9,E1BB,E1BE,E1BC,D6C5,CFBF,E1BD,E1BF,C2CD,B6EB,D3F8,C7CD,B7E5,BEFE,E1C0,E1C1,E1C7,B3E7,C6E9,B4DE,D1C2,E1C8,E1C6,E1C5,E1C3,E1C2,B1C0,D5B8,E1C4,E1CB,E1CC,E1CA,EFFA,E1D3,E1D2,C7B6,E1C9,E1CE,E1D0,E1D4,E1D1,E1CD,E1CF,E1D5,E1D6,E1D7,E1D8,E1DA,E1DB,CEA1,E7DD,B4A8,D6DD,D1B2,B3B2,B9A4,D7F3,C7C9,BEDE,B9AE,CED7,B2EE,DBCF,BCBA,D2D1,CBC8,B0CD,CFEF,D9E3,BDED,B1D2,CAD0,B2BC,CBA7,B7AB,CAA6,CFA3,E0F8,D5CA,E0FB,E0FA,C5C1,CCFB,C1B1,E0F9,D6E3,B2AF,D6C4,B5DB,B4F8,D6A1,CFAF,B0EF,E0FC,E1A1,B3A3,E0FD,E0FE,C3B1,C3DD,E1A2,B7F9,BBCF,E1A3,C4BB,E1A4,E1A5,E1A6,B4B1,B8C9,C6BD,C4EA,B2A2,D0D2,E7DB,BBC3,D3D7,D3C4,B9E3,E2CF,D7AF,C7EC,B1D3,B4B2,E2D1,D0F2,C2AE,E2D0,BFE2,D3A6,B5D7,E2D2,B5EA,C3ED,B8FD,B8AE,C5D3,B7CF,E2D4,E2D3,B6C8,D7F9,CDA5,E2D8,E2D6,CAFC,BFB5,D3B9,E2D5,E2D7,C1AE,C0C8,E2DB,E2DA,C0AA,C1CE,E2DC,E2DD,E2DE,DBC8,D1D3,CDA2,BDA8,DEC3,D8A5,BFAA,DBCD,D2EC,C6FA,C5AA,DEC4,B1D7,DFAE,CABD,DFB1,B9AD,D2FD,B8A5,BAEB,B3DA,B5DC,D5C5,C3D6,CFD2,BBA1,E5F3,E5F2,E5F4,CDE4,C8F5,B5AF,C7BF,E5F6,ECB0,E5E6,B9E9,B5B1,C2BC,E5E8,E5E7,E5E9,D2CD,E1EA,D0CE,CDAE,D1E5,B2CA,B1EB,B1F2,C5ED,D5C3,D3B0,E1DC,E1DD,D2DB,B3B9,B1CB,CDF9,D5F7,E1DE,BEB6,B4FD,E1DF,BADC,E1E0,BBB2,C2C9,E1E1,D0EC,CDBD,E1E2,B5C3,C5C7,E1E3,E1E4,D3F9,E1E5,D1AD,E1E6,CEA2,E1E7,B5C2,E1E8,BBD5,D0C4,E2E0,B1D8,D2E4,E2E1,BCC9,C8CC,E2E3,ECFE,ECFD,DFAF,E2E2,D6BE,CDFC,C3A6,E3C3,D6D2,E2E7,E2E8,D3C7,E2EC,BFEC,E2ED,E2E5,B3C0,C4EE,E2EE,D0C3,BAF6,E2E9,B7DE,BBB3,CCAC,CBCB,E2E4,E2E6,E2EA,E2EB,E2F7,E2F4,D4F5,E2F3,C5AD,D5FA,C5C2,B2C0,E2EF,E2F2,C1AF,CBBC,B5A1,E2F9,BCB1,E2F1,D0D4,D4B9,E2F5,B9D6,E2F6,C7D3,E2F0,D7DC,EDA1,E2F8,EDA5,E2FE,CAD1,C1B5,BBD0,BFD6,BAE3,CBA1,EDA6,EDA3,EDA2,BBD6,EDA7,D0F4,EDA4,BADE,B6F7,E3A1,B6B2,CCF1,B9A7,CFA2,C7A1,BFD2,B6F1,E2FA,E2FB,E2FD,E2FC,C4D5,E3A2,D3C1,E3A7,C7C4,CFA4,E3A9,BAB7,E3A8,BBDA,E3A3,E3A4,E3AA,E3A6,CEF2,D3C6,BBBC,D4C3,C4FA,EDA8,D0FC,E3A5,C3F5,E3AD,B1AF,E3B2,BCC2,E3AC,B5BF,C7E9,E3B0,BEAA,CDEF,BBF3,CCE8,E3AF,E3B1,CFA7,E3AE,CEA9,BBDD,B5EB,BEE5,B2D2,B3CD,B1B9,E3AB,B2D1,B5AC,B9DF,B6E8,CFEB,E3B7,BBCC,C8C7,D0CA,E3B8,B3EE,EDA9,D3FA,D3E4,EDAA,E3B9,D2E2,E3B5,D3DE,B8D0,E3B3,E3B6,B7DF,E3B4,C0A2,E3BA,D4B8,B4C8,E3BB,BBC5,C9F7,C9E5,C4BD,EDAB,C2FD,BBDB,BFAE,CEBF,E3BC,BFB6,B1EF,D4F7,E3BE,EDAD,E3BF,BAA9,EDAC,E3BD,E3C0,BAB6,B6AE,D0B8,B0C3,EDAE,EDAF,C0C1,E3C1,C5B3,E3C2,DCB2,EDB0,B8EA,CEEC,EAA7,D0E7,CAF9,C8D6,CFB7,B3C9,CED2,BDE4,E3DE,BBF2,EAA8,D5BD,C6DD,EAA9,EAAA,EAAC,EAAB,EAAE,EAAD,BDD8,EAAF,C2BE,B4C1,B4F7,BBA7,ECE6,ECE5,B7BF,CBF9,B1E2,ECE7,C9C8,ECE8,ECE9,CAD6,DED0,B2C5,D4FA,C6CB,B0C7,B4F2,C8D3,CDD0,BFB8,BFDB,C7A4,D6B4,C0A9,DED1,C9A8,D1EF,C5A4,B0E7,B3B6,C8C5,B0E2,B7F6,C5FA,B6F3,D5D2,B3D0,BCBC,B3AD,BEF1,B0D1,D2D6,CAE3,D7A5,CDB6,B6B6,BFB9,D5DB,B8A7,C5D7,DED2,BFD9,C2D5,C7C0,BBA4,B1A8,C5EA,C5FB,CCA7,B1A7,B5D6,C4A8,DED3,D1BA,B3E9,C3F2,B7F7,D6F4,B5A3,B2F0,C4B4,C4E9,C0AD,DED4,B0E8,C5C4,C1E0,B9D5,BEDC,CDD8,B0CE,CDCF,DED6,BED0,D7BE,DED5,D5D0,B0DD,C4E2,C2A3,BCF0,D3B5,C0B9,C5A1,B2A6,D4F1,C0A8,CAC3,DED7,D5FC,B9B0,C8AD,CBA9,DED9,BFBD,C6B4,D7A7,CAB0,C4C3,B3D6,B9D2,D6B8,EAFC,B0B4,BFE6,CCF4,CDDA,D6BF,C2CE,CECE,CCA2,D0AE,C4D3,B5B2,DED8,D5F5,BCB7,BBD3,B0A4,C5B2,B4EC,D5F1,EAFD,DEDA,CDA6,CDEC,CEE6,DEDC,CDB1,C0A6,D7BD,DEDB,B0C6,BAB4,C9D3,C4F3,BEE8,B2B6,C0CC,CBF0,BCF1,BBBB,B5B7,C5F5,DEE6,DEE3,BEDD,DEDF,B4B7,BDDD,DEE0,C4ED,CFC6,B5E0,B6DE,CADA,B5F4,DEE5,D5C6,DEE1,CCCD,C6FE,C5C5,D2B4,BEF2,C2D3,CCBD,B3B8,BDD3,BFD8,CDC6,D1DA,B4EB,DEE4,DEDD,DEE7,EAFE,C2B0,DEE2,D6C0,B5A7,B2F4,DEE8,DEF2,DEED,DEF1,C8E0,D7E1,DEEF,C3E8,CCE1,B2E5,D2BE,DEEE,DEEB,CED5,B4A7,BFAB,BEBE,BDD2,DEE9,D4AE,DEDE,DEEA,C0BF,DEEC,B2F3,B8E9,C2A7,BDC1,DEF5,DEF8,B2AB,B4A4,B4EA,C9A6,DEF6,CBD1,B8E3,DEF7,DEFA,DEF9,CCC2,B0E1,B4EE,E5BA,D0AF,B2EB,EBA1,DEF4,C9E3,DEF3,B0DA,D2A1,B1F7,CCAF,DEF0,CBA4,D5AA,DEFB,B4DD,C4A6,DEFD,C3FE,C4A1,DFA1,C1CC,DEFC,BEEF,C6B2,B3C5,C8F6,CBBA,DEFE,DFA4,D7B2,B3B7,C1C3,C7CB,B2A5,B4E9,D7AB,C4EC,DFA2,DFA3,DFA5,BAB3,DFA6,C0DE,C9C3,B2D9,C7E6,DFA7,C7DC,DFA8,EBA2,CBD3,DFAA,DFA9,B2C1,C5CA,DFAB,D4DC,C8C1,DFAC,BEF0,DFAD,D6A7,EAB7,EBB6,CAD5,D8FC,B8C4,B9A5,B7C5,D5FE,B9CA,D0A7,F4CD,B5D0,C3F4,BEC8,EBB7,B0BD,BDCC,C1B2,B1D6,B3A8,B8D2,C9A2,B6D8,EBB8,BEB4,CAFD,C7C3,D5FB,B7F3,CEC4,D5AB,B1F3,ECB3,B0DF,ECB5,B6B7,C1CF,F5FA,D0B1,D5E5,CED3,BDEF,B3E2,B8AB,D5B6,EDBD,B6CF,CBB9,D0C2,B7BD,ECB6,CAA9,C5D4,ECB9,ECB8,C2C3,ECB7,D0FD,ECBA,ECBB,D7E5,ECBC,ECBD,C6EC,CEDE,BCC8,C8D5,B5A9,BEC9,D6BC,D4E7,D1AE,D0F1,EAB8,EAB9,EABA,BAB5,CAB1,BFF5,CDFA,EAC0,B0BA,EABE,C0A5,EABB,B2FD,C3F7,BBE8,D2D7,CEF4,EABF,EABC,EAC3,D0C7,D3B3,B4BA,C3C1,D7F2,D5D1,CAC7,EAC5,EAC4,EAC7,EAC6,D6E7,CFD4,EACB,BBCE,BDFA,C9CE,EACC,C9B9,CFFE,EACA,D4CE,EACD,EACF,CDED,EAC9,EACE,CEEE,BBDE,B3BF,C6D5,BEB0,CEFA,C7E7,BEA7,EAD0,D6C7,C1C0,D4DD,EAD1,CFBE,EAD2,CAEE,C5AF,B0B5,EAD4,EAD3,F4DF,C4BA,B1A9,E5DF,EAD5,CAEF,EAD6,EAD7,C6D8,EAD8,EAD9,D4BB,C7FA,D2B7,B8FC,EAC2,B2DC,C2FC,D4F8,CCE6,D7EE,D4C2,D3D0,EBC3,C5F3,B7FE,EBD4,CBB7,EBDE,C0CA,CDFB,B3AF,C6DA,EBFC,C4BE,CEB4,C4A9,B1BE,D4FD,CAF5,D6EC,C6D3,B6E4,BBFA,D0E0,C9B1,D4D3,C8A8,B8CB,E8BE,C9BC,E8BB,C0EE,D0D3,B2C4,B4E5,E8BC,D5C8,B6C5,E8BD,CAF8,B8DC,CCF5,C0B4,D1EE,E8BF,E8C2,BABC,B1AD,BDDC,EABD,E8C3,E8C6,E8CB,E8CC,CBC9,B0E5,BCAB,B9B9,E8C1,CDF7,E8CA,CEF6,D5ED,C1D6,E8C4,C3B6,B9FB,D6A6,E8C8,CAE0,D4E6,E8C0,E8C5,E8C7,C7B9,B7E3,E8C9,BFDD,E8D2,E8D7,E8D5,BCDC,BCCF,E8DB,E8DE,E8DA,B1FA,B0D8,C4B3,B8CC,C6E2,C8BE,C8E1,E8CF,E8D4,E8D6,B9F1,E8D8,D7F5,C4FB,E8DC,B2E9,E8D1,BCED,BFC2,E8CD,D6F9,C1F8,B2F1,E8DF,CAC1,E8D9,D5A4,B1EA,D5BB,E8CE,E8D0,B6B0,E8D3,E8DD,C0B8,CAF7,CBA8,C6DC,C0F5,E8E9,D0A3,E8F2,D6EA,E8E0,E8E1,D1F9,BACB,B8F9,B8F1,D4D4,E8EF,E8EE,E8EC,B9F0,CCD2,E8E6,CEA6,BFF2,B0B8,E8F1,E8F0,D7C0,E8E4,CDA9,C9A3,BBB8,BDDB,E8EA,E8E2,E8E3,E8E5,B5B5,E8E7,C7C5,E8EB,E8ED,BDB0,D7AE,E8F8,E8F5,CDB0,E8F6,C1BA,E8E8,C3B7,B0F0,E8F4,E8F7,B9A3,C9D2,C3CE,CEE0,C0E6,CBF3,CCDD,D0B5,CAE1,E8F3,BCEC,E8F9,C3DE,C6E5,B9F7,B0F4,D7D8,BCAC,C5EF,CCC4,E9A6,C9AD,E9A2,C0E2,BFC3,E8FE,B9D7,E8FB,E9A4,D2CE,E9A3,D6B2,D7B5,E9A7,BDB7,E8FC,E8FD,E9A1,CDD6,D2AC,E9B2,E9A9,B4AA,B4BB,E9AB,D0A8,E9A5,B3FE,E9AC,C0E3,E9AA,E9B9,E9B8,E9AE,E8FA,E9A8,BFAC,E9B1,E9BA,C2A5,E9AF,B8C5,E9AD,D3DC,E9B4,E9B5,E9B7,E9C7,C0C6,E9C5,E9B0,E9BB,B0F1,E9BC,D5A5,E9BE,E9BF,E9C1,C1F1,C8B6,E9BD,E9C2,E9C3,E9B3,E9B6,BBB1,E9C0,BCF7,E9C4,E9C6,E9CA,E9CE,B2DB,E9C8,B7AE,E9CB,E9CC,D5C1,C4A3,E9D8,BAE1,E9C9,D3A3,E9D4,E9D7,E9D0,E9CF,C7C1,E9D2,E9D9,B3C8,E9D3,CFF0,E9CD,B3F7,E9D6,E9DA,CCB4,CFAD,E9D5,E9DC,E9DB,E9DE,E9D1,E9DD,E9DF,C3CA,C7B7,B4CE,BBB6,D0C0,ECA3,C5B7,D3FB,ECA4,ECA5,C6DB,BFEE,ECA6,ECA7,D0AA,C7B8,B8E8,ECA8,D6B9,D5FD,B4CB,B2BD,CEE4,C6E7,CDE1,B4F5,CBC0,BCDF,E9E2,E9E3,D1EA,E9E5,B4F9,E9E4,D1B3,CAE2,B2D0,E9E8,E9E6,E9E7,D6B3,E9E9,E9EA,E9EB,E9EC,ECAF,C5B9,B6CE,D2F3,B5EE,BBD9,ECB1,D2E3,CEE3,C4B8,C3BF,B6BE,D8B9,B1C8,B1CF,B1D1,C5FE,B1D0,C3AB,D5B1,EBA4,BAC1,CCBA,EBA5,EBA7,EBA8,EBA6,EBA9,EBAB,EBAA,EBAC,CACF,D8B5,C3F1,C3A5,C6F8,EBAD,C4CA,EBAE,EBAF,EBB0,B7D5,B7FA,EBB1,C7E2,EBB3,BAA4,D1F5,B0B1,EBB2,EBB4,B5AA,C2C8,C7E8,EBB5,CBAE,E3DF,D3C0,D9DB,CDA1,D6AD,C7F3,D9E0,BBE3,BABA,E3E2,CFAB,E3E0,C9C7,BAB9,D1B4,E3E1,C8EA,B9AF,BDAD,B3D8,CEDB,CCC0,E3E8,E3E9,CDF4,CCAD,BCB3,E3EA,E3EB,D0DA,C6FB,B7DA,C7DF,D2CA,CED6,E3E4,E3EC,C9F2,B3C1,E3E7,C6E3,E3E5,EDB3,E3E6,C9B3,C5E6,B9B5,C3BB,E3E3,C5BD,C1A4,C2D9,B2D7,E3ED,BBA6,C4AD,E3F0,BEDA,E3FB,E3F5,BAD3,B7D0,D3CD,D6CE,D5D3,B9C1,D5B4,D1D8,D0B9,C7F6,C8AA,B2B4,C3DA,E3EE,E3FC,E3EF,B7A8,E3F7,E3F4,B7BA,C5A2,E3F6,C5DD,B2A8,C6FC,C4E0,D7A2,C0E1,E3F9,E3FA,E3FD,CCA9,E3F3,D3BE,B1C3,EDB4,E3F1,E3F2,E3F8,D0BA,C6C3,D4F3,E3FE,BDE0,E4A7,E4A6,D1F3,E4A3,E4A9,C8F7,CFB4,E4A8,E4AE,C2E5,B6B4,BDF2,E4A2,BAE9,E4AA,E4AC,B6FD,D6DE,E4B2,E4AD,E4A1,BBEE,CDDD,C7A2,C5C9,C1F7,E4A4,C7B3,BDAC,BDBD,E4A5,D7C7,B2E2,E4AB,BCC3,E4AF,BBEB,E4B0,C5A8,E4B1,D5E3,BFA3,E4BA,E4B7,E4BB,E4BD,C6D6,BAC6,C0CB,B8A1,E4B4,D4A1,BAA3,BDFE,E4BC,CDBF,C4F9,CFFB,C9E6,D3BF,CFD1,E4B3,E4B8,E4B9,CCE9,CCCE,C0D4,E4B5,C1B0,E4B6,CED0,BBC1,B5D3,C8F3,BDA7,D5C7,C9AC,B8A2,E4CA,E4CC,D1C4,D2BA,BAAD,BAD4,E4C3,B5ED,D7CD,E4C0,CFFD,E4BF,C1DC,CCCA,CAE7,C4D7,CCD4,E4C8,E4C7,E4C1,E4C4,B5AD,D3D9,E4C6,D2F9,B4E3,BBB4,C9EE,B4BE,BBEC,D1CD,CCED,EDB5,C7E5,D4A8,E4CB,D7D5,E4C2,BDA5,E4C5,D3E6,E4C9,C9F8,E4BE,D3E5,C7FE,B6C9,D4FC,B2B3,E4D7,CEC2,E4CD,CEBC,B8DB,E4D6,BFCA,D3CE,C3EC,C5C8,E4D8,CDC4,E4CF,E4D4,E4D5,BAFE,CFE6,D5BF,E4D2,E4D0,E4CE,CDE5,CAAA,C0A3,BDA6,E4D3,B8C8,E4E7,D4B4,E4DB,C1EF,E4E9,D2E7,E4DF,E4E0,CFAA,CBDD,E4DA,E4D1,E4E5,C8DC,E4E3,C4E7,E4E2,E4E1,B3FC,E4E8,B5E1,D7CC,E4E6,BBAC,D7D2,CCCF,EBF8,E4E4,B9F6,D6CD,E4D9,E4DC,C2FA,E4DE,C2CB,C0C4,C2D0,B1F5,CCB2,B5CE,E4EF,C6AF,C6E1,E4F5,C2A9,C0EC,D1DD,E4EE,C4AE,E4ED,E4F6,E4F4,C2FE,E4DD,E4F0,CAFE,D5C4,E4F1,D1FA,E4EB,E4EC,E4F2,CEAB,C5CB,C7B1,C2BA,E4EA,C1CA,CCB6,B3B1,E4FB,E4F3,E4FA,E4FD,E4FC,B3CE,B3BA,E4F7,E4F9,E4F8,C5EC,C0BD,D4E8,E5A2,B0C4,E5A4,E5A3,BCA4,E5A5,E5A1,E4FE,B1F4,E5A8,E5A9,E5A6,E5A7,E5AA,C6D9,E5AB,E5AD,E5AC,E5AF,E5AE,B9E0,E5B0,E5B1,BBF0,ECE1,C3F0,B5C6,BBD2,C1E9,D4EE,BEC4,D7C6,D4D6,B2D3,ECBE,EAC1,C2AF,B4B6,D1D7,B3B4,C8B2,BFBB,ECC0,D6CB,ECBF,ECC1,ECC5,BEE6,CCBF,C5DA,BEBC,ECC6,B1FE,ECC4,D5A8,B5E3,ECC2,C1B6,B3E3,ECC3,CBB8,C0C3,CCFE,C1D2,ECC8,BAE6,C0D3,D6F2,D1CC,BFBE,B7B3,C9D5,ECC7,BBE2,CCCC,BDFD,C8C8,CFA9,CDE9,C5EB,B7E9,D1C9,BAB8,ECC9,ECCA,BBC0,ECCB,ECE2,B1BA,B7D9,BDB9,ECCC,D1E6,ECCD,C8BB,ECD1,ECD3,BBCD,BCE5,ECCF,C9B7,C3BA,ECE3,D5D5,ECD0,D6F3,ECD2,ECCE,ECD4,ECD5,C9BF,CFA8,D0DC,D1AC,C8DB,ECD6,CEF5,CAEC,ECDA,ECD9,B0BE,ECD7,ECD8,ECE4,C8BC,C1C7,ECDC,D1E0,ECDB,D4EF,ECDD,DBC6,ECDE,B1AC,ECDF,ECE0,D7A6,C5C0,EBBC,B0AE,BEF4,B8B8,D2AF,B0D6,B5F9,D8B3,CBAC,E3DD,C6AC,B0E6,C5C6,EBB9,EBBA,EBBB,D1C0,C5A3,EAF2,C4B2,C4B5,C0CE,EAF3,C4C1,CEEF,EAF0,EAF4,C9FC,C7A3,CCD8,CEFE,EAF5,EAF6,CFAC,C0E7,EAF7,B6BF,EAF8,EAF9,EAFA,EAFB,EAF1,C8AE,E1EB,B7B8,E1EC,E1ED,D7B4,E1EE,E1EF,D3CC,E1F1,BFF1,E1F0,B5D2,B1B7,E1F3,E1F2,BAFC,E1F4,B9B7,BED1,C4FC,BADD,BDC6,E1F5,E1F7,B6C0,CFC1,CAA8,E1F6,D5F8,D3FC,E1F8,E1FC,E1F9,E1FA,C0EA,E1FE,E2A1,C0C7,E1FB,E1FD,E2A5,C1D4,E2A3,E2A8,B2FE,E2A2,C3CD,B2C2,E2A7,E2A6,E2A4,E2A9,E2AB,D0C9,D6ED,C3A8,E2AC,CFD7,E2AE,BAEF,E9E0,E2AD,E2AA,BBAB,D4B3,E2B0,E2AF,E9E1,E2B1,E2B2,E2B3,CCA1,E2B4,E2B5,D0FE,C2CA,D3F1,CDF5,E7E0,E7E1,BEC1,C2EA,E7E4,E7E3,CDE6,C3B5,E7E2,BBB7,CFD6,C1E1,E7E9,E7E8,E7F4,B2A3,E7EA,E7E6,E7EC,E7EB,C9BA,D5E4,E7E5,B7A9,E7E7,E7EE,E7F3,D6E9,E7ED,E7F2,E7F1,B0E0,E7F5,C7F2,C0C5,C0ED,C1F0,E7F0,E7F6,CBF6,E8A2,E8A1,D7C1,E7FA,E7F9,E7FB,E7F7,E7FE,E7FD,E7FC,C1D5,C7D9,C5FD,C5C3,C7ED,E8A3,E8A6,E8A5,E8A7,BAF7,E7F8,E8A4,C8F0,C9AA,E8A9,B9E5,D1FE,E8A8,E8AA,E8AD,E8AE,C1A7,E8AF,E8B0,E8AC,E8B4,E8AB,E8B1,E8B5,E8B2,E8B3,E8B7,E8B6,B9CF,F0AC,F0AD,C6B0,B0EA,C8BF,CDDF,CECD,EAB1,EAB2,C6BF,B4C9,EAB3,D5E7,DDF9,EAB4,EAB5,EAB6,B8CA,DFB0,C9F5,CCF0,C9FA,C9FB,D3C3,CBA6,B8A6,F0AE,B1C2,E5B8,CCEF,D3C9,BCD7,C9EA,B5E7,C4D0,B5E9,EEAE,BBAD,E7DE,EEAF,B3A9,EEB2,EEB1,BDE7,EEB0,CEB7,C5CF,C1F4,DBCE,EEB3,D0F3,C2D4,C6E8,B7AC,EEB4,B3EB,BBFB,EEB5,E7DC,EEB6,BDAE,F1E2,CAE8,D2C9,F0DA,F0DB,F0DC,C1C6,B8ED,BECE,F0DE,C5B1,F0DD,D1F1,F0E0,B0CC,BDEA,D2DF,F0DF,B4AF,B7E8,F0E6,F0E5,C6A3,F0E1,F0E2,B4C3,F0E3,D5EE,CCDB,BED2,BCB2,F0E8,F0E7,F0E4,B2A1,D6A2,D3B8,BEB7,C8AC,F0EA,D1F7,D6CC,BADB,F0E9,B6BB,CDB4,C6A6,C1A1,F0EB,F0EE,F0ED,F0F0,F0EC,BBBE,F0EF,CCB5,F0F2,B3D5,B1D4,F0F3,F0F4,F0F6,B4E1,F0F1,F0F7,F0FA,F0F8,F0F5,F0FD,F0F9,F0FC,F0FE,F1A1,CEC1,F1A4,F1A3,C1F6,F0FB,CADD,B4F1,B1F1,CCB1,F1A6,F1A7,F1AC,D5CE,F1A9,C8B3,F1A2,F1AB,F1A8,F1A5,F1AA,B0A9,F1AD,F1AF,F1B1,F1B0,F1AE,D1A2,F1B2,F1B3,B9EF,B5C7,B0D7,B0D9,D4ED,B5C4,BDD4,BBCA,F0A7,B8DE,F0A8,B0A8,F0A9,CDEE,F0AA,F0AB,C6A4,D6E5,F1E4,F1E5,C3F3,D3DB,D6D1,C5E8,D3AF,D2E6,EEC1,B0BB,D5B5,D1CE,BCE0,BAD0,BFF8,B8C7,B5C1,C5CC,CAA2,C3CB,EEC2,C4BF,B6A2,EDEC,C3A4,D6B1,CFE0,EDEF,C5CE,B6DC,CAA1,EDED,EDF0,EDF1,C3BC,BFB4,EDEE,EDF4,EDF2,D5E6,C3DF,EDF3,EDF6,D5A3,D1A3,EDF5,C3D0,EDF7,BFF4,BEEC,EDF8,CCF7,D1DB,D7C5,D5F6,EDFC,EDFB,EDF9,EDFA,EDFD,BEA6,CBAF,EEA1,B6BD,EEA2,C4C0,EDFE,BDDE,B2C7,B6C3,EEA5,D8BA,EEA3,EEA6,C3E9,B3F2,EEA7,EEA4,CFB9,EEA8,C2F7,EEA9,EEAA,DEAB,C6B3,C7C6,D6F5,B5C9,CBB2,EEAB,CDAB,EEAC,D5B0,EEAD,F6C4,DBC7,B4A3,C3AC,F1E6,CAB8,D2D3,D6AA,EFF2,BED8,BDC3,EFF3,B6CC,B0AB,CAAF,EDB6,EDB7,CEF9,B7AF,BFF3,EDB8,C2EB,C9B0,EDB9,C6F6,BFB3,EDBC,C5F8,D1D0,D7A9,EDBA,EDBB,D1E2,EDBF,EDC0,EDC4,EDC8,EDC6,EDCE,D5E8,EDC9,EDC7,EDBE,C5E9,C6C6,C9E9,D4D2,EDC1,EDC2,EDC3,EDC5,C0F9,B4A1,B9E8,EDD0,EDD1,EDCA,EDCF,CEF8,CBB6,EDCC,EDCD,CFF5,EDD2,C1F2,D3B2,EDCB,C8B7,BCEF,C5F0,EDD6,B5EF,C2B5,B0AD,CBE9,B1AE,EDD4,CDEB,B5E2,EDD5,EDD3,EDD7,B5FA,EDD8,EDD9,EDDC,B1CC,C5F6,BCEE,EDDA,CCBC,B2EA,EDDB,C4EB,B4C5,B0F5,EDDF,C0DA,B4E8,C5CD,EDDD,BFC4,EDDE,C4A5,EDE0,EDE1,EDE3,C1D7,BBC7,BDB8,EDE2,EDE4,EDE6,EDE5,EDE7,CABE,ECEA,C0F1,C9E7,ECEB,C6EE,ECEC,C6ED,ECED,ECF0,D7E6,ECF3,ECF1,ECEE,ECEF,D7A3,C9F1,CBEE,ECF4,ECF2,CFE9,ECF6,C6B1,BCC0,ECF5,B5BB,BBF6,ECF7,D9F7,BDFB,C2BB,ECF8,ECF9,B8A3,ECFA,ECFB,ECFC,D3ED,D8AE,C0EB,C7DD,BACC,D0E3,CBBD,CDBA,B8D1,B1FC,C7EF,D6D6,BFC6,C3EB,EFF5,C3D8,D7E2,EFF7,B3D3,C7D8,D1ED,D6C8,EFF8,EFF6,BBFD,B3C6,BDD5,D2C6,BBE0,CFA1,EFFC,EFFB,EFF9,B3CC,C9D4,CBB0,EFFE,B0DE,D6C9,EFFD,B3ED,F6D5,CEC8,F0A2,F0A1,B5BE,BCDA,BBFC,B8E5,C4C2,F0A3,CBEB,F0A6,D1A8,BEBF,C7EE,F1B6,F1B7,BFD5,B4A9,F1B8,CDBB,C7D4,D5AD,F1B9,F1BA,C7CF,D2A4,D6CF,F1BB,BDD1,B4B0,BEBD,B4DC,CED1,BFDF,F1BD,BFFA,F1BC,F1BF,F1BE,F1C0,F1C1,C1FE,C1A2,CAFA,D5BE,BEBA,BEB9,D5C2,BFA2,CDAF,F1B5,BDDF,B6CB,D6F1,F3C3,F3C4,B8CD,F3C6,F3C7,B0CA,F3C5,F3C9,CBF1,F3CB,D0A6,B1CA,F3C8,F3CF,B5D1,F3D7,F3D2,F3D4,F3D3,B7FB,B1BF,F3CE,F3CA,B5DA,F3D0,F3D1,F3D5,F3CD,BCE3,C1FD,F3D6,F3DA,F3CC,B5C8,BDEE,F3DC,B7A4,BFF0,D6FE,CDB2,B4F0,B2DF,F3D8,F3D9,C9B8,F3DD,F3DE,F3E1,F3DF,F3E3,F3E2,F3DB,BFEA,B3EF,F3E0,C7A9,BCF2,F3EB,B9BF,F3E4,B2AD,BBFE,CBE3,F3ED,F3E9,B9DC,F3EE,F3E5,F3E6,F3EA,C2E1,F3EC,F3EF,F3E8,BCFD,CFE4,F3F0,F3E7,F3F2,D7AD,C6AA,F3F3,F3F1,C2A8,B8DD,F3F5,F3F4,B4DB,F3F6,F3F7,F3F8,C0BA,C0E9,C5F1,F3FB,F3FA,B4D8,F3FE,F3F9,F3FC,F3FD,F4A1,F4A3,BBC9,F4A2,F4A4,B2BE,F4A6,F4A5,BCAE,C3D7,D9E1,C0E0,F4CC,D7D1,B7DB,F4CE,C1A3,C6C9,B4D6,D5B3,F4D0,F4CF,F4D1,CBDA,F4D2,D4C1,D6E0,B7E0,C1B8,C1BB,F4D3,BEAC,B4E2,F4D4,F4D5,BEAB,F4D6,F4DB,F4D7,F4DA,BAFD,F4D8,F4D9,B8E2,CCC7,F4DC,B2DA,C3D3,D4E3,BFB7,F4DD,C5B4,F4E9,CFB5,CEC9,CBD8,CBF7,BDF4,D7CF,C0DB,D0F5,F4EA,F4EB,F4EC,F7E3,B7B1,F4ED,D7EB,F4EE,E6F9,BEC0,E6FA,BAEC,E6FB,CFCB,E6FC,D4BC,BCB6,E6FD,E6FE,BCCD,C8D2,CEB3,E7A1,B4BF,E7A2,C9B4,B8D9,C4C9,D7DD,C2DA,B7D7,D6BD,CEC6,B7C4,C5A6,E7A3,CFDF,E7A4,E7A5,E7A6,C1B7,D7E9,C9F0,CFB8,D6AF,D6D5,E7A7,B0ED,E7A8,E7A9,C9DC,D2EF,BEAD,E7AA,B0F3,C8DE,BDE1,E7AB,C8C6,E7AC,BBE6,B8F8,D1A4,E7AD,C2E7,BEF8,BDCA,CDB3,E7AE,E7AF,BEEE,D0E5,CBE7,CCD0,BCCC,E7B0,BCA8,D0F7,E7B1,D0F8,E7B2,E7B3,B4C2,E7B4,E7B5,C9FE,CEAC,C3E0,E7B7,B1C1,B3F1,E7B8,E7B9,D7DB,D5C0,E7BA,C2CC,D7BA,E7BB,E7BC,E7BD,BCEA,C3E5,C0C2,E7BE,E7BF,BCA9,E7C0,E7C1,E7B6,B6D0,E7C2,E7C3,E7C4,BBBA,B5DE,C2C6,B1E0,E7C5,D4B5,E7C6,B8BF,E7C8,E7C7,B7EC,E7C9,B2F8,E7CA,E7CB,E7CC,E7CD,E7CE,E7CF,E7D0,D3A7,CBF5,E7D1,E7D2,E7D3,E7D4,C9C9,E7D5,E7D6,E7D7,E7D8,E7D9,BDC9,E7DA,F3BE,B8D7,C8B1,F3BF,F3C0,F3C1,B9DE,CDF8,D8E8,BAB1,C2DE,EEB7,B7A3,EEB9,EEB8,B0D5,EEBB,D5D6,D7EF,D6C3,EEBD,CAF0,EEBC,EEBE,EEC0,EEBF,D1F2,C7BC,C3C0,B8E1,C1E7,F4C6,D0DF,F4C7,CFDB,C8BA,F4C8,F4C9,F4CA,F4CB,D9FA,B8FE,E5F1,D3F0,F4E0,CECC,B3E1,F1B4,D2EE,F4E1,CFE8,F4E2,C7CC,B5D4,B4E4,F4E4,F4E3,F4E5,F4E6,F4E7,BAB2,B0BF,F4E8,B7AD,D2ED,D2AB,C0CF,BFBC,EBA3,D5DF,EAC8,F1F3,B6F8,CBA3,C4CD,F1E7,F1E8,B8FB,F1E9,BAC4,D4C5,B0D2,F1EA,F1EB,F1EC,F1ED,F1EE,F1EF,F1F1,F1F0,C5D5,F1F2,B6FA,F1F4,D2AE,DEC7,CBCA,B3DC,B5A2,B9A2,C4F4,F1F5,F1F6,C1C4,C1FB,D6B0,F1F7,F1F8,C1AA,C6B8,BEDB,F1F9,B4CF,F1FA,EDB2,EDB1,CBE0,D2DE,CBC1,D5D8,C8E2,C0DF,BCA1,EBC1,D0A4,D6E2,B6C7,B8D8,EBC0,B8CE,EBBF,B3A6,B9C9,D6AB,B7F4,B7CA,BCE7,B7BE,EBC6,EBC7,B0B9,BFCF,EBC5,D3FD,EBC8,EBC9,B7CE,EBC2,EBC4,C9F6,D6D7,D5CD,D0B2,EBCF,CEB8,EBD0,B5A8,B1B3,EBD2,CCA5,C5D6,EBD3,EBD1,C5DF,EBCE,CAA4,EBD5,B0FB,BAFA,D8B7,F1E3,EBCA,EBCB,EBCC,EBCD,EBD6,E6C0,EBD9,BFE8,D2C8,EBD7,EBDC,B8EC,EBD8,BDBA,D0D8,B0B7,EBDD,C4DC,D6AC,B4E0,C2F6,BCB9,EBDA,EBDB,D4E0,C6EA,C4D4,EBDF,C5A7,D9F5,B2B1,EBE4,BDC5,EBE2,EBE3,B8AC,CDD1,EBE5,EBE1,C1B3,C6A2,CCF3,EBE6,C0B0,D2B8,EBE7,B8AF,B8AD,EBE8,C7BB,CDF3,EBEA,EBEB,EBED,D0C8,EBF2,EBEE,EBF1,C8F9,D1FC,EBEC,EBE9,B8B9,CFD9,C4E5,EBEF,EBF0,CCDA,CDC8,B0F2,EBF6,EBF5,B2B2,B8E0,EBF7,B1EC,CCC5,C4A4,CFA5,EBF9,ECA2,C5F2,EBFA,C9C5,E2DF,EBFE,CDCE,ECA1,B1DB,D3B7,D2DC,EBFD,EBFB,B3BC,EAB0,D7D4,F4AB,B3F4,D6C1,D6C2,D5E9,BECA,F4A7,D2A8,F4A8,F4A9,F4AA,BECB,D3DF,C9E0,C9E1,F3C2,CAE6,CCF2,E2B6,CBB4,CEE8,D6DB,F4AD,F4AE,F4AF,F4B2,BABD,F4B3,B0E3,F4B0,F4B1,BDA2,B2D5,F4B6,F4B7,B6E6,B2B0,CFCF,F4B4,B4AC,F4B5,F4B8,F4B9,CDA7,F4BA,F4BB,F4BC,CBD2,F4BD,F4BE,F4BF,F4DE,C1BC,BCE8,C9AB,D1DE,E5F5,DCB3,D2D5,DCB4,B0AC,DCB5,BDDA,DCB9,D8C2,DCB7,D3F3,C9D6,DCBA,DCB6,DCBB,C3A2,DCBC,DCC5,DCBD,CEDF,D6A5,DCCF,DCCD,DCD2,BDE6,C2AB,DCB8,DCCB,DCCE,DCBE,B7D2,B0C5,DCC7,D0BE,DCC1,BBA8,B7BC,DCCC,DCC6,DCBF,C7DB,D1BF,DCC0,DCCA,DCD0,CEAD,DCC2,DCC3,DCC8,DCC9,B2D4,DCD1,CBD5,D4B7,DCDB,DCDF,CCA6,DCE6,C3E7,DCDC,BFC1,DCD9,B0FA,B9B6,DCE5,DCD3,DCC4,DCD6,C8F4,BFE0,C9BB,B1BD,D3A2,DCDA,DCD5,C6BB,DCDE,D7C2,C3AF,B7B6,C7D1,C3A9,DCE2,DCD8,DCEB,DCD4,DCDD,BEA5,DCD7,DCE0,DCE3,DCE4,DCF8,DCE1,DDA2,DCE7,BCEB,B4C4,C3A3,B2E7,DCFA,DCF2,DCEF,DCFC,DCEE,D2F0,B2E8,C8D7,C8E3,DCFB,DCED,DCF7,DCF5,BEA3,DCF4,B2DD,DCF3,BCF6,DCE8,BBC4,C0F3,BCD4,DCE9,DCEA,DCF1,DCF6,DCF9,B5B4,C8D9,BBE7,DCFE,DCFD,D3AB,DDA1,DDA3,DDA5,D2F1,DDA4,DDA6,DDA7,D2A9,BAC9,DDA9,DDB6,DDB1,DDB4,DDB0,C6CE,C0F2,C9AF,DCEC,DDAE,DDB7,DCF0,DDAF,DDB8,DDAC,DDB9,DDB3,DDAD,C4AA,DDA8,C0B3,C1AB,DDAA,DDAB,DDB2,BBF1,DDB5,D3A8,DDBA,DDBB,C3A7,DDD2,DDBC,DDD1,B9BD,BED5,BEFA,BACA,DDCA,DDC5,DDBF,B2CB,DDC3,DDCB,B2A4,DDD5,DDBE,C6D0,DDD0,DDD4,C1E2,B7C6,DDCE,DDCF,DDC4,DDBD,DDCD,CCD1,DDC9,DDC2,C3C8,C6BC,CEAE,DDCC,DDC8,DDC1,DDC6,C2DC,D3A9,D3AA,DDD3,CFF4,C8F8,DDE6,DDC7,DDE0,C2E4,DDE1,DDD7,D6F8,DDD9,DDD8,B8F0,DDD6,C6CF,B6AD,DDE2,BAF9,D4E1,DDE7,B4D0,DDDA,BFFB,DDE3,DDDF,DDDD,B5D9,DDDB,DDDC,DDDE,BDAF,DDE4,DDE5,DDF5,C3C9,CBE2,DDF2,D8E1,C6D1,DDF4,D5F4,DDF3,DDF0,DDEC,DDEF,DDE8,D0EE,C8D8,DDEE,DDE9,DDEA,CBF2,DDED,B1CD,C0B6,BCBB,DDF1,DDF7,DDF6,DDEB,C5EE,DDFB,DEA4,DEA3,DDF8,C3EF,C2FB,D5E1,CEB5,DDFD,B2CC,C4E8,CADF,C7BE,DDFA,DDFC,DDFE,DEA2,B0AA,B1CE,DEAC,DEA6,BDB6,C8EF,DEA1,DEA5,DEA9,DEA8,DEA7,DEAD,D4CC,DEB3,DEAA,DEAE,C0D9,B1A1,DEB6,DEB1,DEB2,D1A6,DEB5,DEAF,DEB0,D0BD,DEB4,CAED,DEB9,DEB8,DEB7,DEBB,BDE5,B2D8,C3EA,DEBA,C5BA,DEBC,CCD9,B7AA,D4E5,DEBD,DEBF,C4A2,DEC1,DEBE,DEC0,D5BA,DEC2,F2AE,BBA2,C2B2,C5B0,C2C7,F2AF,D0E9,D3DD,EBBD,B3E6,F2B0,F2B1,CAAD,BAE7,F2B3,F2B5,F2B4,CBE4,CFBA,F2B2,CAB4,D2CF,C2EC,CEC3,F2B8,B0F6,F2B7,F2BE,B2CF,D1C1,F2BA,F2BC,D4E9,F2BB,F2B6,F2BF,F2BD,F2B9,F2C7,F2C4,F2C6,F2CA,F2C2,F2C0,F2C5,D6FB,F2C1,C7F9,C9DF,F2C8,B9C6,B5B0,F2C3,F2C9,F2D0,F2D6,BBD7,F2D5,CDDC,D6EB,F2D2,F2D4,B8F2,F2CB,F2CE,C2F9,D5DD,F2CC,F2CD,F2CF,F2D3,F2D9,D3BC,B6EA,CAF1,B7E4,F2D7,F2D8,F2DA,F2DD,F2DB,F2DC,D1D1,F2D1,CDC9,CECF,D6A9,F2E3,C3DB,F2E0,C0AF,F2EC,F2DE,F2E1,F2E8,F2E2,F2E7,F2E6,F2E9,F2DF,F2E4,F2EA,D3AC,F2E5,B2F5,F2F2,D0AB,F2F5,BBC8,F2F9,F2F0,F2F6,F2F8,F2FA,F2F3,F2F1,BAFB,B5FB,F2EF,F2F7,F2ED,F2EE,F2EB,F3A6,F3A3,F3A2,F2F4,C8DA,F2FB,F3A5,C3F8,F2FD,F3A7,F3A9,F3A4,F2FC,F3AB,F3AA,C2DD,F3AE,F3B0,F3A1,F3B1,F3AC,F3AF,F2FE,F3AD,F3B2,F3B4,F3A8,F3B3,F3B5,D0B7,F3B8,D9F9,F3B9,F3B7,C8E4,F3B6,F3BA,F3BB,B4C0,EEC3,F3BC,F3BD,D1AA,F4AC,D0C6,D0D0,D1DC,CFCE,BDD6,D1C3,BAE2,E1E9,D2C2,F1C2,B2B9,B1ED,F1C3,C9C0,B3C4,D9F2,CBA5,F1C4,D6D4,F1C5,F4C0,F1C6,D4AC,F1C7,B0C0,F4C1,F4C2,B4FC,C5DB,CCBB,D0E4,CDE0,F1C8,D9F3,B1BB,CFAE,B8A4,F1CA,F1CB,B2C3,C1D1,D7B0,F1C9,F1CC,F1CE,D9F6,D2E1,D4A3,F4C3,C8B9,F4C4,F1CD,F1CF,BFE3,F1D0,F1D4,F1D6,F1D1,C9D1,C5E1,C2E3,B9FC,F1D3,F1D5,B9D3,F1DB,BAD6,B0FD,F1D9,F1D8,F1D2,F1DA,F1D7,C8EC,CDCA,F1DD,E5BD,F1DC,F1DE,F1DF,CFE5,F4C5,BDF3,F1E0,F1E1,CEF7,D2AA,F1FB,B8B2,BCFB,B9DB,B9E6,C3D9,CAD3,EAE8,C0C0,BEF5,EAE9,EAEA,EAEB,EAEC,EAED,EAEE,EAEF,BDC7,F5FB,F5FD,F5FE,F5FC,BDE2,F6A1,B4A5,F6A2,F6A3,ECB2,D1D4,D9EA,F6A4,EEBA,D5B2,D3FE,CCDC,CAC4,E5C0,F6A5,BEAF,C6A9,DAA5,BCC6,B6A9,B8BC,C8CF,BCA5,DAA6,DAA7,CCD6,C8C3,DAA8,C6FD,D1B5,D2E9,D1B6,BCC7,BDB2,BBE4,DAA9,DAAA,D1C8,DAAB,D0ED,B6EF,C2DB,CBCF,B7ED,C9E8,B7C3,BEF7,D6A4,DAAC,DAAD,C6C0,D7E7,CAB6,D5A9,CBDF,D5EF,DAAE,D6DF,B4CA,DAB0,DAAF,D2EB,DAB1,DAB2,DAB3,CAD4,DAB4,CAAB,DAB5,DAB6,B3CF,D6EF,DAB7,BBB0,B5AE,DAB8,DAB9,B9EE,D1AF,D2E8,DABA,B8C3,CFEA,B2EF,DABB,DABC,BDEB,CEDC,D3EF,DABD,CEF3,DABE,D3D5,BBE5,DABF,CBB5,CBD0,DAC0,C7EB,D6EE,DAC1,C5B5,B6C1,DAC2,B7CC,BFCE,DAC3,DAC4,CBAD,DAC5,B5F7,DAC6,C1C2,D7BB,DAC7,CCB8,D2EA,C4B1,DAC8,B5FD,BBD1,DAC9,D0B3,DACA,DACB,CEBD,DACC,DACD,DACE,B2F7,DAD1,DACF,D1E8,DAD0,C3D5,DAD2,DAD3,DAD4,DAD5,D0BB,D2A5,B0F9,DAD6,C7AB,DAD7,BDF7,C3A1,DAD8,DAD9,C3FD,CCB7,DADA,DADB,C0BE,C6D7,DADC,DADD,C7B4,DADE,DADF,B9C8,BBED,B6B9,F4F8,F4F9,CDE3,F5B9,EBE0,CFF3,BBBF,BAC0,D4A5,E1D9,F5F4,B1AA,B2F2,F5F5,F5F7,BAD1,F5F6,C3B2,F5F9,F5F8,B1B4,D5EA,B8BA,B9B1,B2C6,D4F0,CFCD,B0DC,D5CB,BBF5,D6CA,B7B7,CCB0,C6B6,B1E1,B9BA,D6FC,B9E1,B7A1,BCFA,EADA,EADB,CCF9,B9F3,EADC,B4FB,C3B3,B7D1,BAD8,EADD,D4F4,EADE,BCD6,BBDF,EADF,C1DE,C2B8,D4DF,D7CA,EAE0,EAE1,EAE4,EAE2,EAE3,C9DE,B8B3,B6C4,EAE5,CAEA,C9CD,B4CD,E2D9,C5E2,EAE6,C0B5,D7B8,EAE7,D7AC,C8FC,D8D3,D8CD,D4DE,D4F9,C9C4,D3AE,B8D3,B3E0,C9E2,F4F6,BAD5,F4F7,D7DF,F4F1,B8B0,D5D4,B8CF,C6F0,B3C3,F4F2,B3AC,D4BD,C7F7,F4F4,F4F3,CCCB,C8A4,F4F5,D7E3,C5BF,F5C0,F5BB,F5C3,F5C2,D6BA,F5C1,D4BE,F5C4,F5CC,B0CF,B5F8,F5C9,F5CA,C5DC,F5C5,F5C6,F5C7,F5CB,BEE0,F5C8,B8FA,F5D0,F5D3,BFE7,B9F2,F5BC,F5CD,C2B7,CCF8,BCF9,F5CE,F5CF,F5D1,B6E5,F5D2,F5D5,F5BD,F5D4,D3BB,B3EC,CCA4,F5D6,F5D7,BEE1,F5D8,CCDF,F5DB,B2C8,D7D9,F5D9,F5DA,F5DC,F5E2,F5E0,F5DF,F5DD,F5E1,F5DE,F5E4,F5E5,CCE3,E5BF,B5B8,F5E3,F5E8,CCA3,F5E6,F5E7,F5BE,B1C4,F5BF,B5C5,B2E4,F5EC,F5E9,B6D7,F5ED,F5EA,F5EB,B4DA,D4EA,F5EE,B3F9,F5EF,F5F1,F5F0,F5F2,F5F3,C9ED,B9AA,C7FB,B6E3,CCC9,EAA6,B3B5,D4FE,B9EC,D0F9,E9ED,D7AA,E9EE,C2D6,C8ED,BAE4,E9EF,E9F0,E9F1,D6E1,E9F2,E9F3,E9F5,E9F4,E9F6,E9F7,C7E1,E9F8,D4D8,E9F9,BDCE,E9FA,E9FB,BDCF,E9FC,B8A8,C1BE,E9FD,B1B2,BBD4,B9F5,E9FE,EAA1,EAA2,EAA3,B7F8,BCAD,CAE4,E0CE,D4AF,CFBD,D5B7,EAA4,D5DE,EAA5,D0C1,B9BC,B4C7,B1D9,C0B1,B1E6,B1E7,B1E8,B3BD,C8E8,E5C1,B1DF,C1C9,B4EF,C7A8,D3D8,C6F9,D1B8,B9FD,C2F5,D3AD,D4CB,BDFC,E5C2,B7B5,E5C3,BBB9,D5E2,BDF8,D4B6,CEA5,C1AC,B3D9,CCF6,E5C6,E5C4,E5C8,E5CA,E5C7,B5CF,C6C8,B5FC,E5C5,CAF6,E5C9,C3D4,B1C5,BCA3,D7B7,CDCB,CBCD,CACA,CCD3,E5CC,E5CB,C4E6,D1A1,D1B7,E5CD,E5D0,CDB8,D6F0,E5CF,B5DD,CDBE,E5D1,B6BA,CDA8,B9E4,CAC5,B3D1,CBD9,D4EC,E5D2,B7EA,E5CE,E5D5,B4FE,E5D6,E5D3,E5D4,D2DD,C2DF,B1C6,D3E2,B6DD,CBEC,E5D7,D3F6,B1E9,B6F4,E5DA,E5D8,E5D9,B5C0,D2C5,E5DC,E5DE,E5DD,C7B2,D2A3,E5DB,D4E2,D5DA,E5E0,D7F1,E5E1,B1DC,D1FB,E5E2,E5E4,E5E3,E5E5,D2D8,B5CB,E7DF,DAF5,DAF8,DAF6,DAF7,DAFA,D0CF,C4C7,B0EE,D0B0,DAF9,D3CA,BAAA,DBA2,C7F1,DAFC,DAFB,C9DB,DAFD,DBA1,D7DE,DAFE,C1DA,DBA5,D3F4,DBA7,DBA4,DBA8,BDBC,C0C9,DBA3,DBA6,D6A3,DBA9,DBAD,DBAE,DBAC,BAC2,BFA4,DBAB,DBAA,D4C7,B2BF,DBAF,B9F9,DBB0,B3BB,B5A6,B6BC,DBB1,B6F5,DBB2,B1C9,DBB4,DBB3,DBB5,DBB7,DBB6,DBB8,DBB9,DBBA,D3CF,F4FA,C7F5,D7C3,C5E4,F4FC,F4FD,F4FB,BEC6,D0EF,B7D3,D4CD,CCAA,F5A2,F5A1,BAA8,F4FE,CBD6,F5A4,C0D2,B3EA,CDAA,F5A5,F5A3,BDB4,F5A8,F5A9,BDCD,C3B8,BFE1,CBE1,F5AA,F5A6,F5A7,C4F0,F5AC,B4BC,D7ED,B4D7,F5AB,F5AE,F5AD,F5AF,D0D1,C3D1,C8A9,F5B0,F5B1,F5B2,F5B3,F5B4,F5B5,F5B7,F5B6,F5B8,B2C9,D3D4,CACD,C0EF,D6D8,D2B0,C1BF,BDF0,B8AA,BCF8,F6C6,F6C7,F6C8,F6C9,F6CA,F6CC,F6CB,F7E9,F6CD,F6CE,EEC4,EEC5,EEC6,D5EB,B6A4,EEC8,EEC7,EEC9,EECA,C7A5,EECB,EECC,B7B0,B5F6,EECD,EECF,EECE,B8C6,EED0,EED1,EED2,B6DB,B3AE,D6D3,C4C6,B1B5,B8D6,EED3,EED4,D4BF,C7D5,BEFB,CED9,B9B3,EED6,EED5,EED8,EED7,C5A5,EED9,EEDA,C7AE,EEDB,C7AF,EEDC,B2A7,EEDD,EEDE,EEDF,EEE0,EEE1,D7EA,EEE2,EEE3,BCD8,EEE4,D3CB,CCFA,B2AC,C1E5,EEE5,C7A6,C3AD,EEE6,EEE7,EEE8,EEE9,EEEA,EEEB,EEEC,EEED,EEEE,EEEF,EEF0,EEF1,EEF2,EEF4,EEF3,EEF5,CDAD,C2C1,EEF6,EEF7,EEF8,D5A1,EEF9,CFB3,EEFA,EEFB,EEFC,EEFD,EFA1,EEFE,EFA2,B8F5,C3FA,EFA3,EFA4,BDC2,D2BF,B2F9,EFA5,EFA6,EFA7,D2F8,EFA8,D6FD,EFA9,C6CC,EFAA,EFAB,C1B4,EFAC,CFFA,CBF8,EFAE,EFAD,B3FA,B9F8,EFAF,EFB0,D0E2,EFB1,EFB2,B7E6,D0BF,EFB3,EFB4,EFB5,C8F1,CCE0,EFB6,EFB7,EFB8,EFB9,EFBA,D5E0,EFBB,B4ED,C3AA,EFBC,EFBD,EFBE,EFBF,CEFD,EFC0,C2E0,B4B8,D7B6,BDF5,CFC7,EFC3,EFC1,EFC2,EFC4,B6A7,BCFC,BEE2,C3CC,EFC5,EFC6,EFC7,EFCF,EFC8,EFC9,EFCA,C7C2,EFF1,B6CD,EFCB,EFCC,EFCD,B6C6,C3BE,EFCE,EFD0,EFD1,EFD2,D5F2,EFD3,C4F7,EFD4,C4F8,EFD5,EFD6,B8E4,B0F7,EFD7,EFD8,EFD9,EFDA,EFDB,EFDC,EFDD,EFDE,BEB5,EFE1,EFDF,EFE0,EFE2,EFE3,C1CD,EFE4,EFE5,EFE6,EFE7,EFE8,EFE9,EFEA,EFEB,EFEC,C0D8,EFED,C1AD,EFEE,EFEF,EFF0,CFE2,B3A4,C3C5,E3C5,C9C1,E3C6,B1D5,CECA,B4B3,C8F2,E3C7,CFD0,E3C8,BCE4,E3C9,E3CA,C3C6,D5A2,C4D6,B9EB,CEC5,E3CB,C3F6,E3CC,B7A7,B8F3,BAD2,E3CD,E3CE,D4C4,E3CF,E3D0,D1CB,E3D1,E3D2,E3D3,E3D4,D1D6,E3D5,B2FB,C0BB,E3D6,C0AB,E3D7,E3D8,E3D9,E3DA,E3DB,B8B7,DAE2,B6D3,DAE4,DAE3,DAE6,C8EE,DAE5,B7C0,D1F4,D2F5,D5F3,BDD7,D7E8,DAE8,DAE7,B0A2,CDD3,DAE9,B8BD,BCCA,C2BD,C2A4,B3C2,DAEA,C2AA,C4B0,BDB5,CFDE,DAEB,C9C2,B1DD,DAEC,B6B8,D4BA,B3FD,DAED,D4C9,CFD5,C5E3,DAEE,DAEF,DAF0,C1EA,CCD5,CFDD,D3E7,C2A1,DAF1,CBE5,DAF2,CBE6,D2FE,B8F4,DAF3,B0AF,CFB6,D5CF,CBED,DAF4,E3C4,C1A5,F6BF,F6C0,F6C1,C4D1,C8B8,D1E3,D0DB,D1C5,BCAF,B9CD,EFF4,B4C6,D3BA,F6C2,B3FB,F6C3,B5F1,F6C5,D3EA,F6A7,D1A9,F6A9,F6A8,C1E3,C0D7,B1A2,CEED,D0E8,F6AB,CFF6,F6AA,D5F0,F6AC,C3B9,BBF4,F6AE,F6AD,C4DE,C1D8,CBAA,CFBC,F6AF,F6B0,F6B1,C2B6,B0D4,C5F9,F6B2,C7E0,F6A6,BEB8,BEB2,B5E5,B7C7,BFBF,C3D2,C3E6,D8CC,B8EF,BDF9,D1A5,B0D0,F7B0,F7B1,D0AC,B0B0,F7B2,F7B3,F7B4,C7CA,BECF,F7B7,F7B6,B1DE,F7B5,F7B8,F7B9,CEA4,C8CD,BAAB,E8B8,E8B9,E8BA,BEC2,D2F4,D4CF,C9D8,D2B3,B6A5,C7EA,F1FC,CFEE,CBB3,D0EB,E7EF,CDE7,B9CB,B6D9,F1FD,B0E4,CBCC,F1FE,D4A4,C2AD,C1EC,C6C4,BEB1,F2A1,BCD5,F2A2,F2A3,F2A4,D2C3,C6B5,CDC7,F2A5,D3B1,BFC5,CCE2,F2A6,F2A7,D1D5,B6EE,F2A8,F2A9,B5DF,F2AA,F2AB,B2FC,F2AC,F2AD,C8A7,B7E7,ECA9,ECAA,ECAB,ECAC,C6AE,ECAD,ECAE,B7C9,CAB3,E2B8,F7CF,F7D0,B2CD,F7D1,F7D3,F7D2,E2BB,BCA2,E2BC,E2BD,E2BE,E2BF,E2C0,E2C1,B7B9,D2FB,BDA4,CACE,B1A5,CBC7,E2C2,B6FC,C8C4,E2C3,BDC8,B1FD,E2C4,B6F6,E2C5,C4D9,E2C6,CFDA,B9DD,E2C7,C0A1,E2C8,B2F6,E2C9,C1F3,E2CA,E2CB,C2F8,E2CC,E2CD,E2CE,CAD7,D8B8,D9E5,CFE3,F0A5,DCB0,C2ED,D4A6,CDD4,D1B1,B3DB,C7FD,B2B5,C2BF,E6E0,CABB,E6E1,E6E2,BED4,E6E3,D7A4,CDD5,E6E5,BCDD,E6E4,E6E6,E6E7,C2EE,BDBE,E6E8,C2E6,BAA7,E6E9,E6EA,B3D2,D1E9,BFA5,E6EB,C6EF,E6EC,E6ED,E6EE,C6AD,E6EF,C9A7,E6F0,E6F1,E6F2,E5B9,E6F3,E6F4,C2E2,E6F5,E6F6,D6E8,E6F7,E6F8,B9C7,F7BB,F7BA,F7BE,F7BC,BAA1,F7BF,F7C0,F7C2,F7C1,F7C4,F7C3,F7C5,F7C6,F7C7,CBE8,B8DF,F7D4,F7D5,F7D6,F7D8,F7DA,F7D7,F7DB,F7D9,D7D7,F7DC,F7DD,F7DE,F7DF,F7E0,DBCB,D8AA,E5F7,B9ED,BFFD,BBEA,F7C9,C6C7,F7C8,F7CA,F7CC,F7CB,F7CD,CEBA,F7CE,C4A7,D3E3,F6CF,C2B3,F6D0,F6D1,F6D2,F6D3,F6D4,F6D6,B1AB,F6D7,F6D8,F6D9,F6DA,F6DB,F6DC,F6DD,F6DE,CFCA,F6DF,F6E0,F6E1,F6E2,F6E3,F6E4,C0F0,F6E5,F6E6,F6E7,F6E8,F6E9,F6EA,F6EB,F6EC,F6ED,F6EE,F6EF,F6F0,F6F1,F6F2,F6F3,F6F4,BEA8,F6F5,F6F6,F6F7,F6F8,C8FA,F6F9,F6FA,F6FB,F6FC,F6FD,F6FE,F7A1,F7A2,F7A3,F7A4,F7A5,F7A6,F7A7,F7A8,B1EE,F7A9,F7AA,F7AB,F7AC,F7AD,C1DB,F7AE,F7AF,C4F1,F0AF,BCA6,F0B0,C3F9,C5B8,D1BB,F0B1,F0B2,F0B3,F0B4,F0B5,D1BC,D1EC,F0B7,F0B6,D4A7,CDD2,F0B8,F0BA,F0B9,F0BB,F0BC,B8EB,F0BD,BAE8,F0BE,F0BF,BEE9,F0C0,B6EC,F0C1,F0C2,F0C3,F0C4,C8B5,F0C5,F0C6,F0C7,C5F4,F0C8,F0C9,F0CA,F7BD,F0CB,F0CC,F0CD,F0CE,F0CF,BAD7,F0D0,F0D1,F0D2,F0D3,F0D4,F0D5,F0D6,F0D8,D3A5,F0D7,F0D9,F5BA,C2B9,F7E4,F7E5,F7E6,F7E7,F7E8,C2B4,F7EA,F7EB,C2F3,F4F0,F4EF,C2E9,F7E1,F7E2,BBC6,D9E4,CAF2,C0E8,F0A4,BADA,C7AD,C4AC,F7EC,F7ED,F7EE,F7F0,F7EF,F7F1,F7F4,F7F3,F7F2,F7F5,F7F6,EDE9,EDEA,EDEB,F6BC,F6BD,F6BE,B6A6,D8BE,B9C4,D8BB,DCB1,CAF3,F7F7,F7F8,F7F9,F7FB,F7FA,B1C7,F7FC,F7FD,F7FE,C6EB,ECB4,B3DD,F6B3,F6B4,C1E4,F6B5,F6B6,F6B7,F6B8,F6B9,F6BA,C8A3,F6BB,C1FA,B9A8,EDE8,B9EA,D9DF,A3A1,A3A2,A3A3,A1E7,A3A5,A3A6,A3A7,A3A8,A3A9,A3AA,A3AB,A3AC,A3AD,A3AE,A3AF,A3B0,A3B1,A3B2,A3B3,A3B4,A3B5,A3B6,A3B7,A3B8,A3B9,A3BA,A3BB,A3BC,A3BD,A3BE,A3BF,A3C0,A3C1,A3C2,A3C3,A3C4,A3C5,A3C6,A3C7,A3C8,A3C9,A3CA,A3CB,A3CC,A3CD,A3CE,A3CF,A3D0,A3D1,A3D2,A3D3,A3D4,A3D5,A3D6,A3D7,A3D8,A3D9,A3DA,A3DB,A3DC,A3DD,A3DE,A3DF,A3E0,A3E1,A3E2,A3E3,A3E4,A3E5,A3E6,A3E7,A3E8,A3E9,A3EA,A3EB,A3EC,A3ED,A3EE,A3EF,A3F0,A3F1,A3F2,A3F3,A3F4,A3F5,A3F6,A3F7,A3F8,A3F9,A3FA,A3FB,A3FC,A3FD,A1AB,A1E9,A1EA,A3FE,A3A4';
		}

		// var UnicodeToAnsi = function(chrCode){
		// var chrHex=chrCode.toString(16);
		// chrHex="000"+chrHex.toUpperCase();
		// chrHex=chrHex.substr(chrHex.length-4);
		// var i=UnicodeChr().indexOf(chrHex);
		// if(i!=-1)
		// {
		// chrHex=AnsicodeChr().substr(i,4);
		// }
		// return parseInt(chrHex,16);
		// }

		var AnsiToUnicode = function (chrCode) {
			var chrHex = chrCode.toString(16);
			chrHex = "000" + chrHex.toUpperCase();
			chrHex = chrHex.substr(chrHex.length - 4);
			var i = AnsicodeChr().indexOf(chrHex);
			if (i != -1) {
				chrHex = UnicodeChr().substr(i, 4);
			}
			return parseInt(chrHex, 16)
		}

		// var str2asc = function(str){
		// var n = UnicodeToAnsi(str.charCodeAt(0));
		// var s = n.toString(16);
		// return s.toUpperCase();
		// }

		var asc2str = function (code) {
			var n = AnsiToUnicode(code);
			return String.fromCharCode(n);
		}

		var ret = "";
		for (var i = 0; i < str.length; i++) {
			var chr = str.charAt(i);
			if (chr == "+") { ret += " "; }
			else if (chr == "%") {
				var asc = str.substring(i + 1, i + 3);
				if (parseInt("0x" + asc) > 0x7f) {
					ret += asc2str(parseInt("0x" + asc + str.substring(i + 4, i + 6)));
					i += 5;
				} else {
					ret += asc2str(parseInt("0x" + asc));
					i += 2;
				}
			} else {
				ret += chr;
			}
		}
		return ret;
	}

	function parseCookie(cookie) {
		var cookies = {};
		if (!cookie) {
			return cookies;
		}
		var list = cookie.split(';');
		for (var i = 0; i < list.length; i++) {
			var pair = list[i].split('=');
			cookies[pair[0].trim().toLowerCase()] = [pair[1], pair[2]];
		}
		return cookies;
	}
	//{
	//	function target_google(doc,index){
	//		var as = $X('descendant::a[@href and not(starts-with(@href,"javascript:") or starts-with(@href,"#"))]',doc);
	//		as.forEach(function(a,i){
	//			if (a.target != 'self')
	//				a.target = PRE + (i + (index || 0) * as.length) + '::' + encodeURIComponent(keyword);
	//		});
	//	}

	// alert(urlDecode("%B9%E9%B8%F9%BD%E1%B5%D7"));
	//}
	// l(keyword);
})();
//console.timeEnd("highlight");

// Bench: http://www.google.com/search?hl=en&q=HTML+5+Markup+Language