diff --git a/chart_Latin.html b/lisp/chart_Latin.html similarity index 100% rename from chart_Latin.html rename to lisp/chart_Latin.html diff --git a/db.lisp b/lisp/db.lisp similarity index 100% rename from db.lisp rename to lisp/db.lisp diff --git a/eacc2uni.txt b/lisp/eacc2uni.txt similarity index 100% rename from eacc2uni.txt rename to lisp/eacc2uni.txt diff --git a/enc-marc-8.lisp b/lisp/enc-marc-8.lisp similarity index 100% rename from enc-marc-8.lisp rename to lisp/enc-marc-8.lisp diff --git a/grovel-yaz.lisp b/lisp/grovel-yaz.lisp similarity index 100% rename from grovel-yaz.lisp rename to lisp/grovel-yaz.lisp diff --git a/libyaz.lisp b/lisp/libyaz.lisp similarity index 100% rename from libyaz.lisp rename to lisp/libyaz.lisp diff --git a/lisp-unit.lisp b/lisp/lisp-unit.lisp similarity index 100% rename from lisp-unit.lisp rename to lisp/lisp-unit.lisp diff --git a/marc.lisp b/lisp/marc.lisp similarity index 100% rename from marc.lisp rename to lisp/marc.lisp diff --git a/package.lisp b/lisp/package.lisp similarity index 100% rename from package.lisp rename to lisp/package.lisp diff --git a/z3950.asd b/lisp/z3950.asd similarity index 100% rename from z3950.asd rename to lisp/z3950.asd diff --git a/python/PyZ3950/CQLParser.py b/python/PyZ3950/CQLParser.py new file mode 100644 index 0000000..e0779ab --- /dev/null +++ b/python/PyZ3950/CQLParser.py @@ -0,0 +1,987 @@ +#!/usr/bin/python + +# Author: Rob Sanderson (azaroth@liv.ac.uk) +# Distributed and Usable under the GPL +# Version: 1.7 +# Most Recent Changes: contexts, new modifier style for 1.1 +# +# With thanks to Adam from IndexData and Mike Taylor for their valuable input + +from shlex import shlex +from xml.sax.saxutils import escape +from xml.dom.minidom import Node, parseString +from PyZ3950.SRWDiagnostics import * +# Don't use cStringIO as it borks Unicode (apparently) +from StringIO import StringIO +import types + +# Parsing strictness flags +errorOnEmptyTerm = 0 # index = "" (often meaningless) +errorOnQuotedIdentifier = 0 # "/foo/bar" = "" (unnecessary BNF restriction) +errorOnDuplicatePrefix = 0 # >a=b >a=c "" (impossible due to BNF) +fullResultSetNameCheck = 1 # srw.rsn=foo and srw.rsn=foo (mutant!!) + +# Base values for CQL +serverChoiceRelation = "scr" +serverChoiceIndex = "cql.serverchoice" + +order = ['=', '>', '>=', '<', '<=', '<>'] +modifierSeparator = "/" +booleans = ['and', 'or', 'not', 'prox'] + +reservedPrefixes = {"srw" : "http://www.loc.gov/zing/cql/srw-indexes/v1.0/", + "cql" : "info:srw/cql-context-set/1/cql-v1.1"} + +XCQLNamespace = "http://www.loc.gov/zing/cql/xcql/" + +# End of 'configurable' stuff + +class PrefixableObject: + "Root object for triple and searchClause" + prefixes = {} + parent = None + config = None + + def __init__(self): + self.prefixes = {} + self.parent = None + self.config = None + + def toXCQL(self, depth=0): + # Just generate our prefixes + space = " " * depth + xml = ['%s\n' % (space)] + for p in self.prefixes.keys(): + xml.append("%s \n%s %s\n%s %s\n%s \n" % (space, space, escape(p), space, escape(self.prefixes[p]), space)) + xml.append("%s\n" % (space)) + return ''.join(xml) + + + def addPrefix(self, name, identifier): + if (errorOnDuplicatePrefix and (self.prefixes.has_key(name) or reservedPrefixes.has_key(name))): + # Maybe error + diag = Diagnostic45() + diag.details = name + raise diag; + self.prefixes[name] = identifier + + def resolvePrefix(self, name): + # Climb tree + if (reservedPrefixes.has_key(name)): + return reservedPrefixes[name] + elif (self.prefixes.has_key(name)): + return self.prefixes[name] + elif (self.parent <> None): + return self.parent.resolvePrefix(name) + elif (self.config <> None): + # Config is some sort of server config which specifies defaults + return self.config.resolvePrefix(name) + else: + # Top of tree, no config, no resolution->Unknown indexset + # For client we need to allow no prefix? + + #diag = Diagnostic15() + #diag.details = name + #raise diag + return None + + +class PrefixedObject: + "Root object for relation, relationModifier and index" + prefix = "" + prefixURI = "" + value = "" + parent = None + + def __init__(self, val): + # All prefixed things are case insensitive + val = val.lower() + if val and val[0] == '"' and val[-1] == '"': + if errorOnQuotedIdentifier: + diag = Diagnostic14() + diag.details = val + raise diag + else: + val = val[1:-1] + self.value = val + self.splitValue() + + def __str__(self): + if (self.prefix): + return "%s.%s" % (self.prefix, self.value) + else: + return self.value + + def splitValue(self): + f = self.value.find(".") + if (self.value.count('.') > 1): + diag = Diagnostic15() + diag.details = "Multiple '.' characters: %s" % (self.value) + raise(diag) + elif (f == 0): + diag = Diagnostic15() + diag.details = "Null indexset: %s" % (irt.index) + raise(diag) + elif f >= 0: + self.prefix = self.value[:f].lower() + self.value = self.value[f+1:].lower() + + def resolvePrefix(self): + if (not self.prefixURI): + self.prefixURI = self.parent.resolvePrefix(self.prefix) + return self.prefixURI + +class ModifiableObject: + # Treat modifiers as keys on boolean/relation? + modifiers = [] + + def __getitem__(self, k): + if (type(k) == types.IntType): + try: + return self.modifiers[k] + except: + return None + for m in self.modifiers: + if (str(m.type) == k or m.type.value == k): + return m + return None + +class Triple (PrefixableObject): + "Object to represent a CQL triple" + leftOperand = None + boolean = None + rightOperand = None + + def toXCQL(self, depth=0): + "Create the XCQL representation of the object" + space = " " * depth + if (depth == 0): + xml = ['\n' % (XCQLNamespace)] + else: + xml = ['%s\n' % (space)] + + if self.prefixes: + xml.append(PrefixableObject.toXCQL(self, depth+1)) + + xml.append(self.boolean.toXCQL(depth+1)) + xml.append("%s \n" % (space)) + xml.append(self.leftOperand.toXCQL(depth+2)) + xml.append("%s \n" % (space)) + xml.append("%s \n" % (space)) + xml.append(self.rightOperand.toXCQL(depth+2)) + xml.append("%s \n" % (space)) + xml.append("%s\n" % (space)) + return ''.join(xml) + + def toCQL(self): + txt = [] + if (self.prefixes): + for p in self.prefixes.keys(): + if (p <> ''): + txt.append('>%s="%s"' % (p, self.prefixes[p])) + else: + txt.append('>"%s"' % (self.prefixes[p])) + prefs = ' '.join(txt) + return "(%s %s %s %s)" % (prefs, self.leftOperand.toCQL(), self.boolean.toCQL(), self.rightOperand.toCQL()) + else: + return "(%s %s %s)" % (self.leftOperand.toCQL(), self.boolean.toCQL(), self.rightOperand.toCQL()) + + + def getResultSetId(self, top=None): + + if fullResultSetNameCheck == 0 or self.boolean.value in ['not', 'prox']: + return "" + + if top == None: + topLevel = 1 + top = self; + else: + topLevel = 0 + + # Iterate over operands and build a list + rsList = [] + if isinstance(self.leftOperand, Triple): + rsList.extend(self.leftOperand.getResultSetId(top)) + else: + rsList.append(self.leftOperand.getResultSetId(top)) + if isinstance(self.rightOperand, Triple): + rsList.extend(self.rightOperand.getResultSetId(top)) + else: + rsList.append(self.rightOperand.getResultSetId(top)) + + if topLevel == 1: + # Check all elements are the same, if so we're a fubar form of present + if (len(rsList) == rsList.count(rsList[0])): + return rsList[0] + else: + return "" + else: + return rsList + +class SearchClause (PrefixableObject): + "Object to represent a CQL searchClause" + index = None + relation = None + term = None + + def __init__(self, ind, rel, t): + PrefixableObject.__init__(self) + self.index = ind + self.relation = rel + self.term = t + ind.parent = self + rel.parent = self + t.parent = self + + def toXCQL(self, depth=0): + "Produce XCQL version of the object" + space = " " * depth + if (depth == 0): + xml = ['\n' % (XCQLNamespace)] + else: + xml = ['%s\n' % (space)] + + if self.prefixes: + xml.append(PrefixableObject.toXCQL(self, depth+1)) + + xml.append(self.index.toXCQL(depth+1)) + xml.append(self.relation.toXCQL(depth+1)) + xml.append(self.term.toXCQL(depth+1)) + xml.append("%s\n" % (space)) + return ''.join(xml) + + def toCQL(self): + text = [] + for p in self.prefixes.keys(): + if (p <> ''): + text.append('>%s="%s"' % (p, self.prefixes[p])) + else: + text.append('>"%s"' % (self.prefixes[p])) + text.append('%s %s "%s"' % (self.index, self.relation.toCQL(), self.term)) + return ' '.join(text) + + def getResultSetId(self, top=None): + idx = self.index + idx.resolvePrefix() + if (idx.prefixURI == reservedPrefixes['cql'] and idx.value.lower() == 'resultsetid'): + return self.term.value + else: + return "" + +class Index(PrefixedObject): + "Object to represent a CQL index" + + def toXCQL(self, depth=0): + if (depth == 0): + ns = ' xmlns="%s"' % (XCQLNamespace) + else: + ns = "" + return "%s%s\n" % (" "*depth, ns, escape(str(self))) + + def toCQL(self): + return str(self) + +class Relation(PrefixedObject, ModifiableObject): + "Object to represent a CQL relation" + def __init__(self, rel, mods=[]): + self.prefix = "cql" + PrefixedObject.__init__(self, rel) + self.modifiers = mods + for m in mods: + m.parent = self + + def toXCQL(self, depth=0): + "Create XCQL representation of object" + if (depth == 0): + ns = ' xmlns="%s"' % (XCQLNamespace) + else: + ns = "" + + space = " " * depth + + xml = ["%s\n" % (space, ns)] + xml.append("%s %s\n" % (space, escape(self.value))) + if self.modifiers: + xml.append("%s \n" % (space)) + for m in self.modifiers: + xml.append(m.toXCQL(depth+2)) + xml.append("%s \n" % (space)) + xml.append("%s\n" % (space)) + return ''.join(xml) + + def toCQL(self): + txt = [self.value] + txt.extend(map(str, self.modifiers)) + return '/'.join(txt) + +class Term: + value = "" + def __init__(self, v): + if (v <> ""): + # Unquoted literal + if v in ['>=', '<=', '>', '<', '<>', "/", '=']: + diag = Diagnostic25() + diag.details = self.value + raise diag + + # Check existence of meaningful term + nonanchor = 0 + for c in v: + if c != "^": + nonanchor = 1 + break + if not nonanchor: + diag = Diagnostic32() + diag.details = "Only anchoring charater(s) in term: " + v + raise diag + + # Unescape quotes + if (v[0] == '"' and v[-1] == '"'): + v = v[1:-1] + v = v.replace('\\"', '"') + + if (not v and errorOnEmptyTerm): + diag = Diagnostic27() + raise diag + + # Check for badly placed \s + startidx = 0 + idx = v.find("\\", startidx) + while (idx > -1): + startidx = idx+1 + if not irt.term[idx+1] in ['?', '\\', '*', '^']: + diag = Diagnostic26() + diag.details = irt.term + raise diag + v = v.find("\\", startidx) + + elif (errorOnEmptyTerm): + diag = Diagnostic27() + raise diag + + self.value = v + + def __str__(self): + return self.value + + def toXCQL(self, depth=0): + if (depth == 0): + ns = ' xmlns="%s"' % (XCQLNamespace) + else: + ns = "" + return "%s%s\n" % (" "*depth, ns, escape(self.value)) + +class Boolean(ModifiableObject): + "Object to represent a CQL boolean" + value = "" + parent = None + def __init__(self, bool, mods=[]): + self.value = bool + self.modifiers = mods + self.parent = None + + def toXCQL(self, depth=0): + "Create XCQL representation of object" + space = " " * depth + xml = ["%s\n" % (space)] + xml.append("%s %s\n" % (space, escape(self.value))) + if self.modifiers: + xml.append("%s \n" % (space)) + for m in self.modifiers: + xml.append(m.toXCQL(depth+2)) + xml.append("%s \n" % (space)) + xml.append("%s\n" % (space)) + return ''.join(xml) + + def toCQL(self): + txt = [self.value] + for m in self.modifiers: + txt.append(m.toCQL()) + return '/'.join(txt) + + def resolvePrefix(self, name): + return self.parent.resolvePrefix(name) + +class ModifierType(PrefixedObject): + # Same as index, but we'll XCQLify in ModifierClause + parent = None + prefix = "cql" + +class ModifierClause: + "Object to represent a relation modifier" + parent = None + type = None + comparison = "" + value = "" + + def __init__(self, type, comp="", val=""): + self.type = ModifierType(type) + self.type.parent = self + self.comparison = comp + self.value = val + + def __str__(self): + if (self.value): + return "%s%s%s" % (str(self.type), self.comparison, self.value) + else: + return "%s" % (str(self.type)) + + def toXCQL(self, depth=0): + if (self.value): + return "%s\n%s%s\n%s%s\n%s%s\n%s\n" % (" " * depth, " " * (depth+1), escape(str(self.type)), " " * (depth+1), escape(self.comparison), " " * (depth+1), escape(self.value), " " * depth) + else: + return "%s%s\n" % (" " * depth, escape(str(self.type))) + + def toCQL(self): + return str(self) + + def resolvePrefix(self, name): + # Need to skip parent, which has its own resolvePrefix + # eg boolean or relation, neither of which is prefixable + return self.parent.parent.resolvePrefix(name) + + + +# Requires changes for: <= >= <>, and escaped \" in " +# From shlex.py (std library for 2.2+) +class CQLshlex(shlex): + "shlex with additions for CQL parsing" + quotes = '"' + commenters = "" + nextToken = "" + + def __init__(self, thing): + shlex.__init__(self, thing) + self.wordchars += "!@#$%^&*-+{}[];,.?|~`:\\" + self.wordchars += ''.join(map(chr, range(128,254))) + + def read_token(self): + "Read a token from the input stream (no pushback or inclusions)" + + while 1: + if (self.nextToken != ""): + self.token = self.nextToken + self.nextToken = "" + # Bah. SUPER ugly non portable + if self.token == "/": + self.state = ' ' + break + + nextchar = self.instream.read(1) + if nextchar == '\n': + self.lineno = self.lineno + 1 + if self.debug >= 3: + print "shlex: in state ", repr(self.state), " I see character:", repr(nextchar) + + if self.state is None: + self.token = '' # past end of file + break + elif self.state == ' ': + if not nextchar: + self.state = None # end of file + break + elif nextchar in self.whitespace: + if self.debug >= 2: + print "shlex: I see whitespace in whitespace state" + if self.token: + break # emit current token + else: + continue + elif nextchar in self.commenters: + self.instream.readline() + self.lineno = self.lineno + 1 + elif nextchar in self.wordchars: + self.token = nextchar + self.state = 'a' + elif nextchar in self.quotes: + self.token = nextchar + self.state = nextchar + elif nextchar in ['<', '>']: + self.token = nextchar + self.state = '<' + else: + self.token = nextchar + if self.token: + break # emit current token + else: + continue + elif self.state == '<': + # Only accumulate <=, >= or <> + + if self.token == ">" and nextchar == "=": + self.token = self.token + nextchar + self.state = ' ' + break + elif self.token == "<" and nextchar in ['>', '=']: + self.token = self.token + nextchar + self.state = ' ' + break + elif not nextchar: + self.state = None + break + elif nextchar == "/": + self.state = "/" + self.nextToken = "/" + break + elif nextchar in self.wordchars: + self.state='a' + self.nextToken = nextchar + break + elif nextchar in self.quotes: + self.state=nextchar + self.nextToken = nextchar + break + else: + self.state = ' ' + break + + elif self.state in self.quotes: + self.token = self.token + nextchar + # Allow escaped quotes + if nextchar == self.state and self.token[-2] != '\\': + self.state = ' ' + break + elif not nextchar: # end of file + if self.debug >= 2: + print "shlex: I see EOF in quotes state" + # Override SHLEX's ValueError to throw diagnostic + diag = Diagnostic14() + diag.details = self.token[:-1] + raise diag + elif self.state == 'a': + if not nextchar: + self.state = None # end of file + break + elif nextchar in self.whitespace: + if self.debug >= 2: + print "shlex: I see whitespace in word state" + self.state = ' ' + if self.token: + break # emit current token + else: + continue + elif nextchar in self.commenters: + self.instream.readline() + self.lineno = self.lineno + 1 + elif nextchar in self.wordchars or nextchar in self.quotes: + self.token = self.token + nextchar + elif nextchar in ['>', '<']: + self.nextToken = nextchar + self.state = '<' + break + else: + self.pushback = [nextchar] + self.pushback + if self.debug >= 2: + print "shlex: I see punctuation in word state" + self.state = ' ' + if self.token: + break # emit current token + else: + continue + result = self.token + self.token = '' + if self.debug > 1: + if result: + print "shlex: raw token=" + `result` + else: + print "shlex: raw token=EOF" + return result + +class CQLParser: + "Token parser to create object structure for CQL" + parser = "" + currentToken = "" + nextToken = "" + + def __init__(self, p): + """ Initialise with shlex parser """ + self.parser = p + self.fetch_token() # Fetches to next + self.fetch_token() # Fetches to curr + + def is_boolean(self, token): + "Is the token a boolean" + token = token.lower() + return token in booleans + + def fetch_token(self): + """ Read ahead one token """ + tok = self.parser.get_token() + self.currentToken = self.nextToken + self.nextToken = tok + + def prefixes(self): + "Create prefixes dictionary" + prefs = {} + while (self.currentToken == ">"): + # Strip off maps + self.fetch_token() + if self.nextToken == "=": + # Named map + name = self.currentToken + self.fetch_token() # = is current + self.fetch_token() # id is current + identifier = self.currentToken + self.fetch_token() + else: + name = "" + identifier = self.currentToken + self.fetch_token() + if (errorOnDuplicatePrefix and prefs.has_key(name)): + # Error condition + diag = Diagnostic45() + diag.details = name + raise diag; + if len(identifier) > 1 and identifier[0] == '"' and identifier[-1] == '"': + identifier = identifier[1:-1] + prefs[name.lower()] = identifier + + return prefs + + + def query(self): + """ Parse query """ + prefs = self.prefixes() + left = self.subQuery() + while 1: + if not self.currentToken: + break; + bool = self.is_boolean(self.currentToken) + if bool: + boolobject = self.boolean() + right = self.subQuery() + # Setup Left Object + trip = tripleType() + trip.leftOperand = left + trip.boolean = boolobject + trip.rightOperand = right + left.parent = trip + right.parent = trip + boolobject.parent = trip + left = trip + else: + break; + + for p in prefs.keys(): + left.addPrefix(p, prefs[p]) + return left + + def subQuery(self): + """ Find either query or clause """ + if self.currentToken == "(": + self.fetch_token() # Skip ( + object = self.query() + if self.currentToken == ")": + self.fetch_token() # Skip ) + else: + diag = Diagnostic13() + diag.details = self.currentToken + raise diag + else: + prefs = self.prefixes() + if (prefs): + object = self.query() + for p in prefs.keys(): + object.addPrefix(p, prefs[p]) + else: + object = self.clause() + return object + + def clause(self): + """ Find searchClause """ + bool = self.is_boolean(self.nextToken) + if not bool and not (self.nextToken in [')', '(', '']): + + index = indexType(self.currentToken) + self.fetch_token() # Skip Index + rel = self.relation() + if (self.currentToken == ''): + diag = Diagnostic10() + diag.details = "Expected Term, got end of query." + raise(diag) + term = termType(self.currentToken) + self.fetch_token() # Skip Term + + irt = searchClauseType(index, rel, term) + + elif self.currentToken and (bool or self.nextToken in [')', '']): + + irt = searchClauseType(indexType(serverChoiceIndex), relationType(serverChoiceRelation), termType(self.currentToken)) + self.fetch_token() + + elif self.currentToken == ">": + prefs = self.prefixes() + # iterate to get object + object = self.clause() + for p in prefs.keys(): + object.addPrefix(p, prefs[p]); + return object + + else: + diag = Diagnostic10() + diag.details = "Expected Boolean or Relation but got: " + self.currentToken + raise diag + + return irt + + def modifiers(self): + mods = [] + while (self.currentToken == modifierSeparator): + self.fetch_token() + mod = self.currentToken + mod = mod.lower() + if (mod == modifierSeparator): + diag = Diagnostic20() + diag.details = "Null modifier" + raise diag + self.fetch_token() + comp = self.currentToken + if (comp in order): + self.fetch_token() + value = self.currentToken + self.fetch_token() + else: + comp = "" + value = "" + mods.append(ModifierClause(mod, comp, value)) + return mods + + + def boolean(self): + """ Find boolean """ + self.currentToken = self.currentToken.lower() + if self.currentToken in booleans: + bool = booleanType(self.currentToken) + self.fetch_token() + bool.modifiers = self.modifiers() + for b in bool.modifiers: + b.parent = bool + + else: + diag = Diagnostic37() + diag.details = self.currentToken + raise diag + + return bool + + def relation(self): + """ Find relation """ + self.currentToken = self.currentToken.lower() + rel = relationType(self.currentToken) + self.fetch_token() + rel.modifiers = self.modifiers() + for r in rel.modifiers: + r.parent = rel + + return rel + + + +class XCQLParser: + """ Parser for XCQL using some very simple DOM """ + + def firstChildElement(self, elem): + """ Find first child which is an Element """ + for c in elem.childNodes: + if c.nodeType == Node.ELEMENT_NODE: + return c + return None + + def firstChildData(self,elem): + """ Find first child which is Data """ + for c in elem.childNodes: + if c.nodeType == Node.TEXT_NODE: + return c + return None + + def searchClause(self, elem): + """ Process a """ + sc = searchClauseType() + for c in elem.childNodes: + if c.nodeType == Node.ELEMENT_NODE: + if c.localName == "index": + sc.index = indexType(self.firstChildData(c).data.lower()) + elif c.localName == "term": + sc.term = termType(self.firstChildData(c).data) + elif c.localName == "relation": + sc.relation = self.relation(c) + elif c.localName == "prefixes": + sc.prefixes = self.prefixes(c) + else: + raise(ValueError, c.localName) + return sc + + def triple(self, elem): + """ Process a """ + trip = tripleType() + for c in elem.childNodes: + if c.nodeType == Node.ELEMENT_NODE: + if c.localName == "boolean": + trip.boolean = self.boolean(c) + elif c.localName == "prefixes": + trip.prefixes = self.prefixes(c) + elif c.localName == "leftOperand": + c2 = self.firstChildElement(c) + if c2.localName == "searchClause": + trip.leftOperand = self.searchClause(c2) + else: + trip.leftOperand = self.triple(c2) + else: + c2 = self.firstChildElement(c) + if c2.localName == "searchClause": + trip.rightOperand = self.searchClause(c2) + else: + trip.rightOperand = self.triple(c2) + return trip + + def relation(self, elem): + """ Process a """ + rel = relationType() + for c in elem.childNodes: + if c.nodeType == Node.ELEMENT_NODE: + if c.localName == "value": + rel.value = c.firstChild.data.lower() + elif c.localName == "modifiers": + mods = [] + for c2 in c.childNodes: + if c2.nodeType == Node.ELEMENT_NODE: + if c2.localName == "modifier": + for c3 in c2.childNodes: + if c3.localName == "value": + val = self.firstChildData(c2).data.lower() + mods.append(val) + rel.modifiers = mods + return rel + + def boolean(self, elem): + "Process a " + bool = booleanType() + for c in elem.childNodes: + if c.nodeType == Node.ELEMENT_NODE: + if c.localName == "value": + bool.value = self.firstChildData(c).data.lower() + else: + # Can be in any order, so we need to extract, then order + mods = {} + for c2 in c.childNodes: + if c2.nodeType == Node.ELEMENT_NODE: + if c2.localName == "modifier": + type = "" + value = "" + for c3 in c2.childNodes: + if c3.nodeType == Node.ELEMENT_NODE: + if c3.localName == "value": + value = self.firstChildData(c3).data.lower() + elif c3.localName == "type": + type = self.firstChildData(c3).data + mods[type] = value + + modlist = [] + for t in booleanModifierTypes[1:]: + if mods.has_key(t): + modlist.append(mods[t]) + else: + modlist.append('') + bool.modifiers = modlist + return bool + + def prefixes(self, elem): + "Process " + prefs = {} + for c in elem.childNodes: + if c.nodeType == Node.ELEMENT_NODE: + # prefix + name = "" + identifier = "" + for c2 in c.childNodes: + if c2.nodeType == Node.ELEMENT_NODE: + if c2.localName == "name": + name = self.firstChildData(c2).data.lower() + elif c2.localName == "identifier": + identifier = self.firstChildData(c2).data + prefs[name] = identifier + return prefs + + +def xmlparse(s): + """ API. Return a seachClause/triple object from XML string """ + doc = parseString(s) + q = xcqlparse(doc.firstChild) + return q + +def xcqlparse(query): + """ API. Return a searchClause/triple object from XML DOM objects""" + # Requires only properties of objects so we don't care how they're generated + + p = XCQLParser() + if query.localName == "searchClause": + return p.searchClause(query) + else: + return p.triple(query) + + +def parse(query): + """ API. Return a searchClause/triple object from CQL string""" + + try: + query = query.encode("utf-8") + except: + diag = Diagnostic10() + diag.details = "Cannot parse non utf-8 characters" + raise diag + + q = StringIO(query) + lexer = CQLshlex(q) + parser = CQLParser(lexer) + object = parser.query() + if parser.currentToken != '': + diag = Diagnostic10() + diag.details = "Unprocessed tokens remain: " + repr(parser.currentToken) + raise diag + else: + del lexer + del parser + del q + return object + + +# Assign our objects to generate +tripleType = Triple +booleanType = Boolean +relationType = Relation +searchClauseType = SearchClause +modifierClauseType = ModifierClause +modifierTypeType = ModifierType +indexType = Index +termType = Term + +try: + from CQLUtils import * + tripleType = CTriple + booleanType = CBoolean + relationType = CRelation + searchClauseType = CSearchClause + modifierClauseType = CModifierClause + modifierTypeType = CModifierType + indexType = CIndex + termType = CTerm +except: + # Nested scopes. Utils needs our classes to parent + # We need its classes to build (maybe) + pass + + +if (__name__ == "__main__"): + import sys; + s = sys.stdin.readline() + try: + q = parse(s); + except SRWDiagnostic, diag: + # Print a full version, not just str() + print "Diagnostic Generated." + print " Code: " + str(diag.code) + print " Details: " + str(diag.details) + print " Message: " + str(diag.message) + else: + print q.toXCQL()[:-1]; + diff --git a/python/PyZ3950/CQLUtils.py b/python/PyZ3950/CQLUtils.py new file mode 100644 index 0000000..d5eb793 --- /dev/null +++ b/python/PyZ3950/CQLUtils.py @@ -0,0 +1,544 @@ + +"""CQL utility functions and subclasses""" + +from CQLParser import * +from types import ListType, IntType +from SRWDiagnostics import * + +from PyZ3950 import z3950, asn1, oids +from PyZ3950.zdefs import make_attr + +asn1.register_oid (oids.Z3950_QUERY_CQL, asn1.GeneralString) + +class ZCQLConfig: + + contextSets = {'dc' : 'info:srw/cql-context-set/1/dc-v1.1', + 'cql' : 'info:srw/cql-context-set/1/cql-v1.1', + 'bath' : 'http://zing.z3950.org/cql/bath/2.0/', + 'zthes' : 'http://zthes.z3950.org/cql/1.0/', + 'ccg' : 'http://srw.cheshire3.org/contextSets/ccg/1.1/ ', + 'rec' : 'info:srw/cql-context-set/2/rec-1.0', + 'net' : 'info:srw/cql-context-set/2/net-1.0'} + + dc = {'title' : 4, + 'subject' : 21, + 'creator' : 1003, + 'author' : 1003, + 'editor' : 1020, + 'contributor' : 1018, + 'publisher' : 1018, + 'description' : 62, + 'date' : 30, + 'resourceType' : 1031, + 'type' : 1031, + 'format' : 1034, + 'identifier' : 12, + 'source' : 1019, + 'language' : 54, + 'relation' : 1016, + 'coverage' : 1016, + 'rights' : 1016 + } + + cql = {'anywhere' : 1016, + 'serverChoice' : 1016} + + # The common bib1 points + bib1 = {"personal_name" : 1, + "corporate_name" : 2, + "conference_name" : 3, + "title" : 4, + "title_series" : 5, + "title_uniform" : 6, + "isbn" : 7, + "issn" : 8, + "lccn" : 9, + "local_number" : 12, + "dewey_number" : 13, + "lccn" : 16, + "local_classification" : 20, + "subject" : 21, + "subject_lc" : 27, + "subject_local" : 29, + "date" : 30, + "date_publication" : 31, + "date_acquisition" : 32, + "local_call_number" : 53, + "abstract" : 62, + "note" : 63, + "record_type" : 1001, + "name" : 1002, + "author" : 1003, + "author_personal" : 1004, + "identifier" : 1007, + "text_body" : 1010, + "date_modified" : 1012, + "date_added" : 1011, + "concept_text" : 1014, + "any" : 1016, + "default" : 1017, + "publisher" : 1018, + "record_source" : 1019, + "editor" : 1020, + "docid" : 1032, + "anywhere" : 1035, + "sici" : 1037 + } + + exp1 = {"explainCategory" :1, + "humanStringLanguage" : 2, + "databaseName" : 3, + "serverName" : 4, + "attributeSetOID" : 5, + "recordSyntaxOID" : 6, + "tagSetOID" : 7, + "extendedServiceOID" : 8, + "dateAdded" : 9, + "dateChanged" : 10, + "dateExpires" : 11, + "elementSetName" : 12, + "processingContext" : 13, + "processingName" : 14, + "termListName" : 15, + "schemaOID" : 16, + "producer" : 17, + "supplier" : 18, + "availability" : 19, + "proprietary" : 20, + "userFee" : 21, + "variantSetOID" : 22, + "unitSystem" : 23, + "keyword" : 24, + "explainDatabase" : 25, + "processingOID" : 26 + } + + xd1 = {"title" : 1, + "subject" : 2, + "name" : 3, + "description" : 4, + "date" : 5, + "type" : 6, + "format" : 7, + "identifier" : 8, + "source" : 9, + "langauge" : 10, + "relation" : 11, + "coverage" : 12, + "rights" : 13} + + util = {"record_date" : 1, + "record_agent" : 2, + "record_language" : 3, + "control_number" : 4, + "cost" : 5, + "record_syntax" : 6, + "database_schema" : 7, + "score" : 8, + "rank" : 9, + "result_set_position" : 10, + "all" : 11, + "anywhere" : 12, + "server_choice" : 13, + "wildcard" : 14, + "wildpath" : 15} + + defaultAttrSet = z3950.Z3950_ATTRS_BIB1_ov + + def __init__(self): + self.util1 = self.util + self.xd = self.xd1 + + def attrsToCql(self, attrs): + hash = {} + for c in attrs: + if (not c[0]): + c[0] = self.defaultAttrSet + hash[(c[0], c[1])] = c[2] + bib1 = z3950.Z3950_ATTRS_BIB1_ov + use = hash.get((bib1, 1), 4) + rel = hash.get((bib1, 2), 3) + posn = hash.get((bib1, 3), None) + struct = hash.get((bib1, 4), None) + trunc = hash.get((bib1, 5), None) + comp = hash.get((bib1, 6), None) + + index = None + if (not isinstance(use, int)): + index = indexType(use) + else: + for v in self.dc.items(): + if use == v[1]: + index = indexType("dc.%s" % (v[0])) + break + if not index: + for v in self.bib1.items(): + if (use == v[1]): + index = indexType("bib1.%s" % (v[0])) + break + if not index: + index = indexType("bib1.%i" % (use)) + + relations = ['', '<', '<=', '=', '>=', '>', '<>'] + if (comp == 3): + relation = relationType("exact") + elif (rel > 6): + if struct in [2, 6]: + relation = relationType('any') + else: + relation = relationType('=') + else: + relation = relationType(relations[rel]) + + if (rel == 100): + relation.modifiers.append(modifierClauseType('phonetic')) + elif (rel == 101): + relation.modifiers.append(modifierClauseType('stem')) + elif (rel == 102): + relation.modifiers.append(modifierClauseType('relevant')) + + if (struct in [2, 6]): + relation.modifiers.append(modifierClauseType('word')) + elif (struct in [4, 5, 100]): + relation.modifiers.append(modifierClauseType('date')) + elif (struct == 109): + relation.modifiers.append(modifierClauseType('number')) + elif (struct in [1, 108]): + relation.modifiers.append(modifierClauseType('string')) + elif (struct == 104): + relation.modifiers.append(modifierClauseType('uri')) + + return (index, relation) + +zConfig = ZCQLConfig() + +def rpn2cql(rpn, config=zConfig, attrSet=None): + if rpn[0] == 'op': + # single search clause + op = rpn[1] + type = op[0] + if type == 'attrTerm': + attrs = op[1].attributes + term = op[1].term + combs = [] + for comb in attrs: + if hasattr(comb, 'attributeSet'): + attrSet = comb.attributeSet + if hasattr(comb, 'attributeType'): + aType = comb.attributeType + else: + # Broken! + aType = 1 + vstruct = comb.attributeValue + if (vstruct[0] == 'numeric'): + aValue = vstruct[1] + else: + # Complex attr value + vstruct = vstruct[1] + if (hasattr(vstruct, 'list')): + aValue = vstruct.list[0][1] + else: + # semanticAction? + aValue = vstruct.semanticAction[0][1] + combs.append([attrSet, aType, aValue]) + # Now let config do its thing + (index, relation) = config.attrsToCql(combs) + return searchClauseType(index, relation, termType(term[1])) + + elif type == 'resultSet': + return searchClauseType(indexType('cql.resultSetId'), relationType('='), termType(op[0])) + + elif rpn[0] == 'rpnRpnOp': + triple = rpn[1] + bool = triple.op + lhs = triple.rpn1 + rhs = triple.rpn2 + ctrip = tripleType() + ctrip.leftOperation = rpn2cql(lhs, config) + ctrip.rightOperand = rpn2cql(rhs, config) + ctrip.boolean = booleanType(bool[0]) + if bool[0] == 'prox': + distance = bool[1].distance + order = bool[1].ordered + if order: + order = "ordered" + else: + order = "unordered" + relation = bool[1].relationType + rels = ["", "<", "<=", "=", ">=", ">", "<>"] + relation = rels[relation] + unit = bool[1].proximityUnitCode + units = ["", "character", "word", "sentence", "paragraph", "section", "chapter", "document", "element", "subelement", "elementType", "byte"] + if unit[0] == "known": + unit = units[unit[1]] + mods = [cql.modifierClauseType('distance', relation, str(distance)), cql.modifierClauseType('word', '=', unit), cql.modifierClauseType(order)] + ctrip.boolean.modifiers = mods + return ctrip + + elif rpn[0] == 'type_1': + q = rpn[1] + return rpn2cql(q.rpn, config, q.attributeSet) + + + + +class CSearchClause(SearchClause): + + def convertMetachars(self, t): + "Convert SRW meta characters in to Cheshire's meta characters" + # Fail on ?, ^ or * not at the end. + if (count(t, "?") != count(t, "\\?")): + diag = Diagnostic28() + diag.details = "? Unsupported" + raise diag + elif (count(t, "^") != count(t, "\\^")): + diag = Diagnostic31() + diag.details = "^ Unsupported" + raise diag + elif (count(t, "*") != count(t, "\\*")): + if t[-1] != "*" or t[-2] == "\\": + diag = Diagnostic28() + diag.details = "Non trailing * unsupported" + raise diag + else: + t[-1] = "#" + t = replace(t, "\\^", "^") + t = replace(t, "\\?", "?") + t = replace(t, "\\*", "*") + return t + + def toRPN(self, top=None): + if not top: + top = self + + if (self.relation.value in ['any', 'all']): + # Need to split this into and/or tree + if (self.relation.value == 'any'): + bool = " or " + else: + bool = " and " + words = self.term.value.split() + self.relation.value = '=' + # Add 'word' relationModifier + self.relation.modifiers.append(CModifierClause('cql.word')) + + # Create CQL, parse it, walk new tree + idxrel = "%s %s" % (self.index.toCQL(), self.relation.toCQL()) + text = [] + for w in words: + text.append('%s "%s"' % (idxrel, w)) + cql = bool.join(text) + tree = parse(cql) + tree.prefixes = self.prefixes + tree.parent = self.parent + tree.config = self.config + return tree.toRPN(top) + else: + # attributes, term + # AttributeElement: attributeType, attributeValue + # attributeValue ('numeric', n) or ('complex', struct) + if (self.index.value == 'resultsetid'): + return ('op', ('resultSet', self.term.value)) + + clause = z3950.AttributesPlusTerm() + attrs = self.index.toRPN(top) + if (self.term.value.isdigit()): + self.relation.modifiers.append(CModifierClause('cql.number')) + relattrs = self.relation.toRPN(top) + attrs.update(relattrs) + butes =[] + for e in attrs.iteritems(): + butes.append((e[0][0], e[0][1], e[1])) + + clause.attributes = [make_attr(*e) for e in butes] + clause.term = self.term.toRPN(top) + + return ('op', ('attrTerm', clause)) + + +class CBoolean(Boolean): + + def toRPN(self, top): + op = self.value + if (self.value == 'not'): + op = 'and-not' + elif (self.value == 'prox'): + # Create ProximityOperator + prox = z3950.ProximityOperator() + # distance, ordered, proximityUnitCode, relationType + u = self['unit'] + try: + units = ["", "character", "word", "sentence", "paragraph", "section", "chapter", "document", "element", "subelement", "elementType", "byte"] + if (u.value in units): + prox.unit = ('known', units.index(u.value)) + else: + # Uhhhh..... + prox.unit = ('private', int(u.value)) + except: + prox.unit = ('known', 2) + + d = self['distance'] + try: + prox.distance = int(d.value) + except: + if (prox.unit == ('known', 2)): + prox.distance = 1 + else: + prox.distance = 0 + try: + rels = ["", "<", "<=", "=", ">=", ">", "<>"] + prox.relationType = rels.index(d.comparison) + except: + prox.relationType = 2 + + prox.ordered = bool(self['ordered']) + return ('op', ('prox', prox)) + + return (op, None) + +class CTriple(Triple): + + def toRPN(self, top=None): + """rpnRpnOp""" + if not top: + top = self + + op = z3950.RpnRpnOp() + op.rpn1 = self.leftOperand.toRPN(top) + op.rpn2 = self.rightOperand.toRPN(top) + op.op = self.boolean.toRPN(top) + return ('rpnRpnOp', op) + + +class CIndex(Index): + def toRPN(self, top): + self.resolvePrefix() + pf = self.prefix + if (not pf and self.prefixURI): + # We have a default + for k in zConfig.contextSets: + if zConfig.contextSets[k] == self.prefixURI: + pf = k + break + + # Default BIB1 + set = oids.oids['Z3950']['ATTRS']['BIB1']['oid'] + + if (hasattr(top, 'config') and top.config): + config = top.config + # Check SRW Configuration + cql = config.contextSetNamespaces['cql'] + index = self.value + if self.prefixURI == cql and self.value == "serverchoice": + # Have to resolve our prefixes etc, so create an index object to do it + index = config.defaultIndex + cidx = CIndex(index) + cidx.config = config + cidx.parent = config + cidx.resolvePrefix() + pf = cidx.prefix + index = cidx.value + + if config.indexHash.has_key(pf): + if config.indexHash[pf].has_key(index): + idx = config.indexHash[pf][index] + # Need to map from this list to RPN list + attrs = {} + for i in idx: + set = asn1.OidVal(map(int, i[0].split('.'))) + type = int(i[1]) + if (i[2].isdigit()): + val = int(i[2]) + else: + val = i[2] + attrs[(set, type)] = val + return attrs + else: + diag = Diagnostic16() + diag.details = index + diag.message = "Unknown index" + raise diag + else: + diag = Diagnostic15() + diag.details = pf + diag.message = "Unknown context set" + raise diag + elif (hasattr(zConfig, pf)): + mp = getattr(zConfig, pf) + if (mp.has_key(self.value)): + val = mp[self.value] + else: + val = self.value + elif (oids.oids['Z3950']['ATTRS'].has_key(pf.upper())): + set = oids.oids['Z3950']['ATTRS'][pf.upper()]['oid'] + if (self.value.isdigit()): + # bib1.1018 + val = int(self.value) + else: + # complex attribute for bib1 + val = self.value + else: + print "Can't resolve %s" % pf + raise(ValueError) + + return {(set, 1) : val} + + +class CRelation(Relation): + def toRPN(self, top): + rels = ['', '<', '<=', '=', '>=', '>', '<>'] + set = z3950.Z3950_ATTRS_BIB1_ov + vals = [None, None, None, None, None, None, None] + + if self.value in rels: + vals[2] = rels.index(self.value) + elif self.value in ['exact', 'scr']: + vals[2] = 3 + elif (self.value == 'within'): + vals[2] = 104 + + if self['relevant']: + vals[2] = 102 + elif self['stem']: + vals[2] = 101 + elif self['phonetic']: + vals[2] = 100 + + if self['number']: + vals[4] = 109 + vals[5] = 100 + elif self['date']: + vals[4] = 5 + elif self['word']: + vals[4] = 2 + + if self.value == 'exact': + vals[3] = 1 + vals[5] = 100 + # vals[6] = 3 + else: + vals[3] = 3 + # vals[6] = 1 + + attrs = {} + for x in range(1,7): + if vals[x]: + attrs[(z3950.Z3950_ATTRS_BIB1_ov, x)] = vals[x] + + return attrs + + +class CTerm(Term): + def toRPN(self, top): + return ('general', self.value) + +class CModifierClause(ModifierClause): + pass + +class CModifierType(ModifierType): + pass + + + + + diff --git a/python/PyZ3950/PyZ3950_parsetab.py b/python/PyZ3950/PyZ3950_parsetab.py new file mode 100644 index 0000000..804de29 --- /dev/null +++ b/python/PyZ3950/PyZ3950_parsetab.py @@ -0,0 +1,40 @@ + +# PyZ3950_parsetab.py +# This file is automatically generated. Do not edit. + +_lr_method = 'SLR' + +_lr_signature = '\xfc\xb2\xa8\xb7\xd9\xe7\xad\xba"\xb2Ss\'\xcd\x08\x16' + +_lr_action_items = {'QUOTEDVALUE':([5,26,0,19,16,],[1,1,1,1,1,]),'LOGOP':([3,25,4,14,9,6,27,23,13,20,22,1,],[-5,-9,-14,-13,16,-8,16,-7,16,-6,-4,-12,]),'SET':([0,16,5,26,],[11,11,11,11,]),'RPAREN':([27,23,3,22,1,25,13,4,20,6,14,],[28,-7,-5,-4,-12,-9,20,-14,-6,-8,-13,]),'$':([8,14,2,23,3,20,28,25,9,1,4,6,22,],[0,-13,-1,-7,-5,-6,-3,-9,-2,-12,-14,-8,-4,]),'SLASH':([21,],[26,]),'ATTRSET':([0,],[7,]),'QUAL':([0,26,16,18,5,],[10,10,10,24,10,]),'COMMA':([10,12,24,],[-10,18,-11,]),'LPAREN':([26,0,16,7,5,],[5,5,5,15,5,]),'WORD':([19,17,14,0,5,26,6,16,15,1,4,25,],[4,23,-13,4,4,4,14,4,21,-12,-14,14,]),'RELOP':([11,24,10,12,],[17,-11,-10,19,]),} + +_lr_action = { } +for _k, _v in _lr_action_items.items(): + for _x,_y in zip(_v[0],_v[1]): + _lr_action[(_x,_k)] = _y +del _lr_action_items + +_lr_goto_items = {'cclfind_or_attrset':([0,],[2,]),'elements':([5,26,16,0,],[3,3,22,3,]),'quallist':([5,26,0,16,],[12,12,12,12,]),'val':([5,16,26,19,0,],[6,6,6,25,6,]),'top':([0,],[8,]),'cclfind':([5,0,26,],[13,9,27,]),} + +_lr_goto = { } +for _k, _v in _lr_goto_items.items(): + for _x,_y in zip(_v[0],_v[1]): + _lr_goto[(_x,_k)] = _y +del _lr_goto_items +_lr_productions = [ + ("S'",1,None,None,None), + ('top',1,'p_top','./ccl.py',154), + ('cclfind_or_attrset',1,'p_cclfind_or_attrset_1','./ccl.py',158), + ('cclfind_or_attrset',6,'p_cclfind_or_attrset_2','./ccl.py',162), + ('cclfind',3,'p_ccl_find_1','./ccl.py',166), + ('cclfind',1,'p_ccl_find_2','./ccl.py',170), + ('elements',3,'p_elements_1','./ccl.py',174), + ('elements',3,'p_elements_2','./ccl.py',196), + ('elements',1,'p_elements_3','./ccl.py',202), + ('elements',3,'p_elements_4','./ccl.py',206), + ('quallist',1,'p_quallist_1','./ccl.py',213), + ('quallist',3,'p_quallist_2','./ccl.py',217), + ('val',1,'p_val_1','./ccl.py',221), + ('val',2,'p_val_2','./ccl.py',225), + ('val',1,'p_val_3','./ccl.py',229), +] diff --git a/python/PyZ3950/SRWDiagnostics.py b/python/PyZ3950/SRWDiagnostics.py new file mode 100644 index 0000000..2829bba --- /dev/null +++ b/python/PyZ3950/SRWDiagnostics.py @@ -0,0 +1,451 @@ + +# Base Class + +class SRWDiagnostic (Exception): + """ Base Diagnostic Class""" + code = 0 + uri = "info:srw/diagnostic/1/" + details = "" + message = "" + + surrogate = 0 + fatal = 1 + + def __str__(self): + return "%s [%s]: %s" % (self.uri, self.message, self.details) + + # NB 'Need' name for serialization in SRW + def __init__(self, name=None): + if (self.code): + self.uri = "%s%d" % (self.uri, self.code) + Exception.__init__(self) + +# Diagnostic Types + +class GeneralDiagnostic (SRWDiagnostic): + pass + +class CQLDiagnostic (SRWDiagnostic): + pass + +class RecordDiagnostic (SRWDiagnostic): + pass + +class ResultSetDiagnostic (SRWDiagnostic): + pass + +class SortDiagnostic (SRWDiagnostic): + pass + +class StyleDiagnostic (SRWDiagnostic): + pass + +class ScanDiagnostic (SRWDiagnostic): + pass + +class DeprecatedDiagnostic(SRWDiagnostic): + def __init__(self, name=None): + print "WARNING: Use of deprecated diagnostic %s" % (self) + SRWDiagnostic.__init__(self) + +class ExplainDiagnostic (DeprecatedDiagnostic): + pass + + +# Rob's (empty) diagnostic set +class RobDiagnostic (SRWDiagnostic): + uri = "info:srw/diagnostic/2/" + + +# Individual Diagnostics + +class Diagnostic1 (GeneralDiagnostic): + code = 1 + message = "General system error" + +class Diagnostic2 (GeneralDiagnostic): + code = 2 + message = "System temporarily unavailable" + +class Diagnostic3 (GeneralDiagnostic): + code = 3 + message = "Authentication error" + +class Diagnostic4 (GeneralDiagnostic): + code = 4 + message = "Unsupported operation" + +class Diagnostic5 (GeneralDiagnostic): + code = 5 + message = "Unsupported version" + +class Diagnostic6 (GeneralDiagnostic): + code = 6 + message = "Unsupported parameter value" + +class Diagnostic7 (GeneralDiagnostic): + code = 7 + message = "Mandatory parameter not supplied" + +class Diagnostic8 (GeneralDiagnostic): + code = 8 + message = "Unknown parameter" + + + +class Diagnostic10 (CQLDiagnostic): + code = 10 + message = "Malformed query" + +class Diagnostic13 (CQLDiagnostic): + code = 13 + message = "Unsupported use of parentheses" + +class Diagnostic14 (CQLDiagnostic): + code = 14 + message = "Unsupported use of quotes" + +class Diagnostic15 (CQLDiagnostic): + code = 15 + message = "Unsupported context set" + +class Diagnostic16 (CQLDiagnostic): + code = 16 + message = "Unsupported index" + +class Diagnostic18 (CQLDiagnostic): + code = 18 + message = "Unsupported combination of indexes" + +class Diagnostic19 (CQLDiagnostic): + code = 19 + message = "Unsupported relation" + +class Diagnostic20 (CQLDiagnostic): + code = 20 + message = "Unsupported relation modifier" + +class Diagnostic21 (CQLDiagnostic): + code = 21 + message = "Unsupported combination of relation modifiers" + +class Diagnostic22 (CQLDiagnostic): + code = 22 + message = "Unsupported combination of relation and index" + +class Diagnostic23 (CQLDiagnostic): + code = 23 + message = "Too many characters in term" + +class Diagnostic24 (CQLDiagnostic): + code = 24 + message = "Unsupported combination of relation and term" + +class Diagnostic26 (CQLDiagnostic): + code = 26 + message = "Non special character escaped in term" + +class Diagnostic27 (CQLDiagnostic): + code = 27 + message = "Empty term unsupported" + +class Diagnostic28 (CQLDiagnostic): + code = 28 + message = "Masking character not supported" + +class Diagnostic29 (CQLDiagnostic): + code = 29 + message = "Masked words too short" + +class Diagnostic30 (CQLDiagnostic): + code = 30 + message = "Too many masking characters in term" + +class Diagnostic31 (CQLDiagnostic): + code = 31 + message = "Anchoring character not supported" + +class Diagnostic32 (CQLDiagnostic): + code = 32 + message = "Anchoring character in unsupported position." + +class Diagnostic33 (CQLDiagnostic): + code = 33 + message = "Combination of proximity/adjacency and masking characters not supported" + +class Diagnostic34 (CQLDiagnostic): + code = 34 + message = "Combination of proximity/adjacency and anchoring characters not supported" + +class Diagnostic35 (CQLDiagnostic): + code = 35 + message = "Term only stopwords" + +class Diagnostic36 (CQLDiagnostic): + code = 36 + message = "Term in invalid format for index or relation" + +class Diagnostic37 (CQLDiagnostic): + code = 37 + message = "Unsupported boolean operator" + +class Diagnostic38 (CQLDiagnostic): + code = 38 + message = "Too many boolean operators" + +class Diagnostic39 (CQLDiagnostic): + code = 39 + message = "Proximity not supported" + +class Diagnostic40 (CQLDiagnostic): + code = 40 + message = "Unsupported proximity relation" + +class Diagnostic41 (CQLDiagnostic): + code = 41 + message = "Unsupported proximity distance" + +class Diagnostic42 (CQLDiagnostic): + code = 42 + message = "Unsupported proximity unit" + +class Diagnostic43 (CQLDiagnostic): + code = 43 + message = "Unsupported proximity ordering" + +class Diagnostic44 (CQLDiagnostic): + code = 44 + message = "Unsupported combination of proximity modifiers" + + + +class Diagnostic50 (ResultSetDiagnostic): + code = 50 + message = "Result sets not supported" + +class Diagnostic51 (ResultSetDiagnostic): + code = 51 + message = "Result set does not exist" + +class Diagnostic52 (ResultSetDiagnostic): + code = 52 + message = "Result set temporarily unavailable" + +class Diagnostic53 (ResultSetDiagnostic): + code = 53 + message = "Result sets only supported for retrieval" + +class Diagnostic55 (ResultSetDiagnostic): + code = 55 + message = "Combination of result sets with search terms not supported" + +class Diagnostic58 (ResultSetDiagnostic): + code = 58 + message = "Result set created with unpredictable partial results available" + +class Diagnostic59 (ResultSetDiagnostic): + code = 59 + message = "Result set created with valid partial results available" + + +class Diagnostic60 (RecordDiagnostic): + code = 60 + message = "Too many records retrieved" + +class Diagnostic61 (RecordDiagnostic): + code = 61 + message = "First record position out of range" + +class Diagnostic64 (RecordDiagnostic): + code = 64 + message = "Record temporarily unavailable" + surrogate = 1 + +class Diagnostic65 (RecordDiagnostic): + code = 65 + message = "Record does not exist" + surrogate = 1 + +class Diagnostic66 (RecordDiagnostic): + code = 66 + message = "Unknown schema for retrieval" + +class Diagnostic67 (RecordDiagnostic): + code = 67 + message = "Record not available in this schema" + surrogate = 1 + +class Diagnostic68 (RecordDiagnostic): + code = 68 + message = "Not authorised to send record" + surrogate = 1 + +class Diagnostic69 (RecordDiagnostic): + code = 69 + message = "Not authorised to send record in this schema" + surrogate = 1 + +class Diagnostic70 (RecordDiagnostic): + code = 70 + message = "Record too large to send" + surrogate = 1 + +class Diagnostic71 (RecordDiagnostic): + code = 71 + message = "Unsupported record packing" + +class Diagnostic72 (RecordDiagnostic): + code = 72 + message = "XPath retrieval unsupported" + +class Diagnostic73 (RecordDiagnostic): + code = 73 + message = "XPath expression contains unsupported feature" + +class Diagnostic74 (RecordDiagnostic): + code = 74 + message = "Unable to evaluate XPath expression" + + + +class Diagnostic80 (SortDiagnostic): + code = 80 + message = "Sort not supported" + +class Diagnostic82 (SortDiagnostic): + code = 82 + message = "Unsupported sort sequence" + +class Diagnostic83 (SortDiagnostic): + code = 83 + message = "Too many records to sort" + +class Diagnostic84 (SortDiagnostic): + code = 84 + message = "Too many sort keys" + +class Diagnostic86 (SortDiagnostic): + code = 86 + message = "Incompatible record formats" + +class Diagnostic87 (SortDiagnostic): + code = 87 + message = "Unsupported schema for sort" + +class Diagnostic88 (SortDiagnostic): + code = 88 + message = "Unsupported tag path for sort" + +class Diagnostic89 (SortDiagnostic): + code = 89 + message = "Tag path unsupported for schema" + +class Diagnostic90 (SortDiagnostic): + code = 90 + message = "Unsupported direction value" + +class Diagnostic91 (SortDiagnostic): + code = 91 + message = "Unsupported case value" + +class Diagnostic92 (SortDiagnostic): + code = 92 + message = "Unsupported missing value action" + + +class Diagnostic110 (StyleDiagnostic): + code = 110 + message = "Stylesheets not supported" + +class Diagnostic111 (StyleDiagnostic): + code = 111 + message = "Unsupported stylesheet" + +class Diagnostic120 (ScanDiagnostic): + code = 120 + message = "Response position out of range" + +class Diagnostic121 (ScanDiagnostic): + code = 121 + message = "Too many terms requested" + + + + + +# Deprecated diagnostics + +class Diagnostic11 (DeprecatedDiagnostic): + code = 11 + message = "Unsupported query type" + +class Diagnostic12 (DeprecatedDiagnostic): + code = 12 + message = "Too many characters in query" + +class Diagnostic17 (DeprecatedDiagnostic): + code = 17 + message = "Illegal or unsupported combination of index and index set." + +class Diagnostic25 (DeprecatedDiagnostic): + code = 25 + message = "Special characters not quoted in term" + +class Diagnostic45 (DeprecatedDiagnostic): + code = 45 + message = "Index set name (prefix) assigned to multiple identifiers" + +class Diagnostic54 (DeprecatedDiagnostic): + code = 54 + message = "Retrieval may only occur from an existing result set" + +class Diagnostic56 (DeprecatedDiagnostic): + code = 56 + message = "Only combination of single result set with search terms supported" + +class Diagnostic57 (DeprecatedDiagnostic): + code = 57 + message = "Result set created but no records available" + +class Diagnostic62 (DeprecatedDiagnostic): + code = 62 + message = "Negative number of records requested" + +class Diagnostic63 (DeprecatedDiagnostic): + code = 63 + message = "System error in retrieving records" + +class Diagnostic81 (DeprecatedDiagnostic): + code = 81 + message = "Unsupported sort type" + +class Diagnostic85 (DeprecatedDiagnostic): + code = 85 + message = "Duplicate sort keys" + +class Diagnostic100 (ExplainDiagnostic): + code = 100 + message = "Explain not supported" + +class Diagnostic101 (ExplainDiagnostic): + code = 101 + message = "Explain request type not supported" + +class Diagnostic102 (ExplainDiagnostic): + code = 102 + message = "Explain record temporarily unavailable" + + + + + + + + + + + + + + + diff --git a/python/PyZ3950/__init__.py b/python/PyZ3950/__init__.py new file mode 100644 index 0000000..08d3b71 --- /dev/null +++ b/python/PyZ3950/__init__.py @@ -0,0 +1,5 @@ +"""Python Z3950/MARC/ASN.1 package, supporting ZOOM API. +""" + +__all__ = ['zoom', 'zmarc'] +# only pieces most users need: if you need asn1, import it explicitly diff --git a/python/PyZ3950/asn1.py b/python/PyZ3950/asn1.py new file mode 100644 index 0000000..2a01d88 --- /dev/null +++ b/python/PyZ3950/asn1.py @@ -0,0 +1,2036 @@ +#!/usr/bin/env python +# This file should be available from +# http://www.pobox.com/~asl2/software/PyZ3950/ +# and is licensed under the X Consortium license: +# Copyright (c) 2001, Aaron S. Lav, asl2@pobox.com +# All rights reserved. + +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, and/or sell copies of the Software, and to permit persons +# to whom the Software is furnished to do so, provided that the above +# copyright notice(s) and this permission notice appear in all copies of +# the Software and that both the above copyright notice(s) and this +# permission notice appear in supporting documentation. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +# OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL +# INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in this Software without prior written authorization +# of the copyright holder. +# Change history: +# 2001/9/22 - fix test code to be slightly more elegant and fix test +# comments to be correct. Due to Roy Smith, roy.smith@micromuse.com + +# 2002/05/23 - fix handling of ANY. Needed for handling of SUTRS records +# by Z3950. + + + + +"""

asn1 is a relatively general-purpose ASN.1 BER encoder and decoder. +Encoding and +decoding functions (asn1.encode and asn1.decode) take an ASN.1 spec, and +transform back and forth between a byte stream and what I consider a natural +Python representation of the data. +

Separating the ASN.1 specification from the code would allow +compilation of the specification to inline Python or C code, or to a +specification for a C-based engine. +

This module supports the following ASN.1 types: +

    +
  • BOOLEAN - encoder takes any Python value, decoder produces 0 or 1
  • +
  • INTEGER - as in Python
  • +
  • BITSTRING - asn1.BitStringVal
  • +
  • OCTSTRING - Python string
  • +
  • NULL - ignore value on encoding, return None on decoding
  • +
  • REAL - asn1.REAL (I hope to make this look more like python floats someday: read the source if you need this)
  • +
  • OID - OidVal
  • +
  • EXTERNAL - as SEQUENCE, see below (or read the source)
  • +
  • all string types - Python string (no validity checking is done)
  • +
+

For all the above types, the ASN.1 spec is just the name of the type. +Inherently constructed types: +

    +
  • SEQUENCE_OF (ASN1.spec) - Python representation is a list of values.
  • +
  • +SEQUENCE, CHOICE - the ASN.1 spec is a list of tuples, either (name, tag, type) +or, for SEQUENCE, (name, tag, type, optionalflag), where: +tag can be None, asn1.EXPLICIT(tag), asn1.IMPLICIT(tag), or an integer +interpreted as either an explicit or an implicit tag according to the setting +of asn1.implicit_default; type is recursively an ASN.1 spec.
  • +
+

For CHOICE, the Python representation is (name, val). For SEQUENCE, on +decoding, +the Python representation is an instance of an asn1-synthesized class. +On encoding, any class with the appropriate attributes is acceptable, +calling the SEQUENCE specification but you +can obtain a fresh instance of the synthesized class by calling the SEQUENCE +specification: this class overrides setattr to provide attribute-name error +checking. (The rationale for the seemingly unPythonic errorchecking is that +misspelled optional attributes would otherwise be hard to detect. If you don't +like it, it should be easy to turn off.) +

+The definition of enumerated values for INTEGER and BITSTRING types is +supported via the compiler (or see their definitions). For +BITSTRING types, __getitem__ (value_name) and __setitem__ +(value_name) are implemented as BitStringVal methods, allowing, +e.g., bitstringval['version_1'] = 1, or +if bitstringval['version_1']. An appropriate BitStringVal for +encoding can be constructed by calling the specification. +For INTEGER types, call get_num_from_name (name) or +get_name_from_num(num) methods of the type specification. +(Note that code like if val == defn.get_num_from_name ('failure'): +is less prone to typo-induced errors than if +failure' == defn.get_name_from_num (val): +

+In order to obtain definitions nested inside other definitions +(e.g. INTEGER and BITSTRING, above), __getitem__ methods are provided +for SEQUENCE, CHOICE, and SEQUENCE_OF. For SEQUENCE and CHOICE, the +key is the name of the sequence element or arm (respectively). +For SEQUENCE_OF, the key is 0 (arbitrarily chosen). +

+APPLICATION and PRIVATE class tags are supported via the compiler, +or pass the cls= keyword to IMPLICIT or EXPLICIT. +

+For examples, see the test code at the end of this file, or the +Z39.50 code that should be distributed with this file as part of PyZ3950. +

+There is not yet support for: +

    +
  • UTCTime, SET, SET OF, or some more obscure types
  • +
+

Useful ASN.1 references: +

+""" + +from __future__ import nested_scopes +vers = "0.83" + +import array +import string +import copy +import math + + +# - elements should expose a list of possible tags, instead of just one tag, +# bringing CHOICE into line with other elements +# - make test cases more comprehensive +# - write test cases for INTEGER and BITSTRING enum. values +# - write test cases for asst. character set encodings + + +# Parameters you can tweak for BER encoding + +implicit_default = 1 +# Treat bare numeric tags as IMPLICIT if 1, EXPLICIT if 0. Set at +# definition time. This requires that all ASN.1 definitions be done +# single-threadedly - no big deal. It'd be somewhat more modular to +# look this up in the caller's module dictionary. The compiler produces +# explicit indications of whether a tag is EXPLICIT or IMPLICIT, so is +# unaffected by this setting. + +indef_len_encodings = 0 +# Generate indefinite-length encodings whenever we'd otherwise have to +# go back and fix up the length bytes if length octets were 1-byte long. +# Set at encoding time. Might make encoding run a little faster. + +cons_encoding = 0 +# Generate constructed encodings for string types. Useful only for +# testing the decoding of such encodings, I think. + +# In theory, indef_len_encodings and cons_encoding are designed for +# cases where the length of the data isn't known ahead of time, and +# one doesn't want to have to buffer the entire thing. It is possible +# to pass lazy sequences into the appropriate functions, but ... + +# For debugging the asn.1 code only +trace_seq = 0 +trace_choice = 0 +trace_tag = 0 +trace_seq_of = 0 +trace_int = 0 +trace_external = 0 +trace_byte = 0 +trace_bitstring = 0 +trace_string = 0 +trace_codec = 0 + +# Note: BERError is only for decoding errors (either input data is illegal +# BER, or input data is legal BER but we don't support it.) + +# call encode_per and decode_per for PER? Or check Ctx? + +class BERError (Exception): pass + +class EncodingError (Exception): pass + + +# Neither of these provides support for character set codecs. Instantiate +# the appropriate context and call set_codec for the set of string types +# you need with appropriate codecs. + +def encode (spec, data): + ctx = Ctx () + spec.encode (ctx, data) + return ctx.get_data () + +def decode (spec, buf, readproc = None): + ctx = IncrementalDecodeCtx(spec) + ctx.feed (buf) + while ctx.val_count () == 0: + ctx.feed (readproc ()) + rv = ctx.get_first_decoded () + # decode also ignores the possibility of leftover bytes. + # use IncrementalDecodeCtx.get_bytes_inprocess_count if you + # need to know about leftovers + + return rv + + +UNIVERSAL_FLAG = 0 +APPLICATION_FLAG = 0x40 +CONTEXT_FLAG = 0x80 +PRIVATE_FLAG = 0xC0 + +CONS_FLAG = 0x20 + + +ANY_TAG = -1 # pseudotag + +END_INDEF_CONS_TAG = 0x0 + +BOOL_TAG = 0x1 +INT_TAG = 0x2 +BITSTRING_TAG = 0x3 +OCTSTRING_TAG = 0x4 +NULL_TAG = 0x5 +OID_TAG = 0x6 +OBJECTDESCRIPTOR_TAG = 0x7 +EXTERNAL_TAG = 0x8 +REAL_TAG = 0x9 +SEQUENCE_TAG = 0x10 +UTF8STRING_TAG = 0xC +NUMERICSTRING_TAG = 0x12 +PRINTABLESTRING_TAG = 0x13 +T61STRING_TAG = 0x14 +VIDEOTEXSTRING_TAG = 0x15 +IA5STRING_TAG = 0x16 +GENERALIZEDTIME_TAG = 0x18 +GRAPHICSTRING_TAG = 0x19 +VISIBLESTRING_TAG = 0x1A +GENERALSTRING_TAG = 0x1B +UNIVERSALSTRING_TAG = 0x1C +BMPSTRING_TAG = 0x1E + +class StructBase: + # replace _allowed_attrib_list with __slots__ mechanism + # once we no longer need to support Python 2.1 + _allowed_attrib_list = [] + def __init__ (self, **kw): + self.set_allowed_attribs (self._allowed_attrib_list) + # we don't just self.__dict__.update (...) b/c + # we want error-checking in setattr below + for k, v in kw.items (): + setattr (self, k, v) + def __repr__ (self): + s = 'Struct: %s [\n' % (self.__class__) + i = self.__dict__.items () + i.sort () + i = filter (lambda it: it[0][0] <> '_', i) + s = s + string.join (map (lambda it: repr (it[0]) + + ' ' + repr (it[1]), i), '\n') + s = s + ']\n' + return s + def __cmp__ (self, other): + keys = self.__dict__.keys () + keys.sort () # to ensure reproduciblity + for k in keys: + s = getattr (self, k, None) + o = getattr (other, k, None) + def is_seq (val): + return (isinstance (val, type ((0,))) or + isinstance (val, type ([]))) + if is_seq (s) and is_seq (o): + if len (s) <> len (o): + return -1 + for selt, oelt in zip (s, o): + c = cmp (selt, oelt) + if c <> 0: + return c + else: + c = cmp (s, o) + if c <> 0: + return c + okeys = other.__dict__.keys () + okeys.sort () + if okeys <> keys: + return 1 + return 0 + def set_allowed_attribs (self, l): + self._allowed_attribs = {} + for e in l: + self._allowed_attribs [e] = 1 + def is_allowed (self, k): + if self._allowed_attrib_list == []: return 1 + if k == '_allowed_attribs': return 1 + return self._allowed_attribs.has_key (k) +# I implemented setattr b/c otherwise it can be difficult to tell when one +# has mistyped an OPTIONAL element of a SEQUENCE. This is probably a matter +# of taste, and derived classes should feel welcome to override this. + def __setattr__ (self, key, val): + if not self.is_allowed (key): + raise AttributeError (key) + self.__dict__ [key] = val + +# tags can match if only constructedness of encoding is different. Not +# quite right, since, e.g., SEQUENCE must always be a constructed type, +# and INTEGER never is, but this is OK because once we've matched, +# trying to decode an obligate cons. type with a noncons tag will fail +# because there's no decode_val attribute, and the other mismatch +# will fail because there's no start_cons attribute. +# This isn't a problem in CHOICEs because the uniqueness requirements +# are expressed in terms of numeric tags, regardless of cons flag. + +def match_tag (a, b): + if trace_tag: print "Match_tag", a, b + cons_match = (a[0] & ~CONS_FLAG == b[0] & ~CONS_FLAG) + if (a[1] == ANY_TAG or b[1] == ANY_TAG): + return cons_match + return a[1] == b[1] and cons_match + +def encode_base128 (val): + if val == 0: + return [0x00] + l = [] + while val: + l.append ((val % 128) | 0x80) + val = val / 128 + if len (l) > 0: + l[0] = l[0] & 0x7F + l.reverse () + return l + +def read_base128 (buf, start): + val = 0 + while 1: + b = buf [start] + start += 1 + val = val * 128 + (b & 0x7F) + if b & 0x80 == 0: + break + return (start, val) + +class CtxBase: + """Charset codec functionality, shared among all contexts.""" + def __init__ (self): + self.charset_switch_oids = {} + self.codec_dict_stack = [{}] + # We may need different codecs for differing string types, e.g. + # VisibleString vs. UTF8String, thus the dict + def register_charset_switcher (self, oid, fn): + self.charset_switch_oids [oid] = fn + + def set_codec (self, defn_inst, codec, strip_bom = 0): + if trace_codec: + print "setting codec", defn_inst, codec, strip_bom + print self.codec_dict_stack + # Note: really only need [0] and [1] elements of codec, encoder and decoder + self.codec_dict_stack[-1][defn_inst.base_tag] = (codec, strip_bom) + def get_codec (self, base_tag): + def default_enc (x): + if isinstance (x, type (u"")): + return (x.encode ('ascii'), 0) + return (x, 0) + identity = ((default_enc, lambda x:(x,0)), 0) + # we ignore lengths consumed. I don't think this means + # we miss out on any error checking, b/c if there were + # a stray pad byte or something, the codec would complain + # about truncation. + return self.codec_dict_stack[-1].get (base_tag, identity) + def get_enc (self, base_tag): + t = self.get_codec (base_tag) + return (t[0][0], t[1]) + def get_dec (self, base_tag): + return self.get_codec (base_tag)[0][1] + def push_codec (self): + if trace_codec: + print "pushing codec" + self.codec_dict_stack.append ({}) + def pop_codec (self): + if trace_codec: + print "popping codec" + self.codec_dict_stack.pop () + +class IncrementalDecodeCtx(CtxBase): + states = ["tag_first", "tag_rest", "len_first", "len_rest", "data", + "indef_end"] + class StackElt: + def __init__ (self, start_offset, cur_len, parent_typ, tag, + parent_ctx, cname = None): + self.start_offset = start_offset + self.len = cur_len + self.cname = cname + self.cons = parent_typ.start_cons (tag, cur_len, parent_ctx) + # methods: get_cur_def (), handle_val (val), finish () + def __init__ (self, asn1_def): + CtxBase.__init__ (self) + self.offset = 0 + self.last_begin_offset = 0 + self.state = "tag_first" + self.asn1_def = asn1_def + self.decoded_vals = [] + self.stack = [] + self.state_fns = {} + for state in self.states: + self.state_fns [state] = getattr (self, 'feed_' + state) + def get_bytes_inprocess_count (self): + return self.offset - self.last_begin_offset + def val_count (self): + l = len (self.decoded_vals) + return l + def get_first_decoded (self): + rv = self.decoded_vals [0] + self.decoded_vals = self.decoded_vals [1:] + return rv + + def get_cur_def (self): + if len (self.stack) == 0: + return self.asn1_def + else: + tos = self.stack [-1] + return tos.cons.get_cur_def (self.decoded_tag) + + def match_tag (self, seen): + typ = self.get_cur_def () + # Note: use 'is' instead of '=' to avoid problem w/ + # OCTSTRING_class wanting __eq__ and failing b/c of getattr + if typ is None: # falling off end of SEQUENCE with optional bits + return 0 + return typ.check_tag (seen) + + # XXX calling check_tag is inefficient for SEQUENCE and CHOICE, + # b/c we have to iterate to check_tag, then use the tag again + # to figure out what type to decode. + + def set_state (self, new_state): + self.state = new_state + def push (self, decoded_len): + new_typ = self.get_cur_def () + cname = None + if isinstance (new_typ, CHOICE): + (cname, new_typ) = new_typ.check_tag (self.decoded_tag) + self.stack.append (self.StackElt (self.offset, decoded_len, new_typ, + self.decoded_tag, self, + cname = cname)) + + def pop (self): + if len (self.stack) == 0: + self.raise_error ("bad end of cons type") + tos = self.stack.pop () + if tos.len <> None: + if tos.len <> (self.offset - tos.start_offset): + self.raise_error ("constructed len mismatch (%d %d %d)" % + (tos.len, self.offset, tos.start_offset)) + val = tos.cons.finish () + if tos.cname <> None: + val = (tos.cname, val) + self.handle_decoded (val) + + def raise_error (self, descr): + raise BERError (descr + " offset %d" % (self.offset,)) + def feed (self, data): + for char in data: + if trace_byte: + print hex (char), self.state, "offset:", self.offset + self.state_fns [self.state] (char) + self.offset += 1 + + def feed_tag_first (self, char): + if char == 0x00: + stacklen = len (self.stack) + if stacklen == 0 or self.stack[-1].len <> None: + if stacklen == 0: + tos_len_str = "irrelevant" + else: + tos_len_str = str (self.stack[-1].len) + + self.raise_error ("0x00 tag found, stacklen %d tos len %s" % + (stacklen, tos_len_str)) + self.set_state ("indef_end") + return + + flags = char & 0xE0 + val = char & 0x1f + self.decoded_tag = (flags, val) + if val == 0x1f: + self.set_state ("tag_rest") + self.tag_accum = 0 + else: + self.finish_tag () + + def feed_tag_rest (self, char): + self.tag_accum = self.tag_accum * 128 + (char & 0x7f) + if char & 0x80 == 0: + self.decoded_tag = (self.decoded_tag[0], self.tag_accum) + self.tag_accum = None + self.finish_tag () + + + def finish_tag (self): + if not self.match_tag (self.decoded_tag): + self.raise_error ("Saw tag %s expecting %s" % + (str(self.decoded_tag), + self.get_cur_def().str_tag ())) + self.set_state ("len_first") + + def feed_len_first (self, char): + if char >= 128: + rest_len = char & 0x7f + if rest_len == 0: + self.decoded_len = None + self.finish_len () + else: + self.rest_len = rest_len + self.decoded_len = 0 + self.set_state ("len_rest") + else: + self.decoded_len = char + self.finish_len () + def feed_len_rest (self, char): + self.decoded_len = self.decoded_len * 256 + char + self.rest_len -= 1 + if self.rest_len == 0: + self.finish_len () + + def finish_len (self): + if self.decoded_tag == (0,0): + if self.decoded_len <> 0: + self.raise_error ("Bad len %d for tag 0" % (self.decoded_len,)) + self.pop () + return + self.data_buf = [] + cons_flag = self.decoded_tag [0] & CONS_FLAG + if cons_flag: + self.push (self.decoded_len) + new_state = "tag_first" + else: + new_state = "data" + if self.decoded_len == 0: + if cons_flag: + assert (self.check_pop ()) + self.set_state ("tag_first") + else: + self.finish_data () + else: + self.set_state (new_state) + + def feed_data (self, char): + self.data_buf.append (char) + self.decoded_len -= 1 + if self.decoded_len == 0: + self.finish_data () + def finish_data (self): + cur_def = self.get_cur_def () + if isinstance (cur_def, CHOICE): + (cname, ctyp) = cur_def.check_tag (self.decoded_tag) + cur_def = ctyp + else: + cname = None + if not (cur_def is None): # we haven't fallen off end of a SEQ + rv = cur_def.decode_val (self, self.data_buf) + if cname <> None: + rv = (cname, rv) + self.handle_decoded (rv) + else: + assert (self.check_pop ()) + self.set_state ("tag_first") + def handle_decoded (self, val): + if len (self.stack) == 0: + self.decoded_vals.append (val) + self.last_begin_offset = self.offset + 1 + # +1 because self.offset will be incremented on return + else: + self.stack[-1].cons.handle_val (val) + self.check_pop () + def check_pop (self): + if self.stack[-1].len == self.offset - self.stack[-1].start_offset: + self.pop () + return 1 + return 0 + + def feed_indef_end (self, char): + if char <> 0x00: + self.raise_error ("end cons indef-len encoding %x" % (char,)) + self.pop () + self.set_state ("tag_first") + +def tag_to_buf (tag, orig_flags = None): + (flags, val) = tag + # Constructed encoding is property of original tag, not of + # implicit tag override + if orig_flags <> None: + flags = flags | (orig_flags & CONS_FLAG) + extra = 0 + if val >=0x1F: + extra = val + val = 0x1F + l = [flags | val] + if extra: + l2 = encode_base128 (extra) + l.extend (l2) + return l + +def len_to_buf (mylen): + if mylen < 128: + return [mylen] + else: + l = [] + while mylen: + l.append (mylen % 256) + mylen = mylen / 256 + assert (len (l) < 0x80) + l.append (len (l) | 0x80) + l.reverse () + return l + +class WriteCtx (CtxBase): + def __init__ (self): + CtxBase.__init__ (self) + self.clear () + def clear (self): + self.buf = array.array ('B') + def encode (self, spec, data): + self.clear () + spec.encode (self, data) + return self.get_data () + def get_data (self): + return self.buf + def bytes_write (self, data): + # type-checking is icky but required by array i/f + if isinstance (data, type ([])): + self.buf.fromlist (data) + elif isinstance (data, type ('')): + self.buf.fromstring (data) + else: + raise EncodingError, "Bad type to bytes_write" + +BYTE_BITS = 8 + +def extract_bits (val, lo_bit, hi_bit): + tmp = (val & (~0L << (lo_bit))) >> lo_bit + tmp = tmp & ((1L << (hi_bit - lo_bit + 1)) - 1) + return tmp + +log_of_2 = math.log (2) + +def log2 (x): + return int(math.log (x) / log_of_2) + +class PERWriteCtx(WriteCtx): + def __init__ (self, aligned = 0, canonical = 0): + self.aligned = aligned + self.canonical = canonical + self.bit_offset = 0 + + WriteCtx.__init__ (self) + def write_bits_unaligned (self, val, bit_len): + # write starting at bit_offset, no matter what + byte_count = (bit_len + self.bit_offset) / BYTE_BITS + if (bit_len + self.bit_offset) % BYTE_BITS <> 0: + byte_count += 1 + my_range = range (byte_count - 1, -1, -1) + lo_bits = map (lambda x: x * BYTE_BITS, my_range) + def extract_val (lo_bit): + return extract_bits (val, lo_bit, lo_bit + BYTE_BITS - 1) + bytes = map (extract_val, lo_bits) + + new_bit_offset = (bit_len + self.bit_offset) % BYTE_BITS + if new_bit_offset <> 0: + bytes [-1] = bytes [-1] << (BYTE_BITS - new_bit_offset) + if self.bit_offset <> 0: + self.buf[-1] = self.buf[-1] | bytes [0] + self.bytes_write (bytes[1:]) + else: + self.bytes_write (bytes) + self.bit_offset = new_bit_offset + + def write_bits (self, val, bit_len): + if self.aligned and self.bit_offset <> 0: + self.write_bits_unaligned (0, BYTE_BITS - self.bit_offset) + self.bit_offset = 0 + self.write_bits_unaligned (val, bit_len) + + # for {read,write}_*_int, see Dubuisson 20.4 + def write_constrained_int (self, val, lo, hi): + assert (hi >= lo) + # XXX what if hi = lo + 1 + rng = hi - lo + 1 + print rng, val, log2(rng) + if not self.aligned: + self.write_bits (val, log2(rng)) + return + + if rng == 1: + return # known value, don't encode + if rng < 256: + return # calc minimum # of bits + if rng == 256: + self.write_bits (val - lo, 8) + return + if rng <= 65536: + self.write_bits (val - lo, 16) + return + assert (0) + + def write_semiconstrained_int (self, val, lo): + # write len field, then len, then min octets log_256(val-lo) + assert (0) + pass + def write_unconstrained_int (self, val): # might have upper bd, but not used + assert (0) + pass + def write_usually_small_int (self, val): + assert (val >= 0) + if val < 64: + self.write_bits_unaligned (0, 1) + self.write_bits_unaligned (val, 6) + else: + self.write_bits_unaligned (1,1) + self.write_semiconstrained_int (val, 0) + + + +class BERWriteCtx(WriteCtx): + def __init__ (self): + WriteCtx.__init__ (self) + def clear (self): + self.cur_tag = None + WriteCtx.clear (self) + def set_implicit_tag (self, tag): + if self.cur_tag == None: + self.cur_tag = tag + def tag_write (self, tag): + if trace_tag: print "Writing tag", tag + (orig_flags, _) = tag + if self.cur_tag <> None: + tag = self.cur_tag + self.cur_tag = None + l = tag_to_buf (tag, orig_flags) + self.bytes_write (l) + def get_pos (self): + return len (self.buf) + class LenPlaceHolder: + def __init__ (self, ctx, estlen = 127): + if not indef_len_encodings: + self.ctx = ctx + self.oldpos = ctx.get_pos () + self.estlen = estlen + self.lenlen = ctx.est_len_write (estlen) + else: + self.ctx = ctx + ctx.bytes_write ([0x80]) + def finish (self): + if not indef_len_encodings: + real_len = self.ctx.get_pos() - self.oldpos - 1 + self.ctx._len_write_at (self.ctx.get_pos () - self.oldpos - 1, + self.oldpos, self.lenlen) + else: + self.ctx.bytes_write ([0,0]) + def len_write (self, mylen = 0): + return Ctx.LenPlaceHolder (self, mylen) + def len_write_known (self, mylen): + return self.est_len_write (mylen) + def est_len_write (self, mylen): + l = len_to_buf (mylen) + self.buf.fromlist (l) + return len (l) + def _len_write_at (self, mylen, pos, lenlen): + l = len_to_buf (mylen) + assert (len(l) >= lenlen) + # array.pop not available in Python 1.5.2. We could just use a + # less efficient length encoding (long form w/leading 0 bytes + # where necessary), but ... + + # XXX fix to use more efficient code, now that we don't support 1.5.2! + + for i in range (len(l) - lenlen): + self.buf.insert (pos, 0) + for i in range(len(l)): + self.buf[pos + i] = l [i] + + + def raise_error (self, descr): + offset = len (self.buf) + raise BERError, (descr, offset) + +Ctx = BERWriteCtx # Old synonym for historical reasons + + +# EXPLICIT, IMPLICIT, CHOICE can't derive from eltbase b/c they need to do +# tag manipulation +class ELTBASE: + # known_len is 1 if len can easily be calculated w/o encoding + # val (e.g. OCTET STRING), + # 0 if otherwise and we have to go back and fix up (e.g. SEQUENCE). + def encode (self, ctx, val): + ctx.tag_write (self.tag) + if not self.known_len: lph = ctx.len_write () + self.encode_val (ctx, val) + if not self.known_len: lph.finish () + + def check_tag (self, seen_tag): + return match_tag (seen_tag, self.tag) + def str_tag (self): + if hasattr (self, 'tag'): + return str (self.tag) + else: + return self.__class__.__name__ + def fulfill_promises (self, promises): + return + +class TAG: # base class for IMPLICIT and EXPLICIT + def __init__ (self, tag, cls=CONTEXT_FLAG): + if type (tag) == type (0): + tag = (CONTEXT_FLAG, tag) + self.tag = (tag[0] | self.flags, tag[1]) + def set_typ (self, typ): + self.typ = typ + def __call__ (self): + return self.typ () + def __getitem__ (self, *args): + return self.typ.__getitem__ (*args) + def __setitem__ (self, *args): + return self.typ.__setitem__ (*args) + + def get_num_from_name (self, *args): + return self.typ.get_num_from_name (*args) + def get_name_from_num (self, *args): + return self.typ.get_name_from_num (*args) + + def decode_val (self, ctx, buf): + return self.typ.decode_val (ctx, buf) + def str_tag (self): + return str (self.tag) + def check_tag (self, seen_tag): + return match_tag (seen_tag, self.tag) + + def fulfill_promises (self, promises): + if isinstance (self.typ, Promise): + self.typ = self.typ.get_promised (promises) + else: + self.typ.fulfill_promises (promises) + +# Note: IMPLICIT and EXPLICIT have dual use: they can be instantiated by +# users of this module to indicate tagging, but when TAG.set_typ is +# called, they become asn.1 type descriptors themselves. Maybe these +# two uses should have separate classes, making four classes overall. + +class IMPLICIT(TAG): + flags = 0 + def __repr__ (self): + return "IMPLICIT: " + repr (self.tag) + " " + repr (self.typ) + def __cmp__ (self, other): + if not isinstance (other, IMPLICIT): + return -1 + return cmp (self.tag, other.tag) + def start_cons (self, tag, cur_len, ctx): + return self.typ.start_cons (tag, cur_len, ctx) + def encode (self, ctx, val): + ctx.set_implicit_tag (self.tag) + self.typ.encode (ctx, val) + def encode_per (self, ctx, val): + self.typ.encode_per (ctx, val) + + +class EXPLICIT (TAG): + flags = CONS_FLAG # Explicit tag is always a constructed encoding + def __repr__ (self): + return "EXPLICIT: " + repr (self.tag) + " " + repr (self.typ) + def __cmp__ (self, other): + if not isinstance (other, EXPLICIT): + return -1 + return cmp (self.tag, other.tag) + + class ConsElt: + def __init__ (self, typ): + self.typ = typ + self.ind = 0 + def get_cur_def (self, seen_tag): + return self.typ + def handle_val (self, val): + self.tmp = val + self.ind += 1 + def finish (self): + if self.ind <> 1: + raise BERError ("wrong number of elts %d for EXPLICIT %s" % + (self.ind, self.typ)) + return self.tmp + + def start_cons (self, tag, cur_len, ctx): + return self.ConsElt (self.typ) + + def encode (self, ctx, val): + ctx.cur_tag = None + ctx.tag_write (self.tag) + lph = ctx.len_write () + self.typ.encode (ctx, val) + lph.finish () + + +def make_tag (tag): + if implicit_default: + return IMPLICIT (tag) + else: + return EXPLICIT (tag) + +def TYPE (tag, typ): + if tag == None: + return typ + if not isinstance (tag, TAG): + tag = make_tag (tag) + tag.set_typ (typ) + return tag + +class OidVal: + def __init__ (self, lst): + self.lst = tuple (lst) + self.encoded = self.encode (lst) + def __hash__ (self): + return hash (self.lst) + def __repr__ (self): + s = 'OID:' + for i in self.lst: + s = s + ' %d' % i + return s + def __cmp__ (self, other): + if not hasattr (other, 'lst'): + return -1 + return cmp (self.lst, other.lst) + def encode (self, lst): + encoded = [40 * lst [0] + lst [1]] + for val in lst [2:]: + encoded = encoded + encode_base128 (val) + return encoded + +class OID_class (ELTBASE): + tag = (0, OID_TAG) + known_len = 1 + def encode_val (self, ctx, val): + ctx.len_write_known (len (val.encoded)) + ctx.bytes_write (val.encoded) + def decode_val (self, ctx, buf): + b1 = buf [0] + oid = [b1 / 40, b1 % 40] + start = 1 + mylen = len (buf) + while start < mylen: + (start, val) = read_base128 (buf, start) + oid.append (val) + return OidVal (oid) + +OID = OID_class () + +# XXX need to translate into offset in list for PER encoding +class NamedBase: + def __init__ (self, names_list = [], lo = None, hi = None): + self.lo = lo + self.hi = hi + if names_list == None: + names_list = [] + self.name_to_num = {} + self.num_to_name = {} + self.names_list = names_list + for (name, num) in names_list: + self.num_to_name [num] = name + self.name_to_num [name] = num + num_keys = self.num_to_name.keys () + if len (num_keys) > 0: + self.max = max (self.num_to_name.keys ()) + else: + self.max = 0 + def get_num_from_name (self, *args): + return self.name_to_num.get (*args) + def get_name_from_num (self, *args): + return self.num_to_name.get (*args) + + +class INTEGER_class (ELTBASE, NamedBase): + tag = (0, INT_TAG) + known_len = 1 + def __init__ (self, *args): + NamedBase.__init__ (self, *args) + if self.max <> 0: + self.hi = self.max # XXX reorganize! + self.extensible = 0 # XXX + def encode_val (self, ctx, val): + # based on ber.py in pysnmp + l = [] + if val == 0: + l = [0] + elif val == -1: + l = [0xFF] + else: + if sgn (val) == -1: + term_cond = -1 + last_hi = 1 + else: + term_cond = 0 + last_hi = 0 + while val <> term_cond: + val, res = val >> 8, (val & 0xFF) + l.append (res) + if (l[-1] & 0x80 <> 0) ^ last_hi: + l.append (last_hi * 0xFF) + ctx.len_write_known (len(l)) + l.reverse () + ctx.bytes_write (l) + def encode_per (self, ctx, val): + assert (not self.extensible) + assert (self.lo <> None) + print "encoding", val, self.lo, self.hi + if self.hi == None: + ctx.write_semiconstrained_int (val, self.lo) + else: + ctx.write_constrained_int (val, self.lo, self.hi) + + + def decode_val (self, ctx, buf): + val = 0 + if buf[0] >= 128: sgn = -1 + else: sgn = 1 + for b in buf: + if trace_int: print "Reading INTEGER byte", b + val = 256 * val + sgn * b + if sgn == -1: + val = - (val + pow (2, 8 * len (buf))) + # XXX should be much more efficient decoder here + return val + +INTEGER = INTEGER_class () + +class ConditionalConstr: + def __getattr__ (self, attr): # XXX replace with properties when can require 2.2. + if attr == 'tag': + base_tag = self.__dict__ ['base_tag'] + if cons_encoding: + return (CONS_FLAG, base_tag) + else: + return (0, base_tag) + elif attr == 'known_len' and self.override_known_len: + return not cons_encoding + else: + return self.__dict__ [attr] + +class OCTSTRING_class (ConditionalConstr, ELTBASE): + def __init__ (self, tag = None, lo = None, hi = None): + if tag <> None: + self.base_tag = tag + else: + self.base_tag = OCTSTRING_TAG + self.override_known_len = 1 + self.extensible = 0 # XXX + self.lo = lo + self.hi = hi + def __repr__ (self): + return 'OCTSTRING: ' + repr (self.tag) + class ConsElt: + def __init__ (self): + self.lst = [] + def get_cur_def (self, seen_tag): + return OCTSTRING + def handle_val (self, val): + self.lst.append (val) + def finish (self): + return "".join (self.lst) + def start_cons (self, tag, cur_len, ctx): + return self.ConsElt () + def handle_charset (self, ctx, val): + encoder, strip_bom = ctx.get_enc (self.base_tag) + if trace_string: + print "encoding", type (val), encoder, self.base_tag, strip_bom, + (val, l) = encoder (val) + if strip_bom: + val = val[2:] + if trace_string: + print "encoded", val + return val + def encode_val (self, ctx, val): + val = self.handle_charset (ctx, val) + if cons_encoding: + # Dubuisson, _ASN.1 ..._, 18.2.10 says that string + # types are encoded like OCTETSTRING, so no worries + # about preserving character boundaries in constructed + # encodings. + tag = (0, OCTSTRING_TAG) + for i in range (len (val)): + ctx.tag_write (tag) + ctx.len_write_known (1) + ctx.bytes_write ([ord(val[i])]) + else: + ctx.len_write_known (len (val)) + ctx.bytes_write (val) + def encode_per (self, ctx, val): + val = handle_charset (ctx, val) + assert (not self.extensible) + l = len (val) + if self.lo <> None and self.lo == self.hi: + if l <= 2: + ctx.write_bits_unaligned (val, l * BYTE_BITS) + elif l <= 8192: + ctx.write_bits (val, l * BYTE_BITS) + else: + assert (0) # XXX need to fragment! + + assert (len < 65536) + if self.hi == None: + ctx.write_semiconstrained_int (l, self.lo) + else: + ctx.write_constrained_int (l, self.lo, self.hi) + ctx.write_bits (val, l * BYTE_BITS) + + def decode_val (self, ctx, buf): + tmp_str = ''.join (map (chr, buf)) + decoder = ctx.get_dec (self.base_tag) + if trace_string: + print "decoding", repr(tmp_str), decoder, self.base_tag + rv = decoder (tmp_str) + if trace_string: + print repr (rv) + return rv [0] + + + +_STRING_TAGS = (UTF8STRING_TAG, NUMERICSTRING_TAG, PRINTABLESTRING_TAG, + T61STRING_TAG, VIDEOTEXSTRING_TAG, IA5STRING_TAG, + GRAPHICSTRING_TAG, VISIBLESTRING_TAG, GENERALSTRING_TAG, + UNIVERSALSTRING_TAG, BMPSTRING_TAG, GENERALIZEDTIME_TAG, + OBJECTDESCRIPTOR_TAG) + +OCTSTRING = OCTSTRING_class () +(UTF8String, NumericString, PrintableString, T61String, VideotexString, + IA5String, GraphicString, VisibleString, GeneralString, UniversalString, + BMPString, GeneralizedTime, ObjectDescriptor) = \ + map (OCTSTRING_class, _STRING_TAGS) + +class CHOICE: + choice_type = 1 + # No class.tag, tag derives from chosen arm of CHOICE + def __init__ (self, c): + self.promises_fulfilled = 0 + # XXX self.promises_fulfilled is only needed for CHOICE, + # but could speed up by adding checking to SEQUENCE, SEQUENCE_OF, etc. + + self.choice = [] + # XXX rework this to use dict by arm name, dict by tag? + # but CHOICE of CHOICE constructs mean that a typ can have + # multiple possible tags, so a little more difficult + for arm in c: + self.choice.append (self.mung (arm)) + def __getitem__ (self, key): + for (cname, ctyp) in self.choice: + if key == cname: + return ctyp + raise KeyError (key) + def __setitem__ (self, key, val): # warning: may raise KeyError! + for i in range (len (self.choice)): + (cname, ctyp) = self.choice [i] + if cname == key: + self.set_arm (i, val) + return + raise KeyError (key) + def fulfill_promises (self, promises): + if self.promises_fulfilled: + return + self.promises_fulfilled = 1 + for i in range (len (self.choice)): + if isinstance (self.choice [i][1], Promise): + self.choice [i][1] = self.choice[i][1].get_promised (promises) + else: + self.choice[i][1].fulfill_promises (promises) + + def set_arm (self, i, new_arm): + self.choice[i] = self.mung (new_arm) + def mung (self, arm): + (cname, ctag, ctyp) = arm + ctyp = TYPE (ctag, ctyp) + return [cname, ctyp] + def str_tag (self): + return repr (self) + def check_tag (self, seen_tag): + for (cname, ctyp) in self.choice: + if ctyp.check_tag (seen_tag): + return (cname, ctyp) + return 0 + def __repr__ (self): + return 'CHOICE: ' + string.join (map (lambda x:x[0],self.choice), '\n') + # Note: we don't include types in the repr, because that can induce + # infinite recursion. + def encode (self, ctx, val): + if trace_choice: print val + (name, val) = val + for (cname, ctyp) in self.choice: + if cname == name: + if trace_choice: print "Encoding arm", cname, "Val", val + ctyp.encode (ctx, val) + return + err = ("Bogus, no arm for " + repr (name) + " val " + + repr(val)) + raise EncodingError,err + + +# Note: ANY can be any type, not just OCTSTRING. The ASN.1 spec +# is supposed to indicate an OID (or something) which we can use to +# figure out how to encode/decode the ANY type. For EXTERNAL, +# this is well-defined and implemented via register_oid (although we +# don't support indirect_reference). +# On decoding, if the incremental decoder is used and no type +# is specified, the result looks like: +# (tag, , indef-len-flag) +# or a list instead of a string for constructed types. +# (The non-incremental decoder can't handle ANY types with indef-len +# encoding, and just returns a byte string for def-len encoding. I +# recommend the incremental decoder.) +# The encoder expects the output of the incremental decoder. +# Note that indef-len-flag can usually be ignored, and is only +# valuable for applications which decode and then encode and expect +# the results to be byte-identical, which is basically test apps. + +class ANY_class(OCTSTRING_class): # inherit decode_val + tag = (CONS_FLAG, ANY_TAG) + class ConsElt: + def __init__ (self, tag, cur_len): + self.tmp = [] + self.tag = tag + self.indef_flag = cur_len == None + def get_cur_def (self, seen_tag): + return ANY + def handle_val (self, val): + self.tmp.append (val) + def finish (self): + return (self.tag, self.tmp, self.indef_flag) + + def start_cons (self, tag, cur_len, ctx): + return self.ConsElt (tag, cur_len) + def encode_aux (self, val): + (tag, val, indef_flag) = val + if isinstance (val, type ([])): + buf = "".join (map (self.encode_aux, val)) + elif isinstance (val, type (())): + buf = self.encode_aux (val) + else: + buf = val + def tostr (lst): + return "".join (map (chr, lst)) + if indef_flag: + return tostr (tag_to_buf (tag)) + "\x80" + buf + "\0\0" + else: + buf_len = len (buf) + return tostr (tag_to_buf (tag)) + tostr (len_to_buf (buf_len)) +buf + def encode (self, ctx, val): + ctx.bytes_write (self.encode_aux(val)) + def check_tag (self, seen_tag): + return 1 + def decode_val (self, ctx, buf): + v = OCTSTRING_class.decode_val (self, ctx, buf) + return (ctx.decoded_tag, v, 0) # only called for primitive def-len encoding, thus "0" + +ANY = ANY_class () + +class BitStringVal: + def __init__ (self, top, bits = 0, defn = None): + self.top_ind = top # 0-based, -1 is valid, indicating no sig. bits + self.bits = bits + self.defn = defn + def __repr__ (self): + names = [] + for i in range (self.top_ind + 1): + if self.is_set (i): + def mk_unk (): + return "Unknown(%d)" % (i,) + if (not hasattr (self.defn, 'num_to_name') or + self.defn.num_to_name == None): + names.append (mk_unk ()) + else: + names.append (self.defn.num_to_name.get (i, mk_unk ())) + return "Top: %s Bits %s Names %s" % (repr(self.top_ind), + repr(self.bits), + ",".join (names)) + def __cmp__ (self, other): + return cmp ((self.top_ind, self.bits), (other.top_ind, other.bits)) + + def check_extend (self, bit): + if bit > self.top_ind: + self.bits = self.bits << (bit - self.top_ind) + self.top_ind = bit + + def set (self, bit): + self.check_extend (bit) + self.bits = self.bits | (1L << (self.top_ind - bit)) + def clear (self, bit): + self.check_extend (bit) + self.bits = self.bits & ~(1L << (self.top_ind - bit)) + + def set_bits (self, bitseq): + for bit in bitseq: + self.set (bit) + def is_set (self, bit): + if self.top_ind - bit < 0: + return 0 + return self.bits & (1L << ( self.top_ind - bit)) + def __getitem__ (self, bit_name): + bit_ind = self.defn.get_num_from_name (bit_name) + return self.is_set (bit_ind) + def __setitem__ (self, key, val): + ind = self.defn.get_num_from_name (key) + if val: + self.set (ind) + else: + self.clear (ind) + +class BITSTRING_class (ConditionalConstr, ELTBASE, NamedBase): + known_len = 1 + def __init__ (self, *args): + self.base_tag = BITSTRING_TAG + self.override_known_len = 0 + NamedBase.__init__ (self, *args) + def __call__ (self): + return BitStringVal (self.max, 0, self) + class ConsElt: + def __init__ (self, parent): + self.lst = [] + self.parent = parent + def get_cur_def (self, seen_tag): + return BITSTRING + def handle_val (self, val): + self.lst.append (val) + def finish (self): + bits = 0L + for v in self.lst[:-1]: + bits *= 256L + assert (v.top_ind == 7) + bits += v.bits + v = self.lst [-1] + bits *= 256L + + pad_count = 7 - v.top_ind + bits = bits >> pad_count + bits += v.bits # v.bits have already been right-shifted by decoder + return BitStringVal (8 * len (self.lst) - pad_count - 1, bits, self.parent) + + def start_cons (self, tag, cur_len, ctx): + return self.ConsElt (self) + def encode_val (self, ctx, val): + def top_ind_to_pad_bits (top_ind): + bit_count = (top_ind + 1) % 8 # top_ind is 0-based + if bit_count == 0: return 0 + return (8 - bit_count) + assert (top_ind_to_pad_bits (0) == 7) + assert (top_ind_to_pad_bits (7) == 0) + assert (top_ind_to_pad_bits (8) == 7) + assert (top_ind_to_pad_bits (10) == 5) + assert (top_ind_to_pad_bits (15) == 0) + + pad_bits_count = top_ind_to_pad_bits (val.top_ind) + + val_len = ((val.top_ind + 1) / 8) + 1 + # + 1 for count of padding bits, count always 1 byte + if pad_bits_count <> 0: + val_len += 1 + l = [] + to_write = (1L * val.bits) << pad_bits_count + for i in range (val_len - 1): + l.append (to_write % 256) + to_write = to_write / 256 + + assert (to_write >= 0) + if not cons_encoding: + ctx.len_write_known (val_len) + l.append (pad_bits_count) + l.reverse () + ctx.bytes_write (l) + else: + ctx.bytes_write ([0x80]) # Dubuisson p. 403 says indef-len req'd + l.reverse () + for i in range (len (l) - 1): + v = [0x3, 0x2, 0x0, l[i]] + if trace_bitstring: print "encoding", v + ctx.bytes_write (v) + v = [0x3, 0x2, pad_bits_count, l[-1]] + if trace_bitstring: print "encoding last", v + ctx.bytes_write (v) + ctx.bytes_write ([0x00,0x00]) + def decode_val (self, ctx, buf): + if trace_bitstring: + print "bitstring", buf + pad_bits = buf [0] + bits = 0 + for b in buf [1:]: + bits = 256L * bits + b + bits = bits >> pad_bits + return BitStringVal ((len(buf) - 1) * 8 - pad_bits - 1 , bits, + self) + +BITSTRING = BITSTRING_class () + +class SeqConsElt: + def __init__ (self, seq): + self.index = 0 + self.seq = seq + self.tmp = seq.klass () + def get_cur_def (self, seen_tag): + r = range (self.index, len (self.seq.seq)) + + for i in r: + (name, typ, optional) = self.seq.seq [i] + if typ.check_tag (seen_tag): + self.index = i + return typ + if not optional: + raise BERError ("SEQUENCE tag %s not found in %s (%d/%d)" % + (str (seen_tag), str (self.seq), + self.index, i)) + + # OK, we fell off the end. Must just be absent OPTIONAL types. + return None + + def handle_val (self,val): + setattr (self.tmp, self.seq.seq[self.index][0], val) + self.index += 1 + def finish (self): + for i in range (self.index, len (self.seq.seq)): + (name, typ, optional) = self.seq.seq[i] + if not optional: + raise BERError ( + "non-opt data missing from seq %s at %d (so far %s)" % + (str (self.seq), self.index, str (self.tmp))) + return self.tmp + +class SEQUENCE_BASE (ELTBASE): + tag = (CONS_FLAG, SEQUENCE_TAG) + known_len = 0 + def __init__ (self, klass, seq): + self.klass = klass + self.seq = [] + for e in seq: + self.seq.append (self.mung (e)) + self.extensible = 0 + def __call__ (self, **kw): + return apply (self.klass, (), kw) + def mung (self, e): + if len (e) == 3: + (name, tag, typ) = e + optional = 0 + elif len (e) == 4: + (name, tag, typ, optional) = e + else: assert (len(e) == 3 or len(e) == 4) + typ = TYPE (tag, typ) + return (name, typ, optional) + def __repr__ (self): + return ('SEQUENCE: ' + repr (self.klass) + + '\n' + string.join (map (repr, self.seq), '\n')) + def __getitem__ (self, key): + for e in self.seq: + if e[0] == key: + return e[1] + raise KeyError (key) + def __setitem__ (self, key, val): + for i in range (len (self.seq)): + if self.seq[i][0] == key: + self.seq[i] = self.mung (val) + return + raise "not found" + str (key) + def fulfill_promises (self, promises): + for i in range (len(self.seq)): + (name, typ, optional) = self.seq[i] + if isinstance (typ, Promise): + self.seq[i] = (name, typ.get_promised (promises), optional) + else: + typ.fulfill_promises (promises) + + def get_attribs (self): + return map (lambda e: e[0], self.seq) + + def start_cons (self, tag, cur_len, ctx): + return SeqConsElt (self) + + def encode_per (self, ctx, val): + any_optional = 0 # XXX replace w/ every + for (attrname, typ, optional) in self.seq: + any_optional = any_optional or optional + if any_optional: + for (attrname, typ, optional) in self.seq: + ctx.write_bits_unaligned (hasattr (val, attrname), 1) + for (attrname, typ, optional) in self.seq: + try: + v = getattr (val, attrname) + # XXX need to handle DEFAULT,not encode + except AttributeError: + if optional: continue + else: raise EncodingError, ("Val " + repr(val) + + " missing attribute: " + + str(attrname)) + if trace_seq: print "Encoding", attrname, v + typ.encode_per (ctx, v) + + + def encode_val (self, ctx, val): + for (attrname, typ, optional) in self.seq: + try: + v = getattr (val, attrname) + except AttributeError: + if optional: continue + else: raise EncodingError, ("Val " + repr(val) + + " missing attribute: " + + str(attrname)) + if trace_seq: print "Encoding", attrname, v + typ.encode (ctx, v) + +import new + +# SEQUENCE returns an object which is both an asn.1 spec and a callable +# which generates a struct template to fill in. + +# I used to have SEQUENCE taking a classname and, using ~8 lines of +# black (OK, grayish) magic (throw an exn, catch it, and futz with the +# caller's locals dicts), bind the klass below in the caller's namespace. +# This meant I could provide bindings for SEQUENCEs nested inside other +# definitions (making my specs look more like the original ASN.1), and +# that I got the correct name for debugging purposes instead of using +# mk_klass_name (). I took it out b/c I didn't like the magic or the +# funny syntax it used (a mere function call caused an alteration to the +# caller's ns) + +# Now, the compiler takes care of generating the correct names for +# top-level SEQUENCE definitions, and should be extended to handle +# SEQUENCEs nested inside others. + +class Ctr: + def __init__ (self): + self.count = 0 + def __call__ (self): + self.count = self.count + 1 + return self.count + +class_count = Ctr () + +# This name only appears in debugging displays, so no big deal. +def mk_seq_class_name (): + return "seq_class_%d" % class_count () + + +class EXTERNAL_class (SEQUENCE_BASE): + tag = (CONS_FLAG, EXTERNAL_TAG) + def __repr__ (self): + return ('EXTERNAL: ' + repr (self.klass) + + '\n' + string.join (map (repr, self.seq), '\n')) + class ConsElt(SeqConsElt): + def __init__ (self, seq, ctx): + self.ctx = ctx + self.codec_pushed = 0 + SeqConsElt.__init__ (self, seq) + def get_cur_def (self, seen_tag): + self.found_ext_ANY = 0 + r = range (self.index, len (self.seq.seq)) + for i in r: + (name, typ, optional) = self.seq.seq [i] + if typ.check_tag (seen_tag): + self.index = i + if name == 'encoding' and seen_tag [1] == 0: + asn = check_EXTERNAL_ASN (self.tmp) + if asn <> None: + self.found_ext_ANY = 1 + typ = asn + new_codec_fn = self.ctx.charset_switch_oids.get ( + getattr (self.tmp, 'direct_reference', + None), None) + if new_codec_fn <> None: + self.ctx.push_codec () + new_codec_fn () + self.codec_pushed = 1 + return typ + if not optional: + raise BERError ("EXTERNAL tag %s not found in %s (%d/%d)" % + (str (seen_tag), str (self.seq), + self.index, i)) + # This is, in fact, an error, because the last bit of + # external isn't optional + raise BERError ("EXTERNAL tag %s not found" % (str (seen_tag),)) + def handle_val (self,val): + if self.found_ext_ANY: + val = ('single-ASN1-type', val) + if self.codec_pushed: + self.ctx.pop_codec () + SeqConsElt.handle_val (self, val) + + def start_cons (self, tag, cur_len, ctx): + return self.ConsElt (self, ctx) + + def encode_val (self, ctx, val): + new_codec_fn = None + for (attrname, typ, optional) in self.seq: + try: + v = getattr (val, attrname) + except AttributeError: + if optional: continue + else: raise EncodingError, ("Val " + repr(val) + + " missing attribute: " + + str(attrname)) + if attrname == 'encoding' and v[0] == 'single-ASN1-type': + asn = check_EXTERNAL_ASN (val) + if asn <> None: + typ = asn + v = v[1] + new_codec_fn = ctx.charset_switch_oids.get ( + getattr (val, 'direct_reference', None), None) + if new_codec_fn <> None: + ctx.push_codec () + new_codec_fn () + if trace_seq: print "Encoding", attrname, v + typ.encode (ctx, v) + if new_codec_fn <> None: + ctx.pop_codec () + +# XXX rename all these +def SEQUENCE (spec, base_typ = SEQUENCE_BASE, seq_name = None, + extra_bases = None): + if seq_name == None: + seq_name = mk_seq_class_name () + bases = [StructBase] + if extra_bases <> None: + bases = extra_bases + bases + klass = new.classobj (seq_name, tuple (bases), {}) + seq = base_typ (klass, spec) + klass._allowed_attrib_list = seq.get_attribs () + seq.klass = klass + return seq + +# This is the pre-1994 def'n. Note that post-1994 removes the ANY +# and BITSTRING options +EXTERNAL = SEQUENCE ([('direct_reference', None, OID, 1), + ('indirect_reference', None, INTEGER, 1), + ('data_value_descriptor', None, ObjectDescriptor, 1), + ('encoding', None, + CHOICE([('single-ASN1-type', EXPLICIT(0), ANY), + ('octet-aligned', 1, OCTSTRING), + ('arbitrary', 2, BITSTRING)]))], + EXTERNAL_class, + seq_name = 'EXTERNAL') + + +import math + +class REAL_class (SEQUENCE_BASE): + tag = (CONS_FLAG, REAL_TAG) + + + +# note clients are allowed to treat equal numbers in different bases as +# different, so keep mantissa/base/exponent + + +class REAL_val: + _mantissa_bits = 20 # XXX is there no way to auto-determine correct val? + def __repr__ (self): + return 'REAL %f' % (self.get_val ()) + + def set_val (self, val): + m, e = math.frexp (val) + self.mantissa = int (m * pow (2, self._mantissa_bits)) + self.base = 2 + self.exponent = e - self._mantissa_bits + return self + + def get_val (self): + return self.mantissa * pow (self.base, self.exponent) + + +REAL = SEQUENCE([('mantissa', None, INTEGER), + ('base', None, INTEGER), + ('exponent', None, INTEGER)], + REAL_class, + seq_name='REAL', + extra_bases = [REAL_val]) + +REAL.get_val = lambda self: (self.mantissa * 1.0 / self.base) * pow (self.base, self.exponent) +REAL.__str__ = lambda self: "REAL %f" % (self.get_val (),) + +_oid_to_asn1_dict = {} + + + +def register_oid (oid, asn): + tmp = EXPLICIT(0) # b/c ANY is EXPLICIT 0 arm of EXTERNAL CHOICE + tmp.set_typ (asn) + _oid_to_asn1_dict [OidVal (oid)] = tmp + + +def check_EXTERNAL_ASN (so_far): + if trace_external: + print "in check", so_far, EXTERNAL.klass + print "check 2", so_far.__class__ + assert (so_far.__class__ == EXTERNAL.klass) # only called from w/in EXTERNAL + dir_ref = getattr (so_far, 'direct_reference', None) + if dir_ref == None: + return + # in theory, should provide support for indirect_reference + # indicating encoding type, but callers can receive asn1.ANY + # decoded data, reencode it, and then redecode it with a proper + # spec as a workaround. Let me know if you actually use + # indirect_reference. + if trace_external: + print "so_far", so_far, dir_ref + rv = _oid_to_asn1_dict.get (dir_ref, None) + if trace_external: + print rv, _oid_to_asn1_dict + return rv + + +class SEQUENCE_OF(ELTBASE): + tag = (CONS_FLAG, SEQUENCE_TAG) + known_len = 0 + def __init__ (self, typ): + self.typ = typ + + def __getitem__ (self, key): + if key == 0: + return self.typ + raise KeyError (key) + def fulfill_promises (self, promises): + if isinstance (self.typ, Promise): + self.typ = self.typ.get_promised (promises) + else: + self.typ.fulfill_promises (promises) + + + class ConsElt: + def __init__ (self, typ): + self.typ = typ + self.lst = [] + def get_cur_def (self, seen_tag): + return self.typ + def handle_val (self, val): + self.lst.append (val) + def finish (self): + return self.lst + def start_cons (self, tag, cur_len, ctx): + return self.ConsElt (self.typ) + + def encode_val (self, ctx, val): + for e in val: + self.typ.encode (ctx, e) + +class SET_OF(SEQUENCE_OF): # XXX SET_OF needs more implementation + pass + + +def sgn(val): + if val < 0: return -1 + if val == 0: return 0 + return 1 + +class BOOLEAN_class (ELTBASE): + tag = (0, BOOL_TAG) + known_len = 1 + def encode_val (self, ctx, val): + ctx.len_write_known (1) + ctx.bytes_write ([val <> 0]) + # if val is multiple of 256, Python would treat as true, but + # just writing val would truncate. Thus, write val <> 0 + def encode_per (self, ctx, val): + ctx.write_bits_unaligned (val <> 0, 1) + def decode_val (self, ctx,buf): + mylen = len (buf) + if mylen <> 1: ctx.raise_error ("Bogus length for bool " + + repr (mylen)) + # "not not" to canonicalize. Really only needed for round-trip + # decode - reencode - redecode testing + return not not buf [0] + + +BOOLEAN = BOOLEAN_class () + +class NULL_class (ELTBASE): + tag = (0, NULL_TAG) + known_len = 1 + def encode_val (self, ctx, val): + ctx.len_write_known (0) + def encode_per (self, ctx, val): + pass + def decode_val (self, ctx, buf): + if len (buf) > 0: ctx.raise_error ("Bad length for NULL" + str (buf)) + return None + +NULL = NULL_class () + + +class ENUM (INTEGER_class): + def __init__ (self, **kw): + self.__dict__.update (kw) + +OBJECT_IDENTIFIER = OID # for convenience of compiler + +class Promise(ELTBASE): + """Placeholder for generating recursive data structures. + Replaced by calling fulfill_promises method.""" + def __init__ (self, type_name): + self.type_name = type_name + def get_promised (self, promises_dict): + return promises_dict[self.type_name] + def __str__ (self): + return 'Promise: ' + self.type_name + +class Tester: + def __init__ (self, print_test): + self.idc1 = IncrementalDecodeCtx (NULL) + self.idc2 = IncrementalDecodeCtx (ANY) + self.print_test = print_test + + def test (self, spec, val, assertflag = 1): + # XXX add an optional correct encoding to check against, and cmpfn + buf = encode (spec, val) + if self.print_test: + for byte in buf: + print hex (byte)[2:], + print + + self.idc1.asn1_def = spec + self.idc1.feed (buf) + self.idc2.feed (buf) + print self.idc1.get_bytes_inprocess_count () + print self.idc2.get_bytes_inprocess_count () + + + assert (self.idc1.get_bytes_inprocess_count () == 0) + assert (self.idc2.get_bytes_inprocess_count () == 0) + + assert (self.idc1.val_count () == 1) + assert (self.idc2.val_count () == 1) + idec = self.idc1.get_first_decoded () + idec2 = self.idc2.get_first_decoded () + buf2 = encode (ANY, idec2) + if self.print_test: + for byte in buf2: + print hex (byte)[2:], + print + + if self.print_test: + print "Val",repr(val), "idec", repr (idec), "any", idec2 + + if assertflag: + if buf2 <> buf: + print "buf1, buf2 differ" + assert (idec == val) + + + def run (self): + + int_spec = TYPE (EXPLICIT(3), INTEGER) + string_spec = TYPE (5, GeneralString) + bitstring_spec = TYPE (5, BITSTRING) + octstring_spec = TYPE (5, OCTSTRING) + bool_spec = TYPE(100, BOOLEAN) + + + self.test (bool_spec, 0) + self.test (bool_spec, 1) + self.test (bool_spec, -1, 0) + self.test (bool_spec, 1024, 0) + self.test (int_spec, 4) + self.test (int_spec, 256) + self.test (int_spec, -128) + self.test (int_spec, -129) # should be 83 02 FF 7F + self.test (int_spec, -1) + self.test (int_spec, 0) + self.test (int_spec, -27066) # should be 83 02 96 46 + self.test (string_spec, '') + self.test (string_spec, 'Lemon curry?') + self.test (octstring_spec, '\xFF\x00\x99 Foo') + + oid_spec = TYPE (4, OID) + oid = OidVal ([1, 2, 840, 10003, 0, 1]) + self.test (oid_spec, oid) + null_spec = TYPE (65536, NULL) + self.test (null_spec, None) + + real_spec = TYPE(3,REAL) + real_spec2 = REAL + rval = REAL () + rval.set_val (4.0) + assert 4.0 == rval.get_val () + self.test (real_spec, rval) + self.test (real_spec2, rval) + + + bs_test = BitStringVal (17, 0x1B977L) # 011011100101110111 + print "bs_test", bs_test + for i in range (10): + print "bitstring", i, bs_test + self.test (bitstring_spec, bs_test) + bs_test.top_ind = bs_test.top_ind + 1 + + seq_of_spec = SEQUENCE_OF (int_spec) + self.test (seq_of_spec, [1,44,131072]) + seq_of_spec = SEQUENCE_OF (TYPE(1, INTEGER)) + self.test (seq_of_spec, [1,44,131072]) + seq_of_spec = SEQUENCE_OF (INTEGER) + self.test (seq_of_spec, [1,44,131072]) + + seq_of_spec2 = TYPE (18, SEQUENCE_OF (TYPE(105,GeneralString))) + self.test (seq_of_spec2, ['db']) + self.test (seq_of_spec2, ['db1', 'db2', 'db3']) + self.test (seq_of_spec2, []) + + seq_of3 = SEQUENCE_OF(Promise('s')) + seq_of3.fulfill_promises ({'s': seq_of3}) + self.test (seq_of3, [[[],[],[[[[]]]]]]) + # stupendously useless without a CHOICE in the SEQUENCE_OF + # to introduce ground terms, but hey. + + choice_spec = CHOICE ([('foo', 1, INTEGER), + ('bar', None, INTEGER), + ('baz', None, string_spec), + ('foobar', None, seq_of_spec2)]) + self.test (choice_spec, ('foo', 2)) + self.test (choice_spec, ('bar', 3)) + self.test (choice_spec, ('baz', 'choose wisely')) + self.test (choice_spec, ('foobar', ['choose wisely', 'choose stupidly'])) + + + choice2_spec = CHOICE ([('a', 1, INTEGER), + ('b', EXPLICIT(2), Promise('choice2')), + ('c', 3, SEQUENCE_OF(Promise('choice2')))]) + # EXPLICIT is necessary to avoid CHOICE of CHOICE without tag + # to figure out which arm to take + choice2_spec.fulfill_promises ({'choice2' : choice2_spec}) + c2 = ('c', [('a', 4), + ('b', ('c', [('a', 5), ('b', ('a', 6))]))]) + self.test (choice2_spec, c2) + + seq_spec = SEQUENCE ( + [('a',5, INTEGER), + ('c', 51, INTEGER, 1), + ('b',6, INTEGER)]) + + class Foo (seq_spec.klass): + def __init__ (self, a = 0,b = 0): + StructBase.__init__ (self) + self.a = a + self.b = b + + seq_test = Foo (4,5) + self.test (seq_spec, seq_test) + + seq_test = Foo (4,5) + seq_test.c = 9 + self.test (seq_spec, seq_test) + + v = EXTERNAL () + v.direct_reference = oid + v.data_value_descriptor = "infrequently used field" + v.encoding = ('octet-aligned', 'foo bar') + self.test (EXTERNAL, v) + v.direct_reference = OidVal(SUTRS) + v.encoding = ('single-ASN1-type', 'This is a SUTRS string') + self.test (EXTERNAL, v) + + big_spec_test = SEQUENCE ([('a', 5, INTEGER), + ('b', 4096, GeneralString)]) + sq = big_spec_test () + sq.a = 1 + sq.b = '34' * 8192 + self.test (big_spec_test, sq) + sq.b = '35' * (65536 * 2) + self.test (big_spec_test, sq) + try: + sq.c = 'bogus' + except AttributeError, exn: + assert (exn.args == ('c',)) + else: assert (0) + bitstringval = BitStringVal (12, 0x16eb) + encoded_val = encode (BITSTRING, bitstringval) + Dubuisson_prim_val = [0x3, 0x3, 0x3, 0xB7, 0x58] + Dubuisson_cons_val = [0x23, 0x80, # see pp. 402-404 + 0x3, 0x2, 0x0, 0xB7, + 0x3, 0x2, 0x3, 0x58, + 0x0, 0x0] + if cons_encoding: + Dubuisson_val = Dubuisson_cons_val + else: + Dubuisson_val = Dubuisson_prim_val + print encoded_val, Dubuisson_val + assert (len (encoded_val) == len (Dubuisson_val)) + for v1, v2 in zip (encoded_val, Dubuisson_val): + assert (v1 == v2) + + self.idc1.asn1_def = BITSTRING + self.idc1.feed (Dubuisson_val) + assert (self.idc1.val_count () == 1) + idec = self.idc1.get_first_decoded () + print idec + assert (idec.top_ind == 12) + assert (idec.bits == 0x16eb) + + +SUTRS = [1,2,840,10003,5,101] + +def run (print_flag): + t = Tester (print_flag) + global cons_encoding, indef_len_encodings # XXX why is global needed? + + register_oid (SUTRS, GeneralString) + for indef_len_encodings in [0,1]: + for cons_encoding in [0,1]: + print "Starting", indef_len_encodings, cons_encoding + t.run () + print "byte offset", t.idc1.offset, t.idc2.offset + + + + + +import profile + +if __name__ == '__main__': + pwc = PERWriteCtx (aligned = 0) + inner_seq_def = SEQUENCE ([ + ('d1', 0, BOOLEAN), + ('d2', 0, BOOLEAN)]) + + test_def = SEQUENCE ([ + ('a', 0, INTEGER_class (None, 0,7)), + ('b', 0, BOOLEAN), + ('c', 0, INTEGER_class (None, 0,3)), + ('d', 0, inner_seq_def)]) + test = test_def () + test.a = 5 + test.b = 1 + test.c = 1 + test.d = inner_seq_def () + test.d.d1 = 1 + test.d.d2 = 1 + test_def.encode_per (pwc, test) + print "bit offset", pwc.bit_offset + print map (hex, pwc.get_data ()) + if 0: + profile.run ("run (0)") + else: + run (1) + diff --git a/python/PyZ3950/bib1msg.py b/python/PyZ3950/bib1msg.py new file mode 100644 index 0000000..35be57f --- /dev/null +++ b/python/PyZ3950/bib1msg.py @@ -0,0 +1,191 @@ +"""Translate bib-1 error numbers to messages.""" + +from PyZ3950 import asn1 +from PyZ3950 import z3950 +from PyZ3950 import oids + +msg_dict = { +1: 'permanent system error', # (unspecified), +2: 'temporary system error', # (unspecified), +3: 'unsupported search', # (unspecified), +4: 'Terms only exclusion (stop) words', # (unspecified), +5: 'Too many argument words', # (unspecified), +6: 'Too many boolean operators', # (unspecified), +7: 'Too many truncated words', # (unspecified), +8: 'Too many incomplete subfields', # (unspecified), +9: 'Truncated words too short', # (unspecified), +10: 'Invalid format for record number (search term)', # (unspecified), +11: 'Too many characters in search statement', # (unspecified), +12: 'Too many records retrieved', # (unspecified), +13: 'Present request out-of-range', # (unspecified), +14: 'System error in presenting records', # (unspecified), +15: 'Record not authorized to be sent intersystem', # (unspecified), +16: 'Record exceeds Preferred-message-size', # (unspecified), +17: 'Record exceeds Exceptional-record-size', # (unspecified), +18: 'Result set not supported as a search term', # (unspecified), +19: 'Only single result set as search term supported', # (unspecified), +20: 'Only ANDing of a single result set as search term', # (unspecified), +21: 'Result set exists and replace indicator off', # (unspecified), +22: 'Result set naming not supported', # (unspecified), +23: 'Specified combination of databases not supported', # (unspecified), +24: 'Element set names not supported', # (unspecified), +25: 'Specified element set name not valid for specified database', # (unspecified), +26: 'Only generic form of element set name supported', # (unspecified), +27: 'Result set no longer exists - unilaterally deleted by target', # (unspecified), +28: 'Result set is in use', # (unspecified), +29: 'One of the specified databases is locked', # (unspecified), +30: 'Specified result set does not exist', # (unspecified), +31: 'Resources exhausted - no results available', # (unspecified), +32: 'Resources exhausted - unpredictable partial results available', # (unspecified), +33: 'Resources exhausted - valid subset of results available', # (unspecified), +100: '(unspecified) error', # (unspecified), +101: 'Access-control failure', # (unspecified), +102: 'Challenge required, could not be issued - operation terminated', # (unspecified), +103: 'Challenge required, could not be issued - record not included', # (unspecified), +104: 'Challenge failed - record not included', # (unspecified), +105: 'Terminated at origin request', # (unspecified), +106: 'No abstract syntaxes agreed to for this record', # (unspecified), +107: 'Query type not supported', # (unspecified), +108: 'Malformed query', # (unspecified), +109: 'Database unavailable', # database name, +110: 'Operator unsupported', # operator, +111: 'Too many databases specified', # maximum, +112: 'Too many result sets created', # maximum, +113: 'Unsupported attribute type', # type, +114: 'Unsupported Use attribute', # value, +115: 'Unsupported term value for Use attribute', # term, +116: 'Use attribute required but not supplied', # (unspecified), +117: 'Unsupported Relation attribute', # value, +118: 'Unsupported Structure attribute', # value, +119: 'Unsupported Position attribute', # value, +120: 'Unsupported Truncation attribute', # value, +121: 'Unsupported Attribute Set', # oid, +122: 'Unsupported Completeness attribute', # value, +123: 'Unsupported attribute combination', # (unspecified), +124: 'Unsupported coded value for term', # value, +125: 'Malformed search term', # (unspecified), +126: 'Illegal term value for attribute', # term, +127: 'Unparsable format for un-normalized value', # value, +128: 'Illegal result set name', # name, +129: 'Proximity search of sets not supported', # (unspecified), +130: 'Illegal result set in proximity search', # result set name, +131: 'Unsupported proximity relation', # value, +132: 'Unsupported proximity unit code', # value, +201: 'Proximity not supported with this attribute combination attribute', # list, +202: 'Unsupported distance for proximity', # distance, +203: 'Ordered flag not supported for proximity', # (unspecified), +205: 'Only zero step size supported for Scan', # (unspecified), +206: 'Specified step size not supported for Scan step', # size, +207: 'Cannot sort according to sequence', # sequence, +208: 'No result set name supplied on Sort', # (unspecified), +209: 'Generic sort not supported (database-specific sort only supported)', # (unspecified), +210: 'Database specific sort not supported', # (unspecified), +211: 'Too many sort keys', # number, +212: 'Duplicate sort keys', # key, +213: 'Unsupported missing data action', # value, +214: 'Illegal sort relation', # relation, +215: 'Illegal case value', # value, +216: 'Illegal missing data action', # value, +217: 'Segmentation: Cannot guarantee records will fit in specified segments', # (unspecified), +218: 'ES: Package name already in use', # name, +219: 'ES: no such package, on modify/delete', # name, +220: 'ES: quota exceeded', # (unspecified), +221: 'ES: extended service type not supported', # type, +222: 'ES: permission denied on ES - id not authorized', # (unspecified), +223: 'ES: permission denied on ES - cannot modify or delete', # (unspecified), +224: 'ES: immediate execution failed', # (unspecified), +225: 'ES: immediate execution not supported for this service', # (unspecified), +226: 'ES: immediate execution not supported for these parameters', # (unspecified), +227: 'No data available in requested record syntax', # (unspecified), +228: 'Scan: malformed scan', # (unspecified), +229: 'Term type not supported', # type, +230: 'Sort: too many input results', # max, +231: 'Sort: incompatible record formats', # (unspecified), +232: 'Scan: term list not supported', # alternative term list, +233: 'Scan: unsupported value of position-in-response', # value, +234: 'Too many index terms processed', # number of terms, +235: 'Database does not exist', # database name, +236: 'Access to specified database denied', # database name, +237: 'Sort: illegal sort', # (unspecified), +238: 'Record not available in requested syntax', # alternative suggested syntax(es), +239: 'Record syntax not supported', # syntax, +240: 'Scan: Resources exhausted looking for satisfying terms', # (unspecified), +241: 'Scan: Beginning or end of term list', # (unspecified), +242: 'Segmentation: max-segment-size too small to segment record', # smallest acceptable size, +243: 'Present: additional-ranges parameter not supported', # (unspecified), +244: 'Present: comp-spec parameter not supported', # (unspecified), +245: "Type-1 query: restriction ('resultAttr') operand not supported:", # (unspecified), +246: "Type-1 query: 'complex' attributeValue not supported", # (unspecified), +247: "Type-1 query: 'attributeSet' as part of AttributeElement not supported", # (unspecified), +1001: 'Malformed APDU', +1002: 'ES: EXTERNAL form of Item Order request not supported.', # , +1003: 'ES: Result set item form of Item Order request not supported.', # , +1004: 'ES: Extended services not supported unless access control is in effect.', # , +1005: 'Response records in Search response not supported.', # , +1006: 'Response records in Search response not possible for specified database (or database combination). See note 1.', # , +1007: 'No Explain server. See note 2.', # pointers to servers that have a surrogate Explain database for this server., +1008: 'ES: missing mandatory parameter for specified function', # parameter, +1009: 'ES: Item Order, unsupported OID in itemRequest.', # OID, +1010: 'Init/AC: Bad Userid', # , +1011: 'Init/AC: Bad Userid and/or Password', # , +1012: 'Init/AC: No searches remaining (pre-purchased searches exhausted)', # , +1013: 'Init/AC: Incorrect interface type (specified id valid only when used with a particular access method or client)', # , +1014: 'Init/AC: Authentication System error', # , +1015: 'Init/AC: Maximum number of simultaneous sessions for Userid', # , +1016: 'Init/AC: Blocked network address', # , +1017: 'Init/AC: No databases available for specified userId', # , +1018: 'Init/AC: System temporarily out of resources', # , +1019: 'Init/AC: System not available due to maintenance', # when it's expected back up, +1020: 'Init/AC: System temporarily unavailable', # when it's expected back up, +1021: 'Init/AC: Account has expired', # , +1022: 'Init/AC: Password has expired so a new one must be supplied', # , +1023: 'Init/AC: Password has been changed by an administrator so a new one must be supplied', # , +1024: 'Unsupported Attribute. See note 3.', # an unstructured string indicating the object identifier of the attribute set id, the numeric value of the attribute type, and the numeric value of the attribute., +1025: 'Service not supported for this database', # , +1026: 'Record cannot be opened because it is locked', # , +1027: 'SQL error', # , +1028: 'Record deleted', # , +1029: 'Scan: too many terms requested.', # Addinfo: max terms supported, +1040: 'ES: Invalid function', # function, +1041: 'ES: Error in retention time', # (unspecified), +1042: 'ES: Permissions data not understood', # permissions, +1043: 'ES: Invalid OID for task specific parameters', # oid, +1044: 'ES: Invalid action', # action, +1045: 'ES: Unknown schema', # schema, +1046: 'ES: Too many records in package', # maximum number allowed, +1047: 'ES: Invalid wait action', # wait action, +1048: 'ES: Cannot create task package -- exceeds maximum permissable size (see note 4)', # maximum task package size, +1049: 'ES: Cannot return task package -- exceeds maximum permissable size for ES response (see note 5)', # maximum task package size for ES response, +1050: 'ES: Extended services request too large (see note 6)', # maximum size of extended services request, +1051: 'Scan: Attribute set id required -- not supplied', # , +1052: 'ES: Cannot process task package record -- exceeds maximum permissible record size for ES (see note 7)', # maximum record size for ES, +1053: 'ES: Cannot return task package record -- exceeds maximum permissible record size for ES response (see note 8)', # maximum record size for ES response, +1054: 'Init: Required negotiation record not included', # oid(s) of required negotiation record(s), +1055: 'Init: negotiation option required', # , +1056: 'Attribute not supported for database', # attribute (oid, type, and value), and database name, +1057: 'ES: Unsupported value of task package parameter (See Note 9)', # parameter and value, +1058: 'Duplicate Detection: Cannot dedup on requested record portion', # , +1059: 'Duplicate Detection: Requested detection criterion not supported', # detection criterion, +1060: 'Duplicate Detection: Requested level of match not supported', # , +1061: 'Duplicate Detection: Requested regular expression not supported', # , +1062: 'Duplicate Detection: Cannot do clustering', # , +1063: 'Duplicate Detection: Retention criterion not supported', # retention criterion, +1064: 'Duplicate Detection: Requested number (or percentage) of entries for retention too large', # , +1065: 'Duplicate Detection: Requested sort criterion not supported', # sort criterion, +1066: 'CompSpec: Unknown schema, or schema not supported.', # , +1067: 'Encapsulation: Encapsulated sequence of PDUs not supported.', # specific unsupported sequence, +1068: 'Encapsulation: Base operation (and encapsulated PDUs) not executed based on pre-screening analysis.', # , +1069: 'No syntaxes available for this request. See note 10.', # , +1070: 'user not authorized to receive record(s) in requested syntax', # , +1071: 'preferredRecordSyntax not supplied', # , +1072: 'Query term includes characters that do not translate into the target character set.', # Characters that do not translate +} + + +def lookup_errmsg (condition, oid): + if oid <> oids.Z3950_DIAG_BIB1_ov: + return "Unknown oid: %s condition %d" % (str (oid), condition) + if msg_dict.has_key (condition): + return msg_dict[condition] + else: + return "Unknown BIB-1 error condition %d" % (condition,) diff --git a/python/PyZ3950/c2query.py b/python/PyZ3950/c2query.py new file mode 100644 index 0000000..f9c4a10 --- /dev/null +++ b/python/PyZ3950/c2query.py @@ -0,0 +1,406 @@ + +#!/usr/local/bin/python2.3 + +try: + from cStringIO import StringIO +except: + from StringIO import StringIO +from PyZ3950 import z3950, oids +from types import IntType, StringType, ListType +# We need "\"\"" to be one token +from PyZ3950.CQLParser import CQLshlex +from PyZ3950.CQLUtils import ZCQLConfig +from PyZ3950.zdefs import make_attr +zconfig = ZCQLConfig() + +""" +http://cheshire.berkeley.edu/cheshire2.html#zfind + +top ::= query ['resultsetid' name] +query ::= query boolean clause | clause +clause ::= '(' query ')' + | attributes [relation] term + | resultset +attributes ::= '[' { [set] type '=' value } ']' | name +boolean ::= 'and' | 'or' | 'not' | (synonyms) +prox ::= ('!PROX' | (synonyms)) {'/' name} +relation ::= '>' | '<' | ... + +[bib1 1=5, bib1 3=6] > term and title @ fish +""" + +booleans = {'AND' : 'and', + '.AND.' : 'and', + '&&' : 'and', + 'OR' : 'or', + '.OR.' : 'or', + '||' : 'or', + 'NOT' : 'and-not', + '.NOT.' : 'and-not', + 'ANDNOT' : 'and-not', + '.ANDNOT.' : 'and-not', + '!!' : 'and-not' + } + +relations = {'<' : 1, + 'LT' : 1, + '.LT.' : 1, + '<=' : 2, + 'LE' : 2, + '.LE.' : 2, + '=' : 3, + '>=' : 4, + 'GE' : 4, + '.GE.' : 4, + '>' : 5, + 'GT' : 5, + '.GT.' : 5, + '<>' : 6, + '!=' : 6, + 'NE' : 6, + '.NE.' : 6, + '?' : 100, + 'PHON' : 100, + '.PHON.' : 100, + '%' : 101, + 'STEM' : 101, + '.STEM.' : 101, + '@' : 102, + 'REL' : 102, + '.REL.' : 102, + '<=>' : 104, + 'WITHIN' : 104, + '.WITHIN.' : 104} + +geoRelations = {'>=<' : 7, + '.OVERLAPS.' : 7, + '>#<' : 8, + '.FULLY_ENCLOSED_WITHIN.' : 8, + '<#>' : 9, + '.ENCLOSES.' : 9, + '<>#' : 10, + '.OUTSIDE_OF.' : 10, + '+-+' : 11, + '.NEAR.' : 11, + '.#.' : 12, + '.MEMBERS_CONTAIN.' : 12, + '!.#.' : 13, + '.MEMBERS_NOT_CONTAIN.' : 13, + ':<:' : 14, + '.BEFORE.' : 14, + ':<=:' : 15, + '.BEFORE_OR_DURING.' : 15, + ':=:' : 16, + '.DURING.' : 16, + ':>=:' : 17, + '.DURING_OR_AFTER.' : 17, + ':>:' : 18, + '.AFTER.' : 18} + +proxBooleans = {'!PROX' : (2, 0, 2), + '!ADJ' : (2, 0, 2), + '!NEAR' : (20, 0, 2), + '!FAR' : (20, 0, 4), + '!OPROX' : (2, 1, 2), + '!OADJ' : (2, 1, 2), + '!ONEAR' : (20, 1, 2), + '!OFAR' : (20, 1, 4)} + +proxUnits = {'C' : 1, + 'CHAR' : 1, + 'W' : 2, + 'WORD' : 2, + 'S' : 3, + 'SENT' : 3, + 'SENTENCE' : 3, + 'P' : 4, + 'PARA' : 4, + 'PARAGRAPH' : 4, + 'SECTION' : 5, + 'CHAPTER' : 6, + 'DOCUMENT' : 7, + 'ELEMENT' : 8, + 'SUBELEMENT' : 9, + 'ELEMENTTYPE' : 10, + 'BYTE' : 11} + +privateBooleans = {'!FUZZY_AND' : 1, + '!FUZZY_OR' : 2, + '!FUZZY_NOT' : 3, + '!RESTRICT_FROM' : 4, + '!RESTRICT_TO' : 5, + '!MERGE_SUM' : 6, + '!MERGE_MEAN' : 7, + '!MERGE_NORM' : 8} + +xzconfig = ZCQLConfig() + +class C2Parser: + lexer = None + currentToken = None + nextToken = None + + def __init__(self, l): + self.lexer = l + self.fetch_token() + + + def fetch_token(self): + tok = self.lexer.get_token() + self.currentToken = self.nextToken + self.nextToken = tok + + def is_boolean(self, tok=None): + if (tok == None): + tok = self.currentToken + if (privateBooleans.has_key(tok.upper())): + return 1 + elif (booleans.has_key(tok.upper())): + return 2 + elif (proxBooleans.has_key(tok.upper())): + return 3 + else: + return 0 + + + def top(self): + + rpn = self.query() + # Check for resultsetid + if (self.currentToken.lower() == 'resultsetid'): + self.fetch_token() + resultset = self.currentToken + else: + resultset = None + + rpnq = z3950.RPNQuery() + rpnq.attributeSet = oids.Z3950_ATTRS_BIB1_ov + rpnq.rpn = rpn + q = ('type_1', rpnq) + return (q, resultset) + + def query(self): + self.fetch_token() + left = self.subquery() + while 1: + if not self.currentToken: + break + bool = self.is_boolean() + if bool: + bool = self.boolean() + right = self.subquery() + # Put left into triple, make triple new left + op = z3950.RpnRpnOp() + op.rpn1 = left + op.rpn2 = right + op.op = bool + wrap = ('rpnRpnOp', op) + left = wrap + else: + break + return left + + + def subquery(self): + if self.currentToken == "(": + object = self.query() + if (self.currentToken <> ")"): + raise ValueError + else: + self.fetch_token() + else: + object = self.clause() + return object + + def boolean(self): + tok = self.currentToken.upper() + self.fetch_token() + if (booleans.has_key(tok)): + return (booleans[tok], None) + elif (privateBooleans.has_key(tok)): + # Generate cutesie prox trick + type = privateBooleans[tok] + prox = z3950.ProximityOperator() + prox.proximityUnitCode = ('private', type) + prox.distance = 0 + prox.ordered = 0 + prox.relationType = 3 + return ('op', ('prox', prox)) + + elif (proxBooleans.has_key(tok)): + # Generate prox + prox = z3950.ProximityOperator() + stuff = proxBooleans[tok] + prox.distance = stuff[0] + prox.ordered = stuff[1] + prox.relationType = stuff[2] + prox.proximityUnitCode = ('known', 2) + + # Now look for / + while (self.currentToken == "/"): + self.fetch_token() + if (self.currentToken.isdigit()): + prox.distance = int(self.currentToken) + elif (proxUnits.has_key(self.currentToken.upper())): + prox.proximityUnitCode = ('known', proxUnits[self.currentToken.upper()]) + else: + raise ValueError + self.fetch_token() + return ('op', ('prox', prox)) + else: + # Argh! + raise ValueError + + def clause(self): + + if (self.is_boolean(self.nextToken) or not self.nextToken or self.nextToken.lower() == 'resultsetid' or self.nextToken == ")"): + # Must be a resultset + tok = self.currentToken + self.fetch_token() + return ('op', ('resultSet', tok)) + + elif (self.currentToken == '['): + # List of attributes + attrs = [] + oidHash = oids.oids['Z3950']['ATTRS'] + while (1): + self.fetch_token() + + if (self.currentToken == ']'): + break + + if (oidHash.has_key(self.currentToken)): + attrSet = oidHash[self.currentToken]['ov'] + self.fetch_token() + elif (self.currentToken[:8] == '1.2.840.'): + attrSet = asn1.OidVal(map(int, self.currentToken.split('.'))) + self.fetch_token() + else: + attrSet = None + + if (self.currentToken[-1] == ','): + tok = self.currentToken[:-1] + else: + tok = self.currentToken + + if (tok.isdigit()): + # 1 = foo + atype = int(tok) + self.fetch_token() + if (self.currentToken == '='): + # = foo + self.fetch_token() + + if (self.currentToken[0] == '='): + # =foo + tok = self.currentToken[1:] + else: + tok = self.currentToken + + if (tok[-1] == ','): + tok = tok[:-1] + + if (tok.isdigit()): + val = int(tok) + else: + val = tok + if (val[0] == "'" and val[-1] == "'"): + val = val[1:-1] + elif (tok[-1] == '='): + #1= foo + tok = tok[:-1] + if (tok.isdigit()): + atype = int(tok) + self.fetch_token() + if (self.currentToken[-1] == ","): + tok = self.currentToken[:-1] + else: + tok = self.currentToken + if (tok.isdigit()): + val = int(self.currentToken) + else: + val = tok + if (val[0] == "'" and val[-1] == "'"): + val = val[1:-1] + + elif (tok.find('=') > -1): + # 1=foo + (atype, val) = self.currentToken.split('=') + atype = int(atype) + if (val[-1] == ","): + val = val[:-1] + if (val.isdigit()): + val = int(val) + elif (val[0] == "'" and val[-1] == "'"): + val = val[1:-1] + else: + # ??? + raise ValueError + attrs.append([attrSet, atype, val]) + + else: + # Check for named index + if (zconfig.BIB1.has_key(self.currentToken.lower())): + attrs = [[oids.Z3950_ATTRS_BIB1_ov, 1, zconfig.BIB1[self.currentToken.lower()]]] + else: + # Just pass through the name + attrs = [[oids.Z3950_ATTRS_BIB1_ov, 1, self.currentToken]] + + self.fetch_token() + # Check for relation + tok = self.currentToken.upper() + if (relations.has_key(tok)): + val = relations[tok] + found = 0 + for a in attrs: + if (a[0] in [oids.Z3950_ATTRS_BIB1, None] and a[1] == 2): + found =1 + a[2] = val + break + if (not found): + attrs.append([None, 2, val]) + self.fetch_token() + elif (geoRelations.has_key(tok)): + val = geoRelations[tok] + found = 0 + for a in attrs: + if (a[0] in [oids.Z3950_ATTRS_BIB1, oids.Z3950_ATTRS_GEO, None] and a[1] == 2): + found = 1 + a[2] = val + break + if (not found): + attrs.append([oids.Z3950_ATTRS_GEO, 2, val]) + self.fetch_token() + + if (self.currentToken.find(' ')): + # Already quoted + term = self.currentToken + else: + # Accumulate + term = [] + while (self.currentToken and not self.is_boolean(self.currentToken) and self.currentToken.lower() != 'resultsetid'): + term.append(self.currenToken) + term = ' '.join(term) + + self.fetch_token() + + # Phew. Now build AttributesPlusTerm + clause = z3950.AttributesPlusTerm() + clause.attributes = [make_attr(*e) for e in attrs] + clause.term = ('general', term) + return ('op', ('attrTerm', clause)) + + +def parse(q): + + query = StringIO(q) + lexer = CQLshlex(query) + # Override CQL's wordchars list to include /=>< + lexer.wordchars += "!@#$%^&*-+;,.?|~`:\\><='" + lexer.wordchars = lexer.wordchars.replace('[', '') + lexer.wordchars = lexer.wordchars.replace(']', '') + + + parser = C2Parser(lexer) + return parser.top() + diff --git a/python/PyZ3950/ccl.py b/python/PyZ3950/ccl.py new file mode 100644 index 0000000..77c3068 --- /dev/null +++ b/python/PyZ3950/ccl.py @@ -0,0 +1,365 @@ +#!/usr/bin/env python + +"""Implements part of CCL, the Common Command Language, ISO 8777. I'm +working from the description in the YAZ toolkit +(http://www.indexdata.dk/yaz/doc/tools.php), rather than the ISO +spec. Two extensions: +- qualifiers can be literal "(attrtyp, attrval)" pairs, so, e.g., the +following is a legitimate for ISBN: "(1,7)=0312033095" +- the optional ATTRSET (attrset/query) which must appear at the beginning +of the string. +Allowed values are: +BIB1 (default) +XD1 +UTIL +ZTHES1 +EXP1 +or an oid expressed as a dotted string. (A leading dot implies a +prefix of 1.2.840.1003.3, so, e.g., .1 is the same as BIB1.) + +Eventually I will support v3-style mixing attribute sets within +a single query, but for now I don't. +""" + +from __future__ import nested_scopes +import string + +in_setup = 0 + +try: + from PyZ3950 import z3950 + from PyZ3950 import oids + from PyZ3950 import asn1 + + _attrdict = { + 'bib1' : oids.Z3950_ATTRS_BIB1_ov, + 'zthes1': oids.Z3950_ATTRS_ZTHES_ov, + 'xd1': oids.Z3950_ATTRS_XD1_ov, + 'utility': oids.Z3950_ATTRS_UTIL_ov, + 'exp1': oids.Z3950_ATTRS_EXP1_ov + } + +except ImportError, err: + print "Error importing (OK during setup)", err + in_setup = 1 + +class QuerySyntaxError(Exception): pass +class ParseError(QuerySyntaxError): pass +class LexError(QuerySyntaxError): pass +class UnimplError(QuerySyntaxError): pass + +tokens = ('LPAREN', 'RPAREN', 'COMMA', + 'SET', 'ATTRSET','QUAL', 'QUOTEDVALUE', 'RELOP', 'WORD', + 'LOGOP', 'SLASH') + +t_LPAREN= r'\(' +t_RPAREN= r'\)' +t_COMMA = r',' +t_SLASH = r'/' +def t_ATTRSET(t): + r'(?i)ATTRSET' + return t + +def t_SET (t): # need to def as function to override parsing as WORD, gr XXX + r'(SET)' + return t + +relop_to_attrib = { + '<': 1, + '<=': 2, + '=': 3, + '>=': 4, + '>': 5, + '<>': 6} + +t_RELOP = "|".join (["(%s)" % r for r in relop_to_attrib.keys()]) +# XXX Index Data docs say 'doesn't follow ... ISO8777'? + +# XXX expand to rd. addt'l defns from file? + +qual_dict = { # These are bib-1 attribute values, see +# http://www.loc.gov/z3950/agency/defns/bib1.html and ftp://ftp.loc.gov/pub/z3950/defs/bib1.txt + 'TI': (1,4), + 'AU': (1,1003), # use 1003 to work w/ both NLC-BNC and LC + 'ISBN': (1,7), + 'LCCN': (1,9), + 'ANY': (1,1016), + 'FIF': (3, 1), # first-in-field + 'AIF': (3,3), # any-in-field (default) + 'RTRUNC': (5,1), + 'NOTRUNC': (5,100) # (default) + } +default_quals = ['ANY'] # XXX should be per-attr-set +default_relop = '=' + +def t_QUAL(t): + return t + +def mk_quals (): + quals = ("|".join (map (lambda x: '(' + x + ')', qual_dict.keys()))) + t_QUAL.__doc__ = "(?i)" + quals + r"|(\([0-9]+,[0-9]+\))" + +def t_QUOTEDVALUE(t): + r"(\".*?\")" + if t.value[0] == '"': + t.value = t.value[1:-1] + return t + +word_init = "[a-z]|[A-Z]|[0-9]|&|:" +word_non_init = ",|\.|\'" + +t_WORD = "(%s)(%s|%s)*" % (word_init, word_init, word_non_init) + +def t_LOGOP(t): + r'(?i)(AND)|(OR)|(NOT)' + return t + + +t_ignore = " \t" + +def t_error(t): + raise LexError ('t_error: ' + str (t)) + + +from ply import lex + + + +def relex (): + global lexer + mk_quals () + lexer = lex.lex() + +relex () + +def add_qual (qual_name, val): + """Add a qualifier definition, and regenerate the lexer.""" + qual_dict[qual_name] = val + relex () + +from ply import yacc + +#if in_setup: +# import yacc +#else: +# from PyZ3950 import yacc + +class Node: + def __init__(self,type,children=None,leaf=None): + self.type = type + if children: + self.children = children + else: + self.children = [ ] + self.leaf = leaf + def str_child (self, child, depth): + if isinstance (child, Node): # ugh + return child.str_depth (depth) + indent = " " * (4 * depth) + return indent + str (child) + "\n" + def str_depth (self, depth): # ugh + indent = " " * (4 * depth) + l = ["%s%s %s" % (indent, self.type, self.leaf)] + l.append ("".join (map (lambda s: self.str_child (s, depth + 1), + self.children))) + return "\n".join (l) + def __str__(self): + return "\n" + self.str_depth (0) + +def p_top (t): + 'top : cclfind_or_attrset' + t[0] = t[1] + +def p_cclfind_or_attrset_1 (t): + 'cclfind_or_attrset : cclfind' + t[0] = t[1] + +def p_cclfind_or_attrset_2 (t): + 'cclfind_or_attrset : ATTRSET LPAREN WORD SLASH cclfind RPAREN' + t[0] = Node ('attrset', [t[5]], t[3]) + +def p_ccl_find_1(t): + 'cclfind : cclfind LOGOP elements' + t[0] = Node ('op', [t[1],t[3]], t[2]) + +def p_ccl_find_2(t): + 'cclfind : elements' + t[0] = t[1] + +def p_elements_1(t): + 'elements : LPAREN cclfind RPAREN' + t[0] = t[2] + +class QuallistVal: + def __init__ (self, quallist, val): + self.quallist = quallist + self.val = val + def __str__ (self): + return "QV: %s %s" % (str(self.quallist),str (self.val)) + def __getitem__ (self, i): + if i == 0: return self.quallist + if i == 1: return self.val + raise IndexError ('QuallistVal err ' + str (i)) + +def xlate_qualifier (x): + if x[0] == '(' and x[-1] == ')': + t = x[1:-1].split (',') # t must be of len 2 b/c of lexer + return (string.atoi (t[0]), string.atoi (t[1])) + return qual_dict[(x.upper ())] + + +def p_elements_2 (t): + 'elements : SET RELOP WORD' + if t[2] <> '=': + raise QuerySyntaxError (str (t[1], str (t[2]), str (t[3]))) + t[0] = Node ('set', leaf = t[3]) + +def p_elements_3(t): + 'elements : val' + t[0] = Node ('relop', QuallistVal (map (xlate_qualifier, default_quals), t[1]), default_relop) + +def p_elements_4(t): + 'elements : quallist RELOP val' + t[0] = Node ('relop', QuallistVal(map (xlate_qualifier, t[1]),t[3]), t[2]) + +# XXX p_elements_5 would be quals followed by recursive def'n, not yet implemented +# XXX p_elements_6 would be quals followed by range, not yet implemented. + +def p_quallist_1 (t): + 'quallist : QUAL' + t[0] = [t[1]] + +def p_quallist_2 (t): + 'quallist : quallist COMMA QUAL' + t[0] = t[1] + [t[3]] + +def p_val_1(t): + 'val : QUOTEDVALUE' + t[0] = t[1] + +def p_val_2(t): + 'val : val WORD' + t[0] = t[1] + " " + t[2] + +def p_val_3(t): + 'val : WORD' + t[0] = t[1] + + +# XXX also don't yet handle proximity operator + +def p_error(t): + raise ParseError ('Parse p_error ' + str (t)) + +precedence = ( + ('left', 'LOGOP'), + ) + +yacc.yacc (debug=0, tabmodule = 'PyZ3950_parsetab') +#yacc.yacc (debug=0, tabpackage = 'PyZ3950', tabmodule='PyZ3950_parsetab') + + +def attrset_to_oid (attrset): + l = attrset.lower () + if _attrdict.has_key (l): + return _attrdict [l] + split_l = l.split ('.') + if split_l[0] == '': + split_l = oids.Z3950_ATTRS + split_l[1:] + try: + intlist = map (string.atoi, split_l) + except ValueError: + raise ParseError ('Bad OID: ' + l) + return asn1.OidVal (intlist) + + +def tree_to_q (ast): + if ast.type == 'op': + myrpnRpnOp = z3950.RpnRpnOp () + myrpnRpnOp.rpn1 = tree_to_q(ast.children[0]) + myrpnRpnOp.rpn2 = tree_to_q(ast.children[1]) + op = ast.leaf.lower () + if op == 'not': op = 'and-not' # CCL spec of 'not' vs. Z39.50 spec of 'and-not' + myrpnRpnOp.op = (op, None) + return ('rpnRpnOp', myrpnRpnOp) + elif ast.type == 'relop': + # XXX but e.g. LC (http://lcweb.loc.gov/z3950/lcserver.html) + # doesn't support other relation attributes, either. + try: + relattr = relop_to_attrib [ast.leaf] + except KeyError: # should never happen, how could we have lexed it? + raise UnimplError (ast.leaf) + def make_aelt (qual): + val = ('numeric', qual [1]) + return z3950.AttributeElement (attributeType = qual[0], + attributeValue = val) + apt = z3950.AttributesPlusTerm () + quallist = ast.children.quallist + if ast.leaf <> '=': + quallist.append ((2,relattr)) # 2 is relation attribute + # see http://www.loc.gov/z3950/agency/markup/13.html ATR.1.1 + apt.attributes = map (make_aelt, quallist) + apt.term = ('general', ast.children.val) # XXX update for V3? + return ('op', ('attrTerm', apt)) + elif ast.type == 'set': + return ('op', ('resultSet', ast.leaf)) + + raise UnimplError("Bad ast type " + str(ast.type)) + +def mk_rpn_query (query): + """Transform a CCL query into an RPN query.""" + # need to copy or create a new lexer because it contains globals + # PLY 1.0 lacks __copy__ + # PLY 1.3.1-1.5 have __copy__, but it's broken and returns None + # I sent David Beazley a patch, so future PLY releases will + # presumably work correctly. + # Recreating the lexer each time is noticeably slower, so this solution + # is suboptimal for PLY <= 1.5, but better than being thread-unsafe. + # Perhaps I should have per-thread lexer instead XXX + # with example/twisted/test.py set to parse_only, I get 277 parses/sec + # with fixed PLY, vs. 63 parses/sec with broken PLY, on my 500 MHz PIII + # laptop. + + copiedlexer = None + if hasattr (lexer, '__copy__'): + copiedlexer = lexer.__copy__ () + if copiedlexer == None: + copiedlexer = lex.lex () + ast = yacc.parse (query, copiedlexer) + return ast_to_rpn (ast) + +def ast_to_rpn (ast): + if ast.type == 'attrset': + attrset = attrset_to_oid (ast.leaf) + ast = ast.children [0] + else: + attrset = oids.Z3950_ATTRS_BIB1_ov + rpnq = z3950.RPNQuery (attributeSet = attrset) + rpnq.rpn = tree_to_q (ast) + return ('type_1', rpnq) + +def testlex (s): + lexer.input (s) + while 1: + token = lexer.token () + if not token: + break + print token + +def testyacc (s): + copylex = lexer.__copy__ () + ast = yacc.parse (s, lexer = copylex) + print "AST:", ast + print "RPN Query:", ast_to_rpn (ast) + +if __name__ == '__main__': + testfn = testyacc + # testfn = testlex + testfn ('attrset (BIB1/ au="Gaiman, Neil" or ti=Sandman)') + while 1: + s = raw_input ('Query: ') + if len (s) == 0: + break + testfn (s) +# testyacc () +# testlex () diff --git a/python/PyZ3950/charneg.py b/python/PyZ3950/charneg.py new file mode 100644 index 0000000..390f45d --- /dev/null +++ b/python/PyZ3950/charneg.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +assert (0) +# XXX shouldn't use, absorbed into z3950_2001.py + +#from PyZ3950 import asn1 +import asn1 + +InitialSet=asn1.SEQUENCE ([('g0',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER),1), + ('g1',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER),1), + ('g2',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER),1), + ('g3',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER),1), + ('c0',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER),0), + ('c1',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER),1)]) + +PrivateCharacterSet=asn1.CHOICE ([('viaOid',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER))), + ('externallySpecified',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('previouslyAgreedUpon',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) + +LeftAndRight=asn1.SEQUENCE ([('gLeft',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER),0), + ('gRight',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER),1)]) + +Iso10646=asn1.SEQUENCE ([('collections',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('encodingLevel',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OID),0)]) + +LanguageCode=asn1.GeneralString + +Environment=asn1.CHOICE ([('sevenBit',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('eightBit',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) + +Iso2022=asn1.CHOICE ([('originProposal',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('proposedEnvironment',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),Environment),1), + ('proposedSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER)),0), + ('proposedInitialSets',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InitialSet)),0), + ('proposedLeftAndRight',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),LeftAndRight),0)]))), + ('targetResponse',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('selectedEnvironment',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),Environment),0), + ('selectedSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER)),0), + ('selectedinitialSet',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InitialSet),0), + ('selectedLeftAndRight',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),LeftAndRight),0)])))]) + +TargetResponse=asn1.SEQUENCE ([('selectedCharSets',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('iso2022',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Iso2022)), + ('iso10646',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Iso10646)), + ('private',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),PrivateCharacterSet)), + ('none',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL))])),1), + ('selectedLanguage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),LanguageCode),1), + ('recordsInSelectedCharSets',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)]) + +OriginProposal=asn1.SEQUENCE ([('proposedCharSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.CHOICE ([('iso2022',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Iso2022)), + ('iso10646',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Iso10646)), + ('private',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),PrivateCharacterSet))]))),1), + ('proposedlanguages',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (LanguageCode)),1), + ('recordsInSelectedCharSets',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)]) +CharSetandLanguageNegotiation=asn1.CHOICE ([('proposal',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),OriginProposal)), + ('response',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),TargetResponse))]) diff --git a/python/PyZ3950/compile_oids.py b/python/PyZ3950/compile_oids.py new file mode 100644 index 0000000..5721265 --- /dev/null +++ b/python/PyZ3950/compile_oids.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python + +# Original by Robert Sanderson, modifications by Aaron Lav + +import sys +from PyZ3950 import asn1 + +inh = file("oids.txt") +outh = file("oids.py", "w") +outh.write('from PyZ3950 import asn1\n') +# from ... to get same globals as others importing asn1 +outh.write('oids = {}\n') + +oids = {} +vars = {} + +for line in inh: + if (not line.isspace()): + flds = line.split(None) + name = flds[0] + number = flds[1] + if (len(flds) > 2): + aliasList = flds[2:] + else: + aliasList = [] + + if (number[0] == "."): + + # add to previous + splitname = name.split("_") + cur = oids + for n in splitname[:-1]: + cur = cur[n] + + val = cur['val'] + [int(number[1:])] + oid = asn1.OidVal(val) + + cur [splitname[-1]] = {'oid': oid, 'val' : val} + + vars[name] = val + tree = "oids['%s']" % "']['".join (splitname) + outh.write(tree + " = " + "{'oid': asn1.OidVal(" + str(val) + "), 'val': " + str(val) + "}\n") + + else: + # base + splitnums = number.split('.') + numlist = map(int, splitnums) + + oids[name] = {} + oids[name]['oid'] = asn1.OidVal(numlist) + oids[name]['val'] = numlist + vars[name] = numlist + + outh.write("oids['" + name + "'] = {'oid': asn1.OidVal(" + str(numlist) + "), 'val': " + str(numlist) + "}\n") + + +inh.close() + +items = vars.items() +items.sort() +for k,v in items: + outh.write(k + " = " + str(v) + "\n") + outh.write(k + "_ov = asn1.OidVal(" + str (v) + ")\n") + +outh.close() diff --git a/python/PyZ3950/grs1.py b/python/PyZ3950/grs1.py new file mode 100644 index 0000000..326f44b --- /dev/null +++ b/python/PyZ3950/grs1.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python + +"""Utility functions for GRS-1 data""" + +from __future__ import nested_scopes +# XXX still need to tag non-leaf nodes w/ (tagType, tagValue) +# XXX tagType can be omitted. If so, default either supplied +# dynamically by tagSet-M or statically spec'd by schema + +# from TAG (Z39.50-1995 App 12): tagType 1 is tagSet-M, 2 tagSet-G, +# 3 locally defined. + +class Node: + """Defined members are: + tag - tag (always present, except for top node) + metadata - metadata (opt, seriesOrder only for nonleaf - v. RET.3.2.3 ) + children - list of Node + leaf - leaf data (children and leaf are mutually exclusive) + """ + def __init__ (self, **kw): + self.__dict__.update (kw) + self.tab_size = 3 # controls str() indentation width + def str_depth (self, depth): + l = [] + children = getattr (self, 'children', []) + leaf = getattr (self, 'leaf', None) + tag = getattr (self, 'tag', None) + indent = " " * (self.tab_size * depth) + if leaf <> None: + l.append ("%s%s %s" % ( + indent, str (tag), leaf.content)) + else: + if tag <> None: + l.append (indent + str (tag)) + meta = getattr (self, 'metadata', None) + if meta <> None: + l.append (indent + 'metadata: ' + str (meta)) + l.append ("".join (map ( + lambda n: n.str_depth (depth + 1), children))) + return "\n".join (l) + def __str__ (self): + return "\n" + self.str_depth (-1) + + +def preproc (raw): + """Transform the raw output of the asn.1 decoder into something + a bit more programmer-friendly. (This is automatically called + by the ZOOM API, so you don't need to worry about it unless you're + using the raw z3950 API.) + """ + if isinstance (raw, type ([])): + return Node (children = map (preproc, raw)) + else: # TaggedElement + kw = {} + tag = (raw.tagType, raw.tagValue [1]) + # Value [0] is str vs. num indicator + kw ['tag'] = tag + meta = getattr (raw, 'metaData', None) + if meta <> None: + kw ['metadata'] = meta + if raw.content[0] == 'subtree': + return Node (children = map (preproc, raw.content [1]), **kw) + else: + # tag and metadata are here redundantly encoded as + # both attributes of leaf and of Node. Use the Node + # attribs, I'll try to clean this up sometime. + return Node (leaf = raw, **kw) + + + + diff --git a/python/PyZ3950/marc_to_unicode.py b/python/PyZ3950/marc_to_unicode.py new file mode 100644 index 0000000..b211257 --- /dev/null +++ b/python/PyZ3950/marc_to_unicode.py @@ -0,0 +1,16434 @@ +# auto-generated by parse_marc_codetable.py +charset_34 = { # Extended Arabic + 0xa1: (0x6fd, 0),# DOUBLE ALEF WITH HAMZA ABOVE / ARABIC SIGN SINDHI AMPERSAND + 0xa2: (0x672, 0),# ARABIC LETTER ALEF WITH WAVY HAMZA ABOVE + 0xa3: (0x673, 0),# ARABIC LETTER ALEF WITH WAVY HAMZA BELOW + 0xa4: (0x679, 0),# ARABIC LETTER TTEH + 0xa5: (0x67a, 0),# ARABIC LETTER TTEHEH + 0xa6: (0x67b, 0),# ARABIC LETTER BBEH + 0xa7: (0x67c, 0),# ARABIC LETTER TEH WITH RING + 0xa8: (0x67d, 0),# ARABIC LETTER TEH WITH THREE DOTS ABOVE DOWNWARDS + 0xa9: (0x67e, 0),# ARABIC LETTER PEH + 0xaa: (0x67f, 0),# ARABIC LETTER TEHEH + 0xab: (0x680, 0),# ARABIC LETTER BEHEH + 0xac: (0x681, 0),# ARABIC LETTER HAH WITH HAMZA ABOVE + 0xad: (0x682, 0),# ARABIC LETTER HAH WITH TWO ABOVE DOTS VERTICAL ABOVE + 0xae: (0x683, 0),# ARABIC LETTER NYEH + 0xaf: (0x684, 0),# ARABIC LETTER DYEH + 0xb0: (0x685, 0),# ARABIC LETTER HAH WITH THREE DOTS ABOVE + 0xb1: (0x686, 0),# ARABIC LETTER TCHEH + 0xb2: (0x6bf, 0),# ARABIC LETTER TCHEH WITH DOT ABOVE + 0xb3: (0x687, 0),# ARABIC LETTER TCHEHEH + 0xb4: (0x688, 0),# ARABIC LETTER DDAL + 0xb5: (0x689, 0),# ARABIC LETTER DAL WITH RING + 0xb6: (0x68a, 0),# ARABIC LETTER DAL WITH DOT BELOW + 0xb7: (0x68b, 0),# ARABIC LETTER DAL WITH DOT BELOW AND SMALL TAH + 0xb8: (0x68c, 0),# ARABIC LETTER DAHAL + 0xb9: (0x68d, 0),# ARABIC LETTER DDAHAL + 0xba: (0x68e, 0),# ARABIC LETTER DUL + 0xbb: (0x68f, 0),# ARABIC LETTER DAL WITH THREE DOTS ABOVE DOWNWARDS + 0xbc: (0x690, 0),# ARABIC LETTER DAL WITH FOUR DOTS ABOVE + 0xbd: (0x691, 0),# ARABIC LETTER RREH + 0xbe: (0x692, 0),# ARABIC LETTER REH WITH SMALL V + 0xbf: (0x693, 0),# ARABIC LETTER REH WITH RING + 0xc0: (0x694, 0),# ARABIC LETTER REH WITH DOT BELOW + 0xc1: (0x695, 0),# ARABIC LETTER REH WITH SMALL V BELOW + 0xc2: (0x696, 0),# ARABIC LETTER REH WITH DOT BELOW AND DOT ABOVE + 0xc3: (0x697, 0),# ARABIC LETTER REH WITH TWO DOTS ABOVE + 0xc4: (0x698, 0),# ARABIC LETTER JEH + 0xc5: (0x699, 0),# ARABIC LETTER REH WITH FOUR DOTS ABOVE + 0xc6: (0x69a, 0),# ARABIC LETTER SEEN WITH DOT BELOW AND DOT ABOVE + 0xc7: (0x69b, 0),# ARABIC LETTER SEEN WITH THREE DOTS BELOW + 0xc8: (0x69c, 0),# ARABIC LETTER SEEN WITH THREE DOTS BELOW AND THREE DOTS ABOVE + 0xc9: (0x6fa, 0),# ARABIC LETTER SHEEN WITH DOT BELOW + 0xca: (0x69d, 0),# ARABIC LETTER SAD WITH TWO DOTS BELOW + 0xcb: (0x69e, 0),# ARABIC LETTER SAD WITH THREE DOTS ABOVE + 0xcc: (0x6fb, 0),# ARABIC LETTER DAD WITH DOT BELOW + 0xcd: (0x69f, 0),# ARABIC LETTER TAH WITH THREE DOTS ABOVE + 0xce: (0x6a0, 0),# ARABIC LETTER AIN WITH THREE DOTS ABOVE + 0xcf: (0x6fc, 0),# ARABIC LETTER GHAIN WITH DOT BELOW + 0xd0: (0x6a1, 0),# ARABIC LETTER DOTLESS FEH + 0xd1: (0x6a2, 0),# ARABIC LETTER FEH WITH DOT MOVED BELOW + 0xd2: (0x6a3, 0),# ARABIC LETTER FEH WITH DOT BELOW + 0xd3: (0x6a4, 0),# ARABIC LETTER VEH + 0xd4: (0x6a5, 0),# ARABIC LETTER FEH WITH THREE DOTS BELOW + 0xd5: (0x6a6, 0),# ARABIC LETTER PEHEH + 0xd6: (0x6a7, 0),# ARABIC LETTER QAF WITH DOT ABOVE + 0xd7: (0x6a8, 0),# ARABIC LETTER QAF WITH THREE DOTS ABOVE + 0xd8: (0x6a9, 0),# ARABIC LETTER KEHEH + 0xd9: (0x6aa, 0),# ARABIC LETTER SWASH KAF + 0xda: (0x6ab, 0),# ARABIC LETTER KAF WITH RING + 0xdb: (0x6ac, 0),# ARABIC LETTER KAF WITH DOT ABOVE + 0xdc: (0x6ad, 0),# ARABIC LETTER NG + 0xdd: (0x6ae, 0),# ARABIC LETTER KAF WITH THREE DOTS BELOW + 0xde: (0x6af, 0),# ARABIC LETTER GAF + 0xdf: (0x6b0, 0),# ARABIC LETTER GAF WITH RING + 0xe0: (0x6b1, 0),# ARABIC LETTER NGOEH + 0xe1: (0x6b2, 0),# ARABIC LETTER GAF WITH TWO DOTS BELOW + 0xe2: (0x6b3, 0),# ARABIC LETTER GUEH + 0xe3: (0x6b4, 0),# ARABIC LETTER GAF WITH THREE DOTS ABOVE + 0xe4: (0x6b5, 0),# ARABIC LETTER LAM WITH SMALL V + 0xe5: (0x6b6, 0),# ARABIC LETTER LAM WITH DOT ABOVE + 0xe6: (0x6b7, 0),# ARABIC LETTER LAM WITH THREE DOTS ABOVE + 0xe7: (0x6b8, 0),# ARABIC LETTER LAM WITH THREE DOTS BELOW + 0xe8: (0x6ba, 0),# ARABIC LETTER NOON GHUNNA + 0xe9: (0x6bb, 0),# ARABIC LETTER RNOON + 0xea: (0x6bc, 0),# ARABIC LETTER NOON WITH RING + 0xeb: (0x6bd, 0),# ARABIC LETTER NOON WITH THREE DOTS ABOVE + 0xec: (0x6b9, 0),# ARABIC LETTER NOON WITH DOT BELOW + 0xed: (0x6be, 0),# ARABIC LETTER HEH DOACHASHMEE + 0xee: (0x6c0, 0),# HEH WITH HAMZA ABOVE / ARABIC LETTER HEH WITH YEH ABOVE + 0xef: (0x6c4, 0),# ARABIC LETTER WAW WITH RING + 0xf0: (0x6c5, 0),# KYRGHYZ OE / ARABIC LETTER KIRGHIZ OE + 0xf1: (0x6c6, 0),# ARABIC LETTER OE + 0xf2: (0x6ca, 0),# ARABIC LETTER WAW WITH TWO DOTS ABOVE + 0xf3: (0x6cb, 0),# ARABIC LETTER VE + 0xf4: (0x6cd, 0),# ARABIC LETTER YEH WITH TAIL + 0xf5: (0x6ce, 0),# ARABIC LETTER YEH WITH SMALL V + 0xf6: (0x6d0, 0),# ARABIC LETTER E + 0xf7: (0x6d2, 0),# ARABIC LETTER YEH BARREE + 0xf8: (0x6d3, 0),# ARABIC LETTER YEH BARREE WITH HAMZA ABOVE + 0xfd: (0x306, 1),# SHORT E / COMBINING BREVE + 0xfe: (0x30c, 1)# SHORT U / COMBINING CARON +} +charset_45 = { # Extended Latin (ANSEL) + 0x88: (0x98, 0),# NON-SORT BEGIN / START OF STRING + 0x89: (0x9c, 0),# NON-SORT END / STRING TERMINATOR + 0x8d: (0x200d, 0),# JOINER / ZERO WIDTH JOINER + 0x8e: (0x200c, 0),# NON-JOINER / ZERO WIDTH NON-JOINER + 0xa1: (0x141, 0),# UPPERCASE POLISH L / LATIN CAPITAL LETTER L WITH STROKE + 0xa2: (0xd8, 0),# UPPERCASE SCANDINAVIAN O / LATIN CAPITAL LETTER O WITH STROKE + 0xa3: (0x110, 0),# UPPERCASE D WITH CROSSBAR / LATIN CAPITAL LETTER D WITH STROKE + 0xa4: (0xde, 0),# UPPERCASE ICELANDIC THORN / LATIN CAPITAL LETTER THORN (Icelandic) + 0xa5: (0xc6, 0),# UPPERCASE DIGRAPH AE / LATIN CAPITAL LIGATURE AE + 0xa6: (0x152, 0),# UPPERCASE DIGRAPH OE / LATIN CAPITAL LIGATURE OE + 0xa7: (0x2b9, 0),# SOFT SIGN, PRIME / MODIFIER LETTER PRIME + 0xa8: (0xb7, 0),# MIDDLE DOT + 0xa9: (0x266d, 0),# MUSIC FLAT SIGN + 0xaa: (0xae, 0),# PATENT MARK / REGISTERED SIGN + 0xab: (0xb1, 0),# PLUS OR MINUS / PLUS-MINUS SIGN + 0xac: (0x1a0, 0),# UPPERCASE O-HOOK / LATIN CAPITAL LETTER O WITH HORN + 0xad: (0x1af, 0),# UPPERCASE U-HOOK / LATIN CAPITAL LETTER U WITH HORN + 0xae: (0x2be, 0),# ALIF / MODIFIER LETTER RIGHT HALF RING + 0xb0: (0x2bb, 0),# AYN / MODIFIER LETTER TURNED COMMA + 0xb1: (0x142, 0),# LOWERCASE POLISH L / LATIN SMALL LETTER L WITH STROKE + 0xb2: (0xf8, 0),# LOWERCASE SCANDINAVIAN O / LATIN SMALL LETTER O WITH STROKE + 0xb3: (0x111, 0),# LOWERCASE D WITH CROSSBAR / LATIN SMALL LETTER D WITH STROKE + 0xb4: (0xfe, 0),# LOWERCASE ICELANDIC THORN / LATIN SMALL LETTER THORN (Icelandic) + 0xb5: (0xe6, 0),# LOWERCASE DIGRAPH AE / LATIN SMALL LIGATURE AE + 0xb6: (0x153, 0),# LOWERCASE DIGRAPH OE / LATIN SMALL LIGATURE OE + 0xb7: (0x2ba, 0),# HARD SIGN, DOUBLE PRIME / MODIFIER LETTER DOUBLE PRIME + 0xb8: (0x131, 0),# LOWERCASE TURKISH I / LATIN SMALL LETTER DOTLESS I + 0xb9: (0xa3, 0),# BRITISH POUND / POUND SIGN + 0xba: (0xf0, 0),# LOWERCASE ETH / LATIN SMALL LETTER ETH (Icelandic) + 0xbc: (0x1a1, 0),# LOWERCASE O-HOOK / LATIN SMALL LETTER O WITH HORN + 0xbd: (0x1b0, 0),# LOWERCASE U-HOOK / LATIN SMALL LETTER U WITH HORN + 0xc0: (0xb0, 0),# DEGREE SIGN + 0xc1: (0x2113, 0),# SCRIPT SMALL L + 0xc2: (0x2117, 0),# SOUND RECORDING COPYRIGHT + 0xc3: (0xa9, 0),# COPYRIGHT SIGN + 0xc4: (0x266f, 0),# MUSIC SHARP SIGN + 0xc5: (0xbf, 0),# INVERTED QUESTION MARK + 0xc6: (0xa1, 0),# INVERTED EXCLAMATION MARK + 0xe0: (0x309, 1),# PSEUDO QUESTION MARK / COMBINING HOOK ABOVE + 0xe1: (0x300, 1),# GRAVE / COMBINING GRAVE ACCENT (Varia) + 0xe2: (0x301, 1),# ACUTE / COMBINING ACUTE ACCENT (Oxia) + 0xe3: (0x302, 1),# CIRCUMFLEX / COMBINING CIRCUMFLEX ACCENT + 0xe4: (0x303, 1),# TILDE / COMBINING TILDE + 0xe5: (0x304, 1),# MACRON / COMBINING MACRON + 0xe6: (0x306, 1),# BREVE / COMBINING BREVE (Vrachy) + 0xe7: (0x307, 1),# SUPERIOR DOT / COMBINING DOT ABOVE + 0xe8: (0x308, 1),# UMLAUT, DIAERESIS / COMBINING DIAERESIS (Dialytika) + 0xe9: (0x30c, 1),# HACEK / COMBINING CARON + 0xea: (0x30a, 1),# CIRCLE ABOVE, ANGSTROM / COMBINING RING ABOVE + 0xeb: (0xfe20, 1),# LIGATURE, FIRST HALF / COMBINING LIGATURE LEFT HALF + 0xec: (0xfe21, 1),# LIGATURE, SECOND HALF / COMBINING LIGATURE RIGHT HALF + 0xed: (0x315, 1),# HIGH COMMA, OFF CENTER / COMBINING COMMA ABOVE RIGHT + 0xee: (0x30b, 1),# DOUBLE ACUTE / COMBINING DOUBLE ACUTE ACCENT + 0xef: (0x310, 1),# CANDRABINDU / COMBINING CANDRABINDU + 0xf0: (0x327, 1),# CEDILLA / COMBINING CEDILLA + 0xf1: (0x328, 1),# RIGHT HOOK, OGONEK / COMBINING OGONEK + 0xf2: (0x323, 1),# DOT BELOW / COMBINING DOT BELOW + 0xf3: (0x324, 1),# DOUBLE DOT BELOW / COMBINING DIAERESIS BELOW + 0xf4: (0x325, 1),# CIRCLE BELOW / COMBINING RING BELOW + 0xf5: (0x333, 1),# DOUBLE UNDERSCORE / COMBINING DOUBLE LOW LINE + 0xf6: (0x332, 1),# UNDERSCORE / COMBINING LOW LINE + 0xf7: (0x326, 1),# LEFT HOOK (COMMA BELOW) / COMBINING COMMA BELOW + 0xf8: (0x31c, 1),# RIGHT CEDILLA / COMBINING LEFT HALF RING BELOW + 0xf9: (0x32e, 1),# UPADHMANIYA / COMBINING BREVE BELOW + 0xfa: (0xfe22, 1),# DOUBLE TILDE, FIRST HALF / COMBINING DOUBLE TILDE LEFT HALF + 0xfb: (0xfe23, 1),# DOUBLE TILDE, SECOND HALF / COMBINING DOUBLE TILDE RIGHT HALF + 0xfe: (0x313, 1)# HIGH COMMA, CENTERED / COMBINING COMMA ABOVE (Psili) +} +charset_33 = { # Basic Arabic + 0x21: (0x21, 0),# EXCLAMATION MARK + 0x22: (0x22, 0),# QUOTATION MARK + 0x23: (0x23, 0),# NUMBER SIGN + 0x24: (0x24, 0),# DOLLAR SIGN + 0x25: (0x66a, 0),# PERCENT SIGN / ARABIC PERCENT SIGN + 0x26: (0x26, 0),# AMPERSAND + 0x27: (0x27, 0),# APOSTROPHE + 0x28: (0x28, 0),# OPENING PARENTHESIS / LEFT PARENTHESIS + 0x29: (0x29, 0),# CLOSING PARENTHESIS / RIGHT PARENTHESIS + 0x2a: (0x66d, 0),# ASTERISK / ARABIC FIVE POINTED STAR + 0x2b: (0x2b, 0),# PLUS SIGN + 0x2c: (0x60c, 0),# ARABIC COMMA + 0x2d: (0x2d, 0),# HYPHEN-MINUS + 0x2e: (0x2e, 0),# PERIOD, DECIMAL POINT / FULL STOP + 0x2f: (0x2f, 0),# SLASH / SOLIDUS + 0x30: (0x660, 0),# ARABIC-INDIC DIGIT ZERO + 0x31: (0x661, 0),# ARABIC-INDIC DIGIT ONE + 0x32: (0x662, 0),# ARABIC-INDIC DIGIT TWO + 0x33: (0x663, 0),# ARABIC-INDIC DIGIT THREE + 0x34: (0x664, 0),# ARABIC-INDIC DIGIT FOUR + 0x35: (0x665, 0),# ARABIC-INDIC DIGIT FIVE + 0x36: (0x666, 0),# ARABIC-INDIC DIGIT SIX + 0x37: (0x667, 0),# ARABIC-INDIC DIGIT SEVEN + 0x38: (0x668, 0),# ARABIC-INDIC DIGIT EIGHT + 0x39: (0x669, 0),# ARABIC-INDIC DIGIT NINE + 0x3a: (0x3a, 0),# COLON + 0x3b: (0x61b, 0),# ARABIC SEMICOLON + 0x3c: (0x3c, 0),# LESS-THAN SIGN + 0x3d: (0x3d, 0),# EQUALS SIGN + 0x3e: (0x3e, 0),# GREATER-THAN SIGN + 0x3f: (0x61f, 0),# ARABIC QUESTION MARK + 0x41: (0x621, 0),# HAMZAH / ARABIC LETTER HAMZA + 0x42: (0x622, 0),# ARABIC LETTER ALEF WITH MADDA ABOVE + 0x43: (0x623, 0),# ARABIC LETTER ALEF WITH HAMZA ABOVE + 0x44: (0x624, 0),# ARABIC LETTER WAW WITH HAMZA ABOVE + 0x45: (0x625, 0),# ARABIC LETTER ALEF WITH HAMZA BELOW + 0x46: (0x626, 0),# ARABIC LETTER YEH WITH HAMZA ABOVE + 0x47: (0x627, 0),# ARABIC LETTER ALEF + 0x48: (0x628, 0),# ARABIC LETTER BEH + 0x49: (0x629, 0),# ARABIC LETTER TEH MARBUTA + 0x4a: (0x62a, 0),# ARABIC LETTER TEH + 0x4b: (0x62b, 0),# ARABIC LETTER THEH + 0x4c: (0x62c, 0),# ARABIC LETTER JEEM + 0x4d: (0x62d, 0),# ARABIC LETTER HAH + 0x4e: (0x62e, 0),# ARABIC LETTER KHAH + 0x4f: (0x62f, 0),# ARABIC LETTER DAL + 0x50: (0x630, 0),# ARABIC LETTER THAL + 0x51: (0x631, 0),# ARABIC LETTER REH + 0x52: (0x632, 0),# ARABIC LETTER ZAIN + 0x53: (0x633, 0),# ARABIC LETTER SEEN + 0x54: (0x634, 0),# ARABIC LETTER SHEEN + 0x55: (0x635, 0),# ARABIC LETTER SAD + 0x56: (0x636, 0),# ARABIC LETTER DAD + 0x57: (0x637, 0),# ARABIC LETTER TAH + 0x58: (0x638, 0),# ARABIC LETTER ZAH + 0x59: (0x639, 0),# ARABIC LETTER AIN + 0x5a: (0x63a, 0),# ARABIC LETTER GHAIN + 0x5b: (0x5b, 0),# OPENING SQUARE BRACKET / LEFT SQUARE BRACKET + 0x5d: (0x5d, 0),# CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET + 0x60: (0x640, 0),# ARABIC TATWEEL + 0x61: (0x641, 0),# ARABIC LETTER FEH + 0x62: (0x642, 0),# ARABIC LETTER QAF + 0x63: (0x643, 0),# ARABIC LETTER KAF + 0x64: (0x644, 0),# ARABIC LETTER LAM + 0x65: (0x645, 0),# ARABIC LETTER MEEM + 0x66: (0x646, 0),# ARABIC LETTER NOON + 0x67: (0x647, 0),# ARABIC LETTER HEH + 0x68: (0x648, 0),# ARABIC LETTER WAW + 0x69: (0x649, 0),# ARABIC LETTER ALEF MAKSURA + 0x6a: (0x64a, 0),# ARABIC LETTER YEH + 0x6b: (0x64b, 1),# ARABIC FATHATAN + 0x6c: (0x64c, 1),# ARABIC DAMMATAN + 0x6d: (0x64d, 1),# ARABIC KASRATAN + 0x6e: (0x64e, 1),# ARABIC FATHA + 0x6f: (0x64f, 1),# ARABIC DAMMA + 0x70: (0x650, 1),# ARABIC KASRA + 0x71: (0x651, 1),# ARABIC SHADDA + 0x72: (0x652, 1),# ARABIC SUKUN + 0x73: (0x671, 0),# ARABIC LETTER ALEF WASLA + 0x74: (0x670, 0),# ARABIC LETTER SUPERSCRIPT ALEF + 0x78: (0x66c, 0),# ARABIC THOUSANDS SEPARATOR + 0x79: (0x201d, 0),# RIGHT DOUBLE QUOTATION MARK + 0x7a: (0x201c, 0)# LEFT DOUBLE QUOTATION MARK +} +charset_32 = { # Basic Hebrew + 0x21: (0x21, 0),# EXCLAMATION MARK + 0x22: (0x5f4, 0),# QUOTATION MARK, GERSHAYIM / HEBREW PUNCTUATION GERSHAYIM + 0x23: (0x23, 0),# NUMBER SIGN + 0x24: (0x24, 0),# DOLLAR SIGN + 0x25: (0x25, 0),# PERCENT SIGN + 0x26: (0x26, 0),# AMPERSAND + 0x27: (0x5f3, 0),# APOSTROPHE, GERESH / HEBREW PUNCTUATION GERESH + 0x28: (0x28, 0),# OPENING PARENTHESIS / LEFT PARENTHESIS + 0x29: (0x29, 0),# CLOSING PARENTHESIS / RIGHT PARENTHESIS + 0x2a: (0x2a, 0),# ASTERISK + 0x2b: (0x2b, 0),# PLUS SIGN + 0x2c: (0x2c, 0),# COMMA + 0x2d: (0x5be, 0),# HYPHEN-MINUS, MAKEF / HEBREW PUNCTUATION MAQAF + 0x2e: (0x2e, 0),# PERIOD, DECIMAL POINT / FULL STOP + 0x2f: (0x2f, 0),# SLASH / SOLIDUS + 0x30: (0x30, 0),# DIGIT ZERO + 0x31: (0x31, 0),# DIGIT ONE + 0x32: (0x32, 0),# DIGIT TWO + 0x33: (0x33, 0),# DIGIT THREE + 0x34: (0x34, 0),# DIGIT FOUR + 0x35: (0x35, 0),# DIGIT FIVE + 0x36: (0x36, 0),# DIGIT SIX + 0x37: (0x37, 0),# DIGIT SEVEN + 0x38: (0x38, 0),# DIGIT EIGHT + 0x39: (0x39, 0),# DIGIT NINE + 0x3a: (0x3a, 0),# COLON + 0x3b: (0x3b, 0),# SEMICOLON + 0x3c: (0x3c, 0),# LESS-THAN SIGN + 0x3d: (0x3d, 0),# EQUALS SIGN + 0x3e: (0x3e, 0),# GREATER-THAN SIGN + 0x3f: (0x3f, 0),# QUESTION MARK + 0x40: (0x5b7, 1),# HEBREW POINT PATAH + 0x41: (0x5b8, 1),# KAMATS / HEBREW POINT QAMATS + 0x42: (0x5b6, 1),# HEBREW POINT SEGOL + 0x43: (0x5b5, 1),# TSEREH / HEBREW POINT TSERE + 0x44: (0x5b4, 1),# HIRIK / HEBREW POINT HIRIQ + 0x45: (0x5b9, 1),# HOLAM, LEFT SIN DOT / HEBREW POINT HOLAM + 0x46: (0x5bb, 1),# KUBUTS / HEBREW POINT QUBUTS + 0x47: (0x5b0, 1),# HEBREW POINT SHEVA + 0x48: (0x5b2, 1),# HEBREW POINT HATAF PATAH + 0x49: (0x5b3, 1),# HATAF KAMATS / HEBREW POINT HATAF QAMATS + 0x4a: (0x5b1, 1),# HEBREW POINT HATAF SEGOL + 0x4b: (0x5bc, 1),# HEBREW POINT DAGESH OR MAPIQ + 0x4c: (0x5bf, 1),# RAFEH / HEBREW POINT RAFE + 0x4d: (0x5c1, 1),# RIGHT SHIN DOT / HEBREW POINT SHIN DOT + 0x4e: (0xfb1e, 1),# VARIKA / HEBREW POINT JUDEO-SPANISH VARIKA + 0x5b: (0x5b, 0),# OPENING SQUARE BRACKET / LEFT SQUARE BRACKET + 0x5d: (0x5d, 0),# CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET + 0x60: (0x5d0, 0),# HEBREW LETTER ALEF + 0x61: (0x5d1, 0),# HEBREW LETTER BET + 0x62: (0x5d2, 0),# HEBREW LETTER GIMEL + 0x63: (0x5d3, 0),# HEBREW LETTER DALET + 0x64: (0x5d4, 0),# HEBREW LETTER HE + 0x65: (0x5d5, 0),# HEBREW LETTER VAV + 0x66: (0x5d6, 0),# HEBREW LETTER ZAYIN + 0x67: (0x5d7, 0),# HEBREW LETTER HET + 0x68: (0x5d8, 0),# HEBREW LETTER TET + 0x69: (0x5d9, 0),# HEBREW LETTER YOD + 0x6a: (0x5da, 0),# HEBREW LETTER FINAL KAF + 0x6b: (0x5db, 0),# HEBREW LETTER KAF + 0x6c: (0x5dc, 0),# HEBREW LETTER LAMED + 0x6d: (0x5dd, 0),# HEBREW LETTER FINAL MEM + 0x6e: (0x5de, 0),# HEBREW LETTER MEM + 0x6f: (0x5df, 0),# HEBREW LETTER FINAL NUN + 0x70: (0x5e0, 0),# HEBREW LETTER NUN + 0x71: (0x5e1, 0),# HEBREW LETTER SAMEKH + 0x72: (0x5e2, 0),# HEBREW LETTER AYIN + 0x73: (0x5e3, 0),# HEBREW LETTER FINAL PE + 0x74: (0x5e4, 0),# HEBREW LETTER PE + 0x75: (0x5e5, 0),# HEBREW LETTER FINAL TSADI + 0x76: (0x5e6, 0),# HEBREW LETTER TSADI + 0x77: (0x5e7, 0),# HEBREW LETTER QOF / KOF + 0x78: (0x5e8, 0),# HEBREW LETTER RESH + 0x79: (0x5e9, 0),# HEBREW LETTER SHIN + 0x7a: (0x5ea, 0),# HEBREW LETTER TAV + 0x7b: (0x5f0, 0),# HEBREW LIGATURE YIDDISH DOUBLE VAV / TSVEY VOVN + 0x7c: (0x5f1, 0),# HEBREW LIGATURE YIDDISH VAV YOD / VOV YUD + 0x7d: (0x5f2, 0)# HEBREW LIGATURE YIDDISH DOUBLE YOD / TSVEY YUDN +} +charset_31 = { # Chinese, Japanese, Korean (EACC) + 0x215556: (0x8461, 0),# East Asian ideograph + 0x6f5557: (0xc5d1, 0),# Korean hangul + 0x456324: (0x9f61, 0),# East Asian ideograph + 0x6f5140: (0xbccf, 0),# Korean hangul + 0x6f5558: (0xc5d4, 0),# Korean hangul + 0x213536: (0x53ec, 0),# East Asian ideograph + 0x6f5d3c: (0xd64b, 0),# Korean hangul + 0x215559: (0x8438, 0),# East Asian ideograph + 0x2d555a: (0x8386, 0),# East Asian ideograph + 0x6f5c7c: (0xd5d0, 0),# Korean hangul + 0x295b60: (0x9e55, 0),# East Asian ideograph + 0x2d555b: (0x8385, 0),# East Asian ideograph + 0x6f555c: (0xc5e3, 0),# Korean hangul + 0x6f5141: (0xbcd0, 0),# Korean hangul + 0x27555d: (0x5e2d, 0),# East Asian ideograph + 0x23555e: (0x9b1f, 0),# East Asian ideograph + 0x333f24: (0x7718, 0),# East Asian ideograph + 0x6f555f: (0xc5ed, 0),# Korean hangul + 0x6f4f5c: (0xb9ac, 0),# Korean hangul + 0x6f5560: (0xc5ee, 0),# Korean hangul + 0x6f4e21: (0xb540, 0),# Korean hangul + 0x4b4146: (0x6362, 0),# East Asian ideograph + 0x235031: (0x9874, 0),# East Asian ideograph + 0x225561: (0x7273, 0),# East Asian ideograph + 0x274257: (0x6bd9, 0),# East Asian ideograph + 0x295c28: (0x9e58, 0),# East Asian ideograph + 0x6f5142: (0xbcd1, 0),# Korean hangul + 0x6f5562: (0xc5f4, 0),# Korean hangul + 0x213727: (0x5616, 0),# East Asian ideograph + 0x215563: (0x84c0, 0),# East Asian ideograph + 0x215564: (0x8499, 0),# East Asian ideograph + 0x6f562e: (0xc679, 0),# Korean hangul + 0x2d4674: (0x51b2, 0),# East Asian ideograph + 0x6f5565: (0xc5fc, 0),# Korean hangul + 0x4b4147: (0x633f, 0),# East Asian ideograph + 0x215566: (0x8490, 0),# East Asian ideograph + 0x6f5143: (0xbcd2, 0),# Korean hangul + 0x275567: (0x82cd, 0),# East Asian ideograph + 0x215568: (0x853d, 0),# East Asian ideograph + 0x6f5569: (0xc600, 0),# Korean hangul + 0x27314c: (0x6765, 0),# East Asian ideograph + 0x276071: (0x517b, 0),# East Asian ideograph + 0x6f556a: (0xc601, 0),# Korean hangul + 0x33325d: (0x4fa1, 0),# East Asian ideograph + 0x6f5839: (0xc9dd, 0),# Korean hangul + 0x2d6b5f: (0x5273, 0),# East Asian ideograph + 0x21556b: (0x851a, 0),# East Asian ideograph + 0x6f5144: (0xbcd5, 0),# Korean hangul + 0x27556c: (0x83b2, 0),# East Asian ideograph + 0x22556d: (0x727c, 0),# East Asian ideograph + 0x21556e: (0x852d, 0),# East Asian ideograph + 0x6f556f: (0xc610, 0),# Korean hangul + 0x295721: (0x9c86, 0),# East Asian ideograph + 0x466074: (0x76b2, 0),# East Asian ideograph + 0x333529: (0x53dc, 0),# East Asian ideograph + 0x6f5145: (0xbcf4, 0),# Korean hangul + 0x225571: (0x727f, 0),# East Asian ideograph + 0x225d42: (0x7521, 0),# East Asian ideograph + 0x275949: (0x8a89, 0),# East Asian ideograph + 0x6f5037: (0xba84, 0),# Korean hangul + 0x215573: (0x8514, 0),# East Asian ideograph + 0x215574: (0x84ec, 0),# East Asian ideograph + 0x4c2330: (0x5c53, 0),# East Asian ideograph + 0x69656e: (0x7dd5, 0),# East Asian ideograph + 0x6f5146: (0xbcf5, 0),# Korean hangul + 0x215576: (0x8569, 0),# East Asian ideograph + 0x282441: (0x5c98, 0),# East Asian ideograph + 0x234021: (0x9132, 0),# East Asian ideograph + 0x4d4176: (0x91db, 0),# East Asian ideograph + 0x335577: (0x8602, 0),# East Asian ideograph + 0x394022: (0x6443, 0),# East Asian ideograph + 0x6f5578: (0xc634, 0),# Korean hangul + 0x6f4f5d: (0xb9ad, 0),# Korean hangul + 0x2d3749: (0x5650, 0),# East Asian ideograph + 0x287139: (0x7ee8, 0),# East Asian ideograph + 0x234024: (0x9126, 0),# East Asian ideograph + 0x6f557a: (0xc637, 0),# Korean hangul + 0x213c35: (0x5dde, 0),# East Asian ideograph + 0x6f5147: (0xbcf6, 0),# Korean hangul + 0x6f557b: (0xc639, 0),# Korean hangul + 0x215945: (0x8b66, 0),# East Asian ideograph + 0x21372c: (0x5606, 0),# East Asian ideograph (variant of 4B372C which maps to 5606) + 0x27557c: (0x829c, 0),# East Asian ideograph + 0x224027: (0x69bf, 0),# East Asian ideograph + 0x23557d: (0x9b34, 0),# East Asian ideograph + 0x6f557e: (0xc640, 0),# Korean hangul + 0x2d4029: (0x5214, 0),# East Asian ideograph + 0x6f5148: (0xbcf8, 0),# Korean hangul + 0x23402b: (0x9134, 0),# East Asian ideograph + 0x21372d: (0x5609, 0),# East Asian ideograph + 0x23402c: (0x9136, 0),# East Asian ideograph + 0x6f5876: (0xcc14, 0),# Korean hangul + 0x22402d: (0x69a3, 0),# East Asian ideograph + 0x22507c: (0x70dc, 0),# East Asian ideograph + 0x22402e: (0x69a4, 0),# East Asian ideograph + 0x6f5149: (0xbcfc, 0),# Korean hangul + 0x6f575f: (0xc8b0, 0),# Korean hangul + 0x295a75: (0x9e41, 0),# East Asian ideograph + 0x4b525a: (0x7ffa, 0),# East Asian ideograph + 0x234031: (0x913a, 0),# East Asian ideograph + 0x2d383f: (0x575a, 0),# East Asian ideograph + 0x294371: (0x94fd, 0),# East Asian ideograph + 0x234032: (0x913b, 0),# East Asian ideograph + 0x6f5c27: (0xd38c, 0),# Korean hangul + 0x224034: (0x69d4, 0),# East Asian ideograph + 0x6f514a: (0xbd04, 0),# Korean hangul + 0x335f73: (0x9759, 0),# East Asian ideograph + 0x6f4c33: (0xb17c, 0),# Korean hangul + 0x4b525b: (0x66dc, 0),# East Asian ideograph (variant of 39525B which maps to 66DC) + 0x2e7c2e: (0x831c, 0),# East Asian ideograph + 0x224038: (0x69c3, 0),# East Asian ideograph + 0x6f5b4d: (0xd280, 0),# Korean hangul + 0x2d4039: (0x67c6, 0),# East Asian ideograph + 0x6f514b: (0xbd05, 0),# Korean hangul + 0x276036: (0x54cd, 0),# East Asian ideograph + 0x395477: (0x85a6, 0),# East Asian ideograph + 0x213730: (0x5617, 0),# East Asian ideograph + 0x4b525c: (0x8002, 0),# East Asian ideograph + 0x23403b: (0x9143, 0),# East Asian ideograph + 0x295b6b: (0x9e57, 0),# East Asian ideograph + 0x2d5963: (0x8c98, 0),# East Asian ideograph + 0x224c3c: (0x6f3b, 0),# East Asian ideograph + 0x22403e: (0x6a11, 0),# East Asian ideograph + 0x6f5a73: (0xd0c8, 0),# Korean hangul + 0x6f514c: (0xbd07, 0),# Korean hangul + 0x213b74: (0x5cfd, 0),# East Asian ideograph + 0x23403f: (0x9145, 0),# East Asian ideograph + 0x21594a: (0x8b80, 0),# East Asian ideograph + 0x213731: (0x560d, 0),# East Asian ideograph + 0x225d49: (0x752f, 0),# East Asian ideograph + 0x234040: (0x9148, 0),# East Asian ideograph + 0x224041: (0x6a00, 0),# East Asian ideograph + 0x295b6c: (0x9e4b, 0),# East Asian ideograph + 0x234042: (0x9150, 0),# East Asian ideograph + 0x234043: (0x914e, 0),# East Asian ideograph + 0x6f514d: (0xbd09, 0),# Korean hangul + 0x213b75: (0x5ced, 0),# East Asian ideograph + 0x394a60: (0x9ae6, 0),# East Asian ideograph + 0x213732: (0x562e, 0),# East Asian ideograph + 0x334045: (0x629b, 0),# East Asian ideograph + 0x292a34: (0x86ac, 0),# East Asian ideograph + 0x224046: (0x69e6, 0),# East Asian ideograph + 0x2f2d79: (0x88b5, 0),# East Asian ideograph + 0x234048: (0x9159, 0),# East Asian ideograph + 0x6f514e: (0xbd10, 0),# Korean hangul + 0x276039: (0x9877, 0),# East Asian ideograph + 0x234049: (0x915c, 0),# East Asian ideograph + 0x33494a: (0x70d6, 0),# East Asian ideograph + 0x294372: (0x9513, 0),# East Asian ideograph + 0x22404b: (0x6a0b, 0),# East Asian ideograph + 0x22404c: (0x69e5, 0),# East Asian ideograph + 0x2e2f7a: (0x6738, 0),# East Asian ideograph + 0x22404d: (0x69e9, 0),# East Asian ideograph + 0x6f514f: (0xbd14, 0),# Korean hangul + 0x27603a: (0x9879, 0),# East Asian ideograph + 0x2d4f29: (0x9f9d, 0),# East Asian ideograph + 0x213734: (0x564e, 0),# East Asian ideograph + 0x2d404f: (0x6294, 0),# East Asian ideograph + 0x6f5039: (0xba87, 0),# Korean hangul + 0x224050: (0x69fc, 0),# East Asian ideograph + 0x6f5b4e: (0xd284, 0),# Korean hangul + 0x234052: (0x915a, 0),# East Asian ideograph + 0x6f5150: (0xbd24, 0),# Korean hangul + 0x213b78: (0x5cf0, 0),# East Asian ideograph + 0x234053: (0x9161, 0),# East Asian ideograph + 0x6f596b: (0xce6b, 0),# Korean hangul + 0x225d4d: (0x753a, 0),# East Asian ideograph + 0x224054: (0x6a17, 0),# East Asian ideograph + 0x4b4c3c: (0x7573, 0),# East Asian ideograph + 0x224056: (0x69e7, 0),# East Asian ideograph + 0x224057: (0x69eb, 0),# East Asian ideograph + 0x6f5151: (0xbd48, 0),# Korean hangul + 0x213b79: (0x5cf6, 0),# East Asian ideograph + 0x294621: (0x9553, 0),# East Asian ideograph + 0x4b6266: (0x9ed2, 0),# East Asian ideograph + 0x6f5631: (0xc688, 0),# Korean hangul + 0x22405b: (0x69f1, 0),# East Asian ideograph + 0x6f5152: (0xbd49, 0),# Korean hangul + 0x27603d: (0x9884, 0),# East Asian ideograph + 0x22405e: (0x6a2b, 0),# East Asian ideograph + 0x29444d: (0x952b, 0),# East Asian ideograph + 0x22405f: (0x69ff, 0),# East Asian ideograph + 0x224060: (0x6a20, 0),# East Asian ideograph + 0x234061: (0x916f, 0),# East Asian ideograph + 0x6f5153: (0xbd4c, 0),# Korean hangul + 0x27603e: (0x987c, 0),# East Asian ideograph + 0x234062: (0x916e, 0),# East Asian ideograph + 0x275d60: (0x94e8, 0),# East Asian ideograph + 0x6f5a71: (0xd0c1, 0),# Korean hangul + 0x4b4e21: (0x7b36, 0),# East Asian ideograph + 0x224064: (0x69ed, 0),# East Asian ideograph + 0x28355b: (0x6484, 0),# East Asian ideograph + 0x6f547d: (0xc545, 0),# Korean hangul + 0x234066: (0x917a, 0),# East Asian ideograph + 0x6f582e: (0xc9ca, 0),# Korean hangul + 0x6f5154: (0xbd50, 0),# Korean hangul + 0x27603f: (0x987d, 0),# East Asian ideograph + 0x224067: (0x6a1b, 0),# East Asian ideograph + 0x213739: (0x5657, 0),# East Asian ideograph + 0x2d7143: (0x55e2, 0),# East Asian ideograph + 0x234068: (0x9172, 0),# East Asian ideograph + 0x2d5a63: (0x8de5, 0),# East Asian ideograph + 0x2d384a: (0x5872, 0),# East Asian ideograph + 0x234069: (0x9179, 0),# East Asian ideograph + 0x27632c: (0x9f9a, 0),# East Asian ideograph + 0x23406a: (0x9176, 0),# East Asian ideograph + 0x4c233f: (0x5c76, 0),# East Asian ideograph + 0x23406b: (0x9174, 0),# East Asian ideograph + 0x6f5155: (0xbd58, 0),# Korean hangul + 0x213b7d: (0x5d1b, 0),# East Asian ideograph + 0x276040: (0x987f, 0),# East Asian ideograph + 0x23406c: (0x9173, 0),# East Asian ideograph + 0x23406d: (0x9185, 0),# East Asian ideograph + 0x22406e: (0x6a18, 0),# East Asian ideograph + 0x23406f: (0x9182, 0),# East Asian ideograph + 0x4b5f30: (0x9686, 0),# East Asian ideograph (variant of 215F30 which maps to 9686) + 0x234070: (0x918a, 0),# East Asian ideograph + 0x6f5a75: (0xd0d0, 0),# Korean hangul + 0x213c38: (0x5de8, 0),# East Asian ideograph + 0x6f5156: (0xbd59, 0),# Korean hangul + 0x276041: (0x9881, 0),# East Asian ideograph + 0x234071: (0x9186, 0),# East Asian ideograph + 0x21373b: (0x5653, 0),# East Asian ideograph + 0x234072: (0x918c, 0),# East Asian ideograph + 0x234073: (0x9181, 0),# East Asian ideograph + 0x224075: (0x6a0c, 0),# East Asian ideograph + 0x6f5157: (0xbd64, 0),# Korean hangul + 0x224076: (0x6a0f, 0),# East Asian ideograph + 0x21373c: (0x563f, 0),# East Asian ideograph + 0x4b3f74: (0x623b, 0),# East Asian ideograph + 0x282f43: (0x6206, 0),# East Asian ideograph + 0x454738: (0x6cfa, 0),# East Asian ideograph + 0x275e6a: (0x9610, 0),# East Asian ideograph + 0x274f36: (0x5e0c, 0),# East Asian ideograph + 0x6f5e21: (0xd79d, 0),# Korean hangul + 0x232b24: (0x876a, 0),# East Asian ideograph + 0x212b25: (0x300c, 0),# Ideographic left corner bracket + 0x2f5158: (0x7cc7, 0),# East Asian ideograph + 0x23407b: (0x9191, 0),# East Asian ideograph + 0x225d55: (0x754a, 0),# East Asian ideograph + 0x294628: (0x9552, 0),# East Asian ideograph + 0x4b3050: (0x4e8a, 0),# East Asian ideograph + 0x22407c: (0x69ee, 0),# East Asian ideograph + 0x232b27: (0x874e, 0),# East Asian ideograph + 0x695b37: (0x6737, 0),# East Asian ideograph + 0x23407d: (0x9190, 0),# East Asian ideograph + 0x23407e: (0x918e, 0),# East Asian ideograph + 0x4c6775: (0x7962, 0),# Unrelated variant of EACC 293032 which maps to 7962 + 0x6f5159: (0xbd81, 0),# Korean hangul + 0x21373e: (0x5637, 0),# East Asian ideograph + 0x294629: (0x84e5, 0),# East Asian ideograph + 0x4b3051: (0x5f10, 0),# East Asian ideograph + 0x6f503b: (0xbaa9, 0),# Korean hangul + 0x222b2d: (0x602b, 0),# East Asian ideograph + 0x6f5b50: (0xd290, 0),# Korean hangul + 0x455847: (0x8a25, 0),# East Asian ideograph (variant of 215847 which maps to 8A25) + 0x396b2f: (0x521f, 0),# East Asian ideograph + 0x6f515a: (0xbd84, 0),# Korean hangul + 0x6f5861: (0xcad9, 0),# Korean hangul + 0x222b30: (0x6019, 0),# East Asian ideograph + 0x225d57: (0x754e, 0),# East Asian ideograph + 0x4b3052: (0x6275, 0),# East Asian ideograph + 0x212b31: (0xff3b, 0),# Ideographic left square bracket + 0x4b3749: (0x5668, 0),# East Asian ideograph (variant of 213749 which maps to 5668) + 0x3a3b7d: (0x67b1, 0),# East Asian ideograph + 0x216b33: (0x5231, 0),# East Asian ideograph + 0x23504a: (0x98bf, 0),# East Asian ideograph + 0x4b5f35: (0x6b92, 0),# East Asian ideograph + 0x474270: (0x94bc, 0),# East Asian ideograph + 0x6f515b: (0xbd87, 0),# Korean hangul + 0x212b35: (0x3001, 0),# Ideographic comma + 0x216b36: (0x5235, 0),# East Asian ideograph + 0x4b6268: (0x9ed9, 0),# East Asian ideograph + 0x3f404f: (0x638a, 0),# East Asian ideograph + 0x695b7b: (0x6926, 0),# East Asian ideograph + 0x222b38: (0x601b, 0),# East Asian ideograph + 0x216b39: (0x5233, 0),# East Asian ideograph + 0x6f485f: (0xac00, 0),# Korean hangul + 0x276047: (0x988a, 0),# East Asian ideograph + 0x212b3a: (0xff1a, 0),# Ideographic colon + 0x225d59: (0x754b, 0),# East Asian ideograph + 0x333f3f: (0x51f4, 0),# East Asian ideograph + 0x212b3b: (0xff1f, 0),# Ideographic question mark + 0x2d3852: (0x51a2, 0),# East Asian ideograph + 0x295739: (0x9c9e, 0),# East Asian ideograph + 0x222b3d: (0x6033, 0),# East Asian ideograph + 0x276b3e: (0x522d, 0),# East Asian ideograph + 0x6f515d: (0xbd89, 0),# Korean hangul + 0x276048: (0x9888, 0),# East Asian ideograph + 0x275a28: (0x8d42, 0),# East Asian ideograph + 0x225d5a: (0x7548, 0),# East Asian ideograph + 0x29462d: (0x9549, 0),# East Asian ideograph + 0x6f4b45: (0xb07d, 0),# Korean hangul + 0x274f3c: (0x79f0, 0),# East Asian ideograph + 0x706b42: (0x80bc, 0),# East Asian ideograph + 0x6f515e: (0xbd90, 0),# Korean hangul + 0x276049: (0x9891, 0),# East Asian ideograph + 0x217b75: (0x5aa0, 0),# East Asian ideograph + 0x706b44: (0x80bd, 0),# East Asian ideograph + 0x33615a: (0x8eb0, 0),# East Asian ideograph + 0x222b45: (0x600d, 0),# East Asian ideograph + 0x2d3854: (0x5896, 0),# East Asian ideograph + 0x274f3d: (0x79cd, 0),# East Asian ideograph + 0x28533c: (0x709d, 0),# East Asian ideograph + 0x69573b: (0x5f41, 0),# East Asian ideograph + 0x216b47: (0x5260, 0),# East Asian ideograph + 0x6f5b51: (0xd291, 0),# Korean hangul + 0x6f515f: (0xbd91, 0),# Korean hangul + 0x27604a: (0x9893, 0),# East Asian ideograph + 0x213744: (0x5678, 0),# East Asian ideograph + 0x4b3057: (0x4e99, 0),# East Asian ideograph + 0x6f2477: (0x3154, 0),# Korean hangul + 0x2f4053: (0x914f, 0),# East Asian ideograph + 0x226b4b: (0x7b37, 0),# East Asian ideograph + 0x29573c: (0x9c91, 0),# East Asian ideograph + 0x706b4c: (0x80e9, 0),# East Asian ideograph + 0x4b5f3a: (0x967a, 0),# East Asian ideograph + 0x216b4d: (0x525e, 0),# East Asian ideograph + 0x6f5160: (0xbd93, 0),# Korean hangul + 0x6f5940: (0xccad, 0),# Korean hangul + 0x29573d: (0x9c92, 0),# East Asian ideograph + 0x6f5161: (0xbd95, 0),# Korean hangul + 0x216b53: (0x5255, 0),# East Asian ideograph + 0x705f50: (0x549d, 0),# East Asian ideograph + 0x2e6b54: (0x7b04, 0),# East Asian ideograph + 0x292b55: (0x86f3, 0),# East Asian ideograph + 0x6f555a: (0xc5e0, 0),# Korean hangul + 0x70622a: (0x7339, 0),# East Asian ideograph + 0x6f5162: (0xbd99, 0),# Korean hangul + 0x212b59: (0xff0f, 0),# Ideographic solidus + 0x2d562e: (0x8024, 0),# East Asian ideograph + 0x213563: (0x5439, 0),# East Asian ideograph + 0x216b5b: (0x526e, 0),# East Asian ideograph + 0x6f4b67: (0xb0c8, 0),# Korean hangul + 0x4b3d24: (0x53a6, 0),# East Asian ideograph + 0x6f5163: (0xbd9c, 0),# Korean hangul + 0x225d60: (0x755b, 0),# East Asian ideograph + 0x276b5f: (0x672d, 0),# East Asian ideograph + 0x2d433e: (0x667b, 0),# East Asian ideograph + 0x235053: (0x98c6, 0),# East Asian ideograph + 0x345452: (0x7118, 0),# East Asian ideograph + 0x6f5b40: (0xd1d8, 0),# Korean hangul + 0x213569: (0x5462, 0),# East Asian ideograph + 0x4c6b62: (0x7b4c, 0),# East Asian ideograph (variant of 226B62 which maps to 7B4C) + 0x394634: (0x6b96, 0),# East Asian ideograph (variant of 214634 which maps to 6B96) + 0x274171: (0x629a, 0),# East Asian ideograph + 0x6f5165: (0xbdf0, 0),# Korean hangul + 0x28356d: (0x6512, 0),# East Asian ideograph + 0x274f44: (0x79ef, 0),# East Asian ideograph + 0x295742: (0x9c95, 0),# East Asian ideograph + 0x4b3d27: (0x5ec3, 0),# East Asian ideograph + 0x6f5166: (0xbe0c, 0),# Korean hangul + 0x6f4d23: (0xb310, 0),# Korean hangul + 0x213b61: (0x5c64, 0),# East Asian ideograph (variant of 4B3B61 which maps to 5C64) + 0x4b5277: (0x8068, 0),# East Asian ideograph + 0x336162: (0x9a23, 0),# East Asian ideograph + 0x705f51: (0x54d0, 0),# East Asian ideograph + 0x6f4a46: (0xae50, 0),# Korean hangul + 0x292b6e: (0x86f0, 0),# East Asian ideograph + 0x2d4a60: (0x6c02, 0),# East Asian ideograph + 0x222b6f: (0x604c, 0),# East Asian ideograph + 0x6f5167: (0xbe0d, 0),# Korean hangul + 0x276052: (0x989b, 0),# East Asian ideograph + 0x6f4d24: (0xb311, 0),# Korean hangul + 0x232b72: (0x87ac, 0),# East Asian ideograph + 0x6f496c: (0xad49, 0),# Korean hangul + 0x216b74: (0x5282, 0),# East Asian ideograph + 0x2d5f2e: (0x661c, 0),# East Asian ideograph + 0x216b75: (0x5281, 0),# East Asian ideograph + 0x6f5168: (0xbe10, 0),# Korean hangul + 0x215966: (0x8c8c, 0),# East Asian ideograph + 0x6f5621: (0xc641, 0),# Korean hangul + 0x33515c: (0x7dab, 0),# East Asian ideograph + 0x275622: (0x8427, 0),# East Asian ideograph + 0x215623: (0x859b, 0),# East Asian ideograph + 0x226b79: (0x7b72, 0),# East Asian ideograph + 0x215624: (0x8591, 0),# East Asian ideograph + 0x2d496b: (0x70df, 0),# East Asian ideograph + 0x226b7a: (0x7b78, 0),# East Asian ideograph + 0x6f5169: (0xbe14, 0),# Korean hangul + 0x275626: (0x8537, 0),# East Asian ideograph + 0x23487c: (0x9481, 0),# East Asian ideograph + 0x226b7c: (0x7b67, 0),# East Asian ideograph + 0x6f5627: (0xc654, 0),# Korean hangul + 0x2d5635: (0x846f, 0),# East Asian ideograph + 0x215628: (0x8587, 0),# East Asian ideograph + 0x29352d: (0x8c30, 0),# East Asian ideograph + 0x275629: (0x84dd, 0),# East Asian ideograph + 0x21562a: (0x85a9, 0),# East Asian ideograph + 0x276055: (0x613f, 0),# East Asian ideograph + 0x6f4d27: (0xb315, 0),# Korean hangul + 0x225d67: (0x7563, 0),# East Asian ideograph + 0x273d2f: (0x5385, 0),# East Asian ideograph + 0x335d23: (0x8a76, 0),# East Asian ideograph + 0x6f562d: (0xc678, 0),# Korean hangul + 0x2e2968: (0x5f51, 0),# East Asian ideograph + 0x21562e: (0x85c9, 0),# East Asian ideograph + 0x4b3d2c: (0x53b0, 0),# East Asian ideograph + 0x21562f: (0x85b0, 0),# East Asian ideograph + 0x4b527c: (0x8080, 0),# East Asian ideograph + 0x233f4e: (0x9100, 0),# East Asian ideograph + 0x4b4e39: (0x5cfa, 0),# East Asian ideograph + 0x275631: (0x827a, 0),# East Asian ideograph + 0x215632: (0x85ea, 0),# East Asian ideograph + 0x695633: (0x5cbe, 0),# East Asian ideograph + 0x6f516c: (0xbe1f, 0),# Korean hangul + 0x21596a: (0x8ca0, 0),# East Asian ideograph + 0x213751: (0x5687, 0),# East Asian ideograph + 0x275635: (0x836f, 0),# East Asian ideograph + 0x6f5529: (0xc558, 0),# Korean hangul + 0x235636: (0x9b43, 0),# East Asian ideograph + 0x275637: (0x853c, 0),# East Asian ideograph + 0x6f5c2e: (0xd39c, 0),# Korean hangul + 0x4c5638: (0x729f, 0),# East Asian ideograph + 0x275639: (0x853a, 0),# East Asian ideograph + 0x21563a: (0x8606, 0),# East Asian ideograph + 0x233f50: (0x9107, 0),# East Asian ideograph + 0x225927: (0x73ea, 0),# East Asian ideograph + 0x21563b: (0x860b, 0),# East Asian ideograph + 0x6f5a22: (0xceac, 0),# Korean hangul + 0x21563c: (0x8607, 0),# East Asian ideograph + 0x224c5e: (0x6f36, 0),# East Asian ideograph + 0x21563d: (0x860a, 0),# East Asian ideograph + 0x4b3d2f: (0x5ef0, 0),# East Asian ideograph + 0x696576: (0x7e90, 0),# East Asian ideograph + 0x21563e: (0x862d, 0),# East Asian ideograph + 0x276059: (0x9885, 0),# East Asian ideograph + 0x21596c: (0x8ca1, 0),# East Asian ideograph + 0x2d563f: (0x6a97, 0),# East Asian ideograph + 0x276023: (0x5de9, 0),# East Asian ideograph + 0x275640: (0x85d3, 0),# East Asian ideograph + 0x346126: (0x6900, 0),# East Asian ideograph + 0x2d3421: (0x5294, 0),# East Asian ideograph + 0x235641: (0x9b4b, 0),# East Asian ideograph + 0x215642: (0x863f, 0),# East Asian ideograph + 0x4b5f49: (0x51cb, 0),# East Asian ideograph + 0x2d4971: (0x70a4, 0),# East Asian ideograph + 0x395643: (0x4e55, 0),# East Asian ideograph + 0x6f4d2c: (0xb35c, 0),# Korean hangul + 0x213754: (0x5695, 0),# East Asian ideograph + 0x275644: (0x4e47, 0),# East Asian ideograph + 0x70602d: (0x55b9, 0),# East Asian ideograph + 0x692426: (0x3046, 0),# Hiragana letter U + 0x2d5a7e: (0x8e7b, 0),# East Asian ideograph + 0x6f5645: (0xc6cc, 0),# Korean hangul + 0x6f5646: (0xc6cd, 0),# Korean hangul + 0x2d572b: (0x8797, 0),# East Asian ideograph + 0x275647: (0x5904, 0),# East Asian ideograph + 0x215648: (0x865c, 0),# East Asian ideograph + 0x27605b: (0x98ce, 0),# East Asian ideograph + 0x28645a: (0x7817, 0),# East Asian ideograph + 0x6f4d2d: (0xb35f, 0),# Korean hangul + 0x225d6d: (0x7579, 0),# East Asian ideograph + 0x21564a: (0x865f, 0),# East Asian ideograph + 0x2d563c: (0x8613, 0),# East Asian ideograph + 0x45564b: (0x865e, 0),# East Asian ideograph (variant of 21564B which maps to 865E) + 0x21564c: (0x8667, 0),# East Asian ideograph + 0x6f5171: (0xbe4c, 0),# Korean hangul + 0x27605c: (0x98d2, 0),# East Asian ideograph + 0x69564e: (0x5d76, 0),# East Asian ideograph + 0x29302d: (0x88e3, 0),# East Asian ideograph + 0x22564f: (0x72b4, 0),# East Asian ideograph + 0x6f496e: (0xad6c, 0),# Korean hangul + 0x277169: (0x5522, 0),# East Asian ideograph + 0x6f5650: (0xc6ec, 0),# Korean hangul + 0x6f5c2f: (0xd3a0, 0),# Korean hangul + 0x235061: (0x98e4, 0),# East Asian ideograph + 0x4b5f4c: (0x9d8f, 0),# East Asian ideograph + 0x225652: (0x72b5, 0),# East Asian ideograph + 0x27605d: (0x53f0, 0),# East Asian ideograph (duplicate simplified) + 0x6f4d2f: (0xb365, 0),# Korean hangul + 0x6f5653: (0xc704, 0),# Korean hangul + 0x294642: (0x94e0, 0),# East Asian ideograph + 0x692429: (0x3049, 0),# Hiragana letter small O + 0x333f55: (0x5b3e, 0),# East Asian ideograph + 0x6f5654: (0xc705, 0),# Korean hangul + 0x6f5655: (0xc708, 0),# Korean hangul + 0x225656: (0x72bc, 0),# East Asian ideograph + 0x695657: (0x5d90, 0),# East Asian ideograph + 0x27605e: (0x522e, 0),# East Asian ideograph + 0x6f4d30: (0xb367, 0),# Korean hangul + 0x225658: (0x72c3, 0),# East Asian ideograph + 0x217747: (0x5853, 0),# East Asian ideograph + 0x6f5659: (0xc719, 0),# Korean hangul + 0x21565a: (0x86cb, 0),# East Asian ideograph + 0x293537: (0x8c20, 0),# East Asian ideograph + 0x235063: (0x98e5, 0),# East Asian ideograph + 0x6f5174: (0xbe55, 0),# Korean hangul + 0x27605f: (0x98d3, 0),# East Asian ideograph + 0x6f4d31: (0xb368, 0),# Korean hangul + 0x23565d: (0x9b74, 0),# East Asian ideograph + 0x6f4b23: (0xafb9, 0),# Korean hangul + 0x4b306c: (0x96e0, 0),# East Asian ideograph + 0x6f565e: (0xc730, 0),# Korean hangul + 0x6f5638: (0xc6a7, 0),# Korean hangul + 0x6f565f: (0xc735, 0),# Korean hangul + 0x4c6074: (0x76b9, 0),# East Asian ideograph + 0x224c65: (0x6f2d, 0),# East Asian ideograph + 0x215660: (0x86df, 0),# East Asian ideograph + 0x4b5052: (0x7c56, 0),# East Asian ideograph + 0x6f5175: (0xbe57, 0),# Korean hangul + 0x6f4d32: (0xb369, 0),# Korean hangul + 0x213b64: (0x5c6f, 0),# East Asian ideograph + 0x6f5662: (0xc73d, 0),# Korean hangul + 0x396223: (0x9bfd, 0),# East Asian ideograph (variant of 216223) + 0x333f58: (0x61f4, 0),# East Asian ideograph + 0x235663: (0x9b68, 0),# East Asian ideograph + 0x2d3428: (0x5226, 0),# East Asian ideograph + 0x2e5a40: (0x73b3, 0),# East Asian ideograph + 0x215664: (0x86db, 0),# East Asian ideograph + 0x6f583b: (0xc9e2, 0),# Korean hangul + 0x293539: (0x8c33, 0),# East Asian ideograph + 0x215665: (0x86e4, 0),# East Asian ideograph + 0x4b5f50: (0x96e3, 0),# East Asian ideograph + 0x4b3b37: (0x51a9, 0),# East Asian ideograph + 0x6f5176: (0xbe59, 0),# Korean hangul + 0x2f2f5d: (0x7e48, 0),# East Asian ideograph + 0x276061: (0x98d5, 0),# East Asian ideograph + 0x286460: (0x7856, 0),# East Asian ideograph + 0x21375b: (0x56b6, 0),# East Asian ideograph + 0x215667: (0x86f9, 0),# East Asian ideograph + 0x225930: (0x73db, 0),# East Asian ideograph + 0x6f5668: (0xc751, 0),# Korean hangul + 0x22403d: (0x6a12, 0),# East Asian ideograph + 0x6f5669: (0xc758, 0),# Korean hangul + 0x224c67: (0x6f34, 0),# East Asian ideograph + 0x4b566a: (0x8708, 0),# East Asian ideograph (variant of 21566A which maps to 8708) + 0x21566b: (0x8700, 0),# East Asian ideograph + 0x276062: (0x98d8, 0),# East Asian ideograph + 0x285e7a: (0x75d6, 0),# East Asian ideograph + 0x6f4d34: (0xb36b, 0),# Korean hangul + 0x22566c: (0x72cc, 0),# East Asian ideograph + 0x294647: (0x954f, 0),# East Asian ideograph + 0x6f566d: (0xc77c, 0),# Korean hangul + 0x334730: (0x6e5f, 0),# East Asian ideograph + 0x6f5041: (0xbabb, 0),# Korean hangul + 0x22566e: (0x72db, 0),# East Asian ideograph + 0x22566f: (0x72cd, 0),# East Asian ideograph + 0x21356d: (0x5496, 0),# East Asian ideograph + 0x276063: (0x98de, 0),# East Asian ideograph + 0x6f4d35: (0xb36e, 0),# Korean hangul + 0x21375d: (0x56c1, 0),# East Asian ideograph + 0x225d75: (0x7571, 0),# East Asian ideograph + 0x333f5b: (0x6133, 0),# East Asian ideograph + 0x235672: (0x9b80, 0),# East Asian ideograph + 0x235673: (0x9b8c, 0),# East Asian ideograph + 0x2f5e42: (0x9ec9, 0),# East Asian ideograph + 0x6f5674: (0xc789, 0),# Korean hangul + 0x6f543c: (0xc318, 0),# Korean hangul + 0x2d5675: (0x9f05, 0),# East Asian ideograph + 0x6f4d36: (0xb370, 0),# Korean hangul + 0x21375e: (0x56c2, 0),# East Asian ideograph + 0x275676: (0x8680, 0),# East Asian ideograph + 0x692430: (0x3050, 0),# Hiragana letter GU + 0x4d386f: (0x544b, 0),# East Asian ideograph + 0x2d4122: (0x6485, 0),# East Asian ideograph + 0x224123: (0x69f0, 0),# East Asian ideograph + 0x295756: (0x9ca9, 0),# East Asian ideograph + 0x215679: (0x8774, 0),# East Asian ideograph + 0x224124: (0x69f2, 0),# East Asian ideograph + 0x21567a: (0x8766, 0),# East Asian ideograph + 0x234125: (0x9193, 0),# East Asian ideograph + 0x6f4d37: (0xb371, 0),# Korean hangul + 0x23567b: (0x9b7d, 0),# East Asian ideograph + 0x21774e: (0x5856, 0),# East Asian ideograph + 0x4b3072: (0x4eed, 0),# East Asian ideograph + 0x6f4a4a: (0xae60, 0),# Korean hangul + 0x33567c: (0x8671, 0),# East Asian ideograph + 0x6f567d: (0xc798, 0),# Korean hangul + 0x224128: (0x6a14, 0),# East Asian ideograph + 0x21567e: (0x8757, 0),# East Asian ideograph + 0x224129: (0x6a63, 0),# East Asian ideograph + 0x295030: (0x989e, 0),# East Asian ideograph + 0x6f517b: (0xbe60, 0),# Korean hangul + 0x4b412a: (0x6323, 0),# East Asian ideograph + 0x6f4d38: (0xb374, 0),# Korean hangul + 0x225742: (0x731e, 0),# East Asian ideograph + 0x23412b: (0x919d, 0),# East Asian ideograph + 0x212b33: (0x3002, 0),# Ideographic full stop + 0x23412c: (0x919a, 0),# East Asian ideograph + 0x2d342e: (0x8274, 0),# East Asian ideograph + 0x6f5538: (0xc580, 0),# Korean hangul + 0x276067: (0x9968, 0),# East Asian ideograph + 0x6f4d39: (0xb378, 0),# Korean hangul + 0x234130: (0x91a2, 0),# East Asian ideograph + 0x3f476f: (0x51c8, 0),# East Asian ideograph + 0x334131: (0x6425, 0),# East Asian ideograph + 0x6f5042: (0xbabd, 0),# Korean hangul + 0x2d4132: (0x642f, 0),# East Asian ideograph + 0x287130: (0x7edb, 0),# East Asian ideograph + 0x234c29: (0x9708, 0),# East Asian ideograph + 0x6f517d: (0xbe64, 0),# Korean hangul + 0x234134: (0x919b, 0),# East Asian ideograph (variant of 4D4134 which maps to 919B) + 0x6f4d3a: (0xb380, 0),# Korean hangul + 0x213762: (0x56c8, 0),# East Asian ideograph + 0x336179: (0x9c7b, 0),# East Asian ideograph + 0x4c3474: (0x631d, 0),# East Asian ideograph + 0x235d36: (0x9e15, 0),# East Asian ideograph + 0x274136: (0x62a1, 0),# East Asian ideograph + 0x274f5c: (0x6d3c, 0),# East Asian ideograph + 0x6f4f68: (0xb9cc, 0),# Korean hangul + 0x224137: (0x6a67, 0),# East Asian ideograph + 0x344138: (0x8022, 0),# East Asian ideograph + 0x6f517e: (0xbe68, 0),# Korean hangul + 0x224139: (0x6a43, 0),# East Asian ideograph + 0x6f4d3b: (0xb383, 0),# Korean hangul + 0x22413a: (0x6a33, 0),# East Asian ideograph + 0x225938: (0x73e3, 0),# East Asian ideograph + 0x22413b: (0x6a32, 0),# East Asian ideograph + 0x274f5d: (0x7a9d, 0),# East Asian ideograph + 0x27413c: (0x62e3, 0),# East Asian ideograph + 0x706247: (0x9987, 0),# East Asian ideograph + 0x23413d: (0x91aa, 0),# East Asian ideograph + 0x27606a: (0x996e, 0),# East Asian ideograph + 0x6f4d3c: (0xb385, 0),# Korean hangul + 0x213b66: (0x5c79, 0),# East Asian ideograph + 0x213764: (0x56d1, 0),# East Asian ideograph + 0x22413f: (0x6a28, 0),# East Asian ideograph + 0x213321: (0x5167, 0),# East Asian ideograph + 0x4c3f68: (0x69c7, 0),# East Asian ideograph + 0x224140: (0x6a48, 0),# East Asian ideograph + 0x224141: (0x6a50, 0),# East Asian ideograph + 0x224142: (0x6a52, 0),# East Asian ideograph + 0x334c2c: (0x754d, 0),# East Asian ideograph + 0x336058: (0x9855, 0),# East Asian ideograph + 0x224143: (0x6a72, 0),# East Asian ideograph + 0x6f4d3d: (0xb38c, 0),# Korean hangul + 0x274570: (0x6743, 0),# East Asian ideograph + 0x285836: (0x7315, 0),# East Asian ideograph + 0x224145: (0x6a3e, 0),# East Asian ideograph + 0x224146: (0x6a77, 0),# East Asian ideograph + 0x287134: (0x7ed7, 0),# East Asian ideograph + 0x224147: (0x6a5b, 0),# East Asian ideograph + 0x214148: (0x63ea, 0),# East Asian ideograph + 0x6f4d3e: (0xb3c4, 0),# Korean hangul + 0x225d7e: (0x757f, 0),# East Asian ideograph + 0x217755: (0x589a, 0),# East Asian ideograph + 0x2d3877: (0x5900, 0),# East Asian ideograph + 0x22414a: (0x6a5e, 0),# East Asian ideograph + 0x21414b: (0x643e, 0),# East Asian ideograph + 0x21414c: (0x6413, 0),# East Asian ideograph + 0x23414d: (0x91b5, 0),# East Asian ideograph + 0x3f4a60: (0x7266, 0),# East Asian ideograph + 0x6f4d3f: (0xb3c5, 0),# Korean hangul + 0x6f4c78: (0xb2f7, 0),# Korean hangul + 0x335d3b: (0x57dc, 0),# East Asian ideograph + 0x22414f: (0x6a51, 0),# East Asian ideograph + 0x2d4150: (0x6428, 0),# East Asian ideograph + 0x29575f: (0x9ca0, 0),# East Asian ideograph + 0x224151: (0x6a56, 0),# East Asian ideograph + 0x2d4152: (0x6447, 0),# East Asian ideograph + 0x6f4d40: (0xb3c8, 0),# Korean hangul + 0x224153: (0x6a36, 0),# East Asian ideograph + 0x2d4154: (0x635c, 0),# East Asian ideograph + 0x2d3436: (0x52f3, 0),# East Asian ideograph + 0x274155: (0x62a2, 0),# East Asian ideograph + 0x217c30: (0x5a93, 0),# East Asian ideograph + 0x224156: (0x6a7a, 0),# East Asian ideograph + 0x234157: (0x91bd, 0),# East Asian ideograph + 0x6f4d41: (0xb3cb, 0),# Korean hangul + 0x213769: (0x56e4, 0),# East Asian ideograph + 0x224158: (0x6a3f, 0),# East Asian ideograph + 0x4b4f7b: (0x7b7a, 0),# East Asian ideograph + 0x21623b: (0x9d12, 0),# East Asian ideograph (variant of 4B623B which maps to 9D12) + 0x4b523e: (0x7f9a, 0),# East Asian ideograph (variant of 21523E which maps to 7F9A) + 0x23415a: (0x91c2, 0),# East Asian ideograph + 0x293651: (0x8d36, 0),# East Asian ideograph + 0x23415b: (0x91c4, 0),# East Asian ideograph + 0x33347d: (0x53c1, 0),# East Asian ideograph + 0x23415c: (0x91c3, 0),# East Asian ideograph + 0x275a30: (0x8d24, 0),# East Asian ideograph + 0x29415d: (0x917d, 0),# East Asian ideograph + 0x29586a: (0x9ccb, 0),# East Asian ideograph + 0x274f64: (0x7a83, 0),# East Asian ideograph + 0x27415f: (0x6402, 0),# East Asian ideograph + 0x70624e: (0x9995, 0),# East Asian ideograph + 0x224c76: (0x6efa, 0),# East Asian ideograph + 0x224833: (0x6cb4, 0),# East Asian ideograph + 0x4b5164: (0x770c, 0),# East Asian ideograph + 0x4c4146: (0x8538, 0),# East Asian ideograph + 0x234161: (0x91d4, 0),# East Asian ideograph + 0x284257: (0x68bc, 0),# East Asian ideograph + 0x294656: (0x955b, 0),# East Asian ideograph + 0x234162: (0x91d3, 0),# East Asian ideograph + 0x234163: (0x91d5, 0),# East Asian ideograph + 0x217639: (0x580e, 0),# East Asian ideograph + 0x234164: (0x91d9, 0),# East Asian ideograph + 0x274b22: (0x72ef, 0),# East Asian ideograph + 0x6f5b59: (0xd2b8, 0),# Korean hangul + 0x274165: (0x635e, 0),# East Asian ideograph + 0x286272: (0x770d, 0),# East Asian ideograph + 0x274166: (0x62e8, 0),# East Asian ideograph + 0x6f4d44: (0xb3d4, 0),# Korean hangul + 0x234168: (0x91e2, 0),# East Asian ideograph + 0x6f534a: (0xc1a9, 0),# Korean hangul + 0x234169: (0x91ed, 0),# East Asian ideograph + 0x23416a: (0x91f7, 0),# East Asian ideograph + 0x333d2f: (0x5e81, 0),# East Asian ideograph + 0x23416b: (0x91fa, 0),# East Asian ideograph + 0x6f4d45: (0xb3d5, 0),# Korean hangul + 0x21775c: (0x5889, 0),# East Asian ideograph + 0x22416c: (0x69f9, 0),# East Asian ideograph + 0x215543: (0x83cc, 0),# East Asian ideograph + 0x4b4e56: (0x78fa, 0),# East Asian ideograph + 0x22416d: (0x6a64, 0),# East Asian ideograph + 0x295427: (0x9a85, 0),# East Asian ideograph + 0x27416e: (0x6251, 0),# East Asian ideograph + 0x217c31: (0x5aac, 0),# East Asian ideograph + 0x23416f: (0x91f2, 0),# East Asian ideograph + 0x234171: (0x91e8, 0),# East Asian ideograph + 0x294458: (0x952c, 0),# East Asian ideograph + 0x4b434d: (0x663f, 0),# East Asian ideograph + 0x234172: (0x91f6, 0),# East Asian ideograph + 0x2d343c: (0x52a2, 0),# East Asian ideograph + 0x334c3e: (0x8e08, 0),# East Asian ideograph + 0x234173: (0x91ee, 0),# East Asian ideograph + 0x274174: (0x62e5, 0),# East Asian ideograph + 0x4b3d4b: (0x5f3e, 0),# East Asian ideograph + 0x334c36: (0x753b, 0),# East Asian ideograph (variant of 274C36 which maps to 753B) + 0x4b4c67: (0x761f, 0),# East Asian ideograph (variant of 214C67 which maps to 761F) + 0x224175: (0x6aa8, 0),# East Asian ideograph + 0x29465a: (0x955f, 0),# East Asian ideograph + 0x274176: (0x51fb, 0),# East Asian ideograph + 0x692441: (0x3061, 0),# Hiragana letter TI + 0x21332c: (0x5178, 0),# East Asian ideograph + 0x235d43: (0x9e7b, 0),# East Asian ideograph + 0x224177: (0x6aa5, 0),# East Asian ideograph + 0x2d343d: (0x52e7, 0),# East Asian ideograph + 0x224179: (0x6a96, 0),# East Asian ideograph + 0x4b3d4c: (0x5f25, 0),# East Asian ideograph (variant of 273D4C) + 0x222c24: (0x608a, 0),# East Asian ideograph + 0x27417a: (0x6321, 0),# East Asian ideograph + 0x6f4d48: (0xb3db, 0),# Korean hangul + 0x707360: (0x7b7b, 0),# East Asian ideograph + 0x286032: (0x75ac, 0),# East Asian ideograph + 0x21332d: (0x517c, 0),# East Asian ideograph + 0x27417c: (0x636e, 0),# East Asian ideograph + 0x216c27: (0x5296, 0),# East Asian ideograph + 0x27417d: (0x63b3, 0),# East Asian ideograph + 0x284f26: (0x6cf7, 0),# East Asian ideograph + 0x224a44: (0x6e12, 0),# East Asian ideograph + 0x22417e: (0x6a7d, 0),# East Asian ideograph + 0x6f5d6a: (0xd750, 0),# Korean hangul + 0x226c29: (0x7b73, 0),# East Asian ideograph + 0x2e2b74: (0x609b, 0),# East Asian ideograph + 0x276077: (0x997f, 0),# East Asian ideograph + 0x6f4d49: (0xb3fc, 0),# Korean hangul + 0x217760: (0x589b, 0),# East Asian ideograph + 0x223378: (0x647d, 0),# East Asian ideograph + 0x232c2c: (0x87ee, 0),# East Asian ideograph + 0x274b28: (0x72de, 0),# East Asian ideograph + 0x222c2f: (0x609e, 0),# East Asian ideograph + 0x6f4b28: (0xafc9, 0),# Korean hangul + 0x217761: (0x587c, 0),# East Asian ideograph + 0x222c30: (0x6083, 0),# East Asian ideograph + 0x4b4e5b: (0x783f, 0),# East Asian ideograph + 0x22483b: (0x6d28, 0),# East Asian ideograph + 0x216c33: (0x52ae, 0),# East Asian ideograph + 0x4c4345: (0x67a6, 0),# East Asian ideograph + 0x222c34: (0x60a7, 0),# East Asian ideograph + 0x6f4d4b: (0xb410, 0),# Korean hangul + 0x213773: (0x5718, 0),# East Asian ideograph + 0x233b2e: (0x8ec9, 0),# East Asian ideograph + 0x216c38: (0x52bc, 0),# East Asian ideograph + 0x2d454e: (0x697d, 0),# East Asian ideograph + 0x217763: (0x5888, 0),# East Asian ideograph + 0x692446: (0x3066, 0),# Hiragana letter TE + 0x232c3a: (0x87d6, 0),# East Asian ideograph + 0x235d48: (0x9e83, 0),# East Asian ideograph + 0x39302d: (0x534b, 0),# East Asian ideograph + 0x6f4d4d: (0xb41c, 0),# Korean hangul + 0x213775: (0x571f, 0),# East Asian ideograph + 0x286037: (0x763f, 0),# East Asian ideograph + 0x692447: (0x3067, 0),# Hiragana letter DE + 0x223731: (0x65c6, 0),# East Asian ideograph + 0x294478: (0x9522, 0),# East Asian ideograph + 0x274b2c: (0x730e, 0),# East Asian ideograph + 0x287144: (0x7ee0, 0),# East Asian ideograph + 0x234c3d: (0x971d, 0),# East Asian ideograph + 0x706c43: (0x70c0, 0),# East Asian ideograph + 0x213333: (0x5191, 0),# East Asian ideograph + 0x333066: (0x5fc8, 0),# East Asian ideograph + 0x69613a: (0x7549, 0),# East Asian ideograph + 0x6f4f6c: (0xb9d1, 0),# Korean hangul + 0x216c46: (0x52d4, 0),# East Asian ideograph + 0x234c3e: (0x9719, 0),# East Asian ideograph + 0x453666: (0x5ad0, 0),# East Asian ideograph + 0x232c48: (0x87d3, 0),# East Asian ideograph + 0x6f4d4f: (0xb428, 0),# Korean hangul + 0x6f4b29: (0xafcb, 0),# Korean hangul + 0x294662: (0x956a, 0),# East Asian ideograph + 0x692449: (0x3069, 0),# Hiragana letter DO + 0x275f50: (0x96be, 0),# East Asian ideograph + 0x235d4b: (0x9e88, 0),# East Asian ideograph + 0x274b2e: (0x732e, 0),# East Asian ideograph + 0x235a6b: (0x9d3d, 0),# East Asian ideograph + 0x292c4c: (0x866e, 0),# East Asian ideograph + 0x4b346b: (0x5df5, 0),# East Asian ideograph + 0x69595e: (0x63b5, 0),# East Asian ideograph + 0x472c4d: (0x8801, 0),# East Asian ideograph (variant of 232C4D which maps to 8801) + 0x28603a: (0x75c8, 0),# East Asian ideograph + 0x454774: (0x6e15, 0),# East Asian ideograph + 0x6f5564: (0xc5f7, 0),# Korean hangul + 0x694664: (0x51ea, 0),# East Asian ideograph + 0x294221: (0x9495, 0),# East Asian ideograph + 0x6f4975: (0xad7c, 0),# Korean hangul + 0x292c55: (0x86cf, 0),# East Asian ideograph + 0x6f5762: (0xc8c8, 0),# Korean hangul + 0x4b5f6f: (0x970a, 0),# East Asian ideograph + 0x2d4f37: (0x7980, 0),# East Asian ideograph + 0x216c58: (0x52f0, 0),# East Asian ideograph + 0x294222: (0x9490, 0),# East Asian ideograph + 0x6f5a48: (0xcf78, 0),# Korean hangul + 0x216c5a: (0x52f1, 0),# East Asian ideograph + 0x2d632b: (0x5c28, 0),# East Asian ideograph + 0x4b4135: (0x6368, 0),# East Asian ideograph + 0x275c3e: (0x8fc7, 0),# East Asian ideograph + 0x223b7a: (0x67f6, 0),# East Asian ideograph + 0x69244d: (0x306d, 0),# Hiragana letter NE + 0x222c5d: (0x60c4, 0),# East Asian ideograph + 0x3a284c: (0x53a9, 0),# East Asian ideograph (variant of 4C284C) + 0x294223: (0x94ad, 0),# East Asian ideograph + 0x235d4f: (0x9e87, 0),# East Asian ideograph + 0x3f5e60: (0x9586, 0),# East Asian ideograph + 0x395773: (0x7daf, 0),# East Asian ideograph + 0x4b5f71: (0x9756, 0),# East Asian ideograph + 0x224844: (0x6d39, 0),# East Asian ideograph + 0x292c61: (0x86f4, 0),# East Asian ideograph + 0x6f4d54: (0xb451, 0),# Korean hangul + 0x6f4b2a: (0xafcd, 0),# Korean hangul + 0x69544b: (0x5870, 0),# East Asian ideograph + 0x213339: (0x51a5, 0),# East Asian ideograph + 0x294224: (0x94aa, 0),# East Asian ideograph + 0x6f563f: (0xc6b9, 0),# Korean hangul + 0x292c64: (0x877e, 0),# East Asian ideograph + 0x4b5f72: (0x975b, 0),# East Asian ideograph + 0x4b5365: (0x8133, 0),# East Asian ideograph + 0x222c66: (0x60e2, 0),# East Asian ideograph + 0x6f4a50: (0xae6c, 0),# Korean hangul + 0x294225: (0x94ab, 0),# East Asian ideograph + 0x2d5664: (0x9f04, 0),# East Asian ideograph + 0x6f542a: (0xc2ed, 0),# Korean hangul + 0x4b5f73: (0x975c, 0),# East Asian ideograph (variant of 215F73 which maps to 975C) + 0x335228: (0x94b5, 0),# East Asian ideograph + 0x336c6b: (0x6031, 0),# East Asian ideograph + 0x6f4d56: (0xb458, 0),# Korean hangul + 0x692450: (0x3070, 0),# Hiragana letter BA + 0x4b4e67: (0x79d8, 0),# East Asian ideograph + 0x6f5c37: (0xd3bc, 0),# Korean hangul + 0x28714d: (0x7ee1, 0),# East Asian ideograph + 0x216c6f: (0x530b, 0),# East Asian ideograph + 0x6f4d57: (0xb460, 0),# Korean hangul + 0x222c73: (0x6103, 0),# East Asian ideograph + 0x6f5a21: (0xcea5, 0),# Korean hangul + 0x4b3d5c: (0x5f83, 0),# East Asian ideograph + 0x6f4d58: (0xb461, 0),# Korean hangul + 0x6f5425: (0xc2e0, 0),# Korean hangul + 0x692452: (0x3072, 0),# Hiragana letter HI + 0x21333d: (0x51b6, 0),# East Asian ideograph + 0x215721: (0x8759, 0),# East Asian ideograph + 0x6f4f6e: (0xb9d9, 0),# Korean hangul + 0x6f5723: (0xc7a4, 0),# Korean hangul + 0x225724: (0x72f4, 0),# East Asian ideograph + 0x6f5d74: (0xd769, 0),# Korean hangul + 0x6f4d59: (0xb463, 0),# Korean hangul + 0x215725: (0x879e, 0),# East Asian ideograph + 0x695438: (0x57b3, 0),# East Asian ideograph + 0x692453: (0x3073, 0),# Hiragana letter BI + 0x6f5726: (0xc7a7, 0),# Korean hangul + 0x6f5727: (0xc7ac, 0),# Korean hangul + 0x2f5e66: (0x9b12, 0),# East Asian ideograph + 0x4b4b71: (0x7f3e, 0),# East Asian ideograph (variant of 2D4B71 which maps to 7F3E) + 0x6f5728: (0xc7ad, 0),# Korean hangul + 0x225729: (0x7302, 0),# East Asian ideograph + 0x697323: (0x9d64, 0),# East Asian ideograph + 0x6f4d5a: (0xb465, 0),# Korean hangul + 0x6f572a: (0xc7b4, 0),# Korean hangul + 0x2e4873: (0x6fa3, 0),# East Asian ideograph + 0x21572b: (0x87b3, 0),# East Asian ideograph + 0x333330: (0x518a, 0),# East Asian ideograph + 0x21572c: (0x87bb, 0),# East Asian ideograph + 0x29577a: (0x9cad, 0),# East Asian ideograph + 0x21572d: (0x87c8, 0),# East Asian ideograph + 0x39563c: (0x56cc, 0),# East Asian ideograph + 0x222632: (0x5db8, 0),# East Asian ideograph + 0x21572e: (0x87d2, 0),# East Asian ideograph + 0x4b5d58: (0x9234, 0),# East Asian ideograph + 0x6f4d5b: (0xb46c, 0),# Korean hangul + 0x21572f: (0x87ba, 0),# East Asian ideograph + 0x2d5730: (0x87c7, 0),# East Asian ideograph + 0x235731: (0x9b92, 0),# East Asian ideograph + 0x6f5c38: (0xd3c4, 0),# Korean hangul + 0x275732: (0x86f2, 0),# East Asian ideograph + 0x6f4e75: (0xb7ac, 0),# Korean hangul + 0x275733: (0x866b, 0),# East Asian ideograph + 0x6f4d5c: (0xb480, 0),# Korean hangul + 0x275734: (0x8749, 0),# East Asian ideograph + 0x215735: (0x87fb, 0),# East Asian ideograph + 0x215736: (0x8805, 0),# East Asian ideograph + 0x2d5228: (0x9262, 0),# East Asian ideograph + 0x29577c: (0x9cb0, 0),# East Asian ideograph + 0x695737: (0x5f16, 0),# East Asian ideograph + 0x222634: (0x5dbf, 0),# East Asian ideograph + 0x213d21: (0x5ebe, 0),# East Asian ideograph + 0x6f4d5d: (0xb488, 0),# Korean hangul + 0x235739: (0x9b9d, 0),# East Asian ideograph + 0x6f573a: (0xc811, 0),# Korean hangul + 0x2d3453: (0x758b, 0),# East Asian ideograph + 0x21573b: (0x8822, 0),# East Asian ideograph + 0x213132: (0x4f5b, 0),# East Asian ideograph + 0x21573c: (0x8823, 0),# East Asian ideograph + 0x21573d: (0x8821, 0),# East Asian ideograph + 0x23417a: (0x91f8, 0),# East Asian ideograph + 0x6f4d5e: (0xb4a4, 0),# Korean hangul + 0x21573e: (0x881f, 0),# East Asian ideograph + 0x275e69: (0x5173, 0),# East Asian ideograph + 0x6f5b7a: (0xd330, 0),# Korean hangul + 0x692458: (0x3078, 0),# Hiragana letter HE + 0x21573f: (0x8831, 0),# East Asian ideograph + 0x235d5a: (0x9e95, 0),# East Asian ideograph + 0x4b5740: (0x8827, 0),# East Asian ideograph + 0x2d572d: (0x8748, 0),# East Asian ideograph + 0x215741: (0x8836, 0),# East Asian ideograph + 0x69533b: (0x555d, 0),# East Asian ideograph + 0x275742: (0x86ee, 0),# East Asian ideograph + 0x27614f: (0x9a74, 0),# East Asian ideograph + 0x6f4d5f: (0xb4b7, 0),# Korean hangul + 0x215743: (0x8840, 0),# East Asian ideograph + 0x4c5c3a: (0x73f1, 0),# East Asian ideograph + 0x6f5744: (0xc82d, 0),# Korean hangul + 0x694823: (0x7872, 0),# East Asian ideograph + 0x6f5745: (0xc82f, 0),# Korean hangul + 0x2d522b: (0x9475, 0),# East Asian ideograph + 0x215746: (0x8853, 0),# East Asian ideograph (variant of 4B5746 which maps to 8853) + 0x275747: (0x4e8d, 0),# East Asian ideograph + 0x2d4562: (0x681d, 0),# East Asian ideograph + 0x275a36: (0x8d56, 0),# East Asian ideograph + 0x6f4d60: (0xb4c0, 0),# Korean hangul + 0x69245a: (0x307a, 0),# Hiragana letter PE + 0x213345: (0x51dd, 0),# East Asian ideograph + 0x215749: (0x885b, 0),# East Asian ideograph + 0x235d5c: (0x9e91, 0),# East Asian ideograph + 0x2d3164: (0x7ae2, 0),# East Asian ideograph + 0x4b4a2e: (0x55b6, 0),# East Asian ideograph + 0x21574a: (0x885d, 0),# East Asian ideograph + 0x474236: (0x949a, 0),# East Asian ideograph + 0x2d4425: (0x686e, 0),# East Asian ideograph + 0x29533d: (0x9a90, 0),# East Asian ideograph + 0x21574c: (0x8862, 0),# East Asian ideograph + 0x3b3922: (0x8db5, 0),# East Asian ideograph + 0x21574d: (0x8863, 0),# East Asian ideograph + 0x23574e: (0x9ba0, 0),# East Asian ideograph + 0x2d3457: (0x62fe, 0),# East Asian ideograph + 0x21574f: (0x8868, 0),# East Asian ideograph + 0x6f5750: (0xc885, 0),# Korean hangul + 0x213d22: (0x5eca, 0),# East Asian ideograph + 0x2d4564: (0x68b9, 0),# East Asian ideograph + 0x215752: (0x8881, 0),# East Asian ideograph + 0x27602e: (0x97e9, 0),# East Asian ideograph + 0x6f5753: (0xc88b, 0),# Korean hangul + 0x69613e: (0x7569, 0),# East Asian ideograph + 0x6f5754: (0xc88c, 0),# Korean hangul + 0x215755: (0x8888, 0),# East Asian ideograph + 0x4b3d67: (0x5f84, 0),# East Asian ideograph (variant of 273D67) + 0x215756: (0x88ab, 0),# East Asian ideograph + 0x6f4d63: (0xb4dd, 0),# Korean hangul + 0x29367e: (0x8d59, 0),# East Asian ideograph + 0x217337: (0x568a, 0),# East Asian ideograph + 0x215759: (0x888d, 0),# East Asian ideograph + 0x6f5967: (0xce60, 0),# Korean hangul + 0x21575a: (0x888b, 0),# East Asian ideograph + 0x21575b: (0x889e, 0),# East Asian ideograph + 0x4d3c6c: (0x8fb6, 0),# East Asian ideograph + 0x21575c: (0x88c1, 0),# East Asian ideograph + 0x273a36: (0x5988, 0),# East Asian ideograph + 0x6f4921: (0xac70, 0),# Korean hangul + 0x23575d: (0x9bc6, 0),# East Asian ideograph + 0x23575e: (0x9bbf, 0),# East Asian ideograph + 0x22575f: (0x733b, 0),# East Asian ideograph + 0x2d5760: (0x5e2c, 0),# East Asian ideograph + 0x6f4d65: (0xb4e3, 0),# Korean hangul + 0x4c7265: (0x7dfc, 0),# East Asian ideograph + 0x69245f: (0x307f, 0),# Hiragana letter MI + 0x6f4922: (0xac71, 0),# Korean hangul + 0x225762: (0x733a, 0),# East Asian ideograph + 0x6f5125: (0xbc45, 0),# Korean hangul + 0x2e4670: (0x6cd0, 0),# East Asian ideograph + 0x284539: (0x6b9a, 0),# East Asian ideograph + 0x2d345b: (0x6607, 0),# East Asian ideograph + 0x275763: (0x91cc, 0),# East Asian ideograph + 0x393054: (0x4f0d, 0),# East Asian ideograph + 0x226260: (0x777a, 0),# East Asian ideograph + 0x6f5764: (0xc8d4, 0),# Korean hangul + 0x232739: (0x85da, 0),# East Asian ideograph + 0x215765: (0x88dd, 0),# East Asian ideograph + 0x395564: (0x6726, 0),# East Asian ideograph + 0x235766: (0x9bb9, 0),# East Asian ideograph + 0x6f4e2e: (0xb560, 0),# Korean hangul + 0x6f5767: (0xc8e0, 0),# Korean hangul + 0x6f504b: (0xbb3b, 0),# Korean hangul + 0x6f2469: (0x3138, 0),# Korean hangul + 0x215768: (0x88f3, 0),# East Asian ideograph + 0x2d5232: (0x8fa0, 0),# East Asian ideograph + 0x6f5769: (0xc8f0, 0),# Korean hangul + 0x6f5b60: (0xd2cb, 0),# Korean hangul + 0x69576a: (0x603a, 0),# East Asian ideograph + 0x22576b: (0x7352, 0),# East Asian ideograph + 0x21334c: (0x51f9, 0),# East Asian ideograph + 0x27576c: (0x5236, 0),# East Asian ideograph + 0x225521: (0x721d, 0),# East Asian ideograph + 0x2d345d: (0x5349, 0),# East Asian ideograph + 0x6f576d: (0xc8fd, 0),# Korean hangul + 0x2d5233: (0x7f78, 0),# East Asian ideograph + 0x23576e: (0x9bc0, 0),# East Asian ideograph + 0x29312b: (0x89d1, 0),# East Asian ideograph + 0x2d5361: (0x811a, 0),# East Asian ideograph + 0x4b576f: (0x8910, 0),# East Asian ideograph (variant of 21576F which maps to 8910) + 0x6f4d68: (0xb4ed, 0),# Korean hangul + 0x6f4b2e: (0xafe9, 0),# Korean hangul + 0x6f4925: (0xac77, 0),# Korean hangul + 0x275771: (0x8934, 0),# East Asian ideograph + 0x215772: (0x8912, 0),# East Asian ideograph + 0x294164: (0x948b, 0),# East Asian ideograph + 0x275773: (0x88e4, 0),# East Asian ideograph + 0x215774: (0x892a, 0),# East Asian ideograph + 0x6f4d69: (0xb4ef, 0),# Korean hangul + 0x29467c: (0x9546, 0),# East Asian ideograph + 0x3f4926: (0x6e08, 0),# East Asian ideograph + 0x21334e: (0x51fd, 0),# East Asian ideograph + 0x6f5776: (0xc92c, 0),# Korean hangul + 0x234221: (0x91f9, 0),# East Asian ideograph + 0x215777: (0x893b, 0),# East Asian ideograph + 0x224222: (0x6a7f, 0),# East Asian ideograph + 0x6f5a33: (0xcf11, 0),# Korean hangul + 0x234223: (0x9204, 0),# East Asian ideograph + 0x216231: (0x9cf6, 0),# East Asian ideograph + 0x215779: (0x8938, 0),# East Asian ideograph + 0x224224: (0x6a91, 0),# East Asian ideograph + 0x21577a: (0x8944, 0),# East Asian ideograph + 0x214225: (0x64e0, 0),# East Asian ideograph + 0x6f4927: (0xac79, 0),# Korean hangul + 0x22577b: (0x7358, 0),# East Asian ideograph + 0x224226: (0x6a9f, 0),# East Asian ideograph + 0x4b4a38: (0x71d7, 0),# East Asian ideograph + 0x21577c: (0x8960, 0),# East Asian ideograph + 0x234227: (0x920a, 0),# East Asian ideograph + 0x27577d: (0x8884, 0),# East Asian ideograph + 0x234228: (0x9225, 0),# East Asian ideograph + 0x295347: (0x9a93, 0),# East Asian ideograph + 0x216232: (0x9cf4, 0),# East Asian ideograph + 0x21577e: (0x8964, 0),# East Asian ideograph + 0x274229: (0x6401, 0),# East Asian ideograph + 0x22422a: (0x6a92, 0),# East Asian ideograph + 0x692465: (0x3085, 0),# Hiragana letter small YU + 0x22422b: (0x6aa3, 0),# East Asian ideograph + 0x6f504c: (0xbb3c, 0),# Korean hangul + 0x6f545b: (0xc42c, 0),# Korean hangul + 0x23422c: (0x9228, 0),# East Asian ideograph + 0x6f5a35: (0xcf15, 0),# Korean hangul + 0x6f5b61: (0xd2d4, 0),# Korean hangul + 0x29556c: (0x960b, 0),# East Asian ideograph + 0x4b5b46: (0x8f0c, 0),# East Asian ideograph + 0x21422e: (0x64fe, 0),# East Asian ideograph + 0x456260: (0x5e7a, 0),# East Asian ideograph + 0x275c57: (0x8fd8, 0),# East Asian ideograph + 0x23422f: (0x9203, 0),# East Asian ideograph + 0x276030: (0x827d, 0),# East Asian ideograph + 0x692466: (0x3086, 0),# Hiragana letter YU + 0x274230: (0x6446, 0),# East Asian ideograph + 0x2d567b: (0x8717, 0),# East Asian ideograph + 0x234231: (0x9200, 0),# East Asian ideograph + 0x393573: (0x5611, 0),# East Asian ideograph + 0x234232: (0x9218, 0),# East Asian ideograph + 0x295c3e: (0x9e37, 0),# East Asian ideograph + 0x274233: (0x62e6, 0),# East Asian ideograph + 0x6f4d6d: (0xb518, 0),# Korean hangul + 0x6f4b2f: (0xaff0, 0),# Korean hangul + 0x274234: (0x6400, 0),# East Asian ideograph + 0x274235: (0x6444, 0),# East Asian ideograph + 0x234236: (0x9208, 0),# East Asian ideograph + 0x6f5a37: (0xcf20, 0),# Korean hangul + 0x224237: (0x6a9b, 0),# East Asian ideograph + 0x234238: (0x921c, 0),# East Asian ideograph + 0x2d6079: (0x8218, 0),# East Asian ideograph + 0x6f492b: (0xac83, 0),# Korean hangul + 0x213353: (0x5206, 0),# East Asian ideograph + 0x27423a: (0x6405, 0),# East Asian ideograph + 0x287349: (0x7f30, 0),# East Asian ideograph + 0x2d3464: (0x613d, 0),# East Asian ideograph + 0x23423b: (0x9224, 0),# East Asian ideograph + 0x2d3021: (0x5f0c, 0),# East Asian ideograph + 0x6f5a38: (0xcf24, 0),# Korean hangul + 0x335772: (0x8943, 0),# East Asian ideograph + 0x293132: (0x89cc, 0),# East Asian ideograph + 0x226635: (0x7911, 0),# East Asian ideograph + 0x33423d: (0x53ce, 0),# East Asian ideograph + 0x284d2b: (0x6d54, 0),# East Asian ideograph + 0x2d486b: (0x6f82, 0),# East Asian ideograph + 0x692469: (0x3089, 0),# Hiragana letter RA + 0x6f576b: (0xc8f5, 0),# Korean hangul + 0x2d3c7c: (0x83f4, 0),# East Asian ideograph + 0x4b516d: (0x7dcf, 0),# East Asian ideograph + 0x216237: (0x9d23, 0),# East Asian ideograph + 0x224242: (0x6aa0, 0),# East Asian ideograph + 0x6f4d70: (0xb524, 0),# Korean hangul + 0x234243: (0x9212, 0),# East Asian ideograph + 0x69246a: (0x308a, 0),# Hiragana letter RI + 0x334244: (0x6559, 0),# East Asian ideograph + 0x4b4a3e: (0x7235, 0),# East Asian ideograph + 0x2f5e7d: (0x6641, 0),# East Asian ideograph + 0x393577: (0x9fa2, 0),# East Asian ideograph + 0x6f5b62: (0xd1f8, 0),# Korean hangul + 0x214247: (0x6557, 0),# East Asian ideograph + 0x6f4d71: (0xb525, 0),# Korean hangul + 0x6f4c7a: (0xb2fa, 0),# Korean hangul + 0x234248: (0x91ff, 0),# East Asian ideograph + 0x285323: (0x8367, 0),# East Asian ideograph + 0x69246b: (0x308b, 0),# Hiragana letter RU + 0x217345: (0x5699, 0),# East Asian ideograph + 0x224249: (0x6a9e, 0),# East Asian ideograph + 0x22424a: (0x6a87, 0),# East Asian ideograph + 0x6f5a3b: (0xcf2f, 0),# Korean hangul + 0x22424b: (0x6a8e, 0),# East Asian ideograph + 0x23424e: (0x9206, 0),# East Asian ideograph + 0x27424f: (0x542f, 0),# East Asian ideograph + 0x6f5a3c: (0xcf30, 0),# Korean hangul + 0x21623a: (0x9d1b, 0),# East Asian ideograph + 0x224251: (0x6aab, 0),# East Asian ideograph + 0x6f4d73: (0xb528, 0),# Korean hangul + 0x234252: (0x9249, 0),# East Asian ideograph + 0x6f4930: (0xac89, 0),# Korean hangul + 0x394243: (0x4ff2, 0),# East Asian ideograph + 0x705f61: (0x54da, 0),# East Asian ideograph + 0x234254: (0x924d, 0),# East Asian ideograph + 0x6f556b: (0xc606, 0),# Korean hangul + 0x224255: (0x6ac8, 0),# East Asian ideograph + 0x224864: (0x6d19, 0),# East Asian ideograph + 0x4c4177: (0x8223, 0),# East Asian ideograph + 0x274256: (0x655b, 0),# East Asian ideograph + 0x6f4d74: (0xb529, 0),# Korean hangul + 0x224257: (0x6aae, 0),# East Asian ideograph + 0x6f4931: (0xac8a, 0),# Korean hangul + 0x6f497c: (0xad90, 0),# Korean hangul + 0x234258: (0x923a, 0),# East Asian ideograph + 0x2d346a: (0x5918, 0),# East Asian ideograph + 0x6f4879: (0xac30, 0),# Korean hangul + 0x2d3c7d: (0x53a2, 0),# East Asian ideograph + 0x2d4f3e: (0x7a3e, 0),# East Asian ideograph + 0x4d4134: (0x919b, 0),# East Asian ideograph + 0x23425c: (0x922e, 0),# East Asian ideograph + 0x6f4932: (0xac8b, 0),# Korean hangul + 0x22425d: (0x6abf, 0),# East Asian ideograph + 0x2d5241: (0x7fa3, 0),# East Asian ideograph + 0x6f5a3f: (0xcf58, 0),# Korean hangul + 0x23425f: (0x9233, 0),# East Asian ideograph + 0x294260: (0x94b7, 0),# East Asian ideograph + 0x234261: (0x9266, 0),# East Asian ideograph + 0x6f4933: (0xac8c, 0),# Korean hangul + 0x214263: (0x65ac, 0),# East Asian ideograph + 0x29446d: (0x951b, 0),# East Asian ideograph + 0x6f5a40: (0xcf5c, 0),# Korean hangul + 0x224264: (0x6aca, 0),# East Asian ideograph + 0x224867: (0x6d0e, 0),# East Asian ideograph + 0x4b3938: (0x5942, 0),# East Asian ideograph + 0x214266: (0x65b7, 0),# East Asian ideograph + 0x6f4934: (0xac90, 0),# Korean hangul + 0x22375b: (0x65fb, 0),# East Asian ideograph + 0x4b4a45: (0x5c13, 0),# East Asian ideograph + 0x234268: (0x9235, 0),# East Asian ideograph + 0x4b4b77: (0x4ec0, 0),# East Asian ideograph + 0x6f5a41: (0xcf64, 0),# Korean hangul + 0x4b5b52: (0x8f42, 0),# East Asian ideograph + 0x6f4d78: (0xb530, 0),# Korean hangul + 0x23426b: (0x9250, 0),# East Asian ideograph + 0x692472: (0x3092, 0),# Hiragana letter WO + 0x21335d: (0x5228, 0),# East Asian ideograph + 0x22375c: (0x65fc, 0),# East Asian ideograph + 0x23426c: (0x926b, 0),# East Asian ideograph + 0x23426d: (0x9239, 0),# East Asian ideograph + 0x6f556c: (0xc607, 0),# Korean hangul + 0x6f5a42: (0xcf65, 0),# Korean hangul + 0x6f4b6c: (0xb0e5, 0),# Korean hangul + 0x23426f: (0x926d, 0),# East Asian ideograph + 0x234270: (0x926c, 0),# East Asian ideograph + 0x6f4936: (0xac9c, 0),# Korean hangul + 0x234271: (0x924f, 0),# East Asian ideograph + 0x2d4272: (0x65e3, 0),# East Asian ideograph + 0x6f5c3e: (0xd3ed, 0),# Korean hangul + 0x2d3c7e: (0x53a0, 0),# East Asian ideograph + 0x6f5a43: (0xcf67, 0),# Korean hangul + 0x294274: (0x94bf, 0),# East Asian ideograph + 0x6f4d7a: (0xb532, 0),# Korean hangul + 0x6f4937: (0xac9f, 0),# Korean hangul + 0x234277: (0x9260, 0),# East Asian ideograph + 0x2d302d: (0x4e17, 0),# East Asian ideograph + 0x6f4d62: (0xb4dc, 0),# Korean hangul + 0x6f5a44: (0xcf69, 0),# Korean hangul + 0x234c6a: (0x9741, 0),# East Asian ideograph + 0x4b5b55: (0x8ee2, 0),# East Asian ideograph + 0x224279: (0x6ae6, 0),# East Asian ideograph + 0x216d24: (0x531c, 0),# East Asian ideograph + 0x6f4d7b: (0xb534, 0),# Korean hangul + 0x69562e: (0x5cbb, 0),# East Asian ideograph + 0x6f4938: (0xaca0, 0),# Korean hangul + 0x6f5b3a: (0xd1a4, 0),# Korean hangul + 0x275823: (0x88ad, 0),# East Asian ideograph + 0x29424b: (0x94a3, 0),# East Asian ideograph + 0x235d77: (0x9ead, 0),# East Asian ideograph + 0x6f4f75: (0xb9e5, 0),# Korean hangul + 0x213d6a: (0x5f97, 0),# East Asian ideograph + 0x2e3870: (0x714a, 0),# East Asian ideograph + 0x6f5a45: (0xcf70, 0),# Korean hangul + 0x22486c: (0x6d00, 0),# East Asian ideograph + 0x234c6b: (0x9747, 0),# East Asian ideograph + 0x23427e: (0x9236, 0),# East Asian ideograph + 0x6f4d7c: (0xb537, 0),# Korean hangul + 0x6f4b32: (0xb00c, 0),# Korean hangul + 0x222d2a: (0x610a, 0),# East Asian ideograph + 0x22442a: (0x6b35, 0),# East Asian ideograph + 0x216d2e: (0x532d, 0),# East Asian ideograph + 0x6f4d7d: (0xb538, 0),# Korean hangul + 0x6f493a: (0xaca8, 0),# Korean hangul + 0x213362: (0x5230, 0),# East Asian ideograph + 0x276822: (0x507b, 0),# East Asian ideograph + 0x2d3473: (0x5374, 0),# East Asian ideograph + 0x6f5a47: (0xcf74, 0),# Korean hangul + 0x4c3f7a: (0x6922, 0),# East Asian ideograph + 0x29535a: (0x9a9f, 0),# East Asian ideograph + 0x222d32: (0x6112, 0),# East Asian ideograph + 0x4b5b58: (0x8ee3, 0),# East Asian ideograph + 0x4b393f: (0x5333, 0),# East Asian ideograph + 0x216d33: (0x5330, 0),# East Asian ideograph + 0x2d486e: (0x6f97, 0),# East Asian ideograph (not in Unicode) + 0x282d34: (0x607d, 0),# East Asian ideograph + 0x6f497e: (0xada4, 0),# Korean hangul + 0x224e32: (0x6fca, 0),# East Asian ideograph + 0x6f5c3f: (0xd3f0, 0),# Korean hangul + 0x2f5a48: (0x9d44, 0),# East Asian ideograph + 0x22486f: (0x6d33, 0),# East Asian ideograph + 0x4c5f58: (0x7640, 0),# East Asian ideograph + 0x6f4e2f: (0xb561, 0),# Korean hangul + 0x6f493c: (0xacaa, 0),# Korean hangul + 0x39424f: (0x5554, 0),# East Asian ideograph + 0x2d3032: (0x7add, 0),# East Asian ideograph + 0x33392f: (0x9029, 0),# East Asian ideograph + 0x284f5d: (0x6ca3, 0),# East Asian ideograph + 0x22442d: (0x6b3b, 0),# East Asian ideograph + 0x216d3e: (0x533d, 0),# East Asian ideograph + 0x51513b: (0x7e9f, 0),# East Asian ideograph + 0x222d3f: (0x6121, 0),# East Asian ideograph + 0x6f4f76: (0xb9e8, 0),# Korean hangul + 0x292768: (0x8572, 0),# East Asian ideograph + 0x274b5f: (0x7410, 0),# East Asian ideograph + 0x6f5a4a: (0xcf85, 0),# Korean hangul + 0x232d41: (0x8841, 0),# East Asian ideograph + 0x2d4277: (0x65ee, 0),# East Asian ideograph + 0x293a6b: (0x8e7f, 0),# East Asian ideograph + 0x232a57: (0x873e, 0),# East Asian ideograph + 0x6f4b33: (0xb00d, 0),# Korean hangul + 0x222d43: (0x6106, 0),# East Asian ideograph + 0x294251: (0x94c8, 0),# East Asian ideograph + 0x3b2d44: (0x8842, 0),# East Asian ideograph + 0x295053: (0x98d9, 0),# East Asian ideograph + 0x287178: (0x7ef6, 0),# East Asian ideograph + 0x226d47: (0x7c00, 0),# East Asian ideograph + 0x2d4141: (0x63b2, 0),# East Asian ideograph + 0x6f493f: (0xacb0, 0),# Korean hangul + 0x6f547e: (0xc548, 0),# Korean hangul + 0x294252: (0x94c9, 0),# East Asian ideograph + 0x296028: (0x9f86, 0),# East Asian ideograph + 0x2f3833: (0x8d91, 0),# East Asian ideograph + 0x216d4b: (0x535d, 0),# East Asian ideograph + 0x6f4940: (0xacb8, 0),# Korean hangul + 0x284f61: (0x6ee0, 0),# East Asian ideograph + 0x6f5c40: (0xd3f4, 0),# Korean hangul + 0x295360: (0x9a98, 0),# East Asian ideograph + 0x4b5b5e: (0x5f01, 0),# East Asian ideograph + 0x232d51: (0x884a, 0),# East Asian ideograph + 0x6f4941: (0xacb9, 0),# Korean hangul + 0x294254: (0x94cb, 0),# East Asian ideograph + 0x286d54: (0x7b5a, 0),# East Asian ideograph + 0x222d56: (0x53af, 0),# East Asian ideograph + 0x232d57: (0x8850, 0),# East Asian ideograph + 0x21336a: (0x524c, 0),# East Asian ideograph + 0x294255: (0x94ca, 0),# East Asian ideograph + 0x29602b: (0x9f85, 0),# East Asian ideograph + 0x6f4f77: (0xb9ec, 0),# Korean hangul + 0x21313a: (0x4f38, 0),# East Asian ideograph + 0x3f462b: (0x5e30, 0),# East Asian ideograph + 0x274b64: (0x7391, 0),# East Asian ideograph + 0x6f5a4f: (0xcfb0, 0),# Korean hangul + 0x696d5a: (0x8f4c, 0),# East Asian ideograph + 0x29327e: (0x8c07, 0),# East Asian ideograph + 0x6f4b34: (0xb010, 0),# Korean hangul + 0x6f4943: (0xacbc, 0),# Korean hangul + 0x21336b: (0x524b, 0),# East Asian ideograph + 0x4d4862: (0x9229, 0),# East Asian ideograph + 0x222d5e: (0x6137, 0),# East Asian ideograph + 0x28717d: (0x7efa, 0),# East Asian ideograph + 0x6f5a50: (0xcfc4, 0),# Korean hangul + 0x6f4b75: (0xb113, 0),# Korean hangul + 0x6f4a5a: (0xaebd, 0),# Korean hangul + 0x6f4944: (0xacbd, 0),# Korean hangul + 0x21735b: (0x56c3, 0),# East Asian ideograph + 0x225541: (0x723f, 0),# East Asian ideograph + 0x226d63: (0x7c20, 0),# East Asian ideograph + 0x2d4147: (0x6271, 0),# East Asian ideograph + 0x216d66: (0x5393, 0),# East Asian ideograph + 0x6f4945: (0xacc1, 0),# Korean hangul + 0x21336d: (0x5247, 0),# East Asian ideograph + 0x294258: (0x94b0, 0),# East Asian ideograph + 0x6f4b22: (0xafb8, 0),# Korean hangul + 0x335941: (0x54d7, 0),# East Asian ideograph + 0x274b67: (0x73af, 0),# East Asian ideograph + 0x234c78: (0x975d, 0),# East Asian ideograph + 0x234835: (0x942b, 0),# East Asian ideograph + 0x6f5052: (0xbb4f, 0),# Korean hangul + 0x276d6d: (0x538d, 0),# East Asian ideograph + 0x274b68: (0x7477, 0),# East Asian ideograph + 0x6f5a53: (0xcfe4, 0),# Korean hangul + 0x225235: (0x712f, 0),# East Asian ideograph + 0x294f23: (0x9880, 0),# East Asian ideograph + 0x4b546d: (0x82d3, 0),# East Asian ideograph (variant of 21546D which maps to 82D3) + 0x6f4c7b: (0xb2fb, 0),# Korean hangul + 0x6f4947: (0xacc4, 0),# Korean hangul + 0x21336f: (0x5256, 0),# East Asian ideograph + 0x225544: (0x7242, 0),# East Asian ideograph + 0x6f5724: (0xc7a5, 0),# Korean hangul + 0x274932: (0x6cfb, 0),# East Asian ideograph + 0x4b682e: (0x4ec2, 0),# East Asian ideograph + 0x274b69: (0x73ba, 0),# East Asian ideograph + 0x6f5a54: (0xcfe8, 0),# Korean hangul + 0x234837: (0x9441, 0),# East Asian ideograph + 0x213d3f: (0x5f17, 0),# East Asian ideograph + 0x4d2d75: (0x8872, 0),# East Asian ideograph (variant of 232D75 which maps to 8872) + 0x213370: (0x525b, 0),# East Asian ideograph + 0x69252c: (0x30ac, 0),# Katakana letter GA + 0x225821: (0x734b, 0),# East Asian ideograph + 0x282d77: (0x60ad, 0),# East Asian ideograph + 0x215822: (0x896f, 0),# East Asian ideograph + 0x6f5a55: (0xcff0, 0),# Korean hangul + 0x6f557d: (0xc63b, 0),# Korean hangul + 0x234c7b: (0x975f, 0),# East Asian ideograph + 0x222d79: (0x6164, 0),# East Asian ideograph + 0x4b5824: (0x897e, 0),# East Asian ideograph + 0x696d7a: (0x9027, 0),# East Asian ideograph + 0x6f4949: (0xacd7, 0),# Korean hangul + 0x215825: (0x8981, 0),# East Asian ideograph + 0x29425c: (0x94cc, 0),# East Asian ideograph + 0x695c29: (0x6925, 0),# East Asian ideograph + 0x4b5826: (0x8983, 0),# East Asian ideograph (variant of 215826 which maps to 8983) + 0x232d7c: (0x8879, 0),# East Asian ideograph + 0x295827: (0x9cb2, 0),# East Asian ideograph + 0x6f5a56: (0xcff3, 0),# Korean hangul + 0x295369: (0x9a7a, 0),# East Asian ideograph + 0x215828: (0x898b, 0),# East Asian ideograph + 0x225829: (0x736c, 0),# East Asian ideograph + 0x6f494a: (0xace0, 0),# Korean hangul + 0x21582a: (0x8993, 0),# East Asian ideograph + 0x21582b: (0x8996, 0),# East Asian ideograph + 0x2d5259: (0x98dc, 0),# East Asian ideograph + 0x21582c: (0x89aa, 0),# East Asian ideograph + 0x284f6b: (0x6f13, 0),# East Asian ideograph + 0x29536a: (0x9a9d, 0),# East Asian ideograph + 0x21582d: (0x89a6, 0),# East Asian ideograph + 0x27582e: (0x89ca, 0),# East Asian ideograph + 0x6f494b: (0xace1, 0),# Korean hangul + 0x22582f: (0x736f, 0),# East Asian ideograph + 0x275830: (0x89c9, 0),# East Asian ideograph + 0x215831: (0x89bd, 0),# East Asian ideograph + 0x6f5a58: (0xcffc, 0),# Korean hangul + 0x275832: (0x89c2, 0),# East Asian ideograph + 0x222871: (0x5ee8, 0),# East Asian ideograph + 0x22443c: (0x6b43, 0),# East Asian ideograph + 0x33483b: (0x6cdd, 0),# East Asian ideograph + 0x2d5833: (0x752a, 0),# East Asian ideograph + 0x276037: (0x9875, 0),# East Asian ideograph + 0x6f494c: (0xace4, 0),# Korean hangul + 0x215834: (0x89e3, 0),# East Asian ideograph + 0x29425f: (0x94b6, 0),# East Asian ideograph + 0x275835: (0x89de, 0),# East Asian ideograph + 0x274933: (0x6e0e, 0),# East Asian ideograph + 0x235b52: (0x9d6f, 0),# East Asian ideograph + 0x215836: (0x89f8, 0),# East Asian ideograph + 0x455837: (0x8ba0, 0),# East Asian ideograph + 0x4c5f69: (0x75eb, 0),# East Asian ideograph + 0x275838: (0x8ba1, 0),# East Asian ideograph + 0x6f4b36: (0xb01c, 0),# Korean hangul + 0x6f494d: (0xace7, 0),# Korean hangul + 0x275839: (0x8ba2, 0),# East Asian ideograph + 0x4d2962: (0x86c9, 0),# East Asian ideograph (variant of 232962 which maps to 86C9) + 0x223331: (0x640c, 0),# East Asian ideograph + 0x22583b: (0x7381, 0),# East Asian ideograph + 0x6f5a5a: (0xd018, 0),# Korean hangul + 0x2e7431: (0x7f48, 0),# East Asian ideograph + 0x4b625c: (0x9eb8, 0),# East Asian ideograph (variant of 27625C which maps to 9EB8) + 0x27583c: (0x8bb0, 0),# East Asian ideograph + 0x22443e: (0x6b48, 0),# East Asian ideograph + 0x23483d: (0x9467, 0),# East Asian ideograph + 0x27583d: (0x8ba8, 0),# East Asian ideograph + 0x273a63: (0x5b6a, 0),# East Asian ideograph + 0x6f494e: (0xace8, 0),# Korean hangul + 0x27583e: (0x8ba7, 0),# East Asian ideograph + 0x294261: (0x94b2, 0),# East Asian ideograph + 0x22583f: (0x7388, 0),# East Asian ideograph + 0x2d525d: (0x6537, 0),# East Asian ideograph + 0x224c3f: (0x6f26, 0),# East Asian ideograph + 0x6f5a5b: (0xd02d, 0),# Korean hangul + 0x215841: (0x8a16, 0),# East Asian ideograph + 0x215842: (0x8a17, 0),# East Asian ideograph + 0x6f494f: (0xacea, 0),# Korean hangul + 0x275843: (0x8bad, 0),# East Asian ideograph + 0x275844: (0x8bbf, 0),# East Asian ideograph + 0x233732: (0x8d0c, 0),# East Asian ideograph + 0x2d3045: (0x4e57, 0),# East Asian ideograph + 0x275845: (0x8bc0, 0),# East Asian ideograph + 0x6f5a5c: (0xd034, 0),# Korean hangul + 0x225846: (0x7395, 0),# East Asian ideograph + 0x294f2c: (0x988f, 0),# East Asian ideograph + 0x215847: (0x8a25, 0),# East Asian ideograph + 0x6f4950: (0xacec, 0),# Korean hangul + 0x225848: (0x7397, 0),# East Asian ideograph + 0x6f5739: (0xc810, 0),# Korean hangul + 0x285c3a: (0x748e, 0),# East Asian ideograph + 0x6f5054: (0xbb54, 0),# Korean hangul + 0x215849: (0x8a2d, 0),# East Asian ideograph + 0x21584a: (0x8a1b, 0),# East Asian ideograph + 0x6f5a5d: (0xd035, 0),# Korean hangul + 0x295370: (0x9a9c, 0),# East Asian ideograph + 0x286d47: (0x7ba6, 0),# East Asian ideograph + 0x21584b: (0x8a1f, 0),# East Asian ideograph + 0x21584c: (0x8a3b, 0),# East Asian ideograph + 0x2d4153: (0x64e3, 0),# East Asian ideograph + 0x276038: (0x9876, 0),# East Asian ideograph + 0x6f4951: (0xacef, 0),# Korean hangul + 0x22584d: (0x7394, 0),# East Asian ideograph + 0x294264: (0x94ba, 0),# East Asian ideograph + 0x21584e: (0x8a55, 0),# East Asian ideograph + 0x21584f: (0x8a5e, 0),# East Asian ideograph + 0x4b576c: (0x523e, 0),# East Asian ideograph + 0x27486d: (0x6da6, 0),# East Asian ideograph + 0x275851: (0x8bc2, 0),# East Asian ideograph + 0x6f4b37: (0xb01d, 0),# Korean hangul + 0x6f4952: (0xacf0, 0),# Korean hangul + 0x225852: (0x73a6, 0),# East Asian ideograph + 0x227768: (0x80b8, 0),# East Asian ideograph + 0x223336: (0x6415, 0),# East Asian ideograph + 0x275854: (0x8bc8, 0),# East Asian ideograph + 0x6f5a5f: (0xd050, 0),# Korean hangul + 0x275855: (0x8bcb, 0),# East Asian ideograph + 0x275856: (0x8bc9, 0),# East Asian ideograph + 0x6f4a5d: (0xaec4, 0),# Korean hangul + 0x215857: (0x8a3a, 0),# East Asian ideograph + 0x21736a: (0x56d4, 0),# East Asian ideograph + 0x33333c: (0x6c37, 0),# East Asian ideograph + 0x215858: (0x8a6b, 0),# East Asian ideograph + 0x4b4621: (0x6b53, 0),# East Asian ideograph + 0x235859: (0x9c12, 0),# East Asian ideograph + 0x6f5a60: (0xd06c, 0),# Korean hangul + 0x27585a: (0x8be6, 0),# East Asian ideograph + 0x27585b: (0x8bd5, 0),# East Asian ideograph + 0x45456d: (0x6a10, 0),# East Asian ideograph + 0x2d5f2c: (0x5826, 0),# East Asian ideograph + 0x6f4954: (0xacf3, 0),# Korean hangul + 0x21585c: (0x8a69, 0),# East Asian ideograph + 0x6f4b4a: (0xb08f, 0),# Korean hangul + 0x225551: (0x724f, 0),# East Asian ideograph + 0x21585d: (0x8a70, 0),# East Asian ideograph + 0x29443e: (0x94e4, 0),# East Asian ideograph + 0x21585e: (0x8a63, 0),# East Asian ideograph + 0x6f5a61: (0xd070, 0),# Korean hangul + 0x21625f: (0x9ebb, 0),# East Asian ideograph + 0x21585f: (0x8a7c, 0),# East Asian ideograph + 0x215860: (0x8aa0, 0),# East Asian ideograph + 0x6f4e30: (0xb5a0, 0),# Korean hangul + 0x2d5f2d: (0x964f, 0),# East Asian ideograph + 0x275861: (0x5938, 0),# East Asian ideograph + 0x275840: (0x8baf, 0),# East Asian ideograph + 0x6f5055: (0xbb58, 0),# Korean hangul + 0x215862: (0x8a85, 0),# East Asian ideograph + 0x6f5441: (0xc329, 0),# Korean hangul + 0x225863: (0x73a0, 0),# East Asian ideograph + 0x6f5a62: (0xd074, 0),# Korean hangul + 0x695375: (0x56ce, 0),# East Asian ideograph + 0x6f5864: (0xcb18, 0),# Korean hangul + 0x215865: (0x8a62, 0),# East Asian ideograph + 0x2d575b: (0x886e, 0),# East Asian ideograph + 0x3f4956: (0x7832, 0),# East Asian ideograph + 0x215866: (0x8a71, 0),# East Asian ideograph + 0x285c40: (0x74d2, 0),# East Asian ideograph + 0x215867: (0x8a6e, 0),# East Asian ideograph + 0x295132: (0x997d, 0),# East Asian ideograph + 0x233739: (0x8d11, 0),# East Asian ideograph + 0x2d5265: (0x79d0, 0),# East Asian ideograph + 0x225868: (0x73cf, 0),# East Asian ideograph + 0x6f5a63: (0xd07c, 0),# Korean hangul + 0x282d5e: (0x607a, 0),# East Asian ideograph + 0x6f4a25: (0xadd0, 0),# Korean hangul + 0x275869: (0x8bf4, 0),# East Asian ideograph + 0x21586a: (0x8aa6, 0),# East Asian ideograph + 0x6f4b38: (0xb028, 0),# Korean hangul + 0x21586b: (0x8aa1, 0),# East Asian ideograph + 0x215155: (0x7dd6, 0),# East Asian ideograph + 0x22333b: (0x6422, 0),# East Asian ideograph + 0x27586d: (0x5fd7, 0),# East Asian ideograph + 0x22456f: (0x6be7, 0),# East Asian ideograph + 0x23586e: (0x9c23, 0),# East Asian ideograph + 0x27586f: (0x8bec, 0),# East Asian ideograph + 0x6f4f36: (0xb839, 0),# Korean hangul + 0x6f4a5e: (0xaecc, 0),# Korean hangul + 0x215870: (0x8a8d, 0),# East Asian ideograph + 0x21736f: (0x56e1, 0),# East Asian ideograph + 0x294469: (0x94fc, 0),# East Asian ideograph + 0x215871: (0x8aa4, 0),# East Asian ideograph (variant of 4B5871 which maps to 8AA4) + 0x23373b: (0x8d12, 0),# East Asian ideograph + 0x2d5267: (0x79cf, 0),# East Asian ideograph + 0x215872: (0x8aa8, 0),# East Asian ideograph + 0x2d4e24: (0x6998, 0),# East Asian ideograph + 0x215873: (0x8aa5, 0),# East Asian ideograph + 0x217e60: (0x5bc9, 0),# East Asian ideograph + 0x215874: (0x8a98, 0),# East Asian ideograph + 0x4b5d65: (0x8217, 0),# East Asian ideograph + 0x6f4959: (0xacfd, 0),# Korean hangul + 0x215875: (0x8a91, 0),# East Asian ideograph + 0x6f5130: (0xbc9a, 0),# Korean hangul + 0x275876: (0x8c0a, 0),# East Asian ideograph + 0x6f4b68: (0xb0c9, 0),# Korean hangul + 0x215877: (0x8ac4, 0),# East Asian ideograph + 0x6f5a66: (0xd0a4, 0),# Korean hangul + 0x4b5176: (0x7e04, 0),# East Asian ideograph + 0x295379: (0x9a96, 0),# East Asian ideograph + 0x235878: (0x9c21, 0),# East Asian ideograph + 0x234323: (0x924e, 0),# East Asian ideograph + 0x275879: (0x8c08, 0),# East Asian ideograph + 0x6f495a: (0xad00, 0),# Korean hangul + 0x27587a: (0x8bf7, 0),# East Asian ideograph + 0x224325: (0x6acc, 0),# East Asian ideograph + 0x21587b: (0x8af8, 0),# East Asian ideograph + 0x23373d: (0x8d14, 0),# East Asian ideograph + 0x21587c: (0x8ab2, 0),# East Asian ideograph + 0x234327: (0x9256, 0),# East Asian ideograph + 0x29537a: (0x9aa2, 0),# East Asian ideograph + 0x21587d: (0x8abf, 0),# East Asian ideograph + 0x224328: (0x6ad1, 0),# East Asian ideograph + 0x21587e: (0x8ac9, 0),# East Asian ideograph + 0x4c7d4d: (0x8343, 0),# East Asian ideograph + 0x2d4329: (0x668e, 0),# East Asian ideograph + 0x6f495b: (0xad04, 0),# Korean hangul + 0x6f5d31: (0xd611, 0),# Korean hangul + 0x6f4f7c: (0xb9f9, 0),# Korean hangul + 0x23432b: (0x925a, 0),# East Asian ideograph + 0x2d3051: (0x5f0d, 0),# East Asian ideograph + 0x6f5a68: (0xd0a8, 0),# Korean hangul + 0x216266: (0x9ed1, 0),# East Asian ideograph + 0x27432d: (0x65f6, 0),# East Asian ideograph + 0x4b5736: (0x877f, 0),# East Asian ideograph + 0x23432e: (0x9241, 0),# East Asian ideograph + 0x6f495c: (0xad0c, 0),# Korean hangul + 0x285252: (0x709c, 0),# East Asian ideograph + 0x275847: (0x8bb7, 0),# East Asian ideograph + 0x23432f: (0x9283, 0),# East Asian ideograph + 0x335958: (0x8c4a, 0),# East Asian ideograph + 0x394330: (0x6644, 0),# East Asian ideograph + 0x2d526b: (0x7085, 0),# East Asian ideograph + 0x234331: (0x92a5, 0),# East Asian ideograph + 0x213065: (0x4eca, 0),# East Asian ideograph + 0x6f5626: (0xc653, 0),# Korean hangul + 0x274332: (0x663c, 0),# East Asian ideograph + 0x234333: (0x9282, 0),# East Asian ideograph + 0x2d5f35: (0x78d2, 0),# East Asian ideograph + 0x6f495d: (0xad0d, 0),# Korean hangul + 0x275848: (0x8bb8, 0),# East Asian ideograph + 0x224334: (0x6acd, 0),# East Asian ideograph + 0x234335: (0x92a8, 0),# East Asian ideograph + 0x2d3053: (0x4e3c, 0),# East Asian ideograph + 0x29572b: (0x9c90, 0),# East Asian ideograph + 0x6f5a6a: (0xd0b4, 0),# Korean hangul + 0x224337: (0x6aec, 0),# East Asian ideograph + 0x215e25: (0x938a, 0),# East Asian ideograph + 0x234338: (0x92a4, 0),# East Asian ideograph + 0x6f495e: (0xad0f, 0),# Korean hangul + 0x224339: (0x6af3, 0),# East Asian ideograph + 0x22433a: (0x6ae7, 0),# East Asian ideograph + 0x2d433b: (0x6662, 0),# East Asian ideograph + 0x226225: (0x7735, 0),# East Asian ideograph + 0x4b5b29: (0x8e8d, 0),# East Asian ideograph + 0x6f495f: (0xad11, 0),# Korean hangul + 0x23433e: (0x9276, 0),# East Asian ideograph + 0x227775: (0x6711, 0),# East Asian ideograph + 0x22433f: (0x6aeb, 0),# East Asian ideograph + 0x224340: (0x6aea, 0),# East Asian ideograph + 0x21626a: (0x9ede, 0),# East Asian ideograph + 0x274341: (0x6655, 0),# East Asian ideograph + 0x6f5428: (0xc2eb, 0),# Korean hangul + 0x234342: (0x9288, 0),# East Asian ideograph + 0x27603b: (0x987a, 0),# East Asian ideograph + 0x6f4960: (0xad18, 0),# Korean hangul + 0x274343: (0x7545, 0),# East Asian ideograph + 0x6f4f7d: (0xb9fa, 0),# Korean hangul + 0x223344: (0x6430, 0),# East Asian ideograph + 0x224344: (0x6af1, 0),# East Asian ideograph + 0x4c6c46: (0x7b9f, 0),# East Asian ideograph + 0x234345: (0x928e, 0),# East Asian ideograph + 0x6f562a: (0xc65d, 0),# Korean hangul + 0x234346: (0x92a0, 0),# East Asian ideograph + 0x4b7954: (0x5968, 0),# East Asian ideograph + 0x6f4b3a: (0xb045, 0),# Korean hangul + 0x234347: (0x9277, 0),# East Asian ideograph + 0x6f4961: (0xad19, 0),# Korean hangul + 0x274348: (0x6653, 0),# East Asian ideograph + 0x274349: (0x5386, 0),# East Asian ideograph (duplicate simplified) + 0x6f564f: (0xc6e9, 0),# Korean hangul + 0x224571: (0x6be8, 0),# East Asian ideograph + 0x213066: (0x4ec1, 0),# East Asian ideograph + 0x6f562b: (0xc660, 0),# Korean hangul + 0x27434b: (0x66a7, 0),# East Asian ideograph + 0x6f4962: (0xad1c, 0),# Korean hangul + 0x27434d: (0x65f7, 0),# East Asian ideograph + 0x6f4a60: (0xaecf, 0),# Korean hangul + 0x4b335b: (0x522b, 0),# East Asian ideograph + 0x23595e: (0x9c6e, 0),# East Asian ideograph + 0x22434e: (0x6afd, 0),# East Asian ideograph + 0x2d3058: (0x4e9c, 0),# East Asian ideograph + 0x29434f: (0x94de, 0),# East Asian ideograph + 0x6f562c: (0xc671, 0),# Korean hangul + 0x224350: (0x6afa, 0),# East Asian ideograph + 0x347d24: (0x83c7, 0),# East Asian ideograph + 0x6f552e: (0xc561, 0),# Korean hangul + 0x2d5f3b: (0x96a0, 0),# East Asian ideograph + 0x6f4963: (0xad20, 0),# Korean hangul + 0x6f5132: (0xbca1, 0),# Korean hangul + 0x224352: (0x6b01, 0),# East Asian ideograph + 0x4b4a74: (0x731c, 0),# East Asian ideograph (variant of 214A74 which maps to 731C) + 0x234354: (0x927e, 0),# East Asian ideograph + 0x6f5c47: (0xd45c, 0),# Korean hangul + 0x274355: (0x4e66, 0),# East Asian ideograph + 0x6f4964: (0xad28, 0),# Korean hangul + 0x334357: (0x6702, 0),# East Asian ideograph + 0x223348: (0x6435, 0),# East Asian ideograph + 0x224358: (0x6b03, 0),# East Asian ideograph + 0x224359: (0x6af8, 0),# East Asian ideograph + 0x21605f: (0x98b6, 0),# East Asian ideograph + 0x4d6047: (0x816d, 0),# East Asian ideograph + 0x27435a: (0x4f1a, 0),# East Asian ideograph + 0x23435b: (0x9291, 0),# East Asian ideograph + 0x27603c: (0x987b, 0),# East Asian ideograph + 0x6f4965: (0xad29, 0),# Korean hangul + 0x6f4f7e: (0xba00, 0),# Korean hangul + 0x23435d: (0x929b, 0),# East Asian ideograph + 0x233748: (0x8d6c, 0),# East Asian ideograph + 0x2d305b: (0x4ebe, 0),# East Asian ideograph + 0x217573: (0x57d5, 0),# East Asian ideograph + 0x6f562f: (0xc67c, 0),# Korean hangul + 0x284b43: (0x8365, 0),# East Asian ideograph + 0x22435f: (0x6b0d, 0),# East Asian ideograph + 0x6f4b3b: (0xb048, 0),# Korean hangul + 0x224360: (0x6b09, 0),# East Asian ideograph + 0x355053: (0x98c8, 0),# East Asian ideograph + 0x6f4966: (0xad2d, 0),# Korean hangul + 0x224361: (0x6b0e, 0),# East Asian ideograph + 0x225563: (0x726e, 0),# East Asian ideograph + 0x234362: (0x927f, 0),# East Asian ideograph + 0x69243c: (0x305c, 0),# Hiragana letter ZE + 0x6f5630: (0xc680, 0),# Korean hangul + 0x234364: (0x92a3, 0),# East Asian ideograph + 0x6f4967: (0xad34, 0),# Korean hangul + 0x275852: (0x8bcf, 0),# East Asian ideograph + 0x214366: (0x6727, 0),# East Asian ideograph + 0x224367: (0x6b11, 0),# East Asian ideograph + 0x2d4e33: (0x78aa, 0),# East Asian ideograph + 0x3f5631: (0x517f, 0),# East Asian ideograph + 0x334369: (0x5932, 0),# East Asian ideograph + 0x234857: (0x9464, 0),# East Asian ideograph + 0x21436a: (0x672b, 0),# East Asian ideograph + 0x293032: (0x7962, 0),# East Asian ideograph + 0x6f4968: (0xad38, 0),# Korean hangul + 0x275853: (0x8bc5, 0),# East Asian ideograph + 0x33496a: (0x934a, 0),# East Asian ideograph + 0x22436d: (0x6b19, 0),# East Asian ideograph + 0x4b5179: (0x7f0b, 0),# East Asian ideograph + 0x6f5632: (0xc68b, 0),# Korean hangul + 0x23436f: (0x92d0, 0),# East Asian ideograph + 0x6f4969: (0xad3c, 0),# Korean hangul + 0x2d4370: (0x6736, 0),# East Asian ideograph + 0x215167: (0x7e46, 0),# East Asian ideograph + 0x234371: (0x92f1, 0),# East Asian ideograph + 0x234372: (0x92df, 0),# East Asian ideograph + 0x275528: (0x835a, 0),# East Asian ideograph + 0x215e31: (0x93c8, 0),# East Asian ideograph + 0x6f496a: (0xad44, 0),# Korean hangul + 0x214375: (0x6750, 0),# East Asian ideograph + 0x215168: (0x7e37, 0),# East Asian ideograph + 0x6f572b: (0xc7bc, 0),# Korean hangul + 0x234376: (0x92b6, 0),# East Asian ideograph + 0x4b4638: (0x6bb1, 0),# East Asian ideograph + 0x234377: (0x92c0, 0),# East Asian ideograph + 0x6f5634: (0xc694, 0),# Korean hangul + 0x6f4d2b: (0xb35b, 0),# Korean hangul + 0x6f4b3c: (0xb04a, 0),# Korean hangul + 0x234379: (0x92be, 0),# East Asian ideograph + 0x6f572e: (0xc7c0, 0),# Korean hangul + 0x2d3061: (0x4eb0, 0),# East Asian ideograph + 0x6f5a78: (0xd0d4, 0),# Korean hangul + 0x6f5635: (0xc695, 0),# Korean hangul + 0x29437d: (0x94d8, 0),# East Asian ideograph + 0x696e28: (0x9056, 0),# East Asian ideograph + 0x4b5746: (0x8853, 0),# East Asian ideograph + 0x23437e: (0x92d5, 0),# East Asian ideograph + 0x2d3d2b: (0x5ebf, 0),# East Asian ideograph + 0x6f4a62: (0xaed1, 0),# Korean hangul + 0x276e2a: (0x53a3, 0),# East Asian ideograph + 0x2d527b: (0x8074, 0),# East Asian ideograph + 0x6f5a79: (0xd0d5, 0),# Korean hangul + 0x282d74: (0x6004, 0),# East Asian ideograph + 0x6f5636: (0xc698, 0),# Korean hangul + 0x23485c: (0x9465, 0),# East Asian ideograph + 0x226233: (0x774a, 0),# East Asian ideograph + 0x6f496d: (0xad50, 0),# Korean hangul + 0x6f5c49: (0xd478, 0),# Korean hangul + 0x6f5840: (0xc9ed, 0),# Korean hangul + 0x222e2f: (0x615c, 0),# East Asian ideograph + 0x223351: (0x640a, 0),# East Asian ideograph + 0x21317d: (0x501a, 0),# East Asian ideograph + 0x6f5a7a: (0xd0dc, 0),# Korean hangul + 0x2e7451: (0x7f58, 0),# East Asian ideograph + 0x6f5637: (0xc6a5, 0),# Korean hangul + 0x215e35: (0x93dd, 0),# East Asian ideograph + 0x23485d: (0x9455, 0),# East Asian ideograph + 0x6f4e31: (0xb5a1, 0),# Korean hangul + 0x225e2c: (0x7590, 0),# East Asian ideograph + 0x2d3d2d: (0x5396, 0),# East Asian ideograph + 0x275859: (0x8be5, 0),# East Asian ideograph + 0x21516c: (0x7e2b, 0),# East Asian ideograph + 0x225128: (0x70e0, 0),# East Asian ideograph + 0x6f5a7b: (0xd0dd, 0),# Korean hangul + 0x275529: (0x830e, 0),# East Asian ideograph + 0x22445f: (0x6b6e, 0),# East Asian ideograph + 0x33485e: (0x67d2, 0),# East Asian ideograph + 0x226235: (0x7743, 0),# East Asian ideograph + 0x2d4171: (0x62ca, 0),# East Asian ideograph + 0x6f496f: (0xad6d, 0),# Korean hangul + 0x6f572c: (0xc7bd, 0),# Korean hangul + 0x27493a: (0x6fd1, 0),# East Asian ideograph + 0x23596b: (0x9c7a, 0),# East Asian ideograph + 0x235b59: (0x9da9, 0),# East Asian ideograph + 0x27474e: (0x6cfe, 0),# East Asian ideograph + 0x6f5639: (0xc6a9, 0),# Korean hangul + 0x215e37: (0x93d8, 0),# East Asian ideograph + 0x222e3d: (0x61a2, 0),# East Asian ideograph + 0x2d3d2f: (0x539b, 0),# East Asian ideograph + 0x6f5946: (0xccd0, 0),# Korean hangul + 0x345d6b: (0x756d, 0),# East Asian ideograph + 0x285d6b: (0x7572, 0),# East Asian ideograph + 0x222e40: (0x61a8, 0),# East Asian ideograph + 0x6f563a: (0xc6b0, 0),# Korean hangul + 0x4b3c2b: (0x67c3, 0),# East Asian ideograph (Version J extension) + 0x6f4f37: (0xb840, 0),# Korean hangul + 0x6f4971: (0xad73, 0),# Korean hangul + 0x6f4a63: (0xaed8, 0),# Korean hangul + 0x22512b: (0x70d4, 0),# East Asian ideograph + 0x23552a: (0x9aef, 0),# East Asian ideograph + 0x6f5a7e: (0xd0ec, 0),# Korean hangul + 0x222e45: (0x6196, 0),# East Asian ideograph + 0x6f563b: (0xc6b1, 0),# Korean hangul + 0x6f4972: (0xad74, 0),# Korean hangul + 0x6f563c: (0xc6b4, 0),# Korean hangul + 0x234862: (0x946a, 0),# East Asian ideograph + 0x282e4c: (0x6126, 0),# East Asian ideograph + 0x2d5f4b: (0x96d1, 0),# East Asian ideograph + 0x6f4973: (0xad75, 0),# Korean hangul + 0x215171: (0x7e54, 0),# East Asian ideograph + 0x6f563d: (0xc6b7, 0),# Korean hangul + 0x215e3b: (0x93fd, 0),# East Asian ideograph + 0x2d4176: (0x6483, 0),# East Asian ideograph + 0x2d5f4c: (0x9dc4, 0),# East Asian ideograph + 0x6f4974: (0xad76, 0),# Korean hangul + 0x6f5d32: (0xd613, 0),# Korean hangul + 0x282e52: (0x6003, 0),# East Asian ideograph + 0x27493b: (0x6ca5, 0),# East Asian ideograph + 0x233941: (0x8dfd, 0),# East Asian ideograph + 0x6f563e: (0xc6b8, 0),# Korean hangul + 0x4b5773: (0x7ed4, 0),# East Asian ideograph + 0x213c23: (0x5d22, 0),# East Asian ideograph + 0x286e56: (0x7ba8, 0),# East Asian ideograph + 0x2d3d34: (0x5efe, 0),# East Asian ideograph + 0x215173: (0x7e5e, 0),# East Asian ideograph + 0x223359: (0x6407, 0),# East Asian ideograph + 0x216e58: (0x535f, 0),# East Asian ideograph + 0x707523: (0x9170, 0),# East Asian ideograph + 0x6f4b77: (0xb119, 0),# Korean hangul + 0x222e5a: (0x61cb, 0),# East Asian ideograph + 0x213c24: (0x5d29, 0),# East Asian ideograph + 0x33355c: (0x5449, 0),# East Asian ideograph + 0x273648: (0x95ee, 0),# East Asian ideograph + 0x282e5c: (0x603f, 0),# East Asian ideograph + 0x27514c: (0x7eff, 0),# East Asian ideograph + 0x6f5579: (0xc635, 0),# Korean hangul + 0x6f5640: (0xc6ba, 0),# Korean hangul + 0x6f5951: (0xcd5c, 0),# Korean hangul + 0x4b397b: (0x5a2f, 0),# East Asian ideograph + 0x29402c: (0x90d0, 0),# East Asian ideograph + 0x22623d: (0x7760, 0),# East Asian ideograph + 0x6f4977: (0xad7f, 0),# Korean hangul + 0x6f5136: (0xbcb0, 0),# Korean hangul + 0x216e61: (0x5414, 0),# East Asian ideograph + 0x22335b: (0x643b, 0),# East Asian ideograph + 0x6f4a2e: (0xadfc, 0),# Korean hangul + 0x6f5641: (0xc6c0, 0),# Korean hangul + 0x213c26: (0x5d19, 0),# East Asian ideograph + 0x275863: (0x8be1, 0),# East Asian ideograph + 0x695a7e: (0x66bc, 0),# East Asian ideograph + 0x287e61: (0x82cc, 0),# East Asian ideograph + 0x232e68: (0x88d2, 0),# East Asian ideograph + 0x6f5642: (0xc6c1, 0),# Korean hangul + 0x234868: (0x946b, 0),# East Asian ideograph + 0x6f5429: (0xc2ec, 0),# Korean hangul + 0x334425: (0x76c3, 0),# East Asian ideograph + 0x6f4979: (0xad82, 0),# Korean hangul + 0x296062: (0x9f9b, 0),# East Asian ideograph + 0x22335d: (0x643f, 0),# East Asian ideograph + 0x23375c: (0x8d7a, 0),# East Asian ideograph + 0x6f5643: (0xc6c3, 0),# Korean hangul + 0x213c28: (0x5d50, 0),# East Asian ideograph + 0x216e6f: (0x541a, 0),# East Asian ideograph + 0x6f497a: (0xad88, 0),# Korean hangul + 0x275422: (0x810f, 0),# East Asian ideograph (duplicate simplified) + 0x222e71: (0x61e0, 0),# East Asian ideograph + 0x2d3e40: (0x6052, 0),# East Asian ideograph + 0x6f5644: (0xc6c5, 0),# Korean hangul + 0x28702e: (0x56e2, 0),# East Asian ideograph (duplicate simplified) + 0x6f497b: (0xad8c, 0),# Korean hangul + 0x6f4a65: (0xaef4, 0),# Korean hangul + 0x455164: (0x53bf, 0),# East Asian ideograph + 0x215921: (0x8ac2, 0),# East Asian ideograph + 0x222e77: (0x61e5, 0),# East Asian ideograph + 0x275922: (0x8c01, 0),# East Asian ideograph + 0x275923: (0x8bde, 0),# East Asian ideograph + 0x232652: (0x85a2, 0),# East Asian ideograph + 0x6f552f: (0xc564, 0),# Korean hangul + 0x216e79: (0x5454, 0),# East Asian ideograph + 0x275924: (0x8bba, 0),# East Asian ideograph + 0x235925: (0x9c32, 0),# East Asian ideograph + 0x215926: (0x8afa, 0),# East Asian ideograph + 0x275927: (0x8c0f, 0),# East Asian ideograph + 0x216e7d: (0x543d, 0),# East Asian ideograph + 0x235928: (0x9c48, 0),# East Asian ideograph + 0x282e7e: (0x603c, 0),# East Asian ideograph + 0x215929: (0x8ae7, 0),# East Asian ideograph + 0x275868: (0x8bdf, 0),# East Asian ideograph + 0x6f505d: (0xbbc8, 0),# Korean hangul + 0x23592a: (0x9c33, 0),# East Asian ideograph + 0x21592b: (0x8b00, 0),# East Asian ideograph + 0x6f5b72: (0xd31d, 0),# Korean hangul + 0x27592c: (0x8c12, 0),# East Asian ideograph + 0x6f5647: (0xc6d0, 0),# Korean hangul + 0x29416b: (0x948e, 0),# East Asian ideograph + 0x213e47: (0x6064, 0),# East Asian ideograph + 0x23486d: (0x9471, 0),# East Asian ideograph + 0x27592e: (0x8bfa, 0),# East Asian ideograph + 0x22592f: (0x73d4, 0),# East Asian ideograph + 0x27493d: (0x6f47, 0),# East Asian ideograph + 0x233761: (0x8d84, 0),# East Asian ideograph + 0x215930: (0x8aed, 0),# East Asian ideograph + 0x335a7b: (0x8e28, 0),# East Asian ideograph + 0x275931: (0x8c24, 0),# East Asian ideograph + 0x6f5648: (0xc6d4, 0),# Korean hangul + 0x697174: (0x9ade, 0),# East Asian ideograph + 0x235932: (0x9c35, 0),# East Asian ideograph + 0x275933: (0x8c1c, 0),# East Asian ideograph + 0x27586a: (0x8bf5, 0),# East Asian ideograph + 0x215934: (0x8b1b, 0),# East Asian ideograph + 0x215935: (0x8b0a, 0),# East Asian ideograph + 0x225936: (0x73e7, 0),# East Asian ideograph + 0x6f5649: (0xc6dc, 0),# Korean hangul + 0x275937: (0x8a8a, 0),# East Asian ideograph + 0x215938: (0x8b1d, 0),# East Asian ideograph + 0x27586b: (0x8beb, 0),# East Asian ideograph + 0x6f4a66: (0xaf0d, 0),# Korean hangul + 0x282f66: (0x6217, 0),# East Asian ideograph + 0x215939: (0x8b39, 0),# East Asian ideograph + 0x22513a: (0x70d0, 0),# East Asian ideograph + 0x21593a: (0x8b2c, 0),# East Asian ideograph + 0x21593b: (0x8b28, 0),# East Asian ideograph + 0x6f564a: (0xc6dd, 0),# Korean hangul + 0x224471: (0x6b82, 0),# East Asian ideograph + 0x21593c: (0x8b58, 0),# East Asian ideograph + 0x27593d: (0x8c31, 0),# East Asian ideograph + 0x6f5138: (0xbcb3, 0),# Korean hangul + 0x27586c: (0x8bed, 0),# East Asian ideograph + 0x27593e: (0x8c32, 0),# East Asian ideograph + 0x22513b: (0x70c7, 0),# East Asian ideograph + 0x22593f: (0x73e9, 0),# East Asian ideograph + 0x274e5b: (0x77ff, 0),# East Asian ideograph + 0x215940: (0x8b5a, 0),# East Asian ideograph + 0x6f564b: (0xc6df, 0),# Korean hangul + 0x395577: (0x854b, 0),# East Asian ideograph + 0x213c30: (0x5dcd, 0),# East Asian ideograph + 0x215942: (0x8b4f, 0),# East Asian ideograph + 0x6f573b: (0xc813, 0),# Korean hangul + 0x275943: (0x8bae, 0),# East Asian ideograph + 0x22472c: (0x6c54, 0),# East Asian ideograph + 0x22513c: (0x70da, 0),# East Asian ideograph + 0x6f5944: (0xccbc, 0),# Korean hangul + 0x2d435f: (0x6716, 0),# East Asian ideograph + 0x6f5b73: (0xd31f, 0),# Korean hangul + 0x235945: (0x9c51, 0),# East Asian ideograph + 0x6f564c: (0xc6e0, 0),# Korean hangul + 0x69255a: (0x30da, 0),# Katakana letter PE + 0x213c31: (0x5dd2, 0),# East Asian ideograph + 0x215947: (0x8b74, 0),# East Asian ideograph + 0x215948: (0x8b77, 0),# East Asian ideograph + 0x2e4c7b: (0x6e86, 0),# East Asian ideograph + 0x22513d: (0x70c6, 0),# East Asian ideograph + 0x235949: (0x9c63, 0),# East Asian ideograph + 0x333323: (0x4e21, 0),# East Asian ideograph + 0x22594a: (0x73f8, 0),# East Asian ideograph + 0x6f564d: (0xc6e1, 0),# Korean hangul + 0x6f5275: (0xc0db, 0),# Korean hangul + 0x27594b: (0x53d8, 0),# East Asian ideograph + 0x21594c: (0x8b93, 0),# East Asian ideograph + 0x27594d: (0x8c36, 0),# East Asian ideograph + 0x28582b: (0x7303, 0),# East Asian ideograph + 0x27594e: (0x8c17, 0),# East Asian ideograph + 0x21594f: (0x8b9a, 0),# East Asian ideograph + 0x6f564e: (0xc6e8, 0),# Korean hangul + 0x4b3c2f: (0x5dba, 0),# East Asian ideograph + 0x287030: (0x7c9d, 0),# East Asian ideograph + 0x213c33: (0x5dd6, 0),# East Asian ideograph + 0x6f5a2c: (0xcef9, 0),# Korean hangul + 0x2d3253: (0x50e3, 0),# East Asian ideograph + 0x6f4a67: (0xaf2c, 0),# Korean hangul + 0x6f5952: (0xcd78, 0),# Korean hangul + 0x333768: (0x8ff4, 0),# East Asian ideograph + 0x21373f: (0x5659, 0),# East Asian ideograph + 0x393439: (0x61c3, 0),# East Asian ideograph + 0x215954: (0x8c48, 0),# East Asian ideograph + 0x395652: (0x87a1, 0),# East Asian ideograph + 0x215955: (0x8c49, 0),# East Asian ideograph + 0x215956: (0x8c4c, 0),# East Asian ideograph + 0x396167: (0x9b2a, 0),# East Asian ideograph + 0x706b5b: (0x810e, 0),# East Asian ideograph + 0x275957: (0x7ad6, 0),# East Asian ideograph + 0x215958: (0x8c50, 0),# East Asian ideograph + 0x474931: (0x95f6, 0),# East Asian ideograph + 0x2d5959: (0x8277, 0),# East Asian ideograph + 0x213665: (0x558a, 0),# East Asian ideograph + 0x22595a: (0x73fd, 0),# East Asian ideograph + 0x6f4e32: (0xb5a4, 0),# Korean hangul + 0x217c24: (0x5aa7, 0),# East Asian ideograph + 0x2f5973: (0x9cec, 0),# East Asian ideograph + 0x6f595b: (0xcdb0, 0),# Korean hangul + 0x21595c: (0x8c62, 0),# East Asian ideograph + 0x4b4655: (0x6c17, 0),# East Asian ideograph + 0x6f595d: (0xcdcc, 0),# Korean hangul + 0x455d3e: (0x9485, 0),# East Asian ideograph + 0x6f5b74: (0xd320, 0),# Korean hangul + 0x21595e: (0x8c6b, 0),# East Asian ideograph + 0x6f5651: (0xc6f0, 0),# Korean hangul + 0x69717d: (0x9af1, 0),# East Asian ideograph + 0x2d595f: (0x732a, 0),# East Asian ideograph + 0x2d5960: (0x72b2, 0),# East Asian ideograph + 0x6f5731: (0xc7c9, 0),# Korean hangul + 0x513a47: (0x8885, 0),# East Asian ideograph + 0x6f5962: (0xce30, 0),# Korean hangul + 0x39505b: (0x9b3b, 0),# East Asian ideograph + 0x215963: (0x8c8a, 0),# East Asian ideograph + 0x6f5652: (0xc6f8, 0),# Korean hangul + 0x224479: (0x6b8d, 0),# East Asian ideograph + 0x4b5964: (0x72e2, 0),# East Asian ideograph + 0x234435: (0x92dd, 0),# East Asian ideograph + 0x2d5965: (0x72f8, 0),# East Asian ideograph + 0x2d3d48: (0x5f4a, 0),# East Asian ideograph + 0x275966: (0x7683, 0),# East Asian ideograph + 0x213f79: (0x6249, 0),# East Asian ideograph + 0x215967: (0x8c93, 0),# East Asian ideograph + 0x215968: (0x8c9d, 0),# East Asian ideograph + 0x295b77: (0x9e63, 0),# East Asian ideograph + 0x215969: (0x8c9e, 0),# East Asian ideograph + 0x217c27: (0x5a9c, 0),# East Asian ideograph + 0x6f5c2d: (0xd399, 0),# Korean hangul + 0x27596a: (0x8d1f, 0),# East Asian ideograph + 0x6f4a68: (0xaf2d, 0),# Korean hangul + 0x706b5f: (0x8112, 0),# East Asian ideograph + 0x21596b: (0x8ca2, 0),# East Asian ideograph + 0x52735d: (0x7e8a, 0),# East Asian ideograph (variant of 22735D which maps to 7E8A) + 0x695c30: (0x6923, 0),# East Asian ideograph + 0x225144: (0x7104, 0),# East Asian ideograph + 0x22596c: (0x7430, 0),# East Asian ideograph + 0x33332a: (0x4e93, 0),# East Asian ideograph + 0x21596d: (0x8cac, 0),# East Asian ideograph + 0x21596e: (0x8cab, 0),# East Asian ideograph + 0x217c28: (0x5a7c, 0),# East Asian ideograph + 0x697260: (0x9c30, 0),# East Asian ideograph + 0x27596f: (0x8d27, 0),# East Asian ideograph + 0x215970: (0x8caa, 0),# East Asian ideograph + 0x695c31: (0x6921, 0),# East Asian ideograph + 0x215971: (0x8ca7, 0),# East Asian ideograph + 0x6f5c4f: (0xd48b, 0),# Korean hangul + 0x275e46: (0x9576, 0),# East Asian ideograph + 0x215972: (0x8ca9, 0),# East Asian ideograph + 0x215973: (0x8caf, 0),# East Asian ideograph + 0x217c29: (0x5a96, 0),# East Asian ideograph + 0x6f5974: (0xce85, 0),# Korean hangul + 0x275975: (0x8d39, 0),# East Asian ideograph + 0x6f5060: (0xbbf9, 0),# Korean hangul + 0x4b465a: (0x6c32, 0),# East Asian ideograph + 0x275976: (0x8d32, 0),# East Asian ideograph + 0x234421: (0x92c6, 0),# East Asian ideograph + 0x215977: (0x8cc0, 0),# East Asian ideograph + 0x6f5656: (0xc70c, 0),# Korean hangul + 0x277748: (0x57b2, 0),# East Asian ideograph + 0x215978: (0x8cb4, 0),# East Asian ideograph + 0x275979: (0x8d34, 0),# East Asian ideograph + 0x295b2a: (0x9e46, 0),# East Asian ideograph + 0x6f503e: (0xbab0, 0),# Korean hangul + 0x21597a: (0x8cb7, 0),# East Asian ideograph + 0x234425: (0x92f4, 0),# East Asian ideograph + 0x27597b: (0x8d2c, 0),# East Asian ideograph + 0x274426: (0x4e1c, 0),# East Asian ideograph + 0x27597c: (0x8d3b, 0),# East Asian ideograph + 0x6f5657: (0xc714, 0),# Korean hangul + 0x234427: (0x92cf, 0),# East Asian ideograph + 0x292d51: (0x8511, 0),# East Asian ideograph + 0x21597d: (0x8cb8, 0),# East Asian ideograph + 0x23443a: (0x92ca, 0),# East Asian ideograph + 0x27597e: (0x8d38, 0),# East Asian ideograph + 0x23442a: (0x92b2, 0),# East Asian ideograph + 0x225148: (0x70f3, 0),# East Asian ideograph + 0x29442b: (0x9503, 0),# East Asian ideograph + 0x6f5324: (0xc120, 0),# Korean hangul + 0x6f5658: (0xc717, 0),# Korean hangul + 0x23442c: (0x92e7, 0),# East Asian ideograph + 0x294f6b: (0x98a1, 0),# East Asian ideograph + 0x696d41: (0x8ec8, 0),# East Asian ideograph + 0x23442d: (0x92c7, 0),# East Asian ideograph + 0x277d40: (0x5af1, 0),# East Asian ideograph + 0x2d3d4e: (0x7bf2, 0),# East Asian ideograph + 0x23442e: (0x92f0, 0),# East Asian ideograph + 0x6f4a69: (0xaf30, 0),# Korean hangul + 0x23442f: (0x92db, 0),# East Asian ideograph + 0x6f4e5e: (0xb768, 0),# Korean hangul + 0x234430: (0x92dc, 0),# East Asian ideograph + 0x2d4e5b: (0x945b, 0),# East Asian ideograph + 0x234431: (0x92d8, 0),# East Asian ideograph + 0x224432: (0x6b39, 0),# East Asian ideograph + 0x234433: (0x92e9, 0),# East Asian ideograph + 0x224435: (0x6b3f, 0),# East Asian ideograph + 0x274e5e: (0x783e, 0),# East Asian ideograph + 0x6f565a: (0xc720, 0),# Korean hangul + 0x27375a: (0x4e25, 0),# East Asian ideograph + 0x224437: (0x6b46, 0),# East Asian ideograph + 0x2d3d50: (0x5f5c, 0),# East Asian ideograph + 0x224438: (0x6b41, 0),# East Asian ideograph + 0x234439: (0x92d1, 0),# East Asian ideograph + 0x6f5061: (0xbbfc, 0),# Korean hangul + 0x283561: (0x64ba, 0),# East Asian ideograph + 0x22443a: (0x6b40, 0),# East Asian ideograph + 0x6f565b: (0xc721, 0),# Korean hangul + 0x22443b: (0x6b42, 0),# East Asian ideograph + 0x6f5973: (0xce84, 0),# Korean hangul + 0x6f4c7e: (0xb301, 0),# Korean hangul + 0x23443c: (0x92c2, 0),# East Asian ideograph + 0x6f4f29: (0xb810, 0),# Korean hangul + 0x454c3c: (0x7589, 0),# East Asian ideograph + 0x6f5733: (0xc7d8, 0),# Korean hangul + 0x23443e: (0x92cc, 0),# East Asian ideograph + 0x22443f: (0x6b4a, 0),# East Asian ideograph + 0x235b60: (0x9d98, 0),# East Asian ideograph + 0x2e525d: (0x715b, 0),# East Asian ideograph + 0x6f565c: (0xc724, 0),# Korean hangul + 0x234440: (0x92ef, 0),# East Asian ideograph + 0x213c41: (0x5df7, 0),# East Asian ideograph + 0x234441: (0x92e8, 0),# East Asian ideograph + 0x6f5d35: (0xd61c, 0),# Korean hangul + 0x287739: (0x8069, 0),# East Asian ideograph + 0x27587e: (0x8bff, 0),# East Asian ideograph + 0x234443: (0x92eb, 0),# East Asian ideograph + 0x695c39: (0x697e, 0),# East Asian ideograph + 0x295d36: (0x9e2c, 0),# East Asian ideograph + 0x2d4444: (0x69c5, 0),# East Asian ideograph + 0x6f565d: (0xc728, 0),# Korean hangul + 0x234445: (0x92f5, 0),# East Asian ideograph + 0x224446: (0x6b4e, 0),# East Asian ideograph (variant of 4C4446 which maps to 6B4E) + 0x6f4a6a: (0xaf34, 0),# Korean hangul + 0x234448: (0x92f2, 0),# East Asian ideograph + 0x28422b: (0x6a2f, 0),# East Asian ideograph + 0x334449: (0x6144, 0),# East Asian ideograph + 0x22444a: (0x6b57, 0),# East Asian ideograph + 0x2d444b: (0x6852, 0),# East Asian ideograph + 0x6f5530: (0xc568, 0),# Korean hangul + 0x6f513c: (0xbcc0, 0),# Korean hangul + 0x22444c: (0x6b54, 0),# East Asian ideograph + 0x23444d: (0x9307, 0),# East Asian ideograph + 0x22444e: (0x6b55, 0),# East Asian ideograph + 0x6f5c51: (0xd4cc, 0),# Korean hangul + 0x515e5d: (0x9616, 0),# East Asian ideograph + 0x2d4450: (0x8308, 0),# East Asian ideograph + 0x224451: (0x6b5c, 0),# East Asian ideograph + 0x287a56: (0x8114, 0),# East Asian ideograph + 0x6f5062: (0xbbff, 0),# Korean hangul + 0x212b38: (0xff0c, 0),# Ideographic variant comma + 0x225150: (0x70f4, 0),# East Asian ideograph + 0x23554f: (0x9b10, 0),# East Asian ideograph + 0x224453: (0x6b5e, 0),# East Asian ideograph + 0x6f5b77: (0xd328, 0),# Korean hangul + 0x224454: (0x6b60, 0),# East Asian ideograph + 0x22625d: (0x777e, 0),# East Asian ideograph + 0x217c34: (0x5aae, 0),# East Asian ideograph + 0x4b4456: (0x6813, 0),# East Asian ideograph + 0x6f5734: (0xc800, 0),# Korean hangul + 0x294457: (0x9529, 0),# East Asian ideograph + 0x212b39: (0xff1b, 0),# Ideographic semicolon + 0x234458: (0x931f, 0),# East Asian ideograph + 0x6f5661: (0xc73c, 0),# Korean hangul + 0x23445a: (0x9331, 0),# East Asian ideograph + 0x4d5f70: (0x9f44, 0),# East Asian ideograph + 0x22445b: (0x6b6b, 0),# East Asian ideograph + 0x22736b: (0x7e95, 0),# East Asian ideograph + 0x22445d: (0x6b6c, 0),# East Asian ideograph + 0x4c284c: (0x53a9, 0),# East Asian ideograph + 0x4b3c33: (0x5dcc, 0),# East Asian ideograph + 0x215e60: (0x95bb, 0),# East Asian ideograph + 0x23445f: (0x930f, 0),# East Asian ideograph + 0x6f4a6b: (0xaf3c, 0),# Korean hangul + 0x224461: (0x6b71, 0),# East Asian ideograph + 0x6f5d2c: (0xd600, 0),# Korean hangul + 0x234462: (0x9302, 0),# East Asian ideograph + 0x6f5170: (0xbe4b, 0),# Korean hangul + 0x274463: (0x6761, 0),# East Asian ideograph + 0x234464: (0x9324, 0),# East Asian ideograph + 0x2d5b2f: (0x8eb1, 0),# East Asian ideograph + 0x214466: (0x6885, 0),# East Asian ideograph + 0x274468: (0x67ad, 0),# East Asian ideograph + 0x294f77: (0x989f, 0),# East Asian ideograph + 0x6f5221: (0xbe70, 0),# Korean hangul + 0x6f4b7a: (0xb11d, 0),# Korean hangul + 0x274469: (0x6800, 0),# East Asian ideograph + 0x2d5f73: (0x975a, 0),# Unrelated variant of EACC 234C76 which maps to 975A + 0x23446a: (0x9323, 0),# East Asian ideograph + 0x22446b: (0x6b7e, 0),# East Asian ideograph + 0x212b3d: (0xff01, 0),# Ideographic exclamation point + 0x225155: (0x7111, 0),# East Asian ideograph + 0x23446c: (0x9321, 0),# East Asian ideograph + 0x4c683e: (0x79eb, 0),# East Asian ideograph + 0x27446d: (0x5f03, 0),# East Asian ideograph + 0x6f5222: (0xbe71, 0),# Korean hangul + 0x27446e: (0x6816, 0),# East Asian ideograph + 0x2d4e79: (0x5fa1, 0),# East Asian ideograph + 0x6f5735: (0xc801, 0),# Korean hangul + 0x2d4b43: (0x746f, 0),# East Asian ideograph + 0x274471: (0x680b, 0),# East Asian ideograph + 0x4b5a68: (0x8df5, 0),# East Asian ideograph (variant of 275A68 which maps to 8DF5) + 0x234472: (0x9301, 0),# East Asian ideograph + 0x6f5223: (0xbe73, 0),# Korean hangul + 0x6f5326: (0xc124, 0),# Korean hangul + 0x224473: (0x6b84, 0),# East Asian ideograph + 0x2d3332: (0x5190, 0),# East Asian ideograph + 0x234474: (0x9315, 0),# East Asian ideograph + 0x47366f: (0x8d4d, 0),# East Asian ideograph + 0x294475: (0x9494, 0),# East Asian ideograph + 0x235556: (0x9b1d, 0),# East Asian ideograph + 0x234476: (0x9329, 0),# East Asian ideograph + 0x23386f: (0x8dba, 0),# East Asian ideograph + 0x232f21: (0x88fc, 0),# East Asian ideograph + 0x2d4a26: (0x713c, 0),# East Asian ideograph + 0x287035: (0x7c74, 0),# East Asian ideograph + 0x6f5224: (0xbe74, 0),# Korean hangul + 0x234478: (0x932e, 0),# East Asian ideograph + 0x234479: (0x932a, 0),# East Asian ideograph + 0x6f4a6c: (0xaf3d, 0),# Korean hangul + 0x27447a: (0x67a3, 0),# East Asian ideograph + 0x6f5d2d: (0xd601, 0),# Korean hangul + 0x22447b: (0x6b95, 0),# East Asian ideograph + 0x21447c: (0x6912, 0),# East Asian ideograph + 0x216f27: (0x5423, 0),# East Asian ideograph + 0x213c4d: (0x5e11, 0),# East Asian ideograph + 0x2d447d: (0x684c, 0),# East Asian ideograph + 0x2d3d5e: (0x9af4, 0),# East Asian ideograph + 0x23447e: (0x9335, 0),# East Asian ideograph + 0x706058: (0x562d, 0),# East Asian ideograph + 0x273671: (0x54df, 0),# East Asian ideograph + 0x6f5226: (0xbe7b, 0),# Korean hangul + 0x232f2d: (0x8909, 0),# East Asian ideograph + 0x23444c: (0x9303, 0),# East Asian ideograph + 0x4d5b35: (0x9dab, 0),# East Asian ideograph + 0x232f2f: (0x8918, 0),# East Asian ideograph + 0x6f5b79: (0xd32c, 0),# Korean hangul + 0x213d3c: (0x5f15, 0),# East Asian ideograph + 0x6f566a: (0xc774, 0),# Korean hangul + 0x6f5227: (0xbe7c, 0),# Korean hangul + 0x213c4f: (0x5e25, 0),# East Asian ideograph + 0x2d3632: (0x8a7b, 0),# East Asian ideograph + 0x346622: (0x589d, 0),# East Asian ideograph + 0x295c47: (0x9e68, 0),# East Asian ideograph + 0x293a2e: (0x8dc4, 0),# East Asian ideograph + 0x2e6f35: (0x6cd4, 0),# East Asian ideograph + 0x6f566b: (0xc775, 0),# Korean hangul + 0x6f5228: (0xbe7d, 0),# Korean hangul + 0x22516d: (0x7134, 0),# East Asian ideograph + 0x23444e: (0x931e, 0),# East Asian ideograph + 0x2f5d49: (0x9ea4, 0),# East Asian ideograph + 0x2e313a: (0x6332, 0),# East Asian ideograph + 0x216f3a: (0x546d, 0),# East Asian ideograph + 0x6f566c: (0xc778, 0),# Korean hangul + 0x282458: (0x5d03, 0),# East Asian ideograph + 0x216f3b: (0x5491, 0),# East Asian ideograph + 0x6f5229: (0xbe80, 0),# Korean hangul + 0x4d5f7b: (0x97f2, 0),# East Asian ideograph + 0x222f3d: (0x6201, 0),# East Asian ideograph + 0x295c49: (0x9e47, 0),# East Asian ideograph + 0x4b577e: (0x7e7f, 0),# East Asian ideograph + 0x217c41: (0x5ac4, 0),# East Asian ideograph + 0x215a28: (0x8cc2, 0),# East Asian ideograph + 0x697265: (0x9c5a, 0),# East Asian ideograph + 0x216f42: (0x5494, 0),# East Asian ideograph + 0x232f43: (0x8915, 0),# East Asian ideograph + 0x333344: (0x51db, 0),# East Asian ideograph + 0x6f566e: (0xc77d, 0),# Korean hangul + 0x274340: (0x6656, 0),# East Asian ideograph + 0x6f522b: (0xbe8c, 0),# Korean hangul + 0x213c53: (0x5e36, 0),# East Asian ideograph + 0x4c5175: (0x8315, 0),# East Asian ideograph + 0x225e37: (0x75a2, 0),# East Asian ideograph + 0x222f47: (0x6214, 0),# East Asian ideograph + 0x2d3921: (0x591f, 0),# East Asian ideograph + 0x233345: (0x8ae2, 0),# East Asian ideograph + 0x216f49: (0x548d, 0),# East Asian ideograph + 0x355d5c: (0x8c8e, 0),# East Asian ideograph + 0x6f566f: (0xc783, 0),# Korean hangul + 0x216f4a: (0x5463, 0),# East Asian ideograph + 0x6f522c: (0xbe8f, 0),# Korean hangul + 0x6f5737: (0xc808, 0),# Korean hangul + 0x225160: (0x70f6, 0),# East Asian ideograph + 0x6f5670: (0xc784, 0),# Korean hangul + 0x234453: (0x931d, 0),# East Asian ideograph + 0x216f7b: (0x551a, 0),# East Asian ideograph + 0x6f5d68: (0xd744, 0),# Korean hangul + 0x6f5671: (0xc785, 0),# Korean hangul + 0x6f522e: (0xbe91, 0),# Korean hangul + 0x294427: (0x94d7, 0),# East Asian ideograph + 0x234454: (0x92fa, 0),# East Asian ideograph + 0x2d3d67: (0x9015, 0),# East Asian ideograph + 0x6f4a6e: (0xaf41, 0),# Korean hangul + 0x222f56: (0x6223, 0),# East Asian ideograph + 0x6f4f43: (0xb8e8, 0),# Korean hangul + 0x6f5d2f: (0xd608, 0),# Korean hangul + 0x335561: (0x8462, 0),# East Asian ideograph + 0x216f58: (0x54a1, 0),# East Asian ideograph + 0x6f5672: (0xc787, 0),# Korean hangul + 0x274344: (0x6682, 0),# East Asian ideograph + 0x6f522f: (0xbe98, 0),# Korean hangul + 0x213c57: (0x5e3d, 0),# East Asian ideograph + 0x4b356a: (0x55ec, 0),# East Asian ideograph + 0x23223c: (0x83f3, 0),# East Asian ideograph + 0x696f5b: (0x958a, 0),# East Asian ideograph + 0x273238: (0x4fa6, 0),# East Asian ideograph + 0x695c4f: (0x69dd, 0),# East Asian ideograph + 0x222f5d: (0x6224, 0),# East Asian ideograph + 0x6f5673: (0xc788, 0),# Korean hangul + 0x216f5e: (0x54be, 0),# East Asian ideograph + 0x6f5230: (0xbea8, 0),# Korean hangul + 0x213c58: (0x5e40, 0),# East Asian ideograph + 0x692433: (0x3053, 0),# Hiragana letter KO + 0x292f60: (0x88e2, 0),# East Asian ideograph + 0x6f5066: (0xbc0b, 0),# Korean hangul + 0x4c2f61: (0x622c, 0),# East Asian ideograph + 0x4b4235: (0x6442, 0),# East Asian ideograph + 0x6f5b7b: (0xd338, 0),# Korean hangul + 0x6f5c32: (0xd3ab, 0),# Korean hangul + 0x6f5231: (0xbed0, 0),# Korean hangul + 0x213c59: (0x5e4c, 0),# East Asian ideograph + 0x216f64: (0x54b5, 0),# East Asian ideograph + 0x225e2e: (0x7594, 0),# East Asian ideograph + 0x6f5738: (0xc80a, 0),# Korean hangul + 0x2d3f24: (0x661a, 0),# East Asian ideograph + 0x226f66: (0x7cce, 0),# East Asian ideograph + 0x4b4236: (0x643a, 0),# East Asian ideograph + 0x6f5a30: (0xcf04, 0),# Korean hangul + 0x2d4a34: (0x718f, 0),# East Asian ideograph + 0x226f68: (0x7cc8, 0),# East Asian ideograph + 0x6f5a28: (0xcef4, 0),# Korean hangul + 0x6f5232: (0xbed1, 0),# Korean hangul + 0x222f69: (0x97ef, 0),# East Asian ideograph + 0x333428: (0x523c, 0),# East Asian ideograph + 0x6f5676: (0xc78e, 0),# Korean hangul + 0x216f6d: (0x54ae, 0),# East Asian ideograph + 0x6f5233: (0xbed4, 0),# Korean hangul + 0x2d3d6c: (0x5f93, 0),# East Asian ideograph + 0x6f4a6f: (0xaf42, 0),# Korean hangul + 0x232f6f: (0x894f, 0),# East Asian ideograph + 0x2d5b42: (0x8f19, 0),# East Asian ideograph + 0x393e7d: (0x7609, 0),# East Asian ideograph + 0x695c53: (0x6a2e, 0),# East Asian ideograph + 0x225167: (0x70ef, 0),# East Asian ideograph + 0x235566: (0x9b23, 0),# East Asian ideograph + 0x216f71: (0x54bf, 0),# East Asian ideograph + 0x6f5677: (0xc655, 0),# Korean hangul + 0x292f72: (0x88e5, 0),# East Asian ideograph + 0x6f5234: (0xbed7, 0),# Korean hangul + 0x213c5c: (0x5e57, 0),# East Asian ideograph + 0x4d2f73: (0x7e5d, 0),# East Asian ideograph + 0x6f4f4c: (0xb93c, 0),# Korean hangul + 0x2d5b43: (0x8efd, 0),# East Asian ideograph + 0x226f75: (0x7cd7, 0),# East Asian ideograph + 0x225168: (0x7100, 0),# East Asian ideograph + 0x33334e: (0x51fe, 0),# East Asian ideograph + 0x225a21: (0x7428, 0),# East Asian ideograph + 0x215a22: (0x8cc7, 0),# East Asian ideograph + 0x23445b: (0x9306, 0),# East Asian ideograph + 0x215a23: (0x8cca, 0),# East Asian ideograph + 0x6f536c: (0xc274, 0),# Korean hangul + 0x4b312d: (0x4f2b, 0),# East Asian ideograph + 0x235a24: (0x9d04, 0),# East Asian ideograph + 0x21322a: (0x5003, 0),# East Asian ideograph + 0x222f7a: (0x6250, 0),# East Asian ideograph + 0x215a25: (0x8cc4, 0),# East Asian ideograph + 0x6f5d60: (0xd71c, 0),# Korean hangul + 0x335568: (0x8406, 0),# East Asian ideograph + 0x226f7b: (0x7ce8, 0),# East Asian ideograph (variant of 4C6F7B which maps to 7CE8) + 0x6f5b7c: (0xd339, 0),# Korean hangul + 0x275a26: (0x8d40, 0),# East Asian ideograph + 0x6f5679: (0xc790, 0),# Korean hangul + 0x2e2f7c: (0x634d, 0),# East Asian ideograph + 0x215a27: (0x8cc3, 0),# East Asian ideograph + 0x213c5e: (0x5e63, 0),# East Asian ideograph + 0x276121: (0x998a, 0),# East Asian ideograph + 0x2d6f7d: (0x8123, 0),# East Asian ideograph + 0x235a28: (0x9d07, 0),# East Asian ideograph + 0x2d4472: (0x68ca, 0),# East Asian ideograph + 0x215a29: (0x8cd3, 0),# East Asian ideograph + 0x215a2a: (0x8cd1, 0),# East Asian ideograph + 0x217d2e: (0x5b0d, 0),# East Asian ideograph + 0x215a2b: (0x8cd2, 0),# East Asian ideograph + 0x395063: (0x9939, 0),# East Asian ideograph + 0x6f567a: (0xc791, 0),# Korean hangul + 0x275a2c: (0x8d54, 0),# East Asian ideograph + 0x23445d: (0x92f9, 0),# East Asian ideograph + 0x215a2d: (0x8ce6, 0),# East Asian ideograph + 0x295c57: (0x9e6b, 0),# East Asian ideograph + 0x215a2f: (0x8ce3, 0),# East Asian ideograph + 0x213076: (0x4ed9, 0),# East Asian ideograph + 0x215a30: (0x8ce2, 0),# East Asian ideograph + 0x4b3c38: (0x949c, 0),# East Asian ideograph + 0x275a31: (0x8d31, 0),# East Asian ideograph + 0x276123: (0x9992, 0),# East Asian ideograph + 0x225a32: (0x743b, 0),# East Asian ideograph + 0x4b3130: (0x4fab, 0),# East Asian ideograph + 0x6f4a70: (0xaf43, 0),# Korean hangul + 0x215a33: (0x8cdc, 0),# East Asian ideograph + 0x275a34: (0x8d28, 0),# East Asian ideograph + 0x215a35: (0x8ced, 0),# East Asian ideograph + 0x2d4a3b: (0x4e89, 0),# East Asian ideograph + 0x225a36: (0x7444, 0),# East Asian ideograph + 0x275a37: (0x8d5b, 0),# East Asian ideograph + 0x215a38: (0x8cfa, 0),# East Asian ideograph + 0x215a39: (0x8d05, 0),# East Asian ideograph + 0x293a40: (0x8df8, 0),# East Asian ideograph + 0x23556c: (0x9b29, 0),# East Asian ideograph + 0x215a3a: (0x8cfc, 0),# East Asian ideograph + 0x215a3b: (0x8d08, 0),# East Asian ideograph (variant of 4B5A3B which maps to 8D08) + 0x6f5352: (0xc1f0, 0),# Korean hangul + 0x215a3c: (0x8d0b, 0),# East Asian ideograph + 0x215a3d: (0x8d0a, 0),# East Asian ideograph + 0x215a3e: (0x8d0f, 0),# East Asian ideograph + 0x6f5b7d: (0xd33b, 0),# Korean hangul + 0x215a3f: (0x8d0d, 0),# East Asian ideograph + 0x6f567e: (0xc7a0, 0),# Korean hangul + 0x213d40: (0x5f1b, 0),# East Asian ideograph + 0x215a40: (0x8d13, 0),# East Asian ideograph + 0x276126: (0x990d, 0),# East Asian ideograph + 0x215a41: (0x8d16, 0),# East Asian ideograph + 0x215a42: (0x8d1b, 0),# East Asian ideograph + 0x295c5b: (0x9e6c, 0),# East Asian ideograph + 0x225a43: (0x7458, 0),# East Asian ideograph + 0x235a44: (0x9d1d, 0),# East Asian ideograph + 0x225a45: (0x7442, 0),# East Asian ideograph + 0x6f5a46: (0xcf71, 0),# Korean hangul + 0x2d3d75: (0x60ea, 0),# East Asian ideograph + 0x2e4174: (0x6aa9, 0),# East Asian ideograph + 0x225a47: (0x744b, 0),# East Asian ideograph + 0x215a48: (0x8d70, 0),# East Asian ideograph + 0x6f5660: (0xc737, 0),# Korean hangul + 0x337345: (0x9f67, 0),# East Asian ideograph + 0x6f5a49: (0xcf80, 0),# Korean hangul + 0x225a4a: (0x744a, 0),# East Asian ideograph + 0x213c65: (0x5e74, 0),# East Asian ideograph + 0x6f5a4b: (0xcf8c, 0),# Korean hangul + 0x6f5938: (0xcc71, 0),# Korean hangul + 0x2d3d76: (0x5fb4, 0),# East Asian ideograph + 0x2d5476: (0x8318, 0),# East Asian ideograph + 0x6f5a4c: (0xcf8d, 0),# Korean hangul + 0x6f5573: (0xc628, 0),# Korean hangul + 0x6f5a4d: (0xcfa1, 0),# Korean hangul + 0x2d5a4e: (0x8d82, 0),# East Asian ideograph + 0x215a4f: (0x8d99, 0),# East Asian ideograph + 0x4b3864: (0x58c7, 0),# East Asian ideograph + 0x275a50: (0x8d76, 0),# East Asian ideograph + 0x2d392f: (0x7287, 0),# East Asian ideograph + 0x6f5a51: (0xcfe0, 0),# Korean hangul + 0x704c2a: (0x915e, 0),# East Asian ideograph + 0x224e37: (0x6faf, 0),# East Asian ideograph + 0x6f5a52: (0xcfe1, 0),# Korean hangul + 0x6f5c58: (0xd515, 0),# Korean hangul + 0x215a53: (0x8da8, 0),# East Asian ideograph + 0x6f492e: (0xac86, 0),# Korean hangul + 0x6f537d: (0xc2b4, 0),# Korean hangul + 0x6f523f: (0xbf40, 0),# Korean hangul + 0x225a55: (0x7457, 0),# East Asian ideograph + 0x225a56: (0x7451, 0),# East Asian ideograph + 0x6f5069: (0xbc0f, 0),# Korean hangul + 0x6f5a57: (0xcff5, 0),# Korean hangul + 0x293a46: (0x8e70, 0),# East Asian ideograph + 0x23512f: (0x9916, 0),# East Asian ideograph + 0x4b3642: (0x8bf6, 0),# East Asian ideograph + 0x2e4e41: (0x7032, 0),# East Asian ideograph + 0x215a59: (0x8ddb, 0),# East Asian ideograph + 0x6f5240: (0xbf41, 0),# Korean hangul + 0x706131: (0x5c9c, 0),# East Asian ideograph + 0x4b357b: (0x54cc, 0),# East Asian ideograph + 0x225a5a: (0x745d, 0),# East Asian ideograph + 0x225a5b: (0x7454, 0),# East Asian ideograph + 0x225174: (0x7131, 0),# East Asian ideograph + 0x235573: (0x9b2d, 0),# East Asian ideograph + 0x235130: (0x9914, 0),# East Asian ideograph + 0x33386e: (0x576f, 0),# East Asian ideograph + 0x6f5a5e: (0xd038, 0),# Korean hangul + 0x6f5241: (0xbf44, 0),# Korean hangul + 0x2d5a5f: (0x8e5f, 0),# East Asian ideograph + 0x6f5949: (0xcd09, 0),# Korean hangul + 0x225a60: (0x746d, 0),# East Asian ideograph + 0x277239: (0x54d4, 0),# East Asian ideograph + 0x225a61: (0x7462, 0),# East Asian ideograph + 0x235574: (0x9b2e, 0),# East Asian ideograph (not in Unicode) + 0x29506c: (0x996b, 0),# East Asian ideograph + 0x6f532f: (0xc131, 0),# Korean hangul + 0x215a62: (0x8df3, 0),# East Asian ideograph + 0x215a63: (0x8dfa, 0),# East Asian ideograph + 0x6f5242: (0xbf48, 0),# Korean hangul + 0x27612d: (0x51af, 0),# East Asian ideograph + 0x6f5a64: (0xd07d, 0),# Korean hangul + 0x4c796b: (0x815f, 0),# East Asian ideograph + 0x235a65: (0x9d30, 0),# East Asian ideograph + 0x275021: (0x7b0b, 0),# East Asian ideograph + 0x235132: (0x9911, 0),# East Asian ideograph + 0x2f3b63: (0x5e32, 0),# East Asian ideograph (not in Unicode) + 0x2d4a45: (0x5c12, 0),# East Asian ideograph + 0x275a68: (0x8df5, 0),# East Asian ideograph + 0x6f5243: (0xbf50, 0),# Korean hangul + 0x213c6b: (0x5e7e, 0),# East Asian ideograph + 0x215a69: (0x8e22, 0),# East Asian ideograph + 0x225a6a: (0x7471, 0),# East Asian ideograph + 0x225a6b: (0x7468, 0),# East Asian ideograph + 0x4b5936: (0x8b20, 0),# East Asian ideograph + 0x4d5a6c: (0x9d46, 0),# East Asian ideograph + 0x216035: (0x97fb, 0),# East Asian ideograph + 0x2d4a46: (0x58bb, 0),# East Asian ideograph + 0x6f5a6d: (0xd0b9, 0),# Korean hangul + 0x4b4857: (0x6f22, 0),# East Asian ideograph + 0x235a70: (0x9d5c, 0),# East Asian ideograph + 0x224d35: (0x6f90, 0),# East Asian ideograph + 0x282951: (0x5f2a, 0),# East Asian ideograph + 0x275a71: (0x8e0a, 0),# East Asian ideograph + 0x6f5a72: (0xd0c4, 0),# Korean hangul + 0x6f5245: (0xbf55, 0),# Korean hangul + 0x276130: (0x9a6e, 0),# East Asian ideograph + 0x6f4c27: (0xb141, 0),# Korean hangul + 0x695a73: (0x6683, 0),# East Asian ideograph + 0x454b7a: (0x7523, 0),# East Asian ideograph + 0x6f5a74: (0xd0c9, 0),# Korean hangul + 0x2d377c: (0x962c, 0),# East Asian ideograph + 0x215a75: (0x8e4b, 0),# East Asian ideograph + 0x295822: (0x9cae, 0),# East Asian ideograph + 0x6f5a76: (0xd0d1, 0),# Korean hangul + 0x6f5a77: (0xd0d3, 0),# Korean hangul + 0x6f5246: (0xbfb0, 0),# Korean hangul + 0x234522: (0x9314, 0),# East Asian ideograph + 0x225a78: (0x7460, 0),# East Asian ideograph + 0x225a79: (0x7472, 0),# East Asian ideograph + 0x225a7a: (0x7484, 0),# East Asian ideograph + 0x224525: (0x6b99, 0),# East Asian ideograph + 0x224d37: (0x6f8d, 0),# East Asian ideograph + 0x225a7b: (0x7487, 0),# East Asian ideograph + 0x274526: (0x6781, 0),# East Asian ideograph + 0x6f5a7c: (0xd0e0, 0),# Korean hangul + 0x6f5247: (0xbfc0, 0),# Korean hangul + 0x276132: (0x9a73, 0),# East Asian ideograph + 0x6f5a7d: (0xd0e4, 0),# Korean hangul + 0x234528: (0x92fe, 0),# East Asian ideograph + 0x215a7e: (0x8e7a, 0),# East Asian ideograph + 0x224529: (0x6b9b, 0),# East Asian ideograph + 0x27452a: (0x6768, 0),# East Asian ideograph + 0x3f4c3c: (0x7582, 0),# East Asian ideograph + 0x27452b: (0x6862, 0),# East Asian ideograph + 0x2e7062: (0x7d4f, 0),# East Asian ideograph + 0x6f5248: (0xbfc5, 0),# Korean hangul + 0x276133: (0x9a7b, 0),# East Asian ideograph + 0x4b3b61: (0x5c64, 0),# East Asian ideograph + 0x69242b: (0x304b, 0),# Hiragana letter KA + 0x27452d: (0x4e1a, 0),# East Asian ideograph + 0x2d3931: (0x67f0, 0),# East Asian ideograph + 0x2d7e6a: (0x51a4, 0),# East Asian ideograph + 0x27452f: (0x67ab, 0),# East Asian ideograph + 0x6f5c5a: (0xd53d, 0),# Korean hangul + 0x224d39: (0x6f92, 0),# East Asian ideograph + 0x692434: (0x3054, 0),# Hiragana letter GO + 0x6f5249: (0xbfcc, 0),# Korean hangul + 0x234531: (0x9341, 0),# East Asian ideograph + 0x217c60: (0x5adc, 0),# East Asian ideograph + 0x273764: (0x5631, 0),# East Asian ideograph + 0x234532: (0x9319, 0),# East Asian ideograph + 0x6f506b: (0xbbb4, 0),# Korean hangul + 0x4b4534: (0x6994, 0),# East Asian ideograph (variant of 214534) + 0x224d3a: (0x6f89, 0),# East Asian ideograph + 0x234535: (0x934c, 0),# East Asian ideograph + 0x6f524a: (0xbfcd, 0),# Korean hangul + 0x224536: (0x6ba2, 0),# East Asian ideograph + 0x6f4c28: (0xb144, 0),# Korean hangul + 0x21382f: (0x577c, 0),# East Asian ideograph + 0x274537: (0x8363, 0),# East Asian ideograph + 0x224538: (0x6baa, 0),# East Asian ideograph + 0x274539: (0x6784, 0),# East Asian ideograph + 0x235b6a: (0x9da1, 0),# East Asian ideograph + 0x2d453a: (0x6760, 0),# East Asian ideograph + 0x22453b: (0x6bad, 0),# East Asian ideograph + 0x234471: (0x9340, 0),# East Asian ideograph + 0x692531: (0x30b1, 0),# Katakana letter KE + 0x22453d: (0x6bb0, 0),# East Asian ideograph + 0x6f4f66: (0xb9c8, 0),# Korean hangul + 0x6f5663: (0xc740, 0),# Korean hangul + 0x274871: (0x6d47, 0),# East Asian ideograph + 0x224d3c: (0x6f8c, 0),# East Asian ideograph + 0x22453f: (0x6bb3, 0),# East Asian ideograph + 0x274540: (0x67aa, 0),# East Asian ideograph + 0x234541: (0x9379, 0),# East Asian ideograph + 0x4b3144: (0x4f36, 0),# East Asian ideograph (variant of 213144 which maps to 4F36) + 0x295c6c: (0x9e6a, 0),# East Asian ideograph + 0x2d4543: (0x6901, 0),# East Asian ideograph + 0x224d3d: (0x6f62, 0),# East Asian ideograph (variant of 4C4D3D which maps to 6F62) + 0x33513c: (0x7d4c, 0),# East Asian ideograph + 0x214544: (0x6a23, 0),# East Asian ideograph + 0x2d5036: (0x84d1, 0),# East Asian ideograph + 0x6f524d: (0xbfdc, 0),# Korean hangul + 0x234a5e: (0x967f, 0),# East Asian ideograph + 0x223553: (0x6509, 0),# East Asian ideograph + 0x4b7577: (0x57d3, 0),# East Asian ideograph + 0x225e4a: (0x75c2, 0),# East Asian ideograph + 0x214546: (0x6a01, 0),# East Asian ideograph + 0x2d3932: (0x7ad2, 0),# East Asian ideograph + 0x274547: (0x6807, 0),# East Asian ideograph + 0x234548: (0x935c, 0),# East Asian ideograph + 0x6f5c5b: (0xd540, 0),# Korean hangul + 0x216037: (0x9801, 0),# East Asian ideograph + 0x274549: (0x67a2, 0),# East Asian ideograph + 0x6f524e: (0xbfdd, 0),# Korean hangul + 0x27454a: (0x697c, 0),# East Asian ideograph + 0x213833: (0x57ae, 0),# East Asian ideograph + 0x4b602d: (0x9771, 0),# East Asian ideograph + 0x2d5b5d: (0x8fa2, 0),# East Asian ideograph + 0x2d3944: (0x511e, 0),# East Asian ideograph + 0x27454c: (0x6868, 0),# East Asian ideograph + 0x23454d: (0x9347, 0),# East Asian ideograph + 0x293373: (0x8c21, 0),# East Asian ideograph + 0x27454e: (0x4e50, 0),# East Asian ideograph + 0x6f524f: (0xbfe1, 0),# Korean hangul + 0x27454f: (0x679e, 0),# East Asian ideograph + 0x2d3f2a: (0x5abf, 0),# East Asian ideograph + 0x2d4550: (0x58ab, 0),# East Asian ideograph + 0x2d5b5e: (0x8fa7, 0),# East Asian ideograph + 0x234551: (0x937a, 0),# East Asian ideograph + 0x29582c: (0x9cb1, 0),# East Asian ideograph + 0x274553: (0x692d, 0),# East Asian ideograph + 0x27767a: (0x57da, 0),# East Asian ideograph + 0x224554: (0x6bc8, 0),# East Asian ideograph + 0x274555: (0x6811, 0),# East Asian ideograph + 0x234556: (0x937c, 0),# East Asian ideograph + 0x293a57: (0x8dfb, 0),# East Asian ideograph + 0x274557: (0x6866, 0),# East Asian ideograph + 0x29582d: (0x9cb7, 0),# East Asian ideograph + 0x235140: (0x991c, 0),# East Asian ideograph + 0x274558: (0x6734, 0),# East Asian ideograph + 0x474e5c: (0x97de, 0),# East Asian ideograph (variant of 234E5C which maps to 97DE) + 0x274366: (0x80e7, 0),# East Asian ideograph + 0x6f5251: (0xc059, 0),# Korean hangul + 0x27613c: (0x9a86, 0),# East Asian ideograph + 0x2d3261: (0x5039, 0),# East Asian ideograph + 0x27455b: (0x6865, 0),# East Asian ideograph + 0x275030: (0x8303, 0),# East Asian ideograph + 0x23455c: (0x9377, 0),# East Asian ideograph + 0x6f5172: (0xbe4e, 0),# Korean hangul + 0x27455d: (0x673a, 0),# East Asian ideograph + 0x213f50: (0x61ca, 0),# East Asian ideograph + 0x6f5252: (0xc05c, 0),# Korean hangul + 0x23455e: (0x9358, 0),# East Asian ideograph + 0x2d5f63: (0x873a, 0),# East Asian ideograph + 0x27455f: (0x6863, 0),# East Asian ideograph + 0x224560: (0x6bda, 0),# East Asian ideograph + 0x33327a: (0x5150, 0),# East Asian ideograph + 0x274561: (0x68c0, 0),# East Asian ideograph + 0x29582f: (0x9cb5, 0),# East Asian ideograph + 0x274562: (0x6867, 0),# East Asian ideograph + 0x3f347d: (0x84e1, 0),# East Asian ideograph + 0x6f5253: (0xc060, 0),# Korean hangul + 0x274563: (0x67e0, 0),# East Asian ideograph + 0x235131: (0x9917, 0),# East Asian ideograph + 0x234564: (0x9376, 0),# East Asian ideograph + 0x274565: (0x67dc, 0),# East Asian ideograph + 0x213230: (0x5065, 0),# East Asian ideograph + 0x224a4c: (0x6e1f, 0),# East Asian ideograph + 0x274566: (0x69db, 0),# East Asian ideograph + 0x294567: (0x9537, 0),# East Asian ideograph + 0x6f5254: (0xc068, 0),# Korean hangul + 0x27613f: (0x9a88, 0),# East Asian ideograph + 0x6f4c2a: (0xb151, 0),# Korean hangul + 0x2d4569: (0x6ac9, 0),# East Asian ideograph + 0x4b314c: (0x5f95, 0),# East Asian ideograph + 0x6f573f: (0xc81c, 0),# Korean hangul + 0x23456a: (0x9348, 0),# East Asian ideograph + 0x27325d: (0x4ef7, 0),# East Asian ideograph + 0x27456b: (0x691f, 0),# East Asian ideograph + 0x213f3b: (0x616b, 0),# East Asian ideograph + 0x295831: (0x9cb6, 0),# East Asian ideograph + 0x27456c: (0x6809, 0),# East Asian ideograph + 0x2e4e56: (0x9800, 0),# East Asian ideograph + 0x6f5255: (0xc069, 0),# Korean hangul + 0x27456d: (0x6a79, 0),# East Asian ideograph + 0x276140: (0x9a91, 0),# East Asian ideograph + 0x23447b: (0x933f, 0),# East Asian ideograph + 0x27456e: (0x680f, 0),# East Asian ideograph + 0x27456f: (0x6a31, 0),# East Asian ideograph + 0x224570: (0x6bea, 0),# East Asian ideograph + 0x3f456d: (0x8263, 0),# East Asian ideograph + 0x235145: (0x9927, 0),# East Asian ideograph + 0x274571: (0x6984, 0),# East Asian ideograph + 0x2d4a58: (0x7f9d, 0),# East Asian ideograph + 0x6f5256: (0xc090, 0),# Korean hangul + 0x217c6d: (0x5ae5, 0),# East Asian ideograph + 0x286540: (0x7800, 0),# East Asian ideograph + 0x23447c: (0x933a, 0),# East Asian ideograph + 0x234573: (0x9360, 0),# East Asian ideograph + 0x2d4574: (0x5ffb, 0),# East Asian ideograph + 0x6f5d37: (0xd639, 0),# Korean hangul + 0x233021: (0x894d, 0),# East Asian ideograph + 0x6f5257: (0xc091, 0),# Korean hangul + 0x234577: (0x936e, 0),# East Asian ideograph + 0x287022: (0x7cc1, 0),# East Asian ideograph + 0x274578: (0x94a6, 0),# East Asian ideograph + 0x6f5844: (0xc9f8, 0),# Korean hangul + 0x213023: (0x4e03, 0),# East Asian ideograph + 0x225b2d: (0x7486, 0),# East Asian ideograph + 0x234579: (0x938f, 0),# East Asian ideograph + 0x233024: (0x895a, 0),# East Asian ideograph + 0x293a5e: (0x8df9, 0),# East Asian ideograph + 0x23457a: (0x93ac, 0),# East Asian ideograph + 0x6f5c5d: (0xd54c, 0),# Korean hangul + 0x233025: (0x895e, 0),# East Asian ideograph + 0x335147: (0x7eee, 0),# East Asian ideograph + 0x23457b: (0x9395, 0),# East Asian ideograph + 0x213026: (0x4e0a, 0),# East Asian ideograph + 0x4b4e7b: (0x7985, 0),# East Asian ideograph (variant of 274E7B which maps to 7985) + 0x6f5258: (0xc094, 0),# Korean hangul + 0x27457c: (0x6b27, 0),# East Asian ideograph + 0x295175: (0x9993, 0),# East Asian ideograph + 0x21383d: (0x57df, 0),# East Asian ideograph + 0x2e3028: (0x640b, 0),# East Asian ideograph + 0x27457e: (0x6b24, 0),# East Asian ideograph + 0x213029: (0x4e10, 0),# East Asian ideograph + 0x293a5f: (0x8dde, 0),# East Asian ideograph + 0x2d4a5b: (0x7282, 0),# East Asian ideograph + 0x22302b: (0x625a, 0),# East Asian ideograph + 0x6f5259: (0xc098, 0),# Korean hangul + 0x276144: (0x817e, 0),# East Asian ideograph + 0x21302c: (0x4e19, 0),# East Asian ideograph + 0x21383e: (0x580a, 0),# East Asian ideograph + 0x22302d: (0x6266, 0),# East Asian ideograph + 0x22702e: (0x7cf0, 0),# East Asian ideograph + 0x6f5664: (0xc744, 0),# Korean hangul + 0x293a60: (0x8e2c, 0),# East Asian ideograph + 0x21302f: (0x4e18, 0),# East Asian ideograph + 0x217030: (0x5504, 0),# East Asian ideograph + 0x6f525a: (0xc0a0, 0),# Korean hangul + 0x234469: (0x9338, 0),# East Asian ideograph + 0x692126: (0x30fb, 0),# Ideographic centered point + 0x223031: (0x6286, 0),# East Asian ideograph + 0x21383f: (0x5805, 0),# East Asian ideograph + 0x273032: (0x5e76, 0),# East Asian ideograph + 0x6f594a: (0xcd0c, 0),# Korean hangul + 0x2d5b69: (0x5ef5, 0),# East Asian ideograph + 0x6f4c55: (0xb284, 0),# Korean hangul + 0x275039: (0x7b03, 0),# East Asian ideograph + 0x6f5666: (0xc74c, 0),# Korean hangul + 0x692139: (0x3005, 0),# Ideographic iteration mark + 0x69213c: (0x30fc, 0),# Vowel elongation mark for kana + 0x213035: (0x4e32, 0),# East Asian ideograph + 0x695130: (0x5116, 0),# East Asian ideograph + 0x6f525b: (0xc0a3, 0),# Korean hangul + 0x276146: (0x9aa0, 0),# East Asian ideograph + 0x217c72: (0x5aea, 0),# East Asian ideograph + 0x6f4a77: (0xaf64, 0),# Korean hangul + 0x23403e: (0x9146, 0),# East Asian ideograph + 0x2d3263: (0x4fad, 0),# East Asian ideograph + 0x4b4f29: (0x7a50, 0),# East Asian ideograph + 0x692152: (0x3008, 0),# Ideographic less than sign + 0x27503a: (0x7b51, 0),# East Asian ideograph + 0x692154: (0x300a, 0),# Ideographic left double angle bracket + 0x692155: (0x300b, 0),# Ideographic right double angle bracket + 0x217039: (0x54f7, 0),# East Asian ideograph + 0x21303a: (0x4e43, 0),# East Asian ideograph + 0x2e4e5d: (0x6de0, 0),# East Asian ideograph + 0x6f525c: (0xc0a5, 0),# Korean hangul + 0x21303b: (0x4e45, 0),# East Asian ideograph + 0x213841: (0x5806, 0),# East Asian ideograph + 0x217830: (0x58a3, 0),# East Asian ideograph + 0x6f576a: (0xc8f1, 0),# Korean hangul + 0x233376: (0x8b1f, 0),# East Asian ideograph + 0x33514c: (0x7dd1, 0),# East Asian ideograph + 0x213e21: (0x5fcd, 0),# East Asian ideograph + 0x276148: (0x84e6, 0),# East Asian ideograph + 0x2d4b71: (0x7f3e, 0),# East Asian ideograph + 0x223041: (0x62a3, 0),# East Asian ideograph + 0x213042: (0x4e52, 0),# East Asian ideograph + 0x277255: (0x54d3, 0),# East Asian ideograph + 0x213043: (0x4e53, 0),# East Asian ideograph + 0x227044: (0x7d03, 0),# East Asian ideograph + 0x234544: (0x9386, 0),# East Asian ideograph + 0x287045: (0x7ea8, 0),# East Asian ideograph + 0x227c31: (0x82af, 0),# East Asian ideograph + 0x234041: (0x9147, 0),# East Asian ideograph + 0x2d3954: (0x7385, 0),# East Asian ideograph + 0x213047: (0x4e5d, 0),# East Asian ideograph + 0x213049: (0x4e5e, 0),# East Asian ideograph + 0x6f525f: (0xc0ac, 0),# Korean hangul + 0x28255a: (0x5d5d, 0),# East Asian ideograph + 0x273f31: (0x60ed, 0),# East Asian ideograph + 0x225e5c: (0x75cf, 0),# East Asian ideograph + 0x29472f: (0x94e9, 0),# East Asian ideograph + 0x21304b: (0x4e73, 0),# East Asian ideograph + 0x21304c: (0x4e7e, 0),# East Asian ideograph + 0x27503e: (0x7bd3, 0),# East Asian ideograph + 0x6f5667: (0xc74d, 0),# Korean hangul + 0x27304d: (0x4e71, 0),# East Asian ideograph + 0x23514f: (0x992e, 0),# East Asian ideograph + 0x6f5870: (0xcbd4, 0),# Korean hangul + 0x275b36: (0x8f69, 0),# East Asian ideograph + 0x6f5260: (0xc0ad, 0),# Korean hangul + 0x27614b: (0x60ca, 0),# East Asian ideograph + 0x6f4a78: (0xaf65, 0),# Korean hangul + 0x227050: (0x7d18, 0),# East Asian ideograph + 0x227051: (0x7d1e, 0),# East Asian ideograph + 0x277258: (0x6076, 0),# East Asian ideograph (duplicate simplified) + 0x393052: (0x65bc, 0),# East Asian ideograph + 0x235150: (0x992c, 0),# East Asian ideograph + 0x213053: (0x4e95, 0),# East Asian ideograph + 0x6f5261: (0xc0ae, 0),# Korean hangul + 0x294040: (0x90e6, 0),# East Asian ideograph + 0x213055: (0x4e92, 0),# East Asian ideograph + 0x2e5f6f: (0x75b8, 0),# East Asian ideograph + 0x27326a: (0x4fea, 0),# East Asian ideograph + 0x223057: (0x62d1, 0),# East Asian ideograph + 0x235151: (0x992a, 0),# East Asian ideograph + 0x213058: (0x4e9e, 0),# East Asian ideograph + 0x2d4621: (0x61fd, 0),# East Asian ideograph + 0x213059: (0x4e9b, 0),# East Asian ideograph + 0x284333: (0x680e, 0),# East Asian ideograph + 0x294732: (0x94f4, 0),# East Asian ideograph + 0x33625e: (0x9eaa, 0),# East Asian ideograph + 0x22705a: (0x7d3d, 0),# East Asian ideograph + 0x6f5070: (0xbc18, 0),# Korean hangul + 0x232223: (0x83fd, 0),# East Asian ideograph + 0x222224: (0x5bf0, 0),# East Asian ideograph + 0x232225: (0x841e, 0),# East Asian ideograph + 0x693c36: (0x96eb, 0),# East Asian ideograph + 0x232229: (0x83c9, 0),# East Asian ideograph + 0x23222a: (0x83df, 0),# East Asian ideograph + 0x23222c: (0x841f, 0),# East Asian ideograph + 0x23222e: (0x840f, 0),# East Asian ideograph + 0x69705d: (0x9786, 0),# East Asian ideograph + 0x232230: (0x8411, 0),# East Asian ideograph + 0x222233: (0x5c00, 0),# East Asian ideograph + 0x222235: (0x5c57, 0),# East Asian ideograph + 0x232236: (0x839a, 0),# East Asian ideograph + 0x707438: (0x823e, 0),# East Asian ideograph + 0x33625f: (0x8534, 0),# East Asian ideograph + 0x21305f: (0x4ea8, 0),# East Asian ideograph + 0x22223c: (0x5c15, 0),# East Asian ideograph + 0x333060: (0x4eaf, 0),# East Asian ideograph + 0x6f5742: (0xc824, 0),# Korean hangul + 0x232243: (0x83d1, 0),# East Asian ideograph + 0x275042: (0x7bab, 0),# East Asian ideograph + 0x222246: (0x5c22, 0),# East Asian ideograph + 0x223061: (0x62e4, 0),# East Asian ideograph + 0x222248: (0x5c25, 0),# East Asian ideograph + 0x23224a: (0x848e, 0),# East Asian ideograph + 0x22224b: (0x5c2a, 0),# East Asian ideograph + 0x23224c: (0x8439, 0),# East Asian ideograph + 0x23224d: (0x8476, 0),# East Asian ideograph + 0x23224e: (0x8479, 0),# East Asian ideograph + 0x213c6e: (0x5e8a, 0),# East Asian ideograph + 0x222252: (0x5c2f, 0),# East Asian ideograph + 0x217c7b: (0x5ada, 0),# East Asian ideograph + 0x284335: (0x6a7c, 0),# East Asian ideograph + 0x4c3b22: (0x6860, 0),# East Asian ideograph + 0x294734: (0x9566, 0),# East Asian ideograph + 0x213064: (0x4eba, 0),# East Asian ideograph + 0x22225b: (0x5c32, 0),# East Asian ideograph + 0x23225c: (0x8451, 0),# East Asian ideograph + 0x23225f: (0x847d, 0),# East Asian ideograph + 0x232262: (0x845a, 0),# East Asian ideograph + 0x222263: (0x5c3b, 0),# East Asian ideograph + 0x222265: (0x5c44, 0),# East Asian ideograph + 0x232266: (0x8459, 0),# East Asian ideograph + 0x222267: (0x5c49, 0),# East Asian ideograph + 0x232269: (0x8473, 0),# East Asian ideograph + 0x23226e: (0x843e, 0),# East Asian ideograph + 0x6f5265: (0xc0b4, 0),# Korean hangul + 0x276150: (0x9aa5, 0),# East Asian ideograph + 0x232271: (0x846d, 0),# East Asian ideograph + 0x394735: (0x6c3e, 0),# East Asian ideograph + 0x223069: (0x62b6, 0),# East Asian ideograph + 0x232278: (0x847a, 0),# East Asian ideograph + 0x222279: (0x5c59, 0),# East Asian ideograph + 0x22227b: (0x5c5d, 0),# East Asian ideograph + 0x22227c: (0x5c5f, 0),# East Asian ideograph + 0x22706a: (0x7d3f, 0),# East Asian ideograph + 0x21306b: (0x4ecd, 0),# East Asian ideograph + 0x2d306c: (0x8b8e, 0),# East Asian ideograph + 0x6f5266: (0xc0b5, 0),# Korean hangul + 0x276151: (0x9a8a, 0),# East Asian ideograph + 0x284337: (0x6987, 0),# East Asian ideograph + 0x225e63: (0x75e7, 0),# East Asian ideograph + 0x33512e: (0x7e8d, 0),# East Asian ideograph + 0x4b306e: (0x4ee4, 0),# East Asian ideograph (variant of 21306E which maps to 4EE4) + 0x21306f: (0x4ed8, 0),# East Asian ideograph + 0x235156: (0x992b, 0),# East Asian ideograph + 0x454146: (0x63db, 0),# East Asian ideograph + 0x213071: (0x4ed6, 0),# East Asian ideograph + 0x6f5267: (0xc0b6, 0),# Korean hangul + 0x213072: (0x4ede, 0),# East Asian ideograph + 0x6f4e24: (0xb544, 0),# Korean hangul + 0x6f5a24: (0xcee4, 0),# Korean hangul + 0x225254: (0x714f, 0),# East Asian ideograph + 0x215b21: (0x8e76, 0),# East Asian ideograph + 0x6f5268: (0xc0bc, 0),# Korean hangul + 0x276153: (0x80ae, 0),# East Asian ideograph + 0x213077: (0x4ee5, 0),# East Asian ideograph + 0x215b22: (0x8e7c, 0),# East Asian ideograph + 0x21384d: (0x5857, 0),# East Asian ideograph + 0x333078: (0x5f77, 0),# East Asian ideograph + 0x225d69: (0x756f, 0),# East Asian ideograph + 0x335e21: (0x9221, 0),# East Asian ideograph + 0x213079: (0x4f09, 0),# East Asian ideograph + 0x6f5b24: (0xd0f1, 0),# Korean hangul + 0x6f5b25: (0xd130, 0),# Korean hangul + 0x235158: (0x9931, 0),# East Asian ideograph + 0x4b3e2a: (0x6035, 0),# East Asian ideograph + 0x275b26: (0x8db8, 0),# East Asian ideograph + 0x6f5269: (0xc0bd, 0),# Korean hangul + 0x6f4b2c: (0xafd4, 0),# Korean hangul + 0x225b27: (0x7482, 0),# East Asian ideograph + 0x21384e: (0x5858, 0),# East Asian ideograph + 0x21307d: (0x4f0a, 0),# East Asian ideograph + 0x215b28: (0x8e8a, 0),# East Asian ideograph + 0x215b29: (0x8e8d, 0),# East Asian ideograph (variant of 4B5B29 which maps to 8E8D) + 0x275048: (0x5e18, 0),# East Asian ideograph + 0x275b2a: (0x8e2f, 0),# East Asian ideograph + 0x4b6044: (0x9818, 0),# East Asian ideograph + 0x4d4a6c: (0x9667, 0),# East Asian ideograph + 0x275b2b: (0x8e51, 0),# East Asian ideograph + 0x6f526a: (0xc0bf, 0),# Korean hangul + 0x293b7a: (0x8f8f, 0),# East Asian ideograph + 0x215a68: (0x8e10, 0),# East Asian ideograph + 0x23404d: (0x9156, 0),# East Asian ideograph + 0x215b2d: (0x8eab, 0),# East Asian ideograph + 0x235b2e: (0x9d8a, 0),# East Asian ideograph + 0x3f5f34: (0x9699, 0),# East Asian ideograph (not in Unicode) + 0x274224: (0x6361, 0),# East Asian ideograph + 0x212320: (0x3000, 0),# Ideographic space in some implementations + 0x215b30: (0x8eba, 0),# East Asian ideograph + 0x222323: (0x5c63, 0),# East Asian ideograph + 0x232324: (0x8432, 0),# East Asian ideograph + 0x225772: (0x735e, 0),# East Asian ideograph + 0x212328: (0xff08, 0),# Ideographic left parenthesis + 0x222329: (0x5c67, 0),# East Asian ideograph + 0x22232b: (0x5c68, 0),# East Asian ideograph + 0x23232d: (0x842a, 0),# East Asian ideograph + 0x23232e: (0x8429, 0),# East Asian ideograph + 0x222330: (0x5c6d, 0),# East Asian ideograph + 0x222331: (0x5c6e, 0),# East Asian ideograph + 0x232332: (0x8471, 0),# East Asian ideograph + 0x215b33: (0x8ecb, 0),# East Asian ideograph + 0x232335: (0x845f, 0),# East Asian ideograph + 0x232336: (0x8460, 0),# East Asian ideograph + 0x222337: (0x5c74, 0),# East Asian ideograph + 0x222339: (0x5c73, 0),# East Asian ideograph + 0x23233a: (0x8446, 0),# East Asian ideograph + 0x22233b: (0x5c77, 0),# East Asian ideograph + 0x22233c: (0x5c7a, 0),# East Asian ideograph + 0x29233d: (0x836e, 0),# East Asian ideograph + 0x235b35: (0x9d87, 0),# East Asian ideograph + 0x222340: (0x5c7c, 0),# East Asian ideograph + 0x6f526c: (0xc0c1, 0),# Korean hangul + 0x232345: (0x844e, 0),# East Asian ideograph + 0x222346: (0x5c8f, 0),# East Asian ideograph + 0x29473c: (0x9568, 0),# East Asian ideograph + 0x222349: (0x5c88, 0),# East Asian ideograph + 0x275b37: (0x8f6b, 0),# East Asian ideograph + 0x22234d: (0x5c99, 0),# East Asian ideograph + 0x232350: (0x84a1, 0),# East Asian ideograph + 0x225b38: (0x7480, 0),# East Asian ideograph + 0x232353: (0x849f, 0),# East Asian ideograph + 0x222355: (0x5ca6, 0),# East Asian ideograph + 0x232356: (0x84ba, 0),# East Asian ideograph + 0x222357: (0x5ca0, 0),# East Asian ideograph + 0x23515c: (0x993b, 0),# East Asian ideograph + 0x69255e: (0x30de, 0),# Katakana letter MA + 0x22235c: (0x5ca2, 0),# East Asian ideograph + 0x275b3a: (0x8f72, 0),# East Asian ideograph + 0x23235e: (0x84c1, 0),# East Asian ideograph + 0x23235f: (0x84bb, 0),# East Asian ideograph + 0x222360: (0x5cb5, 0),# East Asian ideograph + 0x222361: (0x5ca7, 0),# East Asian ideograph + 0x215b3b: (0x8ef8, 0),# East Asian ideograph + 0x222366: (0x5ca8, 0),# East Asian ideograph + 0x222367: (0x5cac, 0),# East Asian ideograph + 0x234050: (0x9158, 0),# East Asian ideograph + 0x225b3c: (0x7481, 0),# East Asian ideograph + 0x22236b: (0x5ca3, 0),# East Asian ideograph + 0x22236c: (0x5cb6, 0),# East Asian ideograph + 0x22236d: (0x5cc1, 0),# East Asian ideograph + 0x23456e: (0x9351, 0),# East Asian ideograph + 0x22236f: (0x5cad, 0),# East Asian ideograph + 0x232370: (0x84b1, 0),# East Asian ideograph + 0x232371: (0x849d, 0),# East Asian ideograph + 0x232372: (0x84d0, 0),# East Asian ideograph + 0x224666: (0x6c2d, 0),# East Asian ideograph + 0x232375: (0x8494, 0),# East Asian ideograph + 0x222378: (0x5cd3, 0),# East Asian ideograph + 0x232379: (0x84c7, 0),# East Asian ideograph + 0x23237a: (0x84bd, 0),# East Asian ideograph + 0x215b3f: (0x8f09, 0),# East Asian ideograph + 0x23237c: (0x84c2, 0),# East Asian ideograph + 0x6f526e: (0xc0c8, 0),# Korean hangul + 0x282569: (0x5d02, 0),# East Asian ideograph + 0x225b40: (0x7497, 0),# East Asian ideograph + 0x29473e: (0x94f9, 0),# East Asian ideograph + 0x23572e: (0x9b93, 0),# East Asian ideograph + 0x275b41: (0x8f85, 0),# East Asian ideograph + 0x215b42: (0x8f12, 0),# East Asian ideograph + 0x27504d: (0x7b79, 0),# East Asian ideograph + 0x224d5f: (0x6f72, 0),# East Asian ideograph + 0x225b43: (0x7498, 0),# East Asian ideograph + 0x6f5b44: (0xd22d, 0),# Korean hangul + 0x6f526f: (0xc0c9, 0),# Korean hangul + 0x2e6c46: (0x7be6, 0),# East Asian ideograph + 0x225b45: (0x749a, 0),# East Asian ideograph + 0x284340: (0x67a5, 0),# East Asian ideograph + 0x692526: (0x30a6, 0),# Katakana letter U + 0x275b46: (0x8f86, 0),# East Asian ideograph + 0x2d573b: (0x60f7, 0),# East Asian ideograph + 0x215b47: (0x8f1f, 0),# East Asian ideograph + 0x275b48: (0x8f89, 0),# East Asian ideograph + 0x275b49: (0x8f88, 0),# East Asian ideograph + 0x6f5270: (0xc0cc, 0),# Korean hangul + 0x27615b: (0x810f, 0),# East Asian ideograph + 0x275b4a: (0x8f6e, 0),# East Asian ideograph + 0x234a65: (0x9688, 0),# East Asian ideograph + 0x6f5845: (0xc9f9, 0),# Korean hangul + 0x215b4b: (0x8f1c, 0),# East Asian ideograph + 0x33422a: (0x62e1, 0),# East Asian ideograph + 0x275b4c: (0x8f90, 0),# East Asian ideograph + 0x225b4d: (0x74a4, 0),# East Asian ideograph + 0x235160: (0x993a, 0),# East Asian ideograph + 0x275b4e: (0x8f93, 0),# East Asian ideograph + 0x6f516b: (0xbe1d, 0),# Korean hangul + 0x276131: (0x9a6f, 0),# East Asian ideograph + 0x215b4f: (0x8f44, 0),# East Asian ideograph + 0x225a2b: (0x7424, 0),# East Asian ideograph + 0x2d3b40: (0x5c06, 0),# East Asian ideograph (variant of 273B40 which maps to 5C06) + 0x275b51: (0x8f95, 0),# East Asian ideograph + 0x28544f: (0x70ec, 0),# East Asian ideograph + 0x224d62: (0x6f57, 0),# East Asian ideograph + 0x29337a: (0x8bcc, 0),# East Asian ideograph + 0x235161: (0x9941, 0),# East Asian ideograph + 0x275b53: (0x8206, 0),# East Asian ideograph + 0x215b54: (0x8f4d, 0),# East Asian ideograph + 0x692533: (0x30b3, 0),# Katakana letter KO + 0x4b316a: (0x723c, 0),# East Asian ideograph + 0x215b55: (0x8f49, 0),# East Asian ideograph + 0x2d3f31: (0x6159, 0),# East Asian ideograph + 0x6f5665: (0xc74a, 0),# Korean hangul + 0x225b56: (0x748d, 0),# East Asian ideograph + 0x224667: (0x6c30, 0),# East Asian ideograph + 0x215b57: (0x8f4e, 0),# East Asian ideograph + 0x275b58: (0x8f70, 0),# East Asian ideograph + 0x213c71: (0x5e96, 0),# East Asian ideograph + 0x275b59: (0x8f94, 0),# East Asian ideograph + 0x234056: (0x9164, 0),# East Asian ideograph + 0x225a2d: (0x742d, 0),# East Asian ideograph + 0x6f4c56: (0xb289, 0),# Korean hangul + 0x232421: (0x8495, 0),# East Asian ideograph + 0x692422: (0x3042, 0),# Hiragana letter A + 0x692423: (0x3043, 0),# Hiragana letter small I + 0x692424: (0x3044, 0),# Hiragana letter I + 0x692425: (0x3045, 0),# Hiragana letter small U + 0x222426: (0x5ce0, 0),# East Asian ideograph + 0x232427: (0x84af, 0),# East Asian ideograph + 0x222428: (0x5cd2, 0),# East Asian ideograph + 0x232429: (0x84ad, 0),# East Asian ideograph + 0x69242a: (0x304a, 0),# Hiragana letter O + 0x22242b: (0x5ccb, 0),# East Asian ideograph + 0x69242c: (0x304c, 0),# Hiragana letter GA + 0x69242d: (0x304d, 0),# Hiragana letter KI + 0x69242e: (0x304e, 0),# Hiragana letter GI + 0x215b5d: (0x8fa3, 0),# East Asian ideograph + 0x222430: (0x5cc7, 0),# East Asian ideograph + 0x222431: (0x5cdc, 0),# East Asian ideograph + 0x232432: (0x84a8, 0),# East Asian ideograph + 0x232433: (0x84d6, 0),# East Asian ideograph + 0x222434: (0x5d00, 0),# East Asian ideograph + 0x215b5e: (0x8fa8, 0),# East Asian ideograph + 0x213859: (0x5875, 0),# East Asian ideograph + 0x692437: (0x3057, 0),# Hiragana letter SI + 0x692438: (0x3058, 0),# Hiragana letter ZI + 0x692439: (0x3059, 0),# Hiragana letter SU + 0x23243a: (0x8493, 0),# East Asian ideograph + 0x22243b: (0x5cff, 0),# East Asian ideograph + 0x22243c: (0x5ceb, 0),# East Asian ideograph + 0x69243d: (0x305d, 0),# Hiragana letter SO + 0x69243e: (0x305e, 0),# Hiragana letter ZO + 0x23243f: (0x84cf, 0),# East Asian ideograph + 0x692440: (0x3060, 0),# Hiragana letter DA + 0x232441: (0x84ca, 0),# East Asian ideograph + 0x692442: (0x3062, 0),# Hiragana letter DI + 0x692443: (0x3063, 0),# Hiragana letter small TU + 0x692444: (0x3064, 0),# Hiragana letter TU + 0x692445: (0x3065, 0),# Hiragana letter DU + 0x232446: (0x8506, 0),# East Asian ideograph + 0x232447: (0x850b, 0),# East Asian ideograph + 0x692448: (0x3068, 0),# Hiragana letter TO + 0x222449: (0x5d1e, 0),# East Asian ideograph + 0x22244a: (0x5d12, 0),# East Asian ideograph + 0x69244b: (0x306b, 0),# Hiragana letter NI + 0x69244c: (0x306c, 0),# Hiragana letter NU + 0x23244d: (0x8500, 0),# East Asian ideograph + 0x69244e: (0x306e, 0),# Hiragana letter NO + 0x69244f: (0x306f, 0),# Hiragana letter HA + 0x222450: (0x5d1a, 0),# East Asian ideograph + 0x692451: (0x3071, 0),# Hiragana letter PA + 0x222452: (0x5d0c, 0),# East Asian ideograph + 0x222453: (0x5d20, 0),# East Asian ideograph + 0x222454: (0x5d21, 0),# East Asian ideograph + 0x692455: (0x3075, 0),# Hiragana letter HU + 0x692456: (0x3076, 0),# Hiragana letter BU + 0x222457: (0x5d27, 0),# East Asian ideograph + 0x222458: (0x5d0d, 0),# East Asian ideograph + 0x232459: (0x851f, 0),# East Asian ideograph + 0x22245a: (0x5d26, 0),# East Asian ideograph + 0x69245b: (0x307b, 0),# Hiragana letter HO + 0x23245c: (0x853b, 0),# East Asian ideograph + 0x22245d: (0x5d2e, 0),# East Asian ideograph + 0x69245e: (0x307e, 0),# Hiragana letter MA + 0x23245f: (0x84ea, 0),# East Asian ideograph + 0x692460: (0x3080, 0),# Hiragana letter MU + 0x692461: (0x3081, 0),# Hiragana letter ME + 0x692462: (0x3082, 0),# Hiragana letter MO + 0x692463: (0x3083, 0),# Hiragana letter small YA + 0x692464: (0x3084, 0),# Hiragana letter YA + 0x235b66: (0x9da4, 0),# East Asian ideograph + 0x232466: (0x84f4, 0),# East Asian ideograph + 0x692467: (0x3087, 0),# Hiragana letter small YO + 0x692468: (0x3088, 0),# Hiragana letter YO + 0x222469: (0x5d24, 0),# East Asian ideograph + 0x23246a: (0x850c, 0),# East Asian ideograph + 0x215b67: (0x8fc5, 0),# East Asian ideograph + 0x69246c: (0x308c, 0),# Hiragana letter RE + 0x69246d: (0x308d, 0),# Hiragana letter RO + 0x69246e: (0x308e, 0),# Hiragana letter small WA + 0x69246f: (0x308f, 0),# Hiragana letter WA + 0x692470: (0x3090, 0),# Hiragana letter WI + 0x222471: (0x5d36, 0),# East Asian ideograph + 0x222472: (0x5d3e, 0),# East Asian ideograph + 0x692473: (0x3093, 0),# Hiragana letter N + 0x222474: (0x5d4b, 0),# East Asian ideograph + 0x232475: (0x8515, 0),# East Asian ideograph + 0x222476: (0x5d57, 0),# East Asian ideograph + 0x222477: (0x5d34, 0),# East Asian ideograph + 0x6f2478: (0x3155, 0),# Korean hangul + 0x335e2f: (0x5257, 0),# East Asian ideograph + 0x23247a: (0x84fc, 0),# East Asian ideograph + 0x6f247b: (0x3158, 0),# Korean hangul + 0x23247c: (0x84eb, 0),# East Asian ideograph + 0x23247d: (0x84fd, 0),# East Asian ideograph + 0x6f247e: (0x315b, 0),# Korean hangul + 0x235b6b: (0x9d9a, 0),# East Asian ideograph + 0x235166: (0x993c, 0),# East Asian ideograph + 0x225b6c: (0x74a5, 0),# East Asian ideograph + 0x6f5277: (0xc0dd, 0),# Korean hangul + 0x6f4c31: (0xb179, 0),# Korean hangul + 0x215b6d: (0x8ff0, 0),# East Asian ideograph (variant of 275B6D which maps to 8FF0) + 0x21385c: (0x5885, 0),# East Asian ideograph + 0x69252e: (0x30ae, 0),# Katakana letter GI + 0x225b6e: (0x74a8, 0),# East Asian ideograph + 0x235e30: (0x9ec1, 0),# East Asian ideograph + 0x295921: (0x9cd9, 0),# East Asian ideograph + 0x6f5b6f: (0xd310, 0),# Korean hangul + 0x295854: (0x9cc4, 0),# East Asian ideograph + 0x215b70: (0x8fea, 0),# East Asian ideograph + 0x705b71: (0x57b4, 0),# East Asian ideograph + 0x6f5278: (0xc0e4, 0),# Korean hangul + 0x276163: (0x677e, 0),# East Asian ideograph (duplicate simplified) + 0x6f4e35: (0xb5b0, 0),# Korean hangul + 0x69252f: (0x30af, 0),# Katakana letter KU + 0x234b66: (0x96d8, 0),# East Asian ideograph + 0x235b74: (0x9db1, 0),# East Asian ideograph + 0x6f4b7c: (0xb123, 0),# Korean hangul + 0x4b6053: (0x985e, 0),# East Asian ideograph + 0x224926: (0x6d6f, 0),# East Asian ideograph + 0x235b76: (0x9db6, 0),# East Asian ideograph + 0x234621: (0x93b5, 0),# East Asian ideograph + 0x276164: (0x80e1, 0),# East Asian ideograph (duplicate simplified) + 0x235b77: (0x9dbc, 0),# East Asian ideograph + 0x336275: (0x76bc, 0),# East Asian ideograph + 0x234623: (0x9388, 0),# East Asian ideograph + 0x295b79: (0x9e5a, 0),# East Asian ideograph + 0x51496b: (0x852b, 0),# East Asian ideograph + 0x215b7a: (0x9003, 0),# East Asian ideograph + 0x234625: (0x93b9, 0),# East Asian ideograph + 0x215b7b: (0x8ffd, 0),# East Asian ideograph + 0x6f5173: (0xbe54, 0),# Korean hangul + 0x6f527a: (0xc0e8, 0),# Korean hangul + 0x276165: (0x987b, 0),# East Asian ideograph (duplicate simplified) + 0x235b7c: (0x9dba, 0),# East Asian ideograph + 0x21385f: (0x5880, 0),# East Asian ideograph + 0x234627: (0x93a1, 0),# East Asian ideograph + 0x215635: (0x85e5, 0),# East Asian ideograph + 0x275b7d: (0x8fd9, 0),# East Asian ideograph + 0x234628: (0x93b0, 0),# East Asian ideograph + 0x235b7e: (0x9dcf, 0),# East Asian ideograph + 0x234629: (0x93a3, 0),# East Asian ideograph + 0x21462a: (0x6b77, 0),# East Asian ideograph + 0x224928: (0x6d61, 0),# East Asian ideograph + 0x23462b: (0x939b, 0),# East Asian ideograph + 0x276166: (0x9b13, 0),# East Asian ideograph + 0x4b3f50: (0x61ca, 0),# East Asian ideograph (variant of 213F50) + 0x22462c: (0x6bf3, 0),# East Asian ideograph + 0x692532: (0x30b2, 0),# Katakana letter GE + 0x23462d: (0x9398, 0),# East Asian ideograph + 0x213238: (0x5075, 0),# East Asian ideograph + 0x282626: (0x5cc4, 0),# East Asian ideograph + 0x4b462e: (0x6b81, 0),# East Asian ideograph + 0x2f5f45: (0x86a1, 0),# East Asian ideograph + 0x2d4b22: (0x736a, 0),# East Asian ideograph + 0x29576e: (0x9ca7, 0),# East Asian ideograph + 0x692521: (0x30a1, 0),# Katakana letter small A + 0x692522: (0x30a2, 0),# Katakana letter A + 0x276167: (0x6597, 0),# East Asian ideograph + 0x232524: (0x851e, 0),# East Asian ideograph + 0x222525: (0x5d3f, 0),# East Asian ideograph + 0x222526: (0x5d52, 0),# East Asian ideograph + 0x222527: (0x5d3d, 0),# East Asian ideograph + 0x222528: (0x5d4e, 0),# East Asian ideograph + 0x692529: (0x30a9, 0),# Katakana letter small O + 0x23252a: (0x8518, 0),# East Asian ideograph + 0x69252b: (0x30ab, 0),# Katakana letter KA + 0x22252c: (0x5d59, 0),# East Asian ideograph + 0x23252d: (0x8526, 0),# East Asian ideograph + 0x23252e: (0x8507, 0),# East Asian ideograph (variant of 2F252E which maps to 8507) + 0x22252f: (0x5d32, 0),# East Asian ideograph + 0x692530: (0x30b0, 0),# Katakana letter GU + 0x222531: (0x5d42, 0),# East Asian ideograph + 0x4c2532: (0x5d5b, 0),# East Asian ideograph + 0x224633: (0x6bf8, 0),# East Asian ideograph + 0x232534: (0x84f0, 0),# East Asian ideograph + 0x232535: (0x84ef, 0),# East Asian ideograph + 0x232536: (0x8556, 0),# East Asian ideograph + 0x692537: (0x30b7, 0),# Katakana letter SI + 0x692538: (0x30b8, 0),# Katakana letter ZI + 0x222539: (0x5d6f, 0),# East Asian ideograph + 0x22253a: (0x5d6b, 0),# East Asian ideograph + 0x696136: (0x753c, 0),# East Asian ideograph + 0x69253c: (0x30bc, 0),# Katakana letter ZE + 0x69253d: (0x30bd, 0),# Katakana letter SO + 0x69253e: (0x30be, 0),# Katakana letter ZO + 0x274635: (0x6b87, 0),# East Asian ideograph + 0x692540: (0x30c0, 0),# Katakana letter DA + 0x276168: (0x95f9, 0),# East Asian ideograph + 0x692542: (0x30c2, 0),# Katakana letter DI + 0x692543: (0x30c3, 0),# Katakana letter small TU + 0x222544: (0x5d4a, 0),# East Asian ideograph + 0x225e7a: (0x7602, 0),# East Asian ideograph + 0x232546: (0x8541, 0),# East Asian ideograph + 0x692534: (0x30b4, 0),# Katakana letter GO + 0x692548: (0x30c8, 0),# Katakana letter TO + 0x222549: (0x5d6c, 0),# East Asian ideograph + 0x22254a: (0x5d62, 0),# East Asian ideograph + 0x23254b: (0x8558, 0),# East Asian ideograph + 0x69254c: (0x30cc, 0),# Katakana letter NU + 0x22254d: (0x5d82, 0),# East Asian ideograph + 0x23254e: (0x8561, 0),# East Asian ideograph + 0x23254f: (0x8540, 0),# East Asian ideograph + 0x222550: (0x5d79, 0),# East Asian ideograph + 0x224638: (0x6bf9, 0),# East Asian ideograph + 0x692552: (0x30d2, 0),# Katakana letter HI + 0x692553: (0x30d3, 0),# Katakana letter BI + 0x692554: (0x30d4, 0),# Katakana letter PI + 0x287231: (0x7f03, 0),# East Asian ideograph + 0x692556: (0x30d6, 0),# Katakana letter BU + 0x33516d: (0x6374, 0),# East Asian ideograph + 0x4d222a: (0x83b5, 0),# East Asian ideograph + 0x692559: (0x30d9, 0),# Katakana letter BE + 0x22255a: (0x5d81, 0),# East Asian ideograph + 0x69255b: (0x30db, 0),# Katakana letter HO + 0x23255c: (0x8564, 0),# East Asian ideograph + 0x23255d: (0x855e, 0),# East Asian ideograph + 0x23255e: (0x8573, 0),# East Asian ideograph + 0x23255f: (0x8551, 0),# East Asian ideograph + 0x222560: (0x5d7e, 0),# East Asian ideograph + 0x692561: (0x30e1, 0),# Katakana letter ME + 0x692562: (0x30e2, 0),# Katakana letter MO + 0x27463b: (0x6740, 0),# East Asian ideograph + 0x232564: (0x8562, 0),# East Asian ideograph + 0x292535: (0x82c1, 0),# East Asian ideograph + 0x222566: (0x5d92, 0),# East Asian ideograph + 0x292567: (0x836c, 0),# East Asian ideograph + 0x222568: (0x5d99, 0),# East Asian ideograph + 0x27463c: (0x58f3, 0),# East Asian ideograph + 0x22256a: (0x5da2, 0),# East Asian ideograph + 0x23256b: (0x8563, 0),# East Asian ideograph + 0x23256c: (0x848d, 0),# East Asian ideograph + 0x23256d: (0x8542, 0),# East Asian ideograph + 0x69256e: (0x30ee, 0),# Katakana letter small WA + 0x23463d: (0x93a4, 0),# East Asian ideograph + 0x692570: (0x30f0, 0),# Katakana letter WI + 0x232571: (0x854e, 0),# East Asian ideograph + 0x692572: (0x30f2, 0),# Katakana letter WO + 0x222573: (0x5da1, 0),# East Asian ideograph + 0x232574: (0x8555, 0),# East Asian ideograph + 0x222575: (0x5d93, 0),# East Asian ideograph + 0x232576: (0x855d, 0),# East Asian ideograph + 0x222577: (0x5da0, 0),# East Asian ideograph + 0x4b3e40: (0x6046, 0),# East Asian ideograph + 0x22257b: (0x5d94, 0),# East Asian ideograph + 0x27616a: (0x90c1, 0),# East Asian ideograph + 0x22257e: (0x5dac, 0),# East Asian ideograph + 0x6f4e3c: (0xb5c0, 0),# Korean hangul + 0x284350: (0x68c2, 0),# East Asian ideograph + 0x234640: (0x93bc, 0),# East Asian ideograph + 0x692536: (0x30b6, 0),# Katakana letter ZA + 0x513421: (0x91d6, 0),# East Asian ideograph + 0x224642: (0x6bff, 0),# East Asian ideograph + 0x3f5f49: (0x7431, 0),# East Asian ideograph + 0x29585c: (0x9cc7, 0),# East Asian ideograph + 0x6f5c65: (0xd55c, 0),# Korean hangul + 0x224644: (0x6c06, 0),# East Asian ideograph + 0x276134: (0x9a7c, 0),# East Asian ideograph + 0x28656a: (0x789b, 0),# East Asian ideograph + 0x213865: (0x58c5, 0),# East Asian ideograph + 0x294750: (0x950e, 0),# East Asian ideograph + 0x4b3178: (0x5029, 0),# East Asian ideograph (variant of 213178 which maps to 5029) + 0x234647: (0x93a6, 0),# East Asian ideograph + 0x29337d: (0x8c27, 0),# East Asian ideograph + 0x224648: (0x6c04, 0),# East Asian ideograph + 0x22492e: (0x6d8a, 0),# East Asian ideograph + 0x453755: (0x56ae, 0),# East Asian ideograph + 0x2d516a: (0x7db3, 0),# East Asian ideograph + 0x6f4e3e: (0xb5cc, 0),# Korean hangul + 0x23464a: (0x93aa, 0),# East Asian ideograph + 0x294751: (0x950f, 0),# East Asian ideograph + 0x33627d: (0x6589, 0),# East Asian ideograph + 0x213423: (0x5291, 0),# East Asian ideograph + 0x235060: (0x98e3, 0),# East Asian ideograph + 0x333c21: (0x7895, 0),# East Asian ideograph + 0x6f5748: (0xc84c, 0),# Korean hangul + 0x295153: (0x9967, 0),# East Asian ideograph + 0x22464c: (0x6c08, 0),# East Asian ideograph + 0x23464d: (0x939e, 0),# East Asian ideograph + 0x213c74: (0x5ea0, 0),# East Asian ideograph + 0x6f4e3f: (0xb5cf, 0),# Korean hangul + 0x23464f: (0x9397, 0),# East Asian ideograph + 0x692539: (0x30b9, 0),# Katakana letter SU + 0x27727a: (0x54d5, 0),# East Asian ideograph + 0x234651: (0x93bb, 0),# East Asian ideograph + 0x295825: (0x9cba, 0),# East Asian ideograph + 0x224d73: (0x6fb6, 0),# East Asian ideograph + 0x224652: (0x6c0d, 0),# East Asian ideograph + 0x234653: (0x93f1, 0),# East Asian ideograph + 0x225851: (0x739e, 0),# East Asian ideograph + 0x6f4e40: (0xb5d1, 0),# Korean hangul + 0x213868: (0x58d5, 0),# East Asian ideograph + 0x69253a: (0x30ba, 0),# Katakana letter ZU + 0x274655: (0x6c14, 0),# East Asian ideograph + 0x234656: (0x93de, 0),# East Asian ideograph + 0x234657: (0x93ee, 0),# East Asian ideograph + 0x234d30: (0x976e, 0),# East Asian ideograph + 0x274658: (0x6c22, 0),# East Asian ideograph + 0x27384a: (0x573a, 0),# East Asian ideograph + 0x223244: (0x63e5, 0),# East Asian ideograph + 0x224659: (0x6c15, 0),# East Asian ideograph + 0x51563f: (0x8616, 0),# East Asian ideograph + 0x23465a: (0x93c7, 0),# East Asian ideograph + 0x23465b: (0x93f2, 0),# East Asian ideograph + 0x232625: (0x8580, 0),# East Asian ideograph + 0x222626: (0x5da7, 0),# East Asian ideograph + 0x232628: (0x858f, 0),# East Asian ideograph + 0x22465c: (0x6c1a, 0),# East Asian ideograph + 0x22262a: (0x5db0, 0),# East Asian ideograph + 0x23262d: (0x8579, 0),# East Asian ideograph + 0x22262e: (0x5db4, 0),# East Asian ideograph + 0x23465d: (0x93d4, 0),# East Asian ideograph + 0x222630: (0x5db6, 0),# East Asian ideograph + 0x232632: (0x857f, 0),# East Asian ideograph + 0x232633: (0x8577, 0),# East Asian ideograph + 0x232634: (0x8578, 0),# East Asian ideograph + 0x22465e: (0x6c1d, 0),# East Asian ideograph + 0x222636: (0x5db7, 0),# East Asian ideograph + 0x6f4c37: (0xb18b, 0),# Korean hangul + 0x2d6132: (0x99ee, 0),# East Asian ideograph + 0x23263d: (0x85a4, 0),# East Asian ideograph + 0x22263e: (0x5dc3, 0),# East Asian ideograph + 0x224660: (0x6c20, 0),# East Asian ideograph + 0x232642: (0x857a, 0),# East Asian ideograph + 0x222644: (0x5dc7, 0),# East Asian ideograph + 0x232645: (0x8557, 0),# East Asian ideograph + 0x222646: (0x5dc9, 0),# East Asian ideograph + 0x222647: (0x5dcb, 0),# East Asian ideograph + 0x232649: (0x85a8, 0),# East Asian ideograph + 0x213d4f: (0x5f59, 0),# East Asian ideograph + 0x234d32: (0x9778, 0),# East Asian ideograph + 0x224662: (0x6c21, 0),# East Asian ideograph + 0x22264e: (0x5dd8, 0),# East Asian ideograph + 0x232650: (0x8599, 0),# East Asian ideograph + 0x232651: (0x858a, 0),# East Asian ideograph + 0x222652: (0x5ddc, 0),# East Asian ideograph + 0x234663: (0x93ca, 0),# East Asian ideograph + 0x232654: (0x8590, 0),# East Asian ideograph + 0x232656: (0x8585, 0),# East Asian ideograph + 0x232657: (0x8588, 0),# East Asian ideograph + 0x225a40: (0x7447, 0),# East Asian ideograph + 0x224664: (0x6c2a, 0),# East Asian ideograph + 0x23265a: (0x85b8, 0),# East Asian ideograph + 0x6f5749: (0xc870, 0),# Korean hangul + 0x23265d: (0x85c1, 0),# East Asian ideograph + 0x334665: (0x6c61, 0),# East Asian ideograph + 0x232661: (0x85ba, 0),# East Asian ideograph + 0x222662: (0x5e00, 0),# East Asian ideograph + 0x222664: (0x51e7, 0),# East Asian ideograph + 0x234666: (0x93e8, 0),# East Asian ideograph + 0x224934: (0x6d79, 0),# East Asian ideograph + 0x232668: (0x85ce, 0),# East Asian ideograph + 0x23266a: (0x85c2, 0),# East Asian ideograph + 0x23266b: (0x85b7, 0),# East Asian ideograph + 0x23266c: (0x85b9, 0),# East Asian ideograph + 0x23266e: (0x85b3, 0),# East Asian ideograph + 0x23266f: (0x85bd, 0),# East Asian ideograph + 0x232670: (0x85c4, 0),# East Asian ideograph + 0x224668: (0x6c2c, 0),# East Asian ideograph + 0x222672: (0x5e14, 0),# East Asian ideograph + 0x222673: (0x5e17, 0),# East Asian ideograph + 0x232675: (0x85be, 0),# East Asian ideograph + 0x222676: (0x5e19, 0),# East Asian ideograph + 0x224669: (0x6c31, 0),# East Asian ideograph (not in Unicode) + 0x222678: (0x5e1f, 0),# East Asian ideograph + 0x22267a: (0x5e23, 0),# East Asian ideograph + 0x22267b: (0x5e21, 0),# East Asian ideograph + 0x23267e: (0x85b6, 0),# East Asian ideograph + 0x295421: (0x9aa3, 0),# East Asian ideograph + 0x2d4647: (0x6bd8, 0),# East Asian ideograph + 0x284359: (0x6989, 0),# East Asian ideograph + 0x2d466d: (0x51b3, 0),# East Asian ideograph + 0x294758: (0x9561, 0),# East Asian ideograph + 0x69253f: (0x30bf, 0),# Katakana letter TA + 0x227c5b: (0x82d0, 0),# East Asian ideograph + 0x28723c: (0x7f08, 0),# East Asian ideograph + 0x224670: (0x6c3b, 0),# East Asian ideograph + 0x295422: (0x9a81, 0),# East Asian ideograph + 0x234d35: (0x9773, 0),# East Asian ideograph + 0x276174: (0x9c7c, 0),# East Asian ideograph + 0x234672: (0x93da, 0),# East Asian ideograph + 0x234673: (0x93d0, 0),# East Asian ideograph + 0x335e42: (0x9452, 0),# East Asian ideograph + 0x2d353c: (0x6b62, 0),# East Asian ideograph + 0x234674: (0x93ef, 0),# East Asian ideograph + 0x6f4e37: (0xb5b3, 0),# Korean hangul + 0x4b4676: (0x6c89, 0),# East Asian ideograph + 0x213121: (0x4f11, 0),# East Asian ideograph + 0x276136: (0x9a77, 0),# East Asian ideograph + 0x21386f: (0x58e2, 0),# East Asian ideograph + 0x223c6e: (0x68b2, 0),# East Asian ideograph + 0x6f2472: (0x314f, 0),# Korean hangul + 0x224678: (0x6c46, 0),# East Asian ideograph + 0x6f5078: (0xbc29, 0),# Korean hangul + 0x28723e: (0x7f0c, 0),# East Asian ideograph + 0x29364e: (0x8d33, 0),# East Asian ideograph + 0x22467a: (0x6c52, 0),# East Asian ideograph + 0x213125: (0x4f01, 0),# East Asian ideograph + 0x234d37: (0x9783, 0),# East Asian ideograph + 0x215f69: (0x9739, 0),# East Asian ideograph + 0x276176: (0x9c81, 0),# East Asian ideograph + 0x6f4e48: (0xb69d, 0),# Korean hangul + 0x23467c: (0x93cc, 0),# East Asian ideograph + 0x6f574a: (0xc871, 0),# Korean hangul + 0x224d7c: (0x6fc6, 0),# East Asian ideograph + 0x23517b: (0x9954, 0),# East Asian ideograph + 0x21312a: (0x4f4f, 0),# East Asian ideograph + 0x234d38: (0x977a, 0),# East Asian ideograph + 0x213c76: (0x5eab, 0),# East Asian ideograph + 0x21312b: (0x4f4d, 0),# East Asian ideograph + 0x6f4e49: (0xb6a4, 0),# Korean hangul + 0x213871: (0x58e9, 0),# East Asian ideograph + 0x21312c: (0x4f34, 0),# East Asian ideograph + 0x6f594c: (0xcd18, 0),# Korean hangul + 0x21342e: (0x52c3, 0),# East Asian ideograph + 0x21312d: (0x4f47, 0),# East Asian ideograph + 0x2d5758: (0x890e, 0),# East Asian ideograph + 0x21312f: (0x4f3a, 0),# East Asian ideograph + 0x275b3f: (0x8f7d, 0),# East Asian ideograph + 0x6f4f3d: (0xb86d, 0),# Korean hangul + 0x28704a: (0x7ebe, 0),# East Asian ideograph + 0x222722: (0x5e22, 0),# East Asian ideograph + 0x286577: (0x789c, 0),# East Asian ideograph + 0x222724: (0x5e28, 0),# East Asian ideograph + 0x213872: (0x58eb, 0),# East Asian ideograph + 0x232728: (0x85f7, 0),# East Asian ideograph + 0x6f5424: (0xc2dd, 0),# Korean hangul + 0x23272c: (0x85e6, 0),# East Asian ideograph + 0x223132: (0x6360, 0),# East Asian ideograph + 0x23272e: (0x85d4, 0),# East Asian ideograph + 0x232731: (0x85ed, 0),# East Asian ideograph + 0x6f5d42: (0xd65c, 0),# Korean hangul + 0x222735: (0x5e44, 0),# East Asian ideograph + 0x222736: (0x5e43, 0),# East Asian ideograph + 0x222739: (0x5e42, 0),# East Asian ideograph + 0x22273f: (0x5e4e, 0),# East Asian ideograph + 0x6f4e4b: (0xb6ac, 0),# Korean hangul + 0x232743: (0x85df, 0),# East Asian ideograph + 0x232745: (0x85d8, 0),# East Asian ideograph + 0x692545: (0x30c5, 0),# Katakana letter DU + 0x222747: (0x5e58, 0),# East Asian ideograph + 0x222748: (0x5e48, 0),# East Asian ideograph + 0x513b52: (0x6c3d, 0),# East Asian ideograph + 0x213137: (0x4f3d, 0),# East Asian ideograph + 0x23274c: (0x85dc, 0),# East Asian ideograph + 0x23274e: (0x85f5, 0),# East Asian ideograph + 0x273138: (0x5e03, 0),# East Asian ideograph + 0x232752: (0x8622, 0),# East Asian ideograph + 0x232754: (0x8610, 0),# East Asian ideograph + 0x285029: (0x6edf, 0),# East Asian ideograph + 0x232757: (0x85fc, 0),# East Asian ideograph + 0x222758: (0x5e61, 0),# East Asian ideograph + 0x23275b: (0x85ff, 0),# East Asian ideograph + 0x23313a: (0x89d6, 0),# East Asian ideograph + 0x23275e: (0x85fe, 0),# East Asian ideograph + 0x22275f: (0x5e6c, 0),# East Asian ideograph + 0x222760: (0x5e6a, 0),# East Asian ideograph + 0x222763: (0x5e6e, 0),# East Asian ideograph + 0x222764: (0x5e6d, 0),# East Asian ideograph + 0x222765: (0x5e70, 0),# East Asian ideograph + 0x232768: (0x8604, 0),# East Asian ideograph + 0x27313c: (0x5360, 0),# East Asian ideograph + 0x227c6e: (0x8314, 0),# East Asian ideograph + 0x22276d: (0x5e75, 0),# East Asian ideograph + 0x232771: (0x8605, 0),# East Asian ideograph + 0x216757: (0x50a3, 0),# East Asian ideograph + 0x232775: (0x862b, 0),# East Asian ideograph + 0x213d51: (0x5f62, 0),# East Asian ideograph + 0x222777: (0x5e80, 0),# East Asian ideograph + 0x21313f: (0x4f5c, 0),# East Asian ideograph + 0x22277e: (0x5e8b, 0),# East Asian ideograph + 0x275d38: (0x91ca, 0),# East Asian ideograph + 0x294760: (0x9563, 0),# East Asian ideograph + 0x213432: (0x52d2, 0),# East Asian ideograph + 0x33572e: (0x880e, 0),# East Asian ideograph + 0x2d3543: (0x4edd, 0),# East Asian ideograph + 0x27506f: (0x7ea0, 0),# East Asian ideograph + 0x215b27: (0x8e85, 0),# East Asian ideograph + 0x213142: (0x4f4e, 0),# East Asian ideograph + 0x217d40: (0x5b19, 0),# East Asian ideograph + 0x213143: (0x4f5d, 0),# East Asian ideograph + 0x213c77: (0x5ea7, 0),# East Asian ideograph + 0x213144: (0x4f36, 0),# East Asian ideograph + 0x6f4b5c: (0xb0af, 0),# Korean hangul + 0x6f4e4e: (0xb6f4, 0),# Korean hangul + 0x213876: (0x58fa, 0),# East Asian ideograph + 0x223145: (0x6335, 0),# East Asian ideograph + 0x706067: (0x567b, 0),# East Asian ideograph + 0x223832: (0x665f, 0),# East Asian ideograph + 0x295828: (0x9cb4, 0),# East Asian ideograph + 0x233147: (0x89e1, 0),# East Asian ideograph + 0x29586e: (0x9ca5, 0),# East Asian ideograph + 0x213148: (0x4f8d, 0),# East Asian ideograph + 0x275b40: (0x8f7e, 0),# East Asian ideograph + 0x6f4e4f: (0xb6f8, 0),# Korean hangul + 0x275736: (0x8747, 0),# East Asian ideograph + 0x21314a: (0x4f7f, 0),# East Asian ideograph + 0x692549: (0x30c9, 0),# Katakana letter DO + 0x2f5476: (0x9ae1, 0),# East Asian ideograph + 0x21314b: (0x4f9b, 0),# East Asian ideograph + 0x275071: (0x7ea3, 0),# East Asian ideograph + 0x21314c: (0x4f86, 0),# East Asian ideograph + 0x2d3730: (0x751e, 0),# East Asian ideograph + 0x21314d: (0x4f6c, 0),# East Asian ideograph + 0x6f4e50: (0xb700, 0),# Korean hangul + 0x21314f: (0x4f96, 0),# East Asian ideograph + 0x213435: (0x52de, 0),# East Asian ideograph + 0x233c33: (0x8f47, 0),# East Asian ideograph + 0x213151: (0x4f83, 0),# East Asian ideograph + 0x287247: (0x7f11, 0),# East Asian ideograph + 0x697152: (0x99f2, 0),# East Asian ideograph + 0x453768: (0x5efb, 0),# East Asian ideograph + 0x213153: (0x4f88, 0),# East Asian ideograph + 0x276138: (0x9a79, 0),# East Asian ideograph + 0x4b3f51: (0x61d1, 0),# East Asian ideograph + 0x6f4e51: (0xb701, 0),# Korean hangul + 0x213154: (0x4f69, 0),# East Asian ideograph + 0x69254b: (0x30cb, 0),# Katakana letter NI + 0x213436: (0x52db, 0),# East Asian ideograph + 0x6f5826: (0xc998, 0),# Korean hangul + 0x275073: (0x7eab, 0),# East Asian ideograph + 0x354156: (0x91be, 0),# East Asian ideograph + 0x295871: (0x9cce, 0),# East Asian ideograph + 0x287248: (0x7f0f, 0),# East Asian ideograph + 0x4b606f: (0x991d, 0),# East Asian ideograph + 0x233158: (0x89f1, 0),# East Asian ideograph + 0x294531: (0x9528, 0),# East Asian ideograph + 0x6f4e52: (0xb728, 0),# Korean hangul + 0x284366: (0x6924, 0),# East Asian ideograph + 0x217159: (0x55d0, 0),# East Asian ideograph + 0x225a4f: (0x7452, 0),# East Asian ideograph + 0x21315a: (0x4faf, 0),# East Asian ideograph + 0x232822: (0x8627, 0),# East Asian ideograph + 0x21715b: (0x55cd, 0),# East Asian ideograph + 0x274c31: (0x7544, 0),# East Asian ideograph + 0x232826: (0x8629, 0),# East Asian ideograph + 0x23315c: (0x89f3, 0),# East Asian ideograph + 0x224943: (0x6d94, 0),# East Asian ideograph + 0x213a61: (0x5b7a, 0),# East Asian ideograph + 0x21315d: (0x4fe0, 0),# East Asian ideograph + 0x6f4b5d: (0xb0b1, 0),# Korean hangul + 0x232832: (0x8637, 0),# East Asian ideograph + 0x395230: (0x5bd8, 0),# East Asian ideograph + 0x222835: (0x5ea5, 0),# East Asian ideograph + 0x222836: (0x5eaf, 0),# East Asian ideograph + 0x213438: (0x52e2, 0),# East Asian ideograph + 0x232838: (0x8636, 0),# East Asian ideograph + 0x21315f: (0x4fb6, 0),# East Asian ideograph + 0x23283e: (0x863c, 0),# East Asian ideograph + 0x23283f: (0x8640, 0),# East Asian ideograph + 0x232840: (0x863a, 0),# East Asian ideograph + 0x233160: (0x89f6, 0),# East Asian ideograph + 0x222842: (0x5eb9, 0),# East Asian ideograph + 0x39365a: (0x8ae0, 0),# East Asian ideograph + 0x227161: (0x7da3, 0),# East Asian ideograph + 0x22284b: (0x5eb3, 0),# East Asian ideograph + 0x22284c: (0x5ec4, 0),# East Asian ideograph + 0x217162: (0x55dd, 0),# East Asian ideograph + 0x6f4e54: (0xb72c, 0),# Korean hangul + 0x275d3f: (0x9488, 0),# East Asian ideograph + 0x294767: (0x94e7, 0),# East Asian ideograph + 0x69254e: (0x30ce, 0),# Katakana letter NO + 0x222855: (0x5ecb, 0),# East Asian ideograph + 0x222857: (0x5ecd, 0),# East Asian ideograph + 0x213164: (0x4fdf, 0),# East Asian ideograph + 0x22285a: (0x5ed2, 0),# East Asian ideograph + 0x22285b: (0x5ed1, 0),# East Asian ideograph + 0x22285c: (0x5ed5, 0),# East Asian ideograph + 0x23285e: (0x8659, 0),# East Asian ideograph + 0x22285f: (0x5ed4, 0),# East Asian ideograph + 0x222860: (0x5ed9, 0),# East Asian ideograph + 0x222861: (0x5ece, 0),# East Asian ideograph + 0x21232d: (0xff0d, 0),# Ideographic hyphen minus + 0x232866: (0x8661, 0),# East Asian ideograph + 0x4c2867: (0x5edb, 0),# East Asian ideograph + 0x222868: (0x5ee1, 0),# East Asian ideograph + 0x232869: (0x8662, 0),# East Asian ideograph + 0x23286a: (0x8663, 0),# East Asian ideograph + 0x287167: (0x7eef, 0),# East Asian ideograph + 0x22286d: (0x5ee7, 0),# East Asian ideograph + 0x232871: (0x8669, 0),# East Asian ideograph + 0x69254f: (0x30cf, 0),# Katakana letter HA + 0x2d5b7a: (0x8fef, 0),# East Asian ideograph + 0x217169: (0x55e9, 0),# East Asian ideograph + 0x232878: (0x866c, 0),# East Asian ideograph + 0x23287b: (0x8672, 0),# East Asian ideograph + 0x22287c: (0x5eed, 0),# East Asian ideograph + 0x21316a: (0x4fce, 0),# East Asian ideograph + 0x23287e: (0x867b, 0),# East Asian ideograph + 0x274c34: (0x5f02, 0),# East Asian ideograph + 0x23462a: (0x93b7, 0),# East Asian ideograph + 0x21316b: (0x4fd7, 0),# East Asian ideograph + 0x23316c: (0x8a06, 0),# East Asian ideograph + 0x276139: (0x9a78, 0),# East Asian ideograph + 0x6f4e56: (0xb730, 0),# Korean hangul + 0x294769: (0x9564, 0),# East Asian ideograph + 0x6f507b: (0xbc31, 0),# Korean hangul + 0x21316e: (0x500d, 0),# East Asian ideograph + 0x4b5861: (0x4f89, 0),# East Asian ideograph + 0x21716f: (0x55cf, 0),# East Asian ideograph + 0x213170: (0x5026, 0),# East Asian ideograph + 0x4b3e5b: (0x60c5, 0),# East Asian ideograph + 0x213171: (0x500c, 0),# East Asian ideograph + 0x6f4e57: (0xb738, 0),# Korean hangul + 0x223172: (0x639e, 0),# East Asian ideograph + 0x692551: (0x30d1, 0),# Katakana letter PA + 0x21343c: (0x52f5, 0),# East Asian ideograph + 0x273173: (0x4eec, 0),# East Asian ideograph + 0x4c4f24: (0x6f46, 0),# East Asian ideograph + 0x235b7a: (0x9dc1, 0),# East Asian ideograph + 0x287174: (0x7ef2, 0),# East Asian ideograph + 0x274c36: (0x753b, 0),# East Asian ideograph + 0x39365e: (0x559e, 0),# East Asian ideograph + 0x6f5b21: (0xd0ed, 0),# Korean hangul + 0x4b5c32: (0x9038, 0),# East Asian ideograph + 0x6f4b5e: (0xb0b3, 0),# Korean hangul + 0x6f4e58: (0xb739, 0),# Korean hangul + 0x2d3177: (0x5e78, 0),# East Asian ideograph + 0x21343d: (0x52f8, 0),# East Asian ideograph + 0x217178: (0x55c1, 0),# East Asian ideograph + 0x6f5c23: (0xd37c, 0),# Korean hangul + 0x273179: (0x4fe9, 0),# East Asian ideograph + 0x6f5c24: (0xd37d, 0),# Korean hangul + 0x29365f: (0x8d47, 0),# East Asian ideograph + 0x6f5b22: (0xd0ef, 0),# Korean hangul + 0x6f5c25: (0xd380, 0),# Korean hangul + 0x21317b: (0x5012, 0),# East Asian ideograph + 0x6f5c26: (0xd384, 0),# Korean hangul + 0x6f4e59: (0xb73b, 0),# Korean hangul + 0x4b317c: (0x5024, 0),# East Asian ideograph + 0x235c27: (0x9dc3, 0),# East Asian ideograph + 0x22317d: (0x63ab, 0),# East Asian ideograph + 0x215c28: (0x901a, 0),# East Asian ideograph + 0x4c4f26: (0x6edd, 0),# East Asian ideograph + 0x69717e: (0x9af7, 0),# East Asian ideograph + 0x215c29: (0x9020, 0),# East Asian ideograph + 0x216764: (0x5095, 0),# East Asian ideograph + 0x6f5c2a: (0xd390, 0),# Korean hangul + 0x6f5c2b: (0xd391, 0),# Korean hangul + 0x6f4e5a: (0xb744, 0),# Korean hangul + 0x6f5c2c: (0xd398, 0),# Korean hangul + 0x695c2d: (0x6928, 0),# East Asian ideograph + 0x4b372f: (0x5c1c, 0),# East Asian ideograph + 0x274c39: (0x5f53, 0),# East Asian ideograph + 0x287251: (0x7f1f, 0),# East Asian ideograph + 0x6f5c6b: (0xd56c, 0),# Korean hangul + 0x215c2f: (0x902e, 0),# East Asian ideograph + 0x27613a: (0x9a7d, 0),# East Asian ideograph + 0x225c30: (0x74c8, 0),# East Asian ideograph + 0x6f4e5b: (0xb748, 0),# Korean hangul + 0x222923: (0x5ef4, 0),# East Asian ideograph + 0x232925: (0x867a, 0),# East Asian ideograph + 0x232926: (0x8673, 0),# East Asian ideograph + 0x225c31: (0x74c5, 0),# East Asian ideograph + 0x29432b: (0x94c6, 0),# East Asian ideograph + 0x6f5828: (0xc99d, 0),# Korean hangul + 0x215c32: (0xfa25, 0),# East Asian ideograph + 0x23292e: (0x8696, 0),# East Asian ideograph + 0x27507d: (0x7eaf, 0),# East Asian ideograph + 0x217671: (0x5827, 0),# East Asian ideograph + 0x29333b: (0x8c00, 0),# East Asian ideograph + 0x215c33: (0x9032, 0),# East Asian ideograph + 0x222935: (0x5f07, 0),# East Asian ideograph + 0x232936: (0x8691, 0),# East Asian ideograph + 0x232937: (0x869c, 0),# East Asian ideograph + 0x235c34: (0x9dac, 0),# East Asian ideograph + 0x22293a: (0x5f0b, 0),# East Asian ideograph + 0x23293c: (0x868d, 0),# East Asian ideograph + 0x23293d: (0x868b, 0),# East Asian ideograph + 0x6f5c35: (0xd3b5, 0),# Korean hangul + 0x232940: (0x86a6, 0),# East Asian ideograph + 0x232942: (0x869d, 0),# East Asian ideograph + 0x39476f: (0x51c0, 0),# East Asian ideograph + 0x235c36: (0x9db2, 0),# East Asian ideograph + 0x232946: (0x86a0, 0),# East Asian ideograph + 0x2d3f3a: (0x6185, 0),# East Asian ideograph + 0x232948: (0x86a7, 0),# East Asian ideograph + 0x22294a: (0x5f28, 0),# East Asian ideograph + 0x22294b: (0x5f22, 0),# East Asian ideograph + 0x22294c: (0x5f23, 0),# East Asian ideograph + 0x22294d: (0x5f24, 0),# East Asian ideograph + 0x235b7b: (0x9db8, 0),# East Asian ideograph + 0x225c38: (0x74d6, 0),# East Asian ideograph + 0x222952: (0x5f30, 0),# East Asian ideograph + 0x6f5a27: (0xceec, 0),# Korean hangul + 0x215c39: (0x9054, 0),# East Asian ideograph + 0x232958: (0x86ba, 0),# East Asian ideograph + 0x232959: (0x86b0, 0),# East Asian ideograph + 0x22295c: (0x5f40, 0),# East Asian ideograph + 0x215c3a: (0x9055, 0),# East Asian ideograph + 0x6f4e5d: (0xb764, 0),# Korean hangul + 0x22295f: (0x5f44, 0),# East Asian ideograph + 0x232960: (0x86b3, 0),# East Asian ideograph + 0x232962: (0x86c9, 0),# East Asian ideograph + 0x215c3b: (0x903c, 0),# East Asian ideograph + 0x232967: (0x86d8, 0),# East Asian ideograph + 0x222968: (0x5f50, 0),# East Asian ideograph + 0x215c3c: (0x9047, 0),# East Asian ideograph + 0x22296a: (0x5f56, 0),# East Asian ideograph + 0x22296c: (0x5f58, 0),# East Asian ideograph + 0x2d3e60: (0x6075, 0),# East Asian ideograph + 0x23296e: (0x86e3, 0),# East Asian ideograph + 0x225c3d: (0x74d8, 0),# East Asian ideograph + 0x222970: (0x5f60, 0),# East Asian ideograph + 0x232971: (0x86ec, 0),# East Asian ideograph + 0x222972: (0x5f63, 0),# East Asian ideograph + 0x222973: (0x809c, 0),# East Asian ideograph + 0x222974: (0x5f67, 0),# East Asian ideograph + 0x215c3e: (0x904e, 0),# East Asian ideograph + 0x232977: (0x86d0, 0),# East Asian ideograph + 0x222978: (0x5f72, 0),# East Asian ideograph + 0x222979: (0x5f73, 0),# East Asian ideograph + 0x23297a: (0x86d1, 0),# East Asian ideograph + 0x2d5c3f: (0x5fa7, 0),# East Asian ideograph + 0x22297c: (0x5f74, 0),# East Asian ideograph + 0x23297e: (0x86de, 0),# East Asian ideograph + 0x225c40: (0x74da, 0),# East Asian ideograph + 0x213443: (0x5308, 0),# East Asian ideograph + 0x215c41: (0x9041, 0),# East Asian ideograph + 0x4c4f2b: (0x701e, 0),# East Asian ideograph + 0x6f5c42: (0xd3fd, 0),# Korean hangul + 0x333251: (0x5fba, 0),# East Asian ideograph + 0x6f5b28: (0xd138, 0),# Korean hangul + 0x22494f: (0x6d96, 0),# East Asian ideograph + 0x695c43: (0x6981, 0),# East Asian ideograph + 0x4b5c39: (0x9039, 0),# East Asian ideograph + 0x215c44: (0x9060, 0),# East Asian ideograph + 0x6f4e5f: (0xb770, 0),# Korean hangul + 0x273b31: (0x5b9e, 0),# East Asian ideograph + 0x215c45: (0x905c, 0),# East Asian ideograph + 0x29432f: (0x94f3, 0),# East Asian ideograph + 0x696325: (0x7907, 0),# East Asian ideograph + 0x235c46: (0x9dde, 0),# East Asian ideograph + 0x215c47: (0x9065, 0),# East Asian ideograph + 0x6f5b29: (0xd140, 0),# Korean hangul + 0x215c48: (0x905e, 0),# East Asian ideograph + 0x6f4e38: (0xb5b4, 0),# Korean hangul + 0x27613b: (0x9a87, 0),# East Asian ideograph + 0x275c49: (0x9002, 0),# East Asian ideograph + 0x6f4e60: (0xb771, 0),# Korean hangul + 0x273b32: (0x5b81, 0),# East Asian ideograph + 0x29255a: (0x8487, 0),# East Asian ideograph + 0x6f5c4a: (0xd479, 0),# Korean hangul + 0x225a5d: (0x7440, 0),# East Asian ideograph + 0x235e5c: (0x9ee7, 0),# East Asian ideograph + 0x6f5c4b: (0xd47c, 0),# Korean hangul + 0x2d3556: (0x7343, 0),# East Asian ideograph + 0x2d532c: (0x6bd3, 0),# East Asian ideograph + 0x6f5c4c: (0xd480, 0),# Korean hangul + 0x336321: (0x6b6f, 0),# East Asian ideograph + 0x6f5b2a: (0xd141, 0),# Korean hangul + 0x215c4d: (0x9075, 0),# East Asian ideograph + 0x6f4c3a: (0xb193, 0),# Korean hangul + 0x6f5c4e: (0xd489, 0),# Korean hangul + 0x6f4e61: (0xb775, 0),# Korean hangul + 0x294774: (0x9571, 0),# East Asian ideograph + 0x215c4f: (0x9078, 0),# East Asian ideograph + 0x217435: (0x571a, 0),# East Asian ideograph + 0x215c50: (0x9072, 0),# East Asian ideograph + 0x4b3231: (0x4eee, 0),# East Asian ideograph + 0x275c51: (0x8fc1, 0),# East Asian ideograph + 0x6f5b2b: (0xd143, 0),# Korean hangul + 0x275c52: (0x8fbd, 0),# East Asian ideograph + 0x215c53: (0x907a, 0),# East Asian ideograph + 0x4d503a: (0x98d1, 0),# East Asian ideograph + 0x69255c: (0x30dc, 0),# Katakana letter BO + 0x225c54: (0x74e9, 0),# East Asian ideograph + 0x217436: (0x571b, 0),# East Asian ideograph + 0x6f5c55: (0xd508, 0),# Korean hangul + 0x213a36: (0x5abd, 0),# East Asian ideograph + 0x215c56: (0x9081, 0),# East Asian ideograph + 0x6f5b2c: (0xd144, 0),# Korean hangul + 0x455f35: (0x9668, 0),# East Asian ideograph (Version J extension) + 0x215c57: (0x9084, 0),# East Asian ideograph + 0x6f4f3e: (0xb86f, 0),# Korean hangul + 0x6f5c33: (0xd3ad, 0),# Korean hangul + 0x225c58: (0x74f1, 0),# East Asian ideograph + 0x69255d: (0x30dd, 0),# Katakana letter PO + 0x6f5c59: (0xd53c, 0),# Korean hangul + 0x215c5a: (0x9087, 0),# East Asian ideograph + 0x212a21: (0xe8d0, 0),# EACC component character + 0x212a22: (0xe8d1, 0),# EACC component character + 0x215c5b: (0x908a, 0),# East Asian ideograph + 0x212a24: (0xe8d3, 0),# EACC component character + 0x232a25: (0x870b, 0),# East Asian ideograph + 0x212a26: (0xe8d5, 0),# EACC component character + 0x222a27: (0x5f89, 0),# East Asian ideograph + 0x212a28: (0xe8d6, 0),# EACC component character + 0x215c5c: (0x9090, 0),# East Asian ideograph + 0x212a2a: (0xe8d8, 0),# EACC component character + 0x222a2b: (0x5f94, 0),# East Asian ideograph + 0x212a2c: (0xe8da, 0),# EACC component character + 0x212a2d: (0xe8db, 0),# EACC component character + 0x69727e: (0x9d48, 0),# East Asian ideograph + 0x215c5d: (0x908f, 0),# East Asian ideograph + 0x2e284c: (0x5ecf, 0),# East Asian ideograph + 0x6f4e64: (0xb77c, 0),# Korean hangul + 0x275d4f: (0x94b4, 0),# East Asian ideograph + 0x232a33: (0x86f8, 0),# East Asian ideograph + 0x232a34: (0x8706, 0),# East Asian ideograph + 0x4b5c5e: (0x961d, 0),# East Asian ideograph + 0x232a36: (0x870e, 0),# East Asian ideograph + 0x212a37: (0xe8e4, 0),# EACC component character + 0x232a38: (0x8709, 0),# East Asian ideograph + 0x222a39: (0x5f9c, 0),# East Asian ideograph + 0x232a3a: (0x870a, 0),# East Asian ideograph + 0x235c5f: (0x9deb, 0),# East Asian ideograph + 0x212a3c: (0xe8e9, 0),# EACC component character + 0x222a3d: (0x5f9a, 0),# East Asian ideograph + 0x232a3e: (0x870d, 0),# East Asian ideograph + 0x212a3f: (0xe8ec, 0),# EACC component character + 0x212a40: (0xe8ed, 0),# EACC component character + 0x6f5c60: (0xd551, 0),# Korean hangul + 0x232a42: (0x874a, 0),# East Asian ideograph + 0x232a43: (0x8723, 0),# East Asian ideograph + 0x232a44: (0x8737, 0),# East Asian ideograph + 0x232a45: (0x8728, 0),# East Asian ideograph + 0x222a46: (0x5faf, 0),# East Asian ideograph + 0x225c61: (0x74f4, 0),# East Asian ideograph + 0x232a49: (0x8740, 0),# East Asian ideograph + 0x232a4b: (0x872e, 0),# East Asian ideograph + 0x232a4c: (0x873d, 0),# East Asian ideograph + 0x232a4e: (0x871e, 0),# East Asian ideograph + 0x6f4e65: (0xb77d, 0),# Korean hangul + 0x222a50: (0x5fbc, 0),# East Asian ideograph + 0x69255f: (0x30df, 0),# Katakana letter MI + 0x232a53: (0x8743, 0),# East Asian ideograph + 0x232a55: (0x8744, 0),# East Asian ideograph + 0x6f507e: (0xbc38, 0),# Korean hangul + 0x222a57: (0x5fc9, 0),# East Asian ideograph + 0x232a59: (0x8729, 0),# East Asian ideograph + 0x232a5a: (0x8739, 0),# East Asian ideograph + 0x213241: (0x5091, 0),# East Asian ideograph + 0x232a5f: (0x871a, 0),# East Asian ideograph + 0x222a61: (0x5fd2, 0),# East Asian ideograph + 0x222a63: (0x5fd0, 0),# East Asian ideograph + 0x232a64: (0x8731, 0),# East Asian ideograph + 0x232a65: (0x8711, 0),# East Asian ideograph + 0x232a66: (0x8712, 0),# East Asian ideograph + 0x222a67: (0x5fce, 0),# East Asian ideograph + 0x222a68: (0x5fed, 0),# East Asian ideograph + 0x6f4c3b: (0xb194, 0),# Korean hangul + 0x232a6b: (0x874f, 0),# East Asian ideograph + 0x232a6c: (0x8771, 0),# East Asian ideograph + 0x232a6d: (0x8763, 0),# East Asian ideograph + 0x275d51: (0x94b8, 0),# East Asian ideograph + 0x232a71: (0x8764, 0),# East Asian ideograph + 0x222a72: (0x5fee, 0),# East Asian ideograph + 0x232a73: (0x8765, 0),# East Asian ideograph + 0x232a74: (0x877d, 0),# East Asian ideograph + 0x6f5c69: (0xd569, 0),# Korean hangul + 0x222a78: (0x5fe1, 0),# East Asian ideograph + 0x232a79: (0x8758, 0),# East Asian ideograph + 0x222a7b: (0x5fe4, 0),# East Asian ideograph + 0x215c6a: (0x90e1, 0),# East Asian ideograph + 0x28725d: (0x7f1c, 0),# East Asian ideograph + 0x6f5b30: (0xd150, 0),# Korean hangul + 0x275c6b: (0x5369, 0),# East Asian ideograph + 0x3f516d: (0x6403, 0),# East Asian ideograph + 0x235c6c: (0x9de6, 0),# East Asian ideograph + 0x6f4e67: (0xb784, 0),# Korean hangul + 0x275d52: (0x94c0, 0),# East Asian ideograph + 0x215c6d: (0x90f5, 0),# East Asian ideograph + 0x33303a: (0x8ffa, 0),# East Asian ideograph + 0x6f5c6e: (0xd574, 0),# Korean hangul + 0x6f5c6f: (0xd575, 0),# Korean hangul + 0x28725e: (0x7f19, 0),# East Asian ideograph + 0x6f5873: (0xcc0c, 0),# Korean hangul + 0x705f30: (0x7519, 0),# East Asian ideograph + 0x215c70: (0x9109, 0),# East Asian ideograph + 0x215c71: (0x9112, 0),# East Asian ideograph + 0x6f4e68: (0xb78c, 0),# Korean hangul + 0x275e68: (0x9617, 0),# East Asian ideograph + 0x4b5c72: (0x9119, 0),# East Asian ideograph (variant of 215C72 which maps to 9119) + 0x275153: (0x7eac, 0),# East Asian ideograph + 0x215c73: (0x912d, 0),# East Asian ideograph + 0x235a21: (0x9d02, 0),# East Asian ideograph + 0x215c74: (0x9130, 0),# East Asian ideograph + 0x28725f: (0x7f1b, 0),# East Asian ideograph + 0x6f5b32: (0xd15c, 0),# Korean hangul + 0x224959: (0x6dab, 0),# East Asian ideograph + 0x215c75: (0x9127, 0),# East Asian ideograph + 0x6f5c76: (0xd589, 0),# Korean hangul + 0x2d4228: (0x5117, 0),# East Asian ideograph + 0x215c77: (0x9139, 0),# East Asian ideograph (variant of 4B5C77 which maps to 9139) + 0x455e60: (0x95eb, 0),# East Asian ideograph (Version J extension) + 0x6f5c78: (0xd5a5, 0),# Korean hangul + 0x235a22: (0x9d03, 0),# East Asian ideograph + 0x2f3d5d: (0x900e, 0),# East Asian ideograph + 0x6f5c79: (0xd5c8, 0),# Korean hangul + 0x224724: (0x6c5c, 0),# East Asian ideograph + 0x6f5c7a: (0xd5c9, 0),# Korean hangul + 0x27613d: (0x9a8b, 0),# East Asian ideograph + 0x2e4a6b: (0x6ea6, 0),# East Asian ideograph + 0x224726: (0x6c5b, 0),# East Asian ideograph + 0x275d55: (0x94c5, 0),# East Asian ideograph + 0x292564: (0x8489, 0),# East Asian ideograph + 0x224727: (0x6c4d, 0),# East Asian ideograph + 0x225c7d: (0x7507, 0),# East Asian ideograph + 0x22474d: (0x6c93, 0),# East Asian ideograph + 0x235a23: (0x9cf7, 0),# East Asian ideograph + 0x235c7e: (0x9dfd, 0),# East Asian ideograph + 0x2d4729: (0x6d29, 0),# East Asian ideograph + 0x213d57: (0x5f6d, 0),# East Asian ideograph + 0x234d5a: (0x979f, 0),# East Asian ideograph + 0x6f4c3c: (0xb1a8, 0),# Korean hangul + 0x294532: (0x9531, 0),# East Asian ideograph + 0x22472b: (0x6c4b, 0),# East Asian ideograph + 0x3f4a28: (0x9df0, 0),# East Asian ideograph + 0x225a68: (0x7474, 0),# East Asian ideograph + 0x6f7649: (0xe8bb, 0),# Korean hangul + 0x6f5751: (0xc886, 0),# Korean hangul + 0x22472d: (0x6c63, 0),# East Asian ideograph + 0x6f5b35: (0xd160, 0),# Korean hangul + 0x4b3d2a: (0x5ee3, 0),# East Asian ideograph + 0x23472f: (0x93a9, 0),# East Asian ideograph + 0x28773f: (0x804d, 0),# East Asian ideograph + 0x232b21: (0x8761, 0),# East Asian ideograph + 0x692535: (0x30b5, 0),# Katakana letter SA + 0x222b24: (0x5fea, 0),# East Asian ideograph + 0x692566: (0x30e6, 0),# Katakana letter YU + 0x212b26: (0x300d, 0),# Ideographic right corner bracket + 0x225a69: (0x746e, 0),# East Asian ideograph + 0x232b28: (0x875f, 0),# East Asian ideograph + 0x222b2a: (0x6026, 0),# East Asian ideograph + 0x222b2c: (0x6029, 0),# East Asian ideograph + 0x232b2d: (0x876f, 0),# East Asian ideograph + 0x232b2e: (0x875d, 0),# East Asian ideograph + 0x232b30: (0x876e, 0),# East Asian ideograph + 0x222b31: (0x6008, 0),# East Asian ideograph + 0x212b32: (0xff3d, 0),# Ideographic right square bracket + 0x224733: (0x6c76, 0),# East Asian ideograph + 0x212b34: (0xff0e, 0),# Ideographic variant full stop + 0x232b35: (0x8753, 0),# East Asian ideograph + 0x222b36: (0x600a, 0),# East Asian ideograph + 0x222b37: (0x600c, 0),# East Asian ideograph + 0x234d5c: (0x979a, 0),# East Asian ideograph + 0x214734: (0x6cbb, 0),# East Asian ideograph + 0x232b3a: (0x87a3, 0),# East Asian ideograph + 0x4b5e69: (0x95a2, 0),# East Asian ideograph + 0x222b3c: (0x6017, 0),# East Asian ideograph + 0x232b3d: (0x8793, 0),# East Asian ideograph + 0x6f245f: (0x3148, 0),# Korean hangul + 0x2d4735: (0x6c4e, 0),# East Asian ideograph + 0x275d58: (0x94c3, 0),# East Asian ideograph + 0x273b3f: (0x4e13, 0),# East Asian ideograph + 0x692567: (0x30e7, 0),# Katakana letter small YO + 0x213452: (0x5331, 0),# East Asian ideograph + 0x232b45: (0x8799, 0),# East Asian ideograph + 0x222b46: (0x6010, 0),# East Asian ideograph + 0x232b48: (0x8788, 0),# East Asian ideograph + 0x222b4b: (0x6039, 0),# East Asian ideograph + 0x232b4c: (0x8798, 0),# East Asian ideograph + 0x222b50: (0x6013, 0),# East Asian ideograph + 0x224738: (0x6c6c, 0),# East Asian ideograph + 0x222b53: (0x6054, 0),# East Asian ideograph + 0x232b54: (0x878b, 0),# East Asian ideograph + 0x232b55: (0x8784, 0),# East Asian ideograph + 0x222b57: (0x605d, 0),# East Asian ideograph + 0x232b58: (0x87a9, 0),# East Asian ideograph + 0x336b33: (0x524f, 0),# East Asian ideograph + 0x222b5a: (0x6047, 0),# East Asian ideograph + 0x2e2b5b: (0x605a, 0),# East Asian ideograph + 0x232b5d: (0x8789, 0),# East Asian ideograph + 0x222b5e: (0x6049, 0),# East Asian ideograph + 0x222b5f: (0x6053, 0),# East Asian ideograph + 0x232b60: (0x87ad, 0),# East Asian ideograph + 0x4b4e37: (0x7814, 0),# East Asian ideograph + 0x23473b: (0x940f, 0),# East Asian ideograph + 0x232b66: (0x87be, 0),# East Asian ideograph + 0x222b68: (0x6067, 0),# East Asian ideograph + 0x23473c: (0x9420, 0),# East Asian ideograph (not in Unicode) + 0x232b6e: (0x87c4, 0),# East Asian ideograph + 0x232b6f: (0x87af, 0),# East Asian ideograph + 0x222b71: (0x6041, 0),# East Asian ideograph + 0x222b72: (0x6077, 0),# East Asian ideograph + 0x222b74: (0x6042, 0),# East Asian ideograph + 0x22473e: (0x6c94, 0),# East Asian ideograph + 0x222b76: (0x605f, 0),# East Asian ideograph + 0x232b78: (0x87ae, 0),# East Asian ideograph + 0x2e6c27: (0x7b2e, 0),# East Asian ideograph + 0x222b7a: (0x6061, 0),# East Asian ideograph + 0x6f4e6f: (0xb799, 0),# Korean hangul + 0x232b7e: (0x87bf, 0),# East Asian ideograph + 0x692569: (0x30e9, 0),# Katakana letter RA + 0x224740: (0x6c8f, 0),# East Asian ideograph + 0x333c52: (0x8cec, 0),# East Asian ideograph + 0x4b4741: (0x51bd, 0),# East Asian ideograph + 0x23233c: (0x8452, 0),# East Asian ideograph + 0x224742: (0x6c65, 0),# East Asian ideograph + 0x213d58: (0x5f70, 0),# East Asian ideograph + 0x2d5e61: (0x6ff6, 0),# East Asian ideograph + 0x6f4c3d: (0xb1cc, 0),# Korean hangul + 0x69256a: (0x30ea, 0),# Katakana letter RI + 0x294340: (0x94d6, 0),# East Asian ideograph + 0x6f5752: (0xc887, 0),# Korean hangul + 0x4b4b3e: (0xf9ad, 0),# East Asian ideograph + 0x2d4746: (0x6c79, 0),# East Asian ideograph + 0x2d6147: (0x99c8, 0),# East Asian ideograph + 0x224747: (0x6c6f, 0),# East Asian ideograph + 0x705f39: (0x5416, 0),# East Asian ideograph + 0x224749: (0x6c9d, 0),# East Asian ideograph + 0x275d5c: (0x94dc, 0),# East Asian ideograph + 0x295433: (0x9aa7, 0),# East Asian ideograph + 0x2f4a2e: (0x90b4, 0),# East Asian ideograph + 0x22474a: (0x6c69, 0),# East Asian ideograph + 0x22474b: (0x6c9a, 0),# East Asian ideograph + 0x21383b: (0x57f7, 0),# East Asian ideograph + 0x22474c: (0x6c6d, 0),# East Asian ideograph + 0x23474d: (0x9419, 0),# East Asian ideograph + 0x275b47: (0x8f8d, 0),# East Asian ideograph + 0x23474e: (0x940d, 0),# East Asian ideograph + 0x275d5d: (0x94ed, 0),# East Asian ideograph + 0x6f4a2f: (0xadff, 0),# Korean hangul + 0x234750: (0x9426, 0),# East Asian ideograph + 0x6f5d4a: (0xd68c, 0),# Korean hangul + 0x224751: (0x6c87, 0),# East Asian ideograph + 0x39345b: (0x965e, 0),# East Asian ideograph + 0x224752: (0x6c6e, 0),# East Asian ideograph + 0x6f4e73: (0xb7a9, 0),# Korean hangul + 0x69256d: (0x30ed, 0),# Katakana letter RO + 0x4d4754: (0x9544, 0),# East Asian ideograph + 0x294343: (0x94d2, 0),# East Asian ideograph + 0x276d2e: (0x5326, 0),# East Asian ideograph + 0x235a2c: (0x9cf8, 0),# East Asian ideograph + 0x224756: (0x6c95, 0),# East Asian ideograph + 0x234758: (0x9414, 0),# East Asian ideograph + 0x275d5f: (0x94ec, 0),# East Asian ideograph + 0x6f4a31: (0xae01, 0),# Korean hangul + 0x274759: (0x6cea, 0),# East Asian ideograph + 0x6f582d: (0xc9c8, 0),# Korean hangul + 0x4c715a: (0x7ee6, 0),# East Asian ideograph + 0x22475a: (0x6c82, 0),# East Asian ideograph + 0x2d5340: (0x812c, 0),# East Asian ideograph + 0x2d3b6e: (0x5d17, 0),# East Asian ideograph + 0x232c24: (0x87bd, 0),# East Asian ideograph + 0x23475c: (0x9422, 0),# East Asian ideograph + 0x222c2b: (0x6092, 0),# East Asian ideograph + 0x222c2c: (0x609d, 0),# East Asian ideograph + 0x222c2d: (0x6081, 0),# East Asian ideograph + 0x23475d: (0x9406, 0),# East Asian ideograph + 0x232c30: (0x87f3, 0),# East Asian ideograph + 0x232c31: (0x87f0, 0),# East Asian ideograph + 0x222c32: (0x6097, 0),# East Asian ideograph + 0x215673: (0x8725, 0),# East Asian ideograph + 0x232c34: (0x87ea, 0),# East Asian ideograph + 0x29475e: (0x9562, 0),# East Asian ideograph + 0x232c36: (0x87db, 0),# East Asian ideograph + 0x232c37: (0x87e2, 0),# East Asian ideograph + 0x232c39: (0x87eb, 0),# East Asian ideograph + 0x222c3a: (0x6095, 0),# East Asian ideograph + 0x2d475f: (0x51c4, 0),# East Asian ideograph + 0x4d2c3c: (0x87e5, 0),# East Asian ideograph + 0x222c3e: (0x60c7, 0),# East Asian ideograph + 0x232c3f: (0x87f5, 0),# East Asian ideograph + 0x217d48: (0x5b21, 0),# East Asian ideograph + 0x234760: (0x9410, 0),# East Asian ideograph + 0x222c42: (0x60b0, 0),# East Asian ideograph + 0x6f4d33: (0xb36a, 0),# Korean hangul + 0x222c46: (0x60be, 0),# East Asian ideograph + 0x232c47: (0x87e0, 0),# East Asian ideograph + 0x222c48: (0x60d4, 0),# East Asian ideograph + 0x232c49: (0x87dc, 0),# East Asian ideograph + 0x232c4c: (0x87e3, 0),# East Asian ideograph + 0x232c4d: (0x8801, 0),# East Asian ideograph + 0x222c4e: (0x60ce, 0),# East Asian ideograph + 0x232c4f: (0x8803, 0),# East Asian ideograph + 0x232c50: (0x880a, 0),# East Asian ideograph + 0x222c51: (0x60cf, 0),# East Asian ideograph + 0x222c53: (0x60d9, 0),# East Asian ideograph + 0x222c54: (0x60b3, 0),# East Asian ideograph + 0x232c55: (0x87f6, 0),# East Asian ideograph + 0x222c56: (0x60dd, 0),# East Asian ideograph + 0x232c57: (0x87f7, 0),# East Asian ideograph + 0x235a2f: (0x9d2a, 0),# East Asian ideograph + 0x232c5c: (0x880b, 0),# East Asian ideograph + 0x232c5d: (0x8806, 0),# East Asian ideograph + 0x232c5f: (0x87fe, 0),# East Asian ideograph + 0x222c60: (0x60b1, 0),# East Asian ideograph + 0x232c61: (0x8810, 0),# East Asian ideograph + 0x222c62: (0x60e3, 0),# East Asian ideograph + 0x232c63: (0x8819, 0),# East Asian ideograph + 0x232c64: (0x8811, 0),# East Asian ideograph + 0x224766: (0x6cef, 0),# East Asian ideograph + 0x232c66: (0x8818, 0),# East Asian ideograph + 0x222c67: (0x60e5, 0),# East Asian ideograph + 0x222c69: (0x60db, 0),# East Asian ideograph + 0x232c6a: (0x8813, 0),# East Asian ideograph + 0x232c6b: (0x8816, 0),# East Asian ideograph + 0x6f5236: (0xbee0, 0),# Korean hangul + 0x275d62: (0x950c, 0),# East Asian ideograph + 0x222c6e: (0x60e9, 0),# East Asian ideograph + 0x692571: (0x30f1, 0),# Katakana letter WE + 0x222c70: (0x6114, 0),# East Asian ideograph + 0x274768: (0x6d45, 0),# East Asian ideograph + 0x232c72: (0x8834, 0),# East Asian ideograph + 0x232c73: (0x881c, 0),# East Asian ideograph + 0x222c75: (0x6119, 0),# East Asian ideograph + 0x234769: (0x93f7, 0),# East Asian ideograph + 0x232c7a: (0x881b, 0),# East Asian ideograph + 0x222c7c: (0x60fd, 0),# East Asian ideograph + 0x222c7d: (0x610d, 0),# East Asian ideograph + 0x6f5b41: (0xd1f4, 0),# Korean hangul + 0x29323b: (0x8bce, 0),# East Asian ideograph + 0x287042: (0x7ea1, 0),# East Asian ideograph + 0x4b476c: (0x51c5, 0),# East Asian ideograph + 0x275d63: (0x9511, 0),# East Asian ideograph + 0x6f4a35: (0xae0d, 0),# Korean hangul + 0x223e61: (0x6971, 0),# East Asian ideograph + 0x22476e: (0x6cad, 0),# East Asian ideograph (variant of 4C476E which maps to 6CAD) + 0x2d5344: (0x8107, 0),# East Asian ideograph + 0x23476f: (0x940e, 0),# East Asian ideograph + 0x6f5b2e: (0xd14c, 0),# Korean hangul + 0x29323c: (0x8bd2, 0),# East Asian ideograph + 0x6f4e39: (0xb5b5, 0),# Korean hangul + 0x224770: (0x6caf, 0),# East Asian ideograph + 0x295925: (0x9ccc, 0),# East Asian ideograph + 0x234771: (0x9411, 0),# East Asian ideograph + 0x692573: (0x30f3, 0),# Katakana letter N + 0x275921: (0x8c04, 0),# East Asian ideograph + 0x294349: (0x94d5, 0),# East Asian ideograph + 0x2d386e: (0x58ca, 0),# East Asian ideograph + 0x217e23: (0x5b62, 0),# East Asian ideograph + 0x274774: (0x6e0a, 0),# East Asian ideograph + 0x6f5b43: (0xd22c, 0),# Korean hangul + 0x275551: (0x80e1, 0),# East Asian ideograph (duplicate simplified) + 0x22496a: (0x6dac, 0),# East Asian ideograph + 0x6f5b3e: (0xd1b3, 0),# Korean hangul + 0x225265: (0x7168, 0),# East Asian ideograph + 0x2d467c: (0x6cb2, 0),# East Asian ideograph + 0x29464a: (0x953c, 0),# East Asian ideograph + 0x3f3e47: (0x5379, 0),# East Asian ideograph + 0x21345f: (0x5352, 0),# East Asian ideograph + 0x274777: (0x6ca6, 0),# East Asian ideograph + 0x2d6159: (0x9ac4, 0),# East Asian ideograph + 0x213223: (0x5021, 0),# East Asian ideograph + 0x234779: (0x9429, 0),# East Asian ideograph + 0x213224: (0x500b, 0),# East Asian ideograph + 0x695457: (0x58b8, 0),# East Asian ideograph + 0x22477a: (0x6cba, 0),# East Asian ideograph + 0x223225: (0x6387, 0),# East Asian ideograph + 0x22477b: (0x7553, 0),# East Asian ideograph + 0x223226: (0x637a, 0),# East Asian ideograph + 0x6f4b65: (0xb0c5, 0),# Korean hangul + 0x6f4a38: (0xae34, 0),# Korean hangul + 0x213460: (0x5354, 0),# East Asian ideograph + 0x233227: (0x8a51, 0),# East Asian ideograph + 0x27477d: (0x6d8c, 0),# East Asian ideograph + 0x213228: (0x4ff3, 0),# East Asian ideograph + 0x6f5330: (0xc136, 0),# Korean hangul + 0x3f3d6f: (0x8986, 0),# East Asian ideograph + 0x287272: (0x7f21, 0),# East Asian ideograph + 0x6f4c44: (0xb205, 0),# Korean hangul + 0x213229: (0x502d, 0),# East Asian ideograph + 0x28742e: (0x7f42, 0),# East Asian ideograph + 0x6f4f3f: (0xb871, 0),# Korean hangul + 0x22322a: (0x6386, 0),# East Asian ideograph + 0x4c5c61: (0x74f4, 0),# East Asian ideograph (variant of 225C61 which maps to 74F4) + 0x6f4e7c: (0xb7f0, 0),# Korean hangul + 0x6f5237: (0xbee3, 0),# Korean hangul + 0x21722b: (0x55f9, 0),# East Asian ideograph + 0x692576: (0x30f6, 0),# Katakana letter small KE + 0x223860: (0x6673, 0),# East Asian ideograph + 0x21322d: (0x502b, 0),# East Asian ideograph + 0x6f5d4c: (0xd69f, 0),# Korean hangul + 0x6f5b46: (0xd234, 0),# Korean hangul + 0x21322e: (0x505c, 0),# East Asian ideograph + 0x22496d: (0x6dd5, 0),# East Asian ideograph + 0x232b53: (0x8785, 0),# East Asian ideograph + 0x21322f: (0x504f, 0),# East Asian ideograph + 0x225f2f: (0x760f, 0),# East Asian ideograph + 0x292657: (0x835f, 0),# East Asian ideograph + 0x233230: (0x8a56, 0),# East Asian ideograph + 0x232d23: (0x8828, 0),# East Asian ideograph + 0x217231: (0x560c, 0),# East Asian ideograph + 0x232d2a: (0x8832, 0),# East Asian ideograph + 0x222d2c: (0x6110, 0),# East Asian ideograph + 0x232d2e: (0x882e, 0),# East Asian ideograph + 0x213e35: (0x600e, 0),# East Asian ideograph + 0x232d32: (0x882d, 0),# East Asian ideograph + 0x213233: (0x5049, 0),# East Asian ideograph + 0x222d34: (0x60f2, 0),# East Asian ideograph + 0x222d37: (0x6125, 0),# East Asian ideograph + 0x277234: (0x551b, 0),# East Asian ideograph + 0x222d3b: (0x60f8, 0),# East Asian ideograph + 0x232d3c: (0x883c, 0),# East Asian ideograph + 0x6f4e7e: (0xb7fc, 0),# Korean hangul + 0x273235: (0x4fa7, 0),# East Asian ideograph + 0x222d41: (0x60fc, 0),# East Asian ideograph + 0x232d42: (0x4610, 0),# East Asian ideograph (not in Unicode) + 0x275926: (0x8c1a, 0),# East Asian ideograph + 0x232d44: (0x8844, 0),# East Asian ideograph + 0x227236: (0x7df9, 0),# East Asian ideograph + 0x222d48: (0x6149, 0),# East Asian ideograph + 0x222d4a: (0x614a, 0),# East Asian ideograph + 0x232d4b: (0x8847, 0),# East Asian ideograph + 0x222d4e: (0x612b, 0),# East Asian ideograph + 0x287275: (0x7d77, 0),# East Asian ideograph + 0x222d50: (0x6129, 0),# East Asian ideograph + 0x222d51: (0x6150, 0),# East Asian ideograph + 0x232d53: (0x884e, 0),# East Asian ideograph + 0x232d56: (0x8852, 0),# East Asian ideograph + 0x233239: (0x8a48, 0),# East Asian ideograph + 0x222d58: (0x6130, 0),# East Asian ideograph + 0x232d59: (0x8856, 0),# East Asian ideograph + 0x232d5a: (0x8855, 0),# East Asian ideograph + 0x222d5b: (0x6141, 0),# East Asian ideograph + 0x21323a: (0x5055, 0),# East Asian ideograph + 0x232d5e: (0x885c, 0),# East Asian ideograph + 0x232d5f: (0x885a, 0),# East Asian ideograph + 0x222d61: (0x6146, 0),# East Asian ideograph + 0x22323b: (0x6390, 0),# East Asian ideograph + 0x222d66: (0x615e, 0),# East Asian ideograph + 0x222d67: (0x6175, 0),# East Asian ideograph + 0x222d68: (0x6174, 0),# East Asian ideograph + 0x232d69: (0x8869, 0),# East Asian ideograph + 0x21316c: (0x5009, 0),# East Asian ideograph + 0x222d6b: (0x6183, 0),# East Asian ideograph + 0x232d6d: (0x886d, 0),# East Asian ideograph + 0x232d6e: (0x887a, 0),# East Asian ideograph + 0x21323d: (0x508d, 0),# East Asian ideograph + 0x222d70: (0x6171, 0),# East Asian ideograph + 0x232d71: (0x8875, 0),# East Asian ideograph + 0x222757: (0x5e5e, 0),# East Asian ideograph + 0x222d74: (0x616a, 0),# East Asian ideograph + 0x232d75: (0x8872, 0),# East Asian ideograph + 0x6f5045: (0xbb0f, 0),# Korean hangul + 0x222d77: (0x6173, 0),# East Asian ideograph + 0x232d79: (0x887d, 0),# East Asian ideograph + 0x455564: (0x6fdb, 0),# East Asian ideograph (Version J extension) + 0x222d7b: (0x6153, 0),# East Asian ideograph + 0x224234: (0x6a99, 0),# East Asian ideograph + 0x232d7d: (0x887f, 0),# East Asian ideograph + 0x232d7e: (0x887e, 0),# East Asian ideograph + 0x275928: (0x8bb3, 0),# East Asian ideograph + 0x294350: (0x94df, 0),# East Asian ideograph + 0x233240: (0x8a3d, 0),# East Asian ideograph + 0x696126: (0x74f2, 0),# East Asian ideograph + 0x6f567b: (0xc794, 0),# Korean hangul + 0x273241: (0x6770, 0),# East Asian ideograph + 0x6f5874: (0xcc0d, 0),# Korean hangul + 0x6f5b4a: (0xd241, 0),# Korean hangul + 0x213242: (0x5080, 0),# East Asian ideograph + 0x4b5c5b: (0x8fba, 0),# East Asian ideograph + 0x223243: (0x63de, 0),# East Asian ideograph + 0x6f5238: (0xbee4, 0),# Korean hangul + 0x213244: (0x5098, 0),# East Asian ideograph + 0x6f4a3e: (0xae44, 0),# Korean hangul + 0x275929: (0x8c10, 0),# East Asian ideograph + 0x2d4539: (0x6406, 0),# East Asian ideograph + 0x213246: (0x50b3, 0),# East Asian ideograph + 0x274c60: (0x75a1, 0),# East Asian ideograph + 0x6f5b4b: (0xd264, 0),# Korean hangul + 0x273247: (0x503a, 0),# East Asian ideograph + 0x227248: (0x7df6, 0),# East Asian ideograph + 0x23492e: (0x9585, 0),# East Asian ideograph + 0x213249: (0x50c5, 0),# East Asian ideograph + 0x6f4a3f: (0xae45, 0),# Korean hangul + 0x27592a: (0x8c0d, 0),# East Asian ideograph + 0x223866: (0x666d, 0),# East Asian ideograph + 0x21724b: (0x564b, 0),# East Asian ideograph + 0x274c61: (0x759f, 0),# East Asian ideograph + 0x6f5b4c: (0xd277, 0),# Korean hangul + 0x21324c: (0x50b7, 0),# East Asian ideograph + 0x393246: (0x4f1d, 0),# East Asian ideograph + 0x21324d: (0x50af, 0),# East Asian ideograph + 0x275d6e: (0x9530, 0),# East Asian ideograph + 0x6f4a40: (0xae4a, 0),# Korean hangul + 0x27592b: (0x8c0b, 0),# East Asian ideograph + 0x6f5830: (0xc9d1, 0),# Korean hangul + 0x21324f: (0x50ee, 0),# East Asian ideograph + 0x213250: (0x50f1, 0),# East Asian ideograph + 0x274c62: (0x75ea, 0),# East Asian ideograph + 0x333963: (0x59c9, 0),# East Asian ideograph + 0x213251: (0x50e5, 0),# East Asian ideograph + 0x217252: (0x5640, 0),# East Asian ideograph + 0x292433: (0x8298, 0),# East Asian ideograph (duplicate simplified) + 0x69515e: (0x51e9, 0),# East Asian ideograph + 0x287253: (0x7f12, 0),# East Asian ideograph + 0x6f575a: (0xc89f, 0),# Korean hangul + 0x223b63: (0x67d8, 0),# East Asian ideograph + 0x213255: (0x50d5, 0),# East Asian ideograph + 0x274c63: (0x75af, 0),# East Asian ideograph + 0x4c523a: (0x717a, 0),# East Asian ideograph + 0x213256: (0x507d, 0),# East Asian ideograph + 0x234d74: (0x97ab, 0),# East Asian ideograph + 0x22674b: (0x798a, 0),# East Asian ideograph + 0x213257: (0x50cf, 0),# East Asian ideograph + 0x234931: (0x958c, 0),# East Asian ideograph + 0x213258: (0x50d1, 0),# East Asian ideograph + 0x224235: (0x6a9d, 0),# East Asian ideograph + 0x27592d: (0x8c13, 0),# East Asian ideograph + 0x294355: (0x94eb, 0),# East Asian ideograph + 0x273259: (0x4eea, 0),# East Asian ideograph + 0x6f567c: (0xc796, 0),# Korean hangul + 0x21325a: (0x5104, 0),# East Asian ideograph + 0x6f5b4f: (0xd288, 0),# Korean hangul + 0x222e23: (0x618b, 0),# East Asian ideograph + 0x2d5129: (0x7d25, 0),# East Asian ideograph + 0x232e28: (0x88a2, 0),# East Asian ideograph + 0x21325c: (0x50f5, 0),# East Asian ideograph + 0x232e2a: (0x88a4, 0),# East Asian ideograph + 0x222e2c: (0x616f, 0),# East Asian ideograph + 0x222e2d: (0x6165, 0),# East Asian ideograph + 0x6f5239: (0xbee5, 0),# Korean hangul + 0x232e2f: (0x88aa, 0),# East Asian ideograph + 0x276135: (0x9a7e, 0),# East Asian ideograph + 0x222e32: (0x619d, 0),# East Asian ideograph + 0x222e33: (0x61a6, 0),# East Asian ideograph + 0x232e34: (0x889a, 0),# East Asian ideograph + 0x27325e: (0x4fac, 0),# East Asian ideograph + 0x235a3f: (0x9d1e, 0),# East Asian ideograph + 0x232e3a: (0x8890, 0),# East Asian ideograph + 0x232e3b: (0x888c, 0),# East Asian ideograph + 0x232e3d: (0x88a0, 0),# East Asian ideograph + 0x232e40: (0x8899, 0),# East Asian ideograph + 0x213260: (0x5108, 0),# East Asian ideograph + 0x222e42: (0x619c, 0),# East Asian ideograph + 0x222e43: (0x61af, 0),# East Asian ideograph + 0x232e45: (0x8897, 0),# East Asian ideograph + 0x222e46: (0x6197, 0),# East Asian ideograph + 0x222e47: (0x61ad, 0),# East Asian ideograph + 0x232e48: (0x88c9, 0),# East Asian ideograph + 0x232e49: (0x88bf, 0),# East Asian ideograph + 0x232e4a: (0x88ba, 0),# East Asian ideograph + 0x222e4c: (0x6192, 0),# East Asian ideograph + 0x213262: (0x5110, 0),# East Asian ideograph + 0x232e4f: (0x88c0, 0),# East Asian ideograph + 0x6f4a44: (0xae4d, 0),# Korean hangul + 0x232e51: (0x88b2, 0),# East Asian ideograph + 0x222e52: (0x61ae, 0),# East Asian ideograph + 0x213263: (0x5118, 0),# East Asian ideograph + 0x232e54: (0x88bc, 0),# East Asian ideograph + 0x222e55: (0x618d, 0),# East Asian ideograph + 0x232e57: (0x88b7, 0),# East Asian ideograph + 0x232e59: (0x88bd, 0),# East Asian ideograph + 0x232e5a: (0x88c4, 0),# East Asian ideograph + 0x2d313a: (0x62bb, 0),# East Asian ideograph + 0x222e5c: (0x61cc, 0),# East Asian ideograph + 0x222e5d: (0x61c6, 0),# East Asian ideograph + 0x232e5e: (0x88cb, 0),# East Asian ideograph + 0x213265: (0x5114, 0),# East Asian ideograph + 0x232e60: (0x88cc, 0),# East Asian ideograph + 0x232e62: (0x88db, 0),# East Asian ideograph + 0x232e64: (0x88ce, 0),# East Asian ideograph + 0x224535: (0x6ba3, 0),# East Asian ideograph + 0x234934: (0x9597, 0),# East Asian ideograph + 0x222e68: (0x61ba, 0),# East Asian ideograph + 0x222e6a: (0x61b8, 0),# East Asian ideograph + 0x273267: (0x507f, 0),# East Asian ideograph + 0x6f4a45: (0xae4e, 0),# Korean hangul + 0x275930: (0x8c15, 0),# East Asian ideograph + 0x294358: (0x94ef, 0),# East Asian ideograph + 0x232e71: (0x88f1, 0),# East Asian ideograph + 0x232e72: (0x88fe, 0),# East Asian ideograph + 0x6f5d66: (0xd734, 0),# Korean hangul + 0x232e75: (0x88f2, 0),# East Asian ideograph + 0x233269: (0x8a8f, 0),# East Asian ideograph + 0x232e78: (0x8900, 0),# East Asian ideograph + 0x213f2e: (0x6176, 0),# East Asian ideograph + 0x232e7a: (0x88f0, 0),# East Asian ideograph + 0x6f5b52: (0xd293, 0),# Korean hangul + 0x222e7d: (0x61dc, 0),# East Asian ideograph + 0x222e7e: (0x61df, 0),# East Asian ideograph + 0x69723b: (0x9b96, 0),# East Asian ideograph + 0x21326b: (0x513c, 0),# East Asian ideograph + 0x276069: (0x996a, 0),# East Asian ideograph + 0x294359: (0x94e5, 0),# East Asian ideograph + 0x4b5434: (0x6319, 0),# East Asian ideograph + 0x6f5b53: (0xd295, 0),# Korean hangul + 0x21326f: (0x5145, 0),# East Asian ideograph + 0x223270: (0x63be, 0),# East Asian ideograph + 0x234936: (0x958e, 0),# East Asian ideograph + 0x2d4249: (0x53d9, 0),# East Asian ideograph + 0x213271: (0x5146, 0),# East Asian ideograph + 0x224236: (0x6a7e, 0),# East Asian ideograph + 0x6f4a47: (0xae54, 0),# Korean hangul + 0x275932: (0x8c26, 0),# East Asian ideograph + 0x217272: (0x5660, 0),# East Asian ideograph + 0x295834: (0x9cbb, 0),# East Asian ideograph + 0x223273: (0x63dd, 0),# East Asian ideograph + 0x6f5b54: (0xd29c, 0),# Korean hangul + 0x22497b: (0x6dbf, 0),# East Asian ideograph + 0x213275: (0x514c, 0),# East Asian ideograph + 0x6f523a: (0xbeec, 0),# Korean hangul + 0x2d3a26: (0x5a3f, 0),# East Asian ideograph + 0x6f5d21: (0xd5d9, 0),# Korean hangul + 0x283f5c: (0x6769, 0),# East Asian ideograph + 0x29435b: (0x94e3, 0),# East Asian ideograph + 0x213277: (0x514d, 0),# East Asian ideograph + 0x6f5d22: (0xd5db, 0),# Korean hangul + 0x2d5d23: (0x9167, 0),# East Asian ideograph + 0x274c6a: (0x75ae, 0),# East Asian ideograph + 0x6f4c2e: (0xb158, 0),# Korean hangul + 0x213279: (0x5154, 0),# East Asian ideograph + 0x705f54: (0x54b4, 0),# East Asian ideograph + 0x6f5d24: (0xd5e4, 0),# Korean hangul + 0x29324f: (0x8bd6, 0),# East Asian ideograph + 0x393460: (0x604a, 0),# East Asian ideograph + 0x273859: (0x5c18, 0),# East Asian ideograph + 0x225d25: (0x750e, 0),# East Asian ideograph + 0x21327b: (0x5157, 0),# East Asian ideograph + 0x6f5d26: (0xd5e8, 0),# Korean hangul + 0x275934: (0x8bb2, 0),# East Asian ideograph + 0x223870: (0x6684, 0),# East Asian ideograph + 0x235d27: (0x9e0e, 0),# East Asian ideograph + 0x6f577c: (0xc961, 0),# Korean hangul + 0x21327d: (0x5162, 0),# East Asian ideograph + 0x225d28: (0x750d, 0),# East Asian ideograph + 0x213e38: (0x6059, 0),# East Asian ideograph + 0x23327e: (0x8ab6, 0),# East Asian ideograph + 0x295d29: (0x9e71, 0),# East Asian ideograph + 0x293250: (0x8bd3, 0),# East Asian ideograph + 0x275d2a: (0x9154, 0),# East Asian ideograph + 0x235d2b: (0x9e11, 0),# East Asian ideograph + 0x2f4a4a: (0x5f8f, 0),# East Asian ideograph + 0x275935: (0x8c0e, 0),# East Asian ideograph + 0x225d2c: (0x7511, 0),# East Asian ideograph + 0x225d2d: (0x750f, 0),# East Asian ideograph + 0x2d3140: (0x4f32, 0),# East Asian ideograph + 0x6f5b57: (0xd2ac, 0),# Korean hangul + 0x6f5d2e: (0xd604, 0),# Korean hangul + 0x215d2f: (0x919e, 0),# East Asian ideograph + 0x275d79: (0x952e, 0),# East Asian ideograph + 0x275d30: (0x4e11, 0),# East Asian ideograph + 0x6f4a4b: (0xae61, 0),# Korean hangul + 0x232f23: (0x88ef, 0),# East Asian ideograph + 0x232f24: (0x8903, 0),# East Asian ideograph + 0x39456d: (0x826b, 0),# East Asian ideograph + 0x6f5758: (0xc89c, 0),# Korean hangul + 0x215d31: (0x91ab, 0),# East Asian ideograph + 0x225648: (0x72a8, 0),# East Asian ideograph + 0x222f29: (0x61f3, 0),# East Asian ideograph + 0x275d32: (0x9171, 0),# East Asian ideograph + 0x274c6d: (0x75e8, 0),# East Asian ideograph + 0x212f30: (0x3007, 0),# East Asian ideograph (number zero) + 0x225d33: (0x7513, 0),# East Asian ideograph + 0x232f35: (0x8906, 0),# East Asian ideograph + 0x232f36: (0x890c, 0),# East Asian ideograph + 0x232f37: (0x8919, 0),# East Asian ideograph + 0x215d34: (0x91c0, 0),# East Asian ideograph + 0x232f3d: (0x890a, 0),# East Asian ideograph + 0x6f4b69: (0xb0d0, 0),# Korean hangul + 0x215d35: (0x91c1, 0),# East Asian ideograph + 0x6f4a4c: (0xae62, 0),# Korean hangul + 0x222f41: (0x6204, 0),# East Asian ideograph + 0x235742: (0x9b9e, 0),# East Asian ideograph + 0x222f43: (0x6207, 0),# East Asian ideograph + 0x222f44: (0x6209, 0),# East Asian ideograph + 0x232f45: (0x892f, 0),# East Asian ideograph + 0x232f47: (0x8930, 0),# East Asian ideograph + 0x345e47: (0x75fe, 0),# East Asian ideograph + 0x235d37: (0x9e18, 0),# East Asian ideograph + 0x274c6e: (0x7597, 0),# East Asian ideograph + 0x232f4e: (0x8921, 0),# East Asian ideograph + 0x232f4f: (0x8927, 0),# East Asian ideograph + 0x232f51: (0x891f, 0),# East Asian ideograph + 0x232f53: (0x8931, 0),# East Asian ideograph + 0x232f54: (0x891e, 0),# East Asian ideograph + 0x295029: (0x98a5, 0),# East Asian ideograph + 0x232f56: (0x8926, 0),# East Asian ideograph + 0x232f57: (0x8922, 0),# East Asian ideograph + 0x232f5a: (0x8935, 0),# East Asian ideograph + 0x222f5b: (0x6225, 0),# East Asian ideograph + 0x232f5d: (0x8941, 0),# East Asian ideograph + 0x275938: (0x8c22, 0),# East Asian ideograph + 0x232f60: (0x8933, 0),# East Asian ideograph + 0x222f61: (0x6229, 0),# East Asian ideograph + 0x235d3b: (0x9e1d, 0),# East Asian ideograph + 0x232f66: (0x8954, 0),# East Asian ideograph + 0x222f67: (0x622d, 0),# East Asian ideograph + 0x6f5d50: (0xd6c5, 0),# Korean hangul + 0x215d3c: (0x91cf, 0),# East Asian ideograph + 0x6f5b5a: (0xd2b9, 0),# Korean hangul + 0x222f6e: (0x6239, 0),# East Asian ideograph + 0x222f6f: (0x623a, 0),# East Asian ideograph + 0x222f70: (0x623d, 0),# East Asian ideograph + 0x232f72: (0x8947, 0),# East Asian ideograph + 0x27385a: (0x57ab, 0),# East Asian ideograph + 0x222f75: (0x6243, 0),# East Asian ideograph + 0x222f77: (0x6246, 0),# East Asian ideograph + 0x222f78: (0x6245, 0),# East Asian ideograph + 0x222f79: (0x624a, 0),# East Asian ideograph + 0x232f7a: (0x894c, 0),# East Asian ideograph + 0x232f7b: (0x8946, 0),# East Asian ideograph + 0x222f7c: (0x625e, 0),# East Asian ideograph + 0x295859: (0x9cc6, 0),# East Asian ideograph + 0x275d40: (0x9489, 0),# East Asian ideograph + 0x275d41: (0x948a, 0),# East Asian ideograph + 0x6f5b5b: (0xd2bc, 0),# Korean hangul + 0x215d42: (0x91dc, 0),# East Asian ideograph + 0x6f4e3a: (0xb5bb, 0),# Korean hangul + 0x275d43: (0x9497, 0),# East Asian ideograph + 0x45604e: (0x984f, 0),# East Asian ideograph + 0x215d44: (0x91e6, 0),# East Asian ideograph + 0x6f4a4f: (0xae69, 0),# Korean hangul + 0x27593a: (0x8c2c, 0),# East Asian ideograph + 0x273721: (0x545c, 0),# East Asian ideograph + 0x275d45: (0x9493, 0),# East Asian ideograph + 0x2d535e: (0x8193, 0),# East Asian ideograph + 0x275d46: (0x948f, 0),# East Asian ideograph + 0x33632b: (0x7adc, 0),# East Asian ideograph + 0x6f5b5c: (0xd2bf, 0),# Korean hangul + 0x705f5b: (0x54a3, 0),# East Asian ideograph + 0x215d47: (0x9223, 0),# East Asian ideograph + 0x293256: (0x8be9, 0),# East Asian ideograph + 0x2e493b: (0x6e7c, 0),# East Asian ideograph + 0x275d48: (0x949d, 0),# East Asian ideograph + 0x4b4921: (0x6ca2, 0),# East Asian ideograph + 0x235d49: (0x9e84, 0),# East Asian ideograph + 0x27606b: (0x996d, 0),# East Asian ideograph + 0x27593b: (0x8c1f, 0),# East Asian ideograph + 0x6f5759: (0xc89d, 0),# Korean hangul + 0x275d4a: (0x94a0, 0),# East Asian ideograph + 0x215d4b: (0x9214, 0),# East Asian ideograph + 0x6f5b5d: (0xd2c0, 0),# Korean hangul + 0x275d4c: (0x94a7, 0),# East Asian ideograph + 0x284c2e: (0x6d52, 0),# East Asian ideograph + 0x697246: (0x9bd1, 0),# East Asian ideograph + 0x275d4d: (0x94a4, 0),# East Asian ideograph + 0x2d3356: (0x5211, 0),# East Asian ideograph (not in Unicode) + 0x6f4b6a: (0xb0d1, 0),# Korean hangul + 0x6f5d4e: (0xd6a8, 0),# Korean hangul + 0x6f4a51: (0xae70, 0),# Korean hangul + 0x27593c: (0x8bc6, 0),# East Asian ideograph + 0x294364: (0x94f7, 0),# East Asian ideograph + 0x233c77: (0x8fcb, 0),# East Asian ideograph + 0x213a38: (0x5ac2, 0),# East Asian ideograph + 0x275d50: (0x94b9, 0),# East Asian ideograph + 0x2d3147: (0x5002, 0),# East Asian ideograph + 0x6f5b5e: (0xd2c8, 0),# Korean hangul + 0x215d51: (0x923d, 0),# East Asian ideograph + 0x396074: (0x55b0, 0),# East Asian ideograph + 0x215d52: (0x923e, 0),# East Asian ideograph + 0x6f523c: (0xbf09, 0),# Korean hangul + 0x275d53: (0x94be, 0),# East Asian ideograph + 0x21347a: (0x53ad, 0),# East Asian ideograph + 0x213037: (0x4e38, 0),# East Asian ideograph + 0x4b4b63: (0x749c, 0),# East Asian ideograph + 0x215d55: (0x925b, 0),# East Asian ideograph + 0x6f5b5f: (0xd2c9, 0),# Korean hangul + 0x275d56: (0x94a9, 0),# East Asian ideograph + 0x22675c: (0x799a, 0),# East Asian ideograph + 0x275d57: (0x94c2, 0),# East Asian ideograph + 0x234942: (0x95ac, 0),# East Asian ideograph + 0x225d58: (0x7547, 0),# East Asian ideograph + 0x6f4a53: (0xae79, 0),# Korean hangul + 0x224830: (0x6cd1, 0),# East Asian ideograph + 0x275d59: (0x94f0, 0),# East Asian ideograph + 0x235a4f: (0x9d41, 0),# East Asian ideograph + 0x275d5a: (0x94f6, 0),# East Asian ideograph + 0x274c75: (0x765e, 0),# East Asian ideograph + 0x213021: (0x4e00, 0),# East Asian ideograph + 0x213022: (0x4e01, 0),# East Asian ideograph + 0x215d5b: (0x92ac, 0),# East Asian ideograph + 0x213024: (0x4e09, 0),# East Asian ideograph + 0x213025: (0x4e0b, 0),# East Asian ideograph + 0x223026: (0x6268, 0),# East Asian ideograph + 0x213027: (0x4e08, 0),# East Asian ideograph + 0x223028: (0x6260, 0),# East Asian ideograph + 0x233029: (0x895b, 0),# East Asian ideograph + 0x21302a: (0x4e0d, 0),# East Asian ideograph + 0x21302b: (0x4e14, 0),# East Asian ideograph + 0x22302c: (0x6262, 0),# East Asian ideograph + 0x21302d: (0x4e16, 0),# East Asian ideograph + 0x21302e: (0x4e15, 0),# East Asian ideograph + 0x215d5d: (0x9298, 0),# East Asian ideograph + 0x213030: (0x4e22, 0),# East Asian ideograph + 0x233031: (0x8966, 0),# East Asian ideograph + 0x223032: (0x628e, 0),# East Asian ideograph + 0x213034: (0x4e2d, 0),# East Asian ideograph + 0x275d5e: (0x94e2, 0),# East Asian ideograph + 0x213036: (0x51e1, 0),# East Asian ideograph + 0x233037: (0x896d, 0),# East Asian ideograph + 0x213038: (0x4e39, 0),# East Asian ideograph + 0x213039: (0x4e3b, 0),# East Asian ideograph + 0x23303a: (0x896b, 0),# East Asian ideograph + 0x23303b: (0x896e, 0),# East Asian ideograph + 0x23303c: (0x896c, 0),# East Asian ideograph + 0x21303d: (0x4e4b, 0),# East Asian ideograph + 0x21303e: (0x5c39, 0),# East Asian ideograph + 0x21303f: (0x4e4f, 0),# East Asian ideograph + 0x213040: (0x4e4e, 0),# East Asian ideograph + 0x233041: (0x8976, 0),# East Asian ideograph + 0x233042: (0x8974, 0),# East Asian ideograph + 0x223043: (0x6282, 0),# East Asian ideograph + 0x213044: (0x4e56, 0),# East Asian ideograph + 0x213045: (0x4e58, 0),# East Asian ideograph + 0x213046: (0x4e59, 0),# East Asian ideograph + 0x215d61: (0x929c, 0),# East Asian ideograph + 0x213048: (0x4e5f, 0),# East Asian ideograph + 0x233049: (0x897b, 0),# East Asian ideograph + 0x23304a: (0x897c, 0),# East Asian ideograph + 0x22304b: (0x629d, 0),# East Asian ideograph + 0x27304c: (0x5e72, 0),# East Asian ideograph + 0x225d62: (0x7564, 0),# East Asian ideograph + 0x6f4a55: (0xae7c, 0),# Korean hangul + 0x213050: (0x4e8b, 0),# East Asian ideograph + 0x213051: (0x4e8c, 0),# East Asian ideograph + 0x213052: (0x4e8e, 0),# East Asian ideograph + 0x233053: (0x8984, 0),# East Asian ideograph + 0x213054: (0x4e94, 0),# East Asian ideograph + 0x233055: (0x8985, 0),# East Asian ideograph + 0x223056: (0x62a6, 0),# East Asian ideograph + 0x213057: (0x4e99, 0),# East Asian ideograph (variant of 4B3057 which maps to 4E99) + 0x273058: (0x4e9a, 0),# East Asian ideograph + 0x215d64: (0x92b3, 0),# East Asian ideograph + 0x21305a: (0x4e9f, 0),# East Asian ideograph + 0x274c77: (0x7663, 0),# East Asian ideograph + 0x21305c: (0x4ea6, 0),# East Asian ideograph + 0x21305d: (0x4ea5, 0),# East Asian ideograph + 0x21305e: (0x4ea4, 0),# East Asian ideograph + 0x215d65: (0x92ea, 0),# East Asian ideograph + 0x213060: (0x4eab, 0),# East Asian ideograph + 0x213061: (0x4eac, 0),# East Asian ideograph + 0x233062: (0x8991, 0),# East Asian ideograph + 0x213063: (0x4eae, 0),# East Asian ideograph + 0x233064: (0x8997, 0),# East Asian ideograph + 0x215d66: (0x92b7, 0),# East Asian ideograph + 0x233066: (0x8998, 0),# East Asian ideograph + 0x4b5830: (0x899a, 0),# East Asian ideograph + 0x213068: (0x4ec3, 0),# East Asian ideograph + 0x213069: (0x4ec4, 0),# East Asian ideograph + 0x22306a: (0x62c3, 0),# East Asian ideograph + 0x23306b: (0x899c, 0),# East Asian ideograph + 0x21306c: (0x4ec7, 0),# East Asian ideograph + 0x21306d: (0x4ecb, 0),# East Asian ideograph + 0x21306e: (0x4ee4, 0),# East Asian ideograph + 0x23306f: (0x89a1, 0),# East Asian ideograph + 0x213070: (0x4ed5, 0),# East Asian ideograph + 0x275d68: (0x9504, 0),# East Asian ideograph + 0x223072: (0x630d, 0),# East Asian ideograph + 0x213073: (0x4ee3, 0),# East Asian ideograph + 0x213074: (0x4ed4, 0),# East Asian ideograph + 0x213075: (0x4ed7, 0),# East Asian ideograph + 0x233076: (0x89a5, 0),# East Asian ideograph + 0x275d69: (0x9509, 0),# East Asian ideograph + 0x213078: (0x4eff, 0),# East Asian ideograph + 0x233079: (0x89a9, 0),# East Asian ideograph + 0x6f5b63: (0xd2f0, 0),# Korean hangul + 0x21307c: (0x4efb, 0),# East Asian ideograph + 0x275d6a: (0x950b, 0),# East Asian ideograph + 0x21307e: (0x4f15, 0),# East Asian ideograph + 0x224547: (0x6bbd, 0),# East Asian ideograph + 0x215d6b: (0x9320, 0),# East Asian ideograph + 0x292a2f: (0x86f1, 0),# East Asian ideograph + 0x6f5d6c: (0xd754, 0),# Korean hangul + 0x29436a: (0x9512, 0),# East Asian ideograph + 0x215d6d: (0x92f8, 0),# East Asian ideograph + 0x235a53: (0x9d36, 0),# East Asian ideograph + 0x225d6e: (0x757a, 0),# East Asian ideograph + 0x6f535b: (0xc218, 0),# Korean hangul + 0x274c79: (0x766b, 0),# East Asian ideograph + 0x6f5b64: (0xd2f1, 0),# Korean hangul + 0x275d6f: (0x9519, 0),# East Asian ideograph + 0x29325e: (0x8bdc, 0),# East Asian ideograph + 0x6f5721: (0xc7a1, 0),# Korean hangul + 0x2f575f: (0x9abe, 0),# East Asian ideograph + 0x275d70: (0x94b1, 0),# East Asian ideograph + 0x4b5832: (0x89b3, 0),# East Asian ideograph + 0x225d71: (0x7577, 0),# East Asian ideograph + 0x6f4a58: (0xae85, 0),# Korean hangul + 0x275d72: (0x9521, 0),# East Asian ideograph + 0x22343c: (0x649d, 0),# East Asian ideograph + 0x275d73: (0x94ee, 0),# East Asian ideograph + 0x6f5b65: (0xd2f4, 0),# Korean hangul + 0x275d74: (0x5f55, 0),# East Asian ideograph + 0x6f5722: (0xc7a3, 0),# Korean hangul + 0x69724e: (0x9bf2, 0),# East Asian ideograph + 0x215d75: (0x9310, 0),# East Asian ideograph + 0x234948: (0x95bc, 0),# East Asian ideograph + 0x4b325f: (0x50bb, 0),# East Asian ideograph + 0x215d76: (0x9326, 0),# East Asian ideograph + 0x6f5835: (0xc9da, 0),# Korean hangul + 0x692153: (0x3009, 0),# Ideographic greater than sign + 0x215d77: (0x934d, 0),# East Asian ideograph + 0x2d632d: (0x4e80, 0),# East Asian ideograph + 0x215d78: (0x9382, 0),# East Asian ideograph + 0x274c7b: (0x53d1, 0),# East Asian ideograph + 0x6f5b66: (0xd2f8, 0),# Korean hangul + 0x225d79: (0x757d, 0),# East Asian ideograph + 0x6f5432: (0xc2fc, 0),# Korean hangul + 0x224824: (0x6cd8, 0),# East Asian ideograph + 0x4b5c77: (0x9139, 0),# East Asian ideograph + 0x235d7a: (0x9eb0, 0),# East Asian ideograph + 0x6f5d7b: (0xd790, 0),# Korean hangul + 0x27606d: (0x9974, 0),# East Asian ideograph + 0x224826: (0x6cc6, 0),# East Asian ideograph + 0x6f575b: (0xc8a0, 0),# Korean hangul + 0x275d7c: (0x9505, 0),# East Asian ideograph + 0x2e5452: (0x71fe, 0),# East Asian ideograph + 0x234827: (0x93f4, 0),# East Asian ideograph + 0x275d7d: (0x951a, 0),# East Asian ideograph + 0x234828: (0x9436, 0),# East Asian ideograph + 0x6f5b67: (0xd300, 0),# Korean hangul + 0x275d7e: (0x953e, 0),# East Asian ideograph + 0x224829: (0x6ce9, 0),# East Asian ideograph + 0x226764: (0x799d, 0),# East Asian ideograph + 0x23494a: (0x95cd, 0),# East Asian ideograph + 0x395e3d: (0x9295, 0),# East Asian ideograph + 0x6f4a5b: (0xaebe, 0),# Korean hangul + 0x23482b: (0x943b, 0),# East Asian ideograph + 0x275946: (0x8bd1, 0),# East Asian ideograph + 0x22527c: (0x717b, 0),# East Asian ideograph + 0x23482d: (0x9424, 0),# East Asian ideograph + 0x6f5b68: (0xd301, 0),# Korean hangul + 0x6f5725: (0xc7a6, 0),# Korean hangul + 0x284e42: (0x6d4d, 0),# East Asian ideograph + 0x21482f: (0x6e34, 0),# East Asian ideograph + 0x6f523e: (0xbf1d, 0),# Korean hangul + 0x6f4a5c: (0xaec0, 0),# Korean hangul + 0x234830: (0x9437, 0),# East Asian ideograph + 0x213122: (0x4f10, 0),# East Asian ideograph + 0x213123: (0x4f0f, 0),# East Asian ideograph + 0x213124: (0x4ef2, 0),# East Asian ideograph + 0x223125: (0x62f5, 0),# East Asian ideograph + 0x213126: (0x4ef3, 0),# East Asian ideograph + 0x213127: (0x4ef6, 0),# East Asian ideograph + 0x213128: (0x4ef0, 0),# East Asian ideograph + 0x23312a: (0x89b8, 0),# East Asian ideograph + 0x23312b: (0x89b7, 0),# East Asian ideograph + 0x23312c: (0x89b6, 0),# East Asian ideograph + 0x234832: (0x9440, 0),# East Asian ideograph + 0x21312e: (0x4f57, 0),# East Asian ideograph + 0x23312f: (0x89bc, 0),# East Asian ideograph + 0x213130: (0x4f5e, 0),# East Asian ideograph + 0x223131: (0x630c, 0),# East Asian ideograph + 0x233132: (0x89bf, 0),# East Asian ideograph + 0x213133: (0x4f55, 0),# East Asian ideograph + 0x213134: (0x4f30, 0),# East Asian ideograph + 0x213135: (0x4f50, 0),# East Asian ideograph + 0x213136: (0x4f51, 0),# East Asian ideograph + 0x223137: (0x62f6, 0),# East Asian ideograph + 0x213138: (0x4f48, 0),# East Asian ideograph + 0x213139: (0x4f46, 0),# East Asian ideograph + 0x22313a: (0x6331, 0),# East Asian ideograph + 0x23313b: (0x89d5, 0),# East Asian ideograph + 0x21313c: (0x4f54, 0),# East Asian ideograph + 0x21313d: (0x4f3c, 0),# East Asian ideograph + 0x21313e: (0x4f63, 0),# East Asian ideograph + 0x23313f: (0x89da, 0),# East Asian ideograph + 0x213140: (0x4f60, 0),# East Asian ideograph + 0x213141: (0x4f2f, 0),# East Asian ideograph + 0x223142: (0x6345, 0),# East Asian ideograph + 0x233143: (0x89e5, 0),# East Asian ideograph + 0x223144: (0x6343, 0),# East Asian ideograph + 0x234836: (0x942d, 0),# East Asian ideograph + 0x213146: (0x4f6f, 0),# East Asian ideograph + 0x223147: (0x6353, 0),# East Asian ideograph + 0x223148: (0x6364, 0),# East Asian ideograph + 0x223149: (0x6336, 0),# East Asian ideograph + 0x22314a: (0x6344, 0),# East Asian ideograph + 0x224837: (0x6d1d, 0),# East Asian ideograph + 0x23314c: (0x89e9, 0),# East Asian ideograph + 0x23314d: (0x89eb, 0),# East Asian ideograph + 0x21314e: (0x4f8b, 0),# East Asian ideograph + 0x27314f: (0x4ed1, 0),# East Asian ideograph + 0x234838: (0x9431, 0),# East Asian ideograph + 0x213152: (0x4f7b, 0),# East Asian ideograph + 0x233153: (0x89ed, 0),# East Asian ideograph + 0x223154: (0x6339, 0),# East Asian ideograph + 0x213155: (0x4f8f, 0),# East Asian ideograph + 0x213156: (0x4f7e, 0),# East Asian ideograph + 0x213157: (0x4fe1, 0),# East Asian ideograph + 0x223158: (0x6357, 0),# East Asian ideograph + 0x213159: (0x4fb5, 0),# East Asian ideograph + 0x22315a: (0x633c, 0),# East Asian ideograph + 0x22315b: (0x6358, 0),# East Asian ideograph + 0x21315c: (0x4fde, 0),# East Asian ideograph + 0x27315d: (0x4fa0, 0),# East Asian ideograph + 0x21315e: (0x4fcf, 0),# East Asian ideograph + 0x22315f: (0x6354, 0),# East Asian ideograph + 0x213160: (0x4fda, 0),# East Asian ideograph + 0x213161: (0x4fdd, 0),# East Asian ideograph + 0x213162: (0x4fc3, 0),# East Asian ideograph + 0x213163: (0x4fd8, 0),# East Asian ideograph + 0x233164: (0x89f7, 0),# East Asian ideograph + 0x213165: (0x4fca, 0),# East Asian ideograph + 0x213166: (0x4fae, 0),# East Asian ideograph + 0x213167: (0x4fd0, 0),# East Asian ideograph + 0x223168: (0x637d, 0),# East Asian ideograph + 0x273169: (0x7cfb, 0),# East Asian ideograph (duplicate simplified) + 0x22316a: (0x63b6, 0),# East Asian ideograph + 0x22316b: (0x6382, 0),# East Asian ideograph + 0x27316c: (0x4ed3, 0),# East Asian ideograph + 0x23316d: (0x8a07, 0),# East Asian ideograph + 0x22316e: (0x639f, 0),# East Asian ideograph + 0x21483d: (0x6e9d, 0),# East Asian ideograph + 0x233170: (0x8a0f, 0),# East Asian ideograph + 0x233171: (0x8a11, 0),# East Asian ideograph + 0x233172: (0x8a12, 0),# East Asian ideograph + 0x233173: (0x8a0d, 0),# East Asian ideograph + 0x213174: (0x4ff8, 0),# East Asian ideograph + 0x213175: (0x5028, 0),# East Asian ideograph + 0x213176: (0x5014, 0),# East Asian ideograph + 0x213177: (0x5016, 0),# East Asian ideograph + 0x213178: (0x5029, 0),# East Asian ideograph + 0x223179: (0x6381, 0),# East Asian ideograph + 0x23317a: (0x8a27, 0),# East Asian ideograph + 0x22317b: (0x6397, 0),# East Asian ideograph + 0x21317c: (0x503c, 0),# East Asian ideograph + 0x23317d: (0x8a29, 0),# East Asian ideograph + 0x21317e: (0x4ffa, 0),# East Asian ideograph + 0x234840: (0x9445, 0),# East Asian ideograph + 0x274841: (0x6c85, 0),# East Asian ideograph + 0x6f5b6c: (0xd30c, 0),# Korean hangul + 0x234842: (0x9450, 0),# East Asian ideograph + 0x273266: (0x4f18, 0),# East Asian ideograph + 0x4b513b: (0x7cf8, 0),# East Asian ideograph + 0x6f4b6d: (0xb0ec, 0),# Korean hangul + 0x274844: (0x6e7f, 0),# East Asian ideograph + 0x2d4845: (0x6e29, 0),# East Asian ideograph + 0x4b4846: (0x78c6, 0),# East Asian ideograph + 0x226f69: (0x7cc5, 0),# East Asian ideograph + 0x274848: (0x6ca7, 0),# East Asian ideograph + 0x4b3622: (0x8c18, 0),# East Asian ideograph + 0x6f4a61: (0xaed0, 0),# Korean hangul + 0x273733: (0x5578, 0),# East Asian ideograph + 0x23484a: (0x944a, 0),# East Asian ideograph + 0x27484b: (0x51c6, 0),# East Asian ideograph + 0x6f5b6e: (0xd30e, 0),# Korean hangul + 0x2f3639: (0x8c7c, 0),# East Asian ideograph + 0x4b484c: (0x6f91, 0),# East Asian ideograph + 0x22484d: (0x6d26, 0),# East Asian ideograph + 0x22484e: (0x6d27, 0),# East Asian ideograph + 0x294375: (0x9514, 0),# East Asian ideograph + 0x22484f: (0x6d0f, 0),# East Asian ideograph + 0x224850: (0x6d0a, 0),# East Asian ideograph + 0x2d4466: (0x6973, 0),# East Asian ideograph + 0x224851: (0x6d3f, 0),# East Asian ideograph + 0x226329: (0x77be, 0),# East Asian ideograph + 0x234853: (0x9466, 0),# East Asian ideograph + 0x47594e: (0x9c3a, 0),# East Asian ideograph + 0x274854: (0x6e0d, 0),# East Asian ideograph + 0x514e5b: (0x9271, 0),# East Asian ideograph + 0x274855: (0x6da8, 0),# East Asian ideograph + 0x6f5b70: (0xd314, 0),# Korean hangul + 0x274842: (0x706d, 0),# East Asian ideograph + 0x6f572d: (0xc7bf, 0),# Korean hangul + 0x284c41: (0x6ca4, 0),# East Asian ideograph + 0x234560: (0x93be, 0),# East Asian ideograph (not in Unicode) + 0x29243a: (0x83bc, 0),# East Asian ideograph + 0x274857: (0x6c49, 0),# East Asian ideograph + 0x273b79: (0x5c9b, 0),# East Asian ideograph + 0x234858: (0x9462, 0),# East Asian ideograph + 0x2f252d: (0x6a22, 0),# East Asian ideograph + 0x6f575d: (0xc8a8, 0),# Korean hangul + 0x3f4621: (0x9a69, 0),# East Asian ideograph + 0x274859: (0x6d9f, 0),# East Asian ideograph + 0x286622: (0x7857, 0),# East Asian ideograph + 0x22485a: (0x6d07, 0),# East Asian ideograph + 0x4b4d7b: (0x77d7, 0),# East Asian ideograph (variant of 214D7B which maps to 77D7) + 0x6f5b71: (0xd31c, 0),# Korean hangul + 0x213221: (0x5018, 0),# East Asian ideograph + 0x213222: (0x4ff1, 0),# East Asian ideograph + 0x22485b: (0x6d04, 0),# East Asian ideograph + 0x273224: (0x4e2a, 0),# East Asian ideograph + 0x213225: (0x5019, 0),# East Asian ideograph + 0x273226: (0x4f25, 0),# East Asian ideograph + 0x223227: (0x638e, 0),# East Asian ideograph + 0x233228: (0x8a4a, 0),# East Asian ideograph + 0x22485c: (0x6cda, 0),# East Asian ideograph + 0x23322a: (0x8a4e, 0),# East Asian ideograph + 0x21322b: (0x4ffe, 0),# East Asian ideograph + 0x21322c: (0x502a, 0),# East Asian ideograph + 0x27322d: (0x4f26, 0),# East Asian ideograph + 0x27322e: (0x4ec3, 0),# East Asian ideograph (duplicate simplified) + 0x22322f: (0x6375, 0),# East Asian ideograph + 0x223230: (0x63af, 0),# East Asian ideograph + 0x213231: (0x5047, 0),# East Asian ideograph + 0x213232: (0x505a, 0),# East Asian ideograph + 0x273233: (0x4f1f, 0),# East Asian ideograph + 0x213234: (0x5043, 0),# East Asian ideograph + 0x23485e: (0x945e, 0),# East Asian ideograph + 0x213236: (0x5076, 0),# East Asian ideograph + 0x213237: (0x504e, 0),# East Asian ideograph + 0x223238: (0x63b0, 0),# East Asian ideograph + 0x223239: (0x63ae, 0),# East Asian ideograph + 0x22323a: (0x637c, 0),# East Asian ideograph + 0x27485f: (0x6ede, 0),# East Asian ideograph + 0x21323c: (0x5077, 0),# East Asian ideograph + 0x22323d: (0x63ad, 0),# East Asian ideograph + 0x27323e: (0x5bb6, 0),# East Asian ideograph + 0x21323f: (0x5085, 0),# East Asian ideograph + 0x273240: (0x5907, 0),# East Asian ideograph + 0x224860: (0x6d2e, 0),# East Asian ideograph + 0x233242: (0x8a45, 0),# East Asian ideograph + 0x273243: (0x4f27, 0),# East Asian ideograph + 0x273244: (0x4f1e, 0),# East Asian ideograph + 0x213245: (0x50ad, 0),# East Asian ideograph + 0x273246: (0x4f20, 0),# East Asian ideograph + 0x224861: (0x6d35, 0),# East Asian ideograph + 0x213248: (0x50b2, 0),# East Asian ideograph + 0x273249: (0x4ec5, 0),# East Asian ideograph + 0x27324a: (0x503e, 0),# East Asian ideograph + 0x21324b: (0x50ac, 0),# East Asian ideograph + 0x27324c: (0x4f24, 0),# East Asian ideograph + 0x224862: (0x6d3a, 0),# East Asian ideograph + 0x21324e: (0x50e7, 0),# East Asian ideograph + 0x22324f: (0x63bd, 0),# East Asian ideograph + 0x223250: (0x63c3, 0),# East Asian ideograph + 0x273251: (0x4fa5, 0),# East Asian ideograph + 0x223252: (0x63f5, 0),# East Asian ideograph + 0x213253: (0x50ed, 0),# East Asian ideograph + 0x213254: (0x50da, 0),# East Asian ideograph + 0x273255: (0x4ec6, 0),# East Asian ideograph + 0x273256: (0x4f2a, 0),# East Asian ideograph + 0x273257: (0x8c61, 0),# East Asian ideograph + 0x273258: (0x4fa8, 0),# East Asian ideograph + 0x233259: (0x8a82, 0),# East Asian ideograph + 0x27325a: (0x4ebf, 0),# East Asian ideograph + 0x22325b: (0x63e0, 0),# East Asian ideograph + 0x22325c: (0x63d5, 0),# East Asian ideograph + 0x23325d: (0x8a84, 0),# East Asian ideograph + 0x23325e: (0x8a75, 0),# East Asian ideograph + 0x274865: (0x6e14, 0),# East Asian ideograph + 0x273260: (0x4fa9, 0),# East Asian ideograph + 0x273261: (0x4fed, 0),# East Asian ideograph + 0x273262: (0x50a7, 0),# East Asian ideograph + 0x273263: (0x5c3d, 0),# East Asian ideograph (duplicate simplified) + 0x213264: (0x5112, 0),# East Asian ideograph + 0x273265: (0x4fe6, 0),# East Asian ideograph + 0x223266: (0x63c5, 0),# East Asian ideograph (not in Unicode) + 0x213267: (0x511f, 0),# East Asian ideograph + 0x213268: (0x5121, 0),# East Asian ideograph + 0x273269: (0x50a8, 0),# East Asian ideograph + 0x21326a: (0x5137, 0),# East Asian ideograph + 0x27326b: (0x4fe8, 0),# East Asian ideograph + 0x21326c: (0x5140, 0),# East Asian ideograph + 0x21326d: (0x5143, 0),# East Asian ideograph + 0x21326e: (0x5141, 0),# East Asian ideograph + 0x23326f: (0x8a96, 0),# East Asian ideograph + 0x213270: (0x5144, 0),# East Asian ideograph + 0x233271: (0x8a9a, 0),# East Asian ideograph + 0x213272: (0x5149, 0),# East Asian ideograph + 0x273273: (0x51f6, 0),# East Asian ideograph + 0x213274: (0x5148, 0),# East Asian ideograph + 0x274c3c: (0x8fed, 0),# East Asian ideograph + 0x223276: (0x63d1, 0),# East Asian ideograph (not in Unicode) + 0x234869: (0x946d, 0),# East Asian ideograph + 0x213278: (0x5155, 0),# East Asian ideograph + 0x223279: (0x63c4, 0),# East Asian ideograph + 0x27327a: (0x513f, 0),# East Asian ideograph + 0x27327b: (0x5156, 0),# East Asian ideograph + 0x21327c: (0x515c, 0),# East Asian ideograph + 0x22486a: (0x6d2b, 0),# East Asian ideograph + 0x22327e: (0x6412, 0),# East Asian ideograph + 0x2d4f7c: (0x7b5e, 0),# East Asian ideograph + 0x22486b: (0x6d11, 0),# East Asian ideograph + 0x27486c: (0x6cfc, 0),# East Asian ideograph + 0x6f5838: (0xc9dc, 0),# Korean hangul + 0x21304d: (0x4e82, 0),# East Asian ideograph + 0x22486d: (0x6d24, 0),# East Asian ideograph + 0x6f4e5c: (0xb760, 0),# Korean hangul + 0x235c65: (0x9def, 0),# East Asian ideograph + 0x293b3f: (0x8f7a, 0),# East Asian ideograph + 0x27486e: (0x6da7, 0),# East Asian ideograph + 0x6f5b75: (0xd321, 0),# Korean hangul + 0x27486f: (0x6d01, 0),# East Asian ideograph + 0x6f4870: (0xac1b, 0),# Korean hangul + 0x6f4c49: (0xb214, 0),# Korean hangul + 0x234871: (0x9477, 0),# East Asian ideograph + 0x275954: (0x5c82, 0),# East Asian ideograph + 0x2f252e: (0x8507, 0),# East Asian ideograph + 0x6f4872: (0xac1d, 0),# Korean hangul + 0x2d315f: (0x4fa3, 0),# East Asian ideograph + 0x235622: (0x9b35, 0),# East Asian ideograph + 0x6f5b76: (0xd325, 0),# Korean hangul + 0x2d4874: (0x6f5c, 0),# East Asian ideograph + 0x6f4875: (0xac24, 0),# Korean hangul + 0x29457a: (0x9550, 0),# East Asian ideograph + 0x6f4876: (0xac2c, 0),# Korean hangul + 0x227321: (0x7e35, 0),# East Asian ideograph + 0x224877: (0x6da5, 0),# East Asian ideograph + 0x213322: (0x5168, 0),# East Asian ideograph + 0x4b5361: (0x89d2, 0),# East Asian ideograph (duplicate simplified) + 0x274878: (0x6e83, 0),# East Asian ideograph + 0x213323: (0x5169, 0),# East Asian ideograph + 0x455e21: (0x953a, 0),# East Asian ideograph + 0x293271: (0x8bee, 0),# East Asian ideograph + 0x213324: (0x516b, 0),# East Asian ideograph + 0x22455b: (0x6bd6, 0),# East Asian ideograph + 0x6f487a: (0xac31, 0),# Korean hangul + 0x213325: (0x516d, 0),# East Asian ideograph + 0x23487b: (0x9482, 0),# East Asian ideograph + 0x27373d: (0x5480, 0),# East Asian ideograph + 0x27487c: (0x6d53, 0),# East Asian ideograph + 0x213327: (0x516c, 0),# East Asian ideograph + 0x6f5d56: (0xd6e0, 0),# Korean hangul + 0x22487d: (0x6d92, 0),# East Asian ideograph + 0x217328: (0x568c, 0),# East Asian ideograph + 0x6f487e: (0xac54, 0),# Korean hangul + 0x213329: (0x5175, 0),# East Asian ideograph + 0x215f33: (0x9694, 0),# East Asian ideograph + 0x276225: (0x9ccf, 0),# East Asian ideograph + 0x2d332a: (0x4e0c, 0),# East Asian ideograph + 0x2d3e2b: (0x6060, 0),# East Asian ideograph + 0x21332b: (0x5177, 0),# East Asian ideograph + 0x4b5f62: (0x7668, 0),# East Asian ideograph + 0x3f4629: (0x4e97, 0),# East Asian ideograph + 0x513051: (0x8cae, 0),# East Asian ideograph + 0x22332c: (0x6424, 0),# East Asian ideograph + 0x274c3b: (0x7574, 0),# East Asian ideograph + 0x23463c: (0x9389, 0),# East Asian ideograph + 0x22732d: (0x7e52, 0),# East Asian ideograph + 0x22534a: (0x719b, 0),# East Asian ideograph + 0x6f5736: (0xc804, 0),# Korean hangul + 0x215f34: (0x9699, 0),# East Asian ideograph + 0x21332f: (0x5189, 0),# East Asian ideograph + 0x6f4a6d: (0xaf3f, 0),# Korean hangul + 0x275958: (0x4e30, 0),# East Asian ideograph + 0x233321: (0x8abe, 0),# East Asian ideograph + 0x223322: (0x6410, 0),# East Asian ideograph + 0x273323: (0x4e24, 0),# East Asian ideograph + 0x223324: (0x6434, 0),# East Asian ideograph + 0x233325: (0x8acf, 0),# East Asian ideograph + 0x213326: (0x516e, 0),# East Asian ideograph + 0x233327: (0x8ac6, 0),# East Asian ideograph + 0x213328: (0x5171, 0),# East Asian ideograph + 0x223329: (0x641b, 0),# East Asian ideograph + 0x21332a: (0x5176, 0),# East Asian ideograph + 0x22332b: (0x6420, 0),# East Asian ideograph + 0x23332c: (0x8ad1, 0),# East Asian ideograph + 0x23332d: (0x8ad3, 0),# East Asian ideograph + 0x21332e: (0x5180, 0),# East Asian ideograph + 0x22332f: (0x6426, 0),# East Asian ideograph + 0x213330: (0x518c, 0),# East Asian ideograph + 0x233331: (0x8aaf, 0),# East Asian ideograph + 0x213332: (0x5192, 0),# East Asian ideograph + 0x233333: (0x8ad4, 0),# East Asian ideograph + 0x213334: (0x5195, 0),# East Asian ideograph + 0x213335: (0x6700, 0),# East Asian ideograph + 0x213336: (0x5197, 0),# East Asian ideograph + 0x213337: (0x51a0, 0),# East Asian ideograph + 0x233338: (0x8ab9, 0),# East Asian ideograph + 0x223339: (0x3013, 0),# East Asian ideograph (not found in unified han) + 0x23333b: (0x8adb, 0),# East Asian ideograph + 0x21333c: (0x51b0, 0),# East Asian ideograph + 0x22333d: (0x6421, 0),# East Asian ideograph + 0x21333e: (0x51b7, 0),# East Asian ideograph + 0x23333f: (0x8ad0, 0),# East Asian ideograph + 0x233340: (0x8ad7, 0),# East Asian ideograph + 0x213341: (0x51cc, 0),# East Asian ideograph + 0x233344: (0x8af3, 0),# East Asian ideograph + 0x233336: (0x8acd, 0),# East Asian ideograph + 0x213347: (0x51f0, 0),# East Asian ideograph + 0x273348: (0x51ef, 0),# East Asian ideograph + 0x233349: (0x8b4c, 0),# East Asian ideograph + 0x223337: (0x6418, 0),# East Asian ideograph + 0x22334c: (0x6409, 0),# East Asian ideograph + 0x21334d: (0x51f8, 0),# East Asian ideograph + 0x23334e: (0x8af6, 0),# East Asian ideograph + 0x21334f: (0x5200, 0),# East Asian ideograph + 0x213350: (0x5201, 0),# East Asian ideograph + 0x223338: (0x640e, 0),# East Asian ideograph + 0x213352: (0x5207, 0),# East Asian ideograph + 0x223353: (0x6440, 0),# East Asian ideograph + 0x213354: (0x5208, 0),# East Asian ideograph + 0x213355: (0x520a, 0),# East Asian ideograph + 0x233356: (0x8b03, 0),# East Asian ideograph + 0x233357: (0x8ae4, 0),# East Asian ideograph + 0x233359: (0x8b14, 0),# East Asian ideograph + 0x21335a: (0x5224, 0),# East Asian ideograph + 0x21335b: (0x5225, 0),# East Asian ideograph + 0x235749: (0x9b86, 0),# East Asian ideograph + 0x23335d: (0x8afc, 0),# East Asian ideograph + 0x21335e: (0x5229, 0),# East Asian ideograph + 0x21335f: (0x5238, 0),# East Asian ideograph + 0x213360: (0x523b, 0),# East Asian ideograph + 0x213361: (0x5237, 0),# East Asian ideograph + 0x233362: (0x8ade, 0),# East Asian ideograph + 0x233363: (0x8ae1, 0),# East Asian ideograph + 0x233364: (0x8b07, 0),# East Asian ideograph + 0x2d537e: (0x81c8, 0),# East Asian ideograph + 0x213366: (0x5241, 0),# East Asian ideograph + 0x213367: (0x5239, 0),# East Asian ideograph + 0x223368: (0x645b, 0),# East Asian ideograph + 0x213369: (0x524d, 0),# East Asian ideograph + 0x22336a: (0x644f, 0),# East Asian ideograph + 0x27336b: (0x514b, 0),# East Asian ideograph + 0x21336c: (0x524a, 0),# East Asian ideograph + 0x27336d: (0x5219, 0),# East Asian ideograph + 0x21336e: (0x525c, 0),# East Asian ideograph + 0x22336f: (0x6476, 0),# East Asian ideograph + 0x273370: (0x521a, 0),# East Asian ideograph + 0x215f37: (0x969b, 0),# East Asian ideograph + 0x213372: (0x525d, 0),# East Asian ideograph + 0x233373: (0x8b16, 0),# East Asian ideograph + 0x213374: (0x526f, 0),# East Asian ideograph + 0x213375: (0x5272, 0),# East Asian ideograph + 0x223376: (0x6474, 0),# East Asian ideograph + 0x213377: (0x5269, 0),# East Asian ideograph + 0x273378: (0x521b, 0),# East Asian ideograph + 0x233379: (0x8b06, 0),# East Asian ideograph + 0x23337a: (0x8b05, 0),# East Asian ideograph + 0x21337b: (0x527f, 0),# East Asian ideograph + 0x27337c: (0x5212, 0),# East Asian ideograph + 0x21337d: (0x5288, 0),# East Asian ideograph + 0x27337e: (0x5267, 0),# East Asian ideograph + 0x213340: (0x51cd, 0),# East Asian ideograph + 0x217341: (0x569c, 0),# East Asian ideograph + 0x27484f: (0x6caa, 0),# East Asian ideograph + 0x276226: (0x9ca2, 0),# East Asian ideograph + 0x234960: (0x95d5, 0),# East Asian ideograph + 0x6f773b: (0xc6fd, 0),# Korean hangul + 0x213344: (0x51dc, 0),# East Asian ideograph + 0x23337c: (0x8b0f, 0),# East Asian ideograph + 0x223345: (0x6441, 0),# East Asian ideograph + 0x6f5b7e: (0xd33c, 0),# Korean hangul + 0x282e79: (0x6079, 0),# East Asian ideograph + 0x213e40: (0x6046, 0),# East Asian ideograph (variant of 4B3E40 which maps to 6046) + 0x286e68: (0x7b3e, 0),# East Asian ideograph + 0x22677b: (0x79b4, 0),# East Asian ideograph + 0x224562: (0x6bdc, 0),# East Asian ideograph + 0x213348: (0x51f1, 0),# East Asian ideograph + 0x695626: (0x4e62, 0),# East Asian ideograph + 0x6f4a72: (0xaf49, 0),# Korean hangul + 0x213349: (0x51f3, 0),# East Asian ideograph + 0x513057: (0x4e98, 0),# East Asian ideograph + 0x21334b: (0x51fa, 0),# East Asian ideograph + 0x6f573c: (0xc814, 0),# Korean hangul + 0x23334c: (0x8add, 0),# East Asian ideograph + 0x224563: (0x6bdd, 0),# East Asian ideograph + 0x234962: (0x95d2, 0),# East Asian ideograph + 0x6f2525: (0x3160, 0),# Korean hangul + 0x4c3a33: (0x80ad, 0),# East Asian ideograph (variant of 2E3A33 which maps to 80AD) + 0x276072: (0x9975, 0),# East Asian ideograph + 0x27595e: (0x4e88, 0),# East Asian ideograph + 0x21734e: (0x56ac, 0),# East Asian ideograph + 0x273745: (0x55b7, 0),# East Asian ideograph + 0x23334f: (0x8af4, 0),# East Asian ideograph + 0x233350: (0x8af5, 0),# East Asian ideograph + 0x6f573d: (0xc815, 0),# Korean hangul + 0x213351: (0x5203, 0),# East Asian ideograph + 0x395050: (0x7bed, 0),# East Asian ideograph + 0x22633a: (0x77d1, 0),# East Asian ideograph + 0x287352: (0x7f34, 0),# East Asian ideograph + 0x6f4b71: (0xb10b, 0),# Korean hangul + 0x6f4a74: (0xaf58, 0),# Korean hangul + 0x233353: (0x8adf, 0),# East Asian ideograph + 0x4b3354: (0x82c5, 0),# East Asian ideograph + 0x4b3355: (0x520b, 0),# East Asian ideograph + 0x6f573e: (0xc816, 0),# Korean hangul + 0x213356: (0x5211, 0),# East Asian ideograph + 0x224565: (0x6bdf, 0),# East Asian ideograph + 0x213357: (0x5217, 0),# East Asian ideograph + 0x2d5c48: (0x9013, 0),# East Asian ideograph + 0x273747: (0x54dd, 0),# East Asian ideograph + 0x213359: (0x520e, 0),# East Asian ideograph + 0x6f5d58: (0xd6e8, 0),# Korean hangul + 0x27735a: (0x55be, 0),# East Asian ideograph + 0x2d4f41: (0x4e69, 0),# East Asian ideograph + 0x4b5d2b: (0x9162, 0),# East Asian ideograph + 0x273421: (0x5251, 0),# East Asian ideograph + 0x213422: (0x5289, 0),# East Asian ideograph + 0x273423: (0x5242, 0),# East Asian ideograph + 0x223424: (0x6464, 0),# East Asian ideograph + 0x213425: (0x529f, 0),# East Asian ideograph + 0x213426: (0x52a0, 0),# East Asian ideograph + 0x223427: (0x6482, 0),# East Asian ideograph + 0x223428: (0x645e, 0),# East Asian ideograph + 0x21335c: (0x5220, 0),# East Asian ideograph + 0x21342a: (0x52ac, 0),# East Asian ideograph + 0x21342b: (0x52aa, 0),# East Asian ideograph + 0x22342c: (0x647b, 0),# East Asian ideograph + 0x23342d: (0x8b26, 0),# East Asian ideograph + 0x22342e: (0x645c, 0),# East Asian ideograph + 0x27342f: (0x52b2, 0),# East Asian ideograph + 0x233430: (0x8b33, 0),# East Asian ideograph + 0x213431: (0x52d8, 0),# East Asian ideograph + 0x21305b: (0x4ea1, 0),# East Asian ideograph + 0x273433: (0x52a1, 0),# East Asian ideograph + 0x273434: (0x52a8, 0),# East Asian ideograph + 0x273435: (0x52b3, 0),# East Asian ideograph + 0x273436: (0x52cb, 0),# East Asian ideograph + 0x213437: (0x52dd, 0),# East Asian ideograph + 0x273438: (0x52bf, 0),# East Asian ideograph + 0x213439: (0x52e4, 0),# East Asian ideograph + 0x23343a: (0x8b29, 0),# East Asian ideograph + 0x2d335f: (0x52b5, 0),# East Asian ideograph + 0x27343c: (0x52b1, 0),# East Asian ideograph + 0x27343d: (0x529d, 0),# East Asian ideograph + 0x21343e: (0x52fb, 0),# East Asian ideograph + 0x22343f: (0x6499, 0),# East Asian ideograph + 0x213440: (0x52ff, 0),# East Asian ideograph + 0x217360: (0x56c5, 0),# East Asian ideograph + 0x233442: (0x8b48, 0),# East Asian ideograph + 0x215f3e: (0x96bb, 0),# East Asian ideograph + 0x213444: (0x530d, 0),# East Asian ideograph + 0x234966: (0x95da, 0),# East Asian ideograph + 0x213446: (0x530f, 0),# East Asian ideograph + 0x213447: (0x5315, 0),# East Asian ideograph + 0x213448: (0x5316, 0),# East Asian ideograph + 0x213449: (0x5317, 0),# East Asian ideograph + 0x23344a: (0x8b46, 0),# East Asian ideograph + 0x21344b: (0x53f5, 0),# East Asian ideograph + 0x21344c: (0x531d, 0),# East Asian ideograph + 0x22344d: (0x6496, 0),# East Asian ideograph + 0x21344e: (0x5320, 0),# East Asian ideograph + 0x21344f: (0x5323, 0),# East Asian ideograph + 0x213450: (0x532a, 0),# East Asian ideograph + 0x273451: (0x6c47, 0),# East Asian ideograph + 0x273452: (0x532e, 0),# East Asian ideograph + 0x213363: (0x523a, 0),# East Asian ideograph + 0x213454: (0x533e, 0),# East Asian ideograph + 0x273455: (0x533a, 0),# East Asian ideograph + 0x213456: (0x533f, 0),# East Asian ideograph + 0x213457: (0x5341, 0),# East Asian ideograph + 0x213458: (0x5343, 0),# East Asian ideograph + 0x213459: (0x5345, 0),# East Asian ideograph + 0x21345a: (0x5348, 0),# East Asian ideograph + 0x22345b: (0x64b6, 0),# East Asian ideograph + 0x21345c: (0x534a, 0),# East Asian ideograph + 0x21345d: (0x5349, 0),# East Asian ideograph (variant of 2D345D which maps to 5349) + 0x6f5741: (0xc820, 0),# Korean hangul + 0x27345f: (0x5346, 0),# East Asian ideograph + 0x273460: (0x534f, 0),# East Asian ideograph + 0x213461: (0x5353, 0),# East Asian ideograph + 0x223462: (0x649f, 0),# East Asian ideograph + 0x213463: (0x5357, 0),# East Asian ideograph + 0x213464: (0x535a, 0),# East Asian ideograph + 0x223465: (0x64a7, 0),# East Asian ideograph (not in Unicode) + 0x213466: (0x535e, 0),# East Asian ideograph + 0x213467: (0x5361, 0),# East Asian ideograph + 0x233468: (0x8b6b, 0),# East Asian ideograph + 0x213469: (0x5366, 0),# East Asian ideograph + 0x22346a: (0x64d7, 0),# East Asian ideograph + 0x21346b: (0x536e, 0),# East Asian ideograph + 0x21346c: (0x5370, 0),# East Asian ideograph + 0x21346d: (0x5371, 0),# East Asian ideograph + 0x21346e: (0x537d, 0),# East Asian ideograph + 0x21346f: (0x5375, 0),# East Asian ideograph + 0x233470: (0x8b78, 0),# East Asian ideograph + 0x213368: (0x5243, 0),# East Asian ideograph + 0x213473: (0x537b, 0),# East Asian ideograph + 0x223474: (0x64be, 0),# East Asian ideograph + 0x223475: (0x64d0, 0),# East Asian ideograph + 0x213476: (0x539a, 0),# East Asian ideograph + 0x213477: (0x539d, 0),# East Asian ideograph + 0x213478: (0x539f, 0),# East Asian ideograph + 0x233479: (0x8b81, 0),# East Asian ideograph + 0x27347a: (0x538c, 0),# East Asian ideograph + 0x27347b: (0x5389, 0),# East Asian ideograph + 0x21347c: (0x53bb, 0),# East Asian ideograph + 0x27347d: (0x53c2, 0),# East Asian ideograph + 0x21347e: (0x53c8, 0),# East Asian ideograph + 0x334968: (0x7133, 0),# East Asian ideograph + 0x23336b: (0x8b0c, 0),# East Asian ideograph + 0x6f4b72: (0xb10c, 0),# Korean hangul + 0x6f4a79: (0xaf79, 0),# Korean hangul + 0x22336c: (0x646b, 0),# East Asian ideograph + 0x225676: (0x72eb, 0),# East Asian ideograph + 0x29583e: (0x9cca, 0),# East Asian ideograph + 0x21736d: (0x56dd, 0),# East Asian ideograph + 0x2d4f45: (0x9834, 0),# East Asian ideograph + 0x274858: (0x6ee1, 0),# East Asian ideograph + 0x6f5743: (0xc82c, 0),# Korean hangul + 0x23336f: (0x8b1c, 0),# East Asian ideograph + 0x234969: (0x95de, 0),# East Asian ideograph + 0x694677: (0x5302, 0),# East Asian ideograph + 0x217370: (0x56df, 0),# East Asian ideograph + 0x6f4a7a: (0xaf80, 0),# Korean hangul + 0x213371: (0x5254, 0),# East Asian ideograph + 0x333377: (0x5270, 0),# East Asian ideograph + 0x2d3372: (0x5265, 0),# East Asian ideograph + 0x6f5d59: (0xd6f0, 0),# Korean hangul + 0x6f502a: (0xba53, 0),# Korean hangul + 0x696f27: (0x933b, 0),# East Asian ideograph + 0x295c65: (0x9e69, 0),# East Asian ideograph + 0x213373: (0x526a, 0),# East Asian ideograph + 0x395e2f: (0x5277, 0),# East Asian ideograph + 0x287374: (0x7f35, 0),# East Asian ideograph + 0x225f3c: (0x760a, 0),# East Asian ideograph + 0x23496a: (0x95e0, 0),# East Asian ideograph + 0x217375: (0x56eb, 0),# East Asian ideograph + 0x334527: (0x6918, 0),# East Asian ideograph + 0x273376: (0x5240, 0),# East Asian ideograph + 0x6f516a: (0xbe1c, 0),# Korean hangul + 0x275e21: (0x949f, 0),# East Asian ideograph + 0x2d3377: (0x8cf8, 0),# East Asian ideograph + 0x215e22: (0x9318, 0),# East Asian ideograph + 0x27615f: (0x53d1, 0),# East Asian ideograph (duplicate simplified) + 0x233378: (0x8b0b, 0),# East Asian ideograph + 0x215e23: (0x936c, 0),# East Asian ideograph + 0x27485a: (0x6e10, 0),# East Asian ideograph + 0x275e24: (0x953b, 0),# East Asian ideograph + 0x21337a: (0x527d, 0),# East Asian ideograph + 0x225e25: (0x7583, 0),# East Asian ideograph + 0x6f583c: (0xc9e4, 0),# Korean hangul + 0x22337b: (0x6473, 0),# East Asian ideograph + 0x27374e: (0x549b, 0),# East Asian ideograph + 0x2d5e26: (0x7194, 0),# East Asian ideograph + 0x293f4c: (0x90d3, 0),# East Asian ideograph + 0x21337c: (0x5283, 0),# East Asian ideograph + 0x215e27: (0x93ae, 0),# East Asian ideograph + 0x335635: (0x85ac, 0),# East Asian ideograph + 0x3f3f24: (0x614e, 0),# East Asian ideograph + 0x23337d: (0x8b10, 0),# East Asian ideograph + 0x215e28: (0x9396, 0),# East Asian ideograph + 0x6f5746: (0xc838, 0),# Korean hangul + 0x21337e: (0x5287, 0),# East Asian ideograph + 0x275e29: (0x94a8, 0),# East Asian ideograph + 0x6f4c4d: (0xb233, 0),# Korean hangul + 0x215e2a: (0x93b3, 0),# East Asian ideograph + 0x215e2b: (0x93e1, 0),# East Asian ideograph + 0x213062: (0x4ead, 0),# East Asian ideograph + 0x692564: (0x30e4, 0),# Katakana letter YA + 0x223461: (0x6498, 0),# East Asian ideograph + 0x29516d: (0x9991, 0),# East Asian ideograph + 0x215e2c: (0x93d1, 0),# East Asian ideograph + 0x225e2d: (0x7592, 0),# East Asian ideograph + 0x4c4d63: (0x6f99, 0),# East Asian ideograph + 0x6f5747: (0xc83c, 0),# Korean hangul + 0x215e2e: (0x93c3, 0),# East Asian ideograph + 0x213d2c: (0x5ee0, 0),# East Asian ideograph + 0x275e2f: (0x94f2, 0),# East Asian ideograph + 0x2d6056: (0x980b, 0),# East Asian ideograph + 0x6f4a7e: (0xaf95, 0),# Korean hangul + 0x275969: (0x8d1e, 0),# East Asian ideograph + 0x215e30: (0x93d7, 0),# East Asian ideograph + 0x213522: (0x53cb, 0),# East Asian ideograph + 0x233523: (0x8b8b, 0),# East Asian ideograph + 0x213524: (0x53cd, 0),# East Asian ideograph + 0x213525: (0x53d6, 0),# East Asian ideograph + 0x233526: (0x8b87, 0),# East Asian ideograph + 0x225e31: (0x7595, 0),# East Asian ideograph + 0x213528: (0x53db, 0),# East Asian ideograph + 0x213529: (0x53df, 0),# East Asian ideograph + 0x22352a: (0x64ef, 0),# East Asian ideograph + 0x27352b: (0x4e1b, 0),# East Asian ideograph + 0x21352c: (0x53e3, 0),# East Asian ideograph + 0x22352d: (0x64e1, 0),# East Asian ideograph + 0x22352e: (0x64e5, 0),# East Asian ideograph + 0x224873: (0x6d63, 0),# East Asian ideograph + 0x213530: (0x53ef, 0),# East Asian ideograph + 0x213531: (0x53e9, 0),# East Asian ideograph + 0x213532: (0x53f3, 0),# East Asian ideograph + 0x223533: (0x64e2, 0),# East Asian ideograph + 0x213534: (0x53e8, 0),# East Asian ideograph + 0x213535: (0x53e6, 0),# East Asian ideograph + 0x223536: (0x64ed, 0),# East Asian ideograph + 0x233537: (0x8b9c, 0),# East Asian ideograph + 0x223538: (0x64e4, 0),# East Asian ideograph + 0x275e34: (0x9542, 0),# East Asian ideograph + 0x21353a: (0x53f1, 0),# East Asian ideograph + 0x21353b: (0x53ed, 0),# East Asian ideograph + 0x21353c: (0x53ea, 0),# East Asian ideograph + 0x23353d: (0x8c3a, 0),# East Asian ideograph + 0x235e35: (0x9ec6, 0),# East Asian ideograph + 0x213540: (0x5409, 0),# East Asian ideograph + 0x213541: (0x5410, 0),# East Asian ideograph + 0x213542: (0x540f, 0),# East Asian ideograph + 0x235a7b: (0x9d59, 0),# East Asian ideograph + 0x233544: (0x8c40, 0),# East Asian ideograph + 0x233545: (0x8c42, 0),# East Asian ideograph + 0x213546: (0x5404, 0),# East Asian ideograph + 0x213547: (0x5403, 0),# East Asian ideograph + 0x213548: (0x5412, 0),# East Asian ideograph + 0x2d7164: (0x55d4, 0),# East Asian ideograph (variant of 217164 which maps to 55D4) + 0x21354a: (0x5406, 0),# East Asian ideograph (not in Unicode) + 0x23354b: (0x8c47, 0),# East Asian ideograph + 0x21354d: (0x542d, 0),# East Asian ideograph + 0x21354e: (0x541d, 0),# East Asian ideograph + 0x21354f: (0x541e, 0),# East Asian ideograph + 0x213550: (0x541b, 0),# East Asian ideograph + 0x213551: (0x544e, 0),# East Asian ideograph + 0x233552: (0x8c55, 0),# East Asian ideograph + 0x23496f: (0x95e5, 0),# East Asian ideograph + 0x233554: (0x8c57, 0),# East Asian ideograph + 0x213555: (0x5431, 0),# East Asian ideograph + 0x233556: (0x8c5d, 0),# East Asian ideograph + 0x213557: (0x543c, 0),# East Asian ideograph + 0x213558: (0x5443, 0),# East Asian ideograph + 0x213559: (0x5426, 0),# East Asian ideograph + 0x21355a: (0x5420, 0),# East Asian ideograph + 0x22355b: (0x6516, 0),# East Asian ideograph + 0x23355c: (0x86c3, 0),# East Asian ideograph + 0x21355d: (0x5435, 0),# East Asian ideograph + 0x234e26: (0x97b5, 0),# East Asian ideograph + 0x21355f: (0x544a, 0),# East Asian ideograph + 0x213560: (0x5448, 0),# East Asian ideograph + 0x223561: (0x651b, 0),# East Asian ideograph + 0x213562: (0x5438, 0),# East Asian ideograph + 0x233563: (0x8c68, 0),# East Asian ideograph + 0x213564: (0x5442, 0),# East Asian ideograph + 0x233565: (0x8c6d, 0),# East Asian ideograph + 0x213566: (0x541f, 0),# East Asian ideograph + 0x213567: (0x5429, 0),# East Asian ideograph + 0x213568: (0x5473, 0),# East Asian ideograph + 0x223569: (0x6527, 0),# East Asian ideograph + 0x21356a: (0x5475, 0),# East Asian ideograph + 0x21356b: (0x5495, 0),# East Asian ideograph + 0x21356c: (0x5478, 0),# East Asian ideograph + 0x22356d: (0x6522, 0),# East Asian ideograph + 0x21356e: (0x5477, 0),# East Asian ideograph + 0x22356f: (0x6529, 0),# East Asian ideograph + 0x213571: (0x5492, 0),# East Asian ideograph + 0x223572: (0x6525, 0),# East Asian ideograph + 0x213573: (0x547c, 0),# East Asian ideograph + 0x233574: (0x8c76, 0),# East Asian ideograph + 0x225e3e: (0x75ba, 0),# East Asian ideograph + 0x213576: (0x548b, 0),# East Asian ideograph + 0x213577: (0x548c, 0),# East Asian ideograph + 0x213578: (0x5490, 0),# East Asian ideograph + 0x213579: (0x547d, 0),# East Asian ideograph + 0x21357a: (0x5476, 0),# East Asian ideograph + 0x23357b: (0x8c78, 0),# East Asian ideograph + 0x22357c: (0x6541, 0),# East Asian ideograph + 0x23357d: (0x8c7b, 0),# East Asian ideograph + 0x21357e: (0x54a9, 0),# East Asian ideograph + 0x275e40: (0x956f, 0),# East Asian ideograph + 0x23563a: (0x9b48, 0),# East Asian ideograph + 0x333421: (0x91fc, 0),# East Asian ideograph + 0x6f574b: (0xc874, 0),# Korean hangul + 0x234566: (0x9355, 0),# East Asian ideograph + 0x235e42: (0x9ecc, 0),# East Asian ideograph + 0x213d30: (0x5ef7, 0),# East Asian ideograph + 0x6f4c4e: (0xb234, 0),# Korean hangul + 0x225e43: (0x75b0, 0),# East Asian ideograph + 0x225e44: (0x75c3, 0),# East Asian ideograph + 0x27552a: (0x82cb, 0),# East Asian ideograph + 0x6f5763: (0xc8cc, 0),# Korean hangul + 0x275e45: (0x94c4, 0),# East Asian ideograph + 0x225e46: (0x75bf, 0),# East Asian ideograph + 0x2d5927: (0x8acc, 0),# East Asian ideograph + 0x234c38: (0x971b, 0),# East Asian ideograph + 0x6f574c: (0xc878, 0),# Korean hangul + 0x225e47: (0x75b4, 0),# East Asian ideograph + 0x6f5d29: (0xd5f5, 0),# Korean hangul + 0x6f4b74: (0xb110, 0),# Korean hangul + 0x23452f: (0x9342, 0),# East Asian ideograph + 0x27596e: (0x8d2f, 0),# East Asian ideograph + 0x273755: (0x5411, 0),# East Asian ideograph + 0x275e49: (0x9523, 0),# East Asian ideograph + 0x215e4a: (0x947d, 0),# East Asian ideograph + 0x23563c: (0x9b4e, 0),# East Asian ideograph + 0x333423: (0x5264, 0),# East Asian ideograph + 0x275e4b: (0x51ff, 0),# East Asian ideograph + 0x6f574d: (0xc87a, 0),# Korean hangul + 0x235e4c: (0x9ed3, 0),# East Asian ideograph + 0x275e4d: (0x95e8, 0),# East Asian ideograph + 0x34492f: (0x6d34, 0),# East Asian ideograph + 0x225e4e: (0x75c1, 0),# East Asian ideograph + 0x277745: (0x57d9, 0),# East Asian ideograph + 0x275e4f: (0x95ea, 0),# East Asian ideograph + 0x4c6f43: (0x7ccd, 0),# East Asian ideograph + 0x225e50: (0x75b1, 0),# East Asian ideograph + 0x274863: (0x6d46, 0),# East Asian ideograph + 0x6f574e: (0xc880, 0),# Korean hangul + 0x284c62: (0x988d, 0),# East Asian ideograph + 0x225e51: (0x75c4, 0),# East Asian ideograph + 0x213d33: (0x5efa, 0),# East Asian ideograph + 0x275e52: (0x95f0, 0),# East Asian ideograph + 0x275970: (0x8d2a, 0),# East Asian ideograph + 0x215e53: (0x958b, 0),# East Asian ideograph + 0x275e54: (0x95f2, 0),# East Asian ideograph + 0x23563e: (0x9b4d, 0),# East Asian ideograph + 0x215e55: (0x9593, 0),# East Asian ideograph + 0x274864: (0x6e17, 0),# East Asian ideograph + 0x6f574f: (0xc881, 0),# Korean hangul + 0x6f4d29: (0xb355, 0),# Korean hangul + 0x235e57: (0x9ee3, 0),# East Asian ideograph + 0x275971: (0x8d2b, 0),# East Asian ideograph + 0x225e58: (0x75cd, 0),# East Asian ideograph + 0x215e59: (0x95a8, 0),# East Asian ideograph + 0x275e5a: (0x95fd, 0),# East Asian ideograph + 0x6f7727: (0xadd5, 0),# Korean hangul + 0x213621: (0x54aa, 0),# East Asian ideograph + 0x213622: (0x54a8, 0),# East Asian ideograph + 0x213623: (0x54ac, 0),# East Asian ideograph + 0x213624: (0x54c0, 0),# East Asian ideograph + 0x213625: (0x54b3, 0),# East Asian ideograph + 0x213626: (0x54a6, 0),# East Asian ideograph + 0x213627: (0x54ab, 0),# East Asian ideograph + 0x213628: (0x54c7, 0),# East Asian ideograph + 0x213629: (0x54c9, 0),# East Asian ideograph + 0x21362a: (0x54c4, 0),# East Asian ideograph + 0x21362b: (0x54c2, 0),# East Asian ideograph + 0x22362c: (0x6538, 0),# East Asian ideograph + 0x21362d: (0x54c1, 0),# East Asian ideograph + 0x23362e: (0x8c88, 0),# East Asian ideograph + 0x21362f: (0x54ce, 0),# East Asian ideograph + 0x213630: (0x54b1, 0),# East Asian ideograph + 0x213631: (0x54bb, 0),# East Asian ideograph + 0x213632: (0x54af, 0),# East Asian ideograph + 0x213633: (0x54c8, 0),# East Asian ideograph + 0x223634: (0x6542, 0),# East Asian ideograph + 0x225e5e: (0x75cc, 0),# East Asian ideograph + 0x213636: (0x5510, 0),# East Asian ideograph + 0x213637: (0x54ea, 0),# East Asian ideograph + 0x213638: (0x5514, 0),# East Asian ideograph + 0x233639: (0x8c94, 0),# East Asian ideograph + 0x21363a: (0x54e5, 0),# East Asian ideograph + 0x225e5f: (0x75d0, 0),# East Asian ideograph + 0x21363c: (0x54f2, 0),# East Asian ideograph + 0x21363d: (0x54e8, 0),# East Asian ideograph + 0x21363e: (0x54e1, 0),# East Asian ideograph + 0x22363f: (0x6555, 0),# East Asian ideograph + 0x213640: (0x54ed, 0),# East Asian ideograph + 0x233641: (0x8c9b, 0),# East Asian ideograph + 0x213642: (0x5509, 0),# East Asian ideograph + 0x213643: (0x54e6, 0),# East Asian ideograph + 0x233644: (0x8ca4, 0),# East Asian ideograph + 0x223645: (0x6567, 0),# East Asian ideograph + 0x213646: (0x5546, 0),# East Asian ideograph + 0x223647: (0x6561, 0),# East Asian ideograph + 0x213648: (0x554f, 0),# East Asian ideograph + 0x273649: (0x54d1, 0),# East Asian ideograph + 0x21364a: (0x5566, 0),# East Asian ideograph + 0x21364b: (0x556a, 0),# East Asian ideograph + 0x21364c: (0x554a, 0),# East Asian ideograph + 0x21364d: (0x5544, 0),# East Asian ideograph + 0x21364e: (0x555c, 0),# East Asian ideograph + 0x22364f: (0x656d, 0),# East Asian ideograph + 0x213650: (0x5543, 0),# East Asian ideograph + 0x213651: (0x552c, 0),# East Asian ideograph + 0x213652: (0x5561, 0),# East Asian ideograph + 0x233653: (0x8cb9, 0),# East Asian ideograph + 0x223654: (0x657a, 0),# East Asian ideograph + 0x213655: (0x5555, 0),# East Asian ideograph + 0x213656: (0x552f, 0),# East Asian ideograph + 0x233657: (0x8ccd, 0),# East Asian ideograph + 0x213658: (0x5564, 0),# East Asian ideograph + 0x213659: (0x5538, 0),# East Asian ideograph + 0x21365a: (0x55a7, 0),# East Asian ideograph + 0x21365b: (0x5580, 0),# East Asian ideograph + 0x21365c: (0x557b, 0),# East Asian ideograph + 0x21365d: (0x557c, 0),# East Asian ideograph + 0x21365e: (0x5527, 0),# East Asian ideograph + 0x21365f: (0x5594, 0),# East Asian ideograph + 0x213660: (0x5587, 0),# East Asian ideograph + 0x213661: (0x559c, 0),# East Asian ideograph + 0x213662: (0x558b, 0),# East Asian ideograph + 0x273663: (0x4e27, 0),# East Asian ideograph + 0x213664: (0x55b3, 0),# East Asian ideograph + 0x225e66: (0x75e1, 0),# East Asian ideograph + 0x213666: (0x5583, 0),# East Asian ideograph + 0x213667: (0x55b1, 0),# East Asian ideograph + 0x273668: (0x5355, 0),# East Asian ideograph + 0x213669: (0x5582, 0),# East Asian ideograph + 0x21366a: (0x559f, 0),# East Asian ideograph + 0x225e67: (0x75e6, 0),# East Asian ideograph + 0x21366c: (0x5598, 0),# East Asian ideograph + 0x21366d: (0x559a, 0),# East Asian ideograph + 0x22366e: (0x658c, 0),# East Asian ideograph + 0x27366f: (0x4e54, 0),# East Asian ideograph + 0x223670: (0x6592, 0),# East Asian ideograph + 0x213671: (0x55b2, 0),# East Asian ideograph + 0x233672: (0x8cdd, 0),# East Asian ideograph + 0x213673: (0x55e8, 0),# East Asian ideograph + 0x233674: (0x8cd9, 0),# East Asian ideograph + 0x223675: (0x659b, 0),# East Asian ideograph + 0x213676: (0x55dc, 0),# East Asian ideograph + 0x223677: (0x659d, 0),# East Asian ideograph + 0x213678: (0x55c7, 0),# East Asian ideograph + 0x213679: (0x55d3, 0),# East Asian ideograph + 0x21367a: (0x55ce, 0),# East Asian ideograph + 0x21367b: (0x55e3, 0),# East Asian ideograph + 0x23367c: (0x8cf5, 0),# East Asian ideograph + 0x21367d: (0x55e4, 0),# East Asian ideograph + 0x23367e: (0x8cfb, 0),# East Asian ideograph + 0x232760: (0x8600, 0),# East Asian ideograph + 0x275e6b: (0x8f9f, 0),# East Asian ideograph (duplicate simplified) + 0x285424: (0x70e8, 0),# East Asian ideograph + 0x27375c: (0x556d, 0),# East Asian ideograph + 0x4b5e6c: (0x961d, 0),# East Asian ideograph (duplicate simplified) + 0x293f5a: (0x90e7, 0),# East Asian ideograph + 0x235e6f: (0x9ef6, 0),# East Asian ideograph + 0x4b5422: (0x81d3, 0),# East Asian ideograph + 0x6f583f: (0xc9ec, 0),# Korean hangul + 0x27375d: (0x55eb, 0),# East Asian ideograph + 0x225e71: (0x75e4, 0),# East Asian ideograph + 0x225e72: (0x75e0, 0),# East Asian ideograph + 0x4b4759: (0x6d99, 0),# East Asian ideograph + 0x6f4b66: (0xb0c7, 0),# Korean hangul + 0x225e73: (0x75d7, 0),# East Asian ideograph + 0x6f5755: (0xc88d, 0),# Korean hangul + 0x235e74: (0x9ef9, 0),# East Asian ideograph + 0x275977: (0x8d3a, 0),# East Asian ideograph + 0x27375e: (0x56a3, 0),# East Asian ideograph + 0x235e76: (0x9efb, 0),# East Asian ideograph + 0x274921: (0x6cfd, 0),# East Asian ideograph + 0x293f5c: (0x90ac, 0),# East Asian ideograph + 0x2d616a: (0x6b1d, 0),# East Asian ideograph + 0x215e77: (0x964c, 0),# East Asian ideograph + 0x274922: (0x6d4a, 0),# East Asian ideograph + 0x6f5756: (0xc890, 0),# Korean hangul + 0x6f4924: (0xac74, 0),# Korean hangul + 0x6f4b76: (0xb118, 0),# Korean hangul + 0x215e7a: (0x9662, 0),# East Asian ideograph + 0x224925: (0x6d6d, 0),# East Asian ideograph + 0x275978: (0x8d35, 0),# East Asian ideograph + 0x235e7b: (0x9efe, 0),# East Asian ideograph (not in Unicode) + 0x274926: (0x6d4e, 0),# East Asian ideograph + 0x215e7c: (0x965b, 0),# East Asian ideograph + 0x274927: (0x6cde, 0),# East Asian ideograph + 0x235e7d: (0x9f02, 0),# East Asian ideograph + 0x274928: (0x6ee8, 0),# East Asian ideograph + 0x6f5757: (0xc894, 0),# Korean hangul + 0x215e7e: (0x965d, 0),# East Asian ideograph + 0x224929: (0x6d91, 0),# East Asian ideograph + 0x287065: (0x7ec2, 0),# East Asian ideograph + 0x2f4231: (0x8019, 0),# Unrelated variant of EACC 215266 which maps to 8019 + 0x6f492a: (0xac81, 0),# Korean hangul + 0x33492e: (0x6f81, 0),# East Asian ideograph + 0x27492b: (0x6ee5, 0),# East Asian ideograph + 0x33337b: (0x52e6, 0),# East Asian ideograph + 0x233871: (0x8dc2, 0),# East Asian ideograph + 0x22492c: (0x6d81, 0),# East Asian ideograph + 0x235647: (0x9b51, 0),# East Asian ideograph + 0x33463c: (0x6bbb, 0),# East Asian ideograph + 0x27492d: (0x6d9b, 0),# East Asian ideograph + 0x6f553a: (0xc587, 0),# Korean hangul + 0x27492e: (0x6da9, 0),# East Asian ideograph + 0x22413c: (0x6a5a, 0),# East Asian ideograph + 0x2e492f: (0x6cd9, 0),# East Asian ideograph + 0x27597a: (0x4e70, 0),# East Asian ideograph + 0x213331: (0x518d, 0),# East Asian ideograph + 0x273761: (0x7f57, 0),# East Asian ideograph (duplicate simplified) + 0x213721: (0x55da, 0),# East Asian ideograph + 0x223722: (0x65a8, 0),# East Asian ideograph + 0x223723: (0x65a6, 0),# East Asian ideograph + 0x213724: (0x5600, 0),# East Asian ideograph + 0x233725: (0x8d04, 0),# East Asian ideograph + 0x213726: (0x55fe, 0),# East Asian ideograph + 0x273727: (0x5567, 0),# East Asian ideograph + 0x213728: (0x55f7, 0),# East Asian ideograph + 0x213729: (0x5608, 0),# East Asian ideograph + 0x22372a: (0x65b6, 0),# East Asian ideograph + 0x21372b: (0x55fd, 0),# East Asian ideograph + 0x22372c: (0x65b8, 0),# East Asian ideograph + 0x23372d: (0x8d09, 0),# East Asian ideograph + 0x21372e: (0x5614, 0),# East Asian ideograph + 0x22372f: (0x65bf, 0),# East Asian ideograph + 0x273730: (0x5c1d, 0),# East Asian ideograph + 0x273731: (0x55bd, 0),# East Asian ideograph + 0x273732: (0x5520, 0),# East Asian ideograph + 0x213733: (0x562f, 0),# East Asian ideograph + 0x223734: (0x65c2, 0),# East Asian ideograph + 0x213735: (0x5636, 0),# East Asian ideograph + 0x213736: (0x5632, 0),# East Asian ideograph + 0x213737: (0x563b, 0),# East Asian ideograph + 0x213738: (0x5639, 0),# East Asian ideograph + 0x274934: (0x6e85, 0),# East Asian ideograph + 0x23373a: (0x8d10, 0),# East Asian ideograph + 0x22373b: (0x65d0, 0),# East Asian ideograph + 0x22373c: (0x65d2, 0),# East Asian ideograph + 0x21373d: (0x5634, 0),# East Asian ideograph + 0x23373e: (0x8d18, 0),# East Asian ideograph + 0x224935: (0x6def, 0),# East Asian ideograph + 0x213740: (0x5630, 0),# East Asian ideograph + 0x213741: (0x566b, 0),# East Asian ideograph + 0x213742: (0x5664, 0),# East Asian ideograph + 0x213743: (0x5669, 0),# East Asian ideograph + 0x223744: (0x65db, 0),# East Asian ideograph + 0x213745: (0x5674, 0),# East Asian ideograph + 0x273746: (0x5f53, 0),# East Asian ideograph (duplicate simplified) + 0x213747: (0x5665, 0),# East Asian ideograph + 0x213748: (0x566a, 0),# East Asian ideograph + 0x213749: (0x5668, 0),# East Asian ideograph + 0x22374a: (0x65e1, 0),# East Asian ideograph + 0x27374b: (0x55f3, 0),# East Asian ideograph + 0x225a23: (0x7429, 0),# East Asian ideograph + 0x21374d: (0x566c, 0),# East Asian ideograph + 0x21374e: (0x5680, 0),# East Asian ideograph + 0x21374f: (0x568e, 0),# East Asian ideograph + 0x213750: (0x5685, 0),# East Asian ideograph + 0x214938: (0x701b, 0),# East Asian ideograph + 0x233752: (0x8d78, 0),# East Asian ideograph + 0x213753: (0x568f, 0),# East Asian ideograph + 0x223754: (0x65f4, 0),# East Asian ideograph + 0x213755: (0x56ae, 0),# East Asian ideograph (variant of 453755 which maps to 56AE) + 0x273756: (0x5499, 0),# East Asian ideograph + 0x224939: (0x6d7f, 0),# East Asian ideograph + 0x213758: (0x56a5, 0),# East Asian ideograph + 0x213759: (0x56b7, 0),# East Asian ideograph + 0x22375a: (0x6609, 0),# East Asian ideograph + 0x27375b: (0x5624, 0),# East Asian ideograph + 0x21375c: (0x56c0, 0),# East Asian ideograph + 0x21493a: (0x7028, 0),# East Asian ideograph + 0x22375e: (0x660a, 0),# East Asian ideograph + 0x21375f: (0x56bc, 0),# East Asian ideograph + 0x213760: (0x56ca, 0),# East Asian ideograph + 0x213761: (0x56c9, 0),# East Asian ideograph + 0x273762: (0x5453, 0),# East Asian ideograph + 0x22493b: (0x6d85, 0),# East Asian ideograph + 0x223764: (0x6603, 0),# East Asian ideograph + 0x213765: (0x56db, 0),# East Asian ideograph + 0x213766: (0x56da, 0),# East Asian ideograph + 0x213767: (0x56e0, 0),# East Asian ideograph + 0x213768: (0x56de, 0),# East Asian ideograph + 0x21493c: (0x7015, 0),# East Asian ideograph + 0x22376a: (0x6611, 0),# East Asian ideograph + 0x22376b: (0x6615, 0),# East Asian ideograph + 0x21376c: (0x56fa, 0),# East Asian ideograph + 0x22376d: (0x6604, 0),# East Asian ideograph + 0x22376e: (0x6631, 0),# East Asian ideograph + 0x21376f: (0x570b, 0),# East Asian ideograph + 0x213770: (0x570d, 0),# East Asian ideograph + 0x233771: (0x8d94, 0),# East Asian ideograph + 0x223772: (0x6621, 0),# East Asian ideograph + 0x273773: (0x56e2, 0),# East Asian ideograph + 0x273774: (0x56fe, 0),# East Asian ideograph + 0x223775: (0x662c, 0),# East Asian ideograph + 0x223777: (0x6635, 0),# East Asian ideograph + 0x213778: (0x572f, 0),# East Asian ideograph + 0x213779: (0x5730, 0),# East Asian ideograph + 0x21377a: (0x5728, 0),# East Asian ideograph + 0x21377b: (0x5733, 0),# East Asian ideograph + 0x22377c: (0x661e, 0),# East Asian ideograph + 0x22377d: (0x663a, 0),# East Asian ideograph + 0x224940: (0x6d67, 0),# East Asian ideograph + 0x274941: (0x6d12, 0),# East Asian ideograph + 0x2e3144: (0x651f, 0),# East Asian ideograph + 0x274942: (0x6ee9, 0),# East Asian ideograph + 0x212a34: (0xe8e1, 0),# EACC component character + 0x214943: (0x7063, 0),# East Asian ideograph + 0x274944: (0x6ee6, 0),# East Asian ideograph + 0x4b5a3b: (0x8d08, 0),# East Asian ideograph + 0x4b4761: (0x6e05, 0),# East Asian ideograph + 0x213f21: (0x6148, 0),# East Asian ideograph + 0x224946: (0x6d60, 0),# East Asian ideograph + 0x2d4b35: (0x73c9, 0),# East Asian ideograph + 0x2d4947: (0x7ac8, 0),# East Asian ideograph + 0x394c2d: (0x7546, 0),# East Asian ideograph + 0x224948: (0x6d98, 0),# East Asian ideograph + 0x6f516f: (0xbe48, 0),# Korean hangul + 0x234949: (0x95be, 0),# East Asian ideograph + 0x217068: (0x5530, 0),# East Asian ideograph + 0x295d3a: (0x9e73, 0),# East Asian ideograph + 0x27494a: (0x707e, 0),# East Asian ideograph + 0x225352: (0x71a0, 0),# East Asian ideograph + 0x234644: (0x93bd, 0),# East Asian ideograph + 0x22494b: (0x6d7c, 0),# East Asian ideograph + 0x6f575e: (0xc8ac, 0),# Korean hangul + 0x22494c: (0x6d70, 0),# East Asian ideograph + 0x21494d: (0x7092, 0),# East Asian ideograph + 0x23494e: (0x95ba, 0),# East Asian ideograph + 0x295d3b: (0x9e42, 0),# East Asian ideograph + 0x23494f: (0x95b6, 0),# East Asian ideograph + 0x2e3e3f: (0x7ba0, 0),# East Asian ideograph + 0x234950: (0x95bf, 0),# East Asian ideograph + 0x225278: (0x7178, 0),# East Asian ideograph + 0x274951: (0x4e3a, 0),# East Asian ideograph + 0x213d44: (0x5f29, 0),# East Asian ideograph + 0x334674: (0x76c5, 0),# East Asian ideograph + 0x234952: (0x95bd, 0),# East Asian ideograph + 0x6f4953: (0xacf1, 0),# Korean hangul + 0x21392a: (0x592e, 0),# East Asian ideograph + 0x295d3c: (0x5364, 0),# East Asian ideograph + 0x2d4954: (0x70f1, 0),# East Asian ideograph + 0x6f4955: (0xacf5, 0),# Korean hangul + 0x22526b: (0x7153, 0),# East Asian ideograph + 0x6f5760: (0xc8b8, 0),# Korean hangul + 0x2d4956: (0x70b0, 0),# East Asian ideograph + 0x213d45: (0x5f2d, 0),# East Asian ideograph + 0x4b5871: (0x8aa4, 0),# East Asian ideograph + 0x6f4b78: (0xb11b, 0),# Korean hangul + 0x6f4957: (0xacfa, 0),# Korean hangul + 0x6f4958: (0xacfc, 0),# Korean hangul + 0x284339: (0x680a, 0),# East Asian ideograph + 0x22746a: (0x7f7f, 0),# East Asian ideograph + 0x225251: (0x7146, 0),# East Asian ideograph + 0x234959: (0x95c9, 0),# East Asian ideograph + 0x22495a: (0x6db4, 0),# East Asian ideograph + 0x6f5761: (0xc8c4, 0),# Korean hangul + 0x213821: (0x5740, 0),# East Asian ideograph + 0x233822: (0x8d96, 0),# East Asian ideograph + 0x213823: (0x574d, 0),# East Asian ideograph + 0x213824: (0x573e, 0),# East Asian ideograph + 0x213825: (0x574e, 0),# East Asian ideograph + 0x223827: (0x6633, 0),# East Asian ideograph + 0x223828: (0x662b, 0),# East Asian ideograph + 0x22495c: (0x6daa, 0),# East Asian ideograph + 0x21382a: (0x5777, 0),# East Asian ideograph + 0x22382b: (0x6634, 0),# East Asian ideograph + 0x22382c: (0x6624, 0),# East Asian ideograph + 0x21382d: (0x5766, 0),# East Asian ideograph + 0x21382e: (0x5782, 0),# East Asian ideograph + 0x21495d: (0x70cf, 0),# East Asian ideograph + 0x213830: (0x57a0, 0),# East Asian ideograph + 0x223831: (0x6645, 0),# East Asian ideograph + 0x213832: (0x57a3, 0),# East Asian ideograph + 0x233833: (0x8da6, 0),# East Asian ideograph + 0x213834: (0x57a2, 0),# East Asian ideograph + 0x213835: (0x57d4, 0),# East Asian ideograph + 0x213836: (0x57c2, 0),# East Asian ideograph + 0x213837: (0x57ce, 0),# East Asian ideograph + 0x213838: (0x57cb, 0),# East Asian ideograph + 0x213839: (0x57c3, 0),# East Asian ideograph + 0x21383a: (0x57f9, 0),# East Asian ideograph + 0x27383b: (0x6267, 0),# East Asian ideograph + 0x21383c: (0x57fa, 0),# East Asian ideograph + 0x22383d: (0x6665, 0),# East Asian ideograph + 0x22383e: (0x665c, 0),# East Asian ideograph + 0x22383f: (0x6661, 0),# East Asian ideograph + 0x213840: (0x5802, 0),# East Asian ideograph + 0x224960: (0x6dec, 0),# East Asian ideograph + 0x213842: (0x57e4, 0),# East Asian ideograph + 0x213843: (0x57e0, 0),# East Asian ideograph + 0x273844: (0x62a5, 0),# East Asian ideograph + 0x273845: (0x5c27, 0),# East Asian ideograph + 0x213846: (0x5835, 0),# East Asian ideograph + 0x213847: (0x582a, 0),# East Asian ideograph + 0x223848: (0x665b, 0),# East Asian ideograph + 0x223849: (0x6659, 0),# East Asian ideograph + 0x22384a: (0x6667, 0),# East Asian ideograph + 0x21384b: (0x5821, 0),# East Asian ideograph + 0x21384c: (0x585e, 0),# East Asian ideograph + 0x22384d: (0x6657, 0),# East Asian ideograph + 0x275541: (0x83b1, 0),# East Asian ideograph + 0x21384f: (0x5851, 0),# East Asian ideograph + 0x213850: (0x586b, 0),# East Asian ideograph + 0x223851: (0x666c, 0),# East Asian ideograph + 0x233852: (0x8dab, 0),# East Asian ideograph + 0x234963: (0x95d3, 0),# East Asian ideograph + 0x213854: (0x5854, 0),# East Asian ideograph + 0x273855: (0x575e, 0),# East Asian ideograph + 0x213856: (0x584a, 0),# East Asian ideograph + 0x213857: (0x5883, 0),# East Asian ideograph + 0x213858: (0x587e, 0),# East Asian ideograph + 0x234964: (0x95d1, 0),# East Asian ideograph + 0x23385a: (0x8db0, 0),# East Asian ideograph + 0x27385b: (0x5811, 0),# East Asian ideograph + 0x216061: (0x98bc, 0),# East Asian ideograph + 0x21385d: (0x5893, 0),# East Asian ideograph + 0x21385e: (0x589e, 0),# East Asian ideograph + 0x234965: (0x95c3, 0),# East Asian ideograph + 0x273860: (0x575f, 0),# East Asian ideograph + 0x273861: (0x5760, 0),# East Asian ideograph + 0x273862: (0x5815, 0),# East Asian ideograph + 0x213863: (0x589f, 0),# East Asian ideograph + 0x273864: (0x575b, 0),# East Asian ideograph + 0x274966: (0x65e0, 0),# East Asian ideograph + 0x233866: (0x8db2, 0),# East Asian ideograph + 0x273867: (0x57a6, 0),# East Asian ideograph + 0x223868: (0x6677, 0),# East Asian ideograph + 0x273869: (0x538b, 0),# East Asian ideograph + 0x21386a: (0x58d1, 0),# East Asian ideograph + 0x27386b: (0x5739, 0),# East Asian ideograph + 0x21386c: (0x58d8, 0),# East Asian ideograph + 0x27386d: (0x5784, 0),# East Asian ideograph + 0x23386e: (0x8dbc, 0),# East Asian ideograph + 0x27386f: (0x575c, 0),# East Asian ideograph + 0x233870: (0x8db9, 0),# East Asian ideograph + 0x223871: (0x668c, 0),# East Asian ideograph + 0x233872: (0x8dc1, 0),# East Asian ideograph + 0x213873: (0x58ec, 0),# East Asian ideograph + 0x213874: (0x58ef, 0),# East Asian ideograph + 0x223875: (0x668b, 0),# East Asian ideograph + 0x273876: (0x58f6, 0),# East Asian ideograph + 0x273877: (0x5bff, 0),# East Asian ideograph + 0x213878: (0x590f, 0),# East Asian ideograph + 0x223879: (0x6694, 0),# East Asian ideograph + 0x22387a: (0x668a, 0),# East Asian ideograph + 0x21387b: (0x5916, 0),# East Asian ideograph + 0x22387c: (0x6698, 0),# East Asian ideograph + 0x22387d: (0x668d, 0),# East Asian ideograph + 0x21387e: (0x591c, 0),# East Asian ideograph + 0x234547: (0x936a, 0),# East Asian ideograph + 0x22496b: (0x6db7, 0),# East Asian ideograph + 0x2d3f54: (0x61d0, 0),# East Asian ideograph + 0x22496c: (0x6de2, 0),# East Asian ideograph + 0x6f5768: (0xc8e4, 0),# Korean hangul + 0x4b393e: (0x5965, 0),# East Asian ideograph + 0x27496d: (0x70e6, 0),# East Asian ideograph + 0x22496e: (0x6de9, 0),# East Asian ideograph + 0x6f5765: (0xc8d5, 0),# Korean hangul + 0x27496f: (0x7080, 0),# East Asian ideograph + 0x21763e: (0x5810, 0),# East Asian ideograph + 0x6f4b79: (0xb11c, 0),# Korean hangul + 0x4d5053: (0x98da, 0),# East Asian ideograph + 0x6f4970: (0xad70, 0),# Korean hangul + 0x224247: (0x6a90, 0),# East Asian ideograph + 0x224971: (0x6df6, 0),# East Asian ideograph + 0x28433a: (0x69e0, 0),# East Asian ideograph + 0x295d42: (0x9e7e, 0),# East Asian ideograph + 0x234972: (0x95e4, 0),# East Asian ideograph + 0x6f7622: (0x3186, 0),# Korean hangul + 0x27487b: (0x6dc0, 0),# East Asian ideograph + 0x6f5766: (0xc8d7, 0),# Korean hangul + 0x215f64: (0x971c, 0),# East Asian ideograph + 0x213d4b: (0x5f48, 0),# East Asian ideograph + 0x274975: (0x6247, 0),# East Asian ideograph + 0x6f4976: (0xad7d, 0),# Korean hangul + 0x213421: (0x528d, 0),# East Asian ideograph + 0x225257: (0x7160, 0),# East Asian ideograph + 0x4b4977: (0x7188, 0),# East Asian ideograph + 0x233422: (0x8b2b, 0),# East Asian ideograph + 0x6f4978: (0xad81, 0),# Korean hangul + 0x4b4339: (0x6674, 0),# East Asian ideograph + 0x223423: (0x644e, 0),# East Asian ideograph + 0x223d6a: (0x6910, 0),# East Asian ideograph + 0x224979: (0x6e0f, 0),# East Asian ideograph + 0x213424: (0x529b, 0),# East Asian ideograph + 0x22414b: (0x6a5c, 0),# East Asian ideograph + 0x23497a: (0x961e, 0),# East Asian ideograph + 0x283671: (0x6593, 0),# East Asian ideograph + 0x23497b: (0x9624, 0),# East Asian ideograph + 0x23497c: (0x9622, 0),# East Asian ideograph + 0x213427: (0x52a3, 0),# East Asian ideograph + 0x4b5963: (0x734f, 0),# East Asian ideograph + 0x27497d: (0x70ed, 0),# East Asian ideograph + 0x213428: (0x52ab, 0),# East Asian ideograph + 0x27497e: (0x70eb, 0),# East Asian ideograph + 0x213429: (0x52a9, 0),# East Asian ideograph + 0x275d47: (0x9499, 0),# East Asian ideograph + 0x23342a: (0x8b37, 0),# East Asian ideograph + 0x273771: (0x56ed, 0),# East Asian ideograph + 0x6f5843: (0xc9f1, 0),# Korean hangul + 0x21342c: (0x52be, 0),# East Asian ideograph + 0x2d4f6b: (0x7af8, 0),# East Asian ideograph + 0x4c2962: (0x5f4d, 0),# East Asian ideograph (variant of 222962 which maps to 5F4D) + 0x21342d: (0x52c7, 0),# East Asian ideograph + 0x334c37: (0x8e6f, 0),# East Asian ideograph + 0x215f67: (0x9727, 0),# East Asian ideograph + 0x21742e: (0x5707, 0),# East Asian ideograph + 0x23454c: (0x934f, 0),# East Asian ideograph + 0x2d6078: (0x9920, 0),# East Asian ideograph + 0x21342f: (0x52c1, 0),# East Asian ideograph + 0x273772: (0x5706, 0),# East Asian ideograph + 0x233921: (0x8dcf, 0),# East Asian ideograph + 0x233922: (0x8dd6, 0),# East Asian ideograph + 0x273923: (0x4f19, 0),# East Asian ideograph + 0x223924: (0x7a25, 0),# East Asian ideograph + 0x213925: (0x5927, 0),# East Asian ideograph + 0x213926: (0x592a, 0),# East Asian ideograph + 0x233927: (0x8dd0, 0),# East Asian ideograph + 0x213928: (0x5929, 0),# East Asian ideograph + 0x213929: (0x592d, 0),# East Asian ideograph + 0x22392a: (0x66a0, 0),# East Asian ideograph + 0x23392b: (0x8dc5, 0),# East Asian ideograph + 0x21392c: (0x5937, 0),# East Asian ideograph + 0x217432: (0x5714, 0),# East Asian ideograph + 0x27392e: (0x5939, 0),# East Asian ideograph + 0x23392f: (0x8de4, 0),# East Asian ideograph + 0x223930: (0x5c21, 0),# East Asian ideograph + 0x213931: (0x5948, 0),# East Asian ideograph + 0x223932: (0x669d, 0),# East Asian ideograph + 0x213433: (0x52d9, 0),# East Asian ideograph + 0x213934: (0x5955, 0),# East Asian ideograph + 0x233935: (0x8deb, 0),# East Asian ideograph + 0x233936: (0x8df4, 0),# East Asian ideograph + 0x213937: (0x594f, 0),# East Asian ideograph + 0x233938: (0x8de9, 0),# East Asian ideograph + 0x213434: (0x52d5, 0),# East Asian ideograph + 0x22393a: (0x66b2, 0),# East Asian ideograph + 0x23393b: (0x8de3, 0),# East Asian ideograph + 0x21393c: (0x5960, 0),# East Asian ideograph + 0x23393d: (0x8de7, 0),# East Asian ideograph + 0x21393e: (0x5967, 0),# East Asian ideograph + 0x23393f: (0x8e09, 0),# East Asian ideograph + 0x223940: (0x66b5, 0),# East Asian ideograph + 0x273941: (0x594b, 0),# East Asian ideograph + 0x213942: (0x5973, 0),# East Asian ideograph + 0x223943: (0x66ac, 0),# East Asian ideograph + 0x233944: (0x8dff, 0),# East Asian ideograph + 0x213945: (0x5984, 0),# East Asian ideograph + 0x233946: (0x8e05, 0),# East Asian ideograph + 0x223947: (0x66b1, 0),# East Asian ideograph + 0x213948: (0x597d, 0),# East Asian ideograph + 0x233949: (0x8e01, 0),# East Asian ideograph + 0x21394a: (0x5982, 0),# East Asian ideograph + 0x21394b: (0x5981, 0),# East Asian ideograph + 0x21394c: (0x59a8, 0),# East Asian ideograph + 0x21394d: (0x5992, 0),# East Asian ideograph + 0x23394e: (0x8e04, 0),# East Asian ideograph + 0x22394f: (0x66be, 0),# East Asian ideograph + 0x233950: (0x8e06, 0),# East Asian ideograph + 0x233438: (0x8b3e, 0),# East Asian ideograph + 0x233952: (0x8e2a, 0),# East Asian ideograph + 0x273953: (0x5986, 0),# East Asian ideograph + 0x223954: (0x66c0, 0),# East Asian ideograph + 0x223955: (0x66c7, 0),# East Asian ideograph + 0x213956: (0x598a, 0),# East Asian ideograph + 0x233957: (0x8e2e, 0),# East Asian ideograph + 0x233958: (0x8e21, 0),# East Asian ideograph + 0x213959: (0x59bb, 0),# East Asian ideograph + 0x22395a: (0x66bb, 0),# East Asian ideograph + 0x21395b: (0x59d1, 0),# East Asian ideograph + 0x22395c: (0x66c4, 0),# East Asian ideograph + 0x21343a: (0x52df, 0),# East Asian ideograph + 0x21395e: (0x59d0, 0),# East Asian ideograph + 0x21395f: (0x59d7, 0),# East Asian ideograph + 0x223960: (0x66cf, 0),# East Asian ideograph + 0x213961: (0x59d2, 0),# East Asian ideograph + 0x213962: (0x59d3, 0),# East Asian ideograph + 0x213963: (0x59ca, 0),# East Asian ideograph + 0x233964: (0x8e16, 0),# East Asian ideograph + 0x213965: (0x59cb, 0),# East Asian ideograph + 0x233966: (0x8e26, 0),# East Asian ideograph + 0x213967: (0x59e3, 0),# East Asian ideograph + 0x233968: (0x8e14, 0),# East Asian ideograph + 0x213969: (0x59ff, 0),# East Asian ideograph + 0x21396a: (0x59d8, 0),# East Asian ideograph + 0x21396b: (0x5a03, 0),# East Asian ideograph + 0x21396c: (0x59e8, 0),# East Asian ideograph + 0x21396d: (0x59e5, 0),# East Asian ideograph + 0x21396e: (0x59ea, 0),# East Asian ideograph + 0x23396f: (0x8e41, 0),# East Asian ideograph + 0x213970: (0x59fb, 0),# East Asian ideograph + 0x223971: (0x66da, 0),# East Asian ideograph + 0x223972: (0x66db, 0),# East Asian ideograph + 0x223973: (0x66e2, 0),# East Asian ideograph + 0x213974: (0x5a18, 0),# East Asian ideograph + 0x213975: (0x5a23, 0),# East Asian ideograph + 0x223976: (0x66e1, 0),# East Asian ideograph + 0x233977: (0x8e40, 0),# East Asian ideograph + 0x223978: (0x66e8, 0),# East Asian ideograph + 0x233979: (0x8e36, 0),# East Asian ideograph + 0x21397a: (0x5a1f, 0),# East Asian ideograph + 0x21397b: (0x5a1b, 0),# East Asian ideograph + 0x22397c: (0x66e9, 0),# East Asian ideograph + 0x21397d: (0x5a29, 0),# East Asian ideograph + 0x23397e: (0x8e3d, 0),# East Asian ideograph + 0x27785a: (0x5785, 0),# East Asian ideograph + 0x217441: (0x5724, 0),# East Asian ideograph + 0x6f532a: (0xc12a, 0),# Korean hangul + 0x213442: (0x5306, 0),# East Asian ideograph + 0x334550: (0x7f47, 0),# East Asian ideograph + 0x232337: (0x846e, 0),# East Asian ideograph + 0x217443: (0x5729, 0),# East Asian ideograph + 0x4b5521: (0x8332, 0),# East Asian ideograph + 0x233444: (0x8b54, 0),# East Asian ideograph + 0x235c71: (0x9e07, 0),# East Asian ideograph + 0x22525e: (0x7176, 0),# East Asian ideograph + 0x213445: (0x5310, 0),# East Asian ideograph + 0x2d4b45: (0x6bec, 0),# East Asian ideograph + 0x6f5435: (0xc309, 0),# Korean hangul + 0x22527b: (0x7187, 0),# East Asian ideograph + 0x6f576e: (0xc900, 0),# Korean hangul + 0x6f532b: (0xc12c, 0),# Korean hangul + 0x6f2527: (0x3162, 0),# Korean hangul + 0x227447: (0x7f63, 0),# East Asian ideograph + 0x4b3666: (0x5a1a, 0),# East Asian ideograph + 0x233448: (0x8b53, 0),# East Asian ideograph + 0x233449: (0x8b4a, 0),# East Asian ideograph + 0x275124: (0x7eb8, 0),# East Asian ideograph + 0x223046: (0x6285, 0),# East Asian ideograph + 0x21344a: (0x5319, 0),# East Asian ideograph + 0x6f576f: (0xc904, 0),# Korean hangul + 0x6f532c: (0xc12d, 0),# Korean hangul + 0x23356f: (0x8c74, 0),# East Asian ideograph + 0x6f4b7b: (0xb11e, 0),# Korean hangul + 0x215b2a: (0x8e91, 0),# East Asian ideograph + 0x6f4f6f: (0xb9db, 0),# Korean hangul + 0x21344d: (0x5321, 0),# East Asian ideograph + 0x22344e: (0x64a2, 0),# East Asian ideograph + 0x23344f: (0x8b3f, 0),# East Asian ideograph + 0x2e7450: (0x7f82, 0),# East Asian ideograph + 0x213451: (0x532f, 0),# East Asian ideograph + 0x335230: (0x7f6e, 0),# East Asian ideograph (variant of 215230 which maps to 7F6E) + 0x4b3668: (0x5358, 0),# East Asian ideograph + 0x234553: (0x9356, 0),# East Asian ideograph + 0x21725d: (0x5620, 0),# East Asian ideograph + 0x27554f: (0x53f6, 0),# East Asian ideograph + 0x213453: (0x5339, 0),# East Asian ideograph + 0x223454: (0x6490, 0),# East Asian ideograph + 0x213455: (0x5340, 0),# East Asian ideograph + 0x215f6f: (0x9748, 0),# East Asian ideograph + 0x215b2c: (0x8eaa, 0),# East Asian ideograph + 0x234554: (0x9371, 0),# East Asian ideograph + 0x6f5028: (0xba4d, 0),# Korean hangul + 0x283457: (0x63b8, 0),# East Asian ideograph + 0x274b2d: (0x736d, 0),# East Asian ideograph + 0x2d3458: (0x4edf, 0),# East Asian ideograph + 0x6f4c65: (0xb2d0, 0),# Korean hangul + 0x284934: (0x6d43, 0),# East Asian ideograph + 0x233459: (0x8b59, 0),# East Asian ideograph + 0x6f5772: (0xc90d, 0),# Korean hangul + 0x233a21: (0x8e30, 0),# East Asian ideograph + 0x213a22: (0x5a49, 0),# East Asian ideograph + 0x21345b: (0x5347, 0),# East Asian ideograph + 0x233a24: (0x8e47, 0),# East Asian ideograph + 0x213a25: (0x5a4a, 0),# East Asian ideograph + 0x233a26: (0x8e46, 0),# East Asian ideograph + 0x273a27: (0x5987, 0),# East Asian ideograph + 0x273a28: (0x5a04, 0),# East Asian ideograph + 0x213a29: (0x5a3c, 0),# East Asian ideograph + 0x213a2a: (0x5a62, 0),# East Asian ideograph + 0x213a2b: (0x5a5a, 0),# East Asian ideograph + 0x213a2c: (0x5a77, 0),# East Asian ideograph + 0x213a2d: (0x5a9a, 0),# East Asian ideograph + 0x233a2e: (0x8e4c, 0),# East Asian ideograph + 0x213a2f: (0x5a7f, 0),# East Asian ideograph + 0x223a30: (0x670f, 0),# East Asian ideograph + 0x224767: (0x6cac, 0),# East Asian ideograph + 0x233a32: (0x8e4f, 0),# East Asian ideograph + 0x223a33: (0x6712, 0),# East Asian ideograph + 0x223a34: (0x6713, 0),# East Asian ideograph + 0x233a35: (0x8e62, 0),# East Asian ideograph + 0x233a36: (0x8e60, 0),# East Asian ideograph + 0x213a37: (0x5ab2, 0),# East Asian ideograph + 0x223a38: (0x6719, 0),# East Asian ideograph + 0x223a39: (0x6718, 0),# East Asian ideograph + 0x233a3a: (0x8e54, 0),# East Asian ideograph + 0x273a3b: (0x59aa, 0),# East Asian ideograph + 0x213a3c: (0x5ad6, 0),# East Asian ideograph + 0x213a3d: (0x5ae3, 0),# East Asian ideograph + 0x233a3e: (0x8e5a, 0),# East Asian ideograph + 0x233a3f: (0x8e5e, 0),# East Asian ideograph + 0x233a40: (0x8e55, 0),# East Asian ideograph + 0x273a41: (0x5a34, 0),# East Asian ideograph + 0x213a42: (0x5b09, 0),# East Asian ideograph + 0x273a43: (0x5a75, 0),# East Asian ideograph + 0x273a44: (0x5a07, 0),# East Asian ideograph + 0x273a45: (0x59a9, 0),# East Asian ideograph + 0x233a46: (0x8e95, 0),# East Asian ideograph + 0x223a47: (0x6723, 0),# East Asian ideograph + 0x233a48: (0x8e6d, 0),# East Asian ideograph + 0x213a49: (0x5b24, 0),# East Asian ideograph + 0x273a4a: (0x5a74, 0),# East Asian ideograph + 0x273a4b: (0x5a76, 0),# East Asian ideograph + 0x223a4c: (0x673e, 0),# East Asian ideograph + 0x213462: (0x5351, 0),# East Asian ideograph + 0x223a4e: (0x673f, 0),# East Asian ideograph + 0x213a4f: (0x5b53, 0),# East Asian ideograph + 0x213a50: (0x5b54, 0),# East Asian ideograph + 0x213a51: (0x5b55, 0),# East Asian ideograph + 0x213a52: (0x5b57, 0),# East Asian ideograph + 0x213a53: (0x5b58, 0),# East Asian ideograph + 0x213a54: (0x5b5d, 0),# East Asian ideograph + 0x213a55: (0x5b5c, 0),# East Asian ideograph + 0x233a57: (0x8e8b, 0),# East Asian ideograph + 0x223a58: (0x6757, 0),# East Asian ideograph + 0x213a59: (0x5b64, 0),# East Asian ideograph + 0x213a5a: (0x5b69, 0),# East Asian ideograph + 0x273a5b: (0x5b59, 0),# East Asian ideograph + 0x223a5c: (0x6747, 0),# East Asian ideograph + 0x213a5d: (0x5b73, 0),# East Asian ideograph + 0x233a5e: (0x8e9a, 0),# East Asian ideograph + 0x273a5f: (0x5b5a, 0),# East Asian ideograph + 0x273a60: (0x5b66, 0),# East Asian ideograph + 0x223a61: (0x6755, 0),# East Asian ideograph + 0x213a62: (0x5b7d, 0),# East Asian ideograph + 0x233a63: (0x8e98, 0),# East Asian ideograph + 0x233a64: (0x8e9e, 0),# East Asian ideograph + 0x223466: (0x64b3, 0),# East Asian ideograph + 0x223a66: (0x674c, 0),# East Asian ideograph + 0x223a67: (0x6759, 0),# East Asian ideograph + 0x223a68: (0x6748, 0),# East Asian ideograph + 0x213a69: (0x5b8c, 0),# East Asian ideograph + 0x275553: (0x8364, 0),# East Asian ideograph + 0x233a6b: (0x8ea5, 0),# East Asian ideograph + 0x213a6c: (0x5b97, 0),# East Asian ideograph + 0x213a6d: (0x5b9a, 0),# East Asian ideograph + 0x213a6e: (0x5b9c, 0),# East Asian ideograph + 0x233a6f: (0x8ea7, 0),# East Asian ideograph + 0x213a70: (0x5b99, 0),# East Asian ideograph + 0x223a71: (0x674a, 0),# East Asian ideograph + 0x233a72: (0x8e99, 0),# East Asian ideograph + 0x213a73: (0x5ba3, 0),# East Asian ideograph + 0x213a74: (0x5ba6, 0),# East Asian ideograph + 0x213a75: (0x5ba4, 0),# East Asian ideograph + 0x213a76: (0x5ba2, 0),# East Asian ideograph + 0x213a77: (0x5bb0, 0),# East Asian ideograph + 0x213a78: (0x5bb8, 0),# East Asian ideograph + 0x233a7a: (0x8ebc, 0),# East Asian ideograph + 0x213a7b: (0x5bb4, 0),# East Asian ideograph + 0x223a7c: (0x6785, 0),# East Asian ideograph + 0x213a7d: (0x5bb9, 0),# East Asian ideograph + 0x213a7e: (0x5bb3, 0),# East Asian ideograph + 0x23233f: (0x844a, 0),# East Asian ideograph + 0x4b763d: (0x57f4, 0),# East Asian ideograph (variant of 21763D which maps to 57F4) + 0x22746b: (0x7f7e, 0),# East Asian ideograph + 0x283b7d: (0x53f0, 0),# East Asian ideograph (duplicate simplified) + 0x22346c: (0x64d3, 0),# East Asian ideograph + 0x6f5927: (0xcc39, 0),# Korean hangul + 0x393b39: (0x5bf3, 0),# East Asian ideograph + 0x213f26: (0x614c, 0),# East Asian ideograph + 0x235222: (0x9957, 0),# East Asian ideograph (variant of 475222 which maps to 9957) + 0x2d346e: (0x5373, 0),# East Asian ideograph + 0x276232: (0x9e23, 0),# East Asian ideograph + 0x6f5333: (0xc13c, 0),# Korean hangul + 0x213d5b: (0x5f79, 0),# East Asian ideograph + 0x213471: (0x5378, 0),# East Asian ideograph + 0x287472: (0x7f74, 0),# East Asian ideograph + 0x23344d: (0x8b56, 0),# East Asian ideograph + 0x335223: (0x7e8e, 0),# East Asian ideograph + 0x233473: (0x8b45, 0),# East Asian ideograph + 0x273f3f: (0x51ed, 0),# East Asian ideograph + 0x213474: (0x537f, 0),# East Asian ideograph + 0x213475: (0x5384, 0),# East Asian ideograph + 0x21325d: (0x50f9, 0),# East Asian ideograph + 0x225f21: (0x75f9, 0),# East Asian ideograph + 0x217477: (0x576d, 0),# East Asian ideograph + 0x225f22: (0x75fc, 0),# East Asian ideograph + 0x23456f: (0x9364, 0),# East Asian ideograph + 0x275f23: (0x9648, 0),# East Asian ideograph + 0x213479: (0x53a5, 0),# East Asian ideograph + 0x275f24: (0x9646, 0),# East Asian ideograph + 0x22747a: (0x7f91, 0),# East Asian ideograph + 0x21347b: (0x53b2, 0),# East Asian ideograph + 0x21392f: (0x5954, 0),# East Asian ideograph + 0x225269: (0x7150, 0),# East Asian ideograph + 0x4b4835: (0x6da3, 0),# East Asian ideograph + 0x21347d: (0x53c3, 0),# East Asian ideograph + 0x2d5f28: (0x9665, 0),# East Asian ideograph + 0x6f5336: (0xc149, 0),# Korean hangul + 0x6f5329: (0xc127, 0),# Korean hangul + 0x225f29: (0x7616, 0),# East Asian ideograph + 0x275f2a: (0x9634, 0),# East Asian ideograph + 0x275f2b: (0x961f, 0),# East Asian ideograph + 0x216c41: (0x52d1, 0),# East Asian ideograph + 0x225f2c: (0x7608, 0),# East Asian ideograph + 0x6f577a: (0xc958, 0),# Korean hangul + 0x225f2d: (0x7615, 0),# East Asian ideograph + 0x295731: (0x9c8b, 0),# East Asian ideograph + 0x276222: (0x9cc5, 0),# East Asian ideograph + 0x225f2e: (0x760c, 0),# East Asian ideograph + 0x23455d: (0x9349, 0),# East Asian ideograph + 0x6f5567: (0xc5fe, 0),# Korean hangul + 0x215f2f: (0x9685, 0),# East Asian ideograph + 0x273340: (0x51bb, 0),# East Asian ideograph + 0x223b21: (0x677b, 0),# East Asian ideograph + 0x223b22: (0x6792, 0),# East Asian ideograph + 0x223b23: (0x6776, 0),# East Asian ideograph + 0x213b24: (0x5bc4, 0),# East Asian ideograph + 0x223b25: (0x6791, 0),# East Asian ideograph + 0x223b26: (0x6799, 0),# East Asian ideograph + 0x215f31: (0x968d, 0),# East Asian ideograph + 0x223b28: (0x67a4, 0),# East Asian ideograph + 0x213b29: (0x5bd0, 0),# East Asian ideograph + 0x213b2a: (0x5bd3, 0),# East Asian ideograph + 0x213b2b: (0x5be1, 0),# East Asian ideograph + 0x213b2c: (0x5be5, 0),# East Asian ideograph + 0x215f32: (0x9698, 0),# East Asian ideograph + 0x223b2e: (0x678f, 0),# East Asian ideograph + 0x233b2f: (0x8ecf, 0),# East Asian ideograph + 0x223b30: (0x6772, 0),# East Asian ideograph + 0x223b31: (0x6798, 0),# East Asian ideograph (variant of 4C3B31 which maps to 6798) + 0x223b32: (0x676a, 0),# East Asian ideograph + 0x233b33: (0x8ed5, 0),# East Asian ideograph + 0x213b34: (0x5bee, 0),# East Asian ideograph + 0x273b35: (0x5bbd, 0),# East Asian ideograph + 0x273b36: (0x5ba1, 0),# East Asian ideograph + 0x273b37: (0x5199, 0),# East Asian ideograph + 0x273b38: (0x5ba0, 0),# East Asian ideograph + 0x223b39: (0x67ac, 0),# East Asian ideograph + 0x213b3a: (0x5bf8, 0),# East Asian ideograph + 0x223b3b: (0x67a0, 0),# East Asian ideograph + 0x213b3c: (0x5c01, 0),# East Asian ideograph + 0x213b3d: (0x5c04, 0),# East Asian ideograph + 0x213b3e: (0x5c09, 0),# East Asian ideograph + 0x233b3f: (0x8efa, 0),# East Asian ideograph + 0x273b40: (0x5c06, 0),# East Asian ideograph + 0x213b41: (0x5c0a, 0),# East Asian ideograph + 0x233b42: (0x8ef9, 0),# East Asian ideograph + 0x273b43: (0x5bf9, 0),# East Asian ideograph + 0x223b44: (0x67f9, 0),# East Asian ideograph + 0x213b45: (0x5c0f, 0),# East Asian ideograph + 0x213b46: (0x5c11, 0),# East Asian ideograph + 0x213b47: (0x5c16, 0),# East Asian ideograph + 0x223b48: (0x678d, 0),# East Asian ideograph + 0x223b49: (0x678c, 0),# East Asian ideograph + 0x213b4a: (0x5c2c, 0),# East Asian ideograph + 0x233b4b: (0x8ee8, 0),# East Asian ideograph + 0x223b4c: (0x67fc, 0),# East Asian ideograph + 0x213b4d: (0x5c38, 0),# East Asian ideograph + 0x223b4e: (0x6810, 0),# East Asian ideograph + 0x233b4f: (0x8eeb, 0),# East Asian ideograph + 0x213b50: (0x5c40, 0),# East Asian ideograph + 0x223b51: (0x67c8, 0),# East Asian ideograph + 0x23455f: (0x935a, 0),# East Asian ideograph + 0x213b53: (0x5c3e, 0),# East Asian ideograph + 0x223b54: (0x67cc, 0),# East Asian ideograph + 0x213b55: (0x5c45, 0),# East Asian ideograph + 0x233b56: (0x8f00, 0),# East Asian ideograph + 0x213b57: (0x5c4e, 0),# East Asian ideograph + 0x223b58: (0x67c5, 0),# East Asian ideograph + 0x233b59: (0x8f05, 0),# East Asian ideograph + 0x233b5a: (0x8f08, 0),# East Asian ideograph + 0x233b5b: (0x8f07, 0),# East Asian ideograph + 0x223b5c: (0x67bb, 0),# East Asian ideograph + 0x213b5d: (0x5c5b, 0),# East Asian ideograph (not in Unicode) + 0x213b5e: (0x5c60, 0),# East Asian ideograph + 0x223b5f: (0x67b0, 0),# East Asian ideograph + 0x223b60: (0x6803, 0),# East Asian ideograph + 0x223b61: (0x67f8, 0),# East Asian ideograph + 0x213b62: (0x5c65, 0),# East Asian ideograph + 0x273b63: (0x5c5e, 0),# East Asian ideograph + 0x233b64: (0x8f2c, 0),# East Asian ideograph + 0x213b65: (0x5c71, 0),# East Asian ideograph + 0x225a2a: (0x741b, 0),# East Asian ideograph + 0x213b67: (0x5c90, 0),# East Asian ideograph + 0x213b68: (0x5c8c, 0),# East Asian ideograph + 0x213b69: (0x5c91, 0),# East Asian ideograph + 0x213b6a: (0x5c94, 0),# East Asian ideograph + 0x233b6b: (0x8f1e, 0),# East Asian ideograph + 0x213b6c: (0x5cb8, 0),# East Asian ideograph + 0x233b6d: (0x8f25, 0),# East Asian ideograph + 0x233b6e: (0x8f20, 0),# East Asian ideograph + 0x223b6f: (0x67e4, 0),# East Asian ideograph + 0x223b70: (0x67d9, 0),# East Asian ideograph + 0x223b71: (0x67db, 0),# East Asian ideograph + 0x223b72: (0x67b5, 0),# East Asian ideograph + 0x213b73: (0x5d01, 0),# East Asian ideograph + 0x273b74: (0x5ce1, 0),# East Asian ideograph + 0x223b75: (0x67f7, 0),# East Asian ideograph + 0x213b76: (0x5cfb, 0),# East Asian ideograph + 0x223b77: (0x67b3, 0),# East Asian ideograph + 0x233b78: (0x8f36, 0),# East Asian ideograph + 0x233b79: (0x8f2e, 0),# East Asian ideograph + 0x233b7a: (0x8f33, 0),# East Asian ideograph + 0x215f3f: (0x96c0, 0),# East Asian ideograph + 0x223b7c: (0x67ee, 0),# East Asian ideograph + 0x223b7d: (0x6aaf, 0),# East Asian ideograph + 0x223b7e: (0x67b2, 0),# East Asian ideograph + 0x225f40: (0x761b, 0),# East Asian ideograph + 0x6f577e: (0xc970, 0),# Korean hangul + 0x6f533b: (0xc158, 0),# Korean hangul + 0x213d63: (0x5f8a, 0),# East Asian ideograph + 0x6f4b7e: (0xb125, 0),# Korean hangul + 0x2d5d2f: (0x9196, 0),# East Asian ideograph + 0x2d5f43: (0x9ceb, 0),# East Asian ideograph + 0x6f2459: (0x3137, 0),# Korean hangul + 0x293b42: (0x8f75, 0),# East Asian ideograph + 0x235f45: (0x9f22, 0),# East Asian ideograph + 0x2d5f46: (0x96bd, 0),# East Asian ideograph + 0x6f533c: (0xc167, 0),# Korean hangul + 0x213d64: (0x5f87, 0),# East Asian ideograph + 0x225f47: (0x7619, 0),# East Asian ideograph + 0x234562: (0x935f, 0),# East Asian ideograph + 0x235f48: (0x9f2b, 0),# East Asian ideograph + 0x2e604a: (0x7690, 0),# East Asian ideograph + 0x235f49: (0x9f26, 0),# East Asian ideograph + 0x225270: (0x7144, 0),# East Asian ideograph + 0x6f5d65: (0xd72d, 0),# Korean hangul + 0x224e2d: (0x6fc9, 0),# East Asian ideograph + 0x2d4b3f: (0x73ce, 0),# East Asian ideograph + 0x275f4b: (0x6742, 0),# East Asian ideograph + 0x276234: (0x9e29, 0),# East Asian ideograph + 0x6f533d: (0xc168, 0),# Korean hangul + 0x225f4c: (0x761d, 0),# East Asian ideograph + 0x275f4d: (0x96cf, 0),# East Asian ideograph + 0x6f5773: (0xc90f, 0),# Korean hangul + 0x6f245b: (0x3141, 0),# Korean hangul + 0x275f4e: (0x53cc, 0),# East Asian ideograph + 0x216c48: (0x52d6, 0),# East Asian ideograph + 0x275f4f: (0x79bb, 0),# East Asian ideograph + 0x215f50: (0x96e3, 0),# East Asian ideograph (variant of 4B5F50 which maps to 96E3) + 0x6f533e: (0xc170, 0),# Korean hangul + 0x213d66: (0x5f92, 0),# East Asian ideograph + 0x215f51: (0x96e8, 0),# East Asian ideograph + 0x225f3b: (0x7610, 0),# East Asian ideograph + 0x284345: (0x680c, 0),# East Asian ideograph + 0x6f5848: (0xca08, 0),# Korean hangul + 0x6f245c: (0x3142, 0),# Korean hangul + 0x235f53: (0x9f2f, 0),# East Asian ideograph + 0x225f54: (0x762d, 0),# East Asian ideograph + 0x234571: (0x936b, 0),# East Asian ideograph + 0x6f505b: (0xbbc0, 0),# Korean hangul + 0x275f55: (0x7535, 0),# East Asian ideograph + 0x6f533f: (0xc18c, 0),# Korean hangul + 0x213d67: (0x5f91, 0),# East Asian ideograph + 0x6f4d64: (0xb4e0, 0),# Korean hangul + 0x213924: (0x5922, 0),# East Asian ideograph + 0x6f245d: (0x3145, 0),# Korean hangul + 0x275128: (0x7ecb, 0),# East Asian ideograph + 0x4b5f58: (0xf9b2, 0),# East Asian ideograph + 0x227049: (0x7d0f, 0),# East Asian ideograph + 0x224e30: (0x6fa0, 0),# East Asian ideograph + 0x293338: (0x8bfd, 0),# East Asian ideograph + 0x2e715a: (0x7e27, 0),# East Asian ideograph + 0x215f5a: (0x9707, 0),# East Asian ideograph + 0x6f5340: (0xc18d, 0),# Korean hangul + 0x223c21: (0x67b9, 0),# East Asian ideograph + 0x213c22: (0x5d11, 0),# East Asian ideograph + 0x215b3e: (0x8efe, 0),# East Asian ideograph + 0x223c24: (0x67e3, 0),# East Asian ideograph + 0x213c25: (0x5d14, 0),# East Asian ideograph + 0x233c26: (0x8f39, 0),# East Asian ideograph + 0x233c27: (0x8f34, 0),# East Asian ideograph + 0x273c28: (0x5c9a, 0),# East Asian ideograph + 0x223c29: (0x67e2, 0),# East Asian ideograph + 0x273c2a: (0x5d2d, 0),# East Asian ideograph + 0x273c2b: (0x5c96, 0),# East Asian ideograph + 0x213c2c: (0x5d9d, 0),# East Asian ideograph + 0x273c2d: (0x5c7f, 0),# East Asian ideograph + 0x273c2e: (0x5cb3, 0),# East Asian ideograph + 0x223c2f: (0x67e7, 0),# East Asian ideograph + 0x223c30: (0x6849, 0),# East Asian ideograph + 0x223c31: (0x683e, 0),# East Asian ideograph + 0x273c32: (0x5dc5, 0),# East Asian ideograph + 0x214a32: (0x71ec, 0),# East Asian ideograph + 0x213c34: (0x5ddd, 0),# East Asian ideograph + 0x215f5e: (0x9711, 0),# East Asian ideograph + 0x223c36: (0x6814, 0),# East Asian ideograph + 0x223c37: (0x684b, 0),# East Asian ideograph + 0x223c38: (0x681e, 0),# East Asian ideograph + 0x213c39: (0x5de7, 0),# East Asian ideograph + 0x213c3a: (0x5de6, 0),# East Asian ideograph + 0x223c3b: (0x6833, 0),# East Asian ideograph + 0x213c3c: (0x5dee, 0),# East Asian ideograph + 0x233c3d: (0x8f52, 0),# East Asian ideograph + 0x213c3e: (0x5df2, 0),# East Asian ideograph + 0x213c3f: (0x5df3, 0),# East Asian ideograph + 0x223c40: (0x6831, 0),# East Asian ideograph + 0x215f60: (0x9716, 0),# East Asian ideograph + 0x223c42: (0x6835, 0),# East Asian ideograph + 0x223c43: (0x683b, 0),# East Asian ideograph + 0x223c44: (0x684e, 0),# East Asian ideograph + 0x213c46: (0x5e06, 0),# East Asian ideograph + 0x234124: (0x918d, 0),# East Asian ideograph + 0x233c48: (0x8f56, 0),# East Asian ideograph + 0x213c49: (0x5e1a, 0),# East Asian ideograph + 0x223c4a: (0x684d, 0),# East Asian ideograph + 0x233c4b: (0x8f55, 0),# East Asian ideograph + 0x233c4c: (0x8f58, 0),# East Asian ideograph + 0x215f62: (0x970d, 0),# East Asian ideograph + 0x233c4e: (0x8f5e, 0),# East Asian ideograph + 0x273c4f: (0x5e05, 0),# East Asian ideograph + 0x273c51: (0x5e08, 0),# East Asian ideograph + 0x273c52: (0x5e10, 0),# East Asian ideograph + 0x273c53: (0x5e26, 0),# East Asian ideograph + 0x213c54: (0x5e38, 0),# East Asian ideograph + 0x223c55: (0x685d, 0),# East Asian ideograph + 0x223c56: (0x685e, 0),# East Asian ideograph + 0x233c57: (0x8f62, 0),# East Asian ideograph + 0x273c58: (0x5e27, 0),# East Asian ideograph + 0x233c59: (0x8f63, 0),# East Asian ideograph + 0x233c5a: (0x8f64, 0),# East Asian ideograph + 0x213c5b: (0x5e54, 0),# East Asian ideograph + 0x273c5c: (0x5e3c, 0),# East Asian ideograph + 0x213c5d: (0x5e55, 0),# East Asian ideograph + 0x273c5e: (0x5e01, 0),# East Asian ideograph + 0x213c5f: (0x5e62, 0),# East Asian ideograph + 0x273c60: (0x5e1c, 0),# East Asian ideograph + 0x273c61: (0x5e2e, 0),# East Asian ideograph + 0x213c63: (0x5e73, 0),# East Asian ideograph + 0x6f5177: (0xbe5a, 0),# Korean hangul + 0x223c65: (0x685a, 0),# East Asian ideograph + 0x233c66: (0x8fa5, 0),# East Asian ideograph + 0x273c67: (0x5e72, 0),# East Asian ideograph (Version J extension) + 0x223c68: (0x686b, 0),# East Asian ideograph + 0x223c69: (0x686c, 0),# East Asian ideograph + 0x213c6a: (0x5e7d, 0),# East Asian ideograph + 0x223c6b: (0x6879, 0),# East Asian ideograph + 0x233c6c: (0x8fb5, 0),# East Asian ideograph + 0x213c6d: (0x5e87, 0),# East Asian ideograph + 0x233c6e: (0x8fbb, 0),# East Asian ideograph + 0x213c6f: (0x5e9a, 0),# East Asian ideograph + 0x233c70: (0x8fbc, 0),# East Asian ideograph + 0x215f68: (0x9738, 0),# East Asian ideograph + 0x223c72: (0x687e, 0),# East Asian ideograph + 0x213c73: (0x5e95, 0),# East Asian ideograph + 0x233c74: (0x8fbf, 0),# East Asian ideograph + 0x233c75: (0x8fd2, 0),# East Asian ideograph + 0x273c76: (0x5e93, 0),# East Asian ideograph + 0x225f69: (0x7647, 0),# East Asian ideograph + 0x213c78: (0x5ead, 0),# East Asian ideograph + 0x213c79: (0x5eb7, 0),# East Asian ideograph + 0x233c7a: (0x8fca, 0),# East Asian ideograph + 0x233c7b: (0x8fd3, 0),# East Asian ideograph + 0x213c7c: (0x5eb5, 0),# East Asian ideograph + 0x215f6a: (0x9732, 0),# East Asian ideograph + 0x273c7e: (0x5395, 0),# East Asian ideograph + 0x275f6b: (0x9701, 0),# East Asian ideograph + 0x6f5849: (0xca09, 0),# Korean hangul + 0x6f2461: (0x314b, 0),# Korean hangul + 0x275725: (0x8682, 0),# East Asian ideograph + 0x275122: (0x7eb3, 0),# East Asian ideograph + 0x6f5273: (0xc0d8, 0),# Korean hangul + 0x235f6d: (0x9f45, 0),# East Asian ideograph + 0x4c476e: (0x6cad, 0),# East Asian ideograph + 0x225a2c: (0x7432, 0),# East Asian ideograph + 0x225f6e: (0x764d, 0),# East Asian ideograph + 0x6f2528: (0x3163, 0),# Korean hangul + 0x2f312b: (0x89bb, 0),# East Asian ideograph + 0x235f6f: (0x9f46, 0),# East Asian ideograph + 0x4b5f70: (0x9752, 0),# East Asian ideograph + 0x6f2462: (0x314c, 0),# Korean hangul + 0x235f71: (0x9f48, 0),# East Asian ideograph + 0x275123: (0x7ea7, 0),# East Asian ideograph + 0x214a36: (0x720d, 0),# East Asian ideograph + 0x224e35: (0x6fb4, 0),# East Asian ideograph + 0x335234: (0x99e1, 0),# East Asian ideograph + 0x2e3d62: (0x684a, 0),# East Asian ideograph + 0x235f73: (0x9f49, 0),# East Asian ideograph + 0x69253b: (0x30bb, 0),# Katakana letter SE + 0x276230: (0x9e20, 0),# East Asian ideograph + 0x23456b: (0x9374, 0),# East Asian ideograph + 0x215f75: (0x9760, 0),# East Asian ideograph + 0x692431: (0x3051, 0),# Hiragana letter KE + 0x274a21: (0x70bd, 0),# East Asian ideograph + 0x23345f: (0x8b4d, 0),# East Asian ideograph + 0x224d63: (0x6f5f, 0),# East Asian ideograph + 0x274a22: (0x7096, 0),# East Asian ideograph + 0x4d446b: (0x954e, 0),# East Asian ideograph + 0x6f4a23: (0xadc4, 0),# Korean hangul + 0x6f5346: (0xc19f, 0),# Korean hangul + 0x276231: (0x9e22, 0),# East Asian ideograph + 0x215f79: (0x9768, 0),# East Asian ideograph + 0x274a24: (0x706f, 0),# East Asian ideograph + 0x345e3b: (0x80ac, 0),# East Asian ideograph + 0x215f7a: (0x9769, 0),# East Asian ideograph + 0x274a25: (0x7116, 0),# East Asian ideograph + 0x275568: (0x8298, 0),# East Asian ideograph + 0x215f7b: (0x9776, 0),# East Asian ideograph + 0x274a26: (0x70e7, 0),# East Asian ideograph + 0x6f5d67: (0xd73c, 0),# Korean hangul + 0x215f7c: (0x9774, 0),# East Asian ideograph + 0x6f4a27: (0xadd3, 0),# Korean hangul + 0x2e3172: (0x5261, 0),# East Asian ideograph + 0x276236: (0x9e35, 0),# East Asian ideograph + 0x2d4a28: (0x8b8c, 0),# East Asian ideograph + 0x6f5347: (0xc1a1, 0),# Korean hangul + 0x213d6f: (0x5fa9, 0),# East Asian ideograph + 0x215f7e: (0x9785, 0),# East Asian ideograph + 0x33456d: (0x826a, 0),# East Asian ideograph + 0x6f5178: (0xbe5b, 0),# Korean hangul + 0x224a2a: (0x6ddf, 0),# East Asian ideograph + 0x6f2465: (0x3132, 0),# Korean hangul + 0x275126: (0x7eca, 0),# East Asian ideograph + 0x23567a: (0x9b95, 0),# East Asian ideograph + 0x6f4a2c: (0xadf8, 0),# Korean hangul + 0x224a2d: (0x6dd3, 0),# East Asian ideograph + 0x6f5348: (0xc1a5, 0),# Korean hangul + 0x276233: (0x51e4, 0),# East Asian ideograph + 0x274a2e: (0x8425, 0),# East Asian ideograph + 0x2e3328: (0x6528, 0),# East Asian ideograph + 0x6f5d6b: (0xd751, 0),# Korean hangul + 0x234a2f: (0x9642, 0),# East Asian ideograph + 0x4b462a: (0x6b74, 0),# East Asian ideograph + 0x233d21: (0x8fda, 0),# East Asian ideograph + 0x233d22: (0x8fd5, 0),# East Asian ideograph + 0x213d23: (0x5ec9, 0),# East Asian ideograph + 0x213d24: (0x5ec8, 0),# East Asian ideograph + 0x223d25: (0x686d, 0),# East Asian ideograph + 0x213d26: (0x5ed6, 0),# East Asian ideograph + 0x273d27: (0x5e9f, 0),# East Asian ideograph + 0x213d28: (0x5eda, 0),# East Asian ideograph + 0x213d29: (0x5edd, 0),# East Asian ideograph + 0x273d2a: (0x5e7f, 0),# East Asian ideograph + 0x273d2b: (0x5e99, 0),# East Asian ideograph + 0x273d2c: (0x5382, 0),# East Asian ideograph + 0x273d2d: (0x5e9e, 0),# East Asian ideograph + 0x273d2e: (0x5e90, 0),# East Asian ideograph + 0x233d2f: (0x8fe4, 0),# East Asian ideograph + 0x233d30: (0x8fee, 0),# East Asian ideograph + 0x223d32: (0x688b, 0),# East Asian ideograph + 0x274a33: (0x70e9, 0),# East Asian ideograph + 0x213d34: (0x5eff, 0),# East Asian ideograph + 0x233d35: (0x8ff9, 0),# East Asian ideograph + 0x213d36: (0x5f04, 0),# East Asian ideograph + 0x213d37: (0x5f08, 0),# East Asian ideograph + 0x213d38: (0x5f0a, 0),# East Asian ideograph + 0x223d39: (0x68a3, 0),# East Asian ideograph + 0x213d3a: (0x5f12, 0),# East Asian ideograph + 0x213d3b: (0x5f13, 0),# East Asian ideograph + 0x233d3c: (0x8ffb, 0),# East Asian ideograph + 0x213d3d: (0x5f14, 0),# East Asian ideograph + 0x213d3e: (0x5f18, 0),# East Asian ideograph + 0x214a35: (0x7206, 0),# East Asian ideograph + 0x223d40: (0x688f, 0),# East Asian ideograph + 0x213d41: (0x5f1f, 0),# East Asian ideograph + 0x213d42: (0x5f26, 0),# East Asian ideograph + 0x223d43: (0x687b, 0),# East Asian ideograph + 0x233d44: (0x9011, 0),# East Asian ideograph + 0x224a36: (0x6ddc, 0),# East Asian ideograph + 0x213d46: (0x5f31, 0),# East Asian ideograph + 0x273d47: (0x5f20, 0),# East Asian ideograph + 0x213d48: (0x5f37, 0),# East Asian ideograph + 0x233d49: (0x9021, 0),# East Asian ideograph + 0x233d4a: (0x902d, 0),# East Asian ideograph + 0x274a37: (0x7089, 0),# East Asian ideograph + 0x273d4c: (0x5f25, 0),# East Asian ideograph + 0x273d4d: (0x5f2f, 0),# East Asian ideograph + 0x233d4e: (0x902c, 0),# East Asian ideograph + 0x273d4f: (0x6c47, 0),# East Asian ideograph (duplicate simplified) + 0x223d50: (0x692c, 0),# East Asian ideograph + 0x274a38: (0x70c2, 0),# East Asian ideograph + 0x213d52: (0x5f64, 0),# East Asian ideograph + 0x223d53: (0x690c, 0),# East Asian ideograph + 0x213d54: (0x5f6c, 0),# East Asian ideograph + 0x213d55: (0x5f69, 0),# East Asian ideograph + 0x233d56: (0x9037, 0),# East Asian ideograph + 0x214a39: (0x7228, 0),# East Asian ideograph + 0x223d58: (0x68d3, 0),# East Asian ideograph + 0x213d59: (0x5f71, 0),# East Asian ideograph + 0x223d5b: (0x690a, 0),# East Asian ideograph + 0x223d5c: (0x6909, 0),# East Asian ideograph + 0x233d5d: (0x9052, 0),# East Asian ideograph + 0x213d5e: (0x5f7f, 0),# East Asian ideograph + 0x213d5f: (0x5f7c, 0),# East Asian ideograph + 0x213d60: (0x5f85, 0),# East Asian ideograph + 0x213d61: (0x5f88, 0),# East Asian ideograph + 0x223d62: (0x68ec, 0),# East Asian ideograph + 0x223d63: (0x692a, 0),# East Asian ideograph + 0x223d64: (0x68ea, 0),# East Asian ideograph + 0x223d65: (0x681f, 0),# East Asian ideograph + 0x223d66: (0x7439, 0),# East Asian ideograph + 0x233d67: (0x9049, 0),# East Asian ideograph + 0x213d68: (0x5f90, 0),# East Asian ideograph + 0x234a3c: (0x9651, 0),# East Asian ideograph + 0x233d6a: (0x9044, 0),# East Asian ideograph + 0x213d6b: (0x5f99, 0),# East Asian ideograph + 0x273d6c: (0x4ece, 0),# East Asian ideograph + 0x223d6e: (0x68d6, 0),# East Asian ideograph + 0x223d6f: (0x68eb, 0),# East Asian ideograph + 0x225f48: (0x761e, 0),# East Asian ideograph + 0x213d71: (0x5faa, 0),# East Asian ideograph + 0x213d72: (0x5fac, 0),# East Asian ideograph + 0x223d73: (0x68f1, 0),# East Asian ideograph + 0x273d74: (0x5f7b, 0),# East Asian ideograph + 0x233d75: (0x905d, 0),# East Asian ideograph + 0x273d76: (0x5f81, 0),# East Asian ideograph + 0x213d77: (0x5fbd, 0),# East Asian ideograph + 0x233d78: (0x905b, 0),# East Asian ideograph + 0x223d79: (0x68fc, 0),# East Asian ideograph + 0x213d7a: (0x5fd9, 0),# East Asian ideograph + 0x233d7b: (0x906b, 0),# East Asian ideograph + 0x223d7c: (0x6913, 0),# East Asian ideograph + 0x213d7d: (0x5fd6, 0),# East Asian ideograph + 0x224e3c: (0x6fa8, 0),# East Asian ideograph + 0x23523b: (0x99a3, 0),# East Asian ideograph + 0x6f534c: (0xc1c4, 0),# Korean hangul + 0x276237: (0x9e2a, 0),# East Asian ideograph + 0x224173: (0x6a8d, 0),# East Asian ideograph + 0x274a42: (0x7237, 0),# East Asian ideograph + 0x223d30: (0x6898, 0),# East Asian ideograph + 0x6f5925: (0xcc30, 0),# Korean hangul + 0x2d5c5b: (0x9089, 0),# East Asian ideograph + 0x6f4a43: (0xae4c, 0),# Korean hangul + 0x234a44: (0x965c, 0),# East Asian ideograph + 0x232435: (0x84da, 0),# East Asian ideograph + 0x696e5c: (0x91df, 0),# East Asian ideograph + 0x295929: (0x9ca3, 0),# East Asian ideograph + 0x213e51: (0x608d, 0),# East Asian ideograph + 0x274a45: (0x5c14, 0),# East Asian ideograph + 0x233023: (0x8962, 0),# East Asian ideograph + 0x214a46: (0x7246, 0),# East Asian ideograph + 0x6f534d: (0xc1c8, 0),# Korean hangul + 0x276238: (0x9e2d, 0),# East Asian ideograph + 0x6f5740: (0xc81d, 0),# Korean hangul + 0x213932: (0x5947, 0),# East Asian ideograph + 0x295574: (0x9604, 0),# East Asian ideograph + 0x6f4a48: (0xae5c, 0),# Korean hangul + 0x277345: (0x556e, 0),# East Asian ideograph + 0x6f4a49: (0xae5d, 0),# Korean hangul + 0x29592a: (0x9cd3, 0),# East Asian ideograph + 0x4b4352: (0x66f5, 0),# East Asian ideograph + 0x234a4a: (0x965f, 0),# East Asian ideograph + 0x234a4b: (0x9656, 0),# East Asian ideograph + 0x6f534e: (0xc1d7, 0),# Korean hangul + 0x213d76: (0x5fb5, 0),# East Asian ideograph + 0x274a4c: (0x724d, 0),# East Asian ideograph + 0x6f4a4d: (0xae65, 0),# Korean hangul + 0x6f5771: (0xc90c, 0),# Korean hangul + 0x295928: (0x9cd5, 0),# East Asian ideograph + 0x6f4a4e: (0xae68, 0),# Korean hangul + 0x334050: (0x62d5, 0),# East Asian ideograph + 0x23523e: (0x99a6, 0),# East Asian ideograph + 0x4c2539: (0x5d73, 0),# East Asian ideograph + 0x4d3363: (0x8c25, 0),# East Asian ideograph + 0x224a50: (0x6e27, 0),# East Asian ideograph + 0x6f534f: (0xc1e0, 0),# Korean hangul + 0x27623a: (0x9e33, 0),# East Asian ideograph + 0x4b485f: (0x6ede, 0),# East Asian ideograph (variant of 27485F which maps to 6EDE) + 0x234a51: (0x966c, 0),# East Asian ideograph + 0x23235c: (0x84b4, 0),# East Asian ideograph + 0x285a47: (0x73ae, 0),# East Asian ideograph + 0x2d3165: (0x349e, 0),# East Asian ideograph (not found in unified han) + 0x6f4a52: (0xae78, 0),# Korean hangul + 0x275571: (0x848b, 0),# East Asian ideograph + 0x274a53: (0x5b83, 0),# East Asian ideograph + 0x227059: (0x7d35, 0),# East Asian ideograph + 0x33523f: (0x8b71, 0),# East Asian ideograph + 0x473422: (0x8c2a, 0),# East Asian ideograph + 0x224a55: (0x6e49, 0),# East Asian ideograph + 0x213d78: (0x5fc3, 0),# East Asian ideograph + 0x213935: (0x5951, 0),# East Asian ideograph + 0x223d34: (0x686f, 0),# East Asian ideograph + 0x4b3248: (0x50b2, 0),# East Asian ideograph (not in Unicode) + 0x6f4a57: (0xae84, 0),# Korean hangul + 0x224a58: (0x6e3c, 0),# East Asian ideograph + 0x6f5d69: (0xd749, 0),# Korean hangul + 0x6f4a59: (0xaebc, 0),# Korean hangul + 0x274a5a: (0x7275, 0),# East Asian ideograph + 0x6f5351: (0xc1e8, 0),# Korean hangul + 0x27623c: (0x9e3f, 0),# East Asian ideograph + 0x223e21: (0x6907, 0),# East Asian ideograph + 0x213e22: (0x5feb, 0),# East Asian ideograph + 0x213e23: (0x5fe0, 0),# East Asian ideograph + 0x213e24: (0x5ff1, 0),# East Asian ideograph + 0x233e25: (0x906f, 0),# East Asian ideograph + 0x233e26: (0x9079, 0),# East Asian ideograph + 0x213e27: (0x5ff5, 0),# East Asian ideograph + 0x233e28: (0x9076, 0),# East Asian ideograph + 0x213e29: (0x6014, 0),# East Asian ideograph + 0x223e2a: (0x68de, 0),# East Asian ideograph + 0x223e2b: (0x691b, 0),# East Asian ideograph + 0x233e2c: (0x9085, 0),# East Asian ideograph + 0x223e2d: (0x68fb, 0),# East Asian ideograph + 0x213e2e: (0x601d, 0),# East Asian ideograph + 0x234a5d: (0x967b, 0),# East Asian ideograph + 0x213e30: (0x6021, 0),# East Asian ideograph + 0x213e31: (0x6020, 0),# East Asian ideograph + 0x213e32: (0x6028, 0),# East Asian ideograph + 0x223e33: (0x68e1, 0),# East Asian ideograph + 0x213e34: (0x6027, 0),# East Asian ideograph + 0x214a5e: (0x7296, 0),# East Asian ideograph + 0x213e36: (0x6015, 0),# East Asian ideograph + 0x223e37: (0x68d1, 0),# East Asian ideograph + 0x223e38: (0x68d0, 0),# East Asian ideograph + 0x223e39: (0x6908, 0),# East Asian ideograph + 0x233e3a: (0x908b, 0),# East Asian ideograph + 0x213e3b: (0x6043, 0),# East Asian ideograph + 0x213e3c: (0x6065, 0),# East Asian ideograph + 0x213e3d: (0x6050, 0),# East Asian ideograph + 0x223e3e: (0x68e8, 0),# East Asian ideograph + 0x223e3f: (0x68f0, 0),# East Asian ideograph + 0x223e40: (0x68c3, 0),# East Asian ideograph + 0x214a60: (0x729b, 0),# East Asian ideograph + 0x235164: (0x9940, 0),# East Asian ideograph + 0x233e43: (0x909b, 0),# East Asian ideograph + 0x233e44: (0x909c, 0),# East Asian ideograph + 0x213e45: (0x606f, 0),# East Asian ideograph + 0x223e46: (0x68d4, 0),# East Asian ideograph + 0x274a61: (0x728a, 0),# East Asian ideograph + 0x233e48: (0x90a1, 0),# East Asian ideograph + 0x223e49: (0x68c6, 0),# East Asian ideograph + 0x213e4a: (0x608c, 0),# East Asian ideograph + 0x223e4b: (0x68c7, 0),# East Asian ideograph + 0x213e4c: (0x607f, 0),# East Asian ideograph + 0x214a62: (0x72a7, 0),# East Asian ideograph + 0x213e4e: (0x609a, 0),# East Asian ideograph + 0x213e4f: (0x6096, 0),# East Asian ideograph + 0x213e50: (0x6084, 0),# East Asian ideograph + 0x233e51: (0x90a8, 0),# East Asian ideograph + 0x224828: (0x6cce, 0),# East Asian ideograph + 0x234a63: (0x9684, 0),# East Asian ideograph + 0x233e54: (0x90a0, 0),# East Asian ideograph + 0x223e55: (0x6938, 0),# East Asian ideograph + 0x213e56: (0x60a8, 0),# East Asian ideograph + 0x273e57: (0x5ff0, 0),# East Asian ideograph + 0x233e58: (0x90af, 0),# East Asian ideograph + 0x233e59: (0x90b3, 0),# East Asian ideograph + 0x6f4c5d: (0xb2a1, 0),# Korean hangul + 0x213e5b: (0x60c5, 0),# East Asian ideograph (variant of 4B3E5B which maps to 60C5) + 0x273e5c: (0x95f7, 0),# East Asian ideograph + 0x223e5d: (0x6958, 0),# East Asian ideograph + 0x273e5e: (0x6005, 0),# East Asian ideograph + 0x213e5f: (0x60bb, 0),# East Asian ideograph + 0x213e60: (0x60e0, 0),# East Asian ideograph + 0x233e61: (0x90b2, 0),# East Asian ideograph + 0x213e62: (0x60dc, 0),# East Asian ideograph + 0x213e63: (0x60d8, 0),# East Asian ideograph + 0x223e64: (0x6945, 0),# East Asian ideograph + 0x223e65: (0x695d, 0),# East Asian ideograph + 0x223e66: (0x6932, 0),# East Asian ideograph + 0x213e67: (0x60c6, 0),# East Asian ideograph + 0x233e68: (0x90c9, 0),# East Asian ideograph + 0x223e69: (0x696e, 0),# East Asian ideograph + 0x223e6a: (0x6963, 0),# East Asian ideograph + 0x223e6b: (0x6948, 0),# East Asian ideograph + 0x273e6c: (0x60ec, 0),# East Asian ideograph + 0x213e6d: (0x60f3, 0),# East Asian ideograph + 0x223e6e: (0x6939, 0),# East Asian ideograph + 0x233e6f: (0x90d5, 0),# East Asian ideograph + 0x273e70: (0x607b, 0),# East Asian ideograph + 0x214a68: (0x72c0, 0),# East Asian ideograph + 0x233e72: (0x90be, 0),# East Asian ideograph + 0x223e73: (0x6937, 0),# East Asian ideograph + 0x213e74: (0x60f9, 0),# East Asian ideograph + 0x213e75: (0x6123, 0),# East Asian ideograph + 0x213e76: (0x60f4, 0),# East Asian ideograph + 0x273e77: (0x7231, 0),# East Asian ideograph + 0x233e78: (0x90c8, 0),# East Asian ideograph + 0x233e79: (0x90c3, 0),# East Asian ideograph + 0x223e7a: (0x696c, 0),# East Asian ideograph + 0x223e7b: (0x694e, 0),# East Asian ideograph + 0x213e7c: (0x6109, 0),# East Asian ideograph + 0x224a6a: (0x6e51, 0),# East Asian ideograph + 0x273e7e: (0x607c, 0),# East Asian ideograph + 0x234137: (0x91a8, 0),# East Asian ideograph + 0x224a6b: (0x6e44, 0),# East Asian ideograph + 0x275576: (0x8361, 0),# East Asian ideograph + 0x27734c: (0x5456, 0),# East Asian ideograph + 0x21385b: (0x5879, 0),# East Asian ideograph + 0x293b5b: (0x8f81, 0),# East Asian ideograph + 0x234a6d: (0x9682, 0),# East Asian ideograph + 0x234a6e: (0x9683, 0),# East Asian ideograph + 0x6f5355: (0xc1fc, 0),# Korean hangul + 0x335238: (0x8989, 0),# East Asian ideograph + 0x694c68: (0x5301, 0),# East Asian ideograph + 0x21393a: (0x5958, 0),# East Asian ideograph + 0x2d5c5a: (0x8fe9, 0),# East Asian ideograph + 0x2d3a41: (0x5afa, 0),# East Asian ideograph + 0x214a70: (0x72f9, 0),# East Asian ideograph + 0x6f4a71: (0xaf48, 0),# Korean hangul + 0x213f2d: (0x6177, 0),# East Asian ideograph + 0x295932: (0x9cd8, 0),# East Asian ideograph + 0x274a72: (0x72c8, 0),# East Asian ideograph + 0x23302c: (0x895c, 0),# East Asian ideograph + 0x276239: (0x9e2f, 0),# East Asian ideograph + 0x6f4a73: (0xaf4c, 0),# Korean hangul + 0x6f5356: (0xc1fd, 0),# Korean hangul + 0x276241: (0x9e45, 0),# East Asian ideograph + 0x21393b: (0x595a, 0),# East Asian ideograph + 0x4b324e: (0x50e7, 0),# East Asian ideograph (variant of 21324E which maps to 50E7) + 0x2e4e72: (0x6f74, 0),# East Asian ideograph + 0x6f5774: (0xc911, 0),# Korean hangul + 0x6f4a75: (0xaf5c, 0),# Korean hangul + 0x6f4a76: (0xaf5d, 0),# Korean hangul + 0x213521: (0x53c9, 0),# East Asian ideograph + 0x224a77: (0x6e4e, 0),# East Asian ideograph + 0x23302d: (0x895d, 0),# East Asian ideograph + 0x4b4a78: (0x72f0, 0),# East Asian ideograph + 0x6f5357: (0xc200, 0),# Korean hangul + 0x213523: (0x53ca, 0),# East Asian ideograph + 0x276242: (0x9e51, 0),# East Asian ideograph + 0x275d49: (0x94ae, 0),# East Asian ideograph + 0x274a79: (0x72b9, 0),# East Asian ideograph + 0x223d3b: (0x6874, 0),# East Asian ideograph + 0x234a7a: (0x9697, 0),# East Asian ideograph + 0x224d68: (0x6f5d, 0),# East Asian ideograph + 0x6f4a7b: (0xaf84, 0),# Korean hangul + 0x213526: (0x53d4, 0),# East Asian ideograph + 0x227061: (0x7d3a, 0),# East Asian ideograph + 0x6f4a7c: (0xaf88, 0),# Korean hangul + 0x225a30: (0x7415, 0),# East Asian ideograph + 0x213527: (0x53d7, 0),# East Asian ideograph + 0x227c49: (0x82bc, 0),# East Asian ideograph + 0x6f4a7d: (0xaf90, 0),# Korean hangul + 0x6f5358: (0xc204, 0),# Korean hangul + 0x6f7623: (0x317f, 0),# Korean hangul + 0x274a7e: (0x72f1, 0),# East Asian ideograph + 0x223d3c: (0x6875, 0),# East Asian ideograph + 0x227d2b: (0x8344, 0),# East Asian ideograph + 0x21352a: (0x66fc, 0),# East Asian ideograph + 0x213936: (0x594e, 0),# East Asian ideograph + 0x21352b: (0x53e2, 0),# East Asian ideograph + 0x2d4b5b: (0x78af, 0),# East Asian ideograph + 0x6f5359: (0xc20d, 0),# Korean hangul + 0x23352d: (0x8b95, 0),# East Asian ideograph + 0x276244: (0x9e4c, 0),# East Asian ideograph + 0x23352e: (0x8b94, 0),# East Asian ideograph + 0x3a7970: (0x81d5, 0),# East Asian ideograph + 0x21352f: (0x53ee, 0),# East Asian ideograph + 0x6f5331: (0xc138, 0),# Korean hangul + 0x275138: (0x7edc, 0),# East Asian ideograph + 0x223f21: (0x6952, 0),# East Asian ideograph + 0x213f22: (0x6168, 0),# East Asian ideograph + 0x233f23: (0x90df, 0),# East Asian ideograph + 0x213f24: (0x613c, 0),# East Asian ideograph + 0x223f25: (0x695b, 0),# East Asian ideograph + 0x233f26: (0x90e2, 0),# East Asian ideograph + 0x223531: (0x64eb, 0),# East Asian ideograph + 0x233f28: (0x90db, 0),# East Asian ideograph + 0x273f29: (0x5ffe, 0),# East Asian ideograph + 0x233f2a: (0x90dc, 0),# East Asian ideograph + 0x273f2b: (0x6006, 0),# East Asian ideograph + 0x233f2c: (0x90d7, 0),# East Asian ideograph + 0x233f2d: (0x90e4, 0),# East Asian ideograph + 0x233f2e: (0x90ef, 0),# East Asian ideograph + 0x233f2f: (0x90ea, 0),# East Asian ideograph + 0x213f30: (0x6170, 0),# East Asian ideograph + 0x213f31: (0x615a, 0),# East Asian ideograph + 0x233f32: (0x90f0, 0),# East Asian ideograph + 0x233f33: (0x90f4, 0),# East Asian ideograph + 0x233f34: (0x90f2, 0),# East Asian ideograph + 0x223f35: (0x6978, 0),# East Asian ideograph + 0x273f36: (0x8651, 0),# East Asian ideograph + 0x223f37: (0x697b, 0),# East Asian ideograph + 0x273f38: (0x60e8, 0),# East Asian ideograph + 0x273f39: (0x60ef, 0),# East Asian ideograph + 0x273f3a: (0x6078, 0),# East Asian ideograph + 0x273f3b: (0x6002, 0),# East Asian ideograph + 0x273f3c: (0x6b32, 0),# East Asian ideograph + 0x223f3d: (0x6944, 0),# East Asian ideograph + 0x233f3e: (0x90eb, 0),# East Asian ideograph + 0x233f3f: (0x90f3, 0),# East Asian ideograph + 0x213f40: (0x618e, 0),# East Asian ideograph + 0x273f41: (0x60af, 0),# East Asian ideograph + 0x273f42: (0x6124, 0),# East Asian ideograph + 0x213f43: (0x61ac, 0),# East Asian ideograph + 0x273f44: (0x60ee, 0),# East Asian ideograph + 0x273f45: (0x6187, 0),# East Asian ideograph + 0x233f46: (0x90fc, 0),# East Asian ideograph + 0x273f47: (0x60eb, 0),# East Asian ideograph + 0x273f48: (0x5fc6, 0),# East Asian ideograph + 0x233f49: (0x9104, 0),# East Asian ideograph + 0x273f4a: (0x5e94, 0),# East Asian ideograph + 0x213537: (0x53eb, 0),# East Asian ideograph + 0x233f4c: (0x9106, 0),# East Asian ideograph + 0x213f4d: (0x61c2, 0),# East Asian ideograph + 0x273f4e: (0x6073, 0),# East Asian ideograph + 0x213f4f: (0x61c8, 0),# East Asian ideograph + 0x213940: (0x596a, 0),# East Asian ideograph + 0x232368: (0x84cd, 0),# East Asian ideograph + 0x213f52: (0x61e6, 0),# East Asian ideograph + 0x213f53: (0x61f2, 0),# East Asian ideograph (variant of 4B3F53 which maps to 61F2) + 0x273f54: (0x6000, 0),# East Asian ideograph + 0x273f55: (0x61d2, 0),# East Asian ideograph + 0x273f56: (0x60ac, 0),# East Asian ideograph + 0x233f57: (0x910f, 0),# East Asian ideograph + 0x273f58: (0x5fcf, 0),# East Asian ideograph + 0x273f59: (0x6151, 0),# East Asian ideograph + 0x233f5a: (0x9116, 0),# East Asian ideograph + 0x273f5b: (0x60e7, 0),# East Asian ideograph + 0x233f5c: (0x9114, 0),# East Asian ideograph + 0x23353a: (0x8b9f, 0),# East Asian ideograph + 0x213f5e: (0x620a, 0),# East Asian ideograph + 0x213f5f: (0x620e, 0),# East Asian ideograph + 0x223f60: (0x69bc, 0),# East Asian ideograph + 0x223f61: (0x69a7, 0),# East Asian ideograph + 0x233f62: (0x9123, 0),# East Asian ideograph (Version J extension) + 0x233f63: (0x9118, 0),# East Asian ideograph + 0x233f64: (0x911c, 0),# East Asian ideograph + 0x213f65: (0x6216, 0),# East Asian ideograph + 0x233f66: (0x9120, 0),# East Asian ideograph + 0x233f67: (0x9122, 0),# East Asian ideograph + 0x223f68: (0x69d9, 0),# East Asian ideograph + 0x213f69: (0x621f, 0),# East Asian ideograph + 0x223f6a: (0x698e, 0),# East Asian ideograph + 0x213f6b: (0x6222, 0),# East Asian ideograph + 0x213f6c: (0x622a, 0),# East Asian ideograph + 0x223f6d: (0x69d6, 0),# East Asian ideograph + 0x273f6e: (0x6218, 0),# East Asian ideograph + 0x273f6f: (0x620f, 0),# East Asian ideograph + 0x213f70: (0x6234, 0),# East Asian ideograph + 0x233f71: (0x9124, 0),# East Asian ideograph + 0x233f72: (0x911a, 0),# East Asian ideograph + 0x213f73: (0x623f, 0),# East Asian ideograph + 0x233f74: (0x9125, 0),# East Asian ideograph + 0x223f75: (0x69a5, 0),# East Asian ideograph + 0x213f76: (0x6241, 0),# East Asian ideograph + 0x233f77: (0x912f, 0),# East Asian ideograph + 0x223f78: (0x69d1, 0),# East Asian ideograph + 0x27513b: (0x4e1d, 0),# East Asian ideograph + 0x223f7a: (0x69f6, 0),# East Asian ideograph + 0x21753f: (0x579e, 0),# East Asian ideograph + 0x213f7d: (0x6253, 0),# East Asian ideograph + 0x223f7e: (0x69d5, 0),# East Asian ideograph + 0x217540: (0x57b5, 0),# East Asian ideograph + 0x6f535d: (0xc21c, 0),# Korean hangul + 0x276248: (0x9e5e, 0),# East Asian ideograph + 0x223542: (0x64f7, 0),# East Asian ideograph + 0x213543: (0x540c, 0),# East Asian ideograph + 0x213544: (0x540a, 0),# East Asian ideograph + 0x29593a: (0x9c85, 0),# East Asian ideograph + 0x23524d: (0x99bf, 0),# East Asian ideograph + 0x213545: (0x540d, 0),# East Asian ideograph + 0x6f535e: (0xc21f, 0),# Korean hangul + 0x223546: (0x6504, 0),# East Asian ideograph + 0x234e5e: (0x97e0, 0),# East Asian ideograph + 0x2d3547: (0x55ab, 0),# East Asian ideograph + 0x6f5c66: (0xd560, 0),# Korean hangul + 0x234141: (0x91af, 0),# East Asian ideograph + 0x692436: (0x3056, 0),# Hiragana letter ZA + 0x696868: (0x84d9, 0),# East Asian ideograph + 0x233478: (0x8b85, 0),# East Asian ideograph + 0x4c354a: (0x64b8, 0),# East Asian ideograph + 0x22587d: (0x73cc, 0),# East Asian ideograph + 0x22354b: (0x64fd, 0),# East Asian ideograph + 0x333021: (0x58f9, 0),# East Asian ideograph + 0x225f5c: (0x7633, 0),# East Asian ideograph + 0x217933: (0x5940, 0),# East Asian ideograph + 0x234142: (0x91b1, 0),# East Asian ideograph + 0x23346b: (0x8b6d, 0),# East Asian ideograph + 0x23354d: (0x8c4b, 0),# East Asian ideograph + 0x2d7a44: (0x598d, 0),# East Asian ideograph + 0x27513e: (0x7ee2, 0),# East Asian ideograph + 0x23472c: (0x93d3, 0),# East Asian ideograph + 0x22354f: (0x6508, 0),# East Asian ideograph + 0x395e42: (0x9274, 0),# East Asian ideograph + 0x233550: (0x8c4f, 0),# East Asian ideograph + 0x3f5f35: (0x6b9e, 0),# East Asian ideograph + 0x39303a: (0x5efc, 0),# East Asian ideograph + 0x213552: (0x543e, 0),# East Asian ideograph + 0x27513f: (0x7ee5, 0),# East Asian ideograph + 0x213553: (0x5427, 0),# East Asian ideograph + 0x213554: (0x5440, 0),# East Asian ideograph + 0x274476: (0x6808, 0),# East Asian ideograph + 0x233555: (0x8c5c, 0),# East Asian ideograph + 0x6f5a26: (0xcee8, 0),# Korean hangul + 0x213556: (0x5446, 0),# East Asian ideograph + 0x217557: (0x57a1, 0),# East Asian ideograph + 0x213266: (0x512a, 0),# East Asian ideograph + 0x293c30: (0x8f98, 0),# East Asian ideograph + 0x224b38: (0x6e69, 0),# East Asian ideograph + 0x6f5332: (0xc139, 0),# Korean hangul + 0x293725: (0x8d3d, 0),# East Asian ideograph + 0x287229: (0x7f17, 0),# East Asian ideograph + 0x223559: (0x651a, 0),# East Asian ideograph + 0x6f5362: (0xc22b, 0),# Korean hangul + 0x27624d: (0x9e6d, 0),# East Asian ideograph + 0x214021: (0x6252, 0),# East Asian ideograph + 0x214022: (0x625b, 0),# East Asian ideograph + 0x214023: (0x6263, 0),# East Asian ideograph + 0x214024: (0x6258, 0),# East Asian ideograph + 0x214025: (0x6296, 0),# East Asian ideograph + 0x214026: (0x6297, 0),# East Asian ideograph + 0x214027: (0x6292, 0),# East Asian ideograph + 0x214028: (0x6276, 0),# East Asian ideograph + 0x214029: (0x6289, 0),# East Asian ideograph + 0x21402a: (0x627f, 0),# East Asian ideograph + 0x21402b: (0x6279, 0),# East Asian ideograph + 0x21402c: (0x6280, 0),# East Asian ideograph + 0x21402d: (0x628a, 0),# East Asian ideograph + 0x21402e: (0x626d, 0),# East Asian ideograph + 0x21402f: (0x627c, 0),# East Asian ideograph + 0x214030: (0x627e, 0),# East Asian ideograph + 0x214031: (0x626f, 0),# East Asian ideograph + 0x214032: (0x6284, 0),# East Asian ideograph + 0x214033: (0x6295, 0),# East Asian ideograph + 0x214034: (0x6291, 0),# East Asian ideograph + 0x214035: (0x6298, 0),# East Asian ideograph + 0x214036: (0x626e, 0),# East Asian ideograph + 0x214037: (0x6273, 0),# East Asian ideograph + 0x214038: (0x6293, 0),# East Asian ideograph + 0x214039: (0x62c9, 0),# East Asian ideograph + 0x21403a: (0x62c4, 0),# East Asian ideograph + 0x21403b: (0x62cc, 0),# East Asian ideograph + 0x21403c: (0x62a8, 0),# East Asian ideograph + 0x21403d: (0x62dc, 0),# East Asian ideograph + 0x21403e: (0x62bf, 0),# East Asian ideograph + 0x21403f: (0x62c2, 0),# East Asian ideograph + 0x214040: (0x62b9, 0),# East Asian ideograph + 0x214041: (0x62d2, 0),# East Asian ideograph + 0x214042: (0x62d3, 0),# East Asian ideograph + 0x214043: (0x62db, 0),# East Asian ideograph + 0x214044: (0x62ab, 0),# East Asian ideograph + 0x214045: (0x62cb, 0),# East Asian ideograph + 0x214046: (0x62d4, 0),# East Asian ideograph + 0x214047: (0x62bd, 0),# East Asian ideograph + 0x214048: (0x62bc, 0),# East Asian ideograph + 0x214049: (0x62d0, 0),# East Asian ideograph (variant of 4B4049 which maps to 62D0) + 0x21404a: (0x62c8, 0),# East Asian ideograph + 0x21404b: (0x62d9, 0),# East Asian ideograph + 0x21404c: (0x62da, 0),# East Asian ideograph + 0x21404d: (0x62ac, 0),# East Asian ideograph + 0x21404e: (0x62c7, 0),# East Asian ideograph + 0x21404f: (0x62b1, 0),# East Asian ideograph + 0x214050: (0x62d6, 0),# East Asian ideograph + 0x214051: (0x62d8, 0),# East Asian ideograph + 0x214052: (0x62cd, 0),# East Asian ideograph + 0x214053: (0x62b5, 0),# East Asian ideograph + 0x214054: (0x62ce, 0),# East Asian ideograph + 0x214055: (0x62d7, 0),# East Asian ideograph + 0x214056: (0x62c6, 0),# East Asian ideograph + 0x214057: (0x6309, 0),# East Asian ideograph + 0x214058: (0x6316, 0),# East Asian ideograph + 0x214059: (0x62fc, 0),# East Asian ideograph + 0x21405a: (0x62f3, 0),# East Asian ideograph + 0x21405b: (0x6308, 0),# East Asian ideograph + 0x21405c: (0x62ed, 0),# East Asian ideograph + 0x21405d: (0x6301, 0),# East Asian ideograph + 0x21405e: (0x62ee, 0),# East Asian ideograph + 0x21405f: (0x62ef, 0),# East Asian ideograph + 0x214060: (0x62f7, 0),# East Asian ideograph + 0x214061: (0x6307, 0),# East Asian ideograph + 0x214062: (0x62f1, 0),# East Asian ideograph + 0x214063: (0x62fd, 0),# East Asian ideograph + 0x214064: (0x6311, 0),# East Asian ideograph + 0x214065: (0x62ec, 0),# East Asian ideograph + 0x214066: (0x62f4, 0),# East Asian ideograph (variant of 4B4066 which maps to 62F4) + 0x214067: (0x62ff, 0),# East Asian ideograph + 0x224068: (0x6a2d, 0),# East Asian ideograph + 0x214069: (0x6342, 0),# East Asian ideograph + 0x21406a: (0x632a, 0),# East Asian ideograph + 0x21406b: (0x6355, 0),# East Asian ideograph + 0x21406c: (0x633e, 0),# East Asian ideograph + 0x21406d: (0x632f, 0),# East Asian ideograph + 0x21406e: (0x634e, 0),# East Asian ideograph + 0x21406f: (0x634f, 0),# East Asian ideograph + 0x214070: (0x6350, 0),# East Asian ideograph + 0x214071: (0x6349, 0),# East Asian ideograph + 0x224072: (0x6a1d, 0),# East Asian ideograph + 0x214073: (0x632b, 0),# East Asian ideograph + 0x214074: (0x6328, 0),# East Asian ideograph + 0x214075: (0x633a, 0),# East Asian ideograph + 0x214076: (0x63a5, 0),# East Asian ideograph + 0x214077: (0x6369, 0),# East Asian ideograph + 0x214078: (0x63a0, 0),# East Asian ideograph + 0x214079: (0x6396, 0),# East Asian ideograph + 0x21407a: (0x63a7, 0),# East Asian ideograph + 0x21407b: (0x6372, 0),# East Asian ideograph + 0x21407c: (0x6377, 0),# East Asian ideograph + 0x21407d: (0x6383, 0),# East Asian ideograph + 0x21407e: (0x636b, 0),# East Asian ideograph + 0x2d5c74: (0x96a3, 0),# East Asian ideograph + 0x2d5831: (0x89a7, 0),# East Asian ideograph + 0x21756c: (0x57be, 0),# East Asian ideograph + 0x693729: (0x7c82, 0),# East Asian ideograph + 0x23356d: (0x8c73, 0),# East Asian ideograph + 0x6f5966: (0xce5c, 0),# Korean hangul + 0x29252d: (0x8311, 0),# East Asian ideograph + 0x6f5366: (0xc232, 0),# Korean hangul + 0x276251: (0x76d0, 0),# East Asian ideograph + 0x6f5463: (0xc46c, 0),# Korean hangul + 0x6f4f23: (0xb800, 0),# Korean hangul + 0x21356f: (0x547b, 0),# East Asian ideograph + 0x6f4c71: (0xb2eb, 0),# Korean hangul + 0x233571: (0x8c75, 0),# East Asian ideograph + 0x28722a: (0x7f02, 0),# East Asian ideograph + 0x213572: (0x5484, 0),# East Asian ideograph + 0x6f4a54: (0xae7b, 0),# Korean hangul + 0x39593f: (0x8a3c, 0),# East Asian ideograph + 0x233573: (0x8c77, 0),# East Asian ideograph + 0x276252: (0x7877, 0),# East Asian ideograph + 0x213d7b: (0x5fd8, 0),# East Asian ideograph + 0x6f4f24: (0xb801, 0),# Korean hangul + 0x213574: (0x5468, 0),# East Asian ideograph + 0x223d4b: (0x68b4, 0),# East Asian ideograph + 0x692568: (0x30e8, 0),# Katakana letter YO + 0x213575: (0x5486, 0),# East Asian ideograph + 0x213939: (0x5957, 0),# East Asian ideograph + 0x6f5a2f: (0xcf01, 0),# Korean hangul + 0x393b6e: (0x5c97, 0),# East Asian ideograph + 0x2d6021: (0x978c, 0),# East Asian ideograph + 0x335652: (0x87c1, 0),# East Asian ideograph + 0x223577: (0x652e, 0),# East Asian ideograph + 0x216022: (0x978b, 0),# East Asian ideograph + 0x216023: (0x978f, 0),# East Asian ideograph + 0x215b66: (0x8fc6, 0),# East Asian ideograph + 0x694838: (0x567a, 0),# East Asian ideograph + 0x216024: (0x9798, 0),# East Asian ideograph + 0x4b5036: (0x7c14, 0),# East Asian ideograph + 0x277360: (0x5181, 0),# East Asian ideograph + 0x21357b: (0x5471, 0),# East Asian ideograph + 0x21357c: (0x549a, 0),# East Asian ideograph + 0x454e43: (0x788c, 0),# East Asian ideograph (variant of 214E43 which maps to 788C) + 0x21357d: (0x548e, 0),# East Asian ideograph + 0x216028: (0x97ad, 0),# East Asian ideograph + 0x6f4f26: (0xb808, 0),# Korean hangul + 0x215724: (0x87a2, 0),# East Asian ideograph + 0x275e7b: (0x9635, 0),# East Asian ideograph + 0x6f5d6e: (0xd758, 0),# Korean hangul + 0x21602b: (0x97c6, 0),# East Asian ideograph + 0x335259: (0x7e59, 0),# East Asian ideograph + 0x27602c: (0x97e6, 0),# East Asian ideograph + 0x27623d: (0x9e3d, 0),# East Asian ideograph + 0x4b4347: (0x66a8, 0),# East Asian ideograph + 0x6f536a: (0xc26c, 0),# Korean hangul + 0x27602d: (0x97e7, 0),# East Asian ideograph + 0x6f4f27: (0xb809, 0),# Korean hangul + 0x6f592b: (0xcc3e, 0),# Korean hangul + 0x213938: (0x5950, 0),# East Asian ideograph + 0x2d3a60: (0x6588, 0),# East Asian ideograph + 0x27602f: (0x97ec, 0),# East Asian ideograph + 0x214121: (0x6367, 0),# East Asian ideograph + 0x214122: (0x6398, 0),# East Asian ideograph + 0x214123: (0x639b, 0),# East Asian ideograph + 0x214124: (0x63aa, 0),# East Asian ideograph + 0x214125: (0x6371, 0),# East Asian ideograph + 0x214126: (0x63a9, 0),# East Asian ideograph + 0x214127: (0x638c, 0),# East Asian ideograph + 0x214128: (0x6389, 0),# East Asian ideograph + 0x214129: (0x63a2, 0),# East Asian ideograph + 0x21412a: (0x6399, 0),# East Asian ideograph + 0x21412b: (0x63a1, 0),# East Asian ideograph + 0x21412c: (0x6388, 0),# East Asian ideograph + 0x21412d: (0x63ac, 0),# East Asian ideograph + 0x21412e: (0x633d, 0),# East Asian ideograph + 0x21412f: (0x6392, 0),# East Asian ideograph + 0x214130: (0x63a3, 0),# East Asian ideograph + 0x214131: (0x6376, 0),# East Asian ideograph + 0x214132: (0x638f, 0),# East Asian ideograph + 0x214133: (0x63a8, 0),# East Asian ideograph + 0x214134: (0x637b, 0),# East Asian ideograph + 0x214135: (0x6368, 0),# East Asian ideograph (variant of 4B4135 which maps to 6368) + 0x214136: (0x6384, 0),# East Asian ideograph + 0x214137: (0x6380, 0),# East Asian ideograph + 0x214138: (0x63c6, 0),# East Asian ideograph + 0x214139: (0x63c9, 0),# East Asian ideograph + 0x21413a: (0x63cd, 0),# East Asian ideograph + 0x21413b: (0x63e1, 0),# East Asian ideograph + 0x21413c: (0x63c0, 0),# East Asian ideograph + 0x21413d: (0x63e9, 0),# East Asian ideograph + 0x21413e: (0x63d0, 0),# East Asian ideograph + 0x21413f: (0x63da, 0),# East Asian ideograph + 0x214140: (0x63d6, 0),# East Asian ideograph + 0x214141: (0x63ed, 0),# East Asian ideograph + 0x214142: (0x63ee, 0),# East Asian ideograph + 0x214143: (0x63cf, 0),# East Asian ideograph + 0x214144: (0x63e3, 0),# East Asian ideograph + 0x214145: (0x63f4, 0),# East Asian ideograph + 0x214146: (0x63db, 0),# East Asian ideograph (variant of 454146 which maps to 63DB) + 0x214147: (0x63d2, 0),# East Asian ideograph + 0x234148: (0x91ae, 0),# East Asian ideograph + 0x214149: (0x641e, 0),# East Asian ideograph + 0x21414a: (0x642a, 0),# East Asian ideograph + 0x23414b: (0x91b4, 0),# East Asian ideograph + 0x23414c: (0x91b2, 0),# East Asian ideograph + 0x21414d: (0x640f, 0),# East Asian ideograph + 0x21414e: (0x6414, 0),# East Asian ideograph + 0x21414f: (0x640d, 0),# East Asian ideograph + 0x214150: (0x642d, 0),# East Asian ideograph + 0x214151: (0x643d, 0),# East Asian ideograph + 0x214152: (0x6416, 0),# East Asian ideograph + 0x214153: (0x6417, 0),# East Asian ideograph + 0x214154: (0x641c, 0),# East Asian ideograph + 0x214155: (0x6436, 0),# East Asian ideograph + 0x214156: (0x642c, 0),# East Asian ideograph + 0x214157: (0x6458, 0),# East Asian ideograph + 0x214158: (0x6469, 0),# East Asian ideograph + 0x214159: (0x6454, 0),# East Asian ideograph + 0x21415a: (0x6452, 0),# East Asian ideograph + 0x21415b: (0x646f, 0),# East Asian ideograph + 0x21415c: (0x6478, 0),# East Asian ideograph + 0x21415d: (0x6479, 0),# East Asian ideograph + 0x21415e: (0x647a, 0),# East Asian ideograph + 0x21415f: (0x645f, 0),# East Asian ideograph + 0x214160: (0x6451, 0),# East Asian ideograph + 0x214161: (0x6467, 0),# East Asian ideograph + 0x214162: (0x649e, 0),# East Asian ideograph + 0x214163: (0x64a4, 0),# East Asian ideograph + 0x214164: (0x6487, 0),# East Asian ideograph + 0x214165: (0x6488, 0),# East Asian ideograph + 0x214166: (0x64a5, 0),# East Asian ideograph + 0x214167: (0x64b0, 0),# East Asian ideograph + 0x214168: (0x6493, 0),# East Asian ideograph + 0x214169: (0x6495, 0),# East Asian ideograph + 0x21416a: (0x6492, 0),# East Asian ideograph + 0x21416b: (0x64a9, 0),# East Asian ideograph + 0x21416c: (0x6491, 0),# East Asian ideograph + 0x21416d: (0x64ae, 0),# East Asian ideograph + 0x21416e: (0x64b2, 0),# East Asian ideograph + 0x21416f: (0x64ad, 0),# East Asian ideograph + 0x214170: (0x649a, 0),# East Asian ideograph + 0x214171: (0x64ab, 0),# East Asian ideograph + 0x214172: (0x64ac, 0),# East Asian ideograph + 0x214173: (0x64c5, 0),# East Asian ideograph + 0x214174: (0x64c1, 0),# East Asian ideograph + 0x214175: (0x64d8, 0),# East Asian ideograph + 0x214176: (0x64ca, 0),# East Asian ideograph + 0x214177: (0x64bb, 0),# East Asian ideograph + 0x214178: (0x64c2, 0),# East Asian ideograph + 0x214179: (0x64bc, 0),# East Asian ideograph + 0x21417a: (0x64cb, 0),# East Asian ideograph + 0x21417b: (0x64cd, 0),# East Asian ideograph + 0x21417c: (0x64da, 0),# East Asian ideograph + 0x21417d: (0x64c4, 0),# East Asian ideograph + 0x21417e: (0x64c7, 0),# East Asian ideograph + 0x705c50: (0x82c4, 0),# East Asian ideograph + 0x216040: (0x9813, 0),# East Asian ideograph + 0x393e61: (0x60aa, 0),# East Asian ideograph + 0x6f536e: (0xc27d, 0),# Korean hangul + 0x216041: (0x9812, 0),# East Asian ideograph + 0x2d3571: (0x546a, 0),# East Asian ideograph + 0x6f4f2b: (0xb819, 0),# Korean hangul + 0x29483e: (0x9554, 0),# East Asian ideograph + 0x276042: (0x9882, 0),# East Asian ideograph + 0x276043: (0x9887, 0),# East Asian ideograph + 0x6f5d6f: (0xd759, 0),# Korean hangul + 0x276044: (0x9886, 0),# East Asian ideograph + 0x69594b: (0x6327, 0),# East Asian ideograph + 0x276045: (0x9889, 0),# East Asian ideograph + 0x27623e: (0x9e49, 0),# East Asian ideograph + 0x6f536f: (0xc27f, 0),# Korean hangul + 0x276046: (0x5934, 0),# East Asian ideograph + 0x6f4f2c: (0xb81b, 0),# Korean hangul + 0x213954: (0x5999, 0),# East Asian ideograph + 0x29483f: (0x9572, 0),# East Asian ideograph + 0x236047: (0x9f76, 0),# East Asian ideograph + 0x6f5775: (0xc918, 0),# Korean hangul + 0x216048: (0x9838, 0),# East Asian ideograph + 0x6f503a: (0xbaa8, 0),# Korean hangul + 0x216049: (0x983b, 0),# East Asian ideograph + 0x213e58: (0x60e6, 0),# East Asian ideograph + 0x222c47: (0x60d3, 0),# East Asian ideograph + 0x21604a: (0x9839, 0),# East Asian ideograph + 0x6f5370: (0xc281, 0),# Korean hangul + 0x27625b: (0x9ea6, 0),# East Asian ideograph + 0x27604b: (0x9894, 0),# East Asian ideograph + 0x6f4f2d: (0xb81d, 0),# Korean hangul + 0x27604c: (0x9890, 0),# East Asian ideograph + 0x225b2a: (0x748a, 0),# East Asian ideograph + 0x27604d: (0x9897, 0),# East Asian ideograph + 0x213269: (0x5132, 0),# East Asian ideograph + 0x4c725d: (0x7a39, 0),# East Asian ideograph + 0x27604e: (0x989c, 0),# East Asian ideograph + 0x27604f: (0x989d, 0),# East Asian ideograph + 0x2d4730: (0x51b5, 0),# East Asian ideograph + 0x27625c: (0x9eb8, 0),# East Asian ideograph + 0x276050: (0x9898, 0),# East Asian ideograph + 0x276051: (0x989a, 0),# East Asian ideograph + 0x216052: (0x9853, 0),# East Asian ideograph + 0x393b78: (0x5cc4, 0),# East Asian ideograph (duplicate simplified) + 0x276053: (0x7c7b, 0),# East Asian ideograph + 0x284f39: (0x6cf8, 0),# East Asian ideograph + 0x276054: (0x98a0, 0),# East Asian ideograph + 0x6f5372: (0xc289, 0),# Korean hangul + 0x216055: (0x9858, 0),# East Asian ideograph + 0x6f4f2f: (0xb825, 0),# Korean hangul + 0x4b4866: (0x6e89, 0),# East Asian ideograph + 0x276056: (0x987e, 0),# East Asian ideograph + 0x69243a: (0x305a, 0),# Hiragana letter ZU + 0x276057: (0x98a4, 0),# East Asian ideograph + 0x276058: (0x663e, 0),# East Asian ideograph + 0x213861: (0x589c, 0),# East Asian ideograph + 0x4b614d: (0x9a13, 0),# East Asian ideograph + 0x216059: (0x9871, 0),# East Asian ideograph + 0x4c4333: (0x6aaa, 0),# East Asian ideograph + 0x27625e: (0x9762, 0),# East Asian ideograph + 0x27605a: (0x98a6, 0),# East Asian ideograph + 0x6f4f30: (0xb828, 0),# Korean hangul + 0x214221: (0x64ce, 0),# East Asian ideograph + 0x214222: (0x64d4, 0),# East Asian ideograph + 0x214223: (0x64d2, 0),# East Asian ideograph + 0x214224: (0x64bf, 0),# East Asian ideograph + 0x234225: (0x9201, 0),# East Asian ideograph + 0x214226: (0x64f0, 0),# East Asian ideograph + 0x214227: (0x64e6, 0),# East Asian ideograph + 0x214228: (0x64ec, 0),# East Asian ideograph + 0x214229: (0x64f1, 0),# East Asian ideograph + 0x21422a: (0x64f4, 0),# East Asian ideograph + 0x21422b: (0x64f2, 0),# East Asian ideograph + 0x21422c: (0x6506, 0),# East Asian ideograph + 0x21422d: (0x6500, 0),# East Asian ideograph + 0x27422e: (0x6270, 0),# East Asian ideograph + 0x21422f: (0x64fb, 0),# East Asian ideograph + 0x214230: (0x64fa, 0),# East Asian ideograph + 0x214231: (0x650f, 0),# East Asian ideograph + 0x214232: (0x6518, 0),# East Asian ideograph + 0x214233: (0x6514, 0),# East Asian ideograph + 0x214234: (0x6519, 0),# East Asian ideograph + 0x214235: (0x651d, 0),# East Asian ideograph + 0x214236: (0x651c, 0),# East Asian ideograph + 0x214237: (0x6523, 0),# East Asian ideograph + 0x214238: (0x6524, 0),# East Asian ideograph + 0x214239: (0x652b, 0),# East Asian ideograph + 0x21423a: (0x652a, 0),# East Asian ideograph + 0x21423b: (0x652c, 0),# East Asian ideograph + 0x21423c: (0x652f, 0),# East Asian ideograph + 0x21423d: (0x6536, 0),# East Asian ideograph + 0x21423e: (0x6539, 0),# East Asian ideograph + 0x21423f: (0x653b, 0),# East Asian ideograph + 0x214240: (0x653e, 0),# East Asian ideograph + 0x214241: (0x653f, 0),# East Asian ideograph + 0x214242: (0x6545, 0),# East Asian ideograph + 0x214243: (0x6548, 0),# East Asian ideograph + 0x214244: (0x654e, 0),# East Asian ideograph + 0x214245: (0x6556, 0),# East Asian ideograph + 0x214246: (0x6551, 0),# East Asian ideograph + 0x274247: (0x8d25, 0),# East Asian ideograph + 0x214248: (0x655d, 0),# East Asian ideograph + 0x214249: (0x6558, 0),# East Asian ideograph + 0x21424a: (0x654f, 0),# East Asian ideograph + 0x21424b: (0x6566, 0),# East Asian ideograph + 0x21424c: (0x6562, 0),# East Asian ideograph + 0x21424d: (0x6563, 0),# East Asian ideograph + 0x21424e: (0x655e, 0),# East Asian ideograph + 0x21424f: (0x5553, 0),# East Asian ideograph + 0x214250: (0x656c, 0),# East Asian ideograph + 0x214251: (0x6572, 0),# East Asian ideograph + 0x214252: (0x6575, 0),# East Asian ideograph + 0x214253: (0x6577, 0),# East Asian ideograph + 0x214254: (0x6578, 0),# East Asian ideograph + 0x214255: (0x6574, 0),# East Asian ideograph + 0x214256: (0x6582, 0),# East Asian ideograph + 0x214257: (0x6583, 0),# East Asian ideograph + 0x214258: (0x6587, 0),# East Asian ideograph + 0x214259: (0x6591, 0),# East Asian ideograph + 0x21425a: (0x6590, 0),# East Asian ideograph + 0x6f4f32: (0xb834, 0),# Korean hangul + 0x21425c: (0x6599, 0),# East Asian ideograph + 0x21425d: (0x659c, 0),# East Asian ideograph + 0x21425e: (0x659f, 0),# East Asian ideograph + 0x21425f: (0x65a1, 0),# East Asian ideograph + 0x214260: (0x65a4, 0),# East Asian ideograph + 0x214261: (0x65a5, 0),# East Asian ideograph + 0x214262: (0x65a7, 0),# East Asian ideograph + 0x274263: (0x65a9, 0),# East Asian ideograph + 0x214264: (0x65af, 0),# East Asian ideograph + 0x214265: (0x65b0, 0),# East Asian ideograph + 0x274266: (0x65ad, 0),# East Asian ideograph + 0x214267: (0x65b9, 0),# East Asian ideograph + 0x224268: (0x6ab4, 0),# East Asian ideograph + 0x214269: (0x65bd, 0),# East Asian ideograph + 0x21426a: (0x65c1, 0),# East Asian ideograph + 0x21426b: (0x65c5, 0),# East Asian ideograph + 0x21426c: (0x65ce, 0),# East Asian ideograph + 0x21426d: (0x65cb, 0),# East Asian ideograph + 0x21426e: (0x65cc, 0),# East Asian ideograph + 0x21426f: (0x65cf, 0),# East Asian ideograph + 0x214270: (0x65d7, 0),# East Asian ideograph + 0x214271: (0x65d6, 0),# East Asian ideograph + 0x214272: (0x65e2, 0),# East Asian ideograph + 0x214273: (0x65e5, 0),# East Asian ideograph + 0x234274: (0x923f, 0),# East Asian ideograph + 0x214275: (0x65e9, 0),# East Asian ideograph + 0x214276: (0x65ec, 0),# East Asian ideograph + 0x214277: (0x65ed, 0),# East Asian ideograph + 0x214278: (0x65e8, 0),# East Asian ideograph + 0x214279: (0x65f1, 0),# East Asian ideograph + 0x21427a: (0x65fa, 0),# East Asian ideograph + 0x21427b: (0x6606, 0),# East Asian ideograph + 0x21427c: (0x6614, 0),# East Asian ideograph + 0x21427d: (0x660c, 0),# East Asian ideograph + 0x21427e: (0x6600, 0),# East Asian ideograph + 0x6f5779: (0xc954, 0),# Korean hangul + 0x21606b: (0x98ef, 0),# East Asian ideograph + 0x27606c: (0x9972, 0),# East Asian ideograph + 0x453f6d: (0x52e0, 0),# East Asian ideograph + 0x29373a: (0x8d46, 0),# East Asian ideograph + 0x22606d: (0x76ad, 0),# East Asian ideograph + 0x6f5377: (0xc2a4, 0),# Korean hangul + 0x27606e: (0x9971, 0),# East Asian ideograph + 0x6f4f34: (0xb837, 0),# Korean hangul + 0x21395c: (0x59b9, 0),# East Asian ideograph + 0x27606f: (0x9970, 0),# East Asian ideograph + 0x69243b: (0x305b, 0),# Hiragana letter SE + 0x276070: (0x997a, 0),# East Asian ideograph + 0x2d362a: (0x95a7, 0),# East Asian ideograph + 0x275156: (0x7f04, 0),# East Asian ideograph + 0x277272: (0x54d2, 0),# East Asian ideograph + 0x236071: (0x9fa5, 0),# East Asian ideograph + 0x213862: (0x58ae, 0),# East Asian ideograph + 0x216072: (0x990c, 0),# East Asian ideograph + 0x6f5378: (0xc2a5, 0),# Korean hangul + 0x276073: (0x9977, 0),# East Asian ideograph + 0x215b76: (0x8ff7, 0),# East Asian ideograph + 0x21395d: (0x59c6, 0),# East Asian ideograph + 0x216074: (0x9910, 0),# East Asian ideograph + 0x276075: (0x9981, 0),# East Asian ideograph + 0x6f5d71: (0xd761, 0),# Korean hangul + 0x276076: (0x4f59, 0),# East Asian ideograph + 0x295955: (0x9c8e, 0),# East Asian ideograph + 0x6f4b21: (0xaf9c, 0),# Korean hangul + 0x216077: (0x9913, 0),# East Asian ideograph + 0x214b22: (0x733e, 0),# East Asian ideograph + 0x2d4738: (0x6ffc, 0),# East Asian ideograph + 0x276078: (0x997c, 0),# East Asian ideograph + 0x214b23: (0x7345, 0),# East Asian ideograph + 0x276079: (0x9986, 0),# East Asian ideograph + 0x4b553f: (0x83bd, 0),# East Asian ideograph (variant of 21553F which maps to 83BD) + 0x224b24: (0x6e5c, 0),# East Asian ideograph + 0x27607a: (0x996f, 0),# East Asian ideograph + 0x27607b: (0x9984, 0),# East Asian ideograph + 0x224e6a: (0x700d, 0),# East Asian ideograph + 0x27607c: (0x9985, 0),# East Asian ideograph + 0x214b27: (0x7368, 0),# East Asian ideograph + 0x6f537a: (0xc2ac, 0),# Korean hangul + 0x217334: (0x5686, 0),# East Asian ideograph + 0x214b28: (0x7370, 0),# East Asian ideograph + 0x29484a: (0x956c, 0),# East Asian ideograph + 0x27607e: (0x998f, 0),# East Asian ideograph + 0x6f5d6d: (0xd757, 0),# Korean hangul + 0x214b29: (0x7372, 0),# East Asian ideograph + 0x4c5447: (0x71e0, 0),# East Asian ideograph (variant of 225447 which maps to 71E0) + 0x214b2a: (0x7377, 0),# East Asian ideograph + 0x2e7374: (0x7e89, 0),# East Asian ideograph + 0x214b2b: (0x7378, 0),# East Asian ideograph + 0x2e6060: (0x76a1, 0),# East Asian ideograph + 0x214b2c: (0x7375, 0),# East Asian ideograph + 0x6f537b: (0xc2ad, 0),# Korean hangul + 0x214b2d: (0x737a, 0),# East Asian ideograph + 0x213960: (0x59af, 0),# East Asian ideograph + 0x286222: (0x7726, 0),# East Asian ideograph + 0x214b2e: (0x737b, 0),# East Asian ideograph + 0x335f34: (0x90c4, 0),# East Asian ideograph + 0x21393d: (0x5962, 0),# East Asian ideograph + 0x274b2f: (0x7321, 0),# East Asian ideograph + 0x295958: (0x9c9a, 0),# East Asian ideograph + 0x214321: (0x660e, 0),# East Asian ideograph + 0x214322: (0x6613, 0),# East Asian ideograph + 0x214323: (0x6602, 0),# East Asian ideograph + 0x214324: (0x660f, 0),# East Asian ideograph + 0x214325: (0x6625, 0),# East Asian ideograph + 0x214326: (0x6627, 0),# East Asian ideograph + 0x214327: (0x662f, 0),# East Asian ideograph + 0x214328: (0x662d, 0),# East Asian ideograph + 0x214329: (0x6620, 0),# East Asian ideograph + 0x21432a: (0x661f, 0),# East Asian ideograph + 0x21432b: (0x6628, 0),# East Asian ideograph + 0x21432c: (0x664f, 0),# East Asian ideograph + 0x21432d: (0x6642, 0),# East Asian ideograph + 0x21432e: (0x6652, 0),# East Asian ideograph + 0x21432f: (0x6649, 0),# East Asian ideograph + 0x214330: (0x6643, 0),# East Asian ideograph + 0x214331: (0x664c, 0),# East Asian ideograph + 0x214332: (0x665d, 0),# East Asian ideograph + 0x214333: (0x6664, 0),# East Asian ideograph + 0x214334: (0x6668, 0),# East Asian ideograph + 0x214335: (0x6666, 0),# East Asian ideograph + 0x214336: (0x665a, 0),# East Asian ideograph + 0x214337: (0x666f, 0),# East Asian ideograph + 0x214338: (0x666e, 0),# East Asian ideograph + 0x214339: (0xfa12, 0),# East Asian ideograph + 0x21433a: (0x6691, 0),# East Asian ideograph + 0x21433b: (0x6670, 0),# East Asian ideograph + 0x21433c: (0x6676, 0),# East Asian ideograph + 0x21433d: (0x667a, 0),# East Asian ideograph + 0x21433e: (0x6697, 0),# East Asian ideograph + 0x21433f: (0x6687, 0),# East Asian ideograph + 0x214340: (0x6689, 0),# East Asian ideograph + 0x214341: (0x6688, 0),# East Asian ideograph + 0x214342: (0x6696, 0),# East Asian ideograph + 0x214343: (0x66a2, 0),# East Asian ideograph + 0x214344: (0x66ab, 0),# East Asian ideograph + 0x214345: (0x66b4, 0),# East Asian ideograph + 0x214346: (0x66ae, 0),# East Asian ideograph + 0x214347: (0x66c1, 0),# East Asian ideograph + 0x214348: (0x66c9, 0),# East Asian ideograph + 0x214349: (0x66c6, 0),# East Asian ideograph + 0x21434a: (0x66b9, 0),# East Asian ideograph + 0x21434b: (0x66d6, 0),# East Asian ideograph + 0x21434c: (0x66d9, 0),# East Asian ideograph + 0x21434d: (0x66e0, 0),# East Asian ideograph + 0x21434e: (0x66dd, 0),# East Asian ideograph + 0x21434f: (0x66e6, 0),# East Asian ideograph + 0x214350: (0x66f0, 0),# East Asian ideograph + 0x214351: (0x66f2, 0),# East Asian ideograph + 0x214352: (0x66f3, 0),# East Asian ideograph + 0x214353: (0x66f4, 0),# East Asian ideograph + 0x214354: (0x66f7, 0),# East Asian ideograph + 0x214355: (0x66f8, 0),# East Asian ideograph + 0x214356: (0x66f9, 0),# East Asian ideograph + 0x214357: (0x52d7, 0),# East Asian ideograph + 0x214358: (0x66fe, 0),# East Asian ideograph + 0x214359: (0x66ff, 0),# East Asian ideograph + 0x21435a: (0x6703, 0),# East Asian ideograph + 0x21435b: (0x6708, 0),# East Asian ideograph + 0x21435c: (0x6709, 0),# East Asian ideograph + 0x21435d: (0x670d, 0),# East Asian ideograph + 0x21435e: (0x670b, 0),# East Asian ideograph + 0x21435f: (0x6717, 0),# East Asian ideograph + 0x214360: (0x6715, 0),# East Asian ideograph + 0x214361: (0x6714, 0),# East Asian ideograph + 0x214362: (0x671b, 0),# East Asian ideograph + 0x214363: (0x671d, 0),# East Asian ideograph + 0x214364: (0x671f, 0),# East Asian ideograph + 0x6f537e: (0xc2b5, 0),# Korean hangul + 0x234366: (0x92c8, 0),# East Asian ideograph + 0x214367: (0x6728, 0),# East Asian ideograph + 0x214369: (0x672c, 0),# East Asian ideograph + 0x23436a: (0x92c3, 0),# East Asian ideograph + 0x21436b: (0x672a, 0),# East Asian ideograph + 0x29436c: (0x950d, 0),# East Asian ideograph + 0x21436d: (0x673d, 0),# East Asian ideograph + 0x22436e: (0x6b17, 0),# East Asian ideograph + 0x21436f: (0x6731, 0),# East Asian ideograph + 0x214370: (0x6735, 0),# East Asian ideograph + 0x214371: (0x675e, 0),# East Asian ideograph + 0x214372: (0x6751, 0),# East Asian ideograph + 0x214373: (0x674e, 0),# East Asian ideograph + 0x214374: (0x675c, 0),# East Asian ideograph + 0x234375: (0x92e6, 0),# East Asian ideograph + 0x214376: (0x6756, 0),# East Asian ideograph + 0x214377: (0x675f, 0),# East Asian ideograph + 0x214378: (0x674f, 0),# East Asian ideograph + 0x214379: (0x6749, 0),# East Asian ideograph + 0x23437a: (0x92d9, 0),# East Asian ideograph + 0x21437b: (0x676d, 0),# East Asian ideograph + 0x21437c: (0x678b, 0),# East Asian ideograph + 0x21437d: (0x6795, 0),# East Asian ideograph + 0x21437e: (0x6789, 0),# East Asian ideograph + 0x21777b: (0x58a9, 0),# East Asian ideograph + 0x4b3f40: (0x618e, 0),# East Asian ideograph (variant of 213F40) + 0x214b40: (0x73ed, 0),# East Asian ideograph + 0x27626a: (0x70b9, 0),# East Asian ideograph + 0x214b41: (0x73ee, 0),# East Asian ideograph + 0x214b42: (0x73e0, 0),# East Asian ideograph + 0x214b43: (0x7405, 0),# East Asian ideograph + 0x6f4b44: (0xb07c, 0),# Korean hangul + 0x23457e: (0x938b, 0),# East Asian ideograph + 0x214b45: (0x7403, 0),# East Asian ideograph + 0x336062: (0x98c3, 0),# East Asian ideograph + 0x214b46: (0x740a, 0),# East Asian ideograph + 0x517954: (0x734e, 0),# East Asian ideograph + 0x274b47: (0x73b0, 0),# East Asian ideograph + 0x6f577b: (0xc960, 0),# Korean hangul + 0x214b48: (0x7406, 0),# East Asian ideograph + 0x214b49: (0x740d, 0),# East Asian ideograph + 0x282577: (0x5ce4, 0),# East Asian ideograph + 0x214b4a: (0x743a, 0),# East Asian ideograph + 0x6f5338: (0xc14d, 0),# Korean hangul + 0x6f4b4b: (0xb090, 0),# Korean hangul + 0x213966: (0x59d4, 0),# East Asian ideograph + 0x6f4b4c: (0xb091, 0),# Korean hangul + 0x2d584d: (0x548f, 0),# East Asian ideograph + 0x214b4d: (0x7434, 0),# East Asian ideograph + 0x2e3a33: (0x80ad, 0),# East Asian ideograph + 0x213864: (0x58c7, 0),# East Asian ideograph (variant of 4B3864 which maps to 58C7) + 0x214b4f: (0x7433, 0),# East Asian ideograph + 0x6f4b50: (0xb099, 0),# Korean hangul + 0x6f5021: (0xba38, 0),# Korean hangul + 0x214b51: (0x7425, 0),# East Asian ideograph + 0x6f4b52: (0xb09c, 0),# Korean hangul + 0x213f36: (0x616e, 0),# East Asian ideograph + 0x234b53: (0x96ca, 0),# East Asian ideograph + 0x6f4b54: (0xb0a0, 0),# Korean hangul + 0x6f4b55: (0xb0a1, 0),# Korean hangul + 0x6f4f40: (0xb8b0, 0),# Korean hangul + 0x6f5930: (0xcc4c, 0),# Korean hangul + 0x6f4b56: (0xb0a8, 0),# Korean hangul + 0x274b57: (0x73f2, 0),# East Asian ideograph + 0x6f4b58: (0xb0ab, 0),# Korean hangul + 0x214b59: (0x745e, 0),# East Asian ideograph + 0x214b5a: (0x745c, 0),# East Asian ideograph + 0x6f4f41: (0xb8cc, 0),# Korean hangul + 0x214421: (0x6787, 0),# East Asian ideograph + 0x214422: (0x6777, 0),# East Asian ideograph + 0x214423: (0x679d, 0),# East Asian ideograph + 0x214424: (0x6797, 0),# East Asian ideograph + 0x214425: (0x676f, 0),# East Asian ideograph + 0x214426: (0x6771, 0),# East Asian ideograph + 0x214427: (0x6773, 0),# East Asian ideograph + 0x214428: (0x679c, 0),# East Asian ideograph + 0x214429: (0x6775, 0),# East Asian ideograph + 0x21442a: (0x679a, 0),# East Asian ideograph + 0x21442b: (0x6790, 0),# East Asian ideograph + 0x22442c: (0x6b37, 0),# East Asian ideograph + 0x21442d: (0x677e, 0),# East Asian ideograph + 0x21442e: (0x67d3, 0),# East Asian ideograph + 0x21442f: (0x67f1, 0),# East Asian ideograph + 0x214430: (0x67ff, 0),# East Asian ideograph + 0x214431: (0x67d4, 0),# East Asian ideograph + 0x214432: (0x67c4, 0),# East Asian ideograph + 0x214433: (0x67af, 0),# East Asian ideograph + 0x214434: (0x67d0, 0),# East Asian ideograph + 0x214435: (0x67d1, 0),# East Asian ideograph + 0x214436: (0x67ef, 0),# East Asian ideograph + 0x214437: (0x67e9, 0),# East Asian ideograph + 0x214438: (0x67b6, 0),# East Asian ideograph + 0x214439: (0x67ec, 0),# East Asian ideograph + 0x21443a: (0x67e5, 0),# East Asian ideograph + 0x21443b: (0x67fa, 0),# East Asian ideograph + 0x21443c: (0x67da, 0),# East Asian ideograph + 0x21443d: (0x6805, 0),# East Asian ideograph + 0x21443e: (0x67de, 0),# East Asian ideograph + 0x21443f: (0x67b8, 0),# East Asian ideograph + 0x214440: (0x67cf, 0),# East Asian ideograph + 0x214441: (0x67f3, 0),# East Asian ideograph + 0x214442: (0x6848, 0),# East Asian ideograph + 0x214443: (0x6821, 0),# East Asian ideograph + 0x214444: (0x6838, 0),# East Asian ideograph + 0x214445: (0x6853, 0),# East Asian ideograph + 0x214446: (0x6846, 0),# East Asian ideograph + 0x214447: (0x6842, 0),# East Asian ideograph + 0x214448: (0x6854, 0),# East Asian ideograph + 0x214449: (0x6817, 0),# East Asian ideograph + 0x21444a: (0x683d, 0),# East Asian ideograph + 0x21444b: (0x6851, 0),# East Asian ideograph + 0x21444c: (0x6829, 0),# East Asian ideograph + 0x21444d: (0x6850, 0),# East Asian ideograph + 0x21444e: (0x6839, 0),# East Asian ideograph + 0x23444f: (0x9344, 0),# East Asian ideograph + 0x214450: (0x67f4, 0),# East Asian ideograph + 0x214451: (0x6843, 0),# East Asian ideograph + 0x214452: (0x6840, 0),# East Asian ideograph + 0x214453: (0x682a, 0),# East Asian ideograph + 0x214454: (0x6845, 0),# East Asian ideograph + 0x214455: (0x683c, 0),# East Asian ideograph + 0x214456: (0x6813, 0),# East Asian ideograph (variant of 4B4456 which maps to 6813) + 0x214457: (0x6881, 0),# East Asian ideograph + 0x214458: (0x6893, 0),# East Asian ideograph + 0x214459: (0x68af, 0),# East Asian ideograph + 0x21445a: (0x6876, 0),# East Asian ideograph + 0x21445b: (0x68b0, 0),# East Asian ideograph + 0x21445c: (0x68a7, 0),# East Asian ideograph + 0x21445d: (0x6897, 0),# East Asian ideograph + 0x21445e: (0x68b5, 0),# East Asian ideograph + 0x21445f: (0x68b3, 0),# East Asian ideograph + 0x214460: (0x68a2, 0),# East Asian ideograph + 0x214461: (0x687f, 0),# East Asian ideograph + 0x214462: (0x68b1, 0),# East Asian ideograph + 0x214463: (0x689d, 0),# East Asian ideograph + 0x214464: (0x68ad, 0),# East Asian ideograph + 0x214465: (0x6886, 0),# East Asian ideograph + 0x234466: (0x9312, 0),# East Asian ideograph + 0x214467: (0x68a8, 0),# East Asian ideograph + 0x214468: (0x689f, 0),# East Asian ideograph + 0x214469: (0x6894, 0),# East Asian ideograph + 0x21446a: (0x6883, 0),# East Asian ideograph + 0x21446b: (0x68d5, 0),# East Asian ideograph + 0x21446c: (0x68fa, 0),# East Asian ideograph + 0x21446d: (0x68c4, 0),# East Asian ideograph + 0x21446e: (0x68f2, 0),# East Asian ideograph + 0x21446f: (0x68d2, 0),# East Asian ideograph + 0x214470: (0x68e3, 0),# East Asian ideograph + 0x214471: (0x68df, 0),# East Asian ideograph + 0x214472: (0x68cb, 0),# East Asian ideograph + 0x214473: (0x68ee, 0),# East Asian ideograph + 0x214474: (0x690d, 0),# East Asian ideograph + 0x214475: (0x6905, 0),# East Asian ideograph + 0x214476: (0x68e7, 0),# East Asian ideograph + 0x214477: (0x68e0, 0),# East Asian ideograph + 0x214478: (0x68f5, 0),# East Asian ideograph + 0x214479: (0x68cd, 0),# East Asian ideograph + 0x21447a: (0x68d7, 0),# East Asian ideograph + 0x21447b: (0x68d8, 0),# East Asian ideograph + 0x27447c: (0x832d, 0),# East Asian ideograph + 0x21447d: (0x68f9, 0),# East Asian ideograph + 0x21447e: (0x68da, 0),# East Asian ideograph + 0x214b6b: (0x74cf, 0),# East Asian ideograph + 0x275166: (0x7ee9, 0),# East Asian ideograph + 0x214b6c: (0x74dc, 0),# East Asian ideograph + 0x6f2457: (0x3131, 0),# Korean hangul + 0x6f576c: (0xc8fc, 0),# Korean hangul + 0x214b6d: (0x74e0, 0),# East Asian ideograph + 0x6f4b6e: (0xb108, 0),# Korean hangul + 0x70755d: (0x8e3a, 0),# East Asian ideograph + 0x6f4b6f: (0xb109, 0),# Korean hangul + 0x39525b: (0x66dc, 0),# East Asian ideograph + 0x214b71: (0x74f6, 0),# East Asian ideograph + 0x4b3f4a: (0x5fdc, 0),# East Asian ideograph + 0x234e35: (0x97be, 0),# East Asian ideograph + 0x29474d: (0x956b, 0),# East Asian ideograph + 0x6f4b73: (0xb10f, 0),# Korean hangul + 0x6f4f46: (0xb8f0, 0),# Korean hangul + 0x214b74: (0x750c, 0),# East Asian ideograph + 0x224b75: (0x6ea4, 0),# East Asian ideograph + 0x214b76: (0x7518, 0),# East Asian ideograph + 0x4b3f4b: (0x601c, 0),# East Asian ideograph (variant of 273F4B) + 0x234b77: (0x96f4, 0),# East Asian ideograph + 0x2d3622: (0x8aee, 0),# East Asian ideograph + 0x6f4d67: (0xb4ec, 0),# Korean hangul + 0x214b78: (0x751c, 0),# East Asian ideograph + 0x275e32: (0x9556, 0),# East Asian ideograph + 0x214b79: (0x751f, 0),# East Asian ideograph + 0x6f577d: (0xc96c, 0),# Korean hangul + 0x335f43: (0x9d08, 0),# East Asian ideograph + 0x333d2a: (0x5e83, 0),# East Asian ideograph + 0x2d5856: (0x612c, 0),# East Asian ideograph + 0x274b7a: (0x4ea7, 0),# East Asian ideograph + 0x4b5437: (0x820e, 0),# East Asian ideograph + 0x694b7b: (0x9ebf, 0),# East Asian ideograph + 0x213032: (0x4e26, 0),# East Asian ideograph + 0x214b7c: (0x7525, 0),# East Asian ideograph + 0x6f533a: (0xc154, 0),# Korean hangul + 0x276276: (0x51ac, 0),# East Asian ideograph + 0x214b7d: (0x7528, 0),# East Asian ideograph + 0x6f4f48: (0xb8f9, 0),# Korean hangul + 0x275e33: (0x9557, 0),# East Asian ideograph + 0x21352d: (0x53f8, 0),# East Asian ideograph + 0x217629: (0x57e3, 0),# East Asian ideograph + 0x23362a: (0x8c86, 0),# East Asian ideograph + 0x213866: (0x58c1, 0),# East Asian ideograph + 0x23527b: (0x99e3, 0),# East Asian ideograph + 0x21762c: (0x57f6, 0),# East Asian ideograph + 0x6f4f49: (0xb8fb, 0),# Korean hangul + 0x23362d: (0x8c85, 0),# East Asian ideograph + 0x29485c: (0x9565, 0),# East Asian ideograph + 0x21352e: (0x53e4, 0),# East Asian ideograph + 0x4d5858: (0x9be3, 0),# East Asian ideograph + 0x6f5d75: (0xd76c, 0),# Korean hangul + 0x214521: (0x690e, 0),# East Asian ideograph + 0x214522: (0x68c9, 0),# East Asian ideograph + 0x214523: (0x6954, 0),# East Asian ideograph + 0x214524: (0x6930, 0),# East Asian ideograph + 0x214525: (0x6977, 0),# East Asian ideograph + 0x214526: (0x6975, 0),# East Asian ideograph + 0x214527: (0x695a, 0),# East Asian ideograph + 0x214528: (0x6960, 0),# East Asian ideograph + 0x214529: (0x696b, 0),# East Asian ideograph + 0x21452a: (0x694a, 0),# East Asian ideograph + 0x21452b: (0x6968, 0),# East Asian ideograph + 0x21452c: (0x695e, 0),# East Asian ideograph + 0x21452d: (0x696d, 0),# East Asian ideograph + 0x21452e: (0x6979, 0),# East Asian ideograph + 0x21452f: (0x6953, 0),# East Asian ideograph + 0x214530: (0x6986, 0),# East Asian ideograph + 0x214531: (0x69a8, 0),# East Asian ideograph + 0x214532: (0x6995, 0),# East Asian ideograph + 0x214533: (0x699c, 0),# East Asian ideograph + 0x214534: (0x6994, 0),# East Asian ideograph + 0x214535: (0x69c1, 0),# East Asian ideograph + 0x214536: (0x69b7, 0),# East Asian ideograph + 0x214537: (0x69ae, 0),# East Asian ideograph + 0x214538: (0x699b, 0),# East Asian ideograph + 0x214539: (0x69cb, 0),# East Asian ideograph + 0x21453a: (0x69d3, 0),# East Asian ideograph + 0x21453b: (0x69bb, 0),# East Asian ideograph + 0x21453c: (0x69ab, 0),# East Asian ideograph + 0x21453d: (0x69cc, 0),# East Asian ideograph + 0x21453e: (0x69ad, 0),# East Asian ideograph + 0x21453f: (0x69d0, 0),# East Asian ideograph + 0x214540: (0x69cd, 0),# East Asian ideograph + 0x214541: (0x69b4, 0),# East Asian ideograph + 0x214542: (0x6a1f, 0),# East Asian ideograph + 0x214543: (0x69e8, 0),# East Asian ideograph + 0x274544: (0x6837, 0),# East Asian ideograph + 0x214545: (0x69ea, 0),# East Asian ideograph + 0x274546: (0x6869, 0),# East Asian ideograph + 0x214547: (0x6a19, 0),# East Asian ideograph + 0x214548: (0x69fd, 0),# East Asian ideograph + 0x214549: (0x6a1e, 0),# East Asian ideograph + 0x21454a: (0x6a13, 0),# East Asian ideograph + 0x21454b: (0x6a21, 0),# East Asian ideograph + 0x21454c: (0x69f3, 0),# East Asian ideograph + 0x21454d: (0x6a0a, 0),# East Asian ideograph + 0x21454e: (0x6a02, 0),# East Asian ideograph + 0x21454f: (0x6a05, 0),# East Asian ideograph + 0x214550: (0x6a3d, 0),# East Asian ideograph + 0x214551: (0x6a58, 0),# East Asian ideograph + 0x214552: (0x6a59, 0),# East Asian ideograph + 0x214553: (0x6a62, 0),# East Asian ideograph + 0x214554: (0x6a44, 0),# East Asian ideograph + 0x214555: (0x6a39, 0),# East Asian ideograph + 0x214556: (0x6a6b, 0),# East Asian ideograph + 0x214557: (0x6a3a, 0),# East Asian ideograph + 0x214558: (0x6a38, 0),# East Asian ideograph + 0x214559: (0x6a47, 0),# East Asian ideograph + 0x21455a: (0x6a61, 0),# East Asian ideograph + 0x21455b: (0x6a4b, 0),# East Asian ideograph + 0x21455c: (0x6a35, 0),# East Asian ideograph + 0x21455d: (0x6a5f, 0),# East Asian ideograph + 0x21455e: (0x6a80, 0),# East Asian ideograph + 0x21455f: (0x6a94, 0),# East Asian ideograph + 0x214560: (0x6a84, 0),# East Asian ideograph + 0x214561: (0x6aa2, 0),# East Asian ideograph + 0x214562: (0x6a9c, 0),# East Asian ideograph + 0x214563: (0x6ab8, 0),# East Asian ideograph + 0x214564: (0x6ab3, 0),# East Asian ideograph + 0x214565: (0x6ac3, 0),# East Asian ideograph + 0x214566: (0x6abb, 0),# East Asian ideograph + 0x234567: (0x9354, 0),# East Asian ideograph + 0x214568: (0x6aac, 0),# East Asian ideograph + 0x214569: (0x6ae5, 0),# East Asian ideograph + 0x21456a: (0x6ada, 0),# East Asian ideograph + 0x21456b: (0x6add, 0),# East Asian ideograph + 0x21456c: (0x6adb, 0),# East Asian ideograph + 0x21456d: (0x6ad3, 0),# East Asian ideograph + 0x21456e: (0x6b04, 0),# East Asian ideograph + 0x21456f: (0x6afb, 0),# East Asian ideograph + 0x214570: (0x6b0a, 0),# East Asian ideograph + 0x214571: (0x6b16, 0),# East Asian ideograph + 0x234572: (0x936d, 0),# East Asian ideograph + 0x214573: (0x6b21, 0),# East Asian ideograph + 0x214574: (0x6b23, 0),# East Asian ideograph + 0x27363e: (0x5458, 0),# East Asian ideograph + 0x214576: (0x6b3e, 0),# East Asian ideograph + 0x214577: (0x6b3a, 0),# East Asian ideograph + 0x214578: (0x6b3d, 0),# East Asian ideograph + 0x214579: (0x6b47, 0),# East Asian ideograph + 0x21457a: (0x6b49, 0),# East Asian ideograph + 0x21457b: (0x6b4c, 0),# East Asian ideograph + 0x21457c: (0x6b50, 0),# East Asian ideograph + 0x21457d: (0x6b59, 0),# East Asian ideograph + 0x21457e: (0x6b5f, 0),# East Asian ideograph + 0x6f7640: (0xe8b2, 0),# Korean hangul + 0x2d3b27: (0x51a8, 0),# East Asian ideograph + 0x453421: (0x5271, 0),# East Asian ideograph + 0x213641: (0x5506, 0),# East Asian ideograph + 0x4c4d3d: (0x6f62, 0),# East Asian ideograph + 0x2d3642: (0x6b38, 0),# East Asian ideograph + 0x335f49: (0x9d70, 0),# East Asian ideograph + 0x4d5b7e: (0x9dc6, 0),# East Asian ideograph + 0x27516f: (0x7f2b, 0),# East Asian ideograph + 0x213867: (0x58be, 0),# East Asian ideograph + 0x213644: (0x5556, 0),# East Asian ideograph + 0x213645: (0x5533, 0),# East Asian ideograph + 0x6f4f4e: (0xb959, 0),# Korean hangul + 0x275e39: (0x94d9, 0),# East Asian ideograph + 0x6f5449: (0xc372, 0),# Korean hangul + 0x234174: (0x91f4, 0),# East Asian ideograph + 0x213647: (0x5537, 0),# East Asian ideograph (Version J extension) + 0x2d3644: (0x5557, 0),# East Asian ideograph + 0x275170: (0x7f2e, 0),# East Asian ideograph + 0x6f553f: (0xc591, 0),# Korean hangul + 0x213649: (0x555e, 0),# East Asian ideograph + 0x276245: (0x9e4f, 0),# East Asian ideograph + 0x275e3a: (0x9570, 0),# East Asian ideograph + 0x6f764c: (0xe8be, 0),# Korean hangul + 0x21764d: (0x57fd, 0),# East Asian ideograph + 0x21764e: (0x57f8, 0),# East Asian ideograph + 0x21364f: (0x5531, 0),# East Asian ideograph + 0x2d5749: (0x885e, 0),# East Asian ideograph + 0x275e3b: (0x9508, 0),# East Asian ideograph + 0x21574e: (0x521d, 0),# East Asian ideograph + 0x6f5859: (0xcac0, 0),# Korean hangul + 0x233651: (0x8cba, 0),# East Asian ideograph + 0x233652: (0x8cb5, 0),# East Asian ideograph + 0x213653: (0x553e, 0),# East Asian ideograph + 0x213654: (0x5563, 0),# East Asian ideograph + 0x6f4f51: (0xb968, 0),# Korean hangul + 0x275e3c: (0x956d, 0),# East Asian ideograph + 0x234177: (0x91f1, 0),# East Asian ideograph + 0x6f7656: (0xe8c8, 0),# Korean hangul + 0x213657: (0x552e, 0),# East Asian ideograph + 0x6f4a3a: (0xae38, 0),# Korean hangul + 0x34682a: (0x7c7c, 0),# East Asian ideograph + 0x275e3d: (0x94c1, 0),# East Asian ideograph + 0x214621: (0x6b61, 0),# East Asian ideograph + 0x234622: (0x938c, 0),# East Asian ideograph + 0x214623: (0x6b63, 0),# East Asian ideograph + 0x214624: (0x6b64, 0),# East Asian ideograph + 0x214625: (0x6b65, 0),# East Asian ideograph + 0x214627: (0x6b66, 0),# East Asian ideograph + 0x214628: (0x6b6a, 0),# East Asian ideograph + 0x214629: (0x6b72, 0),# East Asian ideograph + 0x22462a: (0x6bf6, 0),# East Asian ideograph + 0x21462b: (0x6b78, 0),# East Asian ideograph + 0x21462c: (0x6b79, 0),# East Asian ideograph + 0x21462d: (0x6b7b, 0),# East Asian ideograph + 0x21462e: (0x6b7f, 0),# East Asian ideograph + 0x21462f: (0x6b83, 0),# East Asian ideograph + 0x214630: (0x6b86, 0),# East Asian ideograph + 0x214631: (0x6b8a, 0),# East Asian ideograph + 0x214632: (0x6b89, 0),# East Asian ideograph + 0x214633: (0x6b98, 0),# East Asian ideograph + 0x214634: (0x6b96, 0),# East Asian ideograph + 0x214635: (0x6ba4, 0),# East Asian ideograph + 0x214636: (0x6bae, 0),# East Asian ideograph + 0x214637: (0x6baf, 0),# East Asian ideograph + 0x214638: (0x6bb2, 0),# East Asian ideograph + 0x214639: (0x6bb5, 0),# East Asian ideograph + 0x21463a: (0x6bb7, 0),# East Asian ideograph + 0x21463b: (0x6bba, 0),# East Asian ideograph + 0x21463c: (0x6bbc, 0),# East Asian ideograph + 0x21463d: (0x6bc0, 0),# East Asian ideograph + 0x21463e: (0x6bbf, 0),# East Asian ideograph + 0x21463f: (0x6bc5, 0),# East Asian ideograph + 0x214640: (0x6bc6, 0),# East Asian ideograph + 0x214641: (0x6bcb, 0),# East Asian ideograph + 0x214642: (0x6bcd, 0),# East Asian ideograph + 0x214643: (0x6bcf, 0),# East Asian ideograph + 0x214644: (0x6bd2, 0),# East Asian ideograph + 0x214646: (0x6bd4, 0),# East Asian ideograph + 0x214647: (0x6bd7, 0),# East Asian ideograph + 0x214648: (0x6bdb, 0),# East Asian ideograph + 0x214649: (0x6beb, 0),# East Asian ideograph + 0x21464a: (0x6bef, 0),# East Asian ideograph + 0x21464b: (0x6bfd, 0),# East Asian ideograph + 0x21464c: (0x6c0f, 0),# East Asian ideograph + 0x21464d: (0x6c11, 0),# East Asian ideograph + 0x21464e: (0x6c10, 0),# East Asian ideograph + 0x21464f: (0x6c13, 0),# East Asian ideograph + 0x214650: (0x6c16, 0),# East Asian ideograph + 0x214651: (0x6c1b, 0),# East Asian ideograph + 0x214652: (0x6c1f, 0),# East Asian ideograph + 0x214653: (0x6c27, 0),# East Asian ideograph + 0x214654: (0x6c26, 0),# East Asian ideograph + 0x214655: (0x6c23, 0),# East Asian ideograph + 0x214656: (0x6c28, 0),# East Asian ideograph + 0x214657: (0x6c24, 0),# East Asian ideograph + 0x214658: (0x6c2b, 0),# East Asian ideograph + 0x214659: (0x6c2e, 0),# East Asian ideograph + 0x21465a: (0x6c33, 0),# East Asian ideograph + 0x21465b: (0x6c2f, 0),# East Asian ideograph (variant of 45465B which maps to 6C2F) + 0x21465c: (0x6c34, 0),# East Asian ideograph + 0x21465d: (0x6c38, 0),# East Asian ideograph + 0x21465e: (0x6c41, 0),# East Asian ideograph + 0x23465f: (0x93e5, 0),# East Asian ideograph + 0x214660: (0x6c40, 0),# East Asian ideograph + 0x214661: (0x6c42, 0),# East Asian ideograph + 0x214662: (0x6c5e, 0),# East Asian ideograph + 0x214663: (0x6c57, 0),# East Asian ideograph + 0x214664: (0x6c5f, 0),# East Asian ideograph + 0x214665: (0x6c59, 0),# East Asian ideograph + 0x214666: (0x6c60, 0),# East Asian ideograph + 0x214667: (0x6c55, 0),# East Asian ideograph + 0x214668: (0x6c50, 0),# East Asian ideograph + 0x214669: (0x6c5d, 0),# East Asian ideograph + 0x21466a: (0x6c9b, 0),# East Asian ideograph + 0x21466b: (0x6c81, 0),# East Asian ideograph + 0x21466d: (0x6c7a, 0),# East Asian ideograph + 0x21466e: (0x6c6a, 0),# East Asian ideograph + 0x21466f: (0x6c8c, 0),# East Asian ideograph + 0x214670: (0x6c90, 0),# East Asian ideograph + 0x214671: (0x6c72, 0),# East Asian ideograph + 0x214672: (0x6c70, 0),# East Asian ideograph + 0x214673: (0x6c68, 0),# East Asian ideograph + 0x214674: (0x6c96, 0),# East Asian ideograph + 0x234675: (0x93db, 0),# East Asian ideograph + 0x214676: (0x6c89, 0),# East Asian ideograph (variant of 4B4676 which maps to 6C89) + 0x214677: (0x6c99, 0),# East Asian ideograph + 0x214678: (0x6c7e, 0),# East Asian ideograph + 0x214679: (0x6c7d, 0),# East Asian ideograph + 0x21467a: (0x6c92, 0),# East Asian ideograph + 0x21467b: (0x6c83, 0),# East Asian ideograph + 0x21467c: (0x6cb1, 0),# East Asian ideograph + 0x23366a: (0x8ce1, 0),# East Asian ideograph + 0x21467e: (0x6cf3, 0),# East Asian ideograph + 0x21366b: (0x559d, 0),# East Asian ideograph + 0x2d5421: (0x9ad7, 0),# East Asian ideograph + 0x6f4a56: (0xae7d, 0),# Korean hangul + 0x4c4359: (0x6b05, 0),# East Asian ideograph + 0x27366d: (0x5524, 0),# East Asian ideograph + 0x21366e: (0x557e, 0),# East Asian ideograph + 0x294869: (0x9567, 0),# East Asian ideograph + 0x284027: (0x6864, 0),# East Asian ideograph + 0x21366f: (0x55ac, 0),# East Asian ideograph + 0x213670: (0x5589, 0),# East Asian ideograph + 0x223671: (0x6595, 0),# East Asian ideograph + 0x213672: (0x55bb, 0),# East Asian ideograph + 0x27406c: (0x631f, 0),# East Asian ideograph + 0x4c3b60: (0x6764, 0),# East Asian ideograph + 0x294228: (0x94ac, 0),# East Asian ideograph + 0x213674: (0x55df, 0),# East Asian ideograph + 0x213675: (0x55d1, 0),# East Asian ideograph + 0x213869: (0x58d3, 0),# East Asian ideograph + 0x28734e: (0x7f32, 0),# East Asian ideograph + 0x233676: (0x8cee, 0),# East Asian ideograph + 0x216121: (0x993f, 0),# East Asian ideograph + 0x213677: (0x55e6, 0),# East Asian ideograph + 0x4b6122: (0x994b, 0),# East Asian ideograph + 0x6f4f58: (0xb985, 0),# Korean hangul + 0x273678: (0x556c, 0),# East Asian ideograph + 0x275e43: (0x94f8, 0),# East Asian ideograph + 0x216123: (0x9945, 0),# East Asian ideograph + 0x6f5263: (0xc0b0, 0),# Korean hangul + 0x21353d: (0x53f2, 0),# East Asian ideograph + 0x276124: (0x9976, 0),# East Asian ideograph + 0x27367a: (0x5417, 0),# East Asian ideograph + 0x2d5424: (0x5367, 0),# East Asian ideograph + 0x23367b: (0x8cf1, 0),# East Asian ideograph + 0x216126: (0x995c, 0),# East Asian ideograph + 0x6f5851: (0xca54, 0),# Korean hangul + 0x21367c: (0x55ef, 0),# East Asian ideograph + 0x2d475b: (0x51c9, 0),# East Asian ideograph + 0x276127: (0x998b, 0),# East Asian ideograph + 0x6f4f59: (0xb987, 0),# Korean hangul + 0x21767d: (0x5844, 0),# East Asian ideograph + 0x275e44: (0x9573, 0),# East Asian ideograph + 0x21367e: (0x55c5, 0),# East Asian ideograph + 0x396c6b: (0x60a4, 0),# East Asian ideograph + 0x6f5b37: (0xd168, 0),# Korean hangul + 0x213e61: (0x60e1, 0),# East Asian ideograph + 0x224a4a: (0x6de6, 0),# East Asian ideograph + 0x4b5d34: (0x91b8, 0),# East Asian ideograph + 0x27612c: (0x9a6c, 0),# East Asian ideograph + 0x217971: (0x59a0, 0),# East Asian ideograph + 0x21353f: (0x540b, 0),# East Asian ideograph + 0x27612e: (0x9a6d, 0),# East Asian ideograph + 0x2d6260: (0x5e85, 0),# East Asian ideograph + 0x27612f: (0x9a70, 0),# East Asian ideograph + 0x287351: (0x7f33, 0),# East Asian ideograph + 0x214721: (0x6ce3, 0),# East Asian ideograph + 0x214722: (0x6cf0, 0),# East Asian ideograph + 0x214723: (0x6cb8, 0),# East Asian ideograph + 0x214724: (0x6cd3, 0),# East Asian ideograph + 0x214725: (0x6cab, 0),# East Asian ideograph + 0x214726: (0x6ce5, 0),# East Asian ideograph + 0x214727: (0x6cbd, 0),# East Asian ideograph + 0x214728: (0x6cb3, 0),# East Asian ideograph + 0x214729: (0x6cc4, 0),# East Asian ideograph + 0x21472a: (0x6cd5, 0),# East Asian ideograph + 0x21472b: (0x6ce2, 0),# East Asian ideograph + 0x21472c: (0x6cbc, 0),# East Asian ideograph + 0x21472d: (0x6cae, 0),# East Asian ideograph + 0x21472e: (0x6cb9, 0),# East Asian ideograph + 0x21472f: (0x6cf1, 0),# East Asian ideograph + 0x214730: (0x6cc1, 0),# East Asian ideograph + 0x214731: (0x6cbe, 0),# East Asian ideograph + 0x214732: (0x6cc5, 0),# East Asian ideograph + 0x214733: (0x6cd7, 0),# East Asian ideograph + 0x234734: (0x9413, 0),# East Asian ideograph + 0x214735: (0x6cdb, 0),# East Asian ideograph + 0x214736: (0x6ce1, 0),# East Asian ideograph + 0x214737: (0x6cbf, 0),# East Asian ideograph + 0x214738: (0x6cca, 0),# East Asian ideograph + 0x214739: (0x6ccc, 0),# East Asian ideograph + 0x21473a: (0x6cc9, 0),# East Asian ideograph + 0x21473b: (0x6d41, 0),# East Asian ideograph + 0x21473c: (0x6d0b, 0),# East Asian ideograph + 0x21473d: (0x6d32, 0),# East Asian ideograph + 0x21473e: (0x6d25, 0),# East Asian ideograph + 0x21473f: (0x6d31, 0),# East Asian ideograph + 0x214740: (0x6d2a, 0),# East Asian ideograph + 0x214741: (0x6d0c, 0),# East Asian ideograph + 0x214742: (0x6d1e, 0),# East Asian ideograph + 0x214743: (0x6d17, 0),# East Asian ideograph + 0x214744: (0x6d3b, 0),# East Asian ideograph + 0x214745: (0x6d1b, 0),# East Asian ideograph + 0x214746: (0x6d36, 0),# East Asian ideograph + 0x214747: (0x6d3d, 0),# East Asian ideograph + 0x214748: (0x6d3e, 0),# East Asian ideograph + 0x214749: (0x6d6a, 0),# East Asian ideograph + 0x21474a: (0x6d95, 0),# East Asian ideograph + 0x21474b: (0x6d78, 0),# East Asian ideograph + 0x21474c: (0x6d66, 0),# East Asian ideograph + 0x21474d: (0x6d59, 0),# East Asian ideograph + 0x21474e: (0x6d87, 0),# East Asian ideograph + 0x21474f: (0x6d88, 0),# East Asian ideograph + 0x214750: (0x6d6c, 0),# East Asian ideograph + 0x214751: (0x6d93, 0),# East Asian ideograph + 0x214752: (0x6d89, 0),# East Asian ideograph + 0x214753: (0x6d6e, 0),# East Asian ideograph + 0x214754: (0x6d74, 0),# East Asian ideograph + 0x214755: (0x6d5a, 0),# East Asian ideograph + 0x214756: (0x6d69, 0),# East Asian ideograph + 0x214757: (0x6d77, 0),# East Asian ideograph + 0x214758: (0x6dd9, 0),# East Asian ideograph + 0x214759: (0x6dda, 0),# East Asian ideograph + 0x21475a: (0x6df3, 0),# East Asian ideograph + 0x21475b: (0x6dbc, 0),# East Asian ideograph + 0x21475c: (0x6de4, 0),# East Asian ideograph + 0x21475d: (0x6db2, 0),# East Asian ideograph + 0x21475e: (0x6de1, 0),# East Asian ideograph + 0x21475f: (0x6dd2, 0),# East Asian ideograph + 0x214760: (0x6dae, 0),# East Asian ideograph + 0x214761: (0x6df8, 0),# East Asian ideograph + 0x214762: (0x6dc7, 0),# East Asian ideograph + 0x214763: (0x6dcb, 0),# East Asian ideograph + 0x214764: (0x6dc5, 0),# East Asian ideograph + 0x214765: (0x6dde, 0),# East Asian ideograph + 0x214766: (0x6daf, 0),# East Asian ideograph + 0x214767: (0x6db5, 0),# East Asian ideograph + 0x214768: (0x6dfa, 0),# East Asian ideograph + 0x214769: (0x6df9, 0),# East Asian ideograph + 0x21476a: (0x6dcc, 0),# East Asian ideograph + 0x21476b: (0x6df7, 0),# East Asian ideograph + 0x21476c: (0x6db8, 0),# East Asian ideograph + 0x21476d: (0x6dd1, 0),# East Asian ideograph + 0x21476e: (0x6df1, 0),# East Asian ideograph + 0x21476f: (0x6de8, 0),# East Asian ideograph + 0x214770: (0x6deb, 0),# East Asian ideograph + 0x214771: (0x6dd8, 0),# East Asian ideograph + 0x214772: (0x6dfb, 0),# East Asian ideograph + 0x214773: (0x6dee, 0),# East Asian ideograph + 0x214774: (0x6df5, 0),# East Asian ideograph + 0x214775: (0x6d8e, 0),# East Asian ideograph + 0x214776: (0x6dc6, 0),# East Asian ideograph + 0x214777: (0x6dea, 0),# East Asian ideograph + 0x214778: (0x6dc4, 0),# East Asian ideograph + 0x214779: (0x6e54, 0),# East Asian ideograph + 0x21477a: (0x6e21, 0),# East Asian ideograph + 0x21477b: (0x6e38, 0),# East Asian ideograph + 0x21477c: (0x6e32, 0),# East Asian ideograph + 0x21477d: (0x6e67, 0),# East Asian ideograph + 0x21477e: (0x6e20, 0),# East Asian ideograph + 0x4b5d38: (0x91c8, 0),# East Asian ideograph + 0x226140: (0x76ec, 0),# East Asian ideograph + 0x6f4f5e: (0xb9b0, 0),# Korean hangul + 0x6f5936: (0xcc64, 0),# Korean hangul + 0x276141: (0x9a97, 0),# East Asian ideograph + 0x6f5777: (0xc950, 0),# Korean hangul + 0x29442e: (0x9502, 0),# East Asian ideograph + 0x276142: (0x9a9b, 0),# East Asian ideograph + 0x276143: (0x9a9e, 0),# East Asian ideograph + 0x274d3d: (0x76d1, 0),# East Asian ideograph + 0x6f5c28: (0xd38d, 0),# Korean hangul + 0x216144: (0x9a30, 0),# East Asian ideograph + 0x4b624f: (0x9d49, 0),# East Asian ideograph + 0x276145: (0x9a9a, 0),# East Asian ideograph + 0x6f4f5f: (0xb9b4, 0),# Korean hangul + 0x275e4a: (0x94bb, 0),# East Asian ideograph + 0x273c31: (0x5ce6, 0),# East Asian ideograph + 0x21575d: (0x88c2, 0),# East Asian ideograph + 0x6f585c: (0xcacd, 0),# Korean hangul + 0x217533: (0x5788, 0),# East Asian ideograph + 0x276147: (0x9a71, 0),# East Asian ideograph + 0x213860: (0x58b3, 0),# East Asian ideograph + 0x216148: (0x9a40, 0),# East Asian ideograph + 0x6f772d: (0xae5f, 0),# Korean hangul + 0x287236: (0x7f07, 0),# East Asian ideograph + 0x6f5c29: (0xd38f, 0),# Korean hangul + 0x276149: (0x9aa1, 0),# East Asian ideograph + 0x27614a: (0x9a84, 0),# East Asian ideograph + 0x6f4c6d: (0xb2e4, 0),# Korean hangul + 0x6f4f60: (0xb9bc, 0),# Korean hangul + 0x22614b: (0x7704, 0),# East Asian ideograph + 0x225b5d: (0x74a1, 0),# East Asian ideograph + 0x27614c: (0x9a7f, 0),# East Asian ideograph + 0x27614d: (0x9a8c, 0),# East Asian ideograph + 0x27614e: (0x9aa4, 0),# East Asian ideograph + 0x21614f: (0x9a62, 0),# East Asian ideograph + 0x6f4f61: (0xb9bd, 0),# Korean hangul + 0x275e4c: (0x957f, 0),# East Asian ideograph + 0x216150: (0x9a65, 0),# East Asian ideograph + 0x21575f: (0x88df, 0),# East Asian ideograph + 0x216151: (0x9a6a, 0),# East Asian ideograph + 0x226153: (0x76f7, 0),# East Asian ideograph + 0x293325: (0x8bf9, 0),# East Asian ideograph + 0x216154: (0x9ab0, 0),# East Asian ideograph + 0x6f4f62: (0xb9bf, 0),# Korean hangul + 0x235f5e: (0x9f39, 0),# East Asian ideograph + 0x213f3d: (0x61a7, 0),# East Asian ideograph + 0x216157: (0x9abc, 0),# East Asian ideograph + 0x287359: (0x7f31, 0),# East Asian ideograph + 0x276158: (0x9ac5, 0),# East Asian ideograph + 0x216159: (0x9ad3, 0),# East Asian ideograph + 0x6f4f63: (0xb9c1, 0),# Korean hangul + 0x275e4e: (0x95e9, 0),# East Asian ideograph + 0x27615a: (0x4f53, 0),# East Asian ideograph + 0x277c24: (0x5a32, 0),# East Asian ideograph + 0x456036: (0x97ff, 0),# East Asian ideograph + 0x214821: (0x6e5b, 0),# East Asian ideograph + 0x214822: (0x6e1a, 0),# East Asian ideograph + 0x214823: (0x6e56, 0),# East Asian ideograph + 0x214824: (0x6e2f, 0),# East Asian ideograph + 0x214825: (0x6e6e, 0),# East Asian ideograph + 0x214826: (0x6e58, 0),# East Asian ideograph + 0x214827: (0x6e23, 0),# East Asian ideograph + 0x214828: (0x6e24, 0),# East Asian ideograph + 0x214829: (0x6e1b, 0),# East Asian ideograph + 0x21482a: (0x6e25, 0),# East Asian ideograph + 0x21482b: (0x6e4a, 0),# East Asian ideograph + 0x21482c: (0x6e3a, 0),# East Asian ideograph + 0x21482d: (0x6e6f, 0),# East Asian ideograph + 0x21482e: (0x6e2d, 0),# East Asian ideograph + 0x22482f: (0x6ce0, 0),# East Asian ideograph + 0x214830: (0x6e2c, 0),# East Asian ideograph + 0x214831: (0x6e26, 0),# East Asian ideograph + 0x214832: (0x6e4d, 0),# East Asian ideograph + 0x214833: (0x6e3e, 0),# East Asian ideograph + 0x214834: (0x6e43, 0),# East Asian ideograph + 0x214835: (0x6e19, 0),# East Asian ideograph + 0x214836: (0x6e1d, 0),# East Asian ideograph + 0x214837: (0x6ed3, 0),# East Asian ideograph + 0x214838: (0x6eb6, 0),# East Asian ideograph + 0x214839: (0x6ec2, 0),# East Asian ideograph + 0x21483b: (0x6eaf, 0),# East Asian ideograph + 0x21483c: (0x6ea2, 0),# East Asian ideograph + 0x27483d: (0x6c9f, 0),# East Asian ideograph + 0x23483e: (0x944c, 0),# East Asian ideograph + 0x21483f: (0x6ea5, 0),# East Asian ideograph + 0x214840: (0x6e98, 0),# East Asian ideograph + 0x214841: (0x6e90, 0),# East Asian ideograph + 0x214842: (0x6ec5, 0),# East Asian ideograph + 0x214843: (0x6ec7, 0),# East Asian ideograph + 0x214844: (0x6ebc, 0),# East Asian ideograph + 0x214845: (0x6eab, 0),# East Asian ideograph + 0x214846: (0x6ed1, 0),# East Asian ideograph + 0x214847: (0x6ecb, 0),# East Asian ideograph + 0x214848: (0x6ec4, 0),# East Asian ideograph + 0x214849: (0x6ed4, 0),# East Asian ideograph + 0x21484a: (0x6eaa, 0),# East Asian ideograph + 0x21484b: (0x6e96, 0),# East Asian ideograph + 0x21484c: (0x6e9c, 0),# East Asian ideograph + 0x21484d: (0x6f33, 0),# East Asian ideograph + 0x21484e: (0x6ef4, 0),# East Asian ideograph + 0x21484f: (0x6eec, 0),# East Asian ideograph + 0x214850: (0x6efe, 0),# East Asian ideograph + 0x214851: (0x6f29, 0),# East Asian ideograph + 0x214852: (0x6f14, 0),# East Asian ideograph + 0x214853: (0x6f3e, 0),# East Asian ideograph + 0x214854: (0x6f2c, 0),# East Asian ideograph + 0x214855: (0x6f32, 0),# East Asian ideograph + 0x214856: (0x6f0f, 0),# East Asian ideograph + 0x214857: (0x6f22, 0),# East Asian ideograph (variant of 4B4857 which maps to 6F22) + 0x214858: (0x6eff, 0),# East Asian ideograph + 0x214859: (0x6f23, 0),# East Asian ideograph + 0x21485a: (0x6f38, 0),# East Asian ideograph + 0x21485b: (0x6f15, 0),# East Asian ideograph + 0x21485c: (0x6f31, 0),# East Asian ideograph + 0x21485d: (0x6f02, 0),# East Asian ideograph + 0x21485e: (0x6f06, 0),# East Asian ideograph + 0x21485f: (0x6eef, 0),# East Asian ideograph + 0x214860: (0x6f2b, 0),# East Asian ideograph + 0x214861: (0x6f2f, 0),# East Asian ideograph + 0x214862: (0x6f20, 0),# East Asian ideograph + 0x214863: (0x6f3f, 0),# East Asian ideograph + 0x214864: (0x6ef2, 0),# East Asian ideograph + 0x214865: (0x6f01, 0),# East Asian ideograph + 0x214866: (0x6f11, 0),# East Asian ideograph + 0x214867: (0x6ecc, 0),# East Asian ideograph + 0x214868: (0x6f2a, 0),# East Asian ideograph + 0x214869: (0x6f7c, 0),# East Asian ideograph + 0x21486a: (0x6f88, 0),# East Asian ideograph + 0x21486b: (0x6f84, 0),# East Asian ideograph + 0x21486c: (0x6f51, 0),# East Asian ideograph + 0x21486d: (0x6f64, 0),# East Asian ideograph + 0x21486e: (0x6f97, 0),# East Asian ideograph + 0x21486f: (0x6f54, 0),# East Asian ideograph + 0x214870: (0x6f7a, 0),# East Asian ideograph + 0x214871: (0x6f86, 0),# East Asian ideograph + 0x214872: (0x6f8e, 0),# East Asian ideograph + 0x214873: (0x6f6d, 0),# East Asian ideograph + 0x214874: (0x6f5b, 0),# East Asian ideograph + 0x214875: (0x6f6e, 0),# East Asian ideograph + 0x214876: (0x6f78, 0),# East Asian ideograph + 0x214877: (0x6f66, 0),# East Asian ideograph + 0x214878: (0x6f70, 0),# East Asian ideograph + 0x214879: (0x6f58, 0),# East Asian ideograph + 0x21487a: (0x6fc2, 0),# East Asian ideograph + 0x21487b: (0x6fb1, 0),# East Asian ideograph + 0x21487c: (0x6fc3, 0),# East Asian ideograph + 0x21487d: (0x6fa7, 0),# East Asian ideograph + 0x21487e: (0x6fa1, 0),# East Asian ideograph + 0x4d5875: (0x9cd0, 0),# East Asian ideograph + 0x2d5d65: (0x8216, 0),# East Asian ideograph + 0x28735d: (0x7ea9, 0),# East Asian ideograph + 0x6f5c30: (0xd3a8, 0),# Korean hangul + 0x22616c: (0x7722, 0),# East Asian ideograph + 0x22616d: (0x771a, 0),# East Asian ideograph + 0x6f4f67: (0xb9c9, 0),# Korean hangul + 0x6f4b24: (0xafbc, 0),# Korean hangul + 0x21616f: (0x9b45, 0),# East Asian ideograph + 0x28336f: (0x629f, 0),# East Asian ideograph + 0x6f5c31: (0xd3a9, 0),# Korean hangul + 0x6f245e: (0x3147, 0),# Korean hangul + 0x4b5d42: (0x91e1, 0),# East Asian ideograph + 0x27407d: (0x626b, 0),# East Asian ideograph + 0x6f5029: (0xba4e, 0),# Korean hangul + 0x2d4327: (0x6630, 0),# East Asian ideograph + 0x275e53: (0x5f00, 0),# East Asian ideograph + 0x276173: (0x9b47, 0),# East Asian ideograph + 0x3f3573: (0x8b3c, 0),# East Asian ideograph + 0x226174: (0x7740, 0),# East Asian ideograph + 0x6f4e41: (0xb610, 0),# Korean hangul + 0x4b4c36: (0x7575, 0),# East Asian ideograph + 0x216175: (0x9b77, 0),# East Asian ideograph + 0x224b34: (0x6e53, 0),# East Asian ideograph + 0x216176: (0x9b6f, 0),# East Asian ideograph + 0x214c21: (0x752c, 0),# East Asian ideograph + 0x226177: (0x7731, 0),# East Asian ideograph + 0x214c22: (0x752b, 0),# East Asian ideograph + 0x6f4f69: (0xb9ce, 0),# Korean hangul + 0x276178: (0x9c9b, 0),# East Asian ideograph + 0x6f4b26: (0xafc7, 0),# Korean hangul + 0x276179: (0x9c9c, 0),# East Asian ideograph + 0x295269: (0x9a80, 0),# East Asian ideograph + 0x214c24: (0x7530, 0),# East Asian ideograph + 0x27617a: (0x9c94, 0),# East Asian ideograph + 0x2f3143: (0x89f5, 0),# Unrelated variant of EACC 23315E which maps to 89F5 + 0x213a6b: (0x5b8f, 0),# East Asian ideograph + 0x27617b: (0x9ca8, 0),# East Asian ideograph + 0x214c26: (0x7531, 0),# East Asian ideograph + 0x27617c: (0x9ca4, 0),# East Asian ideograph + 0x214c27: (0x7533, 0),# East Asian ideograph + 0x6f4f6a: (0xb9cf, 0),# Korean hangul + 0x275e55: (0x95f4, 0),# East Asian ideograph + 0x27617d: (0x9cb8, 0),# East Asian ideograph + 0x6f4b27: (0xafc8, 0),# Korean hangul + 0x29593b: (0x9c9f, 0),# East Asian ideograph + 0x27617e: (0x9cb3, 0),# East Asian ideograph + 0x214c29: (0x7538, 0),# East Asian ideograph + 0x215b60: (0x8fad, 0),# East Asian ideograph + 0x214c2a: (0x753d, 0),# East Asian ideograph + 0x294237: (0x949b, 0),# East Asian ideograph + 0x6f5c34: (0xd3b4, 0),# Korean hangul + 0x39553c: (0x5d0b, 0),# East Asian ideograph + 0x6f5360: (0xc228, 0),# Korean hangul + 0x6f4c2b: (0xb153, 0),# Korean hangul + 0x2d4c2c: (0x583a, 0),# East Asian ideograph + 0x6f4f6b: (0xb9d0, 0),# Korean hangul + 0x274c2d: (0x4ea9, 0),# East Asian ideograph + 0x214c2e: (0x755c, 0),# East Asian ideograph + 0x2d3661: (0x6199, 0),# East Asian ideograph + 0x6f4c2f: (0xb15c, 0),# Korean hangul + 0x214921: (0x6fa4, 0),# East Asian ideograph + 0x214922: (0x6fc1, 0),# East Asian ideograph + 0x214924: (0x6fc0, 0),# East Asian ideograph + 0x214925: (0x6fb3, 0),# East Asian ideograph + 0x214926: (0x6fdf, 0),# East Asian ideograph + 0x214927: (0x6fd8, 0),# East Asian ideograph + 0x214928: (0x6ff1, 0),# East Asian ideograph + 0x214929: (0x6fe0, 0),# East Asian ideograph + 0x21492a: (0x6fef, 0),# East Asian ideograph + 0x21492b: (0x6feb, 0),# East Asian ideograph (variant of 4B492B which maps to 6FEB) + 0x21492c: (0x6fe1, 0),# East Asian ideograph + 0x21492d: (0x6fe4, 0),# East Asian ideograph + 0x21492e: (0x6f80, 0),# East Asian ideograph + 0x22492f: (0x6d34, 0),# East Asian ideograph (variant of 34492F which maps to 6D34) + 0x234930: (0x9588, 0),# East Asian ideograph + 0x214931: (0x700b, 0),# East Asian ideograph + 0x214932: (0x7009, 0),# East Asian ideograph + 0x214933: (0x7006, 0),# East Asian ideograph + 0x214934: (0x6ffa, 0),# East Asian ideograph + 0x214935: (0x7011, 0),# East Asian ideograph + 0x214936: (0x6ffe, 0),# East Asian ideograph + 0x214937: (0x700f, 0),# East Asian ideograph + 0x234938: (0x959f, 0),# East Asian ideograph + 0x214939: (0x701a, 0),# East Asian ideograph + 0x23493a: (0x95a0, 0),# East Asian ideograph + 0x21493b: (0x701d, 0),# East Asian ideograph + 0x22493c: (0x6d65, 0),# East Asian ideograph + 0x21493d: (0x701f, 0),# East Asian ideograph + 0x22493e: (0x6d5e, 0),# East Asian ideograph + 0x21493f: (0x703e, 0),# East Asian ideograph + 0x214940: (0x704c, 0),# East Asian ideograph + 0x214941: (0x7051, 0),# East Asian ideograph + 0x214942: (0x7058, 0),# East Asian ideograph + 0x274943: (0x6e7e, 0),# East Asian ideograph + 0x214944: (0x7064, 0),# East Asian ideograph + 0x214945: (0x706b, 0),# East Asian ideograph + 0x214946: (0x7070, 0),# East Asian ideograph + 0x214947: (0x7076, 0),# East Asian ideograph + 0x214948: (0x707c, 0),# East Asian ideograph + 0x214949: (0x7078, 0),# East Asian ideograph + 0x21494a: (0x707d, 0),# East Asian ideograph + 0x21494b: (0x7095, 0),# East Asian ideograph + 0x21494c: (0x708e, 0),# East Asian ideograph + 0x23494d: (0x95b9, 0),# East Asian ideograph + 0x21494e: (0x7099, 0),# East Asian ideograph + 0x21494f: (0x708a, 0),# East Asian ideograph + 0x214950: (0x70ab, 0),# East Asian ideograph + 0x214951: (0x70ba, 0),# East Asian ideograph + 0x214952: (0x70ac, 0),# East Asian ideograph + 0x214953: (0x70b3, 0),# East Asian ideograph + 0x214954: (0x70af, 0),# East Asian ideograph + 0x214955: (0x70ad, 0),# East Asian ideograph + 0x214956: (0x70ae, 0),# East Asian ideograph + 0x214957: (0x70b8, 0),# East Asian ideograph + 0x214958: (0x70ca, 0),# East Asian ideograph + 0x214959: (0x70e4, 0),# East Asian ideograph + 0x21495a: (0x70d8, 0),# East Asian ideograph + 0x21495b: (0x70c8, 0),# East Asian ideograph + 0x21495c: (0x70d9, 0),# East Asian ideograph + 0x23495d: (0x95ce, 0),# East Asian ideograph + 0x21495e: (0x70f9, 0),# East Asian ideograph + 0x21495f: (0x7109, 0),# East Asian ideograph + 0x214960: (0x710a, 0),# East Asian ideograph + 0x214961: (0x70fd, 0),# East Asian ideograph + 0x214962: (0x7119, 0),# East Asian ideograph + 0x214963: (0x716e, 0),# East Asian ideograph + 0x214964: (0x711a, 0),# East Asian ideograph + 0x214965: (0x7136, 0),# East Asian ideograph + 0x214966: (0x7121, 0),# East Asian ideograph + 0x214967: (0x7130, 0),# East Asian ideograph + 0x214968: (0x7126, 0),# East Asian ideograph + 0x214969: (0x714e, 0),# East Asian ideograph + 0x21496a: (0x7149, 0),# East Asian ideograph + 0x21496b: (0x7159, 0),# East Asian ideograph + 0x21496c: (0x7164, 0),# East Asian ideograph + 0x21496d: (0x7169, 0),# East Asian ideograph + 0x21496e: (0x715c, 0),# East Asian ideograph + 0x21496f: (0x716c, 0),# East Asian ideograph + 0x214970: (0x7166, 0),# East Asian ideograph + 0x214971: (0x7167, 0),# East Asian ideograph + 0x214972: (0x715e, 0),# East Asian ideograph + 0x214973: (0x7165, 0),# East Asian ideograph + 0x214974: (0x714c, 0),# East Asian ideograph + 0x214975: (0x717d, 0),# East Asian ideograph + 0x234976: (0x95e7, 0),# East Asian ideograph + 0x214977: (0x7199, 0),# East Asian ideograph + 0x214978: (0x718a, 0),# East Asian ideograph + 0x214979: (0x7184, 0),# East Asian ideograph + 0x21497a: (0x719f, 0),# East Asian ideograph + 0x21497b: (0x71a8, 0),# East Asian ideograph + 0x21497c: (0x71ac, 0),# East Asian ideograph + 0x21497d: (0x71b1, 0),# East Asian ideograph + 0x21497e: (0x71d9, 0),# East Asian ideograph + 0x6f4c40: (0xb1dc, 0),# Korean hangul + 0x2d432e: (0x66ec, 0),# East Asian ideograph + 0x214c41: (0x7599, 0),# East Asian ideograph + 0x395e71: (0x5742, 0),# East Asian ideograph + 0x214c42: (0x759a, 0),# East Asian ideograph + 0x6f586e: (0xcb64, 0),# Korean hangul + 0x214c43: (0x75a4, 0),# East Asian ideograph + 0x6f5c39: (0xd3c5, 0),# Korean hangul + 0x224c44: (0x6f00, 0),# East Asian ideograph + 0x4b3b31: (0x5b9f, 0),# East Asian ideograph + 0x6f4c45: (0xb208, 0),# Korean hangul + 0x6f4f70: (0xb9dd, 0),# Korean hangul + 0x275e5b: (0x9601, 0),# East Asian ideograph + 0x6f4b2d: (0xafd8, 0),# Korean hangul + 0x294440: (0x9506, 0),# East Asian ideograph + 0x333475: (0x9628, 0),# East Asian ideograph + 0x234c47: (0x9723, 0),# East Asian ideograph + 0x27727e: (0x54d9, 0),# East Asian ideograph + 0x21386e: (0x58de, 0),# East Asian ideograph + 0x6f4c48: (0xb213, 0),# Korean hangul + 0x6f5c3a: (0xd3c8, 0),# Korean hangul + 0x214c49: (0x75b2, 0),# East Asian ideograph + 0x234e60: (0x97e1, 0),# East Asian ideograph + 0x214c4a: (0x75bd, 0),# East Asian ideograph + 0x6f4f71: (0xb9de, 0),# Korean hangul + 0x275e5c: (0x9600, 0),# East Asian ideograph + 0x6f4877: (0xac2d, 0),# Korean hangul + 0x214c4b: (0x75be, 0),# East Asian ideograph + 0x294441: (0x9507, 0),# East Asian ideograph + 0x333d54: (0x4efd, 0),# East Asian ideograph + 0x695c71: (0x6a78, 0),# East Asian ideograph + 0x276f69: (0x5459, 0),# East Asian ideograph + 0x6f5c3b: (0xd3c9, 0),# Korean hangul + 0x70603a: (0x55ea, 0),# East Asian ideograph + 0x69554e: (0x5b36, 0),# East Asian ideograph + 0x214c4e: (0x75d5, 0),# East Asian ideograph + 0x6f5852: (0xca5c, 0),# Korean hangul + 0x6f2460: (0x314a, 0),# Korean hangul + 0x6f4c4f: (0xb258, 0),# Korean hangul + 0x6f4f72: (0xb9e1, 0),# Korean hangul + 0x275e5d: (0x5408, 0),# East Asian ideograph + 0x214c50: (0x75b5, 0),# East Asian ideograph + 0x214c51: (0x75ca, 0),# East Asian ideograph (variant of 4B4C51 which maps to 75CA) + 0x2e3f2d: (0x69b2, 0),# East Asian ideograph + 0x2f2a73: (0x87ca, 0),# East Asian ideograph + 0x214c52: (0x75db, 0),# East Asian ideograph + 0x6f5c3c: (0xd3d0, 0),# Korean hangul + 0x285150: (0x70c3, 0),# East Asian ideograph + 0x213e66: (0x60b2, 0),# East Asian ideograph + 0x293336: (0x8be4, 0),# East Asian ideograph + 0x6f4c54: (0xb274, 0),# Korean hangul + 0x6f4f73: (0xb9e3, 0),# Korean hangul + 0x275e5e: (0x9605, 0),# East Asian ideograph + 0x2e4731: (0x6c73, 0),# East Asian ideograph + 0x6f4b30: (0xb000, 0),# Korean hangul + 0x214c56: (0x75d9, 0),# East Asian ideograph + 0x214c57: (0x75e2, 0),# East Asian ideograph + 0x6f5c3d: (0xd3ec, 0),# Korean hangul + 0x234c58: (0x9730, 0),# East Asian ideograph + 0x6f4c59: (0xb294, 0),# Korean hangul + 0x275e5f: (0x95fe, 0),# East Asian ideograph + 0x214c5a: (0x75f0, 0),# East Asian ideograph + 0x394444: (0x8988, 0),# East Asian ideograph + 0x214a21: (0x71be, 0),# East Asian ideograph + 0x214a22: (0x71c9, 0),# East Asian ideograph + 0x214a23: (0x71d0, 0),# East Asian ideograph + 0x214a24: (0x71c8, 0),# East Asian ideograph + 0x214a25: (0x71dc, 0),# East Asian ideograph + 0x214a26: (0x71d2, 0),# East Asian ideograph + 0x214a27: (0x71b9, 0),# East Asian ideograph + 0x214a28: (0x71d5, 0),# East Asian ideograph + 0x214a29: (0x71ce, 0),# East Asian ideograph + 0x214a2a: (0x71c3, 0),# East Asian ideograph + 0x214a2b: (0x71c4, 0),# East Asian ideograph + 0x214a2c: (0x71ee, 0),# East Asian ideograph + 0x214a2d: (0x71e7, 0),# East Asian ideograph + 0x214a2e: (0x71df, 0),# East Asian ideograph + 0x214a2f: (0x71e5, 0),# East Asian ideograph + 0x214a30: (0x71ed, 0),# East Asian ideograph + 0x214a31: (0x71e6, 0),# East Asian ideograph + 0x234a32: (0x963c, 0),# East Asian ideograph + 0x214a33: (0x71f4, 0),# East Asian ideograph + 0x214a34: (0x71fb, 0),# East Asian ideograph + 0x224a35: (0x6ddd, 0),# East Asian ideograph + 0x274a36: (0x70c1, 0),# East Asian ideograph + 0x214a37: (0x7210, 0),# East Asian ideograph + 0x214a38: (0x721b, 0),# East Asian ideograph + 0x224a39: (0x6ddb, 0),# East Asian ideograph + 0x214a3a: (0x722a, 0),# East Asian ideograph + 0x214a3b: (0x722d, 0),# East Asian ideograph + 0x214a3c: (0x722c, 0),# East Asian ideograph + 0x214a3d: (0x7230, 0),# East Asian ideograph + 0x214a3e: (0x7235, 0),# East Asian ideograph (variant of 4B4A3E which maps to 7235) + 0x214a3f: (0x7236, 0),# East Asian ideograph + 0x214a40: (0x7238, 0),# East Asian ideograph + 0x214a41: (0x7239, 0),# East Asian ideograph + 0x214a42: (0x723a, 0),# East Asian ideograph + 0x214a43: (0x723b, 0),# East Asian ideograph + 0x214a44: (0x723d, 0),# East Asian ideograph + 0x214a45: (0x723e, 0),# East Asian ideograph + 0x224a46: (0x6df0, 0),# East Asian ideograph + 0x214a47: (0x7247, 0),# East Asian ideograph + 0x214a48: (0x7248, 0),# East Asian ideograph + 0x214a49: (0x724c, 0),# East Asian ideograph + 0x214a4a: (0x7252, 0),# East Asian ideograph + 0x214a4b: (0x7256, 0),# East Asian ideograph + 0x214a4c: (0x7258, 0),# East Asian ideograph + 0x214a4d: (0x7259, 0),# East Asian ideograph + 0x214a4e: (0x725b, 0),# East Asian ideograph + 0x214a4f: (0x725f, 0),# East Asian ideograph + 0x214a50: (0x725d, 0),# East Asian ideograph + 0x214a51: (0x7262, 0),# East Asian ideograph + 0x214a52: (0x7261, 0),# East Asian ideograph + 0x214a53: (0x7260, 0),# East Asian ideograph + 0x214a54: (0x7267, 0),# East Asian ideograph + 0x214a55: (0x7269, 0),# East Asian ideograph + 0x214a56: (0x726f, 0),# East Asian ideograph + 0x214a57: (0x7272, 0),# East Asian ideograph + 0x214a58: (0x7274, 0),# East Asian ideograph + 0x214a59: (0x7279, 0),# East Asian ideograph + 0x214a5a: (0x727d, 0),# East Asian ideograph + 0x214a5b: (0x7281, 0),# East Asian ideograph + 0x214a5c: (0x7280, 0),# East Asian ideograph + 0x214a5d: (0x7284, 0),# East Asian ideograph + 0x274a5e: (0x8366, 0),# East Asian ideograph + 0x214a5f: (0x7292, 0),# East Asian ideograph + 0x224a60: (0x6e8a, 0),# East Asian ideograph + 0x214a61: (0x72a2, 0),# East Asian ideograph + 0x274a62: (0x727a, 0),# East Asian ideograph + 0x214a63: (0x72ac, 0),# East Asian ideograph + 0x214a64: (0x72af, 0),# East Asian ideograph + 0x214a65: (0x72c4, 0),# East Asian ideograph + 0x214a66: (0x72c2, 0),# East Asian ideograph + 0x214a67: (0x72d9, 0),# East Asian ideograph + 0x274a68: (0x72b6, 0),# East Asian ideograph + 0x214a69: (0x72ce, 0),# East Asian ideograph + 0x214a6a: (0x72d7, 0),# East Asian ideograph + 0x214a6b: (0x72d0, 0),# East Asian ideograph + 0x214a6c: (0x72e1, 0),# East Asian ideograph + 0x214a6d: (0x72e9, 0),# East Asian ideograph + 0x214a6e: (0x72e0, 0),# East Asian ideograph + 0x214a6f: (0x72fc, 0),# East Asian ideograph + 0x274a70: (0x72ed, 0),# East Asian ideograph + 0x224a71: (0x6e73, 0),# East Asian ideograph + 0x214a72: (0x72fd, 0),# East Asian ideograph + 0x214a73: (0x72f7, 0),# East Asian ideograph + 0x214a74: (0x731c, 0),# East Asian ideograph + 0x214a75: (0x731b, 0),# East Asian ideograph + 0x214a76: (0x7313, 0),# East Asian ideograph + 0x214a77: (0x7316, 0),# East Asian ideograph + 0x214a78: (0x7319, 0),# East Asian ideograph + 0x214a79: (0x7336, 0),# East Asian ideograph + 0x214a7a: (0x7337, 0),# East Asian ideograph + 0x214a7b: (0x7329, 0),# East Asian ideograph + 0x214a7c: (0x7325, 0),# East Asian ideograph + 0x214a7d: (0x7334, 0),# East Asian ideograph + 0x214a7e: (0x7344, 0),# East Asian ideograph + 0x2d4c3c: (0x53e0, 0),# East Asian ideograph + 0x214c6b: (0x7634, 0),# East Asian ideograph + 0x6f5c41: (0xd3fc, 0),# Korean hangul + 0x213d4a: (0x5f46, 0),# East Asian ideograph + 0x214c6c: (0x7638, 0),# East Asian ideograph + 0x214c6d: (0x7646, 0),# East Asian ideograph + 0x6f4f78: (0xb9f4, 0),# Korean hangul + 0x275e63: (0x9611, 0),# East Asian ideograph + 0x234c6e: (0x9749, 0),# East Asian ideograph + 0x233d5b: (0x9046, 0),# East Asian ideograph + 0x6f4c6f: (0xb2e6, 0),# Korean hangul + 0x6f4c70: (0xb2e8, 0),# Korean hangul + 0x214c71: (0x7658, 0),# East Asian ideograph + 0x4d477b: (0x943e, 0),# East Asian ideograph + 0x35344d: (0x8b5b, 0),# East Asian ideograph + 0x6f4f79: (0xb9f5, 0),# Korean hangul + 0x275e64: (0x95f1, 0),# East Asian ideograph + 0x274c73: (0x75d2, 0),# East Asian ideograph + 0x21355e: (0x542e, 0),# East Asian ideograph + 0x275a21: (0x8d45, 0),# East Asian ideograph + 0x6f4c74: (0xb2ee, 0),# Korean hangul + 0x234147: (0x91ad, 0),# East Asian ideograph + 0x217d7c: (0x5b56, 0),# East Asian ideograph + 0x214c75: (0x7669, 0),# East Asian ideograph + 0x6f5c43: (0xd3ff, 0),# Korean hangul + 0x234c76: (0x975a, 0),# East Asian ideograph + 0x233721: (0x8cf7, 0),# East Asian ideograph + 0x287161: (0x7efb, 0),# East Asian ideograph + 0x3a787d: (0x80fc, 0),# East Asian ideograph + 0x214c77: (0x766c, 0),# East Asian ideograph + 0x273722: (0x545b, 0),# East Asian ideograph + 0x275e65: (0x677f, 0),# East Asian ideograph + 0x214c78: (0x7671, 0),# East Asian ideograph + 0x213723: (0x55e1, 0),# East Asian ideograph + 0x21754e: (0x579d, 0),# East Asian ideograph + 0x214c79: (0x7672, 0),# East Asian ideograph (variant of 4B4C79 which maps to 7672) + 0x694c7a: (0x9453, 0),# East Asian ideograph + 0x213725: (0x561b, 0),# East Asian ideograph + 0x6f5c44: (0xd401, 0),# Korean hangul + 0x214c7b: (0x767c, 0),# East Asian ideograph + 0x233726: (0x8cfe, 0),# East Asian ideograph + 0x6f4c7c: (0xb2ff, 0),# Korean hangul + 0x223727: (0x65ae, 0),# East Asian ideograph + 0x2e4739: (0x6c67, 0),# East Asian ideograph (variant of 224739 which maps to 6C67) + 0x214c7d: (0x767d, 0),# East Asian ideograph + 0x6f7728: (0xae07, 0),# Korean hangul + 0x215336: (0x80b4, 0),# East Asian ideograph + 0x2d4c7e: (0x4f70, 0),# East Asian ideograph + 0x217729: (0x582d, 0),# East Asian ideograph + 0x2d5447: (0x824a, 0),# East Asian ideograph + 0x21372a: (0x561f, 0),# East Asian ideograph + 0x6f5c45: (0xd440, 0),# Korean hangul + 0x2d3a47: (0x5acb, 0),# East Asian ideograph + 0x4b4358: (0x66fd, 0),# East Asian ideograph + 0x23372b: (0x8d07, 0),# East Asian ideograph + 0x217850: (0x58d6, 0),# East Asian ideograph + 0x334a28: (0x91bc, 0),# East Asian ideograph + 0x27372c: (0x53f9, 0),# East Asian ideograph + 0x6f593c: (0xcca0, 0),# Korean hangul + 0x275e67: (0x95ef, 0),# East Asian ideograph + 0x6f4b39: (0xb044, 0),# Korean hangul + 0x275a24: (0x8d3e, 0),# East Asian ideograph + 0x27372e: (0x5455, 0),# East Asian ideograph + 0x21372f: (0x560e, 0),# East Asian ideograph + 0x6f5c46: (0xd444, 0),# Korean hangul + 0x224a6d: (0x6e63, 0),# East Asian ideograph + 0x293340: (0x8c02, 0),# East Asian ideograph + 0x214b21: (0x733f, 0),# East Asian ideograph + 0x224b22: (0x6e28, 0),# East Asian ideograph + 0x274b23: (0x72ee, 0),# East Asian ideograph + 0x214b24: (0x7350, 0),# East Asian ideograph + 0x6f4b25: (0xafc0, 0),# Korean hangul + 0x214b26: (0x7357, 0),# East Asian ideograph + 0x274b27: (0x72ec, 0),# East Asian ideograph + 0x224b28: (0x6e5e, 0),# East Asian ideograph + 0x274b29: (0x83b7, 0),# East Asian ideograph + 0x274b2a: (0x72b7, 0),# East Asian ideograph + 0x274b2b: (0x517d, 0),# East Asian ideograph + 0x224b2c: (0x6e84, 0),# East Asian ideograph + 0x223732: (0x65c3, 0),# East Asian ideograph + 0x224b2e: (0x6e2e, 0),# East Asian ideograph + 0x234b2f: (0x96a4, 0),# East Asian ideograph + 0x214b30: (0x7384, 0),# East Asian ideograph + 0x214b31: (0x7387, 0),# East Asian ideograph + 0x214b32: (0x7389, 0),# East Asian ideograph + 0x223733: (0x65c4, 0),# East Asian ideograph + 0x214b34: (0x7396, 0),# East Asian ideograph + 0x214b35: (0x739f, 0),# East Asian ideograph + 0x214b36: (0x73a8, 0),# East Asian ideograph + 0x214b37: (0x73a9, 0),# East Asian ideograph + 0x214b38: (0x73ab, 0),# East Asian ideograph + 0x214b39: (0x73bb, 0),# East Asian ideograph + 0x214b3a: (0x73ca, 0),# East Asian ideograph + 0x214b3b: (0x73b7, 0),# East Asian ideograph + 0x214b3c: (0x73c0, 0),# East Asian ideograph + 0x6f4b3d: (0xb04c, 0),# Korean hangul + 0x214b3e: (0x73b2, 0),# East Asian ideograph + 0x214b3f: (0x73cd, 0),# East Asian ideograph + 0x224b40: (0x6e2a, 0),# East Asian ideograph + 0x224b41: (0x6e4c, 0),# East Asian ideograph + 0x224b42: (0x6e22, 0),# East Asian ideograph + 0x224b43: (0x6ece, 0),# East Asian ideograph + 0x214b44: (0x7409, 0),# East Asian ideograph + 0x224b45: (0x6e9b, 0),# East Asian ideograph + 0x224b46: (0x6e9f, 0),# East Asian ideograph + 0x214b47: (0x73fe, 0),# East Asian ideograph + 0x224b48: (0x6ec8, 0),# East Asian ideograph + 0x224b49: (0x6ed8, 0),# East Asian ideograph + 0x224b4a: (0x6e8f, 0),# East Asian ideograph + 0x214b4b: (0x7435, 0),# East Asian ideograph + 0x214b4c: (0x7436, 0),# East Asian ideograph + 0x224b4d: (0x6e93, 0),# East Asian ideograph + 0x214b4e: (0x742a, 0),# East Asian ideograph + 0x224b4f: (0x6ea0, 0),# East Asian ideograph + 0x214b50: (0x7422, 0),# East Asian ideograph + 0x224b51: (0x6eb1, 0),# East Asian ideograph + 0x234b52: (0x96ce, 0),# East Asian ideograph + 0x214b53: (0x7455, 0),# East Asian ideograph + 0x214b54: (0x745f, 0),# East Asian ideograph + 0x214b55: (0x745a, 0),# East Asian ideograph + 0x214b56: (0x7441, 0),# East Asian ideograph + 0x214b57: (0x743f, 0),# East Asian ideograph + 0x214b58: (0x745b, 0),# East Asian ideograph + 0x224b59: (0x6e92, 0),# East Asian ideograph + 0x224b5a: (0x6ea7, 0),# East Asian ideograph + 0x214b5b: (0x7459, 0),# East Asian ideograph + 0x214b5c: (0x7483, 0),# East Asian ideograph + 0x214b5d: (0x7469, 0),# East Asian ideograph + 0x274b5e: (0x739b, 0),# East Asian ideograph + 0x214b5f: (0x7463, 0),# East Asian ideograph + 0x214b60: (0x7464, 0),# East Asian ideograph + 0x214b61: (0x7470, 0),# East Asian ideograph + 0x214b62: (0x748b, 0),# East Asian ideograph + 0x214b63: (0x749c, 0),# East Asian ideograph (variant of 4B4B63 which maps to 749C) + 0x214b64: (0x74a3, 0),# East Asian ideograph + 0x214b65: (0x74a7, 0),# East Asian ideograph + 0x214b66: (0x74a9, 0),# East Asian ideograph + 0x214b67: (0x74b0, 0),# East Asian ideograph + 0x214b68: (0x74a6, 0),# East Asian ideograph + 0x214b69: (0x74bd, 0),# East Asian ideograph + 0x224b6a: (0x6ec9, 0),# East Asian ideograph + 0x274b6b: (0x73d1, 0),# East Asian ideograph + 0x224b6c: (0x6eb3, 0),# East Asian ideograph + 0x224b6d: (0x6eb7, 0),# East Asian ideograph + 0x214b6e: (0x74e2, 0),# East Asian ideograph + 0x214b6f: (0x74e3, 0),# East Asian ideograph + 0x214b70: (0x74e6, 0),# East Asian ideograph + 0x234b71: (0x96e9, 0),# East Asian ideograph + 0x214b72: (0x74f7, 0),# East Asian ideograph + 0x214b73: (0x7504, 0),# East Asian ideograph + 0x234b74: (0x96f1, 0),# East Asian ideograph + 0x214b75: (0x7515, 0),# East Asian ideograph + 0x234b76: (0x96f0, 0),# East Asian ideograph + 0x214b77: (0x751a, 0),# East Asian ideograph + 0x234b78: (0x96fa, 0),# East Asian ideograph + 0x224b79: (0x6ecf, 0),# East Asian ideograph + 0x214b7a: (0x7522, 0),# East Asian ideograph + 0x214b7b: (0x7526, 0),# East Asian ideograph + 0x224b7c: (0x6eca, 0),# East Asian ideograph + 0x224b7d: (0x6ed5, 0),# East Asian ideograph + 0x214b7e: (0x7529, 0),# East Asian ideograph + 0x273740: (0x53fd, 0),# East Asian ideograph + 0x6f526b: (0xc0c0, 0),# Korean hangul + 0x294c76: (0x9753, 0),# East Asian ideograph + 0x213565: (0x542b, 0),# East Asian ideograph + 0x277742: (0x57d8, 0),# East Asian ideograph + 0x293344: (0x8c19, 0),# East Asian ideograph + 0x273744: (0x5428, 0),# East Asian ideograph + 0x27624f: (0x9e3e, 0),# East Asian ideograph + 0x223745: (0x65dc, 0),# East Asian ideograph + 0x6f593d: (0xcca8, 0),# Korean hangul + 0x6f4b3e: (0xb053, 0),# Korean hangul + 0x213746: (0x5679, 0),# East Asian ideograph + 0x223747: (0x65dd, 0),# East Asian ideograph + 0x223748: (0x65df, 0),# East Asian ideograph + 0x293345: (0x8be8, 0),# East Asian ideograph + 0x217749: (0x583d, 0),# East Asian ideograph + 0x4b3b43: (0x5bfe, 0),# East Asian ideograph + 0x276175: (0x9c7f, 0),# East Asian ideograph + 0x21374a: (0x5671, 0),# East Asian ideograph + 0x6f5d70: (0xd760, 0),# Korean hangul + 0x6f4b3f: (0xb054, 0),# Korean hangul + 0x21374b: (0x566f, 0),# East Asian ideograph + 0x6f5863: (0xcb14, 0),# Korean hangul + 0x21374c: (0x5662, 0),# East Asian ideograph (variant of 4B374C which maps to 5662) + 0x282f47: (0x620b, 0),# East Asian ideograph + 0x22374e: (0x65e4, 0),# East Asian ideograph + 0x6f543a: (0xc314, 0),# Korean hangul + 0x6f4b40: (0xb055, 0),# Korean hangul + 0x692525: (0x30a5, 0),# Katakana letter small U + 0x4b4c51: (0x75ca, 0),# East Asian ideograph + 0x273751: (0x5413, 0),# East Asian ideograph + 0x213752: (0x5690, 0),# East Asian ideograph + 0x6f5c4d: (0xd488, 0),# Korean hangul + 0x70604c: (0x55f5, 0),# East Asian ideograph + 0x224a74: (0x6e4f, 0),# East Asian ideograph + 0x334e73: (0x79a5, 0),# East Asian ideograph + 0x234a30: (0x963d, 0),# East Asian ideograph + 0x273754: (0x565c, 0),# East Asian ideograph + 0x2d4343: (0x6636, 0),# East Asian ideograph + 0x2d4768: (0x6d45, 0),# East Asian ideograph (variant of 274768 which maps to 6D45) + 0x223755: (0x65f0, 0),# East Asian ideograph + 0x213756: (0x56a8, 0),# East Asian ideograph + 0x4b375a: (0x53b3, 0),# East Asian ideograph + 0x213757: (0x56b0, 0),# East Asian ideograph + 0x2d3758: (0x54bd, 0),# East Asian ideograph + 0x294162: (0x9486, 0),# East Asian ideograph + 0x212a3b: (0xe8e8, 0),# EACC component character + 0x284056: (0x6920, 0),# East Asian ideograph + 0x21375a: (0x56b4, 0),# East Asian ideograph + 0x6f592d: (0xcc44, 0),# Korean hangul + 0x224c21: (0x6ec3, 0),# East Asian ideograph + 0x234c22: (0x96ff, 0),# East Asian ideograph + 0x214c23: (0x752d, 0),# East Asian ideograph + 0x224c24: (0x6eb4, 0),# East Asian ideograph + 0x214c25: (0x7532, 0),# East Asian ideograph + 0x224c26: (0x6eb2, 0),# East Asian ideograph + 0x234c27: (0x9702, 0),# East Asian ideograph + 0x214c28: (0x7537, 0),# East Asian ideograph + 0x224c29: (0x6eb5, 0),# East Asian ideograph + 0x234c2a: (0x9705, 0),# East Asian ideograph + 0x214c2b: (0x754f, 0),# East Asian ideograph + 0x214c2c: (0x754c, 0),# East Asian ideograph + 0x214c2d: (0x755d, 0),# East Asian ideograph + 0x224c2e: (0x6ef8, 0),# East Asian ideograph + 0x214c2f: (0x7554, 0),# East Asian ideograph + 0x224c30: (0x6f37, 0),# East Asian ideograph + 0x214c31: (0x7559, 0),# East Asian ideograph + 0x214c32: (0x7566, 0),# East Asian ideograph + 0x214c33: (0x7562, 0),# East Asian ideograph + 0x224c34: (0x6efd, 0),# East Asian ideograph + 0x224c35: (0x6f09, 0),# East Asian ideograph + 0x214c36: (0x756b, 0),# East Asian ideograph + 0x214c37: (0x756a, 0),# East Asian ideograph + 0x214c38: (0x7578, 0),# East Asian ideograph + 0x214c39: (0x7576, 0),# East Asian ideograph + 0x214c3a: (0x7586, 0),# East Asian ideograph + 0x214c3b: (0x7587, 0),# East Asian ideograph + 0x214c3c: (0x758a, 0),# East Asian ideograph + 0x224c3d: (0x6f63, 0),# East Asian ideograph + 0x224c3e: (0x6f12, 0),# East Asian ideograph + 0x214c3f: (0x7591, 0),# East Asian ideograph + 0x214c40: (0x759d, 0),# East Asian ideograph + 0x224c41: (0x6f1a, 0),# East Asian ideograph + 0x224c42: (0x6ef6, 0),# East Asian ideograph + 0x224c43: (0x6f19, 0),# East Asian ideograph + 0x214c44: (0x75ab, 0),# East Asian ideograph + 0x214c45: (0x75a5, 0),# East Asian ideograph + 0x214c46: (0x75c7, 0),# East Asian ideograph + 0x214c47: (0x75c5, 0),# East Asian ideograph + 0x214c48: (0x75b3, 0),# East Asian ideograph + 0x234c49: (0x9722, 0),# East Asian ideograph + 0x234c4a: (0x9724, 0),# East Asian ideograph + 0x224c4b: (0x6f24, 0),# East Asian ideograph + 0x214c4c: (0x75bc, 0),# East Asian ideograph + 0x214c4d: (0x75b9, 0),# East Asian ideograph + 0x234c4e: (0x9728, 0),# East Asian ideograph + 0x214c4f: (0x75d4, 0),# East Asian ideograph + 0x234c50: (0x9726, 0),# East Asian ideograph + 0x224c51: (0x6f18, 0),# East Asian ideograph + 0x234c52: (0x9731, 0),# East Asian ideograph + 0x214c53: (0x75e3, 0),# East Asian ideograph + 0x214c54: (0x75d8, 0),# East Asian ideograph + 0x214c55: (0x75de, 0),# East Asian ideograph + 0x274c56: (0x75c9, 0),# East Asian ideograph + 0x224c57: (0x6f1f, 0),# East Asian ideograph + 0x214c58: (0x7601, 0),# East Asian ideograph + 0x214c59: (0x7600, 0),# East Asian ideograph + 0x224c5a: (0x6f0a, 0),# East Asian ideograph + 0x214c5b: (0x75f2, 0),# East Asian ideograph + 0x234c5c: (0x9736, 0),# East Asian ideograph + 0x214c5d: (0x75f4, 0),# East Asian ideograph + 0x214c5e: (0x75ff, 0),# East Asian ideograph + 0x214c5f: (0x75fa, 0),# East Asian ideograph + 0x224c60: (0x6ef9, 0),# East Asian ideograph + 0x224c61: (0x6eee, 0),# East Asian ideograph + 0x224c62: (0x6f41, 0),# East Asian ideograph + 0x214c63: (0x760b, 0),# East Asian ideograph + 0x224c64: (0x6f95, 0),# East Asian ideograph + 0x214c65: (0x7620, 0),# East Asian ideograph + 0x214c66: (0x7629, 0),# East Asian ideograph + 0x214c67: (0x761f, 0),# East Asian ideograph + 0x214c68: (0x7624, 0),# East Asian ideograph + 0x214c69: (0x7626, 0),# East Asian ideograph + 0x214c6a: (0x7621, 0),# East Asian ideograph + 0x224c6b: (0x6f49, 0),# East Asian ideograph + 0x234c6c: (0x9746, 0),# East Asian ideograph + 0x224c6d: (0x6f30, 0),# East Asian ideograph + 0x214c6e: (0x7642, 0),# East Asian ideograph + 0x214c6f: (0x764c, 0),# East Asian ideograph + 0x214c70: (0x7656, 0),# East Asian ideograph + 0x274c71: (0x75a0, 0),# East Asian ideograph + 0x6f4c72: (0xb2ec, 0),# Korean hangul + 0x214c73: (0x7662, 0),# East Asian ideograph + 0x214c74: (0x7665, 0),# East Asian ideograph + 0x234c75: (0x9758, 0),# East Asian ideograph + 0x214c76: (0x766e, 0),# East Asian ideograph + 0x224c77: (0x6eeb, 0),# East Asian ideograph + 0x224c78: (0x6f08, 0),# East Asian ideograph + 0x224c79: (0x6f0e, 0),# East Asian ideograph + 0x214c7a: (0x7678, 0),# East Asian ideograph + 0x224c7b: (0x6f35, 0),# East Asian ideograph + 0x214c7c: (0x767b, 0),# East Asian ideograph + 0x234c7d: (0x9764, 0),# East Asian ideograph + 0x214c7e: (0x767e, 0),# East Asian ideograph + 0x21376b: (0x56f1, 0),# East Asian ideograph + 0x6f5c52: (0xd4e8, 0),# Korean hangul + 0x21376d: (0x5703, 0),# East Asian ideograph + 0x2d4348: (0x6681, 0),# East Asian ideograph + 0x2e4747: (0x6d64, 0),# East Asian ideograph + 0x3f424f: (0x542f, 0),# East Asian ideograph (variant of 27424F which maps to 542F) + 0x6f4b46: (0xb080, 0),# Korean hangul + 0x21376e: (0x5708, 0),# East Asian ideograph + 0x212a2f: (0xe8dd, 0),# EACC component character + 0x27376f: (0x56ef, 0),# East Asian ideograph + 0x273770: (0x56f4, 0),# East Asian ideograph + 0x6f5c53: (0xd504, 0),# Korean hangul + 0x27632b: (0x9f99, 0),# East Asian ideograph + 0x213771: (0x5712, 0),# East Asian ideograph + 0x294163: (0x948c, 0),# East Asian ideograph + 0x224637: (0x6bfa, 0),# East Asian ideograph + 0x213772: (0x5713, 0),# East Asian ideograph + 0x2d4349: (0x66a6, 0),# East Asian ideograph + 0x6f526d: (0xc0c5, 0),# Korean hangul + 0x213430: (0x52c9, 0),# East Asian ideograph + 0x6f4b47: (0xb084, 0),# Korean hangul + 0x275a32: (0x8d4f, 0),# East Asian ideograph + 0x216f21: (0x544f, 0),# East Asian ideograph + 0x213774: (0x5716, 0),# East Asian ideograph + 0x233775: (0x8d8d, 0),# East Asian ideograph + 0x6f4e2a: (0xb554, 0),# Korean hangul + 0x29334e: (0x8c0c, 0),# East Asian ideograph + 0x276221: (0x9cc3, 0),# East Asian ideograph + 0x213777: (0x572d, 0),# East Asian ideograph + 0x216222: (0x9c0d, 0),# East Asian ideograph + 0x6f4b48: (0xb08c, 0),# Korean hangul + 0x29445b: (0x9516, 0),# East Asian ideograph + 0x276223: (0x9cab, 0),# East Asian ideograph + 0x276224: (0x9ccd, 0),# East Asian ideograph + 0x694c5d: (0x6762, 0),# East Asian ideograph + 0x222225: (0x5bef, 0),# East Asian ideograph + 0x706054: (0x5623, 0),# East Asian ideograph + 0x395568: (0x83dd, 0),# East Asian ideograph + 0x234e7b: (0x980f, 0),# East Asian ideograph + 0x216226: (0x9c31, 0),# East Asian ideograph + 0x276177: (0x9c8d, 0),# East Asian ideograph + 0x21377c: (0x5751, 0),# East Asian ideograph + 0x276227: (0x9cd4, 0),# East Asian ideograph + 0x6f4b49: (0xb08d, 0),# Korean hangul + 0x21377d: (0x574a, 0),# East Asian ideograph + 0x276228: (0x9cd7, 0),# East Asian ideograph + 0x276229: (0x9cdd, 0),# East Asian ideograph + 0x6f5c56: (0xd50c, 0),# Korean hangul + 0x27622a: (0x9cde, 0),# East Asian ideograph + 0x284d27: (0x6d9d, 0),# East Asian ideograph + 0x27622b: (0x9cdc, 0),# East Asian ideograph + 0x27622c: (0x9cd6, 0),# East Asian ideograph + 0x28405e: (0x67fd, 0),# East Asian ideograph + 0x21622d: (0x9c77, 0),# East Asian ideograph + 0x4b4c5b: (0x75f3, 0),# East Asian ideograph + 0x27622e: (0x9c88, 0),# East Asian ideograph + 0x2d5238: (0x898a, 0),# East Asian ideograph + 0x2e363f: (0x52c5, 0),# East Asian ideograph + 0x6f5c57: (0xd514, 0),# Korean hangul + 0x27622f: (0x9e1f, 0),# East Asian ideograph + 0x6f5959: (0xcda7, 0),# Korean hangul + 0x214d21: (0x7682, 0),# East Asian ideograph + 0x214d22: (0x7684, 0),# East Asian ideograph + 0x214d23: (0x7687, 0),# East Asian ideograph + 0x214d24: (0x7686, 0),# East Asian ideograph + 0x234d25: (0x9767, 0),# East Asian ideograph + 0x214d26: (0x768e, 0),# East Asian ideograph + 0x214d27: (0x7696, 0),# East Asian ideograph + 0x214d28: (0x7693, 0),# East Asian ideograph + 0x214d29: (0x769a, 0),# East Asian ideograph + 0x214d2a: (0x76ae, 0),# East Asian ideograph + 0x214d2b: (0x76b0, 0),# East Asian ideograph + 0x214d2c: (0x76b4, 0),# East Asian ideograph + 0x274d2d: (0x76b1, 0),# East Asian ideograph + 0x214d2e: (0x76bf, 0),# East Asian ideograph + 0x214d2f: (0x76c2, 0),# East Asian ideograph + 0x224d30: (0x6f60, 0),# East Asian ideograph + 0x234d31: (0x9777, 0),# East Asian ideograph + 0x214d32: (0x76c6, 0),# East Asian ideograph + 0x214d33: (0x76ca, 0),# East Asian ideograph + 0x214d34: (0x76cd, 0),# East Asian ideograph + 0x214d35: (0x76ce, 0),# East Asian ideograph + 0x214d36: (0x76d4, 0),# East Asian ideograph + 0x214d37: (0x76d2, 0),# East Asian ideograph + 0x214d38: (0x76dc, 0),# East Asian ideograph + 0x214d39: (0x76db, 0),# East Asian ideograph + 0x234d3a: (0x9780, 0),# East Asian ideograph + 0x214d3b: (0x76df, 0),# East Asian ideograph + 0x234d3c: (0x9781, 0),# East Asian ideograph + 0x214d3d: (0x76e3, 0),# East Asian ideograph + 0x274d3e: (0x76d8, 0),# East Asian ideograph + 0x274d3f: (0x5362, 0),# East Asian ideograph + 0x214d40: (0x76e5, 0),# East Asian ideograph + 0x214d41: (0x76ea, 0),# East Asian ideograph + 0x214d42: (0x76ee, 0),# East Asian ideograph + 0x214d43: (0x76ef, 0),# East Asian ideograph + 0x214d44: (0x76f2, 0),# East Asian ideograph + 0x214d45: (0x76f4, 0),# East Asian ideograph + 0x214d46: (0x7709, 0),# East Asian ideograph + 0x214d47: (0x76f9, 0),# East Asian ideograph + 0x214d48: (0x76f8, 0),# East Asian ideograph + 0x214d49: (0x7701, 0),# East Asian ideograph + 0x214d4a: (0x770b, 0),# East Asian ideograph + 0x214d4b: (0x76fc, 0),# East Asian ideograph + 0x214d4c: (0x76fe, 0),# East Asian ideograph + 0x214d4d: (0x7729, 0),# East Asian ideograph + 0x214d4e: (0x7720, 0),# East Asian ideograph + 0x214d4f: (0x771e, 0),# East Asian ideograph + 0x214d50: (0x7728, 0),# East Asian ideograph + 0x214d51: (0x7737, 0),# East Asian ideograph + 0x214d52: (0x773c, 0),# East Asian ideograph + 0x214d53: (0x7736, 0),# East Asian ideograph + 0x214d54: (0x7738, 0),# East Asian ideograph + 0x214d55: (0x773a, 0),# East Asian ideograph + 0x274d56: (0x4f17, 0),# East Asian ideograph + 0x274d57: (0x56f0, 0),# East Asian ideograph + 0x214d58: (0x776b, 0),# East Asian ideograph + 0x214d59: (0x775b, 0),# East Asian ideograph + 0x214d5a: (0x776a, 0),# East Asian ideograph + 0x214d5b: (0x7766, 0),# East Asian ideograph + 0x214d5c: (0x7779, 0),# East Asian ideograph + 0x274d5d: (0x7750, 0),# East Asian ideograph + 0x214d5e: (0x7763, 0),# East Asian ideograph + 0x214d5f: (0x775c, 0),# East Asian ideograph + 0x214d60: (0x776c, 0),# East Asian ideograph + 0x214d61: (0x7768, 0),# East Asian ideograph + 0x214d62: (0x7765, 0),# East Asian ideograph + 0x214d63: (0x777d, 0),# East Asian ideograph + 0x214d64: (0x7771, 0),# East Asian ideograph + 0x214d65: (0x777f, 0),# East Asian ideograph + 0x214d66: (0x7784, 0),# East Asian ideograph + 0x214d67: (0x7761, 0),# East Asian ideograph + 0x214d68: (0x7787, 0),# East Asian ideograph + 0x214d69: (0x778e, 0),# East Asian ideograph + 0x214d6a: (0x778c, 0),# East Asian ideograph + 0x214d6b: (0x7791, 0),# East Asian ideograph + 0x214d6c: (0x779f, 0),# East Asian ideograph + 0x214d6d: (0x779e, 0),# East Asian ideograph + 0x214d6e: (0x77a0, 0),# East Asian ideograph + 0x214d6f: (0x77a5, 0),# East Asian ideograph + 0x214d70: (0x77b3, 0),# East Asian ideograph + 0x214d71: (0x77aa, 0),# East Asian ideograph + 0x214d72: (0x77b0, 0),# East Asian ideograph + 0x214d73: (0x77ad, 0),# East Asian ideograph + 0x214d74: (0x77ac, 0),# East Asian ideograph + 0x214d75: (0x77a7, 0),# East Asian ideograph + 0x214d76: (0x77bd, 0),# East Asian ideograph + 0x214d77: (0x77bf, 0),# East Asian ideograph + 0x214d78: (0x77bb, 0),# East Asian ideograph + 0x224d79: (0x6fa6, 0),# East Asian ideograph + 0x214d7a: (0x77d3, 0),# East Asian ideograph + 0x214d7b: (0x77d7, 0),# East Asian ideograph + 0x214d7c: (0x77da, 0),# East Asian ideograph + 0x214d7d: (0x77db, 0),# East Asian ideograph + 0x214d7e: (0x77dc, 0),# East Asian ideograph + 0x276240: (0x9e44, 0),# East Asian ideograph + 0x216241: (0x9d5d, 0),# East Asian ideograph + 0x233d74: (0x9062, 0),# East Asian ideograph + 0x216242: (0x9d89, 0),# East Asian ideograph + 0x293b6d: (0x8f8a, 0),# East Asian ideograph + 0x276243: (0x9e4a, 0),# East Asian ideograph + 0x6f4d6a: (0xb4f1, 0),# Korean hangul + 0x216244: (0x9d6a, 0),# East Asian ideograph + 0x216245: (0x9d6c, 0),# East Asian ideograph + 0x6f4b4f: (0xb098, 0),# Korean hangul + 0x276246: (0x9e64, 0),# East Asian ideograph + 0x333d75: (0x5fb3, 0),# East Asian ideograph + 0x276247: (0x83ba, 0),# East Asian ideograph + 0x6f5c5c: (0xd544, 0),# Korean hangul + 0x232248: (0x8453, 0),# East Asian ideograph + 0x276249: (0x9e67, 0),# East Asian ideograph + 0x27624a: (0x9e25, 0),# East Asian ideograph + 0x27624b: (0x9e36, 0),# East Asian ideograph + 0x27624c: (0x9e70, 0),# East Asian ideograph + 0x2e3645: (0x69e3, 0),# East Asian ideograph + 0x21624d: (0x9dfa, 0),# East Asian ideograph + 0x293357: (0x8c14, 0),# East Asian ideograph + 0x27624e: (0x9e66, 0),# East Asian ideograph + 0x21624f: (0x9e1e, 0),# East Asian ideograph + 0x4b4f4c: (0x7a4f, 0),# East Asian ideograph + 0x6f4b51: (0xb09a, 0),# Korean hangul + 0x276250: (0x54b8, 0),# East Asian ideograph + 0x294021: (0x90f8, 0),# East Asian ideograph + 0x235b4d: (0x9d7b, 0),# East Asian ideograph + 0x233934: (0x8dec, 0),# East Asian ideograph + 0x6f5c5e: (0xd54d, 0),# Korean hangul + 0x216252: (0x9e7c, 0),# East Asian ideograph + 0x344177: (0x8264, 0),# East Asian ideograph + 0x39526b: (0x7094, 0),# East Asian ideograph + 0x216256: (0x9e97, 0),# East Asian ideograph + 0x2d5461: (0x8306, 0),# East Asian ideograph + 0x6f5c5f: (0xd54f, 0),# Korean hangul + 0x274931: (0x6c88, 0),# East Asian ideograph + 0x293359: (0x8c11, 0),# East Asian ideograph + 0x4b5d70: (0x92ad, 0),# East Asian ideograph + 0x234a42: (0x9660, 0),# East Asian ideograph + 0x216259: (0x9e9d, 0),# East Asian ideograph + 0x6f4b53: (0xb09f, 0),# Korean hangul + 0x294466: (0x9515, 0),# East Asian ideograph + 0x214e21: (0x77e2, 0),# East Asian ideograph + 0x214e22: (0x77e3, 0),# East Asian ideograph + 0x214e23: (0x77e5, 0),# East Asian ideograph + 0x214e24: (0x77e9, 0),# East Asian ideograph + 0x214e25: (0x77ed, 0),# East Asian ideograph + 0x214e26: (0x77ee, 0),# East Asian ideograph + 0x214e27: (0x77ef, 0),# East Asian ideograph + 0x214e28: (0x77f3, 0),# East Asian ideograph + 0x214e29: (0x77fd, 0),# East Asian ideograph + 0x214e2a: (0x7802, 0),# East Asian ideograph + 0x214e2b: (0x780d, 0),# East Asian ideograph + 0x214e2c: (0x780c, 0),# East Asian ideograph + 0x234e2d: (0x97b8, 0),# East Asian ideograph + 0x214e2e: (0x7830, 0),# East Asian ideograph + 0x214e2f: (0x781d, 0),# East Asian ideograph + 0x214e30: (0x7834, 0),# East Asian ideograph + 0x214e31: (0x7838, 0),# East Asian ideograph + 0x214e32: (0x7837, 0),# East Asian ideograph + 0x214e33: (0x7827, 0),# East Asian ideograph + 0x214e34: (0x782d, 0),# East Asian ideograph + 0x214e35: (0x7825, 0),# East Asian ideograph + 0x214e36: (0x786b, 0),# East Asian ideograph + 0x214e37: (0x784f, 0),# East Asian ideograph + 0x234e38: (0x97c0, 0),# East Asian ideograph + 0x214e39: (0x786c, 0),# East Asian ideograph + 0x214e3a: (0x785d, 0),# East Asian ideograph + 0x214e3b: (0x786f, 0),# East Asian ideograph + 0x214e3c: (0x78b0, 0),# East Asian ideograph + 0x214e3d: (0x7897, 0),# East Asian ideograph + 0x214e3e: (0x788e, 0),# East Asian ideograph + 0x214e3f: (0x7898, 0),# East Asian ideograph + 0x214e40: (0x7889, 0),# East Asian ideograph + 0x214e41: (0x7891, 0),# East Asian ideograph + 0x214e42: (0x787c, 0),# East Asian ideograph + 0x214e43: (0x788c, 0),# East Asian ideograph + 0x214e44: (0x78a7, 0),# East Asian ideograph + 0x214e45: (0x78a9, 0),# East Asian ideograph + 0x214e46: (0x789f, 0),# East Asian ideograph + 0x214e47: (0x78b3, 0),# East Asian ideograph + 0x214e48: (0x78cb, 0),# East Asian ideograph + 0x214e49: (0x78ba, 0),# East Asian ideograph + 0x214e4a: (0x78c1, 0),# East Asian ideograph + 0x214e4b: (0x78c5, 0),# East Asian ideograph + 0x214e4c: (0x78bc, 0),# East Asian ideograph + 0x214e4d: (0x78d5, 0),# East Asian ideograph + 0x214e4e: (0x78be, 0),# East Asian ideograph + 0x214e4f: (0x78ca, 0),# East Asian ideograph + 0x214e50: (0x78d0, 0),# East Asian ideograph + 0x214e51: (0x78e8, 0),# East Asian ideograph + 0x214e52: (0x78ec, 0),# East Asian ideograph + 0x214e53: (0x78da, 0),# East Asian ideograph + 0x214e54: (0x78f7, 0),# East Asian ideograph + 0x214e55: (0x78f4, 0),# East Asian ideograph + 0x214e56: (0x78fa, 0),# East Asian ideograph (variant of 4B4E56 which maps to 78FA) + 0x214e57: (0x7901, 0),# East Asian ideograph + 0x214e58: (0x78ef, 0),# East Asian ideograph + 0x234e59: (0x97dd, 0),# East Asian ideograph + 0x214e5a: (0x7919, 0),# East Asian ideograph + 0x214e5b: (0x7926, 0),# East Asian ideograph + 0x214e5c: (0x792c, 0),# East Asian ideograph + 0x224e5d: (0x6fde, 0),# East Asian ideograph + 0x214e5e: (0x792b, 0),# East Asian ideograph + 0x214e5f: (0x793a, 0),# East Asian ideograph + 0x214e60: (0x7940, 0),# East Asian ideograph + 0x214e61: (0x793e, 0),# East Asian ideograph + 0x214e62: (0x7941, 0),# East Asian ideograph + 0x214e63: (0x7945, 0),# East Asian ideograph + 0x214e64: (0x7949, 0),# East Asian ideograph + 0x214e65: (0x7948, 0),# East Asian ideograph + 0x214e66: (0x7947, 0),# East Asian ideograph + 0x224e67: (0x700c, 0),# East Asian ideograph + 0x214e68: (0x7960, 0),# East Asian ideograph + 0x214e69: (0x7950, 0),# East Asian ideograph + 0x214e6a: (0x7956, 0),# East Asian ideograph + 0x214e6b: (0x795e, 0),# East Asian ideograph + 0x214e6c: (0x795d, 0),# East Asian ideograph + 0x214e6d: (0x795f, 0),# East Asian ideograph + 0x214e6e: (0x795a, 0),# East Asian ideograph + 0x214e6f: (0x7957, 0),# East Asian ideograph + 0x214e70: (0x7965, 0),# East Asian ideograph + 0x214e71: (0x7968, 0),# East Asian ideograph + 0x214e72: (0x796d, 0),# East Asian ideograph + 0x234e73: (0x97fa, 0),# East Asian ideograph + 0x214e74: (0x7981, 0),# East Asian ideograph + 0x214e75: (0x797f, 0),# East Asian ideograph + 0x214e76: (0x798f, 0),# East Asian ideograph + 0x214e77: (0x798d, 0),# East Asian ideograph + 0x214e78: (0x798e, 0),# East Asian ideograph + 0x214e79: (0x79a6, 0),# East Asian ideograph + 0x214e7a: (0x79a7, 0),# East Asian ideograph + 0x214e7b: (0x79aa, 0),# East Asian ideograph + 0x214e7c: (0x79ae, 0),# East Asian ideograph + 0x214e7d: (0x79b1, 0),# East Asian ideograph + 0x214e7e: (0x79b9, 0),# East Asian ideograph + 0x6f5c63: (0xd558, 0),# Korean hangul + 0x6f4e2d: (0xb55f, 0),# Korean hangul + 0x29335d: (0x8c16, 0),# East Asian ideograph + 0x216461: (0x4ec8, 0),# East Asian ideograph + 0x234a46: (0x9658, 0),# East Asian ideograph + 0x69626d: (0x7874, 0),# East Asian ideograph + 0x6f4b57: (0xb0a9, 0),# Korean hangul + 0x27626f: (0x515a, 0),# East Asian ideograph + 0x6f5c64: (0xd559, 0),# Korean hangul + 0x274936: (0x6ee4, 0),# East Asian ideograph + 0x6f5821: (0xc974, 0),# Korean hangul + 0x6f4d53: (0xb450, 0),# Korean hangul + 0x216271: (0x9ef4, 0),# East Asian ideograph + 0x216272: (0x9ef7, 0),# East Asian ideograph + 0x4b6159: (0x81b8, 0),# East Asian ideograph + 0x216273: (0x9f07, 0),# East Asian ideograph + 0x216275: (0x9f13, 0),# East Asian ideograph + 0x274937: (0x6d4f, 0),# East Asian ideograph + 0x6f5822: (0xc988, 0),# Korean hangul + 0x216276: (0x9f15, 0),# East Asian ideograph + 0x274633: (0x6b8b, 0),# East Asian ideograph + 0x6f4d22: (0xb308, 0),# Korean hangul + 0x6f4b59: (0xb0ac, 0),# Korean hangul + 0x4b6278: (0x9f21, 0),# East Asian ideograph + 0x224d23: (0x6f7e, 0),# East Asian ideograph + 0x21712d: (0x5593, 0),# East Asian ideograph + 0x224d24: (0x6f9d, 0),# East Asian ideograph + 0x21627a: (0x9f34, 0),# East Asian ideograph + 0x6f4d25: (0xb313, 0),# Korean hangul + 0x6f5823: (0xc989, 0),# Korean hangul + 0x23227b: (0x8484, 0),# East Asian ideograph + 0x22464a: (0x6c05, 0),# East Asian ideograph + 0x6f4d26: (0xb314, 0),# Korean hangul + 0x6f534b: (0xc1b0, 0),# Korean hangul + 0x23227c: (0x8478, 0),# East Asian ideograph + 0x224d27: (0x6f87, 0),# East Asian ideograph + 0x6f4b5a: (0xb0ad, 0),# Korean hangul + 0x21627d: (0x9f4a, 0),# East Asian ideograph + 0x6f4d28: (0xb354, 0),# Korean hangul + 0x27627e: (0x658e, 0),# East Asian ideograph + 0x274d29: (0x7691, 0),# East Asian ideograph + 0x274d7c: (0x77a9, 0),# East Asian ideograph + 0x6f5c67: (0xd565, 0),# Korean hangul + 0x6f4d2a: (0xb358, 0),# Korean hangul + 0x6f5824: (0xc98c, 0),# Korean hangul + 0x213c7a: (0x5eb8, 0),# East Asian ideograph + 0x224d2b: (0x6f6f, 0),# East Asian ideograph + 0x6f5271: (0xc0cf, 0),# Korean hangul + 0x234d2c: (0x976b, 0),# East Asian ideograph + 0x6f4b5b: (0xb0ae, 0),# Korean hangul + 0x214d2d: (0x76ba, 0),# East Asian ideograph + 0x6f4c39: (0xb192, 0),# Korean hangul + 0x29402b: (0x90ba, 0),# East Asian ideograph + 0x23393e: (0x8df2, 0),# East Asian ideograph + 0x282d79: (0x60ab, 0),# East Asian ideograph + 0x6f4d2e: (0xb364, 0),# Korean hangul + 0x2d3251: (0x510c, 0),# East Asian ideograph + 0x6f492c: (0xac84, 0),# Korean hangul + 0x6f5c68: (0xd568, 0),# Korean hangul + 0x224d2f: (0x6f5a, 0),# East Asian ideograph + 0x293362: (0x8c1d, 0),# East Asian ideograph + 0x214f21: (0x79bd, 0),# East Asian ideograph + 0x214f22: (0x842c, 0),# East Asian ideograph + 0x214f23: (0x79be, 0),# East Asian ideograph + 0x214f24: (0x79c0, 0),# East Asian ideograph + 0x214f25: (0x79c1, 0),# East Asian ideograph + 0x214f26: (0x79bf, 0),# East Asian ideograph + 0x214d31: (0x76c8, 0),# East Asian ideograph + 0x214f28: (0x79d1, 0),# East Asian ideograph + 0x214f29: (0x79cb, 0),# East Asian ideograph + 0x214f2a: (0x79d2, 0),# East Asian ideograph + 0x214f2b: (0x79e4, 0),# East Asian ideograph + 0x214f2c: (0x79e6, 0),# East Asian ideograph + 0x214f2d: (0x79e3, 0),# East Asian ideograph + 0x214f2e: (0x79df, 0),# East Asian ideograph + 0x214f2f: (0x79e7, 0),# East Asian ideograph + 0x214f30: (0x79e9, 0),# East Asian ideograph + 0x224f31: (0x702d, 0),# East Asian ideograph + 0x214f32: (0x7a05, 0),# East Asian ideograph + 0x214f33: (0x7a0d, 0),# East Asian ideograph + 0x214f34: (0x7a08, 0),# East Asian ideograph + 0x214f35: (0x7a0b, 0),# East Asian ideograph + 0x214f36: (0x7a00, 0),# East Asian ideograph + 0x214f37: (0x7a1f, 0),# East Asian ideograph + 0x234f38: (0x981f, 0),# East Asian ideograph + 0x214f39: (0x7a20, 0),# East Asian ideograph + 0x214f3a: (0x7a1a, 0),# East Asian ideograph + 0x214f3b: (0x7a14, 0),# East Asian ideograph + 0x214f3c: (0x7a31, 0),# East Asian ideograph + 0x214f3d: (0x7a2e, 0),# East Asian ideograph + 0x214f3e: (0x7a3f, 0),# East Asian ideograph + 0x214f3f: (0x7a3c, 0),# East Asian ideograph + 0x274f40: (0x8c37, 0),# East Asian ideograph + 0x214f41: (0x7a3d, 0),# East Asian ideograph + 0x214f42: (0x7a37, 0),# East Asian ideograph + 0x214f43: (0x7a3b, 0),# East Asian ideograph + 0x214f44: (0x7a4d, 0),# East Asian ideograph + 0x214f45: (0x7a4e, 0),# East Asian ideograph + 0x214f46: (0x7a4c, 0),# East Asian ideograph + 0x214f47: (0x7a46, 0),# East Asian ideograph + 0x214f48: (0x7a57, 0),# East Asian ideograph + 0x274f49: (0x7a51, 0),# East Asian ideograph + 0x214f4a: (0x7a62, 0),# East Asian ideograph + 0x274f4b: (0x83b7, 0),# East Asian ideograph (duplicate simplified) + 0x214f4c: (0x7a69, 0),# East Asian ideograph + 0x214f4d: (0x7a74, 0),# East Asian ideograph + 0x214f4e: (0x7a76, 0),# East Asian ideograph + 0x214f4f: (0x7a79, 0),# East Asian ideograph + 0x214f50: (0x7a7a, 0),# East Asian ideograph + 0x214f51: (0x7a7f, 0),# East Asian ideograph + 0x214f52: (0x7a81, 0),# East Asian ideograph + 0x214f53: (0x7a84, 0),# East Asian ideograph + 0x214f54: (0x7a88, 0),# East Asian ideograph + 0x214f55: (0x7a92, 0),# East Asian ideograph + 0x214f56: (0x7a95, 0),# East Asian ideograph + 0x214f57: (0x7a98, 0),# East Asian ideograph + 0x214f58: (0x7a96, 0),# East Asian ideograph + 0x214f59: (0x7a97, 0),# East Asian ideograph + 0x214f5a: (0x7a9f, 0),# East Asian ideograph + 0x214f5b: (0x7aa0, 0),# East Asian ideograph + 0x214f5c: (0x7aaa, 0),# East Asian ideograph + 0x214d3a: (0x76de, 0),# East Asian ideograph + 0x214f5e: (0x7aaf, 0),# East Asian ideograph + 0x214f5f: (0x7aae, 0),# East Asian ideograph + 0x274f60: (0x7aa5, 0),# East Asian ideograph + 0x274f61: (0x7a8d, 0),# East Asian ideograph + 0x274f62: (0x7a9c, 0),# East Asian ideograph + 0x274f63: (0x7aa6, 0),# East Asian ideograph + 0x214f64: (0x7aca, 0),# East Asian ideograph + 0x214f65: (0x7acb, 0),# East Asian ideograph + 0x214f66: (0x7ad9, 0),# East Asian ideograph + 0x214f67: (0x7ae5, 0),# East Asian ideograph + 0x214f68: (0x7ae3, 0),# East Asian ideograph + 0x214d3c: (0x76e1, 0),# East Asian ideograph + 0x214f6a: (0x7aef, 0),# East Asian ideograph + 0x274f6b: (0x7ade, 0),# East Asian ideograph + 0x214f6c: (0x7af9, 0),# East Asian ideograph + 0x214f6d: (0x7afa, 0),# East Asian ideograph + 0x214f6e: (0x7aff, 0),# East Asian ideograph + 0x214f6f: (0x7afd, 0),# East Asian ideograph + 0x214f70: (0x7b06, 0),# East Asian ideograph + 0x214f71: (0x7b11, 0),# East Asian ideograph + 0x214f72: (0x7b20, 0),# East Asian ideograph + 0x214f73: (0x7b2c, 0),# East Asian ideograph + 0x214f74: (0x7b28, 0),# East Asian ideograph + 0x214d3e: (0x76e4, 0),# East Asian ideograph + 0x214f76: (0x7b1e, 0),# East Asian ideograph + 0x214f77: (0x7b19, 0),# East Asian ideograph + 0x214f78: (0x7b26, 0),# East Asian ideograph + 0x214f79: (0x7b46, 0),# East Asian ideograph + 0x214f7a: (0x7b49, 0),# East Asian ideograph + 0x214d3f: (0x76e7, 0),# East Asian ideograph + 0x214f7c: (0x7b56, 0),# East Asian ideograph + 0x214f7d: (0x7b52, 0),# East Asian ideograph + 0x214f7e: (0x7b4b, 0),# East Asian ideograph + 0x234d40: (0x9784, 0),# East Asian ideograph + 0x6f4b5f: (0xb0b4, 0),# Korean hangul + 0x294472: (0x951e, 0),# East Asian ideograph + 0x4b4d41: (0x862f, 0),# East Asian ideograph + 0x6f4d42: (0xb3cc, 0),# Korean hangul + 0x2e3654: (0x657f, 0),# East Asian ideograph + 0x2d502b: (0x693e, 0),# East Asian ideograph + 0x234d43: (0x977f, 0),# East Asian ideograph + 0x6f5829: (0xc9c0, 0),# Korean hangul + 0x224d44: (0x6f0b, 0),# East Asian ideograph + 0x2d4362: (0x6722, 0),# East Asian ideograph + 0x4b4d45: (0x76f4, 0),# East Asian ideograph (variant of 214D45 which maps to 76F4) + 0x6f4b60: (0xb0b5, 0),# Korean hangul + 0x217577: (0x57d2, 0),# East Asian ideograph + 0x6f4d46: (0xb3d7, 0),# Korean hangul + 0x213145: (0x4f9d, 0),# East Asian ideograph + 0x217134: (0x5588, 0),# East Asian ideograph + 0x6f4d47: (0xb3d9, 0),# Korean hangul + 0x6f5c6d: (0xd571, 0),# Korean hangul + 0x27493f: (0x6f9c, 0),# East Asian ideograph + 0x6f582a: (0xc9c1, 0),# Korean hangul + 0x276256: (0x4e3d, 0),# East Asian ideograph + 0x224651: (0x6c0c, 0),# East Asian ideograph + 0x234d49: (0x9789, 0),# East Asian ideograph + 0x6f4d4a: (0xb400, 0),# Korean hangul + 0x6f4b61: (0xb0b8, 0),# Korean hangul + 0x294474: (0x951f, 0),# East Asian ideograph + 0x224d4b: (0x6f6c, 0),# East Asian ideograph + 0x294031: (0x909d, 0),# East Asian ideograph + 0x333944: (0x5b2d, 0),# East Asian ideograph + 0x6f4d4c: (0xb418, 0),# Korean hangul + 0x283f30: (0x6966, 0),# East Asian ideograph + 0x224d4d: (0x6f8b, 0),# East Asian ideograph + 0x6f582b: (0xc9c4, 0),# Korean hangul + 0x6f4d4e: (0xb420, 0),# Korean hangul + 0x2d4364: (0x671e, 0),# East Asian ideograph + 0x2d4d4f: (0x771f, 0),# East Asian ideograph + 0x276327: (0x9f89, 0),# East Asian ideograph + 0x6f586a: (0xcb50, 0),# Korean hangul + 0x6f4d50: (0xb429, 0),# Korean hangul + 0x213147: (0x4f75, 0),# East Asian ideograph + 0x6f4d51: (0xb42b, 0),# Korean hangul + 0x212329: (0xff09, 0),# Ideographic right parenthesis + 0x6f4d52: (0xb42c, 0),# Korean hangul + 0x6f582c: (0xc9c7, 0),# Korean hangul + 0x4b3b67: (0x6b67, 0),# East Asian ideograph + 0x234d54: (0x9794, 0),# East Asian ideograph + 0x6f4b63: (0xb0bc, 0),# Korean hangul + 0x335773: (0x88b4, 0),# East Asian ideograph + 0x6f4d55: (0xb454, 0),# Korean hangul + 0x27514a: (0x7ef0, 0),# East Asian ideograph + 0x214d56: (0x773e, 0),# East Asian ideograph + 0x6f5c70: (0xd578, 0),# Korean hangul + 0x276b5b: (0x5250, 0),# East Asian ideograph + 0x214d57: (0x774f, 0),# East Asian ideograph + 0x3f5959: (0x8276, 0),# East Asian ideograph + 0x224d58: (0x6e88, 0),# East Asian ideograph + 0x35347b: (0x8b2d, 0),# East Asian ideograph + 0x234d59: (0x979b, 0),# East Asian ideograph + 0x6f4b64: (0xb0c4, 0),# Korean hangul + 0x224d5a: (0x6f55, 0),# East Asian ideograph + 0x213149: (0x4f73, 0),# East Asian ideograph + 0x21623e: (0x9d61, 0),# East Asian ideograph + 0x235021: (0x9865, 0),# East Asian ideograph + 0x235022: (0x9866, 0),# East Asian ideograph + 0x215023: (0x7b54, 0),# East Asian ideograph + 0x215024: (0x7b60, 0),# East Asian ideograph + 0x215025: (0x7b77, 0),# East Asian ideograph + 0x215026: (0x7b75, 0),# East Asian ideograph + 0x215027: (0x7ba1, 0),# East Asian ideograph + 0x215028: (0x7b94, 0),# East Asian ideograph + 0x235029: (0x986c, 0),# East Asian ideograph + 0x21502a: (0x7b9d, 0),# East Asian ideograph + 0x21502b: (0x7b8b, 0),# East Asian ideograph + 0x21502c: (0x7b97, 0),# East Asian ideograph + 0x21502d: (0x7b8f, 0),# East Asian ideograph + 0x21502e: (0x7bc7, 0),# East Asian ideograph + 0x214d5d: (0x775e, 0),# East Asian ideograph + 0x235030: (0x9873, 0),# East Asian ideograph + 0x215031: (0x7bb1, 0),# East Asian ideograph + 0x215032: (0x7bb4, 0),# East Asian ideograph + 0x215033: (0x7bc0, 0),# East Asian ideograph + 0x215034: (0x7bc6, 0),# East Asian ideograph + 0x215035: (0x7bc1, 0),# East Asian ideograph + 0x215036: (0x7c11, 0),# East Asian ideograph + 0x215037: (0x7bd9, 0),# East Asian ideograph + 0x215038: (0x7bdb, 0),# East Asian ideograph + 0x235039: (0x98ad, 0),# East Asian ideograph + 0x21503a: (0x7bc9, 0),# East Asian ideograph + 0x21503b: (0x7be1, 0),# East Asian ideograph + 0x21503c: (0x7be9, 0),# East Asian ideograph + 0x21503d: (0x7c07, 0),# East Asian ideograph + 0x21503e: (0x7c0d, 0),# East Asian ideograph + 0x21503f: (0x7bfe, 0),# East Asian ideograph + 0x235040: (0x98b4, 0),# East Asian ideograph + 0x215041: (0x7c21, 0),# East Asian ideograph + 0x215042: (0x7c2b, 0),# East Asian ideograph + 0x215043: (0x7c2a, 0),# East Asian ideograph + 0x215044: (0x7c27, 0),# East Asian ideograph + 0x215045: (0x7c1e, 0),# East Asian ideograph + 0x215046: (0x7c23, 0),# East Asian ideograph + 0x215047: (0x7c3f, 0),# East Asian ideograph + 0x215048: (0x7c3e, 0),# East Asian ideograph + 0x215049: (0x7c38, 0),# East Asian ideograph + 0x21504a: (0x7c37, 0),# East Asian ideograph + 0x27504b: (0x7b7e, 0),# East Asian ideograph + 0x21504c: (0x7c43, 0),# East Asian ideograph + 0x23504d: (0x98bb, 0),# East Asian ideograph + 0x23504e: (0x98c0, 0),# East Asian ideograph + 0x21504f: (0x7c50, 0),# East Asian ideograph + 0x215050: (0x7c60, 0),# East Asian ideograph + 0x215051: (0x7c5f, 0),# East Asian ideograph + 0x215052: (0x7c64, 0),# East Asian ideograph + 0x215053: (0x7c6c, 0),# East Asian ideograph + 0x215054: (0x7c6e, 0),# East Asian ideograph + 0x215055: (0x7c72, 0),# East Asian ideograph + 0x215056: (0x7c73, 0),# East Asian ideograph + 0x215057: (0x7c89, 0),# East Asian ideograph + 0x215058: (0x7c92, 0),# East Asian ideograph + 0x215059: (0x7c97, 0),# East Asian ideograph + 0x21505a: (0x7c9f, 0),# East Asian ideograph + 0x21505b: (0x7ca5, 0),# East Asian ideograph + 0x21505c: (0x7ca4, 0),# East Asian ideograph + 0x21505d: (0x7cb1, 0),# East Asian ideograph + 0x21505e: (0x7cb3, 0),# East Asian ideograph + 0x23505f: (0x98e1, 0),# East Asian ideograph + 0x275060: (0x7c8b, 0),# East Asian ideograph + 0x215061: (0xfa1d, 0),# East Asian ideograph + 0x275062: (0x80e1, 0),# East Asian ideograph (duplicate simplified) + 0x215063: (0x7cd6, 0),# East Asian ideograph + 0x215064: (0x7cd5, 0),# East Asian ideograph + 0x215065: (0x7ce0, 0),# East Asian ideograph + 0x215066: (0x7cdc, 0),# East Asian ideograph + 0x215067: (0x7cdf, 0),# East Asian ideograph + 0x215068: (0x7cde, 0),# East Asian ideograph + 0x215069: (0x7ce2, 0),# East Asian ideograph + 0x21506a: (0x7cd9, 0),# East Asian ideograph + 0x21506b: (0x7ce7, 0),# East Asian ideograph + 0x21506c: (0x7cef, 0),# East Asian ideograph + 0x2e506d: (0x70b1, 0),# East Asian ideograph + 0x21506e: (0x7cfb, 0),# East Asian ideograph + 0x21506f: (0x7cfe, 0),# East Asian ideograph + 0x215070: (0x7d00, 0),# East Asian ideograph + 0x215071: (0x7d02, 0),# East Asian ideograph + 0x215072: (0x7d05, 0),# East Asian ideograph + 0x225073: (0x70a9, 0),# East Asian ideograph + 0x215074: (0x7d04, 0),# East Asian ideograph + 0x215075: (0x7d07, 0),# East Asian ideograph + 0x215076: (0x7d21, 0),# East Asian ideograph + 0x215077: (0x7d0b, 0),# East Asian ideograph + 0x225078: (0x70ea, 0),# East Asian ideograph + 0x215079: (0x7d20, 0),# East Asian ideograph + 0x21507a: (0x7d1c, 0),# East Asian ideograph + 0x21507b: (0x7d22, 0),# East Asian ideograph + 0x27507c: (0x7eb0, 0),# East Asian ideograph + 0x234d6a: (0x97ac, 0),# East Asian ideograph + 0x21507e: (0x7d10, 0),# East Asian ideograph + 0x6f5c74: (0xd587, 0),# Korean hangul + 0x6f4d6b: (0xb514, 0),# Korean hangul + 0x6f5831: (0xc9d3, 0),# Korean hangul + 0x6f4d6c: (0xb515, 0),# Korean hangul + 0x6f7641: (0xe8b3, 0),# Korean hangul + 0x2d4d6d: (0x7792, 0),# East Asian ideograph + 0x2d3f27: (0x6120, 0),# East Asian ideograph + 0x69252d: (0x30ad, 0),# Katakana letter KI + 0x6f4d6e: (0xb51b, 0),# Korean hangul + 0x4b4c79: (0x7672, 0),# East Asian ideograph + 0x6f4d6f: (0xb51c, 0),# Korean hangul + 0x4c4c35: (0x6e0c, 0),# East Asian ideograph + 0x6f5c75: (0xd588, 0),# Korean hangul + 0x234d70: (0x97ae, 0),# East Asian ideograph + 0x6f5832: (0xc9d5, 0),# Korean hangul + 0x234d71: (0x97a8, 0),# East Asian ideograph + 0x334a58: (0x89dd, 0),# East Asian ideograph + 0x6f4d72: (0xb527, 0),# Korean hangul + 0x4b537d: (0x9acc, 0),# East Asian ideograph + 0x6f592a: (0xcc3d, 0),# Korean hangul + 0x6f5337: (0xc14b, 0),# Korean hangul + 0x274d73: (0x4e86, 0),# East Asian ideograph + 0x224d74: (0x6f9f, 0),# East Asian ideograph + 0x2d325f: (0x50bb, 0),# East Asian ideograph (variant of 4B325F which maps to 50BB) + 0x6f4d75: (0xb52a, 0),# Korean hangul + 0x6f5833: (0xc9d6, 0),# Korean hangul + 0x29416a: (0x948d, 0),# East Asian ideograph + 0x22465a: (0x6c18, 0),# East Asian ideograph + 0x2d3821: (0x962f, 0),# East Asian ideograph + 0x6f5274: (0xc0d9, 0),# Korean hangul + 0x213822: (0x5747, 0),# East Asian ideograph + 0x39447d: (0x6ac2, 0),# East Asian ideograph + 0x234d78: (0x97a5, 0),# East Asian ideograph + 0x2d4d21: (0x7681, 0),# East Asian ideograph + 0x6f4d79: (0xb531, 0),# Korean hangul + 0x287360: (0x7f2c, 0),# East Asian ideograph + 0x2f3a5e: (0x8e6e, 0),# East Asian ideograph + 0x234d7a: (0x97b2, 0),# East Asian ideograph + 0x2d5836: (0x89e6, 0),# East Asian ideograph + 0x6f5834: (0xc9d9, 0),# Korean hangul + 0x22465b: (0x6c19, 0),# East Asian ideograph + 0x216032: (0x7ae0, 0),# East Asian ideograph + 0x4b372c: (0x5606, 0),# East Asian ideograph + 0x234d7c: (0x97b4, 0),# East Asian ideograph + 0x213827: (0x5783, 0),# East Asian ideograph + 0x224d7d: (0x6fbc, 0),# East Asian ideograph + 0x213828: (0x576a, 0),# East Asian ideograph + 0x235b67: (0x9daa, 0),# East Asian ideograph + 0x4b3773: (0x56e3, 0),# East Asian ideograph + 0x213829: (0x5769, 0),# East Asian ideograph + 0x34782a: (0x90c5, 0),# East Asian ideograph + 0x284d49: (0x6da0, 0),# East Asian ideograph + 0x213f35: (0x6162, 0),# East Asian ideograph + 0x21382b: (0x5761, 0),# East Asian ideograph + 0x4b5946: (0x8a33, 0),# East Asian ideograph + 0x21382c: (0x5764, 0),# East Asian ideograph + 0x27383e: (0x57a9, 0),# East Asian ideograph + 0x6f586c: (0xcb59, 0),# Korean hangul + 0x6f543d: (0xc31c, 0),# Korean hangul + 0x4b382e: (0x57c0, 0),# East Asian ideograph + 0x23382f: (0x8da1, 0),# East Asian ideograph + 0x693c32: (0x9d2b, 0),# East Asian ideograph + 0x215121: (0x7d17, 0),# East Asian ideograph + 0x215122: (0x7d0d, 0),# East Asian ideograph (variant of 455122 which maps to 7D0D) + 0x215123: (0x7d1a, 0),# East Asian ideograph + 0x215124: (0x7d19, 0),# East Asian ideograph + 0x215125: (0x7d1b, 0),# East Asian ideograph + 0x215126: (0x7d46, 0),# East Asian ideograph + 0x213831: (0x578b, 0),# East Asian ideograph + 0x215128: (0x7d3c, 0),# East Asian ideograph + 0x215129: (0x7d2e, 0),# East Asian ideograph + 0x21512a: (0x7d39, 0),# East Asian ideograph + 0x27512b: (0x7ec4, 0),# East Asian ideograph + 0x21512c: (0x7d30, 0),# East Asian ideograph + 0x21512d: (0x7d33, 0),# East Asian ideograph + 0x21512e: (0x7d2f, 0),# East Asian ideograph + 0x27512f: (0x7ecc, 0),# East Asian ideograph + 0x275130: (0x7ec8, 0),# East Asian ideograph + 0x275131: (0x7edf, 0),# East Asian ideograph + 0x275132: (0x7ede, 0),# East Asian ideograph + 0x215133: (0x7d68, 0),# East Asian ideograph + 0x275134: (0x7ed3, 0),# East Asian ideograph + 0x215135: (0x7d2b, 0),# East Asian ideograph + 0x215136: (0x7d62, 0),# East Asian ideograph + 0x215137: (0x7d76, 0),# East Asian ideograph + 0x215138: (0x7d61, 0),# East Asian ideograph + 0x275139: (0x7ed9, 0),# East Asian ideograph + 0x21513a: (0x7d6e, 0),# East Asian ideograph + 0x21513b: (0x7d72, 0),# East Asian ideograph + 0x27513c: (0x7ecf, 0),# East Asian ideograph + 0x21513d: (0x7d91, 0),# East Asian ideograph + 0x21513e: (0x7d79, 0),# East Asian ideograph + 0x21513f: (0x7d8f, 0),# East Asian ideograph + 0x275140: (0x7ed1, 0),# East Asian ideograph + 0x275141: (0x7efc, 0),# East Asian ideograph + 0x225142: (0x70f7, 0),# East Asian ideograph + 0x215143: (0x7db0, 0),# East Asian ideograph + 0x275144: (0x7d27, 0),# East Asian ideograph + 0x275145: (0x7eeb, 0),# East Asian ideograph + 0x275146: (0x7f00, 0),# East Asian ideograph + 0x215147: (0x7dba, 0),# East Asian ideograph + 0x275148: (0x7f51, 0),# East Asian ideograph + 0x275149: (0x7eb2, 0),# East Asian ideograph + 0x22514a: (0x7110, 0),# East Asian ideograph + 0x21514b: (0x7db5, 0),# East Asian ideograph + 0x21514c: (0x7da0, 0),# East Asian ideograph + 0x27514d: (0x7ef8, 0),# East Asian ideograph + 0x27514e: (0x7ef4, 0),# East Asian ideograph + 0x27514f: (0x7ef5, 0),# East Asian ideograph + 0x275150: (0x7eb6, 0),# East Asian ideograph + 0x275151: (0x7f01, 0),# East Asian ideograph + 0x215152: (0x7de0, 0),# East Asian ideograph + 0x235153: (0x9933, 0),# East Asian ideograph + 0x235154: (0x9942, 0),# East Asian ideograph (variant of 4D5154 which maps to 9942) + 0x275155: (0x7eea, 0),# East Asian ideograph + 0x215156: (0x7dd8, 0),# East Asian ideograph + 0x275157: (0x7f05, 0),# East Asian ideograph + 0x275158: (0x7f09, 0),# East Asian ideograph + 0x275159: (0x7f13, 0),# East Asian ideograph + 0x27515a: (0x7f18, 0),# East Asian ideograph + 0x21515b: (0x7de8, 0),# East Asian ideograph + 0x21515c: (0x7dda, 0),# East Asian ideograph + 0x27515d: (0x7f0d, 0),# East Asian ideograph + 0x27515e: (0x7f0e, 0),# East Asian ideograph + 0x27515f: (0x7f23, 0),# East Asian ideograph + 0x275160: (0x7f22, 0),# East Asian ideograph + 0x275161: (0x8426, 0),# East Asian ideograph + 0x275162: (0x7f1a, 0),# East Asian ideograph + 0x215163: (0x7dfb, 0),# East Asian ideograph + 0x275164: (0x53bf, 0),# East Asian ideograph (variant of 455164 which maps to 53BF) + 0x215165: (0x7e2e, 0),# East Asian ideograph + 0x215166: (0x7e3e, 0),# East Asian ideograph + 0x275167: (0x7f2a, 0),# East Asian ideograph + 0x275168: (0x7f15, 0),# East Asian ideograph + 0x215169: (0x7e32, 0),# East Asian ideograph + 0x23516a: (0x9948, 0),# East Asian ideograph + 0x21516b: (0x7e41, 0),# East Asian ideograph + 0x23516c: (0x9947, 0),# East Asian ideograph + 0x23516d: (0x9949, 0),# East Asian ideograph + 0x21516e: (0x7e31, 0),# East Asian ideograph + 0x22516f: (0x713f, 0),# East Asian ideograph + 0x235170: (0x9943, 0),# East Asian ideograph + 0x275171: (0x7ec7, 0),# East Asian ideograph + 0x215172: (0x7e61, 0),# East Asian ideograph + 0x235173: (0x994e, 0),# East Asian ideograph + 0x235174: (0x9950, 0),# East Asian ideograph + 0x215175: (0x7e6b, 0),# East Asian ideograph + 0x215176: (0x7e69, 0),# East Asian ideograph + 0x215177: (0x7e6d, 0),# East Asian ideograph + 0x215178: (0x7e79, 0),# East Asian ideograph + 0x215179: (0x7e6a, 0),# East Asian ideograph + 0x21517a: (0x8fae, 0),# East Asian ideograph + 0x27517b: (0x7f24, 0),# East Asian ideograph + 0x21517c: (0x7e82, 0),# East Asian ideograph + 0x21517d: (0x7e7c, 0),# East Asian ideograph + 0x21517e: (0x7e8f, 0),# East Asian ideograph + 0x6f5947: (0xcce4, 0),# Korean hangul + 0x227841: (0x80ef, 0),# East Asian ideograph + 0x217144: (0x5581, 0),# East Asian ideograph + 0x4b3774: (0x56f3, 0),# East Asian ideograph + 0x235729: (0x9b8e, 0),# East Asian ideograph + 0x287321: (0x7f26, 0),# East Asian ideograph + 0x6f5c7d: (0xd5d2, 0),# Korean hangul + 0x6f583a: (0xc9e0, 0),# Korean hangul + 0x216038: (0x9802, 0),# East Asian ideograph + 0x213844: (0x5831, 0),# East Asian ideograph + 0x4b594b: (0x5909, 0),# East Asian ideograph + 0x6f5d72: (0xd763, 0),# Korean hangul + 0x4c3b31: (0x6798, 0),# East Asian ideograph + 0x213845: (0x582f, 0),# East Asian ideograph + 0x213a30: (0x5abc, 0),# East Asian ideograph + 0x6f5c7e: (0xd5d8, 0),# Korean hangul + 0x213848: (0x5830, 0),# East Asian ideograph + 0x274638: (0x6b7c, 0),# East Asian ideograph + 0x213849: (0x5824, 0),# East Asian ideograph + 0x21384a: (0x5834, 0),# East Asian ideograph + 0x21784b: (0x58c6, 0),# East Asian ideograph + 0x394042: (0x646d, 0),# East Asian ideograph + 0x284b28: (0x6d48, 0),# East Asian ideograph + 0x22384c: (0x665e, 0),# East Asian ideograph + 0x69525d: (0x53fa, 0),# East Asian ideograph + 0x705d46: (0x841c, 0),# East Asian ideograph + 0x27384d: (0x6d82, 0),# East Asian ideograph + 0x21603a: (0x9805, 0),# East Asian ideograph + 0x234a62: (0x967e, 0),# East Asian ideograph + 0x213158: (0x4fd1, 0),# East Asian ideograph + 0x223850: (0x667e, 0),# East Asian ideograph + 0x21387c: (0x5919, 0),# East Asian ideograph + 0x213851: (0x584c, 0),# East Asian ideograph + 0x213852: (0x585a, 0),# East Asian ideograph + 0x213853: (0x586d, 0),# East Asian ideograph + 0x6f5276: (0xc0dc, 0),# Korean hangul + 0x217854: (0x58d2, 0),# East Asian ideograph + 0x213855: (0x5862, 0),# East Asian ideograph + 0x335b70: (0x5ef8, 0),# East Asian ideograph + 0x213f4e: (0x61c7, 0),# East Asian ideograph + 0x273856: (0x5757, 0),# East Asian ideograph + 0x6f4e33: (0xb5a8, 0),# Korean hangul + 0x6f583e: (0xc9e7, 0),# Korean hangul + 0x22687e: (0x7a2d, 0),# East Asian ideograph + 0x4b3b79: (0x5d8c, 0),# East Asian ideograph + 0x217428: (0x5704, 0),# East Asian ideograph + 0x334621: (0x8b99, 0),# East Asian ideograph + 0x233859: (0x8daf, 0),# East Asian ideograph + 0x21385a: (0x588a, 0),# East Asian ideograph + 0x215221: (0x7e8c, 0),# East Asian ideograph + 0x275222: (0x7f28, 0),# East Asian ideograph + 0x215223: (0x7e96, 0),# East Asian ideograph + 0x215224: (0x7e9c, 0),# East Asian ideograph + 0x6f5225: (0xbe75, 0),# Korean hangul + 0x215226: (0x7f38, 0),# East Asian ideograph + 0x215227: (0x7f3a, 0),# East Asian ideograph + 0x225228: (0x7135, 0),# East Asian ideograph + 0x235229: (0x995d, 0),# East Asian ideograph + 0x6f522a: (0xbe84, 0),# Korean hangul + 0x21522b: (0x7f50, 0),# East Asian ideograph + 0x21522c: (0x7f55, 0),# East Asian ideograph + 0x21522d: (0x7f54, 0),# East Asian ideograph + 0x21522e: (0x7f5f, 0),# East Asian ideograph + 0x21522f: (0x7f72, 0),# East Asian ideograph + 0x215230: (0x7f6e, 0),# East Asian ideograph + 0x224223: (0x6a89, 0),# East Asian ideograph + 0x215232: (0x7f6a, 0),# East Asian ideograph + 0x215233: (0x7f70, 0),# East Asian ideograph + 0x215234: (0x7f75, 0),# East Asian ideograph + 0x215235: (0x7f77, 0),# East Asian ideograph + 0x215236: (0x7f79, 0),# East Asian ideograph + 0x215237: (0x7f85, 0),# East Asian ideograph + 0x275238: (0x7f81, 0),# East Asian ideograph + 0x215239: (0x7f8a, 0),# East Asian ideograph + 0x21523a: (0x7f8c, 0),# East Asian ideograph + 0x21523b: (0x7f8e, 0),# East Asian ideograph + 0x21523c: (0x7f94, 0),# East Asian ideograph + 0x21523d: (0x7f9e, 0),# East Asian ideograph + 0x21523e: (0x7f9a, 0),# East Asian ideograph + 0x21523f: (0x5584, 0),# East Asian ideograph + 0x215240: (0x7fa8, 0),# East Asian ideograph + 0x215241: (0x7fa4, 0),# East Asian ideograph + 0x235242: (0x99aa, 0),# East Asian ideograph + 0x215243: (0x7faf, 0),# East Asian ideograph + 0x215244: (0x7fb2, 0),# East Asian ideograph + 0x215245: (0x7fb6, 0),# East Asian ideograph + 0x215246: (0x7fb8, 0),# East Asian ideograph + 0x215247: (0x7fb9, 0),# East Asian ideograph + 0x215248: (0x7fbd, 0),# East Asian ideograph + 0x235249: (0x99b5, 0),# East Asian ideograph + 0x21524a: (0x7fc5, 0),# East Asian ideograph + 0x21524b: (0x7fc1, 0),# East Asian ideograph + 0x21524c: (0x7fcc, 0),# East Asian ideograph + 0x21524d: (0x7fd2, 0),# East Asian ideograph + 0x21524e: (0x7fce, 0),# East Asian ideograph (variant of 4B524E which maps to 7FCE) + 0x21524f: (0x7fd4, 0),# East Asian ideograph + 0x215250: (0x7fd5, 0),# East Asian ideograph + 0x215251: (0x7fe0, 0),# East Asian ideograph + 0x215252: (0x7fe1, 0),# East Asian ideograph + 0x215253: (0x7fdf, 0),# East Asian ideograph + 0x235254: (0x99bd, 0),# East Asian ideograph + 0x215255: (0x7ff0, 0),# East Asian ideograph + 0x215256: (0x7ff3, 0),# East Asian ideograph + 0x215257: (0x7ffc, 0),# East Asian ideograph + 0x215258: (0x7ff9, 0),# East Asian ideograph + 0x215259: (0x7ffb, 0),# East Asian ideograph + 0x21525a: (0x7ff1, 0),# East Asian ideograph + 0x21525b: (0x8000, 0),# East Asian ideograph + 0x22525c: (0x7143, 0),# East Asian ideograph + 0x21525d: (0x8003, 0),# East Asian ideograph + 0x21525e: (0x8006, 0),# East Asian ideograph + 0x21525f: (0x8005, 0),# East Asian ideograph + 0x215260: (0x800c, 0),# East Asian ideograph + 0x215261: (0x8010, 0),# East Asian ideograph + 0x215262: (0x800d, 0),# East Asian ideograph + 0x215263: (0x8012, 0),# East Asian ideograph + 0x215264: (0x8015, 0),# East Asian ideograph + 0x215265: (0x8018, 0),# East Asian ideograph + 0x215266: (0x8019, 0),# East Asian ideograph + 0x215267: (0x8017, 0),# East Asian ideograph + 0x215268: (0x801c, 0),# East Asian ideograph + 0x235269: (0x99d8, 0),# East Asian ideograph + 0x21526a: (0x8036, 0),# East Asian ideograph + 0x21526b: (0x803f, 0),# East Asian ideograph + 0x21526c: (0x803d, 0),# East Asian ideograph + 0x21526d: (0x804a, 0),# East Asian ideograph + 0x21526e: (0x8046, 0),# East Asian ideograph + 0x21526f: (0x8056, 0),# East Asian ideograph + 0x215270: (0x8058, 0),# East Asian ideograph + 0x215271: (0x805e, 0),# East Asian ideograph + 0x215272: (0x805a, 0),# East Asian ideograph + 0x215273: (0x8071, 0),# East Asian ideograph + 0x215274: (0x8072, 0),# East Asian ideograph + 0x215275: (0x8073, 0),# East Asian ideograph + 0x215276: (0x8070, 0),# East Asian ideograph + 0x215277: (0x806f, 0),# East Asian ideograph + 0x215278: (0x8077, 0),# East Asian ideograph + 0x275279: (0x8042, 0),# East Asian ideograph + 0x23527a: (0x99f0, 0),# East Asian ideograph + 0x27527b: (0x542c, 0),# East Asian ideograph + 0x21527c: (0x807f, 0),# East Asian ideograph + 0x6f527c: (0xc0f4, 0),# Korean hangul + 0x21527e: (0x8084, 0),# East Asian ideograph + 0x21386b: (0x58d9, 0),# East Asian ideograph + 0x6f5842: (0xc9f0, 0),# Korean hangul + 0x27386c: (0x5792, 0),# East Asian ideograph + 0x6f5a23: (0xcead, 0),# Korean hangul + 0x21386d: (0x58df, 0),# East Asian ideograph + 0x27386e: (0x574f, 0),# East Asian ideograph + 0x4b3850: (0x5861, 0),# East Asian ideograph (variant of 213850) + 0x23395c: (0x8e1e, 0),# East Asian ideograph + 0x235732: (0x9b98, 0),# East Asian ideograph + 0x6f4e34: (0xb5ab, 0),# Korean hangul + 0x213870: (0x58e4, 0),# East Asian ideograph + 0x276065: (0x9965, 0),# East Asian ideograph + 0x4b3b7e: (0x5d15, 0),# East Asian ideograph + 0x273871: (0x575d, 0),# East Asian ideograph + 0x6f5d76: (0xd770, 0),# Korean hangul + 0x223872: (0x6693, 0),# East Asian ideograph + 0x233873: (0x8dbf, 0),# East Asian ideograph + 0x273874: (0x58ee, 0),# East Asian ideograph + 0x343875: (0x5fde, 0),# East Asian ideograph + 0x284d58: (0x6ca9, 0),# East Asian ideograph + 0x705c43: (0x82ca, 0),# East Asian ideograph + 0x223876: (0x6690, 0),# East Asian ideograph + 0x276321: (0x9f7f, 0),# East Asian ideograph + 0x213877: (0x58fd, 0),# East Asian ideograph + 0x276322: (0x9f83, 0),# East Asian ideograph + 0x4d5d49: (0x9e81, 0),# East Asian ideograph + 0x226323: (0x77b6, 0),# East Asian ideograph + 0x213879: (0x5914, 0),# East Asian ideograph + 0x276324: (0x9f84, 0),# East Asian ideograph + 0x2e765f: (0x8037, 0),# East Asian ideograph + 0x21387a: (0x5915, 0),# East Asian ideograph + 0x284d59: (0x6ed7, 0),# East Asian ideograph + 0x276325: (0x9f88, 0),# East Asian ideograph + 0x6f542c: (0xc2f1, 0),# Korean hangul + 0x213e2a: (0x6035, 0),# East Asian ideograph (variant of 4B3E2A which maps to 6035) + 0x6f5675: (0xc78a, 0),# Korean hangul + 0x276326: (0x9f87, 0),# East Asian ideograph + 0x22787c: (0x8153, 0),# East Asian ideograph + 0x216327: (0x9f6c, 0),# East Asian ideograph + 0x21387d: (0x591a, 0),# East Asian ideograph + 0x276328: (0x9f8a, 0),# East Asian ideograph + 0x2d517d: (0x7d99, 0),# East Asian ideograph + 0x4b484a: (0x6e13, 0),# East Asian ideograph + 0x2d3272: (0x706e, 0),# East Asian ideograph + 0x232329: (0x845c, 0),# East Asian ideograph + 0x6f5846: (0xc9fc, 0),# Korean hangul + 0x27632a: (0x9f8b, 0),# East Asian ideograph + 0x234a6c: (0x9689, 0),# East Asian ideograph + 0x22632b: (0x77b9, 0),# East Asian ideograph + 0x453051: (0x8d30, 0),# East Asian ideograph + 0x6f4b7d: (0xb124, 0),# Korean hangul + 0x21632c: (0x9f94, 0),# East Asian ideograph + 0x27632d: (0x9f9f, 0),# East Asian ideograph + 0x4b484b: (0x51d6, 0),# East Asian ideograph + 0x235736: (0x9b9f, 0),# East Asian ideograph + 0x6f5847: (0xca00, 0),# Korean hangul + 0x6f5427: (0xc2e4, 0),# Korean hangul + 0x275321: (0x8083, 0),# East Asian ideograph + 0x215322: (0x8087, 0),# East Asian ideograph + 0x215323: (0x8089, 0),# East Asian ideograph + 0x235324: (0x9a02, 0),# East Asian ideograph + 0x215325: (0x808c, 0),# East Asian ideograph + 0x215326: (0x8093, 0),# East Asian ideograph + 0x215327: (0x809d, 0),# East Asian ideograph + 0x215328: (0x8098, 0),# East Asian ideograph + 0x215329: (0x809b, 0),# East Asian ideograph + 0x21532a: (0x809a, 0),# East Asian ideograph + 0x22532b: (0x7180, 0),# East Asian ideograph + 0x22532c: (0x7189, 0),# East Asian ideograph + 0x21532d: (0x80aa, 0),# East Asian ideograph + 0x21532e: (0x80ba, 0),# East Asian ideograph + 0x21532f: (0x80a5, 0),# East Asian ideograph + 0x235330: (0x99fb, 0),# East Asian ideograph + 0x235331: (0x99fd, 0),# East Asian ideograph + 0x215332: (0x80b1, 0),# East Asian ideograph + 0x225333: (0x7196, 0),# East Asian ideograph + 0x215334: (0x80a1, 0),# East Asian ideograph + 0x215335: (0x80a9, 0),# East Asian ideograph + 0x27495d: (0x4e4c, 0),# East Asian ideograph + 0x215337: (0x80d6, 0),# East Asian ideograph + 0x215338: (0x80cc, 0),# East Asian ideograph + 0x215339: (0x80e5, 0),# East Asian ideograph + 0x21533a: (0x80da, 0),# East Asian ideograph + 0x21533b: (0x80e1, 0),# East Asian ideograph + 0x21533c: (0x80c3, 0),# East Asian ideograph + 0x21533d: (0x80db, 0),# East Asian ideograph + 0x21533e: (0x80c4, 0),# East Asian ideograph + 0x21533f: (0x80ce, 0),# East Asian ideograph + 0x215340: (0x80de, 0),# East Asian ideograph + 0x215341: (0x80e4, 0),# East Asian ideograph + 0x215342: (0x80f0, 0),# East Asian ideograph + 0x215343: (0x8102, 0),# East Asian ideograph + 0x215344: (0x8105, 0),# East Asian ideograph + 0x215345: (0x80f1, 0),# East Asian ideograph + 0x215346: (0x80f4, 0),# East Asian ideograph + 0x215347: (0x80ed, 0),# East Asian ideograph + 0x235348: (0x9a10, 0),# East Asian ideograph + 0x215349: (0x8106, 0),# East Asian ideograph + 0x21534a: (0x80f3, 0),# East Asian ideograph + 0x21534b: (0x80f8, 0),# East Asian ideograph + 0x23534c: (0x9a24, 0),# East Asian ideograph + 0x21534d: (0x8108, 0),# East Asian ideograph + 0x21534e: (0x812b, 0),# East Asian ideograph + 0x21534f: (0x812f, 0),# East Asian ideograph + 0x215350: (0x8116, 0),# East Asian ideograph + 0x225351: (0x71a4, 0),# East Asian ideograph + 0x215352: (0x8129, 0),# East Asian ideograph + 0x215353: (0x8155, 0),# East Asian ideograph + 0x215354: (0x8154, 0),# East Asian ideograph + 0x215355: (0x814b, 0),# East Asian ideograph + 0x215356: (0x8151, 0),# East Asian ideograph + 0x215357: (0x8150, 0),# East Asian ideograph + 0x215358: (0x814e, 0),# East Asian ideograph + 0x275359: (0x80c0, 0),# East Asian ideograph + 0x21535a: (0x8146, 0),# East Asian ideograph + 0x21535b: (0x813e, 0),# East Asian ideograph + 0x21535c: (0x8171, 0),# East Asian ideograph + 0x21535d: (0x8170, 0),# East Asian ideograph + 0x21535e: (0x8178, 0),# East Asian ideograph + 0x21535f: (0x8165, 0),# East Asian ideograph + 0x215360: (0x816e, 0),# East Asian ideograph + 0x215361: (0x8173, 0),# East Asian ideograph + 0x275362: (0x80bf, 0),# East Asian ideograph + 0x215363: (0x8179, 0),# East Asian ideograph + 0x215364: (0x817a, 0),# East Asian ideograph + 0x215365: (0x8166, 0),# East Asian ideograph + 0x215366: (0x8180, 0),# East Asian ideograph + 0x225367: (0x71d1, 0),# East Asian ideograph + 0x215368: (0x817f, 0),# East Asian ideograph + 0x215369: (0x818a, 0),# East Asian ideograph + 0x21536a: (0x8188, 0),# East Asian ideograph + 0x21536b: (0x819d, 0),# East Asian ideograph + 0x21536c: (0x81a0, 0),# East Asian ideograph + 0x22536d: (0x71ca, 0),# East Asian ideograph + 0x21536e: (0x819a, 0),# East Asian ideograph + 0x21536f: (0x819c, 0),# East Asian ideograph + 0x215370: (0x81b3, 0),# East Asian ideograph + 0x275371: (0x817b, 0),# East Asian ideograph + 0x215372: (0x81a8, 0),# East Asian ideograph + 0x215373: (0x81c6, 0),# East Asian ideograph + 0x215374: (0x81ba, 0),# East Asian ideograph + 0x215375: (0x81c3, 0),# East Asian ideograph + 0x215376: (0x81c0, 0),# East Asian ideograph + 0x215377: (0x81c2, 0),# East Asian ideograph + 0x275378: (0x8113, 0),# East Asian ideograph + 0x275379: (0x80c6, 0),# East Asian ideograph + 0x27537a: (0x8138, 0),# East Asian ideograph + 0x27537b: (0x810d, 0),# East Asian ideograph + 0x21537c: (0x81cd, 0),# East Asian ideograph + 0x27537d: (0x8191, 0),# East Asian ideograph + 0x27537e: (0x814a, 0),# East Asian ideograph + 0x234156: (0x91bf, 0),# East Asian ideograph + 0x276b79: (0x523f, 0),# East Asian ideograph + 0x6f584b: (0xca0c, 0),# Korean hangul + 0x2d3b3f: (0x5c02, 0),# East Asian ideograph + 0x21313b: (0x4f43, 0),# East Asian ideograph + 0x2d615a: (0x8ec6, 0),# East Asian ideograph + 0x6f2526: (0x3161, 0),# Korean hangul + 0x276b7a: (0x523d, 0),# East Asian ideograph + 0x6f584c: (0xca0d, 0),# Korean hangul + 0x69543a: (0x57aa, 0),# East Asian ideograph + 0x232349: (0x8497, 0),# East Asian ideograph + 0x6f5279: (0xc0e5, 0),# Korean hangul + 0x274c33: (0x6bd5, 0),# East Asian ideograph + 0x213168: (0x4fc4, 0),# East Asian ideograph + 0x22234b: (0x5c8d, 0),# East Asian ideograph + 0x213f51: (0x61e3, 0),# East Asian ideograph + 0x2d3279: (0x514e, 0),# East Asian ideograph + 0x6f4e36: (0xb5b1, 0),# Korean hangul + 0x6f2471: (0x3149, 0),# Korean hangul + 0x6f584d: (0xca18, 0),# Korean hangul + 0x224674: (0x6c3f, 0),# East Asian ideograph + 0x6f4929: (0xac80, 0),# Korean hangul + 0x6f5164: (0xbdd4, 0),# Korean hangul + 0x217e21: (0x5b5b, 0),# East Asian ideograph + 0x213169: (0x4fc2, 0),# East Asian ideograph + 0x217158: (0x55cc, 0),# East Asian ideograph + 0x233967: (0x8e27, 0),# East Asian ideograph + 0x4b594a: (0x8aad, 0),# East Asian ideograph + 0x6f5158: (0xbd80, 0),# Korean hangul + 0x6f584e: (0xca4c, 0),# Korean hangul + 0x6f7721: (0xad35, 0),# Korean hangul + 0x213e33: (0x6025, 0),# East Asian ideograph + 0x295a28: (0x9e28, 0),# East Asian ideograph + 0x2d4b72: (0x7506, 0),# East Asian ideograph + 0x6f584f: (0xca4d, 0),# Korean hangul + 0x232358: (0x84b9, 0),# East Asian ideograph + 0x347431: (0x58dc, 0),# East Asian ideograph + 0x21715a: (0x55db, 0),# East Asian ideograph + 0x233969: (0x8e18, 0),# East Asian ideograph + 0x215421: (0x81da, 0),# East Asian ideograph + 0x235422: (0x9a4d, 0),# East Asian ideograph + 0x215423: (0x81e3, 0),# East Asian ideograph + 0x235424: (0x9a52, 0),# East Asian ideograph + 0x275425: (0x4e34, 0),# East Asian ideograph + 0x215426: (0x81ea, 0),# East Asian ideograph + 0x215427: (0x81ec, 0),# East Asian ideograph + 0x215428: (0x81ed, 0),# East Asian ideograph + 0x215429: (0x81f3, 0),# East Asian ideograph + 0x22542a: (0x71de, 0),# East Asian ideograph + 0x21542b: (0x81fa, 0),# East Asian ideograph + 0x21542c: (0x81fb, 0),# East Asian ideograph + 0x21542d: (0x81fc, 0),# East Asian ideograph + 0x21542e: (0x81fe, 0),# East Asian ideograph + 0x21542f: (0x8200, 0),# East Asian ideograph + 0x215430: (0x8202, 0),# East Asian ideograph + 0x215431: (0x8205, 0),# East Asian ideograph + 0x215432: (0x8207, 0),# East Asian ideograph + 0x275433: (0x5174, 0),# East Asian ideograph + 0x275434: (0x4e3e, 0),# East Asian ideograph + 0x215435: (0x820a, 0),# East Asian ideograph + 0x215436: (0x820c, 0),# East Asian ideograph + 0x215437: (0x820d, 0),# East Asian ideograph + 0x215438: (0x8210, 0),# East Asian ideograph + 0x215439: (0x8212, 0),# East Asian ideograph + 0x23543a: (0x9a6b, 0),# East Asian ideograph + 0x21543b: (0x821b, 0),# East Asian ideograph + 0x21543c: (0x821c, 0),# East Asian ideograph + 0x21543d: (0x821e, 0),# East Asian ideograph + 0x21543e: (0x821f, 0),# East Asian ideograph + 0x21543f: (0x8222, 0),# East Asian ideograph + 0x215440: (0x822a, 0),# East Asian ideograph + 0x235441: (0x9aab, 0),# East Asian ideograph + 0x215442: (0x822c, 0),# East Asian ideograph + 0x215443: (0x8228, 0),# East Asian ideograph + 0x215444: (0x8237, 0),# East Asian ideograph + 0x215445: (0x8235, 0),# East Asian ideograph + 0x215446: (0x8239, 0),# East Asian ideograph + 0x215447: (0x8236, 0),# East Asian ideograph + 0x215448: (0x8247, 0),# East Asian ideograph + 0x215449: (0x8258, 0),# East Asian ideograph + 0x21544a: (0x8259, 0),# East Asian ideograph + 0x21544b: (0x8266, 0),# East Asian ideograph + 0x21544c: (0x826e, 0),# East Asian ideograph + 0x21544d: (0x826f, 0),# East Asian ideograph + 0x21544e: (0x8271, 0),# East Asian ideograph + 0x21544f: (0x8272, 0),# East Asian ideograph + 0x215450: (0x827e, 0),# East Asian ideograph + 0x215451: (0x8292, 0),# East Asian ideograph + 0x215452: (0x828b, 0),# East Asian ideograph + 0x215453: (0x828d, 0),# East Asian ideograph + 0x215454: (0x82b3, 0),# East Asian ideograph + 0x215455: (0x829d, 0),# East Asian ideograph + 0x215456: (0x8299, 0),# East Asian ideograph + 0x215457: (0x82bd, 0),# East Asian ideograph + 0x215458: (0x82ad, 0),# East Asian ideograph + 0x215459: (0x82ac, 0),# East Asian ideograph + 0x21545a: (0x82a5, 0),# East Asian ideograph + 0x21545b: (0x829f, 0),# East Asian ideograph + 0x27545c: (0x520d, 0),# East Asian ideograph + 0x21545d: (0x82b1, 0),# East Asian ideograph + 0x21545e: (0x82b9, 0),# East Asian ideograph + 0x69545f: (0x58e5, 0),# East Asian ideograph + 0x215460: (0x82e7, 0),# East Asian ideograph + 0x215461: (0x8305, 0),# East Asian ideograph + 0x215462: (0x8309, 0),# East Asian ideograph + 0x215463: (0x82e3, 0),# East Asian ideograph + 0x215464: (0x82db, 0),# East Asian ideograph + 0x215465: (0x82e6, 0),# East Asian ideograph + 0x215466: (0x8304, 0),# East Asian ideograph + 0x215467: (0x82e5, 0),# East Asian ideograph + 0x215468: (0x8302, 0),# East Asian ideograph + 0x215469: (0x82dc, 0),# East Asian ideograph + 0x21546a: (0x82d7, 0),# East Asian ideograph + 0x21546b: (0x82f1, 0),# East Asian ideograph + 0x21546c: (0x8301, 0),# East Asian ideograph + 0x23546d: (0x9ad6, 0),# East Asian ideograph + 0x21546e: (0x82d4, 0),# East Asian ideograph + 0x21546f: (0x82d1, 0),# East Asian ideograph + 0x215470: (0x82de, 0),# East Asian ideograph + 0x215471: (0x82df, 0),# East Asian ideograph + 0x215472: (0x832b, 0),# East Asian ideograph + 0x215473: (0x8352, 0),# East Asian ideograph + 0x235474: (0x9adf, 0),# East Asian ideograph + 0x215475: (0x8338, 0),# East Asian ideograph + 0x215476: (0x8354, 0),# East Asian ideograph + 0x235477: (0x9ae2, 0),# East Asian ideograph + 0x215478: (0x8349, 0),# East Asian ideograph + 0x215479: (0x8335, 0),# East Asian ideograph + 0x21547a: (0x8334, 0),# East Asian ideograph + 0x21547b: (0x8336, 0),# East Asian ideograph + 0x21547c: (0x8331, 0),# East Asian ideograph + 0x21547d: (0x8340, 0),# East Asian ideograph + 0x21547e: (0x8317, 0),# East Asian ideograph + 0x6f5853: (0xca5d, 0),# Korean hangul + 0x295166: (0x9969, 0),# East Asian ideograph + 0x234a79: (0x9696, 0),# East Asian ideograph + 0x226450: (0x7826, 0),# East Asian ideograph + 0x6f5d73: (0xd765, 0),# Korean hangul + 0x6f4b35: (0xb014, 0),# Korean hangul + 0x2d6162: (0x9a0c, 0),# East Asian ideograph + 0x6f5872: (0xcbe7, 0),# Korean hangul + 0x21316f: (0x4fef, 0),# East Asian ideograph + 0x4b4858: (0x6e80, 0),# East Asian ideograph + 0x6f5854: (0xca61, 0),# Korean hangul + 0x222370: (0x5cd5, 0),# East Asian ideograph + 0x22467b: (0x6c62, 0),# East Asian ideograph + 0x213e39: (0x6063, 0),# East Asian ideograph + 0x6f7648: (0xe8ba, 0),# Korean hangul + 0x4b374c: (0x5662, 0),# East Asian ideograph + 0x29594f: (0x9ce2, 0),# East Asian ideograph + 0x696373: (0x7b02, 0),# East Asian ideograph + 0x295a70: (0x9e48, 0),# East Asian ideograph + 0x6f5364: (0xc22f, 0),# Korean hangul + 0x27496a: (0x70bc, 0),# East Asian ideograph + 0x6f5855: (0xca84, 0),# Korean hangul + 0x292375: (0x83b3, 0),# East Asian ideograph + 0x22467c: (0x6c4a, 0),# East Asian ideograph + 0x224e21: (0x6faa, 0),# East Asian ideograph + 0x6f4e22: (0xb541, 0),# Korean hangul + 0x6f4e23: (0xb543, 0),# Korean hangul + 0x225346: (0x719e, 0),# East Asian ideograph + 0x222379: (0x5c8d, 0),# East Asian ideograph (not in Unicode) + 0x234e24: (0x97b3, 0),# East Asian ideograph + 0x6f5856: (0xca98, 0),# Korean hangul + 0x224e25: (0x6fbf, 0),# East Asian ideograph + 0x6f527b: (0xc0ec, 0),# Korean hangul + 0x224e26: (0x6fc7, 0),# East Asian ideograph + 0x275a78: (0x8e52, 0),# East Asian ideograph + 0x274e27: (0x77eb, 0),# East Asian ideograph + 0x213172: (0x5025, 0),# East Asian ideograph + 0x6f4e28: (0xb54d, 0),# Korean hangul + 0x27574a: (0x51b2, 0),# East Asian ideograph (duplicate simplified) + 0x227e23: (0x83a6, 0),# East Asian ideograph + 0x234e29: (0x97b9, 0),# East Asian ideograph + 0x6f5857: (0xcabc, 0),# Korean hangul + 0x29516a: (0x9990, 0),# East Asian ideograph + 0x51356a: (0x8bc3, 0),# East Asian ideograph + 0x6f4e2b: (0xb55c, 0),# Korean hangul + 0x6f594d: (0xcd19, 0),# Korean hangul + 0x6f5d5c: (0xd700, 0),# Korean hangul + 0x6f4e2c: (0xb55d, 0),# Korean hangul + 0x213173: (0x5011, 0),# East Asian ideograph + 0x4b613f: (0x9a08, 0),# East Asian ideograph + 0x214e2d: (0x65ab, 0),# East Asian ideograph + 0x224e2e: (0x6f5e, 0),# East Asian ideograph + 0x6f5858: (0xcabd, 0),# Korean hangul + 0x6f546a: (0xc4f0, 0),# Korean hangul + 0x224e2f: (0x6fc8, 0),# East Asian ideograph + 0x2d5763: (0x88e1, 0),# East Asian ideograph + 0x235521: (0x9ae7, 0),# East Asian ideograph + 0x215522: (0x834f, 0),# East Asian ideograph + 0x215523: (0x8339, 0),# East Asian ideograph + 0x215524: (0x838e, 0),# East Asian ideograph + 0x215525: (0x8398, 0),# East Asian ideograph + 0x215526: (0x839e, 0),# East Asian ideograph + 0x215527: (0x8378, 0),# East Asian ideograph + 0x215528: (0x83a2, 0),# East Asian ideograph + 0x225529: (0x7225, 0),# East Asian ideograph + 0x22552a: (0x7226, 0),# East Asian ideograph + 0x21552b: (0x83ab, 0),# East Asian ideograph + 0x21552c: (0x8392, 0),# East Asian ideograph (variant of 4B552C which maps to 8392) + 0x21552d: (0x838a, 0),# East Asian ideograph + 0x21552e: (0x8393, 0),# East Asian ideograph + 0x21552f: (0x83a0, 0),# East Asian ideograph + 0x215530: (0x8389, 0),# East Asian ideograph + 0x215531: (0x8377, 0),# East Asian ideograph + 0x215532: (0x837c, 0),# East Asian ideograph + 0x215533: (0x837b, 0),# East Asian ideograph + 0x215534: (0x840d, 0),# East Asian ideograph + 0x215535: (0x83e0, 0),# East Asian ideograph + 0x215536: (0x83e9, 0),# East Asian ideograph + 0x6f5537: (0xc57d, 0),# Korean hangul + 0x215538: (0x8403, 0),# East Asian ideograph + 0x215539: (0x83c5, 0),# East Asian ideograph + 0x21553a: (0x83c1, 0),# East Asian ideograph + 0x21553b: (0x840b, 0),# East Asian ideograph + 0x21553c: (0x83ef, 0),# East Asian ideograph + 0x6f553d: (0xc58f, 0),# Korean hangul + 0x21553e: (0x83f1, 0),# East Asian ideograph + 0x21553f: (0x83bd, 0),# East Asian ideograph + 0x6f5540: (0xc595, 0),# Korean hangul + 0x235541: (0x9b05, 0),# East Asian ideograph + 0x215542: (0x840c, 0),# East Asian ideograph + 0x225543: (0x7241, 0),# East Asian ideograph + 0x215544: (0x83dc, 0),# East Asian ideograph + 0x215545: (0x83ca, 0),# East Asian ideograph + 0x215546: (0x83f2, 0),# East Asian ideograph + 0x215547: (0x840e, 0),# East Asian ideograph + 0x215548: (0x8404, 0),# East Asian ideograph + 0x215549: (0x843d, 0),# East Asian ideograph + 0x21554a: (0x8482, 0),# East Asian ideograph + 0x21554b: (0x8431, 0),# East Asian ideograph + 0x21554c: (0x8475, 0),# East Asian ideograph + 0x21554d: (0x8466, 0),# East Asian ideograph + 0x21554e: (0x8457, 0),# East Asian ideograph + 0x22554f: (0x7250, 0),# East Asian ideograph + 0x215550: (0x846c, 0),# East Asian ideograph + 0x214e38: (0x7843, 0),# East Asian ideograph + 0x215552: (0x845b, 0),# East Asian ideograph + 0x215553: (0x8477, 0),# East Asian ideograph + 0x215554: (0x843c, 0),# East Asian ideograph + 0x215555: (0x8435, 0),# East Asian ideograph + 0x225556: (0x725a, 0),# East Asian ideograph + 0x215557: (0x8463, 0),# East Asian ideograph + 0x215558: (0x8469, 0),# East Asian ideograph + 0x225559: (0x7263, 0),# East Asian ideograph + 0x21555a: (0x84b2, 0),# East Asian ideograph + 0x21555b: (0x849e, 0),# East Asian ideograph + 0x21555c: (0x84bf, 0),# East Asian ideograph + 0x21555d: (0x84c6, 0),# East Asian ideograph + 0x21555e: (0x84c4, 0),# East Asian ideograph + 0x21555f: (0x84c9, 0),# East Asian ideograph + 0x215560: (0x849c, 0),# East Asian ideograph + 0x215561: (0x84cb, 0),# East Asian ideograph + 0x215562: (0x84b8, 0),# East Asian ideograph + 0x275563: (0x836a, 0),# East Asian ideograph + 0x275564: (0x82ce, 0),# East Asian ideograph + 0x215565: (0x84d3, 0),# East Asian ideograph + 0x225566: (0x7276, 0),# East Asian ideograph + 0x215567: (0x84bc, 0),# East Asian ideograph + 0x225568: (0x7277, 0),# East Asian ideograph + 0x215569: (0x84ff, 0),# East Asian ideograph + 0x21556a: (0x8517, 0),# East Asian ideograph + 0x22556b: (0x727e, 0),# East Asian ideograph + 0x21556c: (0x84ee, 0),# East Asian ideograph + 0x21556d: (0x852c, 0),# East Asian ideograph + 0x27556e: (0x836b, 0),# East Asian ideograph + 0x21556f: (0x8513, 0),# East Asian ideograph + 0x6f5570: (0xc61b, 0),# Korean hangul + 0x215571: (0x8523, 0),# East Asian ideograph + 0x215572: (0x8521, 0),# East Asian ideograph + 0x275573: (0x535c, 0),# East Asian ideograph + 0x225574: (0x7289, 0),# East Asian ideograph + 0x215575: (0x8525, 0),# East Asian ideograph + 0x235576: (0x9b2f, 0),# East Asian ideograph + 0x215577: (0x854a, 0),# East Asian ideograph + 0x215578: (0x8559, 0),# East Asian ideograph + 0x215579: (0x8548, 0),# East Asian ideograph + 0x21557a: (0x8568, 0),# East Asian ideograph + 0x21557b: (0x8543, 0),# East Asian ideograph + 0x21557c: (0x856a, 0),# East Asian ideograph + 0x21557d: (0x8549, 0),# East Asian ideograph + 0x21557e: (0x8584, 0),# East Asian ideograph + 0x224e40: (0x6fa5, 0),# East Asian ideograph + 0x224e41: (0x6fb0, 0),# East Asian ideograph + 0x4b6048: (0x981a, 0),# East Asian ideograph + 0x224e42: (0x6fae, 0),# East Asian ideograph + 0x2f585c: (0x9c51, 0),# Unrelated variant of EACC 235945 which maps to 9C51 + 0x224e43: (0x6fd9, 0),# East Asian ideograph + 0x276260: (0x4e48, 0),# East Asian ideograph + 0x21393f: (0x5969, 0),# East Asian ideograph + 0x224e44: (0x6fda, 0),# East Asian ideograph + 0x274e45: (0x7855, 0),# East Asian ideograph + 0x6f5b3c: (0xd1b0, 0),# Korean hangul + 0x273422: (0x5218, 0),# East Asian ideograph + 0x6f4e46: (0xb664, 0),# Korean hangul + 0x286b7c: (0x7b15, 0),# East Asian ideograph + 0x22316c: (0x636c, 0),# East Asian ideograph + 0x6f4e47: (0xb69c, 0),# Korean hangul + 0x6f585d: (0xcad1, 0),# Korean hangul + 0x295170: (0x998d, 0),# East Asian ideograph + 0x274e49: (0x786e, 0),# East Asian ideograph + 0x6f4c4c: (0xb220, 0),# Korean hangul + 0x6f4e4a: (0xb6ab, 0),# Korean hangul + 0x213179: (0x5006, 0),# East Asian ideograph + 0x234e4b: (0x97ce, 0),# East Asian ideograph + 0x2d753a: (0x9654, 0),# East Asian ideograph + 0x2d5321: (0x7c9b, 0),# East Asian ideograph + 0x274e4c: (0x7801, 0),# East Asian ideograph + 0x3f3078: (0x5023, 0),# East Asian ideograph + 0x6f585e: (0xcad2, 0),# Korean hangul + 0x6f4e4d: (0xb6f0, 0),# Korean hangul + 0x234e4e: (0x97d0, 0),# East Asian ideograph + 0x4b552c: (0x8392, 0),# East Asian ideograph + 0x29546d: (0x9acb, 0),# East Asian ideograph + 0x333564: (0x5415, 0),# East Asian ideograph + 0x275154: (0x7ec3, 0),# East Asian ideograph + 0x224e50: (0x6fd4, 0),# East Asian ideograph + 0x213930: (0x5949, 0),# East Asian ideograph + 0x234e51: (0x97d4, 0),# East Asian ideograph + 0x6f585f: (0xcad3, 0),# Korean hangul + 0x295172: (0x9994, 0),# East Asian ideograph + 0x21605d: (0x98b1, 0),# East Asian ideograph + 0x213e44: (0x606c, 0),# East Asian ideograph + 0x274e53: (0x7816, 0),# East Asian ideograph + 0x234642: (0x93a7, 0),# East Asian ideograph + 0x234e54: (0x97d9, 0),# East Asian ideograph + 0x69245c: (0x307c, 0),# Hiragana letter BO + 0x6f4e55: (0xb72f, 0),# Korean hangul + 0x224e56: (0x6fe9, 0),# East Asian ideograph + 0x6f5860: (0xcad8, 0),# Korean hangul + 0x224e57: (0x6ff8, 0),# East Asian ideograph + 0x4b3758: (0x56a5, 0),# East Asian ideograph (variant of 213758 which maps to 56A5) + 0x274e58: (0x77f6, 0),# East Asian ideograph + 0x214e59: (0x790e, 0),# East Asian ideograph + 0x274e5a: (0x788d, 0),# East Asian ideograph + 0x2d5c40: (0x5fa8, 0),# East Asian ideograph + 0x215621: (0x85aa, 0),# East Asian ideograph + 0x215622: (0x856d, 0),# East Asian ideograph + 0x235623: (0x9b37, 0),# East Asian ideograph + 0x275624: (0x59dc, 0),# East Asian ideograph + 0x215625: (0x857e, 0),# East Asian ideograph + 0x215626: (0x8594, 0),# East Asian ideograph + 0x215627: (0x859c, 0),# East Asian ideograph + 0x225628: (0x728f, 0),# East Asian ideograph + 0x215629: (0x85cd, 0),# East Asian ideograph (variant of 4B5629 which maps to 85CD) + 0x27562a: (0x8428, 0),# East Asian ideograph + 0x21562b: (0x85cf, 0),# East Asian ideograph + 0x21562c: (0x85af, 0),# East Asian ideograph + 0x21562d: (0x85d0, 0),# East Asian ideograph + 0x27562e: (0x501f, 0),# East Asian ideograph + 0x214e5d: (0x792a, 0),# East Asian ideograph + 0x215630: (0x85e9, 0),# East Asian ideograph + 0x215631: (0x85dd, 0),# East Asian ideograph + 0x275632: (0x85ae, 0),# East Asian ideograph + 0x215633: (0x85e4, 0),# East Asian ideograph + 0x215634: (0x85d5, 0),# East Asian ideograph + 0x224e5e: (0x6fee, 0),# East Asian ideograph + 0x215636: (0x85fb, 0),# East Asian ideograph + 0x215637: (0x85f9, 0),# East Asian ideograph + 0x215638: (0x8611, 0),# East Asian ideograph + 0x215639: (0x85fa, 0),# East Asian ideograph + 0x27563a: (0x82a6, 0),# East Asian ideograph + 0x27563b: (0x82f9, 0),# East Asian ideograph + 0x27563c: (0x82cf, 0),# East Asian ideograph + 0x27563d: (0x8574, 0),# East Asian ideograph + 0x27563e: (0x5170, 0),# East Asian ideograph + 0x21563f: (0x8617, 0),# East Asian ideograph + 0x215640: (0x861a, 0),# East Asian ideograph + 0x215641: (0x8638, 0),# East Asian ideograph + 0x275642: (0x841d, 0),# East Asian ideograph + 0x215643: (0x864e, 0),# East Asian ideograph + 0x215644: (0x8650, 0),# East Asian ideograph + 0x215645: (0x8654, 0),# East Asian ideograph + 0x215646: (0x5f6a, 0),# East Asian ideograph + 0x215647: (0x8655, 0),# East Asian ideograph + 0x275648: (0x864f, 0),# East Asian ideograph + 0x215649: (0x865b, 0),# East Asian ideograph + 0x27564a: (0x53f7, 0),# East Asian ideograph + 0x21564b: (0x865e, 0),# East Asian ideograph + 0x22564c: (0x72ab, 0),# East Asian ideograph + 0x224e62: (0x6ff0, 0),# East Asian ideograph + 0x22564e: (0x72b0, 0),# East Asian ideograph + 0x21564f: (0x8679, 0),# East Asian ideograph + 0x215650: (0x86a9, 0),# East Asian ideograph + 0x215651: (0x86aa, 0),# East Asian ideograph + 0x215652: (0x868a, 0),# East Asian ideograph + 0x215653: (0x8693, 0),# East Asian ideograph + 0x215654: (0x86a4, 0),# East Asian ideograph + 0x215655: (0x868c, 0),# East Asian ideograph + 0x215656: (0x86a3, 0),# East Asian ideograph + 0x215657: (0x86c0, 0),# East Asian ideograph + 0x215658: (0x86c7, 0),# East Asian ideograph + 0x215659: (0x86b5, 0),# East Asian ideograph + 0x27565a: (0x65e6, 0),# East Asian ideograph + 0x21565b: (0x86b6, 0),# East Asian ideograph + 0x21565c: (0x86c4, 0),# East Asian ideograph + 0x21565d: (0x86c6, 0),# East Asian ideograph + 0x21565e: (0x86b1, 0),# East Asian ideograph + 0x21565f: (0x86af, 0),# East Asian ideograph + 0x225660: (0x72d6, 0),# East Asian ideograph + 0x215661: (0x86d9, 0),# East Asian ideograph + 0x215662: (0x86ed, 0),# East Asian ideograph + 0x215663: (0x86d4, 0),# East Asian ideograph + 0x225664: (0x72d2, 0),# East Asian ideograph + 0x224e66: (0x7005, 0),# East Asian ideograph + 0x215666: (0x86fb, 0),# East Asian ideograph + 0x225667: (0x72c9, 0),# East Asian ideograph + 0x215668: (0x8707, 0),# East Asian ideograph + 0x215669: (0x8703, 0),# East Asian ideograph + 0x21566a: (0x8708, 0),# East Asian ideograph + 0x214e67: (0x7955, 0),# East Asian ideograph + 0x21566c: (0x86fe, 0),# East Asian ideograph + 0x21566d: (0x8713, 0),# East Asian ideograph + 0x21566e: (0x8702, 0),# East Asian ideograph + 0x21566f: (0x871c, 0),# East Asian ideograph + 0x215670: (0x873f, 0),# East Asian ideograph + 0x215671: (0x873b, 0),# East Asian ideograph + 0x215672: (0x8722, 0),# East Asian ideograph + 0x225673: (0x72e8, 0),# East Asian ideograph + 0x215674: (0x8734, 0),# East Asian ideograph + 0x215675: (0x8718, 0),# East Asian ideograph + 0x215676: (0x8755, 0),# East Asian ideograph + 0x215677: (0x8760, 0),# East Asian ideograph + 0x215678: (0x8776, 0),# East Asian ideograph + 0x225679: (0x72e5, 0),# East Asian ideograph + 0x27567a: (0x867e, 0),# East Asian ideograph + 0x21567b: (0x8778, 0),# East Asian ideograph + 0x21567c: (0x8768, 0),# East Asian ideograph + 0x21567d: (0x874c, 0),# East Asian ideograph + 0x22567e: (0x72fa, 0),# East Asian ideograph + 0x6f4e6b: (0xb790, 0),# Korean hangul + 0x6f5421: (0xc2b7, 0),# Korean hangul + 0x234e6c: (0x97f5, 0),# East Asian ideograph + 0x6f5339: (0xc151, 0),# Korean hangul + 0x6f4e6d: (0xb797, 0),# Korean hangul + 0x69245d: (0x307d, 0),# Hiragana letter PO + 0x6f4e6e: (0xb798, 0),# Korean hangul + 0x274e6f: (0x53ea, 0),# East Asian ideograph (duplicate simplified) + 0x6f5865: (0xcb20, 0),# Korean hangul + 0x6f4e70: (0xb79c, 0),# Korean hangul + 0x6f5422: (0xc2b9, 0),# Korean hangul + 0x6f5a2a: (0xcef7, 0),# Korean hangul + 0x6f4e71: (0xb7a0, 0),# Korean hangul + 0x234648: (0x939a, 0),# East Asian ideograph + 0x213441: (0x5305, 0),# East Asian ideograph + 0x224e72: (0x7026, 0),# East Asian ideograph + 0x214e73: (0x797a, 0),# East Asian ideograph + 0x286c58: (0x7ba7, 0),# East Asian ideograph + 0x6f5633: (0xc68d, 0),# Korean hangul + 0x6f4e3b: (0xb5bc, 0),# Korean hangul + 0x6f5866: (0xcb21, 0),# Korean hangul + 0x395179: (0x7d75, 0),# East Asian ideograph + 0x6f4e76: (0xb7ad, 0),# Korean hangul + 0x213921: (0x5920, 0),# East Asian ideograph + 0x274e77: (0x7978, 0),# East Asian ideograph + 0x27785e: (0x5786, 0),# East Asian ideograph + 0x213922: (0x5924, 0),# East Asian ideograph + 0x274e78: (0x796f, 0),# East Asian ideograph + 0x213923: (0x5925, 0),# East Asian ideograph + 0x234e79: (0x9807, 0),# East Asian ideograph + 0x273924: (0x68a6, 0),# East Asian ideograph + 0x6f5867: (0xcb41, 0),# Korean hangul + 0x213f37: (0x6155, 0),# East Asian ideograph + 0x6f4e7a: (0xb7ec, 0),# Korean hangul + 0x6f4d61: (0xb4d0, 0),# Korean hangul + 0x226464: (0x7876, 0),# East Asian ideograph + 0x274e7b: (0x7985, 0),# East Asian ideograph + 0x69482b: (0x7560, 0),# East Asian ideograph + 0x274e7c: (0x793c, 0),# East Asian ideograph + 0x4b4f3c: (0x79f0, 0),# East Asian ideograph (variant of 274F3C which maps to 79F0) + 0x213927: (0x592b, 0),# East Asian ideograph + 0x274e7d: (0x7977, 0),# East Asian ideograph + 0x2d5323: (0x5b8d, 0),# East Asian ideograph + 0x234e7e: (0x980d, 0),# East Asian ideograph + 0x2d3929: (0x6b80, 0),# East Asian ideograph + 0x213376: (0x5274, 0),# East Asian ideograph + 0x6f5868: (0xcb48, 0),# Korean hangul + 0x6f5433: (0xc300, 0),# Korean hangul + 0x216066: (0x98e7, 0),# East Asian ideograph + 0x21392b: (0x5931, 0),# East Asian ideograph + 0x3f304c: (0x5e79, 0),# East Asian ideograph + 0x2e3a26: (0x661d, 0),# East Asian ideograph + 0x225359: (0x71b4, 0),# East Asian ideograph + 0x21392e: (0x593e, 0),# East Asian ideograph + 0x6f5869: (0xcb49, 0),# Korean hangul + 0x396b33: (0x5259, 0),# East Asian ideograph (not in Unicode) + 0x216067: (0x98e9, 0),# East Asian ideograph + 0x235721: (0x9b83, 0),# East Asian ideograph + 0x215722: (0x8783, 0),# East Asian ideograph + 0x215723: (0x8782, 0),# East Asian ideograph + 0x275724: (0x8424, 0),# East Asian ideograph + 0x225725: (0x72fe, 0),# East Asian ideograph + 0x215726: (0x878d, 0),# East Asian ideograph + 0x215727: (0x879f, 0),# East Asian ideograph + 0x215728: (0x87d1, 0),# East Asian ideograph + 0x215729: (0x87c0, 0),# East Asian ideograph + 0x21572a: (0x87ab, 0),# East Asian ideograph + 0x23572b: (0x9b90, 0),# East Asian ideograph + 0x27572c: (0x877c, 0),# East Asian ideograph + 0x22572d: (0x7301, 0),# East Asian ideograph + 0x22572e: (0x72f3, 0),# East Asian ideograph + 0x23572f: (0x9b97, 0),# East Asian ideograph + 0x215730: (0x87c6, 0),# East Asian ideograph + 0x215731: (0x87cb, 0),# East Asian ideograph + 0x215732: (0x87ef, 0),# East Asian ideograph + 0x215733: (0x87f2, 0),# East Asian ideograph + 0x215734: (0x87ec, 0),# East Asian ideograph + 0x225735: (0x730b, 0),# East Asian ideograph + 0x225736: (0x7317, 0),# East Asian ideograph + 0x215737: (0x880d, 0),# East Asian ideograph + 0x215738: (0x87f9, 0),# East Asian ideograph + 0x215739: (0x8814, 0),# East Asian ideograph + 0x21573a: (0x8815, 0),# East Asian ideograph + 0x22573b: (0x7307, 0),# East Asian ideograph + 0x23573c: (0x9bad, 0),# East Asian ideograph + 0x23573d: (0x9b9a, 0),# East Asian ideograph + 0x22573e: (0x7318, 0),# East Asian ideograph + 0x27573f: (0x86ca, 0),# East Asian ideograph + 0x215740: (0x8839, 0),# East Asian ideograph + 0x275741: (0x8695, 0),# East Asian ideograph + 0x215742: (0x883b, 0),# East Asian ideograph + 0x235743: (0x9b99, 0),# East Asian ideograph + 0x215744: (0x884c, 0),# East Asian ideograph + 0x215745: (0x884d, 0),# East Asian ideograph + 0x225746: (0x7331, 0),# East Asian ideograph + 0x215747: (0x8857, 0),# East Asian ideograph + 0x215748: (0x8859, 0),# East Asian ideograph + 0x225749: (0x7338, 0),# East Asian ideograph + 0x22574a: (0x7322, 0),# East Asian ideograph + 0x21574b: (0x8861, 0),# East Asian ideograph + 0x22574c: (0x7332, 0),# East Asian ideograph + 0x22574d: (0x732c, 0),# East Asian ideograph + 0x22574e: (0x7327, 0),# East Asian ideograph + 0x22574f: (0x732b, 0),# East Asian ideograph + 0x215750: (0x886b, 0),# East Asian ideograph + 0x215751: (0x8882, 0),# East Asian ideograph + 0x225752: (0x732f, 0),# East Asian ideograph + 0x215753: (0x8870, 0),# East Asian ideograph + 0x215754: (0x8877, 0),# East Asian ideograph + 0x225755: (0x7328, 0),# East Asian ideograph + 0x235756: (0x9bc7, 0),# East Asian ideograph + 0x215757: (0x8892, 0),# East Asian ideograph + 0x215758: (0x8896, 0),# East Asian ideograph + 0x235759: (0x9bd2, 0),# East Asian ideograph + 0x22575a: (0x7347, 0),# East Asian ideograph + 0x22575b: (0x7348, 0),# East Asian ideograph + 0x22575c: (0x7349, 0),# East Asian ideograph + 0x23393a: (0x8de6, 0),# East Asian ideograph + 0x21575e: (0x88b1, 0),# East Asian ideograph + 0x23575f: (0x9bc1, 0),# East Asian ideograph + 0x215760: (0x88d9, 0),# East Asian ideograph + 0x215761: (0x88d8, 0),# East Asian ideograph + 0x215762: (0x88dc, 0),# East Asian ideograph + 0x215763: (0x88cf, 0),# East Asian ideograph + 0x215764: (0x88d4, 0),# East Asian ideograph + 0x225765: (0x7340, 0),# East Asian ideograph + 0x215766: (0x88d5, 0),# East Asian ideograph + 0x215767: (0x8902, 0),# East Asian ideograph + 0x225768: (0x734d, 0),# East Asian ideograph + 0x215769: (0x88f8, 0),# East Asian ideograph + 0x21576a: (0x88f9, 0),# East Asian ideograph + 0x21576b: (0x88f4, 0),# East Asian ideograph + 0x23576c: (0x9bd3, 0),# East Asian ideograph + 0x21576d: (0x88e8, 0),# East Asian ideograph + 0x21576e: (0x891a, 0),# East Asian ideograph + 0x21576f: (0x8910, 0),# East Asian ideograph + 0x6f5770: (0xc906, 0),# Korean hangul + 0x215771: (0x8913, 0),# East Asian ideograph + 0x235772: (0x9bc8, 0),# East Asian ideograph + 0x215773: (0x8932, 0),# East Asian ideograph + 0x225774: (0x735d, 0),# East Asian ideograph + 0x215775: (0x8925, 0),# East Asian ideograph + 0x215776: (0x892b, 0),# East Asian ideograph + 0x235777: (0x9bd7, 0),# East Asian ideograph + 0x215778: (0x8936, 0),# East Asian ideograph + 0x225779: (0x7360, 0),# East Asian ideograph + 0x23577a: (0x9bd6, 0),# East Asian ideograph + 0x21577b: (0x895f, 0),# East Asian ideograph + 0x23577c: (0x9beb, 0),# East Asian ideograph + 0x21577d: (0x8956, 0),# East Asian ideograph + 0x22577e: (0x7362, 0),# East Asian ideograph + 0x273940: (0x593a, 0),# East Asian ideograph + 0x223941: (0x66aa, 0),# East Asian ideograph + 0x232b33: (0x874d, 0),# East Asian ideograph + 0x2d506f: (0x7cfa, 0),# East Asian ideograph + 0x6f586d: (0xcb5d, 0),# Korean hangul + 0x6f7643: (0xe8b5, 0),# Korean hangul + 0x213943: (0x5974, 0),# East Asian ideograph + 0x213944: (0x5976, 0),# East Asian ideograph + 0x4b3322: (0x5168, 0),# East Asian ideograph (variant of 213322 which maps to 5168) + 0x27564c: (0x4e8f, 0),# East Asian ideograph + 0x4b5e3d: (0x9421, 0),# East Asian ideograph + 0x213946: (0x5983, 0),# East Asian ideograph + 0x6f5365: (0xc231, 0),# Korean hangul + 0x6f516d: (0xbe44, 0),# Korean hangul + 0x213947: (0x5978, 0),# East Asian ideograph + 0x2d4c2d: (0x756e, 0),# East Asian ideograph + 0x6f542b: (0xc2ef, 0),# Korean hangul + 0x213e53: (0x6089, 0),# East Asian ideograph + 0x213949: (0x5979, 0),# East Asian ideograph + 0x21794b: (0x595c, 0),# East Asian ideograph + 0x454e75: (0x7984, 0),# East Asian ideograph + 0x213c7d: (0x5ec2, 0),# East Asian ideograph + 0x6f586f: (0xcbb8, 0),# Korean hangul + 0x2d394d: (0x59ac, 0),# East Asian ideograph + 0x217e43: (0x5b93, 0),# East Asian ideograph + 0x22394e: (0x66c8, 0),# East Asian ideograph + 0x4b3324: (0x634c, 0),# East Asian ideograph (variant of 2D3324 which maps to 634C) + 0x21394f: (0x59a4, 0),# East Asian ideograph + 0x213f58: (0x61fa, 0),# East Asian ideograph + 0x213950: (0x59a3, 0),# East Asian ideograph + 0x6f4e3d: (0xb5c4, 0),# Korean hangul + 0x213951: (0x5993, 0),# East Asian ideograph + 0x2f5870: (0x9c1b, 0),# East Asian ideograph + 0x6f7646: (0xe8b8, 0),# Korean hangul + 0x213952: (0x599e, 0),# East Asian ideograph + 0x213e55: (0x60a0, 0),# East Asian ideograph + 0x4b3768: (0x56d8, 0),# East Asian ideograph + 0x213953: (0x599d, 0),# East Asian ideograph + 0x233954: (0x8e23, 0),# East Asian ideograph + 0x213955: (0x59a5, 0),# East Asian ideograph + 0x335760: (0x88e0, 0),# East Asian ideograph + 0x2d3956: (0x59d9, 0),# East Asian ideograph + 0x6f4f22: (0xb7ff, 0),# Korean hangul + 0x6f5871: (0xcbe4, 0),# Korean hangul + 0x6f7647: (0xe8b9, 0),# Korean hangul + 0x213957: (0x5996, 0),# East Asian ideograph + 0x213958: (0x59be, 0),# East Asian ideograph + 0x333642: (0x8a92, 0),# East Asian ideograph + 0x2d3f67: (0x621e, 0),# East Asian ideograph + 0x6f5878: (0xcc1d, 0),# Korean hangul + 0x4c7959: (0x817d, 0),# East Asian ideograph + 0x273437: (0x80dc, 0),# East Asian ideograph + 0x214f63: (0x7ac7, 0),# East Asian ideograph + 0x4b524e: (0x7fce, 0),# East Asian ideograph + 0x21395a: (0x59ae, 0),# East Asian ideograph + 0x3a4034: (0x6855, 0),# East Asian ideograph + 0x275821: (0x889c, 0),# East Asian ideograph + 0x275822: (0x886c, 0),# East Asian ideograph + 0x215823: (0x8972, 0),# East Asian ideograph + 0x215824: (0x897f, 0),# East Asian ideograph + 0x225825: (0x7367, 0),# East Asian ideograph + 0x215826: (0x8983, 0),# East Asian ideograph + 0x235827: (0x9be4, 0),# East Asian ideograph + 0x275828: (0x89c1, 0),# East Asian ideograph + 0x275829: (0x89c4, 0),# East Asian ideograph + 0x27582a: (0x89c5, 0),# East Asian ideograph + 0x27582b: (0x89c6, 0),# East Asian ideograph + 0x27582c: (0x4eb2, 0),# East Asian ideograph + 0x27582d: (0x89ce, 0),# East Asian ideograph + 0x21582e: (0x89ac, 0),# East Asian ideograph + 0x27582f: (0x89d0, 0),# East Asian ideograph + 0x215830: (0x89ba, 0),# East Asian ideograph + 0x275831: (0x89c8, 0),# East Asian ideograph + 0x215832: (0x89c0, 0),# East Asian ideograph + 0x215833: (0x89d2, 0),# East Asian ideograph + 0x235834: (0x9bd4, 0),# East Asian ideograph + 0x215835: (0x89f4, 0),# East Asian ideograph + 0x225836: (0x737c, 0),# East Asian ideograph + 0x215837: (0x8a00, 0),# East Asian ideograph + 0x215838: (0x8a08, 0),# East Asian ideograph + 0x215839: (0x8a02, 0),# East Asian ideograph + 0x21583a: (0x8a03, 0),# East Asian ideograph + 0x21583b: (0x8a10, 0),# East Asian ideograph + 0x21583c: (0x8a18, 0),# East Asian ideograph + 0x21583d: (0x8a0e, 0),# East Asian ideograph + 0x23583e: (0x9bff, 0),# East Asian ideograph + 0x21583f: (0x8a15, 0),# East Asian ideograph + 0x215840: (0x8a0a, 0),# East Asian ideograph + 0x275841: (0x8bab, 0),# East Asian ideograph + 0x225842: (0x738e, 0),# East Asian ideograph + 0x235843: (0x9c06, 0),# East Asian ideograph + 0x235844: (0x9c15, 0),# East Asian ideograph + 0x215845: (0x8a23, 0),# East Asian ideograph + 0x275846: (0x8bb6, 0),# East Asian ideograph + 0x225847: (0x7392, 0),# East Asian ideograph + 0x215848: (0x8a31, 0),# East Asian ideograph + 0x275849: (0x8bbe, 0),# East Asian ideograph + 0x27584a: (0x8bb9, 0),# East Asian ideograph + 0x27584b: (0x8bbc, 0),# East Asian ideograph + 0x27584c: (0x6ce8, 0),# East Asian ideograph + 0x21584d: (0x8a60, 0),# East Asian ideograph + 0x27584e: (0x8bc4, 0),# East Asian ideograph + 0x27584f: (0x8bcd, 0),# East Asian ideograph + 0x6f5850: (0xca50, 0),# Korean hangul + 0x215851: (0x8a41, 0),# East Asian ideograph + 0x235852: (0x9c02, 0),# East Asian ideograph + 0x215853: (0x8a5b, 0),# East Asian ideograph + 0x235854: (0x9c10, 0),# East Asian ideograph + 0x215855: (0x8a46, 0),# East Asian ideograph + 0x215856: (0x8a34, 0),# East Asian ideograph + 0x275857: (0x8bca, 0),# East Asian ideograph + 0x275858: (0x8be7, 0),# East Asian ideograph + 0x215859: (0x8a72, 0),# East Asian ideograph + 0x21585a: (0x8a73, 0),# East Asian ideograph + 0x21585b: (0x8a66, 0),# East Asian ideograph + 0x27585c: (0x8bd7, 0),# East Asian ideograph + 0x27585d: (0x8bd8, 0),# East Asian ideograph + 0x27585e: (0x8be3, 0),# East Asian ideograph + 0x27585f: (0x8bd9, 0),# East Asian ideograph + 0x275860: (0x8bda, 0),# East Asian ideograph + 0x215861: (0x8a87, 0),# East Asian ideograph + 0x275862: (0x8bdb, 0),# East Asian ideograph + 0x215863: (0x8a6d, 0),# East Asian ideograph + 0x215864: (0x8a79, 0),# East Asian ideograph + 0x275865: (0x8be2, 0),# East Asian ideograph + 0x275866: (0x8bdd, 0),# East Asian ideograph + 0x275867: (0x8be0, 0),# East Asian ideograph + 0x215868: (0x8a6c, 0),# East Asian ideograph + 0x235869: (0x9c2f, 0),# East Asian ideograph + 0x22586a: (0x73c2, 0),# East Asian ideograph + 0x22586b: (0x73d0, 0),# East Asian ideograph + 0x21586c: (0x8a9e, 0),# East Asian ideograph + 0x21586d: (0x8a8c, 0),# East Asian ideograph + 0x21586e: (0x8a93, 0),# East Asian ideograph + 0x22586f: (0x73bf, 0),# East Asian ideograph + 0x275870: (0x8ba4, 0),# East Asian ideograph + 0x275871: (0x8bef, 0),# East Asian ideograph + 0x275872: (0x8bf2, 0),# East Asian ideograph + 0x275873: (0x8bf0, 0),# East Asian ideograph + 0x275874: (0x8bf1, 0),# East Asian ideograph + 0x275875: (0x8bf3, 0),# East Asian ideograph + 0x215876: (0x8abc, 0),# East Asian ideograph + 0x275877: (0x8c06, 0),# East Asian ideograph + 0x275878: (0x8c05, 0),# East Asian ideograph + 0x215879: (0x8ac7, 0),# East Asian ideograph + 0x21587a: (0x8acb, 0),# East Asian ideograph (variant of 4B587A which maps to 8ACB) + 0x27587b: (0x8bf8, 0),# East Asian ideograph + 0x27587c: (0x8bfe, 0),# East Asian ideograph + 0x27587d: (0x8c03, 0),# East Asian ideograph + 0x23587e: (0x9c46, 0),# East Asian ideograph + 0x6f5875: (0xcc10, 0),# Korean hangul + 0x6f764b: (0xe8bd, 0),# Korean hangul + 0x21796b: (0x5998, 0),# East Asian ideograph + 0x6f4b62: (0xb0bb, 0),# Korean hangul + 0x293c5a: (0x8f73, 0),# East Asian ideograph + 0x2d396e: (0x4f84, 0),# East Asian ideograph + 0x28732d: (0x7f2f, 0),# East Asian ideograph + 0x4b6145: (0x9a12, 0),# East Asian ideograph + 0x21396f: (0x5a01, 0),# East Asian ideograph + 0x2d4c35: (0x7567, 0),# East Asian ideograph + 0x2d3970: (0x5a63, 0),# East Asian ideograph + 0x213971: (0x59e6, 0),# East Asian ideograph + 0x6f5879: (0xcc21, 0),# Korean hangul + 0x213972: (0x59da, 0),# East Asian ideograph + 0x213973: (0x5a11, 0),# East Asian ideograph + 0x2d3974: (0x5b43, 0),# East Asian ideograph + 0x6f5877: (0xcc1c, 0),# Korean hangul + 0x6f764d: (0xe8bf, 0),# Korean hangul + 0x6f5434: (0xc308, 0),# Korean hangul + 0x213e5c: (0x60b6, 0),# East Asian ideograph + 0x4b376f: (0x56fd, 0),# East Asian ideograph + 0x213976: (0x5a1c, 0),# East Asian ideograph + 0x692421: (0x3041, 0),# Hiragana letter small A + 0x213977: (0x5a13, 0),# East Asian ideograph + 0x2d5773: (0x7d5d, 0),# East Asian ideograph + 0x213978: (0x59ec, 0),# East Asian ideograph + 0x33354e: (0x608b, 0),# East Asian ideograph + 0x213979: (0x5a20, 0),# East Asian ideograph + 0x216424: (0x4e0f, 0),# East Asian ideograph + 0x6f764e: (0xe8c0, 0),# Korean hangul + 0x6f535c: (0xc219, 0),# Korean hangul + 0x213e5d: (0x60d1, 0),# East Asian ideograph + 0x2d397b: (0x5a31, 0),# East Asian ideograph + 0x2d3f6e: (0x6226, 0),# East Asian ideograph + 0x21397c: (0x5a0c, 0),# East Asian ideograph + 0x692427: (0x3047, 0),# Hiragana letter small E + 0x6f5841: (0xc9ef, 0),# Korean hangul + 0x22797d: (0x81a6, 0),# East Asian ideograph + 0x692428: (0x3048, 0),# Hiragana letter E + 0x21397e: (0x5a25, 0),# East Asian ideograph + 0x222429: (0x5cdd, 0),# East Asian ideograph + 0x6f764f: (0xe8c1, 0),# Korean hangul + 0x6f5436: (0xc30b, 0),# Korean hangul + 0x213e5e: (0x60b5, 0),# East Asian ideograph + 0x33304c: (0x4e79, 0),# East Asian ideograph + 0x215c34: (0x904b, 0),# East Asian ideograph + 0x2d3f6f: (0x622f, 0),# East Asian ideograph + 0x27742e: (0x56f5, 0),# East Asian ideograph + 0x216d41: (0x534c, 0),# East Asian ideograph + 0x6f587a: (0xcc22, 0),# Korean hangul + 0x6f7650: (0xe8c2, 0),# Korean hangul + 0x6f5437: (0xc30c, 0),# Korean hangul + 0x69242f: (0x304f, 0),# Hiragana letter KU + 0x4b3772: (0x5186, 0),# East Asian ideograph + 0x4b5631: (0x82b8, 0),# East Asian ideograph + 0x225921: (0x73d3, 0),# East Asian ideograph + 0x215922: (0x8ab0, 0),# East Asian ideograph + 0x215923: (0x8a95, 0),# East Asian ideograph + 0x215924: (0x8ad6, 0),# East Asian ideograph + 0x275925: (0x8c1b, 0),# East Asian ideograph + 0x235926: (0x9c44, 0),# East Asian ideograph + 0x215927: (0x8aeb, 0),# East Asian ideograph + 0x225928: (0x73e5, 0),# East Asian ideograph + 0x235929: (0x9c39, 0),# East Asian ideograph + 0x22592a: (0x73d9, 0),# East Asian ideograph + 0x22592b: (0x73ef, 0),# East Asian ideograph + 0x21592c: (0x8b01, 0),# East Asian ideograph (variant of 2D592C which maps to 8B01) + 0x21592d: (0x8b02, 0),# East Asian ideograph + 0x21592e: (0x8afe, 0),# East Asian ideograph + 0x27592f: (0x8bbd, 0),# East Asian ideograph + 0x235930: (0x9c47, 0),# East Asian ideograph + 0x215931: (0x8b17, 0),# East Asian ideograph + 0x225932: (0x73d6, 0),# East Asian ideograph + 0x215933: (0x8b0e, 0),# East Asian ideograph + 0x235934: (0x9c37, 0),# East Asian ideograph + 0x225935: (0x73bc, 0),# East Asian ideograph + 0x215936: (0x8b21, 0),# East Asian ideograph + 0x215937: (0x8b04, 0),# East Asian ideograph + 0x235938: (0x9c52, 0),# East Asian ideograph + 0x275939: (0x8c28, 0),# East Asian ideograph + 0x22593a: (0x73de, 0),# East Asian ideograph + 0x23593b: (0x9c58, 0),# East Asian ideograph + 0x22593c: (0x73e6, 0),# East Asian ideograph + 0x21593d: (0x8b5c, 0),# East Asian ideograph + 0x21593e: (0x8b4e, 0),# East Asian ideograph + 0x21593f: (0x8b49, 0),# East Asian ideograph + 0x275940: (0x8c2d, 0),# East Asian ideograph + 0x215941: (0x8b41, 0),# East Asian ideograph + 0x275942: (0x8ba5, 0),# East Asian ideograph + 0x215943: (0x8b70, 0),# East Asian ideograph + 0x215944: (0x8b6c, 0),# East Asian ideograph + 0x225945: (0x73f6, 0),# East Asian ideograph + 0x215946: (0x8b6f, 0),# East Asian ideograph + 0x225947: (0x73fa, 0),# East Asian ideograph + 0x275948: (0x62a4, 0),# East Asian ideograph + 0x215949: (0x8b7d, 0),# East Asian ideograph + 0x27594a: (0x8bfb, 0),# East Asian ideograph + 0x21594b: (0x8b8a, 0),# East Asian ideograph + 0x27594c: (0x8ba9, 0),# East Asian ideograph + 0x21594d: (0x8b96, 0),# East Asian ideograph + 0x21594e: (0x8b92, 0),# East Asian ideograph + 0x23594f: (0x9c67, 0),# East Asian ideograph + 0x6f5950: (0xcd2c, 0),# Korean hangul + 0x215951: (0x8c41, 0),# East Asian ideograph + 0x215952: (0x8c3f, 0),# East Asian ideograph + 0x215953: (0x8c46, 0),# East Asian ideograph + 0x225954: (0x73f5, 0),# East Asian ideograph + 0x235955: (0x9c5f, 0),# East Asian ideograph + 0x235956: (0x9c60, 0),# East Asian ideograph + 0x215957: (0x8c4e, 0),# East Asian ideograph + 0x235958: (0x9c6d, 0),# East Asian ideograph + 0x215959: (0x8c54, 0),# East Asian ideograph + 0x21595a: (0x8c5a, 0),# East Asian ideograph + 0x23595b: (0x9c68, 0),# East Asian ideograph + 0x22595c: (0x7407, 0),# East Asian ideograph + 0x21595d: (0x8c6a, 0),# East Asian ideograph + 0x22595e: (0x7412, 0),# East Asian ideograph + 0x21595f: (0x8c6c, 0),# East Asian ideograph + 0x215960: (0x8c7a, 0),# East Asian ideograph + 0x215961: (0x8c79, 0),# East Asian ideograph + 0x215962: (0x8c82, 0),# East Asian ideograph + 0x225963: (0x743c, 0),# East Asian ideograph + 0x215964: (0x8c89, 0),# East Asian ideograph + 0x215965: (0x8c8d, 0),# East Asian ideograph + 0x225966: (0x742e, 0),# East Asian ideograph + 0x225967: (0x742f, 0),# East Asian ideograph + 0x275968: (0x8d1d, 0),# East Asian ideograph + 0x225969: (0x7414, 0),# East Asian ideograph + 0x22596a: (0x742c, 0),# East Asian ideograph + 0x27596b: (0x8d21, 0),# East Asian ideograph + 0x27596c: (0x8d22, 0),# East Asian ideograph + 0x27596d: (0x8d23, 0),# East Asian ideograph + 0x22596e: (0x742b, 0),# East Asian ideograph + 0x21596f: (0x8ca8, 0),# East Asian ideograph + 0x225970: (0x73f7, 0),# East Asian ideograph + 0x225971: (0x741a, 0),# East Asian ideograph + 0x275972: (0x8d29, 0),# East Asian ideograph + 0x235973: (0x9ce7, 0),# East Asian ideograph + 0x235974: (0x9cf0, 0),# East Asian ideograph + 0x215975: (0x8cbb, 0),# East Asian ideograph + 0x215976: (0x8cc1, 0),# East Asian ideograph + 0x235977: (0x9cf2, 0),# East Asian ideograph + 0x225978: (0x7416, 0),# East Asian ideograph + 0x215979: (0x8cbc, 0),# East Asian ideograph + 0x22597a: (0x7426, 0),# East Asian ideograph + 0x21597b: (0x8cb6, 0),# East Asian ideograph + 0x21597c: (0x8cbd, 0),# East Asian ideograph + 0x27597d: (0x8d37, 0),# East Asian ideograph + 0x21597e: (0x8cbf, 0),# East Asian ideograph + 0x222441: (0x5cf4, 0),# East Asian ideograph + 0x224f2b: (0x701e, 0),# East Asian ideograph (variant of 4C4F2B which maps to 701E) + 0x6f587e: (0xcc28, 0),# Korean hangul + 0x275e58: (0x9602, 0),# East Asian ideograph + 0x6f543b: (0xc315, 0),# Korean hangul + 0x217e52: (0x5ba7, 0),# East Asian ideograph + 0x333573: (0x8656, 0),# East Asian ideograph + 0x222446: (0x5cf1, 0),# East Asian ideograph + 0x69243f: (0x305f, 0),# Hiragana letter TA + 0x27613e: (0x9a8f, 0),# East Asian ideograph + 0x6f5b69: (0xd305, 0),# Korean hangul + 0x2d5c2f: (0x8fe8, 0),# East Asian ideograph + 0x2d4c3e: (0x758e, 0),# East Asian ideograph + 0x6f4e74: (0xb7ab, 0),# Korean hangul + 0x6f7655: (0xe8c7, 0),# Korean hangul + 0x225f7b: (0x7657, 0),# East Asian ideograph + 0x213e64: (0x60d5, 0),# East Asian ideograph + 0x234662: (0x93f9, 0),# East Asian ideograph + 0x696449: (0x7c13, 0),# East Asian ideograph + 0x276137: (0x9a76, 0),# East Asian ideograph + 0x69244a: (0x306a, 0),# Hiragana letter NA + 0x4b6147: (0x99c6, 0),# East Asian ideograph + 0x333556: (0x9a03, 0),# East Asian ideograph + 0x69644c: (0x7c17, 0),# East Asian ideograph + 0x6f4d66: (0xb4e4, 0),# Korean hangul + 0x213e65: (0x60bc, 0),# East Asian ideograph + 0x69644e: (0x7bf6, 0),# East Asian ideograph + 0x6f587b: (0xcc27, 0),# Korean hangul + 0x2d3b33: (0x8a67, 0),# East Asian ideograph + 0x214b2f: (0x7380, 0),# East Asian ideograph + 0x6f5438: (0xc30d, 0),# Korean hangul + 0x6f543e: (0xc324, 0),# Korean hangul + 0x6f7651: (0xe8c3, 0),# Korean hangul + 0x216452: (0x4eb3, 0),# East Asian ideograph + 0x294e43: (0x97af, 0),# East Asian ideograph + 0x234664: (0x93c4, 0),# East Asian ideograph + 0x342453: (0x5cbd, 0),# East Asian ideograph + 0x692454: (0x3074, 0),# Hiragana letter PI + 0x225372: (0x71ba, 0),# East Asian ideograph + 0x4b6455: (0x4eb6, 0),# East Asian ideograph + 0x6f4f7a: (0xb9f7, 0),# Korean hangul + 0x6f543f: (0xc327, 0),# Korean hangul + 0x4b503b: (0x7c12, 0),# East Asian ideograph + 0x692457: (0x3077, 0),# Hiragana letter PU + 0x223e23: (0x691a, 0),# East Asian ideograph + 0x234222: (0x91e4, 0),# East Asian ideograph + 0x692459: (0x3079, 0),# Hiragana letter BE + 0x21645a: (0x4ebc, 0),# East Asian ideograph + 0x4b4444: (0x8988, 0),# East Asian ideograph (Version J extension) + 0x215a21: (0x8cc5, 0),# East Asian ideograph + 0x275a22: (0x8d44, 0),# East Asian ideograph + 0x275a23: (0x8d3c, 0),# East Asian ideograph + 0x215a24: (0x8cc8, 0),# East Asian ideograph + 0x275a25: (0x8d3f, 0),# East Asian ideograph + 0x215a26: (0x8cb2, 0),# East Asian ideograph + 0x275a27: (0x8d41, 0),# East Asian ideograph + 0x225a28: (0x7420, 0),# East Asian ideograph + 0x275a29: (0x5bbe, 0),# East Asian ideograph + 0x275a2a: (0x8d48, 0),# East Asian ideograph + 0x275a2b: (0x8d4a, 0),# East Asian ideograph + 0x215a2c: (0x8ce0, 0),# East Asian ideograph + 0x275a2d: (0x8d4b, 0),# East Asian ideograph + 0x6f5a2e: (0xcf00, 0),# Korean hangul + 0x275a2f: (0x5356, 0),# East Asian ideograph + 0x235a30: (0x9d25, 0),# East Asian ideograph + 0x215a31: (0x8ce4, 0),# East Asian ideograph + 0x215a32: (0x8cde, 0),# East Asian ideograph + 0x275a33: (0x8d50, 0),# East Asian ideograph + 0x215a34: (0x8cea, 0),# East Asian ideograph + 0x275a35: (0x8d4c, 0),# East Asian ideograph + 0x215a36: (0x8cf4, 0),# East Asian ideograph + 0x215a37: (0x8cfd, 0),# East Asian ideograph + 0x275a38: (0x8d5a, 0),# East Asian ideograph + 0x275a39: (0x8d58, 0),# East Asian ideograph + 0x275a3a: (0x8d2d, 0),# East Asian ideograph + 0x275a3b: (0x8d60, 0),# East Asian ideograph + 0x275a3c: (0x8d5d, 0),# East Asian ideograph + 0x275a3d: (0x8d5e, 0),# East Asian ideograph + 0x275a3e: (0x8d62, 0),# East Asian ideograph + 0x275a3f: (0x8d61, 0),# East Asian ideograph + 0x275a40: (0x8d43, 0),# East Asian ideograph + 0x275a41: (0x8d4e, 0),# East Asian ideograph + 0x275a42: (0x8d63, 0),# East Asian ideograph + 0x215a43: (0x8d64, 0),# East Asian ideograph + 0x215a44: (0x8d67, 0),# East Asian ideograph + 0x215a45: (0x8d66, 0),# East Asian ideograph + 0x215a46: (0x8d6b, 0),# East Asian ideograph + 0x215a47: (0x8d6d, 0),# East Asian ideograph + 0x235a48: (0x9d1f, 0),# East Asian ideograph + 0x215a49: (0x8d74, 0),# East Asian ideograph + 0x215a4a: (0x8d73, 0),# East Asian ideograph + 0x215a4b: (0x8d77, 0),# East Asian ideograph + 0x215a4c: (0x8d85, 0),# East Asian ideograph + 0x215a4d: (0x8d8a, 0),# East Asian ideograph + 0x215a4e: (0x8d81, 0),# East Asian ideograph + 0x275a4f: (0x8d75, 0),# East Asian ideograph + 0x215a50: (0x8d95, 0),# East Asian ideograph + 0x215a51: (0x8da3, 0),# East Asian ideograph + 0x215a52: (0x8d9f, 0),# East Asian ideograph + 0x275a53: (0x8d8b, 0),# East Asian ideograph + 0x215a54: (0x8db3, 0),# East Asian ideograph + 0x215a55: (0x8db4, 0),# East Asian ideograph + 0x215a56: (0x8dbe, 0),# East Asian ideograph + 0x215a57: (0x8dce, 0),# East Asian ideograph + 0x215a58: (0x8ddd, 0),# East Asian ideograph + 0x214b33: (0x738b, 0),# East Asian ideograph + 0x215a5a: (0x8dcb, 0),# East Asian ideograph + 0x215a5b: (0x8dda, 0),# East Asian ideograph + 0x215a5c: (0x8dc6, 0),# East Asian ideograph + 0x215a5d: (0x8dd1, 0),# East Asian ideograph + 0x215a5e: (0x8dcc, 0),# East Asian ideograph + 0x215a5f: (0x8de1, 0),# East Asian ideograph + 0x215a60: (0x8ddf, 0),# East Asian ideograph + 0x215a61: (0x8de8, 0),# East Asian ideograph + 0x225a62: (0x7473, 0),# East Asian ideograph + 0x235a63: (0x9d3e, 0),# East Asian ideograph + 0x215a64: (0x8dea, 0),# East Asian ideograph + 0x215a65: (0x8def, 0),# East Asian ideograph + 0x215a66: (0x8dfc, 0),# East Asian ideograph + 0x215a67: (0x8e2b, 0),# East Asian ideograph + 0x235a68: (0x9d42, 0),# East Asian ideograph + 0x235a69: (0x9d40, 0),# East Asian ideograph + 0x215a6a: (0x8e1d, 0),# East Asian ideograph + 0x215a6b: (0x8e0f, 0),# East Asian ideograph + 0x215a6c: (0x8e29, 0),# East Asian ideograph + 0x215a6d: (0x8e1f, 0),# East Asian ideograph + 0x215a6e: (0x8e44, 0),# East Asian ideograph + 0x215a6f: (0x8e31, 0),# East Asian ideograph + 0x215a70: (0x8e42, 0),# East Asian ideograph + 0x215a71: (0x8e34, 0),# East Asian ideograph + 0x215a72: (0x8e39, 0),# East Asian ideograph + 0x215a73: (0x8e35, 0),# East Asian ideograph + 0x215a74: (0x8e49, 0),# East Asian ideograph + 0x235a75: (0x9d53, 0),# East Asian ideograph + 0x215a76: (0x8e48, 0),# East Asian ideograph + 0x215a77: (0x8e4a, 0),# East Asian ideograph + 0x215a78: (0x8e63, 0),# East Asian ideograph + 0x215a79: (0x8e59, 0),# East Asian ideograph + 0x215a7a: (0x8e66, 0),# East Asian ideograph + 0x215a7b: (0x8e64, 0),# East Asian ideograph + 0x215a7c: (0x8e72, 0),# East Asian ideograph + 0x215a7d: (0x8e6c, 0),# East Asian ideograph + 0x275a7e: (0x8df7, 0),# East Asian ideograph + 0x6f5439: (0xc313, 0),# Korean hangul + 0x6f5443: (0xc343, 0),# Korean hangul + 0x22646b: (0x789a, 0),# East Asian ideograph + 0x213a28: (0x5a41, 0),# East Asian ideograph + 0x6f2458: (0x3134, 0),# Korean hangul + 0x234226: (0x922b, 0),# East Asian ideograph + 0x27515c: (0x7ebf, 0),# East Asian ideograph + 0x475222: (0x9957, 0),# East Asian ideograph + 0x6f246e: (0x3143, 0),# Korean hangul + 0x335333: (0x80bb, 0),# East Asian ideograph + 0x6f2470: (0x3146, 0),# Korean hangul + 0x692471: (0x3091, 0),# Hiragana letter WE + 0x232472: (0x852f, 0),# East Asian ideograph + 0x6f2473: (0x3150, 0),# Korean hangul + 0x224f35: (0x7021, 0),# East Asian ideograph + 0x6f2474: (0x3151, 0),# Korean hangul + 0x6f5445: (0xc368, 0),# Korean hangul + 0x6f5a31: (0xcf08, 0),# Korean hangul + 0x6f2476: (0x3153, 0),# Korean hangul + 0x295729: (0x9c87, 0),# East Asian ideograph + 0x6f4f21: (0xb7fd, 0),# Korean hangul + 0x232477: (0x84f7, 0),# East Asian ideograph + 0x274f22: (0x4e07, 0),# East Asian ideograph + 0x234f23: (0x980e, 0),# East Asian ideograph + 0x6f4e42: (0xb611, 0),# Korean hangul + 0x224f24: (0x7020, 0),# East Asian ideograph + 0x6f5446: (0xc369, 0),# Korean hangul + 0x6f247a: (0x3157, 0),# Korean hangul + 0x274f25: (0x53b6, 0),# East Asian ideograph + 0x4b333e: (0xf92e, 0),# East Asian ideograph + 0x224f26: (0x7027, 0),# East Asian ideograph + 0x214f27: (0x79c9, 0),# East Asian ideograph + 0x22537a: (0x71bf, 0),# East Asian ideograph + 0x22537c: (0x71b8, 0),# East Asian ideograph + 0x29247d: (0x835c, 0),# East Asian ideograph + 0x6f4f28: (0xb80c, 0),# Korean hangul + 0x212a38: (0xe8e5, 0),# EACC component character + 0x276775: (0x4f65, 0),# East Asian ideograph + 0x6f5447: (0xc36c, 0),# Korean hangul + 0x6f4f2a: (0xb818, 0),# Korean hangul + 0x23422a: (0x9292, 0),# East Asian ideograph + 0x2d5d56: (0x920e, 0),# East Asian ideograph + 0x234f2c: (0x9826, 0),# East Asian ideograph + 0x6f5d5a: (0xd6fc, 0),# Korean hangul + 0x234f2d: (0x981e, 0),# East Asian ideograph + 0x6f7652: (0xe8c4, 0),# Korean hangul + 0x6f4f2e: (0xb824, 0),# Korean hangul + 0x2d3c26: (0x5d18, 0),# East Asian ideograph + 0x6f5448: (0xc370, 0),# Korean hangul + 0x213e70: (0x60fb, 0),# East Asian ideograph + 0x224f2f: (0x702e, 0),# East Asian ideograph + 0x225b21: (0x7489, 0),# East Asian ideograph + 0x225b22: (0x747c, 0),# East Asian ideograph + 0x215b23: (0x8e82, 0),# East Asian ideograph + 0x215b24: (0x8e81, 0),# East Asian ideograph + 0x215b25: (0x8e87, 0),# East Asian ideograph + 0x215b26: (0x8e89, 0),# East Asian ideograph + 0x214f31: (0x79fb, 0),# East Asian ideograph + 0x225b28: (0x747e, 0),# East Asian ideograph + 0x275b29: (0x8dc3, 0),# East Asian ideograph + 0x235b2a: (0x9d52, 0),# East Asian ideograph + 0x215b2b: (0x8ea1, 0),# East Asian ideograph + 0x235b2c: (0x9d77, 0),# East Asian ideograph + 0x224f39: (0x7018, 0),# East Asian ideograph + 0x215b2e: (0x8eac, 0),# East Asian ideograph + 0x215b2f: (0x8eb2, 0),# East Asian ideograph + 0x225b30: (0x747a, 0),# East Asian ideograph + 0x215b31: (0x8ec0, 0),# East Asian ideograph + 0x215b32: (0x8eca, 0),# East Asian ideograph + 0x275b33: (0x8f67, 0),# East Asian ideograph + 0x215b34: (0x8ecd, 0),# East Asian ideograph + 0x215b35: (0x8ecc, 0),# East Asian ideograph + 0x215b36: (0x8ed2, 0),# East Asian ideograph + 0x215b37: (0x8ed4, 0),# East Asian ideograph + 0x215b38: (0x8edf, 0),# East Asian ideograph + 0x215b39: (0x8edb, 0),# East Asian ideograph + 0x215b3a: (0x8efb, 0),# East Asian ideograph + 0x275b3b: (0x8f74, 0),# East Asian ideograph + 0x215b3c: (0x8efc, 0),# East Asian ideograph + 0x215b3d: (0x8f03, 0),# East Asian ideograph + 0x225b3e: (0x747d, 0),# East Asian ideograph + 0x235b3f: (0x9d78, 0),# East Asian ideograph + 0x215b40: (0x8f0a, 0),# East Asian ideograph + 0x215b41: (0x8f14, 0),# East Asian ideograph + 0x235b42: (0x9d7e, 0),# East Asian ideograph + 0x215b43: (0x8f15, 0),# East Asian ideograph + 0x215b44: (0x8f13, 0),# East Asian ideograph + 0x215b45: (0x8f26, 0),# East Asian ideograph + 0x215b46: (0x8f1b, 0),# East Asian ideograph + 0x235b47: (0x9d69, 0),# East Asian ideograph + 0x215b48: (0x8f1d, 0),# East Asian ideograph + 0x215b49: (0x8f29, 0),# East Asian ideograph + 0x215b4a: (0x8f2a, 0),# East Asian ideograph + 0x275b4b: (0x8f8e, 0),# East Asian ideograph + 0x215b4c: (0x8f3b, 0),# East Asian ideograph + 0x215b4d: (0x8f2f, 0),# East Asian ideograph + 0x215b4e: (0x8f38, 0),# East Asian ideograph + 0x235b4f: (0x9d83, 0),# East Asian ideograph + 0x215b50: (0x8f3e, 0),# East Asian ideograph + 0x215b51: (0x8f45, 0),# East Asian ideograph + 0x215b52: (0x8f42, 0),# East Asian ideograph (variant of 4B5B52 which maps to 8F42) + 0x215b53: (0x8f3f, 0),# East Asian ideograph + 0x225b54: (0x749f, 0),# East Asian ideograph + 0x225b55: (0x749d, 0),# East Asian ideograph + 0x215b56: (0x8f54, 0),# East Asian ideograph + 0x225b57: (0x749e, 0),# East Asian ideograph + 0x215b58: (0x8f5f, 0),# East Asian ideograph + 0x215b59: (0x8f61, 0),# East Asian ideograph + 0x215b5a: (0x8f9b, 0),# East Asian ideograph + 0x215b5b: (0x8f9c, 0),# East Asian ideograph + 0x215b5c: (0x8f9f, 0),# East Asian ideograph + 0x224f3a: (0x7023, 0),# East Asian ideograph + 0x235b5e: (0x9d92, 0),# East Asian ideograph + 0x215b5f: (0x8fa6, 0),# East Asian ideograph + 0x225b60: (0x74b2, 0),# East Asian ideograph + 0x215b61: (0x8faf, 0),# East Asian ideograph + 0x215b62: (0x8fb0, 0),# East Asian ideograph + 0x215b63: (0x8fb1, 0),# East Asian ideograph + 0x215b64: (0x8fb2, 0),# East Asian ideograph + 0x295e6a: (0x9eea, 0),# East Asian ideograph + 0x225b66: (0x74b4, 0),# East Asian ideograph + 0x225b67: (0x74ab, 0),# East Asian ideograph + 0x215b68: (0x8fc4, 0),# East Asian ideograph + 0x215b69: (0x5de1, 0),# East Asian ideograph + 0x215b6a: (0x8fce, 0),# East Asian ideograph + 0x215b6b: (0x8fd1, 0),# East Asian ideograph + 0x215b6c: (0x8fd4, 0),# East Asian ideograph + 0x275b6d: (0x8ff0, 0),# East Asian ideograph + 0x215b6e: (0x8fe6, 0),# East Asian ideograph + 0x215b6f: (0x8fe2, 0),# East Asian ideograph + 0x235b70: (0x9d96, 0),# East Asian ideograph + 0x215b71: (0x8fe5, 0),# East Asian ideograph + 0x6f544b: (0xc379, 0),# Korean hangul + 0x215b73: (0x8feb, 0),# East Asian ideograph + 0x215b74: (0x9001, 0),# East Asian ideograph + 0x215b75: (0x9006, 0),# East Asian ideograph + 0x225b76: (0x74b8, 0),# East Asian ideograph + 0x215b77: (0x9000, 0),# East Asian ideograph + 0x6f5b78: (0xd329, 0),# Korean hangul + 0x235b79: (0x9dc0, 0),# East Asian ideograph + 0x225b7a: (0x74c0, 0),# East Asian ideograph + 0x23422e: (0x9207, 0),# East Asian ideograph + 0x215b7c: (0x9005, 0),# East Asian ideograph + 0x215b7d: (0x9019, 0),# East Asian ideograph + 0x215b7e: (0x9023, 0),# East Asian ideograph + 0x214f40: (0x7a40, 0),# East Asian ideograph + 0x393c52: (0x8d26, 0),# East Asian ideograph + 0x224f41: (0x703c, 0),# East Asian ideograph + 0x213941: (0x596e, 0),# East Asian ideograph + 0x6f4f42: (0xb8e1, 0),# Korean hangul + 0x6f544c: (0xc37c, 0),# Korean hangul + 0x4b4f43: (0x7a32, 0),# East Asian ideograph + 0x213a31: (0x5a9b, 0),# East Asian ideograph + 0x224f44: (0x7035, 0),# East Asian ideograph + 0x213a41: (0x5afb, 0),# East Asian ideograph + 0x234f45: (0x9832, 0),# East Asian ideograph + 0x294331: (0x94f1, 0),# East Asian ideograph + 0x274f46: (0x7a23, 0),# East Asian ideograph + 0x6f4f47: (0xb8f8, 0),# Korean hangul + 0x2d4f48: (0x7a42, 0),# East Asian ideograph + 0x213a32: (0x5acc, 0),# East Asian ideograph + 0x294231: (0x94af, 0),# East Asian ideograph + 0x214f49: (0x7a61, 0),# East Asian ideograph + 0x4c3744: (0x65d9, 0),# East Asian ideograph + 0x274f4a: (0x79fd, 0),# East Asian ideograph + 0x214f4b: (0x7a6b, 0),# East Asian ideograph + 0x227631: (0x8008, 0),# East Asian ideograph + 0x274f4c: (0x7a33, 0),# East Asian ideograph + 0x6f544e: (0xc384, 0),# Korean hangul + 0x6f4f4d: (0xb958, 0),# Korean hangul + 0x6f5361: (0xc229, 0),# Korean hangul + 0x213a33: (0x5ac1, 0),# East Asian ideograph + 0x234f4e: (0x9844, 0),# East Asian ideograph + 0x4b393a: (0x5f09, 0),# East Asian ideograph + 0x6f4f4f: (0xb95c, 0),# Korean hangul + 0x334755: (0x6fec, 0),# East Asian ideograph + 0x6f4f50: (0xb960, 0),# Korean hangul + 0x6f4c69: (0xb2dd, 0),# Korean hangul + 0x23533e: (0x9a0b, 0),# East Asian ideograph + 0x224f51: (0x7034, 0),# East Asian ideograph + 0x274564: (0x69df, 0),# East Asian ideograph + 0x6f544f: (0xc388, 0),# Korean hangul + 0x213e77: (0x611b, 0),# East Asian ideograph + 0x6f4f52: (0xb96d, 0),# Korean hangul + 0x213a34: (0x5ac9, 0),# East Asian ideograph + 0x217e79: (0x5be0, 0),# East Asian ideograph + 0x224f53: (0x7039, 0),# East Asian ideograph + 0x224f54: (0x703a, 0),# East Asian ideograph + 0x395e6f: (0x7a7d, 0),# East Asian ideograph + 0x6f4f55: (0xb978, 0),# Korean hangul + 0x23533f: (0x9a09, 0),# East Asian ideograph + 0x6f4e44: (0xb618, 0),# Korean hangul + 0x6f4f56: (0xb97c, 0),# Korean hangul + 0x6f5450: (0xc399, 0),# Korean hangul + 0x6f4f57: (0xb984, 0),# Korean hangul + 0x213a35: (0x5abe, 0),# East Asian ideograph + 0x696b27: (0x8977, 0),# East Asian ideograph + 0x234233: (0x91fe, 0),# East Asian ideograph + 0x3a2f7c: (0x64c0, 0),# East Asian ideograph + 0x395a2f: (0x58f2, 0),# East Asian ideograph + 0x334f59: (0x7a93, 0),# East Asian ideograph + 0x293c57: (0x8f79, 0),# East Asian ideograph + 0x6f4f5a: (0xb989, 0),# Korean hangul + 0x215c21: (0x901f, 0),# East Asian ideograph + 0x215c22: (0x9017, 0),# East Asian ideograph + 0x215c23: (0x901d, 0),# East Asian ideograph + 0x215c24: (0x9010, 0),# East Asian ideograph + 0x225c25: (0x74bf, 0),# East Asian ideograph + 0x215c26: (0x900d, 0),# East Asian ideograph + 0x215c27: (0x901e, 0),# East Asian ideograph + 0x235c28: (0x9dbb, 0),# East Asian ideograph + 0x274123: (0x6302, 0),# East Asian ideograph + 0x215c2a: (0x900f, 0),# East Asian ideograph + 0x215c2b: (0x9022, 0),# East Asian ideograph + 0x215c2c: (0x9016, 0),# East Asian ideograph + 0x215c2d: (0x901b, 0),# East Asian ideograph + 0x215c2e: (0x9014, 0),# East Asian ideograph + 0x214f5d: (0x7aa9, 0),# East Asian ideograph + 0x215c30: (0x9035, 0),# East Asian ideograph + 0x215c31: (0x9031, 0),# East Asian ideograph + 0x235c32: (0x9db9, 0),# East Asian ideograph + 0x275c33: (0x8fdb, 0),# East Asian ideograph + 0x275c34: (0x8fd0, 0),# East Asian ideograph + 0x2d4f5e: (0x7ab0, 0),# East Asian ideograph + 0x215c36: (0x9053, 0),# East Asian ideograph + 0x215c37: (0x9042, 0),# East Asian ideograph + 0x215c38: (0x9050, 0),# East Asian ideograph + 0x275c39: (0x8fbe, 0),# East Asian ideograph + 0x275c3a: (0x8fdd, 0),# East Asian ideograph + 0x274f5f: (0x7a77, 0),# East Asian ideograph + 0x275c3c: (0x8fc2, 0),# East Asian ideograph + 0x215c3d: (0x904f, 0),# East Asian ideograph + 0x235c3e: (0x9dd9, 0),# East Asian ideograph + 0x215c3f: (0x904d, 0),# East Asian ideograph + 0x215c40: (0x9051, 0),# East Asian ideograph + 0x214f60: (0x7aba, 0),# East Asian ideograph + 0x215c42: (0x903e, 0),# East Asian ideograph + 0x215c43: (0x9058, 0),# East Asian ideograph + 0x275c44: (0x8fdc, 0),# East Asian ideograph + 0x275c45: (0x900a, 0),# East Asian ideograph + 0x215c46: (0x9063, 0),# East Asian ideograph + 0x214f61: (0x7ac5, 0),# East Asian ideograph + 0x275c48: (0x9012, 0),# East Asian ideograph + 0x215c49: (0x9069, 0),# East Asian ideograph + 0x215c4a: (0x906e, 0),# East Asian ideograph + 0x215c4b: (0x9068, 0),# East Asian ideograph + 0x215c4c: (0x906d, 0),# East Asian ideograph + 0x214f62: (0x7ac4, 0),# East Asian ideograph + 0x215c4e: (0x9074, 0),# East Asian ideograph + 0x275c4f: (0x9009, 0),# East Asian ideograph + 0x275c50: (0x8fdf, 0),# East Asian ideograph + 0x215c51: (0x9077, 0),# East Asian ideograph + 0x215c52: (0x907c, 0),# East Asian ideograph + 0x275c53: (0x9057, 0),# East Asian ideograph + 0x215c54: (0x907f, 0),# East Asian ideograph + 0x215c55: (0x907d, 0),# East Asian ideograph + 0x275c56: (0x8fc8, 0),# East Asian ideograph + 0x235c57: (0x9df2, 0),# East Asian ideograph + 0x215c58: (0x9082, 0),# East Asian ideograph + 0x215c59: (0x9080, 0),# East Asian ideograph + 0x275c5a: (0x8fe9, 0),# East Asian ideograph (variant of 2D5C5A which maps to 8FE9) + 0x275c5b: (0x8fb9, 0),# East Asian ideograph + 0x275c5c: (0x9026, 0),# East Asian ideograph + 0x275c5d: (0x903b, 0),# East Asian ideograph + 0x215c5e: (0x9091, 0),# East Asian ideograph + 0x215c5f: (0x9095, 0),# East Asian ideograph + 0x215c60: (0x90a3, 0),# East Asian ideograph + 0x215c61: (0x90a2, 0),# East Asian ideograph + 0x215c62: (0x90aa, 0),# East Asian ideograph + 0x215c63: (0x90a6, 0),# East Asian ideograph + 0x215c64: (0x90b5, 0),# East Asian ideograph + 0x215c65: (0x90b1, 0),# East Asian ideograph + 0x215c66: (0x90b8, 0),# East Asian ideograph + 0x215c67: (0x90ce, 0),# East Asian ideograph + 0x215c68: (0x90ca, 0),# East Asian ideograph + 0x4b5564: (0x77c7, 0),# East Asian ideograph + 0x235c6a: (0x9ded, 0),# East Asian ideograph + 0x215c6b: (0x90e8, 0),# East Asian ideograph + 0x215c6c: (0x90ed, 0),# East Asian ideograph + 0x275c6d: (0x90ae, 0),# East Asian ideograph + 0x215c6e: (0x90fd, 0),# East Asian ideograph + 0x215c6f: (0x9102, 0),# East Asian ideograph + 0x275c70: (0x4e61, 0),# East Asian ideograph + 0x275c71: (0x90b9, 0),# East Asian ideograph + 0x215c72: (0x9119, 0),# East Asian ideograph + 0x275c73: (0x90d1, 0),# East Asian ideograph + 0x275c74: (0x90bb, 0),# East Asian ideograph + 0x275c75: (0x9093, 0),# East Asian ideograph + 0x215c76: (0x9131, 0),# East Asian ideograph + 0x214f69: (0x7aed, 0),# East Asian ideograph + 0x215c78: (0x9149, 0),# East Asian ideograph + 0x215c79: (0x914b, 0),# East Asian ideograph + 0x215c7a: (0x914a, 0),# East Asian ideograph + 0x215c7b: (0x9152, 0),# East Asian ideograph + 0x215c7c: (0x914d, 0),# East Asian ideograph + 0x215c7d: (0x914c, 0),# East Asian ideograph + 0x215c7e: (0x9157, 0),# East Asian ideograph + 0x6f5454: (0xc3df, 0),# Korean hangul + 0x6f5a34: (0xcf13, 0),# Korean hangul + 0x214f6b: (0x7af6, 0),# East Asian ideograph + 0x213a39: (0x5ab3, 0),# East Asian ideograph + 0x234237: (0x9226, 0),# East Asian ideograph + 0x6f4f6d: (0xb9d8, 0),# Korean hangul + 0x695a31: (0x64f6, 0),# East Asian ideograph + 0x6f4e45: (0xb625, 0),# Korean hangul + 0x234f6f: (0x9857, 0),# East Asian ideograph + 0x27456a: (0x6988, 0),# East Asian ideograph + 0x213e7d: (0x6108, 0),# East Asian ideograph + 0x395821: (0x97e4, 0),# East Asian ideograph + 0x274f70: (0x5df4, 0),# East Asian ideograph (duplicate simplified) + 0x213a3a: (0x5ae1, 0),# East Asian ideograph + 0x224f71: (0x7052, 0),# East Asian ideograph + 0x234f72: (0x9856, 0),# East Asian ideograph + 0x295e7a: (0x9efe, 0),# East Asian ideograph + 0x224f73: (0x705c, 0),# East Asian ideograph + 0x213f39: (0x6163, 0),# East Asian ideograph + 0x6f4f74: (0xb9e4, 0),# Korean hangul + 0x6f5456: (0xc3e8, 0),# Korean hangul + 0x213e7e: (0x60f1, 0),# East Asian ideograph + 0x214f75: (0x7b1b, 0),# East Asian ideograph + 0x213a3b: (0x5ad7, 0),# East Asian ideograph + 0x284e66: (0x6ee2, 0),# East Asian ideograph + 0x213a21: (0x5a46, 0),# East Asian ideograph + 0x234f77: (0x9862, 0),# East Asian ideograph + 0x275235: (0x7f62, 0),# East Asian ideograph + 0x224f78: (0x7059, 0),# East Asian ideograph + 0x213a23: (0x5a6a, 0),# East Asian ideograph + 0x274f79: (0x7b14, 0),# East Asian ideograph + 0x213a24: (0x5a36, 0),# East Asian ideograph + 0x6f5457: (0xc3ed, 0),# Korean hangul + 0x22427e: (0x6aed, 0),# East Asian ideograph + 0x214f7b: (0x7b50, 0),# East Asian ideograph + 0x213a26: (0x5a40, 0),# East Asian ideograph + 0x695e63: (0x6e82, 0),# East Asian ideograph + 0x275679: (0x80e1, 0),# East Asian ideograph (duplicate simplified) + 0x224f7c: (0x7061, 0),# East Asian ideograph + 0x213a27: (0x5a66, 0),# East Asian ideograph + 0x224f7d: (0x705d, 0),# East Asian ideograph + 0x223a28: (0x6705, 0),# East Asian ideograph + 0x335347: (0x81d9, 0),# East Asian ideograph + 0x293b4f: (0x8f78, 0),# East Asian ideograph + 0x234f7e: (0x9868, 0),# East Asian ideograph + 0x6f4f7b: (0xb9f8, 0),# Korean hangul + 0x6f5458: (0xc3f4, 0),# Korean hangul + 0x6f5363: (0xc22d, 0),# Korean hangul + 0x2d5d68: (0x8021, 0),# East Asian ideograph + 0x394928: (0x6d5c, 0),# East Asian ideograph + 0x29366a: (0x8d53, 0),# East Asian ideograph + 0x227a2c: (0x81b5, 0),# East Asian ideograph + 0x223173: (0x637f, 0),# East Asian ideograph + 0x2d5179: (0x7e62, 0),# East Asian ideograph + 0x213a2e: (0x5a92, 0),# East Asian ideograph + 0x6f5459: (0xc3f5, 0),# Korean hangul + 0x2d3a2f: (0x58fb, 0),# East Asian ideograph + 0x4b3351: (0x5204, 0),# East Asian ideograph + 0x215d21: (0x9163, 0),# East Asian ideograph + 0x215d22: (0x9165, 0),# East Asian ideograph + 0x215d23: (0x916c, 0),# East Asian ideograph + 0x215d24: (0x9169, 0),# East Asian ideograph + 0x215d25: (0x916a, 0),# East Asian ideograph + 0x215d26: (0x9175, 0),# East Asian ideograph + 0x215d27: (0x9178, 0),# East Asian ideograph + 0x215d28: (0x9177, 0),# East Asian ideograph + 0x215d29: (0x9187, 0),# East Asian ideograph + 0x215d2a: (0x9189, 0),# East Asian ideograph + 0x215d2b: (0x918b, 0),# East Asian ideograph + 0x215d2c: (0x9183, 0),# East Asian ideograph + 0x215d2d: (0x9192, 0),# East Asian ideograph + 0x215d2e: (0x91a3, 0),# East Asian ideograph + 0x275d2f: (0x915d, 0),# East Asian ideograph + 0x215d30: (0x919c, 0),# East Asian ideograph + 0x275d31: (0x533b, 0),# East Asian ideograph + 0x225d32: (0x7512, 0),# East Asian ideograph + 0x215d33: (0x91ba, 0),# East Asian ideograph + 0x275d34: (0x917f, 0),# East Asian ideograph + 0x275d35: (0x8845, 0),# East Asian ideograph + 0x215d36: (0x91c7, 0),# East Asian ideograph + 0x215d37: (0x91c9, 0),# East Asian ideograph + 0x215d38: (0x91cb, 0),# East Asian ideograph + 0x235d39: (0x9e1c, 0),# East Asian ideograph + 0x235d3a: (0x9e1b, 0),# East Asian ideograph + 0x215d3b: (0x91ce, 0),# East Asian ideograph + 0x235d3c: (0x9e75, 0),# East Asian ideograph + 0x275d3d: (0x5398, 0),# East Asian ideograph + 0x215d3e: (0x91d1, 0),# East Asian ideograph + 0x215d3f: (0x91dd, 0),# East Asian ideograph + 0x215d40: (0x91d8, 0),# East Asian ideograph + 0x215d41: (0x91d7, 0),# East Asian ideograph + 0x235d42: (0x9e7a, 0),# East Asian ideograph + 0x215d43: (0x91f5, 0),# East Asian ideograph + 0x225d44: (0x7524, 0),# East Asian ideograph + 0x215d45: (0x91e3, 0),# East Asian ideograph + 0x215d46: (0x91e7, 0),# East Asian ideograph + 0x235d47: (0x9e80, 0),# East Asian ideograph + 0x215d48: (0x920d, 0),# East Asian ideograph + 0x215d49: (0x9215, 0),# East Asian ideograph + 0x215d4a: (0x9209, 0),# East Asian ideograph + 0x275d4b: (0x949e, 0),# East Asian ideograph + 0x215d4c: (0x921e, 0),# East Asian ideograph + 0x215d4d: (0x9210, 0),# East Asian ideograph + 0x2d4c5d: (0x7661, 0),# East Asian ideograph + 0x225d4f: (0x753f, 0),# East Asian ideograph + 0x215d50: (0x9238, 0),# East Asian ideograph + 0x225d51: (0x7540, 0),# East Asian ideograph + 0x225d52: (0x753e, 0),# East Asian ideograph + 0x215d53: (0x9240, 0),# East Asian ideograph + 0x215d54: (0x924b, 0),# East Asian ideograph + 0x235d55: (0x9e90, 0),# East Asian ideograph + 0x215d56: (0x9264, 0),# East Asian ideograph + 0x215d57: (0x9251, 0),# East Asian ideograph + 0x235d58: (0x9e8c, 0),# East Asian ideograph + 0x215d59: (0x9278, 0),# East Asian ideograph + 0x215d5a: (0x9280, 0),# East Asian ideograph + 0x275d5b: (0x94d0, 0),# East Asian ideograph + 0x215d5c: (0x9285, 0),# East Asian ideograph + 0x235d5d: (0x9e9b, 0),# East Asian ideograph + 0x215d5e: (0x9296, 0),# East Asian ideograph + 0x225d5f: (0x755f, 0),# East Asian ideograph + 0x215d60: (0x9293, 0),# East Asian ideograph + 0x275d61: (0x8854, 0),# East Asian ideograph + 0x215d62: (0x92c5, 0),# East Asian ideograph + 0x215d63: (0x92bb, 0),# East Asian ideograph + 0x275d64: (0x9510, 0),# East Asian ideograph + 0x275d65: (0x94fa, 0),# East Asian ideograph + 0x275d66: (0x9500, 0),# East Asian ideograph + 0x215d67: (0x92c1, 0),# East Asian ideograph + 0x215d68: (0x92e4, 0),# East Asian ideograph + 0x215d69: (0x92bc, 0),# East Asian ideograph + 0x215d6a: (0x92d2, 0),# East Asian ideograph + 0x225d6b: (0x756c, 0),# East Asian ideograph + 0x215d6c: (0x9336, 0),# East Asian ideograph + 0x275d6d: (0x952f, 0),# East Asian ideograph + 0x215d6e: (0x9333, 0),# East Asian ideograph + 0x215d6f: (0x932f, 0),# East Asian ideograph + 0x215d70: (0x9322, 0),# East Asian ideograph + 0x215d71: (0x92fc, 0),# East Asian ideograph + 0x215d72: (0x932b, 0),# East Asian ideograph + 0x215d73: (0x931a, 0),# East Asian ideograph + 0x215d74: (0x9304, 0),# East Asian ideograph + 0x213a3e: (0x5ae9, 0),# East Asian ideograph + 0x275d76: (0x9526, 0),# East Asian ideograph + 0x275d77: (0x9540, 0),# East Asian ideograph + 0x275d78: (0x9541, 0),# East Asian ideograph + 0x235d79: (0x9eaf, 0),# East Asian ideograph + 0x215d7a: (0x9365, 0),# East Asian ideograph + 0x213a3f: (0x5ad8, 0),# East Asian ideograph + 0x215d7c: (0x934b, 0),# East Asian ideograph + 0x215d7d: (0x9328, 0),# East Asian ideograph + 0x215d7e: (0x9370, 0),# East Asian ideograph + 0x4b5e3f: (0x922c, 0),# East Asian ideograph + 0x213a40: (0x5ae6, 0),# East Asian ideograph + 0x6f5367: (0xc234, 0),# Korean hangul + 0x233a41: (0x8e61, 0),# East Asian ideograph + 0x6f5825: (0xc990, 0),# Korean hangul + 0x6f545d: (0xc434, 0),# Korean hangul + 0x284971: (0x6d9e, 0),# East Asian ideograph + 0x224a32: (0x6dfc, 0),# East Asian ideograph + 0x227a43: (0x81d0, 0),# East Asian ideograph + 0x213a44: (0x5b0c, 0),# East Asian ideograph + 0x29366b: (0x8d55, 0),# East Asian ideograph + 0x233a45: (0x8e74, 0),# East Asian ideograph + 0x213a46: (0x5b34, 0),# East Asian ideograph + 0x213a47: (0x5b1d, 0),# East Asian ideograph + 0x6f545e: (0xc43c, 0),# Korean hangul + 0x6f5a36: (0xcf1c, 0),# Korean hangul + 0x273a48: (0x5ad4, 0),# East Asian ideograph + 0x213a43: (0x5b0b, 0),# East Asian ideograph + 0x395829: (0x69fb, 0),# East Asian ideograph + 0x6f4c3e: (0xb1d0, 0),# Korean hangul + 0x4b3a49: (0x5b37, 0),# East Asian ideograph + 0x2d3b54: (0x5c4a, 0),# East Asian ideograph + 0x6f5923: (0xcc2e, 0),# Korean hangul + 0x213a4a: (0x5b30, 0),# East Asian ideograph + 0x287855: (0x80eb, 0),# East Asian ideograph + 0x233a4b: (0x8e69, 0),# East Asian ideograph + 0x213a4c: (0x5b40, 0),# East Asian ideograph + 0x6f545f: (0xc43f, 0),# Korean hangul + 0x213a4d: (0x5b50, 0),# East Asian ideograph + 0x213a4e: (0x5b51, 0),# East Asian ideograph + 0x217a4f: (0x59ee, 0),# East Asian ideograph + 0x225b3f: (0x7485, 0),# East Asian ideograph + 0x295e7c: (0x9f0b, 0),# East Asian ideograph + 0x29456f: (0x9538, 0),# East Asian ideograph + 0x6f5460: (0xc464, 0),# Korean hangul + 0x233a52: (0x8e83, 0),# East Asian ideograph + 0x213a45: (0x5af5, 0),# East Asian ideograph + 0x334243: (0x52b9, 0),# East Asian ideograph + 0x233a53: (0x8e84, 0),# East Asian ideograph + 0x2d592c: (0x8b01, 0),# East Asian ideograph + 0x294335: (0x94f5, 0),# East Asian ideograph + 0x4c3a55: (0x6741, 0),# East Asian ideograph + 0x4b623b: (0x9d12, 0),# East Asian ideograph + 0x217a56: (0x59fd, 0),# East Asian ideograph + 0x6f5461: (0xc465, 0),# Korean hangul + 0x213a57: (0x5b5f, 0),# East Asian ideograph + 0x6f5a39: (0xcf2c, 0),# Korean hangul + 0x213a58: (0x5b63, 0),# East Asian ideograph + 0x692544: (0x30c4, 0),# Katakana letter TU + 0x225622: (0x728d, 0),# East Asian ideograph + 0x215e21: (0x937e, 0),# East Asian ideograph + 0x275e22: (0x9524, 0),# East Asian ideograph + 0x275e23: (0x9539, 0),# East Asian ideograph + 0x215e24: (0x935b, 0),# East Asian ideograph + 0x275e25: (0x9551, 0),# East Asian ideograph + 0x215e26: (0x9394, 0),# East Asian ideograph + 0x275e27: (0x9547, 0),# East Asian ideograph + 0x275e28: (0x9501, 0),# East Asian ideograph + 0x215e29: (0x93a2, 0),# East Asian ideograph + 0x275e2a: (0x954d, 0),# East Asian ideograph + 0x275e2b: (0x955c, 0),# East Asian ideograph + 0x275e2c: (0x955d, 0),# East Asian ideograph + 0x215e2d: (0x93d6, 0),# East Asian ideograph + 0x275e2e: (0x955e, 0),# East Asian ideograph + 0x215e2f: (0x93df, 0),# East Asian ideograph + 0x275e30: (0x94ff, 0),# East Asian ideograph + 0x275e31: (0x94fe, 0),# East Asian ideograph + 0x215e32: (0x93e2, 0),# East Asian ideograph + 0x215e33: (0x93dc, 0),# East Asian ideograph + 0x215e34: (0x93e4, 0),# East Asian ideograph + 0x225e35: (0x7598, 0),# East Asian ideograph + 0x215e36: (0x93cd, 0),# East Asian ideograph + 0x235e37: (0x9ec8, 0),# East Asian ideograph + 0x215e39: (0x9403, 0),# East Asian ideograph + 0x215e3a: (0x942e, 0),# East Asian ideograph + 0x225e3b: (0x75a3, 0),# East Asian ideograph + 0x215e3c: (0x9433, 0),# East Asian ideograph + 0x215e3d: (0x9435, 0),# East Asian ideograph + 0x215e3e: (0x943a, 0),# East Asian ideograph + 0x215e3f: (0x9438, 0),# East Asian ideograph + 0x215e40: (0x9432, 0),# East Asian ideograph + 0x223a60: (0x675d, 0),# East Asian ideograph + 0x215e42: (0x9451, 0),# East Asian ideograph + 0x215e43: (0x9444, 0),# East Asian ideograph + 0x215e44: (0x9463, 0),# East Asian ideograph + 0x215e45: (0x9460, 0),# East Asian ideograph + 0x215e46: (0x9472, 0),# East Asian ideograph + 0x215e47: (0x9470, 0),# East Asian ideograph + 0x215e48: (0x947e, 0),# East Asian ideograph + 0x215e49: (0x947c, 0),# East Asian ideograph + 0x235e4a: (0x9ed0, 0),# East Asian ideograph + 0x215e4b: (0x947f, 0),# East Asian ideograph + 0x215e4c: (0x9577, 0),# East Asian ideograph + 0x215e4d: (0x9580, 0),# East Asian ideograph + 0x215e4e: (0x9582, 0),# East Asian ideograph + 0x215e4f: (0x9583, 0),# East Asian ideograph + 0x215e50: (0x9589, 0),# East Asian ideograph + 0x215e51: (0x9594, 0),# East Asian ideograph + 0x215e52: (0x958f, 0),# East Asian ideograph + 0x235e53: (0x9eda, 0),# East Asian ideograph + 0x215e54: (0x9591, 0),# East Asian ideograph + 0x235e55: (0x9edf, 0),# East Asian ideograph + 0x215e56: (0x9592, 0),# East Asian ideograph + 0x215e57: (0x9598, 0),# East Asian ideograph + 0x215e58: (0x95a1, 0),# East Asian ideograph + 0x235e59: (0x9ee5, 0),# East Asian ideograph + 0x215e5a: (0x95a9, 0),# East Asian ideograph + 0x215e5b: (0x95a3, 0),# East Asian ideograph + 0x215e5c: (0x95a5, 0),# East Asian ideograph + 0x215e5d: (0x95a4, 0),# East Asian ideograph + 0x215e5e: (0x95b1, 0),# East Asian ideograph + 0x215e5f: (0x95ad, 0),# East Asian ideograph + 0x235e60: (0x9eee, 0),# East Asian ideograph + 0x215e61: (0x95ca, 0),# East Asian ideograph + 0x215e62: (0x95cb, 0),# East Asian ideograph + 0x215e63: (0x95cc, 0),# East Asian ideograph + 0x215e64: (0x95c8, 0),# East Asian ideograph + 0x215e65: (0x95c6, 0),# East Asian ideograph + 0x235e66: (0x9ef0, 0),# East Asian ideograph + 0x215e67: (0x95d6, 0),# East Asian ideograph + 0x215e68: (0x95d0, 0),# East Asian ideograph + 0x215e69: (0x95dc, 0),# East Asian ideograph + 0x215e6a: (0x95e1, 0),# East Asian ideograph + 0x215e6b: (0x95e2, 0),# East Asian ideograph + 0x215e6c: (0x961c, 0),# East Asian ideograph + 0x215e6d: (0x9621, 0),# East Asian ideograph + 0x215e6e: (0x9632, 0),# East Asian ideograph + 0x215e6f: (0x9631, 0),# East Asian ideograph + 0x215e70: (0x962e, 0),# East Asian ideograph + 0x215e71: (0x962a, 0),# East Asian ideograph + 0x215e72: (0x9640, 0),# East Asian ideograph + 0x215e73: (0x963f, 0),# East Asian ideograph + 0x215e74: (0x963b, 0),# East Asian ideograph + 0x215e75: (0x9644, 0),# East Asian ideograph + 0x215e76: (0x9650, 0),# East Asian ideograph + 0x235e77: (0x9efc, 0),# East Asian ideograph + 0x215e78: (0x964b, 0),# East Asian ideograph + 0x215e79: (0x964d, 0),# East Asian ideograph + 0x235e7a: (0x9efd, 0),# East Asian ideograph + 0x215e7b: (0x9663, 0),# East Asian ideograph + 0x235e7c: (0x9eff, 0),# East Asian ideograph + 0x215e7d: (0x9661, 0),# East Asian ideograph + 0x225e7e: (0x7603, 0),# East Asian ideograph + 0x6f5465: (0xc479, 0),# Korean hangul + 0x223a6b: (0x6763, 0),# East Asian ideograph + 0x223a6e: (0x6753, 0),# East Asian ideograph + 0x2d355c: (0x5434, 0),# East Asian ideograph + 0x213a6f: (0x5b98, 0),# East Asian ideograph + 0x6f5466: (0xc480, 0),# Korean hangul + 0x6f5440: (0xc328, 0),# Korean hangul + 0x293a70: (0x8e9c, 0),# East Asian ideograph + 0x213a4b: (0x5b38, 0),# East Asian ideograph + 0x294936: (0x95f3, 0),# East Asian ideograph + 0x215821: (0x896a, 0),# East Asian ideograph + 0x233a71: (0x8ea9, 0),# East Asian ideograph + 0x692524: (0x30a4, 0),# Katakana letter I + 0x213a72: (0x5ba5, 0),# East Asian ideograph + 0x6f595f: (0xce04, 0),# Korean hangul + 0x2d3b52: (0x6eba, 0),# East Asian ideograph + 0x223a75: (0x6793, 0),# East Asian ideograph + 0x23424a: (0x9216, 0),# East Asian ideograph + 0x6f2521: (0x315c, 0),# Korean hangul + 0x4b4767: (0x6db5, 0),# East Asian ideograph (variant of 214767 which maps to 6DB5) + 0x28342c: (0x63ba, 0),# East Asian ideograph + 0x295a44: (0x9e32, 0),# East Asian ideograph + 0x223a78: (0x677c, 0),# East Asian ideograph + 0x692523: (0x30a3, 0),# Katakana letter small I + 0x292524: (0x848c, 0),# East Asian ideograph + 0x29322a: (0x8bb5, 0),# East Asian ideograph + 0x223a7a: (0x679f, 0),# East Asian ideograph + 0x226065: (0x76a4, 0),# East Asian ideograph + 0x23424b: (0x9211, 0),# East Asian ideograph + 0x4d472c: (0x952a, 0),# East Asian ideograph + 0x4d5934: (0x9ca6, 0),# East Asian ideograph + 0x213a7c: (0x5bae, 0),# East Asian ideograph + 0x692527: (0x30a7, 0),# Katakana letter small E + 0x213d2e: (0x5eec, 0),# East Asian ideograph + 0x233a7d: (0x8eb6, 0),# East Asian ideograph + 0x692528: (0x30a8, 0),# Katakana letter E + 0x6f5469: (0xc4d5, 0),# Korean hangul + 0x69252a: (0x30aa, 0),# Katakana letter O + 0x283b22: (0x4e2b, 0),# East Asian ideograph + 0x22652c: (0x7892, 0),# East Asian ideograph + 0x28342e: (0x63bc, 0),# East Asian ideograph + 0x235359: (0x9a2f, 0),# East Asian ideograph + 0x22252d: (0x5d47, 0),# East Asian ideograph + 0x2d4829: (0x51cf, 0),# East Asian ideograph + 0x6f5027: (0xba4b, 0),# Korean hangul + 0x23252f: (0x84e7, 0),# East Asian ideograph + 0x215f21: (0x9664, 0),# East Asian ideograph + 0x215f22: (0x966a, 0),# East Asian ideograph + 0x215f23: (0x9673, 0),# East Asian ideograph + 0x215f24: (0x9678, 0),# East Asian ideograph + 0x215f25: (0x9675, 0),# East Asian ideograph + 0x215f26: (0x9672, 0),# East Asian ideograph + 0x215f27: (0x9676, 0),# East Asian ideograph + 0x215f28: (0x9677, 0),# East Asian ideograph + 0x215f29: (0x9674, 0),# East Asian ideograph + 0x215f2a: (0x9670, 0),# East Asian ideograph + 0x215f2b: (0x968a, 0),# East Asian ideograph + 0x215f2c: (0x968e, 0),# East Asian ideograph + 0x215f2d: (0x968b, 0),# East Asian ideograph + 0x215f2e: (0x967d, 0),# East Asian ideograph + 0x235f2f: (0x9f0f, 0),# East Asian ideograph + 0x215f30: (0x9686, 0),# East Asian ideograph + 0x235f31: (0x9f10, 0),# East Asian ideograph + 0x235f32: (0x9f12, 0),# East Asian ideograph + 0x235f33: (0x9f16, 0),# East Asian ideograph + 0x235f34: (0x9f17, 0),# East Asian ideograph + 0x215f35: (0x9695, 0),# East Asian ideograph + 0x215f36: (0x969c, 0),# East Asian ideograph + 0x235f37: (0x9f1a, 0),# East Asian ideograph + 0x215f38: (0x96a7, 0),# East Asian ideograph + 0x215f39: (0x96a8, 0),# East Asian ideograph + 0x215f3a: (0x96aa, 0),# East Asian ideograph + 0x215f3b: (0x96b1, 0),# East Asian ideograph + 0x215f3c: (0x96b4, 0),# East Asian ideograph + 0x215f3d: (0x96b8, 0),# East Asian ideograph + 0x225f3e: (0x7625, 0),# East Asian ideograph + 0x225f3f: (0x761a, 0),# East Asian ideograph + 0x215f40: (0x96c7, 0),# East Asian ideograph + 0x215f41: (0x96c6, 0),# East Asian ideograph + 0x215f42: (0x96c4, 0),# East Asian ideograph + 0x215f43: (0x96c1, 0),# East Asian ideograph + 0x215f44: (0x96c5, 0),# East Asian ideograph + 0x215f45: (0x96cd, 0),# East Asian ideograph + 0x215f46: (0x96cb, 0),# East Asian ideograph + 0x215f47: (0x96c9, 0),# East Asian ideograph + 0x215f48: (0x96cc, 0),# East Asian ideograph + 0x215f49: (0x96d5, 0),# East Asian ideograph + 0x215f4a: (0x96d6, 0),# East Asian ideograph + 0x215f4b: (0x96dc, 0),# East Asian ideograph + 0x215f4c: (0x96de, 0),# East Asian ideograph + 0x215f4d: (0x96db, 0),# East Asian ideograph + 0x215f4e: (0x96d9, 0),# East Asian ideograph + 0x215f4f: (0x96e2, 0),# East Asian ideograph + 0x225f50: (0x7622, 0),# East Asian ideograph + 0x225f51: (0x762f, 0),# East Asian ideograph + 0x215f52: (0x96ea, 0),# East Asian ideograph + 0x215f53: (0x96ef, 0),# East Asian ideograph + 0x215f54: (0x96f2, 0),# East Asian ideograph + 0x215f55: (0x96fb, 0),# East Asian ideograph + 0x215f56: (0x96f7, 0),# East Asian ideograph + 0x215f57: (0x96f9, 0),# East Asian ideograph + 0x215f58: (0x96f6, 0),# East Asian ideograph + 0x215f59: (0x9700, 0),# East Asian ideograph + 0x23424f: (0x92a2, 0),# East Asian ideograph + 0x215f5b: (0x9704, 0),# East Asian ideograph + 0x215f5c: (0x9709, 0),# East Asian ideograph + 0x215f5d: (0x9706, 0),# East Asian ideograph + 0x225f5e: (0x763b, 0),# East Asian ideograph + 0x215f5f: (0x970e, 0),# East Asian ideograph + 0x225f60: (0x763c, 0),# East Asian ideograph + 0x215f61: (0x970f, 0),# East Asian ideograph + 0x225f62: (0x7635, 0),# East Asian ideograph + 0x215f63: (0x9713, 0),# East Asian ideograph + 0x235f64: (0x9f3d, 0),# East Asian ideograph + 0x215f65: (0x971e, 0),# East Asian ideograph + 0x215f66: (0x972a, 0),# East Asian ideograph + 0x225f67: (0x7648, 0),# East Asian ideograph + 0x225f68: (0x764e, 0),# East Asian ideograph + 0x235f69: (0x9f41, 0),# East Asian ideograph + 0x225f6a: (0x7643, 0),# East Asian ideograph + 0x215f6b: (0x973d, 0),# East Asian ideograph + 0x215f6c: (0x973e, 0),# East Asian ideograph + 0x215f6d: (0x9744, 0),# East Asian ideograph + 0x215f6e: (0x9742, 0),# East Asian ideograph + 0x225f6f: (0x7649, 0),# East Asian ideograph + 0x215f70: (0x9751, 0),# East Asian ideograph + 0x215f71: (0xfa1c, 0),# East Asian ideograph + 0x215f72: (0x975b, 0),# East Asian ideograph (variant of 4B5F72 which maps to 975B) + 0x215f73: (0x975c, 0),# East Asian ideograph + 0x215f74: (0x975e, 0),# East Asian ideograph + 0x225f75: (0x7654, 0),# East Asian ideograph + 0x215f76: (0x9761, 0),# East Asian ideograph + 0x215f78: (0x9766, 0),# East Asian ideograph + 0x235f79: (0x9f4e, 0),# East Asian ideograph + 0x225f7a: (0x765c, 0),# East Asian ideograph + 0x235f7b: (0x9f4f, 0),# East Asian ideograph + 0x235f7c: (0x9f54, 0),# East Asian ideograph + 0x215f7d: (0x977c, 0),# East Asian ideograph + 0x235f7e: (0x9f55, 0),# East Asian ideograph + 0x216540: (0x4f66, 0),# East Asian ideograph + 0x692541: (0x30c1, 0),# Katakana letter TI + 0x6f5622: (0xc644, 0),# Korean hangul + 0x6f546e: (0xc500, 0),# Korean hangul + 0x6f502b: (0xba54, 0),# Korean hangul + 0x215829: (0x898f, 0),# East Asian ideograph + 0x234251: (0x9230, 0),# East Asian ideograph + 0x225c28: (0x74b5, 0),# East Asian ideograph + 0x216544: (0x4f67, 0),# East Asian ideograph + 0x695429: (0x5726, 0),# East Asian ideograph + 0x6f515c: (0xbd88, 0),# Korean hangul + 0x292546: (0x8368, 0),# East Asian ideograph + 0x233145: (0x89dc, 0),# East Asian ideograph + 0x692547: (0x30c7, 0),# Katakana letter DE + 0x225c29: (0x74ba, 0),# East Asian ideograph + 0x213a48: (0x5b2a, 0),# East Asian ideograph + 0x6f492d: (0xac85, 0),# Korean hangul + 0x69254a: (0x30ca, 0),# Katakana letter NA + 0x29254b: (0x835b, 0),# East Asian ideograph + 0x2d482f: (0x6e07, 0),# East Asian ideograph + 0x6f5442: (0xc330, 0),# Korean hangul + 0x70586f: (0x4eeb, 0),# East Asian ideograph + 0x274142: (0x6325, 0),# East Asian ideograph + 0x6f502d: (0xba58, 0),# Korean hangul + 0x23254d: (0x8553, 0),# East Asian ideograph + 0x21654e: (0x4f5a, 0),# East Asian ideograph + 0x335065: (0x7a45, 0),# East Asian ideograph + 0x2e3b22: (0x690f, 0),# East Asian ideograph + 0x224f61: (0x7044, 0),# East Asian ideograph + 0x692550: (0x30d0, 0),# Katakana letter BA + 0x6f5c71: (0xd57c, 0),# Korean hangul + 0x222551: (0x5d8e, 0),# East Asian ideograph + 0x6f586b: (0xcb58, 0),# Korean hangul + 0x335834: (0x89e7, 0),# East Asian ideograph + 0x2d593d: (0x8ae9, 0),# East Asian ideograph + 0x4b4476: (0x685f, 0),# East Asian ideograph + 0x692555: (0x30d5, 0),# Katakana letter HU + 0x216556: (0x4f82, 0),# East Asian ideograph + 0x6f5a3a: (0xcf2d, 0),# Korean hangul + 0x6f502f: (0xba64, 0),# Korean hangul + 0x692557: (0x30d7, 0),# Katakana letter PU + 0x294942: (0x9606, 0),# East Asian ideograph + 0x234255: (0x9248, 0),# East Asian ideograph + 0x692558: (0x30d8, 0),# Katakana letter HE + 0x47347b: (0x8c2b, 0),# East Asian ideograph + 0x6f5262: (0xc0af, 0),# Korean hangul + 0x23255a: (0x8546, 0),# East Asian ideograph + 0x216021: (0x978d, 0),# East Asian ideograph + 0x226022: (0x7664, 0),# East Asian ideograph + 0x236023: (0x9f57, 0),# East Asian ideograph + 0x226024: (0x7659, 0),# East Asian ideograph + 0x216025: (0x97a0, 0),# East Asian ideograph + 0x216026: (0x97a3, 0),# East Asian ideograph + 0x216027: (0x97a6, 0),# East Asian ideograph + 0x236028: (0x9f60, 0),# East Asian ideograph + 0x216029: (0x97c3, 0),# East Asian ideograph + 0x21602a: (0x97c1, 0),# East Asian ideograph + 0x22602b: (0x765f, 0),# East Asian ideograph + 0x21602c: (0x97cb, 0),# East Asian ideograph + 0x21602d: (0x97cc, 0),# East Asian ideograph + 0x21602e: (0x97d3, 0),# East Asian ideograph + 0x21602f: (0x97dc, 0),# East Asian ideograph + 0x216030: (0x97ed, 0),# East Asian ideograph + 0x216031: (0x97f3, 0),# East Asian ideograph + 0x226032: (0x7667, 0),# East Asian ideograph + 0x216033: (0x7adf, 0),# East Asian ideograph + 0x216034: (0x97f6, 0),# East Asian ideograph + 0x226035: (0x766a, 0),# East Asian ideograph + 0x216036: (0x97ff, 0),# East Asian ideograph (variant of 456036 which maps to 97FF) + 0x226037: (0x766d, 0),# East Asian ideograph + 0x226038: (0x766f, 0),# East Asian ideograph + 0x216039: (0x9803, 0),# East Asian ideograph + 0x22603a: (0x7670, 0),# East Asian ideograph + 0x21603b: (0x9806, 0),# East Asian ideograph + 0x21603c: (0x9808, 0),# East Asian ideograph + 0x21603d: (0x9810, 0),# East Asian ideograph + 0x21603e: (0x980a, 0),# East Asian ideograph + 0x21603f: (0x9811, 0),# East Asian ideograph + 0x226040: (0x7676, 0),# East Asian ideograph + 0x226041: (0x7677, 0),# East Asian ideograph + 0x216042: (0x980c, 0),# East Asian ideograph + 0x216043: (0x9817, 0),# East Asian ideograph + 0x216044: (0x9818, 0),# East Asian ideograph (variant of 4B6044 which maps to 9818) + 0x216045: (0x9821, 0),# East Asian ideograph + 0x216046: (0x982d, 0),# East Asian ideograph + 0x216047: (0x9830, 0),# East Asian ideograph + 0x226048: (0x7680, 0),# East Asian ideograph + 0x21582f: (0x89b2, 0),# East Asian ideograph + 0x22604a: (0x768b, 0),# East Asian ideograph + 0x21604b: (0x9837, 0),# East Asian ideograph + 0x21604c: (0x9824, 0),# East Asian ideograph + 0x21604d: (0x9846, 0),# East Asian ideograph + 0x21604e: (0x9854, 0),# East Asian ideograph + 0x21604f: (0x984d, 0),# East Asian ideograph + 0x216050: (0x984c, 0),# East Asian ideograph + 0x216051: (0x984e, 0),# East Asian ideograph + 0x226052: (0x7695, 0),# East Asian ideograph + 0x216053: (0x985e, 0),# East Asian ideograph (variant of 4B6053 which maps to 985E) + 0x216054: (0x985a, 0),# East Asian ideograph + 0x226055: (0x656b, 0),# East Asian ideograph + 0x216056: (0x9867, 0),# East Asian ideograph + 0x216057: (0x986b, 0),# East Asian ideograph + 0x216058: (0x986f, 0),# East Asian ideograph + 0x226059: (0x7699, 0),# East Asian ideograph + 0x21605a: (0x9870, 0),# East Asian ideograph + 0x21605b: (0x98a8, 0),# East Asian ideograph + 0x21605c: (0x98af, 0),# East Asian ideograph + 0x22605d: (0x769c, 0),# East Asian ideograph + 0x21605e: (0x98b3, 0),# East Asian ideograph + 0x22605f: (0x769d, 0),# East Asian ideograph + 0x216060: (0x98ba, 0),# East Asian ideograph + 0x236061: (0x9f93, 0),# East Asian ideograph + 0x216062: (0x98c4, 0),# East Asian ideograph + 0x216063: (0x98db, 0),# East Asian ideograph + 0x216064: (0x98df, 0),# East Asian ideograph + 0x216065: (0x98e2, 0),# East Asian ideograph + 0x226066: (0x76a5, 0),# East Asian ideograph + 0x226067: (0x76a6, 0),# East Asian ideograph + 0x216068: (0x98ed, 0),# East Asian ideograph + 0x216069: (0x98ea, 0),# East Asian ideograph + 0x21606a: (0x98ee, 0),# East Asian ideograph + 0x23606b: (0x9fa0, 0),# East Asian ideograph + 0x21606c: (0x98fc, 0),# East Asian ideograph + 0x21606d: (0x98f4, 0),# East Asian ideograph + 0x21606e: (0x98fd, 0),# East Asian ideograph + 0x21606f: (0x98fe, 0),# East Asian ideograph + 0x216070: (0x9903, 0),# East Asian ideograph + 0x216071: (0x990a, 0),# East Asian ideograph + 0x236072: (0x9fa4, 0),# East Asian ideograph + 0x216073: (0x9909, 0),# East Asian ideograph + 0x226074: (0x76b8, 0),# East Asian ideograph + 0x216075: (0x9912, 0),# East Asian ideograph + 0x216076: (0x9918, 0),# East Asian ideograph + 0x226077: (0x76bd, 0),# East Asian ideograph + 0x216078: (0x9905, 0),# East Asian ideograph + 0x216079: (0x9928, 0),# East Asian ideograph + 0x21607a: (0x991e, 0),# East Asian ideograph + 0x21607b: (0x991b, 0),# East Asian ideograph + 0x21607c: (0x9921, 0),# East Asian ideograph + 0x21607d: (0x9935, 0),# East Asian ideograph + 0x21607e: (0x993e, 0),# East Asian ideograph + 0x6f5369: (0xc258, 0),# Korean hangul + 0x6f5033: (0xba71, 0),# Korean hangul + 0x213a5b: (0x5b6b, 0),# East Asian ideograph + 0x69256b: (0x30eb, 0),# Katakana letter RU + 0x69256c: (0x30ec, 0),# Katakana letter RE + 0x293670: (0x8d49, 0),# East Asian ideograph + 0x69656d: (0x7e83, 0),# East Asian ideograph + 0x224f67: (0x7047, 0),# East Asian ideograph + 0x235172: (0x994c, 0),# East Asian ideograph + 0x69256f: (0x30ef, 0),# Katakana letter WA + 0x2e4c35: (0x6de5, 0),# East Asian ideograph + 0x6f5034: (0xba74, 0),# Korean hangul + 0x213a5c: (0x5b70, 0),# East Asian ideograph + 0x6f5934: (0xcc59, 0),# Korean hangul + 0x4d4f39: (0x988c, 0),# East Asian ideograph + 0x292571: (0x835e, 0),# East Asian ideograph + 0x226573: (0x78e0, 0),# East Asian ideograph + 0x6f4e4c: (0xb6b1, 0),# Korean hangul + 0x292574: (0x83b8, 0),# East Asian ideograph + 0x4b3a47: (0x88ca, 0),# East Asian ideograph + 0x6f5035: (0xba78, 0),# Korean hangul + 0x692575: (0x30f5, 0),# Katakana letter small KA + 0x294948: (0x960f, 0),# East Asian ideograph + 0x213378: (0x5275, 0),# East Asian ideograph + 0x225c32: (0x74cc, 0),# East Asian ideograph + 0x216576: (0x4f9c, 0),# East Asian ideograph + 0x215021: (0x7b4d, 0),# East Asian ideograph + 0x6f5c6c: (0xd56d, 0),# Korean hangul + 0x232577: (0x858c, 0),# East Asian ideograph + 0x214b6a: (0x74ca, 0),# East Asian ideograph + 0x224f69: (0x7049, 0),# East Asian ideograph + 0x216940: (0x5133, 0),# East Asian ideograph + 0x692578: (0x309c, 0),# Katakana-hiragana semi-voiced sound mark + 0x275023: (0x8345, 0),# East Asian ideograph + 0x2e742e: (0x7516, 0),# East Asian ideograph + 0x6f5479: (0xc53d, 0),# Korean hangul + 0x6f5024: (0xba40, 0),# Korean hangul + 0x6f5036: (0xba83, 0),# Korean hangul + 0x213a5e: (0x5b71, 0),# East Asian ideograph + 0x294949: (0x9608, 0),# East Asian ideograph + 0x225025: (0x7066, 0),# East Asian ideograph + 0x2e257b: (0x5d1f, 0),# East Asian ideograph + 0x6f5026: (0xba49, 0),# Korean hangul + 0x6f4a5f: (0xaecd, 0),# Korean hangul + 0x225027: (0x7065, 0),# East Asian ideograph + 0x235369: (0x9a36, 0),# East Asian ideograph + 0x225028: (0x7068, 0),# East Asian ideograph + 0x234f26: (0x9816, 0),# East Asian ideograph + 0x215029: (0x7b95, 0),# East Asian ideograph + 0x276272: (0x9ee9, 0),# East Asian ideograph + 0x213a5f: (0x5b75, 0),# East Asian ideograph + 0x27502a: (0x94b3, 0),# East Asian ideograph + 0x27502b: (0x7b3a, 0),# East Asian ideograph + 0x6f502c: (0xba55, 0),# Korean hangul + 0x224f6b: (0x7055, 0),# East Asian ideograph + 0x23536a: (0x9a2e, 0),# East Asian ideograph + 0x2d502d: (0x7b5d, 0),# East Asian ideograph + 0x4c4339: (0x69de, 0),# East Asian ideograph + 0x6f502e: (0xba5c, 0),# Korean hangul + 0x6f5038: (0xba85, 0),# Korean hangul + 0x213a60: (0x5b78, 0),# East Asian ideograph + 0x21502f: (0x7bad, 0),# East Asian ideograph + 0x215030: (0x7bc4, 0),# East Asian ideograph + 0x216122: (0x993d, 0),# East Asian ideograph + 0x226123: (0x76cb, 0),# East Asian ideograph + 0x216124: (0x9952, 0),# East Asian ideograph + 0x216125: (0x9951, 0),# East Asian ideograph + 0x226126: (0x76cc, 0),# East Asian ideograph + 0x216127: (0x995e, 0),# East Asian ideograph + 0x216128: (0x9996, 0),# East Asian ideograph + 0x216129: (0x9999, 0),# East Asian ideograph + 0x21612a: (0x99a5, 0),# East Asian ideograph + 0x21612b: (0x99a8, 0),# East Asian ideograph + 0x21612c: (0x99ac, 0),# East Asian ideograph + 0x21612d: (0x99ae, 0),# East Asian ideograph + 0x21612e: (0x99ad, 0),# East Asian ideograph + 0x21612f: (0x99b3, 0),# East Asian ideograph + 0x216130: (0x99b1, 0),# East Asian ideograph + 0x216131: (0x99b4, 0),# East Asian ideograph + 0x216132: (0x99c1, 0),# East Asian ideograph + 0x275033: (0x8282, 0),# East Asian ideograph + 0x216134: (0x99dd, 0),# East Asian ideograph + 0x216135: (0x99d5, 0),# East Asian ideograph + 0x216136: (0x99df, 0),# East Asian ideograph + 0x216137: (0x99db, 0),# East Asian ideograph + 0x216138: (0x99d2, 0),# East Asian ideograph + 0x216139: (0x99d9, 0),# East Asian ideograph + 0x21613a: (0x99d1, 0),# East Asian ideograph + 0x21613b: (0x99ed, 0),# East Asian ideograph + 0x21613c: (0x99f1, 0),# East Asian ideograph + 0x21613d: (0x9a01, 0),# East Asian ideograph + 0x21613e: (0x99ff, 0),# East Asian ideograph + 0x21613f: (0x99e2, 0),# East Asian ideograph + 0x216140: (0x9a0e, 0),# East Asian ideograph + 0x216141: (0x9a19, 0),# East Asian ideograph + 0x216142: (0x9a16, 0),# East Asian ideograph + 0x216143: (0x9a2b, 0),# East Asian ideograph + 0x226144: (0x76ed, 0),# East Asian ideograph + 0x216145: (0x9a37, 0),# East Asian ideograph + 0x216146: (0x9a43, 0),# East Asian ideograph + 0x216147: (0x9a45, 0),# East Asian ideograph + 0x226148: (0x76f1, 0),# East Asian ideograph + 0x216149: (0x9a3e, 0),# East Asian ideograph + 0x21614a: (0x9a55, 0),# East Asian ideograph + 0x21614b: (0x9a5a, 0),# East Asian ideograph + 0x21614c: (0x9a5b, 0),# East Asian ideograph + 0x21614d: (0x9a57, 0),# East Asian ideograph + 0x21614e: (0x9a5f, 0),# East Asian ideograph + 0x22614f: (0x7708, 0),# East Asian ideograph + 0x226150: (0x7707, 0),# East Asian ideograph + 0x275038: (0x7bac, 0),# East Asian ideograph + 0x216152: (0x9aa8, 0),# East Asian ideograph + 0x216153: (0x9aaf, 0),# East Asian ideograph + 0x226154: (0x770a, 0),# East Asian ideograph + 0x216155: (0x9ab7, 0),# East Asian ideograph + 0x216156: (0x9ab8, 0),# East Asian ideograph + 0x215039: (0x7be4, 0),# East Asian ideograph + 0x216158: (0x9acf, 0),# East Asian ideograph + 0x226159: (0x76fb, 0),# East Asian ideograph + 0x21615a: (0x9ad4, 0),# East Asian ideograph + 0x21615b: (0x9ad2, 0),# East Asian ideograph + 0x21615c: (0x9ad8, 0),# East Asian ideograph + 0x21615d: (0x9ae5, 0),# East Asian ideograph + 0x22615e: (0x772b, 0),# East Asian ideograph + 0x21615f: (0x9aee, 0),# East Asian ideograph + 0x216160: (0x9afb, 0),# East Asian ideograph + 0x216161: (0x9aed, 0),# East Asian ideograph + 0x216162: (0x9b03, 0),# East Asian ideograph + 0x216163: (0x9b06, 0),# East Asian ideograph + 0x216164: (0x9b0d, 0),# East Asian ideograph + 0x216165: (0x9b1a, 0),# East Asian ideograph + 0x216166: (0x9b22, 0),# East Asian ideograph + 0x216167: (0x9b25, 0),# East Asian ideograph + 0x216168: (0x9b27, 0),# East Asian ideograph + 0x27503c: (0x7b5b, 0),# East Asian ideograph + 0x21616a: (0x9b31, 0),# East Asian ideograph + 0x21616b: (0x9b32, 0),# East Asian ideograph + 0x21616c: (0x9b3c, 0),# East Asian ideograph + 0x21616d: (0x9b41, 0),# East Asian ideograph + 0x21616e: (0x9b42, 0),# East Asian ideograph + 0x22616f: (0x7721, 0),# East Asian ideograph + 0x216170: (0x9b44, 0),# East Asian ideograph + 0x216171: (0x9b4f, 0),# East Asian ideograph + 0x216172: (0x9b54, 0),# East Asian ideograph + 0x216173: (0x9b58, 0),# East Asian ideograph + 0x216174: (0x9b5a, 0),# East Asian ideograph + 0x226175: (0x7739, 0),# East Asian ideograph + 0x226176: (0x772f, 0),# East Asian ideograph + 0x216177: (0x9b91, 0),# East Asian ideograph + 0x216178: (0x9bab, 0),# East Asian ideograph + 0x216179: (0x9bae, 0),# East Asian ideograph + 0x21617a: (0x9baa, 0),# East Asian ideograph + 0x21617b: (0x9bca, 0),# East Asian ideograph + 0x21617c: (0x9bc9, 0),# East Asian ideograph + 0x21617d: (0x9be8, 0),# East Asian ideograph + 0x21617e: (0x9be7, 0),# East Asian ideograph + 0x215040: (0x7bf7, 0),# East Asian ideograph + 0x275041: (0x7b80, 0),# East Asian ideograph + 0x225042: (0x7086, 0),# East Asian ideograph + 0x6f503c: (0xbaab, 0),# Korean hangul + 0x29596b: (0x9ca1, 0),# East Asian ideograph + 0x335f3d: (0x96b7, 0),# East Asian ideograph + 0x29494f: (0x960a, 0),# East Asian ideograph + 0x6f5043: (0xbac3, 0),# Korean hangul + 0x4b5044: (0x7c27, 0),# East Asian ideograph (variant of 215044 which maps to 7C27) + 0x275045: (0x7baa, 0),# East Asian ideograph + 0x2e3d73: (0x7a1c, 0),# East Asian ideograph + 0x275046: (0x7bd1, 0),# East Asian ideograph + 0x6f5047: (0xbb34, 0),# Korean hangul + 0x6f503d: (0xbaac, 0),# Korean hangul + 0x213a65: (0x5b87, 0),# East Asian ideograph + 0x294950: (0x960c, 0),# East Asian ideograph + 0x235048: (0x98b8, 0),# East Asian ideograph + 0x225c3a: (0x74d4, 0),# East Asian ideograph + 0x27583a: (0x8ba3, 0),# East Asian ideograph + 0x225049: (0x7084, 0),# East Asian ideograph + 0x2d594c: (0x8b72, 0),# East Asian ideograph + 0x6f5960: (0xce20, 0),# Korean hangul + 0x22504a: (0x7081, 0),# East Asian ideograph + 0x235370: (0x9a41, 0),# East Asian ideograph + 0x21504b: (0x7c3d, 0),# East Asian ideograph + 0x4d3032: (0x88ae, 0),# East Asian ideograph + 0x6f5a3d: (0xcf54, 0),# Korean hangul + 0x27504c: (0x7bee, 0),# East Asian ideograph + 0x274153: (0x6363, 0),# East Asian ideograph + 0x4d5c6b: (0x9d50, 0),# East Asian ideograph + 0x213a66: (0x5b88, 0),# East Asian ideograph + 0x21504d: (0x7c4c, 0),# East Asian ideograph + 0x234264: (0x925e, 0),# East Asian ideograph + 0x2d3b77: (0x5ce9, 0),# East Asian ideograph + 0x21504e: (0x7c4d, 0),# East Asian ideograph + 0x6f5025: (0xba48, 0),# Korean hangul + 0x2d504f: (0x7c58, 0),# East Asian ideograph + 0x69542a: (0x5737, 0),# East Asian ideograph + 0x293b59: (0x8f82, 0),# East Asian ideograph + 0x4b4b2b: (0x7363, 0),# East Asian ideograph + 0x275050: (0x7b3c, 0),# East Asian ideograph + 0x275051: (0x7c41, 0),# East Asian ideograph + 0x6f503f: (0xbab8, 0),# Korean hangul + 0x213a67: (0x5b89, 0),# East Asian ideograph + 0x294952: (0x960d, 0),# East Asian ideograph + 0x275052: (0x7b7e, 0),# East Asian ideograph (duplicate simplified) + 0x6f5963: (0xce35, 0),# Korean hangul + 0x2d3b78: (0x5cef, 0),# East Asian ideograph + 0x275053: (0x7bf1, 0),# East Asian ideograph + 0x4d594e: (0x9bf5, 0),# East Asian ideograph + 0x3f614c: (0x99c5, 0),# East Asian ideograph + 0x275054: (0x7ba9, 0),# East Asian ideograph + 0x4b6258: (0x68ba, 0),# East Asian ideograph + 0x275055: (0x5401, 0),# East Asian ideograph + 0x6f245a: (0x3139, 0),# Korean hangul + 0x225056: (0x7088, 0),# East Asian ideograph + 0x6f5040: (0xbab9, 0),# Korean hangul + 0x213a68: (0x5b85, 0),# East Asian ideograph + 0x21583e: (0x8a0c, 0),# East Asian ideograph + 0x2d3b79: (0x5d8b, 0),# East Asian ideograph + 0x6f5058: (0xbb88, 0),# Korean hangul + 0x2d594f: (0x8b83, 0),# East Asian ideograph + 0x225059: (0x708c, 0),# East Asian ideograph + 0x224b31: (0x6e5d, 0),# East Asian ideograph + 0x216221: (0x9c13, 0),# East Asian ideograph + 0x226222: (0x7725, 0),# East Asian ideograph + 0x216223: (0x9bfd, 0),# East Asian ideograph + 0x216224: (0x9c2d, 0),# East Asian ideograph + 0x216225: (0x9c25, 0),# East Asian ideograph + 0x226226: (0x7734, 0),# East Asian ideograph + 0x216227: (0x9c3e, 0),# East Asian ideograph + 0x216228: (0x9c3b, 0),# East Asian ideograph + 0x216229: (0x9c54, 0),# East Asian ideograph + 0x21622a: (0x9c57, 0),# East Asian ideograph + 0x21622b: (0x9c56, 0),# East Asian ideograph + 0x21622c: (0x9c49, 0),# East Asian ideograph + 0x22622d: (0x7747, 0),# East Asian ideograph + 0x21622e: (0x9c78, 0),# East Asian ideograph + 0x21622f: (0x9ce5, 0),# East Asian ideograph + 0x216230: (0x9ce9, 0),# East Asian ideograph + 0x226231: (0x7745, 0),# East Asian ideograph + 0x226232: (0x774d, 0),# East Asian ideograph + 0x216233: (0x9cf3, 0),# East Asian ideograph + 0x216234: (0x9d06, 0),# East Asian ideograph + 0x216235: (0x9d09, 0),# East Asian ideograph + 0x216236: (0x9d15, 0),# East Asian ideograph + 0x226237: (0x774e, 0),# East Asian ideograph + 0x216238: (0x9d28, 0),# East Asian ideograph + 0x216239: (0x9d26, 0),# East Asian ideograph + 0x22623a: (0x775f, 0),# East Asian ideograph + 0x21505f: (0x7cbd, 0),# East Asian ideograph + 0x21623c: (0x9d3b, 0),# East Asian ideograph + 0x21623d: (0x9d3f, 0),# East Asian ideograph + 0x22623e: (0x7752, 0),# East Asian ideograph + 0x21623f: (0x9d51, 0),# East Asian ideograph + 0x216240: (0x9d60, 0),# East Asian ideograph + 0x215060: (0x7cb9, 0),# East Asian ideograph + 0x226242: (0x7758, 0),# East Asian ideograph + 0x216243: (0x9d72, 0),# East Asian ideograph + 0x226244: (0x7756, 0),# East Asian ideograph + 0x226245: (0x775a, 0),# East Asian ideograph + 0x216246: (0x9db4, 0),# East Asian ideograph + 0x216247: (0x9daf, 0),# East Asian ideograph + 0x216248: (0x9dc2, 0),# East Asian ideograph + 0x216249: (0x9dd3, 0),# East Asian ideograph + 0x21624a: (0x9dd7, 0),# East Asian ideograph + 0x21624b: (0x9de5, 0),# East Asian ideograph + 0x21624c: (0x9df9, 0),# East Asian ideograph + 0x215062: (0x7cca, 0),# East Asian ideograph + 0x21624e: (0x9e1a, 0),# East Asian ideograph + 0x22624f: (0x7762, 0),# East Asian ideograph + 0x216250: (0x9e79, 0),# East Asian ideograph + 0x216251: (0x9e7d, 0),# East Asian ideograph + 0x226252: (0x7780, 0),# East Asian ideograph + 0x216253: (0x9e7f, 0),# East Asian ideograph + 0x216254: (0x9e82, 0),# East Asian ideograph + 0x216255: (0x9e8b, 0),# East Asian ideograph + 0x226256: (0x776f, 0),# East Asian ideograph + 0x216257: (0x9e92, 0),# East Asian ideograph + 0x216258: (0x9e93, 0),# East Asian ideograph + 0x224b33: (0x6e30, 0),# East Asian ideograph + 0x21625a: (0x9e9f, 0),# East Asian ideograph + 0x21625b: (0x9ea5, 0),# East Asian ideograph + 0x21625c: (0x9ea9, 0),# East Asian ideograph + 0x21625d: (0x9eb4, 0),# East Asian ideograph + 0x21625e: (0x9eb5, 0),# East Asian ideograph + 0x22625f: (0x7785, 0),# East Asian ideograph + 0x216260: (0x9ebc, 0),# East Asian ideograph + 0x216261: (0x9ebe, 0),# East Asian ideograph + 0x216262: (0x9ec3, 0),# East Asian ideograph + 0x216263: (0x9ecd, 0),# East Asian ideograph + 0x216264: (0x9ece, 0),# East Asian ideograph + 0x216265: (0x9ecf, 0),# East Asian ideograph + 0x226266: (0x778b, 0),# East Asian ideograph (variant of 4C6266 which maps to 778B) + 0x216267: (0x58a8, 0),# East Asian ideograph + 0x216268: (0x9ed8, 0),# East Asian ideograph + 0x216269: (0x9ed4, 0),# East Asian ideograph + 0x22626a: (0x778d, 0),# East Asian ideograph + 0x21626b: (0x9edc, 0),# East Asian ideograph + 0x21626c: (0x9edb, 0),# East Asian ideograph + 0x21626d: (0x9edd, 0),# East Asian ideograph + 0x21626e: (0x9ee0, 0),# East Asian ideograph + 0x21626f: (0x9ee8, 0),# East Asian ideograph + 0x216270: (0x9eef, 0),# East Asian ideograph + 0x235068: (0x98f1, 0),# East Asian ideograph + 0x226272: (0x7798, 0),# East Asian ideograph + 0x226273: (0x7796, 0),# East Asian ideograph + 0x216274: (0x9f0e, 0),# East Asian ideograph + 0x226275: (0x77a2, 0),# East Asian ideograph + 0x226276: (0x7799, 0),# East Asian ideograph + 0x216277: (0x9f19, 0),# East Asian ideograph + 0x216278: (0x9f20, 0),# East Asian ideograph + 0x216279: (0x9f2c, 0),# East Asian ideograph + 0x22627a: (0x77b5, 0),# East Asian ideograph + 0x21627b: (0x9f3b, 0),# East Asian ideograph + 0x21627c: (0x9f3e, 0),# East Asian ideograph + 0x22627d: (0x77b7, 0),# East Asian ideograph + 0x21627e: (0x9f4b, 0),# East Asian ideograph + 0x6f5044: (0xbafc, 0),# Korean hangul + 0x27506b: (0x7cae, 0),# East Asian ideograph + 0x6f5964: (0xce58, 0),# Korean hangul + 0x225c41: (0x74db, 0),# East Asian ideograph + 0x236040: (0x9f6f, 0),# East Asian ideograph + 0x23506c: (0x98eb, 0),# East Asian ideograph + 0x6f506d: (0xbc14, 0),# Korean hangul + 0x23315e: (0x89f5, 0),# East Asian ideograph + 0x6f506e: (0xbc15, 0),# Korean hangul + 0x4b4049: (0x62d0, 0),# East Asian ideograph + 0x234f34: (0x982b, 0),# East Asian ideograph + 0x22506f: (0x70a7, 0),# East Asian ideograph + 0x27415a: (0x5c4f, 0),# East Asian ideograph + 0x696273: (0x78b5, 0),# East Asian ideograph + 0x275070: (0x7eaa, 0),# East Asian ideograph + 0x215843: (0x8a13, 0),# East Asian ideograph + 0x225071: (0x70b5, 0),# East Asian ideograph + 0x275072: (0x7ea2, 0),# East Asian ideograph + 0x295a65: (0x9e39, 0),# East Asian ideograph + 0x215073: (0x7d09, 0),# East Asian ideograph + 0x396179: (0x5c20, 0),# East Asian ideograph + 0x275074: (0x7ea6, 0),# East Asian ideograph + 0x27415b: (0x631a, 0),# East Asian ideograph + 0x6f5046: (0xbb18, 0),# Korean hangul + 0x275075: (0x7ea5, 0),# East Asian ideograph + 0x215844: (0x8a2a, 0),# East Asian ideograph + 0x275076: (0x7eba, 0),# East Asian ideograph + 0x213b21: (0x5bc6, 0),# East Asian ideograph + 0x275077: (0x7eb9, 0),# East Asian ideograph + 0x213b22: (0x5bc7, 0),# East Asian ideograph + 0x235379: (0x9a42, 0),# East Asian ideograph + 0x215078: (0x7d0a, 0),# East Asian ideograph + 0x6f5729: (0xc7b0, 0),# Korean hangul + 0x213b23: (0x5bc5, 0),# East Asian ideograph + 0x6f5c72: (0xd584, 0),# Korean hangul + 0x6f5079: (0xbc2d, 0),# Korean hangul + 0x6f536d: (0xc27c, 0),# Korean hangul + 0x29495a: (0x9612, 0),# East Asian ideograph + 0x27507a: (0x7ead, 0),# East Asian ideograph + 0x213b25: (0x5bc2, 0),# East Asian ideograph + 0x22507b: (0x70e5, 0),# East Asian ideograph + 0x213b26: (0x5bbf, 0),# East Asian ideograph + 0x21507c: (0x7d15, 0),# East Asian ideograph + 0x224f7b: (0x705e, 0),# East Asian ideograph + 0x23537a: (0x9a44, 0),# East Asian ideograph + 0x22507d: (0x70d3, 0),# East Asian ideograph + 0x234f37: (0x9820, 0),# East Asian ideograph + 0x27507e: (0x7ebd, 0),# East Asian ideograph + 0x335276: (0x8061, 0),# East Asian ideograph + 0x6f5048: (0xbb35, 0),# Korean hangul + 0x215846: (0x8a1d, 0),# East Asian ideograph + 0x2d3b2a: (0x5ebd, 0),# East Asian ideograph + 0x2d5957: (0x7aea, 0),# East Asian ideograph + 0x4b386c: (0x5841, 0),# East Asian ideograph + 0x295a68: (0x9e3a, 0),# East Asian ideograph + 0x453336: (0x5b82, 0),# East Asian ideograph + 0x224b39: (0x6e6b, 0),# East Asian ideograph + 0x213b2d: (0x5be8, 0),# East Asian ideograph + 0x273b2e: (0x5bdd, 0),# East Asian ideograph + 0x6f5049: (0xbb36, 0),# Korean hangul + 0x213a71: (0x5b9b, 0),# East Asian ideograph + 0x6f5965: (0xce59, 0),# Korean hangul + 0x213b2f: (0x5be4, 0),# East Asian ideograph + 0x4b515a: (0x7e01, 0),# East Asian ideograph + 0x216321: (0x9f52, 0),# East Asian ideograph + 0x216322: (0x9f5f, 0),# East Asian ideograph + 0x216323: (0x9f63, 0),# East Asian ideograph + 0x216324: (0x9f61, 0),# East Asian ideograph (variant of 456324 which maps to 9F61) + 0x216325: (0x9f66, 0),# East Asian ideograph + 0x216326: (0x9f5c, 0),# East Asian ideograph + 0x233b31: (0x8ece, 0),# East Asian ideograph + 0x216328: (0x9f6a, 0),# East Asian ideograph + 0x216329: (0x9f77, 0),# East Asian ideograph + 0x21632a: (0x9f72, 0),# East Asian ideograph + 0x21632b: (0x9f8d, 0),# East Asian ideograph + 0x22632c: (0x77bc, 0),# East Asian ideograph + 0x21632d: (0x9f9c, 0),# East Asian ideograph + 0x216330: (0x8288, 0),# East Asian ideograph + 0x213b33: (0x5bdf, 0),# East Asian ideograph + 0x6f504a: (0xbb38, 0),# Korean hangul + 0x226335: (0x77cd, 0),# East Asian ideograph + 0x29307d: (0x89cf, 0),# East Asian ideograph + 0x696733: (0x81a4, 0),# East Asian ideograph + 0x225c47: (0x74de, 0),# East Asian ideograph + 0x6f4c3f: (0xb1d4, 0),# Korean hangul + 0x213b35: (0x5bec, 0),# East Asian ideograph + 0x706340: (0x61b7, 0),# East Asian ideograph + 0x45462b: (0x7688, 0),# East Asian ideograph + 0x226345: (0x77de, 0),# East Asian ideograph + 0x226346: (0x77df, 0),# East Asian ideograph + 0x23537d: (0x9a48, 0),# East Asian ideograph + 0x224b3b: (0x6e8b, 0),# East Asian ideograph + 0x213b37: (0x5beb, 0),# East Asian ideograph + 0x335738: (0x880f, 0),# East Asian ideograph + 0x69634e: (0x7a43, 0),# East Asian ideograph + 0x22634f: (0x77e7, 0),# East Asian ideograph + 0x274160: (0x63b4, 0),# East Asian ideograph + 0x226352: (0x77e6, 0),# East Asian ideograph + 0x226355: (0x77ec, 0),# East Asian ideograph + 0x273b39: (0x5b9d, 0),# East Asian ideograph + 0x69254d: (0x30cd, 0),# Katakana letter NE + 0x226359: (0x77f0, 0),# East Asian ideograph + 0x22635a: (0x77f1, 0),# East Asian ideograph + 0x22635c: (0x77f4, 0),# East Asian ideograph + 0x217b3a: (0x5a38, 0),# East Asian ideograph + 0x226360: (0x77fc, 0),# East Asian ideograph + 0x213b3b: (0x5bfa, 0),# East Asian ideograph + 0x23537e: (0x9a4c, 0),# East Asian ideograph + 0x226367: (0x77f8, 0),# East Asian ideograph + 0x226368: (0x77fb, 0),# East Asian ideograph + 0x277b3c: (0x5a05, 0),# East Asian ideograph + 0x355739: (0x9c76, 0),# East Asian ideograph + 0x234944: (0x95ab, 0),# East Asian ideograph + 0x226370: (0x7809, 0),# East Asian ideograph + 0x226371: (0x7806, 0),# East Asian ideograph + 0x226373: (0x7819, 0),# East Asian ideograph + 0x226374: (0x7811, 0),# East Asian ideograph + 0x293b3e: (0x8f71, 0),# East Asian ideograph + 0x4c6376: (0x7839, 0),# East Asian ideograph + 0x226378: (0x7812, 0),# East Asian ideograph + 0x223b3f: (0x67a1, 0),# East Asian ideograph + 0x213b40: (0x5c07, 0),# East Asian ideograph + 0x4b5e27: (0x93ad, 0),# East Asian ideograph + 0x273b42: (0x5bfb, 0),# East Asian ideograph + 0x6f504d: (0xbb3d, 0),# Korean hangul + 0x6f5935: (0xcc60, 0),# Korean hangul + 0x294960: (0x9619, 0),# East Asian ideograph + 0x213b43: (0x5c0d, 0),# East Asian ideograph + 0x223a31: (0x6710, 0),# East Asian ideograph + 0x273b44: (0x5bfc, 0),# East Asian ideograph + 0x224b3e: (0x6e76, 0),# East Asian ideograph + 0x234f3d: (0x9833, 0),# East Asian ideograph + 0x2d4850: (0x6eda, 0),# East Asian ideograph + 0x293b47: (0x8f77, 0),# East Asian ideograph + 0x6f504e: (0xbb44, 0),# Korean hangul + 0x275f39: (0x968f, 0),# East Asian ideograph + 0x23573f: (0x9ba8, 0),# East Asian ideograph + 0x274b74: (0x74ef, 0),# East Asian ideograph + 0x217b48: (0x5a50, 0),# East Asian ideograph + 0x213b49: (0x5c24, 0),# East Asian ideograph + 0x234e3b: (0x97c5, 0),# East Asian ideograph + 0x4b4053: (0x627a, 0),# East Asian ideograph + 0x213b4b: (0x5c31, 0),# East Asian ideograph + 0x273b4c: (0x5c34, 0),# East Asian ideograph + 0x6f504f: (0xbb47, 0),# Korean hangul + 0x275f3a: (0x9669, 0),# East Asian ideograph + 0x2d625f: (0x83fb, 0),# East Asian ideograph + 0x213634: (0x5501, 0),# East Asian ideograph + 0x213b4e: (0x5c3a, 0),# East Asian ideograph + 0x394956: (0x792e, 0),# East Asian ideograph + 0x2d7552: (0x579b, 0),# East Asian ideograph + 0x213b4f: (0x5c3c, 0),# East Asian ideograph + 0x69562c: (0x599b, 0),# East Asian ideograph + 0x294e54: (0x97ea, 0),# East Asian ideograph + 0x692574: (0x30f4, 0),# Katakana letter VU + 0x233b51: (0x8eff, 0),# East Asian ideograph + 0x6f5050: (0xbb49, 0),# Korean hangul + 0x275f3b: (0x9690, 0),# East Asian ideograph + 0x213635: (0x54fc, 0),# East Asian ideograph + 0x27516c: (0x7f1d, 0),# East Asian ideograph + 0x4b4537: (0x6804, 0),# East Asian ideograph + 0x213b54: (0x5c46, 0),# East Asian ideograph + 0x45304c: (0x69a6, 0),# East Asian ideograph + 0x234f40: (0x982e, 0),# East Asian ideograph + 0x2d4853: (0x7001, 0),# East Asian ideograph + 0x224a3d: (0x6da4, 0),# East Asian ideograph + 0x213b56: (0x5c48, 0),# East Asian ideograph + 0x6f5051: (0xbb4d, 0),# Korean hangul + 0x275f3c: (0x9647, 0),# East Asian ideograph + 0x334277: (0x65ef, 0),# East Asian ideograph + 0x213b58: (0x5c4b, 0),# East Asian ideograph + 0x213b59: (0x5c4d, 0),# East Asian ideograph + 0x23316b: (0x89ff, 0),# East Asian ideograph + 0x213b5a: (0x5c55, 0),# East Asian ideograph + 0x213b5b: (0x5c51, 0),# East Asian ideograph + 0x226424: (0x781b, 0),# East Asian ideograph + 0x216425: (0x5187, 0),# East Asian ideograph + 0x226426: (0x782c, 0),# East Asian ideograph + 0x226427: (0x7823, 0),# East Asian ideograph + 0x226428: (0x782b, 0),# East Asian ideograph + 0x216429: (0x4e28, 0),# East Asian ideograph + 0x22642a: (0x7829, 0),# East Asian ideograph + 0x22642d: (0x7822, 0),# East Asian ideograph + 0x21642e: (0x4e31, 0),# East Asian ideograph + 0x2d3748: (0x8b5f, 0),# East Asian ideograph + 0x226431: (0x7835, 0),# East Asian ideograph + 0x226432: (0x7833, 0),# East Asian ideograph + 0x226433: (0x782e, 0),# East Asian ideograph + 0x216434: (0x4e42, 0),# East Asian ideograph + 0x226435: (0x7820, 0),# East Asian ideograph + 0x216437: (0x738d, 0),# East Asian ideograph + 0x226438: (0x783d, 0),# East Asian ideograph + 0x22643b: (0x781f, 0),# East Asian ideograph + 0x21643c: (0x4e5c, 0),# East Asian ideograph + 0x22643d: (0x7831, 0),# East Asian ideograph + 0x21643f: (0x6c39, 0),# East Asian ideograph + 0x274168: (0x6320, 0),# East Asian ideograph + 0x6f5053: (0xbb50, 0),# Korean hangul + 0x275f3e: (0x53ea, 0),# East Asian ideograph (duplicate simplified) + 0x226444: (0x784d, 0),# East Asian ideograph + 0x216446: (0x4e85, 0),# East Asian ideograph + 0x273b61: (0x5c42, 0),# East Asian ideograph + 0x226448: (0x7848, 0),# East Asian ideograph + 0x226449: (0x7853, 0),# East Asian ideograph + 0x22644a: (0x7854, 0),# East Asian ideograph + 0x22644b: (0x7845, 0),# East Asian ideograph + 0x22644c: (0x7852, 0),# East Asian ideograph + 0x295938: (0x9cdf, 0),# East Asian ideograph + 0x22644e: (0x7850, 0),# East Asian ideograph + 0x22644f: (0x7858, 0),# East Asian ideograph + 0x216450: (0x4ea0, 0),# East Asian ideograph + 0x216451: (0x4ea2, 0),# East Asian ideograph + 0x226452: (0x7847, 0),# East Asian ideograph + 0x233b63: (0x8f27, 0),# East Asian ideograph + 0x216455: (0x4eb6, 0),# East Asian ideograph (variant of 4B6455 which maps to 4EB6) + 0x226456: (0x784c, 0),# East Asian ideograph + 0x695630: (0x5cbc, 0),# East Asian ideograph + 0x216458: (0x4eb9, 0),# East Asian ideograph + 0x223b64: (0x67b7, 0),# East Asian ideograph + 0x22645a: (0x7868, 0),# East Asian ideograph + 0x22645b: (0x786d, 0),# East Asian ideograph + 0x21645e: (0x4ec9, 0),# East Asian ideograph + 0x226460: (0x7864, 0),# East Asian ideograph + 0x226461: (0x785c, 0),# East Asian ideograph + 0x216462: (0x4ece, 0),# East Asian ideograph (not in Unicode) + 0x216463: (0x4ee8, 0),# East Asian ideograph + 0x215852: (0x8a54, 0),# East Asian ideograph + 0x213639: (0x54fa, 0),# East Asian ideograph + 0x226466: (0x786a, 0),# East Asian ideograph + 0x226469: (0x7886, 0),# East Asian ideograph + 0x21646b: (0x4ee1, 0),# East Asian ideograph + 0x22646c: (0x787f, 0),# East Asian ideograph + 0x22646d: (0x7887, 0),# East Asian ideograph + 0x213c2a: (0x5d84, 0),# East Asian ideograph + 0x226470: (0x7894, 0),# East Asian ideograph + 0x696471: (0x7cc0, 0),# East Asian ideograph + 0x216472: (0x4f08, 0),# East Asian ideograph + 0x216473: (0x4f0e, 0),# East Asian ideograph + 0x696474: (0x7cd8, 0),# East Asian ideograph + 0x216475: (0x4f03, 0),# East Asian ideograph + 0x226476: (0x788f, 0),# East Asian ideograph + 0x234f44: (0x982f, 0),# East Asian ideograph + 0x6f544a: (0xc378, 0),# Korean hangul + 0x21647c: (0x4f22, 0),# East Asian ideograph + 0x22647e: (0x7899, 0),# East Asian ideograph + 0x213b6b: (0x5cb7, 0),# East Asian ideograph + 0x225c52: (0x74e7, 0),# East Asian ideograph + 0x27516d: (0x603b, 0),# East Asian ideograph + 0x223b6d: (0x6802, 0),# East Asian ideograph + 0x695632: (0x5cc5, 0),# East Asian ideograph + 0x213b6e: (0x5ca1, 0),# East Asian ideograph + 0x4c3a5b: (0x6859, 0),# East Asian ideograph + 0x213b6f: (0x5cab, 0),# East Asian ideograph + 0x6f5056: (0xbb61, 0),# Korean hangul + 0x294969: (0x961a, 0),# East Asian ideograph + 0x215854: (0x8a50, 0),# East Asian ideograph + 0x21363b: (0x54ee, 0),# East Asian ideograph + 0x21762a: (0x57fb, 0),# East Asian ideograph + 0x27583f: (0x8baa, 0),# East Asian ideograph + 0x213b71: (0x5cb1, 0),# East Asian ideograph + 0x6f5961: (0xce21, 0),# Korean hangul + 0x213b72: (0x5cd9, 0),# East Asian ideograph + 0x275f2c: (0x9636, 0),# East Asian ideograph + 0x223b74: (0x67df, 0),# East Asian ideograph + 0x6f5057: (0xbb63, 0),# Korean hangul + 0x233b75: (0x8f17, 0),# East Asian ideograph + 0x23576b: (0x9bbb, 0),# East Asian ideograph + 0x213b77: (0x5ce8, 0),# East Asian ideograph + 0x216622: (0x4fe4, 0),# East Asian ideograph + 0x6f4e53: (0xb729, 0),# Korean hangul + 0x223b78: (0x6806, 0),# East Asian ideograph + 0x223b79: (0x67ae, 0),# East Asian ideograph + 0x213b7a: (0x5cea, 0),# East Asian ideograph + 0x336054: (0x985b, 0),# East Asian ideograph + 0x213b7b: (0x5d07, 0),# East Asian ideograph + 0x27527a: (0x804b, 0),# East Asian ideograph + 0x213b7c: (0x5d06, 0),# East Asian ideograph + 0x216627: (0x4fc5, 0),# East Asian ideograph + 0x6f773e: (0xcb4c, 0),# Korean hangul + 0x692435: (0x3055, 0),# Hiragana letter SA + 0x233b7d: (0x8f2d, 0),# East Asian ideograph + 0x455746: (0x672f, 0),# East Asian ideograph + 0x213b7e: (0x5d16, 0),# East Asian ideograph + 0x6f5059: (0xbb8c, 0),# Korean hangul + 0x216629: (0x4fc9, 0),# East Asian ideograph + 0x4b516a: (0x7ef7, 0),# East Asian ideograph + 0x6f7737: (0xc5ab, 0),# Korean hangul + 0x6f5a67: (0xd0a5, 0),# Korean hangul + 0x6f5d23: (0xd5dd, 0),# Korean hangul + 0x2d485c: (0x6f44, 0),# East Asian ideograph + 0x6f505a: (0xbba4, 0),# Korean hangul + 0x21363f: (0x54e9, 0),# East Asian ideograph + 0x22262f: (0x5dae, 0),# East Asian ideograph + 0x27516e: (0x7eb5, 0),# East Asian ideograph + 0x283462: (0x6322, 0),# East Asian ideograph + 0x334c7b: (0x767a, 0),# East Asian ideograph + 0x216527: (0x4ef5, 0),# East Asian ideograph + 0x216528: (0x4f07, 0),# East Asian ideograph + 0x226529: (0x7893, 0),# East Asian ideograph + 0x21652a: (0x4f00, 0),# East Asian ideograph + 0x21652c: (0x4f0b, 0),# East Asian ideograph + 0x22652d: (0x7896, 0),# East Asian ideograph + 0x22652f: (0x78b2, 0),# East Asian ideograph + 0x6f5371: (0xc288, 0),# Korean hangul + 0x226531: (0x78a1, 0),# East Asian ideograph + 0x216532: (0x4f3b, 0),# East Asian ideograph + 0x292633: (0x84e3, 0),# East Asian ideograph + 0x216536: (0x4f58, 0),# East Asian ideograph + 0x216537: (0x4f62, 0),# East Asian ideograph + 0x216539: (0x4f64, 0),# East Asian ideograph + 0x21653a: (0x4f49, 0),# East Asian ideograph + 0x22653b: (0x78a4, 0),# East Asian ideograph + 0x22653e: (0x78b4, 0),# East Asian ideograph + 0x21653f: (0x4f3e, 0),# East Asian ideograph + 0x226540: (0x78ad, 0),# East Asian ideograph + 0x226541: (0x78a3, 0),# East Asian ideograph + 0x226543: (0x789e, 0),# East Asian ideograph + 0x226544: (0x78a8, 0),# East Asian ideograph + 0x232636: (0x857b, 0),# East Asian ideograph + 0x214b5e: (0x746a, 0),# East Asian ideograph + 0x226548: (0x78ab, 0),# East Asian ideograph + 0x234f4b: (0x9847, 0),# East Asian ideograph + 0x4b6637: (0x4fe3, 0),# East Asian ideograph + 0x21654d: (0x4f68, 0),# East Asian ideograph + 0x22654e: (0x78bb, 0),# East Asian ideograph + 0x21654f: (0x4f5f, 0),# East Asian ideograph + 0x6f505c: (0xbbc4, 0),# Korean hangul + 0x29496f: (0x95fc, 0),# East Asian ideograph + 0x226555: (0x78cc, 0),# East Asian ideograph + 0x226556: (0x78c9, 0),# East Asian ideograph + 0x216557: (0x4f7c, 0),# East Asian ideograph + 0x226558: (0x78d1, 0),# East Asian ideograph + 0x21655a: (0x4f98, 0),# East Asian ideograph + 0x21655b: (0x4f92, 0),# East Asian ideograph + 0x21655c: (0x4f7d, 0),# East Asian ideograph + 0x22655e: (0x78c8, 0),# East Asian ideograph + 0x226560: (0x78d4, 0),# East Asian ideograph + 0x274e3b: (0x781a, 0),# East Asian ideograph + 0x216562: (0x4f76, 0),# East Asian ideograph + 0x216564: (0x4fa2, 0),# East Asian ideograph + 0x4c6565: (0x78b9, 0),# East Asian ideograph + 0x216566: (0x4f91, 0),# East Asian ideograph + 0x216567: (0x4f95, 0),# East Asian ideograph + 0x226568: (0x78df, 0),# East Asian ideograph + 0x22656a: (0x78e7, 0),# East Asian ideograph + 0x21656c: (0x4f4c, 0),# East Asian ideograph + 0x21656d: (0x4f97, 0),# East Asian ideograph + 0x22656e: (0x78db, 0),# East Asian ideograph + 0x22656f: (0x78e1, 0),# East Asian ideograph + 0x216570: (0x4f79, 0),# East Asian ideograph + 0x216571: (0x4f9a, 0),# East Asian ideograph + 0x216572: (0x4f81, 0),# East Asian ideograph + 0x216573: (0x4f78, 0),# East Asian ideograph + 0x225c5a: (0x74f0, 0),# East Asian ideograph + 0x4b516e: (0x7e26, 0),# East Asian ideograph + 0x226576: (0x78ee, 0),# East Asian ideograph + 0x226577: (0x78e3, 0),# East Asian ideograph + 0x226579: (0x78f2, 0),# East Asian ideograph + 0x21657b: (0x4f7a, 0),# East Asian ideograph + 0x21657c: (0x4fcd, 0),# East Asian ideograph + 0x2d5529: (0x830e, 0),# East Asian ideograph (variant of 275529) + 0x22657e: (0x7905, 0),# East Asian ideograph + 0x6f5d27: (0xd5ec, 0),# Korean hangul + 0x6f505e: (0xbbd0, 0),# Korean hangul + 0x217a75: (0x5a16, 0),# East Asian ideograph + 0x224f5d: (0x7043, 0),# East Asian ideograph + 0x216643: (0x4fb9, 0),# East Asian ideograph + 0x232644: (0x8597, 0),# East Asian ideograph + 0x283466: (0x63ff, 0),# East Asian ideograph + 0x6f5d28: (0xd5f4, 0),# Korean hangul + 0x287269: (0x7ec9, 0),# East Asian ideograph + 0x2d3c38: (0x9245, 0),# East Asian ideograph + 0x216646: (0x501e, 0),# East Asian ideograph + 0x217e25: (0x5b67, 0),# East Asian ideograph + 0x6f4b42: (0xb059, 0),# Korean hangul + 0x6f505f: (0xbbf8, 0),# Korean hangul + 0x282647: (0x5cbf, 0),# East Asian ideograph + 0x275f4a: (0x867d, 0),# East Asian ideograph + 0x225c5c: (0x74ee, 0),# East Asian ideograph + 0x217633: (0x5800, 0),# East Asian ideograph + 0x23605b: (0x9f8e, 0),# East Asian ideograph + 0x276649: (0x4f1c, 0),# East Asian ideograph + 0x274e3e: (0x7815, 0),# East Asian ideograph + 0x293866: (0x8db1, 0),# East Asian ideograph + 0x29563c: (0x9b49, 0),# East Asian ideograph + 0x6f5c73: (0xd585, 0),# Korean hangul + 0x4b3c21: (0x5d5c, 0),# East Asian ideograph + 0x21664c: (0x5007, 0),# East Asian ideograph + 0x21664d: (0x5013, 0),# East Asian ideograph + 0x23264e: (0x8586, 0),# East Asian ideograph + 0x6f5d2a: (0xd5f7, 0),# Korean hangul + 0x222650: (0x5ddb, 0),# East Asian ideograph + 0x22606a: (0x76aa, 0),# East Asian ideograph + 0x292651: (0x84df, 0),# East Asian ideograph + 0x275f4c: (0x9e21, 0),# East Asian ideograph + 0x696466: (0x7cad, 0),# East Asian ideograph + 0x217635: (0x57ec, 0),# East Asian ideograph + 0x6f5264: (0xc0b3, 0),# Korean hangul + 0x393770: (0x56f2, 0),# East Asian ideograph + 0x2d552d: (0x8358, 0),# East Asian ideograph + 0x6f5d2b: (0xd5f9, 0),# Korean hangul + 0x4b4066: (0x62f4, 0),# East Asian ideograph + 0x286655: (0x783b, 0),# East Asian ideograph + 0x4b3c23: (0x5ce5, 0),# East Asian ideograph + 0x274177: (0x631e, 0),# East Asian ideograph + 0x222656: (0x5de4, 0),# East Asian ideograph + 0x217636: (0x5807, 0),# East Asian ideograph + 0x292658: (0x83b6, 0),# East Asian ideograph + 0x282659: (0x5def, 0),# East Asian ideograph + 0x692432: (0x3052, 0),# Hiragana letter GE + 0x276068: (0x996c, 0),# East Asian ideograph + 0x706d3b: (0x7818, 0),# East Asian ideograph + 0x226621: (0x78f9, 0),# East Asian ideograph + 0x226622: (0x78fd, 0),# East Asian ideograph + 0x6f5063: (0xbc00, 0),# Korean hangul + 0x216626: (0x4fb7, 0),# East Asian ideograph + 0x226627: (0x78fe, 0),# East Asian ideograph + 0x226629: (0x78fb, 0),# East Asian ideograph + 0x21662a: (0x4fe5, 0),# East Asian ideograph + 0x22662b: (0x7904, 0),# East Asian ideograph + 0x21662c: (0x4fe7, 0),# East Asian ideograph + 0x22662e: (0x7912, 0),# East Asian ideograph + 0x226632: (0x790c, 0),# East Asian ideograph + 0x216633: (0x4fdc, 0),# East Asian ideograph + 0x226634: (0x7913, 0),# East Asian ideograph + 0x216635: (0x4fd4, 0),# East Asian ideograph + 0x216637: (0x4fc1, 0),# East Asian ideograph + 0x21663b: (0x4fdb, 0),# East Asian ideograph + 0x21663e: (0x4fc6, 0),# East Asian ideograph + 0x706640: (0x80ec, 0),# East Asian ideograph + 0x6f5064: (0xbc08, 0),# Korean hangul + 0x226643: (0x791e, 0),# East Asian ideograph + 0x6f4c21: (0xb128, 0),# Korean hangul + 0x226646: (0x7922, 0),# East Asian ideograph + 0x292661: (0x8360, 0),# East Asian ideograph + 0x216648: (0x503f, 0),# East Asian ideograph + 0x216649: (0x5005, 0),# East Asian ideograph + 0x4d5973: (0x51eb, 0),# East Asian ideograph + 0x22664c: (0x7924, 0),# East Asian ideograph + 0x22664d: (0x7927, 0),# East Asian ideograph + 0x21664e: (0x5022, 0),# East Asian ideograph + 0x226650: (0x7929, 0),# East Asian ideograph + 0x216652: (0x4ff5, 0),# East Asian ideograph + 0x6f2463: (0x314d, 0),# Korean hangul + 0x226655: (0x7931, 0),# East Asian ideograph + 0x393428: (0x5227, 0),# East Asian ideograph + 0x276235: (0x9e26, 0),# East Asian ideograph + 0x216659: (0x4ff4, 0),# East Asian ideograph + 0x21665b: (0x5037, 0),# East Asian ideograph + 0x22665d: (0x7934, 0),# East Asian ideograph + 0x21665e: (0x502e, 0),# East Asian ideograph + 0x6f5065: (0xbc09, 0),# Korean hangul + 0x226660: (0x7936, 0),# East Asian ideograph + 0x216661: (0x4ff6, 0),# East Asian ideograph + 0x216662: (0x501c, 0),# East Asian ideograph + 0x6f4c22: (0xb12c, 0),# Korean hangul + 0x226665: (0x793d, 0),# East Asian ideograph + 0x216666: (0x502c, 0),# East Asian ideograph + 0x226667: (0x7942, 0),# East Asian ideograph + 0x226668: (0x793f, 0),# East Asian ideograph + 0x216669: (0x5010, 0),# East Asian ideograph + 0x22666a: (0x794a, 0),# East Asian ideograph + 0x22666b: (0x794d, 0),# East Asian ideograph + 0x292668: (0x8369, 0),# East Asian ideograph + 0x226675: (0x7946, 0),# East Asian ideograph + 0x226677: (0x7958, 0),# East Asian ideograph + 0x216679: (0x503d, 0),# East Asian ideograph + 0x22667a: (0x795c, 0),# East Asian ideograph + 0x22667b: (0x794f, 0),# East Asian ideograph + 0x22667c: (0x7953, 0),# East Asian ideograph + 0x22667d: (0x7953, 0),# Unrelated variant of EACC 22667C which maps to 7953 + 0x6f4c23: (0xb134, 0),# Korean hangul + 0x225c63: (0x74f8, 0),# East Asian ideograph + 0x236062: (0x9f95, 0),# East Asian ideograph + 0x2d336b: (0x5c05, 0),# East Asian ideograph + 0x213f71: (0x6233, 0),# East Asian ideograph + 0x6f5d30: (0xd610, 0),# Korean hangul + 0x224b57: (0x6ea8, 0),# East Asian ideograph + 0x27627d: (0x9f50, 0),# East Asian ideograph + 0x6f5d77: (0xd774, 0),# Korean hangul + 0x213b2e: (0x5be2, 0),# East Asian ideograph + 0x6f4c24: (0xb135, 0),# Korean hangul + 0x21763b: (0x580f, 0),# East Asian ideograph + 0x227a3a: (0x81ca, 0),# East Asian ideograph + 0x232672: (0x85bf, 0),# East Asian ideograph + 0x6f5528: (0xc557, 0),# Korean hangul + 0x6f5068: (0xbc0d, 0),# Korean hangul + 0x6f4c25: (0xb137, 0),# Korean hangul + 0x295a48: (0x9e31, 0),# East Asian ideograph + 0x395a36: (0x983c, 0),# East Asian ideograph + 0x6f4939: (0xaca1, 0),# Korean hangul + 0x275121: (0x7eb1, 0),# East Asian ideograph + 0x222677: (0x5e12, 0),# East Asian ideograph + 0x225122: (0x70dd, 0),# East Asian ideograph + 0x225123: (0x70e1, 0),# East Asian ideograph + 0x27417e: (0x62e9, 0),# East Asian ideograph + 0x226679: (0x795b, 0),# East Asian ideograph + 0x275f54: (0x4e91, 0),# East Asian ideograph + 0x235124: (0x9907, 0),# East Asian ideograph + 0x6f4c26: (0xb140, 0),# Korean hangul + 0x225c66: (0x74fb, 0),# East Asian ideograph + 0x275125: (0x7eb7, 0),# East Asian ideograph + 0x4b3869: (0x5727, 0),# East Asian ideograph + 0x235c22: (0x9dc7, 0),# East Asian ideograph + 0x225126: (0x70e3, 0),# East Asian ideograph + 0x6f5d33: (0xd614, 0),# Korean hangul + 0x6f5127: (0xbc85, 0),# Korean hangul + 0x235128: (0x9902, 0),# East Asian ideograph + 0x6f5374: (0xc298, 0),# Korean hangul + 0x6f506a: (0xbc11, 0),# Korean hangul + 0x275129: (0x624e, 0),# East Asian ideograph + 0x277d2b: (0x5a06, 0),# East Asian ideograph + 0x225c67: (0x74ff, 0),# East Asian ideograph + 0x27512a: (0x7ecd, 0),# East Asian ideograph + 0x21512b: (0x7d44, 0),# East Asian ideograph + 0x6f4f31: (0xb82c, 0),# Korean hangul + 0x27413f: (0x626c, 0),# East Asian ideograph + 0x6f5d34: (0xd615, 0),# Korean hangul + 0x27512c: (0x7ec6, 0),# East Asian ideograph + 0x27512d: (0x7ec5, 0),# East Asian ideograph + 0x4c7328: (0x5fad, 0),# East Asian ideograph (variant of 2E7328 which maps to 5FAD) + 0x22512e: (0x70d1, 0),# East Asian ideograph + 0x215869: (0x8aaa, 0),# East Asian ideograph + 0x21512f: (0x7d40, 0),# East Asian ideograph + 0x215130: (0x7d42, 0),# East Asian ideograph + 0x216722: (0x506f, 0),# East Asian ideograph + 0x216723: (0x5050, 0),# East Asian ideograph + 0x216725: (0x5070, 0),# East Asian ideograph + 0x215131: (0x7d71, 0),# East Asian ideograph + 0x216729: (0x5053, 0),# East Asian ideograph + 0x21672a: (0x506a, 0),# East Asian ideograph + 0x21672c: (0x5056, 0),# East Asian ideograph + 0x215132: (0x7d5e, 0),# East Asian ideograph + 0x226730: (0x7972, 0),# East Asian ideograph + 0x216731: (0x506d, 0),# East Asian ideograph + 0x275133: (0x7ed2, 0),# East Asian ideograph + 0x6f4c29: (0xb150, 0),# Korean hangul + 0x216738: (0x505d, 0),# East Asian ideograph + 0x215134: (0x7d50, 0),# East Asian ideograph + 0x21673b: (0x5058, 0),# East Asian ideograph + 0x21673c: (0x5072, 0),# East Asian ideograph + 0x22673e: (0x797c, 0),# East Asian ideograph + 0x3f6179: (0x5c1f, 0),# East Asian ideograph + 0x216741: (0x5041, 0),# East Asian ideograph + 0x6f5d36: (0xd638, 0),# Korean hangul + 0x275136: (0x7eda, 0),# East Asian ideograph + 0x216746: (0x5015, 0),# East Asian ideograph + 0x293430: (0x8bb4, 0),# East Asian ideograph + 0x216748: (0x507a, 0),# East Asian ideograph + 0x21674a: (0x506c, 0),# East Asian ideograph + 0x275137: (0x7edd, 0),# East Asian ideograph + 0x21674d: (0x506b, 0),# East Asian ideograph + 0x21674e: (0x5094, 0),# East Asian ideograph + 0x22674f: (0x798b, 0),# East Asian ideograph + 0x216750: (0x509e, 0),# East Asian ideograph + 0x235138: (0x9915, 0),# East Asian ideograph + 0x216752: (0x509b, 0),# East Asian ideograph + 0x216753: (0x509a, 0),# East Asian ideograph + 0x226754: (0x7994, 0),# East Asian ideograph + 0x226755: (0x7993, 0),# East Asian ideograph + 0x215139: (0x7d66, 0),# East Asian ideograph + 0x21675a: (0x508c, 0),# East Asian ideograph + 0x21675c: (0x5088, 0),# East Asian ideograph + 0x23513a: (0x9924, 0),# East Asian ideograph + 0x22675f: (0x79a1, 0),# East Asian ideograph + 0x226760: (0x799b, 0),# East Asian ideograph + 0x226761: (0x79a3, 0),# East Asian ideograph + 0x216762: (0x508e, 0),# East Asian ideograph + 0x23513b: (0x991f, 0),# East Asian ideograph + 0x224b5e: (0x6e8e, 0),# East Asian ideograph + 0x216767: (0x50a6, 0),# East Asian ideograph + 0x274c76: (0x763e, 0),# East Asian ideograph + 0x21513c: (0x7d93, 0),# East Asian ideograph + 0x21676a: (0x5092, 0),# East Asian ideograph + 0x21676c: (0x509c, 0),# East Asian ideograph + 0x2d442d: (0x6780, 0),# East Asian ideograph + 0x22676e: (0x79a9, 0),# East Asian ideograph + 0x27513d: (0x6346, 0),# East Asian ideograph + 0x226770: (0x79ab, 0),# East Asian ideograph + 0x216771: (0x50c7, 0),# East Asian ideograph + 0x216775: (0x50c9, 0),# East Asian ideograph + 0x22677a: (0x79b3, 0),# East Asian ideograph + 0x22513f: (0x70fa, 0),# East Asian ideograph + 0x21677c: (0x50b4, 0),# East Asian ideograph + 0x6f5d38: (0xd63c, 0),# Korean hangul + 0x212a23: (0xe8d2, 0),# EACC component character + 0x215140: (0x7d81, 0),# East Asian ideograph + 0x334f5e: (0x7a91, 0),# East Asian ideograph + 0x215141: (0x7d9c, 0),# East Asian ideograph + 0x6f5375: (0xc29b, 0),# Korean hangul + 0x213538: (0x53f0, 0),# East Asian ideograph (duplicate simplified) + 0x6f506f: (0xbc16, 0),# Korean hangul + 0x215142: (0x7dbb, 0),# East Asian ideograph + 0x6f4c2c: (0xb154, 0),# Korean hangul + 0x284140: (0x6861, 0),# East Asian ideograph + 0x235143: (0x9929, 0),# East Asian ideograph + 0x2d3765: (0x8086, 0),# East Asian ideograph + 0x215144: (0x7dca, 0),# East Asian ideograph + 0x6f5d39: (0xd640, 0),# Korean hangul + 0x215145: (0x7dbe, 0),# East Asian ideograph + 0x224b60: (0x6ed9, 0),# East Asian ideograph + 0x215146: (0x7db4, 0),# East Asian ideograph + 0x2e2d79: (0x6128, 0),# East Asian ideograph + 0x4b5724: (0x86cd, 0),# East Asian ideograph + 0x235147: (0x991a, 0),# East Asian ideograph + 0x275242: (0x4e49, 0),# East Asian ideograph + 0x6f4c2d: (0xb155, 0),# Korean hangul + 0x6f5c48: (0xd46f, 0),# Korean hangul + 0x215148: (0x7db2, 0),# East Asian ideograph + 0x215149: (0x7db1, 0),# East Asian ideograph + 0x6f5d3a: (0xd648, 0),# Korean hangul + 0x21514a: (0x7dbd, 0),# East Asian ideograph + 0x224b61: (0x6ebd, 0),# East Asian ideograph + 0x234f60: (0x9852, 0),# East Asian ideograph + 0x4b3c32: (0x5dd3, 0),# East Asian ideograph + 0x6f5071: (0xbc1b, 0),# Korean hangul + 0x22514c: (0x7103, 0),# East Asian ideograph + 0x21586f: (0x8aa3, 0),# East Asian ideograph + 0x21514d: (0x7da2, 0),# East Asian ideograph + 0x22582b: (0x736b, 0),# East Asian ideograph + 0x4b615f: (0x9aea, 0),# East Asian ideograph + 0x21514e: (0x7dad, 0),# East Asian ideograph + 0x2d3324: (0x634c, 0),# East Asian ideograph + 0x6f5d3b: (0xd649, 0),# Korean hangul + 0x21514f: (0x7dbf, 0),# East Asian ideograph + 0x2d356a: (0x8a36, 0),# East Asian ideograph + 0x215150: (0x7db8, 0),# East Asian ideograph + 0x6f5072: (0xbc1c, 0),# Korean hangul + 0x215151: (0x7dc7, 0),# East Asian ideograph + 0x22482d: (0x6cf2, 0),# East Asian ideograph + 0x275152: (0x7f14, 0),# East Asian ideograph + 0x6f493b: (0xaca9, 0),# Korean hangul + 0x2d3768: (0x56ec, 0),# East Asian ideograph + 0x215153: (0x7def, 0),# East Asian ideograph + 0x294346: (0x94d1, 0),# East Asian ideograph + 0x2f5d3c: (0x6ef7, 0),# East Asian ideograph + 0x215154: (0x7df4, 0),# East Asian ideograph (variant of 4B5154 which maps to 7DF4) + 0x224b63: (0x6ec1, 0),# East Asian ideograph + 0x234f62: (0x984b, 0),# East Asian ideograph + 0x235155: (0x9932, 0),# East Asian ideograph + 0x6f5073: (0xbc1d, 0),# Korean hangul + 0x225156: (0x7112, 0),# East Asian ideograph + 0x6f4c30: (0xb178, 0),# Korean hangul + 0x69675c: (0x825d, 0),# East Asian ideograph + 0x215157: (0x7dec, 0),# East Asian ideograph + 0x234179: (0x91e9, 0),# East Asian ideograph + 0x215158: (0x7ddd, 0),# East Asian ideograph + 0x213e37: (0x6012, 0),# East Asian ideograph + 0x6f5d3d: (0xd64d, 0),# Korean hangul + 0x215159: (0x7de9, 0),# East Asian ideograph + 0x21515a: (0x7de3, 0),# East Asian ideograph + 0x213539: (0x53e5, 0),# East Asian ideograph + 0x6f5074: (0xbc1f, 0),# Korean hangul + 0x216822: (0x50c2, 0),# East Asian ideograph + 0x27515b: (0x7f16, 0),# East Asian ideograph + 0x226825: (0x79bc, 0),# East Asian ideograph + 0x225c71: (0x7505, 0),# East Asian ideograph + 0x226828: (0x79c6, 0),# East Asian ideograph + 0x22515c: (0x710c, 0),# East Asian ideograph + 0x22682a: (0x79c8, 0),# East Asian ideograph + 0x21682c: (0x50ba, 0),# East Asian ideograph + 0x22682d: (0x79d4, 0),# East Asian ideograph + 0x21682e: (0x50cd, 0),# East Asian ideograph + 0x21515d: (0x7d9e, 0),# East Asian ideograph + 0x6f4f33: (0xb835, 0),# Korean hangul + 0x226832: (0x79d6, 0),# East Asian ideograph + 0x216834: (0x50ef, 0),# East Asian ideograph + 0x21515e: (0x7dde, 0),# East Asian ideograph + 0x293438: (0x8c29, 0),# East Asian ideograph + 0x21683a: (0x50f4, 0),# East Asian ideograph + 0x21515f: (0x7e11, 0),# East Asian ideograph + 0x21683c: (0x50dd, 0),# East Asian ideograph + 0x22683d: (0x79ec, 0),# East Asian ideograph + 0x22683e: (0x79eb, 0),# East Asian ideograph (variant of 4C683E which maps to 79EB) + 0x6f5075: (0xbc24, 0),# Korean hangul + 0x215160: (0x7e0a, 0),# East Asian ideograph + 0x226842: (0x79e1, 0),# East Asian ideograph + 0x6f4c32: (0xb17a, 0),# Korean hangul + 0x226844: (0x79dd, 0),# East Asian ideograph + 0x226845: (0x79ed, 0),# East Asian ideograph + 0x216846: (0x50d9, 0),# East Asian ideograph + 0x215161: (0x7e08, 0),# East Asian ideograph + 0x226848: (0x79f8, 0),# East Asian ideograph + 0x215162: (0x7e1b, 0),# East Asian ideograph + 0x2e684e: (0x8020, 0),# East Asian ideograph + 0x22684f: (0x7a02, 0),# East Asian ideograph + 0x226850: (0x7a0a, 0),# East Asian ideograph + 0x6f5d3f: (0xd654, 0),# Korean hangul + 0x6f5625: (0xc651, 0),# Korean hangul + 0x275163: (0x81f4, 0),# East Asian ideograph + 0x226854: (0x7a09, 0),# East Asian ideograph + 0x216855: (0x50ec, 0),# East Asian ideograph + 0x4b442d: (0x67a9, 0),# East Asian ideograph + 0x215164: (0x7e23, 0),# East Asian ideograph + 0x21685b: (0x510e, 0),# East Asian ideograph + 0x22685c: (0x7a03, 0),# East Asian ideograph + 0x6f5076: (0xbc25, 0),# Korean hangul + 0x275165: (0x7f29, 0),# East Asian ideograph + 0x226861: (0x7a0c, 0),# East Asian ideograph + 0x293160: (0x89ef, 0),# East Asian ideograph + 0x225166: (0x7113, 0),# East Asian ideograph + 0x216866: (0x5107, 0),# East Asian ideograph + 0x216867: (0x510f, 0),# East Asian ideograph + 0x216868: (0x50fe, 0),# East Asian ideograph + 0x216869: (0x510b, 0),# East Asian ideograph + 0x21686a: (0x50fd, 0),# East Asian ideograph + 0x22686b: (0x7a11, 0),# East Asian ideograph + 0x22686c: (0x7a18, 0),# East Asian ideograph + 0x21686d: (0x5101, 0),# East Asian ideograph + 0x234e43: (0x97c9, 0),# East Asian ideograph + 0x22686f: (0x7a19, 0),# East Asian ideograph (variant of 2E686F which maps to 7A19) + 0x6f5d40: (0xd655, 0),# Korean hangul + 0x226871: (0x7a1e, 0),# East Asian ideograph + 0x216872: (0x5113, 0),# East Asian ideograph + 0x234f66: (0x983f, 0),# East Asian ideograph + 0x226876: (0x7a17, 0),# East Asian ideograph + 0x275169: (0x7f27, 0),# East Asian ideograph + 0x216878: (0x511a, 0),# East Asian ideograph + 0x216879: (0x9797, 0),# East Asian ideograph + 0x6f5077: (0xbc27, 0),# Korean hangul + 0x21516a: (0x7e43, 0),# East Asian ideograph + 0x21687e: (0x5126, 0),# East Asian ideograph + 0x6f4c34: (0xb180, 0),# Korean hangul + 0x223a5b: (0x6745, 0),# East Asian ideograph + 0x33516b: (0x7dd0, 0),# East Asian ideograph + 0x4c735d: (0x7d4b, 0),# East Asian ideograph + 0x22516c: (0x711e, 0),# East Asian ideograph + 0x2e3729: (0x65b5, 0),# East Asian ideograph + 0x6f5d41: (0xd658, 0),# Korean hangul + 0x21516d: (0x7e3d, 0),# East Asian ideograph + 0x6f5451: (0xc3d8, 0),# Korean hangul + 0x22516e: (0x7120, 0),# East Asian ideograph + 0x2d4437: (0x67fe, 0),# East Asian ideograph + 0x21516f: (0x7e45, 0),# East Asian ideograph + 0x6f4c35: (0xb188, 0),# Korean hangul + 0x215170: (0x7e55, 0),# East Asian ideograph + 0x275174: (0x7f2d, 0),# East Asian ideograph + 0x235171: (0x994d, 0),# East Asian ideograph + 0x473539: (0x8b9e, 0),# East Asian ideograph + 0x29426d: (0x94cd, 0),# East Asian ideograph + 0x275172: (0x7ee3, 0),# East Asian ideograph + 0x224b69: (0x6ebb, 0),# East Asian ideograph + 0x275173: (0x7ed5, 0),# East Asian ideograph + 0x6f5b23: (0xd0f0, 0),# Korean hangul + 0x215174: (0x7e5a, 0),# East Asian ideograph + 0x6f4c36: (0xb189, 0),# Korean hangul + 0x225175: (0x712d, 0),# East Asian ideograph + 0x2d376f: (0x5700, 0),# East Asian ideograph + 0x275176: (0x7ef3, 0),# East Asian ideograph + 0x213c21: (0x5d0e, 0),# East Asian ideograph + 0x275177: (0x8327, 0),# East Asian ideograph + 0x2d3c22: (0x5d10, 0),# East Asian ideograph + 0x275178: (0x7ece, 0),# East Asian ideograph + 0x223c23: (0x67c2, 0),# East Asian ideograph + 0x6f507a: (0xbc30, 0),# Korean hangul + 0x275179: (0x7ed8, 0),# East Asian ideograph + 0x215878: (0x8ad2, 0),# East Asian ideograph + 0x225c77: (0x7503, 0),# East Asian ideograph + 0x27517a: (0x8fab, 0),# East Asian ideograph + 0x217c25: (0x5a9e, 0),# East Asian ideograph + 0x45465b: (0x6c2f, 0),# East Asian ideograph + 0x21517b: (0x7e7d, 0),# East Asian ideograph + 0x223c26: (0x67ca, 0),# East Asian ideograph + 0x274e59: (0x7840, 0),# East Asian ideograph + 0x6f5d44: (0xd667, 0),# Korean hangul + 0x6f517c: (0xbe61, 0),# Korean hangul + 0x213c27: (0x5d4c, 0),# East Asian ideograph + 0x234f6a: (0x985c, 0),# East Asian ideograph + 0x27517d: (0x7ee7, 0),# East Asian ideograph + 0x223c28: (0x67ce, 0),# East Asian ideograph + 0x2d443a: (0x6942, 0),# East Asian ideograph + 0x23517e: (0x9955, 0),# East Asian ideograph + 0x213b32: (0x5be7, 0),# East Asian ideograph + 0x213c29: (0x5d69, 0),# East Asian ideograph + 0x223c2a: (0x67f2, 0),# East Asian ideograph + 0x275e3e: (0x94db, 0),# East Asian ideograph + 0x2d5547: (0x837d, 0),# East Asian ideograph + 0x223c2b: (0x67c3, 0),# East Asian ideograph + 0x6f5d45: (0xd669, 0),# Korean hangul + 0x234f6b: (0x9859, 0),# East Asian ideograph + 0x223c2d: (0x67dd, 0),# East Asian ideograph + 0x6f507c: (0xbc34, 0),# Korean hangul + 0x275f67: (0x96fe, 0),# East Asian ideograph + 0x213c2e: (0x5dbd, 0),# East Asian ideograph + 0x6f4d43: (0xb3d0, 0),# Korean hangul + 0x233e5f: (0x90ad, 0),# East Asian ideograph + 0x213c2f: (0x5dba, 0),# East Asian ideograph (variant of 4B3C2F which maps to 5DBA) + 0x6f493d: (0xacac, 0),# Korean hangul + 0x233c30: (0x8f46, 0),# East Asian ideograph + 0x226922: (0x7a2c, 0),# East Asian ideograph + 0x6f5d46: (0xd670, 0),# Korean hangul + 0x233c31: (0x8f4a, 0),# East Asian ideograph + 0x216929: (0x5124, 0),# East Asian ideograph + 0x6f5452: (0xc3d9, 0),# Korean hangul + 0x21692b: (0x5129, 0),# East Asian ideograph + 0x213c32: (0x5dd4, 0),# East Asian ideograph + 0x6f507d: (0xbc37, 0),# Korean hangul + 0x216930: (0x5131, 0),# East Asian ideograph + 0x273c33: (0x5ca9, 0),# East Asian ideograph + 0x29454d: (0x9534, 0),# East Asian ideograph + 0x275175: (0x7cfb, 0),# East Asian ideograph (duplicate simplified) + 0x226939: (0x7a48, 0),# East Asian ideograph + 0x22693d: (0x7a4b, 0),# East Asian ideograph + 0x22693e: (0x7a47, 0),# East Asian ideograph + 0x22693f: (0x7a44, 0),# East Asian ideograph + 0x274e5c: (0x77fe, 0),# East Asian ideograph + 0x6f5d47: (0xd671, 0),# Korean hangul + 0x216944: (0x513a, 0),# East Asian ideograph + 0x213c36: (0x5de2, 0),# East Asian ideograph + 0x696946: (0x8630, 0),# East Asian ideograph + 0x216947: (0x5139, 0),# East Asian ideograph + 0x216948: (0x513b, 0),# East Asian ideograph + 0x213c37: (0x5de5, 0),# East Asian ideograph + 0x22694d: (0x7a5f, 0),# East Asian ideograph + 0x22694f: (0x7a60, 0),# East Asian ideograph + 0x216951: (0x5159, 0),# East Asian ideograph + 0x216952: (0x515b, 0),# East Asian ideograph + 0x213663: (0x55aa, 0),# East Asian ideograph + 0x29454e: (0x9545, 0),# East Asian ideograph + 0x216955: (0x515d, 0),# East Asian ideograph + 0x216956: (0x515e, 0),# East Asian ideograph + 0x225838: (0x737e, 0),# East Asian ideograph + 0x216958: (0x515f, 0),# East Asian ideograph + 0x216959: (0x5161, 0),# East Asian ideograph + 0x69695b: (0x86ab, 0),# East Asian ideograph + 0x21695c: (0x5163, 0),# East Asian ideograph + 0x6f4f35: (0xb838, 0),# Korean hangul + 0x274e5d: (0x783a, 0),# East Asian ideograph + 0x22695f: (0x7a70, 0),# East Asian ideograph + 0x6f5d48: (0xd683, 0),# Korean hangul + 0x696962: (0x86ef, 0),# East Asian ideograph + 0x213c3b: (0x5deb, 0),# East Asian ideograph + 0x226966: (0x7a75, 0),# East Asian ideograph + 0x216967: (0x5182, 0),# East Asian ideograph + 0x216969: (0x5184, 0),# East Asian ideograph + 0x22696b: (0x7a80, 0),# East Asian ideograph + 0x21696e: (0x518f, 0),# East Asian ideograph + 0x213c3d: (0x5df1, 0),# East Asian ideograph + 0x216970: (0x5194, 0),# East Asian ideograph + 0x216971: (0x5193, 0),# East Asian ideograph + 0x2e403d: (0x6ac1, 0),# East Asian ideograph + 0x216975: (0x5196, 0),# East Asian ideograph + 0x226978: (0x7a8a, 0),# East Asian ideograph + 0x22697a: (0x7a94, 0),# East Asian ideograph + 0x21697b: (0x51a1, 0),# East Asian ideograph + 0x21697c: (0x51a3, 0),# East Asian ideograph + 0x22697e: (0x68a5, 0),# East Asian ideograph + 0x213c40: (0x5df4, 0),# East Asian ideograph + 0x223c41: (0x6832, 0),# East Asian ideograph + 0x213c42: (0x5dfd, 0),# East Asian ideograph + 0x275b28: (0x8e0c, 0),# East Asian ideograph + 0x213c43: (0x5dfe, 0),# East Asian ideograph + 0x275e3f: (0x94ce, 0),# East Asian ideograph + 0x213c44: (0x5e02, 0),# East Asian ideograph + 0x6f5471: (0xc510, 0),# Korean hangul + 0x29565d: (0x9c82, 0),# East Asian ideograph + 0x217c45: (0x5ab7, 0),# East Asian ideograph + 0x2d4440: (0x6822, 0),# East Asian ideograph + 0x223c47: (0x682b, 0),# East Asian ideograph + 0x294551: (0x9517, 0),# East Asian ideograph + 0x223c48: (0x682d, 0),# East Asian ideograph + 0x6f493e: (0xacaf, 0),# Korean hangul + 0x235c3a: (0x9ddf, 0),# East Asian ideograph + 0x233c49: (0x8f57, 0),# East Asian ideograph + 0x6f5d4b: (0xd68d, 0),# Korean hangul + 0x213c4a: (0x5e16, 0),# East Asian ideograph + 0x334f71: (0x54b2, 0),# East Asian ideograph + 0x213c4b: (0x5e15, 0),# East Asian ideograph + 0x275f6d: (0x972d, 0),# East Asian ideograph + 0x213c4c: (0x5e1b, 0),# East Asian ideograph + 0x4b3321: (0x5185, 0),# East Asian ideograph + 0x233c4d: (0x8f5c, 0),# East Asian ideograph + 0x213c4e: (0x5e1d, 0),# East Asian ideograph + 0x284f7d: (0x704f, 0),# East Asian ideograph + 0x29426f: (0x94bd, 0),# East Asian ideograph + 0x223c4f: (0x6844, 0),# East Asian ideograph + 0x4b5e5d: (0x95d4, 0),# East Asian ideograph + 0x224730: (0x6c78, 0),# East Asian ideograph + 0x6f5379: (0xc2a8, 0),# Korean hangul + 0x217c50: (0x5aba, 0),# East Asian ideograph + 0x275f6e: (0x96f3, 0),# East Asian ideograph + 0x213c51: (0x5e2b, 0),# East Asian ideograph + 0x6f5b26: (0xd131, 0),# Korean hangul + 0x213668: (0x55ae, 0),# East Asian ideograph + 0x232635: (0x8598, 0),# East Asian ideograph + 0x213c52: (0x5e33, 0),# East Asian ideograph + 0x233c53: (0x8f5d, 0),# East Asian ideograph + 0x6f5d4d: (0xd6a1, 0),# Korean hangul + 0x224731: (0x6c74, 0),# East Asian ideograph + 0x213c55: (0x5e37, 0),# East Asian ideograph + 0x275f6f: (0x7075, 0),# East Asian ideograph + 0x213c56: (0x5e45, 0),# East Asian ideograph + 0x6f4c41: (0xb1e8, 0),# Korean hangul + 0x275b2c: (0x8e8f, 0),# East Asian ideograph + 0x213226: (0x5000, 0),# East Asian ideograph + 0x223c58: (0x6834, 0),# East Asian ideograph + 0x334f37: (0x5ee9, 0),# East Asian ideograph + 0x695d36: (0x6b1f, 0),# East Asian ideograph + 0x223c59: (0x6812, 0),# East Asian ideograph + 0x224732: (0x6c86, 0),# East Asian ideograph + 0x213c5a: (0x5e5b, 0),# East Asian ideograph + 0x216a22: (0x51aa, 0),# East Asian ideograph + 0x216a23: (0x51ab, 0),# East Asian ideograph + 0x6f4c42: (0xb1fd, 0),# Korean hangul + 0x216a26: (0x51b1, 0),# East Asian ideograph + 0x29233c: (0x836d, 0),# East Asian ideograph + 0x226a28: (0x7aa3, 0),# East Asian ideograph + 0x213227: (0x4fee, 0),# East Asian ideograph + 0x226a2b: (0x7a9e, 0),# East Asian ideograph + 0x226a2c: (0x7aa7, 0),# East Asian ideograph + 0x226a2e: (0x7aa8, 0),# East Asian ideograph + 0x46284c: (0x5ed0, 0),# East Asian ideograph + 0x226a31: (0x7aac, 0),# East Asian ideograph + 0x6f5d4f: (0xd6c4, 0),# Korean hangul + 0x216a35: (0x51bc, 0),# East Asian ideograph + 0x226a36: (0x7ab3, 0),# East Asian ideograph + 0x226a3a: (0x7abd, 0),# East Asian ideograph + 0x2d3c5f: (0x6a66, 0),# East Asian ideograph + 0x226a3c: (0x7ab6, 0),# East Asian ideograph + 0x226a3d: (0x7ab8, 0),# East Asian ideograph + 0x226a3e: (0x7ab5, 0),# East Asian ideograph + 0x226a3f: (0x7abb, 0),# East Asian ideograph + 0x213c60: (0x5e5f, 0),# East Asian ideograph + 0x6f4c43: (0xb204, 0),# Korean hangul + 0x216a43: (0x51ca, 0),# East Asian ideograph + 0x216a46: (0x51c7, 0),# East Asian ideograph + 0x213c61: (0x5e6b, 0),# East Asian ideograph + 0x226a49: (0x7acd, 0),# East Asian ideograph + 0x226a4b: (0x7acf, 0),# East Asian ideograph + 0x216a4e: (0x51d1, 0),# East Asian ideograph + 0x216a4f: (0x51d0, 0),# East Asian ideograph + 0x287271: (0x7ea4, 0),# East Asian ideograph (duplicate simplified) + 0x226a51: (0x7ad3, 0),# East Asian ideograph + 0x226a52: (0x7ad4, 0),# East Asian ideograph + 0x216a54: (0x51d3, 0),# East Asian ideograph + 0x226a55: (0x7ada, 0),# East Asian ideograph + 0x226a5a: (0x7ae1, 0),# East Asian ideograph + 0x226a5e: (0x7ae6, 0),# East Asian ideograph + 0x233c65: (0x8fa4, 0),# East Asian ideograph + 0x277d48: (0x5ad2, 0),# East Asian ideograph + 0x696a61: (0x88c3, 0),# East Asian ideograph + 0x21765b: (0x57dd, 0),# East Asian ideograph + 0x216a63: (0x51d9, 0),# East Asian ideograph + 0x226a66: (0x7aeb, 0),# East Asian ideograph + 0x216a68: (0x51e2, 0),# East Asian ideograph + 0x226a6b: (0x7af0, 0),# East Asian ideograph + 0x696a6d: (0x8904, 0),# East Asian ideograph + 0x6f5d51: (0xd6c8, 0),# Korean hangul + 0x213c68: (0x5e7b, 0),# East Asian ideograph + 0x216a73: (0x5160, 0),# East Asian ideograph + 0x226a76: (0x7af5, 0),# East Asian ideograph + 0x213c69: (0x5e7c, 0),# East Asian ideograph + 0x216a78: (0x51f5, 0),# East Asian ideograph + 0x216a79: (0x51f7, 0),# East Asian ideograph + 0x226a7c: (0x7afe, 0),# East Asian ideograph + 0x2d3c6a: (0x51fc, 0),# East Asian ideograph + 0x273c6b: (0x51e0, 0),# East Asian ideograph + 0x4b4d56: (0x8846, 0),# East Asian ideograph + 0x2d5554: (0x855a, 0),# East Asian ideograph + 0x213c6c: (0x5e8f, 0),# East Asian ideograph + 0x6f5d52: (0xd6cc, 0),# Korean hangul + 0x233c6d: (0x8fb7, 0),# East Asian ideograph + 0x295222: (0x98e8, 0),# East Asian ideograph + 0x234b35: (0x96a9, 0),# East Asian ideograph + 0x227333: (0x7e50, 0),# East Asian ideograph + 0x6f4c46: (0xb20b, 0),# Korean hangul + 0x275b31: (0x8eaf, 0),# East Asian ideograph + 0x213c70: (0x5e97, 0),# East Asian ideograph + 0x22326a: (0x63f9, 0),# East Asian ideograph + 0x223c71: (0x689b, 0),# East Asian ideograph + 0x6f5d53: (0xd6d1, 0),# Korean hangul + 0x213c72: (0x5e9c, 0),# East Asian ideograph + 0x29344d: (0x8c2e, 0),# East Asian ideograph + 0x6f5972: (0xce7c, 0),# Korean hangul + 0x223c74: (0x68b6, 0),# East Asian ideograph + 0x6f4c47: (0xb20c, 0),# Korean hangul + 0x275b32: (0x8f66, 0),# East Asian ideograph + 0x213c75: (0x5ea6, 0),# East Asian ideograph + 0x223c76: (0x6882, 0),# East Asian ideograph + 0x226721: (0x7951, 0),# East Asian ideograph + 0x6f5d54: (0xd6d4, 0),# Korean hangul + 0x273c77: (0x5750, 0),# East Asian ideograph + 0x23595c: (0x9c6f, 0),# East Asian ideograph + 0x234b37: (0x96ae, 0),# East Asian ideograph + 0x226723: (0x7954, 0),# East Asian ideograph + 0x28232b: (0x5c66, 0),# East Asian ideograph + 0x232724: (0x8624, 0),# East Asian ideograph + 0x223c7a: (0x6890, 0),# East Asian ideograph + 0x4b4d59: (0x775b, 0),# East Asian ideograph (variant of 214D59 which maps to 775B) + 0x2f317d: (0x8a7e, 0),# East Asian ideograph + 0x213c7b: (0x5eb6, 0),# East Asian ideograph + 0x6f5d55: (0xd6d7, 0),# Korean hangul + 0x275d67: (0x94dd, 0),# East Asian ideograph + 0x217c7c: (0x5aeb, 0),# East Asian ideograph + 0x2d462c: (0x6b7a, 0),# East Asian ideograph + 0x224739: (0x6c67, 0),# East Asian ideograph + 0x233c7d: (0x8fcd, 0),# East Asian ideograph + 0x4b5a23: (0x621d, 0),# East Asian ideograph + 0x213c7e: (0x5ec1, 0),# East Asian ideograph + 0x2d4756: (0x6f94, 0),# East Asian ideograph + 0x275b34: (0x519b, 0),# East Asian ideograph + 0x4b5c47: (0x9059, 0),# East Asian ideograph + 0x22672a: (0x7967, 0),# East Asian ideograph + 0x235c45: (0x9dd6, 0),# East Asian ideograph + 0x6f4866: (0xac10, 0),# Korean hangul + 0x6f5b27: (0xd134, 0),# Korean hangul + 0x4c6266: (0x778b, 0),# East Asian ideograph + 0x22672d: (0x796b, 0),# East Asian ideograph + 0x2d6222: (0x9c0c, 0),# East Asian ideograph + 0x6f4c4a: (0xb215, 0),# Korean hangul + 0x275b35: (0x8f68, 0),# East Asian ideograph + 0x6f4f38: (0xb85c, 0),# Korean hangul + 0x33476f: (0x6d44, 0),# East Asian ideograph + 0x6f5d57: (0xd6e4, 0),# Korean hangul + 0x216b24: (0x5213, 0),# East Asian ideograph + 0x216b26: (0x5216, 0),# East Asian ideograph + 0x226b27: (0x7b39, 0),# East Asian ideograph + 0x22473b: (0x6c84, 0),# East Asian ideograph + 0x216b2a: (0x521c, 0),# East Asian ideograph + 0x226b2d: (0x7b0f, 0),# East Asian ideograph + 0x226b2e: (0x7b08, 0),# East Asian ideograph + 0x275f79: (0x9765, 0),# East Asian ideograph + 0x6f4c4b: (0xb217, 0),# Korean hangul + 0x226b33: (0x7b0a, 0),# East Asian ideograph + 0x29455e: (0x94e1, 0),# East Asian ideograph + 0x226b35: (0x7b35, 0),# East Asian ideograph + 0x226b36: (0x7b25, 0),# East Asian ideograph + 0x216b37: (0x5232, 0),# East Asian ideograph + 0x226b39: (0x7b38, 0),# East Asian ideograph + 0x226b3b: (0x7b3b, 0),# East Asian ideograph + 0x216b3e: (0x5244, 0),# East Asian ideograph + 0x226b3f: (0x7b24, 0),# East Asian ideograph + 0x226b40: (0x7b33, 0),# East Asian ideograph + 0x226b42: (0x7b2a, 0),# East Asian ideograph + 0x216b43: (0x5249, 0),# East Asian ideograph + 0x226b44: (0x7b18, 0),# East Asian ideograph + 0x282736: (0x5e0f, 0),# East Asian ideograph + 0x226b47: (0x7b31, 0),# East Asian ideograph + 0x234b3b: (0x96b0, 0),# East Asian ideograph + 0x226b4a: (0x7b2b, 0),# East Asian ideograph + 0x216b4b: (0x525a, 0),# East Asian ideograph + 0x216b4c: (0x5252, 0),# East Asian ideograph + 0x226b4d: (0x7b1f, 0),# East Asian ideograph + 0x213b36: (0x5be9, 0),# East Asian ideograph + 0x216b50: (0x525f, 0),# East Asian ideograph + 0x226b52: (0x7b4a, 0),# East Asian ideograph + 0x226b53: (0x7b59, 0),# East Asian ideograph (not in Unicode) + 0x226b54: (0x7b04, 0),# East Asian ideograph (variant of 2E6B54 which maps to 7B04) + 0x226b55: (0x7b47, 0),# East Asian ideograph + 0x216739: (0x5048, 0),# East Asian ideograph + 0x226b59: (0x7b58, 0),# East Asian ideograph + 0x226b5b: (0x7b6c, 0),# East Asian ideograph + 0x696b5c: (0x8ada, 0),# East Asian ideograph + 0x216b5e: (0x5268, 0),# East Asian ideograph + 0x216b5f: (0x7b9a, 0),# East Asian ideograph + 0x226b60: (0x7b48, 0),# East Asian ideograph + 0x226b61: (0x7b45, 0),# East Asian ideograph + 0x226b62: (0x7b4c, 0),# East Asian ideograph + 0x226b63: (0x7b4e, 0),# East Asian ideograph + 0x234b3c: (0x96b2, 0),# East Asian ideograph + 0x226b68: (0x7b66, 0),# East Asian ideograph + 0x706b6a: (0x8159, 0),# East Asian ideograph + 0x216b6b: (0x5278, 0),# East Asian ideograph + 0x226b6c: (0x7b64, 0),# East Asian ideograph + 0x226b6e: (0x7b69, 0),# East Asian ideograph + 0x275b38: (0x8f6f, 0),# East Asian ideograph + 0x226b70: (0x7b6d, 0),# East Asian ideograph + 0x226b74: (0x7b62, 0),# East Asian ideograph + 0x226b75: (0x7b6e, 0),# East Asian ideograph + 0x226b76: (0x7b74, 0),# East Asian ideograph + 0x233a30: (0x8e50, 0),# East Asian ideograph + 0x216b79: (0x528c, 0),# East Asian ideograph + 0x216b7a: (0x528a, 0),# East Asian ideograph + 0x226b7b: (0x7b6f, 0),# East Asian ideograph + 0x216b7c: (0x5290, 0),# East Asian ideograph + 0x226b7e: (0x7b65, 0),# East Asian ideograph + 0x4b3a2f: (0x805f, 0),# East Asian ideograph + 0x275b39: (0x8f6d, 0),# East Asian ideograph + 0x6f4867: (0xac11, 0),# Korean hangul + 0x27457a: (0x6b20, 0),# East Asian ideograph (duplicate simplified) + 0x222969: (0x5f54, 0),# East Asian ideograph + 0x4b3c53: (0x5e2f, 0),# East Asian ideograph + 0x234b3e: (0x96b3, 0),# East Asian ideograph + 0x4c6564: (0x78d9, 0),# East Asian ideograph + 0x282747: (0x5e3b, 0),# East Asian ideograph + 0x22584c: (0x7393, 0),# East Asian ideograph + 0x6f4f39: (0xb85d, 0),# Korean hangul + 0x2f5d5c: (0x730a, 0),# East Asian ideograph + 0x294944: (0x9603, 0),# East Asian ideograph + 0x22674a: (0x7998, 0),# East Asian ideograph + 0x33306c: (0x8b90, 0),# East Asian ideograph + 0x21674b: (0x505f, 0),# East Asian ideograph + 0x273d65: (0x540e, 0),# East Asian ideograph + 0x6f4c50: (0xb25c, 0),# Korean hangul + 0x27583b: (0x8ba6, 0),# East Asian ideograph + 0x213235: (0x5074, 0),# East Asian ideograph + 0x22674d: (0x7999, 0),# East Asian ideograph + 0x22674e: (0x7995, 0),# East Asian ideograph + 0x6f5d5d: (0xd711, 0),# Korean hangul + 0x226750: (0x7996, 0),# East Asian ideograph + 0x333051: (0x8cb3, 0),# East Asian ideograph + 0x2d6229: (0x9c53, 0),# East Asian ideograph + 0x6f4c51: (0xb260, 0),# Korean hangul + 0x275b3c: (0x8f76, 0),# East Asian ideograph + 0x294564: (0x9536, 0),# East Asian ideograph + 0x292752: (0x830f, 0),# East Asian ideograph + 0x233a34: (0x8e5c, 0),# East Asian ideograph + 0x6f5a29: (0xcef5, 0),# Korean hangul + 0x6f5d5e: (0xd718, 0),# Korean hangul + 0x274a30: (0x70db, 0),# East Asian ideograph + 0x292577: (0x8297, 0),# East Asian ideograph + 0x4b4a62: (0x72a0, 0),# East Asian ideograph + 0x273d67: (0x5f84, 0),# East Asian ideograph + 0x6f4c52: (0xb268, 0),# Korean hangul + 0x275b3d: (0x8f83, 0),# East Asian ideograph + 0x217669: (0x5819, 0),# East Asian ideograph + 0x223636: (0x6549, 0),# East Asian ideograph + 0x2d5561: (0x76d6, 0),# East Asian ideograph + 0x6f5d5f: (0xd719, 0),# Korean hangul + 0x274a31: (0x707f, 0),# East Asian ideograph + 0x293459: (0x8c2f, 0),# East Asian ideograph + 0x284e30: (0x6e11, 0),# East Asian ideograph + 0x29584b: (0x9cbd, 0),# East Asian ideograph + 0x6f584a: (0xca0b, 0),# Korean hangul + 0x34715a: (0x7e1a, 0),# East Asian ideograph + 0x216c21: (0x5293, 0),# East Asian ideograph + 0x6f4c53: (0xb269, 0),# Korean hangul + 0x275b3e: (0x8f7c, 0),# East Asian ideograph + 0x226c26: (0x7b71, 0),# East Asian ideograph + 0x226c27: (0x7b70, 0),# East Asian ideograph + 0x216c29: (0x5298, 0),# East Asian ideograph + 0x235c4f: (0x9de9, 0),# East Asian ideograph + 0x216c2b: (0x529a, 0),# East Asian ideograph + 0x216c2c: (0x5299, 0),# East Asian ideograph + 0x226c2d: (0x7b9c, 0),# East Asian ideograph + 0x216c2e: (0x52a6, 0),# East Asian ideograph + 0x22275d: (0x5e68, 0),# East Asian ideograph + 0x212a2b: (0xe8d9, 0),# EACC component character + 0x216c31: (0x52ad, 0),# East Asian ideograph + 0x226c33: (0x7b92, 0),# East Asian ideograph + 0x226c34: (0x7b91, 0),# East Asian ideograph + 0x226c35: (0x7b90, 0),# East Asian ideograph + 0x216c37: (0x52bb, 0),# East Asian ideograph + 0x226c38: (0x7ba3, 0),# East Asian ideograph + 0x226c3a: (0x7b8d, 0),# East Asian ideograph + 0x28275f: (0x5e31, 0),# East Asian ideograph + 0x216c3c: (0x52ca, 0),# East Asian ideograph + 0x216c3d: (0x52cd, 0),# East Asian ideograph + 0x2e6c3e: (0x7b59, 0),# East Asian ideograph + 0x2d622c: (0x9f08, 0),# East Asian ideograph + 0x216c40: (0x52d0, 0),# East Asian ideograph + 0x226c41: (0x7b85, 0),# East Asian ideograph + 0x706c42: (0x70bb, 0),# East Asian ideograph + 0x226c43: (0x7b8e, 0),# East Asian ideograph + 0x226c44: (0x7b98, 0),# East Asian ideograph + 0x213239: (0x504c, 0),# East Asian ideograph + 0x226c46: (0x7b86, 0),# East Asian ideograph + 0x226c48: (0x7b99, 0),# East Asian ideograph + 0x6f4f3a: (0xb860, 0),# Korean hangul + 0x216c4c: (0x52e3, 0),# East Asian ideograph + 0x216c4e: (0x52e1, 0),# East Asian ideograph + 0x6f5d61: (0xd720, 0),# Korean hangul + 0x216c50: (0x55e7, 0),# East Asian ideograph + 0x226c52: (0x7bb2, 0),# East Asian ideograph + 0x216c53: (0x52e9, 0),# East Asian ideograph + 0x6f5623: (0xc648, 0),# Korean hangul + 0x226c58: (0x7bcb, 0),# East Asian ideograph + 0x226c59: (0x7bb8, 0),# East Asian ideograph + 0x226c5a: (0x7bcf, 0),# East Asian ideograph + 0x226c5c: (0x7bd0, 0),# East Asian ideograph + 0x216c5e: (0x52f7, 0),# East Asian ideograph + 0x292765: (0x82c8, 0),# East Asian ideograph + 0x226c60: (0x7bbe, 0),# East Asian ideograph + 0x216c61: (0x52f9, 0),# East Asian ideograph + 0x216c62: (0x52fa, 0),# East Asian ideograph + 0x216c64: (0x52fc, 0),# East Asian ideograph + 0x216c69: (0x5307, 0),# East Asian ideograph + 0x216c6a: (0x5303, 0),# East Asian ideograph + 0x216c6b: (0x5306, 0),# East Asian ideograph (not in Unicode) + 0x6f5d62: (0xd728, 0),# Korean hangul + 0x216c6e: (0x530a, 0),# East Asian ideograph + 0x226c6f: (0x7bcc, 0),# East Asian ideograph + 0x216560: (0x4f80, 0),# East Asian ideograph + 0x216c77: (0x5311, 0),# East Asian ideograph + 0x213f6a: (0x6221, 0),# East Asian ideograph + 0x6f5975: (0xce87, 0),# Korean hangul + 0x216c7b: (0x6706, 0),# East Asian ideograph + 0x234767: (0x93f5, 0),# East Asian ideograph + 0x21323b: (0x500f, 0),# East Asian ideograph + 0x343e38: (0x7bda, 0),# East Asian ideograph + 0x4b6167: (0x95d8, 0),# East Asian ideograph + 0x6f5d63: (0xd729, 0),# Korean hangul + 0x6f5532: (0xc571, 0),# Korean hangul + 0x216561: (0x4f74, 0),# East Asian ideograph + 0x4b5a31: (0x8cce, 0),# East Asian ideograph + 0x6f4c57: (0xb290, 0),# Korean hangul + 0x275b42: (0x8f84, 0),# East Asian ideograph + 0x333e7d: (0x7652, 0),# East Asian ideograph + 0x4b4925: (0x6fb3, 0),# East Asian ideograph (variant of 214925 which maps to 6FB3) + 0x226771: (0x79a8, 0),# East Asian ideograph + 0x225a7e: (0x7488, 0),# East Asian ideograph + 0x6f5921: (0xcc29, 0),# Korean hangul + 0x692577: (0x309b, 0),# Katakana-hiragana voiced sound mark + 0x224b26: (0x6e31, 0),# East Asian ideograph + 0x6f5a3e: (0xcf55, 0),# Korean hangul + 0x6f4c58: (0xb291, 0),# Korean hangul + 0x275b43: (0x8f7b, 0),# East Asian ideograph + 0x226775: (0x79b0, 0),# East Asian ideograph + 0x233a3b: (0x8e67, 0),# East Asian ideograph + 0x275221: (0x7eed, 0),# East Asian ideograph + 0x6f5922: (0xcc2c, 0),# Korean hangul + 0x215222: (0x7e93, 0),# East Asian ideograph + 0x234b48: (0x96b9, 0),# East Asian ideograph + 0x4d445b: (0x9306, 0),# East Asian ideograph (variant of 23445B which maps to 9306) + 0x275223: (0x7ea4, 0),# East Asian ideograph + 0x275224: (0x7f06, 0),# East Asian ideograph + 0x21323e: (0x50a2, 0),# East Asian ideograph + 0x6f4f3b: (0xb864, 0),# Korean hangul + 0x2d334f: (0x5202, 0),# East Asian ideograph + 0x21677b: (0x50ca, 0),# East Asian ideograph + 0x4b4b2c: (0x731f, 0),# East Asian ideograph + 0x213933: (0x5944, 0),# East Asian ideograph + 0x27677c: (0x4f1b, 0),# East Asian ideograph + 0x4c6022: (0x7596, 0),# East Asian ideograph + 0x225227: (0x7139, 0),# East Asian ideograph + 0x4b3c5e: (0x5e64, 0),# East Asian ideograph + 0x234b49: (0x96bc, 0),# East Asian ideograph + 0x215228: (0x7f3d, 0),# East Asian ideograph + 0x6f4c5a: (0xb298, 0),# Korean hangul + 0x275b45: (0x8f87, 0),# East Asian ideograph + 0x215229: (0x7f44, 0),# East Asian ideograph + 0x22363e: (0x6554, 0),# East Asian ideograph + 0x23522b: (0x995f, 0),# East Asian ideograph + 0x6f5924: (0xcc2f, 0),# Korean hangul + 0x22522c: (0x713b, 0),# East Asian ideograph + 0x516122: (0x9988, 0),# East Asian ideograph + 0x6f522d: (0xbe90, 0),# Korean hangul + 0x6f4c5b: (0xb299, 0),# Korean hangul + 0x22522e: (0x711c, 0),# East Asian ideograph + 0x213240: (0x5099, 0),# East Asian ideograph + 0x23522f: (0x9997, 0),# East Asian ideograph + 0x225b59: (0x74a0, 0),# East Asian ideograph + 0x4b6168: (0x9599, 0),# East Asian ideograph + 0x235230: (0x9998, 0),# East Asian ideograph + 0x226d22: (0x7bdd, 0),# East Asian ideograph + 0x216d23: (0x531a, 0),# East Asian ideograph + 0x226d24: (0x7be5, 0),# East Asian ideograph + 0x216d25: (0x531f, 0),# East Asian ideograph + 0x215231: (0x7f69, 0),# East Asian ideograph + 0x226d29: (0x7be8, 0),# East Asian ideograph + 0x277267: (0x5452, 0),# East Asian ideograph + 0x225232: (0x713d, 0),# East Asian ideograph + 0x226d2e: (0x7bf9, 0),# East Asian ideograph + 0x226d2f: (0x7bd4, 0),# East Asian ideograph + 0x6f4c5c: (0xb2a0, 0),# Korean hangul + 0x226d32: (0x7bdf, 0),# East Asian ideograph + 0x275233: (0x7f5a, 0),# East Asian ideograph + 0x226d35: (0x7bd8, 0),# East Asian ideograph + 0x216d36: (0x5335, 0),# East Asian ideograph + 0x226d37: (0x7bea, 0),# Unrelated variant of EACC 3A6A7C which maps to 7BEA + 0x213c2d: (0x5dbc, 0),# East Asian ideograph + 0x275234: (0x9a82, 0),# East Asian ideograph + 0x216d3a: (0x5338, 0),# East Asian ideograph + 0x226d3b: (0x7c06, 0),# East Asian ideograph + 0x226d3e: (0x7bf0, 0),# East Asian ideograph + 0x275d6b: (0x952d, 0),# East Asian ideograph + 0x696d40: (0x8ec5, 0),# East Asian ideograph + 0x226d41: (0x7c0f, 0),# East Asian ideograph + 0x216d42: (0x534d, 0),# East Asian ideograph + 0x6f5926: (0xcc38, 0),# Korean hangul + 0x706d45: (0x783c, 0),# East Asian ideograph + 0x226d46: (0x7c0b, 0),# East Asian ideograph + 0x222534: (0x5d74, 0),# East Asian ideograph + 0x275237: (0x7f57, 0),# East Asian ideograph + 0x216d4c: (0x5363, 0),# East Asian ideograph + 0x2d6235: (0x9d76, 0),# East Asian ideograph + 0x216d4e: (0x5365, 0),# East Asian ideograph (not in Unicode) + 0x226d4f: (0x7bf4, 0),# East Asian ideograph + 0x215238: (0x7f88, 0),# East Asian ideograph + 0x216d53: (0x536c, 0),# East Asian ideograph + 0x226d54: (0x7bf3, 0),# East Asian ideograph + 0x216d57: (0x5372, 0),# East Asian ideograph + 0x216d58: (0x537a, 0),# East Asian ideograph + 0x4b492b: (0x6feb, 0),# East Asian ideograph + 0x226d5a: (0x7c09, 0),# East Asian ideograph + 0x226d5b: (0x7c03, 0),# East Asian ideograph + 0x226d5c: (0x7bfc, 0),# East Asian ideograph + 0x216d5d: (0x5380, 0),# East Asian ideograph + 0x226d5f: (0x7c1c, 0),# East Asian ideograph + 0x226d61: (0x7c26, 0),# East Asian ideograph + 0x226d62: (0x7c28, 0),# East Asian ideograph + 0x22523b: (0x7129, 0),# East Asian ideograph + 0x216d64: (0x538e, 0),# East Asian ideograph + 0x233d3f: (0x9004, 0),# East Asian ideograph + 0x226d66: (0x7c1f, 0),# East Asian ideograph + 0x216d67: (0x5394, 0),# East Asian ideograph + 0x226d68: (0x7c2f, 0),# East Asian ideograph + 0x23523c: (0x99a1, 0),# East Asian ideograph + 0x6f4c5e: (0xb2a5, 0),# Korean hangul + 0x216d6d: (0x5399, 0),# East Asian ideograph + 0x6f523d: (0xbf18, 0),# Korean hangul + 0x285f48: (0x7617, 0),# East Asian ideograph + 0x213243: (0x5096, 0),# East Asian ideograph + 0x216d74: (0x8652, 0),# East Asian ideograph + 0x226d75: (0x7c30, 0),# East Asian ideograph + 0x6f4f3c: (0xb86c, 0),# Korean hangul + 0x216d7a: (0x53a4, 0),# East Asian ideograph + 0x216d7b: (0x53ab, 0),# East Asian ideograph + 0x2d5941: (0x5629, 0),# East Asian ideograph + 0x6f5928: (0xcc3b, 0),# Korean hangul + 0x2d5240: (0x7fa1, 0),# East Asian ideograph + 0x235241: (0x99a9, 0),# East Asian ideograph + 0x6f4c5f: (0xb2a6, 0),# Korean hangul + 0x215242: (0x7fa9, 0),# East Asian ideograph + 0x283d30: (0x67a7, 0),# East Asian ideograph + 0x235c5b: (0x9df8, 0),# East Asian ideograph + 0x225243: (0x712e, 0),# East Asian ideograph + 0x6f5244: (0xbf51, 0),# Korean hangul + 0x6f5929: (0xcc3c, 0),# Korean hangul + 0x226969: (0x7a78, 0),# East Asian ideograph + 0x6f523b: (0xbf08, 0),# Korean hangul + 0x28337b: (0x62a0, 0),# East Asian ideograph + 0x6f4c60: (0xb2aa, 0),# Korean hangul + 0x4b5247: (0x7fae, 0),# East Asian ideograph + 0x334256: (0x6b5b, 0),# East Asian ideograph + 0x22585d: (0x73a5, 0),# East Asian ideograph + 0x235c5c: (0x9dfc, 0),# East Asian ideograph + 0x225248: (0x7177, 0),# East Asian ideograph + 0x233a43: (0x8e5d, 0),# East Asian ideograph + 0x4b492e: (0x6e0b, 0),# East Asian ideograph + 0x234e4c: (0x97cd, 0),# East Asian ideograph + 0x2d7345: (0x56d3, 0),# East Asian ideograph + 0x215249: (0x7fbf, 0),# East Asian ideograph + 0x284e3e: (0x6cf6, 0),# East Asian ideograph + 0x212a3a: (0xe8e7, 0),# EACC component character + 0x2d524a: (0x7fc4, 0),# East Asian ideograph + 0x39483b: (0x9061, 0),# East Asian ideograph + 0x276029: (0x9791, 0),# East Asian ideograph + 0x6f524b: (0xbfd0, 0),# Korean hangul + 0x2e337b: (0x630e, 0),# East Asian ideograph + 0x6f4c61: (0xb2ac, 0),# Korean hangul + 0x6f524c: (0xbfd4, 0),# Korean hangul + 0x27524d: (0x4e60, 0),# East Asian ideograph + 0x233a44: (0x8e75, 0),# East Asian ideograph + 0x23524e: (0x99bc, 0),# East Asian ideograph + 0x293468: (0x8c35, 0),# East Asian ideograph + 0x6f545a: (0xc410, 0),# Korean hangul + 0x23524f: (0x99c3, 0),# East Asian ideograph + 0x6f5250: (0xc058, 0),# Korean hangul + 0x6f4c62: (0xb2c8, 0),# Korean hangul + 0x275b4d: (0x8f91, 0),# East Asian ideograph + 0x275251: (0x7fc6, 0),# East Asian ideograph + 0x213247: (0x50b5, 0),# East Asian ideograph + 0x4b4d73: (0x66b8, 0),# East Asian ideograph + 0x225252: (0x7152, 0),# East Asian ideograph + 0x235253: (0x99b9, 0),# East Asian ideograph + 0x6f592c: (0xcc3f, 0),# Korean hangul + 0x215254: (0x7fe9, 0),# East Asian ideograph + 0x274d3a: (0x76cf, 0),# East Asian ideograph + 0x225255: (0x715d, 0),# East Asian ideograph + 0x6f4c63: (0xb2c9, 0),# Korean hangul + 0x225256: (0x7141, 0),# East Asian ideograph + 0x227636: (0x800f, 0),# East Asian ideograph + 0x4b4931: (0x6e16, 0),# East Asian ideograph + 0x4d3359: (0x56af, 0),# East Asian ideograph + 0x275258: (0x7fd8, 0),# East Asian ideograph + 0x21656e: (0x4f94, 0),# East Asian ideograph + 0x284e41: (0x6f4b, 0),# East Asian ideograph + 0x225259: (0x7175, 0),# East Asian ideograph + 0x692546: (0x30c6, 0),# Katakana letter TE + 0x22525a: (0x7173, 0),# East Asian ideograph + 0x6f4c64: (0xb2cc, 0),# Korean hangul + 0x275b4f: (0x8f96, 0),# East Asian ideograph + 0x33525b: (0x71ff, 0),# East Asian ideograph + 0x226e27: (0x7c35, 0),# East Asian ideograph + 0x23347b: (0x8b7e, 0),# East Asian ideograph + 0x21525c: (0x8001, 0),# East Asian ideograph + 0x226e2a: (0x7c40, 0),# East Asian ideograph + 0x2d5573: (0x83d4, 0),# East Asian ideograph + 0x216e2c: (0x53b5, 0),# East Asian ideograph + 0x216e2e: (0x53b9, 0),# East Asian ideograph + 0x22525d: (0x715a, 0),# East Asian ideograph + 0x226e30: (0x7c39, 0),# East Asian ideograph + 0x6f592e: (0xcc45, 0),# Korean hangul + 0x226e34: (0x7c3b, 0),# East Asian ideograph + 0x226e35: (0x7c34, 0),# East Asian ideograph + 0x6f5426: (0xc2e3, 0),# Korean hangul + 0x226e3b: (0x7c42, 0),# East Asian ideograph + 0x216e3e: (0x53d0, 0),# East Asian ideograph + 0x70727d: (0x87a8, 0),# East Asian ideograph + 0x275b50: (0x8f97, 0),# East Asian ideograph + 0x225260: (0x714b, 0),# East Asian ideograph + 0x4c6e42: (0x7c31, 0),# East Asian ideograph + 0x21324a: (0x50be, 0),# East Asian ideograph + 0x225862: (0x73a2, 0),# East Asian ideograph + 0x226e46: (0x7c4e, 0),# East Asian ideograph + 0x235261: (0x99d3, 0),# East Asian ideograph + 0x216e48: (0x53da, 0),# East Asian ideograph + 0x4d5574: (0x9b2e, 0),# East Asian ideograph + 0x275e47: (0x94a5, 0),# East Asian ideograph + 0x225262: (0x7147, 0),# East Asian ideograph + 0x6f592f: (0xcc48, 0),# Korean hangul + 0x235263: (0x99d4, 0),# East Asian ideograph + 0x226e54: (0x7c5d, 0),# East Asian ideograph + 0x226e56: (0x7c5c, 0),# East Asian ideograph + 0x226e57: (0x7c5a, 0),# East Asian ideograph + 0x226e58: (0x7c5b, 0),# East Asian ideograph + 0x226e59: (0x7c59, 0),# East Asian ideograph + 0x226e5b: (0x7c5e, 0),# East Asian ideograph + 0x226e5c: (0x7c67, 0),# East Asian ideograph + 0x6f4c66: (0xb2d8, 0),# Korean hangul + 0x226e5e: (0x7c63, 0),# East Asian ideograph + 0x235265: (0x99c9, 0),# East Asian ideograph + 0x226e61: (0x7c68, 0),# East Asian ideograph + 0x226e62: (0x7c65, 0),# East Asian ideograph + 0x2d3132: (0x4ecf, 0),# East Asian ideograph + 0x225266: (0x7171, 0),# East Asian ideograph + 0x216e68: (0x5406, 0),# East Asian ideograph + 0x286e69: (0x7c16, 0),# East Asian ideograph + 0x225267: (0x715f, 0),# East Asian ideograph + 0x216e6c: (0x544c, 0),# East Asian ideograph + 0x216e6d: (0x5445, 0),# East Asian ideograph + 0x226e6f: (0x7c6f, 0),# East Asian ideograph + 0x216e70: (0x5432, 0),# East Asian ideograph + 0x226970: (0x7a85, 0),# East Asian ideograph + 0x226e75: (0x7c75, 0),# East Asian ideograph + 0x216e76: (0x5421, 0),# East Asian ideograph + 0x215269: (0x8033, 0),# East Asian ideograph + 0x216e78: (0x5430, 0),# East Asian ideograph + 0x226e79: (0x7c7e, 0),# East Asian ideograph + 0x226e7a: (0x7c78, 0),# East Asian ideograph + 0x6f4c67: (0xb2d9, 0),# Korean hangul + 0x275b52: (0x6bc2, 0),# East Asian ideograph + 0x226e7d: (0x7c7d, 0),# East Asian ideograph + 0x27517e: (0x7f20, 0),# East Asian ideograph + 0x692560: (0x30e0, 0),# Katakana letter MU + 0x215022: (0x7b4f, 0),# East Asian ideograph + 0x6f5323: (0xc11e, 0),# Korean hangul + 0x225421: (0x71dd, 0),# East Asian ideograph + 0x6f486c: (0xac16, 0),# Korean hangul + 0x2d526c: (0x8ead, 0),# East Asian ideograph + 0x274a46: (0x5899, 0),# East Asian ideograph + 0x6f5931: (0xcc54, 0),# Korean hangul + 0x225f5f: (0x7630, 0),# East Asian ideograph + 0x6f5b2d: (0xd145, 0),# Korean hangul + 0x22253f: (0x5d75, 0),# East Asian ideograph + 0x234b57: (0x96d2, 0),# East Asian ideograph + 0x69654f: (0x7e05, 0),# East Asian ideograph + 0x4b526e: (0x8046, 0),# East Asian ideograph (variant of 21526E which maps to 8046) + 0x6f4c68: (0xb2db, 0),# Korean hangul + 0x27526f: (0x5723, 0),# East Asian ideograph + 0x22763b: (0x801f, 0),# East Asian ideograph + 0x225422: (0x71c0, 0),# East Asian ideograph + 0x335821: (0x97c8, 0),# East Asian ideograph + 0x275271: (0x95fb, 0),# East Asian ideograph + 0x6f5932: (0xcc55, 0),# Korean hangul + 0x6f5272: (0xc0d0, 0),# Korean hangul + 0x2d446b: (0x6936, 0),# East Asian ideograph + 0x2d6241: (0x9d5e, 0),# East Asian ideograph + 0x21346a: (0x536f, 0),# East Asian ideograph + 0x275b54: (0x8f99, 0),# East Asian ideograph + 0x235274: (0x99ec, 0),# East Asian ideograph + 0x2e625f: (0x77c1, 0),# East Asian ideograph + 0x275275: (0x8038, 0),# East Asian ideograph + 0x4b4937: (0x56a0, 0),# East Asian ideograph + 0x225276: (0x7172, 0),# East Asian ideograph + 0x223d21: (0x6872, 0),# East Asian ideograph + 0x6f5933: (0xcc58, 0),# Korean hangul + 0x29486f: (0x9569, 0),# East Asian ideograph + 0x275277: (0x8054, 0),# East Asian ideograph + 0x223d22: (0x689c, 0),# East Asian ideograph + 0x275278: (0x804c, 0),# East Asian ideograph + 0x6f5979: (0xce94, 0),# Korean hangul + 0x2f3c2d: (0x8f3c, 0),# East Asian ideograph + 0x6f4c6a: (0xb2e2, 0),# Korean hangul + 0x275b55: (0x8f6c, 0),# East Asian ideograph + 0x215279: (0x8076, 0),# East Asian ideograph + 0x2e7d24: (0x83f0, 0),# East Asian ideograph + 0x225867: (0x73b6, 0),# East Asian ideograph + 0x235d66: (0x9e9e, 0),# East Asian ideograph + 0x21527a: (0x807e, 0),# East Asian ideograph + 0x213d25: (0x5ed3, 0),# East Asian ideograph + 0x275e48: (0x92ae, 0),# East Asian ideograph + 0x235823: (0x9bd5, 0),# East Asian ideograph + 0x21527b: (0x807d, 0),# East Asian ideograph + 0x217d26: (0x5aff, 0),# East Asian ideograph + 0x287061: (0x7ec0, 0),# East Asian ideograph + 0x23527c: (0x99ea, 0),# East Asian ideograph + 0x213d27: (0x5ee2, 0),# East Asian ideograph + 0x284668: (0x6c29, 0),# East Asian ideograph + 0x6f527d: (0xc0f7, 0),# Korean hangul + 0x333d28: (0x53a8, 0),# East Asian ideograph + 0x275b56: (0x8f9a, 0),# East Asian ideograph + 0x6f527e: (0xc0f9, 0),# Korean hangul + 0x2d3d29: (0x53ae, 0),# East Asian ideograph + 0x33417e: (0x629e, 0),# East Asian ideograph + 0x213d2a: (0x5ee3, 0),# East Asian ideograph (variant of 4B3D2A which maps to 5EE3) + 0x287279: (0x7f25, 0),# East Asian ideograph + 0x294568: (0x9518, 0),# East Asian ideograph + 0x213d2b: (0x5edf, 0),# East Asian ideograph + 0x287062: (0x7ec1, 0),# East Asian ideograph + 0x6f545c: (0xc430, 0),# Korean hangul + 0x226975: (0x7a86, 0),# East Asian ideograph + 0x22475c: (0x6ca0, 0),# East Asian ideograph + 0x216133: (0x99d0, 0),# East Asian ideograph + 0x226532: (0x78b6, 0),# East Asian ideograph + 0x213d2d: (0x9f90, 0),# East Asian ideograph + 0x275b57: (0x8f7f, 0),# East Asian ideograph + 0x223d2e: (0x68a9, 0),# East Asian ideograph + 0x213d2f: (0x5ef3, 0),# East Asian ideograph + 0x212a30: (0xe8de, 0),# EACC component character + 0x6f5d79: (0xd789, 0),# Korean hangul + 0x226f21: (0x7c81, 0),# East Asian ideograph + 0x216577: (0x4f90, 0),# East Asian ideograph + 0x216f24: (0x542a, 0),# East Asian ideograph + 0x33314c: (0x5fa0, 0),# East Asian ideograph + 0x216f26: (0x5422, 0),# East Asian ideograph + 0x274d3c: (0x5c3d, 0),# East Asian ideograph + 0x226f28: (0x7c8e, 0),# East Asian ideograph + 0x226f29: (0x7c91, 0),# East Asian ideograph + 0x226f2a: (0x7c83, 0),# East Asian ideograph + 0x226f2c: (0x7c8d, 0),# East Asian ideograph + 0x213d32: (0x5ef6, 0),# East Asian ideograph + 0x216f2e: (0x545f, 0),# East Asian ideograph + 0x216f2f: (0x549c, 0),# East Asian ideograph + 0x27393f: (0x5941, 0),# East Asian ideograph + 0x223d33: (0x68a0, 0),# East Asian ideograph + 0x213252: (0x50d6, 0),# East Asian ideograph + 0x216f35: (0x5488, 0),# East Asian ideograph + 0x216f37: (0x547f, 0),# East Asian ideograph + 0x216f39: (0x5482, 0),# East Asian ideograph + 0x226f3a: (0x7c99, 0),# East Asian ideograph + 0x226f3b: (0x7c98, 0),# East Asian ideograph + 0x6f5d7a: (0xd78c, 0),# Korean hangul + 0x226f3e: (0x7c9c, 0),# East Asian ideograph + 0x226f40: (0x7c95, 0),# East Asian ideograph + 0x6f5937: (0xcc70, 0),# Korean hangul + 0x226f42: (0x7ca7, 0),# East Asian ideograph + 0x226f43: (0x7ca2, 0),# East Asian ideograph + 0x226f45: (0x7c9e, 0),# East Asian ideograph + 0x226f46: (0x7ca9, 0),# East Asian ideograph + 0x6f5939: (0xcc98, 0),# Korean hangul + 0x226f48: (0x7ca8, 0),# East Asian ideograph + 0x226f49: (0x7ca1, 0),# East Asian ideograph + 0x226f4a: (0x7cac, 0),# East Asian ideograph + 0x216f4b: (0x5474, 0),# East Asian ideograph + 0x226f4c: (0x7ca6, 0),# East Asian ideograph + 0x6f4c6e: (0xb2e5, 0),# Korean hangul + 0x216f52: (0x5466, 0),# East Asian ideograph + 0x216f53: (0x5464, 0),# East Asian ideograph + 0x226f54: (0x7cb2, 0),# East Asian ideograph + 0x216f55: (0x54a4, 0),# East Asian ideograph + 0x213d39: (0x5f0f, 0),# East Asian ideograph + 0x226f58: (0x7cbb, 0),# East Asian ideograph + 0x226f59: (0x7cbf, 0),# East Asian ideograph + 0x216f5a: (0x54ad, 0),# East Asian ideograph + 0x216f5b: (0x54ba, 0),# East Asian ideograph + 0x216f5c: (0x54cf, 0),# East Asian ideograph + 0x696f5d: (0x9596, 0),# East Asian ideograph + 0x226f5e: (0x7cba, 0),# East Asian ideograph + 0x226f5f: (0x7cbc, 0),# East Asian ideograph + 0x216f60: (0x54a5, 0),# East Asian ideograph + 0x216f63: (0x54a7, 0),# East Asian ideograph + 0x226f64: (0x7cc2, 0),# East Asian ideograph + 0x216f66: (0x54a2, 0),# East Asian ideograph + 0x216f67: (0x5472, 0),# East Asian ideograph + 0x216f68: (0x5470, 0),# East Asian ideograph + 0x216f69: (0x54bc, 0),# East Asian ideograph + 0x216f6a: (0x54b7, 0),# East Asian ideograph + 0x216f6b: (0x54de, 0),# East Asian ideograph + 0x216f6c: (0x54d6, 0),# East Asian ideograph + 0x226f6d: (0x7ccc, 0),# East Asian ideograph + 0x226f6f: (0x7cc9, 0),# East Asian ideograph + 0x226f71: (0x7cd2, 0),# East Asian ideograph + 0x6f4a22: (0xadc0, 0),# Korean hangul + 0x29442d: (0x94a1, 0),# East Asian ideograph + 0x216f74: (0x54c6, 0),# East Asian ideograph + 0x225429: (0x71cb, 0),# East Asian ideograph + 0x226f77: (0x7ce1, 0),# East Asian ideograph + 0x6f5d7c: (0xd798, 0),# Korean hangul + 0x33467a: (0x6ca1, 0),# East Asian ideograph + 0x223d3f: (0x6877, 0),# East Asian ideograph + 0x216f7c: (0x54e2, 0),# East Asian ideograph + 0x216f7d: (0x5507, 0),# East Asian ideograph + 0x233d40: (0x9008, 0),# East Asian ideograph + 0x233d59: (0x9036, 0),# East Asian ideograph + 0x277d74: (0x5a08, 0),# East Asian ideograph + 0x333d42: (0x7d43, 0),# East Asian ideograph + 0x213a63: (0x5b7f, 0),# East Asian ideograph + 0x213d43: (0x5f27, 0),# East Asian ideograph + 0x2d3366: (0x5234, 0),# East Asian ideograph + 0x6f5d7d: (0xd799, 0),# Korean hangul + 0x223d44: (0x688e, 0),# East Asian ideograph + 0x6f593a: (0xcc99, 0),# Korean hangul + 0x233d45: (0x900b, 0),# East Asian ideograph + 0x277030: (0x5457, 0),# East Asian ideograph + 0x697023: (0x9666, 0),# East Asian ideograph + 0x6f4a64: (0xaedc, 0),# Korean hangul + 0x213d47: (0x5f35, 0),# East Asian ideograph + 0x235c6d: (0x9dee, 0),# East Asian ideograph + 0x233d48: (0x900c, 0),# East Asian ideograph + 0x6f5d7e: (0xd79b, 0),# Korean hangul + 0x213d49: (0x5f3c, 0),# East Asian ideograph + 0x6f593b: (0xcc9c, 0),# Korean hangul + 0x394944: (0x6b12, 0),# East Asian ideograph + 0x6f5b2f: (0xd14d, 0),# Korean hangul + 0x224762: (0x6ceb, 0),# East Asian ideograph + 0x4b3b52: (0x8132, 0),# East Asian ideograph + 0x2d4474: (0x690d, 0),# East Asian ideograph (variant of 214474 which maps to 690D) + 0x273d4b: (0x5f39, 0),# East Asian ideograph + 0x2d4031: (0x64a6, 0),# East Asian ideograph + 0x6f5a32: (0xcf10, 0),# Korean hangul + 0x213d4c: (0x5f4c, 0),# East Asian ideograph + 0x213d4d: (0x5f4e, 0),# East Asian ideograph + 0x4b4940: (0x6f45, 0),# East Asian ideograph + 0x23582b: (0x9bf1, 0),# East Asian ideograph + 0x6f5d25: (0xd5e5, 0),# Korean hangul + 0x213d4e: (0x5f57, 0),# East Asian ideograph + 0x6f5030: (0xba65, 0),# Korean hangul + 0x224763: (0x6cee, 0),# East Asian ideograph + 0x226539: (0x78b7, 0),# East Asian ideograph + 0x213d50: (0x5f5d, 0),# East Asian ideograph + 0x6f4c73: (0xb2ed, 0),# Korean hangul + 0x223d51: (0x6917, 0),# East Asian ideograph + 0x225870: (0x73c8, 0),# East Asian ideograph + 0x217247: (0x5642, 0),# East Asian ideograph + 0x4b6247: (0x9d2c, 0),# East Asian ideograph + 0x217d52: (0x5b2c, 0),# East Asian ideograph + 0x23582c: (0x9be1, 0),# East Asian ideograph + 0x213d53: (0x5f65, 0),# East Asian ideograph + 0x28706a: (0x7ed0, 0),# East Asian ideograph + 0x294871: (0x954a, 0),# East Asian ideograph + 0x6f5d78: (0xd788, 0),# Korean hangul + 0x224764: (0x6cc0, 0),# East Asian ideograph + 0x6f597b: (0xcea0, 0),# Korean hangul + 0x275b5f: (0x529e, 0),# East Asian ideograph + 0x285f5e: (0x7618, 0),# East Asian ideograph + 0x223d56: (0x690b, 0),# East Asian ideograph + 0x213259: (0x5100, 0),# East Asian ideograph + 0x233d57: (0x9034, 0),# East Asian ideograph + 0x455122: (0x7d0d, 0),# East Asian ideograph + 0x23582d: (0x9bdb, 0),# East Asian ideograph + 0x233d58: (0x902f, 0),# East Asian ideograph + 0x6f593e: (0xcca9, 0),# Korean hangul + 0x223d59: (0x6904, 0),# East Asian ideograph + 0x6f5b45: (0xd230, 0),# Korean hangul + 0x234b64: (0x96df, 0),# East Asian ideograph + 0x6f4c75: (0xb2f3, 0),# Korean hangul + 0x275b60: (0x8f9e, 0),# East Asian ideograph + 0x227022: (0x7cdd, 0),# East Asian ideograph + 0x217023: (0x5517, 0),# East Asian ideograph + 0x217024: (0x54fd, 0),# East Asian ideograph + 0x217025: (0x54e7, 0),# East Asian ideograph + 0x217027: (0x54f3, 0),# East Asian ideograph + 0x227028: (0x7ced, 0),# East Asian ideograph + 0x213d5c: (0x5f80, 0),# East Asian ideograph + 0x21702a: (0x54e4, 0),# East Asian ideograph + 0x21702b: (0x550a, 0),# East Asian ideograph + 0x21702d: (0x54ff, 0),# East Asian ideograph + 0x21702e: (0x5518, 0),# East Asian ideograph + 0x223d5d: (0x6929, 0),# East Asian ideograph + 0x227030: (0x7cf2, 0),# East Asian ideograph + 0x6f593f: (0xccab, 0),# Korean hangul + 0x217032: (0x54ef, 0),# East Asian ideograph + 0x217034: (0x5508, 0),# East Asian ideograph + 0x227035: (0x7cf4, 0),# East Asian ideograph + 0x217038: (0x54f6, 0),# East Asian ideograph + 0x227039: (0x7cf6, 0),# East Asian ideograph + 0x6f4c76: (0xb2f4, 0),# Korean hangul + 0x21703e: (0x550e, 0),# East Asian ideograph + 0x275b61: (0x8fa9, 0),# East Asian ideograph + 0x4b5c50: (0x9045, 0),# East Asian ideograph + 0x692563: (0x30e3, 0),# Katakana letter small YA + 0x21325b: (0x50fb, 0),# East Asian ideograph + 0x217044: (0x5523, 0),# East Asian ideograph + 0x227045: (0x7d08, 0),# East Asian ideograph + 0x217046: (0x550f, 0),# East Asian ideograph + 0x217047: (0x5511, 0),# East Asian ideograph + 0x23582f: (0x9be2, 0),# East Asian ideograph + 0x22704a: (0x7d13, 0),# East Asian ideograph + 0x21704b: (0x5575, 0),# East Asian ideograph + 0x21704d: (0x5573, 0),# East Asian ideograph + 0x21704e: (0x554c, 0),# East Asian ideograph + 0x21704f: (0x5576, 0),# East Asian ideograph + 0x217050: (0x554d, 0),# East Asian ideograph + 0x217051: (0x555a, 0),# East Asian ideograph + 0x227052: (0x7d1d, 0),# East Asian ideograph + 0x217053: (0x553c, 0),# East Asian ideograph + 0x217055: (0x5550, 0),# East Asian ideograph + 0x217057: (0x5539, 0),# East Asian ideograph + 0x217058: (0x5548, 0),# East Asian ideograph + 0x217059: (0x552d, 0),# East Asian ideograph + 0x21705a: (0x5551, 0),# East Asian ideograph + 0x6f4c77: (0xb2f5, 0),# Korean hangul + 0x21705d: (0x552a, 0),# East Asian ideograph + 0x213d65: (0x5f8c, 0),# East Asian ideograph + 0x217060: (0x5562, 0),# East Asian ideograph + 0x217061: (0x5536, 0),# East Asian ideograph + 0x227062: (0x7d32, 0),# East Asian ideograph + 0x217064: (0x5549, 0),# East Asian ideograph + 0x227065: (0x7d31, 0),# East Asian ideograph + 0x335830: (0x658d, 0),# East Asian ideograph + 0x227068: (0x7d45, 0),# East Asian ideograph + 0x21706a: (0x5540, 0),# East Asian ideograph + 0x21706b: (0x5535, 0),# East Asian ideograph + 0x22706c: (0x7d29, 0),# East Asian ideograph + 0x6f5941: (0xccb4, 0),# Korean hangul + 0x22706f: (0x7d41, 0),# East Asian ideograph + 0x217070: (0x5545, 0),# East Asian ideograph + 0x227071: (0x7d3e, 0),# East Asian ideograph + 0x234b67: (0x96dd, 0),# East Asian ideograph + 0x213d69: (0x5f98, 0),# East Asian ideograph + 0x217079: (0x553f, 0),# East Asian ideograph + 0x22707a: (0x7d5c, 0),# East Asian ideograph + 0x21707b: (0x5541, 0),# East Asian ideograph + 0x22707c: (0x7d53, 0),# East Asian ideograph + 0x21707d: (0x5565, 0),# East Asian ideograph + 0x22707e: (0x7d5a, 0),# East Asian ideograph + 0x275779: (0x891b, 0),# East Asian ideograph + 0x225432: (0x71eb, 0),# East Asian ideograph + 0x235831: (0x9bf0, 0),# East Asian ideograph + 0x213d6c: (0x5f9e, 0),# East Asian ideograph + 0x6f5942: (0xccb5, 0),# Korean hangul + 0x213f27: (0x614d, 0),# East Asian ideograph + 0x213b3f: (0x5c08, 0),# East Asian ideograph + 0x283d6e: (0x67a8, 0),# East Asian ideograph + 0x2d6251: (0x5869, 0),# East Asian ideograph + 0x6f4c79: (0xb2f9, 0),# Korean hangul + 0x275b64: (0x519c, 0),# East Asian ideograph + 0x273d6f: (0x590d, 0),# East Asian ideograph + 0x21325e: (0x5102, 0),# East Asian ideograph + 0x6f4a24: (0xadc8, 0),# Korean hangul + 0x4b4947: (0x7ac3, 0),# East Asian ideograph + 0x6f5943: (0xccb8, 0),# Korean hangul + 0x213f28: (0x614b, 0),# East Asian ideograph + 0x213d73: (0x5fae, 0),# East Asian ideograph + 0x2d6252: (0x78b1, 0),# East Asian ideograph + 0x295a59: (0x9e38, 0),# East Asian ideograph + 0x277328: (0x54dc, 0),# East Asian ideograph + 0x213d74: (0x5fb9, 0),# East Asian ideograph + 0x21325f: (0x510d, 0),# East Asian ideograph + 0x285b21: (0x740f, 0),# East Asian ideograph + 0x233a5d: (0x8e94, 0),# East Asian ideograph + 0x213d75: (0x5fb7, 0),# East Asian ideograph + 0x275d71: (0x94a2, 0),# East Asian ideograph + 0x217d76: (0x5b4b, 0),# East Asian ideograph + 0x6f5023: (0xba3c, 0),# Korean hangul + 0x226822: (0x79b8, 0),# East Asian ideograph + 0x223d78: (0x68fd, 0),# East Asian ideograph + 0x226823: (0x79ba, 0),# East Asian ideograph + 0x213d79: (0x5fc5, 0),# East Asian ideograph + 0x4b7e6a: (0x5bc3, 0),# East Asian ideograph (variant of 217E6A which maps to 5BC3) + 0x223f3e: (0x696f, 0),# East Asian ideograph + 0x212a33: (0xe8e0, 0),# EACC component character + 0x223d7b: (0x68f3, 0),# East Asian ideograph + 0x6f5945: (0xccc7, 0),# Korean hangul + 0x6f5b31: (0xd154, 0),# Korean hangul + 0x213d7c: (0x5fcc, 0),# East Asian ideograph + 0x27493c: (0x6fd2, 0),# East Asian ideograph + 0x213261: (0x5109, 0),# East Asian ideograph + 0x233a5f: (0x8e92, 0),# East Asian ideograph + 0x29282a: (0x8539, 0),# East Asian ideograph + 0x29494d: (0x9609, 0),# East Asian ideograph + 0x6f5342: (0xc190, 0),# Korean hangul + 0x696d3f: (0x8ebe, 0),# East Asian ideograph + 0x213f2b: (0x6134, 0),# East Asian ideograph + 0x334729: (0x6e2b, 0),# East Asian ideograph + 0x6f4c7d: (0xb300, 0),# Korean hangul + 0x2f2a64: (0x87b5, 0),# East Asian ideograph + 0x22682e: (0x79d5, 0),# East Asian ideograph + 0x287431: (0x575b, 0),# East Asian ideograph (duplicate simplified) + 0x275e60: (0x960e, 0),# East Asian ideograph + 0x233a60: (0x8e93, 0),# East Asian ideograph + 0x22282f: (0x5ea4, 0),# East Asian ideograph + 0x227122: (0x7d70, 0),# East Asian ideograph + 0x217123: (0x5591, 0),# East Asian ideograph + 0x697124: (0x98aa, 0),# East Asian ideograph + 0x217125: (0x5577, 0),# East Asian ideograph + 0x217126: (0x55a8, 0),# East Asian ideograph + 0x217127: (0x55ad, 0),# East Asian ideograph + 0x227129: (0x7d67, 0),# East Asian ideograph + 0x21712a: (0x5605, 0),# East Asian ideograph + 0x22712b: (0x7d6a, 0),# East Asian ideograph + 0x22712c: (0x7d6b, 0),# East Asian ideograph + 0x216832: (0x50d4, 0),# East Asian ideograph + 0x21712f: (0x5586, 0),# East Asian ideograph + 0x227130: (0x7d73, 0),# East Asian ideograph + 0x227134: (0x7d4e, 0),# East Asian ideograph + 0x217136: (0x55b4, 0),# East Asian ideograph + 0x227137: (0x7d8b, 0),# East Asian ideograph + 0x227139: (0x7d88, 0),# East Asian ideograph + 0x22713b: (0x7d85, 0),# East Asian ideograph + 0x2d514a: (0x6dd6, 0),# East Asian ideograph + 0x22713d: (0x7d8e, 0),# East Asian ideograph + 0x216835: (0x50e6, 0),# East Asian ideograph + 0x6f5948: (0xcd08, 0),# Korean hangul + 0x227142: (0x7d7f, 0),# East Asian ideograph + 0x217143: (0x55e2, 0),# East Asian ideograph (variant of 2D7143 which maps to 55E2) + 0x227144: (0x7d86, 0),# East Asian ideograph + 0x217145: (0x558e, 0),# East Asian ideograph + 0x217147: (0x55b5, 0),# East Asian ideograph + 0x227148: (0x7d8d, 0),# East Asian ideograph + 0x217149: (0x558f, 0),# East Asian ideograph + 0x21714b: (0x5559, 0),# East Asian ideograph + 0x22714d: (0x7d83, 0),# East Asian ideograph + 0x22714f: (0x7d7d, 0),# East Asian ideograph + 0x217150: (0x55a4, 0),# East Asian ideograph + 0x217151: (0x5592, 0),# East Asian ideograph + 0x217152: (0x5599, 0),# East Asian ideograph + 0x227154: (0x7d7b, 0),# East Asian ideograph + 0x233a62: (0x8e90, 0),# East Asian ideograph + 0x217156: (0x55f4, 0),# East Asian ideograph + 0x227158: (0x7d7a, 0),# East Asian ideograph + 0x227159: (0x7d96, 0),# East Asian ideograph + 0x22715a: (0x7d5b, 0),# East Asian ideograph + 0x22715b: (0x7d8c, 0),# East Asian ideograph + 0x21715c: (0x55de, 0),# East Asian ideograph + 0x21715d: (0x55d9, 0),# East Asian ideograph + 0x21715e: (0x55c3, 0),# East Asian ideograph + 0x21715f: (0x55c9, 0),# East Asian ideograph + 0x217161: (0x55ca, 0),# East Asian ideograph + 0x227162: (0x7dae, 0),# East Asian ideograph + 0x21683b: (0x50ce, 0),# East Asian ideograph + 0x217164: (0x55d4, 0),# East Asian ideograph + 0x217165: (0x55c4, 0),# East Asian ideograph + 0x227167: (0x7dcb, 0),# East Asian ideograph + 0x227169: (0x7daa, 0),# East Asian ideograph + 0x22716a: (0x7dce, 0),# East Asian ideograph + 0x22716b: (0x7dc9, 0),# East Asian ideograph + 0x692565: (0x30e5, 0),# Katakana letter small YU + 0x22716e: (0x7dc5, 0),# East Asian ideograph + 0x22716f: (0x7da6, 0),# East Asian ideograph + 0x217170: (0x55d2, 0),# East Asian ideograph + 0x223664: (0x6585, 0),# East Asian ideograph + 0x277c36: (0x59ab, 0),# East Asian ideograph + 0x22543a: (0x71f5, 0),# East Asian ideograph + 0x227174: (0x7dc4, 0),# East Asian ideograph + 0x217175: (0x55e5, 0),# East Asian ideograph + 0x6f4871: (0xac1c, 0),# Korean hangul + 0x217177: (0x55d6, 0),# East Asian ideograph + 0x227178: (0x7dac, 0),# East Asian ideograph + 0x217179: (0x55f2, 0),# East Asian ideograph + 0x6f5c77: (0xd590, 0),# Korean hangul + 0x2e717c: (0x7d63, 0),# East Asian ideograph + 0x22717d: (0x7db9, 0),# East Asian ideograph + 0x21717e: (0x5627, 0),# East Asian ideograph + 0x292840: (0x84e0, 0),# East Asian ideograph + 0x235f5f: (0x9f37, 0),# East Asian ideograph + 0x216841: (0x50f3, 0),# East Asian ideograph + 0x216842: (0x50e8, 0),# East Asian ideograph + 0x217255: (0x5635, 0),# East Asian ideograph + 0x2d514d: (0x7d2c, 0),# East Asian ideograph + 0x216844: (0x50f0, 0),# East Asian ideograph + 0x6f594b: (0xcd10, 0),# Korean hangul + 0x224772: (0x6cf5, 0),# East Asian ideograph + 0x6f4e69: (0xb78d, 0),# Korean hangul + 0x23307d: (0x89af, 0),# East Asian ideograph + 0x295b35: (0x9e2b, 0),# East Asian ideograph + 0x4b7874: (0x590a, 0),# East Asian ideograph + 0x23284c: (0x8645, 0),# East Asian ideograph + 0x6f4a26: (0xadd1, 0),# Korean hangul + 0x22543d: (0x71f3, 0),# East Asian ideograph + 0x234e53: (0x97d8, 0),# East Asian ideograph + 0x69684d: (0x8422, 0),# East Asian ideograph + 0x333623: (0x9f69, 0),# East Asian ideograph + 0x225b61: (0x74b1, 0),# East Asian ideograph + 0x6f553b: (0xc58c, 0),# Korean hangul + 0x706d3f: (0x781c, 0),# East Asian ideograph + 0x4b587a: (0x8acb, 0),# East Asian ideograph + 0x6f7723: (0xe8ca, 0),# Korean hangul + 0x213f32: (0x615d, 0),# East Asian ideograph + 0x234730: (0x93e6, 0),# East Asian ideograph + 0x222851: (0x5ecc, 0),# East Asian ideograph + 0x6f594e: (0xcd1b, 0),# Korean hangul + 0x284e62: (0x6f4d, 0),# East Asian ideograph + 0x6f5732: (0xc7cc, 0),# Korean hangul + 0x6f5328: (0xc126, 0),# Korean hangul + 0x213f33: (0x6182, 0),# East Asian ideograph + 0x285f6f: (0x7605, 0),# East Asian ideograph + 0x6f4a3d: (0xae43, 0),# Korean hangul + 0x6f4e25: (0xb545, 0),# Korean hangul + 0x295f2b: (0x9f0d, 0),# East Asian ideograph + 0x212a35: (0xe8e2, 0),# EACC component character + 0x6f594f: (0xcd1d, 0),# Korean hangul + 0x6f5b33: (0xd15d, 0),# Korean hangul + 0x274621: (0x6b22, 0),# East Asian ideograph + 0x232859: (0x864d, 0),# East Asian ideograph + 0x224333: (0x6adf, 0),# East Asian ideograph + 0x234732: (0x940b, 0),# East Asian ideograph + 0x21797c: (0x5997, 0),# East Asian ideograph + 0x23285a: (0x8653, 0),# East Asian ideograph + 0x6f4e43: (0xb614, 0),# Korean hangul + 0x227222: (0x7d9f, 0),# East Asian ideograph + 0x217224: (0x55fb, 0),# East Asian ideograph + 0x217225: (0x5612, 0),# East Asian ideograph + 0x217227: (0x55f8, 0),# East Asian ideograph + 0x217228: (0x560f, 0),# East Asian ideograph + 0x227229: (0x7de1, 0),# East Asian ideograph + 0x22722a: (0x7dd9, 0),# East Asian ideograph + 0x22722b: (0x7de4, 0),# East Asian ideograph + 0x6f4f44: (0xb8e9, 0),# Korean hangul + 0x21722e: (0x561e, 0),# East Asian ideograph + 0x217539: (0x5790, 0),# East Asian ideograph + 0x227231: (0x7dd7, 0),# East Asian ideograph + 0x295263: (0x9a75, 0),# East Asian ideograph + 0x217234: (0x561c, 0),# East Asian ideograph + 0x217235: (0x5610, 0),# East Asian ideograph + 0x217236: (0x5601, 0),# East Asian ideograph + 0x217238: (0x5613, 0),# East Asian ideograph + 0x217239: (0x55f6, 0),# East Asian ideograph + 0x22723a: (0x7e06, 0),# East Asian ideograph + 0x21685f: (0x5105, 0),# East Asian ideograph + 0x21723c: (0x5602, 0),# East Asian ideograph + 0x22723e: (0x7de6, 0),# East Asian ideograph + 0x697240: (0x9bb4, 0),# East Asian ideograph + 0x217242: (0x561d, 0),# East Asian ideograph + 0x27577c: (0x88c6, 0),# East Asian ideograph + 0x217244: (0x55ff, 0),# East Asian ideograph + 0x697245: (0x9bcf, 0),# East Asian ideograph + 0x227246: (0x7ddc, 0),# East Asian ideograph + 0x216861: (0x50fc, 0),# East Asian ideograph + 0x217248: (0x564c, 0),# East Asian ideograph + 0x227249: (0x7de5, 0),# East Asian ideograph + 0x22724b: (0x7df5, 0),# East Asian ideograph + 0x6f4e6a: (0xb78f, 0),# Korean hangul + 0x295021: (0x98a2, 0),# East Asian ideograph + 0x2e7328: (0x5fad, 0),# East Asian ideograph + 0x227250: (0x7e17, 0),# East Asian ideograph + 0x227251: (0x7e1e, 0),# East Asian ideograph + 0x227252: (0x7e21, 0),# East Asian ideograph + 0x227253: (0x7e0b, 0),# East Asian ideograph + 0x224335: (0x6ade, 0),# East Asian ideograph + 0x227256: (0x7e22, 0),# East Asian ideograph + 0x217257: (0x5649, 0),# East Asian ideograph + 0x217258: (0x5641, 0),# East Asian ideograph + 0x2d5124: (0x5e0b, 0),# East Asian ideograph + 0x22725b: (0x7e20, 0),# East Asian ideograph + 0x21725c: (0x5658, 0),# East Asian ideograph + 0x22725d: (0x7e1d, 0),# East Asian ideograph + 0x21725e: (0x5654, 0),# East Asian ideograph + 0x216865: (0x5106, 0),# East Asian ideograph + 0x217260: (0x562a, 0),# East Asian ideograph + 0x217261: (0x563d, 0),# East Asian ideograph + 0x217264: (0x562c, 0),# East Asian ideograph + 0x227265: (0x7e15, 0),# East Asian ideograph + 0x6f5474: (0xc52c, 0),# Korean hangul + 0x217267: (0x5638, 0),# East Asian ideograph + 0x4d5154: (0x9942, 0),# East Asian ideograph + 0x217269: (0x564d, 0),# East Asian ideograph + 0x22726a: (0x7e0f, 0),# East Asian ideograph + 0x21726b: (0x562b, 0),# East Asian ideograph + 0x21726c: (0x564f, 0),# East Asian ideograph + 0x22726d: (0x7e3b, 0),# East Asian ideograph + 0x21726e: (0x5670, 0),# East Asian ideograph + 0x21726f: (0x565f, 0),# East Asian ideograph + 0x217270: (0x567c, 0),# East Asian ideograph + 0x227271: (0x7e34, 0),# East Asian ideograph + 0x227272: (0x7e2d, 0),# East Asian ideograph + 0x227273: (0x7e2f, 0),# East Asian ideograph + 0x227275: (0x7e36, 0),# East Asian ideograph + 0x227277: (0x7e3a, 0),# East Asian ideograph + 0x217278: (0x5676, 0),# East Asian ideograph + 0x227279: (0x7e39, 0),# East Asian ideograph + 0x21727a: (0x5666, 0),# East Asian ideograph + 0x21727b: (0x5673, 0),# East Asian ideograph + 0x21727c: (0x566d, 0),# East Asian ideograph + 0x22727d: (0x7e44, 0),# East Asian ideograph + 0x21727e: (0x5672, 0),# East Asian ideograph + 0x33537d: (0x9ad5, 0),# East Asian ideograph + 0x4b3e7e: (0x60a9, 0),# East Asian ideograph + 0x6f5953: (0xcd94, 0),# Korean hangul + 0x6f7729: (0xae0e, 0),# Korean hangul + 0x224b30: (0x6e36, 0),# East Asian ideograph + 0x2d6262: (0x9ec4, 0),# East Asian ideograph + 0x2d4049: (0x67b4, 0),# East Asian ideograph + 0x4b5c54: (0x8f9f, 0),# East Asian ideograph (duplicate simplified) + 0x2e686f: (0x7a19, 0),# East Asian ideograph + 0x6f4873: (0xac20, 0),# Korean hangul + 0x33362a: (0x9b28, 0),# East Asian ideograph + 0x216871: (0x5115, 0),# East Asian ideograph + 0x6f5954: (0xcd95, 0),# Korean hangul + 0x6f5b34: (0xd15f, 0),# Korean hangul + 0x234b7a: (0x96f5, 0),# East Asian ideograph + 0x6f4f45: (0xb8ec, 0),# Korean hangul + 0x6f5031: (0xba67, 0),# Korean hangul + 0x6f5955: (0xcd98, 0),# Korean hangul + 0x215321: (0x8085, 0),# East Asian ideograph + 0x6f772b: (0xae11, 0),# Korean hangul + 0x213f3a: (0x615f, 0),# East Asian ideograph + 0x6f5322: (0xc11d, 0),# Korean hangul + 0x225323: (0x7192, 0),# East Asian ideograph + 0x2d5e21: (0x9418, 0),# East Asian ideograph + 0x29415c: (0x917e, 0),# East Asian ideograph + 0x215324: (0x808b, 0),# East Asian ideograph + 0x6f5325: (0xc123, 0),# Korean hangul + 0x224539: (0x6bab, 0),# East Asian ideograph + 0x6f5956: (0xcd9c, 0),# Korean hangul + 0x695326: (0x54d8, 0),# East Asian ideograph + 0x22477d: (0x6cc2, 0),# East Asian ideograph + 0x23287c: (0x866f, 0),# East Asian ideograph + 0x6f5327: (0xc125, 0),# Korean hangul + 0x275e35: (0x9558, 0),# East Asian ideograph + 0x2d404c: (0x6283, 0),# East Asian ideograph + 0x6f4b6b: (0xb0e0, 0),# Korean hangul + 0x275735: (0x8681, 0),# East Asian ideograph + 0x6f4a28: (0xaddc, 0),# Korean hangul + 0x235329: (0x99f8, 0),# East Asian ideograph + 0x225447: (0x71e0, 0),# East Asian ideograph + 0x23532a: (0x99f4, 0),# East Asian ideograph + 0x6f5957: (0xcda4, 0),# Korean hangul + 0x21532b: (0x8096, 0),# East Asian ideograph + 0x276842: (0x507e, 0),# East Asian ideograph + 0x274629: (0x5c81, 0),# East Asian ideograph + 0x213f3c: (0x617e, 0),# East Asian ideograph + 0x21532c: (0x80b2, 0),# East Asian ideograph + 0x6f5235: (0xbed8, 0),# Korean hangul + 0x6f532d: (0xc12f, 0),# Korean hangul + 0x213273: (0x5147, 0),# East Asian ideograph + 0x6f532e: (0xc130, 0),# Korean hangul + 0x275d75: (0x9525, 0),# East Asian ideograph + 0x216f43: (0x546b, 0),# East Asian ideograph + 0x6f5958: (0xcda5, 0),# Korean hangul + 0x215330: (0x80a2, 0),# East Asian ideograph + 0x27462a: (0x5386, 0),# East Asian ideograph + 0x217325: (0x5693, 0),# East Asian ideograph + 0x227326: (0x7e3f, 0),# East Asian ideograph + 0x215331: (0x80ab, 0),# East Asian ideograph + 0x227328: (0x7e47, 0),# East Asian ideograph + 0x225332: (0x7185, 0),# East Asian ideograph + 0x22732f: (0x7e51, 0),# East Asian ideograph + 0x217332: (0x56ba, 0),# East Asian ideograph + 0x215333: (0x80af, 0),# East Asian ideograph + 0x227334: (0x7e67, 0),# East Asian ideograph + 0x217335: (0x5684, 0),# East Asian ideograph + 0x217336: (0x5691, 0),# East Asian ideograph + 0x227337: (0x7e56, 0),# East Asian ideograph + 0x6f5334: (0xc140, 0),# Korean hangul + 0x21733e: (0x569e, 0),# East Asian ideograph + 0x6f5335: (0xc148, 0),# Korean hangul + 0x27462b: (0x5f52, 0),# East Asian ideograph + 0x217342: (0x569a, 0),# East Asian ideograph + 0x213f3e: (0x61b2, 0),# East Asian ideograph + 0x225336: (0x717c, 0),# East Asian ideograph + 0x227348: (0x7e68, 0),# East Asian ideograph + 0x227349: (0x7e6e, 0),# East Asian ideograph + 0x21734b: (0x56ad, 0),# East Asian ideograph + 0x21734c: (0x56a6, 0),# East Asian ideograph + 0x22734e: (0x7e70, 0),# East Asian ideograph + 0x6f4e66: (0xb780, 0),# Korean hangul + 0x227351: (0x7e6f, 0),# East Asian ideograph + 0x227352: (0x7e73, 0),# East Asian ideograph + 0x217353: (0x56b2, 0),# East Asian ideograph + 0x235849: (0x9c0a, 0),# East Asian ideograph + 0x225339: (0x7198, 0),# East Asian ideograph + 0x227358: (0x7e7b, 0),# East Asian ideograph + 0x227359: (0x7e7e, 0),# East Asian ideograph + 0x21735a: (0x56b3, 0),# East Asian ideograph + 0x22735b: (0x7e81, 0),# East Asian ideograph + 0x6f595a: (0xcda9, 0),# Korean hangul + 0x22735d: (0x7e8a, 0),# East Asian ideograph + 0x22735e: (0x7e87, 0),# East Asian ideograph + 0x6f7730: (0xaf50, 0),# Korean hangul + 0x227360: (0x7e88, 0),# East Asian ideograph + 0x217362: (0x56cf, 0),# East Asian ideograph + 0x4b533b: (0x695c, 0),# East Asian ideograph + 0x227364: (0x7e86, 0),# East Asian ideograph + 0x23473d: (0x93fb, 0),# East Asian ideograph + 0x217367: (0x56cd, 0),# East Asian ideograph + 0x22533c: (0x7197, 0),# East Asian ideograph + 0x22736a: (0x7e91, 0),# East Asian ideograph + 0x21736b: (0x56d7, 0),# East Asian ideograph + 0x22736d: (0x7e94, 0),# East Asian ideograph + 0x70736e: (0x7ba2, 0),# East Asian ideograph + 0x23533d: (0x9a0f, 0),# East Asian ideograph + 0x227370: (0x7e9b, 0),# East Asian ideograph + 0x227371: (0x7e9a, 0),# East Asian ideograph + 0x22544b: (0x720c, 0),# East Asian ideograph + 0x227373: (0x7e99, 0),# East Asian ideograph + 0x227374: (0x7e98, 0),# East Asian ideograph + 0x22533e: (0x71b5, 0),# East Asian ideograph + 0x217376: (0x56ee, 0),# East Asian ideograph + 0x217377: (0x56e7, 0),# East Asian ideograph + 0x217379: (0x56fb, 0),# East Asian ideograph + 0x22533f: (0x71a9, 0),# East Asian ideograph + 0x21737e: (0x56f7, 0),# East Asian ideograph + 0x222569: (0x5d97, 0),# East Asian ideograph + 0x295340: (0x9a92, 0),# East Asian ideograph + 0x4b3853: (0x586d, 0),# East Asian ideograph (not in Unicode) + 0x4b5629: (0x85cd, 0),# East Asian ideograph + 0x6f5341: (0xc18e, 0),# Korean hangul + 0x6f4a29: (0xade0, 0),# Korean hangul + 0x225342: (0x71a5, 0),# East Asian ideograph + 0x334260: (0x89d4, 0),# East Asian ideograph + 0x275e50: (0x95ed, 0),# East Asian ideograph + 0x23584b: (0x9c08, 0),# East Asian ideograph + 0x2e3936: (0x66cd, 0),# East Asian ideograph + 0x6f595c: (0xcdc4, 0),# Korean hangul + 0x235344: (0x9a04, 0),# East Asian ideograph + 0x6f7732: (0xb060, 0),# Korean hangul + 0x235345: (0x9a11, 0),# East Asian ideograph + 0x275b7e: (0x8fde, 0),# East Asian ideograph + 0x2d5e28: (0x93c1, 0),# East Asian ideograph + 0x213a6a: (0x5b8b, 0),# East Asian ideograph + 0x235347: (0x9a05, 0),# East Asian ideograph + 0x4b4874: (0x6ff3, 0),# East Asian ideograph + 0x23584c: (0x9c14, 0),# East Asian ideograph + 0x215348: (0x80fd, 0),# East Asian ideograph + 0x6f5349: (0xc1a8, 0),# Korean hangul + 0x705d5c: (0x8488, 0),# East Asian ideograph + 0x6f7733: (0xb9c4, 0),# Korean hangul + 0x224b32: (0x6e72, 0),# East Asian ideograph + 0x6f5128: (0xbc88, 0),# Korean hangul + 0x22655a: (0x78d8, 0),# East Asian ideograph + 0x27534a: (0x8090, 0),# East Asian ideograph + 0x226d4b: (0x7c0c, 0),# East Asian ideograph + 0x334740: (0x6d1a, 0),# East Asian ideograph + 0x4b562b: (0x8535, 0),# East Asian ideograph + 0x2d534b: (0x80f7, 0),# East Asian ideograph + 0x27573c: (0x86ce, 0),# East Asian ideograph + 0x21534c: (0x810a, 0),# East Asian ideograph + 0x23584d: (0x9c04, 0),# East Asian ideograph + 0x23534d: (0x9a22, 0),# East Asian ideograph + 0x6f595e: (0xcde8, 0),# Korean hangul + 0x22534e: (0x71af, 0),# East Asian ideograph + 0x6f5b36: (0xd161, 0),# Korean hangul + 0x6f7734: (0xc54d, 0),# Korean hangul + 0x23534f: (0x9a20, 0),# East Asian ideograph + 0x6f5350: (0xc1e4, 0),# Korean hangul + 0x21327a: (0x5152, 0),# East Asian ideograph + 0x2d6134: (0x99de, 0),# East Asian ideograph + 0x233a78: (0x8eb3, 0),# East Asian ideograph + 0x4c6f7b: (0x7ce8, 0),# East Asian ideograph + 0x235352: (0x9a27, 0),# East Asian ideograph + 0x6f5343: (0xc194, 0),# Korean hangul + 0x6f5353: (0xc1f1, 0),# Korean hangul + 0x6f7735: (0xc54f, 0),# Korean hangul + 0x213f44: (0x619a, 0),# East Asian ideograph + 0x6f5354: (0xc1f3, 0),# Korean hangul + 0x4c7c45: (0x82ae, 0),# East Asian ideograph + 0x225355: (0x719a, 0),# East Asian ideograph + 0x4d4832: (0x953f, 0),# East Asian ideograph + 0x27573e: (0x8721, 0),# East Asian ideograph + 0x22367a: (0x65a0, 0),# East Asian ideograph + 0x223237: (0x63b1, 0),# East Asian ideograph + 0x6f5629: (0xc65c, 0),# Korean hangul + 0x225357: (0x71b3, 0),# East Asian ideograph + 0x27407b: (0x5377, 0),# East Asian ideograph + 0x275358: (0x80be, 0),# East Asian ideograph + 0x213f45: (0x61a9, 0),# East Asian ideograph + 0x215359: (0x8139, 0),# East Asian ideograph + 0x2d416e: (0x6534, 0),# East Asian ideograph + 0x23535a: (0x9a38, 0),# East Asian ideograph + 0x217421: (0x56f9, 0),# East Asian ideograph + 0x6f4a2a: (0xade4, 0),# Korean hangul + 0x294435: (0x950a, 0),# East Asian ideograph + 0x217424: (0x56ff, 0),# East Asian ideograph + 0x227425: (0x7f43, 0),# East Asian ideograph + 0x275e51: (0x95f5, 0),# East Asian ideograph + 0x217427: (0x5705, 0),# East Asian ideograph + 0x227428: (0x7f45, 0),# East Asian ideograph + 0x217429: (0x5702, 0),# East Asian ideograph + 0x22742b: (0x7f4b, 0),# East Asian ideograph + 0x21742c: (0x570a, 0),# East Asian ideograph + 0x21742d: (0x5709, 0),# East Asian ideograph + 0x22742e: (0x7f4c, 0),# East Asian ideograph + 0x22742f: (0x7f4d, 0),# East Asian ideograph + 0x217430: (0x570c, 0),# East Asian ideograph + 0x217431: (0x5715, 0),# East Asian ideograph + 0x227432: (0x7f4f, 0),# East Asian ideograph + 0x213f46: (0x6194, 0),# East Asian ideograph + 0x27535e: (0x80a0, 0),# East Asian ideograph + 0x224345: (0x6ae8, 0),# East Asian ideograph + 0x217437: (0x571c, 0),# East Asian ideograph + 0x4b423a: (0x64b9, 0),# East Asian ideograph + 0x217439: (0x571d, 0),# East Asian ideograph + 0x21743a: (0x571e, 0),# East Asian ideograph + 0x6f535f: (0xc220, 0),# Korean hangul + 0x22743e: (0x7f60, 0),# East Asian ideograph + 0x22743f: (0x7f61, 0),# East Asian ideograph + 0x235360: (0x9a2d, 0),# East Asian ideograph + 0x217442: (0x572e, 0),# East Asian ideograph + 0x227443: (0x7f5d, 0),# East Asian ideograph + 0x227445: (0x7f5b, 0),# East Asian ideograph + 0x235361: (0x9a35, 0),# East Asian ideograph + 0x217448: (0x5738, 0),# East Asian ideograph + 0x21744c: (0x572a, 0),# East Asian ideograph + 0x215362: (0x816b, 0),# East Asian ideograph + 0x6f4b43: (0xb05d, 0),# Korean hangul + 0x227450: (0x7f65, 0),# East Asian ideograph + 0x227451: (0x7f66, 0),# East Asian ideograph + 0x213f47: (0x618a, 0),# East Asian ideograph + 0x227453: (0x7f6d, 0),# East Asian ideograph + 0x227454: (0x7f6b, 0),# East Asian ideograph + 0x227455: (0x7f67, 0),# East Asian ideograph + 0x227457: (0x7f68, 0),# East Asian ideograph + 0x235364: (0x9a32, 0),# East Asian ideograph + 0x21327e: (0x5165, 0),# East Asian ideograph + 0x22745e: (0x7f71, 0),# East Asian ideograph + 0x275365: (0x8111, 0),# East Asian ideograph + 0x227460: (0x7f73, 0),# East Asian ideograph + 0x227463: (0x7f76, 0),# East Asian ideograph + 0x6f5022: (0xba39, 0),# Korean hangul + 0x217465: (0x5745, 0),# East Asian ideograph + 0x6f572f: (0xc7c1, 0),# Korean hangul + 0x217468: (0x574b, 0),# East Asian ideograph + 0x217469: (0x574c, 0),# East Asian ideograph + 0x21746a: (0x573f, 0),# East Asian ideograph + 0x215367: (0x818f, 0),# East Asian ideograph + 0x22746c: (0x7f7d, 0),# East Asian ideograph + 0x6f7739: (0xc61c, 0),# Korean hangul + 0x217470: (0x5768, 0),# East Asian ideograph + 0x6f5368: (0xc250, 0),# Korean hangul + 0x227472: (0x7f86, 0),# East Asian ideograph + 0x6f4f25: (0xb807, 0),# Korean hangul + 0x217475: (0x578a, 0),# East Asian ideograph + 0x225369: (0x71c7, 0),# East Asian ideograph + 0x345175: (0x7162, 0),# East Asian ideograph + 0x217479: (0x5774, 0),# East Asian ideograph + 0x21747a: (0x5767, 0),# East Asian ideograph + 0x22536a: (0x71b7, 0),# East Asian ideograph + 0x22747e: (0x7f96, 0),# East Asian ideograph + 0x6f536b: (0xc270, 0),# Korean hangul + 0x27536c: (0x80f6, 0),# East Asian ideograph + 0x274636: (0x6b93, 0),# East Asian ideograph + 0x6f5521: (0xc549, 0),# Korean hangul + 0x21536d: (0x819b, 0),# East Asian ideograph + 0x224348: (0x6af5, 0),# East Asian ideograph + 0x4b5632: (0x7c54, 0),# East Asian ideograph + 0x27536e: (0x80a4, 0),# East Asian ideograph + 0x454f45: (0x9896, 0),# East Asian ideograph + 0x22536f: (0x71cf, 0),# East Asian ideograph + 0x4c5541: (0x4e2c, 0),# East Asian ideograph + 0x225370: (0x71d6, 0),# East Asian ideograph + 0x213031: (0x4e1e, 0),# East Asian ideograph + 0x215371: (0x81a9, 0),# East Asian ideograph + 0x274637: (0x6ba1, 0),# East Asian ideograph + 0x6f5522: (0xc54a, 0),# Korean hangul + 0x213f4a: (0x61c9, 0),# East Asian ideograph + 0x217463: (0x5749, 0),# East Asian ideograph + 0x6f5373: (0xc290, 0),# Korean hangul + 0x335172: (0x7d89, 0),# East Asian ideograph + 0x212a29: (0xe8d7, 0),# EACC component character + 0x6f4a2b: (0xadec, 0),# Korean hangul + 0x235374: (0x9a3b, 0),# East Asian ideograph + 0x4b496a: (0x932c, 0),# East Asian ideograph + 0x225375: (0x71c2, 0),# East Asian ideograph + 0x6f5376: (0xc29d, 0),# Korean hangul + 0x233e21: (0x9070, 0),# East Asian ideograph + 0x213f4b: (0x6190, 0),# East Asian ideograph + 0x225377: (0x71c5, 0),# East Asian ideograph + 0x4b385e: (0x5897, 0),# East Asian ideograph + 0x234749: (0x93fa, 0),# East Asian ideograph + 0x2d6275: (0x76b7, 0),# East Asian ideograph + 0x215378: (0x81bf, 0),# East Asian ideograph + 0x216431: (0x4e36, 0),# East Asian ideograph + 0x215379: (0x81bd, 0),# East Asian ideograph + 0x223e24: (0x6919, 0),# East Asian ideograph + 0x4b496b: (0x83f8, 0),# East Asian ideograph + 0x21537a: (0x81c9, 0),# East Asian ideograph + 0x213e25: (0x5ffd, 0),# East Asian ideograph + 0x21537b: (0x81be, 0),# East Asian ideograph + 0x39304c: (0x4e81, 0),# East Asian ideograph + 0x213e26: (0x5fdd, 0),# East Asian ideograph + 0x23603f: (0x9f6e, 0),# East Asian ideograph + 0x27537c: (0x8110, 0),# East Asian ideograph + 0x33474a: (0x6d1f, 0),# East Asian ideograph + 0x21537d: (0x81cf, 0),# East Asian ideograph + 0x213e28: (0x5fff, 0),# East Asian ideograph + 0x275746: (0x672e, 0),# East Asian ideograph + 0x21537e: (0x81d8, 0),# East Asian ideograph + 0x6f4e26: (0xb54b, 0),# Korean hangul + 0x227042: (0x7d06, 0),# East Asian ideograph + 0x294471: (0x951d, 0),# East Asian ideograph + 0x233e2a: (0x907b, 0),# East Asian ideograph + 0x6f5968: (0xce61, 0),# Korean hangul + 0x6f5b38: (0xd1a0, 0),# Korean hangul + 0x213e2b: (0x602a, 0),# East Asian ideograph + 0x213e2c: (0x602f, 0),# East Asian ideograph + 0x6f585b: (0xcacc, 0),# Korean hangul + 0x213e2d: (0x6016, 0),# East Asian ideograph + 0x213e2f: (0x600f, 0),# East Asian ideograph + 0x6f5969: (0xce68, 0),# Korean hangul + 0x227523: (0x7f97, 0),# East Asian ideograph + 0x227524: (0x7f95, 0),# East Asian ideograph + 0x51456d: (0x822e, 0),# East Asian ideograph + 0x217526: (0x5770, 0),# East Asian ideograph + 0x217528: (0x5771, 0),# East Asian ideograph + 0x21752a: (0x576e, 0),# East Asian ideograph + 0x22752c: (0x7fa2, 0),# East Asian ideograph + 0x21752d: (0x5776, 0),# East Asian ideograph + 0x21752e: (0x5789, 0),# East Asian ideograph + 0x217530: (0x577f, 0),# East Asian ideograph + 0x217531: (0x5775, 0),# East Asian ideograph + 0x217532: (0x577b, 0),# East Asian ideograph + 0x227533: (0x7fa7, 0),# East Asian ideograph + 0x217535: (0x5773, 0),# East Asian ideograph + 0x223241: (0x636d, 0),# East Asian ideograph + 0x217538: (0x579f, 0),# East Asian ideograph + 0x233e34: (0x9083, 0),# East Asian ideograph + 0x21753a: (0x5793, 0),# East Asian ideograph + 0x22753b: (0x7fb0, 0),# East Asian ideograph + 0x22753c: (0x7fad, 0),# East Asian ideograph + 0x6f596a: (0xce69, 0),# Korean hangul + 0x22753f: (0x7fb1, 0),# East Asian ideograph + 0x227540: (0x7fb4, 0),# East Asian ideograph + 0x6f5527: (0xc555, 0),# Korean hangul + 0x227542: (0x7fb5, 0),# East Asian ideograph + 0x217543: (0x579a, 0),# East Asian ideograph + 0x217545: (0x5794, 0),# East Asian ideograph + 0x217547: (0x57a4, 0),# East Asian ideograph + 0x217548: (0x5799, 0),# East Asian ideograph + 0x217549: (0x578c, 0),# East Asian ideograph + 0x22754a: (0x7fbc, 0),# East Asian ideograph + 0x21754b: (0x5797, 0),# East Asian ideograph + 0x22754c: (0x7fbe, 0),# East Asian ideograph + 0x275749: (0x536b, 0),# East Asian ideograph + 0x227551: (0x7fc3, 0),# East Asian ideograph + 0x217552: (0x579c, 0),# East Asian ideograph + 0x217554: (0x57a7, 0),# East Asian ideograph + 0x227557: (0x7fca, 0),# East Asian ideograph + 0x217559: (0x3013, 0),# East Asian ideograph (not found in unified han) + 0x21755b: (0x5795, 0),# East Asian ideograph + 0x213e3a: (0x6068, 0),# East Asian ideograph + 0x21755f: (0x57b8, 0),# East Asian ideograph + 0x217560: (0x57c7, 0),# East Asian ideograph + 0x227567: (0x7fdb, 0),# East Asian ideograph + 0x227568: (0x7fe3, 0),# East Asian ideograph + 0x2d3e3c: (0x803b, 0),# East Asian ideograph + 0x21756a: (0x5809, 0),# East Asian ideograph + 0x22756c: (0x7fe6, 0),# East Asian ideograph + 0x22756f: (0x7fe5, 0),# East Asian ideograph + 0x22545c: (0x5911, 0),# East Asian ideograph + 0x217571: (0x57db, 0),# East Asian ideograph + 0x227572: (0x7fec, 0),# East Asian ideograph + 0x227573: (0x7feb, 0),# East Asian ideograph + 0x273b60: (0x5c61, 0),# East Asian ideograph + 0x213e3e: (0x606d, 0),# East Asian ideograph + 0x227577: (0x7fef, 0),# East Asian ideograph + 0x6f596c: (0xce6d, 0),# Korean hangul + 0x22757a: (0x7fee, 0),# East Asian ideograph + 0x233e3f: (0x9099, 0),# East Asian ideograph + 0x28632c: (0x7751, 0),# East Asian ideograph + 0x293066: (0x89c7, 0),# East Asian ideograph + 0x21757e: (0x57c6, 0),# East Asian ideograph + 0x233e40: (0x9097, 0),# East Asian ideograph + 0x4b563a: (0x82a6, 0),# East Asian ideograph (variant of 27563A which maps to 82A6) + 0x4b3421: (0x5263, 0),# East Asian ideograph + 0x275936: (0x8c23, 0),# East Asian ideograph + 0x213e41: (0x604d, 0),# East Asian ideograph + 0x6f4860: (0xac01, 0),# Korean hangul + 0x4c695f: (0x7a63, 0),# East Asian ideograph + 0x213e42: (0x606b, 0),# East Asian ideograph + 0x395f49: (0x5f6b, 0),# East Asian ideograph + 0x23585c: (0x9c09, 0),# East Asian ideograph + 0x233643: (0x8c9f, 0),# East Asian ideograph + 0x213e43: (0x6069, 0),# East Asian ideograph + 0x6f5b39: (0xd1a1, 0),# Korean hangul + 0x223e44: (0x6911, 0),# East Asian ideograph + 0x6f552a: (0xc559, 0),# Korean hangul + 0x4b5a7e: (0x5c69, 0),# East Asian ideograph + 0x213e46: (0x606a, 0),# East Asian ideograph + 0x6f4861: (0xac02, 0),# Korean hangul + 0x223e47: (0x68ef, 0),# East Asian ideograph + 0x22545e: (0x720a, 0),# East Asian ideograph + 0x6f4f4a: (0xb8fd, 0),# Korean hangul + 0x213e48: (0x6070, 0),# East Asian ideograph + 0x213e49: (0x6055, 0),# East Asian ideograph + 0x274640: (0x6bb4, 0),# East Asian ideograph + 0x234751: (0x9427, 0),# East Asian ideograph + 0x33433e: (0x95c7, 0),# East Asian ideograph + 0x213e4b: (0x60a6, 0),# East Asian ideograph + 0x4d4835: (0x954c, 0),# East Asian ideograph + 0x2d3c21: (0x57fc, 0),# East Asian ideograph + 0x275f2e: (0x9633, 0),# East Asian ideograph + 0x393e4c: (0x6142, 0),# East Asian ideograph + 0x4b4973: (0x7115, 0),# East Asian ideograph + 0x213e4d: (0x609f, 0),# East Asian ideograph + 0x27407e: (0x626a, 0),# East Asian ideograph + 0x6f596f: (0xce74, 0),# Korean hangul + 0x6f552c: (0xc55f, 0),# Korean hangul + 0x697058: (0x9779, 0),# East Asian ideograph + 0x275e36: (0x9559, 0),# East Asian ideograph + 0x2d627e: (0x658b, 0),# East Asian ideograph + 0x213b48: (0x5c1a, 0),# East Asian ideograph + 0x2d5e3b: (0x92b9, 0),# East Asian ideograph + 0x6f4863: (0xac07, 0),# Korean hangul + 0x6f4a2d: (0xadf9, 0),# Korean hangul + 0x393078: (0x9ae3, 0),# East Asian ideograph + 0x227e51: (0x8423, 0),# East Asian ideograph + 0x225460: (0x7217, 0),# East Asian ideograph + 0x223247: (0x63d3, 0),# East Asian ideograph + 0x213e52: (0x60a3, 0),# East Asian ideograph + 0x6f5970: (0xce75, 0),# Korean hangul + 0x6f5542: (0xc598, 0),# Korean hangul + 0x223e53: (0x6974, 0),# East Asian ideograph + 0x6f552d: (0xc560, 0),# Korean hangul + 0x213e54: (0x6094, 0),# East Asian ideograph + 0x2d4066: (0x63ce, 0),# East Asian ideograph + 0x216433: (0x4e3f, 0),# East Asian ideograph + 0x6f4864: (0xac08, 0),# Korean hangul + 0x4b4975: (0x6427, 0),# East Asian ideograph + 0x275d7a: (0x9532, 0),# East Asian ideograph + 0x213e57: (0x60b4, 0),# East Asian ideograph + 0x395d23: (0x91bb, 0),# East Asian ideograph + 0x4b517e: (0x7e92, 0),# East Asian ideograph + 0x6f5971: (0xce78, 0),# Korean hangul + 0x223e58: (0x6962, 0),# East Asian ideograph + 0x224b36: (0x6e39, 0),# East Asian ideograph + 0x6f5468: (0xc4d4, 0),# Korean hangul + 0x213e59: (0x60cb, 0),# East Asian ideograph + 0x4b563f: (0x6a98, 0),# East Asian ideograph + 0x2d4067: (0x62cf, 0),# East Asian ideograph + 0x6f4865: (0xac09, 0),# Korean hangul + 0x6f7621: (0x3181, 0),# Korean hangul + 0x217622: (0x57c4, 0),# East Asian ideograph + 0x233e5b: (0x90b6, 0),# East Asian ideograph + 0x6f7624: (0xe8b0, 0),# Korean hangul + 0x6f7625: (0xe8b1, 0),# Korean hangul + 0x4b4556: (0x6a2a, 0),# East Asian ideograph + 0x217627: (0x70fe, 0),# East Asian ideograph + 0x227629: (0x7ffd, 0),# East Asian ideograph + 0x22762a: (0x7ffe, 0),# East Asian ideograph + 0x21762b: (0x5803, 0),# East Asian ideograph + 0x22762c: (0x7fff, 0),# East Asian ideograph + 0x21762d: (0x57e6, 0),# East Asian ideograph + 0x22762e: (0x8004, 0),# East Asian ideograph + 0x233e5d: (0x90b0, 0),# East Asian ideograph + 0x29332c: (0x8bfc, 0),# East Asian ideograph + 0x217631: (0x57ed, 0),# East Asian ideograph + 0x227633: (0x800b, 0),# East Asian ideograph + 0x227634: (0x800e, 0),# East Asian ideograph + 0x227635: (0x8011, 0),# East Asian ideograph + 0x234755: (0x9409, 0),# East Asian ideograph + 0x227637: (0x8014, 0),# East Asian ideograph + 0x277638: (0x57ad, 0),# East Asian ideograph + 0x227639: (0x8016, 0),# East Asian ideograph + 0x223e5f: (0x6957, 0),# East Asian ideograph + 0x21763d: (0x57f4, 0),# East Asian ideograph + 0x22763e: (0x801d, 0),# East Asian ideograph + 0x294179: (0x9492, 0),# East Asian ideograph + 0x217640: (0x580d, 0),# East Asian ideograph + 0x223e60: (0x693f, 0),# East Asian ideograph + 0x6f7642: (0xe8b4, 0),# Korean hangul + 0x217643: (0x57ef, 0),# East Asian ideograph + 0x6f7644: (0xe8b6, 0),# Korean hangul + 0x6f7645: (0xe8b7, 0),# Korean hangul + 0x6f4f4b: (0xb904, 0),# Korean hangul + 0x273e61: (0x6076, 0),# East Asian ideograph + 0x217648: (0x5801, 0),# East Asian ideograph + 0x217649: (0x5812, 0),# East Asian ideograph + 0x6f764a: (0xe8bc, 0),# Korean hangul + 0x22764b: (0x8025, 0),# East Asian ideograph + 0x22764c: (0x8026, 0),# East Asian ideograph + 0x22764d: (0x802a, 0),# East Asian ideograph + 0x22764e: (0x8029, 0),# East Asian ideograph + 0x22764f: (0x8028, 0),# East Asian ideograph + 0x217650: (0x580c, 0),# East Asian ideograph + 0x217651: (0x5813, 0),# East Asian ideograph + 0x217652: (0x57f0, 0),# East Asian ideograph + 0x6f7653: (0xe8c5, 0),# Korean hangul + 0x6f7654: (0xe8c6, 0),# Korean hangul + 0x287655: (0x8027, 0),# East Asian ideograph + 0x217656: (0x580b, 0),# East Asian ideograph + 0x6f7657: (0xe8c9, 0),# Korean hangul + 0x217658: (0x57f3, 0),# East Asian ideograph + 0x217659: (0x5804, 0),# East Asian ideograph + 0x21765a: (0x57cf, 0),# East Asian ideograph + 0x22765b: (0x8030, 0),# East Asian ideograph + 0x22765d: (0x8031, 0),# East Asian ideograph + 0x21765f: (0x5847, 0),# East Asian ideograph + 0x227660: (0x8035, 0),# East Asian ideograph + 0x225021: (0x9e02, 0),# East Asian ideograph + 0x4d2f5d: (0x8941, 0),# East Asian ideograph (variant of 232F5D which maps to 8941) + 0x217667: (0x581b, 0),# East Asian ideograph + 0x227669: (0x8039, 0),# East Asian ideograph + 0x21766a: (0x5833, 0),# East Asian ideograph + 0x22766b: (0x8041, 0),# East Asian ideograph + 0x21766c: (0x581e, 0),# East Asian ideograph + 0x21766d: (0x583f, 0),# East Asian ideograph + 0x213f59: (0x61fe, 0),# East Asian ideograph + 0x227670: (0x8043, 0),# East Asian ideograph + 0x213e68: (0x60b8, 0),# East Asian ideograph + 0x217676: (0x5828, 0),# East Asian ideograph + 0x213e69: (0x60da, 0),# East Asian ideograph + 0x217678: (0x582e, 0),# East Asian ideograph + 0x6f4868: (0xac12, 0),# Korean hangul + 0x21767a: (0x581d, 0),# East Asian ideograph + 0x22767b: (0x8052, 0),# East Asian ideograph + 0x233e6a: (0x90bd, 0),# East Asian ideograph + 0x22767e: (0x8062, 0),# East Asian ideograph + 0x225b69: (0x74aa, 0),# East Asian ideograph + 0x213e6b: (0x610f, 0),# East Asian ideograph + 0x2d4d34: (0x76c7, 0),# East Asian ideograph + 0x4b4046: (0x629c, 0),# East Asian ideograph + 0x213e6c: (0x611c, 0),# East Asian ideograph + 0x29306f: (0x89cb, 0),# East Asian ideograph + 0x213f5a: (0x61ff, 0),# East Asian ideograph + 0x224832: (0x6cd2, 0),# East Asian ideograph + 0x234d62: (0x979c, 0),# East Asian ideograph + 0x6f773d: (0xc733, 0),# Korean hangul + 0x2d4844: (0x6fd5, 0),# East Asian ideograph + 0x2d4461: (0x6746, 0),# East Asian ideograph + 0x213e6e: (0x611f, 0),# East Asian ideograph + 0x6f4869: (0xac13, 0),# Korean hangul + 0x39417c: (0x62e0, 0),# East Asian ideograph + 0x213e6f: (0x60f0, 0),# East Asian ideograph + 0x225466: (0x7215, 0),# East Asian ideograph + 0x22723c: (0x7df2, 0),# East Asian ideograph + 0x223e70: (0x696a, 0),# East Asian ideograph + 0x6f5976: (0xce89, 0),# Korean hangul + 0x213e71: (0x60fa, 0),# East Asian ideograph + 0x224b37: (0x6e71, 0),# East Asian ideograph + 0x213e72: (0x611a, 0),# East Asian ideograph + 0x234759: (0x9404, 0),# East Asian ideograph + 0x333d48: (0x5f3a, 0),# East Asian ideograph + 0x213e73: (0x6115, 0),# East Asian ideograph + 0x6f486a: (0xac14, 0),# Korean hangul + 0x212a3d: (0xe8ea, 0),# EACC component character + 0x235866: (0x9c1c, 0),# East Asian ideograph + 0x233e75: (0x90c7, 0),# East Asian ideograph + 0x456064: (0x9963, 0),# East Asian ideograph + 0x6f5977: (0xce90, 0),# Korean hangul + 0x6f5b3b: (0xd1a8, 0),# Korean hangul + 0x2d3b7b: (0x5d08, 0),# East Asian ideograph + 0x222921: (0x5ef1, 0),# East Asian ideograph + 0x213f5c: (0x6200, 0),# East Asian ideograph + 0x697060: (0x9790, 0),# East Asian ideograph + 0x4b506c: (0x7cab, 0),# East Asian ideograph + 0x215d32: (0x91ac, 0),# East Asian ideograph + 0x225347: (0x71b2, 0),# East Asian ideograph + 0x213e78: (0x610e, 0),# East Asian ideograph + 0x2d5e43: (0x92f3, 0),# East Asian ideograph + 0x6f486b: (0xac15, 0),# Korean hangul + 0x213e79: (0x6100, 0),# East Asian ideograph + 0x23364e: (0x8cb0, 0),# East Asian ideograph + 0x213e7a: (0x6101, 0),# East Asian ideograph + 0x4d2925: (0x8770, 0),# East Asian ideograph + 0x6f5344: (0xc19c, 0),# Korean hangul + 0x6f5978: (0xce91, 0),# Korean hangul + 0x213e7b: (0x60f6, 0),# East Asian ideograph + 0x6f5535: (0xc575, 0),# Korean hangul + 0x4b3870: (0x58cc, 0),# East Asian ideograph + 0x232927: (0x867c, 0),# East Asian ideograph + 0x223e7d: (0x6980, 0),# East Asian ideograph + 0x28736d: (0x624d, 0),# East Asian ideograph + 0x275e62: (0x9615, 0),# East Asian ideograph + 0x223e7e: (0x6933, 0),# East Asian ideograph + 0x225469: (0x7213, 0),# East Asian ideograph + 0x6f4935: (0xac94, 0),# Korean hangul + 0x6f4e72: (0xb7a8, 0),# Korean hangul + 0x2d4d38: (0x76d7, 0),# East Asian ideograph + 0x6f5536: (0xc57c, 0),# Korean hangul + 0x4b3871: (0x57bb, 0),# East Asian ideograph + 0x4b5647: (0x51e6, 0),# East Asian ideograph + 0x6f486d: (0xac17, 0),# Korean hangul + 0x2d5434: (0x64e7, 0),# East Asian ideograph + 0x234e5c: (0x97de, 0),# East Asian ideograph + 0x225b6a: (0x7490, 0),# East Asian ideograph + 0x23292f: (0x86a8, 0),# East Asian ideograph + 0x6f597a: (0xce98, 0),# Korean hangul + 0x4b5221: (0x7d9a, 0),# East Asian ideograph + 0x217721: (0x5848, 0),# East Asian ideograph + 0x6f7722: (0xad7b, 0),# Korean hangul + 0x217723: (0x5818, 0),# East Asian ideograph + 0x6f7724: (0xad89, 0),# Korean hangul + 0x6f7725: (0xad9d, 0),# Korean hangul + 0x217726: (0x57f5, 0),# East Asian ideograph + 0x4b5d36: (0x91c6, 0),# East Asian ideograph + 0x227728: (0x8063, 0),# East Asian ideograph + 0x21315b: (0x4fbf, 0),# East Asian ideograph + 0x6f772a: (0xae0f, 0),# Korean hangul + 0x21772b: (0x5820, 0),# East Asian ideograph + 0x6f772c: (0xae14, 0),# Korean hangul + 0x6f486e: (0xac19, 0),# Korean hangul + 0x6f772e: (0xaeed, 0),# Korean hangul + 0x6f772f: (0xaf09, 0),# Korean hangul + 0x217730: (0x584e, 0),# East Asian ideograph + 0x6f7731: (0xafbf, 0),# Korean hangul + 0x227732: (0x806c, 0),# East Asian ideograph + 0x217733: (0x585d, 0),# East Asian ideograph + 0x6f4926: (0xac78, 0),# Korean hangul + 0x217735: (0x5859, 0),# East Asian ideograph + 0x6f7736: (0xc552, 0),# Korean hangul + 0x217737: (0x584b, 0),# East Asian ideograph + 0x6f7738: (0xc5b1, 0),# Korean hangul + 0x227739: (0x8075, 0),# East Asian ideograph + 0x6f773a: (0xc61d, 0),# Korean hangul + 0x2d3876: (0x58f7, 0),# East Asian ideograph + 0x6f773c: (0xe8cb, 0),# Korean hangul + 0x21773d: (0x5865, 0),# East Asian ideograph + 0x22773e: (0x807b, 0),# East Asian ideograph + 0x22773f: (0x8079, 0),# East Asian ideograph + 0x217740: (0x586c, 0),# East Asian ideograph + 0x213f60: (0x620d, 0),# East Asian ideograph + 0x217742: (0x5852, 0),# East Asian ideograph + 0x33475e: (0x6fb9, 0),# East Asian ideograph + 0x217745: (0x5864, 0),# East Asian ideograph + 0x227747: (0x808a, 0),# East Asian ideograph + 0x217748: (0x584f, 0),# East Asian ideograph + 0x227749: (0x808e, 0),# East Asian ideograph + 0x213533: (0x53fc, 0),# East Asian ideograph + 0x6f486f: (0xac1a, 0),# Korean hangul + 0x21774d: (0x584d, 0),# East Asian ideograph + 0x22774e: (0x809f, 0),# East Asian ideograph + 0x6f5730: (0xc7c8, 0),# Korean hangul + 0x225029: (0x7054, 0),# East Asian ideograph + 0x232939: (0x8698, 0),# East Asian ideograph + 0x217758: (0x5892, 0),# East Asian ideograph + 0x6f597c: (0xcea1, 0),# Korean hangul + 0x21775a: (0x588e, 0),# East Asian ideograph + 0x22775c: (0x670a, 0),# East Asian ideograph + 0x70775d: (0x9b0f, 0),# East Asian ideograph + 0x282632: (0x5d58, 0),# East Asian ideograph + 0x21775f: (0x5840, 0),# East Asian ideograph + 0x227760: (0x80a7, 0),# East Asian ideograph + 0x227761: (0x80b0, 0),# East Asian ideograph + 0x33475f: (0x60bd, 0),# East Asian ideograph + 0x21576c: (0x88fd, 0),# East Asian ideograph + 0x217765: (0x5890, 0),# East Asian ideograph + 0x217768: (0x5898, 0),# East Asian ideograph + 0x227769: (0x80b5, 0),# East Asian ideograph + 0x22776a: (0x80a6, 0),# East Asian ideograph + 0x21776b: (0x587d, 0),# East Asian ideograph + 0x6f5c36: (0xd3b8, 0),# Korean hangul + 0x21776f: (0x587f, 0),# East Asian ideograph + 0x217770: (0x5881, 0),# East Asian ideograph + 0x707771: (0x9ee2, 0),# East Asian ideograph (Version J extension) + 0x227773: (0x80e0, 0),# East Asian ideograph + 0x21693e: (0x5135, 0),# East Asian ideograph + 0x235b26: (0x9d5a, 0),# East Asian ideograph + 0x6f597d: (0xcea3, 0),# Korean hangul + 0x213d62: (0x5f8b, 0),# East Asian ideograph + 0x22777b: (0x80df, 0),# East Asian ideograph + 0x22777d: (0x80c2, 0),# East Asian ideograph + 0x21777e: (0x58a1, 0),# East Asian ideograph + 0x226940: (0x7a5c, 0),# East Asian ideograph + 0x4b7421: (0xf9a9, 0),# East Asian ideograph + 0x4c433f: (0x6a65, 0),# East Asian ideograph + 0x6f4d21: (0xb304, 0),# Korean hangul + 0x45606b: (0x98f0, 0),# East Asian ideograph + 0x27482d: (0x6c64, 0),# East Asian ideograph + 0x293b6b: (0x8f8b, 0),# East Asian ideograph + 0x276944: (0x50a9, 0),# East Asian ideograph + 0x213f63: (0x6212, 0),# East Asian ideograph + 0x2d5e4a: (0x945a, 0),# East Asian ideograph + 0x6f4a30: (0xae00, 0),# Korean hangul + 0x275e57: (0x95f8, 0),# East Asian ideograph + 0x6f5321: (0xc11c, 0),# Korean hangul + 0x276948: (0x50a5, 0),# East Asian ideograph + 0x6f553c: (0xc58d, 0),# Korean hangul + 0x213f64: (0x6211, 0),# East Asian ideograph + 0x215d3a: (0x91cd, 0),# East Asian ideograph + 0x234762: (0x9423, 0),# East Asian ideograph + 0x23294b: (0x86bf, 0),# East Asian ideograph + 0x6f4956: (0xacf6, 0),# Korean hangul + 0x6f4b41: (0xb057, 0),# Korean hangul + 0x292c5d: (0x867f, 0),# East Asian ideograph + 0x4b3435: (0x52b4, 0),# East Asian ideograph + 0x6f4e27: (0xb54c, 0),# Korean hangul + 0x222951: (0x5f33, 0),# East Asian ideograph + 0x223258: (0x63e6, 0),# East Asian ideograph + 0x235870: (0x9c2e, 0),# East Asian ideograph + 0x227247: (0x7df1, 0),# East Asian ideograph + 0x6f5b3d: (0xd1b1, 0),# Korean hangul + 0x6f553e: (0xc590, 0),# Korean hangul + 0x213f66: (0x6215, 0),# East Asian ideograph + 0x2d3539: (0x52fe, 0),# East Asian ideograph + 0x22613b: (0x76e6, 0),# East Asian ideograph + 0x4b3436: (0x52f2, 0),# East Asian ideograph + 0x6f4e6c: (0xb791, 0),# Korean hangul + 0x23517a: (0x9958, 0),# East Asian ideograph + 0x214c30: (0x755a, 0),# East Asian ideograph + 0x226957: (0x7a6e, 0),# East Asian ideograph + 0x222958: (0x5f38, 0),# East Asian ideograph + 0x2d424f: (0x555f, 0),# East Asian ideograph + 0x215d3d: (0x91d0, 0),# East Asian ideograph + 0x22613c: (0x76e9, 0),# East Asian ideograph + 0x334342: (0x7156, 0),# East Asian ideograph + 0x513d67: (0x8ff3, 0),# East Asian ideograph + 0x217824: (0x58b1, 0),# East Asian ideograph + 0x227827: (0x80d9, 0),# East Asian ideograph + 0x4b4544: (0x69d8, 0),# East Asian ideograph + 0x4c695c: (0x7a06, 0),# East Asian ideograph + 0x22782a: (0x80dd, 0),# East Asian ideograph + 0x21782b: (0x58ad, 0),# East Asian ideograph + 0x22782d: (0x80cf, 0),# East Asian ideograph + 0x21782e: (0x58a0, 0),# East Asian ideograph + 0x22782f: (0x80cd, 0),# East Asian ideograph + 0x227830: (0x80d7, 0),# East Asian ideograph + 0x213f68: (0x621a, 0),# East Asian ideograph + 0x217832: (0x58a6, 0),# East Asian ideograph + 0x227833: (0x80f2, 0),# East Asian ideograph + 0x227834: (0x80fa, 0),# East Asian ideograph + 0x227838: (0x80fe, 0),# East Asian ideograph + 0x21783a: (0x58c8, 0),# East Asian ideograph + 0x2d3c36: (0x5de3, 0),# East Asian ideograph + 0x22783c: (0x8103, 0),# East Asian ideograph + 0x275762: (0x8865, 0),# East Asian ideograph + 0x227840: (0x80f9, 0),# East Asian ideograph + 0x217841: (0x58bc, 0),# East Asian ideograph + 0x227842: (0x80d4, 0),# East Asian ideograph + 0x33365a: (0x5405, 0),# East Asian ideograph + 0x4b4545: (0x6982, 0),# East Asian ideograph + 0x217849: (0x58bf, 0),# East Asian ideograph + 0x22784b: (0x8118, 0),# East Asian ideograph + 0x21784c: (0x58ba, 0),# East Asian ideograph + 0x222962: (0x5f4d, 0),# East Asian ideograph + 0x6f5541: (0xc597, 0),# Korean hangul + 0x227850: (0x8130, 0),# East Asian ideograph + 0x232963: (0x86b4, 0),# East Asian ideograph + 0x227854: (0x8124, 0),# East Asian ideograph + 0x227855: (0x811b, 0),# East Asian ideograph + 0x217856: (0x58ce, 0),# East Asian ideograph + 0x2d5e50: (0x9587, 0),# East Asian ideograph + 0x6f4878: (0xac2f, 0),# Korean hangul + 0x21785a: (0x58e0, 0),# East Asian ideograph + 0x21785e: (0x58da, 0),# East Asian ideograph + 0x227860: (0x812a, 0),# East Asian ideograph + 0x227861: (0x811e, 0),# East Asian ideograph + 0x294362: (0x94ea, 0),# East Asian ideograph + 0x227864: (0x8121, 0),# East Asian ideograph + 0x212321: (0x3000, 0),# Ideographic space per ANSI Z39.64 + 0x227866: (0x8117, 0),# East Asian ideograph + 0x227869: (0x813a, 0),# East Asian ideograph + 0x22786a: (0x815a, 0),# East Asian ideograph + 0x21786c: (0x58fc, 0),# East Asian ideograph + 0x22786d: (0x8148, 0),# East Asian ideograph + 0x28786e: (0x80e8, 0),# East Asian ideograph + 0x4b387d: (0x591b, 0),# East Asian ideograph + 0x217870: (0x5902, 0),# East Asian ideograph + 0x213b27: (0x5bcc, 0),# East Asian ideograph + 0x217873: (0x5906, 0),# East Asian ideograph + 0x217874: (0x6535, 0),# East Asian ideograph + 0x227877: (0x814c, 0),# East Asian ideograph + 0x21787a: (0x5910, 0),# East Asian ideograph + 0x21787c: (0x8641, 0),# East Asian ideograph + 0x22787d: (0x8141, 0),# East Asian ideograph + 0x22325d: (0x63f6, 0),# East Asian ideograph + 0x214c34: (0x7570, 0),# East Asian ideograph + 0x343a5b: (0x572c, 0),# East Asian ideograph + 0x2e735d: (0x7d56, 0),# East Asian ideograph + 0x276871: (0x4faa, 0),# East Asian ideograph + 0x6f5543: (0xc59c, 0),# Korean hangul + 0x696464: (0x7c90, 0),# East Asian ideograph + 0x213b28: (0x5bd2, 0),# East Asian ideograph + 0x234326: (0x924c, 0),# East Asian ideograph + 0x275765: (0x88c5, 0),# East Asian ideograph + 0x23296f: (0x86e9, 0),# East Asian ideograph + 0x22325e: (0x63f2, 0),# East Asian ideograph + 0x214c35: (0x7565, 0),# East Asian ideograph + 0x6f557c: (0xc63a, 0),# Korean hangul + 0x235433: (0x9a64, 0),# East Asian ideograph + 0x222971: (0x5f61, 0),# East Asian ideograph + 0x6f5544: (0xc5b4, 0),# Korean hangul + 0x2d5e24: (0x7145, 0),# East Asian ideograph + 0x23476a: (0x9407, 0),# East Asian ideograph + 0x4b403d: (0x62dd, 0),# East Asian ideograph + 0x6f487b: (0xac38, 0),# Korean hangul + 0x2d4d65: (0x53e1, 0),# East Asian ideograph + 0x232974: (0x86d5, 0),# East Asian ideograph + 0x22325f: (0x63f8, 0),# East Asian ideograph + 0x23365e: (0x8cd8, 0),# East Asian ideograph + 0x235434: (0x9a66, 0),# East Asian ideograph + 0x275421: (0x80ea, 0),# East Asian ideograph + 0x275e37: (0x9535, 0),# East Asian ideograph + 0x215422: (0x81df, 0),# East Asian ideograph + 0x6f5862: (0xcb10, 0),# Korean hangul + 0x6f487c: (0xac39, 0),# Korean hangul + 0x6f4a32: (0xae08, 0),# Korean hangul + 0x6f5423: (0xc2dc, 0),# Korean hangul + 0x27623f: (0x9e43, 0),# East Asian ideograph + 0x275e59: (0x95fa, 0),# East Asian ideograph + 0x215424: (0x81e5, 0),# East Asian ideograph + 0x23365f: (0x8cd5, 0),# East Asian ideograph + 0x456076: (0x9980, 0),# East Asian ideograph + 0x215425: (0x81e8, 0),# East Asian ideograph + 0x6f5b48: (0xd23d, 0),# Korean hangul + 0x275142: (0x7efd, 0),# East Asian ideograph + 0x225426: (0x71d4, 0),# East Asian ideograph + 0x235427: (0x9a4a, 0),# East Asian ideograph + 0x6f487d: (0xac40, 0),# Korean hangul + 0x4b5428: (0x81ed, 0),# East Asian ideograph (variant of 215428 which maps to 81ED) + 0x235879: (0x9c24, 0),# East Asian ideograph + 0x6f5c6a: (0xd56b, 0),# Korean hangul + 0x23542a: (0x9a58, 0),# East Asian ideograph + 0x6f546d: (0xc4f8, 0),# Korean hangul + 0x6f5547: (0xc5b8, 0),# Korean hangul + 0x27542b: (0x53f0, 0),# East Asian ideograph + 0x333d4c: (0x7030, 0),# East Asian ideograph + 0x23542c: (0x9a56, 0),# East Asian ideograph + 0x6f542d: (0xc2f6, 0),# Korean hangul + 0x293d4e: (0x8ff8, 0),# East Asian ideograph + 0x28352a: (0x6448, 0),# East Asian ideograph + 0x47577a: (0x9bd6, 0),# East Asian ideograph (variant of 23577A which maps to 9BD6) + 0x6f5b3f: (0xd1b5, 0),# Korean hangul + 0x6f5430: (0xc2f8, 0),# Korean hangul + 0x227925: (0x814d, 0),# East Asian ideograph + 0x6f5431: (0xc2f9, 0),# Korean hangul + 0x217928: (0x592c, 0),# East Asian ideograph + 0x21792b: (0x592f, 0),# East Asian ideograph + 0x275432: (0x4e0e, 0),# East Asian ideograph + 0x22792e: (0x6720, 0),# East Asian ideograph + 0x21507d: (0x7d14, 0),# East Asian ideograph + 0x217930: (0x593c, 0),# East Asian ideograph + 0x395f68: (0x8987, 0),# East Asian ideograph + 0x227932: (0x8160, 0),# East Asian ideograph + 0x215433: (0x8208, 0),# East Asian ideograph + 0x225039: (0x7074, 0),# East Asian ideograph + 0x217938: (0x594d, 0),# East Asian ideograph + 0x215434: (0x8209, 0),# East Asian ideograph + 0x22793b: (0x8169, 0),# East Asian ideograph + 0x22793c: (0x817c, 0),# East Asian ideograph + 0x275435: (0x65e7, 0),# East Asian ideograph + 0x294e5c: (0x97eb, 0),# East Asian ideograph + 0x227941: (0x8161, 0),# East Asian ideograph + 0x6f5a65: (0xd081, 0),# Korean hangul + 0x217943: (0x5953, 0),# East Asian ideograph + 0x225436: (0x71e8, 0),# East Asian ideograph + 0x227946: (0x8176, 0),# East Asian ideograph + 0x227947: (0x8174, 0),# East Asian ideograph + 0x227948: (0x8167, 0),# East Asian ideograph + 0x334633: (0x6b8b, 0),# East Asian ideograph (variant of 274633 which maps to 6B8B) + 0x22794b: (0x816f, 0),# East Asian ideograph + 0x22794d: (0x8182, 0),# East Asian ideograph + 0x4c794e: (0x80b7, 0),# East Asian ideograph + 0x21794f: (0x5961, 0),# East Asian ideograph + 0x227951: (0x818b, 0),# East Asian ideograph + 0x227952: (0x8186, 0),# East Asian ideograph + 0x217954: (0x596c, 0),# East Asian ideograph + 0x217955: (0x596d, 0),# East Asian ideograph + 0x274830: (0x6d4b, 0),# East Asian ideograph + 0x4b6324: (0x9f62, 0),# East Asian ideograph + 0x227959: (0x8183, 0),# East Asian ideograph + 0x21543a: (0x8214, 0),# East Asian ideograph + 0x334770: (0x5a6c, 0),# East Asian ideograph + 0x69543b: (0x57b0, 0),# East Asian ideograph + 0x217965: (0x597c, 0),# East Asian ideograph + 0x6f4a33: (0xae09, 0),# Korean hangul + 0x217969: (0x59a7, 0),# East Asian ideograph + 0x22796a: (0x819f, 0),# East Asian ideograph + 0x22796b: (0x81a3, 0),# East Asian ideograph + 0x287941: (0x8136, 0),# East Asian ideograph + 0x21796f: (0x599a, 0),# East Asian ideograph + 0x227970: (0x8198, 0),# East Asian ideograph + 0x22503b: (0x707a, 0),# East Asian ideograph + 0x335e3d: (0x9244, 0),# East Asian ideograph + 0x227975: (0x8195, 0),# East Asian ideograph + 0x227977: (0x8197, 0),# East Asian ideograph + 0x22543f: (0x71e1, 0),# East Asian ideograph + 0x22797c: (0x81aa, 0),# East Asian ideograph + 0x224372: (0x6b1e, 0),# East Asian ideograph + 0x22797e: (0x6725, 0),# East Asian ideograph + 0x213b30: (0x5bde, 0),# East Asian ideograph + 0x2d5440: (0x6841, 0),# East Asian ideograph + 0x6f4862: (0xac04, 0),# Korean hangul + 0x215441: (0x822b, 0),# East Asian ideograph + 0x275068: (0x7caa, 0),# East Asian ideograph + 0x695442: (0x57d6, 0),# East Asian ideograph + 0x227255: (0x7e12, 0),# East Asian ideograph + 0x235443: (0x9ab1, 0),# East Asian ideograph + 0x294e79: (0x9878, 0),# East Asian ideograph + 0x6f5444: (0xc345, 0),# Korean hangul + 0x213b31: (0x5be6, 0),# East Asian ideograph + 0x235445: (0x9ab3, 0),# East Asian ideograph + 0x33432f: (0x664b, 0),# East Asian ideograph + 0x225651: (0x72c6, 0),# East Asian ideograph + 0x2d5446: (0x8229, 0),# East Asian ideograph + 0x216e57: (0x53fb, 0),# East Asian ideograph + 0x214c3e: (0x758f, 0),# East Asian ideograph + 0x276329: (0x9f8c, 0),# East Asian ideograph + 0x6f554d: (0xc5c4, 0),# Korean hangul + 0x235449: (0x9ab6, 0),# East Asian ideograph + 0x227427: (0x7f46, 0),# East Asian ideograph + 0x224a62: (0x6e4b, 0),# East Asian ideograph + 0x27544a: (0x8231, 0),# East Asian ideograph + 0x294161: (0x9487, 0),# East Asian ideograph + 0x27544b: (0x8230, 0),# East Asian ideograph + 0x283955: (0x6619, 0),# East Asian ideograph + 0x23544c: (0x9abb, 0),# East Asian ideograph + 0x233667: (0x8ce8, 0),# East Asian ideograph + 0x4d2f7a: (0x891d, 0),# East Asian ideograph + 0x6f5345: (0xc19d, 0),# Korean hangul + 0x6f544d: (0xc37d, 0),# Korean hangul + 0x235871: (0x9c28, 0),# East Asian ideograph + 0x6f554e: (0xc5c5, 0),# Korean hangul + 0x27544e: (0x8270, 0),# East Asian ideograph + 0x234774: (0x943f, 0),# East Asian ideograph + 0x22544f: (0x71fc, 0),# East Asian ideograph + 0x235450: (0x9aba, 0),# East Asian ideograph + 0x695451: (0x58b9, 0),# East Asian ideograph + 0x233668: (0x8ce9, 0),# East Asian ideograph + 0x4b4553: (0x6955, 0),# East Asian ideograph + 0x6f4e77: (0xb7b4, 0),# Korean hangul + 0x274831: (0x6da1, 0),# East Asian ideograph + 0x233225: (0x8a22, 0),# East Asian ideograph + 0x6f554f: (0xc5c6, 0),# Korean hangul + 0x6f5453: (0xc3dc, 0),# Korean hangul + 0x235454: (0x9abd, 0),# East Asian ideograph + 0x2e6c26: (0x7be0, 0),# East Asian ideograph + 0x6f4a34: (0xae0b, 0),# Korean hangul + 0x6f5455: (0xc3e0, 0),# Korean hangul + 0x225456: (0x71f9, 0),# East Asian ideograph + 0x225040: (0x7093, 0),# East Asian ideograph + 0x23543f: (0x9aad, 0),# East Asian ideograph + 0x235457: (0x9ac1, 0),# East Asian ideograph + 0x6f5550: (0xc5c7, 0),# Korean hangul + 0x275458: (0x5df4, 0),# East Asian ideograph (duplicate simplified) + 0x274222: (0x62c5, 0),# East Asian ideograph + 0x4b3b22: (0x51a6, 0),# East Asian ideograph + 0x235459: (0x9ac0, 0),# East Asian ideograph + 0x22572c: (0x72fb, 0),# East Asian ideograph + 0x23545a: (0x9ac2, 0),# East Asian ideograph + 0x217a21: (0x5990, 0),# East Asian ideograph + 0x22545b: (0x720e, 0),# East Asian ideograph + 0x217a24: (0x59c5, 0),# East Asian ideograph + 0x217a25: (0x59b5, 0),# East Asian ideograph + 0x217a28: (0x59cf, 0),# East Asian ideograph + 0x21545c: (0x82bb, 0),# East Asian ideograph + 0x217a2a: (0x59ba, 0),# East Asian ideograph + 0x3f377b: (0x784e, 0),# East Asian ideograph (Version J extension) + 0x217a2c: (0x59b8, 0),# East Asian ideograph + 0x6f546f: (0xc501, 0),# Korean hangul + 0x227a2e: (0x81b0, 0),# East Asian ideograph + 0x227a2f: (0x81b4, 0),# East Asian ideograph + 0x215d4f: (0x9237, 0),# East Asian ideograph + 0x227a33: (0x81b7, 0),# East Asian ideograph + 0x217a35: (0x59b2, 0),# East Asian ideograph + 0x227a37: (0x81bb, 0),# East Asian ideograph + 0x227a38: (0x81c1, 0),# East Asian ideograph + 0x227a39: (0x81cc, 0),# East Asian ideograph + 0x217a3a: (0x59b7, 0),# East Asian ideograph + 0x227a3b: (0x81c4, 0),# East Asian ideograph + 0x217a3e: (0x59c1, 0),# East Asian ideograph + 0x227a40: (0x81d1, 0),# East Asian ideograph + 0x227a41: (0x81ce, 0),# East Asian ideograph + 0x217a43: (0x59f9, 0),# East Asian ideograph + 0x217a44: (0x59f8, 0),# East Asian ideograph + 0x212a43: (0xe8f0, 0),# EACC component character + 0x225461: (0x7207, 0),# East Asian ideograph + 0x227a4b: (0x81db, 0),# East Asian ideograph + 0x6f5552: (0xc5c9, 0),# Korean hangul + 0x6f5462: (0xc468, 0),# Korean hangul + 0x227a4f: (0x81dd, 0),# East Asian ideograph + 0x217a50: (0x59f1, 0),# East Asian ideograph + 0x217a51: (0x5a00, 0),# East Asian ideograph + 0x217a52: (0x59de, 0),# East Asian ideograph + 0x227a53: (0x81de, 0),# East Asian ideograph + 0x227a56: (0x81e0, 0),# East Asian ideograph + 0x227a57: (0x81e2, 0),# East Asian ideograph + 0x6f5464: (0xc474, 0),# Korean hangul + 0x227a5b: (0x81e7, 0),# East Asian ideograph + 0x217a5d: (0x59f6, 0),# East Asian ideograph + 0x217a5e: (0x59dd, 0),# East Asian ideograph + 0x217a5f: (0x59fa, 0),# East Asian ideograph + 0x227a60: (0x81ef, 0),# East Asian ideograph + 0x217a61: (0x59e4, 0),# East Asian ideograph + 0x227a65: (0x81f2, 0),# East Asian ideograph + 0x227a68: (0x81f6, 0),# East Asian ideograph + 0x6f5553: (0xc5ca, 0),# Korean hangul + 0x6f5467: (0xc494, 0),# Korean hangul + 0x274225: (0x6324, 0),# East Asian ideograph + 0x217a6e: (0x5a2a, 0),# East Asian ideograph + 0x213b38: (0x5bf5, 0),# East Asian ideograph + 0x227a70: (0x8201, 0),# East Asian ideograph + 0x2d5468: (0x6959, 0),# East Asian ideograph + 0x227a72: (0x8201, 0),# East Asian ideograph (not in Unicode) + 0x227a74: (0x8203, 0),# East Asian ideograph + 0x227a75: (0x8204, 0),# East Asian ideograph + 0x2d3c49: (0x83f7, 0),# East Asian ideograph + 0x227a77: (0x820b, 0),# East Asian ideograph + 0x217a78: (0x5a09, 0),# East Asian ideograph + 0x23546a: (0x9ad1, 0),# East Asian ideograph + 0x217a7e: (0x5a12, 0),# East Asian ideograph + 0x6f4e78: (0xb7b5, 0),# Korean hangul + 0x6f546b: (0xc4f1, 0),# Korean hangul + 0x6f5554: (0xc5cc, 0),# Korean hangul + 0x6f546c: (0xc4f4, 0),# Korean hangul + 0x274226: (0x62e7, 0),# East Asian ideograph + 0x213b39: (0x5bf6, 0),# East Asian ideograph + 0x21546d: (0x82d3, 0),# East Asian ideograph + 0x234337: (0x927c, 0),# East Asian ideograph + 0x22546e: (0x7218, 0),# East Asian ideograph + 0x28395c: (0x6654, 0),# East Asian ideograph + 0x2d546f: (0x83c0, 0),# East Asian ideograph + 0x22725e: (0x7e09, 0),# East Asian ideograph + 0x4b4559: (0x9792, 0),# East Asian ideograph + 0x6f5470: (0xc50c, 0),# Korean hangul + 0x4b5227: (0x6b20, 0),# East Asian ideograph + 0x6f5555: (0xc5ce, 0),# Korean hangul + 0x225471: (0x720b, 0),# East Asian ideograph + 0x33477b: (0x904a, 0),# East Asian ideograph + 0x235472: (0x9adc, 0),# East Asian ideograph + 0x4b5223: (0x7e4a, 0),# East Asian ideograph + 0x275777: (0x4eb5, 0),# East Asian ideograph + 0x215474: (0x834a, 0),# East Asian ideograph + 0x22725f: (0x7e1f, 0),# East Asian ideograph + 0x23366f: (0x8ceb, 0),# East Asian ideograph + 0x335445: (0x67c1, 0),# East Asian ideograph + 0x6f5475: (0xc530, 0),# Korean hangul + 0x6f5556: (0xc5d0, 0),# Korean hangul + 0x235476: (0x9ae0, 0),# East Asian ideograph + 0x274228: (0x62df, 0),# East Asian ideograph + 0x23477c: (0x943d, 0),# East Asian ideograph + 0x215477: (0x8350, 0),# East Asian ideograph + 0x27593f: (0x8bc1, 0),# East Asian ideograph + 0x233f22: (0x90dd, 0),# East Asian ideograph + 0x6f5478: (0xc53b, 0),# Korean hangul + 0x293f23: (0x90cf, 0),# East Asian ideograph + 0x6f5827: (0xc999, 0),# Korean hangul + 0x225479: (0x721a, 0),# East Asian ideograph + 0x233670: (0x8cda, 0),# East Asian ideograph + 0x212a44: (0xe8f1, 0),# EACC component character + 0x335446: (0x8221, 0),# East Asian ideograph + 0x22437e: (0x6b2c, 0),# East Asian ideograph + 0x4b5154: (0x7df4, 0),# East Asian ideograph + 0x6f547c: (0xc544, 0),# Korean hangul + 0x233f27: (0x90d8, 0),# East Asian ideograph + 0x6f5b6d: (0xd30d, 0),# Korean hangul + 0x22547d: (0x721f, 0),# East Asian ideograph + 0x273f28: (0x6001, 0),# East Asian ideograph + 0x223272: (0x63eb, 0),# East Asian ideograph + 0x6f4f53: (0xb974, 0),# Korean hangul + 0x213f29: (0x613e, 0),# East Asian ideograph + 0x225048: (0x7096, 0),# East Asian ideograph (not in Unicode) + 0x6f5624: (0xc650, 0),# Korean hangul + 0x213f2a: (0x6127, 0),# East Asian ideograph + 0x27422a: (0x6269, 0),# East Asian ideograph + 0x213c2b: (0x5d87, 0),# East Asian ideograph + 0x213f2c: (0x6147, 0),# East Asian ideograph + 0x275f37: (0x9645, 0),# East Asian ideograph + 0x223f2d: (0x6985, 0),# East Asian ideograph + 0x273f2e: (0x5e86, 0),# East Asian ideograph + 0x6f4e79: (0xb7c9, 0),# Korean hangul + 0x274833: (0x6d51, 0),# East Asian ideograph + 0x213f2f: (0x6167, 0),# East Asian ideograph + 0x6f5559: (0xc5d8, 0),# Korean hangul + 0x27422b: (0x63b7, 0),# East Asian ideograph + 0x2e624f: (0x772d, 0),# East Asian ideograph + 0x227b27: (0x821d, 0),# East Asian ideograph + 0x227b29: (0x8220, 0),# East Asian ideograph + 0x6f4a36: (0xae30, 0),# Korean hangul + 0x217b2c: (0x5a60, 0),# East Asian ideograph + 0x223f32: (0x693d, 0),# East Asian ideograph + 0x227b2e: (0x822d, 0),# East Asian ideograph + 0x227b2f: (0x822f, 0),# East Asian ideograph + 0x6f5477: (0xc539, 0),# Korean hangul + 0x217b31: (0x5a67, 0),# East Asian ideograph + 0x227b32: (0x8238, 0),# East Asian ideograph + 0x273f33: (0x5fe7, 0),# East Asian ideograph + 0x227b34: (0x823a, 0),# East Asian ideograph + 0x227b35: (0x8233, 0),# East Asian ideograph + 0x227b36: (0x8234, 0),# East Asian ideograph + 0x213f34: (0x617c, 0),# East Asian ideograph + 0x227b3a: (0x8232, 0),# East Asian ideograph + 0x217b3b: (0x5a5e, 0),# East Asian ideograph + 0x217b3c: (0x5a6d, 0),# East Asian ideograph + 0x217b3d: (0x5a35, 0),# East Asian ideograph + 0x217b3e: (0x5a55, 0),# East Asian ideograph + 0x27422c: (0x64b5, 0),# East Asian ideograph + 0x215d58: (0x9234, 0),# East Asian ideograph (variant of 4B5D58 which maps to 9234) + 0x217b41: (0x5a2c, 0),# East Asian ideograph + 0x227b42: (0x8248, 0),# East Asian ideograph + 0x227b43: (0x8249, 0),# East Asian ideograph + 0x227b45: (0x8244, 0),# East Asian ideograph + 0x227b47: (0x8240, 0),# East Asian ideograph + 0x227b48: (0x8241, 0),# East Asian ideograph + 0x217b49: (0x5a65, 0),# East Asian ideograph + 0x227b4a: (0x8245, 0),# East Asian ideograph + 0x227b4b: (0x824b, 0),# East Asian ideograph + 0x334e37: (0x784e, 0),# East Asian ideograph + 0x227b50: (0x824f, 0),# East Asian ideograph + 0x213f38: (0x6158, 0),# East Asian ideograph + 0x217b52: (0x5a64, 0),# East Asian ideograph + 0x227b53: (0x824e, 0),# East Asian ideograph + 0x227b56: (0x8256, 0),# East Asian ideograph + 0x227b57: (0x8257, 0),# East Asian ideograph + 0x2d6b33: (0x5231, 0),# East Asian ideograph (not in Unicode) + 0x6f555b: (0xc5e1, 0),# Korean hangul + 0x223f3a: (0x6934, 0),# East Asian ideograph + 0x227b5e: (0x825a, 0),# East Asian ideograph + 0x227b62: (0x825f, 0),# East Asian ideograph + 0x223f3b: (0x6969, 0),# East Asian ideograph + 0x217b65: (0x5a8a, 0),# East Asian ideograph + 0x227b67: (0x8262, 0),# East Asian ideograph + 0x217b69: (0x5acf, 0),# East Asian ideograph + 0x217b6a: (0x5a7a, 0),# East Asian ideograph + 0x227b6b: (0x8268, 0),# East Asian ideograph + 0x227b6f: (0x826d, 0),# East Asian ideograph + 0x217b71: (0x5a9f, 0),# East Asian ideograph + 0x273f3e: (0x5baa, 0),# East Asian ideograph + 0x227b77: (0x8278, 0),# East Asian ideograph + 0x213f3f: (0x6191, 0),# East Asian ideograph + 0x227b7d: (0x827f, 0),# East Asian ideograph + 0x23433f: (0x928d, 0),# East Asian ideograph + 0x213f41: (0x61ab, 0),# East Asian ideograph + 0x23486c: (0x946f, 0),# East Asian ideograph + 0x295f7c: (0x9f80, 0),# East Asian ideograph + 0x6f4f54: (0xb975, 0),# Korean hangul + 0x213f42: (0x61a4, 0),# East Asian ideograph + 0x453d53: (0x5f66, 0),# East Asian ideograph + 0x4b4561: (0x691c, 0),# East Asian ideograph + 0x4b5061: (0x7cbe, 0),# East Asian ideograph + 0x2d4d5f: (0x7741, 0),# East Asian ideograph + 0x6f555d: (0xc5e5, 0),# Korean hangul + 0x27422f: (0x64de, 0),# East Asian ideograph + 0x6f5a69: (0xd0ac, 0),# Korean hangul + 0x213b42: (0x5c0b, 0),# East Asian ideograph + 0x294666: (0x933e, 0),# East Asian ideograph + 0x223f45: (0x69a0, 0),# East Asian ideograph + 0x234340: (0x92ee, 0),# East Asian ideograph + 0x4b522b: (0x7f36, 0),# East Asian ideograph + 0x6f5c50: (0xd48d, 0),# Korean hangul + 0x223f46: (0x69b1, 0),# East Asian ideograph + 0x23553c: (0x9b08, 0),# East Asian ideograph + 0x233f47: (0x90fe, 0),# East Asian ideograph + 0x295031: (0x98a7, 0),# East Asian ideograph + 0x213f48: (0x61b6, 0),# East Asian ideograph + 0x6f555e: (0xc5ec, 0),# Korean hangul + 0x213f49: (0x61cd, 0),# East Asian ideograph + 0x213b52: (0x5c3f, 0),# East Asian ideograph + 0x233f4a: (0x90ff, 0),# East Asian ideograph + 0x6f4a37: (0xae31, 0),# Korean hangul + 0x273f4b: (0x601c, 0),# East Asian ideograph + 0x213f4c: (0x61be, 0),# East Asian ideograph + 0x516a26: (0x51b4, 0),# East Asian ideograph + 0x4d4d61: (0x7ef1, 0),# East Asian ideograph + 0x6f5b49: (0xd23f, 0),# Korean hangul + 0x275143: (0x7efe, 0),# East Asian ideograph + 0x274231: (0x62e2, 0),# East Asian ideograph + 0x295940: (0x9cbc, 0),# East Asian ideograph + 0x213b44: (0x5c0e, 0),# East Asian ideograph + 0x234a21: (0x9627, 0),# East Asian ideograph + 0x223f50: (0x69ce, 0),# East Asian ideograph + 0x22327a: (0x63dc, 0),# East Asian ideograph + 0x227269: (0x7e10, 0),# East Asian ideograph + 0x6f5472: (0xc528, 0),# Korean hangul + 0x4b3f53: (0x61f2, 0),# East Asian ideograph + 0x4b5671: (0x873b, 0),# East Asian ideograph (variant of 215671 which maps to 873B) + 0x223f44: (0x698a, 0),# East Asian ideograph + 0x213f54: (0x61f7, 0),# East Asian ideograph + 0x234343: (0x927a, 0),# East Asian ideograph + 0x213f55: (0x61f6, 0),# East Asian ideograph + 0x27414f: (0x635f, 0),# East Asian ideograph + 0x22327b: (0x63d7, 0),# East Asian ideograph + 0x213f56: (0x61f8, 0),# East Asian ideograph + 0x223f51: (0x69ca, 0),# East Asian ideograph + 0x233237: (0x8a57, 0),# East Asian ideograph + 0x213f57: (0x61f5, 0),# East Asian ideograph + 0x6f5561: (0xc5f0, 0),# Korean hangul + 0x21355b: (0x5436, 0),# East Asian ideograph + 0x233f58: (0x9111, 0),# East Asian ideograph + 0x215d5f: (0x927b, 0),# East Asian ideograph + 0x224a66: (0x6e62, 0),# East Asian ideograph + 0x223f59: (0x698d, 0),# East Asian ideograph + 0x223f5a: (0x6991, 0),# East Asian ideograph + 0x217c21: (0x5aa6, 0),# East Asian ideograph + 0x217c22: (0x5a8c, 0),# East Asian ideograph + 0x213f5b: (0x61fc, 0),# East Asian ideograph + 0x227c24: (0x828e, 0),# East Asian ideograph + 0x227c25: (0x8291, 0),# East Asian ideograph + 0x217c26: (0x5aa2, 0),# East Asian ideograph + 0x227c27: (0x828f, 0),# East Asian ideograph + 0x227c28: (0x8284, 0),# East Asian ideograph + 0x273f5c: (0x604b, 0),# East Asian ideograph + 0x227c2d: (0x8283, 0),# East Asian ideograph + 0x227c2e: (0x828a, 0),# East Asian ideograph + 0x213f5d: (0x6208, 0),# East Asian ideograph + 0x225138: (0x70cb, 0),# East Asian ideograph + 0x274c78: (0x762b, 0),# East Asian ideograph + 0x227c34: (0x82a7, 0),# East Asian ideograph + 0x217c35: (0x5a95, 0),# East Asian ideograph + 0x217c36: (0x5aaf, 0),# East Asian ideograph + 0x227c38: (0x82ab, 0),# East Asian ideograph + 0x217c39: (0x5ac8, 0),# East Asian ideograph + 0x227c3a: (0x82b0, 0),# East Asian ideograph + 0x227c3c: (0x82a4, 0),# East Asian ideograph + 0x217c3e: (0x5ab5, 0),# East Asian ideograph + 0x227c3f: (0x829a, 0),# East Asian ideograph + 0x233f60: (0x910b, 0),# East Asian ideograph + 0x227c42: (0x82a3, 0),# East Asian ideograph + 0x6f4e7b: (0xb7ed, 0),# Korean hangul + 0x227c44: (0x82b7, 0),# East Asian ideograph + 0x227c45: (0x82ae, 0),# East Asian ideograph (variant of 4C7C45 which maps to 82AE) + 0x227c46: (0x82a9, 0),# East Asian ideograph + 0x213f61: (0x620c, 0),# East Asian ideograph + 0x217c49: (0x5ad1, 0),# East Asian ideograph + 0x217c4a: (0x5a90, 0),# East Asian ideograph + 0x6f5563: (0xc5f6, 0),# Korean hangul + 0x227c4c: (0x82a8, 0),# East Asian ideograph + 0x213f62: (0x6210, 0),# East Asian ideograph + 0x227c4e: (0x82b4, 0),# East Asian ideograph + 0x217c4f: (0x5ab8, 0),# East Asian ideograph + 0x227c50: (0x82a1, 0),# East Asian ideograph + 0x226160: (0x770e, 0),# East Asian ideograph + 0x217c52: (0x5aaa, 0),# East Asian ideograph + 0x227c53: (0x82aa, 0),# East Asian ideograph + 0x227c55: (0x82d9, 0),# East Asian ideograph + 0x227c57: (0x82fe, 0),# East Asian ideograph + 0x2d3224: (0x7b87, 0),# East Asian ideograph + 0x217c59: (0x5ad3, 0),# East Asian ideograph + 0x227c5a: (0x82e0, 0),# East Asian ideograph + 0x217c5b: (0x5ab1, 0),# East Asian ideograph + 0x227c5c: (0x8300, 0),# East Asian ideograph + 0x227c5f: (0x82ea, 0),# East Asian ideograph + 0x227c60: (0x82f7, 0),# East Asian ideograph + 0x227c62: (0x82ef, 0),# East Asian ideograph + 0x227c63: (0x833a, 0),# East Asian ideograph + 0x227c64: (0x82e4, 0),# East Asian ideograph + 0x227c65: (0x82d5, 0),# East Asian ideograph + 0x227c67: (0x8307, 0),# East Asian ideograph + 0x227c68: (0x82fa, 0),# East Asian ideograph + 0x227c69: (0x82f4, 0),# East Asian ideograph + 0x227c6a: (0x82e2, 0),# East Asian ideograph + 0x213f67: (0x621b, 0),# East Asian ideograph + 0x227c6d: (0x82d2, 0),# East Asian ideograph + 0x217c6e: (0x5ae0, 0),# East Asian ideograph + 0x227c71: (0x82eb, 0),# East Asian ideograph + 0x227c72: (0x82d8, 0),# East Asian ideograph + 0x227c73: (0x82e1, 0),# East Asian ideograph + 0x227c75: (0x82f6, 0),# East Asian ideograph + 0x28602b: (0x762a, 0),# East Asian ideograph + 0x227c7b: (0x8310, 0),# East Asian ideograph + 0x227c7c: (0x82f3, 0),# East Asian ideograph + 0x233f6a: (0x911e, 0),# East Asian ideograph + 0x4b4569: (0x6a71, 0),# East Asian ideograph + 0x23323b: (0x8a58, 0),# East Asian ideograph + 0x6f5473: (0xc529, 0),# Korean hangul + 0x274237: (0x631b, 0),# East Asian ideograph + 0x6f5122: (0xbc41, 0),# Korean hangul + 0x226162: (0x771b, 0),# East Asian ideograph + 0x213f6d: (0x622e, 0),# East Asian ideograph + 0x213f6e: (0x6230, 0),# East Asian ideograph + 0x4b5973: (0x8d2e, 0),# East Asian ideograph + 0x275344: (0x80c1, 0),# East Asian ideograph + 0x213f6f: (0x6232, 0),# East Asian ideograph + 0x23323c: (0x8a52, 0),# East Asian ideograph + 0x6f5566: (0xc5fd, 0),# Korean hangul + 0x21355c: (0x5433, 0),# East Asian ideograph + 0x274238: (0x644a, 0),# East Asian ideograph + 0x6f5123: (0xbc43, 0),# Korean hangul + 0x226163: (0x7724, 0),# East Asian ideograph + 0x213f72: (0x6236, 0),# East Asian ideograph + 0x234349: (0x92aa, 0),# East Asian ideograph + 0x6f4c38: (0xb18d, 0),# Korean hangul + 0x22557c: (0x728b, 0),# East Asian ideograph + 0x213f74: (0x623e, 0),# East Asian ideograph + 0x225057: (0x7098, 0),# East Asian ideograph + 0x235b2f: (0x9d7a, 0),# East Asian ideograph + 0x213f75: (0x6240, 0),# East Asian ideograph + 0x29325d: (0x8bd4, 0),# East Asian ideograph + 0x2d3f76: (0x78a5, 0),# East Asian ideograph + 0x6f5a6b: (0xd0b5, 0),# Korean hangul + 0x6f5124: (0xbc44, 0),# Korean hangul + 0x213b4c: (0x5c37, 0),# East Asian ideograph + 0x223f77: (0x69be, 0),# East Asian ideograph + 0x4b6a22: (0x7f83, 0),# East Asian ideograph + 0x213f78: (0x6248, 0),# East Asian ideograph + 0x222a23: (0x5f82, 0),# East Asian ideograph + 0x233f79: (0x912b, 0),# East Asian ideograph + 0x4b456c: (0x6adb, 0),# East Asian ideograph (variant of 21456C) + 0x2d602d: (0x976d, 0),# East Asian ideograph + 0x213f7a: (0x624b, 0),# East Asian ideograph + 0x212a25: (0xe8d4, 0),# EACC component character + 0x6f5568: (0xc5ff, 0),# Korean hangul + 0x294e7b: (0x9883, 0),# East Asian ideograph + 0x4b6a26: (0x6c8d, 0),# East Asian ideograph + 0x6f4a39: (0xae37, 0),# Korean hangul + 0x2d5a34: (0x8cad, 0),# East Asian ideograph + 0x393d6f: (0x8907, 0),# East Asian ideograph + 0x213f7e: (0x6254, 0),# East Asian ideograph + 0x6f5a70: (0xd0c0, 0),# Korean hangul + 0x4b456d: (0x823b, 0),# East Asian ideograph + 0x2d403f: (0x6255, 0),# East Asian ideograph + 0x695f70: (0x7195, 0),# East Asian ideograph + 0x27423b: (0x63fd, 0),# East Asian ideograph + 0x6f5126: (0xbc84, 0),# Korean hangul + 0x225731: (0x731d, 0),# East Asian ideograph + 0x213a7a: (0x5bb5, 0),# East Asian ideograph + 0x696a2c: (0x87d0, 0),# East Asian ideograph + 0x2e5a78: (0x74a2, 0),# East Asian ideograph + 0x277954: (0x5956, 0),# East Asian ideograph + 0x212a2e: (0xe8dc, 0),# EACC component character + 0x333240: (0x4ffb, 0),# East Asian ideograph + 0x232a2f: (0x86fa, 0),# East Asian ideograph + 0x227d21: (0x830c, 0),# East Asian ideograph + 0x227d22: (0x82fb, 0),# East Asian ideograph + 0x227d24: (0x82fd, 0),# East Asian ideograph + 0x215925: (0x8ae6, 0),# East Asian ideograph + 0x227d26: (0x8333, 0),# East Asian ideograph + 0x4b5238: (0x7f87, 0),# East Asian ideograph + 0x227d29: (0x8328, 0),# East Asian ideograph + 0x217d2a: (0x5afd, 0),# East Asian ideograph + 0x217d2b: (0x5b08, 0),# East Asian ideograph + 0x212a32: (0xe8df, 0),# EACC component character + 0x227d2e: (0x8351, 0),# East Asian ideograph + 0x214c5c: (0x75f1, 0),# East Asian ideograph + 0x6f5c7b: (0xd5cc, 0),# Korean hangul + 0x4b456f: (0x685c, 0),# East Asian ideograph + 0x227d35: (0x831b, 0),# East Asian ideograph + 0x217d38: (0x5b03, 0),# East Asian ideograph + 0x222a34: (0x3013, 0),# East Asian ideograph (not found in unified han) + 0x227d3b: (0x8356, 0),# East Asian ideograph + 0x217d3d: (0x5b17, 0),# East Asian ideograph + 0x217d3e: (0x5b16, 0),# East Asian ideograph + 0x227d3f: (0x8322, 0),# East Asian ideograph + 0x227d40: (0x832c, 0),# East Asian ideograph + 0x212a36: (0xe8e3, 0),# EACC component character + 0x217d47: (0x5b1b, 0),# East Asian ideograph + 0x227d48: (0x833c, 0),# East Asian ideograph + 0x227d4a: (0x834d, 0),# East Asian ideograph + 0x334f3a: (0x7a49, 0),# East Asian ideograph + 0x227d4d: (0x8343, 0),# East Asian ideograph (variant of 4C7D4D which maps to 8343) + 0x22505c: (0x70b7, 0),# East Asian ideograph + 0x4b4570: (0x6a29, 0),# East Asian ideograph + 0x227d52: (0x832f, 0),# East Asian ideograph + 0x227d53: (0x8348, 0),# East Asian ideograph + 0x227d54: (0x8312, 0),# East Asian ideograph + 0x227d56: (0x8316, 0),# East Asian ideograph + 0x212a39: (0xe8e6, 0),# EACC component character + 0x227d58: (0x831a, 0),# East Asian ideograph + 0x217d59: (0x5b32, 0),# East Asian ideograph + 0x2e6f43: (0x9908, 0),# East Asian ideograph + 0x6f5a6c: (0xd0b7, 0),# Korean hangul + 0x6f5129: (0xbc8b, 0),# Korean hangul + 0x213b51: (0x5c41, 0),# East Asian ideograph + 0x227d5f: (0x8347, 0),# East Asian ideograph + 0x227d62: (0x83a8, 0),# East Asian ideograph + 0x217d63: (0x5b3f, 0),# East Asian ideograph + 0x4b3021: (0x58f1, 0),# East Asian ideograph + 0x227d67: (0x83ad, 0),# East Asian ideograph + 0x6f5121: (0xbc40, 0),# Korean hangul + 0x286a3c: (0x7aad, 0),# East Asian ideograph + 0x4c7d6a: (0x8323, 0),# East Asian ideograph + 0x227d6d: (0x8373, 0),# East Asian ideograph + 0x217d6e: (0x5b45, 0),# East Asian ideograph + 0x6f4e7d: (0xb7f4, 0),# Korean hangul + 0x227d72: (0x83b0, 0),# East Asian ideograph + 0x217d74: (0x5b4c, 0),# East Asian ideograph + 0x212a3e: (0xe8eb, 0),# EACC component character + 0x227d76: (0x831d, 0),# East Asian ideograph + 0x6f556d: (0xc608, 0),# Korean hangul + 0x282868: (0x5e91, 0),# East Asian ideograph + 0x227d7a: (0x838f, 0),# East Asian ideograph + 0x6f512a: (0xbc8c, 0),# Korean hangul + 0x227d7c: (0x8395, 0),# East Asian ideograph + 0x227d7e: (0x8375, 0),# East Asian ideograph + 0x215928: (0x8af1, 0),# East Asian ideograph + 0x234350: (0x92a6, 0),# East Asian ideograph + 0x51384d: (0x51c3, 0),# East Asian ideograph + 0x69545c: (0x58d7, 0),# East Asian ideograph + 0x212a41: (0xe8ee, 0),# EACC component character + 0x275e61: (0x9614, 0),# East Asian ideograph + 0x212a46: (0x3013, 0),# Ideographic geta symbol + 0x212a42: (0xe8ef, 0),# EACC component character + 0x23545d: (0x9ac8, 0),# East Asian ideograph + 0x226a43: (0x7abf, 0),# East Asian ideograph + 0x6f556e: (0xc60c, 0),# Korean hangul + 0x6f512b: (0xbc94, 0),# Korean hangul + 0x22315c: (0x634b, 0),# East Asian ideograph + 0x212a45: (0xe8f2, 0),# EACC component character + 0x6f5574: (0xc62c, 0),# Korean hangul + 0x2d314c: (0x5008, 0),# East Asian ideograph + 0x27534d: (0x8109, 0),# East Asian ideograph + 0x273b6e: (0x5188, 0),# East Asian ideograph + 0x214c60: (0x760d, 0),# East Asian ideograph + 0x2d4d71: (0x7719, 0),# East Asian ideograph + 0x213e6a: (0x60df, 0),# East Asian ideograph + 0x6f5c21: (0xd33d, 0),# Korean hangul + 0x2d3c61: (0x5e47, 0),# East Asian ideograph + 0x234667: (0x93e7, 0),# East Asian ideograph + 0x6f512c: (0xbc95, 0),# Korean hangul + 0x21592a: (0x8adc, 0),# East Asian ideograph + 0x2d3c65: (0x79ca, 0),# East Asian ideograph + 0x6f4e29: (0xb550, 0),# Korean hangul + 0x393e47: (0x8cc9, 0),# East Asian ideograph + 0x6f5032: (0xba70, 0),# Korean hangul + 0x2f386f: (0x8dd7, 0),# East Asian ideograph + 0x214c61: (0x7627, 0),# East Asian ideograph + 0x6f2464: (0x314e, 0),# Korean hangul + 0x6f5b47: (0xd23c, 0),# Korean hangul + 0x6f512d: (0xbc97, 0),# Korean hangul + 0x6f516e: (0xbe45, 0),# Korean hangul + 0x226a4f: (0x7ad1, 0),# East Asian ideograph + 0x4b3974: (0x5b22, 0),# East Asian ideograph + 0x3f5564: (0x61de, 0),# East Asian ideograph + 0x214c62: (0x7613, 0),# East Asian ideograph + 0x4b6130: (0x99c4, 0),# East Asian ideograph + 0x6f5571: (0xc624, 0),# Korean hangul + 0x6f512e: (0xbc98, 0),# Korean hangul + 0x284642: (0x6bf5, 0),# East Asian ideograph + 0x226a54: (0x7ad5, 0),# East Asian ideograph + 0x2d5a3d: (0x8cdb, 0),# East Asian ideograph + 0x225c50: (0x74e4, 0),# East Asian ideograph + 0x225062: (0x70a1, 0),# East Asian ideograph + 0x335461: (0x6cd6, 0),# East Asian ideograph + 0x213041: (0x4e4d, 0),# East Asian ideograph + 0x6f5572: (0xc625, 0),# Korean hangul + 0x6f512f: (0xbc99, 0),# Korean hangul + 0x234355: (0x929a, 0),# East Asian ideograph + 0x6f4a3b: (0xae40, 0),# Korean hangul + 0x217e59: (0x5bc1, 0),# East Asian ideograph + 0x2f2a5a: (0x868b, 0),# Unrelated variant of EACC 23293D which maps to 868B + 0x22714b: (0x7d9b, 0),# East Asian ideograph + 0x227e21: (0x837f, 0),# East Asian ideograph + 0x227e22: (0x8399, 0),# East Asian ideograph + 0x225063: (0x70a3, 0),# East Asian ideograph + 0x217e24: (0x5b65, 0),# East Asian ideograph + 0x227e25: (0x8387, 0),# East Asian ideograph + 0x227e26: (0x83b9, 0),# East Asian ideograph + 0x217e27: (0x5c58, 0),# East Asian ideograph (not in Unicode) + 0x217e28: (0x5b6c, 0),# East Asian ideograph + 0x217e2a: (0x5b6e, 0),# East Asian ideograph + 0x227e2b: (0x83a9, 0),# East Asian ideograph + 0x227e2f: (0x839b, 0),# East Asian ideograph + 0x217e30: (0x5b7b, 0),# East Asian ideograph + 0x217e31: (0x5b7c, 0),# East Asian ideograph + 0x217e32: (0x5b80, 0),# East Asian ideograph + 0x227e33: (0x83aa, 0),# East Asian ideograph + 0x217e34: (0x5b84, 0),# East Asian ideograph + 0x217e35: (0x5b82, 0),# East Asian ideograph (not in Unicode) + 0x227e37: (0x839c, 0),# East Asian ideograph + 0x227e38: (0x839f, 0),# East Asian ideograph + 0x222a5f: (0x5fd1, 0),# East Asian ideograph + 0x217e40: (0x5b95, 0),# East Asian ideograph + 0x227e41: (0x83cf, 0),# East Asian ideograph + 0x227e43: (0x83f9, 0),# East Asian ideograph + 0x2f445f: (0x941a, 0),# East Asian ideograph + 0x227e45: (0x8421, 0),# East Asian ideograph + 0x6f5476: (0xc538, 0),# Korean hangul + 0x217e49: (0x5bac, 0),# East Asian ideograph + 0x6f5131: (0xbca0, 0),# Korean hangul + 0x294a44: (0x9655, 0),# East Asian ideograph + 0x21592f: (0x8af7, 0),# East Asian ideograph + 0x227e52: (0x83ea, 0),# East Asian ideograph + 0x227e53: (0x8413, 0),# East Asian ideograph + 0x217e55: (0x5bb7, 0),# East Asian ideograph + 0x227e56: (0x83fc, 0),# East Asian ideograph + 0x227e57: (0x83f6, 0),# East Asian ideograph + 0x227e59: (0x8410, 0),# East Asian ideograph + 0x227e5a: (0x83e1, 0),# East Asian ideograph + 0x217e5b: (0x3761, 0),# East Asian ideograph (not found in unified han) + 0x227e60: (0x83c6, 0),# East Asian ideograph + 0x227e61: (0x8407, 0),# East Asian ideograph + 0x227e63: (0x83eb, 0),# East Asian ideograph + 0x216a66: (0x51df, 0),# East Asian ideograph + 0x6f5575: (0xc62d, 0),# Korean hangul + 0x217e68: (0x5bd4, 0),# East Asian ideograph + 0x217e6a: (0x5bc3, 0),# East Asian ideograph + 0x227e6b: (0x83e2, 0),# East Asian ideograph + 0x227e6d: (0x8401, 0),# East Asian ideograph + 0x217e6e: (0x5bd6, 0),# East Asian ideograph + 0x234358: (0x92ab, 0),# East Asian ideograph + 0x227e71: (0x83d8, 0),# East Asian ideograph + 0x227e72: (0x83e5, 0),# East Asian ideograph + 0x227e74: (0x8418, 0),# East Asian ideograph + 0x217e75: (0x5bd7, 0),# East Asian ideograph + 0x227e79: (0x83ce, 0),# East Asian ideograph + 0x227e7b: (0x83d3, 0),# East Asian ideograph + 0x295b52: (0x9e4e, 0),# East Asian ideograph + 0x227e7d: (0x83d6, 0),# East Asian ideograph + 0x217e7e: (0x5bea, 0),# East Asian ideograph + 0x6f5576: (0xc62e, 0),# Korean hangul + 0x6f5133: (0xbca4, 0),# Korean hangul + 0x294a46: (0x9649, 0),# East Asian ideograph + 0x275f3d: (0x96b6, 0),# East Asian ideograph + 0x4b6260: (0x9ebd, 0),# East Asian ideograph + 0x227e6a: (0x83bf, 0),# East Asian ideograph + 0x2d6030: (0x97ee, 0),# East Asian ideograph + 0x235466: (0x9ad0, 0),# East Asian ideograph + 0x22454d: (0x6996, 0),# East Asian ideograph + 0x6f5577: (0xc633, 0),# Korean hangul + 0x6f5134: (0xbca7, 0),# Korean hangul + 0x213b5c: (0x5c50, 0),# East Asian ideograph + 0x215932: (0x8b19, 0),# East Asian ideograph + 0x6f4a3c: (0xae41, 0),# Korean hangul + 0x2d3c6d: (0x8298, 0),# East Asian ideograph (duplicate simplified) + 0x222a73: (0x5ff8, 0),# East Asian ideograph + 0x225068: (0x7551, 0),# East Asian ideograph + 0x6f5551: (0xc5c8, 0),# Korean hangul + 0x6f5135: (0xbca8, 0),# Korean hangul + 0x215521: (0x5179, 0),# East Asian ideograph + 0x223f5c: (0x69aa, 0),# East Asian ideograph + 0x275274: (0x58f0, 0),# East Asian ideograph + 0x2d3c6e: (0x7240, 0),# East Asian ideograph + 0x6f5523: (0xc54c, 0),# Korean hangul + 0x6f5524: (0xc54e, 0),# Korean hangul + 0x23324f: (0x8a7f, 0),# East Asian ideograph + 0x233e37: (0x9088, 0),# East Asian ideograph + 0x4c4446: (0x6b4e, 0),# East Asian ideograph + 0x6f5525: (0xc553, 0),# Korean hangul + 0x232a7b: (0x877b, 0),# East Asian ideograph + 0x6f5526: (0xc554, 0),# Korean hangul + 0x3a6a7c: (0x7bea, 0),# East Asian ideograph + 0x235527: (0x9aeb, 0),# East Asian ideograph + 0x22763d: (0x801e, 0),# East Asian ideograph + 0x235528: (0x9af2, 0),# East Asian ideograph + 0x215529: (0x8396, 0),# East Asian ideograph + 0x233250: (0x8a86, 0),# East Asian ideograph + 0x225424: (0x71c1, 0),# East Asian ideograph + 0x21552a: (0x83a7, 0),# East Asian ideograph + 0x6f5137: (0xbcb1, 0),# Korean hangul + 0x213b5f: (0x5c5c, 0),# East Asian ideograph + 0x6f552b: (0xc55e, 0),# Korean hangul + 0x295f7b: (0x9f51, 0),# East Asian ideograph + 0x2d3c70: (0x576b, 0),# East Asian ideograph + 0x27552d: (0x5e84, 0),# East Asian ideograph + 0x2d552e: (0x82fa, 0),# East Asian ideograph (variant of 227C68) + 0x23316e: (0x8a04, 0),# East Asian ideograph + 0x2d493a: (0x702c, 0),# East Asian ideograph + 0x215d79: (0x9375, 0),# East Asian ideograph + 0x28464c: (0x6be1, 0),# East Asian ideograph + 0x213b60: (0x5c62, 0),# East Asian ideograph + 0x6f5531: (0xc570, 0),# Korean hangul + 0x293726: (0x8d5c, 0),# East Asian ideograph + 0x235532: (0x9af9, 0),# East Asian ideograph + 0x6f5533: (0xc573, 0),# Korean hangul + 0x6f5534: (0xc574, 0),# Korean hangul + 0x2f3363: (0x8b1a, 0),# East Asian ideograph + 0x6f5139: (0xbcb5, 0),# Korean hangul + 0x235535: (0x9afd, 0),# East Asian ideograph + 0x4b3474: (0x537f, 0),# East Asian ideograph (variant of 213474 which maps to 537F) + 0x6f582f: (0xc9d0, 0),# Korean hangul + 0x22385a: (0x6678, 0),# East Asian ideograph + 0x235536: (0x9b01, 0),# East Asian ideograph + 0x2d5a48: (0x8d71, 0),# East Asian ideograph + 0x295b59: (0x9e5c, 0),# East Asian ideograph + 0x235538: (0x9b02, 0),# East Asian ideograph + 0x6f5539: (0xc584, 0),# Korean hangul + 0x6f513a: (0xbcbc, 0),# Korean hangul + 0x4b553a: (0x83c1, 0),# East Asian ideograph (variant of 21553A which maps to 83C1) + 0x23553b: (0x9b00, 0),# East Asian ideograph + 0x2d3830: (0x573b, 0),# East Asian ideograph + 0x27553c: (0x534e, 0),# East Asian ideograph + 0x283542: (0x64b7, 0),# East Asian ideograph + 0x287531: (0x7f9f, 0),# East Asian ideograph + 0x33502a: (0x9257, 0),# East Asian ideograph + 0x23553e: (0x9b04, 0),# East Asian ideograph + 0x6f513b: (0xbcbd, 0),# Korean hangul + 0x213b63: (0x5c6c, 0),# East Asian ideograph + 0x22565b: (0x72c1, 0),# East Asian ideograph + 0x275947: (0x8c34, 0),# East Asian ideograph + 0x223442: (0x648f, 0),# East Asian ideograph + 0x213e3f: (0x6062, 0),# East Asian ideograph + 0x3f4472: (0x7881, 0),# East Asian ideograph + 0x215541: (0x840a, 0),# East Asian ideograph + 0x4b5542: (0x8420, 0),# East Asian ideograph + 0x33502b: (0x724b, 0),# East Asian ideograph + 0x235543: (0x9b0b, 0),# East Asian ideograph + 0x6f4b2b: (0xafce, 0),# Korean hangul + 0x2e4d3d: (0x6d38, 0),# East Asian ideograph + 0x696a5e: (0x88b0, 0),# East Asian ideograph + 0x227431: (0x7f4e, 0),# East Asian ideograph + 0x213561: (0x543b, 0),# East Asian ideograph + 0x225d39: (0x7517, 0),# East Asian ideograph + 0x6f5545: (0xc5b5, 0),# Korean hangul + 0x6f5546: (0xc5b6, 0),# Korean hangul + 0x6f4f5b: (0xb98e, 0),# Korean hangul + 0x295b5c: (0x9e5b, 0),# East Asian ideograph + 0x225070: (0x79cc, 0),# East Asian ideograph + 0x235547: (0x9b0e, 0),# East Asian ideograph + 0x233256: (0x8a61, 0),# East Asian ideograph + 0x6f5548: (0xc5b9, 0),# Korean hangul + 0x274252: (0x654c, 0),# East Asian ideograph + 0x6f513d: (0xbcc4, 0),# Korean hangul + 0x284651: (0x6c07, 0),# East Asian ideograph + 0x6f5549: (0xc5ba, 0),# Korean hangul + 0x213722: (0x55c6, 0),# East Asian ideograph + 0x233c2d: (0x8f40, 0),# East Asian ideograph + 0x6f554a: (0xc5bb, 0),# Korean hangul + 0x6f554b: (0xc5bc, 0),# Korean hangul + 0x28575e: (0x72b8, 0),# East Asian ideograph + 0x227849: (0x811d, 0),# East Asian ideograph + 0x393944: (0x59b3, 0),# East Asian ideograph + 0x6f554c: (0xc5bd, 0),# Korean hangul + 0x355e76: (0x82be, 0),# East Asian ideograph + 0x27554d: (0x82c7, 0),# East Asian ideograph + 0x6f513e: (0xbccc, 0),# Korean hangul + 0x23554e: (0x9b11, 0),# East Asian ideograph + 0x223f65: (0x699e, 0),# East Asian ideograph + 0x4b5959: (0x8273, 0),# East Asian ideograph + 0x21554f: (0x8449, 0),# East Asian ideograph + 0x2d5550: (0x585f, 0),# East Asian ideograph + 0x28575f: (0x72f2, 0),# East Asian ideograph + 0x283546: (0x6445, 0),# East Asian ideograph + 0x225072: (0x70bf, 0),# East Asian ideograph + 0x215551: (0x846b, 0),# East Asian ideograph + 0x233258: (0x8a3e, 0),# East Asian ideograph + 0x225552: (0x7253, 0),# East Asian ideograph + 0x274254: (0x6570, 0),# East Asian ideograph + 0x6f513f: (0xbccd, 0),# Korean hangul + 0x225553: (0x7255, 0),# East Asian ideograph + 0x275276: (0x806a, 0),# East Asian ideograph + 0x6f7726: (0xadb9, 0),# Korean hangul + 0x235554: (0x9b18, 0),# East Asian ideograph + 0x6f585a: (0xcac4, 0),# Korean hangul + 0x333f22: (0x6168, 0),# East Asian ideograph (variant of 213F22 which maps to 6168) + 0x275555: (0x83b4, 0)# East Asian ideograph +} +charset_70 = { # Superscripts + 0x28: (0x207d, 0),# SUPERSCRIPT OPENING PARENTHESIS / SUPERSCRIPT LEFT PARENTHESIS + 0x29: (0x207e, 0),# SUPERSCRIPT CLOSING PARENTHESIS / SUPERSCRIPT RIGHT PARENTHESIS + 0x2b: (0x207a, 0),# SUPERSCRIPT PLUS SIGN + 0x2d: (0x207b, 0),# SUPERSCRIPT HYPHEN-MINUS / SUPERSCRIPT MINUS + 0x30: (0x2070, 0),# SUPERSCRIPT DIGIT ZERO + 0x31: (0xb9, 0),# SUPERSCRIPT DIGIT ONE + 0x32: (0xb2, 0),# SUPERSCRIPT DIGIT TWO + 0x33: (0xb3, 0),# SUPERSCRIPT DIGIT THREE + 0x34: (0x2074, 0),# SUPERSCRIPT DIGIT FOUR + 0x35: (0x2075, 0),# SUPERSCRIPT DIGIT FIVE + 0x36: (0x2076, 0),# SUPERSCRIPT DIGIT SIX + 0x37: (0x2077, 0),# SUPERSCRIPT DIGIT SEVEN + 0x38: (0x2078, 0),# SUPERSCRIPT DIGIT EIGHT + 0x39: (0x2079, 0)# SUPERSCRIPT DIGIT NINE +} +charset_51 = { # Extended Cyrillic + 0xc0: (0x491, 0),# LOWERCASE GE WITH UPTURN / CYRILLIC SMALL LETTER GHE WITH UPTURN + 0xc1: (0x452, 0),# LOWERCASE DJE / CYRILLIC SMALL LETTER DJE (Serbian) + 0xc2: (0x453, 0),# CYRILLIC SMALL LETTER GJE + 0xc3: (0x454, 0),# LOWERCASE E / CYRILLIC SMALL LETTER UKRAINIAN IE + 0xc4: (0x451, 0),# CYRILLIC SMALL LETTER IO + 0xc5: (0x455, 0),# CYRILLIC SMALL LETTER DZE + 0xc6: (0x456, 0),# LOWERCASE I / CYRILLIC SMALL LETTER BYELORUSSIAN-UKRANIAN I + 0xc7: (0x457, 0),# LOWERCASE YI / CYRILLIC SMALL LETTER YI (Ukrainian) + 0xc8: (0x458, 0),# CYRILLIC SMALL LETTER JE + 0xc9: (0x459, 0),# CYRILLIC SMALL LETTER LJE + 0xca: (0x45a, 0),# CYRILLIC SMALL LETTER NJE + 0xcb: (0x45b, 0),# LOWERCASE TSHE / CYRILLIC SMALL LETTER TSHE (Serbian) + 0xcc: (0x45c, 0),# CYRILLIC SMALL LETTER KJE + 0xcd: (0x45e, 0),# LOWERCASE SHORT U / CYRILLIC SMALL LETTER SHORT U (Byelorussian) + 0xce: (0x45f, 0),# CYRILLIC SMALL LETTER DZHE + 0xd0: (0x463, 0),# CYRILLIC SMALL LETTER YAT + 0xd1: (0x473, 0),# CYRILLIC SMALL LETTER FITA + 0xd2: (0x475, 0),# CYRILLIC SMALL LETTER IZHITSA + 0xd3: (0x46b, 0),# CYRILLIC SMALL LETTER BIG YUS + 0xdb: (0x5b, 0),# OPENING SQUARE BRACKET / LEFT SQUARE BRACKET + 0xdd: (0x5d, 0),# CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET + 0xdf: (0x5f, 0),# SPACING UNDERSCORE / LOW LINE + 0xe0: (0x490, 0),# UPPERCASE GE WITH UPTURN / CYRILLIC CAPITAL LETTER GHE WITH UPTURN + 0xe1: (0x402, 0),# UPPERCASE DJE / CYRILLIC CAPITAL LETTER DJE (Serbian) + 0xe2: (0x403, 0),# CYRILLIC CAPITAL LETTER GJE + 0xe3: (0x404, 0),# UPPERCASE E / CYRILLIC CAPITAL LETTER UKRAINIAN IE + 0xe4: (0x401, 0),# CYRILLIC CAPITAL LETTER IO + 0xe5: (0x405, 0),# CYRILLIC CAPITAL LETTER DZE + 0xe6: (0x406, 0),# UPPERCASE I / CYRILLIC CAPITAL LETTER BYELORUSSIAN-UKRANIAN I + 0xe7: (0x407, 0),# UPPERCASE YI / CYRILLIC CAPITAL LETTER YI (Ukrainian) + 0xe8: (0x408, 0),# CYRILLIC CAPITAL LETTER JE + 0xe9: (0x409, 0),# CYRILLIC CAPITAL LETTER LJE + 0xea: (0x40a, 0),# CYRILLIC CAPITAL LETTER NJE + 0xeb: (0x40b, 0),# UPPERCASE TSHE / CYRILLIC CAPITAL LETTER TSHE (Serbian) + 0xec: (0x40c, 0),# CYRILLIC CAPITAL LETTER KJE + 0xed: (0x40e, 0),# UPPERCASE SHORT U / CYRILLIC CAPITAL LETTER SHORT U (Byelorussian) + 0xee: (0x40f, 0),# CYRILLIC CAPITAL LETTER DZHE + 0xef: (0x42a, 0),# CYRILLIC CAPITAL LETTER HARD SIGN + 0xf0: (0x462, 0),# CYRILLIC CAPITAL LETTER YAT + 0xf1: (0x472, 0),# CYRILLIC CAPITAL LETTER FITA + 0xf2: (0x474, 0),# CYRILLIC CAPITAL LETTER IZHITSA + 0xf3: (0x46a, 0)# CYRILLIC CAPITAL LETTER BIG YUS +} +charset_53 = { # Basic Greek + 0x21: (0x300, 1),# COMBINING GRAVE ACCENT + 0x22: (0x301, 1),# COMBINING ACUTE ACCENT + 0x23: (0x308, 1),# COMBINING DIAERESIS + 0x24: (0x342, 1),# COMBINING GREEK PERISPOMENI / CIRCUMFLEX + 0x25: (0x313, 1),# COMBINING COMMA ABOVE / SMOOTH BREATHING + 0x26: (0x314, 1),# COMBINING REVERSED COMMA ABOVE / ROUGH BREATHING + 0x27: (0x345, 1),# COMBINING GREEK YPOGEGRAMMENI / IOTA SUBSCRIPT + 0x30: (0xab, 0),# LEFT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x31: (0xbb, 0),# RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK + 0x32: (0x201c, 0),# LEFT DOUBLE QUOTATION MARK + 0x33: (0x201d, 0),# RIGHT DOUBLE QUOTATION MARK + 0x34: (0x374, 0),# GREEK NUMERAL SIGN / UPPER PRIME + 0x35: (0x375, 0),# GREEK LOWER NUMERAL SIGN / LOWER PRIME + 0x3b: (0x387, 0),# GREEK ANO TELEIA / RAISED DOT, GREEK SEMICOLON + 0x3f: (0x37e, 0),# GREEK QUESTION MARK + 0x41: (0x391, 0),# GREEK CAPITAL LETTER ALPHA + 0x42: (0x392, 0),# GREEK CAPITAL LETTER BETA + 0x44: (0x393, 0),# GREEK CAPITAL LETTER GAMMA + 0x45: (0x394, 0),# GREEK CAPITAL LETTER DELTA + 0x46: (0x395, 0),# GREEK CAPITAL LETTER EPSILON + 0x47: (0x3da, 0),# GREEK LETTER STIGMA + 0x48: (0x3dc, 0),# GREEK LETTER DIGAMMA + 0x49: (0x396, 0),# GREEK CAPITAL LETTER ZETA + 0x4a: (0x397, 0),# GREEK CAPITAL LETTER ETA + 0x4b: (0x398, 0),# GREEK CAPITAL LETTER THETA + 0x4c: (0x399, 0),# GREEK CAPITAL LETTER IOTA + 0x4d: (0x39a, 0),# GREEK CAPITAL LETTER KAPPA + 0x4e: (0x39b, 0),# GREEK CAPITAL LETTER LAMDA + 0x4f: (0x39c, 0),# GREEK CAPITAL LETTER MU + 0x50: (0x39d, 0),# GREEK CAPITAL LETTER NU + 0x51: (0x39e, 0),# GREEK CAPITAL LETTER XI + 0x52: (0x39f, 0),# GREEK CAPITAL LETTER OMICRON + 0x53: (0x3a0, 0),# GREEK CAPITAL LETTER PI + 0x54: (0x3de, 0),# GREEK LETTER KOPPA + 0x55: (0x3a1, 0),# GREEK CAPITAL LETTER RHO + 0x56: (0x3a3, 0),# GREEK CAPITAL LETTER SIGMA + 0x58: (0x3a4, 0),# GREEK CAPITAL LETTER TAU + 0x59: (0x3a5, 0),# GREEK CAPITAL LETTER UPSILON + 0x5a: (0x3a6, 0),# GREEK CAPITAL LETTER PHI + 0x5b: (0x3a7, 0),# GREEK CAPITAL LETTER CHI + 0x5c: (0x3a8, 0),# GREEK CAPITAL LETTER PSI + 0x5d: (0x3a9, 0),# GREEK CAPITAL LETTER OMEGA + 0x5e: (0x3e0, 0),# GREEK LETTER SAMPI + 0x61: (0x3b1, 0),# GREEK SMALL LETTER ALPHA + 0x62: (0x3b2, 0),# GREEK SMALL LETTER BETA / SMALL LETTER BETA BEGINNING OF WORD + 0x63: (0x3d0, 0),# GREEK BETA SYMBOL / SMALL LETTER BETA MIDDLE OF WORD + 0x64: (0x3b3, 0),# GREEK SMALL LETTER GAMMA + 0x65: (0x3b4, 0),# GREEK SMALL LETTER DELTA + 0x66: (0x3b5, 0),# GREEK SMALL LETTER EPSILON + 0x67: (0x3db, 0),# GREEK SMALL LETTER STIGMA + 0x68: (0x3dd, 0),# GREEK SMALL LETTER DIGAMMA + 0x69: (0x3b6, 0),# GREEK SMALL LETTER ZETA + 0x6a: (0x3b7, 0),# GREEK SMALL LETTER ETA + 0x6b: (0x3b8, 0),# GREEK SMALL LETTER THETA + 0x6c: (0x3b9, 0),# GREEK SMALL LETTER IOTA + 0x6d: (0x3ba, 0),# GREEK SMALL LETTER KAPPA + 0x6e: (0x3bb, 0),# GREEK SMALL LETTER LAMDA + 0x6f: (0x3bc, 0),# GREEK SMALL LETTER MU + 0x70: (0x3bd, 0),# GREEK SMALL LETTER NU + 0x71: (0x3be, 0),# GREEK SMALL LETTER XI + 0x72: (0x3bf, 0),# GREEK SMALL LETTER OMICRON + 0x73: (0x3c0, 0),# GREEK SMALL LETTER PI + 0x74: (0x3df, 0),# GREEK SMALL LETTER KOPPA + 0x75: (0x3c1, 0),# GREEK SMALL LETTER RHO + 0x76: (0x3c3, 0),# GREEK SMALL LETTER SIGMA + 0x77: (0x3c2, 0),# GREEK SMALL LETTER FINAL SIGMA / SMALL LETTER SIGMA END OF WORD + 0x78: (0x3c4, 0),# GREEK SMALL LETTER TAU + 0x79: (0x3c5, 0),# GREEK SMALL LETTER UPSILON + 0x7a: (0x3c6, 0),# GREEK SMALL LETTER PHI + 0x7b: (0x3c7, 0),# GREEK SMALL LETTER CHI + 0x7c: (0x3c8, 0),# GREEK SMALL LETTER PSI + 0x7d: (0x3c9, 0),# GREEK SMALL LETTER OMEGA + 0x7e: (0x3e1, 0)# GREEK SMALL LETTER SAMPI +} +charset_42 = { # Basic Latin (ASCII) + 0x1b: (0x1b, 0),# ESCAPE (Unlikely to occur in UCS/Unicode) + 0x1d: (0x1d, 0),# RECORD TERMINATOR / GROUP SEPARATOR + 0x1e: (0x1e, 0),# FIELD TERMINATOR / RECORD SEPARATOR + 0x1f: (0x1f, 0),# SUBFIELD DELIMITER / UNIT SEPARATOR + 0x20: (0x20, 0),# SPACE, BLANK / SPACE + 0x21: (0x21, 0),# EXCLAMATION MARK + 0x22: (0x22, 0),# QUOTATION MARK + 0x23: (0x23, 0),# NUMBER SIGN + 0x24: (0x24, 0),# DOLLAR SIGN + 0x25: (0x25, 0),# PERCENT SIGN + 0x26: (0x26, 0),# AMPERSAND + 0x27: (0x27, 0),# APOSTROPHE + 0x28: (0x28, 0),# OPENING PARENTHESIS / LEFT PARENTHESIS + 0x29: (0x29, 0),# CLOSING PARENTHESIS / CLOSING PARENTHESIS + 0x2a: (0x2a, 0),# ASTERISK + 0x2b: (0x2b, 0),# PLUS SIGN + 0x2c: (0x2c, 0),# COMMA + 0x2d: (0x2d, 0),# HYPHEN-MINUS + 0x2e: (0x2e, 0),# PERIOD, DECIMAL POINT / FULL STOP + 0x2f: (0x2f, 0),# SLASH / SOLIDUS + 0x30: (0x30, 0),# DIGIT ZERO + 0x31: (0x31, 0),# DIGIT ONE + 0x32: (0x32, 0),# DIGIT TWO + 0x33: (0x33, 0),# DIGIT THREE + 0x34: (0x34, 0),# DIGIT FOUR + 0x35: (0x35, 0),# DIGIT FIVE + 0x36: (0x36, 0),# DIGIT SIX + 0x37: (0x37, 0),# DIGIT SEVEN + 0x38: (0x38, 0),# DIGIT EIGHT + 0x39: (0x39, 0),# DIGIT NINE + 0x3a: (0x3a, 0),# COLON + 0x3b: (0x3b, 0),# SEMICOLON + 0x3c: (0x3c, 0),# LESS-THAN SIGN + 0x3d: (0x3d, 0),# EQUALS SIGN + 0x3e: (0x3e, 0),# GREATER-THAN SIGN + 0x3f: (0x3f, 0),# QUESTION MARK + 0x40: (0x40, 0),# COMMERCIAL AT + 0x41: (0x41, 0),# LATIN CAPITAL LETTER A + 0x42: (0x42, 0),# LATIN CAPITAL LETTER B + 0x43: (0x43, 0),# LATIN CAPITAL LETTER C + 0x44: (0x44, 0),# LATIN CAPITAL LETTER D + 0x45: (0x45, 0),# LATIN CAPITAL LETTER E + 0x46: (0x46, 0),# LATIN CAPITAL LETTER F + 0x47: (0x47, 0),# LATIN CAPITAL LETTER G + 0x48: (0x48, 0),# LATIN CAPITAL LETTER H + 0x49: (0x49, 0),# LATIN CAPITAL LETTER I + 0x4a: (0x4a, 0),# LATIN CAPITAL LETTER J + 0x4b: (0x4b, 0),# LATIN CAPITAL LETTER K + 0x4c: (0x4c, 0),# LATIN CAPITAL LETTER L + 0x4d: (0x4d, 0),# LATIN CAPITAL LETTER M + 0x4e: (0x4e, 0),# LATIN CAPITAL LETTER N + 0x4f: (0x4f, 0),# LATIN CAPITAL LETTER O + 0x50: (0x50, 0),# LATIN CAPITAL LETTER P + 0x51: (0x51, 0),# LATIN CAPITAL LETTER Q + 0x52: (0x52, 0),# LATIN CAPITAL LETTER R + 0x53: (0x53, 0),# LATIN CAPITAL LETTER S + 0x54: (0x54, 0),# LATIN CAPITAL LETTER T + 0x55: (0x55, 0),# LATIN CAPITAL LETTER U + 0x56: (0x56, 0),# LATIN CAPITAL LETTER V + 0x57: (0x57, 0),# LATIN CAPITAL LETTER W + 0x58: (0x58, 0),# LATIN CAPITAL LETTER X + 0x59: (0x59, 0),# LATIN CAPITAL LETTER Y + 0x5a: (0x5a, 0),# LATIN CAPITAL LETTER Z + 0x5b: (0x5b, 0),# OPENING SQUARE BRACKET / LEFT SQUARE BRACKET + 0x5c: (0x5c, 0),# REVERSE SLASH / REVERSE SOLIDUS + 0x5d: (0x5d, 0),# CLOSING SQUARE BRACKET / RIGHT SQUARE BRACKET + 0x5e: (0x5e, 0),# SPACING CIRCUMFLEX / CIRCUMFLEX ACCENT + 0x5f: (0x5f, 0),# SPACING UNDERSCORE / LOW LINE + 0x60: (0x60, 0),# SPACING GRAVE / GRAVE ACCENT + 0x61: (0x61, 0),# LATIN SMALL LETTER A + 0x62: (0x62, 0),# LATIN SMALL LETTER B + 0x63: (0x63, 0),# LATIN SMALL LETTER C + 0x64: (0x64, 0),# LATIN SMALL LETTER D + 0x65: (0x65, 0),# LATIN SMALL LETTER E + 0x66: (0x66, 0),# LATIN SMALL LETTER F + 0x67: (0x67, 0),# LATIN SMALL LETTER G + 0x68: (0x68, 0),# LATIN SMALL LETTER H + 0x69: (0x69, 0),# LATIN SMALL LETTER I + 0x6a: (0x6a, 0),# LATIN SMALL LETTER J + 0x6b: (0x6b, 0),# LATIN SMALL LETTER K + 0x6c: (0x6c, 0),# LATIN SMALL LETTER L + 0x6d: (0x6d, 0),# LATIN SMALL LETTER M + 0x6e: (0x6e, 0),# LATIN SMALL LETTER N + 0x6f: (0x6f, 0),# LATIN SMALL LETTER O + 0x70: (0x70, 0),# LATIN SMALL LETTER P + 0x71: (0x71, 0),# LATIN SMALL LETTER Q + 0x72: (0x72, 0),# LATIN SMALL LETTER R + 0x73: (0x73, 0),# LATIN SMALL LETTER S + 0x74: (0x74, 0),# LATIN SMALL LETTER T + 0x75: (0x75, 0),# LATIN SMALL LETTER U + 0x76: (0x76, 0),# LATIN SMALL LETTER V + 0x77: (0x77, 0),# LATIN SMALL LETTER W + 0x78: (0x78, 0),# LATIN SMALL LETTER X + 0x79: (0x79, 0),# LATIN SMALL LETTER Y + 0x7a: (0x7a, 0),# LATIN SMALL LETTER Z + 0x7b: (0x7b, 0),# OPENING CURLY BRACKET / LEFT CURLY BRACKET + 0x7c: (0x7c, 0),# VERTICAL BAR (FILL) / VERTICAL LINE + 0x7d: (0x7d, 0),# CLOSING CURLY BRACKET / RIGHT CURLY BRACKET + 0x7e: (0x7e, 0)# SPACING TILDE / TILDE +} +charset_62 = { # Subscripts + 0x28: (0x208d, 0),# SUBSCRIPT OPENING PARENTHESIS / SUBSCRIPT LEFT PARENTHESIS + 0x29: (0x208e, 0),# SUBSCRIPT CLOSING PARENTHESIS / SUBSCRIPT RIGHT PARENTHESIS + 0x2b: (0x208a, 0),# SUBSCRIPT PLUS SIGN + 0x2d: (0x208b, 0),# SUBSCRIPT HYPHEN-MINUS / SUBSCRIPT MINUS + 0x30: (0x2080, 0),# SUBSCRIPT DIGIT ZERO + 0x31: (0x2081, 0),# SUBSCRIPT DIGIT ONE + 0x32: (0x2082, 0),# SUBSCRIPT DIGIT TWO + 0x33: (0x2083, 0),# SUBSCRIPT DIGIT THREE + 0x34: (0x2084, 0),# SUBSCRIPT DIGIT FOUR + 0x35: (0x2085, 0),# SUBSCRIPT DIGIT FIVE + 0x36: (0x2086, 0),# SUBSCRIPT DIGIT SIX + 0x37: (0x2087, 0),# SUBSCRIPT DIGIT SEVEN + 0x38: (0x2088, 0),# SUBSCRIPT DIGIT EIGHT + 0x39: (0x2089, 0)# SUBSCRIPT DIGIT NINE +} +charset_67 = { # Greek Symbols + 0x61: (0x3b1, 0),# GREEK SMALL LETTER ALPHA + 0x62: (0x3b2, 0),# GREEK SMALL LETTER BETA + 0x63: (0x3b3, 0)# GREEK SMALL LETTER GAMMA +} +charset_4E = { # Basic Cyrillic + 0x21: (0x21, 0),# EXCLAMATION MARK + 0x22: (0x22, 0),# QUOTATION MARK + 0x23: (0x23, 0),# NUMBER SIGN + 0x24: (0x24, 0),# DOLLAR SIGN + 0x25: (0x25, 0),# PERCENT SIGN + 0x26: (0x26, 0),# AMPERSAND + 0x27: (0x27, 0),# APOSTROPHE + 0x28: (0x28, 0),# OPENING PARENTHESIS / LEFT PARENTHESIS + 0x29: (0x29, 0),# CLOSING PARENTHESIS / RIGHT PARENTHESIS + 0x2a: (0x2a, 0),# ASTERISK + 0x2b: (0x2b, 0),# PLUS SIGN + 0x2c: (0x2c, 0),# COMMA + 0x2d: (0x2d, 0),# HYPHEN-MINUS + 0x2e: (0x2e, 0),# PERIOD, DECIMAL POINT / FULL STOP + 0x2f: (0x2f, 0),# SLASH / SOLIDUS + 0x30: (0x30, 0),# DIGIT ZERO + 0x31: (0x31, 0),# DIGIT ONE + 0x32: (0x32, 0),# DIGIT TWO + 0x33: (0x33, 0),# DIGIT THREE + 0x34: (0x34, 0),# DIGIT FOUR + 0x35: (0x35, 0),# DIGIT FIVE + 0x36: (0x36, 0),# DIGIT SIX + 0x37: (0x37, 0),# DIGIT SEVEN + 0x38: (0x38, 0),# DIGIT EIGHT + 0x39: (0x39, 0),# DIGIT NINE + 0x3a: (0x3a, 0),# COLON + 0x3b: (0x3b, 0),# SEMICOLON + 0x3c: (0x3c, 0),# LESS-THAN SIGN + 0x3d: (0x3d, 0),# EQUALS SIGN + 0x3e: (0x3e, 0),# GREATER-THAN SIGN + 0x3f: (0x3f, 0),# QUESTION MARK + 0x40: (0x44e, 0),# LOWERCASE IU / CYRILLIC SMALL LETTER YU + 0x41: (0x430, 0),# CYRILLIC SMALL LETTER A + 0x42: (0x431, 0),# CYRILLIC SMALL LETTER BE + 0x43: (0x446, 0),# CYRILLIC SMALL LETTER TSE + 0x44: (0x434, 0),# CYRILLIC SMALL LETTER DE + 0x45: (0x435, 0),# CYRILLIC SMALL LETTER IE + 0x46: (0x444, 0),# CYRILLIC SMALL LETTER EF + 0x47: (0x433, 0),# LOWERCASE GE / CYRILLIC SMALL LETTER GHE + 0x48: (0x445, 0),# LOWERCASE KHA / CYRILLIC SMALL LETTER HA + 0x49: (0x438, 0),# LOWERCASE II / CYRILLIC SMALL LETTER I + 0x4a: (0x439, 0),# LOWERCASE SHORT II / CYRILLIC SMALL LETTER SHORT I + 0x4b: (0x43a, 0),# CYRILLIC SMALL LETTER KA + 0x4c: (0x43b, 0),# CYRILLIC SMALL LETTER EL + 0x4d: (0x43c, 0),# CYRILLIC SMALL LETTER EM + 0x4e: (0x43d, 0),# CYRILLIC SMALL LETTER EN + 0x4f: (0x43e, 0),# CYRILLIC SMALL LETTER O + 0x50: (0x43f, 0),# CYRILLIC SMALL LETTER PE + 0x51: (0x44f, 0),# LOWERCASE IA / CYRILLIC SMALL LETTER YA + 0x52: (0x440, 0),# CYRILLIC SMALL LETTER ER + 0x53: (0x441, 0),# CYRILLIC SMALL LETTER ES + 0x54: (0x442, 0),# CYRILLIC SMALL LETTER TE + 0x55: (0x443, 0),# CYRILLIC SMALL LETTER U + 0x56: (0x436, 0),# CYRILLIC SMALL LETTER ZHE + 0x57: (0x432, 0),# CYRILLIC SMALL LETTER VE + 0x58: (0x44c, 0),# CYRILLIC SMALL LETTER SOFT SIGN + 0x59: (0x44b, 0),# LOWERCASE YERI / CYRILLIC SMALL LETTER YERI + 0x5a: (0x437, 0),# CYRILLIC SMALL LETTER ZE + 0x5b: (0x448, 0),# CYRILLIC SMALL LETTER SHA + 0x5c: (0x44d, 0),# LOWERCASE REVERSED E / CYRILLIC SMALL LETTER E + 0x5d: (0x449, 0),# CYRILLIC SMALL LETTER SHCHA + 0x5e: (0x447, 0),# CYRILLIC SMALL LETTER CHE + 0x5f: (0x44a, 0),# CYRILLIC SMALL LETTER HARD SIGN + 0x60: (0x42e, 0),# UPPERCASE IU / CYRILLIC CAPITAL LETTER YU + 0x61: (0x410, 0),# CYRILLIC CAPITAL LETTER A + 0x62: (0x411, 0),# CYRILLIC CAPITAL LETTER BE + 0x63: (0x426, 0),# CYRILLIC CAPITAL LETTER TSE + 0x64: (0x414, 0),# CYRILLIC CAPITAL LETTER DE + 0x65: (0x415, 0),# CYRILLIC CAPITAL LETTER IE + 0x66: (0x424, 0),# CYRILLIC CAPITAL LETTER EF + 0x67: (0x413, 0),# UPPERCASE GE / CYRILLIC CAPITAL LETTER GHE + 0x68: (0x425, 0),# UPPERCASE KHA / CYRILLIC CAPITAL LETTER HA + 0x69: (0x418, 0),# UPPERCASE II / CYRILLIC CAPITAL LETTER I + 0x6a: (0x419, 0),# UPPERCASE SHORT II / CYRILLIC CAPITAL LETTER SHORT I + 0x6b: (0x41a, 0),# CYRILLIC CAPITAL LETTER KA + 0x6c: (0x41b, 0),# CYRILLIC CAPITAL LETTER EL + 0x6d: (0x41c, 0),# CYRILLIC CAPITAL LETTER EM + 0x6e: (0x41d, 0),# CYRILLIC CAPITAL LETTER EN + 0x6f: (0x41e, 0),# CYRILLIC CAPITAL LETTER O + 0x70: (0x41f, 0),# CYRILLIC CAPITAL LETTER PE + 0x71: (0x42f, 0),# UPPERCASE IA / CYRILLIC CAPITAL LETTER YA + 0x72: (0x420, 0),# CYRILLIC CAPITAL LETTER ER + 0x73: (0x421, 0),# CYRILLIC CAPITAL LETTER ES + 0x74: (0x422, 0),# CYRILLIC CAPITAL LETTER TE + 0x75: (0x423, 0),# CYRILLIC CAPITAL LETTER U + 0x76: (0x416, 0),# CYRILLIC CAPITAL LETTER ZHE + 0x77: (0x412, 0),# CYRILLIC CAPITAL LETTER VE + 0x78: (0x42c, 0),# CYRILLIC CAPITAL LETTER SOFT SIGN + 0x79: (0x42b, 0),# UPPERCASE YERI / CYRILLIC CAPITAL LETTER YERI + 0x7a: (0x417, 0),# CYRILLIC CAPITAL LETTER ZE + 0x7b: (0x428, 0),# CYRILLIC CAPITAL LETTER SHA + 0x7c: (0x42d, 0),# CYRILLIC CAPITAL LETTER E + 0x7d: (0x429, 0),# CYRILLIC CAPITAL LETTER SHCHA + 0x7e: (0x427, 0)# CYRILLIC CAPITAL LETTER CHE +} +codesets = { + 0x34: charset_34, + 0x45: charset_45, + 0x33: charset_33, + 0x32: charset_32, + 0x31: charset_31, + 0x70: charset_70, + 0x51: charset_51, + 0x53: charset_53, + 0x42: charset_42, + 0x62: charset_62, + 0x67: charset_67, + 0x4E: charset_4E} diff --git a/python/PyZ3950/oids.py b/python/PyZ3950/oids.py new file mode 100644 index 0000000..e1b525e --- /dev/null +++ b/python/PyZ3950/oids.py @@ -0,0 +1,479 @@ +from PyZ3950 import asn1 +oids = {} +oids['Z3950'] = {'oid': asn1.OidVal([1, 2, 840, 10003]), 'val': [1, 2, 840, 10003]} +oids['Z3950']['ATTRS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3]), 'val': [1, 2, 840, 10003, 3]} +oids['Z3950']['DIAG'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 4]), 'val': [1, 2, 840, 10003, 4]} +oids['Z3950']['RECSYN'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5]), 'val': [1, 2, 840, 10003, 5]} +oids['Z3950']['TRANSFER'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 6]), 'val': [1, 2, 840, 10003, 6]} +oids['Z3950']['RRF'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 7]), 'val': [1, 2, 840, 10003, 7]} +oids['Z3950']['ACCESS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 8]), 'val': [1, 2, 840, 10003, 8]} +oids['Z3950']['ES'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 9]), 'val': [1, 2, 840, 10003, 9]} +oids['Z3950']['USR'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10]), 'val': [1, 2, 840, 10003, 10]} +oids['Z3950']['SPEC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 11]), 'val': [1, 2, 840, 10003, 11]} +oids['Z3950']['VAR'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 12]), 'val': [1, 2, 840, 10003, 12]} +oids['Z3950']['SCHEMA'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13]), 'val': [1, 2, 840, 10003, 13]} +oids['Z3950']['TAGSET'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 14]), 'val': [1, 2, 840, 10003, 14]} +oids['Z3950']['NEG'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 15]), 'val': [1, 2, 840, 10003, 15]} +oids['Z3950']['QUERY'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 16]), 'val': [1, 2, 840, 10003, 16]} +oids['Z3950']['ATTRS']['BIB1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 1]), 'val': [1, 2, 840, 10003, 3, 1]} +oids['Z3950']['ATTRS']['EXP1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 2]), 'val': [1, 2, 840, 10003, 3, 2]} +oids['Z3950']['ATTRS']['EXT1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 3]), 'val': [1, 2, 840, 10003, 3, 3]} +oids['Z3950']['ATTRS']['CCL1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 4]), 'val': [1, 2, 840, 10003, 3, 4]} +oids['Z3950']['ATTRS']['GILS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 5]), 'val': [1, 2, 840, 10003, 3, 5]} +oids['Z3950']['ATTRS']['STAS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 6]), 'val': [1, 2, 840, 10003, 3, 6]} +oids['Z3950']['ATTRS']['COLLECTIONS1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 7]), 'val': [1, 2, 840, 10003, 3, 7]} +oids['Z3950']['ATTRS']['CIMI1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 8]), 'val': [1, 2, 840, 10003, 3, 8]} +oids['Z3950']['ATTRS']['GEO'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 9]), 'val': [1, 2, 840, 10003, 3, 9]} +oids['Z3950']['ATTRS']['ZBIG'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 10]), 'val': [1, 2, 840, 10003, 3, 10]} +oids['Z3950']['ATTRS']['UTIL'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 11]), 'val': [1, 2, 840, 10003, 3, 11]} +oids['Z3950']['ATTRS']['XD1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 12]), 'val': [1, 2, 840, 10003, 3, 12]} +oids['Z3950']['ATTRS']['ZTHES'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 13]), 'val': [1, 2, 840, 10003, 3, 13]} +oids['Z3950']['ATTRS']['FIN1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 14]), 'val': [1, 2, 840, 10003, 3, 14]} +oids['Z3950']['ATTRS']['DAN1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 15]), 'val': [1, 2, 840, 10003, 3, 15]} +oids['Z3950']['ATTRS']['HOLD'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 16]), 'val': [1, 2, 840, 10003, 3, 16]} +oids['Z3950']['ATTRS']['MARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 17]), 'val': [1, 2, 840, 10003, 3, 17]} +oids['Z3950']['ATTRS']['BIB2'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 18]), 'val': [1, 2, 840, 10003, 3, 18]} +oids['Z3950']['ATTRS']['ZEEREX'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 3, 19]), 'val': [1, 2, 840, 10003, 3, 19]} +oids['Z3950']['DIAG']['BIB1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 4, 1]), 'val': [1, 2, 840, 10003, 4, 1]} +oids['Z3950']['DIAG']['DIAG1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 4, 2]), 'val': [1, 2, 840, 10003, 4, 2]} +oids['Z3950']['DIAG']['ES'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 4, 3]), 'val': [1, 2, 840, 10003, 4, 3]} +oids['Z3950']['DIAG']['GENERAL'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 4, 4]), 'val': [1, 2, 840, 10003, 4, 4]} +oids['Z3950']['RECSYN']['UNIMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 1]), 'val': [1, 2, 840, 10003, 5, 1]} +oids['Z3950']['RECSYN']['INTERMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 2]), 'val': [1, 2, 840, 10003, 5, 2]} +oids['Z3950']['RECSYN']['CCF'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 3]), 'val': [1, 2, 840, 10003, 5, 3]} +oids['Z3950']['RECSYN']['USMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 10]), 'val': [1, 2, 840, 10003, 5, 10]} +oids['Z3950']['RECSYN']['USMARC']['BIBLIO'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 10, 1]), 'val': [1, 2, 840, 10003, 5, 10, 1]} +oids['Z3950']['RECSYN']['USMARC']['AUTH'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 10, 2]), 'val': [1, 2, 840, 10003, 5, 10, 2]} +oids['Z3950']['RECSYN']['USMARC']['HOLD'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 10, 3]), 'val': [1, 2, 840, 10003, 5, 10, 3]} +oids['Z3950']['RECSYN']['USMARC']['COMMUNITY'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 10, 4]), 'val': [1, 2, 840, 10003, 5, 10, 4]} +oids['Z3950']['RECSYN']['USMARC']['CLASS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 10, 5]), 'val': [1, 2, 840, 10003, 5, 10, 5]} +oids['Z3950']['RECSYN']['UKMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 11]), 'val': [1, 2, 840, 10003, 5, 11]} +oids['Z3950']['RECSYN']['NORMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 12]), 'val': [1, 2, 840, 10003, 5, 12]} +oids['Z3950']['RECSYN']['LIBRISMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 13]), 'val': [1, 2, 840, 10003, 5, 13]} +oids['Z3950']['RECSYN']['DANMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 14]), 'val': [1, 2, 840, 10003, 5, 14]} +oids['Z3950']['RECSYN']['FINMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 15]), 'val': [1, 2, 840, 10003, 5, 15]} +oids['Z3950']['RECSYN']['MAB'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 16]), 'val': [1, 2, 840, 10003, 5, 16]} +oids['Z3950']['RECSYN']['CANMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 17]), 'val': [1, 2, 840, 10003, 5, 17]} +oids['Z3950']['RECSYN']['SBNMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 18]), 'val': [1, 2, 840, 10003, 5, 18]} +oids['Z3950']['RECSYN']['PICAMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 19]), 'val': [1, 2, 840, 10003, 5, 19]} +oids['Z3950']['RECSYN']['AUSMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 20]), 'val': [1, 2, 840, 10003, 5, 20]} +oids['Z3950']['RECSYN']['IBERMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 21]), 'val': [1, 2, 840, 10003, 5, 21]} +oids['Z3950']['RECSYN']['CATMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 22]), 'val': [1, 2, 840, 10003, 5, 22]} +oids['Z3950']['RECSYN']['MALMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 23]), 'val': [1, 2, 840, 10003, 5, 23]} +oids['Z3950']['RECSYN']['JPMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 24]), 'val': [1, 2, 840, 10003, 5, 24]} +oids['Z3950']['RECSYN']['SWEMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 25]), 'val': [1, 2, 840, 10003, 5, 25]} +oids['Z3950']['RECSYN']['SIGLEMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 26]), 'val': [1, 2, 840, 10003, 5, 26]} +oids['Z3950']['RECSYN']['ISDSMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 27]), 'val': [1, 2, 840, 10003, 5, 27]} +oids['Z3950']['RECSYN']['RUSMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 28]), 'val': [1, 2, 840, 10003, 5, 28]} +oids['Z3950']['RECSYN']['HUNMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 29]), 'val': [1, 2, 840, 10003, 5, 29]} +oids['Z3950']['RECSYN']['NACSISCATP'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 30]), 'val': [1, 2, 840, 10003, 5, 30]} +oids['Z3950']['RECSYN']['FINMARC2000'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 31]), 'val': [1, 2, 840, 10003, 5, 31]} +oids['Z3950']['RECSYN']['MARC21FIN'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 32]), 'val': [1, 2, 840, 10003, 5, 32]} +oids['Z3950']['RECSYN']['COMARC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 33]), 'val': [1, 2, 840, 10003, 5, 33]} +oids['Z3950']['RECSYN']['EXPLAIN'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 100]), 'val': [1, 2, 840, 10003, 5, 100]} +oids['Z3950']['RECSYN']['SUTRS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 101]), 'val': [1, 2, 840, 10003, 5, 101]} +oids['Z3950']['RECSYN']['OPAC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 102]), 'val': [1, 2, 840, 10003, 5, 102]} +oids['Z3950']['RECSYN']['SUMMARY'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 103]), 'val': [1, 2, 840, 10003, 5, 103]} +oids['Z3950']['RECSYN']['GRS0'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 104]), 'val': [1, 2, 840, 10003, 5, 104]} +oids['Z3950']['RECSYN']['GRS1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 105]), 'val': [1, 2, 840, 10003, 5, 105]} +oids['Z3950']['RECSYN']['ES'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 106]), 'val': [1, 2, 840, 10003, 5, 106]} +oids['Z3950']['RECSYN']['FRAGMENT'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 107]), 'val': [1, 2, 840, 10003, 5, 107]} +oids['Z3950']['RECSYN']['MIME'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109]), 'val': [1, 2, 840, 10003, 5, 109]} +oids['Z3950']['RECSYN']['MIME']['PDF'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109, 1]), 'val': [1, 2, 840, 10003, 5, 109, 1]} +oids['Z3950']['RECSYN']['MIME']['POSTSCRIPT'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109, 2]), 'val': [1, 2, 840, 10003, 5, 109, 2]} +oids['Z3950']['RECSYN']['MIME']['HTML'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109, 3]), 'val': [1, 2, 840, 10003, 5, 109, 3]} +oids['Z3950']['RECSYN']['MIME']['TIFF'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109, 4]), 'val': [1, 2, 840, 10003, 5, 109, 4]} +oids['Z3950']['RECSYN']['MIME']['GIF'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109, 5]), 'val': [1, 2, 840, 10003, 5, 109, 5]} +oids['Z3950']['RECSYN']['MIME']['JPEG'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109, 6]), 'val': [1, 2, 840, 10003, 5, 109, 6]} +oids['Z3950']['RECSYN']['MIME']['PNG'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109, 7]), 'val': [1, 2, 840, 10003, 5, 109, 7]} +oids['Z3950']['RECSYN']['MIME']['MPEG'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109, 8]), 'val': [1, 2, 840, 10003, 5, 109, 8]} +oids['Z3950']['RECSYN']['MIME']['SGML'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109, 9]), 'val': [1, 2, 840, 10003, 5, 109, 9]} +oids['Z3950']['RECSYN']['MIME']['XML'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 109, 10]), 'val': [1, 2, 840, 10003, 5, 109, 10]} +oids['Z3950']['RECSYN']['ZMIME'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 110]), 'val': [1, 2, 840, 10003, 5, 110]} +oids['Z3950']['RECSYN']['ZMIME']['TIFFB'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 110, 1]), 'val': [1, 2, 840, 10003, 5, 110, 1]} +oids['Z3950']['RECSYN']['ZMIME']['WAV'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 110, 2]), 'val': [1, 2, 840, 10003, 5, 110, 2]} +oids['Z3950']['RECSYN']['SQL'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 5, 111]), 'val': [1, 2, 840, 10003, 5, 111]} +oids['Z3950']['RRF']['RESOURCE1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 7, 1]), 'val': [1, 2, 840, 10003, 7, 1]} +oids['Z3950']['RRF']['RESOURCE2'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 7, 2]), 'val': [1, 2, 840, 10003, 7, 2]} +oids['Z3950']['ACCESS']['PROMPT1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 8, 1]), 'val': [1, 2, 840, 10003, 8, 1]} +oids['Z3950']['ACCESS']['DES1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 8, 2]), 'val': [1, 2, 840, 10003, 8, 2]} +oids['Z3950']['ACCESS']['KRB1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 8, 3]), 'val': [1, 2, 840, 10003, 8, 3]} +oids['Z3950']['ES']['PERSISTRS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 9, 1]), 'val': [1, 2, 840, 10003, 9, 1]} +oids['Z3950']['ES']['PERSISTQRY'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 9, 2]), 'val': [1, 2, 840, 10003, 9, 2]} +oids['Z3950']['ES']['PERIODQRY'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 9, 3]), 'val': [1, 2, 840, 10003, 9, 3]} +oids['Z3950']['ES']['ITEMORDER'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 9, 4]), 'val': [1, 2, 840, 10003, 9, 4]} +oids['Z3950']['ES']['DBUPDATE'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 9, 5]), 'val': [1, 2, 840, 10003, 9, 5]} +oids['Z3950']['ES']['DBUPDATE']['REV'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 9, 5, 1]), 'val': [1, 2, 840, 10003, 9, 5, 1]} +oids['Z3950']['ES']['DBUPDATE']['REV']['1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 9, 5, 1, 1]), 'val': [1, 2, 840, 10003, 9, 5, 1, 1]} +oids['Z3950']['ES']['EXPORTSPEC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 9, 6]), 'val': [1, 2, 840, 10003, 9, 6]} +oids['Z3950']['ES']['EXPORTINV'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 9, 7]), 'val': [1, 2, 840, 10003, 9, 7]} +oids['Z3950']['USR']['SEARCHRES1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 1]), 'val': [1, 2, 840, 10003, 10, 1]} +oids['Z3950']['USR']['CHARSETNEG'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 2]), 'val': [1, 2, 840, 10003, 10, 2]} +oids['Z3950']['USR']['INFO1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 3]), 'val': [1, 2, 840, 10003, 10, 3]} +oids['Z3950']['USR']['SEARCHTERMS1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 4]), 'val': [1, 2, 840, 10003, 10, 4]} +oids['Z3950']['USR']['SEARCHTERMS2'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 5]), 'val': [1, 2, 840, 10003, 10, 5]} +oids['Z3950']['USR']['DATETIME'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 6]), 'val': [1, 2, 840, 10003, 10, 6]} +oids['Z3950']['USR']['INSERTACTIONQUAL'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 9]), 'val': [1, 2, 840, 10003, 10, 9]} +oids['Z3950']['USR']['EDITACTIONQUAL'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 10]), 'val': [1, 2, 840, 10003, 10, 10]} +oids['Z3950']['USR']['AUTHFILE'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 11]), 'val': [1, 2, 840, 10003, 10, 11]} +oids['Z3950']['USR']['PRIVATE'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 1000]), 'val': [1, 2, 840, 10003, 10, 1000]} +oids['Z3950']['USR']['PRIVATE']['OCLC'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 1000, 17]), 'val': [1, 2, 840, 10003, 10, 1000, 17]} +oids['Z3950']['USR']['PRIVATE']['OCLC']['INFO'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 10, 1000, 17, 1]), 'val': [1, 2, 840, 10003, 10, 1000, 17, 1]} +oids['Z3950']['SPEC']['ESPEC1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 11, 1]), 'val': [1, 2, 840, 10003, 11, 1]} +oids['Z3950']['SPEC']['ESPEC2'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 11, 2]), 'val': [1, 2, 840, 10003, 11, 2]} +oids['Z3950']['SPEC']['ESPECQ'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 11, 3]), 'val': [1, 2, 840, 10003, 11, 3]} +oids['Z3950']['VAR']['VARIANT1'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 12, 1]), 'val': [1, 2, 840, 10003, 12, 1]} +oids['Z3950']['SCHEMA']['WAIS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 1]), 'val': [1, 2, 840, 10003, 13, 1]} +oids['Z3950']['SCHEMA']['GILS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 2]), 'val': [1, 2, 840, 10003, 13, 2]} +oids['Z3950']['SCHEMA']['COLLECTIONS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 3]), 'val': [1, 2, 840, 10003, 13, 3]} +oids['Z3950']['SCHEMA']['GEO'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 4]), 'val': [1, 2, 840, 10003, 13, 4]} +oids['Z3950']['SCHEMA']['CIMI'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 5]), 'val': [1, 2, 840, 10003, 13, 5]} +oids['Z3950']['SCHEMA']['UPDATE'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 6]), 'val': [1, 2, 840, 10003, 13, 6]} +oids['Z3950']['SCHEMA']['HOLDINGS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 7]), 'val': [1, 2, 840, 10003, 13, 7]} +oids['Z3950']['SCHEMA']['HOLDINGS']['11'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 7, 1]), 'val': [1, 2, 840, 10003, 13, 7, 1]} +oids['Z3950']['SCHEMA']['HOLDINGS']['12'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 7, 2]), 'val': [1, 2, 840, 10003, 13, 7, 2]} +oids['Z3950']['SCHEMA']['HOLDINGS']['14'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 7, 4]), 'val': [1, 2, 840, 10003, 13, 7, 4]} +oids['Z3950']['SCHEMA']['ZTHES'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 1]), 'val': [1, 2, 840, 10003, 13, 1]} +oids['Z3950']['SCHEMA']['INSERT'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 1]), 'val': [1, 2, 840, 10003, 13, 1]} +oids['Z3950']['SCHEMA']['EDIT'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 13, 1]), 'val': [1, 2, 840, 10003, 13, 1]} +oids['Z3950']['TAGSET']['M'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 14, 1]), 'val': [1, 2, 840, 10003, 14, 1]} +oids['Z3950']['TAGSET']['G'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 14, 2]), 'val': [1, 2, 840, 10003, 14, 2]} +oids['Z3950']['TAGSET']['STAS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 14, 3]), 'val': [1, 2, 840, 10003, 14, 3]} +oids['Z3950']['TAGSET']['GILS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 14, 4]), 'val': [1, 2, 840, 10003, 14, 4]} +oids['Z3950']['TAGSET']['COLLECTIONS'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 14, 5]), 'val': [1, 2, 840, 10003, 14, 5]} +oids['Z3950']['TAGSET']['CIMI'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 14, 6]), 'val': [1, 2, 840, 10003, 14, 6]} +oids['Z3950']['TAGSET']['UPDATE'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 14, 7]), 'val': [1, 2, 840, 10003, 14, 7]} +oids['Z3950']['TAGSET']['ZTHES'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 14, 8]), 'val': [1, 2, 840, 10003, 14, 8]} +oids['Z3950']['NEG']['CHARSET2'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 15, 1]), 'val': [1, 2, 840, 10003, 15, 1]} +oids['Z3950']['NEG']['ES'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 15, 2]), 'val': [1, 2, 840, 10003, 15, 2]} +oids['Z3950']['NEG']['CHARSET3'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 15, 3]), 'val': [1, 2, 840, 10003, 15, 3]} +oids['Z3950']['NEG']['PRIVATE'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 15, 1000]), 'val': [1, 2, 840, 10003, 15, 1000]} +oids['Z3950']['NEG']['PRIVATE']['INDEXDATA'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 15, 1000, 81]), 'val': [1, 2, 840, 10003, 15, 1000, 81]} +oids['Z3950']['NEG']['PRIVATE']['INDEXDATA']['CHARSETNAME'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 15, 1000, 81, 1]), 'val': [1, 2, 840, 10003, 15, 1000, 81, 1]} +oids['Z3950']['QUERY']['SQL'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 16, 1]), 'val': [1, 2, 840, 10003, 16, 1]} +oids['Z3950']['QUERY']['CQL'] = {'oid': asn1.OidVal([1, 2, 840, 10003, 16, 2]), 'val': [1, 2, 840, 10003, 16, 2]} +oids['UNICODE'] = {'oid': asn1.OidVal([1, 0, 10646]), 'val': [1, 0, 10646]} +oids['UNICODE']['PART1'] = {'oid': asn1.OidVal([1, 0, 10646, 1]), 'val': [1, 0, 10646, 1]} +oids['UNICODE']['PART1']['XFERSYN'] = {'oid': asn1.OidVal([1, 0, 10646, 1, 0]), 'val': [1, 0, 10646, 1, 0]} +oids['UNICODE']['PART1']['XFERSYN']['UCS2'] = {'oid': asn1.OidVal([1, 0, 10646, 1, 0, 2]), 'val': [1, 0, 10646, 1, 0, 2]} +oids['UNICODE']['PART1']['XFERSYN']['UCS4'] = {'oid': asn1.OidVal([1, 0, 10646, 1, 0, 4]), 'val': [1, 0, 10646, 1, 0, 4]} +oids['UNICODE']['PART1']['XFERSYN']['UTF16'] = {'oid': asn1.OidVal([1, 0, 10646, 1, 0, 5]), 'val': [1, 0, 10646, 1, 0, 5]} +oids['UNICODE']['PART1']['XFERSYN']['UTF8'] = {'oid': asn1.OidVal([1, 0, 10646, 1, 0, 8]), 'val': [1, 0, 10646, 1, 0, 8]} +UNICODE = [1, 0, 10646] +UNICODE_ov = asn1.OidVal([1, 0, 10646]) +UNICODE_PART1 = [1, 0, 10646, 1] +UNICODE_PART1_ov = asn1.OidVal([1, 0, 10646, 1]) +UNICODE_PART1_XFERSYN = [1, 0, 10646, 1, 0] +UNICODE_PART1_XFERSYN_ov = asn1.OidVal([1, 0, 10646, 1, 0]) +UNICODE_PART1_XFERSYN_UCS2 = [1, 0, 10646, 1, 0, 2] +UNICODE_PART1_XFERSYN_UCS2_ov = asn1.OidVal([1, 0, 10646, 1, 0, 2]) +UNICODE_PART1_XFERSYN_UCS4 = [1, 0, 10646, 1, 0, 4] +UNICODE_PART1_XFERSYN_UCS4_ov = asn1.OidVal([1, 0, 10646, 1, 0, 4]) +UNICODE_PART1_XFERSYN_UTF16 = [1, 0, 10646, 1, 0, 5] +UNICODE_PART1_XFERSYN_UTF16_ov = asn1.OidVal([1, 0, 10646, 1, 0, 5]) +UNICODE_PART1_XFERSYN_UTF8 = [1, 0, 10646, 1, 0, 8] +UNICODE_PART1_XFERSYN_UTF8_ov = asn1.OidVal([1, 0, 10646, 1, 0, 8]) +Z3950 = [1, 2, 840, 10003] +Z3950_ov = asn1.OidVal([1, 2, 840, 10003]) +Z3950_ACCESS = [1, 2, 840, 10003, 8] +Z3950_ACCESS_ov = asn1.OidVal([1, 2, 840, 10003, 8]) +Z3950_ACCESS_DES1 = [1, 2, 840, 10003, 8, 2] +Z3950_ACCESS_DES1_ov = asn1.OidVal([1, 2, 840, 10003, 8, 2]) +Z3950_ACCESS_KRB1 = [1, 2, 840, 10003, 8, 3] +Z3950_ACCESS_KRB1_ov = asn1.OidVal([1, 2, 840, 10003, 8, 3]) +Z3950_ACCESS_PROMPT1 = [1, 2, 840, 10003, 8, 1] +Z3950_ACCESS_PROMPT1_ov = asn1.OidVal([1, 2, 840, 10003, 8, 1]) +Z3950_ATTRS = [1, 2, 840, 10003, 3] +Z3950_ATTRS_ov = asn1.OidVal([1, 2, 840, 10003, 3]) +Z3950_ATTRS_BIB1 = [1, 2, 840, 10003, 3, 1] +Z3950_ATTRS_BIB1_ov = asn1.OidVal([1, 2, 840, 10003, 3, 1]) +Z3950_ATTRS_BIB2 = [1, 2, 840, 10003, 3, 18] +Z3950_ATTRS_BIB2_ov = asn1.OidVal([1, 2, 840, 10003, 3, 18]) +Z3950_ATTRS_CCL1 = [1, 2, 840, 10003, 3, 4] +Z3950_ATTRS_CCL1_ov = asn1.OidVal([1, 2, 840, 10003, 3, 4]) +Z3950_ATTRS_CIMI1 = [1, 2, 840, 10003, 3, 8] +Z3950_ATTRS_CIMI1_ov = asn1.OidVal([1, 2, 840, 10003, 3, 8]) +Z3950_ATTRS_COLLECTIONS1 = [1, 2, 840, 10003, 3, 7] +Z3950_ATTRS_COLLECTIONS1_ov = asn1.OidVal([1, 2, 840, 10003, 3, 7]) +Z3950_ATTRS_DAN1 = [1, 2, 840, 10003, 3, 15] +Z3950_ATTRS_DAN1_ov = asn1.OidVal([1, 2, 840, 10003, 3, 15]) +Z3950_ATTRS_EXP1 = [1, 2, 840, 10003, 3, 2] +Z3950_ATTRS_EXP1_ov = asn1.OidVal([1, 2, 840, 10003, 3, 2]) +Z3950_ATTRS_EXT1 = [1, 2, 840, 10003, 3, 3] +Z3950_ATTRS_EXT1_ov = asn1.OidVal([1, 2, 840, 10003, 3, 3]) +Z3950_ATTRS_FIN1 = [1, 2, 840, 10003, 3, 14] +Z3950_ATTRS_FIN1_ov = asn1.OidVal([1, 2, 840, 10003, 3, 14]) +Z3950_ATTRS_GEO = [1, 2, 840, 10003, 3, 9] +Z3950_ATTRS_GEO_ov = asn1.OidVal([1, 2, 840, 10003, 3, 9]) +Z3950_ATTRS_GILS = [1, 2, 840, 10003, 3, 5] +Z3950_ATTRS_GILS_ov = asn1.OidVal([1, 2, 840, 10003, 3, 5]) +Z3950_ATTRS_HOLD = [1, 2, 840, 10003, 3, 16] +Z3950_ATTRS_HOLD_ov = asn1.OidVal([1, 2, 840, 10003, 3, 16]) +Z3950_ATTRS_MARC = [1, 2, 840, 10003, 3, 17] +Z3950_ATTRS_MARC_ov = asn1.OidVal([1, 2, 840, 10003, 3, 17]) +Z3950_ATTRS_STAS = [1, 2, 840, 10003, 3, 6] +Z3950_ATTRS_STAS_ov = asn1.OidVal([1, 2, 840, 10003, 3, 6]) +Z3950_ATTRS_UTIL = [1, 2, 840, 10003, 3, 11] +Z3950_ATTRS_UTIL_ov = asn1.OidVal([1, 2, 840, 10003, 3, 11]) +Z3950_ATTRS_XD1 = [1, 2, 840, 10003, 3, 12] +Z3950_ATTRS_XD1_ov = asn1.OidVal([1, 2, 840, 10003, 3, 12]) +Z3950_ATTRS_ZBIG = [1, 2, 840, 10003, 3, 10] +Z3950_ATTRS_ZBIG_ov = asn1.OidVal([1, 2, 840, 10003, 3, 10]) +Z3950_ATTRS_ZEEREX = [1, 2, 840, 10003, 3, 19] +Z3950_ATTRS_ZEEREX_ov = asn1.OidVal([1, 2, 840, 10003, 3, 19]) +Z3950_ATTRS_ZTHES = [1, 2, 840, 10003, 3, 13] +Z3950_ATTRS_ZTHES_ov = asn1.OidVal([1, 2, 840, 10003, 3, 13]) +Z3950_DIAG = [1, 2, 840, 10003, 4] +Z3950_DIAG_ov = asn1.OidVal([1, 2, 840, 10003, 4]) +Z3950_DIAG_BIB1 = [1, 2, 840, 10003, 4, 1] +Z3950_DIAG_BIB1_ov = asn1.OidVal([1, 2, 840, 10003, 4, 1]) +Z3950_DIAG_DIAG1 = [1, 2, 840, 10003, 4, 2] +Z3950_DIAG_DIAG1_ov = asn1.OidVal([1, 2, 840, 10003, 4, 2]) +Z3950_DIAG_ES = [1, 2, 840, 10003, 4, 3] +Z3950_DIAG_ES_ov = asn1.OidVal([1, 2, 840, 10003, 4, 3]) +Z3950_DIAG_GENERAL = [1, 2, 840, 10003, 4, 4] +Z3950_DIAG_GENERAL_ov = asn1.OidVal([1, 2, 840, 10003, 4, 4]) +Z3950_ES = [1, 2, 840, 10003, 9] +Z3950_ES_ov = asn1.OidVal([1, 2, 840, 10003, 9]) +Z3950_ES_DBUPDATE = [1, 2, 840, 10003, 9, 5] +Z3950_ES_DBUPDATE_ov = asn1.OidVal([1, 2, 840, 10003, 9, 5]) +Z3950_ES_DBUPDATE_REV = [1, 2, 840, 10003, 9, 5, 1] +Z3950_ES_DBUPDATE_REV_ov = asn1.OidVal([1, 2, 840, 10003, 9, 5, 1]) +Z3950_ES_DBUPDATE_REV_1 = [1, 2, 840, 10003, 9, 5, 1, 1] +Z3950_ES_DBUPDATE_REV_1_ov = asn1.OidVal([1, 2, 840, 10003, 9, 5, 1, 1]) +Z3950_ES_EXPORTINV = [1, 2, 840, 10003, 9, 7] +Z3950_ES_EXPORTINV_ov = asn1.OidVal([1, 2, 840, 10003, 9, 7]) +Z3950_ES_EXPORTSPEC = [1, 2, 840, 10003, 9, 6] +Z3950_ES_EXPORTSPEC_ov = asn1.OidVal([1, 2, 840, 10003, 9, 6]) +Z3950_ES_ITEMORDER = [1, 2, 840, 10003, 9, 4] +Z3950_ES_ITEMORDER_ov = asn1.OidVal([1, 2, 840, 10003, 9, 4]) +Z3950_ES_PERIODQRY = [1, 2, 840, 10003, 9, 3] +Z3950_ES_PERIODQRY_ov = asn1.OidVal([1, 2, 840, 10003, 9, 3]) +Z3950_ES_PERSISTQRY = [1, 2, 840, 10003, 9, 2] +Z3950_ES_PERSISTQRY_ov = asn1.OidVal([1, 2, 840, 10003, 9, 2]) +Z3950_ES_PERSISTRS = [1, 2, 840, 10003, 9, 1] +Z3950_ES_PERSISTRS_ov = asn1.OidVal([1, 2, 840, 10003, 9, 1]) +Z3950_NEG = [1, 2, 840, 10003, 15] +Z3950_NEG_ov = asn1.OidVal([1, 2, 840, 10003, 15]) +Z3950_NEG_CHARSET2 = [1, 2, 840, 10003, 15, 1] +Z3950_NEG_CHARSET2_ov = asn1.OidVal([1, 2, 840, 10003, 15, 1]) +Z3950_NEG_CHARSET3 = [1, 2, 840, 10003, 15, 3] +Z3950_NEG_CHARSET3_ov = asn1.OidVal([1, 2, 840, 10003, 15, 3]) +Z3950_NEG_ES = [1, 2, 840, 10003, 15, 2] +Z3950_NEG_ES_ov = asn1.OidVal([1, 2, 840, 10003, 15, 2]) +Z3950_NEG_PRIVATE = [1, 2, 840, 10003, 15, 1000] +Z3950_NEG_PRIVATE_ov = asn1.OidVal([1, 2, 840, 10003, 15, 1000]) +Z3950_NEG_PRIVATE_INDEXDATA = [1, 2, 840, 10003, 15, 1000, 81] +Z3950_NEG_PRIVATE_INDEXDATA_ov = asn1.OidVal([1, 2, 840, 10003, 15, 1000, 81]) +Z3950_NEG_PRIVATE_INDEXDATA_CHARSETNAME = [1, 2, 840, 10003, 15, 1000, 81, 1] +Z3950_NEG_PRIVATE_INDEXDATA_CHARSETNAME_ov = asn1.OidVal([1, 2, 840, 10003, 15, 1000, 81, 1]) +Z3950_QUERY = [1, 2, 840, 10003, 16] +Z3950_QUERY_ov = asn1.OidVal([1, 2, 840, 10003, 16]) +Z3950_QUERY_CQL = [1, 2, 840, 10003, 16, 2] +Z3950_QUERY_CQL_ov = asn1.OidVal([1, 2, 840, 10003, 16, 2]) +Z3950_QUERY_SQL = [1, 2, 840, 10003, 16, 1] +Z3950_QUERY_SQL_ov = asn1.OidVal([1, 2, 840, 10003, 16, 1]) +Z3950_RECSYN = [1, 2, 840, 10003, 5] +Z3950_RECSYN_ov = asn1.OidVal([1, 2, 840, 10003, 5]) +Z3950_RECSYN_AUSMARC = [1, 2, 840, 10003, 5, 20] +Z3950_RECSYN_AUSMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 20]) +Z3950_RECSYN_CANMARC = [1, 2, 840, 10003, 5, 17] +Z3950_RECSYN_CANMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 17]) +Z3950_RECSYN_CATMARC = [1, 2, 840, 10003, 5, 22] +Z3950_RECSYN_CATMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 22]) +Z3950_RECSYN_CCF = [1, 2, 840, 10003, 5, 3] +Z3950_RECSYN_CCF_ov = asn1.OidVal([1, 2, 840, 10003, 5, 3]) +Z3950_RECSYN_COMARC = [1, 2, 840, 10003, 5, 33] +Z3950_RECSYN_COMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 33]) +Z3950_RECSYN_DANMARC = [1, 2, 840, 10003, 5, 14] +Z3950_RECSYN_DANMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 14]) +Z3950_RECSYN_ES = [1, 2, 840, 10003, 5, 106] +Z3950_RECSYN_ES_ov = asn1.OidVal([1, 2, 840, 10003, 5, 106]) +Z3950_RECSYN_EXPLAIN = [1, 2, 840, 10003, 5, 100] +Z3950_RECSYN_EXPLAIN_ov = asn1.OidVal([1, 2, 840, 10003, 5, 100]) +Z3950_RECSYN_FINMARC = [1, 2, 840, 10003, 5, 15] +Z3950_RECSYN_FINMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 15]) +Z3950_RECSYN_FINMARC2000 = [1, 2, 840, 10003, 5, 31] +Z3950_RECSYN_FINMARC2000_ov = asn1.OidVal([1, 2, 840, 10003, 5, 31]) +Z3950_RECSYN_FRAGMENT = [1, 2, 840, 10003, 5, 107] +Z3950_RECSYN_FRAGMENT_ov = asn1.OidVal([1, 2, 840, 10003, 5, 107]) +Z3950_RECSYN_GRS0 = [1, 2, 840, 10003, 5, 104] +Z3950_RECSYN_GRS0_ov = asn1.OidVal([1, 2, 840, 10003, 5, 104]) +Z3950_RECSYN_GRS1 = [1, 2, 840, 10003, 5, 105] +Z3950_RECSYN_GRS1_ov = asn1.OidVal([1, 2, 840, 10003, 5, 105]) +Z3950_RECSYN_HUNMARC = [1, 2, 840, 10003, 5, 29] +Z3950_RECSYN_HUNMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 29]) +Z3950_RECSYN_IBERMARC = [1, 2, 840, 10003, 5, 21] +Z3950_RECSYN_IBERMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 21]) +Z3950_RECSYN_INTERMARC = [1, 2, 840, 10003, 5, 2] +Z3950_RECSYN_INTERMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 2]) +Z3950_RECSYN_ISDSMARC = [1, 2, 840, 10003, 5, 27] +Z3950_RECSYN_ISDSMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 27]) +Z3950_RECSYN_JPMARC = [1, 2, 840, 10003, 5, 24] +Z3950_RECSYN_JPMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 24]) +Z3950_RECSYN_LIBRISMARC = [1, 2, 840, 10003, 5, 13] +Z3950_RECSYN_LIBRISMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 13]) +Z3950_RECSYN_MAB = [1, 2, 840, 10003, 5, 16] +Z3950_RECSYN_MAB_ov = asn1.OidVal([1, 2, 840, 10003, 5, 16]) +Z3950_RECSYN_MALMARC = [1, 2, 840, 10003, 5, 23] +Z3950_RECSYN_MALMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 23]) +Z3950_RECSYN_MARC21FIN = [1, 2, 840, 10003, 5, 32] +Z3950_RECSYN_MARC21FIN_ov = asn1.OidVal([1, 2, 840, 10003, 5, 32]) +Z3950_RECSYN_MIME = [1, 2, 840, 10003, 5, 109] +Z3950_RECSYN_MIME_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109]) +Z3950_RECSYN_MIME_GIF = [1, 2, 840, 10003, 5, 109, 5] +Z3950_RECSYN_MIME_GIF_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109, 5]) +Z3950_RECSYN_MIME_HTML = [1, 2, 840, 10003, 5, 109, 3] +Z3950_RECSYN_MIME_HTML_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109, 3]) +Z3950_RECSYN_MIME_JPEG = [1, 2, 840, 10003, 5, 109, 6] +Z3950_RECSYN_MIME_JPEG_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109, 6]) +Z3950_RECSYN_MIME_MPEG = [1, 2, 840, 10003, 5, 109, 8] +Z3950_RECSYN_MIME_MPEG_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109, 8]) +Z3950_RECSYN_MIME_PDF = [1, 2, 840, 10003, 5, 109, 1] +Z3950_RECSYN_MIME_PDF_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109, 1]) +Z3950_RECSYN_MIME_PNG = [1, 2, 840, 10003, 5, 109, 7] +Z3950_RECSYN_MIME_PNG_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109, 7]) +Z3950_RECSYN_MIME_POSTSCRIPT = [1, 2, 840, 10003, 5, 109, 2] +Z3950_RECSYN_MIME_POSTSCRIPT_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109, 2]) +Z3950_RECSYN_MIME_SGML = [1, 2, 840, 10003, 5, 109, 9] +Z3950_RECSYN_MIME_SGML_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109, 9]) +Z3950_RECSYN_MIME_TIFF = [1, 2, 840, 10003, 5, 109, 4] +Z3950_RECSYN_MIME_TIFF_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109, 4]) +Z3950_RECSYN_MIME_XML = [1, 2, 840, 10003, 5, 109, 10] +Z3950_RECSYN_MIME_XML_ov = asn1.OidVal([1, 2, 840, 10003, 5, 109, 10]) +Z3950_RECSYN_NACSISCATP = [1, 2, 840, 10003, 5, 30] +Z3950_RECSYN_NACSISCATP_ov = asn1.OidVal([1, 2, 840, 10003, 5, 30]) +Z3950_RECSYN_NORMARC = [1, 2, 840, 10003, 5, 12] +Z3950_RECSYN_NORMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 12]) +Z3950_RECSYN_OPAC = [1, 2, 840, 10003, 5, 102] +Z3950_RECSYN_OPAC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 102]) +Z3950_RECSYN_PICAMARC = [1, 2, 840, 10003, 5, 19] +Z3950_RECSYN_PICAMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 19]) +Z3950_RECSYN_RUSMARC = [1, 2, 840, 10003, 5, 28] +Z3950_RECSYN_RUSMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 28]) +Z3950_RECSYN_SBNMARC = [1, 2, 840, 10003, 5, 18] +Z3950_RECSYN_SBNMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 18]) +Z3950_RECSYN_SIGLEMARC = [1, 2, 840, 10003, 5, 26] +Z3950_RECSYN_SIGLEMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 26]) +Z3950_RECSYN_SQL = [1, 2, 840, 10003, 5, 111] +Z3950_RECSYN_SQL_ov = asn1.OidVal([1, 2, 840, 10003, 5, 111]) +Z3950_RECSYN_SUMMARY = [1, 2, 840, 10003, 5, 103] +Z3950_RECSYN_SUMMARY_ov = asn1.OidVal([1, 2, 840, 10003, 5, 103]) +Z3950_RECSYN_SUTRS = [1, 2, 840, 10003, 5, 101] +Z3950_RECSYN_SUTRS_ov = asn1.OidVal([1, 2, 840, 10003, 5, 101]) +Z3950_RECSYN_SWEMARC = [1, 2, 840, 10003, 5, 25] +Z3950_RECSYN_SWEMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 25]) +Z3950_RECSYN_UKMARC = [1, 2, 840, 10003, 5, 11] +Z3950_RECSYN_UKMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 11]) +Z3950_RECSYN_UNIMARC = [1, 2, 840, 10003, 5, 1] +Z3950_RECSYN_UNIMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 1]) +Z3950_RECSYN_USMARC = [1, 2, 840, 10003, 5, 10] +Z3950_RECSYN_USMARC_ov = asn1.OidVal([1, 2, 840, 10003, 5, 10]) +Z3950_RECSYN_USMARC_AUTH = [1, 2, 840, 10003, 5, 10, 2] +Z3950_RECSYN_USMARC_AUTH_ov = asn1.OidVal([1, 2, 840, 10003, 5, 10, 2]) +Z3950_RECSYN_USMARC_BIBLIO = [1, 2, 840, 10003, 5, 10, 1] +Z3950_RECSYN_USMARC_BIBLIO_ov = asn1.OidVal([1, 2, 840, 10003, 5, 10, 1]) +Z3950_RECSYN_USMARC_CLASS = [1, 2, 840, 10003, 5, 10, 5] +Z3950_RECSYN_USMARC_CLASS_ov = asn1.OidVal([1, 2, 840, 10003, 5, 10, 5]) +Z3950_RECSYN_USMARC_COMMUNITY = [1, 2, 840, 10003, 5, 10, 4] +Z3950_RECSYN_USMARC_COMMUNITY_ov = asn1.OidVal([1, 2, 840, 10003, 5, 10, 4]) +Z3950_RECSYN_USMARC_HOLD = [1, 2, 840, 10003, 5, 10, 3] +Z3950_RECSYN_USMARC_HOLD_ov = asn1.OidVal([1, 2, 840, 10003, 5, 10, 3]) +Z3950_RECSYN_ZMIME = [1, 2, 840, 10003, 5, 110] +Z3950_RECSYN_ZMIME_ov = asn1.OidVal([1, 2, 840, 10003, 5, 110]) +Z3950_RECSYN_ZMIME_TIFFB = [1, 2, 840, 10003, 5, 110, 1] +Z3950_RECSYN_ZMIME_TIFFB_ov = asn1.OidVal([1, 2, 840, 10003, 5, 110, 1]) +Z3950_RECSYN_ZMIME_WAV = [1, 2, 840, 10003, 5, 110, 2] +Z3950_RECSYN_ZMIME_WAV_ov = asn1.OidVal([1, 2, 840, 10003, 5, 110, 2]) +Z3950_RRF = [1, 2, 840, 10003, 7] +Z3950_RRF_ov = asn1.OidVal([1, 2, 840, 10003, 7]) +Z3950_RRF_RESOURCE1 = [1, 2, 840, 10003, 7, 1] +Z3950_RRF_RESOURCE1_ov = asn1.OidVal([1, 2, 840, 10003, 7, 1]) +Z3950_RRF_RESOURCE2 = [1, 2, 840, 10003, 7, 2] +Z3950_RRF_RESOURCE2_ov = asn1.OidVal([1, 2, 840, 10003, 7, 2]) +Z3950_SCHEMA = [1, 2, 840, 10003, 13] +Z3950_SCHEMA_ov = asn1.OidVal([1, 2, 840, 10003, 13]) +Z3950_SCHEMA_CIMI = [1, 2, 840, 10003, 13, 5] +Z3950_SCHEMA_CIMI_ov = asn1.OidVal([1, 2, 840, 10003, 13, 5]) +Z3950_SCHEMA_COLLECTIONS = [1, 2, 840, 10003, 13, 3] +Z3950_SCHEMA_COLLECTIONS_ov = asn1.OidVal([1, 2, 840, 10003, 13, 3]) +Z3950_SCHEMA_EDIT = [1, 2, 840, 10003, 13, 1] +Z3950_SCHEMA_EDIT_ov = asn1.OidVal([1, 2, 840, 10003, 13, 1]) +Z3950_SCHEMA_GEO = [1, 2, 840, 10003, 13, 4] +Z3950_SCHEMA_GEO_ov = asn1.OidVal([1, 2, 840, 10003, 13, 4]) +Z3950_SCHEMA_GILS = [1, 2, 840, 10003, 13, 2] +Z3950_SCHEMA_GILS_ov = asn1.OidVal([1, 2, 840, 10003, 13, 2]) +Z3950_SCHEMA_HOLDINGS = [1, 2, 840, 10003, 13, 7] +Z3950_SCHEMA_HOLDINGS_ov = asn1.OidVal([1, 2, 840, 10003, 13, 7]) +Z3950_SCHEMA_HOLDINGS_11 = [1, 2, 840, 10003, 13, 7, 1] +Z3950_SCHEMA_HOLDINGS_11_ov = asn1.OidVal([1, 2, 840, 10003, 13, 7, 1]) +Z3950_SCHEMA_HOLDINGS_12 = [1, 2, 840, 10003, 13, 7, 2] +Z3950_SCHEMA_HOLDINGS_12_ov = asn1.OidVal([1, 2, 840, 10003, 13, 7, 2]) +Z3950_SCHEMA_HOLDINGS_14 = [1, 2, 840, 10003, 13, 7, 4] +Z3950_SCHEMA_HOLDINGS_14_ov = asn1.OidVal([1, 2, 840, 10003, 13, 7, 4]) +Z3950_SCHEMA_INSERT = [1, 2, 840, 10003, 13, 1] +Z3950_SCHEMA_INSERT_ov = asn1.OidVal([1, 2, 840, 10003, 13, 1]) +Z3950_SCHEMA_UPDATE = [1, 2, 840, 10003, 13, 6] +Z3950_SCHEMA_UPDATE_ov = asn1.OidVal([1, 2, 840, 10003, 13, 6]) +Z3950_SCHEMA_WAIS = [1, 2, 840, 10003, 13, 1] +Z3950_SCHEMA_WAIS_ov = asn1.OidVal([1, 2, 840, 10003, 13, 1]) +Z3950_SCHEMA_ZTHES = [1, 2, 840, 10003, 13, 1] +Z3950_SCHEMA_ZTHES_ov = asn1.OidVal([1, 2, 840, 10003, 13, 1]) +Z3950_SPEC = [1, 2, 840, 10003, 11] +Z3950_SPEC_ov = asn1.OidVal([1, 2, 840, 10003, 11]) +Z3950_SPEC_ESPEC1 = [1, 2, 840, 10003, 11, 1] +Z3950_SPEC_ESPEC1_ov = asn1.OidVal([1, 2, 840, 10003, 11, 1]) +Z3950_SPEC_ESPEC2 = [1, 2, 840, 10003, 11, 2] +Z3950_SPEC_ESPEC2_ov = asn1.OidVal([1, 2, 840, 10003, 11, 2]) +Z3950_SPEC_ESPECQ = [1, 2, 840, 10003, 11, 3] +Z3950_SPEC_ESPECQ_ov = asn1.OidVal([1, 2, 840, 10003, 11, 3]) +Z3950_TAGSET = [1, 2, 840, 10003, 14] +Z3950_TAGSET_ov = asn1.OidVal([1, 2, 840, 10003, 14]) +Z3950_TAGSET_CIMI = [1, 2, 840, 10003, 14, 6] +Z3950_TAGSET_CIMI_ov = asn1.OidVal([1, 2, 840, 10003, 14, 6]) +Z3950_TAGSET_COLLECTIONS = [1, 2, 840, 10003, 14, 5] +Z3950_TAGSET_COLLECTIONS_ov = asn1.OidVal([1, 2, 840, 10003, 14, 5]) +Z3950_TAGSET_G = [1, 2, 840, 10003, 14, 2] +Z3950_TAGSET_G_ov = asn1.OidVal([1, 2, 840, 10003, 14, 2]) +Z3950_TAGSET_GILS = [1, 2, 840, 10003, 14, 4] +Z3950_TAGSET_GILS_ov = asn1.OidVal([1, 2, 840, 10003, 14, 4]) +Z3950_TAGSET_M = [1, 2, 840, 10003, 14, 1] +Z3950_TAGSET_M_ov = asn1.OidVal([1, 2, 840, 10003, 14, 1]) +Z3950_TAGSET_STAS = [1, 2, 840, 10003, 14, 3] +Z3950_TAGSET_STAS_ov = asn1.OidVal([1, 2, 840, 10003, 14, 3]) +Z3950_TAGSET_UPDATE = [1, 2, 840, 10003, 14, 7] +Z3950_TAGSET_UPDATE_ov = asn1.OidVal([1, 2, 840, 10003, 14, 7]) +Z3950_TAGSET_ZTHES = [1, 2, 840, 10003, 14, 8] +Z3950_TAGSET_ZTHES_ov = asn1.OidVal([1, 2, 840, 10003, 14, 8]) +Z3950_TRANSFER = [1, 2, 840, 10003, 6] +Z3950_TRANSFER_ov = asn1.OidVal([1, 2, 840, 10003, 6]) +Z3950_USR = [1, 2, 840, 10003, 10] +Z3950_USR_ov = asn1.OidVal([1, 2, 840, 10003, 10]) +Z3950_USR_AUTHFILE = [1, 2, 840, 10003, 10, 11] +Z3950_USR_AUTHFILE_ov = asn1.OidVal([1, 2, 840, 10003, 10, 11]) +Z3950_USR_CHARSETNEG = [1, 2, 840, 10003, 10, 2] +Z3950_USR_CHARSETNEG_ov = asn1.OidVal([1, 2, 840, 10003, 10, 2]) +Z3950_USR_DATETIME = [1, 2, 840, 10003, 10, 6] +Z3950_USR_DATETIME_ov = asn1.OidVal([1, 2, 840, 10003, 10, 6]) +Z3950_USR_EDITACTIONQUAL = [1, 2, 840, 10003, 10, 10] +Z3950_USR_EDITACTIONQUAL_ov = asn1.OidVal([1, 2, 840, 10003, 10, 10]) +Z3950_USR_INFO1 = [1, 2, 840, 10003, 10, 3] +Z3950_USR_INFO1_ov = asn1.OidVal([1, 2, 840, 10003, 10, 3]) +Z3950_USR_INSERTACTIONQUAL = [1, 2, 840, 10003, 10, 9] +Z3950_USR_INSERTACTIONQUAL_ov = asn1.OidVal([1, 2, 840, 10003, 10, 9]) +Z3950_USR_PRIVATE = [1, 2, 840, 10003, 10, 1000] +Z3950_USR_PRIVATE_ov = asn1.OidVal([1, 2, 840, 10003, 10, 1000]) +Z3950_USR_PRIVATE_OCLC = [1, 2, 840, 10003, 10, 1000, 17] +Z3950_USR_PRIVATE_OCLC_ov = asn1.OidVal([1, 2, 840, 10003, 10, 1000, 17]) +Z3950_USR_PRIVATE_OCLC_INFO = [1, 2, 840, 10003, 10, 1000, 17, 1] +Z3950_USR_PRIVATE_OCLC_INFO_ov = asn1.OidVal([1, 2, 840, 10003, 10, 1000, 17, 1]) +Z3950_USR_SEARCHRES1 = [1, 2, 840, 10003, 10, 1] +Z3950_USR_SEARCHRES1_ov = asn1.OidVal([1, 2, 840, 10003, 10, 1]) +Z3950_USR_SEARCHTERMS1 = [1, 2, 840, 10003, 10, 4] +Z3950_USR_SEARCHTERMS1_ov = asn1.OidVal([1, 2, 840, 10003, 10, 4]) +Z3950_USR_SEARCHTERMS2 = [1, 2, 840, 10003, 10, 5] +Z3950_USR_SEARCHTERMS2_ov = asn1.OidVal([1, 2, 840, 10003, 10, 5]) +Z3950_VAR = [1, 2, 840, 10003, 12] +Z3950_VAR_ov = asn1.OidVal([1, 2, 840, 10003, 12]) +Z3950_VAR_VARIANT1 = [1, 2, 840, 10003, 12, 1] +Z3950_VAR_VARIANT1_ov = asn1.OidVal([1, 2, 840, 10003, 12, 1]) diff --git a/python/PyZ3950/pqf.py b/python/PyZ3950/pqf.py new file mode 100644 index 0000000..3103685 --- /dev/null +++ b/python/PyZ3950/pqf.py @@ -0,0 +1,260 @@ +#!/usr/local/bin/python2.3 + +try: + from cStringIO import StringIO +except: + from StringIO import StringIO +from PyZ3950 import z3950, oids,asn1 +from PyZ3950.zdefs import make_attr +from types import IntType, StringType, ListType +from PyZ3950.CQLParser import CQLshlex + + +""" +Parser for PQF directly into RPN structure. +PQF docs: http://www.indexdata.dk/yaz/doc/tools.html + +NB: This does not implement /everything/ in PQF, in particular: @attr 2=3 @and @attr 1=4 title @attr 1=1003 author (eg that 2 should be 3 for all subsequent clauses) + +""" + + +class PQFParser: + lexer = None + currentToken = None + nextToken = None + + def __init__(self, l): + self.lexer = l + self.fetch_token() + + def fetch_token(self): + """ Read ahead one token """ + tok = self.lexer.get_token() + self.currentToken = self.nextToken + self.nextToken = tok + + def is_boolean(self): + if (self.currentToken.lower() in ['@and', '@or', '@not', '@prox']): + return 1 + else: + return 0 + + def defaultClause(self, t): + # Assign a default clause: anywhere = + clause = z3950.AttributesPlusTerm() + attrs = [(oids.Z3950_ATTRS_BIB1, 1, 1016), (oids.Z3950_ATTRS_BIB1, 2, 3)] + clause.attributes = [make_attr(*e) for e in attrs] + clause.term = t + return ('op', ('attrTerm', clause)) + + # Grammar fns + + def query(self): + set = self.top_set() + qst = self.query_struct() + + # Pull in a (hopefully) null token + self.fetch_token() + if (self.currentToken): + # Nope, unprocessed tokens remain + raise(ValueError) + + rpnq = z3950.RPNQuery() + if set: + rpnq.attributeSet = set + else: + rpnq.attributeSet = oids.Z3950_ATTRS_BIB1_ov + rpnq.rpn = qst + + + return ('type_1', rpnq) + + def top_set(self): + if (self.nextToken == '@attrset'): + self.fetch_token() + self.fetch_token() + n = self.currentToken.upper() + if (n[:14] == "1.2.840.10003."): + return asn1.OidVal(map(int, n.split('.'))) + return oids.oids['Z3950']['ATTRS'][n]['oid'] + else: + return None + + # This totally ignores the BNF, but does the 'right' thing + def query_struct(self): + self.fetch_token() + if (self.currentToken == '@attr'): + attrs = [] + while self.currentToken == '@attr': + attrs.append(self.attr_spec()) + self.fetch_token() + t = self.term() + + # Now we have attrs + term + clause = z3950.AttributesPlusTerm() + clause.attributes = [make_attr(*e) for e in attrs] + clause.term = t + return ('op', ('attrTerm', clause)) + elif (self.is_boolean()): + # @operator query query + return self.complex() + elif (self.currentToken == '@set'): + return self.result_set() + elif (self.currentToken == "{"): + # Parens + s = self.query_struct() + if (self.nextToken <> "}"): + raise(ValueError) + else: + self.fetch_token() + return s + + else: + t = self.term() + return self.defaultClause(t) + + def term(self): + # Need to split to allow attrlist then @term + type = 'general' + if (self.currentToken == '@term'): + self.fetch_token() + type = self.currentToken.lower() + types = {'general' : 'general', 'string' : 'characterString', 'numeric' : 'numeric', 'external' : 'external'} + type = types[type] + self.fetch_token() + + if (self.currentToken[0] == '"' and self.currentToken[-1] == '"'): + term = self.currentToken[1:-1] + else: + term = self.currentToken + + return (type, term) + + def result_set(self): + self.fetch_token() + return ('op', ('resultSet', self.currentToken)) + + def attr_spec(self): + # @attr is CT + self.fetch_token() + if (self.currentToken.find('=') == -1): + # attrset + set = self.currentToken + if (set[:14] == "1.2.840.10003."): + set = asn1.OidVal(map(int, set.split('.'))) + else: + set = oids.oids['Z3950']['ATTRS'][set.upper()]['oid'] + self.fetch_token() + else: + set = None + # May raise + (atype, val) = self.currentToken.split('=') + if (not atype.isdigit()): + raise ValueError + atype = int(atype) + if (val.isdigit()): + val = int(val) + return (set, atype, val) + + def complex(self): + op = z3950.RpnRpnOp() + op.op = self.boolean() + op.rpn1 = self.query_struct() + op.rpn2 = self.query_struct() + return ('rpnRpnOp', op) + + def boolean(self): + b = self.currentToken[1:] + b = b.lower() + if (b == 'prox'): + self.fetch_token() + exclusion = self.currentToken + self.fetch_token() + distance = self.currentToken + self.fetch_token() + ordered = self.currentToken + self.fetch_token() + relation = self.currentToken + self.fetch_token() + which = self.currentToken + self.fetch_token() + unit = self.currentToken + + prox = z3950.ProximityOperator() + if (not (relation.isdigit() and exclusion.isdigit() and distance.isdigit() and unit.isdigit())): + raise ValueError + prox.relationType = int(relation) + prox.exclusion = bool(exclusion) + prox.distance = int(distance) + if (which[0] == 'k'): + prox.unit = ('known', int(unit)) + elif (which[0] == 'p'): + prox.unit = ('private', int(unit)) + else: + raise ValueError + + return (b, prox) + elif b == 'not': + return ('and-not', None) + else: + return (b, None) + + +def parse(q): + + query = StringIO(q) + lexer = CQLshlex(query) + # Override CQL's wordchars list to include /=><() + lexer.wordchars += "!@#$%^&*-+[];,.?|~`:\\><=/'()" + + parser = PQFParser(lexer) + return parser.query() + + +def rpn2pqf(rpn): + # Turn RPN structure into PQF equivalent + q = rpn[1] + if (rpn[0] == 'type_1'): + # Top level + if (q.attributeSet): + query = '@attrset %s ' % ( '.'.join(map(str, q.attributeSet.lst))) + else: + query = "" + rest = rpn2pqf(q.rpn) + return "%s%s" % (query, rest) + elif (rpn[0] == 'rpnRpnOp'): + # boolean + if (q.op[0] in ['and', 'or']): + query = ['@', q.op[0], ' '] + elif (q.op[0] == 'and-not'): + query = ['@not '] + else: + query = ['@prox'] + # XXX + query.append(' ') + query.append(rpn2pqf(q.rpn1)) + query.append(' ') + query.append(rpn2pqf(q.rpn2)) + return ''.join(query) + elif (rpn[0] == 'op'): + if (q[0] == 'attrTerm'): + query = [] + for a in q[1].attributes: + if (a.attributeValue[0] == 'numeric'): + val = str(a.attributeValue[1]) + else: + val = a.attributeValue[1].list[0][1] + query.append("@attr %i=%s " % (a.attributeType, val)) + query.append('"%s" ' % (q[1].term[1])) + return ''.join(query) + elif (q[0] == 'resultSet'): + return "@set %s" % (q[1]) + + + + + + + + diff --git a/python/PyZ3950/z3950.py b/python/PyZ3950/z3950.py new file mode 100644 index 0000000..bb26a4d --- /dev/null +++ b/python/PyZ3950/z3950.py @@ -0,0 +1,754 @@ +#!/usr/bin/env python + +# This file should be available from +# http://www.pobox.com/~asl2/software/PyZ3950/ +# and is licensed under the X Consortium license: +# Copyright (c) 2001, Aaron S. Lav, asl2@pobox.com +# All rights reserved. + +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, and/or sell copies of the Software, and to permit persons +# to whom the Software is furnished to do so, provided that the above +# copyright notice(s) and this permission notice appear in all copies of +# the Software and that both the above copyright notice(s) and this +# permission notice appear in supporting documentation. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +# OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL +# INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in this Software without prior written authorization +# of the copyright holder. + +# Change history: +# 2002/05/23 +# Fix for Python2 compatibility. Thanks to Douglas Bates +# Fix to support SUTRS (requires asn1 updates, too) +# 2002/05/28 +# Make SUTRS printing a little more useful +# Correctly close connection when done +# Handle receiving diagnostics instead of records a little better + +"""

PyZ3950 currently is capable of sending and receiving v2 or v3 PDUs +Initialize, Search, Present, Scan, Sort, Close, and Delete. For client +work, you probably want to use ZOOM, which should be in the same +distribution as this file, in zoom.py. The Server class in this file +implements a server, but could use some work. Both interoperate with +the Yaz toolkit and the +client interoperates with a variety of libraries.

+ +Useful resources: +

+""" + +from __future__ import nested_scopes +import getopt +import sys +import exceptions +import random +import socket +import string +import traceback + +import codecs + +from PyZ3950 import asn1 +from PyZ3950 import zmarc +from PyZ3950.zdefs import * + +out_encoding = None + +trace_recv = 0 +trace_init = 0 + +print_hex = 0 + +class Z3950Error(Exception): + pass + +# Note: following 3 exceptions are defaults, but can be changed by +# calling conn.set_exs + +class ConnectionError(Z3950Error): # TCP or other transport error + pass + +class ProtocolError(Z3950Error): # Unexpected message or badly formatted + pass + +class UnexpectedCloseError(ProtocolError): + pass + +vers = '0.62' +default_resultSetName = 'default' + + +DEFAULT_PORT = 2101 + +Z3950_VERS = 3 # This is a global switch: do we support V3 at all? + +def extract_recs (resp): + (typ, recs) = resp.records + if (typ <> 'responseRecords'): + raise ProtocolError ("Bad records typ " + str (typ) + str (recs)) + if len (recs) == 0: + raise ProtocolError ("No records") + fmtoid = None + extract = [] + for r in recs: + (typ, data) = r.record + if (typ <> 'retrievalRecord'): + raise ProtocolError ("Bad typ %s data %s" % (str (typ), str(data))) + oid = data.direct_reference + if fmtoid == None: + fmtoid = oid + elif fmtoid <> oid: + raise ProtocolError ( + "Differing OIDs %s %s" % (str (fmtoid), str (oid))) + # Not, strictly speaking, an error. + dat = data.encoding + (typ, dat) = dat + if (oid == Z3950_RECSYN_USMARC_ov): + if typ <> 'octet-aligned': + raise ProtocolError ("Weird record EXTERNAL MARC type: " + typ) + extract.append (dat) + return (fmtoid, extract) + +def get_formatter (oid): + def printer (x): + print oid, repr (x) + def print_marc (marc): + print str (zmarc.MARC(marc)) + def print_sutrs (x): + print "SUTRS:", + if isinstance (x, type ('')): + print x + elif isinstance (x, type (u'')): + if out_encoding == None: + print repr (x) + else: + try: + print x.encode (out_encoding) + except UnicodeError, u: + print "Cannot print %s in current encoding %s" % ( + repr (x), out_encoding) + if oid == Z3950_RECSYN_SUTRS_ov: + return print_sutrs + if oid == Z3950_RECSYN_USMARC_ov: + return print_marc + else: + return printer + +def disp_resp (resp): + try: + (fmtoid, recs) = extract_recs (resp) + except ProtocolError, val: + print "Bad records", str (val) + formatter = get_formatter (fmtoid) + for rec in recs: + formatter (rec) + +class Conn: + rdsz = 65536 + def __init__ (self, sock = None, ConnectionError = ConnectionError, + ProtocolError = ProtocolError, UnexpectedCloseError = + UnexpectedCloseError): + self.set_exns (ConnectionError, ProtocolError, UnexpectedCloseError) + if sock == None: + self.sock = socket.socket (socket.AF_INET, socket.SOCK_STREAM) + else: + self.sock = sock + self.decode_ctx = asn1.IncrementalDecodeCtx (APDU) + self.encode_ctx = asn1.Ctx () + def set_exns (self, conn, protocol, unexp_close): + self.ConnectionError = conn + self.ProtocolError = protocol + self.UnexpectedCloseError = unexp_close + + def set_codec (self, charset_name, charsets_in_records): + self.charset_name = charset_name + self.charsets_in_records = not not charsets_in_records # collapse None and 0 + if trace_charset: + print "Setting up codec!", self.charset_name + strip_bom = self.charset_name == 'utf-16' + # XXX should create a new codec which wraps utf-16 but + # strips the Byte Order Mark, or use stream codecs + if self.charset_name <> None: + self.encode_ctx.set_codec (asn1.GeneralString, + codecs.lookup (self.charset_name), + strip_bom) + self.decode_ctx.set_codec (asn1.GeneralString, + codecs.lookup (self.charset_name), + strip_bom) + if not charsets_in_records: # None or 0 + register_retrieval_record_oids(self.decode_ctx) + register_retrieval_record_oids(self.encode_ctx) + + def readproc (self): + if self.sock == None: + raise self.ConnectionError ('disconnected') + try: + b = self.sock.recv (self.rdsz) + except socket.error, val: + self.sock = None + raise self.ConnectionError ('socket', str (val)) + if len (b) == 0: # graceful close + self.sock = None + raise self.ConnectionError ('graceful close') + if trace_recv: + print map (lambda x: hex(ord(x)), b) + return b + def read_PDU (self): + while 1: + if self.decode_ctx.val_count () > 0: + return self.decode_ctx.get_first_decoded () + try: + b = self.readproc () + self.decode_ctx.feed (map (ord, b)) + except asn1.BERError, val: + raise self.ProtocolError ('ASN1 BER', str(val)) + + +class Server (Conn): + test = 0 + def __init__ (self, sock): + Conn.__init__ (self, sock) + self.expecting_init = 1 + self.done = 0 + self.result_sets = {} + self.charset_name = None + def run (self): + while not self.done: + (typ, val) = self.read_PDU () + fn = self.fn_dict.get (typ, None) + if fn == None: + raise self.ProtocolError ("Bad typ", typ + " " + str (val)) + if typ <> 'initRequest' and self.expecting_init: + raise self.ProtocolError ("Init expected", typ) + fn (self, val) + def send (self, val): + b = self.encode_ctx.encode (APDU, val) + if self.test: + print "Internal Testing" + # a reminder not to leave this switched on by accident + self.decode_ctx.feed (b) + decoded = self.read_PDU () + assert (val== decoded) + self.sock.send (b) + + def do_close (self, reason, info): + close = Close () + close.closeReason = reason + close.diagnosticInformation = info + self.send (('close', close)) + + def close (self, parm): + self.done = 1 + self.do_close (0, 'Normal close') + + def search_child (self, query): + return range (random.randint (2,10)) + def search (self, sreq): + if sreq.replaceIndicator == 0 and self.result_sets.has_key ( + sreq.resultSetName): + raise self.ProtocolError ("replaceIndicator 0") + result = self.search_child (sreq.query) + sresp = SearchResponse () + self.result_sets[sreq.resultSetName] = result + sresp.resultCount = len (result) + sresp.numberOfRecordsReturned = 0 + sresp.nextResultSetPosition = 1 + sresp.searchStatus = 1 + sresp.resultSetStatus = 0 + sresp.presentStatus = PresentStatus.get_num_from_name ('success') + sresp.records = ('responseRecords', []) + self.send (('searchResponse', sresp)) + def format_records (self, start, count, res_set, prefsyn): + l = [] + for i in range (start - 1, start + count - 1): + elt = res_set[i] + elt_external = asn1.EXTERNAL () + elt_external.direct_reference = Z3950_RECSYN_SUTRS_ov + + # Not only has this text been extensively translated, but + # it also prefigures Z39.50's separation of Search and Present, + # once rearranged a little. + strings = [ + 'seek, and ye shall find; ask, and it shall be given you', + u"""Car quiconque demande re\u00e7oit, qui cherche trouve, et \u00e0 quit frappe on ouvrira""", # This (next) verse has non-ASCII characters + u"\u0391\u03b9\u03c4\u03b5\u03b9\u03c4\u03b5, " + u"\u03ba\u03b1\u03b9 \u03b4\u03bf\u03b8\u03b7\u03c3\u03b5\u03c4\u03b1\u03b9 "+ + u"\u03c5\u03bc\u03b9\u03bd; \u03b6\u03b7\u03c4\u03b5\u03b9\u03c4\u03b5 " + + u"\u03ba\u03b1\u03b9 \u03b5\u03c5\u03c1\u03b7\u03c3\u03b5\u03c4\u03b5", + u"\u05e8\u05d0\u05d4 \u05d6\u05d4 \u05de\u05e6\u05d0\u05ea\u05d9"] + if self.charsets_in_records: + encode_charset = self.charset_name + else: + encode_charset = 'ascii' + def can_encode (s): + try: + s.encode (encode_charset) + except UnicodeError: + return 0 + return 1 + if self.charset_name == None: + candidate_strings = [strings[0]] + else: + candidate_strings = [s for s in strings if can_encode (s)] + # Note: this code is for debugging/testing purposes. Usually, + # language/content selection should not be made on the + # basis of the selected charset, and a surrogate diagnostic + # should be generated if the data cannot be encoded. + text = random.choice (candidate_strings) + add_str = " #%d charset %s cir %d" % (elt, encode_charset, + self.charsets_in_records) + elt_external.encoding = ('single-ASN1-type', text + add_str) + n = NamePlusRecord () + n.name = 'foo' + n.record = ('retrievalRecord', elt_external) + l.append (n) + return l + + def present (self, preq): + presp = PresentResponse () + res_set = self.result_sets [preq.resultSetId] + presp.numberOfRecordsReturned = preq.numberOfRecordsRequested + presp.nextResultSetPosition = preq.resultSetStartPoint + \ + preq.numberOfRecordsRequested + presp.presentStatus = 0 + presp.records = ('responseRecords', + self.format_records (preq.resultSetStartPoint, + preq.numberOfRecordsRequested, + res_set, + preq.preferredRecordSyntax)) + self.send (('presentResponse', presp)) + + def init (self, ireq): + if trace_init: + print "Init received", ireq + self.v3_flag = (ireq.protocolVersion ['version_3'] and + Z3950_VERS == 3) + + ir = InitializeResponse () + ir.protocolVersion = ProtocolVersion () + ir.protocolVersion ['version_1'] = 1 + ir.protocolVersion ['version_2'] = 1 + ir.protocolVersion ['version_3'] = self.v3_flag + val = get_charset_negot (ireq) + charset_name = None + records_in_charsets = 0 + if val <> None: + csreq = CharsetNegotReq () + csreq.unpack_proposal (val) + def rand_choose (list_or_none): + if list_or_none == None or len (list_or_none) == 0: + return None + return random.choice (list_or_none) + charset_name = rand_choose (csreq.charset_list) + if charset_name <> None: + try: + codecs.lookup (charset_name) + except LookupError, l: + charset_name = None + csresp = CharsetNegotResp ( + charset_name, + rand_choose (csreq.lang_list), + csreq.records_in_charsets) + records_in_charsets = csresp.records_in_charsets + if trace_charset: + print csreq, csresp + set_charset_negot (ir, csresp.pack_negot_resp (), self.v3_flag) + + optionslist = ['search', 'present', 'delSet', 'scan','negotiation'] + ir.options = Options () + for o in optionslist: + ir.options[o] = 1 + + ir.preferredMessageSize = 0 + + ir.exceptionalRecordSize = 0 + # z9350-2001 3.2.1.1.4, 0 means client should be prepared to accept + # arbitrarily long messages. + + ir.implementationId = implementationId + + ir.implementationName = 'PyZ3950 Test server' + ir.implementationVersion = impl_vers + ir.result = 1 + + if trace_charset or trace_init: + print ir + self.expecting_init = 0 + self.send (('initResponse', ir)) + self.set_codec (charset_name, records_in_charsets) + + def sort (self, sreq): + sresp = SortResponse () + sresp.sortStatus = 0 + self.send (('sortResponse', sresp)) + def delete (self, dreq): + dresp = DeleteResultSetResponse () + dresp.deleteOperationStatus = 0 + self.send (('deleteResultSetResponse', dresp)) + def esrequest (self, esreq): + print "ES", esreq + esresp = ExtendedServicesResponse () + esresp.operationStatus = ExtendedServicesResponse['operationStatus'].get_num_from_name ('failure') + self.send (('extendedServicesResponse', esresp)) + + fn_dict = {'searchRequest': search, + 'presentRequest': present, + 'initRequest' : init, + 'close' : close, + 'sortRequest' : sort, + 'deleteResultSetRequest' : delete, + 'extendedServicesRequest': esrequest} + + +def run_server (test = 0): + listen = socket.socket (socket.AF_INET, socket.SOCK_STREAM) + listen.setsockopt (socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) + listen.bind (('', DEFAULT_PORT)) + listen.listen (1) + while 1: + (sock,addr) = listen.accept () + try: + serv = Server (sock) + serv.test = test + serv.run () + except: + (typ, val, tb) = sys.exc_info () + if typ == exceptions.KeyboardInterrupt: + print "kbd interrupt, leaving" + raise + print "error %s %s from %s" % (typ, val, addr) + traceback.print_exc(40) + sock.close () + +def extract_apt (rpnQuery): + """Takes RPNQuery to AttributePlusTerm""" + RPNStruct = rpnQuery.rpn + assert (RPNStruct [0] == 'op') + operand = RPNStruct [1] + assert (operand [0] == 'attrTerm') + return operand [1] + + +class Client (Conn): + test = 0 + + def __init__ (self, addr, port = DEFAULT_PORT, optionslist = None, + charset = None, lang = None, user = None, password = None, + preferredMessageSize = 0x100000, group = None, + maximumRecordSize = 0x100000, implementationId = "", + implementationName = "", implementationVersion = "", + ConnectionError = ConnectionError, + ProtocolError = ProtocolError, + UnexpectedCloseError = UnexpectedCloseError): + + Conn.__init__ (self, ConnectionError = ConnectionError, + ProtocolError = ProtocolError, + UnexpectedCloseError = UnexpectedCloseError) + try: + self.sock.connect ((addr, port)) + except socket.error, val: + self.sock = None + raise self.ConnectionError ('socket', str(val)) + try_v3 = Z3950_VERS == 3 + + if (charset and not isinstance(charset, list)): + charset = [charset] + if (lang and not isinstance(lang, list)): + charset = [lang] + negotiate_charset = charset or lang + + if (user or password or group): + authentication = (user, password, group) + else: + authentication = None + + InitReq = make_initreq (optionslist, authentication = authentication, + v3 = try_v3, + preferredMessageSize = preferredMessageSize, + maximumRecordSize = maximumRecordSize, + implementationId = implementationId, + implementationName = implementationName, + implementationVersion = implementationVersion, + negotiate_charset = negotiate_charset) + if negotiate_charset: + # languages = ['eng', 'fre', 'enm'] + # Thanne longen folk to looken in catalogues + # and clerkes for to seken straunge bookes ... + cnr = CharsetNegotReq (charset, lang, random.choice((0,1,None))) + if trace_charset: + print cnr + set_charset_negot (InitReq, cnr.pack_proposal (), try_v3) + + if trace_init: + print "Initialize request", InitReq + + self.initresp = self.transact ( + ('initRequest', InitReq), 'initResponse') + if trace_init: + print "Initialize Response", self.initresp + self.v3_flag = self.initresp.protocolVersion ['version_3'] + val = get_charset_negot (self.initresp) + if val <> None: + csr = CharsetNegotResp () + csr.unpack_negot_resp (val) + if trace_charset: + print "Got csr", str (csr) + self.set_codec (csr.charset, csr.records_in_charsets) + + self.search_results = {} + self.max_to_request = 20 + self.default_recordSyntax = Z3950_RECSYN_USMARC_ov + def get_option (self, option_name): + return self.initresp.options[option_name] + def transact (self, to_send, expected): + b = self.encode_ctx.encode (APDU, to_send) + if print_hex: + print map (hex, b) + if self.test: + print "Internal Testing" + # a reminder not to leave this switched on by accident + self.decode_ctx.feed (b) + decoded = self.read_PDU () + print "to_send", to_send, "decoded", decoded + assert (to_send == decoded) + if self.sock == None: + raise self.ConnectionError ('disconnected') + try: + self.sock.send (b) + except socket.error, val: + self.sock = None + raise self.ConnectionError('socket', str(val)) + + if expected == None: + return + pdu = self.read_PDU () + (arm, val) = pdu + if self.test: + print "Internal Testing 2" + b = self.encode_ctx.encode (APDU, (arm, val)) + self.decode_ctx.feed (b) + redecoded = self.read_PDU () + if redecoded <> (arm, val): + print "Redecoded", redecoded + print "old", (arm, val) + assert (redecoded == (arm, val)) + if arm == expected: # may be 'close' + return val + elif arm == 'close': + raise self.UnexpectedCloseError ( + "Server closed connection reason %d diag info %s" % \ + (getattr (val, 'closeReason', -1), + getattr (val, 'diagnosticInformation', 'None given'))) + else: + raise self.ProtocolError ( + "Unexpected response from server %s %s " % (expected, + repr ((arm, val)))) + def set_dbnames (self, dbnames): + self.dbnames = dbnames + def search_2 (self, query, rsn = default_resultSetName, **kw): + # We used to check self.initresp.options['search'], but + # support for search is required by the standard, and + # www.cnshb.ru:210 doesn't set the search bit if you negotiate + # v2, but supports search anyway + sreq = make_sreq (query, self.dbnames, rsn, **kw) + recv = self.transact (('searchRequest', sreq), 'searchResponse') + self.search_results [rsn] = recv + return recv + def search (self, query, rsn = default_resultSetName, **kw): + # for backwards compat + recv = self.search_2 (('type_1', query), rsn, **kw) + return recv.searchStatus and (recv.resultCount > 0) + # If searchStatus is failure, check result-set-status - + # -subset - partial, valid results available + # -interim - partial, not necessarily valid + # -none - no result set + # If searchStatus is success, check present-status: + # - success - OK + # - partial-1 - not all, access control + # - partial-2 - not all, won't fit in msg size (but we currently don't ask for + # any records in search, shouldn't happen) + # - partial-3 - not all, resource control (origin) + # - partial-4 - not all, resource control (target) + # - failure - no records, nonsurrogate diagnostic. + def get_count (self, rsn = default_resultSetName): + return self.search_results[rsn].resultCount + def delete (self, rsn): + if not self.initresp.options['delSet']: + return None + delreq = DeleteResultSetRequest () + delreq.deleteFunction = 0 # list + delreq.resultSetList = [rsn] + return self.transact (('deleteResultSetRequest', delreq), + 'deleteResultSetResponse') + def present (self, rsn= default_resultSetName, start = None, + count = None, recsyn = None, esn = None): + # don't check for support in init resp: see search for reasoning + + # XXX Azaroth 2004-01-08. This does work when rs is result of sort. + try: + sresp = self.search_results [rsn] + if start == None: + start = sresp.nextResultSetPosition + if count == None: + count = sresp.resultCount + if self.max_to_request > 0: + count = min (self.max_to_request, count) + except: + pass + if recsyn == None: + recsyn = self.default_recordSyntax + preq = PresentRequest () + preq.resultSetId = rsn + preq.resultSetStartPoint = start + preq.numberOfRecordsRequested = count + preq.preferredRecordSyntax = recsyn + if esn <> None: + preq.recordComposition = ('simple', esn) + return self.transact (('presentRequest', preq), 'presentResponse') + def scan (self, query, **kw): + sreq = ScanRequest () + sreq.databaseNames = self.dbnames + assert (query[0] == 'type_1' or query [0] == 'type_101') + sreq.attributeSet = query[1].attributeSet + sreq.termListAndStartPoint = extract_apt (query[1]) + sreq.numberOfTermsRequested = 20 # default + for (key, val) in kw.items (): + setattr (sreq, key, val) + + return self.transact (('scanRequest', sreq), 'scanResponse') + def close (self): + close = Close () + close.closeReason = 0 + close.diagnosticInformation = 'Normal close' + try: + rv = self.transact (('close', close), 'close') + except self.ConnectionError: + rv = None + if self.sock <> None: + self.sock.close () + self.sock = None + return rv + + +def mk_compound_query (): + aelt1 = AttributeElement (attributeType = 1, + attributeValue = ('numeric',4)) + apt1 = AttributesPlusTerm () + apt1.attributes = [aelt1] + apt1.term = ('general', '1066') + aelt2 = AttributeElement (attributeType = 1, + attributeValue = ('numeric', 1)) + apt2 = AttributesPlusTerm () + apt2.attributes = [aelt2] + apt2.term = ('general', 'Sellar') + myrpnRpnOp = RpnRpnOp () + myrpnRpnOp.rpn1 = ('op', ('attrTerm', apt1)) + myrpnRpnOp.rpn2 = ('op', ('attrTerm', apt2)) + myrpnRpnOp.op = ('and', None) + rpnq = RPNQuery (attributeSet = Z3950_ATTRS_BIB1_ov) + rpnq.rpn = ('rpnRpnOp', myrpnRpnOp) + return rpnq + +def mk_simple_query (title): + aelt1 = AttributeElement (attributeType = 1, + attributeValue = ('numeric', 1003)) + apt1 = AttributesPlusTerm () + apt1.attributes = [aelt1] + apt1.term = ('general', title) # XXX or should be characterString, not general, but only when V3. + rpnq = RPNQuery (attributeSet = Z3950_ATTRS_BIB1_ov) + rpnq.rpn = ('op', ('attrTerm', apt1)) + return rpnq + +def_host = 'LC' + +host_dict = {'BIBSYS': ('z3950.bibsys.no', 2100, 'BIBSYS'), + 'YAZ': ('127.0.0.1', 9999, 'foo'), + 'LCTEST' : ('ilssun2.loc.gov', 7090, 'Voyager'), + 'LC' : ('z3950.loc.gov', 7090, 'Voyager'), + 'NLC' : ('amicus.nlc-bnc.ca', 210, 'NL'), + 'BNC' : ('amicus.nlc-bnc.ca', 210, 'NL'), + # On parle franc,ais aussi. + 'LOCAL': ('127.0.0.1', 9999, 'Default'), + 'LOCAL2': ('127.0.0.1', 2101, 'foo'), + 'BL' :('blpcz.bl.uk', 21021, 'BLPC-ALL'), + 'BELLLABS' : ('z3950.bell-labs.com', 210, 'books'), + 'BIBHIT' : ('www.bibhit.dk', 210, 'Default'), + 'YALE': ('webpac.library.yale.edu', 210, 'YALEOPAC'), + 'OXFORD': ('library.ox.ac.uk', 210, 'ADVANCE'), + 'OVID': ('z3950.ovid.com', 2213, 'pmed'), # scan only + 'UC': ('ipac.lib.uchicago.edu', 210, 'uofc'), + 'KUB' : ('dbiref.kub.nl', 1800, 'jel'), + 'INDEXDATA' : ('muffin.indexdata.dk', 9004, 'thatt')} +# last two are Zthes servers. + +if __name__ == '__main__': + optlist, args = getopt.getopt (sys.argv[1:], 'e:sh:tc:l:') + server = 0 + host = def_host + test = 0 + charset_list = None + lang_list = None + for (opt, val) in optlist: + if opt == '-s': + server = 1 + elif opt == '-h': + host = val + elif opt == '-t': + test = 1 + elif opt == '-e': + out_encoding = val + elif opt == '-c': + charset_list = val.split (',') + elif opt == '-l': + lang_list = val.split (',') + if server: + run_server (test) + + host = host.upper () + (name, port, dbname) = host_dict.get (host, host_dict[def_host]) + cli = Client (name, port, charset = charset_list, + lang = lang_list) + cli.test = test + cli.set_dbnames ([dbname]) + print "Starting search" +# rpnq = mk_simple_query ('Perec, Georges') +# rpnq = mk_simple_query ('Johnson, Kim') + rpnq = mk_compound_query () + if cli.search (rpnq, smallSetUpperBound = 0, mediumSetPresentNumber = 0, + largeSetLowerBound = 1): + disp_resp (cli.present (recsyn = Z3950_RECSYN_USMARC_ov)) + else: + print "Not found" + print "Deleting" + cli.delete (default_resultSetName) + cli.delete ('bogus') + print "Closing" + try: + cli.close () + except ConnectionError: + # looks like LC, at least, sends a FIN on receipt of Close PDU + # guess we should check for gracefullness of close, and complain + # if not. + pass + diff --git a/python/PyZ3950/z3950_2001.py b/python/PyZ3950/z3950_2001.py new file mode 100644 index 0000000..9a0f56c --- /dev/null +++ b/python/PyZ3950/z3950_2001.py @@ -0,0 +1,1503 @@ +#!/usr/bin/env python +# Auto-generated from ../compiler/tests/z3950-2001.txt at Wed, 02 Jun 2004 15:30:47 +0000 +from PyZ3950 import asn1 +#module Module None +KnownProximityUnit=asn1.INTEGER_class ([('character',1),('word',2),('sentence',3),('paragraph',4),('section',5),('chapter',6),('document',7),('element',8),('subelement',9),('elementType',10),('byte',11)],None,None) +InternationalString=asn1.GeneralString +Specification=asn1.SEQUENCE ([('schema',None, asn1.CHOICE ([('oid',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER)), + ('uri',None,asn1.TYPE(asn1.IMPLICIT(300,cls=asn1.CONTEXT_FLAG),InternationalString))]),1), + ('elementSpec',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('elementSetName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('externalEspec',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL))])),1)], seq_name = 'Specification') +ElementSetName=asn1.TYPE(asn1.IMPLICIT(103,cls=asn1.CONTEXT_FLAG),InternationalString) +Permissions=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('userId',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('allowableFunctions',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER_class ([('delete',1),('modifyContents',2),('modifyPermissions',3),('present',4),('invoke',5)],None,None))),0)], seq_name = None)) +DeleteSetStatus=asn1.TYPE(asn1.IMPLICIT(33,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('success',0),('resultSetDidNotExist',1),('previouslyDeletedByServer',2),('systemProblemAtServer',3),('accessNotAllowed',4),('resourceControlAtClient',5),('resourceControlAtServer',6),('bulkDeleteNotSupported',7),('notAllRsltSetsDeletedOnBulkDlte',8),('notAllRequestedResultSetsDeleted',9),('resultSetInUse',10)],None,None)) +PresentStatus=asn1.TYPE(asn1.IMPLICIT(27,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('success',0),('partial_1',1),('partial_2',2),('partial_3',3),('partial_4',4),('failure',5)],None,None)) +StringOrNumeric=asn1.CHOICE ([('string',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('numeric',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)))]) +AttributeSetId=asn1.OBJECT_IDENTIFIER +ProximityOperator=asn1.SEQUENCE ([('exclusion',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1), + ('distance',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('ordered',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('relationType',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('lessThan',1),('lessThanOrEqual',2),('equal',3),('greaterThanOrEqual',4),('greaterThan',5),('notEqual',6)],None,None)),0), + ('proximityUnitCode',None,asn1.TYPE(asn1.EXPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('known',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),KnownProximityUnit)), + ('private',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)))])),0)], seq_name = 'ProximityOperator') +ResourceReport=asn1.EXTERNAL +Options=asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.BITSTRING_class ([('search',0),('present',1),('delSet',2),('resourceReport',3),('triggerResourceCtrl',4),('resourceCtrl',5),('accessCtrl',6),('scan',7),('sort',8),('unused',9),('extendedServices',10),('level_1Segmentation',11),('level_2Segmentation',12),('concurrentOperations',13),('namedResultSets',14),('encapsulation',15),('resultCountInSort',16),('negotiation',17),('dedup',18),('query104',19),('pQESCorrection',20),('stringSchema',21)],None,None)) +Unit=asn1.SEQUENCE ([('unitSystem',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('unitType',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),StringOrNumeric),1), + ('unit',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),StringOrNumeric),1), + ('scaleFactor',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = 'Unit') +CloseReason=asn1.TYPE(asn1.IMPLICIT(211,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('finished',0),('shutdown',1),('systemProblem',2),('costLimit',3),('resources',4),('securityViolation',5),('protocolError',6),('lackOfActivity',7),('responseToPeer',8),('unspecified',9)],None,None)) +AttributeElement=asn1.SEQUENCE ([('attributeSet',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),AttributeSetId),1), + ('attributeType',None,asn1.TYPE(asn1.IMPLICIT(120,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('attributeValue',None, asn1.CHOICE ([('numeric',None,asn1.TYPE(asn1.IMPLICIT(121,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('complex',None,asn1.TYPE(asn1.IMPLICIT(224,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('list',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (StringOrNumeric)),0), + ('semanticAction',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER_class ([],None,None))),1)], seq_name = None)))]),0)], seq_name = 'AttributeElement') +DefaultDiagFormat=asn1.SEQUENCE ([('diagnosticSetId',None,asn1.OBJECT_IDENTIFIER,0), + ('condition',None,asn1.INTEGER_class ([],None,None),0), + ('addinfo',None, asn1.CHOICE ([('v2Addinfo',None,asn1.VisibleString), + ('v3Addinfo',None,InternationalString)]),0)], seq_name = 'DefaultDiagFormat') +ResourceReportId=asn1.OBJECT_IDENTIFIER +FragmentSyntax=asn1.CHOICE ([('externallyTagged',None,asn1.EXTERNAL), + ('notExternallyTagged',None,asn1.OCTSTRING)]) +Operator=asn1.TYPE(asn1.EXPLICIT(46,cls=asn1.CONTEXT_FLAG),asn1.CHOICE ([('and',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('or',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('and_not',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('prox',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),ProximityOperator))])) +DiagRec=asn1.CHOICE ([('defaultFormat',None,DefaultDiagFormat), + ('externallyDefined',None,asn1.EXTERNAL)]) +ProtocolVersion=asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BITSTRING_class ([('version_1',0),('version_2',1),('version_3',2)],None,None)) +Range=asn1.SEQUENCE ([('startingPosition',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('numberOfRecords',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = 'Range') +ReferenceId=asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING) +RetentionCriterion=asn1.CHOICE ([('numberOfEntries',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('percentOfEntries',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('duplicatesOnly',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('discardRsDuplicates',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +DuplicateDetectionCriterion=asn1.CHOICE ([('levelOfMatch',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('caseSensitive',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('punctuationSensitive',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('regularExpression',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('rsDuplicates',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +InfoCategory=asn1.SEQUENCE ([('categoryTypeId',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('categoryValue',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = 'InfoCategory') +AttributeList=asn1.TYPE(asn1.IMPLICIT(44,cls=asn1.CONTEXT_FLAG),asn1.SEQUENCE_OF (AttributeElement)) +ResultSetId=asn1.TYPE(asn1.IMPLICIT(31,cls=asn1.CONTEXT_FLAG),InternationalString) +DatabaseName=asn1.TYPE(asn1.IMPLICIT(105,cls=asn1.CONTEXT_FLAG),InternationalString) +IdAuthentication=asn1.TYPE(asn1.EXPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.CHOICE ([('open',None,asn1.VisibleString), + ('idPass',None, asn1.SEQUENCE ([('groupId',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('userId',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('password',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = None)), + ('anonymous',None,asn1.NULL), + ('other',None,asn1.EXTERNAL)])) +SortCriterion=asn1.CHOICE ([('mostComprehensive',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('leastComprehensive',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('mostRecent',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('oldest',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('leastCost',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('preferredDatabases',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)))]) +SortKey=asn1.CHOICE ([('privateSortKey',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('elementSpec',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),Specification)), + ('sortAttributes',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('id',None,AttributeSetId,0), + ('list',None,AttributeList,0)], seq_name = None)))]) +ListStatuses=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('id',None,ResultSetId,0), + ('status',None,DeleteSetStatus,0)], seq_name = None)) +OtherInformation=asn1.TYPE(asn1.IMPLICIT(201,cls=asn1.CONTEXT_FLAG),asn1.SEQUENCE_OF (asn1.SEQUENCE ([('category',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InfoCategory),1), + ('information',None, asn1.CHOICE ([('characterInfo',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('binaryInfo',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('externallyDefinedInfo',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('oid',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER))]),0)], seq_name = None))) +ResultSetPlusAttributes=asn1.TYPE(asn1.IMPLICIT(214,cls=asn1.CONTEXT_FLAG),asn1.SEQUENCE ([('resultSet',None,ResultSetId,0), + ('attributes',None,AttributeList,0)], seq_name = 'ResultSetPlusAttributes')) +InitializeResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('protocolVersion',None,ProtocolVersion,0), + ('options',None,Options,0), + ('preferredMessageSize',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('exceptionalRecordSize',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('result',None,asn1.TYPE(asn1.IMPLICIT(12,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('implementationId',None,asn1.TYPE(asn1.IMPLICIT(110,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('implementationName',None,asn1.TYPE(asn1.IMPLICIT(111,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('implementationVersion',None,asn1.TYPE(asn1.IMPLICIT(112,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('userInformationField',None,asn1.TYPE(asn1.EXPLICIT(11,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'InitializeResponse') +SortElement=asn1.CHOICE ([('generic',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),SortKey)), + ('datbaseSpecific',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('databaseName',None,DatabaseName,0), + ('dbSort',None,SortKey,0)], seq_name = None))))]) +IntUnit=asn1.SEQUENCE ([('value',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('unitUsed',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Unit),0)], seq_name = 'IntUnit') +ElementSetNames=asn1.CHOICE ([('genericElementSetName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('databaseSpecific',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('dbName',None,DatabaseName,0), + ('esn',None,ElementSetName,0)], seq_name = None))))]) +SortResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('sortStatus',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('success',0),('partial_1',1),('failure',2)],None,None)),0), + ('resultSetStatus',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('empty',1),('interim',2),('unchanged',3),('none',4)],None,None)),1), + ('diagnostics',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DiagRec)),1), + ('resultCount',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'SortResponse') +Term=asn1.CHOICE ([('general',None,asn1.TYPE(asn1.IMPLICIT(45,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('numeric',None,asn1.TYPE(asn1.IMPLICIT(215,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('characterString',None,asn1.TYPE(asn1.IMPLICIT(216,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('oid',None,asn1.TYPE(asn1.IMPLICIT(217,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER)), + ('dateTime',None,asn1.TYPE(asn1.IMPLICIT(218,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime)), + ('external',None,asn1.TYPE(asn1.IMPLICIT(219,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('integerAndUnit',None,asn1.TYPE(asn1.IMPLICIT(220,cls=asn1.CONTEXT_FLAG),IntUnit)), + ('null',None,asn1.TYPE(asn1.IMPLICIT(221,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +InitializeRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('protocolVersion',None,ProtocolVersion,0), + ('options',None,Options,0), + ('preferredMessageSize',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('exceptionalRecordSize',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('idAuthentication',None,asn1.TYPE(asn1.EXPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.ANY),1), + ('implementationId',None,asn1.TYPE(asn1.IMPLICIT(110,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('implementationName',None,asn1.TYPE(asn1.IMPLICIT(111,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('implementationVersion',None,asn1.TYPE(asn1.IMPLICIT(112,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('userInformationField',None,asn1.TYPE(asn1.EXPLICIT(11,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'InitializeRequest') +ExtendedServicesResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('operationStatus',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('done',1),('accepted',2),('failure',3)],None,None)),0), + ('diagnostics',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DiagRec)),1), + ('taskPackage',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'ExtendedServicesResponse') +AccessControlResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('securityChallengeResponse',None, asn1.CHOICE ([('simpleForm',None,asn1.TYPE(asn1.IMPLICIT(38,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('externallyDefined',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL))]),1), + ('diagnostic',None,asn1.TYPE(asn1.EXPLICIT(223,cls=asn1.CONTEXT_FLAG),DiagRec),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'AccessControlResponse') +TriggerResourceControlRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('requestedAction',None,asn1.TYPE(asn1.IMPLICIT(46,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('resourceReport',1),('resourceControl',2),('cancel',3)],None,None)),0), + ('prefResourceReportFormat',None,asn1.TYPE(asn1.IMPLICIT(47,cls=asn1.CONTEXT_FLAG),ResourceReportId),1), + ('resultSetWanted',None,asn1.TYPE(asn1.IMPLICIT(48,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'TriggerResourceControlRequest') +AccessControlRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('securityChallenge',None, asn1.CHOICE ([('simpleForm',None,asn1.TYPE(asn1.IMPLICIT(37,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('externallyDefined',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL))]),0), + ('otherInfo',None,OtherInformation,1)], seq_name = 'AccessControlRequest') +DeleteResultSetResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('deleteOperationStatus',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),DeleteSetStatus),0), + ('deleteListStatuses',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),ListStatuses),1), + ('numberNotDeleted',None,asn1.TYPE(asn1.IMPLICIT(34,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('bulkStatuses',None,asn1.TYPE(asn1.IMPLICIT(35,cls=asn1.CONTEXT_FLAG),ListStatuses),1), + ('deleteMessage',None,asn1.TYPE(asn1.IMPLICIT(36,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'DeleteResultSetResponse') +CompSpec=asn1.SEQUENCE ([('selectAlternativeSyntax',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('generic',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Specification),1), + ('dbSpecific',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('db',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),DatabaseName),0), + ('spec',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Specification),0)], seq_name = None))),1), + ('recordSyntax',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER)),1)], seq_name = 'CompSpec') +AttributesPlusTerm=asn1.TYPE(asn1.IMPLICIT(102,cls=asn1.CONTEXT_FLAG),asn1.SEQUENCE ([('attributes',None,AttributeList,0), + ('term',None,Term,0)], seq_name = 'AttributesPlusTerm')) +NamePlusRecord=asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),DatabaseName),1), + ('record',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('retrievalRecord',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('surrogateDiagnostic',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),DiagRec)), + ('startingFragment',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),FragmentSyntax)), + ('intermediateFragment',None,asn1.TYPE(asn1.EXPLICIT(4,cls=asn1.CONTEXT_FLAG),FragmentSyntax)), + ('finalFragment',None,asn1.TYPE(asn1.EXPLICIT(5,cls=asn1.CONTEXT_FLAG),FragmentSyntax))])),0)], seq_name = 'NamePlusRecord') +ResourceReportResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('resourceReportStatus',None,asn1.TYPE(asn1.IMPLICIT(50,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('success',0),('partial',1),('failure_1',2),('failure_2',3),('failure_3',4),('failure_4',5),('failure_5',6),('failure_6',7)],None,None)),0), + ('resourceReport',None,asn1.TYPE(asn1.EXPLICIT(51,cls=asn1.CONTEXT_FLAG),ResourceReport),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'ResourceReportResponse') +Operand=asn1.CHOICE ([('attrTerm',None,AttributesPlusTerm), + ('resultSet',None,ResultSetId), + ('resultAttr',None,ResultSetPlusAttributes)]) +SortKeySpec=asn1.SEQUENCE ([('sortElement',None,SortElement,0), + ('sortRelation',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('ascending',0),('descending',1),('ascendingByFrequency',3),('descendingByfrequency',4)],None,None)),0), + ('caseSensitivity',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('caseSensitive',0),('caseInsensitive',1)],None,None)),0), + ('missingValueAction',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('abort',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('null',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('missingValueData',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING))])),1)], seq_name = 'SortKeySpec') +ResourceControlRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('suspendedFlag',None,asn1.TYPE(asn1.IMPLICIT(39,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1), + ('resourceReport',None,asn1.TYPE(asn1.EXPLICIT(40,cls=asn1.CONTEXT_FLAG),ResourceReport),1), + ('partialResultsAvailable',None,asn1.TYPE(asn1.IMPLICIT(41,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('subset',1),('interim',2),('none',3)],None,None)),1), + ('responseRequired',None,asn1.TYPE(asn1.IMPLICIT(42,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('triggeredRequestFlag',None,asn1.TYPE(asn1.IMPLICIT(43,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'ResourceControlRequest') +DuplicateDetectionRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('inputResultSetIds',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),0), + ('outputResultSetName',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('applicablePortionOfRecord',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1), + ('duplicateDetectionCriteria',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DuplicateDetectionCriterion)),1), + ('clustering',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1), + ('retentionCriteria',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (RetentionCriterion)),0), + ('sortCriteria',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (SortCriterion)),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'DuplicateDetectionRequest') +ResourceControlResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('continueFlag',None,asn1.TYPE(asn1.IMPLICIT(44,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('resultSetWanted',None,asn1.TYPE(asn1.IMPLICIT(45,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'ResourceControlResponse') +DuplicateDetectionResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('status',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('success',0),('failure',1)],None,None)),0), + ('resultSetCount',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('diagnostics',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DiagRec)),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'DuplicateDetectionResponse') +PresentRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('resultSetId',None,ResultSetId,0), + ('resultSetStartPoint',None,asn1.TYPE(asn1.IMPLICIT(30,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('numberOfRecordsRequested',None,asn1.TYPE(asn1.IMPLICIT(29,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('additionalRanges',None,asn1.TYPE(asn1.IMPLICIT(212,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (Range)),1), + ('recordComposition',None, asn1.CHOICE ([('simple',None,asn1.TYPE(asn1.EXPLICIT(19,cls=asn1.CONTEXT_FLAG),ElementSetNames)), + ('complex',None,asn1.TYPE(asn1.IMPLICIT(209,cls=asn1.CONTEXT_FLAG),CompSpec))]),1), + ('preferredRecordSyntax',None,asn1.TYPE(asn1.IMPLICIT(104,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('maxSegmentCount',None,asn1.TYPE(asn1.IMPLICIT(204,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('maxRecordSize',None,asn1.TYPE(asn1.IMPLICIT(206,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('maxSegmentSize',None,asn1.TYPE(asn1.IMPLICIT(207,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'PresentRequest') +ResourceReportRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('opId',None,asn1.TYPE(asn1.IMPLICIT(210,cls=asn1.CONTEXT_FLAG),ReferenceId),1), + ('prefResourceReportFormat',None,asn1.TYPE(asn1.IMPLICIT(49,cls=asn1.CONTEXT_FLAG),ResourceReportId),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'ResourceReportRequest') +ExtendedServicesRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('function',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('create',1),('delete',2),('modify',3)],None,None)),0), + ('packageType',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('packageName',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('userId',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('retentionTime',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),IntUnit),1), + ('permissions',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),Permissions),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('taskSpecificParameters',None,asn1.TYPE(asn1.IMPLICIT(10,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1), + ('waitAction',None,asn1.TYPE(asn1.IMPLICIT(11,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('wait',1),('waitIfPossible',2),('dontWait',3),('dontReturnPackage',4)],None,None)),0), + ('elements',None,ElementSetName,1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'ExtendedServicesRequest') +Close=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('closeReason',None,CloseReason,0), + ('diagnosticInformation',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('resourceReportFormat',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),ResourceReportId),1), + ('resourceReport',None,asn1.TYPE(asn1.EXPLICIT(5,cls=asn1.CONTEXT_FLAG),ResourceReport),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'Close') +DeleteResultSetRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('deleteFunction',None,asn1.TYPE(asn1.IMPLICIT(32,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('list',0),('all',1)],None,None)),0), + ('resultSetList',None, asn1.SEQUENCE_OF (ResultSetId),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'DeleteResultSetRequest') +OccurrenceByAttributes=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('attributes',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),AttributeList),0), + ('occurrences',None, asn1.CHOICE ([('global',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('byDatabase',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('db',None,DatabaseName,0), + ('num',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('otherDbInfo',None,OtherInformation,1)], seq_name = None))))]),1), + ('otherOccurInfo',None,OtherInformation,1)], seq_name = None)) +Records=asn1.CHOICE ([('responseRecords',None,asn1.TYPE(asn1.IMPLICIT(28,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (NamePlusRecord))), + ('nonSurrogateDiagnostic',None,asn1.TYPE(asn1.IMPLICIT(130,cls=asn1.CONTEXT_FLAG),DefaultDiagFormat)), + ('multipleNonSurDiagnostics',None,asn1.TYPE(asn1.IMPLICIT(205,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DiagRec)))]) +Segment=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('numberOfRecordsReturned',None,asn1.TYPE(asn1.IMPLICIT(24,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('segmentRecords',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (NamePlusRecord)),0), + ('otherInfo',None,OtherInformation,1)], seq_name = 'Segment') +TermInfo=asn1.SEQUENCE ([('term',None,Term,0), + ('displayTerm',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('suggestedAttributes',None,AttributeList,1), + ('alternativeTerm',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (AttributesPlusTerm)),1), + ('globalOccurrences',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('byAttributes',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),OccurrenceByAttributes),1), + ('otherTermInfo',None,OtherInformation,1)], seq_name = 'TermInfo') +SearchResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('resultCount',None,asn1.TYPE(asn1.IMPLICIT(23,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('numberOfRecordsReturned',None,asn1.TYPE(asn1.IMPLICIT(24,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('nextResultSetPosition',None,asn1.TYPE(asn1.IMPLICIT(25,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('searchStatus',None,asn1.TYPE(asn1.IMPLICIT(22,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('resultSetStatus',None,asn1.TYPE(asn1.IMPLICIT(26,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('subset',1),('interim',2),('none',3)],None,None)),1), + ('presentStatus',None,PresentStatus,1), + ('records',None,Records,1), + ('additionalSearchInfo',None,asn1.TYPE(asn1.IMPLICIT(203,cls=asn1.CONTEXT_FLAG),OtherInformation),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'SearchResponse') +Entry=asn1.CHOICE ([('termInfo',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),TermInfo)), + ('surrogateDiagnostic',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),DiagRec))]) +RPNStructure=asn1.CHOICE ([('op',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),Operand)), + ('rpnRpnOp',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +ScanRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('databaseNames',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DatabaseName)),0), + ('attributeSet',None,AttributeSetId,1), + ('termListAndStartPoint',None,AttributesPlusTerm,0), + ('stepSize',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('numberOfTermsRequested',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('preferredPositionInResponse',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'ScanRequest') +PresentResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('numberOfRecordsReturned',None,asn1.TYPE(asn1.IMPLICIT(24,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('nextResultSetPosition',None,asn1.TYPE(asn1.IMPLICIT(25,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('presentStatus',None,PresentStatus,0), + ('records',None,Records,1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'PresentResponse') +SortRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('inputResultSetNames',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),0), + ('sortedResultSetName',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('sortSequence',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (SortKeySpec)),0), + ('otherInfo',None,OtherInformation,1)], seq_name = 'SortRequest') +ListEntries=asn1.SEQUENCE ([('entries',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (Entry)),1), + ('nonsurrogateDiagnostics',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DiagRec)),1)], seq_name = 'ListEntries') +RPNQuery=asn1.SEQUENCE ([('attributeSet',None,AttributeSetId,0), + ('rpn',None,RPNStructure,0)], seq_name = 'RPNQuery') +ScanResponse=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('stepSize',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('scanStatus',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('success',0),('partial_1',1),('partial_2',2),('partial_3',3),('partial_4',4),('partial_5',5),('failure',6)],None,None)),0), + ('numberOfEntriesReturned',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('positionOfTerm',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('entries',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),ListEntries),1), + ('attributeSet',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),AttributeSetId),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'ScanResponse') +RpnRpnOp=asn1.SEQUENCE ([('rpn1',None,RPNStructure,0), + ('rpn2',None,RPNStructure,0), + ('op',None,Operator,0)], seq_name = 'RpnRpnOp') +Query=asn1.CHOICE ([('type_0',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.ANY)), + ('type_1',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),RPNQuery)), + ('type_2',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('type_100',None,asn1.TYPE(asn1.EXPLICIT(100,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('type_101',None,asn1.TYPE(asn1.IMPLICIT(101,cls=asn1.CONTEXT_FLAG),RPNQuery)), + ('type_102',None,asn1.TYPE(asn1.EXPLICIT(102,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('type_104',None,asn1.TYPE(asn1.IMPLICIT(104,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL))]) +SearchRequest=asn1.SEQUENCE ([('referenceId',None,ReferenceId,1), + ('smallSetUpperBound',None,asn1.TYPE(asn1.IMPLICIT(13,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('largeSetLowerBound',None,asn1.TYPE(asn1.IMPLICIT(14,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('mediumSetPresentNumber',None,asn1.TYPE(asn1.IMPLICIT(15,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('replaceIndicator',None,asn1.TYPE(asn1.IMPLICIT(16,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('resultSetName',None,asn1.TYPE(asn1.IMPLICIT(17,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('databaseNames',None,asn1.TYPE(asn1.IMPLICIT(18,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DatabaseName)),0), + ('smallSetElementSetNames',None,asn1.TYPE(asn1.EXPLICIT(100,cls=asn1.CONTEXT_FLAG),ElementSetNames),1), + ('mediumSetElementSetNames',None,asn1.TYPE(asn1.EXPLICIT(101,cls=asn1.CONTEXT_FLAG),ElementSetNames),1), + ('preferredRecordSyntax',None,asn1.TYPE(asn1.IMPLICIT(104,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('query',None,asn1.TYPE(asn1.EXPLICIT(21,cls=asn1.CONTEXT_FLAG),Query),0), + ('additionalSearchInfo',None,asn1.TYPE(asn1.IMPLICIT(203,cls=asn1.CONTEXT_FLAG),OtherInformation),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'SearchRequest') +APDU=asn1.CHOICE ([('initRequest',None,asn1.TYPE(asn1.IMPLICIT(20,cls=asn1.CONTEXT_FLAG),InitializeRequest)), + ('initResponse',None,asn1.TYPE(asn1.IMPLICIT(21,cls=asn1.CONTEXT_FLAG),InitializeResponse)), + ('searchRequest',None,asn1.TYPE(asn1.IMPLICIT(22,cls=asn1.CONTEXT_FLAG),SearchRequest)), + ('searchResponse',None,asn1.TYPE(asn1.IMPLICIT(23,cls=asn1.CONTEXT_FLAG),SearchResponse)), + ('presentRequest',None,asn1.TYPE(asn1.IMPLICIT(24,cls=asn1.CONTEXT_FLAG),PresentRequest)), + ('presentResponse',None,asn1.TYPE(asn1.IMPLICIT(25,cls=asn1.CONTEXT_FLAG),PresentResponse)), + ('deleteResultSetRequest',None,asn1.TYPE(asn1.IMPLICIT(26,cls=asn1.CONTEXT_FLAG),DeleteResultSetRequest)), + ('deleteResultSetResponse',None,asn1.TYPE(asn1.IMPLICIT(27,cls=asn1.CONTEXT_FLAG),DeleteResultSetResponse)), + ('accessControlRequest',None,asn1.TYPE(asn1.IMPLICIT(28,cls=asn1.CONTEXT_FLAG),AccessControlRequest)), + ('accessControlResponse',None,asn1.TYPE(asn1.IMPLICIT(29,cls=asn1.CONTEXT_FLAG),AccessControlResponse)), + ('resourceControlRequest',None,asn1.TYPE(asn1.IMPLICIT(30,cls=asn1.CONTEXT_FLAG),ResourceControlRequest)), + ('resourceControlResponse',None,asn1.TYPE(asn1.IMPLICIT(31,cls=asn1.CONTEXT_FLAG),ResourceControlResponse)), + ('triggerResourceControlRequest',None,asn1.TYPE(asn1.IMPLICIT(32,cls=asn1.CONTEXT_FLAG),TriggerResourceControlRequest)), + ('resourceReportRequest',None,asn1.TYPE(asn1.IMPLICIT(33,cls=asn1.CONTEXT_FLAG),ResourceReportRequest)), + ('resourceReportResponse',None,asn1.TYPE(asn1.IMPLICIT(34,cls=asn1.CONTEXT_FLAG),ResourceReportResponse)), + ('scanRequest',None,asn1.TYPE(asn1.IMPLICIT(35,cls=asn1.CONTEXT_FLAG),ScanRequest)), + ('scanResponse',None,asn1.TYPE(asn1.IMPLICIT(36,cls=asn1.CONTEXT_FLAG),ScanResponse)), + ('sortRequest',None,asn1.TYPE(asn1.IMPLICIT(43,cls=asn1.CONTEXT_FLAG),SortRequest)), + ('sortResponse',None,asn1.TYPE(asn1.IMPLICIT(44,cls=asn1.CONTEXT_FLAG),SortResponse)), + ('segmentRequest',None,asn1.TYPE(asn1.IMPLICIT(45,cls=asn1.CONTEXT_FLAG),Segment)), + ('extendedServicesRequest',None,asn1.TYPE(asn1.IMPLICIT(46,cls=asn1.CONTEXT_FLAG),ExtendedServicesRequest)), + ('extendedServicesResponse',None,asn1.TYPE(asn1.IMPLICIT(47,cls=asn1.CONTEXT_FLAG),ExtendedServicesResponse)), + ('close',None,asn1.TYPE(asn1.IMPLICIT(48,cls=asn1.CONTEXT_FLAG),Close)), + ('duplicateDetectionRequest',None,asn1.TYPE(asn1.IMPLICIT(49,cls=asn1.CONTEXT_FLAG),ExtendedServicesRequest)), + ('duplicateDetectionResponse',None,asn1.TYPE(asn1.IMPLICIT(50,cls=asn1.CONTEXT_FLAG),DuplicateDetectionResponse))]) +RPNStructure['rpnRpnOp'] = ('rpnRpnOp', 1, RpnRpnOp) + + +#module GeneralDiagnosticContainer None +DiagnosticContainer=asn1.SEQUENCE_OF (DiagRec) + + +#module Explain None +PrimitiveDataType=asn1.INTEGER_class ([('octetString',0),('numeric',1),('date',2),('external',3),('string',4),('trueOrFalse',5),('oid',6),('intUnit',7),('empty',8),('noneOfTheAbove',100)],None,None) +NetworkAddress=asn1.CHOICE ([('internetAddress',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('hostAddress',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('port',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None))), + ('depricated',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('depricated0',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('depricated1',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('depricated2',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('depricated3',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),0)], seq_name = None))), + ('other',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('type',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('address',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0)], seq_name = None)))]) +AttributeOccurrence=asn1.SEQUENCE ([('attributeSet',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),AttributeSetId),1), + ('attributeType',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('mustBeSupplied',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL),1), + ('attributeValues',None, asn1.CHOICE ([('any_or_none',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('specific',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (StringOrNumeric)))]),0)], seq_name = 'AttributeOccurrence') +ValueDescription=asn1.CHOICE ([('integer',None,asn1.INTEGER_class ([],None,None)), + ('string',None,InternationalString), + ('octets',None,asn1.OCTSTRING), + ('oid',None,asn1.OBJECT_IDENTIFIER), + ('unit',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),Unit)), + ('valueAndUnit',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),IntUnit))]) +Path=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('tagType',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('tagValue',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0)], seq_name = None)) +IconObject=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('bodyType',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('ianaType',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('z3950type',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('otherType',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString))])),0), + ('content',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),0)], seq_name = None)) +LanguageCode=InternationalString +HumanString=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('language',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),LanguageCode),1), + ('text',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0)], seq_name = None)) +RecordTag=asn1.SEQUENCE ([('qualifier',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),StringOrNumeric),1), + ('tagValue',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0)], seq_name = 'RecordTag') +AttributeCombination=asn1.SEQUENCE_OF (AttributeOccurrence) +AttributeDescription=asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('attributeValue',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0), + ('equivalentAttributes',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (StringOrNumeric)),1)], seq_name = 'AttributeDescription') +DatabaseList=asn1.SEQUENCE_OF (DatabaseName) +AccessRestrictions=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('accessType',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('any',0),('search',1),('present',2),('specific_elements',3),('extended_services',4),('by_database',5)],None,None)),0), + ('accessText',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('accessChallenges',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER)),1)], seq_name = None)) +SearchKey=asn1.SEQUENCE ([('searchKey',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1)], seq_name = 'SearchKey') +ElementDataType=asn1.CHOICE ([('primitive',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),PrimitiveDataType)), + ('structured',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +AttributeValue=asn1.SEQUENCE ([('value',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('subAttributes',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (StringOrNumeric)),1), + ('superAttributes',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (StringOrNumeric)),1), + ('partialSupport',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL),1)], seq_name = 'AttributeValue') +ValueRange=asn1.SEQUENCE ([('lower',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),ValueDescription),1), + ('upper',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ValueDescription),1)], seq_name = 'ValueRange') +CommonInfo=asn1.SEQUENCE ([('dateAdded',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime),1), + ('dateChanged',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime),1), + ('expiry',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime),1), + ('humanString_Language',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),LanguageCode),1), + ('otherInfo',None,OtherInformation,1)], seq_name = 'CommonInfo') +ElementInfo=asn1.SEQUENCE ([('elementName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('elementTagPath',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Path),0), + ('dataType',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),ElementDataType),1), + ('required',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('repeatable',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),HumanString),1)], seq_name = 'ElementInfo') +ExtendedServicesInfo=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('type',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('name',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('privateType',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('restrictionsApply',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('feeApply',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('available',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('retentionSupported',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('waitAction',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('waitSupported',1),('waitAlways',2),('waitNotSupported',3),('depends',4),('notSaying',5)],None,None)),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(10,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('specificExplain',None,asn1.TYPE(asn1.IMPLICIT(11,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1), + ('esASN',None,asn1.TYPE(asn1.IMPLICIT(12,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'ExtendedServicesInfo') +RecordSyntaxInfo=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('recordSyntax',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('name',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('transferSyntaxes',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER)),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('asn1Module',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('abstractStructure',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (ElementInfo)),1)], seq_name = 'RecordSyntaxInfo') +PrivateCapabilities=asn1.SEQUENCE ([('operators',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('operator',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1)], seq_name = None))),1), + ('searchKeys',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (SearchKey)),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (HumanString)),1)], seq_name = 'PrivateCapabilities') +Units=asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('unit',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0)], seq_name = 'Units') +Charge=asn1.SEQUENCE ([('cost',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),IntUnit),0), + ('perWhat',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Unit),1), + ('text',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),HumanString),1)], seq_name = 'Charge') +ProcessingInformation=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('databaseName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),DatabaseName),0), + ('processingContext',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('access',0),('search',1),('retrieval',2),('record_presentation',3),('record_handling',4)],None,None)),0), + ('name',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('oid',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('instructions',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1)], seq_name = 'ProcessingInformation') +ValueSet=asn1.CHOICE ([('range',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),ValueRange)), + ('enumerated',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (ValueDescription)))]) +CategoryInfo=asn1.SEQUENCE ([('category',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('originalCategory',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('asn1Module',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'CategoryInfo') +UnitType=asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('unitType',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0), + ('units',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (Units)),0)], seq_name = 'UnitType') +ProximitySupport=asn1.SEQUENCE ([('anySupport',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('unitsSupported',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.CHOICE ([('known',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('private',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('unit',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('description',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1)], seq_name = None)))]))),1)], seq_name = 'ProximitySupport') +AttributeType=asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('attributeType',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('attributeValues',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (AttributeDescription)),0)], seq_name = 'AttributeType') +VariantValue=asn1.SEQUENCE ([('dataType',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),PrimitiveDataType),0), + ('values',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ValueSet),1)], seq_name = 'VariantValue') +ContactInfo=asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('address',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('email',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('phone',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'ContactInfo') +TagSetInfo=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('tagSet',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('name',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('elements',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('elementname',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('nicknames',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('elementTag',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('dataType',None,asn1.TYPE(asn1.EXPLICIT(5,cls=asn1.CONTEXT_FLAG),PrimitiveDataType),1), + ('otherTagInfo',None,OtherInformation,1)], seq_name = None))),1)], seq_name = 'TagSetInfo') +SchemaInfo=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('schema',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('name',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('tagTypeMapping',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('tagType',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('tagSet',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('defaultTagType',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL),1)], seq_name = None))),1), + ('recordStructure',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (ElementInfo)),1)], seq_name = 'SchemaInfo') +AttributeCombinations=asn1.SEQUENCE ([('defaultAttributeSet',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),AttributeSetId),0), + ('legalCombinations',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (AttributeCombination)),0)], seq_name = 'AttributeCombinations') +Iso8777Capabilities=asn1.SEQUENCE ([('searchKeys',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (SearchKey)),0), + ('restrictions',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1)], seq_name = 'Iso8777Capabilities') +OmittedAttributeInterpretation=asn1.SEQUENCE ([('defaultValue',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),StringOrNumeric),1), + ('defaultDescription',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1)], seq_name = 'OmittedAttributeInterpretation') +VariantType=asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('variantType',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('variantValue',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),VariantValue),1)], seq_name = 'VariantType') +AttributeTypeDetails=asn1.SEQUENCE ([('attributeType',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('defaultIfOmitted',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),OmittedAttributeInterpretation),1), + ('attributeValues',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (AttributeValue)),1)], seq_name = 'AttributeTypeDetails') +Costs=asn1.SEQUENCE ([('connectCharge',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),Charge),1), + ('connectTime',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),Charge),1), + ('displayCharge',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Charge),1), + ('searchCharge',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),Charge),1), + ('subscriptCharge',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),Charge),1), + ('otherCharges',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('forWhat',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),0), + ('charge',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Charge),0)], seq_name = None))),1)], seq_name = 'Costs') +AttributeSetInfo=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('attributeSet',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),AttributeSetId),0), + ('name',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('attributes',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (AttributeType)),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),HumanString),1)], seq_name = 'AttributeSetInfo') +TermListInfo=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('databaseName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),DatabaseName),0), + ('termLists',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('title',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('searchCost',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('optimized',0),('normal',1),('expensive',2),('filter',3)],None,None)),1), + ('scanable',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('broader',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('narrower',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1)], seq_name = None))),0)], seq_name = 'TermListInfo') +CategoryList=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('categories',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (CategoryInfo)),0)], seq_name = 'CategoryList') +RpnCapabilities=asn1.SEQUENCE ([('operators',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER_class ([('and',0),('or',1),('and_not',2),('prox',3)],None,None))),1), + ('resultSetAsOperandSupported',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('restrictionOperandSupported',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('proximity',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),ProximitySupport),1)], seq_name = 'RpnCapabilities') +VariantClass=asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('variantClass',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('variantTypes',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (VariantType)),0)], seq_name = 'VariantClass') +PerElementDetails=asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('recordTag',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),RecordTag),1), + ('schemaTags',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (Path)),1), + ('maxSize',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('minSize',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('avgSize',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('fixedSize',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('repeatable',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('required',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(12,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('contents',None,asn1.TYPE(asn1.IMPLICIT(13,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('billingInfo',None,asn1.TYPE(asn1.IMPLICIT(14,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('restrictions',None,asn1.TYPE(asn1.IMPLICIT(15,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('alternateNames',None,asn1.TYPE(asn1.IMPLICIT(16,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('genericNames',None,asn1.TYPE(asn1.IMPLICIT(17,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('searchAccess',None,asn1.TYPE(asn1.IMPLICIT(18,cls=asn1.CONTEXT_FLAG),AttributeCombinations),1)], seq_name = 'PerElementDetails') +VariantSetInfo=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('variantSet',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('name',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('variants',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (VariantClass)),1)], seq_name = 'VariantSetInfo') +AttributeSetDetails=asn1.SEQUENCE ([('attributeSet',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),AttributeSetId),0), + ('attributesByType',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (AttributeTypeDetails)),0)], seq_name = 'AttributeSetDetails') +ElementSetDetails=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('databaseName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),DatabaseName),0), + ('elementSetName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),ElementSetName),0), + ('recordSyntax',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('schema',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('detailsPerElement',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (PerElementDetails)),1)], seq_name = 'ElementSetDetails') +UnitInfo=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('unitSystem',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('units',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (UnitType)),1)], seq_name = 'UnitInfo') +QueryTypeDetails=asn1.CHOICE ([('private',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),PrivateCapabilities)), + ('rpn',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),RpnCapabilities)), + ('iso8777',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Iso8777Capabilities)), + ('z39_58',None,asn1.TYPE(asn1.IMPLICIT(100,cls=asn1.CONTEXT_FLAG),HumanString)), + ('erpn',None,asn1.TYPE(asn1.IMPLICIT(101,cls=asn1.CONTEXT_FLAG),RpnCapabilities)), + ('rankedList',None,asn1.TYPE(asn1.IMPLICIT(102,cls=asn1.CONTEXT_FLAG),HumanString))]) +TermListDetails=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('termListName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('attributes',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),AttributeCombinations),1), + ('scanInfo',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('maxStepSize',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('collatingSequence',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('increasing',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)], seq_name = None)),1), + ('estNumberTerms',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('sampleTerms',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (Term)),1)], seq_name = 'TermListDetails') +SortKeyDetails=asn1.SEQUENCE ([('description',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('elementSpecifications',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (Specification)),1), + ('attributeSpecifications',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),AttributeCombinations),1), + ('sortType',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('character',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('numeric',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('structured',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),HumanString))])),1), + ('caseSensitivity',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('always',0),('never',1),('default_yes',2),('default_no',3)],None,None)),1)], seq_name = 'SortKeyDetails') +AccessInfo=asn1.SEQUENCE ([('queryTypesSupported',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (QueryTypeDetails)),1), + ('diagnosticsSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER)),1), + ('attributeSetIds',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (AttributeSetId)),1), + ('schemas',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER)),1), + ('recordSyntaxes',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER)),1), + ('resourceChallenges',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER)),1), + ('restrictedAccess',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),AccessRestrictions),1), + ('costInfo',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),Costs),1), + ('variantSets',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER)),1), + ('elementSetNames',None,asn1.TYPE(asn1.IMPLICIT(10,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (ElementSetName)),1), + ('unitSystems',None,asn1.TYPE(asn1.IMPLICIT(11,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1)], seq_name = 'AccessInfo') +TargetInfo=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('name',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('recent_news',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('icon',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),IconObject),1), + ('namedResultSets',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('multipleDBsearch',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('maxResultSets',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('maxResultSize',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('maxTerms',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('timeoutInterval',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),IntUnit),1), + ('welcomeMessage',None,asn1.TYPE(asn1.IMPLICIT(10,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('contactInfo',None,asn1.TYPE(asn1.IMPLICIT(11,cls=asn1.CONTEXT_FLAG),ContactInfo),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(12,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('nicknames',None,asn1.TYPE(asn1.IMPLICIT(13,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('usage_restrictions',None,asn1.TYPE(asn1.IMPLICIT(14,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('paymentAddr',None,asn1.TYPE(asn1.IMPLICIT(15,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('hours',None,asn1.TYPE(asn1.IMPLICIT(16,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('dbCombinations',None,asn1.TYPE(asn1.IMPLICIT(17,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DatabaseList)),1), + ('addresses',None,asn1.TYPE(asn1.IMPLICIT(18,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (NetworkAddress)),1), + ('languages',None,asn1.TYPE(asn1.IMPLICIT(101,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('characterSets',None,asn1.TYPE(asn1.IMPLICIT(102,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('commonAccessInfo',None,asn1.TYPE(asn1.IMPLICIT(19,cls=asn1.CONTEXT_FLAG),AccessInfo),1)], seq_name = 'TargetInfo') +AttributeDetails=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('databaseName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),DatabaseName),0), + ('attributesBySet',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (AttributeSetDetails)),1), + ('attributeCombinations',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),AttributeCombinations),1)], seq_name = 'AttributeDetails') +SortDetails=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('databaseName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),DatabaseName),0), + ('sortKeys',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (SortKeyDetails)),1)], seq_name = 'SortDetails') +RetrievalRecordDetails=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('databaseName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),DatabaseName),0), + ('schema',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('recordSyntax',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('description',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('detailsPerElement',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (PerElementDetails)),1)], seq_name = 'RetrievalRecordDetails') +DatabaseInfo=asn1.SEQUENCE ([('commonInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),CommonInfo),1), + ('name',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),DatabaseName),0), + ('explainDatabase',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL),1), + ('nicknames',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DatabaseName)),1), + ('icon',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),IconObject),1), + ('user_fee',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('available',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('titleString',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('keywords',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (HumanString)),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('associatedDbs',None,asn1.TYPE(asn1.IMPLICIT(10,cls=asn1.CONTEXT_FLAG),DatabaseList),1), + ('subDbs',None,asn1.TYPE(asn1.IMPLICIT(11,cls=asn1.CONTEXT_FLAG),DatabaseList),1), + ('disclaimers',None,asn1.TYPE(asn1.IMPLICIT(12,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('news',None,asn1.TYPE(asn1.IMPLICIT(13,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('recordCount',None,asn1.TYPE(asn1.EXPLICIT(14,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('actualNumber',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('approxNumber',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)))])),1), + ('defaultOrder',None,asn1.TYPE(asn1.IMPLICIT(15,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('avRecordSize',None,asn1.TYPE(asn1.IMPLICIT(16,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('maxRecordSize',None,asn1.TYPE(asn1.IMPLICIT(17,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('hours',None,asn1.TYPE(asn1.IMPLICIT(18,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('bestTime',None,asn1.TYPE(asn1.IMPLICIT(19,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('lastUpdate',None,asn1.TYPE(asn1.IMPLICIT(20,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime),1), + ('updateInterval',None,asn1.TYPE(asn1.IMPLICIT(21,cls=asn1.CONTEXT_FLAG),IntUnit),1), + ('coverage',None,asn1.TYPE(asn1.IMPLICIT(22,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('proprietary',None,asn1.TYPE(asn1.IMPLICIT(23,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1), + ('copyrightText',None,asn1.TYPE(asn1.IMPLICIT(24,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('copyrightNotice',None,asn1.TYPE(asn1.IMPLICIT(25,cls=asn1.CONTEXT_FLAG),HumanString),1), + ('producerContactInfo',None,asn1.TYPE(asn1.IMPLICIT(26,cls=asn1.CONTEXT_FLAG),ContactInfo),1), + ('supplierContactInfo',None,asn1.TYPE(asn1.IMPLICIT(27,cls=asn1.CONTEXT_FLAG),ContactInfo),1), + ('submissionContactInfo',None,asn1.TYPE(asn1.IMPLICIT(28,cls=asn1.CONTEXT_FLAG),ContactInfo),1), + ('accessInfo',None,asn1.TYPE(asn1.IMPLICIT(29,cls=asn1.CONTEXT_FLAG),AccessInfo),1)], seq_name = 'DatabaseInfo') +Explain_Record=asn1.CHOICE ([('targetInfo',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),TargetInfo)), + ('databaseInfo',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),DatabaseInfo)), + ('schemaInfo',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),SchemaInfo)), + ('tagSetInfo',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),TagSetInfo)), + ('recordSyntaxInfo',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),RecordSyntaxInfo)), + ('attributeSetInfo',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),AttributeSetInfo)), + ('termListInfo',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),TermListInfo)), + ('extendedServicesInfo',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),ExtendedServicesInfo)), + ('attributeDetails',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),AttributeDetails)), + ('termListDetails',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),TermListDetails)), + ('elementSetDetails',None,asn1.TYPE(asn1.IMPLICIT(10,cls=asn1.CONTEXT_FLAG),ElementSetDetails)), + ('retrievalRecordDetails',None,asn1.TYPE(asn1.IMPLICIT(11,cls=asn1.CONTEXT_FLAG),RetrievalRecordDetails)), + ('sortDetails',None,asn1.TYPE(asn1.IMPLICIT(12,cls=asn1.CONTEXT_FLAG),SortDetails)), + ('processing',None,asn1.TYPE(asn1.IMPLICIT(13,cls=asn1.CONTEXT_FLAG),ProcessingInformation)), + ('variants',None,asn1.TYPE(asn1.IMPLICIT(14,cls=asn1.CONTEXT_FLAG),VariantSetInfo)), + ('units',None,asn1.TYPE(asn1.IMPLICIT(15,cls=asn1.CONTEXT_FLAG),UnitInfo)), + ('categoryList',None,asn1.TYPE(asn1.IMPLICIT(100,cls=asn1.CONTEXT_FLAG),CategoryList))]) +ElementDataType['structured'] = ('structured', 1, asn1.SEQUENCE_OF(ElementInfo)) + + +#module RecordSyntax_SUTRS None +SutrsRecord=InternationalString + + +#module RecordSyntax_generic None +Usage=asn1.SEQUENCE ([('type',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('redistributable',1),('restricted',2),('licensePointer',3)],None,None)),0), + ('restriction',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'Usage') +TagPath=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('tagType',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('tagValue',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0), + ('tagOccurrence',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = None)) +ElementData=asn1.CHOICE ([('octets',None,asn1.OCTSTRING), + ('numeric',None,asn1.INTEGER_class ([],None,None)), + ('date',None,asn1.GeneralizedTime), + ('ext',None,asn1.EXTERNAL), + ('string',None,InternationalString), + ('trueOrFalse',None,asn1.BOOLEAN), + ('oid',None,asn1.OBJECT_IDENTIFIER), + ('intUnit',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),IntUnit)), + ('elementNotThere',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('elementEmpty',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('noDataRequested',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('diagnostic',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('subtree',None,asn1.TYPE(asn1.EXPLICIT(6,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.NULL)))]) +Variant=asn1.SEQUENCE ([('globalVariantSetId',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('triples',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('variantSetId',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('class',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('type',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('value',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('int',None,asn1.INTEGER_class ([],None,None)), + ('str',None,InternationalString), + ('oct',None,asn1.OCTSTRING), + ('oid',None,asn1.OBJECT_IDENTIFIER), + ('bool',None,asn1.BOOLEAN), + ('nul',None,asn1.NULL), + ('unit',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),Unit)), + ('valueAndUnit',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),IntUnit))])),0)], seq_name = None))),0)], seq_name = 'Variant') +Order=asn1.SEQUENCE ([('ascending',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('order',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = 'Order') +HitVector=asn1.SEQUENCE ([('satisfier',None,Term,1), + ('offsetIntoElement',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),IntUnit),1), + ('length',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),IntUnit),1), + ('hitRank',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('serverToken',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),1)], seq_name = 'HitVector') +ElementMetaData=asn1.SEQUENCE ([('seriesOrder',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),Order),1), + ('usageRight',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Usage),1), + ('hits',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (HitVector)),1), + ('displayName',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('supportedVariants',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (Variant)),1), + ('message',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('elementDescriptor',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),1), + ('surrogateFor',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),TagPath),1), + ('surrogateElement',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),TagPath),1), + ('other',None,asn1.TYPE(asn1.IMPLICIT(99,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1)], seq_name = 'ElementMetaData') +TaggedElement=asn1.SEQUENCE ([('tagType',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('tagValue',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0), + ('tagOccurrence',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('content',None,asn1.TYPE(asn1.EXPLICIT(4,cls=asn1.CONTEXT_FLAG),ElementData),0), + ('metaData',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),ElementMetaData),1), + ('appliedVariant',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),Variant),1)], seq_name = 'TaggedElement') +GenericRecord=asn1.SEQUENCE_OF (TaggedElement) +ElementData['subtree'] = ('subtree', asn1.EXPLICIT(6), asn1.SEQUENCE_OF(TaggedElement)) + + +#module RecordSyntax_ESTaskPackage None +TaskPackage=asn1.SEQUENCE ([('packageType',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('packageName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('userId',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('retentionTime',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),IntUnit),1), + ('permissions',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),Permissions),1), + ('description',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('serverReference',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),1), + ('creationDateTime',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime),1), + ('taskStatus',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('pending',0),('active',1),('complete',2),('aborted',3)],None,None)),0), + ('packageDiagnostics',None,asn1.TYPE(asn1.IMPLICIT(10,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DiagRec)),1), + ('taskSpecificParameters',None,asn1.TYPE(asn1.IMPLICIT(11,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),0)], seq_name = 'TaskPackage') + + +#module ResourceReport_Format_Resource_2 None +Estimate=asn1.SEQUENCE ([('type',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0), + ('value',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),IntUnit),0)], seq_name = 'Estimate') +ResourceReport_2=asn1.SEQUENCE ([('estimates',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (Estimate)),1), + ('message',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'ResourceReport_2') + + +#module AccessControlFormat_prompt_1 None +PromptId=asn1.CHOICE ([('enummeratedPrompt',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('type',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('groupId',0),('userId',1),('password',2),('newPassword',3),('copyright',4),('sessionId',5)],None,None)),0), + ('suggestedString',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = None))), + ('nonEnumeratedPrompt',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString))]) +Encryption=asn1.SEQUENCE ([('cryptType',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),1), + ('credential',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),1), + ('data',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),0)], seq_name = 'Encryption') +Challenge=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('promptId',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),PromptId),0), + ('defaultResponse',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('promptInfo',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('character',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('encrypted',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Encryption))])),1), + ('regExpr',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('responseRequired',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.NULL),1), + ('allowedValues',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('shouldSave',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.NULL),1), + ('dataType',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('integer',1),('date',2),('float',3),('alphaNumeric',4),('url_urn',5),('boolean',6)],None,None)),1), + ('diagnostic',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1)], seq_name = None)) +Response=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('promptId',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),PromptId),0), + ('promptResponse',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('string',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('accept',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN)), + ('acknowledge',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('diagnostic',None,asn1.TYPE(asn1.EXPLICIT(4,cls=asn1.CONTEXT_FLAG),DiagRec)), + ('encrypted',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),Encryption))])),0)], seq_name = None)) +PromptObject=asn1.CHOICE ([('challenge',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),Challenge)), + ('response',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Response))]) + + +#module AccessControlFormat_des_1 None +DRNType=asn1.SEQUENCE ([('userId',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),1), + ('salt',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),1), + ('randomNumber',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),0)], seq_name = 'DRNType') +DES_RN_Object=asn1.CHOICE ([('challenge',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),DRNType)), + ('response',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),DRNType))]) + + +#module AccessControlFormat_krb_1 None +KRBRequest=asn1.SEQUENCE ([('service',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('instance',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('realm',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'KRBRequest') +KRBResponse=asn1.SEQUENCE ([('userid',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('ticket',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),0)], seq_name = 'KRBResponse') +KRBObject=asn1.CHOICE ([('challenge',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),KRBRequest)), + ('response',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),KRBResponse))]) + + +#module ESFormat_PersistentResultSet None +ClientPartNotToKeep_prs=asn1.SEQUENCE ([('clientSuppliedResultSet',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('replaceOrAppend',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('replace',1),('append',2)],None,None)),1)], seq_name = 'ClientPartNotToKeep_prs') +ServerPart_prs=asn1.SEQUENCE ([('serverSuppliedResultSet',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('numberOfRecords',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = 'ServerPart_prs') +PersistentResultSet=asn1.CHOICE ([('esRequest',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('toKeep',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL),0), + ('notToKeep',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ClientPartNotToKeep_prs),1)], seq_name = None))), + ('taskPackage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('clientPart',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL),0), + ('serverPart',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ServerPart_prs),1)], seq_name = None)))]) + + +#module ESFormat_PersistentQuery None +ClientPartToKeep_pq=asn1.SEQUENCE ([('dbNames',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('additionalSearchInfo',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),OtherInformation),1)], seq_name = 'ClientPartToKeep_pq') +ServerPart_pq=Query +ClientPartNotToKeep_pq=asn1.CHOICE ([('package',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('query',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),Query))]) +PersistentQuery=asn1.CHOICE ([('esRequest',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('toKeep',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_pq),1), + ('notToKeep',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ClientPartNotToKeep_pq),0)], seq_name = None))), + ('taskPackage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('clientPart',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_pq),1), + ('serverPart',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ServerPart_pq),0)], seq_name = None)))]) + + +#module ESFormat_ExportSpecification None +Destination=asn1.CHOICE ([('phoneNumber',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('faxNumber',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('x400address',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('emailAddress',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('pagerNumber',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('ftpAddress',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('ftamAddress',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('printerAddress',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('other',None,asn1.TYPE(asn1.IMPLICIT(100,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('vehicle',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('destination',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),0)], seq_name = None)))]) +ClientPartToKeep_es=asn1.SEQUENCE ([('composition',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),CompSpec),0), + ('exportDestination',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),Destination),0)], seq_name = 'ClientPartToKeep_es') +ExportSpecification=asn1.CHOICE ([('esRequest',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('toKeep',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_es),0), + ('notToKeep',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL),0)], seq_name = None))), + ('taskPackage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('clientPart',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_es),0), + ('serverPart',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL),0)], seq_name = None)))]) + + +#module ESFormat_PeriodicQuerySchedule None +Period=asn1.CHOICE ([('unit',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),IntUnit)), + ('businessDaily',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('continuous',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('other',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString))]) +ClientPartToKeep_pqs=asn1.SEQUENCE ([('activeFlag',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('databaseNames',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('resultSetDisposition',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('replace',1),('append',2),('createNew',3)],None,None)),1), + ('alertDestination',None,asn1.TYPE(asn1.EXPLICIT(4,cls=asn1.CONTEXT_FLAG),Destination),1), + ('exportParameters',None,asn1.TYPE(asn1.EXPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('packageName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('exportPackage',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ExportSpecification))])),1)], seq_name = 'ClientPartToKeep_pqs') +ServerPart_pqs=asn1.SEQUENCE ([('databaseNames',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('actualQuery',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Query),0), + ('serverStatedPeriod',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),Period),0), + ('expiration',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime),1), + ('resultSetPackage',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('lastQueryTime',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime),1), + ('lastResultNumber',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('numberSinceModify',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('additionalSearchInfo',None,asn1.TYPE(asn1.EXPLICIT(8,cls=asn1.CONTEXT_FLAG),OtherInformation),1)], seq_name = 'ServerPart_pqs') +ClientPartNotToKeep_pqs=asn1.SEQUENCE ([('databaseNames',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('querySpec',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('actualQuery',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Query)), + ('packageName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString))])),1), + ('clientSuggestedPeriod',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),Period),1), + ('expiration',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime),1), + ('resultSetPackage',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('additionalSearchInfo',None,asn1.TYPE(asn1.EXPLICIT(5,cls=asn1.CONTEXT_FLAG),OtherInformation),1)], seq_name = 'ClientPartNotToKeep_pqs') +PeriodicQuerySchedule=asn1.CHOICE ([('esRequest',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('toKeep',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_pqs),0), + ('notToKeep',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ClientPartNotToKeep_pqs),0)], seq_name = None))), + ('taskPackage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('clientPart',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_pqs),0), + ('serverPart',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ServerPart_pqs),0)], seq_name = None)))]) + + +#module ESFormat_ItemOrder None +ClientPartNotToKeep_io=asn1.SEQUENCE ([('resultSetItem',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('resultSetId',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('item',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None)),1), + ('itemRequest',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1)], seq_name = 'ClientPartNotToKeep_io') +ServerPart_io=asn1.SEQUENCE ([('itemRequest',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1), + ('statusOrErrorReport',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1), + ('auxiliaryStatus',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('notReceived',1),('loanQueue',2),('forwarded',3),('unfilledCopyright',4),('filledCopyright',5)],None,None)),1)], seq_name = 'ServerPart_io') +CreditCardInfo=asn1.SEQUENCE ([('nameOnCard',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('expirationDate',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('cardNumber',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),0)], seq_name = 'CreditCardInfo') +ClientPartToKeep_io=asn1.SEQUENCE ([('supplDescription',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1), + ('contact',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('phone',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('email',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = None)),1), + ('addlBilling',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('paymentMethod',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('billInvoice',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('prepay',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('depositAccount',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('creditCard',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),CreditCardInfo)), + ('cardInfoPreviouslySupplied',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('privateKnown',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('privateNotKnown',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL))])),0), + ('customerReference',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('customerPONumber',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = None)),1)], seq_name = 'ClientPartToKeep_io') +ItemOrder=asn1.CHOICE ([('esRequest',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('toKeep',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_io),1), + ('notToKeep',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ClientPartNotToKeep_io),0)], seq_name = None))), + ('taskPackage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('clientPart',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_io),1), + ('serverPart',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ServerPart_io),0)], seq_name = None)))]) + + +#module ESFormat_Update None +ClientPartToKeep_upd=asn1.SEQUENCE ([('action',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('recordInsert',1),('recordReplace',2),('recordDelete',3),('elementUpdate',4)],None,None)),0), + ('databaseName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('schema',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('elementSetName',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'ClientPartToKeep_upd') +CorrelationInfo=asn1.SEQUENCE ([('note',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('id',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = 'CorrelationInfo') +SuppliedRecords=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('recordId',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('number',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('string',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('opaque',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING))])),1), + ('supplementalId',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('timeStamp',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime)), + ('versionNumber',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('previousVersion',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL))])),1), + ('correlationInfo',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),CorrelationInfo),1), + ('record',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),0)], seq_name = None)) +ClientPartNotToKeep_upd=SuppliedRecords +TaskPackageRecordStructure=asn1.SEQUENCE ([('recordOrSurDiag',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('record',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('diagnostic',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),DiagRec))])),1), + ('correlationInfo',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),CorrelationInfo),1), + ('recordStatus',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('success',1),('queued',2),('inProcess',3),('failure',4)],None,None)),0)], seq_name = 'TaskPackageRecordStructure') +ServerPart_upd=asn1.SEQUENCE ([('updateStatus',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('success',1),('partial',2),('failure',3)],None,None)),0), + ('globalDiagnostics',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DiagRec)),1), + ('taskPackageRecords',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (TaskPackageRecordStructure)),0)], seq_name = 'ServerPart_upd') +Update=asn1.CHOICE ([('esRequest',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('toKeep',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_upd),0), + ('notToKeep',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ClientPartNotToKeep_upd),0)], seq_name = None))), + ('taskPackage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('clientPart',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_upd),0), + ('serverPart',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ServerPart_upd),0)], seq_name = None)))]) + + +#module ESFormat_ExportInvocation None +ClientPartToKeep_ei=asn1.SEQUENCE ([('exportSpec',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('packageName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('packageSpec',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ExportSpecification))])),0), + ('numberOfCopies',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = 'ClientPartToKeep_ei') +ClientPartNotToKeep_ei=asn1.SEQUENCE ([('resultSetId',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('records',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('all',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('ranges',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('start',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('count',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = None))))])),0)], seq_name = 'ClientPartNotToKeep_ei') +ServerPart_ei=asn1.SEQUENCE ([('estimatedQuantity',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),IntUnit),1), + ('quantitySoFar',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),IntUnit),1), + ('estimatedCost',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),IntUnit),1), + ('costSoFar',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),IntUnit),1)], seq_name = 'ServerPart_ei') +ExportInvocation=asn1.CHOICE ([('esRequest',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('toKeep',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_ei),0), + ('notToKeep',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ClientPartNotToKeep_ei),0)], seq_name = None))), + ('taskPackage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('clientPart',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),ClientPartToKeep_ei),0), + ('serverPart',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),ServerPart_ei),1)], seq_name = None)))]) + + +#module UserInfoFormat_searchResult_1 None +ResultsByDB=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('databases',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('all',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('list',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DatabaseName)))])),0), + ('count',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('resultSetName',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = None)) +QueryExpression=asn1.CHOICE ([('term',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('queryTerm',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Term),0), + ('termComment',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = None))), + ('query',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),Query))]) +SearchInfoReport=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('subqueryId',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('fullQuery',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('subqueryExpression',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),QueryExpression),1), + ('subqueryInterpretation',None,asn1.TYPE(asn1.EXPLICIT(4,cls=asn1.CONTEXT_FLAG),QueryExpression),1), + ('subqueryRecommendation',None,asn1.TYPE(asn1.EXPLICIT(5,cls=asn1.CONTEXT_FLAG),QueryExpression),1), + ('subqueryCount',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('subqueryWeight',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),IntUnit),1), + ('resultsByDB',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),ResultsByDB),1)], seq_name = None)) + + +#module UserInfoFormat_userInfo_1 None +UserInfo_1=OtherInformation + + +#module ESpec_2 None +Occurrences=asn1.CHOICE ([('all',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('last',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('values',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('start',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('howMany',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = None)))]) +Espec_2_TagPath=asn1.SEQUENCE_OF (asn1.CHOICE ([('specificTag',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('schemaId',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('tagType',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('tagValue',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),StringOrNumeric),0), + ('occurrence',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),Occurrences),1)], seq_name = None))), + ('wildThing',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),Occurrences)), + ('wildPath',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL))])) +SimpleElement=asn1.SEQUENCE ([('path',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),Espec_2_TagPath),0), + ('variantRequest',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Variant),1)], seq_name = 'SimpleElement') +ElementRequest=asn1.CHOICE ([('simpleElement',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),SimpleElement)), + ('compositeElement',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('elementList',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('primitives',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString))), + ('specs',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (SimpleElement)))])),0), + ('deliveryTag',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Espec_2_TagPath),0), + ('variantRequest',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),Variant),1)], seq_name = None)))]) +Espec_2=asn1.SEQUENCE ([('elementSetNames',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),1), + ('defaultVariantSetId',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('defaultVariantRequest',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),Variant),1), + ('defaultTagType',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('elements',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (ElementRequest)),1)], seq_name = 'Espec_2') + + +#module ESpec_q None +Espec_q_RPNStructure=asn1.CHOICE ([('op',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),AttributesPlusTerm)), + ('rpnRpnOp',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +Espec_q_RpnRpnOp=asn1.SEQUENCE ([('rpn1',None,Espec_q_RPNStructure,0), + ('rpn2',None,Espec_q_RPNStructure,0), + ('op',None,asn1.TYPE(asn1.EXPLICIT(46,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('and',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('or',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('and_not',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL))])),0)], seq_name = 'Espec_q_RpnRpnOp') +Espec_q_AttributesPlusTerm=asn1.TYPE(asn1.IMPLICIT(102,cls=asn1.CONTEXT_FLAG),asn1.SEQUENCE ([('attributes',None,AttributeList,0), + ('term',None,Term,0)], seq_name = 'Espec_q_AttributesPlusTerm')) +ValueRestrictor=asn1.SEQUENCE ([('attributeSetId',None,asn1.OBJECT_IDENTIFIER,0), + ('nodeSelectionCriteria',None,Espec_q_RPNStructure,0)], seq_name = 'ValueRestrictor') +Espec_q=asn1.SEQUENCE ([('valueRestrictor',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),ValueRestrictor),0), + ('elementSelector',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1)], seq_name = 'Espec_q') +Espec_q_RPNStructure['rpnRpnOp'] = ('rpnRpnOp', 1, Espec_q_RpnRpnOp) + + +#!/usr/bin/env python +# Auto-generated from auth_file_info.asn at Wed, 02 Jun 2004 15:30:48 +0000 +from PyZ3950 import asn1 +#module UserInfoFormat_authorityFileInfo None +AuthorityFileInfo=asn1.SEQUENCE ([('name',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),HumanString),0), + ('database',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('exclusive',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL),1)], seq_name = 'AuthorityFileInfo') + + +#!/usr/bin/env python +# Auto-generated from charset_1.asn at Wed, 02 Jun 2004 15:30:48 +0000 +from PyZ3950 import asn1 +#module UserInfoFormat_charSetandLanguageNegotiation_1 None +Environment=asn1.CHOICE ([('sevenBit',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('eightBit',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +Iso10646=asn1.SEQUENCE ([('collections',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('encodingLevel',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0)], seq_name = 'Iso10646') +LeftAndRight=asn1.SEQUENCE ([('gLeft',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('g0',0),('g1',1),('g2',2),('g3',3)],None,None)),0), + ('gRight',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('g1',1),('g2',2),('g3',3)],None,None)),0)], seq_name = 'LeftAndRight') +LanguageCode1=asn1.GeneralString +PrivateCharacterSet=asn1.CHOICE ([('viaOid',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER))), + ('externallySpecified',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('previouslyAgreedUpon',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +InitialSet=asn1.SEQUENCE ([('g0',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('g1',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('g2',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('g3',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('c0',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('c1',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = 'InitialSet') +Iso2022=asn1.CHOICE ([('originProposal',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('proposedEnvironment',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),Environment),1), + ('proposedSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER_class ([],None,None))),0), + ('proposedInitialSets',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InitialSet)),0), + ('proposedLeftAndRight',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),LeftAndRight),0)], seq_name = None))), + ('targetResponse',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('selectedEnvironment',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),Environment),0), + ('selectedSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER_class ([],None,None))),0), + ('selectedinitialSet',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InitialSet),0), + ('selectedLeftAndRight',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),LeftAndRight),0)], seq_name = None)))]) +OriginProposal=asn1.SEQUENCE ([('proposedCharSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.CHOICE ([('iso2022',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Iso2022)), + ('iso10646',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Iso10646)), + ('private',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),PrivateCharacterSet))]))),1), + ('proposedlanguages',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (LanguageCode1)),1), + ('recordsInSelectedCharSets',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)], seq_name = 'OriginProposal') +TargetResponse=asn1.SEQUENCE ([('selectedCharSets',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('iso2022',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Iso2022)), + ('iso10646',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Iso10646)), + ('private',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),PrivateCharacterSet)), + ('none',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL))])),1), + ('selectedLanguage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),LanguageCode1),1), + ('recordsInSelectedCharSets',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)], seq_name = 'TargetResponse') +CharSetandLanguageNegotiation=asn1.CHOICE ([('proposal',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),OriginProposal)), + ('response',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),TargetResponse))]) + + +#!/usr/bin/env python +# Auto-generated from charset_2.asn at Wed, 02 Jun 2004 15:30:48 +0000 +from PyZ3950 import asn1 +#module NegotiationRecordDefinition_charSetandLanguageNegotiation_2 None +InitialSet_2=asn1.SEQUENCE ([('g0',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('g1',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('g2',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('g3',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('c0',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('c1',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = 'InitialSet_2') +LanguageCode2=asn1.GeneralString +LeftAndRight_2=asn1.SEQUENCE ([('gLeft',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('g0',0),('g1',1),('g2',2),('g3',3)],None,None)),0), + ('gRight',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('g1',1),('g2',2),('g3',3)],None,None)),1)], seq_name = 'LeftAndRight_2') +PrivateCharacterSet2=asn1.CHOICE ([('viaOid',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER))), + ('externallySpecified',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('previouslyAgreedUpon',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +Iso10646_2=asn1.SEQUENCE ([('collections',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0), + ('encodingLevel',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0)], seq_name = 'Iso10646_2') +Environment_2=asn1.CHOICE ([('sevenBit',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('eightBit',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +Iso2022_2=asn1.CHOICE ([('originProposal',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('proposedEnvironment',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),Environment_2),1), + ('proposedSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER_class ([],None,None))),0), + ('proposedInitialSets',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InitialSet_2)),0), + ('proposedLeftAndRight',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),LeftAndRight_2),0)], seq_name = None))), + ('targetResponse',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('selectedEnvironment',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),Environment_2),0), + ('selectedSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER_class ([],None,None))),0), + ('selectedinitialSet',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InitialSet_2),0), + ('selectedLeftAndRight',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),LeftAndRight_2),0)], seq_name = None)))]) +TargetResponse2=asn1.SEQUENCE ([('selectedCharSets',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('iso2022',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Iso2022_2)), + ('iso10646',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Iso10646_2)), + ('private',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),PrivateCharacterSet2)), + ('none',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL))])),1), + ('selectedLanguage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),LanguageCode2),1), + ('recordsInSelectedCharSets',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)], seq_name = 'TargetResponse2') +OriginProposal2=asn1.SEQUENCE ([('proposedCharSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.CHOICE ([('iso2022',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Iso2022_2)), + ('iso10646',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Iso10646_2)), + ('private',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),PrivateCharacterSet2))]))),1), + ('proposedlanguages',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (LanguageCode2)),1), + ('recordsInSelectedCharSets',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)], seq_name = 'OriginProposal2') +CharSetandLanguageNegotiation2=asn1.CHOICE ([('proposal',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),OriginProposal2)), + ('response',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),TargetResponse2))]) + + +#!/usr/bin/env python +# Auto-generated from charset_3.asn at Wed, 02 Jun 2004 15:30:49 +0000 +from PyZ3950 import asn1 +#module NegotiationRecordDefinition_charSetandLanguageNegotiation_3 None +Environment_3=asn1.CHOICE ([('sevenBit',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('eightBit',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +LeftAndRight_3=asn1.SEQUENCE ([('gLeft',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('g0',0),('g1',1),('g2',2),('g3',3)],None,None)),0), + ('gRight',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('g1',1),('g2',2),('g3',3)],None,None)),1)], seq_name = 'LeftAndRight_3') +InitialSet_3=asn1.SEQUENCE ([('g0',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('g1',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('g2',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('g3',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('c0',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('c1',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = 'InitialSet_3') +LanguageCode3=asn1.GeneralString +PrivateCharacterSet_3=asn1.CHOICE ([('viaOid',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.OBJECT_IDENTIFIER))), + ('externallySpecified',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('previouslyAgreedUpon',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL))]) +Iso2022_3=asn1.CHOICE ([('originProposal',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('proposedEnvironment',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),Environment_3),1), + ('proposedSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER_class ([],None,None))),0), + ('proposedInitialSets',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InitialSet_3)),0), + ('proposedLeftAndRight',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),LeftAndRight_3),0)], seq_name = None))), + ('targetResponse',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('selectedEnvironment',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),Environment_3),0), + ('selectedSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.INTEGER_class ([],None,None))),0), + ('selectedinitialSet',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InitialSet_3),0), + ('selectedLeftAndRight',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),LeftAndRight_3),0)], seq_name = None)))]) +Iso10646_3=asn1.SEQUENCE ([('collections',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('encodingLevel',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),0)], seq_name = 'Iso10646_3') +TargetResponse_3=asn1.SEQUENCE ([('selectedCharSets',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('iso2022',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Iso2022_3)), + ('iso10646',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Iso10646_3)), + ('private',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),PrivateCharacterSet_3)), + ('none',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL))])),1), + ('selectedLanguage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),LanguageCode3),1), + ('recordsInSelectedCharSets',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)], seq_name = 'TargetResponse_3') +OriginProposal_3=asn1.SEQUENCE ([('proposedCharSets',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.CHOICE ([('iso2022',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Iso2022_3)), + ('iso10646',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Iso10646_3)), + ('private',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),PrivateCharacterSet_3))]))),1), + ('proposedlanguages',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (LanguageCode3)),1), + ('recordsInSelectedCharSets',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)], seq_name = 'OriginProposal_3') +CharSetandLanguageNegotiation_3=asn1.CHOICE ([('proposal',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),OriginProposal_3)), + ('response',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),TargetResponse_3))]) + + +#!/usr/bin/env python +# Auto-generated from edit_replace_qual.asn at Wed, 02 Jun 2004 15:30:49 +0000 +from PyZ3950 import asn1 +#module ERAQ None +EditReplaceActionQualifier=asn1.SEQUENCE ([('persistentResultSetPackageName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('numberOfRecords',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('creationDateTime',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),0), + ('reviewCode',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('reviewNote',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('changeDataInfo',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('fieldIdentifier',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('oldValue',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('oldValueTruncationAttribute',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('conditionalField',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('conditionalValue',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('conditionalTruncationAttribute',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('newValue',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('editReplaceType',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('fieldInsert',0),('fieldDelete',1),('fieldReplace',2),('subfieldInsert',3),('subfieldDelete',4),('subfieldReplace',5),('subfieldMerge',6),('indicatorChange',7),('dataStringChange',8)],None,None)),0), + ('case',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)], seq_name = None))),0)], seq_name = 'EditReplaceActionQualifier') + + +#!/usr/bin/env python +# Auto-generated from frag.asn at Wed, 02 Jun 2004 15:30:49 +0000 +from PyZ3950 import asn1 +#module FragmentSyntax None +Fragment=asn1.SEQUENCE ([('realSyntax',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('remainingOctets',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('fragment',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING),0)], seq_name = 'Fragment') + + +#!/usr/bin/env python +# Auto-generated from ins_qualifier.asn at Wed, 02 Jun 2004 15:30:49 +0000 +from PyZ3950 import asn1 +#module RIAQ None +RecordInsertActionQualifier=asn1.SEQUENCE ([('idsOrCode',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('nonDupRecordIds',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString))), + ('recordReviewCode',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString))])),0), + ('recordReviewNote',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'RecordInsertActionQualifier') + + +#!/usr/bin/env python +# Auto-generated from multiple_search_term_1.asn at Wed, 02 Jun 2004 15:30:49 +0000 +from PyZ3950 import asn1 +#module UserInfoFormat_multipleSearchTerms_1 None +MultipleSearchTerms_1=asn1.SEQUENCE_OF (Term) + + +#!/usr/bin/env python +# Auto-generated from multiple_search_term_2.asn at Wed, 02 Jun 2004 15:30:49 +0000 +from PyZ3950 import asn1 +#module UserInfoFormat_multipleSearchTerms_2 None +MultipleSearchTerms_2=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('term',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),Term),0), + ('flag',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)], seq_name = None)) + + +#!/usr/bin/env python +# Auto-generated from negot_es_size.asn at Wed, 02 Jun 2004 15:30:49 +0000 +from PyZ3950 import asn1 +#module NegotiationRecordDefinition_NegotiateEsSizes None +NegotiateEsSizes=asn1.SEQUENCE ([('maxMsgSize',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('maxTaskPackageSize',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('maxRecordSize',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = 'NegotiateEsSizes') + + +#!/usr/bin/env python +# Auto-generated from oclc.asn at Wed, 02 Jun 2004 15:30:49 +0000 +from PyZ3950 import asn1 +#module UserInfoFormat_OCLC_Info None +DBName=asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.VisibleString) +OCLC_UserInformation=asn1.SEQUENCE ([('motd',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.VisibleString),1), + ('dblist',None, asn1.SEQUENCE_OF (DBName),1), + ('failReason',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1), + ('text',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.VisibleString),1)], seq_name = 'OCLC_UserInformation') + + +#!/usr/bin/env python +# Auto-generated from opac.asn at Wed, 02 Jun 2004 15:30:49 +0000 +from PyZ3950 import asn1 +#module RecordSyntax_opac None +Volume=asn1.SEQUENCE ([('enumeration',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('chronology',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('enumAndChron',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'Volume') +CircRecord=asn1.SEQUENCE ([('availableNow',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('availablityDate',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('availableThru',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('restrictions',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('itemId',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('renewable',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('onHold',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('enumAndChron',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('midspine',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('temporaryLocation',None,asn1.TYPE(asn1.IMPLICIT(10,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'CircRecord') +HoldingsAndCircData=asn1.SEQUENCE ([('typeOfRecord',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('encodingLevel',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('format',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('receiptAcqStatus',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('generalRetention',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('completeness',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('dateOfReport',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('nucCode',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('localLocation',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('shelvingLocation',None,asn1.TYPE(asn1.IMPLICIT(10,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('callNumber',None,asn1.TYPE(asn1.IMPLICIT(11,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('shelvingData',None,asn1.TYPE(asn1.IMPLICIT(12,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('copyNumber',None,asn1.TYPE(asn1.IMPLICIT(13,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('publicNote',None,asn1.TYPE(asn1.IMPLICIT(14,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('reproductionNote',None,asn1.TYPE(asn1.IMPLICIT(15,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('termsUseRepro',None,asn1.TYPE(asn1.IMPLICIT(16,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('enumAndChron',None,asn1.TYPE(asn1.IMPLICIT(17,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('volumes',None,asn1.TYPE(asn1.IMPLICIT(18,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (Volume)),1), + ('circulationData',None,asn1.TYPE(asn1.IMPLICIT(19,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (CircRecord)),1)], seq_name = 'HoldingsAndCircData') +HoldingsRecord=asn1.CHOICE ([('marcHoldingsRecord',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('holdingsAndCirc',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),HoldingsAndCircData))]) +OPACRecord=asn1.SEQUENCE ([('bibliographicRecord',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1), + ('holdingsData',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (HoldingsRecord)),1)], seq_name = 'OPACRecord') + + +#!/usr/bin/env python +# Auto-generated from update_es_rev1.asn at Wed, 02 Jun 2004 15:30:49 +0000 +from PyZ3950 import asn1 +#module ESFormat_Update None +CorrelationInfo_updrev1=asn1.SEQUENCE ([('note',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('id',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = 'CorrelationInfo_updrev1') +OriginPartToKeep_updrev1=asn1.SEQUENCE ([('action',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('recordInsert',1),('recordReplace',2),('recordDelete',3),('elementUpdate',4),('specialUpdate',5)],None,None)),0), + ('databaseName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('schema',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OBJECT_IDENTIFIER),1), + ('elementSetName',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('actionQualifier',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),1)], seq_name = 'OriginPartToKeep_updrev1') +TargetPart_updrev1=asn1.SEQUENCE ([('updateStatus',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('success',1),('partial',2),('failure',3)],None,None)),0), + ('globalDiagnostics',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DiagRec)),1), + ('taskPackageRecords',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (TaskPackageRecordStructure)),0)], seq_name = 'TargetPart_updrev1') +TaskPackageRecordStructure_updrev1=asn1.SEQUENCE ([('recordOrSurDiag',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('record',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL)), + ('surrogateDiagnostics',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DiagRec)))])),1), + ('correlationInfo',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),CorrelationInfo_updrev1),1), + ('recordStatus',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('success',1),('queued',2),('inProcess',3),('failure',4)],None,None)),0), + ('supplementalDiagnostics',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (DiagRec)),1)], seq_name = 'TaskPackageRecordStructure_updrev1') +SuppliedRecords_updrev1=asn1.SEQUENCE_OF (asn1.SEQUENCE ([('recordId',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('number',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('string',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('opaque',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING))])),1), + ('supplementalId',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('timeStamp',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.GeneralizedTime)), + ('versionNumber',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('previousVersion',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL))])),1), + ('correlationInfo',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),CorrelationInfo_updrev1),1), + ('record',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.EXTERNAL),0)], seq_name = None)) +OriginPartNotToKeep_updrev1=SuppliedRecords_updrev1 +Update_updrev1=asn1.CHOICE ([('esRequest',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('toKeep',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),OriginPartToKeep_updrev1),0), + ('notToKeep',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),OriginPartNotToKeep_updrev1),0)], seq_name = None))), + ('taskPackage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('originPart',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),OriginPartToKeep_updrev1),0), + ('targetPart',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),TargetPart_updrev1),0)], seq_name = None)))]) + + +#!/usr/bin/env python +# Auto-generated from zsql.asn at Wed, 02 Jun 2004 15:30:50 +0000 +from PyZ3950 import asn1 +#module Z39_50_EXTERNALS_SQL_RS None +SQLCharacterSetClause=asn1.SEQUENCE ([('characterSetCatalog',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('characterSetSchema',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('characterSetName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'SQLCharacterSetClause') +SQLUniqueConstraint=asn1.INTEGER_class ([('unique',1),('primaryKey',2)],None,None) +SQLTransformDescriptor=asn1.SEQUENCE ([('groupName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('fromSQLFunctionName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('toSQLFunctionName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'SQLTransformDescriptor') +Z3950CharacterSetLanguageClause=asn1.SEQUENCE ([('characterSet',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('iso2022',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),Iso2022)), + ('iso10646',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Iso10646)), + ('private',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),PrivateCharacterSet)), + ('none',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL))])),1), + ('language',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),LanguageCode),1)], seq_name = 'Z3950CharacterSetLanguageClause') +SQLOrderingDescriptor=asn1.SEQUENCE ([('orderingForm',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('equals',1),('full',2),('none',3)],None,None)),0), + ('orderingCategory',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('relativeRoutineName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('hashRoutineName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('stateRoutineName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString))])),0)], seq_name = 'SQLOrderingDescriptor') +SQLQuery=asn1.SEQUENCE ([('abstractDatabaseFlag',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1), + ('queryExpression',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),0)], seq_name = 'SQLQuery') +SQLException=asn1.SEQUENCE ([('sqlState',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('sqlCode',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('sqlErrorText',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'SQLException') +SQLCollationClause=asn1.SEQUENCE ([('collationCatalog',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('collationSchema',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('collationName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = 'SQLCollationClause') +SQLMethodSpecDescriptor=asn1.SEQUENCE ([('routineName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('parameterList',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('parameterName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('mode',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('in',1),('out',2),('inout',3)],None,None)),1), + ('type',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL),0)], seq_name = None))),0), + ('languageName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('parameterStyle',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('sql',1),('general',2)],None,None)),1), + ('returnsDataDescriptor',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.NULL),1), + ('methodSpecType',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('originalSelfAsResult',1),('originalSelfAsLocator',2),('overriding',3)],None,None)),1), + ('methodType',None,asn1.TYPE(asn1.IMPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('instance',1),('static',2)],None,None)),1), + ('deterministic',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1), + ('possibleMethodFunction',None,asn1.TYPE(asn1.IMPLICIT(8,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('noSQL',1),('containsSQL',2),('readsSQLData',3),('writesSQLData',4)],None,None)),1), + ('invokableWhenNull',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),1)], seq_name = 'SQLMethodSpecDescriptor') +SQLAttributeDescriptor=asn1.SEQUENCE ([('attributeName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('dataDescriptor',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL),1), + ('collation',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),SQLCollationClause),1)], seq_name = 'SQLAttributeDescriptor') +SQLValue=asn1.SEQUENCE ([('dataItem',None, asn1.CHOICE ([('characterItem',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('numericItem',None,asn1.TYPE(asn1.EXPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('decimalItem',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('integerItem',None,asn1.TYPE(asn1.EXPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('smallIntItem',None,asn1.TYPE(asn1.EXPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None))), + ('floatItem',None,asn1.TYPE(asn1.EXPLICIT(6,cls=asn1.CONTEXT_FLAG),asn1.REAL)), + ('realItem',None,asn1.TYPE(asn1.EXPLICIT(7,cls=asn1.CONTEXT_FLAG),asn1.REAL)), + ('doublePrecisionItem',None,asn1.TYPE(asn1.EXPLICIT(8,cls=asn1.CONTEXT_FLAG),asn1.REAL)), + ('dateTimeItem',None,asn1.TYPE(asn1.EXPLICIT(9,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('intervalItem',None,asn1.TYPE(asn1.EXPLICIT(10,cls=asn1.CONTEXT_FLAG),InternationalString)), + ('varcharItem',None,asn1.TYPE(asn1.EXPLICIT(12,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('booleanItem',None,asn1.TYPE(asn1.EXPLICIT(13,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN)), + ('bitItem',None,asn1.TYPE(asn1.EXPLICIT(14,cls=asn1.CONTEXT_FLAG),asn1.BITSTRING_class ([],None,None))), + ('bitVarItem',None,asn1.TYPE(asn1.EXPLICIT(15,cls=asn1.CONTEXT_FLAG),asn1.BITSTRING_class ([],None,None))), + ('udtItem',None,asn1.TYPE(asn1.EXPLICIT(17,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.NULL))), + ('udtLocator',None,asn1.TYPE(asn1.EXPLICIT(18,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('rowItem',None,asn1.TYPE(asn1.EXPLICIT(19,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.NULL))), + ('refItem',None,asn1.TYPE(asn1.EXPLICIT(20,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('collectionItem',None,asn1.TYPE(asn1.EXPLICIT(21,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.NULL))), + ('collectionLocator',None,asn1.TYPE(asn1.EXPLICIT(22,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('bLOBItem',None,asn1.TYPE(asn1.EXPLICIT(30,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('bLOBLocator',None,asn1.TYPE(asn1.EXPLICIT(31,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('cLOBItem',None,asn1.TYPE(asn1.EXPLICIT(40,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('cLOBLocator',None,asn1.TYPE(asn1.EXPLICIT(41,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING)), + ('resultSetItem',None,asn1.TYPE(asn1.EXPLICIT(50,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (asn1.NULL))), + ('resultSetLocator',None,asn1.TYPE(asn1.EXPLICIT(51,cls=asn1.CONTEXT_FLAG),asn1.OCTSTRING))]),1), + ('indicator',None,asn1.TYPE(asn1.IMPLICIT(50,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('sqlnull',1),('sqlempty',2),('sqldefault',3)],None,None)),1)], seq_name = 'SQLValue') +SQLDataDescriptor=asn1.CHOICE ([('characterType',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('sqlCharacterSet',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),SQLCharacterSetClause),1), + ('zCharacterSetLanguage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Z3950CharacterSetLanguageClause),1), + ('collation',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),SQLCollationClause),1)], seq_name = None))), + ('numericType',None,asn1.TYPE(asn1.EXPLICIT(6,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('precision',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('scale',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None))), + ('decimalType',None,asn1.TYPE(asn1.EXPLICIT(7,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('precision',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('scale',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None))), + ('integerType',None,asn1.TYPE(asn1.EXPLICIT(8,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('precision',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('precisionBase',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('binary',0),('decimal',1)],None,None)),0)], seq_name = None))), + ('smallIntType',None,asn1.TYPE(asn1.EXPLICIT(9,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('precision',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('precisionBase',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('binary',0),('decimal',1)],None,None)),0)], seq_name = None))), + ('floatType',None,asn1.TYPE(asn1.EXPLICIT(10,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('mantissaPrecision',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('maxExponent',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None))), + ('realType',None,asn1.TYPE(asn1.EXPLICIT(11,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('mantissaPrecision',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('maxExponent',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None))), + ('doublePrecisionType',None,asn1.TYPE(asn1.EXPLICIT(12,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('mantissaPrecision',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('maxExponent',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None))), + ('dateTimeType',None,asn1.TYPE(asn1.IMPLICIT(9,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('dateTimeQualifier',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('date',1),('time',2),('timeStamp',3),('timeWithTimeZone',4),('timeStampWithTimeZone',5)],None,None)),0), + ('fractionalSecondsPrecision',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = None))), + ('intervalType',None,asn1.TYPE(asn1.IMPLICIT(10,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('intervalQualifier',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('year',1),('month',2),('day',3),('hour',4),('minute',5),('second',6),('yearToMonth',7),('dayToHour',8),('dayToMinute',9),('dayToSecond',10),('hourToMinute',11),('hourToSecond',12),('minuteToSecond',13)],None,None)),0), + ('leadingFieldPrecision',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1), + ('fractionalSecondsPrecision',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),1)], seq_name = None))), + ('varcharType',None,asn1.TYPE(asn1.IMPLICIT(12,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('characterSet',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),SQLCharacterSetClause),1), + ('zCharacterSetLanguage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Z3950CharacterSetLanguageClause),1), + ('collation',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),SQLCollationClause),1)], seq_name = None))), + ('booleanType',None,asn1.TYPE(asn1.IMPLICIT(13,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('bitType',None,asn1.TYPE(asn1.IMPLICIT(14,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None))), + ('bitVarType',None,asn1.TYPE(asn1.IMPLICIT(15,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None))), + ('sQLUserDefinedType',None,asn1.TYPE(asn1.IMPLICIT(17,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('udtName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('ordering',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),SQLOrderingDescriptor),1), + ('superTypeName',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('representation',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG), asn1.CHOICE ([('distinct',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.NULL)), + ('structured',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (SQLAttributeDescriptor))), + ('system_generated',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.NULL))])),0), + ('instantiable',None,asn1.TYPE(asn1.IMPLICIT(4,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('final',None,asn1.TYPE(asn1.IMPLICIT(5,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('transformDesc',None,asn1.TYPE(asn1.IMPLICIT(7,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (SQLTransformDescriptor)),1)], seq_name = None))), + ('sQLUserDefinedTypeLocatorType',None,asn1.TYPE(asn1.IMPLICIT(18,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None))), + ('sQLRowType',None,asn1.TYPE(asn1.IMPLICIT(19,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('fieldName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('dataType',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL),0)], seq_name = None)))), + ('sQLReferenceType',None,asn1.TYPE(asn1.EXPLICIT(20,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('scopeTableName',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = None))), + ('sQLCollectionType',None,asn1.TYPE(asn1.EXPLICIT(21,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('dataType',None,asn1.TYPE(asn1.EXPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.NULL),0), + ('collectionTypeConstructor',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('size',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('type',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('array',1),('set',2)],None,None)),0)], seq_name = None)),0), + ('sQLCollectionLocatorType',None,asn1.TYPE(asn1.IMPLICIT(22,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None)),0), + ('bLOBType',None,asn1.TYPE(asn1.IMPLICIT(30,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None)),0), + ('bLOBLocatorType',None,asn1.TYPE(asn1.IMPLICIT(31,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None)),0), + ('cLOBType',None,asn1.TYPE(asn1.EXPLICIT(40,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('sqlCharacterSet',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),SQLCharacterSetClause),1), + ('zCharacterSetLanguage',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),Z3950CharacterSetLanguageClause),1), + ('collation',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),SQLCollationClause),1)], seq_name = None)),0)], seq_name = None))), + ('cLOBLocatorType',None,asn1.TYPE(asn1.IMPLICIT(41,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None))), + ('sQLResultSetType',None,asn1.TYPE(asn1.IMPLICIT(50,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('resultSetName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('size',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0), + ('listOfSQLDataDescriptors',None,asn1.TYPE(asn1.IMPLICIT(3,cls=asn1.CONTEXT_FLAG),asn1.NULL),0)], seq_name = None)))), + ('sQLResultSetLocatorType',None,asn1.TYPE(asn1.IMPLICIT(51,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE ([('length',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([],None,None)),0)], seq_name = None)))]) +SQLFieldValue=asn1.SEQUENCE ([('sqlException',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),SQLException),1), + ('resultValue',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),SQLValue),1)], seq_name = 'SQLFieldValue') +SQLRowValue=asn1.SEQUENCE_OF (SQLFieldValue) +SQLDefaultOption=asn1.CHOICE ([('sqlValue',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),SQLValue)), + ('other',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.INTEGER_class ([('user',1),('currentuser',2),('sessionuser',3),('systemuser',4),('currentpath',5),('sqlnull',6),('sqlempty',7)],None,None)))]) +SQLColumnDescriptor=asn1.SEQUENCE ([('columnName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),0), + ('dataType',None,asn1.TYPE(asn1.EXPLICIT(1,cls=asn1.CONTEXT_FLAG),asn1.NULL),0), + ('columnConstraint',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('nullable',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),asn1.BOOLEAN),0), + ('uniqueConstraint',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),SQLUniqueConstraint),1), + ('check',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = None))),0), + ('sqlDefault',None,asn1.TYPE(asn1.EXPLICIT(3,cls=asn1.CONTEXT_FLAG),SQLDefaultOption),1)], seq_name = 'SQLColumnDescriptor') +SQLTableDescriptor=asn1.SEQUENCE ([('tableName',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),InternationalString),1), + ('listOfColumnDescriptors',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (SQLColumnDescriptor)),0), + ('tableConstraint',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF ( asn1.SEQUENCE ([('listOfColumnNames',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (InternationalString)),0), + ('uniqueContraint',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG),SQLUniqueConstraint),1), + ('check',None,asn1.TYPE(asn1.IMPLICIT(2,cls=asn1.CONTEXT_FLAG),InternationalString),1)], seq_name = None))),0)], seq_name = 'SQLTableDescriptor') +SQL_Result=asn1.SEQUENCE ([('tableDescriptor',None,asn1.TYPE(asn1.IMPLICIT(0,cls=asn1.CONTEXT_FLAG),SQLTableDescriptor),1), + ('listOfResultValues',None,asn1.TYPE(asn1.IMPLICIT(1,cls=asn1.CONTEXT_FLAG), asn1.SEQUENCE_OF (SQLRowValue)),1)], seq_name = 'SQL_Result') +SQLColumnDescriptor['dataType'] = ('dataType', asn1.EXPLICIT(1), SQLDataDescriptor) + +SQLDataDescriptor['sQLResultSetType'][0]['listOfSQLDataDescriptors'] = ('listOfSQLDataDescriptors', 3, asn1.SEQUENCE_OF (SQLDataDescriptor)) + +SQLDataDescriptor ['sQLUserDefinedType']['representation']['distinct'] = ('distinct', 0, SQLDataDescriptor) + +SQLDataDescriptor['sQLRowType'][0]['dataType'] = ('dataType', asn1.EXPLICIT(1), SQLDataDescriptor) + +SQLAttributeDescriptor['dataDescriptor'] = ('dataDescriptor', 1, SQLDataDescriptor) + +SQLValue['dataItem']['udtItem'] = ('udtItem', 17, asn1.SEQUENCE_OF(SQLValue)) + +SQLValue['dataItem']['rowItem'] = ('rowItem', 19, asn1.SEQUENCE_OF(SQLValue)) + +SQLValue['dataItem']['collectionItem'] = ('udtItem', 21, asn1.SEQUENCE_OF(SQLValue)) + +SQLValue['dataItem']['resultSetItem'] = ('udtItem', 50, asn1.SEQUENCE_OF(SQLValue)) + + diff --git a/python/PyZ3950/zdefs.py b/python/PyZ3950/zdefs.py new file mode 100644 index 0000000..9734db3 --- /dev/null +++ b/python/PyZ3950/zdefs.py @@ -0,0 +1,340 @@ +#!/usr/bin/env python + +import codecs + +from PyZ3950.z3950_2001 import * +from PyZ3950.oids import * + + +asn1.register_oid (Z3950_RECSYN_GRS1, GenericRecord) +asn1.register_oid (Z3950_RECSYN_SUTRS, asn1.GeneralString) +asn1.register_oid (Z3950_RECSYN_EXPLAIN, Explain_Record) +asn1.register_oid (Z3950_RECSYN_OPAC, OPACRecord) + +asn1.register_oid (Z3950_ES_PERSISTRS, PersistentResultSet) +asn1.register_oid (Z3950_ES_PERSISTQRY, PersistentQuery) +asn1.register_oid (Z3950_ES_PERIODQRY, PeriodicQuerySchedule) +asn1.register_oid (Z3950_ES_ITEMORDER, ItemOrder) +asn1.register_oid (Z3950_ES_DBUPDATE, Update) +asn1.register_oid (Z3950_ES_DBUPDATE_REV_1, Update_updrev1) +asn1.register_oid (Z3950_ES_EXPORTSPEC, ExportSpecification) +asn1.register_oid (Z3950_ES_EXPORTINV, ExportInvocation) + + +asn1.register_oid (Z3950_USR_SEARCHRES1, SearchInfoReport) +asn1.register_oid (Z3950_USR_INFO1, OtherInformation) +asn1.register_oid (Z3950_NEG_CHARSET3, CharSetandLanguageNegotiation_3) +asn1.register_oid (Z3950_USR_PRIVATE_OCLC_INFO, OCLC_UserInformation) + +# below here is subject to change without notice, as I try to +# figure out the appropriate balance between convenience and flexibility + +trace_charset = 0 + +impl_vers = "1.0 beta" # XXX +implementationId = 'PyZ39.50 - contact asl2@pobox.com' # haven't been assigned an official id, apply XXX + +def make_attr(set=None, atype=None, val=None, valType=None): + ae = AttributeElement() + if (set <> None): + ae.attributeSet = set + ae.attributeType = atype + if (valType == 'numeric' or (valType == None and isinstance(val, int))): + ae.attributeValue = ('numeric', val) + else: + cattr = AttributeElement['attributeValue']['complex']() + if (valType == None): + valType = 'string' + cattr.list = [(valType, val)] + ae.attributeValue = ('complex', cattr) + return ae + +# This list is needed to support recordsInSelectedCharSets == 0 when +# character set negotiation is in effect. The reason we don't +# just iterate over Z3950_RECSYN is that many of those are carried +# in OCTET STRINGs, and thus immune to negotiation; but maybe we should +# anyway. + +retrievalRecord_oids = [ + Z3950_RECSYN_EXPLAIN_ov, + Z3950_RECSYN_SUTRS_ov, + Z3950_RECSYN_OPAC_ov, + Z3950_RECSYN_SUMMARY_ov, + Z3950_RECSYN_GRS1_ov, + Z3950_RECSYN_ES_ov, + Z3950_RECSYN_FRAGMENT_ov, + Z3950_RECSYN_SQL_ov] + + +def register_retrieval_record_oids (ctx, new_codec_name = 'ascii'): + new_codec = codecs.lookup (new_codec_name) + def switch_codec (): + ctx.push_codec () + ctx.set_codec (asn1.GeneralString, new_codec) + for oid in retrievalRecord_oids: + ctx.register_charset_switcher (oid, switch_codec) + +iso_10646_oid_to_name = { + UNICODE_PART1_XFERSYN_UCS2_ov : 'utf-16', # XXX ucs-2 should differ from utf-16, in that ucs-2 forbids any characters not in the BMP, whereas utf-16 is a 16-bit encoding which encodes those characters into multiple 16-bit units + +# UNICODE_PART1_XFERSYN_UCS4_ov : 'ucs-4', # XXX no python support for this encoding? + UNICODE_PART1_XFERSYN_UTF16_ov : 'utf-16', + UNICODE_PART1_XFERSYN_UTF8_ov : 'utf-8' + } + +def try_get_iso10646_oid (charset_name): + for k,v in iso_10646_oid_to_name.iteritems (): + if charset_name == v: + return k + # XXX note that we don't know which of {UCS2, UTF16} oids we'll + # get from this. + +def asn_charset_to_name (charset_tup): + if trace_charset: + print "asn_charset_to_name", charset_tup + charset_name = None + (typ, charset) = charset_tup + if typ == 'iso10646': + charset_name = iso_10646_oid_to_name.get (charset.encodingLevel, + None) + elif typ == 'private': + (spectyp, val) = charset + if spectyp == 'externallySpecified': + oid = getattr (val, 'direct_reference', None) + if oid == Z3950_NEG_PRIVATE_INDEXDATA_CHARSETNAME_ov: + enctyp, encval = val.encoding + if enctyp == 'octet-aligned': + charset_name = encval + if trace_charset: + print "returning charset", charset_name + return charset_name + + +def charset_to_asn (charset_name): + oid = try_get_iso10646_oid (charset_name) + if oid <> None: + iso10646 = Iso10646_3 () + iso10646.encodingLevel = oid + return ('iso10646', iso10646) + else: + ext = asn1.EXTERNAL () + ext.direct_reference = Z3950_NEG_PRIVATE_INDEXDATA_CHARSETNAME_ov + ext.encoding = ('octet-aligned', charset_name) + return ('private', ('externallySpecified', ext)) + +class CharsetNegotReq: + def __init__ (self, charset_list = None, lang_list = None, + records_in_charsets = None): + """charset_list is a list of character set names, either ISO10646 +(UTF-8 or UTF-16), or private. We support Index Data's semantics +for private character sets (see +http://www.indexdata.dk/pipermail/yazlist/2003-March/000504.html), so +you can pass any character set name for which Python has a codec installed +(but please don't use rot13 in production). Note that there should be +at most one of each of (ISO10646, private). (No, I don't know why, but +it says so in the ASN.1 definition comments.) + +lang_list is a list of language codes, as defined in ANSI Z39.53-1994 +(see, e.g., http://xml.coverpages.org/nisoLang3-1994.html). + +records_in_charsets governs whether charset negotiation applies to +records, as well.) + +Any of these parameters can be None, since the corresponding +elements in the ASN.1 are OPTIONAL. +""" + self.charset_list = charset_list + self.lang_list = lang_list + self.records_in_charsets = records_in_charsets + def __str__ (self): + return "Charset negot request %s %s %s" % ( + str (self.charset_list), str (self.lang_list), + str (self.records_in_charsets)) + def pack_proposal (self): + origin_prop = OriginProposal_3 () + if self.charset_list <> None: + proposedCharSets = [] + for charset_name in self.charset_list: + proposedCharSets.append (charset_to_asn (charset_name)) + + origin_prop.proposedCharSets = proposedCharSets + if self.lang_list <> None: + origin_prop.proposedlanguages = self.lang_list + if self.records_in_charsets <> None: + origin_prop.recordsInSelectedCharSets = ( + self.records_in_charsets) + return ('proposal', origin_prop) + def unpack_proposal (self, csn): + (tag, proposal) = csn + assert (tag == 'proposal') + pcs = getattr (proposal, 'proposedCharSets', None) + if pcs <> None: + if trace_charset: + print "pcs", pcs + self.charset_list = [] + + for charset in pcs: + charset_name = asn_charset_to_name (charset) + if charset_name <> None: + self.charset_list.append (charset_name) + + lang = getattr (proposal, 'proposedlanguages', None) + if lang <> None: + self.lang_list = lang + self.records_in_charsets = getattr (proposal, + 'recordsInSelectedCharSets', None) + + +class CharsetNegotResp: + def __init__ (self, charset = None, lang = None, + records_in_charsets = None): + self.charset = charset + self.lang = lang + self.records_in_charsets = records_in_charsets + def __str__ (self): + return "CharsetNegotResp: %s %s %s" % ( + str (self.charset), str (self.lang), + str (self.records_in_charsets)) + def unpack_negot_resp (self, neg_resp): + typ, val = neg_resp + assert (typ == 'response') + self.charset = None + scs = getattr (val, 'selectedCharSets', None) + if scs <> None: + self.charset = asn_charset_to_name (scs) + self.lang = getattr (val, 'selectedLanguage', None) + self.records_in_charsets = getattr ( + val, 'recordsInSelectedCharSets', None) + def pack_negot_resp (self): + resp = TargetResponse_3 () + if self.charset <> None: + resp.selectedCharSets = charset_to_asn (self.charset) + if self.lang <> None: + resp.selectedLanguage = self.lang + if self.records_in_charsets <> None: + resp.recordsInSelectedCharSets = self.records_in_charsets + return ('response', resp) + + +def get_charset_negot (init): # can be passed either InitializeRequest or InitializeResponse + if trace_charset: + print init + if not init.options ['negotiation']: + return None + otherInfo = [] + if hasattr (init, 'otherInfo'): + otherInfo = init.otherInfo + elif hasattr (init, 'userInformationField'): + ui = init.userInformationField + if ui.direct_reference == Z3950_USR_INFO1_ov: + (enctype, otherInfo) = ui.encoding + + for oi in otherInfo: + if trace_charset: + print oi + (typ, val) = oi.information + if typ == 'externallyDefinedInfo': + if val.direct_reference == Z3950_NEG_CHARSET3_ov: + (typ, val) = val.encoding + if typ == 'single-ASN1-type': + return val + + return None + + +def set_charset_negot (init, val, v3_flag): + # again, can be passed either InitializeRequest or Response + negot = asn1.EXTERNAL () + negot.direct_reference = Z3950_NEG_CHARSET3_ov + negot.encoding= ('single-ASN1-type', val) + OtherInfoElt = OtherInformation[0] + oi_elt = OtherInfoElt () + oi_elt.information = ('externallyDefinedInfo', negot) + other_info = [oi_elt] + if trace_charset: + print v3_flag, oi_elt + + if v3_flag: + init.otherInfo = other_info + else: + ui = asn1.EXTERNAL () + + ui.direct_reference = Z3950_USR_INFO1_ov + ui.encoding = ('single-ASN1-type', other_info) # XXX test this + # see http://lcweb.loc.gov/z3950/agency/defns/user-1.html + init.userInformationField = ui + + +def_msg_size = 0x10000 + +# rethink optionslist. Maybe we should just turn on all the +# bits the underlying code supports? We do need to be able to +# turn off multiple result sets for testing (see tests/test2.py), +# but that doesn't have to be the default. +def make_initreq (optionslist = None, authentication = None, v3 = 0, + negotiate_charset = 0, preferredMessageSize = 0x100000, + maximumRecordSize = 0x100000, implementationId = "", + implementationName = "", implementationVersion = ""): + + # see http://lcweb.loc.gov/z3950/agency/wisdom/unicode.html + InitReq = InitializeRequest () + InitReq.protocolVersion = ProtocolVersion () + InitReq.protocolVersion ['version_1'] = 1 + InitReq.protocolVersion ['version_2'] = 1 + InitReq.protocolVersion ['version_3'] = v3 + InitReq.options = Options () + if optionslist <> None: + for o in optionslist: + InitReq.options[o] = 1 + InitReq.options ['search'] = 1 + InitReq.options ['present'] = 1 + InitReq.options ['delSet'] = 1 + InitReq.options ['scan'] = 1 + InitReq.options ['sort'] = 1 + InitReq.options ['extendedServices'] = 1 + InitReq.options ['dedup'] = 1 + InitReq.options ['negotiation'] = negotiate_charset # XXX can negotiate other stuff, too + +# Preferred and Exceptional msg sizes are pretty arbitrary -- +# we dynamically allocate no matter what + InitReq.preferredMessageSize = preferredMessageSize + InitReq.exceptionalRecordSize = maximumRecordSize + + if (implementationId): + InitReq.implementationId = implementationId + else: + InitReq.implementationId = impl_id + if (implementationName): + InitReq.implementationName = implementationName + else: + InitReq.implementationName = 'PyZ3950' + if (implementationVersion): + InitReq.implementationVersion = implementationVersion + else: + InitReq.implementationVersion = impl_vers + + if authentication <> None: + class UP: pass + up = UP () + upAttrList = ['userId', 'password', 'groupId'] + for val, attr in zip (authentication, upAttrList): # silently truncate + if val <> None: + setattr (up, attr, val) + InitReq.idAuthentication = ('idPass', up) + + return InitReq + +def make_sreq (query, dbnames, rsn, **kw): + sreq = SearchRequest () + sreq.smallSetUpperBound = 0 + sreq.largeSetLowerBound = 1 + sreq.mediumSetPresentNumber = 0 +# as per http://lcweb.loc.gov/z3950/lcserver.html, Jun 07 2001, +# to work around Endeavor bugs in 1.13 + sreq.replaceIndicator = 1 + sreq.resultSetName = rsn + sreq.databaseNames = dbnames + sreq.query = query + for (key, val) in kw.items (): + setattr (sreq, key, val) + return sreq diff --git a/python/PyZ3950/zmarc.py b/python/PyZ3950/zmarc.py new file mode 100644 index 0000000..d7a5044 --- /dev/null +++ b/python/PyZ3950/zmarc.py @@ -0,0 +1,1252 @@ +#!/usr/bin/env python + +"""Parses MARC-format data. The MARC class has a constructor +which takes binary MARC data. +""" + +# This file should be available from +# http://www.pobox.com/~asl2/software/PyZ3950/ +# and is licensed under the X Consortium license: +# Copyright (c) 2001, Aaron S. Lav, asl2@pobox.com +# All rights reserved. + +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, and/or sell copies of the Software, and to permit persons +# to whom the Software is furnished to do so, provided that the above +# copyright notice(s) and this permission notice appear in all copies of +# the Software and that both the above copyright notice(s) and this +# permission notice appear in supporting documentation. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +# OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +# OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR +# HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY SPECIAL +# INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER RESULTING +# FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +# NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +# WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +# Except as contained in this notice, the name of a copyright holder +# shall not be used in advertising or otherwise to promote the sale, use +# or other dealings in this Software without prior written authorization +# of the copyright holder. + +import sys +import string + +from xml.sax.saxutils import escape + +class MarcError (Exception): + pass + +def is_fixed (num): + return num < 10 + +fieldsep = '\x1e' +sep = '\x1f' # XXX or 1D for pseudo-marc output from z3950.c +recsep = '\x1d' + + +# Attributes for SGML DTD (!!!) If not present, then I1 I2 +attrHash = { 22 : ['ISDSLvl', 'I2'], + 24 : ['StdNum', 'DiffInd'], 28 : ['PubNmTyp', 'NteAdEnty'], + 33 : ['DateType', 'EventTyp'], 34 : ['ScapeTyp', 'I2'], + 41 : ['TransInd', 'I2'], 45 : ['TimePrd', 'I2'], + 50 : ['InLofC', 'CNSrc'], 55 : ['InNLC', 'CNCLSSrc'], + 60 : ['InNLM', 'CNSrc'], 70 : ['InNAL', 'I2'], + 72 : ['I1', 'CodeSrc'], 82 : ['Edition', 'CNSrc'], + 86 : ['NumbrSrc', 'I2'], 100 : ['NameType', 'I2'], + 110: ['NameType', 'I2'], 111 : ['NameType', 'I2'], + 130: ['NFChars', 'I2'], 150 : ['I1', 'NFChars'], + 151: ['I1', 'NFChars'], 210 : ['AddEnty', 'I2'], + 211: ['AddEnty', 'NFChars'], 212 : ['AddEnty', 'I2'], + 214: ['AddEnty', 'NFChars'], 222 : ['I1', 'NFChars'], + 240: ['PrntDisp', 'NFChars'], 242 : ['AddEnty', 'NFChars'], + 243: ['PrntDisp', 'NFChars'], 245 : ['AddEnty', 'NFChars'], + 246: ['NCAddEty', 'TitleTyp'],247 : ['AddEnty', 'NoteCntl'], + 270: ['Level', 'AddrType'], 355 : ['CntlElmt', 'I2'], + 362: ['DTFormat', 'I2'], 400 : ['NameType', 'Pronoun'], + 410: ['NameType', 'Pronoun'], 411 : ['NameType', 'Pronoun'], + 430: ['I1', 'NFChars'], 440 : ['I1', 'NFChars'], + 450: ['I1', 'NFChars'], 451 : ['I1', 'NFChars'], + 490: ['Traced', 'I2'], 505 : ['DCC', 'CDLevel'], + 510: ['CoverLoc', 'I2'], 511 : ['DCC', 'I2'], + 516: ['DCC', 'I2'], 521 : ['DCC', 'I2'], + 520: ['DCC', 'I2'], 522 : ['DCC', 'I2'], + 524: ['DCC', 'I2'], 535 : ['Holds', 'I2'], + 537: ['DCC', 'I2'], 551 : ['I1', 'NFChars'], + 555: ['DCC', 'I2'], 556 : ['DCC', 'I2'], + 565: ['DCC', 'I2'], 567 : ['DCC', 'I2'], + 581: ['DCC', 'I2'], 582 : ['DCC', 'I2'], + 586: ['DCC', 'I2'], 600 : ['NameType', 'SubjSys'], + 610: ['NameType', 'SubjSys'], 611 : ['NameType', 'SubjSys'], + 630: ['NFChars', 'SubjSys'], 650 : ['SubjLvl', 'SubjSys'], + 651: ['I1', 'SubjSys'], 653 : ['IndexLvl', 'I2'], + 654: ['IndexLvl', 'I2'], 655 : ['Type', 'Source'], + 656: ['I1', 'Source'], 656 : ['I1', 'Source'], + 700: ['NameType','EntryType'],710 : ['NameType','EntryType'], + 711: ['NameType','EntryType'],730 : ['NFChars','EntryType'], + 740: ['NFChars','EntryType'], 760 : ['NoteCntl', 'I2'], + 762: ['NoteCntl', 'I2'], 765 : ['NoteCntl', 'I2'], + 767: ['NoteCntl', 'I2'], 772 : ['NoteCntl', 'I2'], + 773: ['NoteCntl', 'I2'], 775 : ['NoteCntl', 'I2'], + 776: ['NoteCntl', 'I2'], 777 : ['NoteCntl', 'I2'], + 780: ['NoteCntl', 'RelType'], 785 : ['NoteCntl', 'RelType'], + 787: ['NoteCntl', 'I2'], 800 : ['NameType', 'I2'], + 810: ['NameType', 'I2'], 811 : ['NameType', 'I2'], + 830: ['I1', 'NFChars'], 852 : ['Scheme', 'Order'], + 853: ['CmprsExpnd', 'Eval'], 853 : ['CmprsExpnd', 'Eval'], + 856: ['AccsMeth', 'I2'], 863 : ['EncLevel', 'HoldForm'], + 864: ['EncLevel','HoldForm'], 865 : ['EncLevel', 'HoldForm'], + 866: ['EncLevel','Notation'], 867 : ['EncLevel', 'Notation'], + 868: ['EncLevel','Notation'], 886 : ['FldType', 'I2']} + +subfieldHash = {'1' : "one", '2' : "two", '3' : "three", '4' : "four", '5' : "five", + '6' : "six", '7' : "seven", '8' : "eight", '9' : "nine", '0' : "zero"} + + +# takes text, turns it into tuple of (ind1, ind2, list of (subfield, val)) +# where subfield may repeat within the list. +# We need a structure like this in order to correctly parse both records: +# 650 0 $aWorld War, 1939-1945$xCampaigns$zTunisia +# 650 0 $aReal property$zMississippi$zTippah County$xMaps +# (taken from _USMARC Format for Bibliographic Data_, Prepared by Network +# Development and MARC Standards Office, Cataloging Distribution Service, +# Library of Congress, section 650 p. 5, page printed Dec 1991, looseleaf +# binder issued in 1988. + +def parse_sub (field): + if len (field) < 4: + if field == ' ': + # Is this legit? I've seen it, so handle correctly. + # specifically for au=Johansen, Arnold S from z3950.bibsys.no:2100 + return (' ', ' ', []) + return None + + if field [2] <> sep: + print "Bad field [2]", repr (field[2]) + return None + ind1 = field[0] + ind2 = field[1] + sublist = [] + splitlist = string.split (field[2:], sep) + for sub in splitlist: + if (sub == ''): # we begin w/ sep, so there's an empty prefix + continue + sublist.append ((sub[0], string.strip(sub[1:]))) + return (ind1, ind2, sublist) + +class MARC: + """Parses data into 'fields' attribute, indexed by field number. + Each value is a list. For fixed fields, it's a list of the string data + (one string for each occurence of the field in the original data). For + other fields, each list element is a tuple of (indicator 1, indicator 2, + subdata), where subdata is a list of tuples of (subfield indicator, + subfield data). Yes, this is kinda lame and I really should have + used structures, but this was some of the first Python code I ever + wrote. + """ + hdrbits = [5,6,7,8,17,18,19] + # Status, Type, Bib. Level, Type of Ctrl., Enc. Level, + # Descr. Cat. Form, Linked Rcd Reqt are all part of pseudoentry 0 + + def __init__(self, MARC = None, strict = 1): + """Parses MARC data. According to Bill Oldroyd (Bill.Oldroyd at + bl.uk), some servers don't set the character set and/or other + bits of the MARC header properly, so it's useful to set strict=0 + when dealing with such servers.""" + self.fields = {} + self.ok = 0 + self.marc = MARC + if MARC == None: + return # we'll write to it later + reclen = self.extract_int (0,4) + self.reclen = reclen + baseaddr = self.extract_int (12, 16) + zerostr = "" + for ind in self.hdrbits: zerostr = zerostr + self.marc[ind] + self.fields [0] = [zerostr] + if strict: + assert (self.marc[9] == ' ') # 'a' would be UCS/Unicode + assert (self.marc[10] == '2' and self.marc[11] == '2') + assert (self.marc[20:22] == '45') + pos = 24 + lastpos = baseaddr + while pos < baseaddr: + tag = self.marc[pos:pos+3] + if tag [0] == '\035' or tag [0] == '\036': + break + fieldlen = self.extract_int (pos + 3, pos + 6) + startpos = self.extract_int (pos + 7, pos + 11) + pos = pos + 12 + start = baseaddr + startpos + end = start + fieldlen + line = self.marc[start:end] + lastpos = startpos + if line [-1] == '\x1E': + line = line[:-1] + else: print "Weird, no hex 1E for", tag, repr(line) + field = string.atoi (tag) + if is_fixed (field): + self.fields[field] = [line] + # 1-elt list for orthogonality of processing + else: + ps = parse_sub (line) + if ps == None: + raise MarcError (line) + self.fields.setdefault (field, []).append (ps) + self.ok = 1 + # XXX should do more error-checking + def __str__ (self): + k = self.fields.keys () + k.sort () + lst = [] + for field in k: + lst.append (self.stringify_field (field)) + return "MARC: \n" + "\n".join (lst) + def stringify_field (self, k): + f = self.fields [k] + if is_fixed (k): + return str (k) + " " + f[0] + else: + str_l = [] + for l in f: + def fmt (x): + return '$%s%s' % (x[0], x[1]) + sl = map (fmt, l[2]) + str_l.append (str(k) + " " + l[0] + l[1] + " ".join (sl)) + return "\n".join (str_l) + def extract_int (self, start, end): + return string.atoi (self.marc[start:end+1]) + def get_MARC (self): + hdrlist = [' '] * 24 + zerostr = self.fields [0][0] + for i in range (len (zerostr)): + hdrlist [self.hdrbits [i]] = zerostr [i] + hdrlist [10] = '2' # replace these with data map, assert on read + hdrlist [11] = '2' + hdrlist [20] = '4' + hdrlist [21] = '5' + hdrlist [22] = '0' + hdrlist [23] = '0' + # later - 0-4 log. record length, 12-16 base addr of data + # directory: 3 of tag, 4 of field len, 5 of starting pos (rel. + # to base address of data, 12-16 + fields = self.fields.keys () + data = '' + directory = '' + for field in fields: + if field == 0: # pseudofield + continue + for fielddat in self.fields [field]: + start = len (data) + if is_fixed (field): + data += fielddat + else: + sublist = (fielddat [0] + fielddat [1] + + "".join (map (lambda s: sep + s[0] + s[1], + fielddat[2]))) + data += sublist + data += fieldsep # XXX is this right? + + length = len (data) - start + directory += "%.03d%.04d%.05d" % (field, length, start) + def id (x): return x + data += fieldsep + recsep + hdrlist [0:5] = map (id, "%.05d" % (len (hdrlist) + len (directory) + + len (data),)) + hdrlist [12:17] = map (id,"%.05d" % (len (hdrlist) + len (directory),)) + return "".join (hdrlist) + directory + data + + def toMARCXML(self): + " Convert record to MarcXML Schema " + keys = self.fields.keys() + keys.sort() + + + xmllist = ["\n", " %s\n" % (self.get_MARC()[:24])] + + for key in keys: + if key == 0: + # XXX Skip?? What are these?? + pass + elif key < 10: + xmllist.append(" %s\n" % (key, self.fields[key][0])) + else: + for instance in self.fields[key]: + if key < 100: + keystr = "0" + str(key) + else: + keystr = str(key) + xmllist.append(" \n" % (keystr, instance[0], instance[1])) + for sub in instance[2]: + xmllist.append(" %s\n" % (sub[0], escape(sub[1]))) + xmllist.append(" \n") + + xmllist.append("") + xml = ''.join(xmllist) + return xml + + def toOAIMARC(self): + """Convert record to OAI MARC XML Schema. + Note Well that OAI-MHP 2.0 recommends using MarcXML""" + + keys = self.fields.keys() + keys.sort() + marc = self.get_MARC() + + # What should these attributes really be? + xmllist = ['\n' % (marc[6], marc[7])] + + for key in keys: + if key == 0: + # Skip?? What are these? + pass + elif key < 10: + xmllist.append(" %s\n" % (key, self.fields[key][0])) + else: + for instance in self.fields[key]: + xmllist.append(" \n" % (key, instance[0], instance[1])) + for sub in instance[2]: + xmllist.append(" %s\n" % (sub[0], escape(sub[1]))) + xmllist.append(" \n") + + xmllist.append("") + xml = ''.join(xmllist) + return xml + + def sgml_processCode(self, k): + if attrHash.has_key(k): + i1 = attrHash[k][0] + i2 = attrHash[k][1] + else: + i1 = "I1" + i2 = "I2" + if k < 100: + keystr = "0%d" % (k) + else: + keystr = str(k) + + sgmllist = [] + for instance in self.fields[k]: + sgmllist.append(' \n' % (keystr, i1, instance[0], i2, instance[1])) + for sub in instance[2]: + stag = sub[0] + if subfieldHash.has_key(stag): + stag = subfieldHash[stag] + sgmllist.append(' <%s>%s\n' % (stag, escape(sub[1]), stag)) + sgmllist.append(' \n' % (keystr)) + sgml = ''.join(sgmllist) + return sgml + + + def toSGML(self): + """ Convert record to USMARC SGML """ + + keys = self.fields.keys() + keys.sort() + + # Extract field ranges + cflds = [] + numbcode = [] + mainenty = [] + titles = [] + edimprnt = [] + physdesc = [] + series = [] + notes = [] + subjaccs = [] + addenty = [] + linkenty = [] + saddenty = [] + holdaltg = [] + fld9xx = [] + # Ugly + for k in keys: + if k == 0: + pass + elif k < 10: + cflds.append(k) + elif k < 100: + numbcode.append(k) + elif k < 200: + mainenty.append(k) + elif k < 250: + titles.append(k) + elif k < 300: + edimprnt.append(k) + elif k < 400: + physdesc.append(k) + elif k < 500: + series.append(k) + elif k < 600: + notes.append(k) + elif k < 700: + subjaccs.append(k) + elif k < 760: + addenty.append(k) + elif k < 800: + linkenty.append(k) + elif k < 840: + saddenty.append(k) + elif k < 900: + holdaltg.append(k) + else: + fld9xx.append(k) + + + + marc = self.get_MARC() + + sgml = ["\n"] + sgml.append(" \n") + sgml.append(" %s\n" % (marc[:5])) + sgml.append(" %s\n" % (marc[5])) + sgml.append(" %s\n" % (marc[6])) + sgml.append(" %s\n" % (marc[7])) + sgml.append(" %s\n" % (marc[8:10])) + sgml.append(" %s\n" % (marc[10])) + sgml.append(" %s\n" % (marc[11])) + sgml.append(" %s\n" % (marc[12:17])) + sgml.append(" %s\n" % (marc[17])) + sgml.append(" %s\n" % (marc[18])) + sgml.append(" %s\n" % (marc[19])) + sgml.append(" \n") + sgml.append(" %s\n" % (marc[20])) + sgml.append(" %s\n" % (marc[21])) + sgml.append(" %s\n" % (marc[22])) + sgml.append(" %s\n" % (marc[23])) + sgml.append(" \n") + sgml.append(" \n") + sgml.append(" \n") + + sgml.append(" \n") + sgml.append(" \n") + for k in cflds: + sgml.append(" %s\n" % (k, self.fields[k][0], k)) + sgml.append(" \n") + sgml.append(" \n") + sgml.append(" \n") + for k in numbcode: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + + if mainenty: + sgml.append(" \n") + for k in mainenty: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if titles: + sgml.append(" \n") + for k in titles: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if edimprnt: + sgml.append(" \n") + for k in edimprnt: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if physdesc: + sgml.append(" \n") + for k in physdesc: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if series: + sgml.append(" \n") + for k in series: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if notes: + sgml.append(" \n") + for k in notes: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if subjaccs: + sgml.append(" \n") + for k in subjaccs: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if addenty: + sgml.append(" \n") + for k in addenty: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if linkenty: + sgml.append(" \n") + for k in linkenty: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if saddenty: + sgml.append(" \n") + for k in saddenty: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if holdaltg: + sgml.append(" \n") + for k in holdaltg: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + if fld9xx: + sgml.append(" \n") + for k in fld9xx: + sgml.append(self.sgml_processCode(k)) + sgml.append(" \n") + sgml.append(" \n") + sgml.append(" \n") + sgml.append("") + return ''.join(sgml) + + + def toSimpleDC(self): + """ Convert Marc into DC according to LC Crosswalk """ + xml = ['\n'] + + # Title -> 245 + if self.fields.has_key(245): + instance = self.fields[245][0][2] + a = '' + b = '' + for sub in instance: + if sub[0] == 'a': + a = sub[1] + elif sub[0] == 'b': + b = sub[1] + if a and b and a[-1] in [',', '.', ';', ':']: + a += " " + b + elif a and b: + a += "; " + b + elif b and not a: + a = b + xml.append(" %s\n" % (a)) + + # Creator -> 100,110,111,700,710,711 + authorKeys = [100, 110, 111, 700, 710, 711] + for k in authorKeys: + if self.fields.has_key(k): + for instance in self.fields[k]: + a = '' + h = '' + d = '' + for sub in instance[2]: + if sub[0] == 'a': + a = sub[1] + elif sub[0] == 'h': + h = sub[1] + elif sub[0] == 'd': + d = sub[1] + if h: + a += ", " + h + if d: + a += " (" + d + ")" + xml.append(" %s\n" % (a)) + + # Subject -> 600,610, 611, 630, 650, 653 + # Just dump in directly... + subjectList = [600, 610, 611, 630, 650, 653] + for s in subjectList: + if self.fields.has_key(s): + for instance in self.fields[s]: + subject = '' + for sub in instance[2]: + subject += sub[1] + " -- " + subject = subject[:-4] + xml.append(" %s\n" % (subject)) + + + # Publisher -> 260$a$b + if self.fields.has_key(260): + for instance in self.fields[260]: + a = b = '' + for sub in instance[2]: + if sub[0] == 'a': + a = sub[1] + elif sub[0] == 'b': + b = sub[1] + if b[-1] in [',', ';', ':']: + b = b[:-1] + elif sub[0] == 'c': + d = sub[1] + if d[-1] == '.': + d = d[:-1] + xml.append(" %s\n" % (d)) + if b: + a += " " + b + if a: + xml.append(" %s\n" % (a)) + + # Type -> 655 + if self.fields.has_key(655): + for instance in self.fields[655]: + gf = '' + for sub in instance[2]: + gf += sub[1] + " -- " + gf = gf[:-4] + xml.append(" %s\n" % (gf)) + + # Non Standard: Identifier -> ISSN/ISBN + for k in [20,22]: + if self.fields.has_key(k): + for instance in self.fields[k]: + for sub in instance[2]: + if sub[0] == 'a': + xml.append(" %s\n" % (sub[1])) + + # Non Standard: Description -> 300 + if self.fields.has_key(300): + for instance in self.fields[300]: + desc = '' + for sub in instance[2]: + desc += sub[1] + " " + desc = desc[:-1] + xml.append(" %s\n" % (desc)) + + xml.append("") + return ''.join(xml) + + + def toMODS(self): + """ Tranform MARC record into MODS according to CrossWalk """ + xml = ["\n"] + + # --- TitleInfo Fields --- + if self.fields.has_key(245): + instance = self.fields[245][0][2] + xml.append(" \n ") + insubtitle = 0 + for sub in instance: + if (sub[0] in ['a', 'f', 'g', 'k']): + xml.append(escape(sub[1])) + xml.append(' ') + elif (sub[0] == 'b'): + xml.append("\n %s " % (escape(sub[1]))) + insubtitle = 1 + if (insubtitle): + xml.append("\n \n") + else: + xml.append("\n \n") + + if self.fields.has_key(210): + instance = self.fields[210][0][2] + subf = {} + for sub in instance: + subf[sub[0]] = escape(sub[1]) + xml.append(' \n %s\n' % (subf['a'])) + if (subf.has_key('b')): + xml.append(' %s\n' % (subf['b'])) + xml.append(' \n') + + if self.fields.has_key(242): + instance = self.fields[242][0][2] + subf = {} + for sub in instance: + subf[sub[0]] = escape(sub[1]) + if (subf.has_key('i')): + label = ' displayLabel="%s"' % (subf['i']) + else: + label = '' + xml.append(' \n %s\n' % (label, subf['a'])) + if (subf.has_key('b')): + xml.append(' %s\n' % (subf['b'])) + if (subf.has_key('n')): + xml.append(' %s\n' % (subf['n'])) + if (subf.has_key('p')): + xml.append(' %s\n' % (subf['p'])) + xml.append(' \n') + + + if self.fields.has_key(246): + full = self.fields[246][0] + subfield2 = full[1] + instance = full[2] + subf = {} + for sub in instance: + subf[sub[0]] = escape(sub[1]) + if (subfield2 == 1): + xml.append(' \n %s\n' % (subf['a'])) + else: + xml.append(' \n %s\n' % (subf['a'])) + + if (subf.has_key('b')): + xml.append(' %s\n' % (subf['b'])) + if (subf.has_key('n')): + xml.append(' %s\n' % (subf['n'])) + if (subf.has_key('p')): + xml.append(' %s\n' % (subf['p'])) + xml.append(' \n') + + if self.fields.has_key(130): + uniform = self.fields[130][0][2] + elif self.fields.has_key(240): + uniform = self.fields[240][0][2] + else: + uniform = [] + if (uniform): + subf = {} + for sub in uniform: + subf[sub[0]] = escape(sub[1]) + xml.append(' \n %s\n' % (subf['a'])) + if (subf.has_key('n')): + xml.append(' %s\n' % (subf['n'])) + if (subf.has_key('p')): + xml.append(' %s\n' % (subf['p'])) + xml.append(' \n') + + + # --- Name Fields --- + # Creator -> 100,110,111, 700,710,711 + authorKeyTypes = {100 : 'personal', 110 : 'corporate', 111 : 'conference', 700 : 'personal', 710 : 'corporate', 711 : 'conference'} + + for k in authorKeyTypes.keys(): + if self.fields.has_key(k): + for instance in self.fields[k]: + subf = {} + for sub in instance[2]: + subf[sub[0]] = escape(sub[1]) + xml.append(' \n' % (k)) + xml.append(' \n' % (authorKeyTypes[k])) + xml.append(' creator\n') + xml.append(' %s\n' % (subf['a'])) + if (subf.has_key('d')): + xml.append(' %s\n' % (subf['d'])) + if (subf.has_key('b')): + if (k in [100,700]): + xml.append(' %s\n' % (subf['b'])) + else: + xml.append(' %s\n' % (subf['b'])) + if (subf.has_key('e')): + xml.append(' %s\n' % (subf['e'])) + if (subf.has_key('4')): + xml.append(' %s\n' % (subf['4'])) + xml.append(' \n') + + ldr = self.fields[0][0] + type = ldr[1] + types = {'a' : 'text', 't' : 'text', 'e' : 'cartographic', 'f' : 'cartographic', 'c' : 'notated music', 'd' : 'notated music', 'i' : 'sound recording - nonmusical', 'j' : 'sound recording - musical', 'k' : 'still image', 'g' : 'moving image', 'r' : 'three dimensional object', 'm' : 'software, multimedia', 'p' : 'mixed material'} + if (types.has_key(type)): + xml.append(' %s\n' % (types[type])) + + + if (self.fields.has_key(8)): + instance = self.fields[8][0] + # XXX LONG set of checks for type and various 008 positions :( + if (len(instance) > 33 and instance[33] == '0'): + xml.append(' non fiction\n') + + if self.fields.has_key(655): + for instance in self.fields[655]: + gf = '' + for sub in instance[2]: + gf += escape(sub[1]) + " -- " + gf = gf[:-4] + xml.append(" %s\n" % (gf)) + + # PublicationInfo from 260 + f260 = self.fields.get(260, []) + f44 = self.fields.get(44, []) + f46 = self.fields.get(46, []) + f250 = self.fields.get(250, []) + f310 = self.fields.get(310, []) + f321 = self.fields.get(321, []) + f8 = self.fields.get(8, []) + + if f260 or f46 or f250 or f310 or f321: + xml.append(' \n') + + if (f8 and len(f8[0]) > 18 ): + loc = f8[0][15:18] + if (loc <> ' ' and loc <> '|||'): + xml.append(' %s\n' % (loc)) + + if (f44): + for s in f44[0][2]: + if (s[0] == 'c'): + xml.append(' %s\n' % (escape(s[1]))) + if (f260): + instance = self.fields[260][0][2] + subf260 = {} + for sub in instance: + subf260[sub[0]] = escape(sub[1]) + if (subf260.has_key('a')): + xml.append(' %s\n' % (subf260['a'])) + if (subf260.has_key('b')): + xml.append(' %s\n' % (subf260['b'])) + if (subf260.has_key('c')): + xml.append(' %s\n' % (subf260['c'])) + + if (f8 and len(f8[0]) > 6): + f8type = f8[0][6] + if (f8type in ['e', 'p', 'r', 's', 't']): + date = f8[0][7:11] + if (date <> ' '): + xml.append(' %s\n' % (date)) + if (f8type in ['c', 'd', 'i', 'k', 'm', 'u', 'q']): + if (f8type == 'q'): + attrib = ' qualifier="questionable"' + else: + attrib = "" + start = f8[0][7:11] + if (start <> ' '): + xml.append(' %s\n' % (attrib, start)) + end = f8[0][11:15] + if (end <> ' '): + xml.append(' %s\n' % (attrib, end)) + + if (f260): + if subf260.has_key('g'): + xml.append(' %s\n' % (escape(subf260['g']))) + + if (f46): + instance = f46[0][2] + subf46 = {} + for s in instance: + subf46[s[0]] = escape(s[1]) + if (subf46.has_key('k')): + xml.append(' %s\n' % (subf46['k'])) + if (subf46.has_key('l')): + xml.append(' %s\n' % (subf46['l'])) + if (subf46.has_key('m')): + xml.append(' %s\n' % (subf46['m'])) + if (subf46.has_key('n')): + xml.append(' %s\n' % (subf46['n'])) + if (subf46.has_key('j')): + xml.append(' %s\n' % (subf46['j'])) + + if (f250): + for s in f250[0][2]: + if (s[0] == 'a'): + xml.append(' %s\n' % (escape(s[1]))) + break + + if (self.fields.has_key(0) and len(self.fields[0][0]) > 2): + f0type = self.fields[0][0][2] + if (f0type in ['b', 'i', 's']): + xml.append(' continuing\n') + elif (f0type in ['a', 'c', 'd', 'm']): + xml.append(' monographic\n') + + if (f310): + subf310 = {'a' : '', 'b' : ''} + for s in f310[0][2]: + subf310[s[0]] = escape(s[1]) + xml.append(' %s %s\n' % (subf310['a'], subf310['b'])) + if (f321): + subf321 = {'a' : '', 'b' : ''} + for s in f321[0][2]: + subf321[s[0]] = escape(s[1]) + xml.append(' %s %s\n' % (subf321['a'], subf321['b'])) + xml.append(' \n') + + + # --- Language --- + if (f8 and len(f8[0]) > 38): + lang = f8[0][35:38] + if (lang <> ' '): + xml.append(' %s\n' % (lang)) + if self.fields.has_key(41): + a = two = '' + for sub in self.fields[41][0][2]: + if sub[0] == 'a': + a = sub[1] + elif sub[0] == '2': + two = sub[1] + elif sub[0] == 'd' and not a: + a = sub[1] + elif sub[0] == 'e' and not a: + a = sub[1] + + if a and not two: + xml.append(' %s\n' % (escape(a))) + elif a: + xml.append(' %s\n' % (escape(two), escape(a))) + + # --- Physical Description --- + # XXX: Better field 008, 242,245,246$h, 256$a + f300 = self.fields.get(300, []) + if (f8 and len(f8[0]) > 23): + f8_23 = self.fields[8][0][23] + else: + f8_23 = ' ' + if (f300 or f8_23 == ' '): + xml.append(" \n") + if (f8_23 == ' '): + xml.append('
print
\n') + if f300: + desclist = [] + for s in f300[0][2]: + desclist.append(escape(s[1])) + desc = ' '.join(desclist) + xml.append(" %s\n" % (desc)) + xml.append("
\n") + + # Abstract + if self.fields.has_key(520): + xml.append(' ') + for sub in self.fields[520]: + if sub[0] == 'a' or sub[0] == 'b': + xml.append(escape(sub[1])) + xml.append("\n") + + # --- Table of Contents --- + if (self.fields.has_key(505)): + desclist = [] + for s in self.fields[505][0][2]: + if (s[0] in ['a', 'g', 'r', 't']): + desclist.append(escape(s[1])) + toc = ' '.join(desclist) + xml.append(' %s\n' % (toc)) + + # XXX TargetAudience (field 8 again) + + # --- Note --- + if (self.fields.has_key(500)): + for n in (self.fields[500]): + xml.append(' '); + for s in n: + if (s[0] == 'a'): + xml.append(escape(s[1])) + xml.append('\n') + + # --- Subject --- + subjectList = [600, 610, 611, 630, 650, 651, 653] + for s in subjectList: + if self.fields.has_key(s): + for instance in self.fields[s]: + xml.append(" \n") + + if (s in [600, 610, 611]): + stype = {600 : 'personal', 610 : 'corporate', 611 : 'conference'}[s] + xml.append(' \n' % (stype)) + for sub in instance[2]: + val = escape(sub[1]) + if (sub[0] == 'a'): + xml.append(' %s\n' % (val)) + elif (sub[0] == 'b'): + attrib = '' + if (s == 600): + attrib = ' type="termsOfAddress"' + xml.append(' %s\n' % (attrib, val)) + elif (sub[0] == 'd'): + xml.append(' %s\n' % (val)) + elif (sub[0] == 'e'): + xml.append(' %s\n' % (val)) + elif (sub[0] == '4'): + xml.append(' %s\n' % (val)) + elif (sub[0] == 'u'): + xml.append(' %s\n' % (val)) + elif sub[0] in ['v', 'x']: + xml.append(' %s\n' % (val)) + elif sub[0] == 'y': + xml.append(' %s\n' % (val)) + elif sub[0] == 'z': + xml.append(' %s\n' % (val)) + xml.append(' \n') + elif (s == 630): + for sub in instance[2]: + val = escape(sub[1]) + if (sub[0] == 'a'): + xml.append(' %s\n' % (val)) + elif (sub[0] == 'p'): + xml.append(' %s\n' % (val)) + elif (sub[0] == 'n'): + xml.append(' %s\n' % (val)) + elif sub[0] in ['v', 'x']: + xml.append(' %s\n' % (val)) + elif sub[0] == 'y': + xml.append(' %s\n' % (val)) + elif sub[0] == 'z': + xml.append(' %s\n' % (val)) + elif (s in [650, 653]): + for sub in instance[2]: + val = escape(sub[1]) + if (sub[0] == 'a'): + xml.append(' %s\n' % (val)) + elif sub[0] in ['v', 'x']: + xml.append(' %s\n' % (val)) + elif sub[0] == 'y': + xml.append(' %s\n' % (val)) + elif sub[0] == 'z': + xml.append(' %s\n' % (val)) + elif (s == 651): + for sub in instance[2]: + val = escape(sub[1]) + if (sub[0] == 'a'): + xml.append(' %s\n' % (val)) + elif sub[0] in ['v', 'x']: + xml.append(' %s\n' % (val)) + elif sub[0] == 'y': + xml.append(' %s\n' % (val)) + elif sub[0] == 'z': + xml.append(' %s\n' % (val)) + + xml.append(" \n") + if (self.fields.has_key(45)): + full = self.fields[45][0] + if (full[0] in ['0', '1']): + for x in self.fields[2]: + if (x[0] == 'b'): + xml.append(' %s\n' % (escape(x[1]))) + + if (self.fields.has_key(43)): + for sub in self.fields[43][0][2]: + if (sub[0] == 'a'): + xml.append(' %s\n' % (escape(sub[1]))) + elif (sub[0] == 'a'): + xml.append(' %s\n' % (escape(sub[1]))) + + if (self.fields.has_key(752)): + xml.append(' \n') + for sub in self.fields[43][0][2]: + val = escape(sub[1]) + if (sub[0] == 'a'): + xml.append(' %s\n' % (val)) + elif (sub[0] == 'b'): + xml.append(' %s\n' % (val)) + elif (sub[0] == 'c'): + xml.append(' %s\n' % (val)) + elif (sub[0] == 'd'): + xml.append(' %s\n' % (val)) + xml.append(' ') + + + if (self.fields.has_key(255)): + subf = {} + xml.append(' \n') + for s in self.fields[255][0][2]: + subf[s[0]] = escape(s[1]) + if (subf.has_key('c')): + xml.append(' %s\n' % (subf['c'])) + if (subf.has_key('a')): + xml.append(' %s\n' % (subf['a'])) + if (subf.has_key('b')): + xml.append(' %s\n' % (subf['c'])) + xml.append(' \n') + + if (self.fields.has_key(656)): + for s in self.fields[656][0][2]: + if (s[0] == 'a'): + xml.append(' %s\n') + + # XXX: 34 + + # XXX: Classification, 84 + + cfields = {50 : 'lcc', 82 : 'ddc', 80 : 'udc', 60 : 'nlm'} + for k in cfields: + if (self.fields.has_key(k)): + for sub in self.fields[k][0][2]: + stuff = [] + if (sub[0] == 'a'): + stuff.append(escape(sub[1])) + elif (sub[0] == 'b'): + stuff.append(escape(sub[1])) + txt = ' '.join(stuff) + xml.append(' %s\n' % (cfields[k], txt)) + + if (self.fields.has_key(86)): + full = self.fields[86][0] + ind1 = full[0] + if (ind1 == '0'): + auth = 'sudocs' + elif (ind1 == '1'): + auth = 'candocs' + else: + auth = '' + if (auth): + for s in full[2]: + if (s[0] == 'a'): + xml.append(' %s\n' % (auth, escape(s[1]))) + + + # XXX: relatedItem, 7XX + + # --- Identifier --- + if self.fields.has_key(20): + for instance in self.fields[20]: + for sub in instance[2]: + if sub[0] == 'a': + xml.append(' %s\n' % (escape(sub[1]))) + if self.fields.has_key(22): + for instance in self.fields[22]: + for sub in instance[2]: + if sub[0] == 'a': + xml.append(' %s\n' % (escape(sub[1]))) + if self.fields.has_key(24): + for instance in self.fields[24]: + for sub in instance[2]: + if sub[0] == 'a': + xml.append(' %s\n' % (escape(sub[1]))) + if self.fields.has_key(28): + for instance in self.fields[28]: + for sub in instance[2]: + if sub[0] == 'a': + xml.append(' %s\n' % (escape(sub[1]))) + + # XXX: location, accessCondition + + # --- recordInformation --- + xml.append(' \n') + if (self.fields.has_key(40)): + for instance in self.fields[40]: + for sub in instance[2]: + if sub[0] == 'a': + xml.append(' %s\n' % (escape(sub[1]))) + if (self.fields.has_key(8)): + date = self.fields[8][0][0:6] + if (date <> ' '): + xml.append(' %s\n' % (date)) + + if (self.fields.has_key(1)): + xml.append(' %s\n' % (self.fields[1][0])) + if (self.fields.has_key(40)): + instance = self.fields[40][0][2] + for s in instance: + if (s[0] == 'b'): + xml.append(' %s\n' % (escape(s[1]))) + + xml.append(' \n') + xml.append("
") + txt = ''.join(xml) + return txt + +from PyZ3950 import marc_to_unicode + +# see http://www.loc.gov/marc/specifications/speccharmarc8.html + +import unicodedata + +class MARC8_to_Unicode: + """Converts MARC-8 to Unicode. Note that currently, unicode strings + aren't normalized, and some codecs (e.g. iso8859-1) will fail on + such strings. When I can require python 2.3, this will go away. + + Warning: MARC-8 EACC (East Asian characters) makes some + distinctions which aren't captured in Unicode. The LC tables give + the option of mapping such characters either to a Unicode private + use area, or a substitute character which (usually) gives the + sense. I've picked the second, so this means that the MARC data + should be treated as primary and the Unicode data used for display + purposes only. (If you know of either of fonts designed for use + with LC's private-use Unicode assignments, or of attempts to + standardize Unicode characters to allow round-trips from EACC, + or if you need the private-use Unicode character translations, + please inform me, asl2@pobox.com.""" + + + + basic_latin = 0x42 + ansel = 0x45 + def __init__ (self, G0 = basic_latin, G1 = ansel): + self.g0 = G0 + self.g1 = G1 + + def is_multibyte (self, charset): + return charset == 0x31 + + def translate (self, s): + uni_list = [] + combinings = [] + pos = 0 + while pos < len (s): + if s[pos] == '\x1b': + if (s[pos +1] == s[pos+2] and + (s[pos +1] == '$' or s[pos+1] == '(')): + self.g0 = ord (s[pos+3]) + pos = pos + 4 + continue + mb_flag = self.is_multibyte (self.g0) + + if mb_flag: + d = (ord (s[pos]) * 65536 + + ord (s[pos+1]) * 256 + + ord (s[pos+2])) + pos += 3 + else: + d = ord (s[pos]) + pos += 1 + + if (d < 0x20 or + (d > 0x80 and d < 0xa0)): + uni = unichr (d) + continue + + if d > 0x80 and not mb_flag: + (uni, cflag) = marc_to_unicode.codesets [self.g1] [d] + else: + (uni, cflag) = marc_to_unicode.codesets [self.g0] [d] + + if cflag: + combinings.append (unichr (uni)) + else: + uni_list.append (unichr (uni)) + if len (combinings) > 0: + uni_list += combinings + combinings = [] + # what to do if combining chars left over? + uni_str = u"".join (uni_list) + + # unicodedata.normalize not available until Python 2.3 + if hasattr (unicodedata, 'normalize'): + uni_str = unicodedata.normalize ('NFC', uni_str) + + return uni_str + +def test_convert (s, enc): + conv = MARC8_to_Unicode () + converted = conv.translate (s) + converted = unicodedata.normalize ('NFC', converted) + print converted.encode (enc) + + print repr (converted) + + + +if __name__ == '__main__': + # My console is usually set to iso-8859-1. Sorry if yours is different. + test_convert('''The oldest cuisine in the world : cooking in + Mesopotamia / Jean Bott\xe2ero ; translated by Teresa Lavender Fagan.''', + 'iso-8859-1') + + test_convert ( + """$6 245-02/$1$a \x1b$$1!M>!`o!#!KPa!\\O!#!\x1b((B/$c \x1b$$1!1?!R_!#!-bb!#!!Gm!>`!#!\x1b((B; \x1b$$1!RY!YF!#!9Z6!#!!J(!Yi!#!\x1b((B;\x1b$$1!#!!BX!O>!#!!4`!4)!#!!\\e!#!!Hk!:M!#!\x1b((B... [et al.] ; \x1b$$1!Iq!MH!#!!9%!];!#!!KG!#!\x1b((B= Great garnishes / author, Huang Su-Huei ; translator, Yen-Jen Lai ; collaborators, Cheng-Tzu Chiu ... [et al.] ; photographers, Aki Ohno.""", + 'utf-8') + + + for f in sys.argv[1:]: + marc_file = open(f, 'rb') + marc_text = marc_file.read () + while 1: + marc_data1 = MARC(marc_text) + print str (marc_data1) + new = marc_data1.get_MARC () + marc_data2 = MARC (marc_text) + k1 = marc_data1.fields.keys () + k2 = marc_data2.fields.keys () + assert (k1 == k2) + for field in k1: + same = (marc_data1.fields [field] == + marc_data2.fields [field]) + assert (same) + marc_text = marc_text[marc_data1.reclen:] + if len (marc_text) == 0: + break + marc_file.close () + + diff --git a/python/PyZ3950/zoom.py b/python/PyZ3950/zoom.py new file mode 100644 index 0000000..ff07a92 --- /dev/null +++ b/python/PyZ3950/zoom.py @@ -0,0 +1,965 @@ +#!/usr/bin/env python + +"""Implements the ZOOM 1.4 API (http://zoom.z3950.org/api) +for Z39.50. + +Some global notes on the binding (these will only make sense when read +after the API document): + +Get/Set Option is implemented as member attribute access or +assignment. Implementations are encouraged to throw an AttributeError +for unsupported (or, possibly, mistyped) attributes. (Production +applications are encouraged to catch such errors.) + +All errors are reported as exceptions deriving from ZoomError (or, at +least, it's a bug if they aren't). Bib1Err is defined as part of the +binding; all the rest are specific to this implementation. + +ResultSet provides a sequence interface, with standard Python +iteration, indexing, and slicing. So if rs is a ResultSet, use len +(rs) for Get_Size and rs[i] for Get_Record, or iterate with for r in +rs: foo(r). Any attempt to access a record for which the server +returned a surrogate diagnostic will raise the appropriate Bib1Err +exception. + +For Record, Render_Record is implemented as Python __str__. The +'syntax' member contains the string-format record syntax, and the +'data' member contains the raw data. + +The following query types are supported: +- "CCL", ISO 8777, (http://www.indexdata.dk/yaz/doc/tools.tkl#CCL) +- "S-CCL", the same, but interpreted on the server side +- "CQL", the Common Query Language, (http://www.loc.gov/z3950/agency/zing/cql/) +- "S-CQL", the same, but interpreted on the server side +- "PQF", Index Data's Prefix Query Format, (http://www.indexdata.dk/yaz/doc/tools.tkl#PQF) +- "C2", Cheshire II query syntax, (http://cheshire.berkeley.edu/cheshire2.html#zfind) +- "ZSQL", Z-SQL, see (http://archive.dstc.edu.au/DDU/projects/Z3950/Z+SQL/) +- "CQL-TREE", a general-purpose escape allowing any object with a toRPN method to be used, e.g. the CQL tree objects + +ScanSet, like ResultSet, has a sequence interface. The i-th element +is a dictionary. See the ScanSet documentation for supported keys. + +Sample usage: + from PyZ3950 import zoom + conn = zoom.Connection ('z3950.loc.gov', 7090) + conn.databaseName = 'VOYAGER' + conn.preferredRecordSyntax = 'USMARC' + query = zoom.Query ('CCL', 'ti="1066 and all that"') + res = conn.search (query) + for r in res: + print str(r) + conn.close () +I hope everything else is clear from the docstrings and the abstract +API: let me know if that's wrong, and I'll try to do better. + +For some purposes (I think the only one is writing Z39.50 servers), +you may want to use the functions in the z3950 module instead. """ + +from __future__ import nested_scopes + +__author__ = 'Aaron Lav (asl2@pobox.com)' +__version__ = '1.0' # XXX + +import getopt +import sys + +# TODO: +# finish lang/charset (requires charset normalization, confer w/ Adam) +# implement piggyback +# implement schema (Non useful) +# implement setname (Impossible?) + +from PyZ3950 import z3950 +from PyZ3950 import ccl +from PyZ3950 import asn1 +from PyZ3950 import zmarc +from PyZ3950 import bib1msg +from PyZ3950 import grs1 +from PyZ3950 import oids + +# Azaroth 2003-12-04: +from PyZ3950 import CQLParser, SRWDiagnostics, pqf +from PyZ3950 import c2query as c2 +asn1.register_oid (oids.Z3950_QUERY_SQL, z3950.SQLQuery) + + +def my_enumerate (l): # replace w/ enumerate when we go to Python 2.3 + return zip (range (len (l)), l) + +trace_extract = 0 +"""trace extracting records from search/present reqs""" + +class ZoomError (Exception): + """Base class for all errors reported from this module""" + pass + +class ConnectionError(ZoomError): + """Exception for TCP error""" + pass + +class ClientNotImplError (ZoomError): + """Exception for ZOOM client-side functionality not implemented (bug + author)""" + pass + +class ServerNotImplError (ZoomError): + """Exception for function not implemented on server""" + pass + +class QuerySyntaxError (ZoomError): + """Exception for query not parsable by client""" + pass + +class ProtocolError (ZoomError): + """Exception for malformatted server response""" + pass + +class UnexpectedCloseError (ProtocolError): + """Exception for unexpected (z3950, not tcp) close from server""" + pass + +class UnknownRecSyn (ZoomError): + """Exception for unknown record syntax returned from server""" + pass + +class Bib1Err (ZoomError): + """Exception for BIB-1 error""" + def __init__ (self, condition, message, addtlInfo): + self.condition = condition + self.message = message + self.addtlInfo = addtlInfo + ZoomError.__init__ (self) + def __str__ (self): + return "Bib1Err: %d %s %s" % (self.condition, self.message, self.addtlInfo) + + +class _ErrHdlr: + """Error-handling services""" + err_attrslist = ['errCode','errMsg', 'addtlInfo'] + def err (self, condition, addtlInfo, oid): + """Translate condition + oid to message, save, and raise exception""" + self.errCode = condition + self.errMsg = bib1msg.lookup_errmsg (condition, oid) + self.addtlInfo = addtlInfo + raise Bib1Err (self.errCode, self.errMsg, self.addtlInfo) + def err_diagrec (self, diagrec): + (typ, data) = diagrec + if typ == 'externallyDefined': + raise ClientNotImplErr ("Unknown external diagnostic" + str (data)) + addinfo = data.addinfo [1] # don't care about v2 vs v3 + self.err (data.condition, addinfo, data.diagnosticSetId) + + +_record_type_dict = {} +"""Map oid to renderer, field-counter, and field-getter functions""" + +def _oid_to_key (oid): + for (k,v) in _record_type_dict.items (): + if v.oid == oid: + return k + raise UnknownRecSyn (oid) + +def _extract_attrs (obj, attrlist): + kw = {} + for key in attrlist: + if hasattr (obj, key): + kw[key] = getattr (obj, key) + return kw + +class _AttrCheck: + """Prevent typos""" + attrlist = [] + not_implement_attrs = [] + def __setattr__ (self, attr, val): + """Ensure attr is in attrlist (list of allowed attributes), or + private (begins w/ '_'), or begins with 'X-' (reserved for users)""" + if attr[0] == '_' or attr in self.attrlist or attr[0:2] == 'X-': + self.__dict__[attr] = val + elif (attr in self.not_implement_attrs): + raise ClientNotImplError(attr) + else: + raise AttributeError (attr, val) + +class Connection(_AttrCheck, _ErrHdlr): + """Connection object""" + + not_implement_attrs = ['piggyback', + 'schema', + 'proxy', + 'async'] + search_attrs = ['smallSetUpperBound', + 'largeSetLowerBound', + 'mediumSetPresentNumber', + 'smallSetElementSetNames', + 'mediumSetElementSetNames'] + init_attrs = ['user', + 'password', + 'group', + 'maximumRecordSize', + 'preferredMessageSize', + 'lang', + 'charset', + 'implementationId', + 'implementationName', + 'implementationVersion' + ] + scan_zoom_to_z3950 = { + # translate names from ZOOM spec to Z39.50 spec names + 'stepSize' : 'stepSize', + 'numberOfEntries' : 'numberOfTermsRequested', + 'responsePosition' : 'preferredPositionInResponse' + } + + attrlist = search_attrs + init_attrs + scan_zoom_to_z3950.keys () + [ + 'databaseName', + 'namedResultSets', + 'preferredRecordSyntax', # these three inheritable by RecordSet + 'elementSetName', + 'presentChunk', + 'targetImplementationId', + 'targetImplementationName', + 'targetImplementationVersion', + 'host', + 'port', + + ] + _ErrHdlr.err_attrslist + + _queryTypes = ['S-CQL', 'S-CCL', 'RPN', 'ZSQL'] + _cli = None + host = "" + port = 0 + + # and now, some defaults + namedResultSets = 1 + elementSetName = 'F' + preferredRecordSyntax = 'USMARC' + preferredMessageSize = 0x100000 + maximumRecordSize = 0x100000 + stepSize = 0 + numberOfEntries = 20 # for SCAN + responsePosition = 1 + databaseName = 'Default' + implementationId = 'PyZ3950' + implementationName = 'PyZ3950 1.0/ZOOM v1.4' + implementationVersion = '1.0' + lang = None + charset = None + user = None + password = None + group = None + presentChunk = 20 # for result sets + + def __init__(self, host, port, connect=1, **kw): + """Establish connection to hostname:port. kw contains initial + values for options, and is useful for options which affect + the InitializeRequest. Currently supported values: + + user Username for authentication + password Password for authentication + group Group for authentication + maximumRecordSize Maximum size in bytes of one record + preferredMessageSize Maximum size in bytes for response + lang 3 letter language code + charset Character set + implementationId Id for client implementation + implementationName Name for client implementation + implementationVersion Version of client implementation + + """ + + self.host = host + self.port = port + self._resultSetCtr = 0 + for (k,v) in kw.items (): + setattr (self, k, v) + if (connect): + self.connect() + + def connect(self): + self._resultSetCtr += 1 + self._lastConnectCtr = self._resultSetCtr + + # Bump counters first, since even if we didn't reconnect + # this time, we could have, and so any use of old connections + # is an error. (Old cached-and-accessed data is OK to use: + # cached but not-yet-accessed data is probably an error, but + # a not-yet-caught error.) + + if self._cli <> None and self._cli.sock <> None: + return + + initkw = {} + for attr in self.init_attrs: + initkw[attr] = getattr(self, attr) + if (self.namedResultSets): + options = ['namedResultSets'] + else: + options = [] + initkw ['ConnectionError'] = ConnectionError + initkw ['ProtocolError'] = ProtocolError + initkw ['UnexpectedCloseError'] = UnexpectedCloseError + self._cli = z3950.Client (self.host, self.port, + optionslist = options, **initkw) + self.namedResultSets = self._cli.get_option ('namedResultSets') + self.targetImplementationId = getattr (self._cli.initresp, 'implementationId', None) + self.targetImplementationName = getattr (self._cli.initresp, 'implementationName', None) + self.targetImplementationVersion = getattr (self._cli.initresp, 'implementationVersion', None) + if (hasattr (self._cli.initresp, 'userInformationField')): + # weird. U of Chicago returns an EXTERNAL with nothing + # but 'encoding', ('octet-aligned', '2545') filled in. + if (hasattr (self._cli.initresp.userInformationField, + 'direct_reference') and + self._cli.initresp.userInformationField.direct_reference == + oids.Z3950_USR_PRIVATE_OCLC_INFO_ov): +# see http://www.oclc.org/support/documentation/firstsearch/z3950/fs_z39_config_guide/ for docs + oclc_info = self._cli.initresp.userInformationField.encoding [1] + # the docs are a little unclear, but I presume we're + # supposed to report failure whenever a failReason is given. + + if hasattr (oclc_info, 'failReason'): + raise UnexpectedCloseError ('OCLC_Info ', + oclc_info.failReason, + getattr (oclc_info, 'text', + ' no text given ')) + + + + def search (self, query): + """Search, taking Query object, returning ResultSet""" + if (not self._cli): + self.connect() + assert (query.typ in self._queryTypes) + dbnames = self.databaseName.split ('+') + self._cli.set_dbnames (dbnames) + cur_rsn = self._make_rsn () + recv = self._cli.search_2 (query.query, + rsn = cur_rsn, + **_extract_attrs (self, self.search_attrs)) + self._resultSetCtr += 1 + rs = ResultSet (self, recv, cur_rsn, self._resultSetCtr) + return rs + # and 'Error Code', 'Error Message', and 'Addt'l Info' methods still + # eeded + def scan (self, query): + if (not self._cli): + self.connect() + self._cli.set_dbnames ([self.databaseName]) + kw = {} + for k, xl in self.scan_zoom_to_z3950.items (): + if hasattr (self, k): + kw [xl] = getattr (self, k) + return ScanSet (self._cli.scan (query.query, **kw)) + def _make_rsn (self): + """Return result set name""" + if self.namedResultSets: + return "rs%d" % self._resultSetCtr + else: + return z3950.default_resultSetName + def close (self): + """Close connection""" + self._cli.close () + + def sort (self, sets, keys): + """ Sort sets by keys, return resultset interface """ + if (not self._cli): + self.connect() + + # XXX This should probably be shuffled down into z3950.py + sortrelations = ['ascending', 'descending', 'ascendingByFrequency', 'descendingByFrequency'] + + req = z3950.SortRequest() + req.inputResultSetNames = [] + for s in sets: + s._check_stale () + req.inputResultSetNames.append(s._resultSetName) + cur_rsn = self._make_rsn() + req.sortedResultSetName = cur_rsn + + zkeys = [] + for k in keys: + zk = z3950.SortKeySpec() + zk.sortRelation = sortrelations.index(k.relation) + zk.caseSensitivity = k.caseInsensitive + if (k.missingValueAction): + zk.missingValueAction = (k.missingValueAction, None) + if (k.missingValueData): + zk.missingValueAction = ('missingValueData', k.missingValueData) + value = k.sequence + if (k.type == 'accessPoint'): + if (value.typ <> 'RPN'): + raise ValueError # XXX + l = z3950.SortKey['sortAttributes']() + l.id = value.query[1].attributeSet + l.list = value.query[1].rpn[1][1].attributes + seq = ('sortAttributes', l) + elif (k.type == 'private'): + seq = ('privateSortKey', value) + elif (k.type == 'elementSetName'): + spec = z3950.Specification() + spec.elementSpec = ('elementSetName', value) + seq = ('elementSpec', spec) + else: + raise ValueError # XXX + spec = ('generic', seq) + zk.sortElement = spec + zkeys.append(zk) + req.sortSequence = zkeys + recv = self._cli.transact(('sortRequest', req), 'sortResponse') + + self._resultSetCtr += 1 + if (hasattr(recv, 'diagnostics')): + diag = recv.diagnostics[0][1] + self.err(diag.condition, diag.addinfo, diag.diagnosticSetId) + + if (not hasattr(recv, 'resultCount')): + # First guess: sum of all input sets + recv.resultCount = 0 + for set in sets: + recv.resultCount += len(set) + # Check for addInfo to override + try: + val = recv.otherInfo[0].information[1] + if (val[:14] == 'Result-count: '): + recv.resultCount = int(val[14:]) + except: + pass + + rs = ResultSet (self, recv, cur_rsn, self._resultSetCtr) + return rs + + +class SortKey(_AttrCheck): + attrlist = ['relation', 'caseInsensitive', 'missingValueAction', 'missingValueData', 'type', 'sequence'] + relation = "ascending" + caseInsensitive = 1 + missingValueAction = "" + missingValueData = "" + type = "accessPoint" + sequence = "" + + def __init__ (self, **kw): + for k in kw.keys(): + setattr(self, k, kw[k]) + +class Query: + def __init__ (self, typ, query): + """Creates Query object. +Supported query types: CCL, S-CCL, CQL, S-CQL, PQF, C2, ZSQL, CQL-TREE +""" + typ = typ.upper() +# XXX maybe replace if ... elif ... with dict mapping querytype to func + if typ == 'CCL': + self.typ = 'RPN' + try: + self.query = ccl.mk_rpn_query (query) + except ccl.QuerySyntaxError, err: + print "zoom raising", str (err), " for", query + raise QuerySyntaxError (str(err)) + elif typ == 'S-CCL': # server-side ccl + self.typ = typ + self.query = ('type-2', query) + elif typ == 'S-CQL': # server-side cql + self.typ = typ + xq = asn1.EXTERNAL() + xq.direct_reference = oids.Z3950_QUERY_CQL_ov + xq.encoding = ('single-ASN1-type', query) + self.query = ('type_104', xq) + elif typ == 'CQL': # CQL to RPN transformation + self.typ = 'RPN' + try: + q = CQLParser.parse(query) + rpnq = z3950.RPNQuery() + # XXX Allow Attribute Architecture somehow? + rpnq.attributeSet = oids.Z3950_ATTRS_BIB1_ov + rpnq.rpn = q.toRPN() + self.query = ('type_1', rpnq) + except SRWDiagnostics.SRWDiagnostic, err: + raise err + except: + raise QuerySyntaxError + elif typ == 'PQF': # PQF to RPN transformation + self.typ = 'RPN' + try: + self.query = pqf.parse(query) + except: + raise QuerySyntaxError + + elif typ == 'C2': # Cheshire2 Syntax + self.typ = 'RPN' + try: + q = c2.parse(query) + self.query = q[0] + except: + raise QuerySyntaxError + elif typ == 'ZSQL': # External SQL + self.typ = typ + xq = asn1.EXTERNAL() + xq.direct_reference = oids.Z3950_QUERY_SQL_ov + q = z3950.SQLQuery() + q.queryExpression = query + xq.encoding = ('single-ASN1-type', q) + self.query = ('type_104', xq) + elif typ == 'CQL-TREE': # Tree to RPN + self.typ = 'RPN' + try: + rpnq = z3950.RPNQuery() + # XXX Allow Attribute Architecture + rpnq.attributeSet = oids.Z3950_ATTRS_BIB1_ov + rpnq.rpn = query.toRPN() + self.query = ('type_1', rpnq) + except SRWDiagnostics.SRWDiagnostic, err: + raise err + except: + raise QuerySyntaxError + else: + raise ClientNotImplError ('%s queries not supported' % typ) + + +class ResultSet(_AttrCheck, _ErrHdlr): + """Cache results, presenting read-only sequence interface. If + a surrogate diagnostic is returned for the i-th record, an + appropriate exception will be raised on access to the i-th + element (either access by itself or as part of a slice).""" + + inherited_elts = ['elementSetName', 'preferredRecordSyntax', + 'presentChunk'] + attrlist = inherited_elts + _ErrHdlr.err_attrslist + not_implement_attrs = ['piggyback', + 'schema'] + + def __init__ (self, conn, searchResult, resultSetName, ctr): + """Only for creation by Connection object""" + self._conn = conn # needed for 'option inheritance', see ZOOM spec + self._searchResult = searchResult + self._resultSetName = resultSetName + self._records = {} + self._ctr = ctr + # _records is a dict indexed by preferredRecordSyntax of + # dicts indexed by elementSetName of lists of records + self._ensure_recs () + + # whether there are any records or not, there may be + # nonsurrogate diagnostics. _extract_recs will get them. + if hasattr (self._searchResult, 'records'): + self._extract_recs (self._searchResult.records, 0) + def __getattr__ (self, key): + """Forward attribute access to Connection if appropriate""" + if self.__dict__.has_key (key): + return self.__dict__[key] + if key in self.inherited_elts: + return getattr (self._conn, key) # may raise AttributeError + raise AttributeError (key) + def _make_keywords (self): + """Set up dict of parms for present request""" + kw = {} + # need for translation here from preferredRecordSyntax to recsyn + # is kinda pointless + if hasattr (self, 'preferredRecordSyntax'): + try: + kw['recsyn'] = _record_type_dict [ + self.preferredRecordSyntax].oid + except KeyError, err: + raise ClientNotImplError ('Unknown record syntax ' + + self.preferredRecordSyntax) + if hasattr (self, 'elementSetName'): + kw['esn'] = ('genericElementSetName', self.elementSetName) + return kw + def __len__ (self): + """Get number of records""" + return self._searchResult.resultCount + def _pin (self, i): + """Handle negative indices""" + if i < 0: + return i + len (self) + return i + def _ensure_recs (self): + if not self._records.has_key (self.preferredRecordSyntax): + self._records [self.preferredRecordSyntax] = {} + self._records [self.preferredRecordSyntax][ + self.elementSetName] = [None] * len (self) + if not self._records[self.preferredRecordSyntax].has_key ( + self.elementSetName): + self._records [self.preferredRecordSyntax][ + self.elementSetName] = [None] * len (self) + + def _get_rec (self, i): + return self._records [self.preferredRecordSyntax][ + self.elementSetName][i] + + def _check_stale (self): + if self._ctr < self._conn._lastConnectCtr: + raise ConnectionError ('Stale result set used') + # XXX is this right? + if (not self._conn.namedResultSets) and \ + self._ctr <> self._conn._resultSetCtr: + raise ServerNotImplError ('Multiple Result Sets') + # XXX or this? + + def _ensure_present (self, i): + self._ensure_recs () + if self._get_rec (i) == None: + self._check_stale () + maxreq = self.presentChunk + if maxreq == 0: # get everything at once + lbound = i + count = len (self) - lbound + else: + lbound = (i / maxreq) * maxreq + count = min (maxreq, len (self) - lbound) + kw = self._make_keywords () + if self._get_rec (lbound) == None: + presentResp = self._conn._cli.present ( + start = lbound + 1, # + 1 b/c 1-based + count = count, + rsn = self._resultSetName, + **kw) + if not hasattr (presentResp, 'records'): + raise ProtocolError (str (presentResp)) + self._extract_recs (presentResp.records, lbound) + # Maybe there was too much data to fit into + # range (lbound, lbound + count). If so, try + # retrieving just one record. XXX could try + # retrieving more, up to next cache bdary. + if i <> lbound and self._get_rec (i) == None: + presentResp = self._conn._cli.present ( + start = i + 1, + count = 1, + rsn = self._resultSetName, + **kw) + self._extract_recs (presentResp.records, i) + rec = self._records [self.preferredRecordSyntax][ + self.elementSetName][i] + if rec <> None and rec.is_surrogate_diag (): + rec.raise_exn () + def __getitem__ (self, i): + """Ensure item is present, and return a Record""" + i = self._pin (i) + if i >= len (self): + raise IndexError + self._ensure_present (i) + return self._records [self.preferredRecordSyntax][ + self.elementSetName][i] + def __getslice__(self, i, j): + i = self._pin (i) + j = self._pin (j) + if j > len (self): + j = len (self) + for k in range (i, j): + self._ensure_present (k) + if len (self._records) == 0: # XXX is this right? + return [] + return self._records[self.preferredRecordSyntax][ + self.elementSetName] [i:j] + def _extract_recs (self, records, lbound): + (typ, recs) = records + if trace_extract: + print "Extracting", len (recs), "starting at", lbound + if typ == 'nonSurrogateDiagnostic': + self.err (recs.condition, "", recs.diagnosticSetId) + elif typ == 'multipleNonSurDiagnostics': + # see Zoom mailing list discussion of 2002/7/24 to justify + # ignoring all but first error. + diagRec = recs [0] + self.err_diagrec (diagRec) + if (typ <> 'responseRecords'): + raise ProtocolError ("Bad records typ " + str (typ) + str (recs)) + for i,r in my_enumerate (recs): + r = recs [i] + dbname = getattr (r, 'name', '') + (typ, data) = r.record + if (typ == 'surrogateDiagnostic'): + rec = SurrogateDiagnostic (data) + + elif typ == 'retrievalRecord': + oid = data.direct_reference + dat = data.encoding + (typ, dat) = dat + if (oid == oids.Z3950_RECSYN_USMARC_ov): + if typ <> 'octet-aligned': + raise ProtocolError ( + "Weird record EXTERNAL MARC type: " + typ) + rec = Record (oid, dat, dbname) + else: + raise ProtocolError ("Bad typ %s data %s" % + (str (typ), str(data))) + self._records[self.preferredRecordSyntax][ + self.elementSetName][lbound + i] = rec + def delete (self): # XXX or can I handle this w/ a __del__ method? + """Delete result set""" + res = self._conn._cli.delete (self._resultSetName) + if res == None: return # server doesn't support Delete + # XXX should I throw an exn for delete errors? Probably. + + # and 'Error Code', 'Error Message', and 'Addt'l Info' methods + + def sort(self, keys): + return self._conn.sort([self], keys) + + +class SurrogateDiagnostic(_ErrHdlr): + """Represent surrogate diagnostic. Raise appropriate exception + on access to syntax or data, or when raise_exn method is called. + Currently, RecordSet relies on the return from is_surrogate_diag (), + and calls raise_exn based on that.""" + def __init__ (self, diagrec): + self.diagrec = diagrec + def is_surrogate_diag (self): + return 1 + def raise_exn (self): + self.err_diagrec (self.diagrec) + def __getattr__ (self, attr): + if attr == 'data' or attr == 'syntax': + self.raise_exn () + return _ErrHdlr.__getattr (self, attr) + +class Record: + """Represent retrieved record. 'syntax' attribute is a string, + 'data' attribute is the data, which is: + + USMARC -- raw MARC data + SUTRS -- a string (possibly in the future unicode) + XML -- ditto + GRS-1 -- a tree (see grs1.py for details) + EXPLAIN -- a hard-to-describe format (contact me if you're actually \ +using this) + OPAC -- ditto + + Other representations are not yet defined.""" + def __init__ (self, oid, data, dbname): + """Only for use by ResultSet""" + self.syntax = _oid_to_key (oid) + self._rt = _record_type_dict [self.syntax] + self.data = self._rt.preproc (data) + self.databaseName = dbname + def is_surrogate_diag (self): + return 0 + def get_fieldcount (self): + """Get number of fields""" + return self._rt.fieldcount (self.data) + def get_field (self,spec): + """Get field""" + return self._rt.field (self.data, spec) + def __str__ (self): + """Render printably""" + s = self._rt.renderer (self.data) + return 'Rec: ' + str (self.syntax) + " " + s + +class _RecordType: + """Map syntax string to OID and per-syntax utility functions""" + def __init__ (self, name, oid, renderer = lambda v:v, + fieldcount = lambda v:1, field = None, preproc = lambda v:v): + """Register syntax""" + self.oid = oid + self.renderer = renderer + self.fieldcount = fieldcount + self.field = field + self.preproc = preproc + _record_type_dict [name] = self + +# XXX do I want an OPAC class? Probably, and render_OPAC should be +# a member function. + + +def render_OPAC (opac_data): + s_list = [] + biblio_oid = opac_data.bibliographicRecord.direct_reference + if (biblio_oid == z3950.Z3950_RECSYN_USMARC_ov): + bib_marc = zmarc.MARC (opac_data.bibliographicRecord.encoding [1]) + s_list.append ("Bibliographic %s\n" % (str (bib_marc),) ) + else: + s_list.append ("Unknown bibliographicRecord OID: " + str(biblio_oid)) + for i, hd in my_enumerate (opac_data.holdingsData): + typ, data = hd + s_list.append ('Holdings %d:' % (i,)) + if typ == 'holdingsAndCirc': + def render (item, level = 1): + s_list = [] + if isinstance (item, asn1.StructBase): + for attr, val in item.__dict__.items (): + if attr [0] <> '_': + s_list.append ("%s%s: %s" % ( + "\t" * level, attr, "\n".join(render (val, level + 1)))) + elif (isinstance (item, type ([])) and len (item) > 0 + and isinstance (item [0], asn1.StructBase)): + s_list.append ("") # generate newline + for i, v in my_enumerate (item): + s_list.append ("\t" * (level + 1) + str (i)) + s_list += render (v, level + 1) + else: + s_list.append (repr (item)) + return s_list + s_list.append ("\n".join (render (data))) + elif typ == 'marcHoldingsRecord': + hold_oid = data.direct_reference + if hold_oid == z3950.Z3950_RECSYN_USMARC_ov: + holdings_marc = zmarc.MARC (data.encoding [1]) + s_list.append ("Holdings %s\n" % (str (holdings_marc),)) + else: + s_list.append ("Unknown holdings OID: " + str (hold_oid)) + else: + s_list.append ("Unknown holdings type: " + typ) + # shouldn't happen unless z39.50 definition is extended + return "\n".join (s_list) + +_RecordType ('USMARC', z3950.Z3950_RECSYN_USMARC_ov, + renderer = lambda v: str(zmarc.MARC(v))) +_RecordType ('UKMARC', z3950.Z3950_RECSYN_UKMARC_ov, + renderer = lambda v: str(zmarc.MARC(v))) +_RecordType ('SUTRS', z3950.Z3950_RECSYN_SUTRS_ov) +_RecordType ('XML', z3950.Z3950_RECSYN_MIME_XML_ov) +_RecordType ('SGML', z3950.Z3950_RECSYN_MIME_SGML_ov) +_RecordType ('GRS-1', z3950.Z3950_RECSYN_GRS1_ov, + renderer = lambda v: str (v), + preproc = grs1.preproc) +_RecordType ('OPAC', z3950.Z3950_RECSYN_OPAC_ov, renderer = render_OPAC) +_RecordType ('EXPLAIN', z3950.Z3950_RECSYN_EXPLAIN_ov, + renderer = lambda v: str (v)) + +class ScanSet (_AttrCheck, _ErrHdlr): + """Hold result of scan. + """ + zoom_to_z3950 = { # XXX need to provide more processing for attrs, alt + 'freq' : 'globalOccurrences', + 'display': 'displayTerm', + 'attrs' : 'suggestedAttributes', + 'alt' : 'alternativeTerm', + 'other' : 'otherTermInfo'} + attrlist = _ErrHdlr.err_attrslist + + def __init__ (self, scanresp): + """For internal use only!""" + self._scanresp = scanresp + if hasattr (scanresp.entries, 'nonsurrogateDiagnostics'): + self.err_diagrec (scanresp.entries.nonsurrogateDiagnostics[0]) + # Note that specification says that both entries and + # nonsurrogate diags can be present. This code will always + # raise the exn, and will need to be changed if both are needed. + + def __len__ (self): + """Return number of entries""" + return self._scanresp.numberOfEntriesReturned + def _get_rec (self, i): + if (not hasattr(self._scanresp.entries, 'entries')): + raise IndexError + t = self._scanresp.entries.entries[i] + if t[0] == 'termInfo': + return t[1] + else: + # Only way asserts can fail here is if someone changes + # the Z39.50 ASN.1 definitions. + assert (t[0] == 'surrogateDiagnostic') + diagRec = t[1] + if diagRec [0] == 'externallyDefined': + raise ClientNotImplError ( + 'Scan unknown surrogate diagnostic type: ' + + str (diagRec)) + assert (diagRec[0] == 'defaultFormat') + defDiagFmt = diagRec [1] + self.err (defDiagFmt.condition, defDiagFmt.addinfo, + defDiagFmt.diagnosticSetId) + def get_term (self, i): + """Return term. Note that get_{term,field,fields} can throw an + exception if the i'th term is a surrogate diagnostic.""" + return self._get_rec (i).term + def get_field (self, field, i): + """Returns value of field: + term: term + freq: integer + display: string + attrs: currently z3950 structure, should be string of attributes + alt: currently z3950 structure, should be [string of attrs, term] + other: currently z3950 structure, dunno what the best Python representation would be + """ + f = self.zoom_to_z3950 [field] + r = self._get_rec (i) + return r.__dict__[f] + def get_fields (self, i): + """Return a dictionary mapping ZOOM's field names to values + present in the response. (Like get_field, but for all fields.)""" + r = self._get_rec (i) + d = {} + for k,v in self.zoom_to_z3950.items (): + val = getattr (r, v, None) + if val <> None: + d[k] = val + d["term"] = self.get_term (i) + return d + def _pin (self, i): + if i < 0: + return i + len (self) + return i + def __getitem__ (self, i): + return self.get_fields (self._pin (i)) + def __getslice__ (self, i, j): + i = self._pin (i) + j = self._pin (j) + if j > len (self): + j = len (self) + return [self.get_fields (k) for k in range (i,j)] + + + +if __name__ == '__main__': + optlist, args = getopt.getopt (sys.argv[1:], 'h:q:t:f:a:e:v:') + host = 'LC' + query = '' + qtype = 'CCL' + fmts = ['USMARC'] + esns = ['F'] + validation = None + for (opt, val) in optlist: + if opt == '-h': + host = val + elif opt == '-q': + query = val + elif opt == '-t': + qtype = val + elif opt == '-f': + fmts = val.split (',') + elif opt == '-e': + esns = val.split (',') + elif opt == '-v': + validation = val.split (',') + + rv = z3950.host_dict.get (host) + if rv == None: + (name, port, dbname) = host.split (':') + port = int (port) + else: + (name, port, dbname) = rv + + conn = Connection (name, port) + conn.databaseName = dbname + + conn.preferredRecordSyntax = fmts [0] + def run_one (q): + try: + query = Query (qtype, q) + res = conn.search (query) + for esn in esns: + for syn in fmts: + print "Syntax", syn, "Esn", esn + res.preferredRecordSyntax = syn + if esn <> 'NONE': + res.elementSetName = esn + try: + for r in res: + print str(r) + except ZoomError, err: + print "Zoom exception", err.__class__, err +# res.delete () +# Looks as if Oxford will close the connection if a delete is sent, +# despite claiming delete support (verified with yaz client, too). + except ZoomError, err: + print "Zoom exception", err.__class__, err + + + + if query == '': + while 1: + q_str = raw_input ('CCL query: ') + if q_str == '': break + run_one (q_str) + else: + run_one (query) + conn.close () diff --git a/python/interface.py b/python/interface.py new file mode 100644 index 0000000..3ac672c --- /dev/null +++ b/python/interface.py @@ -0,0 +1,34 @@ +from xml.dom import minidom +from PyZ3950 import zoom + +exit_commands = ['exit', 'abort', 'quit', 'bye', 'eat flaming death', 'q'] + +class Bibsys(): + def __init__(self): + self.conn = zoom.Connection ('z3950.bibsys.no', 2100) + self.conn.databaseName = 'BIBSYS' + self.conn.preferredRecordSyntax = 'XML' + + def isbn_search(self, isbn): + query = zoom.Query('CCL', 'ISBN='+isbn) + result = self.conn.search(query) + return result + + def close(self): + self.conn.close() + +#class Menu(): + +def get_book_loop(): + bib = Bibsys() + while True: + input = raw_input('Enter ISBN number> ') + if input in exit_commands: + break + else: + r = bib.isbn_search(input) + if len(r) > 0: + print r[0] + bib.close() + +get_book_loop()