Enhanced word highlight

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

K instalaci tototo skriptu si budete muset nainstalovat rozšíření jako Tampermonkey, Greasemonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Violentmonkey.

K instalaci tohoto skriptu si budete muset nainstalovat rozšíření jako Tampermonkey nebo Userscripts.

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

K instalaci tohoto skriptu si budete muset nainstalovat manažer uživatelských skriptů.

(Už mám manažer uživatelských skriptů, nechte mě ho nainstalovat!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Už mám manažer uživatelských stylů, nechte mě ho nainstalovat!)

// ==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.5
// ==/UserScript==

// great credit for original script wright os0x [http://userscripts.org/scripts/show/43419]
// hzhbest modded  | detail in http://userscripts.org/scripts/show/64877
// 185: fix history keyword cleaning mechanism, fix highlight mis-refreshing with no initial highlight, improve highlight refreshing mechanism when scrolling, add floating tip when changing global highlight status, add several highlight color selections
// TODO: 默认四角位置选项;锁定时按钮状态可选只锁定当前主域名;可选项从当前位置开始寻觅高亮

//console.time("highlight");
function l() {	//debug
	var args = Array.prototype.slice.call(arguments);
	console.log.apply(console, args);
}
function ddebug(vname, varl) {
	function gettime() {
		var d = new Date();
		return d.toLocaleTimeString();
	}
	var debugv = {
		fn_name: arguments.callee.caller.name,
		v_name: vname,
		v_value: varl,
		time: gettime()
	};
	l(debugv);
}

(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|text/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 = [	// 配色数组;注:STYLE_COLOR 和 BORDER_COLOR 是各组各色一一对应的
		// 普通颜色
		['#FFFF80', '#99ccff', '#ff99cc', '#66cc66', '#cc99ff', '#ffcc66', '#66aaaa', '#dd9966', '#aaaaaa', '#dd6699'],
		// 浅一点的颜色
		['#FFFFa0', '#bbeeff', '#ffbbcc', '#88ee88', '#ccbbff', '#ffee88', '#88cccc', '#ffbb88', '#cccccc', '#ffaabb'],
		// 马卡龙色
		['#D6E19C', '#A2BFE1', '#DC95BF', '#1FC6B2', '#928AD3', '#E4C994', '#94CCC3', '#D5B87C', '#B2D1D3', '#DD8DB0'],
		// 彩虹色
		['#ff7575', '#ff9175', '#ffca75', '#ffff75', '#75ff75', '#75fff1', '#75c1ff', '#757aff', '#d675ff', '#ff75cc'],
		// 莫兰迪色
		['#EBD9CB', '#D8B0B0', '#ACD4D6', '#C3BAB1', '#E7ADAC', '#EBC1A8', '#A6BAAF', '#B98A82', '#e8d1cb', '#DECECE'],
		// 荧光笔色
		['#FFF36D', '#8DE971', '#FFCD8A', '#FFACB6', '#F3C9E4', '#FF9DE5', '#6DD5C3', '#B29EE7', '#A6DDEA', '#50C2E1']
	]
	const BORDER_COLOR = [
		['#aaaa20', '#4477aa', '#aa4477', '#117711', '#7744aa', '#aa7711', '#115555', '#884411', '#555555', '#881144'],
		['#aaaa40', '#6699aa', '#aa6699', '#339933', '#9966aa', '#aa9933', '#337777', '#aa6633', '#777777', '#aa3366'],
		['#aeb780', '#869eb9', '#9e6c89', '#158679', '#5f5988', '#8b7b59', '#5e837c', '#8a7750', '#728789', '#955f77'],
		['#be5858', '#b86a56', '#b89254', '#b8b855', '#52b652', '#54b6ac', '#4f85b2', '#4f53b3', '#9450b2', '#ad4e8a'],
		['#ac9f95', '#947878', '#748e8f', '#7f7973', '#956e6e', '#977a6a', '#6a766f', '#6d524d', '#948682', '#928787'],
		['#bbb250', '#62a24f', '#b69160', '#b57980', '#ad8ea2', '#ae679b', '#489285', '#7b6da2', '#6f959e', '#348196']
	]
	// button color: normal bg / active bg / disabled bg / disable fg / border color.
	const cB_NorBg = '#ffffff', cB_ActBg = '#FFD000', cB_DisBg = '#c8c8c8', cB_DisFg = '#747474', cB_NorBr = '#6ed76e', cB_HovBg = '#cfc';
	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 ID_PRE_AS = PRE + '_words', ID_PRE_CK = ID_PRE + '_check', ID_PRE_LB = ID_PRE + '_label';
	const W_PRE = PRE + '_word';
	const STYLE_CLASS = '0123456789'.split('').map(function (a, i) { return W_PRE + i; });
	var setuped = false;		//初始启动状态:否
	var highlight_off = true;	//初始停用状态:否
	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::ewhilite[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;	//页面根节点
	var docH;
	const CanvasWidth = 150;	//分布图基础宽度
	var ratio = 1;				//分布图位置指示与实际比例
	var aside, section, handle, 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 = false;	// 关键词导航时暂停刷新的计时器和状态标志
	var scrolltimer;	// 页面滚动时刷新暂停的计时器
	var loadedtime;		// 脚本启动时间(数字串)
	var keyword_histore;		// 搜索结果关键词继承数组,[{,,,timestamp},{url,title,kw,time},...]
	var inIframe = false;	// 是否是在iframe中运行

	//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', '切换全部关键词高亮'],
		off_f: ['All keywords\' highlight removed', '已移除全部关键词高亮'],
		off_f_a: ['All keywords\' highlight restored', '已恢复全部关键词高亮'],
		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 set:', '当前锁定的关键词组:'],
		lock_a_e: ['; Click to unlock', ';点击解除锁定'],
		lock_f: ['Keyword set is locked', '关键词组已锁定'],
		lock_f_a: ['Keyword set is unlocked', '关键词组已解锁'],
		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.
		confM: ['Advanced Config', '高级设置'],
		confT: ['Enhanced word highlight <br>Advanced Config', 'Enhanced word highlight <br>高级设置'],
		// 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', '其他(能应付任何自动翻页工具)'],
		color_choice: ['Choose a color scheme for highlight:', '选一个高亮色方案:'],
		color_choice1: ['Normal Color', '普通颜色'],
		color_choice2: ['Lighter Color', '浅一点的颜色'],
		color_choice3: ['Macaroon Color', '马卡龙色'],
		color_choice4: ['Rainbow Color', '彩虹色'],
		color_choice5: ['Morandi Color', '莫兰迪色'],
		color_choice6: ['Fluorescent Color', '荧光笔色'],
		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: ['Allow auto keyword preparation for highlight later? (Locked keywords will always be prepared)', '是否允许自动提取关键词以备高亮?(锁定关键词始终会被提取)'],
		no_auto_hili1: ['Allow all', '允许任何关键词'],
		no_auto_hili2: ['Disallow all', '不允许任何关键词'],
		no_auto_hili3: ['Allow only search engines keywords and inheriting keywords', '仅允许搜索引擎关键词和继承关键词'],
		no_auto_hili4: ['Allow only inheriting keywords', '仅允许继承关键词'],
		no_init_hili: ['With prepared keywords (including locked keywords), highlight initially as page loads?', '有提取成功的关键词时(包括锁定关键词),是否在页面加载时直接高亮?'],
		no_init_hili1: ['Highlight initially', '直接高亮'],
		no_init_hili2: ['Leave keywords on highlight panel and don\'t highlight', '不直接高亮但在高亮面板保留关键词'],
		sort_keywords: ['Highligh longer words first. Recommended, except for highlighting regular expression.', '优先高亮长词,推荐选择,需要高亮正则表达式的除外。'],
		sort_keywords1: ['Sort words before highlight', '高亮前先排序目标词'],
		x_slim_panel: ['If you want the highlight panel a minimal look:', '希望高亮面板视觉占用最小化的话:'],
		x_slim_panel1: ['Enable extrime slim panel style', '启用极简面板样式'],
		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'],			//https://greasyfork.org/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
		['#common2', 'keyword', '']			// 常见关键词参数前缀,如Bilibili
	];

	// List of query string of query input boxes; Array('STR FOR querySelector', '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
		['.input', '/search']		// ixigua.com
	];

	// 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 checking 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 by default in iframes
		inIframe = true;	// in iframes recognition
	}

	// #### 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)

		color_choice: 0,
		// choose a set of highlight color
		// 0 for normal set, 1 for lighter set, and more

		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

		no_init_hili: 0,
		// When auto-highlight, keep keywords while not highligh initially?
		// 0-no, 1-yes

		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.

		x_slim_panel: 0,
		// extrime slim panel style? 0-no, 1-yes

		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: "color_choice",
			title: _di.color_choice[_L],
			type: "check",
			choices: [_di.color_choice1[_L], _di.color_choice2[_L], _di.color_choice3[_L], _di.color_choice4[_L], _di.color_choice5[_L], _di.color_choice6[_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: "no_init_hili",
			title: _di.no_init_hili[_L],
			type: "check",
			choices: [_di.no_init_hili1[_L], _di.no_init_hili2[_L]]
		},
		{
			id: "sort_keywords",
			title: _di.sort_keywords[_L],
			type: "check",
			choices: [_di.sort_keywords1[_L]]
		},
		{
			id: "x_slim_panel",
			title: _di.x_slim_panel[_L],
			type: "check",
			choices: [_di.x_slim_panel1[_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)
			var CFG_s = JSON.parse(confstr);		//则载入
			for (const key in CFG) {				// 载入的属性值在CFG(脚本版本结构)中存在则引入属性值
				if (Object.hasOwnProperty.call(CFG_s, key)) {
					CFG[key] = CFG_s[key];
				}
			}
		} 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 + 2 * a_day)) { // 每两天清理超过两天前的记录

					let i;
					for (i = 1; i < keyword_histore.length; i++) {
						if (loadedtime <= (keyword_histore[i].time + 2 * a_day)) {
							break;
						}
					}
					keyword_histore.splice(1, i - 1);
					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));
			}
		}
		// Initial highlight
		highlight_off = (CFG.no_init_hili == 1);
		// Saved position
		if (CFG.save_panel_pos) panel_pos_arr = GM_getValue(PO_PRE, panel_pos_arr.join('|')).split('|');
		// Configs menu
		if (!inIframe) {		// only add menu item for top page
			GM_registerMenuCommand(_di.confM[_L], config_box);
		}

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

	// main process
	init_keyboard();
	var retry, old_title;
	retry = setInterval(() => {			// 尝试在网页正常载入(title不为空)时再高亮
		if (document.title.length > 0 || retry_for_title == 0) {		// 尝试多次后放弃
			clearInterval(retry);
			old_title = document.title;
			if (load_keyword() !== false || init_keyword() !== false) {	// 找寻可高亮的关键词并高亮
				setup();
			}
			setTimeout(watchTitle, 1000);				// 延时设置监视器,若标题变化则重新高亮
		} else {
			retry_for_title -= 1;									// 尝试次数减一
		}
	}, delay);

	// Functions

	// 检测标题变化重载高亮
	function watchTitle() {
		var watch = qElem('title');
		if (!watch) {
			return;		// 无title元素则退出(避免报错)
		}
		var opts = {
			childList: true,
			subtree: true,
			characterData: true
		};
		new (window.MutationObserver || window.WebKitMutationObserver)((mutations) => {
			if (document.title !== old_title) {
				// console.log('title changed', document.title, old_title);
				command_close();
				window.name.replace(PRE + '::CLOSED::', '');
				if (load_keyword() !== false || init_keyword() !== false) {
					setup();
				}
			}
		}).observe(watch, opts);
	}

	// 对目标文档(元素)对指定关键词数组进行高亮 ##
	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::ewhilite 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] = '<ewhilite class="' + STYLE_CLASS[_i % 10] + '" name="' + W_PRE + _i + '">' + $1 + '</ewhilite>';
						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 stcol = STYLE_COLOR[CFG.color_choice];
			var hilistyles = stcol.map((rgb, i) => {
				return `ewhilite.${W_PRE + i}, .${PRE}_item${i} {background:${rgb}!important;}`;
			}).join("\n");
			// 高亮边框样式
			var bdcol = BORDER_COLOR[CFG.color_choice];
			var borderstyles = bdcol.map((rgb, i) => {
				return `div.${PRE}_item${i} {outline:1px solid ${rgb}!important;}`;
			}).join("\n");
			// 极简面板样式:
			var xs_section = (CFG.x_slim_panel) ? 'border: 1px solid #d6d6d600; background: #ffffff00;' : 'border: 1px solid #d6d6d6; background: #ffffff;';
			var xs_handle = (CFG.x_slim_panel) ? 'opacity: 0;' : 'opacity: 1;';
			// 主样式表
			var mainstyles = `
				/* 高亮关键字样式 */
				ewhilite[class^="${W_PRE}"] {
					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;
				}
				/* 高亮面板样式 */
				#${ID_PRE_AS} * {
					font-size: initial !important; padding: initial !important; margin: initial !important; 
					line-height: initial !important;
				}
				#${ID_PRE_AS}, #${ID_PRE_AS} * {font-family: Arial;}
				#${ID_PRE_AS} {
					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]}
				}
				#${ID_PRE_AS} > section {
					clear: right; line-height: 1 !important; ${xs_section} box-sizing: border-box;
					display: block; position: relative; transition: all 0.3s ease-in-out 5s;
				}
				#${ID_PRE_AS}:hover > section, #${ID_PRE_AS}.ewh_edit > section {
					border: 1px solid #d6d6d6; background: #fff; transition: all 0.3s ease-in-out;
				}
				#${ID_PRE_AS} * {width: auto; height: auto;}
				#${ID_PRE_AS}:hover {opacity: 1;}
				#${ID_PRE_AS}:hover > section {opacity: 1; border-color: #333;}
				/* 基框样式 */
				#${ID_PRE_AS} > section > div.${PRE}_gridbox {
					display: grid; grid-template-columns: max-content max-content auto max-content;
					grid-template-rows: 
					margin: 0px !important; padding: 0 !important;
				}
				#${ID_PRE_AS} > section > div.${PRE}_gridbox > div{
					margin: 2px !important; padding: 0 !important;
				}
				#${ID_PRE_AS} > section > * {vertical-align: middle;}
				/* 拖动手柄样式 */
				#${ID_PRE_AS} #_ewh_handle {
					width: 10px !important; min-width: unset !important; cursor: move; ${xs_handle} 
					background: #ccc; transition: all 0.3s ease-in-out 5s;
				}
				#${ID_PRE_AS}:hover #_ewh_handle, #${ID_PRE_AS}.ewh_edit #_ewh_handle {
					background: #999; opacity: 1; transition: all 0.3s ease-in-out;
				}
				#${ID_PRE_AS} #_ewh_handle:hover {background: #333;}
				#${ID_PRE_AS}.ewh_hide #_ewh_handle {cursor: pointer; opacity: 1;}
				/* 控制按钮样式 */
				#${ID_PRE_AS} > section .${PRE}_ctrl {
					display: block !important; max-width: 0; max-height: 24pt; 
					overflow: hidden; position: relative; transition: all 0.3s ease-in-out 5s;
				}
				#${ID_PRE_AS}:hover > section .${PRE}_ctrl, #${ID_PRE_AS}.ewh_edit > section .${PRE}_ctrl {
					max-width: 200px; transition: all 0.1s ease-in-out 0s;
				}
				#${ID_PRE_AS} > section .${PRE}_ctrl > input {
					display: inline; position: relative; width: 13pt; height: 20pt; margin: 0.2em 2px !important;
					background: ${cB_NorBg}; border: 2px solid; border-color: ${cB_NorBg} ${cB_NorBg} ${cB_NorBr} ${cB_NorBg}; 
					font-size: 12pt !important; font-family: "Arial Narrow"; color: black; cursor: pointer; 
				}
				#${ID_PRE_AS} > section .${PRE}_ctrl > input._active {background:${cB_ActBg}; border-color: ${cB_NorBr};}
				#${ID_PRE_AS} > section .${PRE}_ctrl > input._disable {
					background: ${cB_DisBg} !important; color: ${cB_DisFg}; border-color: ${cB_NorBg}; cursor: not-allowed;
				}
				#${ID_PRE_AS} > section .${PRE}_ctrl > input:not(._disable):hover {
					background: ${cB_HovBg}; border-color: ${cB_NorBr}; z-index: 100;
				}
				/* 高亮编辑框样式 */
				#${ID_PRE_AS}.ewh_edit {opacity: 1;}
				#${ID_PRE_AS}.ewh_edit > nav {display: none;}
				#${ID_PRE_AS}.ewh_edit #${PRE}_word_inputs_list {display: none;}
				#${ID_PRE_AS} form.${PRE}_editor {display: none;}
				#${ID_PRE_AS}.ewh_edit form.${PRE}_editor {display: inline-block; width: 100%;}
				#${ID_PRE_AS}.ewh_edit form.${PRE}_editor input {
					min-width: 80px; height: 26.5px; margin: 2px 0 !important; font-size: 12pt !important; width: 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;}
				/* 分布图按钮样式 */
				#${ID_PRE_AS} > section div#_ewh_maplock > input {
					display: inline; width: 1.3em; height: 23pt; margin: 0.1em 0.1em 0.1em 0 !important; 
					background: #FAFAFA;  color: #4d4d4d; font-size: 10pt !important;
					border: none; cursor: pointer;
				}
				#${ID_PRE_AS} > section div#_ewh_maplock > input:hover {background: ${cB_NorBg};}
				#${ID_PRE_AS} > section div#_ewh_maplock > input._active {background: ${cB_ActBg};}
				/* 高亮分布图样式 */
				#${ID_PRE_AS} > nav {
					display: none; width: 100%; padding: 3px !important; position: relative; min-height: 0 !important;
				}
				#${ID_PRE_AS}.ewh_dragging > nav {display: none !important;}
				#${ID_PRE_AS} > nav > canvas.backport {
					background: rgba(0,0,0,0.5); cursor: pointer; position: absolute; right: 6px; z-index: 3;
				}
				#${ID_PRE_AS} > 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); */
				#${ID_PRE_AS}:hover > nav {display: block;}
				#${ID_PRE_AS}._off > nav {display: none;}
				#${ID_PRE_AS} > nav._locked {display: block;}
				#${ID_PRE_AS}:hover > nav > canvas.backport {bottom: 0px;}
				#${ID_PRE_AS} > nav._locked > canvas.backport {bottom: 0px;}
				/* 指示条样式 */
				@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;
				}
			`;
			main_sheet = addCSS(mainstyles + hilistyles + borderstyles);
		}
		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 = ID_PRE_AS;
		section = creaElemIn('section', aside);		//主容器
		var gridbox = creaElemIn('div', section);	//排版容器
		gridbox.className = PRE + '_gridbox';

		handle = creaElemIn('div', gridbox);		//拖动手柄
		handle.id = '_ewh_handle';
		handle.title = _ti.td0[_L];
		var ctrl = creaElemIn('div', gridbox);		//功能按钮区
		ctrl.className = PRE + '_ctrl';
		var edkw = creaElemIn('div', gridbox);		//编辑/高亮区
		var mapb = creaElemIn('div', gridbox);		//分布图按钮区
		mapb.id = '_ewh_maplock';

		var close = creaElemIn('input', ctrl);		//关闭按钮
		close.type = 'button';
		close.className = 'c_b';
		close.value = 'X';
		close.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];

		var editor = creaElemIn('form', edkw);		//关键词编辑表单
		editor.className = PRE + '_editor';
		text_input = creaElemIn('input', editor);	//关键期编辑输入框
		text_input.type = 'text';
		word_inputs_list = creaElemIn('div', edkw);	//高亮按钮外框容器
		word_inputs_list.id = PRE + '_word_inputs_list';
		word_inputs_list.className = PRE + '_inputs';

		var maplock = creaElemIn('input', mapb);		//分布图按钮
		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.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];
			if (keyword_locked) lock.classList.add('_active');
			lock.addEventListener('click', function () {
				if (aside.className == 'ewh_edit') return;
				if (keyword_locked) {
					lock.classList.remove('_active');
					lock.title = _ti.lock[_L];
					GM_setValue(ST_PRE, '');
					keyword_locked = '';
					float_tip(_ti.lock_f_a[_L], 25);
					//				lock.value = 'Lock: Off';
				} else {
					lock.classList.add('_active');
					lock.title = _ti.lock_a[_L] + ' ' + keyword + _ti.lock_a_e[_L];
					GM_setValue(ST_PRE, keyword);
					keyword_locked = keyword;
					float_tip(_ti.lock_f[_L], 25);
					//				lock.value = 'Lock: On';
				}
			}, false);
		} else {
			lock.title = _ti.lock_u[_L];
			lock.className = '_disable';
		}
		handle.addEventListener('dblclick', function (evt) {
			if (panel_hide) {
				aside.style.right = '0px';
				aside.classList.remove('ewh_hide');
				panel_hide = false;
				this.title = _ti.td0[_L];
			} else {
				aside.style.right = (14 - aside.offsetWidth) + 'px';
				aside.classList.add('ewh_hide');
				panel_hide = true;
				this.title = _ti.td0_a[_L];
			}
		}, false);
		maplock.addEventListener('click', function () {
			if (!nav.className) {
				nav.classList.add('_locked');
				this.value = '▼';
				this.classList.add('_active');
			}
			else {
				nav.classList.remove('_locked')
				this.value = '▲';
				this.classList.remove('_active');
			}
		}, false);
		aside.addEventListener('mouseleave', () => {
			for (let i in word_lists) {
				if (word_lists[i].check.checked == false) {
					word_lists[i].label.textContent = word_lists[i].word;
				}
			}
		}, false);

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

		docH = document.body.scrollHeight;

		// sync with map & check page
		window.addEventListener('scroll', function () {
			if (window.name == PRE + '::CLOSED::' || highlight_off) return;
			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';
			clearTimeout(scrolltimer);
			scrolltimer = setTimeout(() => {
				if (!onpause) checkpage();
			}, 400);
		}, false);

		// go to highlight
		word_lists = create_inputlist(words);
		if (highlight_off) {		// 若初始停用高亮,则不进行高亮,且面板设为停用高亮状态
			toggle_off(true);
			for (let i in word_lists) {
				word_lists[i].label.textContent = word_lists[i].word;
			}
		} else {					// 若启用高亮,则执行正常高亮程序
			highlight(document.body);
			after_load();
			layers = xp_all.get();
			draw_wordmap();
		}

		init_autopager();
		if (panel_hide && !init) {
			aside.style.right = (14 - aside.offsetWidth) + 'px';
			aside.classList.add('ewh_hide');
			handle.title = _ti.td0_a[_L];
		}
		ddebug("words", words);
	}

	// 检查页面高度变化,变化则重新高亮
	function checkpage() {
		if (root.scrollHeight !== docH) {
			setTimeout(() => {
				resetup();
				docH = root.scrollHeight;
			}, 400);
		}
	}

	// 清除指定或所有高亮
	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.scrollY * 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 resetRect(node, setToFix) {
		if (setToFix) {
			var p = node.getBoundingClientRect();
			node.style.height = p.height + 'px';
			node.style.width = p.width + 'px';
		} else {
			node.style.height = 'auto';
			node.style.width = 'auto';
		}
	}

	// 获取可见节点;(目标节点,排除节点的ClassName);!节点坐标(用户视窗坐标)需在可见范围
	function getVisNode(node, excludeNodeClassName) {
		var pnode = node.parentNode;
		if (pnode.tagName == 'BODY') {
			return node;
		}
		var p = node.getBoundingClientRect();
		var vnode;
		var vnodes = document.elementsFromPoint(Math.ceil(p.x), Math.ceil(p.y)), isvp;
		if (!!vnodes[0]) {
			for (let i = 0; i < vnodes.length; i++) {
				const vn = vnodes[i];
				if (vn.className !== excludeNodeClassName) {	// 若节点匹配排除节点ClassName则跳过
					vnode = vn;
					break;
				}
			}
			if (!!vnode) {
				var vp = vnode.getBoundingClientRect();
				isvp = (vp.x == p.x && vp.y == p.y);			// 子与坐标所见节点坐标一致
			} else {
				isvp = false;									// 匹配排除节点后无合适节点则放弃
			}
		} else {
			isvp = false;										// 无所在位置节点(或在视窗外)则放弃
		}
		if (isvp) {   // 子可见,则返回子
			return node;
		} else {
			return getVisNode(pnode);							// 从目标节点父元素继续找
		}
	}

	// 获取全尺寸上级元素
	function getPCNode(node) {
		var pnode = node.parentNode;
		if (pnode.tagName == 'BODY') {
			return node;
		}
		var p = node.getBoundingClientRect(), pp = pnode.getBoundingClientRect();
		var isinp = {
			l: p.left < pp.right && p.left >= pp.left,			// 子左在父左右之间
			r: p.right > pp.left && p.right <= pp.right,		// 子右在父左右之间
			t: p.top < pp.bottom && p.top >= pp.top,            // 子顶在父顶底之间
			b: p.bottom > pp.top && p.bottom <= pp.bottom,		// 子底在父顶底之间
		};
		if (isinp.l && isinp.r && isinp.t && isinp.b) {   // 子全在父之内,则返回子
			return node;
		} else {
			return getPCNode(pnode);
		}
	}

	// 滚动页面到目标节点
	function move(node) {
		if (!node) return;
		console.log('node: ', node);
		var _em_bar;
		var pnode = getPCNode(node);
		var vnode;
		if (node.getBoundingClientRect) {
			var pos = pnode.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;	// 滚动位置:元素显示顶边距(不是与页面顶边距),加页面纵位移,减半窗口内高,加元素高度
			vnode = getVisNode(node, PRE + "_bar");		// 在上一句跳转后再查找可见节点,避开指示条
			vnode.classList.add("wordhighlight_em");			// 在classname中加上突出样式名
			setTimeout(function () {
				vnode.classList.remove("wordhighlight_em");	// 在classname中去除突出样式名
				removeCnode(_em_bar);						// 如果有指示条则删除
			}, 3000);
			if (CFG.show_indc_bar) {	// 如果启用指示条,则创建指示条节点并显示到指定高度
				_em_bar = creaElemIn('div', document.body);
				_em_bar.className = PRE + "_bar";
				_em_bar.style = `height:${node_h}px; top:${scl_y + pos_t}px;`;
			}
		} else {
			pnode.scrollIntoView();
		}
	}

	// 新建或添加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::ewhilite[@name="' + W_PRE + _i + '"]', document.body); //提取当前编号关键词的所有高亮元素的对象体(使用其get方法)
			var xp_count = new $XE('count(descendant::ewhilite[@name="' + W_PRE + _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 ? naviTo(false, _i + 1, layers) : naviTo(true, _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_LB + _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_LB, ''));
				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_LB, ''));
				if (word_lists[_j].check.checked) {
					var layers = xp.get();						//获取全部高亮
					naviTo(false, _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_LB, ''));
				if (word_lists[_j].check.checked) {
					var layers = xp.get();						//获取全部高亮
					naviTo(true, _j + 1, layers);				//跳到当前词的下一个高亮
				}
			}, false);

			check.id = ID_PRE_CK + _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.classList.add('ewh_disable');
			}
			check.addEventListener('change', function (evt) {
				var _j = parseInt(evt.target.id.replace(ID_PRE_CK, ''));
				words[_j].ison = check.checked;
				if (check.checked) {
					highlight(document.body, { words: [words[_j]], index: _j });
					after_load(null, _j);
					word_lists[_j].item.classList.remove('ewh_disable');
					if (highlight_off) {
						toggle_off(false, false);
					}
				} else {
					restore_words(xp.get());
					draw_wordmap();
					word_lists[_j].item.classList.add('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.scrollX > x_border) x = window.scrollX + x_border;
				if (y - window.scrollY > y_border) y = window.scrollY + 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;
		}

		var ks = "";
		if (CFG.no_auto_hili != 3) { init_KW_UA(); ks = "搜索引擎"; } 		// 如果允许搜索网站高亮,从搜索网站获取
		if (!keyword) { init_KW_IH(); ks = "继承高亮"; } 					// 如果上一步找不到,则进行继承高亮
		if (!_no_refer && !keyword) { init_KW_RF(); ks = "来源高亮"; }		// 如果继承高亮了还找不到,则从页面来源获取次级搜索关键词
		if (!_no_refer && !keyword) { init_KW_HS(); ks = "历史搜索"; }		// 如果上一步依然找不到,则历史搜索高亮获取次级搜索关键词
		if (CFG.no_auto_hili != 3 && !keyword) { init_KW_QA(); ks = "通用匹配"; }	// 如果允许搜索网站高亮且还是找不到,则从搜索框获取(避免高亮了搜索框默认内容)

		keyword = trim(keyword);	// 清除前后杂物
		ddebug("ks", ks);
		ddebug("keyword", 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 (isliink(et)) {		// 点击的是链接节点且有href属性则返回节点
			return et;
		} else if (!!dt && isliink(dt)) {	// 若激活的节点是链接节点且有href属性则返回节点
			return dt;
		} else {
			for (let l = 0; l < 3; l++) {			// 否则上溯三层节点,寻找链接节点
				et = et.parentNode;
				if (isliink(et)) {
					return et;
				}
			}
			return false;
		}
	}

	// 检查目标节点是否链接节点;(目标节点)
	function isliink(node) {
		return (node.tagName == "A" && !!node.href);
	}

	// 从已知特征的搜索网站网址中获取关键词(一般搜索结果页面内高亮)
	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);
						}
					}
				});
			}
		}
	}

	// 从已知selector的搜索输入框中获取关键词(其他搜索结果页面内高亮)
	function init_KW_QA() {	//for other search result pages
		var srul = location.href;
		for (var z = 0; z < queryArr.length; z++) {
			var iq = qElem(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);
	}

	// 从surl中提取名为【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]{1,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;
	}

	// 寻觅高亮的位置并提示;(是否反向寻觅Boolean,要寻觅的高亮序号/0或空=>不指定,寻觅的高亮范围/空=>全部
	function naviTo(isbackward, index, _layers) {
		_layers || (_layers = (layers || (layers = xp_all.get())));
		index || (index = 0);
		(isbackward) ? --positions[index] : ++positions[index];
		if (!_layers[positions[index]]) {
			positions[index] = (isbackward) ? (_layers.length - 1) : 0;
		}
		move(_layers[positions[index]]);
		position_box(index);	// 显示指针位置提示
	}

	// 当前高亮指针位置提示:在面板或当前正在查找的高亮关键词按钮上方,显示当前查找到的高亮的指针位置
	function position_box(index) {
		var position_left;
		if (index == 0) {	// index为关键词(按钮)序号,index=0即不指定关键词
			position_left = 30;
		} else {
			position_left = word_lists[index - 1].item.offsetLeft + (word_lists[index - 1].item.clientWidth - 40) / 2;
		}
		float_tip(positions[index] + 1, position_left);	// 提示框内容为指针位置
		posi_tip_timer = setTimeout(function () { posi_tip.style.display = 'none'; }, 3000);	// 三秒后隐藏提示框
	}

	// 在高亮面板上显示浮动提示;(要显示的文本,左侧位置偏移)
	function float_tip(str, left_offset) {
		var tip_style = `
			background: white; color: black; border: 1px solid black; box-shadow: 0 2px 4px #444;
			position: absolute; left: 30px; z-index: 1025; height: 20px; top: -20px; min-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 = str;
		posi_tip.style.width = (str.length * 16 + 20) + 'px';
		posi_tip.style.left = left_offset + '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: function () {
				naviTo();
			},
			description: 'emphasis next keyword'
		});
		mini.addShortcutkey({
			key: KEY_PREV,
			command: function () {
				naviTo(true);
			},
			description: 'emphasis prev keyword'
		});
		mini.addShortcutkey({
			key: KEY_SEARCH,
			command: function (e) {
				instant_search();
			},
			description: 'emphasis new 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:
					naviTo();
					break;
				case KEY_PREV:
					naviTo(true);
					break;
				case KEY_OFF:
					command_off();
					for (let i in word_lists) {
						if (word_lists[i].check.checked == false) {
							word_lists[i].label.textContent = word_lists[i].word;
						}
					}
					break;
				case KEY_CLOSE:
					command_close();
					break;
				case KEY_EDIT:
					command_edit();
					break;
				case KEY_REFRESH:
					resetup();
					break;
			}
		}
	}

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

	// O按钮:切换全部高亮停用状态
	function command_off() {
		if (aside.className == 'ewh_edit') return;
		if (!highlight_off) {
			restore_words();
			toggle_off(true);
			float_tip(_ti.off_f[_L]);
		} else {
			highlight(document.body);
			toggle_off(false);
			float_tip(_ti.off_f_a[_L]);
			after_load();
		}
		draw_wordmap();
	}

	// 切换停用状态;(是否切换到停用状态,是否重置所有关键词按钮停用状态(在部分关键词恢复高亮时设为false))
	function toggle_off(setOffTo, setAllCheck) {
		var sac = (setAllCheck === false) ? false : true;
		if (setOffTo) {
			highlight_off = true;
			if (!!aside) {
				off.classList.add('_active');
				aside.classList.add('_off');
				if (sac) {
					for (let i in word_lists) {
						word_lists[i].check.checked = false;
						word_lists[i].item.classList.add('ewh_disable');
					}
				}
			}
		} else {
			highlight_off = false;
			if (!!aside) {
				off.classList.remove('_active');
				aside.classList.remove('_off');
				if (sac) {
					for (let i in word_lists) {
						word_lists[i].check.checked = true;
						word_lists[i].item.classList.remove('ewh_disable');
					}
				}
			}
		}
	}

	// E按钮:切换编辑状态(显隐关键词编辑框/关键词列表)
	function command_edit() {
		if (aside.classList.contains('ewh_edit')) {
			highlight_off = false;
			edit.classList.remove('_active');
			edit.title = _ti.edit[_L];
			if (gm_ok) lock.classList.remove('_disable');
			off.classList.remove('_disable');
			aside.classList.remove('ewh_edit');
			keyword = trim(text_input.value);
			prep_keyword();
			window.name = PRE + '::' + encodeURIComponent(keyword);
			resetup();
			resetRect(section);
		} else {
			var _aside_w = aside.offsetWidth;
			edit.classList.add('_active');
			edit.title = _ti.edit_a[_L];
			if (gm_ok) lock.classList.add('_disable');
			off.classList.add('_disable');
			resetRect(section, true);
			aside.classList.add('ewh_edit');
			text_input.value = keyword;
			text_input.focus();
			var t_width = Math.max(320, _aside_w) - 135;
			text_input.style.width = t_width + 'px;';
		}
	}

	// 激活关键词输入框,并即时查找当前输入的单个关键词
	// 输入_r:在关键词输入框中再触发(true)的话关闭关键词输入框(用于快捷键激活/关闭)
	// 输入e_target:按键触发即时高亮的所在节点,也是完成即时高亮后恢复焦点的目标节点
	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; color:#000; font-weight:bold; font-size:16pt; 
					max-width:70%; height:auto; opacity:0.95; box-shadow: #333 3px 3px 2px;
				}
				#${PRE}_textinputbox input[type=button] {
					padding:0;  display:inline; margin:0.1em 0.2em; width:1.4em; height:1.4em;
					background:${cB_NorBg}; 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;
				}
			`);
		}
		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';
				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', (event) => {
							config[event.target.id.replace(prefix, '')] = event.target.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;
								// ddebug("checknode.click=>config", config);
							});
						} 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 basebox = creaElemIn('div', basenode);
				basebox.className = '_setitem';
				var checknode = creaElemIn('input', basebox);
				checknode.id = id;
				checknode.type = 'checkbox';
				var checklabel = creaElemIn('label', basebox);
				checklabel.innerHTML = text;
				checklabel.htmlFor = checknode.id;
				return checknode;
			},
			addradiobox: function (id, text, basenode) {
				var basebox = creaElemIn('div', basenode);
				basebox.className = '_setitem';
				var radionode = creaElemIn('input', basebox);
				radionode.id = id;
				radionode.type = 'radio';
				var radiolabel = creaElemIn('label', basebox);
				radiolabel.innerHTML = text;
				radiolabel.htmlFor = radionode.id;
				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储存
			// ddebug("CFG", CFG);
			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:#ffffffb6; position:fixed; top:0; left:0; width:100%; height:100%;
					text-align:center; z-index:100000000;
				}
				.${PRE}_cbox {
					line-height:1.2; border:1px solid #333; border-left-width: 10px; 
					width:600px; height: 85%; margin: 30px auto auto auto; padding: 15px; 
					color: black !important; background: white; box-shadow: 0 0 15px 2px #b5b5b5; 
					text-align:left; position: relative; font-size: 12pt;
					display: grid; grid-template-rows: 1fr auto;
				}
				.${PRE}_cbox h3 {
					font-weight: 800; border-bottom: 1px solid black; width: 100%; 
					margin: 5px auto 10px auto; font-size: 15pt !important; color: black !important;
				}
				.${PRE}_bbox {width: 150px; text-align: center; position: absolute; top: 20px; right: 20px;}
				.${PRE}_bbox input {width: 56px; height: 25px; margin: 0 6px; border: 1px solid #87878c;}
				.${PRE}_bbox input:hover {filter: sepia(70%);}
				.${PRE}_bbox input:first-child {background: #bbd2ff;}
				.${PRE}_cobox {overflow-y: scroll;}
				.${PRE}_cobox ._setbox {display: block; padding: 8px 0;}
				.${PRE}_cobox ._setbox:hover {background: #f5f8ed;}
				.${PRE}_cobox ._setbox > p._titlebox {margin-bottom: 0.3em;}
				.${PRE}_cobox ._setbox:hover > p._titlebox {text-decoration: underline;}
				.${PRE}_cobox ._titlebox {padding: 3px 0;}
				.${PRE}_cobox ._setitem {width: fit-content; height: 1.6em;}
				.${PRE}_cobox ._setitem:hover {background: #dedeff;}
				.${PRE}_cobox input {
					color: black !important; margin: auto 4px; vertical-align: middle; background: #efefef;
				}
				.${PRE}_cobox label {
					min-width: 450px; color: black !important; display: inline-block; vertical-align: middle;
				}
			`);
		}
	}

	// 在高亮(关键词或页面)改变后,延时重新计数高亮数和重绘分布图
	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';
			}
		}
		return 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 '""';
		}
	}


	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;
	}

	// remove childnode with error prevention
	function removeCnode(node) {
		if (!!node && !!node.parentNode) {
			node.parentNode.removeChild(node);
			return false;
		}
	}

	// 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