Add vendor golang.org/x/net/publicsuffix
authorBen Kochie <superq@gmail.com>
Mon, 10 Jul 2017 15:57:21 +0000 (17:57 +0200)
committerBen Kochie <superq@gmail.com>
Mon, 10 Jul 2017 15:57:21 +0000 (17:57 +0200)
Add vendor golang.org/x/net/publicsuffix and dependencies.

51 files changed:
vendor/golang.org/x/net/idna/idna.go [new file with mode: 0644]
vendor/golang.org/x/net/idna/punycode.go [new file with mode: 0644]
vendor/golang.org/x/net/idna/tables.go [new file with mode: 0644]
vendor/golang.org/x/net/idna/trie.go [new file with mode: 0644]
vendor/golang.org/x/net/idna/trieval.go [new file with mode: 0644]
vendor/golang.org/x/net/publicsuffix/gen.go [new file with mode: 0644]
vendor/golang.org/x/net/publicsuffix/list.go [new file with mode: 0644]
vendor/golang.org/x/net/publicsuffix/table.go [new file with mode: 0644]
vendor/golang.org/x/text/LICENSE [new file with mode: 0644]
vendor/golang.org/x/text/PATENTS [new file with mode: 0644]
vendor/golang.org/x/text/internal/gen/code.go [new file with mode: 0644]
vendor/golang.org/x/text/internal/gen/gen.go [new file with mode: 0644]
vendor/golang.org/x/text/internal/triegen/compact.go [new file with mode: 0644]
vendor/golang.org/x/text/internal/triegen/print.go [new file with mode: 0644]
vendor/golang.org/x/text/internal/triegen/triegen.go [new file with mode: 0644]
vendor/golang.org/x/text/internal/ucd/ucd.go [new file with mode: 0644]
vendor/golang.org/x/text/secure/bidirule/bidirule.go [new file with mode: 0644]
vendor/golang.org/x/text/transform/transform.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/bidi/bidi.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/bidi/bracket.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/bidi/core.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/bidi/gen.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/bidi/gen_ranges.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/bidi/gen_trieval.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/bidi/prop.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/bidi/tables.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/bidi/trieval.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/cldr/base.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/cldr/cldr.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/cldr/collate.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/cldr/decode.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/cldr/makexml.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/cldr/resolve.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/cldr/slice.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/cldr/xml.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/composition.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/forminfo.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/input.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/iter.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/maketables.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/normalize.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/readwriter.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/tables.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/transform.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/trie.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/norm/triegen.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/rangetable/gen.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/rangetable/merge.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/rangetable/rangetable.go [new file with mode: 0644]
vendor/golang.org/x/text/unicode/rangetable/tables.go [new file with mode: 0644]
vendor/vendor.json

diff --git a/vendor/golang.org/x/net/idna/idna.go b/vendor/golang.org/x/net/idna/idna.go
new file mode 100644 (file)
index 0000000..eb24735
--- /dev/null
@@ -0,0 +1,680 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package idna implements IDNA2008 using the compatibility processing
+// defined by UTS (Unicode Technical Standard) #46, which defines a standard to
+// deal with the transition from IDNA2003.
+//
+// IDNA2008 (Internationalized Domain Names for Applications), is defined in RFC
+// 5890, RFC 5891, RFC 5892, RFC 5893 and RFC 5894.
+// UTS #46 is defined in http://www.unicode.org/reports/tr46.
+// See http://unicode.org/cldr/utility/idna.jsp for a visualization of the
+// differences between these two standards.
+package idna // import "golang.org/x/net/idna"
+
+import (
+       "fmt"
+       "strings"
+       "unicode/utf8"
+
+       "golang.org/x/text/secure/bidirule"
+       "golang.org/x/text/unicode/norm"
+)
+
+// NOTE: Unlike common practice in Go APIs, the functions will return a
+// sanitized domain name in case of errors. Browsers sometimes use a partially
+// evaluated string as lookup.
+// TODO: the current error handling is, in my opinion, the least opinionated.
+// Other strategies are also viable, though:
+// Option 1) Return an empty string in case of error, but allow the user to
+//    specify explicitly which errors to ignore.
+// Option 2) Return the partially evaluated string if it is itself a valid
+//    string, otherwise return the empty string in case of error.
+// Option 3) Option 1 and 2.
+// Option 4) Always return an empty string for now and implement Option 1 as
+//    needed, and document that the return string may not be empty in case of
+//    error in the future.
+// I think Option 1 is best, but it is quite opinionated.
+
+// ToASCII is a wrapper for Punycode.ToASCII.
+func ToASCII(s string) (string, error) {
+       return Punycode.process(s, true)
+}
+
+// ToUnicode is a wrapper for Punycode.ToUnicode.
+func ToUnicode(s string) (string, error) {
+       return Punycode.process(s, false)
+}
+
+// An Option configures a Profile at creation time.
+type Option func(*options)
+
+// Transitional sets a Profile to use the Transitional mapping as defined in UTS
+// #46. This will cause, for example, "ß" to be mapped to "ss". Using the
+// transitional mapping provides a compromise between IDNA2003 and IDNA2008
+// compatibility. It is used by most browsers when resolving domain names. This
+// option is only meaningful if combined with MapForLookup.
+func Transitional(transitional bool) Option {
+       return func(o *options) { o.transitional = true }
+}
+
+// VerifyDNSLength sets whether a Profile should fail if any of the IDN parts
+// are longer than allowed by the RFC.
+func VerifyDNSLength(verify bool) Option {
+       return func(o *options) { o.verifyDNSLength = verify }
+}
+
+// RemoveLeadingDots removes leading label separators. Leading runes that map to
+// dots, such as U+3002, are removed as well.
+//
+// This is the behavior suggested by the UTS #46 and is adopted by some
+// browsers.
+func RemoveLeadingDots(remove bool) Option {
+       return func(o *options) { o.removeLeadingDots = remove }
+}
+
+// ValidateLabels sets whether to check the mandatory label validation criteria
+// as defined in Section 5.4 of RFC 5891. This includes testing for correct use
+// of hyphens ('-'), normalization, validity of runes, and the context rules.
+func ValidateLabels(enable bool) Option {
+       return func(o *options) {
+               // Don't override existing mappings, but set one that at least checks
+               // normalization if it is not set.
+               if o.mapping == nil && enable {
+                       o.mapping = normalize
+               }
+               o.trie = trie
+               o.validateLabels = enable
+               o.fromPuny = validateFromPunycode
+       }
+}
+
+// StrictDomainName limits the set of permissable ASCII characters to those
+// allowed in domain names as defined in RFC 1034 (A-Z, a-z, 0-9 and the
+// hyphen). This is set by default for MapForLookup and ValidateForRegistration.
+//
+// This option is useful, for instance, for browsers that allow characters
+// outside this range, for example a '_' (U+005F LOW LINE). See
+// http://www.rfc-editor.org/std/std3.txt for more details This option
+// corresponds to the UseSTD3ASCIIRules option in UTS #46.
+func StrictDomainName(use bool) Option {
+       return func(o *options) {
+               o.trie = trie
+               o.useSTD3Rules = use
+               o.fromPuny = validateFromPunycode
+       }
+}
+
+// NOTE: the following options pull in tables. The tables should not be linked
+// in as long as the options are not used.
+
+// BidiRule enables the Bidi rule as defined in RFC 5893. Any application
+// that relies on proper validation of labels should include this rule.
+func BidiRule() Option {
+       return func(o *options) { o.bidirule = bidirule.ValidString }
+}
+
+// ValidateForRegistration sets validation options to verify that a given IDN is
+// properly formatted for registration as defined by Section 4 of RFC 5891.
+func ValidateForRegistration() Option {
+       return func(o *options) {
+               o.mapping = validateRegistration
+               StrictDomainName(true)(o)
+               ValidateLabels(true)(o)
+               VerifyDNSLength(true)(o)
+               BidiRule()(o)
+       }
+}
+
+// MapForLookup sets validation and mapping options such that a given IDN is
+// transformed for domain name lookup according to the requirements set out in
+// Section 5 of RFC 5891. The mappings follow the recommendations of RFC 5894,
+// RFC 5895 and UTS 46. It does not add the Bidi Rule. Use the BidiRule option
+// to add this check.
+//
+// The mappings include normalization and mapping case, width and other
+// compatibility mappings.
+func MapForLookup() Option {
+       return func(o *options) {
+               o.mapping = validateAndMap
+               StrictDomainName(true)(o)
+               ValidateLabels(true)(o)
+               RemoveLeadingDots(true)(o)
+       }
+}
+
+type options struct {
+       transitional      bool
+       useSTD3Rules      bool
+       validateLabels    bool
+       verifyDNSLength   bool
+       removeLeadingDots bool
+
+       trie *idnaTrie
+
+       // fromPuny calls validation rules when converting A-labels to U-labels.
+       fromPuny func(p *Profile, s string) error
+
+       // mapping implements a validation and mapping step as defined in RFC 5895
+       // or UTS 46, tailored to, for example, domain registration or lookup.
+       mapping func(p *Profile, s string) (string, error)
+
+       // bidirule, if specified, checks whether s conforms to the Bidi Rule
+       // defined in RFC 5893.
+       bidirule func(s string) bool
+}
+
+// A Profile defines the configuration of a IDNA mapper.
+type Profile struct {
+       options
+}
+
+func apply(o *options, opts []Option) {
+       for _, f := range opts {
+               f(o)
+       }
+}
+
+// New creates a new Profile.
+//
+// With no options, the returned Profile is the most permissive and equals the
+// Punycode Profile. Options can be passed to further restrict the Profile. The
+// MapForLookup and ValidateForRegistration options set a collection of options,
+// for lookup and registration purposes respectively, which can be tailored by
+// adding more fine-grained options, where later options override earlier
+// options.
+func New(o ...Option) *Profile {
+       p := &Profile{}
+       apply(&p.options, o)
+       return p
+}
+
+// ToASCII converts a domain or domain label to its ASCII form. For example,
+// ToASCII("bücher.example.com") is "xn--bcher-kva.example.com", and
+// ToASCII("golang") is "golang". If an error is encountered it will return
+// an error and a (partially) processed result.
+func (p *Profile) ToASCII(s string) (string, error) {
+       return p.process(s, true)
+}
+
+// ToUnicode converts a domain or domain label to its Unicode form. For example,
+// ToUnicode("xn--bcher-kva.example.com") is "bücher.example.com", and
+// ToUnicode("golang") is "golang". If an error is encountered it will return
+// an error and a (partially) processed result.
+func (p *Profile) ToUnicode(s string) (string, error) {
+       pp := *p
+       pp.transitional = false
+       return pp.process(s, false)
+}
+
+// String reports a string with a description of the profile for debugging
+// purposes. The string format may change with different versions.
+func (p *Profile) String() string {
+       s := ""
+       if p.transitional {
+               s = "Transitional"
+       } else {
+               s = "NonTransitional"
+       }
+       if p.useSTD3Rules {
+               s += ":UseSTD3Rules"
+       }
+       if p.validateLabels {
+               s += ":ValidateLabels"
+       }
+       if p.verifyDNSLength {
+               s += ":VerifyDNSLength"
+       }
+       return s
+}
+
+var (
+       // Punycode is a Profile that does raw punycode processing with a minimum
+       // of validation.
+       Punycode *Profile = punycode
+
+       // Lookup is the recommended profile for looking up domain names, according
+       // to Section 5 of RFC 5891. The exact configuration of this profile may
+       // change over time.
+       Lookup *Profile = lookup
+
+       // Display is the recommended profile for displaying domain names.
+       // The configuration of this profile may change over time.
+       Display *Profile = display
+
+       // Registration is the recommended profile for checking whether a given
+       // IDN is valid for registration, according to Section 4 of RFC 5891.
+       Registration *Profile = registration
+
+       punycode = &Profile{}
+       lookup   = &Profile{options{
+               transitional:      true,
+               useSTD3Rules:      true,
+               validateLabels:    true,
+               removeLeadingDots: true,
+               trie:              trie,
+               fromPuny:          validateFromPunycode,
+               mapping:           validateAndMap,
+               bidirule:          bidirule.ValidString,
+       }}
+       display = &Profile{options{
+               useSTD3Rules:      true,
+               validateLabels:    true,
+               removeLeadingDots: true,
+               trie:              trie,
+               fromPuny:          validateFromPunycode,
+               mapping:           validateAndMap,
+               bidirule:          bidirule.ValidString,
+       }}
+       registration = &Profile{options{
+               useSTD3Rules:    true,
+               validateLabels:  true,
+               verifyDNSLength: true,
+               trie:            trie,
+               fromPuny:        validateFromPunycode,
+               mapping:         validateRegistration,
+               bidirule:        bidirule.ValidString,
+       }}
+
+       // TODO: profiles
+       // Register: recommended for approving domain names: don't do any mappings
+       // but rather reject on invalid input. Bundle or block deviation characters.
+)
+
+type labelError struct{ label, code_ string }
+
+func (e labelError) code() string { return e.code_ }
+func (e labelError) Error() string {
+       return fmt.Sprintf("idna: invalid label %q", e.label)
+}
+
+type runeError rune
+
+func (e runeError) code() string { return "P1" }
+func (e runeError) Error() string {
+       return fmt.Sprintf("idna: disallowed rune %U", e)
+}
+
+// process implements the algorithm described in section 4 of UTS #46,
+// see http://www.unicode.org/reports/tr46.
+func (p *Profile) process(s string, toASCII bool) (string, error) {
+       var err error
+       if p.mapping != nil {
+               s, err = p.mapping(p, s)
+       }
+       // Remove leading empty labels.
+       if p.removeLeadingDots {
+               for ; len(s) > 0 && s[0] == '.'; s = s[1:] {
+               }
+       }
+       // It seems like we should only create this error on ToASCII, but the
+       // UTS 46 conformance tests suggests we should always check this.
+       if err == nil && p.verifyDNSLength && s == "" {
+               err = &labelError{s, "A4"}
+       }
+       labels := labelIter{orig: s}
+       for ; !labels.done(); labels.next() {
+               label := labels.label()
+               if label == "" {
+                       // Empty labels are not okay. The label iterator skips the last
+                       // label if it is empty.
+                       if err == nil && p.verifyDNSLength {
+                               err = &labelError{s, "A4"}
+                       }
+                       continue
+               }
+               if strings.HasPrefix(label, acePrefix) {
+                       u, err2 := decode(label[len(acePrefix):])
+                       if err2 != nil {
+                               if err == nil {
+                                       err = err2
+                               }
+                               // Spec says keep the old label.
+                               continue
+                       }
+                       labels.set(u)
+                       if err == nil && p.validateLabels {
+                               err = p.fromPuny(p, u)
+                       }
+                       if err == nil {
+                               // This should be called on NonTransitional, according to the
+                               // spec, but that currently does not have any effect. Use the
+                               // original profile to preserve options.
+                               err = p.validateLabel(u)
+                       }
+               } else if err == nil {
+                       err = p.validateLabel(label)
+               }
+       }
+       if toASCII {
+               for labels.reset(); !labels.done(); labels.next() {
+                       label := labels.label()
+                       if !ascii(label) {
+                               a, err2 := encode(acePrefix, label)
+                               if err == nil {
+                                       err = err2
+                               }
+                               label = a
+                               labels.set(a)
+                       }
+                       n := len(label)
+                       if p.verifyDNSLength && err == nil && (n == 0 || n > 63) {
+                               err = &labelError{label, "A4"}
+                       }
+               }
+       }
+       s = labels.result()
+       if toASCII && p.verifyDNSLength && err == nil {
+               // Compute the length of the domain name minus the root label and its dot.
+               n := len(s)
+               if n > 0 && s[n-1] == '.' {
+                       n--
+               }
+               if len(s) < 1 || n > 253 {
+                       err = &labelError{s, "A4"}
+               }
+       }
+       return s, err
+}
+
+func normalize(p *Profile, s string) (string, error) {
+       return norm.NFC.String(s), nil
+}
+
+func validateRegistration(p *Profile, s string) (string, error) {
+       if !norm.NFC.IsNormalString(s) {
+               return s, &labelError{s, "V1"}
+       }
+       for i := 0; i < len(s); {
+               v, sz := trie.lookupString(s[i:])
+               // Copy bytes not copied so far.
+               switch p.simplify(info(v).category()) {
+               // TODO: handle the NV8 defined in the Unicode idna data set to allow
+               // for strict conformance to IDNA2008.
+               case valid, deviation:
+               case disallowed, mapped, unknown, ignored:
+                       r, _ := utf8.DecodeRuneInString(s[i:])
+                       return s, runeError(r)
+               }
+               i += sz
+       }
+       return s, nil
+}
+
+func validateAndMap(p *Profile, s string) (string, error) {
+       var (
+               err error
+               b   []byte
+               k   int
+       )
+       for i := 0; i < len(s); {
+               v, sz := trie.lookupString(s[i:])
+               start := i
+               i += sz
+               // Copy bytes not copied so far.
+               switch p.simplify(info(v).category()) {
+               case valid:
+                       continue
+               case disallowed:
+                       if err == nil {
+                               r, _ := utf8.DecodeRuneInString(s[start:])
+                               err = runeError(r)
+                       }
+                       continue
+               case mapped, deviation:
+                       b = append(b, s[k:start]...)
+                       b = info(v).appendMapping(b, s[start:i])
+               case ignored:
+                       b = append(b, s[k:start]...)
+                       // drop the rune
+               case unknown:
+                       b = append(b, s[k:start]...)
+                       b = append(b, "\ufffd"...)
+               }
+               k = i
+       }
+       if k == 0 {
+               // No changes so far.
+               s = norm.NFC.String(s)
+       } else {
+               b = append(b, s[k:]...)
+               if norm.NFC.QuickSpan(b) != len(b) {
+                       b = norm.NFC.Bytes(b)
+               }
+               // TODO: the punycode converters require strings as input.
+               s = string(b)
+       }
+       return s, err
+}
+
+// A labelIter allows iterating over domain name labels.
+type labelIter struct {
+       orig     string
+       slice    []string
+       curStart int
+       curEnd   int
+       i        int
+}
+
+func (l *labelIter) reset() {
+       l.curStart = 0
+       l.curEnd = 0
+       l.i = 0
+}
+
+func (l *labelIter) done() bool {
+       return l.curStart >= len(l.orig)
+}
+
+func (l *labelIter) result() string {
+       if l.slice != nil {
+               return strings.Join(l.slice, ".")
+       }
+       return l.orig
+}
+
+func (l *labelIter) label() string {
+       if l.slice != nil {
+               return l.slice[l.i]
+       }
+       p := strings.IndexByte(l.orig[l.curStart:], '.')
+       l.curEnd = l.curStart + p
+       if p == -1 {
+               l.curEnd = len(l.orig)
+       }
+       return l.orig[l.curStart:l.curEnd]
+}
+
+// next sets the value to the next label. It skips the last label if it is empty.
+func (l *labelIter) next() {
+       l.i++
+       if l.slice != nil {
+               if l.i >= len(l.slice) || l.i == len(l.slice)-1 && l.slice[l.i] == "" {
+                       l.curStart = len(l.orig)
+               }
+       } else {
+               l.curStart = l.curEnd + 1
+               if l.curStart == len(l.orig)-1 && l.orig[l.curStart] == '.' {
+                       l.curStart = len(l.orig)
+               }
+       }
+}
+
+func (l *labelIter) set(s string) {
+       if l.slice == nil {
+               l.slice = strings.Split(l.orig, ".")
+       }
+       l.slice[l.i] = s
+}
+
+// acePrefix is the ASCII Compatible Encoding prefix.
+const acePrefix = "xn--"
+
+func (p *Profile) simplify(cat category) category {
+       switch cat {
+       case disallowedSTD3Mapped:
+               if p.useSTD3Rules {
+                       cat = disallowed
+               } else {
+                       cat = mapped
+               }
+       case disallowedSTD3Valid:
+               if p.useSTD3Rules {
+                       cat = disallowed
+               } else {
+                       cat = valid
+               }
+       case deviation:
+               if !p.transitional {
+                       cat = valid
+               }
+       case validNV8, validXV8:
+               // TODO: handle V2008
+               cat = valid
+       }
+       return cat
+}
+
+func validateFromPunycode(p *Profile, s string) error {
+       if !norm.NFC.IsNormalString(s) {
+               return &labelError{s, "V1"}
+       }
+       for i := 0; i < len(s); {
+               v, sz := trie.lookupString(s[i:])
+               if c := p.simplify(info(v).category()); c != valid && c != deviation {
+                       return &labelError{s, "V6"}
+               }
+               i += sz
+       }
+       return nil
+}
+
+const (
+       zwnj = "\u200c"
+       zwj  = "\u200d"
+)
+
+type joinState int8
+
+const (
+       stateStart joinState = iota
+       stateVirama
+       stateBefore
+       stateBeforeVirama
+       stateAfter
+       stateFAIL
+)
+
+var joinStates = [][numJoinTypes]joinState{
+       stateStart: {
+               joiningL:   stateBefore,
+               joiningD:   stateBefore,
+               joinZWNJ:   stateFAIL,
+               joinZWJ:    stateFAIL,
+               joinVirama: stateVirama,
+       },
+       stateVirama: {
+               joiningL: stateBefore,
+               joiningD: stateBefore,
+       },
+       stateBefore: {
+               joiningL:   stateBefore,
+               joiningD:   stateBefore,
+               joiningT:   stateBefore,
+               joinZWNJ:   stateAfter,
+               joinZWJ:    stateFAIL,
+               joinVirama: stateBeforeVirama,
+       },
+       stateBeforeVirama: {
+               joiningL: stateBefore,
+               joiningD: stateBefore,
+               joiningT: stateBefore,
+       },
+       stateAfter: {
+               joiningL:   stateFAIL,
+               joiningD:   stateBefore,
+               joiningT:   stateAfter,
+               joiningR:   stateStart,
+               joinZWNJ:   stateFAIL,
+               joinZWJ:    stateFAIL,
+               joinVirama: stateAfter, // no-op as we can't accept joiners here
+       },
+       stateFAIL: {
+               0:          stateFAIL,
+               joiningL:   stateFAIL,
+               joiningD:   stateFAIL,
+               joiningT:   stateFAIL,
+               joiningR:   stateFAIL,
+               joinZWNJ:   stateFAIL,
+               joinZWJ:    stateFAIL,
+               joinVirama: stateFAIL,
+       },
+}
+
+// validateLabel validates the criteria from Section 4.1. Item 1, 4, and 6 are
+// already implicitly satisfied by the overall implementation.
+func (p *Profile) validateLabel(s string) error {
+       if s == "" {
+               if p.verifyDNSLength {
+                       return &labelError{s, "A4"}
+               }
+               return nil
+       }
+       if p.bidirule != nil && !p.bidirule(s) {
+               return &labelError{s, "B"}
+       }
+       if !p.validateLabels {
+               return nil
+       }
+       trie := p.trie // p.validateLabels is only set if trie is set.
+       if len(s) > 4 && s[2] == '-' && s[3] == '-' {
+               return &labelError{s, "V2"}
+       }
+       if s[0] == '-' || s[len(s)-1] == '-' {
+               return &labelError{s, "V3"}
+       }
+       // TODO: merge the use of this in the trie.
+       v, sz := trie.lookupString(s)
+       x := info(v)
+       if x.isModifier() {
+               return &labelError{s, "V5"}
+       }
+       // Quickly return in the absence of zero-width (non) joiners.
+       if strings.Index(s, zwj) == -1 && strings.Index(s, zwnj) == -1 {
+               return nil
+       }
+       st := stateStart
+       for i := 0; ; {
+               jt := x.joinType()
+               if s[i:i+sz] == zwj {
+                       jt = joinZWJ
+               } else if s[i:i+sz] == zwnj {
+                       jt = joinZWNJ
+               }
+               st = joinStates[st][jt]
+               if x.isViramaModifier() {
+                       st = joinStates[st][joinVirama]
+               }
+               if i += sz; i == len(s) {
+                       break
+               }
+               v, sz = trie.lookupString(s[i:])
+               x = info(v)
+       }
+       if st == stateFAIL || st == stateAfter {
+               return &labelError{s, "C"}
+       }
+       return nil
+}
+
+func ascii(s string) bool {
+       for i := 0; i < len(s); i++ {
+               if s[i] >= utf8.RuneSelf {
+                       return false
+               }
+       }
+       return true
+}
diff --git a/vendor/golang.org/x/net/idna/punycode.go b/vendor/golang.org/x/net/idna/punycode.go
new file mode 100644 (file)
index 0000000..02c7d59
--- /dev/null
@@ -0,0 +1,203 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package idna
+
+// This file implements the Punycode algorithm from RFC 3492.
+
+import (
+       "math"
+       "strings"
+       "unicode/utf8"
+)
+
+// These parameter values are specified in section 5.
+//
+// All computation is done with int32s, so that overflow behavior is identical
+// regardless of whether int is 32-bit or 64-bit.
+const (
+       base        int32 = 36
+       damp        int32 = 700
+       initialBias int32 = 72
+       initialN    int32 = 128
+       skew        int32 = 38
+       tmax        int32 = 26
+       tmin        int32 = 1
+)
+
+func punyError(s string) error { return &labelError{s, "A3"} }
+
+// decode decodes a string as specified in section 6.2.
+func decode(encoded string) (string, error) {
+       if encoded == "" {
+               return "", nil
+       }
+       pos := 1 + strings.LastIndex(encoded, "-")
+       if pos == 1 {
+               return "", punyError(encoded)
+       }
+       if pos == len(encoded) {
+               return encoded[:len(encoded)-1], nil
+       }
+       output := make([]rune, 0, len(encoded))
+       if pos != 0 {
+               for _, r := range encoded[:pos-1] {
+                       output = append(output, r)
+               }
+       }
+       i, n, bias := int32(0), initialN, initialBias
+       for pos < len(encoded) {
+               oldI, w := i, int32(1)
+               for k := base; ; k += base {
+                       if pos == len(encoded) {
+                               return "", punyError(encoded)
+                       }
+                       digit, ok := decodeDigit(encoded[pos])
+                       if !ok {
+                               return "", punyError(encoded)
+                       }
+                       pos++
+                       i += digit * w
+                       if i < 0 {
+                               return "", punyError(encoded)
+                       }
+                       t := k - bias
+                       if t < tmin {
+                               t = tmin
+                       } else if t > tmax {
+                               t = tmax
+                       }
+                       if digit < t {
+                               break
+                       }
+                       w *= base - t
+                       if w >= math.MaxInt32/base {
+                               return "", punyError(encoded)
+                       }
+               }
+               x := int32(len(output) + 1)
+               bias = adapt(i-oldI, x, oldI == 0)
+               n += i / x
+               i %= x
+               if n > utf8.MaxRune || len(output) >= 1024 {
+                       return "", punyError(encoded)
+               }
+               output = append(output, 0)
+               copy(output[i+1:], output[i:])
+               output[i] = n
+               i++
+       }
+       return string(output), nil
+}
+
+// encode encodes a string as specified in section 6.3 and prepends prefix to
+// the result.
+//
+// The "while h < length(input)" line in the specification becomes "for
+// remaining != 0" in the Go code, because len(s) in Go is in bytes, not runes.
+func encode(prefix, s string) (string, error) {
+       output := make([]byte, len(prefix), len(prefix)+1+2*len(s))
+       copy(output, prefix)
+       delta, n, bias := int32(0), initialN, initialBias
+       b, remaining := int32(0), int32(0)
+       for _, r := range s {
+               if r < 0x80 {
+                       b++
+                       output = append(output, byte(r))
+               } else {
+                       remaining++
+               }
+       }
+       h := b
+       if b > 0 {
+               output = append(output, '-')
+       }
+       for remaining != 0 {
+               m := int32(0x7fffffff)
+               for _, r := range s {
+                       if m > r && r >= n {
+                               m = r
+                       }
+               }
+               delta += (m - n) * (h + 1)
+               if delta < 0 {
+                       return "", punyError(s)
+               }
+               n = m
+               for _, r := range s {
+                       if r < n {
+                               delta++
+                               if delta < 0 {
+                                       return "", punyError(s)
+                               }
+                               continue
+                       }
+                       if r > n {
+                               continue
+                       }
+                       q := delta
+                       for k := base; ; k += base {
+                               t := k - bias
+                               if t < tmin {
+                                       t = tmin
+                               } else if t > tmax {
+                                       t = tmax
+                               }
+                               if q < t {
+                                       break
+                               }
+                               output = append(output, encodeDigit(t+(q-t)%(base-t)))
+                               q = (q - t) / (base - t)
+                       }
+                       output = append(output, encodeDigit(q))
+                       bias = adapt(delta, h+1, h == b)
+                       delta = 0
+                       h++
+                       remaining--
+               }
+               delta++
+               n++
+       }
+       return string(output), nil
+}
+
+func decodeDigit(x byte) (digit int32, ok bool) {
+       switch {
+       case '0' <= x && x <= '9':
+               return int32(x - ('0' - 26)), true
+       case 'A' <= x && x <= 'Z':
+               return int32(x - 'A'), true
+       case 'a' <= x && x <= 'z':
+               return int32(x - 'a'), true
+       }
+       return 0, false
+}
+
+func encodeDigit(digit int32) byte {
+       switch {
+       case 0 <= digit && digit < 26:
+               return byte(digit + 'a')
+       case 26 <= digit && digit < 36:
+               return byte(digit + ('0' - 26))
+       }
+       panic("idna: internal error in punycode encoding")
+}
+
+// adapt is the bias adaptation function specified in section 6.1.
+func adapt(delta, numPoints int32, firstTime bool) int32 {
+       if firstTime {
+               delta /= damp
+       } else {
+               delta /= 2
+       }
+       delta += delta / numPoints
+       k := int32(0)
+       for delta > ((base-tmin)*tmax)/2 {
+               delta /= base - tmin
+               k += base
+       }
+       return k + (base-tmin+1)*delta/(delta+skew)
+}
diff --git a/vendor/golang.org/x/net/idna/tables.go b/vendor/golang.org/x/net/idna/tables.go
new file mode 100644 (file)
index 0000000..d281934
--- /dev/null
@@ -0,0 +1,4477 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package idna
+
+// UnicodeVersion is the Unicode version from which the tables in this package are derived.
+const UnicodeVersion = "9.0.0"
+
+var mappings string = "" + // Size: 8176 bytes
+       "\x00\x01 \x03 ̈\x01a\x03 ̄\x012\x013\x03 ́\x03 ̧\x011\x01o\x051⁄4\x051⁄2" +
+       "\x053⁄4\x03i̇\x03l·\x03ʼn\x01s\x03dž\x03ⱥ\x03ⱦ\x01h\x01j\x01r\x01w\x01y" +
+       "\x03 ̆\x03 ̇\x03 ̊\x03 ̨\x03 ̃\x03 ̋\x01l\x01x\x04̈́\x03 ι\x01;\x05 ̈́" +
+       "\x04եւ\x04اٴ\x04وٴ\x04ۇٴ\x04يٴ\x06क़\x06ख़\x06ग़\x06ज़\x06ड़\x06ढ़\x06फ़" +
+       "\x06य़\x06ড়\x06ঢ়\x06য়\x06ਲ਼\x06ਸ਼\x06ਖ਼\x06ਗ਼\x06ਜ਼\x06ਫ਼\x06ଡ଼\x06ଢ଼" +
+       "\x06ํา\x06ໍາ\x06ຫນ\x06ຫມ\x06གྷ\x06ཌྷ\x06དྷ\x06བྷ\x06ཛྷ\x06ཀྵ\x06ཱི\x06ཱུ" +
+       "\x06ྲྀ\x09ྲཱྀ\x06ླྀ\x09ླཱྀ\x06ཱྀ\x06ྒྷ\x06ྜྷ\x06ྡྷ\x06ྦྷ\x06ྫྷ\x06ྐྵ\x02" +
+       "в\x02д\x02о\x02с\x02т\x02ъ\x02ѣ\x02æ\x01b\x01d\x01e\x02ǝ\x01g\x01i\x01k" +
+       "\x01m\x01n\x02ȣ\x01p\x01t\x01u\x02ɐ\x02ɑ\x02ə\x02ɛ\x02ɜ\x02ŋ\x02ɔ\x02ɯ" +
+       "\x01v\x02β\x02γ\x02δ\x02φ\x02χ\x02ρ\x02н\x02ɒ\x01c\x02ɕ\x02ð\x01f\x02ɟ" +
+       "\x02ɡ\x02ɥ\x02ɨ\x02ɩ\x02ɪ\x02ʝ\x02ɭ\x02ʟ\x02ɱ\x02ɰ\x02ɲ\x02ɳ\x02ɴ\x02ɵ" +
+       "\x02ɸ\x02ʂ\x02ʃ\x02ƫ\x02ʉ\x02ʊ\x02ʋ\x02ʌ\x01z\x02ʐ\x02ʑ\x02ʒ\x02θ\x02ss" +
+       "\x02ά\x02έ\x02ή\x02ί\x02ό\x02ύ\x02ώ\x05ἀι\x05ἁι\x05ἂι\x05ἃι\x05ἄι\x05ἅι" +
+       "\x05ἆι\x05ἇι\x05ἠι\x05ἡι\x05ἢι\x05ἣι\x05ἤι\x05ἥι\x05ἦι\x05ἧι\x05ὠι\x05ὡι" +
+       "\x05ὢι\x05ὣι\x05ὤι\x05ὥι\x05ὦι\x05ὧι\x05ὰι\x04αι\x04άι\x05ᾶι\x02ι\x05 ̈͂" +
+       "\x05ὴι\x04ηι\x04ήι\x05ῆι\x05 ̓̀\x05 ̓́\x05 ̓͂\x02ΐ\x05 ̔̀\x05 ̔́\x05 ̔͂" +
+       "\x02ΰ\x05 ̈̀\x01`\x05ὼι\x04ωι\x04ώι\x05ῶι\x06′′\x09′′′\x06‵‵\x09‵‵‵\x02!" +
+       "!\x02??\x02?!\x02!?\x0c′′′′\x010\x014\x015\x016\x017\x018\x019\x01+\x01=" +
+       "\x01(\x01)\x02rs\x02ħ\x02no\x01q\x02sm\x02tm\x02ω\x02å\x02א\x02ב\x02ג" +
+       "\x02ד\x02π\x051⁄7\x051⁄9\x061⁄10\x051⁄3\x052⁄3\x051⁄5\x052⁄5\x053⁄5\x054" +
+       "⁄5\x051⁄6\x055⁄6\x051⁄8\x053⁄8\x055⁄8\x057⁄8\x041⁄\x02ii\x02iv\x02vi" +
+       "\x04viii\x02ix\x02xi\x050⁄3\x06∫∫\x09∫∫∫\x06∮∮\x09∮∮∮\x0210\x0211\x0212" +
+       "\x0213\x0214\x0215\x0216\x0217\x0218\x0219\x0220\x04(10)\x04(11)\x04(12)" +
+       "\x04(13)\x04(14)\x04(15)\x04(16)\x04(17)\x04(18)\x04(19)\x04(20)\x0c∫∫∫∫" +
+       "\x02==\x05⫝̸\x02ɫ\x02ɽ\x02ȿ\x02ɀ\x01.\x04 ゙\x04 ゚\x06より\x06コト\x05(ᄀ)\x05" +
+       "(ᄂ)\x05(ᄃ)\x05(ᄅ)\x05(ᄆ)\x05(ᄇ)\x05(ᄉ)\x05(ᄋ)\x05(ᄌ)\x05(ᄎ)\x05(ᄏ)\x05(ᄐ" +
+       ")\x05(ᄑ)\x05(ᄒ)\x05(가)\x05(나)\x05(다)\x05(라)\x05(마)\x05(바)\x05(사)\x05(아)" +
+       "\x05(자)\x05(차)\x05(카)\x05(타)\x05(파)\x05(하)\x05(주)\x08(오전)\x08(오후)\x05(一)" +
+       "\x05(二)\x05(三)\x05(四)\x05(五)\x05(六)\x05(七)\x05(八)\x05(九)\x05(十)\x05(月)" +
+       "\x05(火)\x05(水)\x05(木)\x05(金)\x05(土)\x05(日)\x05(株)\x05(有)\x05(社)\x05(名)" +
+       "\x05(特)\x05(財)\x05(祝)\x05(労)\x05(代)\x05(呼)\x05(学)\x05(監)\x05(企)\x05(資)" +
+       "\x05(協)\x05(祭)\x05(休)\x05(自)\x05(至)\x0221\x0222\x0223\x0224\x0225\x0226" +
+       "\x0227\x0228\x0229\x0230\x0231\x0232\x0233\x0234\x0235\x06참고\x06주의\x0236" +
+       "\x0237\x0238\x0239\x0240\x0241\x0242\x0243\x0244\x0245\x0246\x0247\x0248" +
+       "\x0249\x0250\x041月\x042月\x043月\x044月\x045月\x046月\x047月\x048月\x049月\x0510" +
+       "月\x0511月\x0512月\x02hg\x02ev\x0cアパート\x0cアルファ\x0cアンペア\x09アール\x0cイニング\x09" +
+       "インチ\x09ウォン\x0fエスクード\x0cエーカー\x09オンス\x09オーム\x09カイリ\x0cカラット\x0cカロリー\x09ガロ" +
+       "ン\x09ガンマ\x06ギガ\x09ギニー\x0cキュリー\x0cギルダー\x06キロ\x0fキログラム\x12キロメートル\x0fキロワッ" +
+       "ト\x09グラム\x0fグラムトン\x0fクルゼイロ\x0cクローネ\x09ケース\x09コルナ\x09コーポ\x0cサイクル\x0fサンチ" +
+       "ーム\x0cシリング\x09センチ\x09セント\x09ダース\x06デシ\x06ドル\x06トン\x06ナノ\x09ノット\x09ハイツ" +
+       "\x0fパーセント\x09パーツ\x0cバーレル\x0fピアストル\x09ピクル\x06ピコ\x06ビル\x0fファラッド\x0cフィート" +
+       "\x0fブッシェル\x09フラン\x0fヘクタール\x06ペソ\x09ペニヒ\x09ヘルツ\x09ペンス\x09ページ\x09ベータ\x0cポイ" +
+       "ント\x09ボルト\x06ホン\x09ポンド\x09ホール\x09ホーン\x0cマイクロ\x09マイル\x09マッハ\x09マルク\x0fマ" +
+       "ンション\x0cミクロン\x06ミリ\x0fミリバール\x06メガ\x0cメガトン\x0cメートル\x09ヤード\x09ヤール\x09ユアン" +
+       "\x0cリットル\x06リラ\x09ルピー\x0cルーブル\x06レム\x0fレントゲン\x09ワット\x040点\x041点\x042点" +
+       "\x043点\x044点\x045点\x046点\x047点\x048点\x049点\x0510点\x0511点\x0512点\x0513点" +
+       "\x0514点\x0515点\x0516点\x0517点\x0518点\x0519点\x0520点\x0521点\x0522点\x0523点" +
+       "\x0524点\x02da\x02au\x02ov\x02pc\x02dm\x02iu\x06平成\x06昭和\x06大正\x06明治\x0c株" +
+       "式会社\x02pa\x02na\x02ma\x02ka\x02kb\x02mb\x02gb\x04kcal\x02pf\x02nf\x02m" +
+       "g\x02kg\x02hz\x02ml\x02dl\x02kl\x02fm\x02nm\x02mm\x02cm\x02km\x02m2\x02m" +
+       "3\x05m∕s\x06m∕s2\x07rad∕s\x08rad∕s2\x02ps\x02ns\x02ms\x02pv\x02nv\x02mv" +
+       "\x02kv\x02pw\x02nw\x02mw\x02kw\x02bq\x02cc\x02cd\x06c∕kg\x02db\x02gy\x02" +
+       "ha\x02hp\x02in\x02kk\x02kt\x02lm\x02ln\x02lx\x02ph\x02pr\x02sr\x02sv\x02" +
+       "wb\x05v∕m\x05a∕m\x041日\x042日\x043日\x044日\x045日\x046日\x047日\x048日\x049日" +
+       "\x0510日\x0511日\x0512日\x0513日\x0514日\x0515日\x0516日\x0517日\x0518日\x0519日" +
+       "\x0520日\x0521日\x0522日\x0523日\x0524日\x0525日\x0526日\x0527日\x0528日\x0529日" +
+       "\x0530日\x0531日\x02ь\x02ɦ\x02ɬ\x02ʞ\x02ʇ\x02œ\x04𤋮\x04𢡊\x04𢡄\x04𣏕\x04𥉉" +
+       "\x04𥳐\x04𧻓\x02ff\x02fi\x02fl\x02st\x04մն\x04մե\x04մի\x04վն\x04մխ\x04יִ" +
+       "\x04ײַ\x02ע\x02ה\x02כ\x02ל\x02ם\x02ר\x02ת\x04שׁ\x04שׂ\x06שּׁ\x06שּׂ\x04א" +
+       "ַ\x04אָ\x04אּ\x04בּ\x04גּ\x04דּ\x04הּ\x04וּ\x04זּ\x04טּ\x04יּ\x04ךּ\x04" +
+       "כּ\x04לּ\x04מּ\x04נּ\x04סּ\x04ףּ\x04פּ\x04צּ\x04קּ\x04רּ\x04שּ\x04תּ" +
+       "\x04וֹ\x04בֿ\x04כֿ\x04פֿ\x04אל\x02ٱ\x02ٻ\x02پ\x02ڀ\x02ٺ\x02ٿ\x02ٹ\x02ڤ" +
+       "\x02ڦ\x02ڄ\x02ڃ\x02چ\x02ڇ\x02ڍ\x02ڌ\x02ڎ\x02ڈ\x02ژ\x02ڑ\x02ک\x02گ\x02ڳ" +
+       "\x02ڱ\x02ں\x02ڻ\x02ۀ\x02ہ\x02ھ\x02ے\x02ۓ\x02ڭ\x02ۇ\x02ۆ\x02ۈ\x02ۋ\x02ۅ" +
+       "\x02ۉ\x02ې\x02ى\x04ئا\x04ئە\x04ئو\x04ئۇ\x04ئۆ\x04ئۈ\x04ئې\x04ئى\x02ی\x04" +
+       "ئج\x04ئح\x04ئم\x04ئي\x04بج\x04بح\x04بخ\x04بم\x04بى\x04بي\x04تج\x04تح" +
+       "\x04تخ\x04تم\x04تى\x04تي\x04ثج\x04ثم\x04ثى\x04ثي\x04جح\x04جم\x04حج\x04حم" +
+       "\x04خج\x04خح\x04خم\x04سج\x04سح\x04سخ\x04سم\x04صح\x04صم\x04ضج\x04ضح\x04ضخ" +
+       "\x04ضم\x04طح\x04طم\x04ظم\x04عج\x04عم\x04غج\x04غم\x04فج\x04فح\x04فخ\x04فم" +
+       "\x04فى\x04في\x04قح\x04قم\x04قى\x04قي\x04كا\x04كج\x04كح\x04كخ\x04كل\x04كم" +
+       "\x04كى\x04كي\x04لج\x04لح\x04لخ\x04لم\x04لى\x04لي\x04مج\x04مح\x04مخ\x04مم" +
+       "\x04مى\x04مي\x04نج\x04نح\x04نخ\x04نم\x04نى\x04ني\x04هج\x04هم\x04هى\x04هي" +
+       "\x04يج\x04يح\x04يخ\x04يم\x04يى\x04يي\x04ذٰ\x04رٰ\x04ىٰ\x05 ٌّ\x05 ٍّ\x05" +
+       " َّ\x05 ُّ\x05 ِّ\x05 ّٰ\x04ئر\x04ئز\x04ئن\x04بر\x04بز\x04بن\x04تر\x04تز" +
+       "\x04تن\x04ثر\x04ثز\x04ثن\x04ما\x04نر\x04نز\x04نن\x04ير\x04يز\x04ين\x04ئخ" +
+       "\x04ئه\x04به\x04ته\x04صخ\x04له\x04نه\x04هٰ\x04يه\x04ثه\x04سه\x04شم\x04شه" +
+       "\x06ـَّ\x06ـُّ\x06ـِّ\x04طى\x04طي\x04عى\x04عي\x04غى\x04غي\x04سى\x04سي" +
+       "\x04شى\x04شي\x04حى\x04حي\x04جى\x04جي\x04خى\x04خي\x04صى\x04صي\x04ضى\x04ضي" +
+       "\x04شج\x04شح\x04شخ\x04شر\x04سر\x04صر\x04ضر\x04اً\x06تجم\x06تحج\x06تحم" +
+       "\x06تخم\x06تمج\x06تمح\x06تمخ\x06جمح\x06حمي\x06حمى\x06سحج\x06سجح\x06سجى" +
+       "\x06سمح\x06سمج\x06سمم\x06صحح\x06صمم\x06شحم\x06شجي\x06شمخ\x06شمم\x06ضحى" +
+       "\x06ضخم\x06طمح\x06طمم\x06طمي\x06عجم\x06عمم\x06عمى\x06غمم\x06غمي\x06غمى" +
+       "\x06فخم\x06قمح\x06قمم\x06لحم\x06لحي\x06لحى\x06لجج\x06لخم\x06لمح\x06محج" +
+       "\x06محم\x06محي\x06مجح\x06مجم\x06مخج\x06مخم\x06مجخ\x06همج\x06همم\x06نحم" +
+       "\x06نحى\x06نجم\x06نجى\x06نمي\x06نمى\x06يمم\x06بخي\x06تجي\x06تجى\x06تخي" +
+       "\x06تخى\x06تمي\x06تمى\x06جمي\x06جحى\x06جمى\x06سخى\x06صحي\x06شحي\x06ضحي" +
+       "\x06لجي\x06لمي\x06يحي\x06يجي\x06يمي\x06ممي\x06قمي\x06نحي\x06عمي\x06كمي" +
+       "\x06نجح\x06مخي\x06لجم\x06كمم\x06جحي\x06حجي\x06مجي\x06فمي\x06بحي\x06سخي" +
+       "\x06نجي\x06صلے\x06قلے\x08الله\x08اكبر\x08محمد\x08صلعم\x08رسول\x08عليه" +
+       "\x08وسلم\x06صلى!صلى الله عليه وسلم\x0fجل جلاله\x08ریال\x01,\x01:\x01!" +
+       "\x01?\x01_\x01{\x01}\x01[\x01]\x01#\x01&\x01*\x01-\x01<\x01>\x01\\\x01$" +
+       "\x01%\x01@\x04ـً\x04ـَ\x04ـُ\x04ـِ\x04ـّ\x04ـْ\x02ء\x02آ\x02أ\x02ؤ\x02إ" +
+       "\x02ئ\x02ا\x02ب\x02ة\x02ت\x02ث\x02ج\x02ح\x02خ\x02د\x02ذ\x02ر\x02ز\x02س" +
+       "\x02ش\x02ص\x02ض\x02ط\x02ظ\x02ع\x02غ\x02ف\x02ق\x02ك\x02ل\x02م\x02ن\x02ه" +
+       "\x02و\x02ي\x04لآ\x04لأ\x04لإ\x04لا\x01\x22\x01'\x01/\x01^\x01|\x01~\x02¢" +
+       "\x02£\x02¬\x02¦\x02¥\x08𝅗𝅥\x08𝅘𝅥\x0c𝅘𝅥𝅮\x0c𝅘𝅥𝅯\x0c𝅘𝅥𝅰\x0c𝅘𝅥𝅱\x0c𝅘𝅥𝅲\x08𝆹" +
+       "𝅥\x08𝆺𝅥\x0c𝆹𝅥𝅮\x0c𝆺𝅥𝅮\x0c𝆹𝅥𝅯\x0c𝆺𝅥𝅯\x02ı\x02ȷ\x02α\x02ε\x02ζ\x02η\x02" +
+       "κ\x02λ\x02μ\x02ν\x02ξ\x02ο\x02σ\x02τ\x02υ\x02ψ\x03∇\x03∂\x02ϝ\x02ٮ\x02ڡ" +
+       "\x02ٯ\x020,\x021,\x022,\x023,\x024,\x025,\x026,\x027,\x028,\x029,\x03(a)" +
+       "\x03(b)\x03(c)\x03(d)\x03(e)\x03(f)\x03(g)\x03(h)\x03(i)\x03(j)\x03(k)" +
+       "\x03(l)\x03(m)\x03(n)\x03(o)\x03(p)\x03(q)\x03(r)\x03(s)\x03(t)\x03(u)" +
+       "\x03(v)\x03(w)\x03(x)\x03(y)\x03(z)\x07〔s〕\x02wz\x02hv\x02sd\x03ppv\x02w" +
+       "c\x02mc\x02md\x02dj\x06ほか\x06ココ\x03サ\x03手\x03字\x03双\x03デ\x03二\x03多\x03解" +
+       "\x03天\x03交\x03映\x03無\x03料\x03前\x03後\x03再\x03新\x03初\x03終\x03生\x03販\x03声" +
+       "\x03吹\x03演\x03投\x03捕\x03一\x03三\x03遊\x03左\x03中\x03右\x03指\x03走\x03打\x03禁" +
+       "\x03空\x03合\x03満\x03有\x03月\x03申\x03割\x03営\x03配\x09〔本〕\x09〔三〕\x09〔二〕\x09〔安" +
+       "〕\x09〔点〕\x09〔打〕\x09〔盗〕\x09〔勝〕\x09〔敗〕\x03得\x03可\x03丽\x03丸\x03乁\x03你\x03" +
+       "侮\x03侻\x03倂\x03偺\x03備\x03僧\x03像\x03㒞\x03免\x03兔\x03兤\x03具\x03㒹\x03內\x03" +
+       "冗\x03冤\x03仌\x03冬\x03况\x03凵\x03刃\x03㓟\x03刻\x03剆\x03剷\x03㔕\x03勇\x03勉\x03" +
+       "勤\x03勺\x03包\x03匆\x03北\x03卉\x03卑\x03博\x03即\x03卽\x03卿\x03灰\x03及\x03叟\x03" +
+       "叫\x03叱\x03吆\x03咞\x03吸\x03呈\x03周\x03咢\x03哶\x03唐\x03啓\x03啣\x03善\x03喙\x03" +
+       "喫\x03喳\x03嗂\x03圖\x03嘆\x03圗\x03噑\x03噴\x03切\x03壮\x03城\x03埴\x03堍\x03型\x03" +
+       "堲\x03報\x03墬\x03売\x03壷\x03夆\x03夢\x03奢\x03姬\x03娛\x03娧\x03姘\x03婦\x03㛮\x03" +
+       "嬈\x03嬾\x03寃\x03寘\x03寧\x03寳\x03寿\x03将\x03尢\x03㞁\x03屠\x03屮\x03峀\x03岍\x03" +
+       "嵃\x03嵮\x03嵫\x03嵼\x03巡\x03巢\x03㠯\x03巽\x03帨\x03帽\x03幩\x03㡢\x03㡼\x03庰\x03" +
+       "庳\x03庶\x03廊\x03廾\x03舁\x03弢\x03㣇\x03形\x03彫\x03㣣\x03徚\x03忍\x03志\x03忹\x03" +
+       "悁\x03㤺\x03㤜\x03悔\x03惇\x03慈\x03慌\x03慎\x03慺\x03憎\x03憲\x03憤\x03憯\x03懞\x03" +
+       "懲\x03懶\x03成\x03戛\x03扝\x03抱\x03拔\x03捐\x03挽\x03拼\x03捨\x03掃\x03揤\x03搢\x03" +
+       "揅\x03掩\x03㨮\x03摩\x03摾\x03撝\x03摷\x03㩬\x03敏\x03敬\x03旣\x03書\x03晉\x03㬙\x03" +
+       "暑\x03㬈\x03㫤\x03冒\x03冕\x03最\x03暜\x03肭\x03䏙\x03朗\x03望\x03朡\x03杞\x03杓\x03" +
+       "㭉\x03柺\x03枅\x03桒\x03梅\x03梎\x03栟\x03椔\x03㮝\x03楂\x03榣\x03槪\x03檨\x03櫛\x03" +
+       "㰘\x03次\x03歔\x03㱎\x03歲\x03殟\x03殺\x03殻\x03汎\x03沿\x03泍\x03汧\x03洖\x03派\x03" +
+       "海\x03流\x03浩\x03浸\x03涅\x03洴\x03港\x03湮\x03㴳\x03滋\x03滇\x03淹\x03潮\x03濆\x03" +
+       "瀹\x03瀞\x03瀛\x03㶖\x03灊\x03災\x03灷\x03炭\x03煅\x03熜\x03爨\x03爵\x03牐\x03犀\x03" +
+       "犕\x03獺\x03王\x03㺬\x03玥\x03㺸\x03瑇\x03瑜\x03瑱\x03璅\x03瓊\x03㼛\x03甤\x03甾\x03" +
+       "異\x03瘐\x03㿼\x03䀈\x03直\x03眞\x03真\x03睊\x03䀹\x03瞋\x03䁆\x03䂖\x03硎\x03碌\x03" +
+       "磌\x03䃣\x03祖\x03福\x03秫\x03䄯\x03穀\x03穊\x03穏\x03䈂\x03篆\x03築\x03䈧\x03糒\x03" +
+       "䊠\x03糨\x03糣\x03紀\x03絣\x03䌁\x03緇\x03縂\x03繅\x03䌴\x03䍙\x03罺\x03羕\x03翺\x03" +
+       "者\x03聠\x03聰\x03䏕\x03育\x03脃\x03䐋\x03脾\x03媵\x03舄\x03辞\x03䑫\x03芑\x03芋\x03" +
+       "芝\x03劳\x03花\x03芳\x03芽\x03苦\x03若\x03茝\x03荣\x03莭\x03茣\x03莽\x03菧\x03著\x03" +
+       "荓\x03菊\x03菌\x03菜\x03䔫\x03蓱\x03蓳\x03蔖\x03蕤\x03䕝\x03䕡\x03䕫\x03虐\x03虜\x03" +
+       "虧\x03虩\x03蚩\x03蚈\x03蜎\x03蛢\x03蝹\x03蜨\x03蝫\x03螆\x03蟡\x03蠁\x03䗹\x03衠\x03" +
+       "衣\x03裗\x03裞\x03䘵\x03裺\x03㒻\x03䚾\x03䛇\x03誠\x03諭\x03變\x03豕\x03貫\x03賁\x03" +
+       "贛\x03起\x03跋\x03趼\x03跰\x03軔\x03輸\x03邔\x03郱\x03鄑\x03鄛\x03鈸\x03鋗\x03鋘\x03" +
+       "鉼\x03鏹\x03鐕\x03開\x03䦕\x03閷\x03䧦\x03雃\x03嶲\x03霣\x03䩮\x03䩶\x03韠\x03䪲\x03" +
+       "頋\x03頩\x03飢\x03䬳\x03餩\x03馧\x03駂\x03駾\x03䯎\x03鬒\x03鱀\x03鳽\x03䳎\x03䳭\x03" +
+       "鵧\x03䳸\x03麻\x03䵖\x03黹\x03黾\x03鼅\x03鼏\x03鼖\x03鼻"
+
+var xorData string = "" + // Size: 4855 bytes
+       "\x02\x0c\x09\x02\xb0\xec\x02\xad\xd8\x02\xad\xd9\x02\x06\x07\x02\x0f\x12" +
+       "\x02\x0f\x1f\x02\x0f\x1d\x02\x01\x13\x02\x0f\x16\x02\x0f\x0b\x02\x0f3" +
+       "\x02\x0f7\x02\x0f?\x02\x0f/\x02\x0f*\x02\x0c&\x02\x0c*\x02\x0c;\x02\x0c9" +
+       "\x02\x0c%\x02\xab\xed\x02\xab\xe2\x02\xab\xe3\x02\xa9\xe0\x02\xa9\xe1" +
+       "\x02\xa9\xe6\x02\xa3\xcb\x02\xa3\xc8\x02\xa3\xc9\x02\x01#\x02\x01\x08" +
+       "\x02\x0e>\x02\x0e'\x02\x0f\x03\x02\x03\x0d\x02\x03\x09\x02\x03\x17\x02" +
+       "\x03\x0e\x02\x02\x03\x02\x011\x02\x01\x00\x02\x01\x10\x02\x03<\x02\x07" +
+       "\x0d\x02\x02\x0c\x02\x0c0\x02\x01\x03\x02\x01\x01\x02\x01 \x02\x01\x22" +
+       "\x02\x01)\x02\x01\x0a\x02\x01\x0c\x02\x02\x06\x02\x02\x02\x02\x03\x10" +
+       "\x03\x037 \x03\x0b+\x03\x02\x01\x04\x02\x01\x02\x02\x019\x02\x03\x1c\x02" +
+       "\x02$\x03\x80p$\x02\x03:\x02\x03\x0a\x03\xc1r.\x03\xc1r,\x03\xc1r\x02" +
+       "\x02\x02:\x02\x02>\x02\x02,\x02\x02\x10\x02\x02\x00\x03\xc1s<\x03\xc1s*" +
+       "\x03\xc2L$\x03\xc2L;\x02\x09)\x02\x0a\x19\x03\x83\xab\xe3\x03\x83\xab" +
+       "\xf2\x03 4\xe0\x03\x81\xab\xea\x03\x81\xab\xf3\x03 4\xef\x03\x96\xe1\xcd" +
+       "\x03\x84\xe5\xc3\x02\x0d\x11\x03\x8b\xec\xcb\x03\x94\xec\xcf\x03\x9a\xec" +
+       "\xc2\x03\x8b\xec\xdb\x03\x94\xec\xdf\x03\x9a\xec\xd2\x03\x01\x0c!\x03" +
+       "\x01\x0c#\x03ʠ\x9d\x03ʣ\x9c\x03ʢ\x9f\x03ʥ\x9e\x03ʤ\x91\x03ʧ\x90\x03ʦ\x93" +
+       "\x03ʩ\x92\x03ʨ\x95\x03\xca\xf3\xb5\x03\xca\xf0\xb4\x03\xca\xf1\xb7\x03" +
+       "\xca\xf6\xb6\x03\xca\xf7\x89\x03\xca\xf4\x88\x03\xca\xf5\x8b\x03\xca\xfa" +
+       "\x8a\x03\xca\xfb\x8d\x03\xca\xf8\x8c\x03\xca\xf9\x8f\x03\xca\xfe\x8e\x03" +
+       "\xca\xff\x81\x03\xca\xfc\x80\x03\xca\xfd\x83\x03\xca\xe2\x82\x03\xca\xe3" +
+       "\x85\x03\xca\xe0\x84\x03\xca\xe1\x87\x03\xca\xe6\x86\x03\xca\xe7\x99\x03" +
+       "\xca\xe4\x98\x03\xca\xe5\x9b\x03\xca\xea\x9a\x03\xca\xeb\x9d\x03\xca\xe8" +
+       "\x9c\x03ؓ\x89\x03ߔ\x8b\x02\x010\x03\x03\x04\x1e\x03\x04\x15\x12\x03\x0b" +
+       "\x05,\x03\x06\x04\x00\x03\x06\x04)\x03\x06\x044\x03\x06\x04<\x03\x06\x05" +
+       "\x1d\x03\x06\x06\x00\x03\x06\x06\x0a\x03\x06\x06'\x03\x06\x062\x03\x0786" +
+       "\x03\x079/\x03\x079 \x03\x07:\x0e\x03\x07:\x1b\x03\x07:%\x03\x07;/\x03" +
+       "\x07;%\x03\x074\x11\x03\x076\x09\x03\x077*\x03\x070\x01\x03\x070\x0f\x03" +
+       "\x070.\x03\x071\x16\x03\x071\x04\x03\x0710\x03\x072\x18\x03\x072-\x03" +
+       "\x073\x14\x03\x073>\x03\x07'\x09\x03\x07 \x00\x03\x07\x1f\x0b\x03\x07" +
+       "\x18#\x03\x07\x18(\x03\x07\x186\x03\x07\x18\x03\x03\x07\x19\x16\x03\x07" +
+       "\x116\x03\x07\x12'\x03\x07\x13\x10\x03\x07\x0c&\x03\x07\x0c\x08\x03\x07" +
+       "\x0c\x13\x03\x07\x0d\x02\x03\x07\x0d\x1c\x03\x07\x0b5\x03\x07\x0b\x0a" +
+       "\x03\x07\x0b\x01\x03\x07\x0b\x0f\x03\x07\x05\x00\x03\x07\x05\x09\x03\x07" +
+       "\x05\x0b\x03\x07\x07\x01\x03\x07\x07\x08\x03\x07\x00<\x03\x07\x00+\x03" +
+       "\x07\x01)\x03\x07\x01\x1b\x03\x07\x01\x08\x03\x07\x03?\x03\x0445\x03\x04" +
+       "4\x08\x03\x0454\x03\x04)/\x03\x04)5\x03\x04+\x05\x03\x04+\x14\x03\x04+ " +
+       "\x03\x04+<\x03\x04*&\x03\x04*\x22\x03\x04&8\x03\x04!\x01\x03\x04!\x22" +
+       "\x03\x04\x11+\x03\x04\x10.\x03\x04\x104\x03\x04\x13=\x03\x04\x12\x04\x03" +
+       "\x04\x12\x0a\x03\x04\x0d\x1d\x03\x04\x0d\x07\x03\x04\x0d \x03\x05<>\x03" +
+       "\x055<\x03\x055!\x03\x055#\x03\x055&\x03\x054\x1d\x03\x054\x02\x03\x054" +
+       "\x07\x03\x0571\x03\x053\x1a\x03\x053\x16\x03\x05.<\x03\x05.\x07\x03\x05)" +
+       ":\x03\x05)<\x03\x05)\x0c\x03\x05)\x15\x03\x05+-\x03\x05+5\x03\x05$\x1e" +
+       "\x03\x05$\x14\x03\x05'\x04\x03\x05'\x14\x03\x05&\x02\x03\x05\x226\x03" +
+       "\x05\x22\x0c\x03\x05\x22\x1c\x03\x05\x19\x0a\x03\x05\x1b\x09\x03\x05\x1b" +
+       "\x0c\x03\x05\x14\x07\x03\x05\x16?\x03\x05\x16\x0c\x03\x05\x0c\x05\x03" +
+       "\x05\x0e\x0f\x03\x05\x01\x0e\x03\x05\x00(\x03\x05\x030\x03\x05\x03\x06" +
+       "\x03\x0a==\x03\x0a=1\x03\x0a=,\x03\x0a=\x0c\x03\x0a??\x03\x0a<\x08\x03" +
+       "\x0a9!\x03\x0a9)\x03\x0a97\x03\x0a99\x03\x0a6\x0a\x03\x0a6\x1c\x03\x0a6" +
+       "\x17\x03\x0a7'\x03\x0a78\x03\x0a73\x03\x0a'\x01\x03\x0a'&\x03\x0a\x1f" +
+       "\x0e\x03\x0a\x1f\x03\x03\x0a\x1f3\x03\x0a\x1b/\x03\x0a\x18\x19\x03\x0a" +
+       "\x19\x01\x03\x0a\x16\x14\x03\x0a\x0e\x22\x03\x0a\x0f\x10\x03\x0a\x0f\x02" +
+       "\x03\x0a\x0f \x03\x0a\x0c\x04\x03\x0a\x0b>\x03\x0a\x0b+\x03\x0a\x08/\x03" +
+       "\x0a\x046\x03\x0a\x05\x14\x03\x0a\x00\x04\x03\x0a\x00\x10\x03\x0a\x00" +
+       "\x14\x03\x0b<3\x03\x0b;*\x03\x0b9\x22\x03\x0b9)\x03\x0b97\x03\x0b+\x10" +
+       "\x03\x0b((\x03\x0b&5\x03\x0b$\x1c\x03\x0b$\x12\x03\x0b%\x04\x03\x0b#<" +
+       "\x03\x0b#0\x03\x0b#\x0d\x03\x0b#\x19\x03\x0b!:\x03\x0b!\x1f\x03\x0b!\x00" +
+       "\x03\x0b\x1e5\x03\x0b\x1c\x1d\x03\x0b\x1d-\x03\x0b\x1d(\x03\x0b\x18.\x03" +
+       "\x0b\x18 \x03\x0b\x18\x16\x03\x0b\x14\x13\x03\x0b\x15$\x03\x0b\x15\x22" +
+       "\x03\x0b\x12\x1b\x03\x0b\x12\x10\x03\x0b\x132\x03\x0b\x13=\x03\x0b\x12" +
+       "\x18\x03\x0b\x0c&\x03\x0b\x061\x03\x0b\x06:\x03\x0b\x05#\x03\x0b\x05<" +
+       "\x03\x0b\x04\x0b\x03\x0b\x04\x04\x03\x0b\x04\x1b\x03\x0b\x042\x03\x0b" +
+       "\x041\x03\x0b\x03\x03\x03\x0b\x03\x1d\x03\x0b\x03/\x03\x0b\x03+\x03\x0b" +
+       "\x02\x1b\x03\x0b\x02\x00\x03\x0b\x01\x1e\x03\x0b\x01\x08\x03\x0b\x015" +
+       "\x03\x06\x0d9\x03\x06\x0d=\x03\x06\x0d?\x03\x02\x001\x03\x02\x003\x03" +
+       "\x02\x02\x19\x03\x02\x006\x03\x02\x02\x1b\x03\x02\x004\x03\x02\x00<\x03" +
+       "\x02\x02\x0a\x03\x02\x02\x0e\x03\x02\x01\x1a\x03\x02\x01\x07\x03\x02\x01" +
+       "\x05\x03\x02\x01\x0b\x03\x02\x01%\x03\x02\x01\x0c\x03\x02\x01\x04\x03" +
+       "\x02\x01\x1c\x03\x02\x00.\x03\x02\x002\x03\x02\x00>\x03\x02\x00\x12\x03" +
+       "\x02\x00\x16\x03\x02\x011\x03\x02\x013\x03\x02\x02 \x03\x02\x02%\x03\x02" +
+       "\x02$\x03\x02\x028\x03\x02\x02;\x03\x02\x024\x03\x02\x012\x03\x02\x022" +
+       "\x03\x02\x02/\x03\x02\x01,\x03\x02\x01\x13\x03\x02\x01\x16\x03\x02\x01" +
+       "\x11\x03\x02\x01\x1e\x03\x02\x01\x15\x03\x02\x01\x17\x03\x02\x01\x0f\x03" +
+       "\x02\x01\x08\x03\x02\x00?\x03\x02\x03\x07\x03\x02\x03\x0d\x03\x02\x03" +
+       "\x13\x03\x02\x03\x1d\x03\x02\x03\x1f\x03\x02\x00\x03\x03\x02\x00\x0d\x03" +
+       "\x02\x00\x01\x03\x02\x00\x1b\x03\x02\x00\x19\x03\x02\x00\x18\x03\x02\x00" +
+       "\x13\x03\x02\x00/\x03\x07>\x12\x03\x07<\x1f\x03\x07>\x1d\x03\x06\x1d\x0e" +
+       "\x03\x07>\x1c\x03\x07>:\x03\x07>\x13\x03\x04\x12+\x03\x07?\x03\x03\x07>" +
+       "\x02\x03\x06\x224\x03\x06\x1a.\x03\x07<%\x03\x06\x1c\x0b\x03\x0609\x03" +
+       "\x05\x1f\x01\x03\x04'\x08\x03\x93\xfd\xf5\x03\x02\x0d \x03\x02\x0d#\x03" +
+       "\x02\x0d!\x03\x02\x0d&\x03\x02\x0d\x22\x03\x02\x0d/\x03\x02\x0d,\x03\x02" +
+       "\x0d$\x03\x02\x0d'\x03\x02\x0d%\x03\x02\x0d;\x03\x02\x0d=\x03\x02\x0d?" +
+       "\x03\x099.\x03\x08\x0b7\x03\x08\x02\x14\x03\x08\x14\x0d\x03\x08.:\x03" +
+       "\x089'\x03\x0f\x0b\x18\x03\x0f\x1c1\x03\x0f\x17&\x03\x0f9\x1f\x03\x0f0" +
+       "\x0c\x03\x0e\x0a9\x03\x0e\x056\x03\x0e\x1c#\x03\x0f\x13\x0e\x03\x072\x00" +
+       "\x03\x070\x0d\x03\x072\x0b\x03\x06\x11\x18\x03\x070\x10\x03\x06\x0f(\x03" +
+       "\x072\x05\x03\x06\x0f,\x03\x073\x15\x03\x06\x07\x08\x03\x05\x16\x02\x03" +
+       "\x04\x0b \x03\x05:8\x03\x05\x16%\x03\x0a\x0d\x1f\x03\x06\x16\x10\x03\x05" +
+       "\x1d5\x03\x05*;\x03\x05\x16\x1b\x03\x04.-\x03\x06\x1a\x19\x03\x04\x03," +
+       "\x03\x0b87\x03\x04/\x0a\x03\x06\x00,\x03\x04-\x01\x03\x04\x1e-\x03\x06/(" +
+       "\x03\x0a\x0b5\x03\x06\x0e7\x03\x06\x07.\x03\x0597\x03\x0a*%\x03\x0760" +
+       "\x03\x06\x0c;\x03\x05'\x00\x03\x072.\x03\x072\x08\x03\x06=\x01\x03\x06" +
+       "\x05\x1b\x03\x06\x06\x12\x03\x06$=\x03\x06'\x0d\x03\x04\x11\x0f\x03\x076" +
+       ",\x03\x06\x07;\x03\x06.,\x03\x86\xf9\xea\x03\x8f\xff\xeb\x02\x092\x02" +
+       "\x095\x02\x094\x02\x09;\x02\x09>\x02\x098\x02\x09*\x02\x09/\x02\x09,\x02" +
+       "\x09%\x02\x09&\x02\x09#\x02\x09 \x02\x08!\x02\x08%\x02\x08$\x02\x08+\x02" +
+       "\x08.\x02\x08*\x02\x08&\x02\x088\x02\x08>\x02\x084\x02\x086\x02\x080\x02" +
+       "\x08\x10\x02\x08\x17\x02\x08\x12\x02\x08\x1d\x02\x08\x1f\x02\x08\x13\x02" +
+       "\x08\x15\x02\x08\x14\x02\x08\x0c\x03\x8b\xfd\xd0\x03\x81\xec\xc6\x03\x87" +
+       "\xe0\x8a\x03-2\xe3\x03\x80\xef\xe4\x03-2\xea\x03\x88\xe6\xeb\x03\x8e\xe6" +
+       "\xe8\x03\x84\xe6\xe9\x03\x97\xe6\xee\x03-2\xf9\x03-2\xf6\x03\x8e\xe3\xad" +
+       "\x03\x80\xe3\x92\x03\x88\xe3\x90\x03\x8e\xe3\x90\x03\x80\xe3\x97\x03\x88" +
+       "\xe3\x95\x03\x88\xfe\xcb\x03\x8e\xfe\xca\x03\x84\xfe\xcd\x03\x91\xef\xc9" +
+       "\x03-2\xc1\x03-2\xc0\x03-2\xcb\x03\x88@\x09\x03\x8e@\x08\x03\x8f\xe0\xf5" +
+       "\x03\x8e\xe6\xf9\x03\x8e\xe0\xfa\x03\x93\xff\xf4\x03\x84\xee\xd3\x03\x0b" +
+       "(\x04\x023 \x021;\x02\x01*\x03\x0b#\x10\x03\x0b 0\x03\x0b!\x10\x03\x0b!0" +
+       "\x03\x07\x15\x08\x03\x09?5\x03\x07\x1f\x08\x03\x07\x17\x0b\x03\x09\x1f" +
+       "\x15\x03\x0b\x1c7\x03\x0a+#\x03\x06\x1a\x1b\x03\x06\x1a\x14\x03\x0a\x01" +
+       "\x18\x03\x06#\x1b\x03\x0a2\x0c\x03\x0a\x01\x04\x03\x09#;\x03\x08='\x03" +
+       "\x08\x1a\x0a\x03\x07</\x03\x07:+\x03\x07\x07*\x03\x06&\x1c\x03\x09\x0c" +
+       "\x16\x03\x09\x10\x0e\x03\x08'\x0f\x03\x08+\x09\x03\x074%\x03\x06!3\x03" +
+       "\x06\x03+\x03\x0b\x1e\x19\x03\x0a))\x03\x09\x08\x19\x03\x08,\x05\x03\x07" +
+       "<2\x03\x06\x1c>\x03\x0a\x111\x03\x09\x1b\x09\x03\x073.\x03\x07\x01\x00" +
+       "\x03\x09/,\x03\x07#>\x03\x07\x048\x03\x0a\x1f\x22\x03\x098>\x03\x09\x11" +
+       "\x00\x03\x08/\x17\x03\x06'\x22\x03\x0b\x1a+\x03\x0a\x22\x19\x03\x0a/1" +
+       "\x03\x0974\x03\x09\x0f\x22\x03\x08,\x22\x03\x08?\x14\x03\x07$5\x03\x07<3" +
+       "\x03\x07=*\x03\x07\x13\x18\x03\x068\x0a\x03\x06\x09\x16\x03\x06\x13\x00" +
+       "\x03\x08\x067\x03\x08\x01\x03\x03\x08\x12\x1d\x03\x07+7\x03\x06(;\x03" +
+       "\x06\x1c?\x03\x07\x0e\x17\x03\x0a\x06\x1d\x03\x0a\x19\x07\x03\x08\x14$" +
+       "\x03\x07$;\x03\x08,$\x03\x08\x06\x0d\x03\x07\x16\x0a\x03\x06>>\x03\x0a" +
+       "\x06\x12\x03\x0a\x14)\x03\x09\x0d\x1f\x03\x09\x12\x17\x03\x09\x19\x01" +
+       "\x03\x08\x11 \x03\x08\x1d'\x03\x06<\x1a\x03\x0a.\x00\x03\x07'\x18\x03" +
+       "\x0a\x22\x08\x03\x08\x0d\x0a\x03\x08\x13)\x03\x07*)\x03\x06<,\x03\x07" +
+       "\x0b\x1a\x03\x09.\x14\x03\x09\x0d\x1e\x03\x07\x0e#\x03\x0b\x1d'\x03\x0a" +
+       "\x0a8\x03\x09%2\x03\x08+&\x03\x080\x12\x03\x0a)4\x03\x08\x06\x1f\x03\x0b" +
+       "\x1b\x1a\x03\x0a\x1b\x0f\x03\x0b\x1d*\x03\x09\x16$\x03\x090\x11\x03\x08" +
+       "\x11\x08\x03\x0a*(\x03\x0a\x042\x03\x089,\x03\x074'\x03\x07\x0f\x05\x03" +
+       "\x09\x0b\x0a\x03\x07\x1b\x01\x03\x09\x17:\x03\x09.\x0d\x03\x07.\x11\x03" +
+       "\x09+\x15\x03\x080\x13\x03\x0b\x1f\x19\x03\x0a \x11\x03\x0a\x220\x03\x09" +
+       "\x07;\x03\x08\x16\x1c\x03\x07,\x13\x03\x07\x0e/\x03\x06\x221\x03\x0a." +
+       "\x0a\x03\x0a7\x02\x03\x0a\x032\x03\x0a\x1d.\x03\x091\x06\x03\x09\x19:" +
+       "\x03\x08\x02/\x03\x060+\x03\x06\x0f-\x03\x06\x1c\x1f\x03\x06\x1d\x07\x03" +
+       "\x0a,\x11\x03\x09=\x0d\x03\x09\x0b;\x03\x07\x1b/\x03\x0a\x1f:\x03\x09 " +
+       "\x1f\x03\x09.\x10\x03\x094\x0b\x03\x09\x1a1\x03\x08#\x1a\x03\x084\x1d" +
+       "\x03\x08\x01\x1f\x03\x08\x11\x22\x03\x07'8\x03\x07\x1a>\x03\x0757\x03" +
+       "\x06&9\x03\x06+\x11\x03\x0a.\x0b\x03\x0a,>\x03\x0a4#\x03\x08%\x17\x03" +
+       "\x07\x05\x22\x03\x07\x0c\x0b\x03\x0a\x1d+\x03\x0a\x19\x16\x03\x09+\x1f" +
+       "\x03\x09\x08\x0b\x03\x08\x16\x18\x03\x08+\x12\x03\x0b\x1d\x0c\x03\x0a=" +
+       "\x10\x03\x0a\x09\x0d\x03\x0a\x10\x11\x03\x09&0\x03\x08(\x1f\x03\x087\x07" +
+       "\x03\x08\x185\x03\x07'6\x03\x06.\x05\x03\x06=\x04\x03\x06;;\x03\x06\x06," +
+       "\x03\x0b\x18>\x03\x08\x00\x18\x03\x06 \x03\x03\x06<\x00\x03\x09%\x18\x03" +
+       "\x0b\x1c<\x03\x0a%!\x03\x0a\x09\x12\x03\x0a\x16\x02\x03\x090'\x03\x09" +
+       "\x0e=\x03\x08 \x0e\x03\x08>\x03\x03\x074>\x03\x06&?\x03\x06\x19\x09\x03" +
+       "\x06?(\x03\x0a-\x0e\x03\x09:3\x03\x098:\x03\x09\x12\x0b\x03\x09\x1d\x17" +
+       "\x03\x087\x05\x03\x082\x14\x03\x08\x06%\x03\x08\x13\x1f\x03\x06\x06\x0e" +
+       "\x03\x0a\x22<\x03\x09/<\x03\x06>+\x03\x0a'?\x03\x0a\x13\x0c\x03\x09\x10<" +
+       "\x03\x07\x1b=\x03\x0a\x19\x13\x03\x09\x22\x1d\x03\x09\x07\x0d\x03\x08)" +
+       "\x1c\x03\x06=\x1a\x03\x0a/4\x03\x0a7\x11\x03\x0a\x16:\x03\x09?3\x03\x09:" +
+       "/\x03\x09\x05\x0a\x03\x09\x14\x06\x03\x087\x22\x03\x080\x07\x03\x08\x1a" +
+       "\x1f\x03\x07\x04(\x03\x07\x04\x09\x03\x06 %\x03\x06<\x08\x03\x0a+\x14" +
+       "\x03\x09\x1d\x16\x03\x0a70\x03\x08 >\x03\x0857\x03\x070\x0a\x03\x06=\x12" +
+       "\x03\x06\x16%\x03\x06\x1d,\x03\x099#\x03\x09\x10>\x03\x07 \x1e\x03\x08" +
+       "\x0c<\x03\x08\x0b\x18\x03\x08\x15+\x03\x08,:\x03\x08%\x22\x03\x07\x0a$" +
+       "\x03\x0b\x1c=\x03\x07+\x08\x03\x0a/\x05\x03\x0a \x07\x03\x0a\x12'\x03" +
+       "\x09#\x11\x03\x08\x1b\x15\x03\x0a\x06\x01\x03\x09\x1c\x1b\x03\x0922\x03" +
+       "\x07\x14<\x03\x07\x09\x04\x03\x061\x04\x03\x07\x0e\x01\x03\x0a\x13\x18" +
+       "\x03\x0a-\x0c\x03\x0a?\x0d\x03\x0a\x09\x0a\x03\x091&\x03\x0a/\x0b\x03" +
+       "\x08$<\x03\x083\x1d\x03\x08\x0c$\x03\x08\x0d\x07\x03\x08\x0d?\x03\x08" +
+       "\x0e\x14\x03\x065\x0a\x03\x08\x1a#\x03\x08\x16#\x03\x0702\x03\x07\x03" +
+       "\x1a\x03\x06(\x1d\x03\x06+\x1b\x03\x06\x0b\x05\x03\x06\x0b\x17\x03\x06" +
+       "\x0c\x04\x03\x06\x1e\x19\x03\x06+0\x03\x062\x18\x03\x0b\x16\x1e\x03\x0a+" +
+       "\x16\x03\x0a-?\x03\x0a#:\x03\x0a#\x10\x03\x0a%$\x03\x0a>+\x03\x0a01\x03" +
+       "\x0a1\x10\x03\x0a\x099\x03\x0a\x0a\x12\x03\x0a\x19\x1f\x03\x0a\x19\x12" +
+       "\x03\x09*)\x03\x09-\x16\x03\x09.1\x03\x09.2\x03\x09<\x0e\x03\x09> \x03" +
+       "\x093\x12\x03\x09\x0b\x01\x03\x09\x1c2\x03\x09\x11\x1c\x03\x09\x15%\x03" +
+       "\x08,&\x03\x08!\x22\x03\x089(\x03\x08\x0b\x1a\x03\x08\x0d2\x03\x08\x0c" +
+       "\x04\x03\x08\x0c\x06\x03\x08\x0c\x1f\x03\x08\x0c\x0c\x03\x08\x0f\x1f\x03" +
+       "\x08\x0f\x1d\x03\x08\x00\x14\x03\x08\x03\x14\x03\x08\x06\x16\x03\x08\x1e" +
+       "#\x03\x08\x11\x11\x03\x08\x10\x18\x03\x08\x14(\x03\x07)\x1e\x03\x07.1" +
+       "\x03\x07 $\x03\x07 '\x03\x078\x08\x03\x07\x0d0\x03\x07\x0f7\x03\x07\x05#" +
+       "\x03\x07\x05\x1a\x03\x07\x1a7\x03\x07\x1d-\x03\x07\x17\x10\x03\x06)\x1f" +
+       "\x03\x062\x0b\x03\x066\x16\x03\x06\x09\x11\x03\x09(\x1e\x03\x07!5\x03" +
+       "\x0b\x11\x16\x03\x0a/\x04\x03\x0a,\x1a\x03\x0b\x173\x03\x0a,1\x03\x0a/5" +
+       "\x03\x0a\x221\x03\x0a\x22\x0d\x03\x0a?%\x03\x0a<,\x03\x0a?#\x03\x0a>\x19" +
+       "\x03\x0a\x08&\x03\x0a\x0b\x0e\x03\x0a\x0c:\x03\x0a\x0c+\x03\x0a\x03\x22" +
+       "\x03\x0a\x06)\x03\x0a\x11\x10\x03\x0a\x11\x1a\x03\x0a\x17-\x03\x0a\x14(" +
+       "\x03\x09)\x1e\x03\x09/\x09\x03\x09.\x00\x03\x09,\x07\x03\x09/*\x03\x09-9" +
+       "\x03\x09\x228\x03\x09%\x09\x03\x09:\x12\x03\x09;\x1d\x03\x09?\x06\x03" +
+       "\x093%\x03\x096\x05\x03\x096\x08\x03\x097\x02\x03\x09\x07,\x03\x09\x04," +
+       "\x03\x09\x1f\x16\x03\x09\x11\x03\x03\x09\x11\x12\x03\x09\x168\x03\x08*" +
+       "\x05\x03\x08/2\x03\x084:\x03\x08\x22+\x03\x08 0\x03\x08&\x0a\x03\x08;" +
+       "\x10\x03\x08>$\x03\x08>\x18\x03\x0829\x03\x082:\x03\x081,\x03\x081<\x03" +
+       "\x081\x1c\x03\x087#\x03\x087*\x03\x08\x09'\x03\x08\x00\x1d\x03\x08\x05-" +
+       "\x03\x08\x1f4\x03\x08\x1d\x04\x03\x08\x16\x0f\x03\x07*7\x03\x07'!\x03" +
+       "\x07%\x1b\x03\x077\x0c\x03\x07\x0c1\x03\x07\x0c.\x03\x07\x00\x06\x03\x07" +
+       "\x01\x02\x03\x07\x010\x03\x07\x06=\x03\x07\x01\x03\x03\x07\x01\x13\x03" +
+       "\x07\x06\x06\x03\x07\x05\x0a\x03\x07\x1f\x09\x03\x07\x17:\x03\x06*1\x03" +
+       "\x06-\x1d\x03\x06\x223\x03\x062:\x03\x060$\x03\x066\x1e\x03\x064\x12\x03" +
+       "\x0645\x03\x06\x0b\x00\x03\x06\x0b7\x03\x06\x07\x1f\x03\x06\x15\x12\x03" +
+       "\x0c\x05\x0f\x03\x0b+\x0b\x03\x0b+-\x03\x06\x16\x1b\x03\x06\x15\x17\x03" +
+       "\x89\xca\xea\x03\x89\xca\xe8\x03\x0c8\x10\x03\x0c8\x01\x03\x0c8\x0f\x03" +
+       "\x0d8%\x03\x0d8!\x03\x0c8-\x03\x0c8/\x03\x0c8+\x03\x0c87\x03\x0c85\x03" +
+       "\x0c9\x09\x03\x0c9\x0d\x03\x0c9\x0f\x03\x0c9\x0b\x03\xcfu\x0c\x03\xcfu" +
+       "\x0f\x03\xcfu\x0e\x03\xcfu\x09\x03\x0c9\x10\x03\x0d9\x0c\x03\xcf`;\x03" +
+       "\xcf`>\x03\xcf`9\x03\xcf`8\x03\xcf`7\x03\xcf`*\x03\xcf`-\x03\xcf`,\x03" +
+       "\x0d\x1b\x1a\x03\x0d\x1b&\x03\x0c=.\x03\x0c=%\x03\x0c>\x1e\x03\x0c>\x14" +
+       "\x03\x0c?\x06\x03\x0c?\x0b\x03\x0c?\x0c\x03\x0c?\x0d\x03\x0c?\x02\x03" +
+       "\x0c>\x0f\x03\x0c>\x08\x03\x0c>\x09\x03\x0c>,\x03\x0c>\x0c\x03\x0c?\x13" +
+       "\x03\x0c?\x16\x03\x0c?\x15\x03\x0c?\x1c\x03\x0c?\x1f\x03\x0c?\x1d\x03" +
+       "\x0c?\x1a\x03\x0c?\x17\x03\x0c?\x08\x03\x0c?\x09\x03\x0c?\x0e\x03\x0c?" +
+       "\x04\x03\x0c?\x05\x03\x0c<?\x03\x0c=\x00\x03\x0c=\x06\x03\x0c=\x05\x03" +
+       "\x0c=\x0c\x03\x0c=\x0f\x03\x0c=\x0d\x03\x0c=\x0b\x03\x0c=\x07\x03\x0c=" +
+       "\x19\x03\x0c=\x15\x03\x0c=\x11\x03\x0c=1\x03\x0c=3\x03\x0c=0\x03\x0c=>" +
+       "\x03\x0c=2\x03\x0c=6\x03\x0c<\x07\x03\x0c<\x05\x03\x0e:!\x03\x0e:#\x03" +
+       "\x0e8\x09\x03\x0e:&\x03\x0e8\x0b\x03\x0e:$\x03\x0e:,\x03\x0e8\x1a\x03" +
+       "\x0e8\x1e\x03\x0e:*\x03\x0e:7\x03\x0e:5\x03\x0e:;\x03\x0e:\x15\x03\x0e:<" +
+       "\x03\x0e:4\x03\x0e:'\x03\x0e:-\x03\x0e:%\x03\x0e:?\x03\x0e:=\x03\x0e:)" +
+       "\x03\x0e:/\x03\xcfs'\x03\x0d=\x0f\x03\x0d+*\x03\x0d99\x03\x0d9;\x03\x0d9" +
+       "?\x03\x0d)\x0d\x03\x0d(%\x02\x01\x18\x02\x01(\x02\x01\x1e\x03\x0f$!\x03" +
+       "\x0f87\x03\x0f4\x0e\x03\x0f5\x1d\x03\x06'\x03\x03\x0f\x08\x18\x03\x0f" +
+       "\x0d\x1b\x03\x0e2=\x03\x0e;\x08\x03\x0e:\x0b\x03\x0e\x06$\x03\x0e\x0d)" +
+       "\x03\x0e\x16\x1f\x03\x0e\x16\x1b\x03\x0d$\x0a\x03\x05,\x1d\x03\x0d. \x03" +
+       "\x0d.#\x03\x0c(/\x03\x09%\x02\x03\x0d90\x03\x0d\x0e4\x03\x0d\x0d\x0f\x03" +
+       "\x0c#\x00\x03\x0c,\x1e\x03\x0c2\x0e\x03\x0c\x01\x17\x03\x0c\x09:\x03\x0e" +
+       "\x173\x03\x0c\x08\x03\x03\x0c\x11\x07\x03\x0c\x10\x18\x03\x0c\x1f\x1c" +
+       "\x03\x0c\x19\x0e\x03\x0c\x1a\x1f\x03\x0f0>\x03\x0b->\x03\x0b<+\x03\x0b8" +
+       "\x13\x03\x0b\x043\x03\x0b\x14\x03\x03\x0b\x16%\x03\x0d\x22&\x03\x0b\x1a" +
+       "\x1a\x03\x0b\x1a\x04\x03\x0a%9\x03\x0a&2\x03\x0a&0\x03\x0a!\x1a\x03\x0a!" +
+       "7\x03\x0a5\x10\x03\x0a=4\x03\x0a?\x0e\x03\x0a>\x10\x03\x0a\x00 \x03\x0a" +
+       "\x0f:\x03\x0a\x0f9\x03\x0a\x0b\x0a\x03\x0a\x17%\x03\x0a\x1b-\x03\x09-" +
+       "\x1a\x03\x09,4\x03\x09.,\x03\x09)\x09\x03\x096!\x03\x091\x1f\x03\x093" +
+       "\x16\x03\x0c+\x1f\x03\x098 \x03\x098=\x03\x0c(\x1a\x03\x0c(\x16\x03\x09" +
+       "\x0a+\x03\x09\x16\x12\x03\x09\x13\x0e\x03\x09\x153\x03\x08)!\x03\x09\x1a" +
+       "\x01\x03\x09\x18\x01\x03\x08%#\x03\x08>\x22\x03\x08\x05%\x03\x08\x02*" +
+       "\x03\x08\x15;\x03\x08\x1b7\x03\x0f\x07\x1d\x03\x0f\x04\x03\x03\x070\x0c" +
+       "\x03\x07;\x0b\x03\x07\x08\x17\x03\x07\x12\x06\x03\x06/-\x03\x0671\x03" +
+       "\x065+\x03\x06>7\x03\x06\x049\x03\x05+\x1e\x03\x05,\x17\x03\x05 \x1d\x03" +
+       "\x05\x22\x05\x03\x050\x1d"
+
+// lookup returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *idnaTrie) lookup(s []byte) (v uint16, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return idnaValues[c0], 1
+       case c0 < 0xC2:
+               return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return 0, 0
+               }
+               i := idnaIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c1), 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return 0, 0
+               }
+               i := idnaIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = idnaIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c2), 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return 0, 0
+               }
+               i := idnaIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = idnaIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = idnaIndex[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return 0, 3 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c3), 4
+       }
+       // Illegal rune
+       return 0, 1
+}
+
+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *idnaTrie) lookupUnsafe(s []byte) uint16 {
+       c0 := s[0]
+       if c0 < 0x80 { // is ASCII
+               return idnaValues[c0]
+       }
+       i := idnaIndex[c0]
+       if c0 < 0xE0 { // 2-byte UTF-8
+               return t.lookupValue(uint32(i), s[1])
+       }
+       i = idnaIndex[uint32(i)<<6+uint32(s[1])]
+       if c0 < 0xF0 { // 3-byte UTF-8
+               return t.lookupValue(uint32(i), s[2])
+       }
+       i = idnaIndex[uint32(i)<<6+uint32(s[2])]
+       if c0 < 0xF8 { // 4-byte UTF-8
+               return t.lookupValue(uint32(i), s[3])
+       }
+       return 0
+}
+
+// lookupString returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *idnaTrie) lookupString(s string) (v uint16, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return idnaValues[c0], 1
+       case c0 < 0xC2:
+               return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return 0, 0
+               }
+               i := idnaIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c1), 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return 0, 0
+               }
+               i := idnaIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = idnaIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c2), 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return 0, 0
+               }
+               i := idnaIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = idnaIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = idnaIndex[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return 0, 3 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c3), 4
+       }
+       // Illegal rune
+       return 0, 1
+}
+
+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *idnaTrie) lookupStringUnsafe(s string) uint16 {
+       c0 := s[0]
+       if c0 < 0x80 { // is ASCII
+               return idnaValues[c0]
+       }
+       i := idnaIndex[c0]
+       if c0 < 0xE0 { // 2-byte UTF-8
+               return t.lookupValue(uint32(i), s[1])
+       }
+       i = idnaIndex[uint32(i)<<6+uint32(s[1])]
+       if c0 < 0xF0 { // 3-byte UTF-8
+               return t.lookupValue(uint32(i), s[2])
+       }
+       i = idnaIndex[uint32(i)<<6+uint32(s[2])]
+       if c0 < 0xF8 { // 4-byte UTF-8
+               return t.lookupValue(uint32(i), s[3])
+       }
+       return 0
+}
+
+// idnaTrie. Total size: 28496 bytes (27.83 KiB). Checksum: 43288b883596640e.
+type idnaTrie struct{}
+
+func newIdnaTrie(i int) *idnaTrie {
+       return &idnaTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *idnaTrie) lookupValue(n uint32, b byte) uint16 {
+       switch {
+       case n < 123:
+               return uint16(idnaValues[n<<6+uint32(b)])
+       default:
+               n -= 123
+               return uint16(idnaSparse.lookup(n, b))
+       }
+}
+
+// idnaValues: 125 blocks, 8000 entries, 16000 bytes
+// The third block is the zero block.
+var idnaValues = [8000]uint16{
+       // Block 0x0, offset 0x0
+       0x00: 0x0080, 0x01: 0x0080, 0x02: 0x0080, 0x03: 0x0080, 0x04: 0x0080, 0x05: 0x0080,
+       0x06: 0x0080, 0x07: 0x0080, 0x08: 0x0080, 0x09: 0x0080, 0x0a: 0x0080, 0x0b: 0x0080,
+       0x0c: 0x0080, 0x0d: 0x0080, 0x0e: 0x0080, 0x0f: 0x0080, 0x10: 0x0080, 0x11: 0x0080,
+       0x12: 0x0080, 0x13: 0x0080, 0x14: 0x0080, 0x15: 0x0080, 0x16: 0x0080, 0x17: 0x0080,
+       0x18: 0x0080, 0x19: 0x0080, 0x1a: 0x0080, 0x1b: 0x0080, 0x1c: 0x0080, 0x1d: 0x0080,
+       0x1e: 0x0080, 0x1f: 0x0080, 0x20: 0x0080, 0x21: 0x0080, 0x22: 0x0080, 0x23: 0x0080,
+       0x24: 0x0080, 0x25: 0x0080, 0x26: 0x0080, 0x27: 0x0080, 0x28: 0x0080, 0x29: 0x0080,
+       0x2a: 0x0080, 0x2b: 0x0080, 0x2c: 0x0080, 0x2d: 0x0008, 0x2e: 0x0008, 0x2f: 0x0080,
+       0x30: 0x0008, 0x31: 0x0008, 0x32: 0x0008, 0x33: 0x0008, 0x34: 0x0008, 0x35: 0x0008,
+       0x36: 0x0008, 0x37: 0x0008, 0x38: 0x0008, 0x39: 0x0008, 0x3a: 0x0080, 0x3b: 0x0080,
+       0x3c: 0x0080, 0x3d: 0x0080, 0x3e: 0x0080, 0x3f: 0x0080,
+       // Block 0x1, offset 0x40
+       0x40: 0x0080, 0x41: 0xe105, 0x42: 0xe105, 0x43: 0xe105, 0x44: 0xe105, 0x45: 0xe105,
+       0x46: 0xe105, 0x47: 0xe105, 0x48: 0xe105, 0x49: 0xe105, 0x4a: 0xe105, 0x4b: 0xe105,
+       0x4c: 0xe105, 0x4d: 0xe105, 0x4e: 0xe105, 0x4f: 0xe105, 0x50: 0xe105, 0x51: 0xe105,
+       0x52: 0xe105, 0x53: 0xe105, 0x54: 0xe105, 0x55: 0xe105, 0x56: 0xe105, 0x57: 0xe105,
+       0x58: 0xe105, 0x59: 0xe105, 0x5a: 0xe105, 0x5b: 0x0080, 0x5c: 0x0080, 0x5d: 0x0080,
+       0x5e: 0x0080, 0x5f: 0x0080, 0x60: 0x0080, 0x61: 0x0008, 0x62: 0x0008, 0x63: 0x0008,
+       0x64: 0x0008, 0x65: 0x0008, 0x66: 0x0008, 0x67: 0x0008, 0x68: 0x0008, 0x69: 0x0008,
+       0x6a: 0x0008, 0x6b: 0x0008, 0x6c: 0x0008, 0x6d: 0x0008, 0x6e: 0x0008, 0x6f: 0x0008,
+       0x70: 0x0008, 0x71: 0x0008, 0x72: 0x0008, 0x73: 0x0008, 0x74: 0x0008, 0x75: 0x0008,
+       0x76: 0x0008, 0x77: 0x0008, 0x78: 0x0008, 0x79: 0x0008, 0x7a: 0x0008, 0x7b: 0x0080,
+       0x7c: 0x0080, 0x7d: 0x0080, 0x7e: 0x0080, 0x7f: 0x0080,
+       // Block 0x2, offset 0x80
+       // Block 0x3, offset 0xc0
+       0xc0: 0x0040, 0xc1: 0x0040, 0xc2: 0x0040, 0xc3: 0x0040, 0xc4: 0x0040, 0xc5: 0x0040,
+       0xc6: 0x0040, 0xc7: 0x0040, 0xc8: 0x0040, 0xc9: 0x0040, 0xca: 0x0040, 0xcb: 0x0040,
+       0xcc: 0x0040, 0xcd: 0x0040, 0xce: 0x0040, 0xcf: 0x0040, 0xd0: 0x0040, 0xd1: 0x0040,
+       0xd2: 0x0040, 0xd3: 0x0040, 0xd4: 0x0040, 0xd5: 0x0040, 0xd6: 0x0040, 0xd7: 0x0040,
+       0xd8: 0x0040, 0xd9: 0x0040, 0xda: 0x0040, 0xdb: 0x0040, 0xdc: 0x0040, 0xdd: 0x0040,
+       0xde: 0x0040, 0xdf: 0x0040, 0xe0: 0x000a, 0xe1: 0x0018, 0xe2: 0x0018, 0xe3: 0x0018,
+       0xe4: 0x0018, 0xe5: 0x0018, 0xe6: 0x0018, 0xe7: 0x0018, 0xe8: 0x001a, 0xe9: 0x0018,
+       0xea: 0x0039, 0xeb: 0x0018, 0xec: 0x0018, 0xed: 0x03c0, 0xee: 0x0018, 0xef: 0x004a,
+       0xf0: 0x0018, 0xf1: 0x0018, 0xf2: 0x0069, 0xf3: 0x0079, 0xf4: 0x008a, 0xf5: 0x0005,
+       0xf6: 0x0018, 0xf7: 0x0008, 0xf8: 0x00aa, 0xf9: 0x00c9, 0xfa: 0x00d9, 0xfb: 0x0018,
+       0xfc: 0x00e9, 0xfd: 0x0119, 0xfe: 0x0149, 0xff: 0x0018,
+       // Block 0x4, offset 0x100
+       0x100: 0xe00d, 0x101: 0x0008, 0x102: 0xe00d, 0x103: 0x0008, 0x104: 0xe00d, 0x105: 0x0008,
+       0x106: 0xe00d, 0x107: 0x0008, 0x108: 0xe00d, 0x109: 0x0008, 0x10a: 0xe00d, 0x10b: 0x0008,
+       0x10c: 0xe00d, 0x10d: 0x0008, 0x10e: 0xe00d, 0x10f: 0x0008, 0x110: 0xe00d, 0x111: 0x0008,
+       0x112: 0xe00d, 0x113: 0x0008, 0x114: 0xe00d, 0x115: 0x0008, 0x116: 0xe00d, 0x117: 0x0008,
+       0x118: 0xe00d, 0x119: 0x0008, 0x11a: 0xe00d, 0x11b: 0x0008, 0x11c: 0xe00d, 0x11d: 0x0008,
+       0x11e: 0xe00d, 0x11f: 0x0008, 0x120: 0xe00d, 0x121: 0x0008, 0x122: 0xe00d, 0x123: 0x0008,
+       0x124: 0xe00d, 0x125: 0x0008, 0x126: 0xe00d, 0x127: 0x0008, 0x128: 0xe00d, 0x129: 0x0008,
+       0x12a: 0xe00d, 0x12b: 0x0008, 0x12c: 0xe00d, 0x12d: 0x0008, 0x12e: 0xe00d, 0x12f: 0x0008,
+       0x130: 0x0179, 0x131: 0x0008, 0x132: 0x0035, 0x133: 0x004d, 0x134: 0xe00d, 0x135: 0x0008,
+       0x136: 0xe00d, 0x137: 0x0008, 0x138: 0x0008, 0x139: 0xe01d, 0x13a: 0x0008, 0x13b: 0xe03d,
+       0x13c: 0x0008, 0x13d: 0xe01d, 0x13e: 0x0008, 0x13f: 0x0199,
+       // Block 0x5, offset 0x140
+       0x140: 0x0199, 0x141: 0xe01d, 0x142: 0x0008, 0x143: 0xe03d, 0x144: 0x0008, 0x145: 0xe01d,
+       0x146: 0x0008, 0x147: 0xe07d, 0x148: 0x0008, 0x149: 0x01b9, 0x14a: 0xe00d, 0x14b: 0x0008,
+       0x14c: 0xe00d, 0x14d: 0x0008, 0x14e: 0xe00d, 0x14f: 0x0008, 0x150: 0xe00d, 0x151: 0x0008,
+       0x152: 0xe00d, 0x153: 0x0008, 0x154: 0xe00d, 0x155: 0x0008, 0x156: 0xe00d, 0x157: 0x0008,
+       0x158: 0xe00d, 0x159: 0x0008, 0x15a: 0xe00d, 0x15b: 0x0008, 0x15c: 0xe00d, 0x15d: 0x0008,
+       0x15e: 0xe00d, 0x15f: 0x0008, 0x160: 0xe00d, 0x161: 0x0008, 0x162: 0xe00d, 0x163: 0x0008,
+       0x164: 0xe00d, 0x165: 0x0008, 0x166: 0xe00d, 0x167: 0x0008, 0x168: 0xe00d, 0x169: 0x0008,
+       0x16a: 0xe00d, 0x16b: 0x0008, 0x16c: 0xe00d, 0x16d: 0x0008, 0x16e: 0xe00d, 0x16f: 0x0008,
+       0x170: 0xe00d, 0x171: 0x0008, 0x172: 0xe00d, 0x173: 0x0008, 0x174: 0xe00d, 0x175: 0x0008,
+       0x176: 0xe00d, 0x177: 0x0008, 0x178: 0x0065, 0x179: 0xe01d, 0x17a: 0x0008, 0x17b: 0xe03d,
+       0x17c: 0x0008, 0x17d: 0xe01d, 0x17e: 0x0008, 0x17f: 0x01d9,
+       // Block 0x6, offset 0x180
+       0x180: 0x0008, 0x181: 0x007d, 0x182: 0xe00d, 0x183: 0x0008, 0x184: 0xe00d, 0x185: 0x0008,
+       0x186: 0x007d, 0x187: 0xe07d, 0x188: 0x0008, 0x189: 0x0095, 0x18a: 0x00ad, 0x18b: 0xe03d,
+       0x18c: 0x0008, 0x18d: 0x0008, 0x18e: 0x00c5, 0x18f: 0x00dd, 0x190: 0x00f5, 0x191: 0xe01d,
+       0x192: 0x0008, 0x193: 0x010d, 0x194: 0x0125, 0x195: 0x0008, 0x196: 0x013d, 0x197: 0x013d,
+       0x198: 0xe00d, 0x199: 0x0008, 0x19a: 0x0008, 0x19b: 0x0008, 0x19c: 0x010d, 0x19d: 0x0155,
+       0x19e: 0x0008, 0x19f: 0x016d, 0x1a0: 0xe00d, 0x1a1: 0x0008, 0x1a2: 0xe00d, 0x1a3: 0x0008,
+       0x1a4: 0xe00d, 0x1a5: 0x0008, 0x1a6: 0x0185, 0x1a7: 0xe07d, 0x1a8: 0x0008, 0x1a9: 0x019d,
+       0x1aa: 0x0008, 0x1ab: 0x0008, 0x1ac: 0xe00d, 0x1ad: 0x0008, 0x1ae: 0x0185, 0x1af: 0xe0fd,
+       0x1b0: 0x0008, 0x1b1: 0x01b5, 0x1b2: 0x01cd, 0x1b3: 0xe03d, 0x1b4: 0x0008, 0x1b5: 0xe01d,
+       0x1b6: 0x0008, 0x1b7: 0x01e5, 0x1b8: 0xe00d, 0x1b9: 0x0008, 0x1ba: 0x0008, 0x1bb: 0x0008,
+       0x1bc: 0xe00d, 0x1bd: 0x0008, 0x1be: 0x0008, 0x1bf: 0x0008,
+       // Block 0x7, offset 0x1c0
+       0x1c0: 0x0008, 0x1c1: 0x0008, 0x1c2: 0x0008, 0x1c3: 0x0008, 0x1c4: 0x01e9, 0x1c5: 0x01e9,
+       0x1c6: 0x01e9, 0x1c7: 0x01fd, 0x1c8: 0x0215, 0x1c9: 0x022d, 0x1ca: 0x0245, 0x1cb: 0x025d,
+       0x1cc: 0x0275, 0x1cd: 0xe01d, 0x1ce: 0x0008, 0x1cf: 0xe0fd, 0x1d0: 0x0008, 0x1d1: 0xe01d,
+       0x1d2: 0x0008, 0x1d3: 0xe03d, 0x1d4: 0x0008, 0x1d5: 0xe01d, 0x1d6: 0x0008, 0x1d7: 0xe07d,
+       0x1d8: 0x0008, 0x1d9: 0xe01d, 0x1da: 0x0008, 0x1db: 0xe03d, 0x1dc: 0x0008, 0x1dd: 0x0008,
+       0x1de: 0xe00d, 0x1df: 0x0008, 0x1e0: 0xe00d, 0x1e1: 0x0008, 0x1e2: 0xe00d, 0x1e3: 0x0008,
+       0x1e4: 0xe00d, 0x1e5: 0x0008, 0x1e6: 0xe00d, 0x1e7: 0x0008, 0x1e8: 0xe00d, 0x1e9: 0x0008,
+       0x1ea: 0xe00d, 0x1eb: 0x0008, 0x1ec: 0xe00d, 0x1ed: 0x0008, 0x1ee: 0xe00d, 0x1ef: 0x0008,
+       0x1f0: 0x0008, 0x1f1: 0x028d, 0x1f2: 0x02a5, 0x1f3: 0x02bd, 0x1f4: 0xe00d, 0x1f5: 0x0008,
+       0x1f6: 0x02d5, 0x1f7: 0x02ed, 0x1f8: 0xe00d, 0x1f9: 0x0008, 0x1fa: 0xe00d, 0x1fb: 0x0008,
+       0x1fc: 0xe00d, 0x1fd: 0x0008, 0x1fe: 0xe00d, 0x1ff: 0x0008,
+       // Block 0x8, offset 0x200
+       0x200: 0xe00d, 0x201: 0x0008, 0x202: 0xe00d, 0x203: 0x0008, 0x204: 0xe00d, 0x205: 0x0008,
+       0x206: 0xe00d, 0x207: 0x0008, 0x208: 0xe00d, 0x209: 0x0008, 0x20a: 0xe00d, 0x20b: 0x0008,
+       0x20c: 0xe00d, 0x20d: 0x0008, 0x20e: 0xe00d, 0x20f: 0x0008, 0x210: 0xe00d, 0x211: 0x0008,
+       0x212: 0xe00d, 0x213: 0x0008, 0x214: 0xe00d, 0x215: 0x0008, 0x216: 0xe00d, 0x217: 0x0008,
+       0x218: 0xe00d, 0x219: 0x0008, 0x21a: 0xe00d, 0x21b: 0x0008, 0x21c: 0xe00d, 0x21d: 0x0008,
+       0x21e: 0xe00d, 0x21f: 0x0008, 0x220: 0x0305, 0x221: 0x0008, 0x222: 0xe00d, 0x223: 0x0008,
+       0x224: 0xe00d, 0x225: 0x0008, 0x226: 0xe00d, 0x227: 0x0008, 0x228: 0xe00d, 0x229: 0x0008,
+       0x22a: 0xe00d, 0x22b: 0x0008, 0x22c: 0xe00d, 0x22d: 0x0008, 0x22e: 0xe00d, 0x22f: 0x0008,
+       0x230: 0xe00d, 0x231: 0x0008, 0x232: 0xe00d, 0x233: 0x0008, 0x234: 0x0008, 0x235: 0x0008,
+       0x236: 0x0008, 0x237: 0x0008, 0x238: 0x0008, 0x239: 0x0008, 0x23a: 0x0209, 0x23b: 0xe03d,
+       0x23c: 0x0008, 0x23d: 0x031d, 0x23e: 0x0229, 0x23f: 0x0008,
+       // Block 0x9, offset 0x240
+       0x240: 0x0008, 0x241: 0x0008, 0x242: 0x0018, 0x243: 0x0018, 0x244: 0x0018, 0x245: 0x0018,
+       0x246: 0x0008, 0x247: 0x0008, 0x248: 0x0008, 0x249: 0x0008, 0x24a: 0x0008, 0x24b: 0x0008,
+       0x24c: 0x0008, 0x24d: 0x0008, 0x24e: 0x0008, 0x24f: 0x0008, 0x250: 0x0008, 0x251: 0x0008,
+       0x252: 0x0018, 0x253: 0x0018, 0x254: 0x0018, 0x255: 0x0018, 0x256: 0x0018, 0x257: 0x0018,
+       0x258: 0x029a, 0x259: 0x02ba, 0x25a: 0x02da, 0x25b: 0x02fa, 0x25c: 0x031a, 0x25d: 0x033a,
+       0x25e: 0x0018, 0x25f: 0x0018, 0x260: 0x03ad, 0x261: 0x0359, 0x262: 0x01d9, 0x263: 0x0369,
+       0x264: 0x03c5, 0x265: 0x0018, 0x266: 0x0018, 0x267: 0x0018, 0x268: 0x0018, 0x269: 0x0018,
+       0x26a: 0x0018, 0x26b: 0x0018, 0x26c: 0x0008, 0x26d: 0x0018, 0x26e: 0x0008, 0x26f: 0x0018,
+       0x270: 0x0018, 0x271: 0x0018, 0x272: 0x0018, 0x273: 0x0018, 0x274: 0x0018, 0x275: 0x0018,
+       0x276: 0x0018, 0x277: 0x0018, 0x278: 0x0018, 0x279: 0x0018, 0x27a: 0x0018, 0x27b: 0x0018,
+       0x27c: 0x0018, 0x27d: 0x0018, 0x27e: 0x0018, 0x27f: 0x0018,
+       // Block 0xa, offset 0x280
+       0x280: 0x03dd, 0x281: 0x03dd, 0x282: 0x1308, 0x283: 0x03f5, 0x284: 0x0379, 0x285: 0x040d,
+       0x286: 0x1308, 0x287: 0x1308, 0x288: 0x1308, 0x289: 0x1308, 0x28a: 0x1308, 0x28b: 0x1308,
+       0x28c: 0x1308, 0x28d: 0x1308, 0x28e: 0x1308, 0x28f: 0x13c0, 0x290: 0x1308, 0x291: 0x1308,
+       0x292: 0x1308, 0x293: 0x1308, 0x294: 0x1308, 0x295: 0x1308, 0x296: 0x1308, 0x297: 0x1308,
+       0x298: 0x1308, 0x299: 0x1308, 0x29a: 0x1308, 0x29b: 0x1308, 0x29c: 0x1308, 0x29d: 0x1308,
+       0x29e: 0x1308, 0x29f: 0x1308, 0x2a0: 0x1308, 0x2a1: 0x1308, 0x2a2: 0x1308, 0x2a3: 0x1308,
+       0x2a4: 0x1308, 0x2a5: 0x1308, 0x2a6: 0x1308, 0x2a7: 0x1308, 0x2a8: 0x1308, 0x2a9: 0x1308,
+       0x2aa: 0x1308, 0x2ab: 0x1308, 0x2ac: 0x1308, 0x2ad: 0x1308, 0x2ae: 0x1308, 0x2af: 0x1308,
+       0x2b0: 0xe00d, 0x2b1: 0x0008, 0x2b2: 0xe00d, 0x2b3: 0x0008, 0x2b4: 0x0425, 0x2b5: 0x0008,
+       0x2b6: 0xe00d, 0x2b7: 0x0008, 0x2b8: 0x0040, 0x2b9: 0x0040, 0x2ba: 0x03a2, 0x2bb: 0x0008,
+       0x2bc: 0x0008, 0x2bd: 0x0008, 0x2be: 0x03c2, 0x2bf: 0x043d,
+       // Block 0xb, offset 0x2c0
+       0x2c0: 0x0040, 0x2c1: 0x0040, 0x2c2: 0x0040, 0x2c3: 0x0040, 0x2c4: 0x008a, 0x2c5: 0x03d2,
+       0x2c6: 0xe155, 0x2c7: 0x0455, 0x2c8: 0xe12d, 0x2c9: 0xe13d, 0x2ca: 0xe12d, 0x2cb: 0x0040,
+       0x2cc: 0x03dd, 0x2cd: 0x0040, 0x2ce: 0x046d, 0x2cf: 0x0485, 0x2d0: 0x0008, 0x2d1: 0xe105,
+       0x2d2: 0xe105, 0x2d3: 0xe105, 0x2d4: 0xe105, 0x2d5: 0xe105, 0x2d6: 0xe105, 0x2d7: 0xe105,
+       0x2d8: 0xe105, 0x2d9: 0xe105, 0x2da: 0xe105, 0x2db: 0xe105, 0x2dc: 0xe105, 0x2dd: 0xe105,
+       0x2de: 0xe105, 0x2df: 0xe105, 0x2e0: 0x049d, 0x2e1: 0x049d, 0x2e2: 0x0040, 0x2e3: 0x049d,
+       0x2e4: 0x049d, 0x2e5: 0x049d, 0x2e6: 0x049d, 0x2e7: 0x049d, 0x2e8: 0x049d, 0x2e9: 0x049d,
+       0x2ea: 0x049d, 0x2eb: 0x049d, 0x2ec: 0x0008, 0x2ed: 0x0008, 0x2ee: 0x0008, 0x2ef: 0x0008,
+       0x2f0: 0x0008, 0x2f1: 0x0008, 0x2f2: 0x0008, 0x2f3: 0x0008, 0x2f4: 0x0008, 0x2f5: 0x0008,
+       0x2f6: 0x0008, 0x2f7: 0x0008, 0x2f8: 0x0008, 0x2f9: 0x0008, 0x2fa: 0x0008, 0x2fb: 0x0008,
+       0x2fc: 0x0008, 0x2fd: 0x0008, 0x2fe: 0x0008, 0x2ff: 0x0008,
+       // Block 0xc, offset 0x300
+       0x300: 0x0008, 0x301: 0x0008, 0x302: 0xe00f, 0x303: 0x0008, 0x304: 0x0008, 0x305: 0x0008,
+       0x306: 0x0008, 0x307: 0x0008, 0x308: 0x0008, 0x309: 0x0008, 0x30a: 0x0008, 0x30b: 0x0008,
+       0x30c: 0x0008, 0x30d: 0x0008, 0x30e: 0x0008, 0x30f: 0xe0c5, 0x310: 0x04b5, 0x311: 0x04cd,
+       0x312: 0xe0bd, 0x313: 0xe0f5, 0x314: 0xe0fd, 0x315: 0xe09d, 0x316: 0xe0b5, 0x317: 0x0008,
+       0x318: 0xe00d, 0x319: 0x0008, 0x31a: 0xe00d, 0x31b: 0x0008, 0x31c: 0xe00d, 0x31d: 0x0008,
+       0x31e: 0xe00d, 0x31f: 0x0008, 0x320: 0xe00d, 0x321: 0x0008, 0x322: 0xe00d, 0x323: 0x0008,
+       0x324: 0xe00d, 0x325: 0x0008, 0x326: 0xe00d, 0x327: 0x0008, 0x328: 0xe00d, 0x329: 0x0008,
+       0x32a: 0xe00d, 0x32b: 0x0008, 0x32c: 0xe00d, 0x32d: 0x0008, 0x32e: 0xe00d, 0x32f: 0x0008,
+       0x330: 0x04e5, 0x331: 0xe185, 0x332: 0xe18d, 0x333: 0x0008, 0x334: 0x04fd, 0x335: 0x03dd,
+       0x336: 0x0018, 0x337: 0xe07d, 0x338: 0x0008, 0x339: 0xe1d5, 0x33a: 0xe00d, 0x33b: 0x0008,
+       0x33c: 0x0008, 0x33d: 0x0515, 0x33e: 0x052d, 0x33f: 0x052d,
+       // Block 0xd, offset 0x340
+       0x340: 0x0008, 0x341: 0x0008, 0x342: 0x0008, 0x343: 0x0008, 0x344: 0x0008, 0x345: 0x0008,
+       0x346: 0x0008, 0x347: 0x0008, 0x348: 0x0008, 0x349: 0x0008, 0x34a: 0x0008, 0x34b: 0x0008,
+       0x34c: 0x0008, 0x34d: 0x0008, 0x34e: 0x0008, 0x34f: 0x0008, 0x350: 0x0008, 0x351: 0x0008,
+       0x352: 0x0008, 0x353: 0x0008, 0x354: 0x0008, 0x355: 0x0008, 0x356: 0x0008, 0x357: 0x0008,
+       0x358: 0x0008, 0x359: 0x0008, 0x35a: 0x0008, 0x35b: 0x0008, 0x35c: 0x0008, 0x35d: 0x0008,
+       0x35e: 0x0008, 0x35f: 0x0008, 0x360: 0xe00d, 0x361: 0x0008, 0x362: 0xe00d, 0x363: 0x0008,
+       0x364: 0xe00d, 0x365: 0x0008, 0x366: 0xe00d, 0x367: 0x0008, 0x368: 0xe00d, 0x369: 0x0008,
+       0x36a: 0xe00d, 0x36b: 0x0008, 0x36c: 0xe00d, 0x36d: 0x0008, 0x36e: 0xe00d, 0x36f: 0x0008,
+       0x370: 0xe00d, 0x371: 0x0008, 0x372: 0xe00d, 0x373: 0x0008, 0x374: 0xe00d, 0x375: 0x0008,
+       0x376: 0xe00d, 0x377: 0x0008, 0x378: 0xe00d, 0x379: 0x0008, 0x37a: 0xe00d, 0x37b: 0x0008,
+       0x37c: 0xe00d, 0x37d: 0x0008, 0x37e: 0xe00d, 0x37f: 0x0008,
+       // Block 0xe, offset 0x380
+       0x380: 0xe00d, 0x381: 0x0008, 0x382: 0x0018, 0x383: 0x1308, 0x384: 0x1308, 0x385: 0x1308,
+       0x386: 0x1308, 0x387: 0x1308, 0x388: 0x1318, 0x389: 0x1318, 0x38a: 0xe00d, 0x38b: 0x0008,
+       0x38c: 0xe00d, 0x38d: 0x0008, 0x38e: 0xe00d, 0x38f: 0x0008, 0x390: 0xe00d, 0x391: 0x0008,
+       0x392: 0xe00d, 0x393: 0x0008, 0x394: 0xe00d, 0x395: 0x0008, 0x396: 0xe00d, 0x397: 0x0008,
+       0x398: 0xe00d, 0x399: 0x0008, 0x39a: 0xe00d, 0x39b: 0x0008, 0x39c: 0xe00d, 0x39d: 0x0008,
+       0x39e: 0xe00d, 0x39f: 0x0008, 0x3a0: 0xe00d, 0x3a1: 0x0008, 0x3a2: 0xe00d, 0x3a3: 0x0008,
+       0x3a4: 0xe00d, 0x3a5: 0x0008, 0x3a6: 0xe00d, 0x3a7: 0x0008, 0x3a8: 0xe00d, 0x3a9: 0x0008,
+       0x3aa: 0xe00d, 0x3ab: 0x0008, 0x3ac: 0xe00d, 0x3ad: 0x0008, 0x3ae: 0xe00d, 0x3af: 0x0008,
+       0x3b0: 0xe00d, 0x3b1: 0x0008, 0x3b2: 0xe00d, 0x3b3: 0x0008, 0x3b4: 0xe00d, 0x3b5: 0x0008,
+       0x3b6: 0xe00d, 0x3b7: 0x0008, 0x3b8: 0xe00d, 0x3b9: 0x0008, 0x3ba: 0xe00d, 0x3bb: 0x0008,
+       0x3bc: 0xe00d, 0x3bd: 0x0008, 0x3be: 0xe00d, 0x3bf: 0x0008,
+       // Block 0xf, offset 0x3c0
+       0x3c0: 0x0040, 0x3c1: 0xe01d, 0x3c2: 0x0008, 0x3c3: 0xe03d, 0x3c4: 0x0008, 0x3c5: 0xe01d,
+       0x3c6: 0x0008, 0x3c7: 0xe07d, 0x3c8: 0x0008, 0x3c9: 0xe01d, 0x3ca: 0x0008, 0x3cb: 0xe03d,
+       0x3cc: 0x0008, 0x3cd: 0xe01d, 0x3ce: 0x0008, 0x3cf: 0x0008, 0x3d0: 0xe00d, 0x3d1: 0x0008,
+       0x3d2: 0xe00d, 0x3d3: 0x0008, 0x3d4: 0xe00d, 0x3d5: 0x0008, 0x3d6: 0xe00d, 0x3d7: 0x0008,
+       0x3d8: 0xe00d, 0x3d9: 0x0008, 0x3da: 0xe00d, 0x3db: 0x0008, 0x3dc: 0xe00d, 0x3dd: 0x0008,
+       0x3de: 0xe00d, 0x3df: 0x0008, 0x3e0: 0xe00d, 0x3e1: 0x0008, 0x3e2: 0xe00d, 0x3e3: 0x0008,
+       0x3e4: 0xe00d, 0x3e5: 0x0008, 0x3e6: 0xe00d, 0x3e7: 0x0008, 0x3e8: 0xe00d, 0x3e9: 0x0008,
+       0x3ea: 0xe00d, 0x3eb: 0x0008, 0x3ec: 0xe00d, 0x3ed: 0x0008, 0x3ee: 0xe00d, 0x3ef: 0x0008,
+       0x3f0: 0xe00d, 0x3f1: 0x0008, 0x3f2: 0xe00d, 0x3f3: 0x0008, 0x3f4: 0xe00d, 0x3f5: 0x0008,
+       0x3f6: 0xe00d, 0x3f7: 0x0008, 0x3f8: 0xe00d, 0x3f9: 0x0008, 0x3fa: 0xe00d, 0x3fb: 0x0008,
+       0x3fc: 0xe00d, 0x3fd: 0x0008, 0x3fe: 0xe00d, 0x3ff: 0x0008,
+       // Block 0x10, offset 0x400
+       0x400: 0xe00d, 0x401: 0x0008, 0x402: 0xe00d, 0x403: 0x0008, 0x404: 0xe00d, 0x405: 0x0008,
+       0x406: 0xe00d, 0x407: 0x0008, 0x408: 0xe00d, 0x409: 0x0008, 0x40a: 0xe00d, 0x40b: 0x0008,
+       0x40c: 0xe00d, 0x40d: 0x0008, 0x40e: 0xe00d, 0x40f: 0x0008, 0x410: 0xe00d, 0x411: 0x0008,
+       0x412: 0xe00d, 0x413: 0x0008, 0x414: 0xe00d, 0x415: 0x0008, 0x416: 0xe00d, 0x417: 0x0008,
+       0x418: 0xe00d, 0x419: 0x0008, 0x41a: 0xe00d, 0x41b: 0x0008, 0x41c: 0xe00d, 0x41d: 0x0008,
+       0x41e: 0xe00d, 0x41f: 0x0008, 0x420: 0xe00d, 0x421: 0x0008, 0x422: 0xe00d, 0x423: 0x0008,
+       0x424: 0xe00d, 0x425: 0x0008, 0x426: 0xe00d, 0x427: 0x0008, 0x428: 0xe00d, 0x429: 0x0008,
+       0x42a: 0xe00d, 0x42b: 0x0008, 0x42c: 0xe00d, 0x42d: 0x0008, 0x42e: 0xe00d, 0x42f: 0x0008,
+       0x430: 0x0040, 0x431: 0x03f5, 0x432: 0x03f5, 0x433: 0x03f5, 0x434: 0x03f5, 0x435: 0x03f5,
+       0x436: 0x03f5, 0x437: 0x03f5, 0x438: 0x03f5, 0x439: 0x03f5, 0x43a: 0x03f5, 0x43b: 0x03f5,
+       0x43c: 0x03f5, 0x43d: 0x03f5, 0x43e: 0x03f5, 0x43f: 0x03f5,
+       // Block 0x11, offset 0x440
+       0x440: 0x0040, 0x441: 0x0040, 0x442: 0x0040, 0x443: 0x0040, 0x444: 0x0040, 0x445: 0x0040,
+       0x446: 0x0018, 0x447: 0x0018, 0x448: 0x0018, 0x449: 0x0018, 0x44a: 0x0018, 0x44b: 0x0018,
+       0x44c: 0x0018, 0x44d: 0x0018, 0x44e: 0x0018, 0x44f: 0x0018, 0x450: 0x1308, 0x451: 0x1308,
+       0x452: 0x1308, 0x453: 0x1308, 0x454: 0x1308, 0x455: 0x1308, 0x456: 0x1308, 0x457: 0x1308,
+       0x458: 0x1308, 0x459: 0x1308, 0x45a: 0x1308, 0x45b: 0x0018, 0x45c: 0x0340, 0x45d: 0x0040,
+       0x45e: 0x0018, 0x45f: 0x0018, 0x460: 0x0208, 0x461: 0x0008, 0x462: 0x0408, 0x463: 0x0408,
+       0x464: 0x0408, 0x465: 0x0408, 0x466: 0x0208, 0x467: 0x0408, 0x468: 0x0208, 0x469: 0x0408,
+       0x46a: 0x0208, 0x46b: 0x0208, 0x46c: 0x0208, 0x46d: 0x0208, 0x46e: 0x0208, 0x46f: 0x0408,
+       0x470: 0x0408, 0x471: 0x0408, 0x472: 0x0408, 0x473: 0x0208, 0x474: 0x0208, 0x475: 0x0208,
+       0x476: 0x0208, 0x477: 0x0208, 0x478: 0x0208, 0x479: 0x0208, 0x47a: 0x0208, 0x47b: 0x0208,
+       0x47c: 0x0208, 0x47d: 0x0208, 0x47e: 0x0208, 0x47f: 0x0208,
+       // Block 0x12, offset 0x480
+       0x480: 0x0408, 0x481: 0x0208, 0x482: 0x0208, 0x483: 0x0408, 0x484: 0x0408, 0x485: 0x0408,
+       0x486: 0x0408, 0x487: 0x0408, 0x488: 0x0408, 0x489: 0x0408, 0x48a: 0x0408, 0x48b: 0x0408,
+       0x48c: 0x0208, 0x48d: 0x0408, 0x48e: 0x0208, 0x48f: 0x0408, 0x490: 0x0208, 0x491: 0x0208,
+       0x492: 0x0408, 0x493: 0x0408, 0x494: 0x0018, 0x495: 0x0408, 0x496: 0x1308, 0x497: 0x1308,
+       0x498: 0x1308, 0x499: 0x1308, 0x49a: 0x1308, 0x49b: 0x1308, 0x49c: 0x1308, 0x49d: 0x0040,
+       0x49e: 0x0018, 0x49f: 0x1308, 0x4a0: 0x1308, 0x4a1: 0x1308, 0x4a2: 0x1308, 0x4a3: 0x1308,
+       0x4a4: 0x1308, 0x4a5: 0x0008, 0x4a6: 0x0008, 0x4a7: 0x1308, 0x4a8: 0x1308, 0x4a9: 0x0018,
+       0x4aa: 0x1308, 0x4ab: 0x1308, 0x4ac: 0x1308, 0x4ad: 0x1308, 0x4ae: 0x0408, 0x4af: 0x0408,
+       0x4b0: 0x0008, 0x4b1: 0x0008, 0x4b2: 0x0008, 0x4b3: 0x0008, 0x4b4: 0x0008, 0x4b5: 0x0008,
+       0x4b6: 0x0008, 0x4b7: 0x0008, 0x4b8: 0x0008, 0x4b9: 0x0008, 0x4ba: 0x0208, 0x4bb: 0x0208,
+       0x4bc: 0x0208, 0x4bd: 0x0008, 0x4be: 0x0008, 0x4bf: 0x0208,
+       // Block 0x13, offset 0x4c0
+       0x4c0: 0x0018, 0x4c1: 0x0018, 0x4c2: 0x0018, 0x4c3: 0x0018, 0x4c4: 0x0018, 0x4c5: 0x0018,
+       0x4c6: 0x0018, 0x4c7: 0x0018, 0x4c8: 0x0018, 0x4c9: 0x0018, 0x4ca: 0x0018, 0x4cb: 0x0018,
+       0x4cc: 0x0018, 0x4cd: 0x0018, 0x4ce: 0x0040, 0x4cf: 0x0340, 0x4d0: 0x0408, 0x4d1: 0x1308,
+       0x4d2: 0x0208, 0x4d3: 0x0208, 0x4d4: 0x0208, 0x4d5: 0x0408, 0x4d6: 0x0408, 0x4d7: 0x0408,
+       0x4d8: 0x0408, 0x4d9: 0x0408, 0x4da: 0x0208, 0x4db: 0x0208, 0x4dc: 0x0208, 0x4dd: 0x0208,
+       0x4de: 0x0408, 0x4df: 0x0208, 0x4e0: 0x0208, 0x4e1: 0x0208, 0x4e2: 0x0208, 0x4e3: 0x0208,
+       0x4e4: 0x0208, 0x4e5: 0x0208, 0x4e6: 0x0208, 0x4e7: 0x0208, 0x4e8: 0x0408, 0x4e9: 0x0208,
+       0x4ea: 0x0408, 0x4eb: 0x0208, 0x4ec: 0x0408, 0x4ed: 0x0208, 0x4ee: 0x0208, 0x4ef: 0x0408,
+       0x4f0: 0x1308, 0x4f1: 0x1308, 0x4f2: 0x1308, 0x4f3: 0x1308, 0x4f4: 0x1308, 0x4f5: 0x1308,
+       0x4f6: 0x1308, 0x4f7: 0x1308, 0x4f8: 0x1308, 0x4f9: 0x1308, 0x4fa: 0x1308, 0x4fb: 0x1308,
+       0x4fc: 0x1308, 0x4fd: 0x1308, 0x4fe: 0x1308, 0x4ff: 0x1308,
+       // Block 0x14, offset 0x500
+       0x500: 0x1008, 0x501: 0x1308, 0x502: 0x1308, 0x503: 0x1308, 0x504: 0x1308, 0x505: 0x1308,
+       0x506: 0x1308, 0x507: 0x1308, 0x508: 0x1308, 0x509: 0x1008, 0x50a: 0x1008, 0x50b: 0x1008,
+       0x50c: 0x1008, 0x50d: 0x1b08, 0x50e: 0x1008, 0x50f: 0x1008, 0x510: 0x0008, 0x511: 0x1308,
+       0x512: 0x1308, 0x513: 0x1308, 0x514: 0x1308, 0x515: 0x1308, 0x516: 0x1308, 0x517: 0x1308,
+       0x518: 0x04c9, 0x519: 0x0501, 0x51a: 0x0539, 0x51b: 0x0571, 0x51c: 0x05a9, 0x51d: 0x05e1,
+       0x51e: 0x0619, 0x51f: 0x0651, 0x520: 0x0008, 0x521: 0x0008, 0x522: 0x1308, 0x523: 0x1308,
+       0x524: 0x0018, 0x525: 0x0018, 0x526: 0x0008, 0x527: 0x0008, 0x528: 0x0008, 0x529: 0x0008,
+       0x52a: 0x0008, 0x52b: 0x0008, 0x52c: 0x0008, 0x52d: 0x0008, 0x52e: 0x0008, 0x52f: 0x0008,
+       0x530: 0x0018, 0x531: 0x0008, 0x532: 0x0008, 0x533: 0x0008, 0x534: 0x0008, 0x535: 0x0008,
+       0x536: 0x0008, 0x537: 0x0008, 0x538: 0x0008, 0x539: 0x0008, 0x53a: 0x0008, 0x53b: 0x0008,
+       0x53c: 0x0008, 0x53d: 0x0008, 0x53e: 0x0008, 0x53f: 0x0008,
+       // Block 0x15, offset 0x540
+       0x540: 0x0008, 0x541: 0x1308, 0x542: 0x1008, 0x543: 0x1008, 0x544: 0x0040, 0x545: 0x0008,
+       0x546: 0x0008, 0x547: 0x0008, 0x548: 0x0008, 0x549: 0x0008, 0x54a: 0x0008, 0x54b: 0x0008,
+       0x54c: 0x0008, 0x54d: 0x0040, 0x54e: 0x0040, 0x54f: 0x0008, 0x550: 0x0008, 0x551: 0x0040,
+       0x552: 0x0040, 0x553: 0x0008, 0x554: 0x0008, 0x555: 0x0008, 0x556: 0x0008, 0x557: 0x0008,
+       0x558: 0x0008, 0x559: 0x0008, 0x55a: 0x0008, 0x55b: 0x0008, 0x55c: 0x0008, 0x55d: 0x0008,
+       0x55e: 0x0008, 0x55f: 0x0008, 0x560: 0x0008, 0x561: 0x0008, 0x562: 0x0008, 0x563: 0x0008,
+       0x564: 0x0008, 0x565: 0x0008, 0x566: 0x0008, 0x567: 0x0008, 0x568: 0x0008, 0x569: 0x0040,
+       0x56a: 0x0008, 0x56b: 0x0008, 0x56c: 0x0008, 0x56d: 0x0008, 0x56e: 0x0008, 0x56f: 0x0008,
+       0x570: 0x0008, 0x571: 0x0040, 0x572: 0x0008, 0x573: 0x0040, 0x574: 0x0040, 0x575: 0x0040,
+       0x576: 0x0008, 0x577: 0x0008, 0x578: 0x0008, 0x579: 0x0008, 0x57a: 0x0040, 0x57b: 0x0040,
+       0x57c: 0x1308, 0x57d: 0x0008, 0x57e: 0x1008, 0x57f: 0x1008,
+       // Block 0x16, offset 0x580
+       0x580: 0x1008, 0x581: 0x1308, 0x582: 0x1308, 0x583: 0x1308, 0x584: 0x1308, 0x585: 0x0040,
+       0x586: 0x0040, 0x587: 0x1008, 0x588: 0x1008, 0x589: 0x0040, 0x58a: 0x0040, 0x58b: 0x1008,
+       0x58c: 0x1008, 0x58d: 0x1b08, 0x58e: 0x0008, 0x58f: 0x0040, 0x590: 0x0040, 0x591: 0x0040,
+       0x592: 0x0040, 0x593: 0x0040, 0x594: 0x0040, 0x595: 0x0040, 0x596: 0x0040, 0x597: 0x1008,
+       0x598: 0x0040, 0x599: 0x0040, 0x59a: 0x0040, 0x59b: 0x0040, 0x59c: 0x0689, 0x59d: 0x06c1,
+       0x59e: 0x0040, 0x59f: 0x06f9, 0x5a0: 0x0008, 0x5a1: 0x0008, 0x5a2: 0x1308, 0x5a3: 0x1308,
+       0x5a4: 0x0040, 0x5a5: 0x0040, 0x5a6: 0x0008, 0x5a7: 0x0008, 0x5a8: 0x0008, 0x5a9: 0x0008,
+       0x5aa: 0x0008, 0x5ab: 0x0008, 0x5ac: 0x0008, 0x5ad: 0x0008, 0x5ae: 0x0008, 0x5af: 0x0008,
+       0x5b0: 0x0008, 0x5b1: 0x0008, 0x5b2: 0x0018, 0x5b3: 0x0018, 0x5b4: 0x0018, 0x5b5: 0x0018,
+       0x5b6: 0x0018, 0x5b7: 0x0018, 0x5b8: 0x0018, 0x5b9: 0x0018, 0x5ba: 0x0018, 0x5bb: 0x0018,
+       0x5bc: 0x0040, 0x5bd: 0x0040, 0x5be: 0x0040, 0x5bf: 0x0040,
+       // Block 0x17, offset 0x5c0
+       0x5c0: 0x0040, 0x5c1: 0x1308, 0x5c2: 0x1308, 0x5c3: 0x1008, 0x5c4: 0x0040, 0x5c5: 0x0008,
+       0x5c6: 0x0008, 0x5c7: 0x0008, 0x5c8: 0x0008, 0x5c9: 0x0008, 0x5ca: 0x0008, 0x5cb: 0x0040,
+       0x5cc: 0x0040, 0x5cd: 0x0040, 0x5ce: 0x0040, 0x5cf: 0x0008, 0x5d0: 0x0008, 0x5d1: 0x0040,
+       0x5d2: 0x0040, 0x5d3: 0x0008, 0x5d4: 0x0008, 0x5d5: 0x0008, 0x5d6: 0x0008, 0x5d7: 0x0008,
+       0x5d8: 0x0008, 0x5d9: 0x0008, 0x5da: 0x0008, 0x5db: 0x0008, 0x5dc: 0x0008, 0x5dd: 0x0008,
+       0x5de: 0x0008, 0x5df: 0x0008, 0x5e0: 0x0008, 0x5e1: 0x0008, 0x5e2: 0x0008, 0x5e3: 0x0008,
+       0x5e4: 0x0008, 0x5e5: 0x0008, 0x5e6: 0x0008, 0x5e7: 0x0008, 0x5e8: 0x0008, 0x5e9: 0x0040,
+       0x5ea: 0x0008, 0x5eb: 0x0008, 0x5ec: 0x0008, 0x5ed: 0x0008, 0x5ee: 0x0008, 0x5ef: 0x0008,
+       0x5f0: 0x0008, 0x5f1: 0x0040, 0x5f2: 0x0008, 0x5f3: 0x0731, 0x5f4: 0x0040, 0x5f5: 0x0008,
+       0x5f6: 0x0769, 0x5f7: 0x0040, 0x5f8: 0x0008, 0x5f9: 0x0008, 0x5fa: 0x0040, 0x5fb: 0x0040,
+       0x5fc: 0x1308, 0x5fd: 0x0040, 0x5fe: 0x1008, 0x5ff: 0x1008,
+       // Block 0x18, offset 0x600
+       0x600: 0x1008, 0x601: 0x1308, 0x602: 0x1308, 0x603: 0x0040, 0x604: 0x0040, 0x605: 0x0040,
+       0x606: 0x0040, 0x607: 0x1308, 0x608: 0x1308, 0x609: 0x0040, 0x60a: 0x0040, 0x60b: 0x1308,
+       0x60c: 0x1308, 0x60d: 0x1b08, 0x60e: 0x0040, 0x60f: 0x0040, 0x610: 0x0040, 0x611: 0x1308,
+       0x612: 0x0040, 0x613: 0x0040, 0x614: 0x0040, 0x615: 0x0040, 0x616: 0x0040, 0x617: 0x0040,
+       0x618: 0x0040, 0x619: 0x07a1, 0x61a: 0x07d9, 0x61b: 0x0811, 0x61c: 0x0008, 0x61d: 0x0040,
+       0x61e: 0x0849, 0x61f: 0x0040, 0x620: 0x0040, 0x621: 0x0040, 0x622: 0x0040, 0x623: 0x0040,
+       0x624: 0x0040, 0x625: 0x0040, 0x626: 0x0008, 0x627: 0x0008, 0x628: 0x0008, 0x629: 0x0008,
+       0x62a: 0x0008, 0x62b: 0x0008, 0x62c: 0x0008, 0x62d: 0x0008, 0x62e: 0x0008, 0x62f: 0x0008,
+       0x630: 0x1308, 0x631: 0x1308, 0x632: 0x0008, 0x633: 0x0008, 0x634: 0x0008, 0x635: 0x1308,
+       0x636: 0x0040, 0x637: 0x0040, 0x638: 0x0040, 0x639: 0x0040, 0x63a: 0x0040, 0x63b: 0x0040,
+       0x63c: 0x0040, 0x63d: 0x0040, 0x63e: 0x0040, 0x63f: 0x0040,
+       // Block 0x19, offset 0x640
+       0x640: 0x0040, 0x641: 0x1308, 0x642: 0x1308, 0x643: 0x1008, 0x644: 0x0040, 0x645: 0x0008,
+       0x646: 0x0008, 0x647: 0x0008, 0x648: 0x0008, 0x649: 0x0008, 0x64a: 0x0008, 0x64b: 0x0008,
+       0x64c: 0x0008, 0x64d: 0x0008, 0x64e: 0x0040, 0x64f: 0x0008, 0x650: 0x0008, 0x651: 0x0008,
+       0x652: 0x0040, 0x653: 0x0008, 0x654: 0x0008, 0x655: 0x0008, 0x656: 0x0008, 0x657: 0x0008,
+       0x658: 0x0008, 0x659: 0x0008, 0x65a: 0x0008, 0x65b: 0x0008, 0x65c: 0x0008, 0x65d: 0x0008,
+       0x65e: 0x0008, 0x65f: 0x0008, 0x660: 0x0008, 0x661: 0x0008, 0x662: 0x0008, 0x663: 0x0008,
+       0x664: 0x0008, 0x665: 0x0008, 0x666: 0x0008, 0x667: 0x0008, 0x668: 0x0008, 0x669: 0x0040,
+       0x66a: 0x0008, 0x66b: 0x0008, 0x66c: 0x0008, 0x66d: 0x0008, 0x66e: 0x0008, 0x66f: 0x0008,
+       0x670: 0x0008, 0x671: 0x0040, 0x672: 0x0008, 0x673: 0x0008, 0x674: 0x0040, 0x675: 0x0008,
+       0x676: 0x0008, 0x677: 0x0008, 0x678: 0x0008, 0x679: 0x0008, 0x67a: 0x0040, 0x67b: 0x0040,
+       0x67c: 0x1308, 0x67d: 0x0008, 0x67e: 0x1008, 0x67f: 0x1008,
+       // Block 0x1a, offset 0x680
+       0x680: 0x1008, 0x681: 0x1308, 0x682: 0x1308, 0x683: 0x1308, 0x684: 0x1308, 0x685: 0x1308,
+       0x686: 0x0040, 0x687: 0x1308, 0x688: 0x1308, 0x689: 0x1008, 0x68a: 0x0040, 0x68b: 0x1008,
+       0x68c: 0x1008, 0x68d: 0x1b08, 0x68e: 0x0040, 0x68f: 0x0040, 0x690: 0x0008, 0x691: 0x0040,
+       0x692: 0x0040, 0x693: 0x0040, 0x694: 0x0040, 0x695: 0x0040, 0x696: 0x0040, 0x697: 0x0040,
+       0x698: 0x0040, 0x699: 0x0040, 0x69a: 0x0040, 0x69b: 0x0040, 0x69c: 0x0040, 0x69d: 0x0040,
+       0x69e: 0x0040, 0x69f: 0x0040, 0x6a0: 0x0008, 0x6a1: 0x0008, 0x6a2: 0x1308, 0x6a3: 0x1308,
+       0x6a4: 0x0040, 0x6a5: 0x0040, 0x6a6: 0x0008, 0x6a7: 0x0008, 0x6a8: 0x0008, 0x6a9: 0x0008,
+       0x6aa: 0x0008, 0x6ab: 0x0008, 0x6ac: 0x0008, 0x6ad: 0x0008, 0x6ae: 0x0008, 0x6af: 0x0008,
+       0x6b0: 0x0018, 0x6b1: 0x0018, 0x6b2: 0x0040, 0x6b3: 0x0040, 0x6b4: 0x0040, 0x6b5: 0x0040,
+       0x6b6: 0x0040, 0x6b7: 0x0040, 0x6b8: 0x0040, 0x6b9: 0x0008, 0x6ba: 0x0040, 0x6bb: 0x0040,
+       0x6bc: 0x0040, 0x6bd: 0x0040, 0x6be: 0x0040, 0x6bf: 0x0040,
+       // Block 0x1b, offset 0x6c0
+       0x6c0: 0x0040, 0x6c1: 0x1308, 0x6c2: 0x1008, 0x6c3: 0x1008, 0x6c4: 0x0040, 0x6c5: 0x0008,
+       0x6c6: 0x0008, 0x6c7: 0x0008, 0x6c8: 0x0008, 0x6c9: 0x0008, 0x6ca: 0x0008, 0x6cb: 0x0008,
+       0x6cc: 0x0008, 0x6cd: 0x0040, 0x6ce: 0x0040, 0x6cf: 0x0008, 0x6d0: 0x0008, 0x6d1: 0x0040,
+       0x6d2: 0x0040, 0x6d3: 0x0008, 0x6d4: 0x0008, 0x6d5: 0x0008, 0x6d6: 0x0008, 0x6d7: 0x0008,
+       0x6d8: 0x0008, 0x6d9: 0x0008, 0x6da: 0x0008, 0x6db: 0x0008, 0x6dc: 0x0008, 0x6dd: 0x0008,
+       0x6de: 0x0008, 0x6df: 0x0008, 0x6e0: 0x0008, 0x6e1: 0x0008, 0x6e2: 0x0008, 0x6e3: 0x0008,
+       0x6e4: 0x0008, 0x6e5: 0x0008, 0x6e6: 0x0008, 0x6e7: 0x0008, 0x6e8: 0x0008, 0x6e9: 0x0040,
+       0x6ea: 0x0008, 0x6eb: 0x0008, 0x6ec: 0x0008, 0x6ed: 0x0008, 0x6ee: 0x0008, 0x6ef: 0x0008,
+       0x6f0: 0x0008, 0x6f1: 0x0040, 0x6f2: 0x0008, 0x6f3: 0x0008, 0x6f4: 0x0040, 0x6f5: 0x0008,
+       0x6f6: 0x0008, 0x6f7: 0x0008, 0x6f8: 0x0008, 0x6f9: 0x0008, 0x6fa: 0x0040, 0x6fb: 0x0040,
+       0x6fc: 0x1308, 0x6fd: 0x0008, 0x6fe: 0x1008, 0x6ff: 0x1308,
+       // Block 0x1c, offset 0x700
+       0x700: 0x1008, 0x701: 0x1308, 0x702: 0x1308, 0x703: 0x1308, 0x704: 0x1308, 0x705: 0x0040,
+       0x706: 0x0040, 0x707: 0x1008, 0x708: 0x1008, 0x709: 0x0040, 0x70a: 0x0040, 0x70b: 0x1008,
+       0x70c: 0x1008, 0x70d: 0x1b08, 0x70e: 0x0040, 0x70f: 0x0040, 0x710: 0x0040, 0x711: 0x0040,
+       0x712: 0x0040, 0x713: 0x0040, 0x714: 0x0040, 0x715: 0x0040, 0x716: 0x1308, 0x717: 0x1008,
+       0x718: 0x0040, 0x719: 0x0040, 0x71a: 0x0040, 0x71b: 0x0040, 0x71c: 0x0881, 0x71d: 0x08b9,
+       0x71e: 0x0040, 0x71f: 0x0008, 0x720: 0x0008, 0x721: 0x0008, 0x722: 0x1308, 0x723: 0x1308,
+       0x724: 0x0040, 0x725: 0x0040, 0x726: 0x0008, 0x727: 0x0008, 0x728: 0x0008, 0x729: 0x0008,
+       0x72a: 0x0008, 0x72b: 0x0008, 0x72c: 0x0008, 0x72d: 0x0008, 0x72e: 0x0008, 0x72f: 0x0008,
+       0x730: 0x0018, 0x731: 0x0008, 0x732: 0x0018, 0x733: 0x0018, 0x734: 0x0018, 0x735: 0x0018,
+       0x736: 0x0018, 0x737: 0x0018, 0x738: 0x0040, 0x739: 0x0040, 0x73a: 0x0040, 0x73b: 0x0040,
+       0x73c: 0x0040, 0x73d: 0x0040, 0x73e: 0x0040, 0x73f: 0x0040,
+       // Block 0x1d, offset 0x740
+       0x740: 0x0040, 0x741: 0x0040, 0x742: 0x1308, 0x743: 0x0008, 0x744: 0x0040, 0x745: 0x0008,
+       0x746: 0x0008, 0x747: 0x0008, 0x748: 0x0008, 0x749: 0x0008, 0x74a: 0x0008, 0x74b: 0x0040,
+       0x74c: 0x0040, 0x74d: 0x0040, 0x74e: 0x0008, 0x74f: 0x0008, 0x750: 0x0008, 0x751: 0x0040,
+       0x752: 0x0008, 0x753: 0x0008, 0x754: 0x0008, 0x755: 0x0008, 0x756: 0x0040, 0x757: 0x0040,
+       0x758: 0x0040, 0x759: 0x0008, 0x75a: 0x0008, 0x75b: 0x0040, 0x75c: 0x0008, 0x75d: 0x0040,
+       0x75e: 0x0008, 0x75f: 0x0008, 0x760: 0x0040, 0x761: 0x0040, 0x762: 0x0040, 0x763: 0x0008,
+       0x764: 0x0008, 0x765: 0x0040, 0x766: 0x0040, 0x767: 0x0040, 0x768: 0x0008, 0x769: 0x0008,
+       0x76a: 0x0008, 0x76b: 0x0040, 0x76c: 0x0040, 0x76d: 0x0040, 0x76e: 0x0008, 0x76f: 0x0008,
+       0x770: 0x0008, 0x771: 0x0008, 0x772: 0x0008, 0x773: 0x0008, 0x774: 0x0008, 0x775: 0x0008,
+       0x776: 0x0008, 0x777: 0x0008, 0x778: 0x0008, 0x779: 0x0008, 0x77a: 0x0040, 0x77b: 0x0040,
+       0x77c: 0x0040, 0x77d: 0x0040, 0x77e: 0x1008, 0x77f: 0x1008,
+       // Block 0x1e, offset 0x780
+       0x780: 0x1308, 0x781: 0x1008, 0x782: 0x1008, 0x783: 0x1008, 0x784: 0x1008, 0x785: 0x0040,
+       0x786: 0x1308, 0x787: 0x1308, 0x788: 0x1308, 0x789: 0x0040, 0x78a: 0x1308, 0x78b: 0x1308,
+       0x78c: 0x1308, 0x78d: 0x1b08, 0x78e: 0x0040, 0x78f: 0x0040, 0x790: 0x0040, 0x791: 0x0040,
+       0x792: 0x0040, 0x793: 0x0040, 0x794: 0x0040, 0x795: 0x1308, 0x796: 0x1308, 0x797: 0x0040,
+       0x798: 0x0008, 0x799: 0x0008, 0x79a: 0x0008, 0x79b: 0x0040, 0x79c: 0x0040, 0x79d: 0x0040,
+       0x79e: 0x0040, 0x79f: 0x0040, 0x7a0: 0x0008, 0x7a1: 0x0008, 0x7a2: 0x1308, 0x7a3: 0x1308,
+       0x7a4: 0x0040, 0x7a5: 0x0040, 0x7a6: 0x0008, 0x7a7: 0x0008, 0x7a8: 0x0008, 0x7a9: 0x0008,
+       0x7aa: 0x0008, 0x7ab: 0x0008, 0x7ac: 0x0008, 0x7ad: 0x0008, 0x7ae: 0x0008, 0x7af: 0x0008,
+       0x7b0: 0x0040, 0x7b1: 0x0040, 0x7b2: 0x0040, 0x7b3: 0x0040, 0x7b4: 0x0040, 0x7b5: 0x0040,
+       0x7b6: 0x0040, 0x7b7: 0x0040, 0x7b8: 0x0018, 0x7b9: 0x0018, 0x7ba: 0x0018, 0x7bb: 0x0018,
+       0x7bc: 0x0018, 0x7bd: 0x0018, 0x7be: 0x0018, 0x7bf: 0x0018,
+       // Block 0x1f, offset 0x7c0
+       0x7c0: 0x0008, 0x7c1: 0x1308, 0x7c2: 0x1008, 0x7c3: 0x1008, 0x7c4: 0x0040, 0x7c5: 0x0008,
+       0x7c6: 0x0008, 0x7c7: 0x0008, 0x7c8: 0x0008, 0x7c9: 0x0008, 0x7ca: 0x0008, 0x7cb: 0x0008,
+       0x7cc: 0x0008, 0x7cd: 0x0040, 0x7ce: 0x0008, 0x7cf: 0x0008, 0x7d0: 0x0008, 0x7d1: 0x0040,
+       0x7d2: 0x0008, 0x7d3: 0x0008, 0x7d4: 0x0008, 0x7d5: 0x0008, 0x7d6: 0x0008, 0x7d7: 0x0008,
+       0x7d8: 0x0008, 0x7d9: 0x0008, 0x7da: 0x0008, 0x7db: 0x0008, 0x7dc: 0x0008, 0x7dd: 0x0008,
+       0x7de: 0x0008, 0x7df: 0x0008, 0x7e0: 0x0008, 0x7e1: 0x0008, 0x7e2: 0x0008, 0x7e3: 0x0008,
+       0x7e4: 0x0008, 0x7e5: 0x0008, 0x7e6: 0x0008, 0x7e7: 0x0008, 0x7e8: 0x0008, 0x7e9: 0x0040,
+       0x7ea: 0x0008, 0x7eb: 0x0008, 0x7ec: 0x0008, 0x7ed: 0x0008, 0x7ee: 0x0008, 0x7ef: 0x0008,
+       0x7f0: 0x0008, 0x7f1: 0x0008, 0x7f2: 0x0008, 0x7f3: 0x0008, 0x7f4: 0x0040, 0x7f5: 0x0008,
+       0x7f6: 0x0008, 0x7f7: 0x0008, 0x7f8: 0x0008, 0x7f9: 0x0008, 0x7fa: 0x0040, 0x7fb: 0x0040,
+       0x7fc: 0x1308, 0x7fd: 0x0008, 0x7fe: 0x1008, 0x7ff: 0x1308,
+       // Block 0x20, offset 0x800
+       0x800: 0x1008, 0x801: 0x1008, 0x802: 0x1008, 0x803: 0x1008, 0x804: 0x1008, 0x805: 0x0040,
+       0x806: 0x1308, 0x807: 0x1008, 0x808: 0x1008, 0x809: 0x0040, 0x80a: 0x1008, 0x80b: 0x1008,
+       0x80c: 0x1308, 0x80d: 0x1b08, 0x80e: 0x0040, 0x80f: 0x0040, 0x810: 0x0040, 0x811: 0x0040,
+       0x812: 0x0040, 0x813: 0x0040, 0x814: 0x0040, 0x815: 0x1008, 0x816: 0x1008, 0x817: 0x0040,
+       0x818: 0x0040, 0x819: 0x0040, 0x81a: 0x0040, 0x81b: 0x0040, 0x81c: 0x0040, 0x81d: 0x0040,
+       0x81e: 0x0008, 0x81f: 0x0040, 0x820: 0x0008, 0x821: 0x0008, 0x822: 0x1308, 0x823: 0x1308,
+       0x824: 0x0040, 0x825: 0x0040, 0x826: 0x0008, 0x827: 0x0008, 0x828: 0x0008, 0x829: 0x0008,
+       0x82a: 0x0008, 0x82b: 0x0008, 0x82c: 0x0008, 0x82d: 0x0008, 0x82e: 0x0008, 0x82f: 0x0008,
+       0x830: 0x0040, 0x831: 0x0008, 0x832: 0x0008, 0x833: 0x0040, 0x834: 0x0040, 0x835: 0x0040,
+       0x836: 0x0040, 0x837: 0x0040, 0x838: 0x0040, 0x839: 0x0040, 0x83a: 0x0040, 0x83b: 0x0040,
+       0x83c: 0x0040, 0x83d: 0x0040, 0x83e: 0x0040, 0x83f: 0x0040,
+       // Block 0x21, offset 0x840
+       0x840: 0x1008, 0x841: 0x1308, 0x842: 0x1308, 0x843: 0x1308, 0x844: 0x1308, 0x845: 0x0040,
+       0x846: 0x1008, 0x847: 0x1008, 0x848: 0x1008, 0x849: 0x0040, 0x84a: 0x1008, 0x84b: 0x1008,
+       0x84c: 0x1008, 0x84d: 0x1b08, 0x84e: 0x0008, 0x84f: 0x0018, 0x850: 0x0040, 0x851: 0x0040,
+       0x852: 0x0040, 0x853: 0x0040, 0x854: 0x0008, 0x855: 0x0008, 0x856: 0x0008, 0x857: 0x1008,
+       0x858: 0x0018, 0x859: 0x0018, 0x85a: 0x0018, 0x85b: 0x0018, 0x85c: 0x0018, 0x85d: 0x0018,
+       0x85e: 0x0018, 0x85f: 0x0008, 0x860: 0x0008, 0x861: 0x0008, 0x862: 0x1308, 0x863: 0x1308,
+       0x864: 0x0040, 0x865: 0x0040, 0x866: 0x0008, 0x867: 0x0008, 0x868: 0x0008, 0x869: 0x0008,
+       0x86a: 0x0008, 0x86b: 0x0008, 0x86c: 0x0008, 0x86d: 0x0008, 0x86e: 0x0008, 0x86f: 0x0008,
+       0x870: 0x0018, 0x871: 0x0018, 0x872: 0x0018, 0x873: 0x0018, 0x874: 0x0018, 0x875: 0x0018,
+       0x876: 0x0018, 0x877: 0x0018, 0x878: 0x0018, 0x879: 0x0018, 0x87a: 0x0008, 0x87b: 0x0008,
+       0x87c: 0x0008, 0x87d: 0x0008, 0x87e: 0x0008, 0x87f: 0x0008,
+       // Block 0x22, offset 0x880
+       0x880: 0x0040, 0x881: 0x0008, 0x882: 0x0008, 0x883: 0x0040, 0x884: 0x0008, 0x885: 0x0040,
+       0x886: 0x0040, 0x887: 0x0008, 0x888: 0x0008, 0x889: 0x0040, 0x88a: 0x0008, 0x88b: 0x0040,
+       0x88c: 0x0040, 0x88d: 0x0008, 0x88e: 0x0040, 0x88f: 0x0040, 0x890: 0x0040, 0x891: 0x0040,
+       0x892: 0x0040, 0x893: 0x0040, 0x894: 0x0008, 0x895: 0x0008, 0x896: 0x0008, 0x897: 0x0008,
+       0x898: 0x0040, 0x899: 0x0008, 0x89a: 0x0008, 0x89b: 0x0008, 0x89c: 0x0008, 0x89d: 0x0008,
+       0x89e: 0x0008, 0x89f: 0x0008, 0x8a0: 0x0040, 0x8a1: 0x0008, 0x8a2: 0x0008, 0x8a3: 0x0008,
+       0x8a4: 0x0040, 0x8a5: 0x0008, 0x8a6: 0x0040, 0x8a7: 0x0008, 0x8a8: 0x0040, 0x8a9: 0x0040,
+       0x8aa: 0x0008, 0x8ab: 0x0008, 0x8ac: 0x0040, 0x8ad: 0x0008, 0x8ae: 0x0008, 0x8af: 0x0008,
+       0x8b0: 0x0008, 0x8b1: 0x1308, 0x8b2: 0x0008, 0x8b3: 0x0929, 0x8b4: 0x1308, 0x8b5: 0x1308,
+       0x8b6: 0x1308, 0x8b7: 0x1308, 0x8b8: 0x1308, 0x8b9: 0x1308, 0x8ba: 0x0040, 0x8bb: 0x1308,
+       0x8bc: 0x1308, 0x8bd: 0x0008, 0x8be: 0x0040, 0x8bf: 0x0040,
+       // Block 0x23, offset 0x8c0
+       0x8c0: 0x0008, 0x8c1: 0x0008, 0x8c2: 0x0008, 0x8c3: 0x09d1, 0x8c4: 0x0008, 0x8c5: 0x0008,
+       0x8c6: 0x0008, 0x8c7: 0x0008, 0x8c8: 0x0040, 0x8c9: 0x0008, 0x8ca: 0x0008, 0x8cb: 0x0008,
+       0x8cc: 0x0008, 0x8cd: 0x0a09, 0x8ce: 0x0008, 0x8cf: 0x0008, 0x8d0: 0x0008, 0x8d1: 0x0008,
+       0x8d2: 0x0a41, 0x8d3: 0x0008, 0x8d4: 0x0008, 0x8d5: 0x0008, 0x8d6: 0x0008, 0x8d7: 0x0a79,
+       0x8d8: 0x0008, 0x8d9: 0x0008, 0x8da: 0x0008, 0x8db: 0x0008, 0x8dc: 0x0ab1, 0x8dd: 0x0008,
+       0x8de: 0x0008, 0x8df: 0x0008, 0x8e0: 0x0008, 0x8e1: 0x0008, 0x8e2: 0x0008, 0x8e3: 0x0008,
+       0x8e4: 0x0008, 0x8e5: 0x0008, 0x8e6: 0x0008, 0x8e7: 0x0008, 0x8e8: 0x0008, 0x8e9: 0x0ae9,
+       0x8ea: 0x0008, 0x8eb: 0x0008, 0x8ec: 0x0008, 0x8ed: 0x0040, 0x8ee: 0x0040, 0x8ef: 0x0040,
+       0x8f0: 0x0040, 0x8f1: 0x1308, 0x8f2: 0x1308, 0x8f3: 0x0b21, 0x8f4: 0x1308, 0x8f5: 0x0b59,
+       0x8f6: 0x0b91, 0x8f7: 0x0bc9, 0x8f8: 0x0c19, 0x8f9: 0x0c51, 0x8fa: 0x1308, 0x8fb: 0x1308,
+       0x8fc: 0x1308, 0x8fd: 0x1308, 0x8fe: 0x1308, 0x8ff: 0x1008,
+       // Block 0x24, offset 0x900
+       0x900: 0x1308, 0x901: 0x0ca1, 0x902: 0x1308, 0x903: 0x1308, 0x904: 0x1b08, 0x905: 0x0018,
+       0x906: 0x1308, 0x907: 0x1308, 0x908: 0x0008, 0x909: 0x0008, 0x90a: 0x0008, 0x90b: 0x0008,
+       0x90c: 0x0008, 0x90d: 0x1308, 0x90e: 0x1308, 0x90f: 0x1308, 0x910: 0x1308, 0x911: 0x1308,
+       0x912: 0x1308, 0x913: 0x0cd9, 0x914: 0x1308, 0x915: 0x1308, 0x916: 0x1308, 0x917: 0x1308,
+       0x918: 0x0040, 0x919: 0x1308, 0x91a: 0x1308, 0x91b: 0x1308, 0x91c: 0x1308, 0x91d: 0x0d11,
+       0x91e: 0x1308, 0x91f: 0x1308, 0x920: 0x1308, 0x921: 0x1308, 0x922: 0x0d49, 0x923: 0x1308,
+       0x924: 0x1308, 0x925: 0x1308, 0x926: 0x1308, 0x927: 0x0d81, 0x928: 0x1308, 0x929: 0x1308,
+       0x92a: 0x1308, 0x92b: 0x1308, 0x92c: 0x0db9, 0x92d: 0x1308, 0x92e: 0x1308, 0x92f: 0x1308,
+       0x930: 0x1308, 0x931: 0x1308, 0x932: 0x1308, 0x933: 0x1308, 0x934: 0x1308, 0x935: 0x1308,
+       0x936: 0x1308, 0x937: 0x1308, 0x938: 0x1308, 0x939: 0x0df1, 0x93a: 0x1308, 0x93b: 0x1308,
+       0x93c: 0x1308, 0x93d: 0x0040, 0x93e: 0x0018, 0x93f: 0x0018,
+       // Block 0x25, offset 0x940
+       0x940: 0x0008, 0x941: 0x0008, 0x942: 0x0008, 0x943: 0x0008, 0x944: 0x0008, 0x945: 0x0008,
+       0x946: 0x0008, 0x947: 0x0008, 0x948: 0x0008, 0x949: 0x0008, 0x94a: 0x0008, 0x94b: 0x0008,
+       0x94c: 0x0008, 0x94d: 0x0008, 0x94e: 0x0008, 0x94f: 0x0008, 0x950: 0x0008, 0x951: 0x0008,
+       0x952: 0x0008, 0x953: 0x0008, 0x954: 0x0008, 0x955: 0x0008, 0x956: 0x0008, 0x957: 0x0008,
+       0x958: 0x0008, 0x959: 0x0008, 0x95a: 0x0008, 0x95b: 0x0008, 0x95c: 0x0008, 0x95d: 0x0008,
+       0x95e: 0x0008, 0x95f: 0x0008, 0x960: 0x0008, 0x961: 0x0008, 0x962: 0x0008, 0x963: 0x0008,
+       0x964: 0x0008, 0x965: 0x0008, 0x966: 0x0008, 0x967: 0x0008, 0x968: 0x0008, 0x969: 0x0008,
+       0x96a: 0x0008, 0x96b: 0x0008, 0x96c: 0x0039, 0x96d: 0x0ed1, 0x96e: 0x0ee9, 0x96f: 0x0008,
+       0x970: 0x0ef9, 0x971: 0x0f09, 0x972: 0x0f19, 0x973: 0x0f31, 0x974: 0x0249, 0x975: 0x0f41,
+       0x976: 0x0259, 0x977: 0x0f51, 0x978: 0x0359, 0x979: 0x0f61, 0x97a: 0x0f71, 0x97b: 0x0008,
+       0x97c: 0x00d9, 0x97d: 0x0f81, 0x97e: 0x0f99, 0x97f: 0x0269,
+       // Block 0x26, offset 0x980
+       0x980: 0x0fa9, 0x981: 0x0fb9, 0x982: 0x0279, 0x983: 0x0039, 0x984: 0x0fc9, 0x985: 0x0fe1,
+       0x986: 0x059d, 0x987: 0x0ee9, 0x988: 0x0ef9, 0x989: 0x0f09, 0x98a: 0x0ff9, 0x98b: 0x1011,
+       0x98c: 0x1029, 0x98d: 0x0f31, 0x98e: 0x0008, 0x98f: 0x0f51, 0x990: 0x0f61, 0x991: 0x1041,
+       0x992: 0x00d9, 0x993: 0x1059, 0x994: 0x05b5, 0x995: 0x05b5, 0x996: 0x0f99, 0x997: 0x0fa9,
+       0x998: 0x0fb9, 0x999: 0x059d, 0x99a: 0x1071, 0x99b: 0x1089, 0x99c: 0x05cd, 0x99d: 0x1099,
+       0x99e: 0x10b1, 0x99f: 0x10c9, 0x9a0: 0x10e1, 0x9a1: 0x10f9, 0x9a2: 0x0f41, 0x9a3: 0x0269,
+       0x9a4: 0x0fb9, 0x9a5: 0x1089, 0x9a6: 0x1099, 0x9a7: 0x10b1, 0x9a8: 0x1111, 0x9a9: 0x10e1,
+       0x9aa: 0x10f9, 0x9ab: 0x0008, 0x9ac: 0x0008, 0x9ad: 0x0008, 0x9ae: 0x0008, 0x9af: 0x0008,
+       0x9b0: 0x0008, 0x9b1: 0x0008, 0x9b2: 0x0008, 0x9b3: 0x0008, 0x9b4: 0x0008, 0x9b5: 0x0008,
+       0x9b6: 0x0008, 0x9b7: 0x0008, 0x9b8: 0x1129, 0x9b9: 0x0008, 0x9ba: 0x0008, 0x9bb: 0x0008,
+       0x9bc: 0x0008, 0x9bd: 0x0008, 0x9be: 0x0008, 0x9bf: 0x0008,
+       // Block 0x27, offset 0x9c0
+       0x9c0: 0x0008, 0x9c1: 0x0008, 0x9c2: 0x0008, 0x9c3: 0x0008, 0x9c4: 0x0008, 0x9c5: 0x0008,
+       0x9c6: 0x0008, 0x9c7: 0x0008, 0x9c8: 0x0008, 0x9c9: 0x0008, 0x9ca: 0x0008, 0x9cb: 0x0008,
+       0x9cc: 0x0008, 0x9cd: 0x0008, 0x9ce: 0x0008, 0x9cf: 0x0008, 0x9d0: 0x0008, 0x9d1: 0x0008,
+       0x9d2: 0x0008, 0x9d3: 0x0008, 0x9d4: 0x0008, 0x9d5: 0x0008, 0x9d6: 0x0008, 0x9d7: 0x0008,
+       0x9d8: 0x0008, 0x9d9: 0x0008, 0x9da: 0x0008, 0x9db: 0x1141, 0x9dc: 0x1159, 0x9dd: 0x1169,
+       0x9de: 0x1181, 0x9df: 0x1029, 0x9e0: 0x1199, 0x9e1: 0x11a9, 0x9e2: 0x11c1, 0x9e3: 0x11d9,
+       0x9e4: 0x11f1, 0x9e5: 0x1209, 0x9e6: 0x1221, 0x9e7: 0x05e5, 0x9e8: 0x1239, 0x9e9: 0x1251,
+       0x9ea: 0xe17d, 0x9eb: 0x1269, 0x9ec: 0x1281, 0x9ed: 0x1299, 0x9ee: 0x12b1, 0x9ef: 0x12c9,
+       0x9f0: 0x12e1, 0x9f1: 0x12f9, 0x9f2: 0x1311, 0x9f3: 0x1329, 0x9f4: 0x1341, 0x9f5: 0x1359,
+       0x9f6: 0x1371, 0x9f7: 0x1389, 0x9f8: 0x05fd, 0x9f9: 0x13a1, 0x9fa: 0x13b9, 0x9fb: 0x13d1,
+       0x9fc: 0x13e1, 0x9fd: 0x13f9, 0x9fe: 0x1411, 0x9ff: 0x1429,
+       // Block 0x28, offset 0xa00
+       0xa00: 0xe00d, 0xa01: 0x0008, 0xa02: 0xe00d, 0xa03: 0x0008, 0xa04: 0xe00d, 0xa05: 0x0008,
+       0xa06: 0xe00d, 0xa07: 0x0008, 0xa08: 0xe00d, 0xa09: 0x0008, 0xa0a: 0xe00d, 0xa0b: 0x0008,
+       0xa0c: 0xe00d, 0xa0d: 0x0008, 0xa0e: 0xe00d, 0xa0f: 0x0008, 0xa10: 0xe00d, 0xa11: 0x0008,
+       0xa12: 0xe00d, 0xa13: 0x0008, 0xa14: 0xe00d, 0xa15: 0x0008, 0xa16: 0xe00d, 0xa17: 0x0008,
+       0xa18: 0xe00d, 0xa19: 0x0008, 0xa1a: 0xe00d, 0xa1b: 0x0008, 0xa1c: 0xe00d, 0xa1d: 0x0008,
+       0xa1e: 0xe00d, 0xa1f: 0x0008, 0xa20: 0xe00d, 0xa21: 0x0008, 0xa22: 0xe00d, 0xa23: 0x0008,
+       0xa24: 0xe00d, 0xa25: 0x0008, 0xa26: 0xe00d, 0xa27: 0x0008, 0xa28: 0xe00d, 0xa29: 0x0008,
+       0xa2a: 0xe00d, 0xa2b: 0x0008, 0xa2c: 0xe00d, 0xa2d: 0x0008, 0xa2e: 0xe00d, 0xa2f: 0x0008,
+       0xa30: 0xe00d, 0xa31: 0x0008, 0xa32: 0xe00d, 0xa33: 0x0008, 0xa34: 0xe00d, 0xa35: 0x0008,
+       0xa36: 0xe00d, 0xa37: 0x0008, 0xa38: 0xe00d, 0xa39: 0x0008, 0xa3a: 0xe00d, 0xa3b: 0x0008,
+       0xa3c: 0xe00d, 0xa3d: 0x0008, 0xa3e: 0xe00d, 0xa3f: 0x0008,
+       // Block 0x29, offset 0xa40
+       0xa40: 0xe00d, 0xa41: 0x0008, 0xa42: 0xe00d, 0xa43: 0x0008, 0xa44: 0xe00d, 0xa45: 0x0008,
+       0xa46: 0xe00d, 0xa47: 0x0008, 0xa48: 0xe00d, 0xa49: 0x0008, 0xa4a: 0xe00d, 0xa4b: 0x0008,
+       0xa4c: 0xe00d, 0xa4d: 0x0008, 0xa4e: 0xe00d, 0xa4f: 0x0008, 0xa50: 0xe00d, 0xa51: 0x0008,
+       0xa52: 0xe00d, 0xa53: 0x0008, 0xa54: 0xe00d, 0xa55: 0x0008, 0xa56: 0x0008, 0xa57: 0x0008,
+       0xa58: 0x0008, 0xa59: 0x0008, 0xa5a: 0x0615, 0xa5b: 0x0635, 0xa5c: 0x0008, 0xa5d: 0x0008,
+       0xa5e: 0x1441, 0xa5f: 0x0008, 0xa60: 0xe00d, 0xa61: 0x0008, 0xa62: 0xe00d, 0xa63: 0x0008,
+       0xa64: 0xe00d, 0xa65: 0x0008, 0xa66: 0xe00d, 0xa67: 0x0008, 0xa68: 0xe00d, 0xa69: 0x0008,
+       0xa6a: 0xe00d, 0xa6b: 0x0008, 0xa6c: 0xe00d, 0xa6d: 0x0008, 0xa6e: 0xe00d, 0xa6f: 0x0008,
+       0xa70: 0xe00d, 0xa71: 0x0008, 0xa72: 0xe00d, 0xa73: 0x0008, 0xa74: 0xe00d, 0xa75: 0x0008,
+       0xa76: 0xe00d, 0xa77: 0x0008, 0xa78: 0xe00d, 0xa79: 0x0008, 0xa7a: 0xe00d, 0xa7b: 0x0008,
+       0xa7c: 0xe00d, 0xa7d: 0x0008, 0xa7e: 0xe00d, 0xa7f: 0x0008,
+       // Block 0x2a, offset 0xa80
+       0xa80: 0x0008, 0xa81: 0x0008, 0xa82: 0x0008, 0xa83: 0x0008, 0xa84: 0x0008, 0xa85: 0x0008,
+       0xa86: 0x0040, 0xa87: 0x0040, 0xa88: 0xe045, 0xa89: 0xe045, 0xa8a: 0xe045, 0xa8b: 0xe045,
+       0xa8c: 0xe045, 0xa8d: 0xe045, 0xa8e: 0x0040, 0xa8f: 0x0040, 0xa90: 0x0008, 0xa91: 0x0008,
+       0xa92: 0x0008, 0xa93: 0x0008, 0xa94: 0x0008, 0xa95: 0x0008, 0xa96: 0x0008, 0xa97: 0x0008,
+       0xa98: 0x0040, 0xa99: 0xe045, 0xa9a: 0x0040, 0xa9b: 0xe045, 0xa9c: 0x0040, 0xa9d: 0xe045,
+       0xa9e: 0x0040, 0xa9f: 0xe045, 0xaa0: 0x0008, 0xaa1: 0x0008, 0xaa2: 0x0008, 0xaa3: 0x0008,
+       0xaa4: 0x0008, 0xaa5: 0x0008, 0xaa6: 0x0008, 0xaa7: 0x0008, 0xaa8: 0xe045, 0xaa9: 0xe045,
+       0xaaa: 0xe045, 0xaab: 0xe045, 0xaac: 0xe045, 0xaad: 0xe045, 0xaae: 0xe045, 0xaaf: 0xe045,
+       0xab0: 0x0008, 0xab1: 0x1459, 0xab2: 0x0008, 0xab3: 0x1471, 0xab4: 0x0008, 0xab5: 0x1489,
+       0xab6: 0x0008, 0xab7: 0x14a1, 0xab8: 0x0008, 0xab9: 0x14b9, 0xaba: 0x0008, 0xabb: 0x14d1,
+       0xabc: 0x0008, 0xabd: 0x14e9, 0xabe: 0x0040, 0xabf: 0x0040,
+       // Block 0x2b, offset 0xac0
+       0xac0: 0x1501, 0xac1: 0x1531, 0xac2: 0x1561, 0xac3: 0x1591, 0xac4: 0x15c1, 0xac5: 0x15f1,
+       0xac6: 0x1621, 0xac7: 0x1651, 0xac8: 0x1501, 0xac9: 0x1531, 0xaca: 0x1561, 0xacb: 0x1591,
+       0xacc: 0x15c1, 0xacd: 0x15f1, 0xace: 0x1621, 0xacf: 0x1651, 0xad0: 0x1681, 0xad1: 0x16b1,
+       0xad2: 0x16e1, 0xad3: 0x1711, 0xad4: 0x1741, 0xad5: 0x1771, 0xad6: 0x17a1, 0xad7: 0x17d1,
+       0xad8: 0x1681, 0xad9: 0x16b1, 0xada: 0x16e1, 0xadb: 0x1711, 0xadc: 0x1741, 0xadd: 0x1771,
+       0xade: 0x17a1, 0xadf: 0x17d1, 0xae0: 0x1801, 0xae1: 0x1831, 0xae2: 0x1861, 0xae3: 0x1891,
+       0xae4: 0x18c1, 0xae5: 0x18f1, 0xae6: 0x1921, 0xae7: 0x1951, 0xae8: 0x1801, 0xae9: 0x1831,
+       0xaea: 0x1861, 0xaeb: 0x1891, 0xaec: 0x18c1, 0xaed: 0x18f1, 0xaee: 0x1921, 0xaef: 0x1951,
+       0xaf0: 0x0008, 0xaf1: 0x0008, 0xaf2: 0x1981, 0xaf3: 0x19b1, 0xaf4: 0x19d9, 0xaf5: 0x0040,
+       0xaf6: 0x0008, 0xaf7: 0x1a01, 0xaf8: 0xe045, 0xaf9: 0xe045, 0xafa: 0x064d, 0xafb: 0x1459,
+       0xafc: 0x19b1, 0xafd: 0x0666, 0xafe: 0x1a31, 0xaff: 0x0686,
+       // Block 0x2c, offset 0xb00
+       0xb00: 0x06a6, 0xb01: 0x1a4a, 0xb02: 0x1a79, 0xb03: 0x1aa9, 0xb04: 0x1ad1, 0xb05: 0x0040,
+       0xb06: 0x0008, 0xb07: 0x1af9, 0xb08: 0x06c5, 0xb09: 0x1471, 0xb0a: 0x06dd, 0xb0b: 0x1489,
+       0xb0c: 0x1aa9, 0xb0d: 0x1b2a, 0xb0e: 0x1b5a, 0xb0f: 0x1b8a, 0xb10: 0x0008, 0xb11: 0x0008,
+       0xb12: 0x0008, 0xb13: 0x1bb9, 0xb14: 0x0040, 0xb15: 0x0040, 0xb16: 0x0008, 0xb17: 0x0008,
+       0xb18: 0xe045, 0xb19: 0xe045, 0xb1a: 0x06f5, 0xb1b: 0x14a1, 0xb1c: 0x0040, 0xb1d: 0x1bd2,
+       0xb1e: 0x1c02, 0xb1f: 0x1c32, 0xb20: 0x0008, 0xb21: 0x0008, 0xb22: 0x0008, 0xb23: 0x1c61,
+       0xb24: 0x0008, 0xb25: 0x0008, 0xb26: 0x0008, 0xb27: 0x0008, 0xb28: 0xe045, 0xb29: 0xe045,
+       0xb2a: 0x070d, 0xb2b: 0x14d1, 0xb2c: 0xe04d, 0xb2d: 0x1c7a, 0xb2e: 0x03d2, 0xb2f: 0x1caa,
+       0xb30: 0x0040, 0xb31: 0x0040, 0xb32: 0x1cb9, 0xb33: 0x1ce9, 0xb34: 0x1d11, 0xb35: 0x0040,
+       0xb36: 0x0008, 0xb37: 0x1d39, 0xb38: 0x0725, 0xb39: 0x14b9, 0xb3a: 0x0515, 0xb3b: 0x14e9,
+       0xb3c: 0x1ce9, 0xb3d: 0x073e, 0xb3e: 0x075e, 0xb3f: 0x0040,
+       // Block 0x2d, offset 0xb40
+       0xb40: 0x000a, 0xb41: 0x000a, 0xb42: 0x000a, 0xb43: 0x000a, 0xb44: 0x000a, 0xb45: 0x000a,
+       0xb46: 0x000a, 0xb47: 0x000a, 0xb48: 0x000a, 0xb49: 0x000a, 0xb4a: 0x000a, 0xb4b: 0x03c0,
+       0xb4c: 0x0003, 0xb4d: 0x0003, 0xb4e: 0x0340, 0xb4f: 0x0340, 0xb50: 0x0018, 0xb51: 0xe00d,
+       0xb52: 0x0018, 0xb53: 0x0018, 0xb54: 0x0018, 0xb55: 0x0018, 0xb56: 0x0018, 0xb57: 0x077e,
+       0xb58: 0x0018, 0xb59: 0x0018, 0xb5a: 0x0018, 0xb5b: 0x0018, 0xb5c: 0x0018, 0xb5d: 0x0018,
+       0xb5e: 0x0018, 0xb5f: 0x0018, 0xb60: 0x0018, 0xb61: 0x0018, 0xb62: 0x0018, 0xb63: 0x0018,
+       0xb64: 0x0040, 0xb65: 0x0040, 0xb66: 0x0040, 0xb67: 0x0018, 0xb68: 0x0040, 0xb69: 0x0040,
+       0xb6a: 0x0340, 0xb6b: 0x0340, 0xb6c: 0x0340, 0xb6d: 0x0340, 0xb6e: 0x0340, 0xb6f: 0x000a,
+       0xb70: 0x0018, 0xb71: 0x0018, 0xb72: 0x0018, 0xb73: 0x1d69, 0xb74: 0x1da1, 0xb75: 0x0018,
+       0xb76: 0x1df1, 0xb77: 0x1e29, 0xb78: 0x0018, 0xb79: 0x0018, 0xb7a: 0x0018, 0xb7b: 0x0018,
+       0xb7c: 0x1e7a, 0xb7d: 0x0018, 0xb7e: 0x079e, 0xb7f: 0x0018,
+       // Block 0x2e, offset 0xb80
+       0xb80: 0x0018, 0xb81: 0x0018, 0xb82: 0x0018, 0xb83: 0x0018, 0xb84: 0x0018, 0xb85: 0x0018,
+       0xb86: 0x0018, 0xb87: 0x1e92, 0xb88: 0x1eaa, 0xb89: 0x1ec2, 0xb8a: 0x0018, 0xb8b: 0x0018,
+       0xb8c: 0x0018, 0xb8d: 0x0018, 0xb8e: 0x0018, 0xb8f: 0x0018, 0xb90: 0x0018, 0xb91: 0x0018,
+       0xb92: 0x0018, 0xb93: 0x0018, 0xb94: 0x0018, 0xb95: 0x0018, 0xb96: 0x0018, 0xb97: 0x1ed9,
+       0xb98: 0x0018, 0xb99: 0x0018, 0xb9a: 0x0018, 0xb9b: 0x0018, 0xb9c: 0x0018, 0xb9d: 0x0018,
+       0xb9e: 0x0018, 0xb9f: 0x000a, 0xba0: 0x03c0, 0xba1: 0x0340, 0xba2: 0x0340, 0xba3: 0x0340,
+       0xba4: 0x03c0, 0xba5: 0x0040, 0xba6: 0x0040, 0xba7: 0x0040, 0xba8: 0x0040, 0xba9: 0x0040,
+       0xbaa: 0x0340, 0xbab: 0x0340, 0xbac: 0x0340, 0xbad: 0x0340, 0xbae: 0x0340, 0xbaf: 0x0340,
+       0xbb0: 0x1f41, 0xbb1: 0x0f41, 0xbb2: 0x0040, 0xbb3: 0x0040, 0xbb4: 0x1f51, 0xbb5: 0x1f61,
+       0xbb6: 0x1f71, 0xbb7: 0x1f81, 0xbb8: 0x1f91, 0xbb9: 0x1fa1, 0xbba: 0x1fb2, 0xbbb: 0x07bd,
+       0xbbc: 0x1fc2, 0xbbd: 0x1fd2, 0xbbe: 0x1fe2, 0xbbf: 0x0f71,
+       // Block 0x2f, offset 0xbc0
+       0xbc0: 0x1f41, 0xbc1: 0x00c9, 0xbc2: 0x0069, 0xbc3: 0x0079, 0xbc4: 0x1f51, 0xbc5: 0x1f61,
+       0xbc6: 0x1f71, 0xbc7: 0x1f81, 0xbc8: 0x1f91, 0xbc9: 0x1fa1, 0xbca: 0x1fb2, 0xbcb: 0x07d5,
+       0xbcc: 0x1fc2, 0xbcd: 0x1fd2, 0xbce: 0x1fe2, 0xbcf: 0x0040, 0xbd0: 0x0039, 0xbd1: 0x0f09,
+       0xbd2: 0x00d9, 0xbd3: 0x0369, 0xbd4: 0x0ff9, 0xbd5: 0x0249, 0xbd6: 0x0f51, 0xbd7: 0x0359,
+       0xbd8: 0x0f61, 0xbd9: 0x0f71, 0xbda: 0x0f99, 0xbdb: 0x01d9, 0xbdc: 0x0fa9, 0xbdd: 0x0040,
+       0xbde: 0x0040, 0xbdf: 0x0040, 0xbe0: 0x0018, 0xbe1: 0x0018, 0xbe2: 0x0018, 0xbe3: 0x0018,
+       0xbe4: 0x0018, 0xbe5: 0x0018, 0xbe6: 0x0018, 0xbe7: 0x0018, 0xbe8: 0x1ff1, 0xbe9: 0x0018,
+       0xbea: 0x0018, 0xbeb: 0x0018, 0xbec: 0x0018, 0xbed: 0x0018, 0xbee: 0x0018, 0xbef: 0x0018,
+       0xbf0: 0x0018, 0xbf1: 0x0018, 0xbf2: 0x0018, 0xbf3: 0x0018, 0xbf4: 0x0018, 0xbf5: 0x0018,
+       0xbf6: 0x0018, 0xbf7: 0x0018, 0xbf8: 0x0018, 0xbf9: 0x0018, 0xbfa: 0x0018, 0xbfb: 0x0018,
+       0xbfc: 0x0018, 0xbfd: 0x0018, 0xbfe: 0x0018, 0xbff: 0x0040,
+       // Block 0x30, offset 0xc00
+       0xc00: 0x07ee, 0xc01: 0x080e, 0xc02: 0x1159, 0xc03: 0x082d, 0xc04: 0x0018, 0xc05: 0x084e,
+       0xc06: 0x086e, 0xc07: 0x1011, 0xc08: 0x0018, 0xc09: 0x088d, 0xc0a: 0x0f31, 0xc0b: 0x0249,
+       0xc0c: 0x0249, 0xc0d: 0x0249, 0xc0e: 0x0249, 0xc0f: 0x2009, 0xc10: 0x0f41, 0xc11: 0x0f41,
+       0xc12: 0x0359, 0xc13: 0x0359, 0xc14: 0x0018, 0xc15: 0x0f71, 0xc16: 0x2021, 0xc17: 0x0018,
+       0xc18: 0x0018, 0xc19: 0x0f99, 0xc1a: 0x2039, 0xc1b: 0x0269, 0xc1c: 0x0269, 0xc1d: 0x0269,
+       0xc1e: 0x0018, 0xc1f: 0x0018, 0xc20: 0x2049, 0xc21: 0x08ad, 0xc22: 0x2061, 0xc23: 0x0018,
+       0xc24: 0x13d1, 0xc25: 0x0018, 0xc26: 0x2079, 0xc27: 0x0018, 0xc28: 0x13d1, 0xc29: 0x0018,
+       0xc2a: 0x0f51, 0xc2b: 0x2091, 0xc2c: 0x0ee9, 0xc2d: 0x1159, 0xc2e: 0x0018, 0xc2f: 0x0f09,
+       0xc30: 0x0f09, 0xc31: 0x1199, 0xc32: 0x0040, 0xc33: 0x0f61, 0xc34: 0x00d9, 0xc35: 0x20a9,
+       0xc36: 0x20c1, 0xc37: 0x20d9, 0xc38: 0x20f1, 0xc39: 0x0f41, 0xc3a: 0x0018, 0xc3b: 0x08cd,
+       0xc3c: 0x2109, 0xc3d: 0x10b1, 0xc3e: 0x10b1, 0xc3f: 0x2109,
+       // Block 0x31, offset 0xc40
+       0xc40: 0x08ed, 0xc41: 0x0018, 0xc42: 0x0018, 0xc43: 0x0018, 0xc44: 0x0018, 0xc45: 0x0ef9,
+       0xc46: 0x0ef9, 0xc47: 0x0f09, 0xc48: 0x0f41, 0xc49: 0x0259, 0xc4a: 0x0018, 0xc4b: 0x0018,
+       0xc4c: 0x0018, 0xc4d: 0x0018, 0xc4e: 0x0008, 0xc4f: 0x0018, 0xc50: 0x2121, 0xc51: 0x2151,
+       0xc52: 0x2181, 0xc53: 0x21b9, 0xc54: 0x21e9, 0xc55: 0x2219, 0xc56: 0x2249, 0xc57: 0x2279,
+       0xc58: 0x22a9, 0xc59: 0x22d9, 0xc5a: 0x2309, 0xc5b: 0x2339, 0xc5c: 0x2369, 0xc5d: 0x2399,
+       0xc5e: 0x23c9, 0xc5f: 0x23f9, 0xc60: 0x0f41, 0xc61: 0x2421, 0xc62: 0x0905, 0xc63: 0x2439,
+       0xc64: 0x1089, 0xc65: 0x2451, 0xc66: 0x0925, 0xc67: 0x2469, 0xc68: 0x2491, 0xc69: 0x0369,
+       0xc6a: 0x24a9, 0xc6b: 0x0945, 0xc6c: 0x0359, 0xc6d: 0x1159, 0xc6e: 0x0ef9, 0xc6f: 0x0f61,
+       0xc70: 0x0f41, 0xc71: 0x2421, 0xc72: 0x0965, 0xc73: 0x2439, 0xc74: 0x1089, 0xc75: 0x2451,
+       0xc76: 0x0985, 0xc77: 0x2469, 0xc78: 0x2491, 0xc79: 0x0369, 0xc7a: 0x24a9, 0xc7b: 0x09a5,
+       0xc7c: 0x0359, 0xc7d: 0x1159, 0xc7e: 0x0ef9, 0xc7f: 0x0f61,
+       // Block 0x32, offset 0xc80
+       0xc80: 0x0018, 0xc81: 0x0018, 0xc82: 0x0018, 0xc83: 0x0018, 0xc84: 0x0018, 0xc85: 0x0018,
+       0xc86: 0x0018, 0xc87: 0x0018, 0xc88: 0x0018, 0xc89: 0x0018, 0xc8a: 0x0018, 0xc8b: 0x0040,
+       0xc8c: 0x0040, 0xc8d: 0x0040, 0xc8e: 0x0040, 0xc8f: 0x0040, 0xc90: 0x0040, 0xc91: 0x0040,
+       0xc92: 0x0040, 0xc93: 0x0040, 0xc94: 0x0040, 0xc95: 0x0040, 0xc96: 0x0040, 0xc97: 0x0040,
+       0xc98: 0x0040, 0xc99: 0x0040, 0xc9a: 0x0040, 0xc9b: 0x0040, 0xc9c: 0x0040, 0xc9d: 0x0040,
+       0xc9e: 0x0040, 0xc9f: 0x0040, 0xca0: 0x00c9, 0xca1: 0x0069, 0xca2: 0x0079, 0xca3: 0x1f51,
+       0xca4: 0x1f61, 0xca5: 0x1f71, 0xca6: 0x1f81, 0xca7: 0x1f91, 0xca8: 0x1fa1, 0xca9: 0x2601,
+       0xcaa: 0x2619, 0xcab: 0x2631, 0xcac: 0x2649, 0xcad: 0x2661, 0xcae: 0x2679, 0xcaf: 0x2691,
+       0xcb0: 0x26a9, 0xcb1: 0x26c1, 0xcb2: 0x26d9, 0xcb3: 0x26f1, 0xcb4: 0x0a06, 0xcb5: 0x0a26,
+       0xcb6: 0x0a46, 0xcb7: 0x0a66, 0xcb8: 0x0a86, 0xcb9: 0x0aa6, 0xcba: 0x0ac6, 0xcbb: 0x0ae6,
+       0xcbc: 0x0b06, 0xcbd: 0x270a, 0xcbe: 0x2732, 0xcbf: 0x275a,
+       // Block 0x33, offset 0xcc0
+       0xcc0: 0x2782, 0xcc1: 0x27aa, 0xcc2: 0x27d2, 0xcc3: 0x27fa, 0xcc4: 0x2822, 0xcc5: 0x284a,
+       0xcc6: 0x2872, 0xcc7: 0x289a, 0xcc8: 0x0040, 0xcc9: 0x0040, 0xcca: 0x0040, 0xccb: 0x0040,
+       0xccc: 0x0040, 0xccd: 0x0040, 0xcce: 0x0040, 0xccf: 0x0040, 0xcd0: 0x0040, 0xcd1: 0x0040,
+       0xcd2: 0x0040, 0xcd3: 0x0040, 0xcd4: 0x0040, 0xcd5: 0x0040, 0xcd6: 0x0040, 0xcd7: 0x0040,
+       0xcd8: 0x0040, 0xcd9: 0x0040, 0xcda: 0x0040, 0xcdb: 0x0040, 0xcdc: 0x0b26, 0xcdd: 0x0b46,
+       0xcde: 0x0b66, 0xcdf: 0x0b86, 0xce0: 0x0ba6, 0xce1: 0x0bc6, 0xce2: 0x0be6, 0xce3: 0x0c06,
+       0xce4: 0x0c26, 0xce5: 0x0c46, 0xce6: 0x0c66, 0xce7: 0x0c86, 0xce8: 0x0ca6, 0xce9: 0x0cc6,
+       0xcea: 0x0ce6, 0xceb: 0x0d06, 0xcec: 0x0d26, 0xced: 0x0d46, 0xcee: 0x0d66, 0xcef: 0x0d86,
+       0xcf0: 0x0da6, 0xcf1: 0x0dc6, 0xcf2: 0x0de6, 0xcf3: 0x0e06, 0xcf4: 0x0e26, 0xcf5: 0x0e46,
+       0xcf6: 0x0039, 0xcf7: 0x0ee9, 0xcf8: 0x1159, 0xcf9: 0x0ef9, 0xcfa: 0x0f09, 0xcfb: 0x1199,
+       0xcfc: 0x0f31, 0xcfd: 0x0249, 0xcfe: 0x0f41, 0xcff: 0x0259,
+       // Block 0x34, offset 0xd00
+       0xd00: 0x0f51, 0xd01: 0x0359, 0xd02: 0x0f61, 0xd03: 0x0f71, 0xd04: 0x00d9, 0xd05: 0x0f99,
+       0xd06: 0x2039, 0xd07: 0x0269, 0xd08: 0x01d9, 0xd09: 0x0fa9, 0xd0a: 0x0fb9, 0xd0b: 0x1089,
+       0xd0c: 0x0279, 0xd0d: 0x0369, 0xd0e: 0x0289, 0xd0f: 0x13d1, 0xd10: 0x0039, 0xd11: 0x0ee9,
+       0xd12: 0x1159, 0xd13: 0x0ef9, 0xd14: 0x0f09, 0xd15: 0x1199, 0xd16: 0x0f31, 0xd17: 0x0249,
+       0xd18: 0x0f41, 0xd19: 0x0259, 0xd1a: 0x0f51, 0xd1b: 0x0359, 0xd1c: 0x0f61, 0xd1d: 0x0f71,
+       0xd1e: 0x00d9, 0xd1f: 0x0f99, 0xd20: 0x2039, 0xd21: 0x0269, 0xd22: 0x01d9, 0xd23: 0x0fa9,
+       0xd24: 0x0fb9, 0xd25: 0x1089, 0xd26: 0x0279, 0xd27: 0x0369, 0xd28: 0x0289, 0xd29: 0x13d1,
+       0xd2a: 0x1f41, 0xd2b: 0x0018, 0xd2c: 0x0018, 0xd2d: 0x0018, 0xd2e: 0x0018, 0xd2f: 0x0018,
+       0xd30: 0x0018, 0xd31: 0x0018, 0xd32: 0x0018, 0xd33: 0x0018, 0xd34: 0x0018, 0xd35: 0x0018,
+       0xd36: 0x0018, 0xd37: 0x0018, 0xd38: 0x0018, 0xd39: 0x0018, 0xd3a: 0x0018, 0xd3b: 0x0018,
+       0xd3c: 0x0018, 0xd3d: 0x0018, 0xd3e: 0x0018, 0xd3f: 0x0018,
+       // Block 0x35, offset 0xd40
+       0xd40: 0x0008, 0xd41: 0x0008, 0xd42: 0x0008, 0xd43: 0x0008, 0xd44: 0x0008, 0xd45: 0x0008,
+       0xd46: 0x0008, 0xd47: 0x0008, 0xd48: 0x0008, 0xd49: 0x0008, 0xd4a: 0x0008, 0xd4b: 0x0008,
+       0xd4c: 0x0008, 0xd4d: 0x0008, 0xd4e: 0x0008, 0xd4f: 0x0008, 0xd50: 0x0008, 0xd51: 0x0008,
+       0xd52: 0x0008, 0xd53: 0x0008, 0xd54: 0x0008, 0xd55: 0x0008, 0xd56: 0x0008, 0xd57: 0x0008,
+       0xd58: 0x0008, 0xd59: 0x0008, 0xd5a: 0x0008, 0xd5b: 0x0008, 0xd5c: 0x0008, 0xd5d: 0x0008,
+       0xd5e: 0x0008, 0xd5f: 0x0040, 0xd60: 0xe00d, 0xd61: 0x0008, 0xd62: 0x2971, 0xd63: 0x0ebd,
+       0xd64: 0x2989, 0xd65: 0x0008, 0xd66: 0x0008, 0xd67: 0xe07d, 0xd68: 0x0008, 0xd69: 0xe01d,
+       0xd6a: 0x0008, 0xd6b: 0xe03d, 0xd6c: 0x0008, 0xd6d: 0x0fe1, 0xd6e: 0x1281, 0xd6f: 0x0fc9,
+       0xd70: 0x1141, 0xd71: 0x0008, 0xd72: 0xe00d, 0xd73: 0x0008, 0xd74: 0x0008, 0xd75: 0xe01d,
+       0xd76: 0x0008, 0xd77: 0x0008, 0xd78: 0x0008, 0xd79: 0x0008, 0xd7a: 0x0008, 0xd7b: 0x0008,
+       0xd7c: 0x0259, 0xd7d: 0x1089, 0xd7e: 0x29a1, 0xd7f: 0x29b9,
+       // Block 0x36, offset 0xd80
+       0xd80: 0xe00d, 0xd81: 0x0008, 0xd82: 0xe00d, 0xd83: 0x0008, 0xd84: 0xe00d, 0xd85: 0x0008,
+       0xd86: 0xe00d, 0xd87: 0x0008, 0xd88: 0xe00d, 0xd89: 0x0008, 0xd8a: 0xe00d, 0xd8b: 0x0008,
+       0xd8c: 0xe00d, 0xd8d: 0x0008, 0xd8e: 0xe00d, 0xd8f: 0x0008, 0xd90: 0xe00d, 0xd91: 0x0008,
+       0xd92: 0xe00d, 0xd93: 0x0008, 0xd94: 0xe00d, 0xd95: 0x0008, 0xd96: 0xe00d, 0xd97: 0x0008,
+       0xd98: 0xe00d, 0xd99: 0x0008, 0xd9a: 0xe00d, 0xd9b: 0x0008, 0xd9c: 0xe00d, 0xd9d: 0x0008,
+       0xd9e: 0xe00d, 0xd9f: 0x0008, 0xda0: 0xe00d, 0xda1: 0x0008, 0xda2: 0xe00d, 0xda3: 0x0008,
+       0xda4: 0x0008, 0xda5: 0x0018, 0xda6: 0x0018, 0xda7: 0x0018, 0xda8: 0x0018, 0xda9: 0x0018,
+       0xdaa: 0x0018, 0xdab: 0xe03d, 0xdac: 0x0008, 0xdad: 0xe01d, 0xdae: 0x0008, 0xdaf: 0x1308,
+       0xdb0: 0x1308, 0xdb1: 0x1308, 0xdb2: 0xe00d, 0xdb3: 0x0008, 0xdb4: 0x0040, 0xdb5: 0x0040,
+       0xdb6: 0x0040, 0xdb7: 0x0040, 0xdb8: 0x0040, 0xdb9: 0x0018, 0xdba: 0x0018, 0xdbb: 0x0018,
+       0xdbc: 0x0018, 0xdbd: 0x0018, 0xdbe: 0x0018, 0xdbf: 0x0018,
+       // Block 0x37, offset 0xdc0
+       0xdc0: 0x26fd, 0xdc1: 0x271d, 0xdc2: 0x273d, 0xdc3: 0x275d, 0xdc4: 0x277d, 0xdc5: 0x279d,
+       0xdc6: 0x27bd, 0xdc7: 0x27dd, 0xdc8: 0x27fd, 0xdc9: 0x281d, 0xdca: 0x283d, 0xdcb: 0x285d,
+       0xdcc: 0x287d, 0xdcd: 0x289d, 0xdce: 0x28bd, 0xdcf: 0x28dd, 0xdd0: 0x28fd, 0xdd1: 0x291d,
+       0xdd2: 0x293d, 0xdd3: 0x295d, 0xdd4: 0x297d, 0xdd5: 0x299d, 0xdd6: 0x0040, 0xdd7: 0x0040,
+       0xdd8: 0x0040, 0xdd9: 0x0040, 0xdda: 0x0040, 0xddb: 0x0040, 0xddc: 0x0040, 0xddd: 0x0040,
+       0xdde: 0x0040, 0xddf: 0x0040, 0xde0: 0x0040, 0xde1: 0x0040, 0xde2: 0x0040, 0xde3: 0x0040,
+       0xde4: 0x0040, 0xde5: 0x0040, 0xde6: 0x0040, 0xde7: 0x0040, 0xde8: 0x0040, 0xde9: 0x0040,
+       0xdea: 0x0040, 0xdeb: 0x0040, 0xdec: 0x0040, 0xded: 0x0040, 0xdee: 0x0040, 0xdef: 0x0040,
+       0xdf0: 0x0040, 0xdf1: 0x0040, 0xdf2: 0x0040, 0xdf3: 0x0040, 0xdf4: 0x0040, 0xdf5: 0x0040,
+       0xdf6: 0x0040, 0xdf7: 0x0040, 0xdf8: 0x0040, 0xdf9: 0x0040, 0xdfa: 0x0040, 0xdfb: 0x0040,
+       0xdfc: 0x0040, 0xdfd: 0x0040, 0xdfe: 0x0040, 0xdff: 0x0040,
+       // Block 0x38, offset 0xe00
+       0xe00: 0x000a, 0xe01: 0x0018, 0xe02: 0x29d1, 0xe03: 0x0018, 0xe04: 0x0018, 0xe05: 0x0008,
+       0xe06: 0x0008, 0xe07: 0x0008, 0xe08: 0x0018, 0xe09: 0x0018, 0xe0a: 0x0018, 0xe0b: 0x0018,
+       0xe0c: 0x0018, 0xe0d: 0x0018, 0xe0e: 0x0018, 0xe0f: 0x0018, 0xe10: 0x0018, 0xe11: 0x0018,
+       0xe12: 0x0018, 0xe13: 0x0018, 0xe14: 0x0018, 0xe15: 0x0018, 0xe16: 0x0018, 0xe17: 0x0018,
+       0xe18: 0x0018, 0xe19: 0x0018, 0xe1a: 0x0018, 0xe1b: 0x0018, 0xe1c: 0x0018, 0xe1d: 0x0018,
+       0xe1e: 0x0018, 0xe1f: 0x0018, 0xe20: 0x0018, 0xe21: 0x0018, 0xe22: 0x0018, 0xe23: 0x0018,
+       0xe24: 0x0018, 0xe25: 0x0018, 0xe26: 0x0018, 0xe27: 0x0018, 0xe28: 0x0018, 0xe29: 0x0018,
+       0xe2a: 0x1308, 0xe2b: 0x1308, 0xe2c: 0x1308, 0xe2d: 0x1308, 0xe2e: 0x1018, 0xe2f: 0x1018,
+       0xe30: 0x0018, 0xe31: 0x0018, 0xe32: 0x0018, 0xe33: 0x0018, 0xe34: 0x0018, 0xe35: 0x0018,
+       0xe36: 0xe125, 0xe37: 0x0018, 0xe38: 0x29bd, 0xe39: 0x29dd, 0xe3a: 0x29fd, 0xe3b: 0x0018,
+       0xe3c: 0x0008, 0xe3d: 0x0018, 0xe3e: 0x0018, 0xe3f: 0x0018,
+       // Block 0x39, offset 0xe40
+       0xe40: 0x2b3d, 0xe41: 0x2b5d, 0xe42: 0x2b7d, 0xe43: 0x2b9d, 0xe44: 0x2bbd, 0xe45: 0x2bdd,
+       0xe46: 0x2bdd, 0xe47: 0x2bdd, 0xe48: 0x2bfd, 0xe49: 0x2bfd, 0xe4a: 0x2bfd, 0xe4b: 0x2bfd,
+       0xe4c: 0x2c1d, 0xe4d: 0x2c1d, 0xe4e: 0x2c1d, 0xe4f: 0x2c3d, 0xe50: 0x2c5d, 0xe51: 0x2c5d,
+       0xe52: 0x2a7d, 0xe53: 0x2a7d, 0xe54: 0x2c5d, 0xe55: 0x2c5d, 0xe56: 0x2c7d, 0xe57: 0x2c7d,
+       0xe58: 0x2c5d, 0xe59: 0x2c5d, 0xe5a: 0x2a7d, 0xe5b: 0x2a7d, 0xe5c: 0x2c5d, 0xe5d: 0x2c5d,
+       0xe5e: 0x2c3d, 0xe5f: 0x2c3d, 0xe60: 0x2c9d, 0xe61: 0x2c9d, 0xe62: 0x2cbd, 0xe63: 0x2cbd,
+       0xe64: 0x0040, 0xe65: 0x2cdd, 0xe66: 0x2cfd, 0xe67: 0x2d1d, 0xe68: 0x2d1d, 0xe69: 0x2d3d,
+       0xe6a: 0x2d5d, 0xe6b: 0x2d7d, 0xe6c: 0x2d9d, 0xe6d: 0x2dbd, 0xe6e: 0x2ddd, 0xe6f: 0x2dfd,
+       0xe70: 0x2e1d, 0xe71: 0x2e3d, 0xe72: 0x2e3d, 0xe73: 0x2e5d, 0xe74: 0x2e7d, 0xe75: 0x2e7d,
+       0xe76: 0x2e9d, 0xe77: 0x2ebd, 0xe78: 0x2e5d, 0xe79: 0x2edd, 0xe7a: 0x2efd, 0xe7b: 0x2edd,
+       0xe7c: 0x2e5d, 0xe7d: 0x2f1d, 0xe7e: 0x2f3d, 0xe7f: 0x2f5d,
+       // Block 0x3a, offset 0xe80
+       0xe80: 0x2f7d, 0xe81: 0x2f9d, 0xe82: 0x2cfd, 0xe83: 0x2cdd, 0xe84: 0x2fbd, 0xe85: 0x2fdd,
+       0xe86: 0x2ffd, 0xe87: 0x301d, 0xe88: 0x303d, 0xe89: 0x305d, 0xe8a: 0x307d, 0xe8b: 0x309d,
+       0xe8c: 0x30bd, 0xe8d: 0x30dd, 0xe8e: 0x30fd, 0xe8f: 0x0040, 0xe90: 0x0018, 0xe91: 0x0018,
+       0xe92: 0x311d, 0xe93: 0x313d, 0xe94: 0x315d, 0xe95: 0x317d, 0xe96: 0x319d, 0xe97: 0x31bd,
+       0xe98: 0x31dd, 0xe99: 0x31fd, 0xe9a: 0x321d, 0xe9b: 0x323d, 0xe9c: 0x315d, 0xe9d: 0x325d,
+       0xe9e: 0x327d, 0xe9f: 0x329d, 0xea0: 0x0008, 0xea1: 0x0008, 0xea2: 0x0008, 0xea3: 0x0008,
+       0xea4: 0x0008, 0xea5: 0x0008, 0xea6: 0x0008, 0xea7: 0x0008, 0xea8: 0x0008, 0xea9: 0x0008,
+       0xeaa: 0x0008, 0xeab: 0x0008, 0xeac: 0x0008, 0xead: 0x0008, 0xeae: 0x0008, 0xeaf: 0x0008,
+       0xeb0: 0x0008, 0xeb1: 0x0008, 0xeb2: 0x0008, 0xeb3: 0x0008, 0xeb4: 0x0008, 0xeb5: 0x0008,
+       0xeb6: 0x0008, 0xeb7: 0x0008, 0xeb8: 0x0008, 0xeb9: 0x0008, 0xeba: 0x0008, 0xebb: 0x0040,
+       0xebc: 0x0040, 0xebd: 0x0040, 0xebe: 0x0040, 0xebf: 0x0040,
+       // Block 0x3b, offset 0xec0
+       0xec0: 0x36a2, 0xec1: 0x36d2, 0xec2: 0x3702, 0xec3: 0x3732, 0xec4: 0x32bd, 0xec5: 0x32dd,
+       0xec6: 0x32fd, 0xec7: 0x331d, 0xec8: 0x0018, 0xec9: 0x0018, 0xeca: 0x0018, 0xecb: 0x0018,
+       0xecc: 0x0018, 0xecd: 0x0018, 0xece: 0x0018, 0xecf: 0x0018, 0xed0: 0x333d, 0xed1: 0x3761,
+       0xed2: 0x3779, 0xed3: 0x3791, 0xed4: 0x37a9, 0xed5: 0x37c1, 0xed6: 0x37d9, 0xed7: 0x37f1,
+       0xed8: 0x3809, 0xed9: 0x3821, 0xeda: 0x3839, 0xedb: 0x3851, 0xedc: 0x3869, 0xedd: 0x3881,
+       0xede: 0x3899, 0xedf: 0x38b1, 0xee0: 0x335d, 0xee1: 0x337d, 0xee2: 0x339d, 0xee3: 0x33bd,
+       0xee4: 0x33dd, 0xee5: 0x33dd, 0xee6: 0x33fd, 0xee7: 0x341d, 0xee8: 0x343d, 0xee9: 0x345d,
+       0xeea: 0x347d, 0xeeb: 0x349d, 0xeec: 0x34bd, 0xeed: 0x34dd, 0xeee: 0x34fd, 0xeef: 0x351d,
+       0xef0: 0x353d, 0xef1: 0x355d, 0xef2: 0x357d, 0xef3: 0x359d, 0xef4: 0x35bd, 0xef5: 0x35dd,
+       0xef6: 0x35fd, 0xef7: 0x361d, 0xef8: 0x363d, 0xef9: 0x365d, 0xefa: 0x367d, 0xefb: 0x369d,
+       0xefc: 0x38c9, 0xefd: 0x3901, 0xefe: 0x36bd, 0xeff: 0x0018,
+       // Block 0x3c, offset 0xf00
+       0xf00: 0x36dd, 0xf01: 0x36fd, 0xf02: 0x371d, 0xf03: 0x373d, 0xf04: 0x375d, 0xf05: 0x377d,
+       0xf06: 0x379d, 0xf07: 0x37bd, 0xf08: 0x37dd, 0xf09: 0x37fd, 0xf0a: 0x381d, 0xf0b: 0x383d,
+       0xf0c: 0x385d, 0xf0d: 0x387d, 0xf0e: 0x389d, 0xf0f: 0x38bd, 0xf10: 0x38dd, 0xf11: 0x38fd,
+       0xf12: 0x391d, 0xf13: 0x393d, 0xf14: 0x395d, 0xf15: 0x397d, 0xf16: 0x399d, 0xf17: 0x39bd,
+       0xf18: 0x39dd, 0xf19: 0x39fd, 0xf1a: 0x3a1d, 0xf1b: 0x3a3d, 0xf1c: 0x3a5d, 0xf1d: 0x3a7d,
+       0xf1e: 0x3a9d, 0xf1f: 0x3abd, 0xf20: 0x3add, 0xf21: 0x3afd, 0xf22: 0x3b1d, 0xf23: 0x3b3d,
+       0xf24: 0x3b5d, 0xf25: 0x3b7d, 0xf26: 0x127d, 0xf27: 0x3b9d, 0xf28: 0x3bbd, 0xf29: 0x3bdd,
+       0xf2a: 0x3bfd, 0xf2b: 0x3c1d, 0xf2c: 0x3c3d, 0xf2d: 0x3c5d, 0xf2e: 0x239d, 0xf2f: 0x3c7d,
+       0xf30: 0x3c9d, 0xf31: 0x3939, 0xf32: 0x3951, 0xf33: 0x3969, 0xf34: 0x3981, 0xf35: 0x3999,
+       0xf36: 0x39b1, 0xf37: 0x39c9, 0xf38: 0x39e1, 0xf39: 0x39f9, 0xf3a: 0x3a11, 0xf3b: 0x3a29,
+       0xf3c: 0x3a41, 0xf3d: 0x3a59, 0xf3e: 0x3a71, 0xf3f: 0x3a89,
+       // Block 0x3d, offset 0xf40
+       0xf40: 0x3aa1, 0xf41: 0x3ac9, 0xf42: 0x3af1, 0xf43: 0x3b19, 0xf44: 0x3b41, 0xf45: 0x3b69,
+       0xf46: 0x3b91, 0xf47: 0x3bb9, 0xf48: 0x3be1, 0xf49: 0x3c09, 0xf4a: 0x3c39, 0xf4b: 0x3c69,
+       0xf4c: 0x3c99, 0xf4d: 0x3cbd, 0xf4e: 0x3cb1, 0xf4f: 0x3cdd, 0xf50: 0x3cfd, 0xf51: 0x3d15,
+       0xf52: 0x3d2d, 0xf53: 0x3d45, 0xf54: 0x3d5d, 0xf55: 0x3d5d, 0xf56: 0x3d45, 0xf57: 0x3d75,
+       0xf58: 0x07bd, 0xf59: 0x3d8d, 0xf5a: 0x3da5, 0xf5b: 0x3dbd, 0xf5c: 0x3dd5, 0xf5d: 0x3ded,
+       0xf5e: 0x3e05, 0xf5f: 0x3e1d, 0xf60: 0x3e35, 0xf61: 0x3e4d, 0xf62: 0x3e65, 0xf63: 0x3e7d,
+       0xf64: 0x3e95, 0xf65: 0x3e95, 0xf66: 0x3ead, 0xf67: 0x3ead, 0xf68: 0x3ec5, 0xf69: 0x3ec5,
+       0xf6a: 0x3edd, 0xf6b: 0x3ef5, 0xf6c: 0x3f0d, 0xf6d: 0x3f25, 0xf6e: 0x3f3d, 0xf6f: 0x3f3d,
+       0xf70: 0x3f55, 0xf71: 0x3f55, 0xf72: 0x3f55, 0xf73: 0x3f6d, 0xf74: 0x3f85, 0xf75: 0x3f9d,
+       0xf76: 0x3fb5, 0xf77: 0x3f9d, 0xf78: 0x3fcd, 0xf79: 0x3fe5, 0xf7a: 0x3f6d, 0xf7b: 0x3ffd,
+       0xf7c: 0x4015, 0xf7d: 0x4015, 0xf7e: 0x4015, 0xf7f: 0x0040,
+       // Block 0x3e, offset 0xf80
+       0xf80: 0x3cc9, 0xf81: 0x3d31, 0xf82: 0x3d99, 0xf83: 0x3e01, 0xf84: 0x3e51, 0xf85: 0x3eb9,
+       0xf86: 0x3f09, 0xf87: 0x3f59, 0xf88: 0x3fd9, 0xf89: 0x4041, 0xf8a: 0x4091, 0xf8b: 0x40e1,
+       0xf8c: 0x4131, 0xf8d: 0x4199, 0xf8e: 0x4201, 0xf8f: 0x4251, 0xf90: 0x42a1, 0xf91: 0x42d9,
+       0xf92: 0x4329, 0xf93: 0x4391, 0xf94: 0x43f9, 0xf95: 0x4431, 0xf96: 0x44b1, 0xf97: 0x4549,
+       0xf98: 0x45c9, 0xf99: 0x4619, 0xf9a: 0x4699, 0xf9b: 0x4719, 0xf9c: 0x4781, 0xf9d: 0x47d1,
+       0xf9e: 0x4821, 0xf9f: 0x4871, 0xfa0: 0x48d9, 0xfa1: 0x4959, 0xfa2: 0x49c1, 0xfa3: 0x4a11,
+       0xfa4: 0x4a61, 0xfa5: 0x4ab1, 0xfa6: 0x4ae9, 0xfa7: 0x4b21, 0xfa8: 0x4b59, 0xfa9: 0x4b91,
+       0xfaa: 0x4be1, 0xfab: 0x4c31, 0xfac: 0x4cb1, 0xfad: 0x4d01, 0xfae: 0x4d69, 0xfaf: 0x4de9,
+       0xfb0: 0x4e39, 0xfb1: 0x4e71, 0xfb2: 0x4ea9, 0xfb3: 0x4f29, 0xfb4: 0x4f91, 0xfb5: 0x5011,
+       0xfb6: 0x5061, 0xfb7: 0x50e1, 0xfb8: 0x5119, 0xfb9: 0x5169, 0xfba: 0x51b9, 0xfbb: 0x5209,
+       0xfbc: 0x5259, 0xfbd: 0x52a9, 0xfbe: 0x5311, 0xfbf: 0x5361,
+       // Block 0x3f, offset 0xfc0
+       0xfc0: 0x5399, 0xfc1: 0x53e9, 0xfc2: 0x5439, 0xfc3: 0x5489, 0xfc4: 0x54f1, 0xfc5: 0x5541,
+       0xfc6: 0x5591, 0xfc7: 0x55e1, 0xfc8: 0x5661, 0xfc9: 0x56c9, 0xfca: 0x5701, 0xfcb: 0x5781,
+       0xfcc: 0x57b9, 0xfcd: 0x5821, 0xfce: 0x5889, 0xfcf: 0x58d9, 0xfd0: 0x5929, 0xfd1: 0x5979,
+       0xfd2: 0x59e1, 0xfd3: 0x5a19, 0xfd4: 0x5a69, 0xfd5: 0x5ad1, 0xfd6: 0x5b09, 0xfd7: 0x5b89,
+       0xfd8: 0x5bd9, 0xfd9: 0x5c01, 0xfda: 0x5c29, 0xfdb: 0x5c51, 0xfdc: 0x5c79, 0xfdd: 0x5ca1,
+       0xfde: 0x5cc9, 0xfdf: 0x5cf1, 0xfe0: 0x5d19, 0xfe1: 0x5d41, 0xfe2: 0x5d69, 0xfe3: 0x5d99,
+       0xfe4: 0x5dc9, 0xfe5: 0x5df9, 0xfe6: 0x5e29, 0xfe7: 0x5e59, 0xfe8: 0x5e89, 0xfe9: 0x5eb9,
+       0xfea: 0x5ee9, 0xfeb: 0x5f19, 0xfec: 0x5f49, 0xfed: 0x5f79, 0xfee: 0x5fa9, 0xfef: 0x5fd9,
+       0xff0: 0x6009, 0xff1: 0x402d, 0xff2: 0x6039, 0xff3: 0x6051, 0xff4: 0x404d, 0xff5: 0x6069,
+       0xff6: 0x6081, 0xff7: 0x6099, 0xff8: 0x406d, 0xff9: 0x406d, 0xffa: 0x60b1, 0xffb: 0x60c9,
+       0xffc: 0x6101, 0xffd: 0x6139, 0xffe: 0x6171, 0xfff: 0x61a9,
+       // Block 0x40, offset 0x1000
+       0x1000: 0x6211, 0x1001: 0x6229, 0x1002: 0x408d, 0x1003: 0x6241, 0x1004: 0x6259, 0x1005: 0x6271,
+       0x1006: 0x6289, 0x1007: 0x62a1, 0x1008: 0x40ad, 0x1009: 0x62b9, 0x100a: 0x62e1, 0x100b: 0x62f9,
+       0x100c: 0x40cd, 0x100d: 0x40cd, 0x100e: 0x6311, 0x100f: 0x6329, 0x1010: 0x6341, 0x1011: 0x40ed,
+       0x1012: 0x410d, 0x1013: 0x412d, 0x1014: 0x414d, 0x1015: 0x416d, 0x1016: 0x6359, 0x1017: 0x6371,
+       0x1018: 0x6389, 0x1019: 0x63a1, 0x101a: 0x63b9, 0x101b: 0x418d, 0x101c: 0x63d1, 0x101d: 0x63e9,
+       0x101e: 0x6401, 0x101f: 0x41ad, 0x1020: 0x41cd, 0x1021: 0x6419, 0x1022: 0x41ed, 0x1023: 0x420d,
+       0x1024: 0x422d, 0x1025: 0x6431, 0x1026: 0x424d, 0x1027: 0x6449, 0x1028: 0x6479, 0x1029: 0x6211,
+       0x102a: 0x426d, 0x102b: 0x428d, 0x102c: 0x42ad, 0x102d: 0x42cd, 0x102e: 0x64b1, 0x102f: 0x64f1,
+       0x1030: 0x6539, 0x1031: 0x6551, 0x1032: 0x42ed, 0x1033: 0x6569, 0x1034: 0x6581, 0x1035: 0x6599,
+       0x1036: 0x430d, 0x1037: 0x65b1, 0x1038: 0x65c9, 0x1039: 0x65b1, 0x103a: 0x65e1, 0x103b: 0x65f9,
+       0x103c: 0x432d, 0x103d: 0x6611, 0x103e: 0x6629, 0x103f: 0x6611,
+       // Block 0x41, offset 0x1040
+       0x1040: 0x434d, 0x1041: 0x436d, 0x1042: 0x0040, 0x1043: 0x6641, 0x1044: 0x6659, 0x1045: 0x6671,
+       0x1046: 0x6689, 0x1047: 0x0040, 0x1048: 0x66c1, 0x1049: 0x66d9, 0x104a: 0x66f1, 0x104b: 0x6709,
+       0x104c: 0x6721, 0x104d: 0x6739, 0x104e: 0x6401, 0x104f: 0x6751, 0x1050: 0x6769, 0x1051: 0x6781,
+       0x1052: 0x438d, 0x1053: 0x6799, 0x1054: 0x6289, 0x1055: 0x43ad, 0x1056: 0x43cd, 0x1057: 0x67b1,
+       0x1058: 0x0040, 0x1059: 0x43ed, 0x105a: 0x67c9, 0x105b: 0x67e1, 0x105c: 0x67f9, 0x105d: 0x6811,
+       0x105e: 0x6829, 0x105f: 0x6859, 0x1060: 0x6889, 0x1061: 0x68b1, 0x1062: 0x68d9, 0x1063: 0x6901,
+       0x1064: 0x6929, 0x1065: 0x6951, 0x1066: 0x6979, 0x1067: 0x69a1, 0x1068: 0x69c9, 0x1069: 0x69f1,
+       0x106a: 0x6a21, 0x106b: 0x6a51, 0x106c: 0x6a81, 0x106d: 0x6ab1, 0x106e: 0x6ae1, 0x106f: 0x6b11,
+       0x1070: 0x6b41, 0x1071: 0x6b71, 0x1072: 0x6ba1, 0x1073: 0x6bd1, 0x1074: 0x6c01, 0x1075: 0x6c31,
+       0x1076: 0x6c61, 0x1077: 0x6c91, 0x1078: 0x6cc1, 0x1079: 0x6cf1, 0x107a: 0x6d21, 0x107b: 0x6d51,
+       0x107c: 0x6d81, 0x107d: 0x6db1, 0x107e: 0x6de1, 0x107f: 0x440d,
+       // Block 0x42, offset 0x1080
+       0x1080: 0xe00d, 0x1081: 0x0008, 0x1082: 0xe00d, 0x1083: 0x0008, 0x1084: 0xe00d, 0x1085: 0x0008,
+       0x1086: 0xe00d, 0x1087: 0x0008, 0x1088: 0xe00d, 0x1089: 0x0008, 0x108a: 0xe00d, 0x108b: 0x0008,
+       0x108c: 0xe00d, 0x108d: 0x0008, 0x108e: 0xe00d, 0x108f: 0x0008, 0x1090: 0xe00d, 0x1091: 0x0008,
+       0x1092: 0xe00d, 0x1093: 0x0008, 0x1094: 0xe00d, 0x1095: 0x0008, 0x1096: 0xe00d, 0x1097: 0x0008,
+       0x1098: 0xe00d, 0x1099: 0x0008, 0x109a: 0xe00d, 0x109b: 0x0008, 0x109c: 0xe00d, 0x109d: 0x0008,
+       0x109e: 0xe00d, 0x109f: 0x0008, 0x10a0: 0xe00d, 0x10a1: 0x0008, 0x10a2: 0xe00d, 0x10a3: 0x0008,
+       0x10a4: 0xe00d, 0x10a5: 0x0008, 0x10a6: 0xe00d, 0x10a7: 0x0008, 0x10a8: 0xe00d, 0x10a9: 0x0008,
+       0x10aa: 0xe00d, 0x10ab: 0x0008, 0x10ac: 0xe00d, 0x10ad: 0x0008, 0x10ae: 0x0008, 0x10af: 0x1308,
+       0x10b0: 0x1318, 0x10b1: 0x1318, 0x10b2: 0x1318, 0x10b3: 0x0018, 0x10b4: 0x1308, 0x10b5: 0x1308,
+       0x10b6: 0x1308, 0x10b7: 0x1308, 0x10b8: 0x1308, 0x10b9: 0x1308, 0x10ba: 0x1308, 0x10bb: 0x1308,
+       0x10bc: 0x1308, 0x10bd: 0x1308, 0x10be: 0x0018, 0x10bf: 0x0008,
+       // Block 0x43, offset 0x10c0
+       0x10c0: 0xe00d, 0x10c1: 0x0008, 0x10c2: 0xe00d, 0x10c3: 0x0008, 0x10c4: 0xe00d, 0x10c5: 0x0008,
+       0x10c6: 0xe00d, 0x10c7: 0x0008, 0x10c8: 0xe00d, 0x10c9: 0x0008, 0x10ca: 0xe00d, 0x10cb: 0x0008,
+       0x10cc: 0xe00d, 0x10cd: 0x0008, 0x10ce: 0xe00d, 0x10cf: 0x0008, 0x10d0: 0xe00d, 0x10d1: 0x0008,
+       0x10d2: 0xe00d, 0x10d3: 0x0008, 0x10d4: 0xe00d, 0x10d5: 0x0008, 0x10d6: 0xe00d, 0x10d7: 0x0008,
+       0x10d8: 0xe00d, 0x10d9: 0x0008, 0x10da: 0xe00d, 0x10db: 0x0008, 0x10dc: 0x0ea1, 0x10dd: 0x6e11,
+       0x10de: 0x1308, 0x10df: 0x1308, 0x10e0: 0x0008, 0x10e1: 0x0008, 0x10e2: 0x0008, 0x10e3: 0x0008,
+       0x10e4: 0x0008, 0x10e5: 0x0008, 0x10e6: 0x0008, 0x10e7: 0x0008, 0x10e8: 0x0008, 0x10e9: 0x0008,
+       0x10ea: 0x0008, 0x10eb: 0x0008, 0x10ec: 0x0008, 0x10ed: 0x0008, 0x10ee: 0x0008, 0x10ef: 0x0008,
+       0x10f0: 0x0008, 0x10f1: 0x0008, 0x10f2: 0x0008, 0x10f3: 0x0008, 0x10f4: 0x0008, 0x10f5: 0x0008,
+       0x10f6: 0x0008, 0x10f7: 0x0008, 0x10f8: 0x0008, 0x10f9: 0x0008, 0x10fa: 0x0008, 0x10fb: 0x0008,
+       0x10fc: 0x0008, 0x10fd: 0x0008, 0x10fe: 0x0008, 0x10ff: 0x0008,
+       // Block 0x44, offset 0x1100
+       0x1100: 0x0018, 0x1101: 0x0018, 0x1102: 0x0018, 0x1103: 0x0018, 0x1104: 0x0018, 0x1105: 0x0018,
+       0x1106: 0x0018, 0x1107: 0x0018, 0x1108: 0x0018, 0x1109: 0x0018, 0x110a: 0x0018, 0x110b: 0x0018,
+       0x110c: 0x0018, 0x110d: 0x0018, 0x110e: 0x0018, 0x110f: 0x0018, 0x1110: 0x0018, 0x1111: 0x0018,
+       0x1112: 0x0018, 0x1113: 0x0018, 0x1114: 0x0018, 0x1115: 0x0018, 0x1116: 0x0018, 0x1117: 0x0008,
+       0x1118: 0x0008, 0x1119: 0x0008, 0x111a: 0x0008, 0x111b: 0x0008, 0x111c: 0x0008, 0x111d: 0x0008,
+       0x111e: 0x0008, 0x111f: 0x0008, 0x1120: 0x0018, 0x1121: 0x0018, 0x1122: 0xe00d, 0x1123: 0x0008,
+       0x1124: 0xe00d, 0x1125: 0x0008, 0x1126: 0xe00d, 0x1127: 0x0008, 0x1128: 0xe00d, 0x1129: 0x0008,
+       0x112a: 0xe00d, 0x112b: 0x0008, 0x112c: 0xe00d, 0x112d: 0x0008, 0x112e: 0xe00d, 0x112f: 0x0008,
+       0x1130: 0x0008, 0x1131: 0x0008, 0x1132: 0xe00d, 0x1133: 0x0008, 0x1134: 0xe00d, 0x1135: 0x0008,
+       0x1136: 0xe00d, 0x1137: 0x0008, 0x1138: 0xe00d, 0x1139: 0x0008, 0x113a: 0xe00d, 0x113b: 0x0008,
+       0x113c: 0xe00d, 0x113d: 0x0008, 0x113e: 0xe00d, 0x113f: 0x0008,
+       // Block 0x45, offset 0x1140
+       0x1140: 0xe00d, 0x1141: 0x0008, 0x1142: 0xe00d, 0x1143: 0x0008, 0x1144: 0xe00d, 0x1145: 0x0008,
+       0x1146: 0xe00d, 0x1147: 0x0008, 0x1148: 0xe00d, 0x1149: 0x0008, 0x114a: 0xe00d, 0x114b: 0x0008,
+       0x114c: 0xe00d, 0x114d: 0x0008, 0x114e: 0xe00d, 0x114f: 0x0008, 0x1150: 0xe00d, 0x1151: 0x0008,
+       0x1152: 0xe00d, 0x1153: 0x0008, 0x1154: 0xe00d, 0x1155: 0x0008, 0x1156: 0xe00d, 0x1157: 0x0008,
+       0x1158: 0xe00d, 0x1159: 0x0008, 0x115a: 0xe00d, 0x115b: 0x0008, 0x115c: 0xe00d, 0x115d: 0x0008,
+       0x115e: 0xe00d, 0x115f: 0x0008, 0x1160: 0xe00d, 0x1161: 0x0008, 0x1162: 0xe00d, 0x1163: 0x0008,
+       0x1164: 0xe00d, 0x1165: 0x0008, 0x1166: 0xe00d, 0x1167: 0x0008, 0x1168: 0xe00d, 0x1169: 0x0008,
+       0x116a: 0xe00d, 0x116b: 0x0008, 0x116c: 0xe00d, 0x116d: 0x0008, 0x116e: 0xe00d, 0x116f: 0x0008,
+       0x1170: 0xe0fd, 0x1171: 0x0008, 0x1172: 0x0008, 0x1173: 0x0008, 0x1174: 0x0008, 0x1175: 0x0008,
+       0x1176: 0x0008, 0x1177: 0x0008, 0x1178: 0x0008, 0x1179: 0xe01d, 0x117a: 0x0008, 0x117b: 0xe03d,
+       0x117c: 0x0008, 0x117d: 0x442d, 0x117e: 0xe00d, 0x117f: 0x0008,
+       // Block 0x46, offset 0x1180
+       0x1180: 0xe00d, 0x1181: 0x0008, 0x1182: 0xe00d, 0x1183: 0x0008, 0x1184: 0xe00d, 0x1185: 0x0008,
+       0x1186: 0xe00d, 0x1187: 0x0008, 0x1188: 0x0008, 0x1189: 0x0018, 0x118a: 0x0018, 0x118b: 0xe03d,
+       0x118c: 0x0008, 0x118d: 0x11d9, 0x118e: 0x0008, 0x118f: 0x0008, 0x1190: 0xe00d, 0x1191: 0x0008,
+       0x1192: 0xe00d, 0x1193: 0x0008, 0x1194: 0x0008, 0x1195: 0x0008, 0x1196: 0xe00d, 0x1197: 0x0008,
+       0x1198: 0xe00d, 0x1199: 0x0008, 0x119a: 0xe00d, 0x119b: 0x0008, 0x119c: 0xe00d, 0x119d: 0x0008,
+       0x119e: 0xe00d, 0x119f: 0x0008, 0x11a0: 0xe00d, 0x11a1: 0x0008, 0x11a2: 0xe00d, 0x11a3: 0x0008,
+       0x11a4: 0xe00d, 0x11a5: 0x0008, 0x11a6: 0xe00d, 0x11a7: 0x0008, 0x11a8: 0xe00d, 0x11a9: 0x0008,
+       0x11aa: 0x6e29, 0x11ab: 0x1029, 0x11ac: 0x11c1, 0x11ad: 0x6e41, 0x11ae: 0x1221, 0x11af: 0x0040,
+       0x11b0: 0x6e59, 0x11b1: 0x6e71, 0x11b2: 0x1239, 0x11b3: 0x444d, 0x11b4: 0xe00d, 0x11b5: 0x0008,
+       0x11b6: 0xe00d, 0x11b7: 0x0008, 0x11b8: 0x0040, 0x11b9: 0x0040, 0x11ba: 0x0040, 0x11bb: 0x0040,
+       0x11bc: 0x0040, 0x11bd: 0x0040, 0x11be: 0x0040, 0x11bf: 0x0040,
+       // Block 0x47, offset 0x11c0
+       0x11c0: 0x64d5, 0x11c1: 0x64f5, 0x11c2: 0x6515, 0x11c3: 0x6535, 0x11c4: 0x6555, 0x11c5: 0x6575,
+       0x11c6: 0x6595, 0x11c7: 0x65b5, 0x11c8: 0x65d5, 0x11c9: 0x65f5, 0x11ca: 0x6615, 0x11cb: 0x6635,
+       0x11cc: 0x6655, 0x11cd: 0x6675, 0x11ce: 0x0008, 0x11cf: 0x0008, 0x11d0: 0x6695, 0x11d1: 0x0008,
+       0x11d2: 0x66b5, 0x11d3: 0x0008, 0x11d4: 0x0008, 0x11d5: 0x66d5, 0x11d6: 0x66f5, 0x11d7: 0x6715,
+       0x11d8: 0x6735, 0x11d9: 0x6755, 0x11da: 0x6775, 0x11db: 0x6795, 0x11dc: 0x67b5, 0x11dd: 0x67d5,
+       0x11de: 0x67f5, 0x11df: 0x0008, 0x11e0: 0x6815, 0x11e1: 0x0008, 0x11e2: 0x6835, 0x11e3: 0x0008,
+       0x11e4: 0x0008, 0x11e5: 0x6855, 0x11e6: 0x6875, 0x11e7: 0x0008, 0x11e8: 0x0008, 0x11e9: 0x0008,
+       0x11ea: 0x6895, 0x11eb: 0x68b5, 0x11ec: 0x68d5, 0x11ed: 0x68f5, 0x11ee: 0x6915, 0x11ef: 0x6935,
+       0x11f0: 0x6955, 0x11f1: 0x6975, 0x11f2: 0x6995, 0x11f3: 0x69b5, 0x11f4: 0x69d5, 0x11f5: 0x69f5,
+       0x11f6: 0x6a15, 0x11f7: 0x6a35, 0x11f8: 0x6a55, 0x11f9: 0x6a75, 0x11fa: 0x6a95, 0x11fb: 0x6ab5,
+       0x11fc: 0x6ad5, 0x11fd: 0x6af5, 0x11fe: 0x6b15, 0x11ff: 0x6b35,
+       // Block 0x48, offset 0x1200
+       0x1200: 0x7a95, 0x1201: 0x7ab5, 0x1202: 0x7ad5, 0x1203: 0x7af5, 0x1204: 0x7b15, 0x1205: 0x7b35,
+       0x1206: 0x7b55, 0x1207: 0x7b75, 0x1208: 0x7b95, 0x1209: 0x7bb5, 0x120a: 0x7bd5, 0x120b: 0x7bf5,
+       0x120c: 0x7c15, 0x120d: 0x7c35, 0x120e: 0x7c55, 0x120f: 0x6ec9, 0x1210: 0x6ef1, 0x1211: 0x6f19,
+       0x1212: 0x7c75, 0x1213: 0x7c95, 0x1214: 0x7cb5, 0x1215: 0x6f41, 0x1216: 0x6f69, 0x1217: 0x6f91,
+       0x1218: 0x7cd5, 0x1219: 0x7cf5, 0x121a: 0x0040, 0x121b: 0x0040, 0x121c: 0x0040, 0x121d: 0x0040,
+       0x121e: 0x0040, 0x121f: 0x0040, 0x1220: 0x0040, 0x1221: 0x0040, 0x1222: 0x0040, 0x1223: 0x0040,
+       0x1224: 0x0040, 0x1225: 0x0040, 0x1226: 0x0040, 0x1227: 0x0040, 0x1228: 0x0040, 0x1229: 0x0040,
+       0x122a: 0x0040, 0x122b: 0x0040, 0x122c: 0x0040, 0x122d: 0x0040, 0x122e: 0x0040, 0x122f: 0x0040,
+       0x1230: 0x0040, 0x1231: 0x0040, 0x1232: 0x0040, 0x1233: 0x0040, 0x1234: 0x0040, 0x1235: 0x0040,
+       0x1236: 0x0040, 0x1237: 0x0040, 0x1238: 0x0040, 0x1239: 0x0040, 0x123a: 0x0040, 0x123b: 0x0040,
+       0x123c: 0x0040, 0x123d: 0x0040, 0x123e: 0x0040, 0x123f: 0x0040,
+       // Block 0x49, offset 0x1240
+       0x1240: 0x6fb9, 0x1241: 0x6fd1, 0x1242: 0x6fe9, 0x1243: 0x7d15, 0x1244: 0x7d35, 0x1245: 0x7001,
+       0x1246: 0x7001, 0x1247: 0x0040, 0x1248: 0x0040, 0x1249: 0x0040, 0x124a: 0x0040, 0x124b: 0x0040,
+       0x124c: 0x0040, 0x124d: 0x0040, 0x124e: 0x0040, 0x124f: 0x0040, 0x1250: 0x0040, 0x1251: 0x0040,
+       0x1252: 0x0040, 0x1253: 0x7019, 0x1254: 0x7041, 0x1255: 0x7069, 0x1256: 0x7091, 0x1257: 0x70b9,
+       0x1258: 0x0040, 0x1259: 0x0040, 0x125a: 0x0040, 0x125b: 0x0040, 0x125c: 0x0040, 0x125d: 0x70e1,
+       0x125e: 0x1308, 0x125f: 0x7109, 0x1260: 0x7131, 0x1261: 0x20a9, 0x1262: 0x20f1, 0x1263: 0x7149,
+       0x1264: 0x7161, 0x1265: 0x7179, 0x1266: 0x7191, 0x1267: 0x71a9, 0x1268: 0x71c1, 0x1269: 0x1fb2,
+       0x126a: 0x71d9, 0x126b: 0x7201, 0x126c: 0x7229, 0x126d: 0x7261, 0x126e: 0x7299, 0x126f: 0x72c1,
+       0x1270: 0x72e9, 0x1271: 0x7311, 0x1272: 0x7339, 0x1273: 0x7361, 0x1274: 0x7389, 0x1275: 0x73b1,
+       0x1276: 0x73d9, 0x1277: 0x0040, 0x1278: 0x7401, 0x1279: 0x7429, 0x127a: 0x7451, 0x127b: 0x7479,
+       0x127c: 0x74a1, 0x127d: 0x0040, 0x127e: 0x74c9, 0x127f: 0x0040,
+       // Block 0x4a, offset 0x1280
+       0x1280: 0x74f1, 0x1281: 0x7519, 0x1282: 0x0040, 0x1283: 0x7541, 0x1284: 0x7569, 0x1285: 0x0040,
+       0x1286: 0x7591, 0x1287: 0x75b9, 0x1288: 0x75e1, 0x1289: 0x7609, 0x128a: 0x7631, 0x128b: 0x7659,
+       0x128c: 0x7681, 0x128d: 0x76a9, 0x128e: 0x76d1, 0x128f: 0x76f9, 0x1290: 0x7721, 0x1291: 0x7721,
+       0x1292: 0x7739, 0x1293: 0x7739, 0x1294: 0x7739, 0x1295: 0x7739, 0x1296: 0x7751, 0x1297: 0x7751,
+       0x1298: 0x7751, 0x1299: 0x7751, 0x129a: 0x7769, 0x129b: 0x7769, 0x129c: 0x7769, 0x129d: 0x7769,
+       0x129e: 0x7781, 0x129f: 0x7781, 0x12a0: 0x7781, 0x12a1: 0x7781, 0x12a2: 0x7799, 0x12a3: 0x7799,
+       0x12a4: 0x7799, 0x12a5: 0x7799, 0x12a6: 0x77b1, 0x12a7: 0x77b1, 0x12a8: 0x77b1, 0x12a9: 0x77b1,
+       0x12aa: 0x77c9, 0x12ab: 0x77c9, 0x12ac: 0x77c9, 0x12ad: 0x77c9, 0x12ae: 0x77e1, 0x12af: 0x77e1,
+       0x12b0: 0x77e1, 0x12b1: 0x77e1, 0x12b2: 0x77f9, 0x12b3: 0x77f9, 0x12b4: 0x77f9, 0x12b5: 0x77f9,
+       0x12b6: 0x7811, 0x12b7: 0x7811, 0x12b8: 0x7811, 0x12b9: 0x7811, 0x12ba: 0x7829, 0x12bb: 0x7829,
+       0x12bc: 0x7829, 0x12bd: 0x7829, 0x12be: 0x7841, 0x12bf: 0x7841,
+       // Block 0x4b, offset 0x12c0
+       0x12c0: 0x7841, 0x12c1: 0x7841, 0x12c2: 0x7859, 0x12c3: 0x7859, 0x12c4: 0x7871, 0x12c5: 0x7871,
+       0x12c6: 0x7889, 0x12c7: 0x7889, 0x12c8: 0x78a1, 0x12c9: 0x78a1, 0x12ca: 0x78b9, 0x12cb: 0x78b9,
+       0x12cc: 0x78d1, 0x12cd: 0x78d1, 0x12ce: 0x78e9, 0x12cf: 0x78e9, 0x12d0: 0x78e9, 0x12d1: 0x78e9,
+       0x12d2: 0x7901, 0x12d3: 0x7901, 0x12d4: 0x7901, 0x12d5: 0x7901, 0x12d6: 0x7919, 0x12d7: 0x7919,
+       0x12d8: 0x7919, 0x12d9: 0x7919, 0x12da: 0x7931, 0x12db: 0x7931, 0x12dc: 0x7931, 0x12dd: 0x7931,
+       0x12de: 0x7949, 0x12df: 0x7949, 0x12e0: 0x7961, 0x12e1: 0x7961, 0x12e2: 0x7961, 0x12e3: 0x7961,
+       0x12e4: 0x7979, 0x12e5: 0x7979, 0x12e6: 0x7991, 0x12e7: 0x7991, 0x12e8: 0x7991, 0x12e9: 0x7991,
+       0x12ea: 0x79a9, 0x12eb: 0x79a9, 0x12ec: 0x79a9, 0x12ed: 0x79a9, 0x12ee: 0x79c1, 0x12ef: 0x79c1,
+       0x12f0: 0x79d9, 0x12f1: 0x79d9, 0x12f2: 0x0018, 0x12f3: 0x0018, 0x12f4: 0x0018, 0x12f5: 0x0018,
+       0x12f6: 0x0018, 0x12f7: 0x0018, 0x12f8: 0x0018, 0x12f9: 0x0018, 0x12fa: 0x0018, 0x12fb: 0x0018,
+       0x12fc: 0x0018, 0x12fd: 0x0018, 0x12fe: 0x0018, 0x12ff: 0x0018,
+       // Block 0x4c, offset 0x1300
+       0x1300: 0x0018, 0x1301: 0x0018, 0x1302: 0x0040, 0x1303: 0x0040, 0x1304: 0x0040, 0x1305: 0x0040,
+       0x1306: 0x0040, 0x1307: 0x0040, 0x1308: 0x0040, 0x1309: 0x0040, 0x130a: 0x0040, 0x130b: 0x0040,
+       0x130c: 0x0040, 0x130d: 0x0040, 0x130e: 0x0040, 0x130f: 0x0040, 0x1310: 0x0040, 0x1311: 0x0040,
+       0x1312: 0x0040, 0x1313: 0x79f1, 0x1314: 0x79f1, 0x1315: 0x79f1, 0x1316: 0x79f1, 0x1317: 0x7a09,
+       0x1318: 0x7a09, 0x1319: 0x7a21, 0x131a: 0x7a21, 0x131b: 0x7a39, 0x131c: 0x7a39, 0x131d: 0x0479,
+       0x131e: 0x7a51, 0x131f: 0x7a51, 0x1320: 0x7a69, 0x1321: 0x7a69, 0x1322: 0x7a81, 0x1323: 0x7a81,
+       0x1324: 0x7a99, 0x1325: 0x7a99, 0x1326: 0x7a99, 0x1327: 0x7a99, 0x1328: 0x7ab1, 0x1329: 0x7ab1,
+       0x132a: 0x7ac9, 0x132b: 0x7ac9, 0x132c: 0x7af1, 0x132d: 0x7af1, 0x132e: 0x7b19, 0x132f: 0x7b19,
+       0x1330: 0x7b41, 0x1331: 0x7b41, 0x1332: 0x7b69, 0x1333: 0x7b69, 0x1334: 0x7b91, 0x1335: 0x7b91,
+       0x1336: 0x7bb9, 0x1337: 0x7bb9, 0x1338: 0x7bb9, 0x1339: 0x7be1, 0x133a: 0x7be1, 0x133b: 0x7be1,
+       0x133c: 0x7c09, 0x133d: 0x7c09, 0x133e: 0x7c09, 0x133f: 0x7c09,
+       // Block 0x4d, offset 0x1340
+       0x1340: 0x85f9, 0x1341: 0x8621, 0x1342: 0x8649, 0x1343: 0x8671, 0x1344: 0x8699, 0x1345: 0x86c1,
+       0x1346: 0x86e9, 0x1347: 0x8711, 0x1348: 0x8739, 0x1349: 0x8761, 0x134a: 0x8789, 0x134b: 0x87b1,
+       0x134c: 0x87d9, 0x134d: 0x8801, 0x134e: 0x8829, 0x134f: 0x8851, 0x1350: 0x8879, 0x1351: 0x88a1,
+       0x1352: 0x88c9, 0x1353: 0x88f1, 0x1354: 0x8919, 0x1355: 0x8941, 0x1356: 0x8969, 0x1357: 0x8991,
+       0x1358: 0x89b9, 0x1359: 0x89e1, 0x135a: 0x8a09, 0x135b: 0x8a31, 0x135c: 0x8a59, 0x135d: 0x8a81,
+       0x135e: 0x8aaa, 0x135f: 0x8ada, 0x1360: 0x8b0a, 0x1361: 0x8b3a, 0x1362: 0x8b6a, 0x1363: 0x8b9a,
+       0x1364: 0x8bc9, 0x1365: 0x8bf1, 0x1366: 0x7c71, 0x1367: 0x8c19, 0x1368: 0x7be1, 0x1369: 0x7c99,
+       0x136a: 0x8c41, 0x136b: 0x8c69, 0x136c: 0x7d39, 0x136d: 0x8c91, 0x136e: 0x7d61, 0x136f: 0x7d89,
+       0x1370: 0x8cb9, 0x1371: 0x8ce1, 0x1372: 0x7e29, 0x1373: 0x8d09, 0x1374: 0x7e51, 0x1375: 0x7e79,
+       0x1376: 0x8d31, 0x1377: 0x8d59, 0x1378: 0x7ec9, 0x1379: 0x8d81, 0x137a: 0x7ef1, 0x137b: 0x7f19,
+       0x137c: 0x83a1, 0x137d: 0x83c9, 0x137e: 0x8441, 0x137f: 0x8469,
+       // Block 0x4e, offset 0x1380
+       0x1380: 0x8491, 0x1381: 0x8531, 0x1382: 0x8559, 0x1383: 0x8581, 0x1384: 0x85a9, 0x1385: 0x8649,
+       0x1386: 0x8671, 0x1387: 0x8699, 0x1388: 0x8da9, 0x1389: 0x8739, 0x138a: 0x8dd1, 0x138b: 0x8df9,
+       0x138c: 0x8829, 0x138d: 0x8e21, 0x138e: 0x8851, 0x138f: 0x8879, 0x1390: 0x8a81, 0x1391: 0x8e49,
+       0x1392: 0x8e71, 0x1393: 0x89b9, 0x1394: 0x8e99, 0x1395: 0x89e1, 0x1396: 0x8a09, 0x1397: 0x7c21,
+       0x1398: 0x7c49, 0x1399: 0x8ec1, 0x139a: 0x7c71, 0x139b: 0x8ee9, 0x139c: 0x7cc1, 0x139d: 0x7ce9,
+       0x139e: 0x7d11, 0x139f: 0x7d39, 0x13a0: 0x8f11, 0x13a1: 0x7db1, 0x13a2: 0x7dd9, 0x13a3: 0x7e01,
+       0x13a4: 0x7e29, 0x13a5: 0x8f39, 0x13a6: 0x7ec9, 0x13a7: 0x7f41, 0x13a8: 0x7f69, 0x13a9: 0x7f91,
+       0x13aa: 0x7fb9, 0x13ab: 0x7fe1, 0x13ac: 0x8031, 0x13ad: 0x8059, 0x13ae: 0x8081, 0x13af: 0x80a9,
+       0x13b0: 0x80d1, 0x13b1: 0x80f9, 0x13b2: 0x8f61, 0x13b3: 0x8121, 0x13b4: 0x8149, 0x13b5: 0x8171,
+       0x13b6: 0x8199, 0x13b7: 0x81c1, 0x13b8: 0x81e9, 0x13b9: 0x8239, 0x13ba: 0x8261, 0x13bb: 0x8289,
+       0x13bc: 0x82b1, 0x13bd: 0x82d9, 0x13be: 0x8301, 0x13bf: 0x8329,
+       // Block 0x4f, offset 0x13c0
+       0x13c0: 0x8351, 0x13c1: 0x8379, 0x13c2: 0x83f1, 0x13c3: 0x8419, 0x13c4: 0x84b9, 0x13c5: 0x84e1,
+       0x13c6: 0x8509, 0x13c7: 0x8531, 0x13c8: 0x8559, 0x13c9: 0x85d1, 0x13ca: 0x85f9, 0x13cb: 0x8621,
+       0x13cc: 0x8649, 0x13cd: 0x8f89, 0x13ce: 0x86c1, 0x13cf: 0x86e9, 0x13d0: 0x8711, 0x13d1: 0x8739,
+       0x13d2: 0x87b1, 0x13d3: 0x87d9, 0x13d4: 0x8801, 0x13d5: 0x8829, 0x13d6: 0x8fb1, 0x13d7: 0x88a1,
+       0x13d8: 0x88c9, 0x13d9: 0x8fd9, 0x13da: 0x8941, 0x13db: 0x8969, 0x13dc: 0x8991, 0x13dd: 0x89b9,
+       0x13de: 0x9001, 0x13df: 0x7c71, 0x13e0: 0x8ee9, 0x13e1: 0x7d39, 0x13e2: 0x8f11, 0x13e3: 0x7e29,
+       0x13e4: 0x8f39, 0x13e5: 0x7ec9, 0x13e6: 0x9029, 0x13e7: 0x80d1, 0x13e8: 0x9051, 0x13e9: 0x9079,
+       0x13ea: 0x90a1, 0x13eb: 0x8531, 0x13ec: 0x8559, 0x13ed: 0x8649, 0x13ee: 0x8829, 0x13ef: 0x8fb1,
+       0x13f0: 0x89b9, 0x13f1: 0x9001, 0x13f2: 0x90c9, 0x13f3: 0x9101, 0x13f4: 0x9139, 0x13f5: 0x9171,
+       0x13f6: 0x9199, 0x13f7: 0x91c1, 0x13f8: 0x91e9, 0x13f9: 0x9211, 0x13fa: 0x9239, 0x13fb: 0x9261,
+       0x13fc: 0x9289, 0x13fd: 0x92b1, 0x13fe: 0x92d9, 0x13ff: 0x9301,
+       // Block 0x50, offset 0x1400
+       0x1400: 0x9329, 0x1401: 0x9351, 0x1402: 0x9379, 0x1403: 0x93a1, 0x1404: 0x93c9, 0x1405: 0x93f1,
+       0x1406: 0x9419, 0x1407: 0x9441, 0x1408: 0x9469, 0x1409: 0x9491, 0x140a: 0x94b9, 0x140b: 0x94e1,
+       0x140c: 0x9079, 0x140d: 0x9509, 0x140e: 0x9531, 0x140f: 0x9559, 0x1410: 0x9581, 0x1411: 0x9171,
+       0x1412: 0x9199, 0x1413: 0x91c1, 0x1414: 0x91e9, 0x1415: 0x9211, 0x1416: 0x9239, 0x1417: 0x9261,
+       0x1418: 0x9289, 0x1419: 0x92b1, 0x141a: 0x92d9, 0x141b: 0x9301, 0x141c: 0x9329, 0x141d: 0x9351,
+       0x141e: 0x9379, 0x141f: 0x93a1, 0x1420: 0x93c9, 0x1421: 0x93f1, 0x1422: 0x9419, 0x1423: 0x9441,
+       0x1424: 0x9469, 0x1425: 0x9491, 0x1426: 0x94b9, 0x1427: 0x94e1, 0x1428: 0x9079, 0x1429: 0x9509,
+       0x142a: 0x9531, 0x142b: 0x9559, 0x142c: 0x9581, 0x142d: 0x9491, 0x142e: 0x94b9, 0x142f: 0x94e1,
+       0x1430: 0x9079, 0x1431: 0x9051, 0x1432: 0x90a1, 0x1433: 0x8211, 0x1434: 0x8059, 0x1435: 0x8081,
+       0x1436: 0x80a9, 0x1437: 0x9491, 0x1438: 0x94b9, 0x1439: 0x94e1, 0x143a: 0x8211, 0x143b: 0x8239,
+       0x143c: 0x95a9, 0x143d: 0x95a9, 0x143e: 0x0018, 0x143f: 0x0018,
+       // Block 0x51, offset 0x1440
+       0x1440: 0x0040, 0x1441: 0x0040, 0x1442: 0x0040, 0x1443: 0x0040, 0x1444: 0x0040, 0x1445: 0x0040,
+       0x1446: 0x0040, 0x1447: 0x0040, 0x1448: 0x0040, 0x1449: 0x0040, 0x144a: 0x0040, 0x144b: 0x0040,
+       0x144c: 0x0040, 0x144d: 0x0040, 0x144e: 0x0040, 0x144f: 0x0040, 0x1450: 0x95d1, 0x1451: 0x9609,
+       0x1452: 0x9609, 0x1453: 0x9641, 0x1454: 0x9679, 0x1455: 0x96b1, 0x1456: 0x96e9, 0x1457: 0x9721,
+       0x1458: 0x9759, 0x1459: 0x9759, 0x145a: 0x9791, 0x145b: 0x97c9, 0x145c: 0x9801, 0x145d: 0x9839,
+       0x145e: 0x9871, 0x145f: 0x98a9, 0x1460: 0x98a9, 0x1461: 0x98e1, 0x1462: 0x9919, 0x1463: 0x9919,
+       0x1464: 0x9951, 0x1465: 0x9951, 0x1466: 0x9989, 0x1467: 0x99c1, 0x1468: 0x99c1, 0x1469: 0x99f9,
+       0x146a: 0x9a31, 0x146b: 0x9a31, 0x146c: 0x9a69, 0x146d: 0x9a69, 0x146e: 0x9aa1, 0x146f: 0x9ad9,
+       0x1470: 0x9ad9, 0x1471: 0x9b11, 0x1472: 0x9b11, 0x1473: 0x9b49, 0x1474: 0x9b81, 0x1475: 0x9bb9,
+       0x1476: 0x9bf1, 0x1477: 0x9bf1, 0x1478: 0x9c29, 0x1479: 0x9c61, 0x147a: 0x9c99, 0x147b: 0x9cd1,
+       0x147c: 0x9d09, 0x147d: 0x9d09, 0x147e: 0x9d41, 0x147f: 0x9d79,
+       // Block 0x52, offset 0x1480
+       0x1480: 0xa949, 0x1481: 0xa981, 0x1482: 0xa9b9, 0x1483: 0xa8a1, 0x1484: 0x9bb9, 0x1485: 0x9989,
+       0x1486: 0xa9f1, 0x1487: 0xaa29, 0x1488: 0x0040, 0x1489: 0x0040, 0x148a: 0x0040, 0x148b: 0x0040,
+       0x148c: 0x0040, 0x148d: 0x0040, 0x148e: 0x0040, 0x148f: 0x0040, 0x1490: 0x0040, 0x1491: 0x0040,
+       0x1492: 0x0040, 0x1493: 0x0040, 0x1494: 0x0040, 0x1495: 0x0040, 0x1496: 0x0040, 0x1497: 0x0040,
+       0x1498: 0x0040, 0x1499: 0x0040, 0x149a: 0x0040, 0x149b: 0x0040, 0x149c: 0x0040, 0x149d: 0x0040,
+       0x149e: 0x0040, 0x149f: 0x0040, 0x14a0: 0x0040, 0x14a1: 0x0040, 0x14a2: 0x0040, 0x14a3: 0x0040,
+       0x14a4: 0x0040, 0x14a5: 0x0040, 0x14a6: 0x0040, 0x14a7: 0x0040, 0x14a8: 0x0040, 0x14a9: 0x0040,
+       0x14aa: 0x0040, 0x14ab: 0x0040, 0x14ac: 0x0040, 0x14ad: 0x0040, 0x14ae: 0x0040, 0x14af: 0x0040,
+       0x14b0: 0xaa61, 0x14b1: 0xaa99, 0x14b2: 0xaad1, 0x14b3: 0xab19, 0x14b4: 0xab61, 0x14b5: 0xaba9,
+       0x14b6: 0xabf1, 0x14b7: 0xac39, 0x14b8: 0xac81, 0x14b9: 0xacc9, 0x14ba: 0xad02, 0x14bb: 0xae12,
+       0x14bc: 0xae91, 0x14bd: 0x0018, 0x14be: 0x0040, 0x14bf: 0x0040,
+       // Block 0x53, offset 0x14c0
+       0x14c0: 0x13c0, 0x14c1: 0x13c0, 0x14c2: 0x13c0, 0x14c3: 0x13c0, 0x14c4: 0x13c0, 0x14c5: 0x13c0,
+       0x14c6: 0x13c0, 0x14c7: 0x13c0, 0x14c8: 0x13c0, 0x14c9: 0x13c0, 0x14ca: 0x13c0, 0x14cb: 0x13c0,
+       0x14cc: 0x13c0, 0x14cd: 0x13c0, 0x14ce: 0x13c0, 0x14cf: 0x13c0, 0x14d0: 0xaeda, 0x14d1: 0x7d55,
+       0x14d2: 0x0040, 0x14d3: 0xaeea, 0x14d4: 0x03c2, 0x14d5: 0xaefa, 0x14d6: 0xaf0a, 0x14d7: 0x7d75,
+       0x14d8: 0x7d95, 0x14d9: 0x0040, 0x14da: 0x0040, 0x14db: 0x0040, 0x14dc: 0x0040, 0x14dd: 0x0040,
+       0x14de: 0x0040, 0x14df: 0x0040, 0x14e0: 0x1308, 0x14e1: 0x1308, 0x14e2: 0x1308, 0x14e3: 0x1308,
+       0x14e4: 0x1308, 0x14e5: 0x1308, 0x14e6: 0x1308, 0x14e7: 0x1308, 0x14e8: 0x1308, 0x14e9: 0x1308,
+       0x14ea: 0x1308, 0x14eb: 0x1308, 0x14ec: 0x1308, 0x14ed: 0x1308, 0x14ee: 0x1308, 0x14ef: 0x1308,
+       0x14f0: 0x0040, 0x14f1: 0x7db5, 0x14f2: 0x7dd5, 0x14f3: 0xaf1a, 0x14f4: 0xaf1a, 0x14f5: 0x1fd2,
+       0x14f6: 0x1fe2, 0x14f7: 0xaf2a, 0x14f8: 0xaf3a, 0x14f9: 0x7df5, 0x14fa: 0x7e15, 0x14fb: 0x7e35,
+       0x14fc: 0x7df5, 0x14fd: 0x7e55, 0x14fe: 0x7e75, 0x14ff: 0x7e55,
+       // Block 0x54, offset 0x1500
+       0x1500: 0x7e95, 0x1501: 0x7eb5, 0x1502: 0x7ed5, 0x1503: 0x7eb5, 0x1504: 0x7ef5, 0x1505: 0x0018,
+       0x1506: 0x0018, 0x1507: 0xaf4a, 0x1508: 0xaf5a, 0x1509: 0x7f16, 0x150a: 0x7f36, 0x150b: 0x7f56,
+       0x150c: 0x7f76, 0x150d: 0xaf1a, 0x150e: 0xaf1a, 0x150f: 0xaf1a, 0x1510: 0xaeda, 0x1511: 0x7f95,
+       0x1512: 0x0040, 0x1513: 0x0040, 0x1514: 0x03c2, 0x1515: 0xaeea, 0x1516: 0xaf0a, 0x1517: 0xaefa,
+       0x1518: 0x7fb5, 0x1519: 0x1fd2, 0x151a: 0x1fe2, 0x151b: 0xaf2a, 0x151c: 0xaf3a, 0x151d: 0x7e95,
+       0x151e: 0x7ef5, 0x151f: 0xaf6a, 0x1520: 0xaf7a, 0x1521: 0xaf8a, 0x1522: 0x1fb2, 0x1523: 0xaf99,
+       0x1524: 0xafaa, 0x1525: 0xafba, 0x1526: 0x1fc2, 0x1527: 0x0040, 0x1528: 0xafca, 0x1529: 0xafda,
+       0x152a: 0xafea, 0x152b: 0xaffa, 0x152c: 0x0040, 0x152d: 0x0040, 0x152e: 0x0040, 0x152f: 0x0040,
+       0x1530: 0x7fd6, 0x1531: 0xb009, 0x1532: 0x7ff6, 0x1533: 0x0008, 0x1534: 0x8016, 0x1535: 0x0040,
+       0x1536: 0x8036, 0x1537: 0xb031, 0x1538: 0x8056, 0x1539: 0xb059, 0x153a: 0x8076, 0x153b: 0xb081,
+       0x153c: 0x8096, 0x153d: 0xb0a9, 0x153e: 0x80b6, 0x153f: 0xb0d1,
+       // Block 0x55, offset 0x1540
+       0x1540: 0xb0f9, 0x1541: 0xb111, 0x1542: 0xb111, 0x1543: 0xb129, 0x1544: 0xb129, 0x1545: 0xb141,
+       0x1546: 0xb141, 0x1547: 0xb159, 0x1548: 0xb159, 0x1549: 0xb171, 0x154a: 0xb171, 0x154b: 0xb171,
+       0x154c: 0xb171, 0x154d: 0xb189, 0x154e: 0xb189, 0x154f: 0xb1a1, 0x1550: 0xb1a1, 0x1551: 0xb1a1,
+       0x1552: 0xb1a1, 0x1553: 0xb1b9, 0x1554: 0xb1b9, 0x1555: 0xb1d1, 0x1556: 0xb1d1, 0x1557: 0xb1d1,
+       0x1558: 0xb1d1, 0x1559: 0xb1e9, 0x155a: 0xb1e9, 0x155b: 0xb1e9, 0x155c: 0xb1e9, 0x155d: 0xb201,
+       0x155e: 0xb201, 0x155f: 0xb201, 0x1560: 0xb201, 0x1561: 0xb219, 0x1562: 0xb219, 0x1563: 0xb219,
+       0x1564: 0xb219, 0x1565: 0xb231, 0x1566: 0xb231, 0x1567: 0xb231, 0x1568: 0xb231, 0x1569: 0xb249,
+       0x156a: 0xb249, 0x156b: 0xb261, 0x156c: 0xb261, 0x156d: 0xb279, 0x156e: 0xb279, 0x156f: 0xb291,
+       0x1570: 0xb291, 0x1571: 0xb2a9, 0x1572: 0xb2a9, 0x1573: 0xb2a9, 0x1574: 0xb2a9, 0x1575: 0xb2c1,
+       0x1576: 0xb2c1, 0x1577: 0xb2c1, 0x1578: 0xb2c1, 0x1579: 0xb2d9, 0x157a: 0xb2d9, 0x157b: 0xb2d9,
+       0x157c: 0xb2d9, 0x157d: 0xb2f1, 0x157e: 0xb2f1, 0x157f: 0xb2f1,
+       // Block 0x56, offset 0x1580
+       0x1580: 0xb2f1, 0x1581: 0xb309, 0x1582: 0xb309, 0x1583: 0xb309, 0x1584: 0xb309, 0x1585: 0xb321,
+       0x1586: 0xb321, 0x1587: 0xb321, 0x1588: 0xb321, 0x1589: 0xb339, 0x158a: 0xb339, 0x158b: 0xb339,
+       0x158c: 0xb339, 0x158d: 0xb351, 0x158e: 0xb351, 0x158f: 0xb351, 0x1590: 0xb351, 0x1591: 0xb369,
+       0x1592: 0xb369, 0x1593: 0xb369, 0x1594: 0xb369, 0x1595: 0xb381, 0x1596: 0xb381, 0x1597: 0xb381,
+       0x1598: 0xb381, 0x1599: 0xb399, 0x159a: 0xb399, 0x159b: 0xb399, 0x159c: 0xb399, 0x159d: 0xb3b1,
+       0x159e: 0xb3b1, 0x159f: 0xb3b1, 0x15a0: 0xb3b1, 0x15a1: 0xb3c9, 0x15a2: 0xb3c9, 0x15a3: 0xb3c9,
+       0x15a4: 0xb3c9, 0x15a5: 0xb3e1, 0x15a6: 0xb3e1, 0x15a7: 0xb3e1, 0x15a8: 0xb3e1, 0x15a9: 0xb3f9,
+       0x15aa: 0xb3f9, 0x15ab: 0xb3f9, 0x15ac: 0xb3f9, 0x15ad: 0xb411, 0x15ae: 0xb411, 0x15af: 0x7ab1,
+       0x15b0: 0x7ab1, 0x15b1: 0xb429, 0x15b2: 0xb429, 0x15b3: 0xb429, 0x15b4: 0xb429, 0x15b5: 0xb441,
+       0x15b6: 0xb441, 0x15b7: 0xb469, 0x15b8: 0xb469, 0x15b9: 0xb491, 0x15ba: 0xb491, 0x15bb: 0xb4b9,
+       0x15bc: 0xb4b9, 0x15bd: 0x0040, 0x15be: 0x0040, 0x15bf: 0x03c0,
+       // Block 0x57, offset 0x15c0
+       0x15c0: 0x0040, 0x15c1: 0xaefa, 0x15c2: 0xb4e2, 0x15c3: 0xaf6a, 0x15c4: 0xafda, 0x15c5: 0xafea,
+       0x15c6: 0xaf7a, 0x15c7: 0xb4f2, 0x15c8: 0x1fd2, 0x15c9: 0x1fe2, 0x15ca: 0xaf8a, 0x15cb: 0x1fb2,
+       0x15cc: 0xaeda, 0x15cd: 0xaf99, 0x15ce: 0x29d1, 0x15cf: 0xb502, 0x15d0: 0x1f41, 0x15d1: 0x00c9,
+       0x15d2: 0x0069, 0x15d3: 0x0079, 0x15d4: 0x1f51, 0x15d5: 0x1f61, 0x15d6: 0x1f71, 0x15d7: 0x1f81,
+       0x15d8: 0x1f91, 0x15d9: 0x1fa1, 0x15da: 0xaeea, 0x15db: 0x03c2, 0x15dc: 0xafaa, 0x15dd: 0x1fc2,
+       0x15de: 0xafba, 0x15df: 0xaf0a, 0x15e0: 0xaffa, 0x15e1: 0x0039, 0x15e2: 0x0ee9, 0x15e3: 0x1159,
+       0x15e4: 0x0ef9, 0x15e5: 0x0f09, 0x15e6: 0x1199, 0x15e7: 0x0f31, 0x15e8: 0x0249, 0x15e9: 0x0f41,
+       0x15ea: 0x0259, 0x15eb: 0x0f51, 0x15ec: 0x0359, 0x15ed: 0x0f61, 0x15ee: 0x0f71, 0x15ef: 0x00d9,
+       0x15f0: 0x0f99, 0x15f1: 0x2039, 0x15f2: 0x0269, 0x15f3: 0x01d9, 0x15f4: 0x0fa9, 0x15f5: 0x0fb9,
+       0x15f6: 0x1089, 0x15f7: 0x0279, 0x15f8: 0x0369, 0x15f9: 0x0289, 0x15fa: 0x13d1, 0x15fb: 0xaf4a,
+       0x15fc: 0xafca, 0x15fd: 0xaf5a, 0x15fe: 0xb512, 0x15ff: 0xaf1a,
+       // Block 0x58, offset 0x1600
+       0x1600: 0x1caa, 0x1601: 0x0039, 0x1602: 0x0ee9, 0x1603: 0x1159, 0x1604: 0x0ef9, 0x1605: 0x0f09,
+       0x1606: 0x1199, 0x1607: 0x0f31, 0x1608: 0x0249, 0x1609: 0x0f41, 0x160a: 0x0259, 0x160b: 0x0f51,
+       0x160c: 0x0359, 0x160d: 0x0f61, 0x160e: 0x0f71, 0x160f: 0x00d9, 0x1610: 0x0f99, 0x1611: 0x2039,
+       0x1612: 0x0269, 0x1613: 0x01d9, 0x1614: 0x0fa9, 0x1615: 0x0fb9, 0x1616: 0x1089, 0x1617: 0x0279,
+       0x1618: 0x0369, 0x1619: 0x0289, 0x161a: 0x13d1, 0x161b: 0xaf2a, 0x161c: 0xb522, 0x161d: 0xaf3a,
+       0x161e: 0xb532, 0x161f: 0x80d5, 0x1620: 0x80f5, 0x1621: 0x29d1, 0x1622: 0x8115, 0x1623: 0x8115,
+       0x1624: 0x8135, 0x1625: 0x8155, 0x1626: 0x8175, 0x1627: 0x8195, 0x1628: 0x81b5, 0x1629: 0x81d5,
+       0x162a: 0x81f5, 0x162b: 0x8215, 0x162c: 0x8235, 0x162d: 0x8255, 0x162e: 0x8275, 0x162f: 0x8295,
+       0x1630: 0x82b5, 0x1631: 0x82d5, 0x1632: 0x82f5, 0x1633: 0x8315, 0x1634: 0x8335, 0x1635: 0x8355,
+       0x1636: 0x8375, 0x1637: 0x8395, 0x1638: 0x83b5, 0x1639: 0x83d5, 0x163a: 0x83f5, 0x163b: 0x8415,
+       0x163c: 0x81b5, 0x163d: 0x8435, 0x163e: 0x8455, 0x163f: 0x8215,
+       // Block 0x59, offset 0x1640
+       0x1640: 0x8475, 0x1641: 0x8495, 0x1642: 0x84b5, 0x1643: 0x84d5, 0x1644: 0x84f5, 0x1645: 0x8515,
+       0x1646: 0x8535, 0x1647: 0x8555, 0x1648: 0x84d5, 0x1649: 0x8575, 0x164a: 0x84d5, 0x164b: 0x8595,
+       0x164c: 0x8595, 0x164d: 0x85b5, 0x164e: 0x85b5, 0x164f: 0x85d5, 0x1650: 0x8515, 0x1651: 0x85f5,
+       0x1652: 0x8615, 0x1653: 0x85f5, 0x1654: 0x8635, 0x1655: 0x8615, 0x1656: 0x8655, 0x1657: 0x8655,
+       0x1658: 0x8675, 0x1659: 0x8675, 0x165a: 0x8695, 0x165b: 0x8695, 0x165c: 0x8615, 0x165d: 0x8115,
+       0x165e: 0x86b5, 0x165f: 0x86d5, 0x1660: 0x0040, 0x1661: 0x86f5, 0x1662: 0x8715, 0x1663: 0x8735,
+       0x1664: 0x8755, 0x1665: 0x8735, 0x1666: 0x8775, 0x1667: 0x8795, 0x1668: 0x87b5, 0x1669: 0x87b5,
+       0x166a: 0x87d5, 0x166b: 0x87d5, 0x166c: 0x87f5, 0x166d: 0x87f5, 0x166e: 0x87d5, 0x166f: 0x87d5,
+       0x1670: 0x8815, 0x1671: 0x8835, 0x1672: 0x8855, 0x1673: 0x8875, 0x1674: 0x8895, 0x1675: 0x88b5,
+       0x1676: 0x88b5, 0x1677: 0x88b5, 0x1678: 0x88d5, 0x1679: 0x88d5, 0x167a: 0x88d5, 0x167b: 0x88d5,
+       0x167c: 0x87b5, 0x167d: 0x87b5, 0x167e: 0x87b5, 0x167f: 0x0040,
+       // Block 0x5a, offset 0x1680
+       0x1680: 0x0040, 0x1681: 0x0040, 0x1682: 0x8715, 0x1683: 0x86f5, 0x1684: 0x88f5, 0x1685: 0x86f5,
+       0x1686: 0x8715, 0x1687: 0x86f5, 0x1688: 0x0040, 0x1689: 0x0040, 0x168a: 0x8915, 0x168b: 0x8715,
+       0x168c: 0x8935, 0x168d: 0x88f5, 0x168e: 0x8935, 0x168f: 0x8715, 0x1690: 0x0040, 0x1691: 0x0040,
+       0x1692: 0x8955, 0x1693: 0x8975, 0x1694: 0x8875, 0x1695: 0x8935, 0x1696: 0x88f5, 0x1697: 0x8935,
+       0x1698: 0x0040, 0x1699: 0x0040, 0x169a: 0x8995, 0x169b: 0x89b5, 0x169c: 0x8995, 0x169d: 0x0040,
+       0x169e: 0x0040, 0x169f: 0x0040, 0x16a0: 0xb541, 0x16a1: 0xb559, 0x16a2: 0xb571, 0x16a3: 0x89d6,
+       0x16a4: 0xb589, 0x16a5: 0xb5a1, 0x16a6: 0x89f5, 0x16a7: 0x0040, 0x16a8: 0x8a15, 0x16a9: 0x8a35,
+       0x16aa: 0x8a55, 0x16ab: 0x8a35, 0x16ac: 0x8a75, 0x16ad: 0x8a95, 0x16ae: 0x8ab5, 0x16af: 0x0040,
+       0x16b0: 0x0040, 0x16b1: 0x0040, 0x16b2: 0x0040, 0x16b3: 0x0040, 0x16b4: 0x0040, 0x16b5: 0x0040,
+       0x16b6: 0x0040, 0x16b7: 0x0040, 0x16b8: 0x0040, 0x16b9: 0x0340, 0x16ba: 0x0340, 0x16bb: 0x0340,
+       0x16bc: 0x0040, 0x16bd: 0x0040, 0x16be: 0x0040, 0x16bf: 0x0040,
+       // Block 0x5b, offset 0x16c0
+       0x16c0: 0x0208, 0x16c1: 0x0208, 0x16c2: 0x0208, 0x16c3: 0x0208, 0x16c4: 0x0208, 0x16c5: 0x0408,
+       0x16c6: 0x0008, 0x16c7: 0x0408, 0x16c8: 0x0018, 0x16c9: 0x0408, 0x16ca: 0x0408, 0x16cb: 0x0008,
+       0x16cc: 0x0008, 0x16cd: 0x0108, 0x16ce: 0x0408, 0x16cf: 0x0408, 0x16d0: 0x0408, 0x16d1: 0x0408,
+       0x16d2: 0x0408, 0x16d3: 0x0208, 0x16d4: 0x0208, 0x16d5: 0x0208, 0x16d6: 0x0208, 0x16d7: 0x0108,
+       0x16d8: 0x0208, 0x16d9: 0x0208, 0x16da: 0x0208, 0x16db: 0x0208, 0x16dc: 0x0208, 0x16dd: 0x0408,
+       0x16de: 0x0208, 0x16df: 0x0208, 0x16e0: 0x0208, 0x16e1: 0x0408, 0x16e2: 0x0008, 0x16e3: 0x0008,
+       0x16e4: 0x0408, 0x16e5: 0x1308, 0x16e6: 0x1308, 0x16e7: 0x0040, 0x16e8: 0x0040, 0x16e9: 0x0040,
+       0x16ea: 0x0040, 0x16eb: 0x0218, 0x16ec: 0x0218, 0x16ed: 0x0218, 0x16ee: 0x0218, 0x16ef: 0x0418,
+       0x16f0: 0x0018, 0x16f1: 0x0018, 0x16f2: 0x0018, 0x16f3: 0x0018, 0x16f4: 0x0018, 0x16f5: 0x0018,
+       0x16f6: 0x0018, 0x16f7: 0x0040, 0x16f8: 0x0040, 0x16f9: 0x0040, 0x16fa: 0x0040, 0x16fb: 0x0040,
+       0x16fc: 0x0040, 0x16fd: 0x0040, 0x16fe: 0x0040, 0x16ff: 0x0040,
+       // Block 0x5c, offset 0x1700
+       0x1700: 0x0208, 0x1701: 0x0408, 0x1702: 0x0208, 0x1703: 0x0408, 0x1704: 0x0408, 0x1705: 0x0408,
+       0x1706: 0x0208, 0x1707: 0x0208, 0x1708: 0x0208, 0x1709: 0x0408, 0x170a: 0x0208, 0x170b: 0x0208,
+       0x170c: 0x0408, 0x170d: 0x0208, 0x170e: 0x0408, 0x170f: 0x0408, 0x1710: 0x0208, 0x1711: 0x0408,
+       0x1712: 0x0040, 0x1713: 0x0040, 0x1714: 0x0040, 0x1715: 0x0040, 0x1716: 0x0040, 0x1717: 0x0040,
+       0x1718: 0x0040, 0x1719: 0x0018, 0x171a: 0x0018, 0x171b: 0x0018, 0x171c: 0x0018, 0x171d: 0x0040,
+       0x171e: 0x0040, 0x171f: 0x0040, 0x1720: 0x0040, 0x1721: 0x0040, 0x1722: 0x0040, 0x1723: 0x0040,
+       0x1724: 0x0040, 0x1725: 0x0040, 0x1726: 0x0040, 0x1727: 0x0040, 0x1728: 0x0040, 0x1729: 0x0418,
+       0x172a: 0x0418, 0x172b: 0x0418, 0x172c: 0x0418, 0x172d: 0x0218, 0x172e: 0x0218, 0x172f: 0x0018,
+       0x1730: 0x0040, 0x1731: 0x0040, 0x1732: 0x0040, 0x1733: 0x0040, 0x1734: 0x0040, 0x1735: 0x0040,
+       0x1736: 0x0040, 0x1737: 0x0040, 0x1738: 0x0040, 0x1739: 0x0040, 0x173a: 0x0040, 0x173b: 0x0040,
+       0x173c: 0x0040, 0x173d: 0x0040, 0x173e: 0x0040, 0x173f: 0x0040,
+       // Block 0x5d, offset 0x1740
+       0x1740: 0x1308, 0x1741: 0x1308, 0x1742: 0x1008, 0x1743: 0x1008, 0x1744: 0x0040, 0x1745: 0x0008,
+       0x1746: 0x0008, 0x1747: 0x0008, 0x1748: 0x0008, 0x1749: 0x0008, 0x174a: 0x0008, 0x174b: 0x0008,
+       0x174c: 0x0008, 0x174d: 0x0040, 0x174e: 0x0040, 0x174f: 0x0008, 0x1750: 0x0008, 0x1751: 0x0040,
+       0x1752: 0x0040, 0x1753: 0x0008, 0x1754: 0x0008, 0x1755: 0x0008, 0x1756: 0x0008, 0x1757: 0x0008,
+       0x1758: 0x0008, 0x1759: 0x0008, 0x175a: 0x0008, 0x175b: 0x0008, 0x175c: 0x0008, 0x175d: 0x0008,
+       0x175e: 0x0008, 0x175f: 0x0008, 0x1760: 0x0008, 0x1761: 0x0008, 0x1762: 0x0008, 0x1763: 0x0008,
+       0x1764: 0x0008, 0x1765: 0x0008, 0x1766: 0x0008, 0x1767: 0x0008, 0x1768: 0x0008, 0x1769: 0x0040,
+       0x176a: 0x0008, 0x176b: 0x0008, 0x176c: 0x0008, 0x176d: 0x0008, 0x176e: 0x0008, 0x176f: 0x0008,
+       0x1770: 0x0008, 0x1771: 0x0040, 0x1772: 0x0008, 0x1773: 0x0008, 0x1774: 0x0040, 0x1775: 0x0008,
+       0x1776: 0x0008, 0x1777: 0x0008, 0x1778: 0x0008, 0x1779: 0x0008, 0x177a: 0x0040, 0x177b: 0x0040,
+       0x177c: 0x1308, 0x177d: 0x0008, 0x177e: 0x1008, 0x177f: 0x1008,
+       // Block 0x5e, offset 0x1780
+       0x1780: 0x1308, 0x1781: 0x1008, 0x1782: 0x1008, 0x1783: 0x1008, 0x1784: 0x1008, 0x1785: 0x0040,
+       0x1786: 0x0040, 0x1787: 0x1008, 0x1788: 0x1008, 0x1789: 0x0040, 0x178a: 0x0040, 0x178b: 0x1008,
+       0x178c: 0x1008, 0x178d: 0x1808, 0x178e: 0x0040, 0x178f: 0x0040, 0x1790: 0x0008, 0x1791: 0x0040,
+       0x1792: 0x0040, 0x1793: 0x0040, 0x1794: 0x0040, 0x1795: 0x0040, 0x1796: 0x0040, 0x1797: 0x1008,
+       0x1798: 0x0040, 0x1799: 0x0040, 0x179a: 0x0040, 0x179b: 0x0040, 0x179c: 0x0040, 0x179d: 0x0008,
+       0x179e: 0x0008, 0x179f: 0x0008, 0x17a0: 0x0008, 0x17a1: 0x0008, 0x17a2: 0x1008, 0x17a3: 0x1008,
+       0x17a4: 0x0040, 0x17a5: 0x0040, 0x17a6: 0x1308, 0x17a7: 0x1308, 0x17a8: 0x1308, 0x17a9: 0x1308,
+       0x17aa: 0x1308, 0x17ab: 0x1308, 0x17ac: 0x1308, 0x17ad: 0x0040, 0x17ae: 0x0040, 0x17af: 0x0040,
+       0x17b0: 0x1308, 0x17b1: 0x1308, 0x17b2: 0x1308, 0x17b3: 0x1308, 0x17b4: 0x1308, 0x17b5: 0x0040,
+       0x17b6: 0x0040, 0x17b7: 0x0040, 0x17b8: 0x0040, 0x17b9: 0x0040, 0x17ba: 0x0040, 0x17bb: 0x0040,
+       0x17bc: 0x0040, 0x17bd: 0x0040, 0x17be: 0x0040, 0x17bf: 0x0040,
+       // Block 0x5f, offset 0x17c0
+       0x17c0: 0x0039, 0x17c1: 0x0ee9, 0x17c2: 0x1159, 0x17c3: 0x0ef9, 0x17c4: 0x0f09, 0x17c5: 0x1199,
+       0x17c6: 0x0f31, 0x17c7: 0x0249, 0x17c8: 0x0f41, 0x17c9: 0x0259, 0x17ca: 0x0f51, 0x17cb: 0x0359,
+       0x17cc: 0x0f61, 0x17cd: 0x0f71, 0x17ce: 0x00d9, 0x17cf: 0x0f99, 0x17d0: 0x2039, 0x17d1: 0x0269,
+       0x17d2: 0x01d9, 0x17d3: 0x0fa9, 0x17d4: 0x0fb9, 0x17d5: 0x1089, 0x17d6: 0x0279, 0x17d7: 0x0369,
+       0x17d8: 0x0289, 0x17d9: 0x13d1, 0x17da: 0x0039, 0x17db: 0x0ee9, 0x17dc: 0x1159, 0x17dd: 0x0ef9,
+       0x17de: 0x0f09, 0x17df: 0x1199, 0x17e0: 0x0f31, 0x17e1: 0x0249, 0x17e2: 0x0f41, 0x17e3: 0x0259,
+       0x17e4: 0x0f51, 0x17e5: 0x0359, 0x17e6: 0x0f61, 0x17e7: 0x0f71, 0x17e8: 0x00d9, 0x17e9: 0x0f99,
+       0x17ea: 0x2039, 0x17eb: 0x0269, 0x17ec: 0x01d9, 0x17ed: 0x0fa9, 0x17ee: 0x0fb9, 0x17ef: 0x1089,
+       0x17f0: 0x0279, 0x17f1: 0x0369, 0x17f2: 0x0289, 0x17f3: 0x13d1, 0x17f4: 0x0039, 0x17f5: 0x0ee9,
+       0x17f6: 0x1159, 0x17f7: 0x0ef9, 0x17f8: 0x0f09, 0x17f9: 0x1199, 0x17fa: 0x0f31, 0x17fb: 0x0249,
+       0x17fc: 0x0f41, 0x17fd: 0x0259, 0x17fe: 0x0f51, 0x17ff: 0x0359,
+       // Block 0x60, offset 0x1800
+       0x1800: 0x0f61, 0x1801: 0x0f71, 0x1802: 0x00d9, 0x1803: 0x0f99, 0x1804: 0x2039, 0x1805: 0x0269,
+       0x1806: 0x01d9, 0x1807: 0x0fa9, 0x1808: 0x0fb9, 0x1809: 0x1089, 0x180a: 0x0279, 0x180b: 0x0369,
+       0x180c: 0x0289, 0x180d: 0x13d1, 0x180e: 0x0039, 0x180f: 0x0ee9, 0x1810: 0x1159, 0x1811: 0x0ef9,
+       0x1812: 0x0f09, 0x1813: 0x1199, 0x1814: 0x0f31, 0x1815: 0x0040, 0x1816: 0x0f41, 0x1817: 0x0259,
+       0x1818: 0x0f51, 0x1819: 0x0359, 0x181a: 0x0f61, 0x181b: 0x0f71, 0x181c: 0x00d9, 0x181d: 0x0f99,
+       0x181e: 0x2039, 0x181f: 0x0269, 0x1820: 0x01d9, 0x1821: 0x0fa9, 0x1822: 0x0fb9, 0x1823: 0x1089,
+       0x1824: 0x0279, 0x1825: 0x0369, 0x1826: 0x0289, 0x1827: 0x13d1, 0x1828: 0x0039, 0x1829: 0x0ee9,
+       0x182a: 0x1159, 0x182b: 0x0ef9, 0x182c: 0x0f09, 0x182d: 0x1199, 0x182e: 0x0f31, 0x182f: 0x0249,
+       0x1830: 0x0f41, 0x1831: 0x0259, 0x1832: 0x0f51, 0x1833: 0x0359, 0x1834: 0x0f61, 0x1835: 0x0f71,
+       0x1836: 0x00d9, 0x1837: 0x0f99, 0x1838: 0x2039, 0x1839: 0x0269, 0x183a: 0x01d9, 0x183b: 0x0fa9,
+       0x183c: 0x0fb9, 0x183d: 0x1089, 0x183e: 0x0279, 0x183f: 0x0369,
+       // Block 0x61, offset 0x1840
+       0x1840: 0x0289, 0x1841: 0x13d1, 0x1842: 0x0039, 0x1843: 0x0ee9, 0x1844: 0x1159, 0x1845: 0x0ef9,
+       0x1846: 0x0f09, 0x1847: 0x1199, 0x1848: 0x0f31, 0x1849: 0x0249, 0x184a: 0x0f41, 0x184b: 0x0259,
+       0x184c: 0x0f51, 0x184d: 0x0359, 0x184e: 0x0f61, 0x184f: 0x0f71, 0x1850: 0x00d9, 0x1851: 0x0f99,
+       0x1852: 0x2039, 0x1853: 0x0269, 0x1854: 0x01d9, 0x1855: 0x0fa9, 0x1856: 0x0fb9, 0x1857: 0x1089,
+       0x1858: 0x0279, 0x1859: 0x0369, 0x185a: 0x0289, 0x185b: 0x13d1, 0x185c: 0x0039, 0x185d: 0x0040,
+       0x185e: 0x1159, 0x185f: 0x0ef9, 0x1860: 0x0040, 0x1861: 0x0040, 0x1862: 0x0f31, 0x1863: 0x0040,
+       0x1864: 0x0040, 0x1865: 0x0259, 0x1866: 0x0f51, 0x1867: 0x0040, 0x1868: 0x0040, 0x1869: 0x0f71,
+       0x186a: 0x00d9, 0x186b: 0x0f99, 0x186c: 0x2039, 0x186d: 0x0040, 0x186e: 0x01d9, 0x186f: 0x0fa9,
+       0x1870: 0x0fb9, 0x1871: 0x1089, 0x1872: 0x0279, 0x1873: 0x0369, 0x1874: 0x0289, 0x1875: 0x13d1,
+       0x1876: 0x0039, 0x1877: 0x0ee9, 0x1878: 0x1159, 0x1879: 0x0ef9, 0x187a: 0x0040, 0x187b: 0x1199,
+       0x187c: 0x0040, 0x187d: 0x0249, 0x187e: 0x0f41, 0x187f: 0x0259,
+       // Block 0x62, offset 0x1880
+       0x1880: 0x0f51, 0x1881: 0x0359, 0x1882: 0x0f61, 0x1883: 0x0f71, 0x1884: 0x0040, 0x1885: 0x0f99,
+       0x1886: 0x2039, 0x1887: 0x0269, 0x1888: 0x01d9, 0x1889: 0x0fa9, 0x188a: 0x0fb9, 0x188b: 0x1089,
+       0x188c: 0x0279, 0x188d: 0x0369, 0x188e: 0x0289, 0x188f: 0x13d1, 0x1890: 0x0039, 0x1891: 0x0ee9,
+       0x1892: 0x1159, 0x1893: 0x0ef9, 0x1894: 0x0f09, 0x1895: 0x1199, 0x1896: 0x0f31, 0x1897: 0x0249,
+       0x1898: 0x0f41, 0x1899: 0x0259, 0x189a: 0x0f51, 0x189b: 0x0359, 0x189c: 0x0f61, 0x189d: 0x0f71,
+       0x189e: 0x00d9, 0x189f: 0x0f99, 0x18a0: 0x2039, 0x18a1: 0x0269, 0x18a2: 0x01d9, 0x18a3: 0x0fa9,
+       0x18a4: 0x0fb9, 0x18a5: 0x1089, 0x18a6: 0x0279, 0x18a7: 0x0369, 0x18a8: 0x0289, 0x18a9: 0x13d1,
+       0x18aa: 0x0039, 0x18ab: 0x0ee9, 0x18ac: 0x1159, 0x18ad: 0x0ef9, 0x18ae: 0x0f09, 0x18af: 0x1199,
+       0x18b0: 0x0f31, 0x18b1: 0x0249, 0x18b2: 0x0f41, 0x18b3: 0x0259, 0x18b4: 0x0f51, 0x18b5: 0x0359,
+       0x18b6: 0x0f61, 0x18b7: 0x0f71, 0x18b8: 0x00d9, 0x18b9: 0x0f99, 0x18ba: 0x2039, 0x18bb: 0x0269,
+       0x18bc: 0x01d9, 0x18bd: 0x0fa9, 0x18be: 0x0fb9, 0x18bf: 0x1089,
+       // Block 0x63, offset 0x18c0
+       0x18c0: 0x0279, 0x18c1: 0x0369, 0x18c2: 0x0289, 0x18c3: 0x13d1, 0x18c4: 0x0039, 0x18c5: 0x0ee9,
+       0x18c6: 0x0040, 0x18c7: 0x0ef9, 0x18c8: 0x0f09, 0x18c9: 0x1199, 0x18ca: 0x0f31, 0x18cb: 0x0040,
+       0x18cc: 0x0040, 0x18cd: 0x0259, 0x18ce: 0x0f51, 0x18cf: 0x0359, 0x18d0: 0x0f61, 0x18d1: 0x0f71,
+       0x18d2: 0x00d9, 0x18d3: 0x0f99, 0x18d4: 0x2039, 0x18d5: 0x0040, 0x18d6: 0x01d9, 0x18d7: 0x0fa9,
+       0x18d8: 0x0fb9, 0x18d9: 0x1089, 0x18da: 0x0279, 0x18db: 0x0369, 0x18dc: 0x0289, 0x18dd: 0x0040,
+       0x18de: 0x0039, 0x18df: 0x0ee9, 0x18e0: 0x1159, 0x18e1: 0x0ef9, 0x18e2: 0x0f09, 0x18e3: 0x1199,
+       0x18e4: 0x0f31, 0x18e5: 0x0249, 0x18e6: 0x0f41, 0x18e7: 0x0259, 0x18e8: 0x0f51, 0x18e9: 0x0359,
+       0x18ea: 0x0f61, 0x18eb: 0x0f71, 0x18ec: 0x00d9, 0x18ed: 0x0f99, 0x18ee: 0x2039, 0x18ef: 0x0269,
+       0x18f0: 0x01d9, 0x18f1: 0x0fa9, 0x18f2: 0x0fb9, 0x18f3: 0x1089, 0x18f4: 0x0279, 0x18f5: 0x0369,
+       0x18f6: 0x0289, 0x18f7: 0x13d1, 0x18f8: 0x0039, 0x18f9: 0x0ee9, 0x18fa: 0x0040, 0x18fb: 0x0ef9,
+       0x18fc: 0x0f09, 0x18fd: 0x1199, 0x18fe: 0x0f31, 0x18ff: 0x0040,
+       // Block 0x64, offset 0x1900
+       0x1900: 0x0f41, 0x1901: 0x0259, 0x1902: 0x0f51, 0x1903: 0x0359, 0x1904: 0x0f61, 0x1905: 0x0040,
+       0x1906: 0x00d9, 0x1907: 0x0040, 0x1908: 0x0040, 0x1909: 0x0040, 0x190a: 0x01d9, 0x190b: 0x0fa9,
+       0x190c: 0x0fb9, 0x190d: 0x1089, 0x190e: 0x0279, 0x190f: 0x0369, 0x1910: 0x0289, 0x1911: 0x0040,
+       0x1912: 0x0039, 0x1913: 0x0ee9, 0x1914: 0x1159, 0x1915: 0x0ef9, 0x1916: 0x0f09, 0x1917: 0x1199,
+       0x1918: 0x0f31, 0x1919: 0x0249, 0x191a: 0x0f41, 0x191b: 0x0259, 0x191c: 0x0f51, 0x191d: 0x0359,
+       0x191e: 0x0f61, 0x191f: 0x0f71, 0x1920: 0x00d9, 0x1921: 0x0f99, 0x1922: 0x2039, 0x1923: 0x0269,
+       0x1924: 0x01d9, 0x1925: 0x0fa9, 0x1926: 0x0fb9, 0x1927: 0x1089, 0x1928: 0x0279, 0x1929: 0x0369,
+       0x192a: 0x0289, 0x192b: 0x13d1, 0x192c: 0x0039, 0x192d: 0x0ee9, 0x192e: 0x1159, 0x192f: 0x0ef9,
+       0x1930: 0x0f09, 0x1931: 0x1199, 0x1932: 0x0f31, 0x1933: 0x0249, 0x1934: 0x0f41, 0x1935: 0x0259,
+       0x1936: 0x0f51, 0x1937: 0x0359, 0x1938: 0x0f61, 0x1939: 0x0f71, 0x193a: 0x00d9, 0x193b: 0x0f99,
+       0x193c: 0x2039, 0x193d: 0x0269, 0x193e: 0x01d9, 0x193f: 0x0fa9,
+       // Block 0x65, offset 0x1940
+       0x1940: 0x0fb9, 0x1941: 0x1089, 0x1942: 0x0279, 0x1943: 0x0369, 0x1944: 0x0289, 0x1945: 0x13d1,
+       0x1946: 0x0039, 0x1947: 0x0ee9, 0x1948: 0x1159, 0x1949: 0x0ef9, 0x194a: 0x0f09, 0x194b: 0x1199,
+       0x194c: 0x0f31, 0x194d: 0x0249, 0x194e: 0x0f41, 0x194f: 0x0259, 0x1950: 0x0f51, 0x1951: 0x0359,
+       0x1952: 0x0f61, 0x1953: 0x0f71, 0x1954: 0x00d9, 0x1955: 0x0f99, 0x1956: 0x2039, 0x1957: 0x0269,
+       0x1958: 0x01d9, 0x1959: 0x0fa9, 0x195a: 0x0fb9, 0x195b: 0x1089, 0x195c: 0x0279, 0x195d: 0x0369,
+       0x195e: 0x0289, 0x195f: 0x13d1, 0x1960: 0x0039, 0x1961: 0x0ee9, 0x1962: 0x1159, 0x1963: 0x0ef9,
+       0x1964: 0x0f09, 0x1965: 0x1199, 0x1966: 0x0f31, 0x1967: 0x0249, 0x1968: 0x0f41, 0x1969: 0x0259,
+       0x196a: 0x0f51, 0x196b: 0x0359, 0x196c: 0x0f61, 0x196d: 0x0f71, 0x196e: 0x00d9, 0x196f: 0x0f99,
+       0x1970: 0x2039, 0x1971: 0x0269, 0x1972: 0x01d9, 0x1973: 0x0fa9, 0x1974: 0x0fb9, 0x1975: 0x1089,
+       0x1976: 0x0279, 0x1977: 0x0369, 0x1978: 0x0289, 0x1979: 0x13d1, 0x197a: 0x0039, 0x197b: 0x0ee9,
+       0x197c: 0x1159, 0x197d: 0x0ef9, 0x197e: 0x0f09, 0x197f: 0x1199,
+       // Block 0x66, offset 0x1980
+       0x1980: 0x0f31, 0x1981: 0x0249, 0x1982: 0x0f41, 0x1983: 0x0259, 0x1984: 0x0f51, 0x1985: 0x0359,
+       0x1986: 0x0f61, 0x1987: 0x0f71, 0x1988: 0x00d9, 0x1989: 0x0f99, 0x198a: 0x2039, 0x198b: 0x0269,
+       0x198c: 0x01d9, 0x198d: 0x0fa9, 0x198e: 0x0fb9, 0x198f: 0x1089, 0x1990: 0x0279, 0x1991: 0x0369,
+       0x1992: 0x0289, 0x1993: 0x13d1, 0x1994: 0x0039, 0x1995: 0x0ee9, 0x1996: 0x1159, 0x1997: 0x0ef9,
+       0x1998: 0x0f09, 0x1999: 0x1199, 0x199a: 0x0f31, 0x199b: 0x0249, 0x199c: 0x0f41, 0x199d: 0x0259,
+       0x199e: 0x0f51, 0x199f: 0x0359, 0x19a0: 0x0f61, 0x19a1: 0x0f71, 0x19a2: 0x00d9, 0x19a3: 0x0f99,
+       0x19a4: 0x2039, 0x19a5: 0x0269, 0x19a6: 0x01d9, 0x19a7: 0x0fa9, 0x19a8: 0x0fb9, 0x19a9: 0x1089,
+       0x19aa: 0x0279, 0x19ab: 0x0369, 0x19ac: 0x0289, 0x19ad: 0x13d1, 0x19ae: 0x0039, 0x19af: 0x0ee9,
+       0x19b0: 0x1159, 0x19b1: 0x0ef9, 0x19b2: 0x0f09, 0x19b3: 0x1199, 0x19b4: 0x0f31, 0x19b5: 0x0249,
+       0x19b6: 0x0f41, 0x19b7: 0x0259, 0x19b8: 0x0f51, 0x19b9: 0x0359, 0x19ba: 0x0f61, 0x19bb: 0x0f71,
+       0x19bc: 0x00d9, 0x19bd: 0x0f99, 0x19be: 0x2039, 0x19bf: 0x0269,
+       // Block 0x67, offset 0x19c0
+       0x19c0: 0x01d9, 0x19c1: 0x0fa9, 0x19c2: 0x0fb9, 0x19c3: 0x1089, 0x19c4: 0x0279, 0x19c5: 0x0369,
+       0x19c6: 0x0289, 0x19c7: 0x13d1, 0x19c8: 0x0039, 0x19c9: 0x0ee9, 0x19ca: 0x1159, 0x19cb: 0x0ef9,
+       0x19cc: 0x0f09, 0x19cd: 0x1199, 0x19ce: 0x0f31, 0x19cf: 0x0249, 0x19d0: 0x0f41, 0x19d1: 0x0259,
+       0x19d2: 0x0f51, 0x19d3: 0x0359, 0x19d4: 0x0f61, 0x19d5: 0x0f71, 0x19d6: 0x00d9, 0x19d7: 0x0f99,
+       0x19d8: 0x2039, 0x19d9: 0x0269, 0x19da: 0x01d9, 0x19db: 0x0fa9, 0x19dc: 0x0fb9, 0x19dd: 0x1089,
+       0x19de: 0x0279, 0x19df: 0x0369, 0x19e0: 0x0289, 0x19e1: 0x13d1, 0x19e2: 0x0039, 0x19e3: 0x0ee9,
+       0x19e4: 0x1159, 0x19e5: 0x0ef9, 0x19e6: 0x0f09, 0x19e7: 0x1199, 0x19e8: 0x0f31, 0x19e9: 0x0249,
+       0x19ea: 0x0f41, 0x19eb: 0x0259, 0x19ec: 0x0f51, 0x19ed: 0x0359, 0x19ee: 0x0f61, 0x19ef: 0x0f71,
+       0x19f0: 0x00d9, 0x19f1: 0x0f99, 0x19f2: 0x2039, 0x19f3: 0x0269, 0x19f4: 0x01d9, 0x19f5: 0x0fa9,
+       0x19f6: 0x0fb9, 0x19f7: 0x1089, 0x19f8: 0x0279, 0x19f9: 0x0369, 0x19fa: 0x0289, 0x19fb: 0x13d1,
+       0x19fc: 0x0039, 0x19fd: 0x0ee9, 0x19fe: 0x1159, 0x19ff: 0x0ef9,
+       // Block 0x68, offset 0x1a00
+       0x1a00: 0x0f09, 0x1a01: 0x1199, 0x1a02: 0x0f31, 0x1a03: 0x0249, 0x1a04: 0x0f41, 0x1a05: 0x0259,
+       0x1a06: 0x0f51, 0x1a07: 0x0359, 0x1a08: 0x0f61, 0x1a09: 0x0f71, 0x1a0a: 0x00d9, 0x1a0b: 0x0f99,
+       0x1a0c: 0x2039, 0x1a0d: 0x0269, 0x1a0e: 0x01d9, 0x1a0f: 0x0fa9, 0x1a10: 0x0fb9, 0x1a11: 0x1089,
+       0x1a12: 0x0279, 0x1a13: 0x0369, 0x1a14: 0x0289, 0x1a15: 0x13d1, 0x1a16: 0x0039, 0x1a17: 0x0ee9,
+       0x1a18: 0x1159, 0x1a19: 0x0ef9, 0x1a1a: 0x0f09, 0x1a1b: 0x1199, 0x1a1c: 0x0f31, 0x1a1d: 0x0249,
+       0x1a1e: 0x0f41, 0x1a1f: 0x0259, 0x1a20: 0x0f51, 0x1a21: 0x0359, 0x1a22: 0x0f61, 0x1a23: 0x0f71,
+       0x1a24: 0x00d9, 0x1a25: 0x0f99, 0x1a26: 0x2039, 0x1a27: 0x0269, 0x1a28: 0x01d9, 0x1a29: 0x0fa9,
+       0x1a2a: 0x0fb9, 0x1a2b: 0x1089, 0x1a2c: 0x0279, 0x1a2d: 0x0369, 0x1a2e: 0x0289, 0x1a2f: 0x13d1,
+       0x1a30: 0x0039, 0x1a31: 0x0ee9, 0x1a32: 0x1159, 0x1a33: 0x0ef9, 0x1a34: 0x0f09, 0x1a35: 0x1199,
+       0x1a36: 0x0f31, 0x1a37: 0x0249, 0x1a38: 0x0f41, 0x1a39: 0x0259, 0x1a3a: 0x0f51, 0x1a3b: 0x0359,
+       0x1a3c: 0x0f61, 0x1a3d: 0x0f71, 0x1a3e: 0x00d9, 0x1a3f: 0x0f99,
+       // Block 0x69, offset 0x1a40
+       0x1a40: 0x2039, 0x1a41: 0x0269, 0x1a42: 0x01d9, 0x1a43: 0x0fa9, 0x1a44: 0x0fb9, 0x1a45: 0x1089,
+       0x1a46: 0x0279, 0x1a47: 0x0369, 0x1a48: 0x0289, 0x1a49: 0x13d1, 0x1a4a: 0x0039, 0x1a4b: 0x0ee9,
+       0x1a4c: 0x1159, 0x1a4d: 0x0ef9, 0x1a4e: 0x0f09, 0x1a4f: 0x1199, 0x1a50: 0x0f31, 0x1a51: 0x0249,
+       0x1a52: 0x0f41, 0x1a53: 0x0259, 0x1a54: 0x0f51, 0x1a55: 0x0359, 0x1a56: 0x0f61, 0x1a57: 0x0f71,
+       0x1a58: 0x00d9, 0x1a59: 0x0f99, 0x1a5a: 0x2039, 0x1a5b: 0x0269, 0x1a5c: 0x01d9, 0x1a5d: 0x0fa9,
+       0x1a5e: 0x0fb9, 0x1a5f: 0x1089, 0x1a60: 0x0279, 0x1a61: 0x0369, 0x1a62: 0x0289, 0x1a63: 0x13d1,
+       0x1a64: 0xba81, 0x1a65: 0xba99, 0x1a66: 0x0040, 0x1a67: 0x0040, 0x1a68: 0xbab1, 0x1a69: 0x1099,
+       0x1a6a: 0x10b1, 0x1a6b: 0x10c9, 0x1a6c: 0xbac9, 0x1a6d: 0xbae1, 0x1a6e: 0xbaf9, 0x1a6f: 0x1429,
+       0x1a70: 0x1a31, 0x1a71: 0xbb11, 0x1a72: 0xbb29, 0x1a73: 0xbb41, 0x1a74: 0xbb59, 0x1a75: 0xbb71,
+       0x1a76: 0xbb89, 0x1a77: 0x2109, 0x1a78: 0x1111, 0x1a79: 0x1429, 0x1a7a: 0xbba1, 0x1a7b: 0xbbb9,
+       0x1a7c: 0xbbd1, 0x1a7d: 0x10e1, 0x1a7e: 0x10f9, 0x1a7f: 0xbbe9,
+       // Block 0x6a, offset 0x1a80
+       0x1a80: 0x2079, 0x1a81: 0xbc01, 0x1a82: 0xbab1, 0x1a83: 0x1099, 0x1a84: 0x10b1, 0x1a85: 0x10c9,
+       0x1a86: 0xbac9, 0x1a87: 0xbae1, 0x1a88: 0xbaf9, 0x1a89: 0x1429, 0x1a8a: 0x1a31, 0x1a8b: 0xbb11,
+       0x1a8c: 0xbb29, 0x1a8d: 0xbb41, 0x1a8e: 0xbb59, 0x1a8f: 0xbb71, 0x1a90: 0xbb89, 0x1a91: 0x2109,
+       0x1a92: 0x1111, 0x1a93: 0xbba1, 0x1a94: 0xbba1, 0x1a95: 0xbbb9, 0x1a96: 0xbbd1, 0x1a97: 0x10e1,
+       0x1a98: 0x10f9, 0x1a99: 0xbbe9, 0x1a9a: 0x2079, 0x1a9b: 0xbc21, 0x1a9c: 0xbac9, 0x1a9d: 0x1429,
+       0x1a9e: 0xbb11, 0x1a9f: 0x10e1, 0x1aa0: 0x1111, 0x1aa1: 0x2109, 0x1aa2: 0xbab1, 0x1aa3: 0x1099,
+       0x1aa4: 0x10b1, 0x1aa5: 0x10c9, 0x1aa6: 0xbac9, 0x1aa7: 0xbae1, 0x1aa8: 0xbaf9, 0x1aa9: 0x1429,
+       0x1aaa: 0x1a31, 0x1aab: 0xbb11, 0x1aac: 0xbb29, 0x1aad: 0xbb41, 0x1aae: 0xbb59, 0x1aaf: 0xbb71,
+       0x1ab0: 0xbb89, 0x1ab1: 0x2109, 0x1ab2: 0x1111, 0x1ab3: 0x1429, 0x1ab4: 0xbba1, 0x1ab5: 0xbbb9,
+       0x1ab6: 0xbbd1, 0x1ab7: 0x10e1, 0x1ab8: 0x10f9, 0x1ab9: 0xbbe9, 0x1aba: 0x2079, 0x1abb: 0xbc01,
+       0x1abc: 0xbab1, 0x1abd: 0x1099, 0x1abe: 0x10b1, 0x1abf: 0x10c9,
+       // Block 0x6b, offset 0x1ac0
+       0x1ac0: 0xbac9, 0x1ac1: 0xbae1, 0x1ac2: 0xbaf9, 0x1ac3: 0x1429, 0x1ac4: 0x1a31, 0x1ac5: 0xbb11,
+       0x1ac6: 0xbb29, 0x1ac7: 0xbb41, 0x1ac8: 0xbb59, 0x1ac9: 0xbb71, 0x1aca: 0xbb89, 0x1acb: 0x2109,
+       0x1acc: 0x1111, 0x1acd: 0xbba1, 0x1ace: 0xbba1, 0x1acf: 0xbbb9, 0x1ad0: 0xbbd1, 0x1ad1: 0x10e1,
+       0x1ad2: 0x10f9, 0x1ad3: 0xbbe9, 0x1ad4: 0x2079, 0x1ad5: 0xbc21, 0x1ad6: 0xbac9, 0x1ad7: 0x1429,
+       0x1ad8: 0xbb11, 0x1ad9: 0x10e1, 0x1ada: 0x1111, 0x1adb: 0x2109, 0x1adc: 0xbab1, 0x1add: 0x1099,
+       0x1ade: 0x10b1, 0x1adf: 0x10c9, 0x1ae0: 0xbac9, 0x1ae1: 0xbae1, 0x1ae2: 0xbaf9, 0x1ae3: 0x1429,
+       0x1ae4: 0x1a31, 0x1ae5: 0xbb11, 0x1ae6: 0xbb29, 0x1ae7: 0xbb41, 0x1ae8: 0xbb59, 0x1ae9: 0xbb71,
+       0x1aea: 0xbb89, 0x1aeb: 0x2109, 0x1aec: 0x1111, 0x1aed: 0x1429, 0x1aee: 0xbba1, 0x1aef: 0xbbb9,
+       0x1af0: 0xbbd1, 0x1af1: 0x10e1, 0x1af2: 0x10f9, 0x1af3: 0xbbe9, 0x1af4: 0x2079, 0x1af5: 0xbc01,
+       0x1af6: 0xbab1, 0x1af7: 0x1099, 0x1af8: 0x10b1, 0x1af9: 0x10c9, 0x1afa: 0xbac9, 0x1afb: 0xbae1,
+       0x1afc: 0xbaf9, 0x1afd: 0x1429, 0x1afe: 0x1a31, 0x1aff: 0xbb11,
+       // Block 0x6c, offset 0x1b00
+       0x1b00: 0xbb29, 0x1b01: 0xbb41, 0x1b02: 0xbb59, 0x1b03: 0xbb71, 0x1b04: 0xbb89, 0x1b05: 0x2109,
+       0x1b06: 0x1111, 0x1b07: 0xbba1, 0x1b08: 0xbba1, 0x1b09: 0xbbb9, 0x1b0a: 0xbbd1, 0x1b0b: 0x10e1,
+       0x1b0c: 0x10f9, 0x1b0d: 0xbbe9, 0x1b0e: 0x2079, 0x1b0f: 0xbc21, 0x1b10: 0xbac9, 0x1b11: 0x1429,
+       0x1b12: 0xbb11, 0x1b13: 0x10e1, 0x1b14: 0x1111, 0x1b15: 0x2109, 0x1b16: 0xbab1, 0x1b17: 0x1099,
+       0x1b18: 0x10b1, 0x1b19: 0x10c9, 0x1b1a: 0xbac9, 0x1b1b: 0xbae1, 0x1b1c: 0xbaf9, 0x1b1d: 0x1429,
+       0x1b1e: 0x1a31, 0x1b1f: 0xbb11, 0x1b20: 0xbb29, 0x1b21: 0xbb41, 0x1b22: 0xbb59, 0x1b23: 0xbb71,
+       0x1b24: 0xbb89, 0x1b25: 0x2109, 0x1b26: 0x1111, 0x1b27: 0x1429, 0x1b28: 0xbba1, 0x1b29: 0xbbb9,
+       0x1b2a: 0xbbd1, 0x1b2b: 0x10e1, 0x1b2c: 0x10f9, 0x1b2d: 0xbbe9, 0x1b2e: 0x2079, 0x1b2f: 0xbc01,
+       0x1b30: 0xbab1, 0x1b31: 0x1099, 0x1b32: 0x10b1, 0x1b33: 0x10c9, 0x1b34: 0xbac9, 0x1b35: 0xbae1,
+       0x1b36: 0xbaf9, 0x1b37: 0x1429, 0x1b38: 0x1a31, 0x1b39: 0xbb11, 0x1b3a: 0xbb29, 0x1b3b: 0xbb41,
+       0x1b3c: 0xbb59, 0x1b3d: 0xbb71, 0x1b3e: 0xbb89, 0x1b3f: 0x2109,
+       // Block 0x6d, offset 0x1b40
+       0x1b40: 0x1111, 0x1b41: 0xbba1, 0x1b42: 0xbba1, 0x1b43: 0xbbb9, 0x1b44: 0xbbd1, 0x1b45: 0x10e1,
+       0x1b46: 0x10f9, 0x1b47: 0xbbe9, 0x1b48: 0x2079, 0x1b49: 0xbc21, 0x1b4a: 0xbac9, 0x1b4b: 0x1429,
+       0x1b4c: 0xbb11, 0x1b4d: 0x10e1, 0x1b4e: 0x1111, 0x1b4f: 0x2109, 0x1b50: 0xbab1, 0x1b51: 0x1099,
+       0x1b52: 0x10b1, 0x1b53: 0x10c9, 0x1b54: 0xbac9, 0x1b55: 0xbae1, 0x1b56: 0xbaf9, 0x1b57: 0x1429,
+       0x1b58: 0x1a31, 0x1b59: 0xbb11, 0x1b5a: 0xbb29, 0x1b5b: 0xbb41, 0x1b5c: 0xbb59, 0x1b5d: 0xbb71,
+       0x1b5e: 0xbb89, 0x1b5f: 0x2109, 0x1b60: 0x1111, 0x1b61: 0x1429, 0x1b62: 0xbba1, 0x1b63: 0xbbb9,
+       0x1b64: 0xbbd1, 0x1b65: 0x10e1, 0x1b66: 0x10f9, 0x1b67: 0xbbe9, 0x1b68: 0x2079, 0x1b69: 0xbc01,
+       0x1b6a: 0xbab1, 0x1b6b: 0x1099, 0x1b6c: 0x10b1, 0x1b6d: 0x10c9, 0x1b6e: 0xbac9, 0x1b6f: 0xbae1,
+       0x1b70: 0xbaf9, 0x1b71: 0x1429, 0x1b72: 0x1a31, 0x1b73: 0xbb11, 0x1b74: 0xbb29, 0x1b75: 0xbb41,
+       0x1b76: 0xbb59, 0x1b77: 0xbb71, 0x1b78: 0xbb89, 0x1b79: 0x2109, 0x1b7a: 0x1111, 0x1b7b: 0xbba1,
+       0x1b7c: 0xbba1, 0x1b7d: 0xbbb9, 0x1b7e: 0xbbd1, 0x1b7f: 0x10e1,
+       // Block 0x6e, offset 0x1b80
+       0x1b80: 0x10f9, 0x1b81: 0xbbe9, 0x1b82: 0x2079, 0x1b83: 0xbc21, 0x1b84: 0xbac9, 0x1b85: 0x1429,
+       0x1b86: 0xbb11, 0x1b87: 0x10e1, 0x1b88: 0x1111, 0x1b89: 0x2109, 0x1b8a: 0xbc41, 0x1b8b: 0xbc41,
+       0x1b8c: 0x0040, 0x1b8d: 0x0040, 0x1b8e: 0x1f41, 0x1b8f: 0x00c9, 0x1b90: 0x0069, 0x1b91: 0x0079,
+       0x1b92: 0x1f51, 0x1b93: 0x1f61, 0x1b94: 0x1f71, 0x1b95: 0x1f81, 0x1b96: 0x1f91, 0x1b97: 0x1fa1,
+       0x1b98: 0x1f41, 0x1b99: 0x00c9, 0x1b9a: 0x0069, 0x1b9b: 0x0079, 0x1b9c: 0x1f51, 0x1b9d: 0x1f61,
+       0x1b9e: 0x1f71, 0x1b9f: 0x1f81, 0x1ba0: 0x1f91, 0x1ba1: 0x1fa1, 0x1ba2: 0x1f41, 0x1ba3: 0x00c9,
+       0x1ba4: 0x0069, 0x1ba5: 0x0079, 0x1ba6: 0x1f51, 0x1ba7: 0x1f61, 0x1ba8: 0x1f71, 0x1ba9: 0x1f81,
+       0x1baa: 0x1f91, 0x1bab: 0x1fa1, 0x1bac: 0x1f41, 0x1bad: 0x00c9, 0x1bae: 0x0069, 0x1baf: 0x0079,
+       0x1bb0: 0x1f51, 0x1bb1: 0x1f61, 0x1bb2: 0x1f71, 0x1bb3: 0x1f81, 0x1bb4: 0x1f91, 0x1bb5: 0x1fa1,
+       0x1bb6: 0x1f41, 0x1bb7: 0x00c9, 0x1bb8: 0x0069, 0x1bb9: 0x0079, 0x1bba: 0x1f51, 0x1bbb: 0x1f61,
+       0x1bbc: 0x1f71, 0x1bbd: 0x1f81, 0x1bbe: 0x1f91, 0x1bbf: 0x1fa1,
+       // Block 0x6f, offset 0x1bc0
+       0x1bc0: 0xe115, 0x1bc1: 0xe115, 0x1bc2: 0xe135, 0x1bc3: 0xe135, 0x1bc4: 0xe115, 0x1bc5: 0xe115,
+       0x1bc6: 0xe175, 0x1bc7: 0xe175, 0x1bc8: 0xe115, 0x1bc9: 0xe115, 0x1bca: 0xe135, 0x1bcb: 0xe135,
+       0x1bcc: 0xe115, 0x1bcd: 0xe115, 0x1bce: 0xe1f5, 0x1bcf: 0xe1f5, 0x1bd0: 0xe115, 0x1bd1: 0xe115,
+       0x1bd2: 0xe135, 0x1bd3: 0xe135, 0x1bd4: 0xe115, 0x1bd5: 0xe115, 0x1bd6: 0xe175, 0x1bd7: 0xe175,
+       0x1bd8: 0xe115, 0x1bd9: 0xe115, 0x1bda: 0xe135, 0x1bdb: 0xe135, 0x1bdc: 0xe115, 0x1bdd: 0xe115,
+       0x1bde: 0x8b05, 0x1bdf: 0x8b05, 0x1be0: 0x04b5, 0x1be1: 0x04b5, 0x1be2: 0x0208, 0x1be3: 0x0208,
+       0x1be4: 0x0208, 0x1be5: 0x0208, 0x1be6: 0x0208, 0x1be7: 0x0208, 0x1be8: 0x0208, 0x1be9: 0x0208,
+       0x1bea: 0x0208, 0x1beb: 0x0208, 0x1bec: 0x0208, 0x1bed: 0x0208, 0x1bee: 0x0208, 0x1bef: 0x0208,
+       0x1bf0: 0x0208, 0x1bf1: 0x0208, 0x1bf2: 0x0208, 0x1bf3: 0x0208, 0x1bf4: 0x0208, 0x1bf5: 0x0208,
+       0x1bf6: 0x0208, 0x1bf7: 0x0208, 0x1bf8: 0x0208, 0x1bf9: 0x0208, 0x1bfa: 0x0208, 0x1bfb: 0x0208,
+       0x1bfc: 0x0208, 0x1bfd: 0x0208, 0x1bfe: 0x0208, 0x1bff: 0x0208,
+       // Block 0x70, offset 0x1c00
+       0x1c00: 0xb189, 0x1c01: 0xb1a1, 0x1c02: 0xb201, 0x1c03: 0xb249, 0x1c04: 0x0040, 0x1c05: 0xb411,
+       0x1c06: 0xb291, 0x1c07: 0xb219, 0x1c08: 0xb309, 0x1c09: 0xb429, 0x1c0a: 0xb399, 0x1c0b: 0xb3b1,
+       0x1c0c: 0xb3c9, 0x1c0d: 0xb3e1, 0x1c0e: 0xb2a9, 0x1c0f: 0xb339, 0x1c10: 0xb369, 0x1c11: 0xb2d9,
+       0x1c12: 0xb381, 0x1c13: 0xb279, 0x1c14: 0xb2c1, 0x1c15: 0xb1d1, 0x1c16: 0xb1e9, 0x1c17: 0xb231,
+       0x1c18: 0xb261, 0x1c19: 0xb2f1, 0x1c1a: 0xb321, 0x1c1b: 0xb351, 0x1c1c: 0xbc59, 0x1c1d: 0x7949,
+       0x1c1e: 0xbc71, 0x1c1f: 0xbc89, 0x1c20: 0x0040, 0x1c21: 0xb1a1, 0x1c22: 0xb201, 0x1c23: 0x0040,
+       0x1c24: 0xb3f9, 0x1c25: 0x0040, 0x1c26: 0x0040, 0x1c27: 0xb219, 0x1c28: 0x0040, 0x1c29: 0xb429,
+       0x1c2a: 0xb399, 0x1c2b: 0xb3b1, 0x1c2c: 0xb3c9, 0x1c2d: 0xb3e1, 0x1c2e: 0xb2a9, 0x1c2f: 0xb339,
+       0x1c30: 0xb369, 0x1c31: 0xb2d9, 0x1c32: 0xb381, 0x1c33: 0x0040, 0x1c34: 0xb2c1, 0x1c35: 0xb1d1,
+       0x1c36: 0xb1e9, 0x1c37: 0xb231, 0x1c38: 0x0040, 0x1c39: 0xb2f1, 0x1c3a: 0x0040, 0x1c3b: 0xb351,
+       0x1c3c: 0x0040, 0x1c3d: 0x0040, 0x1c3e: 0x0040, 0x1c3f: 0x0040,
+       // Block 0x71, offset 0x1c40
+       0x1c40: 0x0040, 0x1c41: 0x0040, 0x1c42: 0xb201, 0x1c43: 0x0040, 0x1c44: 0x0040, 0x1c45: 0x0040,
+       0x1c46: 0x0040, 0x1c47: 0xb219, 0x1c48: 0x0040, 0x1c49: 0xb429, 0x1c4a: 0x0040, 0x1c4b: 0xb3b1,
+       0x1c4c: 0x0040, 0x1c4d: 0xb3e1, 0x1c4e: 0xb2a9, 0x1c4f: 0xb339, 0x1c50: 0x0040, 0x1c51: 0xb2d9,
+       0x1c52: 0xb381, 0x1c53: 0x0040, 0x1c54: 0xb2c1, 0x1c55: 0x0040, 0x1c56: 0x0040, 0x1c57: 0xb231,
+       0x1c58: 0x0040, 0x1c59: 0xb2f1, 0x1c5a: 0x0040, 0x1c5b: 0xb351, 0x1c5c: 0x0040, 0x1c5d: 0x7949,
+       0x1c5e: 0x0040, 0x1c5f: 0xbc89, 0x1c60: 0x0040, 0x1c61: 0xb1a1, 0x1c62: 0xb201, 0x1c63: 0x0040,
+       0x1c64: 0xb3f9, 0x1c65: 0x0040, 0x1c66: 0x0040, 0x1c67: 0xb219, 0x1c68: 0xb309, 0x1c69: 0xb429,
+       0x1c6a: 0xb399, 0x1c6b: 0x0040, 0x1c6c: 0xb3c9, 0x1c6d: 0xb3e1, 0x1c6e: 0xb2a9, 0x1c6f: 0xb339,
+       0x1c70: 0xb369, 0x1c71: 0xb2d9, 0x1c72: 0xb381, 0x1c73: 0x0040, 0x1c74: 0xb2c1, 0x1c75: 0xb1d1,
+       0x1c76: 0xb1e9, 0x1c77: 0xb231, 0x1c78: 0x0040, 0x1c79: 0xb2f1, 0x1c7a: 0xb321, 0x1c7b: 0xb351,
+       0x1c7c: 0xbc59, 0x1c7d: 0x0040, 0x1c7e: 0xbc71, 0x1c7f: 0x0040,
+       // Block 0x72, offset 0x1c80
+       0x1c80: 0xb189, 0x1c81: 0xb1a1, 0x1c82: 0xb201, 0x1c83: 0xb249, 0x1c84: 0xb3f9, 0x1c85: 0xb411,
+       0x1c86: 0xb291, 0x1c87: 0xb219, 0x1c88: 0xb309, 0x1c89: 0xb429, 0x1c8a: 0x0040, 0x1c8b: 0xb3b1,
+       0x1c8c: 0xb3c9, 0x1c8d: 0xb3e1, 0x1c8e: 0xb2a9, 0x1c8f: 0xb339, 0x1c90: 0xb369, 0x1c91: 0xb2d9,
+       0x1c92: 0xb381, 0x1c93: 0xb279, 0x1c94: 0xb2c1, 0x1c95: 0xb1d1, 0x1c96: 0xb1e9, 0x1c97: 0xb231,
+       0x1c98: 0xb261, 0x1c99: 0xb2f1, 0x1c9a: 0xb321, 0x1c9b: 0xb351, 0x1c9c: 0x0040, 0x1c9d: 0x0040,
+       0x1c9e: 0x0040, 0x1c9f: 0x0040, 0x1ca0: 0x0040, 0x1ca1: 0xb1a1, 0x1ca2: 0xb201, 0x1ca3: 0xb249,
+       0x1ca4: 0x0040, 0x1ca5: 0xb411, 0x1ca6: 0xb291, 0x1ca7: 0xb219, 0x1ca8: 0xb309, 0x1ca9: 0xb429,
+       0x1caa: 0x0040, 0x1cab: 0xb3b1, 0x1cac: 0xb3c9, 0x1cad: 0xb3e1, 0x1cae: 0xb2a9, 0x1caf: 0xb339,
+       0x1cb0: 0xb369, 0x1cb1: 0xb2d9, 0x1cb2: 0xb381, 0x1cb3: 0xb279, 0x1cb4: 0xb2c1, 0x1cb5: 0xb1d1,
+       0x1cb6: 0xb1e9, 0x1cb7: 0xb231, 0x1cb8: 0xb261, 0x1cb9: 0xb2f1, 0x1cba: 0xb321, 0x1cbb: 0xb351,
+       0x1cbc: 0x0040, 0x1cbd: 0x0040, 0x1cbe: 0x0040, 0x1cbf: 0x0040,
+       // Block 0x73, offset 0x1cc0
+       0x1cc0: 0x0040, 0x1cc1: 0xbca2, 0x1cc2: 0xbcba, 0x1cc3: 0xbcd2, 0x1cc4: 0xbcea, 0x1cc5: 0xbd02,
+       0x1cc6: 0xbd1a, 0x1cc7: 0xbd32, 0x1cc8: 0xbd4a, 0x1cc9: 0xbd62, 0x1cca: 0xbd7a, 0x1ccb: 0x0018,
+       0x1ccc: 0x0018, 0x1ccd: 0x0040, 0x1cce: 0x0040, 0x1ccf: 0x0040, 0x1cd0: 0xbd92, 0x1cd1: 0xbdb2,
+       0x1cd2: 0xbdd2, 0x1cd3: 0xbdf2, 0x1cd4: 0xbe12, 0x1cd5: 0xbe32, 0x1cd6: 0xbe52, 0x1cd7: 0xbe72,
+       0x1cd8: 0xbe92, 0x1cd9: 0xbeb2, 0x1cda: 0xbed2, 0x1cdb: 0xbef2, 0x1cdc: 0xbf12, 0x1cdd: 0xbf32,
+       0x1cde: 0xbf52, 0x1cdf: 0xbf72, 0x1ce0: 0xbf92, 0x1ce1: 0xbfb2, 0x1ce2: 0xbfd2, 0x1ce3: 0xbff2,
+       0x1ce4: 0xc012, 0x1ce5: 0xc032, 0x1ce6: 0xc052, 0x1ce7: 0xc072, 0x1ce8: 0xc092, 0x1ce9: 0xc0b2,
+       0x1cea: 0xc0d1, 0x1ceb: 0x1159, 0x1cec: 0x0269, 0x1ced: 0x6671, 0x1cee: 0xc111, 0x1cef: 0x0040,
+       0x1cf0: 0x0039, 0x1cf1: 0x0ee9, 0x1cf2: 0x1159, 0x1cf3: 0x0ef9, 0x1cf4: 0x0f09, 0x1cf5: 0x1199,
+       0x1cf6: 0x0f31, 0x1cf7: 0x0249, 0x1cf8: 0x0f41, 0x1cf9: 0x0259, 0x1cfa: 0x0f51, 0x1cfb: 0x0359,
+       0x1cfc: 0x0f61, 0x1cfd: 0x0f71, 0x1cfe: 0x00d9, 0x1cff: 0x0f99,
+       // Block 0x74, offset 0x1d00
+       0x1d00: 0x2039, 0x1d01: 0x0269, 0x1d02: 0x01d9, 0x1d03: 0x0fa9, 0x1d04: 0x0fb9, 0x1d05: 0x1089,
+       0x1d06: 0x0279, 0x1d07: 0x0369, 0x1d08: 0x0289, 0x1d09: 0x13d1, 0x1d0a: 0xc129, 0x1d0b: 0x65b1,
+       0x1d0c: 0xc141, 0x1d0d: 0x1441, 0x1d0e: 0xc159, 0x1d0f: 0xc179, 0x1d10: 0x0018, 0x1d11: 0x0018,
+       0x1d12: 0x0018, 0x1d13: 0x0018, 0x1d14: 0x0018, 0x1d15: 0x0018, 0x1d16: 0x0018, 0x1d17: 0x0018,
+       0x1d18: 0x0018, 0x1d19: 0x0018, 0x1d1a: 0x0018, 0x1d1b: 0x0018, 0x1d1c: 0x0018, 0x1d1d: 0x0018,
+       0x1d1e: 0x0018, 0x1d1f: 0x0018, 0x1d20: 0x0018, 0x1d21: 0x0018, 0x1d22: 0x0018, 0x1d23: 0x0018,
+       0x1d24: 0x0018, 0x1d25: 0x0018, 0x1d26: 0x0018, 0x1d27: 0x0018, 0x1d28: 0x0018, 0x1d29: 0x0018,
+       0x1d2a: 0xc191, 0x1d2b: 0xc1a9, 0x1d2c: 0x0040, 0x1d2d: 0x0040, 0x1d2e: 0x0040, 0x1d2f: 0x0040,
+       0x1d30: 0x0018, 0x1d31: 0x0018, 0x1d32: 0x0018, 0x1d33: 0x0018, 0x1d34: 0x0018, 0x1d35: 0x0018,
+       0x1d36: 0x0018, 0x1d37: 0x0018, 0x1d38: 0x0018, 0x1d39: 0x0018, 0x1d3a: 0x0018, 0x1d3b: 0x0018,
+       0x1d3c: 0x0018, 0x1d3d: 0x0018, 0x1d3e: 0x0018, 0x1d3f: 0x0018,
+       // Block 0x75, offset 0x1d40
+       0x1d40: 0xc1d9, 0x1d41: 0xc211, 0x1d42: 0xc249, 0x1d43: 0x0040, 0x1d44: 0x0040, 0x1d45: 0x0040,
+       0x1d46: 0x0040, 0x1d47: 0x0040, 0x1d48: 0x0040, 0x1d49: 0x0040, 0x1d4a: 0x0040, 0x1d4b: 0x0040,
+       0x1d4c: 0x0040, 0x1d4d: 0x0040, 0x1d4e: 0x0040, 0x1d4f: 0x0040, 0x1d50: 0xc269, 0x1d51: 0xc289,
+       0x1d52: 0xc2a9, 0x1d53: 0xc2c9, 0x1d54: 0xc2e9, 0x1d55: 0xc309, 0x1d56: 0xc329, 0x1d57: 0xc349,
+       0x1d58: 0xc369, 0x1d59: 0xc389, 0x1d5a: 0xc3a9, 0x1d5b: 0xc3c9, 0x1d5c: 0xc3e9, 0x1d5d: 0xc409,
+       0x1d5e: 0xc429, 0x1d5f: 0xc449, 0x1d60: 0xc469, 0x1d61: 0xc489, 0x1d62: 0xc4a9, 0x1d63: 0xc4c9,
+       0x1d64: 0xc4e9, 0x1d65: 0xc509, 0x1d66: 0xc529, 0x1d67: 0xc549, 0x1d68: 0xc569, 0x1d69: 0xc589,
+       0x1d6a: 0xc5a9, 0x1d6b: 0xc5c9, 0x1d6c: 0xc5e9, 0x1d6d: 0xc609, 0x1d6e: 0xc629, 0x1d6f: 0xc649,
+       0x1d70: 0xc669, 0x1d71: 0xc689, 0x1d72: 0xc6a9, 0x1d73: 0xc6c9, 0x1d74: 0xc6e9, 0x1d75: 0xc709,
+       0x1d76: 0xc729, 0x1d77: 0xc749, 0x1d78: 0xc769, 0x1d79: 0xc789, 0x1d7a: 0xc7a9, 0x1d7b: 0xc7c9,
+       0x1d7c: 0x0040, 0x1d7d: 0x0040, 0x1d7e: 0x0040, 0x1d7f: 0x0040,
+       // Block 0x76, offset 0x1d80
+       0x1d80: 0xcaf9, 0x1d81: 0xcb19, 0x1d82: 0xcb39, 0x1d83: 0x8b1d, 0x1d84: 0xcb59, 0x1d85: 0xcb79,
+       0x1d86: 0xcb99, 0x1d87: 0xcbb9, 0x1d88: 0xcbd9, 0x1d89: 0xcbf9, 0x1d8a: 0xcc19, 0x1d8b: 0xcc39,
+       0x1d8c: 0xcc59, 0x1d8d: 0x8b3d, 0x1d8e: 0xcc79, 0x1d8f: 0xcc99, 0x1d90: 0xccb9, 0x1d91: 0xccd9,
+       0x1d92: 0x8b5d, 0x1d93: 0xccf9, 0x1d94: 0xcd19, 0x1d95: 0xc429, 0x1d96: 0x8b7d, 0x1d97: 0xcd39,
+       0x1d98: 0xcd59, 0x1d99: 0xcd79, 0x1d9a: 0xcd99, 0x1d9b: 0xcdb9, 0x1d9c: 0x8b9d, 0x1d9d: 0xcdd9,
+       0x1d9e: 0xcdf9, 0x1d9f: 0xce19, 0x1da0: 0xce39, 0x1da1: 0xce59, 0x1da2: 0xc789, 0x1da3: 0xce79,
+       0x1da4: 0xce99, 0x1da5: 0xceb9, 0x1da6: 0xced9, 0x1da7: 0xcef9, 0x1da8: 0xcf19, 0x1da9: 0xcf39,
+       0x1daa: 0xcf59, 0x1dab: 0xcf79, 0x1dac: 0xcf99, 0x1dad: 0xcfb9, 0x1dae: 0xcfd9, 0x1daf: 0xcff9,
+       0x1db0: 0xd019, 0x1db1: 0xd039, 0x1db2: 0xd039, 0x1db3: 0xd039, 0x1db4: 0x8bbd, 0x1db5: 0xd059,
+       0x1db6: 0xd079, 0x1db7: 0xd099, 0x1db8: 0x8bdd, 0x1db9: 0xd0b9, 0x1dba: 0xd0d9, 0x1dbb: 0xd0f9,
+       0x1dbc: 0xd119, 0x1dbd: 0xd139, 0x1dbe: 0xd159, 0x1dbf: 0xd179,
+       // Block 0x77, offset 0x1dc0
+       0x1dc0: 0xd199, 0x1dc1: 0xd1b9, 0x1dc2: 0xd1d9, 0x1dc3: 0xd1f9, 0x1dc4: 0xd219, 0x1dc5: 0xd239,
+       0x1dc6: 0xd239, 0x1dc7: 0xd259, 0x1dc8: 0xd279, 0x1dc9: 0xd299, 0x1dca: 0xd2b9, 0x1dcb: 0xd2d9,
+       0x1dcc: 0xd2f9, 0x1dcd: 0xd319, 0x1dce: 0xd339, 0x1dcf: 0xd359, 0x1dd0: 0xd379, 0x1dd1: 0xd399,
+       0x1dd2: 0xd3b9, 0x1dd3: 0xd3d9, 0x1dd4: 0xd3f9, 0x1dd5: 0xd419, 0x1dd6: 0xd439, 0x1dd7: 0xd459,
+       0x1dd8: 0xd479, 0x1dd9: 0x8bfd, 0x1dda: 0xd499, 0x1ddb: 0xd4b9, 0x1ddc: 0xd4d9, 0x1ddd: 0xc309,
+       0x1dde: 0xd4f9, 0x1ddf: 0xd519, 0x1de0: 0x8c1d, 0x1de1: 0x8c3d, 0x1de2: 0xd539, 0x1de3: 0xd559,
+       0x1de4: 0xd579, 0x1de5: 0xd599, 0x1de6: 0xd5b9, 0x1de7: 0xd5d9, 0x1de8: 0x0040, 0x1de9: 0xd5f9,
+       0x1dea: 0xd619, 0x1deb: 0xd619, 0x1dec: 0x8c5d, 0x1ded: 0xd639, 0x1dee: 0xd659, 0x1def: 0xd679,
+       0x1df0: 0xd699, 0x1df1: 0x8c7d, 0x1df2: 0xd6b9, 0x1df3: 0xd6d9, 0x1df4: 0x0040, 0x1df5: 0xd6f9,
+       0x1df6: 0xd719, 0x1df7: 0xd739, 0x1df8: 0xd759, 0x1df9: 0xd779, 0x1dfa: 0xd799, 0x1dfb: 0x8c9d,
+       0x1dfc: 0xd7b9, 0x1dfd: 0x8cbd, 0x1dfe: 0xd7d9, 0x1dff: 0xd7f9,
+       // Block 0x78, offset 0x1e00
+       0x1e00: 0xd819, 0x1e01: 0xd839, 0x1e02: 0xd859, 0x1e03: 0xd879, 0x1e04: 0xd899, 0x1e05: 0xd8b9,
+       0x1e06: 0xd8d9, 0x1e07: 0xd8f9, 0x1e08: 0xd919, 0x1e09: 0x8cdd, 0x1e0a: 0xd939, 0x1e0b: 0xd959,
+       0x1e0c: 0xd979, 0x1e0d: 0xd999, 0x1e0e: 0xd9b9, 0x1e0f: 0x8cfd, 0x1e10: 0xd9d9, 0x1e11: 0x8d1d,
+       0x1e12: 0x8d3d, 0x1e13: 0xd9f9, 0x1e14: 0xda19, 0x1e15: 0xda19, 0x1e16: 0xda39, 0x1e17: 0x8d5d,
+       0x1e18: 0x8d7d, 0x1e19: 0xda59, 0x1e1a: 0xda79, 0x1e1b: 0xda99, 0x1e1c: 0xdab9, 0x1e1d: 0xdad9,
+       0x1e1e: 0xdaf9, 0x1e1f: 0xdb19, 0x1e20: 0xdb39, 0x1e21: 0xdb59, 0x1e22: 0xdb79, 0x1e23: 0xdb99,
+       0x1e24: 0x8d9d, 0x1e25: 0xdbb9, 0x1e26: 0xdbd9, 0x1e27: 0xdbf9, 0x1e28: 0xdc19, 0x1e29: 0xdbf9,
+       0x1e2a: 0xdc39, 0x1e2b: 0xdc59, 0x1e2c: 0xdc79, 0x1e2d: 0xdc99, 0x1e2e: 0xdcb9, 0x1e2f: 0xdcd9,
+       0x1e30: 0xdcf9, 0x1e31: 0xdd19, 0x1e32: 0xdd39, 0x1e33: 0xdd59, 0x1e34: 0xdd79, 0x1e35: 0xdd99,
+       0x1e36: 0xddb9, 0x1e37: 0xddd9, 0x1e38: 0x8dbd, 0x1e39: 0xddf9, 0x1e3a: 0xde19, 0x1e3b: 0xde39,
+       0x1e3c: 0xde59, 0x1e3d: 0xde79, 0x1e3e: 0x8ddd, 0x1e3f: 0xde99,
+       // Block 0x79, offset 0x1e40
+       0x1e40: 0xe599, 0x1e41: 0xe5b9, 0x1e42: 0xe5d9, 0x1e43: 0xe5f9, 0x1e44: 0xe619, 0x1e45: 0xe639,
+       0x1e46: 0x8efd, 0x1e47: 0xe659, 0x1e48: 0xe679, 0x1e49: 0xe699, 0x1e4a: 0xe6b9, 0x1e4b: 0xe6d9,
+       0x1e4c: 0xe6f9, 0x1e4d: 0x8f1d, 0x1e4e: 0xe719, 0x1e4f: 0xe739, 0x1e50: 0x8f3d, 0x1e51: 0x8f5d,
+       0x1e52: 0xe759, 0x1e53: 0xe779, 0x1e54: 0xe799, 0x1e55: 0xe7b9, 0x1e56: 0xe7d9, 0x1e57: 0xe7f9,
+       0x1e58: 0xe819, 0x1e59: 0xe839, 0x1e5a: 0xe859, 0x1e5b: 0x8f7d, 0x1e5c: 0xe879, 0x1e5d: 0x8f9d,
+       0x1e5e: 0xe899, 0x1e5f: 0x0040, 0x1e60: 0xe8b9, 0x1e61: 0xe8d9, 0x1e62: 0xe8f9, 0x1e63: 0x8fbd,
+       0x1e64: 0xe919, 0x1e65: 0xe939, 0x1e66: 0x8fdd, 0x1e67: 0x8ffd, 0x1e68: 0xe959, 0x1e69: 0xe979,
+       0x1e6a: 0xe999, 0x1e6b: 0xe9b9, 0x1e6c: 0xe9d9, 0x1e6d: 0xe9d9, 0x1e6e: 0xe9f9, 0x1e6f: 0xea19,
+       0x1e70: 0xea39, 0x1e71: 0xea59, 0x1e72: 0xea79, 0x1e73: 0xea99, 0x1e74: 0xeab9, 0x1e75: 0x901d,
+       0x1e76: 0xead9, 0x1e77: 0x903d, 0x1e78: 0xeaf9, 0x1e79: 0x905d, 0x1e7a: 0xeb19, 0x1e7b: 0x907d,
+       0x1e7c: 0x909d, 0x1e7d: 0x90bd, 0x1e7e: 0xeb39, 0x1e7f: 0xeb59,
+       // Block 0x7a, offset 0x1e80
+       0x1e80: 0xeb79, 0x1e81: 0x90dd, 0x1e82: 0x90fd, 0x1e83: 0x911d, 0x1e84: 0x913d, 0x1e85: 0xeb99,
+       0x1e86: 0xebb9, 0x1e87: 0xebb9, 0x1e88: 0xebd9, 0x1e89: 0xebf9, 0x1e8a: 0xec19, 0x1e8b: 0xec39,
+       0x1e8c: 0xec59, 0x1e8d: 0x915d, 0x1e8e: 0xec79, 0x1e8f: 0xec99, 0x1e90: 0xecb9, 0x1e91: 0xecd9,
+       0x1e92: 0x917d, 0x1e93: 0xecf9, 0x1e94: 0x919d, 0x1e95: 0x91bd, 0x1e96: 0xed19, 0x1e97: 0xed39,
+       0x1e98: 0xed59, 0x1e99: 0xed79, 0x1e9a: 0xed99, 0x1e9b: 0xedb9, 0x1e9c: 0x91dd, 0x1e9d: 0x91fd,
+       0x1e9e: 0x921d, 0x1e9f: 0x0040, 0x1ea0: 0xedd9, 0x1ea1: 0x923d, 0x1ea2: 0xedf9, 0x1ea3: 0xee19,
+       0x1ea4: 0xee39, 0x1ea5: 0x925d, 0x1ea6: 0xee59, 0x1ea7: 0xee79, 0x1ea8: 0xee99, 0x1ea9: 0xeeb9,
+       0x1eaa: 0xeed9, 0x1eab: 0x927d, 0x1eac: 0xeef9, 0x1ead: 0xef19, 0x1eae: 0xef39, 0x1eaf: 0xef59,
+       0x1eb0: 0xef79, 0x1eb1: 0xef99, 0x1eb2: 0x929d, 0x1eb3: 0x92bd, 0x1eb4: 0xefb9, 0x1eb5: 0x92dd,
+       0x1eb6: 0xefd9, 0x1eb7: 0x92fd, 0x1eb8: 0xeff9, 0x1eb9: 0xf019, 0x1eba: 0xf039, 0x1ebb: 0x931d,
+       0x1ebc: 0x933d, 0x1ebd: 0xf059, 0x1ebe: 0x935d, 0x1ebf: 0xf079,
+       // Block 0x7b, offset 0x1ec0
+       0x1ec0: 0xf6b9, 0x1ec1: 0xf6d9, 0x1ec2: 0xf6f9, 0x1ec3: 0xf719, 0x1ec4: 0xf739, 0x1ec5: 0x951d,
+       0x1ec6: 0xf759, 0x1ec7: 0xf779, 0x1ec8: 0xf799, 0x1ec9: 0xf7b9, 0x1eca: 0xf7d9, 0x1ecb: 0x953d,
+       0x1ecc: 0x955d, 0x1ecd: 0xf7f9, 0x1ece: 0xf819, 0x1ecf: 0xf839, 0x1ed0: 0xf859, 0x1ed1: 0xf879,
+       0x1ed2: 0xf899, 0x1ed3: 0x957d, 0x1ed4: 0xf8b9, 0x1ed5: 0xf8d9, 0x1ed6: 0xf8f9, 0x1ed7: 0xf919,
+       0x1ed8: 0x959d, 0x1ed9: 0x95bd, 0x1eda: 0xf939, 0x1edb: 0xf959, 0x1edc: 0xf979, 0x1edd: 0x95dd,
+       0x1ede: 0xf999, 0x1edf: 0xf9b9, 0x1ee0: 0x6815, 0x1ee1: 0x95fd, 0x1ee2: 0xf9d9, 0x1ee3: 0xf9f9,
+       0x1ee4: 0xfa19, 0x1ee5: 0x961d, 0x1ee6: 0xfa39, 0x1ee7: 0xfa59, 0x1ee8: 0xfa79, 0x1ee9: 0xfa99,
+       0x1eea: 0xfab9, 0x1eeb: 0xfad9, 0x1eec: 0xfaf9, 0x1eed: 0x963d, 0x1eee: 0xfb19, 0x1eef: 0xfb39,
+       0x1ef0: 0xfb59, 0x1ef1: 0x965d, 0x1ef2: 0xfb79, 0x1ef3: 0xfb99, 0x1ef4: 0xfbb9, 0x1ef5: 0xfbd9,
+       0x1ef6: 0x7b35, 0x1ef7: 0x967d, 0x1ef8: 0xfbf9, 0x1ef9: 0xfc19, 0x1efa: 0xfc39, 0x1efb: 0x969d,
+       0x1efc: 0xfc59, 0x1efd: 0x96bd, 0x1efe: 0xfc79, 0x1eff: 0xfc79,
+       // Block 0x7c, offset 0x1f00
+       0x1f00: 0xfc99, 0x1f01: 0x96dd, 0x1f02: 0xfcb9, 0x1f03: 0xfcd9, 0x1f04: 0xfcf9, 0x1f05: 0xfd19,
+       0x1f06: 0xfd39, 0x1f07: 0xfd59, 0x1f08: 0xfd79, 0x1f09: 0x96fd, 0x1f0a: 0xfd99, 0x1f0b: 0xfdb9,
+       0x1f0c: 0xfdd9, 0x1f0d: 0xfdf9, 0x1f0e: 0xfe19, 0x1f0f: 0xfe39, 0x1f10: 0x971d, 0x1f11: 0xfe59,
+       0x1f12: 0x973d, 0x1f13: 0x975d, 0x1f14: 0x977d, 0x1f15: 0xfe79, 0x1f16: 0xfe99, 0x1f17: 0xfeb9,
+       0x1f18: 0xfed9, 0x1f19: 0xfef9, 0x1f1a: 0xff19, 0x1f1b: 0xff39, 0x1f1c: 0xff59, 0x1f1d: 0x979d,
+       0x1f1e: 0x0040, 0x1f1f: 0x0040, 0x1f20: 0x0040, 0x1f21: 0x0040, 0x1f22: 0x0040, 0x1f23: 0x0040,
+       0x1f24: 0x0040, 0x1f25: 0x0040, 0x1f26: 0x0040, 0x1f27: 0x0040, 0x1f28: 0x0040, 0x1f29: 0x0040,
+       0x1f2a: 0x0040, 0x1f2b: 0x0040, 0x1f2c: 0x0040, 0x1f2d: 0x0040, 0x1f2e: 0x0040, 0x1f2f: 0x0040,
+       0x1f30: 0x0040, 0x1f31: 0x0040, 0x1f32: 0x0040, 0x1f33: 0x0040, 0x1f34: 0x0040, 0x1f35: 0x0040,
+       0x1f36: 0x0040, 0x1f37: 0x0040, 0x1f38: 0x0040, 0x1f39: 0x0040, 0x1f3a: 0x0040, 0x1f3b: 0x0040,
+       0x1f3c: 0x0040, 0x1f3d: 0x0040, 0x1f3e: 0x0040, 0x1f3f: 0x0040,
+}
+
+// idnaIndex: 35 blocks, 2240 entries, 4480 bytes
+// Block 0 is the zero block.
+var idnaIndex = [2240]uint16{
+       // Block 0x0, offset 0x0
+       // Block 0x1, offset 0x40
+       // Block 0x2, offset 0x80
+       // Block 0x3, offset 0xc0
+       0xc2: 0x01, 0xc3: 0x7b, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x04, 0xc7: 0x05,
+       0xc8: 0x06, 0xc9: 0x7c, 0xca: 0x7d, 0xcb: 0x07, 0xcc: 0x7e, 0xcd: 0x08, 0xce: 0x09, 0xcf: 0x0a,
+       0xd0: 0x7f, 0xd1: 0x0b, 0xd2: 0x0c, 0xd3: 0x0d, 0xd4: 0x0e, 0xd5: 0x80, 0xd6: 0x81, 0xd7: 0x82,
+       0xd8: 0x0f, 0xd9: 0x83, 0xda: 0x84, 0xdb: 0x10, 0xdc: 0x11, 0xdd: 0x85, 0xde: 0x86, 0xdf: 0x87,
+       0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe5: 0x07, 0xe6: 0x07, 0xe7: 0x07,
+       0xe8: 0x07, 0xe9: 0x08, 0xea: 0x09, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x0a, 0xee: 0x0b, 0xef: 0x0c,
+       0xf0: 0x1c, 0xf1: 0x1d, 0xf2: 0x1d, 0xf3: 0x1f, 0xf4: 0x20,
+       // Block 0x4, offset 0x100
+       0x120: 0x88, 0x121: 0x89, 0x122: 0x8a, 0x123: 0x8b, 0x124: 0x8c, 0x125: 0x12, 0x126: 0x13, 0x127: 0x14,
+       0x128: 0x15, 0x129: 0x16, 0x12a: 0x17, 0x12b: 0x18, 0x12c: 0x19, 0x12d: 0x1a, 0x12e: 0x1b, 0x12f: 0x8d,
+       0x130: 0x8e, 0x131: 0x1c, 0x132: 0x1d, 0x133: 0x1e, 0x134: 0x8f, 0x135: 0x1f, 0x136: 0x90, 0x137: 0x91,
+       0x138: 0x92, 0x139: 0x93, 0x13a: 0x20, 0x13b: 0x94, 0x13c: 0x95, 0x13d: 0x21, 0x13e: 0x22, 0x13f: 0x96,
+       // Block 0x5, offset 0x140
+       0x140: 0x97, 0x141: 0x98, 0x142: 0x99, 0x143: 0x9a, 0x144: 0x9b, 0x145: 0x9c, 0x146: 0x9b, 0x147: 0x9b,
+       0x148: 0x9d, 0x149: 0x9e, 0x14a: 0x9f, 0x14b: 0xa0, 0x14c: 0xa1, 0x14d: 0xa2, 0x14e: 0xa3, 0x14f: 0xa4,
+       0x150: 0xa5, 0x151: 0x9d, 0x152: 0x9d, 0x153: 0x9d, 0x154: 0x9d, 0x155: 0x9d, 0x156: 0x9d, 0x157: 0x9d,
+       0x158: 0x9d, 0x159: 0xa6, 0x15a: 0xa7, 0x15b: 0xa8, 0x15c: 0xa9, 0x15d: 0xaa, 0x15e: 0xab, 0x15f: 0xac,
+       0x160: 0xad, 0x161: 0xae, 0x162: 0xaf, 0x163: 0xb0, 0x164: 0xb1, 0x165: 0xb2, 0x166: 0xb3, 0x167: 0xb4,
+       0x168: 0xb5, 0x169: 0xb6, 0x16a: 0xb7, 0x16b: 0xb8, 0x16c: 0xb9, 0x16d: 0xba, 0x16e: 0xbb, 0x16f: 0xbc,
+       0x170: 0xbd, 0x171: 0xbe, 0x172: 0xbf, 0x173: 0xc0, 0x174: 0x23, 0x175: 0x24, 0x176: 0x25, 0x177: 0xc1,
+       0x178: 0x26, 0x179: 0x26, 0x17a: 0x27, 0x17b: 0x26, 0x17c: 0xc2, 0x17d: 0x28, 0x17e: 0x29, 0x17f: 0x2a,
+       // Block 0x6, offset 0x180
+       0x180: 0x2b, 0x181: 0x2c, 0x182: 0x2d, 0x183: 0xc3, 0x184: 0x2e, 0x185: 0x2f, 0x186: 0xc4, 0x187: 0x9b,
+       0x188: 0xc5, 0x189: 0xc6, 0x18a: 0x9b, 0x18b: 0x9b, 0x18c: 0xc7, 0x18d: 0x9b, 0x18e: 0x9b, 0x18f: 0xc8,
+       0x190: 0xc9, 0x191: 0x30, 0x192: 0x31, 0x193: 0x32, 0x194: 0x9b, 0x195: 0x9b, 0x196: 0x9b, 0x197: 0x9b,
+       0x198: 0x9b, 0x199: 0x9b, 0x19a: 0x9b, 0x19b: 0x9b, 0x19c: 0x9b, 0x19d: 0x9b, 0x19e: 0x9b, 0x19f: 0x9b,
+       0x1a0: 0x9b, 0x1a1: 0x9b, 0x1a2: 0x9b, 0x1a3: 0x9b, 0x1a4: 0x9b, 0x1a5: 0x9b, 0x1a6: 0x9b, 0x1a7: 0x9b,
+       0x1a8: 0xca, 0x1a9: 0xcb, 0x1aa: 0x9b, 0x1ab: 0xcc, 0x1ac: 0x9b, 0x1ad: 0xcd, 0x1ae: 0xce, 0x1af: 0xcf,
+       0x1b0: 0xd0, 0x1b1: 0x33, 0x1b2: 0x26, 0x1b3: 0x34, 0x1b4: 0xd1, 0x1b5: 0xd2, 0x1b6: 0xd3, 0x1b7: 0xd4,
+       0x1b8: 0xd5, 0x1b9: 0xd6, 0x1ba: 0xd7, 0x1bb: 0xd8, 0x1bc: 0xd9, 0x1bd: 0xda, 0x1be: 0xdb, 0x1bf: 0x35,
+       // Block 0x7, offset 0x1c0
+       0x1c0: 0x36, 0x1c1: 0xdc, 0x1c2: 0xdd, 0x1c3: 0xde, 0x1c4: 0xdf, 0x1c5: 0x37, 0x1c6: 0x38, 0x1c7: 0xe0,
+       0x1c8: 0xe1, 0x1c9: 0x39, 0x1ca: 0x3a, 0x1cb: 0x3b, 0x1cc: 0x3c, 0x1cd: 0x3d, 0x1ce: 0x3e, 0x1cf: 0x3f,
+       0x1d0: 0x9d, 0x1d1: 0x9d, 0x1d2: 0x9d, 0x1d3: 0x9d, 0x1d4: 0x9d, 0x1d5: 0x9d, 0x1d6: 0x9d, 0x1d7: 0x9d,
+       0x1d8: 0x9d, 0x1d9: 0x9d, 0x1da: 0x9d, 0x1db: 0x9d, 0x1dc: 0x9d, 0x1dd: 0x9d, 0x1de: 0x9d, 0x1df: 0x9d,
+       0x1e0: 0x9d, 0x1e1: 0x9d, 0x1e2: 0x9d, 0x1e3: 0x9d, 0x1e4: 0x9d, 0x1e5: 0x9d, 0x1e6: 0x9d, 0x1e7: 0x9d,
+       0x1e8: 0x9d, 0x1e9: 0x9d, 0x1ea: 0x9d, 0x1eb: 0x9d, 0x1ec: 0x9d, 0x1ed: 0x9d, 0x1ee: 0x9d, 0x1ef: 0x9d,
+       0x1f0: 0x9d, 0x1f1: 0x9d, 0x1f2: 0x9d, 0x1f3: 0x9d, 0x1f4: 0x9d, 0x1f5: 0x9d, 0x1f6: 0x9d, 0x1f7: 0x9d,
+       0x1f8: 0x9d, 0x1f9: 0x9d, 0x1fa: 0x9d, 0x1fb: 0x9d, 0x1fc: 0x9d, 0x1fd: 0x9d, 0x1fe: 0x9d, 0x1ff: 0x9d,
+       // Block 0x8, offset 0x200
+       0x200: 0x9d, 0x201: 0x9d, 0x202: 0x9d, 0x203: 0x9d, 0x204: 0x9d, 0x205: 0x9d, 0x206: 0x9d, 0x207: 0x9d,
+       0x208: 0x9d, 0x209: 0x9d, 0x20a: 0x9d, 0x20b: 0x9d, 0x20c: 0x9d, 0x20d: 0x9d, 0x20e: 0x9d, 0x20f: 0x9d,
+       0x210: 0x9d, 0x211: 0x9d, 0x212: 0x9d, 0x213: 0x9d, 0x214: 0x9d, 0x215: 0x9d, 0x216: 0x9d, 0x217: 0x9d,
+       0x218: 0x9d, 0x219: 0x9d, 0x21a: 0x9d, 0x21b: 0x9d, 0x21c: 0x9d, 0x21d: 0x9d, 0x21e: 0x9d, 0x21f: 0x9d,
+       0x220: 0x9d, 0x221: 0x9d, 0x222: 0x9d, 0x223: 0x9d, 0x224: 0x9d, 0x225: 0x9d, 0x226: 0x9d, 0x227: 0x9d,
+       0x228: 0x9d, 0x229: 0x9d, 0x22a: 0x9d, 0x22b: 0x9d, 0x22c: 0x9d, 0x22d: 0x9d, 0x22e: 0x9d, 0x22f: 0x9d,
+       0x230: 0x9d, 0x231: 0x9d, 0x232: 0x9d, 0x233: 0x9d, 0x234: 0x9d, 0x235: 0x9d, 0x236: 0xb0, 0x237: 0x9b,
+       0x238: 0x9d, 0x239: 0x9d, 0x23a: 0x9d, 0x23b: 0x9d, 0x23c: 0x9d, 0x23d: 0x9d, 0x23e: 0x9d, 0x23f: 0x9d,
+       // Block 0x9, offset 0x240
+       0x240: 0x9d, 0x241: 0x9d, 0x242: 0x9d, 0x243: 0x9d, 0x244: 0x9d, 0x245: 0x9d, 0x246: 0x9d, 0x247: 0x9d,
+       0x248: 0x9d, 0x249: 0x9d, 0x24a: 0x9d, 0x24b: 0x9d, 0x24c: 0x9d, 0x24d: 0x9d, 0x24e: 0x9d, 0x24f: 0x9d,
+       0x250: 0x9d, 0x251: 0x9d, 0x252: 0x9d, 0x253: 0x9d, 0x254: 0x9d, 0x255: 0x9d, 0x256: 0x9d, 0x257: 0x9d,
+       0x258: 0x9d, 0x259: 0x9d, 0x25a: 0x9d, 0x25b: 0x9d, 0x25c: 0x9d, 0x25d: 0x9d, 0x25e: 0x9d, 0x25f: 0x9d,
+       0x260: 0x9d, 0x261: 0x9d, 0x262: 0x9d, 0x263: 0x9d, 0x264: 0x9d, 0x265: 0x9d, 0x266: 0x9d, 0x267: 0x9d,
+       0x268: 0x9d, 0x269: 0x9d, 0x26a: 0x9d, 0x26b: 0x9d, 0x26c: 0x9d, 0x26d: 0x9d, 0x26e: 0x9d, 0x26f: 0x9d,
+       0x270: 0x9d, 0x271: 0x9d, 0x272: 0x9d, 0x273: 0x9d, 0x274: 0x9d, 0x275: 0x9d, 0x276: 0x9d, 0x277: 0x9d,
+       0x278: 0x9d, 0x279: 0x9d, 0x27a: 0x9d, 0x27b: 0x9d, 0x27c: 0x9d, 0x27d: 0x9d, 0x27e: 0x9d, 0x27f: 0x9d,
+       // Block 0xa, offset 0x280
+       0x280: 0x9d, 0x281: 0x9d, 0x282: 0x9d, 0x283: 0x9d, 0x284: 0x9d, 0x285: 0x9d, 0x286: 0x9d, 0x287: 0x9d,
+       0x288: 0x9d, 0x289: 0x9d, 0x28a: 0x9d, 0x28b: 0x9d, 0x28c: 0x9d, 0x28d: 0x9d, 0x28e: 0x9d, 0x28f: 0x9d,
+       0x290: 0x9d, 0x291: 0x9d, 0x292: 0x9d, 0x293: 0x9d, 0x294: 0x9d, 0x295: 0x9d, 0x296: 0x9d, 0x297: 0x9d,
+       0x298: 0x9d, 0x299: 0x9d, 0x29a: 0x9d, 0x29b: 0x9d, 0x29c: 0x9d, 0x29d: 0x9d, 0x29e: 0x9d, 0x29f: 0x9d,
+       0x2a0: 0x9d, 0x2a1: 0x9d, 0x2a2: 0x9d, 0x2a3: 0x9d, 0x2a4: 0x9d, 0x2a5: 0x9d, 0x2a6: 0x9d, 0x2a7: 0x9d,
+       0x2a8: 0x9d, 0x2a9: 0x9d, 0x2aa: 0x9d, 0x2ab: 0x9d, 0x2ac: 0x9d, 0x2ad: 0x9d, 0x2ae: 0x9d, 0x2af: 0x9d,
+       0x2b0: 0x9d, 0x2b1: 0x9d, 0x2b2: 0x9d, 0x2b3: 0x9d, 0x2b4: 0x9d, 0x2b5: 0x9d, 0x2b6: 0x9d, 0x2b7: 0x9d,
+       0x2b8: 0x9d, 0x2b9: 0x9d, 0x2ba: 0x9d, 0x2bb: 0x9d, 0x2bc: 0x9d, 0x2bd: 0x9d, 0x2be: 0x9d, 0x2bf: 0xe2,
+       // Block 0xb, offset 0x2c0
+       0x2c0: 0x9d, 0x2c1: 0x9d, 0x2c2: 0x9d, 0x2c3: 0x9d, 0x2c4: 0x9d, 0x2c5: 0x9d, 0x2c6: 0x9d, 0x2c7: 0x9d,
+       0x2c8: 0x9d, 0x2c9: 0x9d, 0x2ca: 0x9d, 0x2cb: 0x9d, 0x2cc: 0x9d, 0x2cd: 0x9d, 0x2ce: 0x9d, 0x2cf: 0x9d,
+       0x2d0: 0x9d, 0x2d1: 0x9d, 0x2d2: 0xe3, 0x2d3: 0xe4, 0x2d4: 0x9d, 0x2d5: 0x9d, 0x2d6: 0x9d, 0x2d7: 0x9d,
+       0x2d8: 0xe5, 0x2d9: 0x40, 0x2da: 0x41, 0x2db: 0xe6, 0x2dc: 0x42, 0x2dd: 0x43, 0x2de: 0x44, 0x2df: 0xe7,
+       0x2e0: 0xe8, 0x2e1: 0xe9, 0x2e2: 0xea, 0x2e3: 0xeb, 0x2e4: 0xec, 0x2e5: 0xed, 0x2e6: 0xee, 0x2e7: 0xef,
+       0x2e8: 0xf0, 0x2e9: 0xf1, 0x2ea: 0xf2, 0x2eb: 0xf3, 0x2ec: 0xf4, 0x2ed: 0xf5, 0x2ee: 0xf6, 0x2ef: 0xf7,
+       0x2f0: 0x9d, 0x2f1: 0x9d, 0x2f2: 0x9d, 0x2f3: 0x9d, 0x2f4: 0x9d, 0x2f5: 0x9d, 0x2f6: 0x9d, 0x2f7: 0x9d,
+       0x2f8: 0x9d, 0x2f9: 0x9d, 0x2fa: 0x9d, 0x2fb: 0x9d, 0x2fc: 0x9d, 0x2fd: 0x9d, 0x2fe: 0x9d, 0x2ff: 0x9d,
+       // Block 0xc, offset 0x300
+       0x300: 0x9d, 0x301: 0x9d, 0x302: 0x9d, 0x303: 0x9d, 0x304: 0x9d, 0x305: 0x9d, 0x306: 0x9d, 0x307: 0x9d,
+       0x308: 0x9d, 0x309: 0x9d, 0x30a: 0x9d, 0x30b: 0x9d, 0x30c: 0x9d, 0x30d: 0x9d, 0x30e: 0x9d, 0x30f: 0x9d,
+       0x310: 0x9d, 0x311: 0x9d, 0x312: 0x9d, 0x313: 0x9d, 0x314: 0x9d, 0x315: 0x9d, 0x316: 0x9d, 0x317: 0x9d,
+       0x318: 0x9d, 0x319: 0x9d, 0x31a: 0x9d, 0x31b: 0x9d, 0x31c: 0x9d, 0x31d: 0x9d, 0x31e: 0xf8, 0x31f: 0xf9,
+       // Block 0xd, offset 0x340
+       0x340: 0xb8, 0x341: 0xb8, 0x342: 0xb8, 0x343: 0xb8, 0x344: 0xb8, 0x345: 0xb8, 0x346: 0xb8, 0x347: 0xb8,
+       0x348: 0xb8, 0x349: 0xb8, 0x34a: 0xb8, 0x34b: 0xb8, 0x34c: 0xb8, 0x34d: 0xb8, 0x34e: 0xb8, 0x34f: 0xb8,
+       0x350: 0xb8, 0x351: 0xb8, 0x352: 0xb8, 0x353: 0xb8, 0x354: 0xb8, 0x355: 0xb8, 0x356: 0xb8, 0x357: 0xb8,
+       0x358: 0xb8, 0x359: 0xb8, 0x35a: 0xb8, 0x35b: 0xb8, 0x35c: 0xb8, 0x35d: 0xb8, 0x35e: 0xb8, 0x35f: 0xb8,
+       0x360: 0xb8, 0x361: 0xb8, 0x362: 0xb8, 0x363: 0xb8, 0x364: 0xb8, 0x365: 0xb8, 0x366: 0xb8, 0x367: 0xb8,
+       0x368: 0xb8, 0x369: 0xb8, 0x36a: 0xb8, 0x36b: 0xb8, 0x36c: 0xb8, 0x36d: 0xb8, 0x36e: 0xb8, 0x36f: 0xb8,
+       0x370: 0xb8, 0x371: 0xb8, 0x372: 0xb8, 0x373: 0xb8, 0x374: 0xb8, 0x375: 0xb8, 0x376: 0xb8, 0x377: 0xb8,
+       0x378: 0xb8, 0x379: 0xb8, 0x37a: 0xb8, 0x37b: 0xb8, 0x37c: 0xb8, 0x37d: 0xb8, 0x37e: 0xb8, 0x37f: 0xb8,
+       // Block 0xe, offset 0x380
+       0x380: 0xb8, 0x381: 0xb8, 0x382: 0xb8, 0x383: 0xb8, 0x384: 0xb8, 0x385: 0xb8, 0x386: 0xb8, 0x387: 0xb8,
+       0x388: 0xb8, 0x389: 0xb8, 0x38a: 0xb8, 0x38b: 0xb8, 0x38c: 0xb8, 0x38d: 0xb8, 0x38e: 0xb8, 0x38f: 0xb8,
+       0x390: 0xb8, 0x391: 0xb8, 0x392: 0xb8, 0x393: 0xb8, 0x394: 0xb8, 0x395: 0xb8, 0x396: 0xb8, 0x397: 0xb8,
+       0x398: 0xb8, 0x399: 0xb8, 0x39a: 0xb8, 0x39b: 0xb8, 0x39c: 0xb8, 0x39d: 0xb8, 0x39e: 0xb8, 0x39f: 0xb8,
+       0x3a0: 0xb8, 0x3a1: 0xb8, 0x3a2: 0xb8, 0x3a3: 0xb8, 0x3a4: 0xfa, 0x3a5: 0xfb, 0x3a6: 0xfc, 0x3a7: 0xfd,
+       0x3a8: 0x45, 0x3a9: 0xfe, 0x3aa: 0xff, 0x3ab: 0x46, 0x3ac: 0x47, 0x3ad: 0x48, 0x3ae: 0x49, 0x3af: 0x4a,
+       0x3b0: 0x100, 0x3b1: 0x4b, 0x3b2: 0x4c, 0x3b3: 0x4d, 0x3b4: 0x4e, 0x3b5: 0x4f, 0x3b6: 0x101, 0x3b7: 0x50,
+       0x3b8: 0x51, 0x3b9: 0x52, 0x3ba: 0x53, 0x3bb: 0x54, 0x3bc: 0x55, 0x3bd: 0x56, 0x3be: 0x57, 0x3bf: 0x58,
+       // Block 0xf, offset 0x3c0
+       0x3c0: 0x102, 0x3c1: 0x103, 0x3c2: 0x9d, 0x3c3: 0x104, 0x3c4: 0x105, 0x3c5: 0x9b, 0x3c6: 0x106, 0x3c7: 0x107,
+       0x3c8: 0xb8, 0x3c9: 0xb8, 0x3ca: 0x108, 0x3cb: 0x109, 0x3cc: 0x10a, 0x3cd: 0x10b, 0x3ce: 0x10c, 0x3cf: 0x10d,
+       0x3d0: 0x10e, 0x3d1: 0x9d, 0x3d2: 0x10f, 0x3d3: 0x110, 0x3d4: 0x111, 0x3d5: 0x112, 0x3d6: 0xb8, 0x3d7: 0xb8,
+       0x3d8: 0x9d, 0x3d9: 0x9d, 0x3da: 0x9d, 0x3db: 0x9d, 0x3dc: 0x113, 0x3dd: 0x114, 0x3de: 0xb8, 0x3df: 0xb8,
+       0x3e0: 0x115, 0x3e1: 0x116, 0x3e2: 0x117, 0x3e3: 0x118, 0x3e4: 0x119, 0x3e5: 0xb8, 0x3e6: 0x11a, 0x3e7: 0x11b,
+       0x3e8: 0x11c, 0x3e9: 0x11d, 0x3ea: 0x11e, 0x3eb: 0x59, 0x3ec: 0x11f, 0x3ed: 0x120, 0x3ee: 0x5a, 0x3ef: 0xb8,
+       0x3f0: 0x9d, 0x3f1: 0x121, 0x3f2: 0x122, 0x3f3: 0x123, 0x3f4: 0xb8, 0x3f5: 0xb8, 0x3f6: 0xb8, 0x3f7: 0xb8,
+       0x3f8: 0xb8, 0x3f9: 0x124, 0x3fa: 0xb8, 0x3fb: 0xb8, 0x3fc: 0xb8, 0x3fd: 0xb8, 0x3fe: 0xb8, 0x3ff: 0xb8,
+       // Block 0x10, offset 0x400
+       0x400: 0x125, 0x401: 0x126, 0x402: 0x127, 0x403: 0x128, 0x404: 0x129, 0x405: 0x12a, 0x406: 0x12b, 0x407: 0x12c,
+       0x408: 0x12d, 0x409: 0xb8, 0x40a: 0x12e, 0x40b: 0x12f, 0x40c: 0x5b, 0x40d: 0x5c, 0x40e: 0xb8, 0x40f: 0xb8,
+       0x410: 0x130, 0x411: 0x131, 0x412: 0x132, 0x413: 0x133, 0x414: 0xb8, 0x415: 0xb8, 0x416: 0x134, 0x417: 0x135,
+       0x418: 0x136, 0x419: 0x137, 0x41a: 0x138, 0x41b: 0x139, 0x41c: 0x13a, 0x41d: 0xb8, 0x41e: 0xb8, 0x41f: 0xb8,
+       0x420: 0xb8, 0x421: 0xb8, 0x422: 0x13b, 0x423: 0x13c, 0x424: 0xb8, 0x425: 0xb8, 0x426: 0xb8, 0x427: 0xb8,
+       0x428: 0xb8, 0x429: 0xb8, 0x42a: 0xb8, 0x42b: 0x13d, 0x42c: 0xb8, 0x42d: 0xb8, 0x42e: 0xb8, 0x42f: 0xb8,
+       0x430: 0x13e, 0x431: 0x13f, 0x432: 0x140, 0x433: 0xb8, 0x434: 0xb8, 0x435: 0xb8, 0x436: 0xb8, 0x437: 0xb8,
+       0x438: 0xb8, 0x439: 0xb8, 0x43a: 0xb8, 0x43b: 0xb8, 0x43c: 0xb8, 0x43d: 0xb8, 0x43e: 0xb8, 0x43f: 0xb8,
+       // Block 0x11, offset 0x440
+       0x440: 0x9d, 0x441: 0x9d, 0x442: 0x9d, 0x443: 0x9d, 0x444: 0x9d, 0x445: 0x9d, 0x446: 0x9d, 0x447: 0x9d,
+       0x448: 0x9d, 0x449: 0x9d, 0x44a: 0x9d, 0x44b: 0x9d, 0x44c: 0x9d, 0x44d: 0x9d, 0x44e: 0x141, 0x44f: 0xb8,
+       0x450: 0x9b, 0x451: 0x142, 0x452: 0x9d, 0x453: 0x9d, 0x454: 0x9d, 0x455: 0x143, 0x456: 0xb8, 0x457: 0xb8,
+       0x458: 0xb8, 0x459: 0xb8, 0x45a: 0xb8, 0x45b: 0xb8, 0x45c: 0xb8, 0x45d: 0xb8, 0x45e: 0xb8, 0x45f: 0xb8,
+       0x460: 0xb8, 0x461: 0xb8, 0x462: 0xb8, 0x463: 0xb8, 0x464: 0xb8, 0x465: 0xb8, 0x466: 0xb8, 0x467: 0xb8,
+       0x468: 0xb8, 0x469: 0xb8, 0x46a: 0xb8, 0x46b: 0xb8, 0x46c: 0xb8, 0x46d: 0xb8, 0x46e: 0xb8, 0x46f: 0xb8,
+       0x470: 0xb8, 0x471: 0xb8, 0x472: 0xb8, 0x473: 0xb8, 0x474: 0xb8, 0x475: 0xb8, 0x476: 0xb8, 0x477: 0xb8,
+       0x478: 0xb8, 0x479: 0xb8, 0x47a: 0xb8, 0x47b: 0xb8, 0x47c: 0xb8, 0x47d: 0xb8, 0x47e: 0xb8, 0x47f: 0xb8,
+       // Block 0x12, offset 0x480
+       0x480: 0x9d, 0x481: 0x9d, 0x482: 0x9d, 0x483: 0x9d, 0x484: 0x9d, 0x485: 0x9d, 0x486: 0x9d, 0x487: 0x9d,
+       0x488: 0x9d, 0x489: 0x9d, 0x48a: 0x9d, 0x48b: 0x9d, 0x48c: 0x9d, 0x48d: 0x9d, 0x48e: 0x9d, 0x48f: 0x9d,
+       0x490: 0x144, 0x491: 0xb8, 0x492: 0xb8, 0x493: 0xb8, 0x494: 0xb8, 0x495: 0xb8, 0x496: 0xb8, 0x497: 0xb8,
+       0x498: 0xb8, 0x499: 0xb8, 0x49a: 0xb8, 0x49b: 0xb8, 0x49c: 0xb8, 0x49d: 0xb8, 0x49e: 0xb8, 0x49f: 0xb8,
+       0x4a0: 0xb8, 0x4a1: 0xb8, 0x4a2: 0xb8, 0x4a3: 0xb8, 0x4a4: 0xb8, 0x4a5: 0xb8, 0x4a6: 0xb8, 0x4a7: 0xb8,
+       0x4a8: 0xb8, 0x4a9: 0xb8, 0x4aa: 0xb8, 0x4ab: 0xb8, 0x4ac: 0xb8, 0x4ad: 0xb8, 0x4ae: 0xb8, 0x4af: 0xb8,
+       0x4b0: 0xb8, 0x4b1: 0xb8, 0x4b2: 0xb8, 0x4b3: 0xb8, 0x4b4: 0xb8, 0x4b5: 0xb8, 0x4b6: 0xb8, 0x4b7: 0xb8,
+       0x4b8: 0xb8, 0x4b9: 0xb8, 0x4ba: 0xb8, 0x4bb: 0xb8, 0x4bc: 0xb8, 0x4bd: 0xb8, 0x4be: 0xb8, 0x4bf: 0xb8,
+       // Block 0x13, offset 0x4c0
+       0x4c0: 0xb8, 0x4c1: 0xb8, 0x4c2: 0xb8, 0x4c3: 0xb8, 0x4c4: 0xb8, 0x4c5: 0xb8, 0x4c6: 0xb8, 0x4c7: 0xb8,
+       0x4c8: 0xb8, 0x4c9: 0xb8, 0x4ca: 0xb8, 0x4cb: 0xb8, 0x4cc: 0xb8, 0x4cd: 0xb8, 0x4ce: 0xb8, 0x4cf: 0xb8,
+       0x4d0: 0x9d, 0x4d1: 0x9d, 0x4d2: 0x9d, 0x4d3: 0x9d, 0x4d4: 0x9d, 0x4d5: 0x9d, 0x4d6: 0x9d, 0x4d7: 0x9d,
+       0x4d8: 0x9d, 0x4d9: 0x145, 0x4da: 0xb8, 0x4db: 0xb8, 0x4dc: 0xb8, 0x4dd: 0xb8, 0x4de: 0xb8, 0x4df: 0xb8,
+       0x4e0: 0xb8, 0x4e1: 0xb8, 0x4e2: 0xb8, 0x4e3: 0xb8, 0x4e4: 0xb8, 0x4e5: 0xb8, 0x4e6: 0xb8, 0x4e7: 0xb8,
+       0x4e8: 0xb8, 0x4e9: 0xb8, 0x4ea: 0xb8, 0x4eb: 0xb8, 0x4ec: 0xb8, 0x4ed: 0xb8, 0x4ee: 0xb8, 0x4ef: 0xb8,
+       0x4f0: 0xb8, 0x4f1: 0xb8, 0x4f2: 0xb8, 0x4f3: 0xb8, 0x4f4: 0xb8, 0x4f5: 0xb8, 0x4f6: 0xb8, 0x4f7: 0xb8,
+       0x4f8: 0xb8, 0x4f9: 0xb8, 0x4fa: 0xb8, 0x4fb: 0xb8, 0x4fc: 0xb8, 0x4fd: 0xb8, 0x4fe: 0xb8, 0x4ff: 0xb8,
+       // Block 0x14, offset 0x500
+       0x500: 0xb8, 0x501: 0xb8, 0x502: 0xb8, 0x503: 0xb8, 0x504: 0xb8, 0x505: 0xb8, 0x506: 0xb8, 0x507: 0xb8,
+       0x508: 0xb8, 0x509: 0xb8, 0x50a: 0xb8, 0x50b: 0xb8, 0x50c: 0xb8, 0x50d: 0xb8, 0x50e: 0xb8, 0x50f: 0xb8,
+       0x510: 0xb8, 0x511: 0xb8, 0x512: 0xb8, 0x513: 0xb8, 0x514: 0xb8, 0x515: 0xb8, 0x516: 0xb8, 0x517: 0xb8,
+       0x518: 0xb8, 0x519: 0xb8, 0x51a: 0xb8, 0x51b: 0xb8, 0x51c: 0xb8, 0x51d: 0xb8, 0x51e: 0xb8, 0x51f: 0xb8,
+       0x520: 0x9d, 0x521: 0x9d, 0x522: 0x9d, 0x523: 0x9d, 0x524: 0x9d, 0x525: 0x9d, 0x526: 0x9d, 0x527: 0x9d,
+       0x528: 0x13d, 0x529: 0x146, 0x52a: 0xb8, 0x52b: 0x147, 0x52c: 0x148, 0x52d: 0x149, 0x52e: 0x14a, 0x52f: 0xb8,
+       0x530: 0xb8, 0x531: 0xb8, 0x532: 0xb8, 0x533: 0xb8, 0x534: 0xb8, 0x535: 0xb8, 0x536: 0xb8, 0x537: 0xb8,
+       0x538: 0xb8, 0x539: 0xb8, 0x53a: 0xb8, 0x53b: 0xb8, 0x53c: 0x9d, 0x53d: 0x14b, 0x53e: 0x14c, 0x53f: 0x14d,
+       // Block 0x15, offset 0x540
+       0x540: 0x9d, 0x541: 0x9d, 0x542: 0x9d, 0x543: 0x9d, 0x544: 0x9d, 0x545: 0x9d, 0x546: 0x9d, 0x547: 0x9d,
+       0x548: 0x9d, 0x549: 0x9d, 0x54a: 0x9d, 0x54b: 0x9d, 0x54c: 0x9d, 0x54d: 0x9d, 0x54e: 0x9d, 0x54f: 0x9d,
+       0x550: 0x9d, 0x551: 0x9d, 0x552: 0x9d, 0x553: 0x9d, 0x554: 0x9d, 0x555: 0x9d, 0x556: 0x9d, 0x557: 0x9d,
+       0x558: 0x9d, 0x559: 0x9d, 0x55a: 0x9d, 0x55b: 0x9d, 0x55c: 0x9d, 0x55d: 0x9d, 0x55e: 0x9d, 0x55f: 0x14e,
+       0x560: 0x9d, 0x561: 0x9d, 0x562: 0x9d, 0x563: 0x9d, 0x564: 0x9d, 0x565: 0x9d, 0x566: 0x9d, 0x567: 0x9d,
+       0x568: 0x9d, 0x569: 0x9d, 0x56a: 0x9d, 0x56b: 0x14f, 0x56c: 0xb8, 0x56d: 0xb8, 0x56e: 0xb8, 0x56f: 0xb8,
+       0x570: 0xb8, 0x571: 0xb8, 0x572: 0xb8, 0x573: 0xb8, 0x574: 0xb8, 0x575: 0xb8, 0x576: 0xb8, 0x577: 0xb8,
+       0x578: 0xb8, 0x579: 0xb8, 0x57a: 0xb8, 0x57b: 0xb8, 0x57c: 0xb8, 0x57d: 0xb8, 0x57e: 0xb8, 0x57f: 0xb8,
+       // Block 0x16, offset 0x580
+       0x580: 0x150, 0x581: 0xb8, 0x582: 0xb8, 0x583: 0xb8, 0x584: 0xb8, 0x585: 0xb8, 0x586: 0xb8, 0x587: 0xb8,
+       0x588: 0xb8, 0x589: 0xb8, 0x58a: 0xb8, 0x58b: 0xb8, 0x58c: 0xb8, 0x58d: 0xb8, 0x58e: 0xb8, 0x58f: 0xb8,
+       0x590: 0xb8, 0x591: 0xb8, 0x592: 0xb8, 0x593: 0xb8, 0x594: 0xb8, 0x595: 0xb8, 0x596: 0xb8, 0x597: 0xb8,
+       0x598: 0xb8, 0x599: 0xb8, 0x59a: 0xb8, 0x59b: 0xb8, 0x59c: 0xb8, 0x59d: 0xb8, 0x59e: 0xb8, 0x59f: 0xb8,
+       0x5a0: 0xb8, 0x5a1: 0xb8, 0x5a2: 0xb8, 0x5a3: 0xb8, 0x5a4: 0xb8, 0x5a5: 0xb8, 0x5a6: 0xb8, 0x5a7: 0xb8,
+       0x5a8: 0xb8, 0x5a9: 0xb8, 0x5aa: 0xb8, 0x5ab: 0xb8, 0x5ac: 0xb8, 0x5ad: 0xb8, 0x5ae: 0xb8, 0x5af: 0xb8,
+       0x5b0: 0x9d, 0x5b1: 0x151, 0x5b2: 0x152, 0x5b3: 0xb8, 0x5b4: 0xb8, 0x5b5: 0xb8, 0x5b6: 0xb8, 0x5b7: 0xb8,
+       0x5b8: 0xb8, 0x5b9: 0xb8, 0x5ba: 0xb8, 0x5bb: 0xb8, 0x5bc: 0xb8, 0x5bd: 0xb8, 0x5be: 0xb8, 0x5bf: 0xb8,
+       // Block 0x17, offset 0x5c0
+       0x5c0: 0x9b, 0x5c1: 0x9b, 0x5c2: 0x9b, 0x5c3: 0x153, 0x5c4: 0x154, 0x5c5: 0x155, 0x5c6: 0x156, 0x5c7: 0x157,
+       0x5c8: 0x9b, 0x5c9: 0x158, 0x5ca: 0xb8, 0x5cb: 0xb8, 0x5cc: 0x9b, 0x5cd: 0x159, 0x5ce: 0xb8, 0x5cf: 0xb8,
+       0x5d0: 0x5d, 0x5d1: 0x5e, 0x5d2: 0x5f, 0x5d3: 0x60, 0x5d4: 0x61, 0x5d5: 0x62, 0x5d6: 0x63, 0x5d7: 0x64,
+       0x5d8: 0x65, 0x5d9: 0x66, 0x5da: 0x67, 0x5db: 0x68, 0x5dc: 0x69, 0x5dd: 0x6a, 0x5de: 0x6b, 0x5df: 0x6c,
+       0x5e0: 0x9b, 0x5e1: 0x9b, 0x5e2: 0x9b, 0x5e3: 0x9b, 0x5e4: 0x9b, 0x5e5: 0x9b, 0x5e6: 0x9b, 0x5e7: 0x9b,
+       0x5e8: 0x15a, 0x5e9: 0x15b, 0x5ea: 0x15c, 0x5eb: 0xb8, 0x5ec: 0xb8, 0x5ed: 0xb8, 0x5ee: 0xb8, 0x5ef: 0xb8,
+       0x5f0: 0xb8, 0x5f1: 0xb8, 0x5f2: 0xb8, 0x5f3: 0xb8, 0x5f4: 0xb8, 0x5f5: 0xb8, 0x5f6: 0xb8, 0x5f7: 0xb8,
+       0x5f8: 0xb8, 0x5f9: 0xb8, 0x5fa: 0xb8, 0x5fb: 0xb8, 0x5fc: 0xb8, 0x5fd: 0xb8, 0x5fe: 0xb8, 0x5ff: 0xb8,
+       // Block 0x18, offset 0x600
+       0x600: 0x15d, 0x601: 0xb8, 0x602: 0xb8, 0x603: 0xb8, 0x604: 0xb8, 0x605: 0xb8, 0x606: 0xb8, 0x607: 0xb8,
+       0x608: 0xb8, 0x609: 0xb8, 0x60a: 0xb8, 0x60b: 0xb8, 0x60c: 0xb8, 0x60d: 0xb8, 0x60e: 0xb8, 0x60f: 0xb8,
+       0x610: 0xb8, 0x611: 0xb8, 0x612: 0xb8, 0x613: 0xb8, 0x614: 0xb8, 0x615: 0xb8, 0x616: 0xb8, 0x617: 0xb8,
+       0x618: 0xb8, 0x619: 0xb8, 0x61a: 0xb8, 0x61b: 0xb8, 0x61c: 0xb8, 0x61d: 0xb8, 0x61e: 0xb8, 0x61f: 0xb8,
+       0x620: 0x9d, 0x621: 0x9d, 0x622: 0x9d, 0x623: 0x15e, 0x624: 0x6d, 0x625: 0x15f, 0x626: 0xb8, 0x627: 0xb8,
+       0x628: 0xb8, 0x629: 0xb8, 0x62a: 0xb8, 0x62b: 0xb8, 0x62c: 0xb8, 0x62d: 0xb8, 0x62e: 0xb8, 0x62f: 0xb8,
+       0x630: 0xb8, 0x631: 0xb8, 0x632: 0xb8, 0x633: 0xb8, 0x634: 0xb8, 0x635: 0xb8, 0x636: 0xb8, 0x637: 0xb8,
+       0x638: 0x6e, 0x639: 0x6f, 0x63a: 0x70, 0x63b: 0x160, 0x63c: 0xb8, 0x63d: 0xb8, 0x63e: 0xb8, 0x63f: 0xb8,
+       // Block 0x19, offset 0x640
+       0x640: 0x161, 0x641: 0x9b, 0x642: 0x162, 0x643: 0x163, 0x644: 0x71, 0x645: 0x72, 0x646: 0x164, 0x647: 0x165,
+       0x648: 0x73, 0x649: 0x166, 0x64a: 0xb8, 0x64b: 0xb8, 0x64c: 0x9b, 0x64d: 0x9b, 0x64e: 0x9b, 0x64f: 0x9b,
+       0x650: 0x9b, 0x651: 0x9b, 0x652: 0x9b, 0x653: 0x9b, 0x654: 0x9b, 0x655: 0x9b, 0x656: 0x9b, 0x657: 0x9b,
+       0x658: 0x9b, 0x659: 0x9b, 0x65a: 0x9b, 0x65b: 0x167, 0x65c: 0x9b, 0x65d: 0x168, 0x65e: 0x9b, 0x65f: 0x169,
+       0x660: 0x16a, 0x661: 0x16b, 0x662: 0x16c, 0x663: 0xb8, 0x664: 0x16d, 0x665: 0x16e, 0x666: 0x16f, 0x667: 0x170,
+       0x668: 0xb8, 0x669: 0xb8, 0x66a: 0xb8, 0x66b: 0xb8, 0x66c: 0xb8, 0x66d: 0xb8, 0x66e: 0xb8, 0x66f: 0xb8,
+       0x670: 0xb8, 0x671: 0xb8, 0x672: 0xb8, 0x673: 0xb8, 0x674: 0xb8, 0x675: 0xb8, 0x676: 0xb8, 0x677: 0xb8,
+       0x678: 0xb8, 0x679: 0xb8, 0x67a: 0xb8, 0x67b: 0xb8, 0x67c: 0xb8, 0x67d: 0xb8, 0x67e: 0xb8, 0x67f: 0xb8,
+       // Block 0x1a, offset 0x680
+       0x680: 0x9d, 0x681: 0x9d, 0x682: 0x9d, 0x683: 0x9d, 0x684: 0x9d, 0x685: 0x9d, 0x686: 0x9d, 0x687: 0x9d,
+       0x688: 0x9d, 0x689: 0x9d, 0x68a: 0x9d, 0x68b: 0x9d, 0x68c: 0x9d, 0x68d: 0x9d, 0x68e: 0x9d, 0x68f: 0x9d,
+       0x690: 0x9d, 0x691: 0x9d, 0x692: 0x9d, 0x693: 0x9d, 0x694: 0x9d, 0x695: 0x9d, 0x696: 0x9d, 0x697: 0x9d,
+       0x698: 0x9d, 0x699: 0x9d, 0x69a: 0x9d, 0x69b: 0x171, 0x69c: 0x9d, 0x69d: 0x9d, 0x69e: 0x9d, 0x69f: 0x9d,
+       0x6a0: 0x9d, 0x6a1: 0x9d, 0x6a2: 0x9d, 0x6a3: 0x9d, 0x6a4: 0x9d, 0x6a5: 0x9d, 0x6a6: 0x9d, 0x6a7: 0x9d,
+       0x6a8: 0x9d, 0x6a9: 0x9d, 0x6aa: 0x9d, 0x6ab: 0x9d, 0x6ac: 0x9d, 0x6ad: 0x9d, 0x6ae: 0x9d, 0x6af: 0x9d,
+       0x6b0: 0x9d, 0x6b1: 0x9d, 0x6b2: 0x9d, 0x6b3: 0x9d, 0x6b4: 0x9d, 0x6b5: 0x9d, 0x6b6: 0x9d, 0x6b7: 0x9d,
+       0x6b8: 0x9d, 0x6b9: 0x9d, 0x6ba: 0x9d, 0x6bb: 0x9d, 0x6bc: 0x9d, 0x6bd: 0x9d, 0x6be: 0x9d, 0x6bf: 0x9d,
+       // Block 0x1b, offset 0x6c0
+       0x6c0: 0x9d, 0x6c1: 0x9d, 0x6c2: 0x9d, 0x6c3: 0x9d, 0x6c4: 0x9d, 0x6c5: 0x9d, 0x6c6: 0x9d, 0x6c7: 0x9d,
+       0x6c8: 0x9d, 0x6c9: 0x9d, 0x6ca: 0x9d, 0x6cb: 0x9d, 0x6cc: 0x9d, 0x6cd: 0x9d, 0x6ce: 0x9d, 0x6cf: 0x9d,
+       0x6d0: 0x9d, 0x6d1: 0x9d, 0x6d2: 0x9d, 0x6d3: 0x9d, 0x6d4: 0x9d, 0x6d5: 0x9d, 0x6d6: 0x9d, 0x6d7: 0x9d,
+       0x6d8: 0x9d, 0x6d9: 0x9d, 0x6da: 0x9d, 0x6db: 0x9d, 0x6dc: 0x172, 0x6dd: 0x9d, 0x6de: 0x9d, 0x6df: 0x9d,
+       0x6e0: 0x173, 0x6e1: 0x9d, 0x6e2: 0x9d, 0x6e3: 0x9d, 0x6e4: 0x9d, 0x6e5: 0x9d, 0x6e6: 0x9d, 0x6e7: 0x9d,
+       0x6e8: 0x9d, 0x6e9: 0x9d, 0x6ea: 0x9d, 0x6eb: 0x9d, 0x6ec: 0x9d, 0x6ed: 0x9d, 0x6ee: 0x9d, 0x6ef: 0x9d,
+       0x6f0: 0x9d, 0x6f1: 0x9d, 0x6f2: 0x9d, 0x6f3: 0x9d, 0x6f4: 0x9d, 0x6f5: 0x9d, 0x6f6: 0x9d, 0x6f7: 0x9d,
+       0x6f8: 0x9d, 0x6f9: 0x9d, 0x6fa: 0x9d, 0x6fb: 0x9d, 0x6fc: 0x9d, 0x6fd: 0x9d, 0x6fe: 0x9d, 0x6ff: 0x9d,
+       // Block 0x1c, offset 0x700
+       0x700: 0x9d, 0x701: 0x9d, 0x702: 0x9d, 0x703: 0x9d, 0x704: 0x9d, 0x705: 0x9d, 0x706: 0x9d, 0x707: 0x9d,
+       0x708: 0x9d, 0x709: 0x9d, 0x70a: 0x9d, 0x70b: 0x9d, 0x70c: 0x9d, 0x70d: 0x9d, 0x70e: 0x9d, 0x70f: 0x9d,
+       0x710: 0x9d, 0x711: 0x9d, 0x712: 0x9d, 0x713: 0x9d, 0x714: 0x9d, 0x715: 0x9d, 0x716: 0x9d, 0x717: 0x9d,
+       0x718: 0x9d, 0x719: 0x9d, 0x71a: 0x9d, 0x71b: 0x9d, 0x71c: 0x9d, 0x71d: 0x9d, 0x71e: 0x9d, 0x71f: 0x9d,
+       0x720: 0x9d, 0x721: 0x9d, 0x722: 0x9d, 0x723: 0x9d, 0x724: 0x9d, 0x725: 0x9d, 0x726: 0x9d, 0x727: 0x9d,
+       0x728: 0x9d, 0x729: 0x9d, 0x72a: 0x9d, 0x72b: 0x9d, 0x72c: 0x9d, 0x72d: 0x9d, 0x72e: 0x9d, 0x72f: 0x9d,
+       0x730: 0x9d, 0x731: 0x9d, 0x732: 0x9d, 0x733: 0x9d, 0x734: 0x9d, 0x735: 0x9d, 0x736: 0x9d, 0x737: 0x9d,
+       0x738: 0x9d, 0x739: 0x9d, 0x73a: 0x174, 0x73b: 0xb8, 0x73c: 0xb8, 0x73d: 0xb8, 0x73e: 0xb8, 0x73f: 0xb8,
+       // Block 0x1d, offset 0x740
+       0x740: 0xb8, 0x741: 0xb8, 0x742: 0xb8, 0x743: 0xb8, 0x744: 0xb8, 0x745: 0xb8, 0x746: 0xb8, 0x747: 0xb8,
+       0x748: 0xb8, 0x749: 0xb8, 0x74a: 0xb8, 0x74b: 0xb8, 0x74c: 0xb8, 0x74d: 0xb8, 0x74e: 0xb8, 0x74f: 0xb8,
+       0x750: 0xb8, 0x751: 0xb8, 0x752: 0xb8, 0x753: 0xb8, 0x754: 0xb8, 0x755: 0xb8, 0x756: 0xb8, 0x757: 0xb8,
+       0x758: 0xb8, 0x759: 0xb8, 0x75a: 0xb8, 0x75b: 0xb8, 0x75c: 0xb8, 0x75d: 0xb8, 0x75e: 0xb8, 0x75f: 0xb8,
+       0x760: 0x74, 0x761: 0x75, 0x762: 0x76, 0x763: 0x175, 0x764: 0x77, 0x765: 0x78, 0x766: 0x176, 0x767: 0x79,
+       0x768: 0x7a, 0x769: 0xb8, 0x76a: 0xb8, 0x76b: 0xb8, 0x76c: 0xb8, 0x76d: 0xb8, 0x76e: 0xb8, 0x76f: 0xb8,
+       0x770: 0xb8, 0x771: 0xb8, 0x772: 0xb8, 0x773: 0xb8, 0x774: 0xb8, 0x775: 0xb8, 0x776: 0xb8, 0x777: 0xb8,
+       0x778: 0xb8, 0x779: 0xb8, 0x77a: 0xb8, 0x77b: 0xb8, 0x77c: 0xb8, 0x77d: 0xb8, 0x77e: 0xb8, 0x77f: 0xb8,
+       // Block 0x1e, offset 0x780
+       0x790: 0x0d, 0x791: 0x0e, 0x792: 0x0f, 0x793: 0x10, 0x794: 0x11, 0x795: 0x0b, 0x796: 0x12, 0x797: 0x07,
+       0x798: 0x13, 0x799: 0x0b, 0x79a: 0x0b, 0x79b: 0x14, 0x79c: 0x0b, 0x79d: 0x15, 0x79e: 0x16, 0x79f: 0x17,
+       0x7a0: 0x07, 0x7a1: 0x07, 0x7a2: 0x07, 0x7a3: 0x07, 0x7a4: 0x07, 0x7a5: 0x07, 0x7a6: 0x07, 0x7a7: 0x07,
+       0x7a8: 0x07, 0x7a9: 0x07, 0x7aa: 0x18, 0x7ab: 0x19, 0x7ac: 0x1a, 0x7ad: 0x0b, 0x7ae: 0x0b, 0x7af: 0x1b,
+       0x7b0: 0x0b, 0x7b1: 0x0b, 0x7b2: 0x0b, 0x7b3: 0x0b, 0x7b4: 0x0b, 0x7b5: 0x0b, 0x7b6: 0x0b, 0x7b7: 0x0b,
+       0x7b8: 0x0b, 0x7b9: 0x0b, 0x7ba: 0x0b, 0x7bb: 0x0b, 0x7bc: 0x0b, 0x7bd: 0x0b, 0x7be: 0x0b, 0x7bf: 0x0b,
+       // Block 0x1f, offset 0x7c0
+       0x7c0: 0x0b, 0x7c1: 0x0b, 0x7c2: 0x0b, 0x7c3: 0x0b, 0x7c4: 0x0b, 0x7c5: 0x0b, 0x7c6: 0x0b, 0x7c7: 0x0b,
+       0x7c8: 0x0b, 0x7c9: 0x0b, 0x7ca: 0x0b, 0x7cb: 0x0b, 0x7cc: 0x0b, 0x7cd: 0x0b, 0x7ce: 0x0b, 0x7cf: 0x0b,
+       0x7d0: 0x0b, 0x7d1: 0x0b, 0x7d2: 0x0b, 0x7d3: 0x0b, 0x7d4: 0x0b, 0x7d5: 0x0b, 0x7d6: 0x0b, 0x7d7: 0x0b,
+       0x7d8: 0x0b, 0x7d9: 0x0b, 0x7da: 0x0b, 0x7db: 0x0b, 0x7dc: 0x0b, 0x7dd: 0x0b, 0x7de: 0x0b, 0x7df: 0x0b,
+       0x7e0: 0x0b, 0x7e1: 0x0b, 0x7e2: 0x0b, 0x7e3: 0x0b, 0x7e4: 0x0b, 0x7e5: 0x0b, 0x7e6: 0x0b, 0x7e7: 0x0b,
+       0x7e8: 0x0b, 0x7e9: 0x0b, 0x7ea: 0x0b, 0x7eb: 0x0b, 0x7ec: 0x0b, 0x7ed: 0x0b, 0x7ee: 0x0b, 0x7ef: 0x0b,
+       0x7f0: 0x0b, 0x7f1: 0x0b, 0x7f2: 0x0b, 0x7f3: 0x0b, 0x7f4: 0x0b, 0x7f5: 0x0b, 0x7f6: 0x0b, 0x7f7: 0x0b,
+       0x7f8: 0x0b, 0x7f9: 0x0b, 0x7fa: 0x0b, 0x7fb: 0x0b, 0x7fc: 0x0b, 0x7fd: 0x0b, 0x7fe: 0x0b, 0x7ff: 0x0b,
+       // Block 0x20, offset 0x800
+       0x800: 0x177, 0x801: 0x178, 0x802: 0xb8, 0x803: 0xb8, 0x804: 0x179, 0x805: 0x179, 0x806: 0x179, 0x807: 0x17a,
+       0x808: 0xb8, 0x809: 0xb8, 0x80a: 0xb8, 0x80b: 0xb8, 0x80c: 0xb8, 0x80d: 0xb8, 0x80e: 0xb8, 0x80f: 0xb8,
+       0x810: 0xb8, 0x811: 0xb8, 0x812: 0xb8, 0x813: 0xb8, 0x814: 0xb8, 0x815: 0xb8, 0x816: 0xb8, 0x817: 0xb8,
+       0x818: 0xb8, 0x819: 0xb8, 0x81a: 0xb8, 0x81b: 0xb8, 0x81c: 0xb8, 0x81d: 0xb8, 0x81e: 0xb8, 0x81f: 0xb8,
+       0x820: 0xb8, 0x821: 0xb8, 0x822: 0xb8, 0x823: 0xb8, 0x824: 0xb8, 0x825: 0xb8, 0x826: 0xb8, 0x827: 0xb8,
+       0x828: 0xb8, 0x829: 0xb8, 0x82a: 0xb8, 0x82b: 0xb8, 0x82c: 0xb8, 0x82d: 0xb8, 0x82e: 0xb8, 0x82f: 0xb8,
+       0x830: 0xb8, 0x831: 0xb8, 0x832: 0xb8, 0x833: 0xb8, 0x834: 0xb8, 0x835: 0xb8, 0x836: 0xb8, 0x837: 0xb8,
+       0x838: 0xb8, 0x839: 0xb8, 0x83a: 0xb8, 0x83b: 0xb8, 0x83c: 0xb8, 0x83d: 0xb8, 0x83e: 0xb8, 0x83f: 0xb8,
+       // Block 0x21, offset 0x840
+       0x840: 0x0b, 0x841: 0x0b, 0x842: 0x0b, 0x843: 0x0b, 0x844: 0x0b, 0x845: 0x0b, 0x846: 0x0b, 0x847: 0x0b,
+       0x848: 0x0b, 0x849: 0x0b, 0x84a: 0x0b, 0x84b: 0x0b, 0x84c: 0x0b, 0x84d: 0x0b, 0x84e: 0x0b, 0x84f: 0x0b,
+       0x850: 0x0b, 0x851: 0x0b, 0x852: 0x0b, 0x853: 0x0b, 0x854: 0x0b, 0x855: 0x0b, 0x856: 0x0b, 0x857: 0x0b,
+       0x858: 0x0b, 0x859: 0x0b, 0x85a: 0x0b, 0x85b: 0x0b, 0x85c: 0x0b, 0x85d: 0x0b, 0x85e: 0x0b, 0x85f: 0x0b,
+       0x860: 0x1e, 0x861: 0x0b, 0x862: 0x0b, 0x863: 0x0b, 0x864: 0x0b, 0x865: 0x0b, 0x866: 0x0b, 0x867: 0x0b,
+       0x868: 0x0b, 0x869: 0x0b, 0x86a: 0x0b, 0x86b: 0x0b, 0x86c: 0x0b, 0x86d: 0x0b, 0x86e: 0x0b, 0x86f: 0x0b,
+       0x870: 0x0b, 0x871: 0x0b, 0x872: 0x0b, 0x873: 0x0b, 0x874: 0x0b, 0x875: 0x0b, 0x876: 0x0b, 0x877: 0x0b,
+       0x878: 0x0b, 0x879: 0x0b, 0x87a: 0x0b, 0x87b: 0x0b, 0x87c: 0x0b, 0x87d: 0x0b, 0x87e: 0x0b, 0x87f: 0x0b,
+       // Block 0x22, offset 0x880
+       0x880: 0x0b, 0x881: 0x0b, 0x882: 0x0b, 0x883: 0x0b, 0x884: 0x0b, 0x885: 0x0b, 0x886: 0x0b, 0x887: 0x0b,
+       0x888: 0x0b, 0x889: 0x0b, 0x88a: 0x0b, 0x88b: 0x0b, 0x88c: 0x0b, 0x88d: 0x0b, 0x88e: 0x0b, 0x88f: 0x0b,
+}
+
+// idnaSparseOffset: 256 entries, 512 bytes
+var idnaSparseOffset = []uint16{0x0, 0x8, 0x19, 0x25, 0x27, 0x2c, 0x34, 0x3f, 0x4b, 0x5c, 0x60, 0x6f, 0x74, 0x7b, 0x87, 0x95, 0xa3, 0xa8, 0xb1, 0xc1, 0xcf, 0xdc, 0xe8, 0xf9, 0x103, 0x10a, 0x117, 0x128, 0x12f, 0x13a, 0x149, 0x157, 0x161, 0x163, 0x167, 0x169, 0x175, 0x180, 0x188, 0x18e, 0x194, 0x199, 0x19e, 0x1a1, 0x1a5, 0x1ab, 0x1b0, 0x1bc, 0x1c6, 0x1cc, 0x1dd, 0x1e7, 0x1ea, 0x1f2, 0x1f5, 0x202, 0x20a, 0x20e, 0x215, 0x21d, 0x22d, 0x239, 0x23b, 0x245, 0x251, 0x25d, 0x269, 0x271, 0x276, 0x280, 0x291, 0x295, 0x2a0, 0x2a4, 0x2ad, 0x2b5, 0x2bb, 0x2c0, 0x2c3, 0x2c6, 0x2ca, 0x2d0, 0x2d4, 0x2d8, 0x2de, 0x2e5, 0x2eb, 0x2f3, 0x2fa, 0x305, 0x30f, 0x313, 0x316, 0x31c, 0x320, 0x322, 0x325, 0x327, 0x32a, 0x334, 0x337, 0x346, 0x34a, 0x34f, 0x352, 0x356, 0x35b, 0x360, 0x366, 0x36c, 0x37b, 0x381, 0x385, 0x394, 0x399, 0x3a1, 0x3ab, 0x3b6, 0x3be, 0x3cf, 0x3d8, 0x3e8, 0x3f5, 0x3ff, 0x404, 0x411, 0x415, 0x41a, 0x41c, 0x420, 0x422, 0x426, 0x42f, 0x435, 0x439, 0x449, 0x453, 0x458, 0x45b, 0x461, 0x468, 0x46d, 0x471, 0x477, 0x47c, 0x485, 0x48a, 0x490, 0x497, 0x49e, 0x4a5, 0x4a9, 0x4ae, 0x4b1, 0x4b6, 0x4c2, 0x4c8, 0x4cd, 0x4d4, 0x4dc, 0x4e1, 0x4e5, 0x4f5, 0x4fc, 0x500, 0x504, 0x50b, 0x50e, 0x511, 0x515, 0x519, 0x51f, 0x528, 0x534, 0x53b, 0x544, 0x54c, 0x553, 0x561, 0x56e, 0x57b, 0x584, 0x588, 0x596, 0x59e, 0x5a9, 0x5b2, 0x5b8, 0x5c0, 0x5c9, 0x5d3, 0x5d6, 0x5e2, 0x5e5, 0x5ea, 0x5ed, 0x5f7, 0x600, 0x60c, 0x60f, 0x614, 0x617, 0x61a, 0x61d, 0x624, 0x62b, 0x62f, 0x63a, 0x63d, 0x643, 0x648, 0x64c, 0x64f, 0x652, 0x655, 0x65a, 0x664, 0x667, 0x66b, 0x67a, 0x686, 0x68a, 0x68f, 0x694, 0x698, 0x69d, 0x6a6, 0x6b1, 0x6b7, 0x6bf, 0x6c3, 0x6c7, 0x6cd, 0x6d3, 0x6d8, 0x6db, 0x6e9, 0x6f0, 0x6f3, 0x6f6, 0x6fa, 0x700, 0x705, 0x70f, 0x714, 0x717, 0x71a, 0x71d, 0x720, 0x724, 0x727, 0x737, 0x748, 0x74d, 0x74f, 0x751}
+
+// idnaSparseValues: 1876 entries, 7504 bytes
+var idnaSparseValues = [1876]valueRange{
+       // Block 0x0, offset 0x0
+       {value: 0x0000, lo: 0x07},
+       {value: 0xe105, lo: 0x80, hi: 0x96},
+       {value: 0x0018, lo: 0x97, hi: 0x97},
+       {value: 0xe105, lo: 0x98, hi: 0x9e},
+       {value: 0x001f, lo: 0x9f, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xb6},
+       {value: 0x0018, lo: 0xb7, hi: 0xb7},
+       {value: 0x0008, lo: 0xb8, hi: 0xbf},
+       // Block 0x1, offset 0x8
+       {value: 0x0000, lo: 0x10},
+       {value: 0x0008, lo: 0x80, hi: 0x80},
+       {value: 0xe01d, lo: 0x81, hi: 0x81},
+       {value: 0x0008, lo: 0x82, hi: 0x82},
+       {value: 0x0335, lo: 0x83, hi: 0x83},
+       {value: 0x034d, lo: 0x84, hi: 0x84},
+       {value: 0x0365, lo: 0x85, hi: 0x85},
+       {value: 0xe00d, lo: 0x86, hi: 0x86},
+       {value: 0x0008, lo: 0x87, hi: 0x87},
+       {value: 0xe00d, lo: 0x88, hi: 0x88},
+       {value: 0x0008, lo: 0x89, hi: 0x89},
+       {value: 0xe00d, lo: 0x8a, hi: 0x8a},
+       {value: 0x0008, lo: 0x8b, hi: 0x8b},
+       {value: 0xe00d, lo: 0x8c, hi: 0x8c},
+       {value: 0x0008, lo: 0x8d, hi: 0x8d},
+       {value: 0xe00d, lo: 0x8e, hi: 0x8e},
+       {value: 0x0008, lo: 0x8f, hi: 0xbf},
+       // Block 0x2, offset 0x19
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0008, lo: 0x80, hi: 0xaf},
+       {value: 0x0249, lo: 0xb0, hi: 0xb0},
+       {value: 0x037d, lo: 0xb1, hi: 0xb1},
+       {value: 0x0259, lo: 0xb2, hi: 0xb2},
+       {value: 0x0269, lo: 0xb3, hi: 0xb3},
+       {value: 0x034d, lo: 0xb4, hi: 0xb4},
+       {value: 0x0395, lo: 0xb5, hi: 0xb5},
+       {value: 0xe1bd, lo: 0xb6, hi: 0xb6},
+       {value: 0x0279, lo: 0xb7, hi: 0xb7},
+       {value: 0x0289, lo: 0xb8, hi: 0xb8},
+       {value: 0x0008, lo: 0xb9, hi: 0xbf},
+       // Block 0x3, offset 0x25
+       {value: 0x0000, lo: 0x01},
+       {value: 0x1308, lo: 0x80, hi: 0xbf},
+       // Block 0x4, offset 0x27
+       {value: 0x0000, lo: 0x04},
+       {value: 0x03f5, lo: 0x80, hi: 0x8f},
+       {value: 0xe105, lo: 0x90, hi: 0x9f},
+       {value: 0x049d, lo: 0xa0, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0x5, offset 0x2c
+       {value: 0x0000, lo: 0x07},
+       {value: 0xe185, lo: 0x80, hi: 0x8f},
+       {value: 0x0545, lo: 0x90, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0x98},
+       {value: 0x0008, lo: 0x99, hi: 0x99},
+       {value: 0x0018, lo: 0x9a, hi: 0x9f},
+       {value: 0x0040, lo: 0xa0, hi: 0xa0},
+       {value: 0x0008, lo: 0xa1, hi: 0xbf},
+       // Block 0x6, offset 0x34
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x0008, lo: 0x80, hi: 0x86},
+       {value: 0x0401, lo: 0x87, hi: 0x87},
+       {value: 0x0040, lo: 0x88, hi: 0x88},
+       {value: 0x0018, lo: 0x89, hi: 0x8a},
+       {value: 0x0040, lo: 0x8b, hi: 0x8c},
+       {value: 0x0018, lo: 0x8d, hi: 0x8f},
+       {value: 0x0040, lo: 0x90, hi: 0x90},
+       {value: 0x1308, lo: 0x91, hi: 0xbd},
+       {value: 0x0018, lo: 0xbe, hi: 0xbe},
+       {value: 0x1308, lo: 0xbf, hi: 0xbf},
+       // Block 0x7, offset 0x3f
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0018, lo: 0x80, hi: 0x80},
+       {value: 0x1308, lo: 0x81, hi: 0x82},
+       {value: 0x0018, lo: 0x83, hi: 0x83},
+       {value: 0x1308, lo: 0x84, hi: 0x85},
+       {value: 0x0018, lo: 0x86, hi: 0x86},
+       {value: 0x1308, lo: 0x87, hi: 0x87},
+       {value: 0x0040, lo: 0x88, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0xaa},
+       {value: 0x0040, lo: 0xab, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xb4},
+       {value: 0x0040, lo: 0xb5, hi: 0xbf},
+       // Block 0x8, offset 0x4b
+       {value: 0x0000, lo: 0x10},
+       {value: 0x0018, lo: 0x80, hi: 0x80},
+       {value: 0x0208, lo: 0x81, hi: 0x87},
+       {value: 0x0408, lo: 0x88, hi: 0x88},
+       {value: 0x0208, lo: 0x89, hi: 0x8a},
+       {value: 0x1308, lo: 0x8b, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa9},
+       {value: 0x0018, lo: 0xaa, hi: 0xad},
+       {value: 0x0208, lo: 0xae, hi: 0xaf},
+       {value: 0x1308, lo: 0xb0, hi: 0xb0},
+       {value: 0x0408, lo: 0xb1, hi: 0xb3},
+       {value: 0x0008, lo: 0xb4, hi: 0xb4},
+       {value: 0x0429, lo: 0xb5, hi: 0xb5},
+       {value: 0x0451, lo: 0xb6, hi: 0xb6},
+       {value: 0x0479, lo: 0xb7, hi: 0xb7},
+       {value: 0x04a1, lo: 0xb8, hi: 0xb8},
+       {value: 0x0208, lo: 0xb9, hi: 0xbf},
+       // Block 0x9, offset 0x5c
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0208, lo: 0x80, hi: 0x87},
+       {value: 0x0408, lo: 0x88, hi: 0x99},
+       {value: 0x0208, lo: 0x9a, hi: 0xbf},
+       // Block 0xa, offset 0x60
+       {value: 0x0000, lo: 0x0e},
+       {value: 0x1308, lo: 0x80, hi: 0x8a},
+       {value: 0x0040, lo: 0x8b, hi: 0x8c},
+       {value: 0x0408, lo: 0x8d, hi: 0x8d},
+       {value: 0x0208, lo: 0x8e, hi: 0x98},
+       {value: 0x0408, lo: 0x99, hi: 0x9b},
+       {value: 0x0208, lo: 0x9c, hi: 0xaa},
+       {value: 0x0408, lo: 0xab, hi: 0xac},
+       {value: 0x0208, lo: 0xad, hi: 0xb0},
+       {value: 0x0408, lo: 0xb1, hi: 0xb1},
+       {value: 0x0208, lo: 0xb2, hi: 0xb2},
+       {value: 0x0408, lo: 0xb3, hi: 0xb4},
+       {value: 0x0208, lo: 0xb5, hi: 0xb7},
+       {value: 0x0408, lo: 0xb8, hi: 0xb9},
+       {value: 0x0208, lo: 0xba, hi: 0xbf},
+       // Block 0xb, offset 0x6f
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0xa5},
+       {value: 0x1308, lo: 0xa6, hi: 0xb0},
+       {value: 0x0008, lo: 0xb1, hi: 0xb1},
+       {value: 0x0040, lo: 0xb2, hi: 0xbf},
+       // Block 0xc, offset 0x74
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0008, lo: 0x80, hi: 0x89},
+       {value: 0x0208, lo: 0x8a, hi: 0xaa},
+       {value: 0x1308, lo: 0xab, hi: 0xb3},
+       {value: 0x0008, lo: 0xb4, hi: 0xb5},
+       {value: 0x0018, lo: 0xb6, hi: 0xba},
+       {value: 0x0040, lo: 0xbb, hi: 0xbf},
+       // Block 0xd, offset 0x7b
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0008, lo: 0x80, hi: 0x95},
+       {value: 0x1308, lo: 0x96, hi: 0x99},
+       {value: 0x0008, lo: 0x9a, hi: 0x9a},
+       {value: 0x1308, lo: 0x9b, hi: 0xa3},
+       {value: 0x0008, lo: 0xa4, hi: 0xa4},
+       {value: 0x1308, lo: 0xa5, hi: 0xa7},
+       {value: 0x0008, lo: 0xa8, hi: 0xa8},
+       {value: 0x1308, lo: 0xa9, hi: 0xad},
+       {value: 0x0040, lo: 0xae, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0xe, offset 0x87
+       {value: 0x0000, lo: 0x0d},
+       {value: 0x0408, lo: 0x80, hi: 0x80},
+       {value: 0x0208, lo: 0x81, hi: 0x85},
+       {value: 0x0408, lo: 0x86, hi: 0x87},
+       {value: 0x0208, lo: 0x88, hi: 0x88},
+       {value: 0x0408, lo: 0x89, hi: 0x89},
+       {value: 0x0208, lo: 0x8a, hi: 0x93},
+       {value: 0x0408, lo: 0x94, hi: 0x94},
+       {value: 0x0208, lo: 0x95, hi: 0x95},
+       {value: 0x0008, lo: 0x96, hi: 0x98},
+       {value: 0x1308, lo: 0x99, hi: 0x9b},
+       {value: 0x0040, lo: 0x9c, hi: 0x9d},
+       {value: 0x0018, lo: 0x9e, hi: 0x9e},
+       {value: 0x0040, lo: 0x9f, hi: 0xbf},
+       // Block 0xf, offset 0x95
+       {value: 0x0000, lo: 0x0d},
+       {value: 0x0040, lo: 0x80, hi: 0x9f},
+       {value: 0x0208, lo: 0xa0, hi: 0xa9},
+       {value: 0x0408, lo: 0xaa, hi: 0xac},
+       {value: 0x0008, lo: 0xad, hi: 0xad},
+       {value: 0x0408, lo: 0xae, hi: 0xae},
+       {value: 0x0208, lo: 0xaf, hi: 0xb0},
+       {value: 0x0408, lo: 0xb1, hi: 0xb2},
+       {value: 0x0208, lo: 0xb3, hi: 0xb4},
+       {value: 0x0040, lo: 0xb5, hi: 0xb5},
+       {value: 0x0208, lo: 0xb6, hi: 0xb8},
+       {value: 0x0408, lo: 0xb9, hi: 0xb9},
+       {value: 0x0208, lo: 0xba, hi: 0xbd},
+       {value: 0x0040, lo: 0xbe, hi: 0xbf},
+       // Block 0x10, offset 0xa3
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0040, lo: 0x80, hi: 0x93},
+       {value: 0x1308, lo: 0x94, hi: 0xa1},
+       {value: 0x0040, lo: 0xa2, hi: 0xa2},
+       {value: 0x1308, lo: 0xa3, hi: 0xbf},
+       // Block 0x11, offset 0xa8
+       {value: 0x0000, lo: 0x08},
+       {value: 0x1308, lo: 0x80, hi: 0x82},
+       {value: 0x1008, lo: 0x83, hi: 0x83},
+       {value: 0x0008, lo: 0x84, hi: 0xb9},
+       {value: 0x1308, lo: 0xba, hi: 0xba},
+       {value: 0x1008, lo: 0xbb, hi: 0xbb},
+       {value: 0x1308, lo: 0xbc, hi: 0xbc},
+       {value: 0x0008, lo: 0xbd, hi: 0xbd},
+       {value: 0x1008, lo: 0xbe, hi: 0xbf},
+       // Block 0x12, offset 0xb1
+       {value: 0x0000, lo: 0x0f},
+       {value: 0x1308, lo: 0x80, hi: 0x80},
+       {value: 0x1008, lo: 0x81, hi: 0x82},
+       {value: 0x0040, lo: 0x83, hi: 0x85},
+       {value: 0x1008, lo: 0x86, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0x89},
+       {value: 0x1008, lo: 0x8a, hi: 0x8c},
+       {value: 0x1b08, lo: 0x8d, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x90},
+       {value: 0x0040, lo: 0x91, hi: 0x96},
+       {value: 0x1008, lo: 0x97, hi: 0x97},
+       {value: 0x0040, lo: 0x98, hi: 0xa5},
+       {value: 0x0008, lo: 0xa6, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xba},
+       {value: 0x0040, lo: 0xbb, hi: 0xbf},
+       // Block 0x13, offset 0xc1
+       {value: 0x0000, lo: 0x0d},
+       {value: 0x1308, lo: 0x80, hi: 0x80},
+       {value: 0x1008, lo: 0x81, hi: 0x83},
+       {value: 0x0040, lo: 0x84, hi: 0x84},
+       {value: 0x0008, lo: 0x85, hi: 0x8c},
+       {value: 0x0040, lo: 0x8d, hi: 0x8d},
+       {value: 0x0008, lo: 0x8e, hi: 0x90},
+       {value: 0x0040, lo: 0x91, hi: 0x91},
+       {value: 0x0008, lo: 0x92, hi: 0xa8},
+       {value: 0x0040, lo: 0xa9, hi: 0xa9},
+       {value: 0x0008, lo: 0xaa, hi: 0xb9},
+       {value: 0x0040, lo: 0xba, hi: 0xbc},
+       {value: 0x0008, lo: 0xbd, hi: 0xbd},
+       {value: 0x1308, lo: 0xbe, hi: 0xbf},
+       // Block 0x14, offset 0xcf
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x0040, lo: 0x80, hi: 0x80},
+       {value: 0x1308, lo: 0x81, hi: 0x81},
+       {value: 0x1008, lo: 0x82, hi: 0x83},
+       {value: 0x0040, lo: 0x84, hi: 0x84},
+       {value: 0x0008, lo: 0x85, hi: 0x8c},
+       {value: 0x0040, lo: 0x8d, hi: 0x8d},
+       {value: 0x0008, lo: 0x8e, hi: 0x90},
+       {value: 0x0040, lo: 0x91, hi: 0x91},
+       {value: 0x0008, lo: 0x92, hi: 0xba},
+       {value: 0x0040, lo: 0xbb, hi: 0xbc},
+       {value: 0x0008, lo: 0xbd, hi: 0xbd},
+       {value: 0x1008, lo: 0xbe, hi: 0xbf},
+       // Block 0x15, offset 0xdc
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0040, lo: 0x80, hi: 0x81},
+       {value: 0x1008, lo: 0x82, hi: 0x83},
+       {value: 0x0040, lo: 0x84, hi: 0x84},
+       {value: 0x0008, lo: 0x85, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0x99},
+       {value: 0x0008, lo: 0x9a, hi: 0xb1},
+       {value: 0x0040, lo: 0xb2, hi: 0xb2},
+       {value: 0x0008, lo: 0xb3, hi: 0xbb},
+       {value: 0x0040, lo: 0xbc, hi: 0xbc},
+       {value: 0x0008, lo: 0xbd, hi: 0xbd},
+       {value: 0x0040, lo: 0xbe, hi: 0xbf},
+       // Block 0x16, offset 0xe8
+       {value: 0x0000, lo: 0x10},
+       {value: 0x0008, lo: 0x80, hi: 0x86},
+       {value: 0x0040, lo: 0x87, hi: 0x89},
+       {value: 0x1b08, lo: 0x8a, hi: 0x8a},
+       {value: 0x0040, lo: 0x8b, hi: 0x8e},
+       {value: 0x1008, lo: 0x8f, hi: 0x91},
+       {value: 0x1308, lo: 0x92, hi: 0x94},
+       {value: 0x0040, lo: 0x95, hi: 0x95},
+       {value: 0x1308, lo: 0x96, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0x97},
+       {value: 0x1008, lo: 0x98, hi: 0x9f},
+       {value: 0x0040, lo: 0xa0, hi: 0xa5},
+       {value: 0x0008, lo: 0xa6, hi: 0xaf},
+       {value: 0x0040, lo: 0xb0, hi: 0xb1},
+       {value: 0x1008, lo: 0xb2, hi: 0xb3},
+       {value: 0x0018, lo: 0xb4, hi: 0xb4},
+       {value: 0x0040, lo: 0xb5, hi: 0xbf},
+       // Block 0x17, offset 0xf9
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0040, lo: 0x80, hi: 0x80},
+       {value: 0x0008, lo: 0x81, hi: 0xb0},
+       {value: 0x1308, lo: 0xb1, hi: 0xb1},
+       {value: 0x0008, lo: 0xb2, hi: 0xb2},
+       {value: 0x08f1, lo: 0xb3, hi: 0xb3},
+       {value: 0x1308, lo: 0xb4, hi: 0xb9},
+       {value: 0x1b08, lo: 0xba, hi: 0xba},
+       {value: 0x0040, lo: 0xbb, hi: 0xbe},
+       {value: 0x0018, lo: 0xbf, hi: 0xbf},
+       // Block 0x18, offset 0x103
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0008, lo: 0x80, hi: 0x86},
+       {value: 0x1308, lo: 0x87, hi: 0x8e},
+       {value: 0x0018, lo: 0x8f, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0018, lo: 0x9a, hi: 0x9b},
+       {value: 0x0040, lo: 0x9c, hi: 0xbf},
+       // Block 0x19, offset 0x10a
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x0008, lo: 0x80, hi: 0x84},
+       {value: 0x0040, lo: 0x85, hi: 0x85},
+       {value: 0x0008, lo: 0x86, hi: 0x86},
+       {value: 0x0040, lo: 0x87, hi: 0x87},
+       {value: 0x1308, lo: 0x88, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9b},
+       {value: 0x0961, lo: 0x9c, hi: 0x9c},
+       {value: 0x0999, lo: 0x9d, hi: 0x9d},
+       {value: 0x0008, lo: 0x9e, hi: 0x9f},
+       {value: 0x0040, lo: 0xa0, hi: 0xbf},
+       // Block 0x1a, offset 0x117
+       {value: 0x0000, lo: 0x10},
+       {value: 0x0008, lo: 0x80, hi: 0x80},
+       {value: 0x0018, lo: 0x81, hi: 0x8a},
+       {value: 0x0008, lo: 0x8b, hi: 0x8b},
+       {value: 0xe03d, lo: 0x8c, hi: 0x8c},
+       {value: 0x0018, lo: 0x8d, hi: 0x97},
+       {value: 0x1308, lo: 0x98, hi: 0x99},
+       {value: 0x0018, lo: 0x9a, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa9},
+       {value: 0x0018, lo: 0xaa, hi: 0xb4},
+       {value: 0x1308, lo: 0xb5, hi: 0xb5},
+       {value: 0x0018, lo: 0xb6, hi: 0xb6},
+       {value: 0x1308, lo: 0xb7, hi: 0xb7},
+       {value: 0x0018, lo: 0xb8, hi: 0xb8},
+       {value: 0x1308, lo: 0xb9, hi: 0xb9},
+       {value: 0x0018, lo: 0xba, hi: 0xbd},
+       {value: 0x1008, lo: 0xbe, hi: 0xbf},
+       // Block 0x1b, offset 0x128
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0018, lo: 0x80, hi: 0x85},
+       {value: 0x1308, lo: 0x86, hi: 0x86},
+       {value: 0x0018, lo: 0x87, hi: 0x8c},
+       {value: 0x0040, lo: 0x8d, hi: 0x8d},
+       {value: 0x0018, lo: 0x8e, hi: 0x9a},
+       {value: 0x0040, lo: 0x9b, hi: 0xbf},
+       // Block 0x1c, offset 0x12f
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x0008, lo: 0x80, hi: 0xaa},
+       {value: 0x1008, lo: 0xab, hi: 0xac},
+       {value: 0x1308, lo: 0xad, hi: 0xb0},
+       {value: 0x1008, lo: 0xb1, hi: 0xb1},
+       {value: 0x1308, lo: 0xb2, hi: 0xb7},
+       {value: 0x1008, lo: 0xb8, hi: 0xb8},
+       {value: 0x1b08, lo: 0xb9, hi: 0xba},
+       {value: 0x1008, lo: 0xbb, hi: 0xbc},
+       {value: 0x1308, lo: 0xbd, hi: 0xbe},
+       {value: 0x0008, lo: 0xbf, hi: 0xbf},
+       // Block 0x1d, offset 0x13a
+       {value: 0x0000, lo: 0x0e},
+       {value: 0x0008, lo: 0x80, hi: 0x89},
+       {value: 0x0018, lo: 0x8a, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x95},
+       {value: 0x1008, lo: 0x96, hi: 0x97},
+       {value: 0x1308, lo: 0x98, hi: 0x99},
+       {value: 0x0008, lo: 0x9a, hi: 0x9d},
+       {value: 0x1308, lo: 0x9e, hi: 0xa0},
+       {value: 0x0008, lo: 0xa1, hi: 0xa1},
+       {value: 0x1008, lo: 0xa2, hi: 0xa4},
+       {value: 0x0008, lo: 0xa5, hi: 0xa6},
+       {value: 0x1008, lo: 0xa7, hi: 0xad},
+       {value: 0x0008, lo: 0xae, hi: 0xb0},
+       {value: 0x1308, lo: 0xb1, hi: 0xb4},
+       {value: 0x0008, lo: 0xb5, hi: 0xbf},
+       // Block 0x1e, offset 0x149
+       {value: 0x0000, lo: 0x0d},
+       {value: 0x0008, lo: 0x80, hi: 0x81},
+       {value: 0x1308, lo: 0x82, hi: 0x82},
+       {value: 0x1008, lo: 0x83, hi: 0x84},
+       {value: 0x1308, lo: 0x85, hi: 0x86},
+       {value: 0x1008, lo: 0x87, hi: 0x8c},
+       {value: 0x1308, lo: 0x8d, hi: 0x8d},
+       {value: 0x0008, lo: 0x8e, hi: 0x8e},
+       {value: 0x1008, lo: 0x8f, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x1008, lo: 0x9a, hi: 0x9c},
+       {value: 0x1308, lo: 0x9d, hi: 0x9d},
+       {value: 0x0018, lo: 0x9e, hi: 0x9f},
+       {value: 0x0040, lo: 0xa0, hi: 0xbf},
+       // Block 0x1f, offset 0x157
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0040, lo: 0x80, hi: 0x86},
+       {value: 0x055d, lo: 0x87, hi: 0x87},
+       {value: 0x0040, lo: 0x88, hi: 0x8c},
+       {value: 0x055d, lo: 0x8d, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0xba},
+       {value: 0x0018, lo: 0xbb, hi: 0xbb},
+       {value: 0xe105, lo: 0xbc, hi: 0xbc},
+       {value: 0x0008, lo: 0xbd, hi: 0xbf},
+       // Block 0x20, offset 0x161
+       {value: 0x0000, lo: 0x01},
+       {value: 0x0018, lo: 0x80, hi: 0xbf},
+       // Block 0x21, offset 0x163
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0x9e},
+       {value: 0x0040, lo: 0x9f, hi: 0xa0},
+       {value: 0x0018, lo: 0xa1, hi: 0xbf},
+       // Block 0x22, offset 0x167
+       {value: 0x0000, lo: 0x01},
+       {value: 0x0008, lo: 0x80, hi: 0xbf},
+       // Block 0x23, offset 0x169
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0008, lo: 0x80, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0x89},
+       {value: 0x0008, lo: 0x8a, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0x97},
+       {value: 0x0008, lo: 0x98, hi: 0x98},
+       {value: 0x0040, lo: 0x99, hi: 0x99},
+       {value: 0x0008, lo: 0x9a, hi: 0x9d},
+       {value: 0x0040, lo: 0x9e, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xbf},
+       // Block 0x24, offset 0x175
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x0008, lo: 0x80, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0x89},
+       {value: 0x0008, lo: 0x8a, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0xb0},
+       {value: 0x0040, lo: 0xb1, hi: 0xb1},
+       {value: 0x0008, lo: 0xb2, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xb7},
+       {value: 0x0008, lo: 0xb8, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0x25, offset 0x180
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0008, lo: 0x80, hi: 0x80},
+       {value: 0x0040, lo: 0x81, hi: 0x81},
+       {value: 0x0008, lo: 0x82, hi: 0x85},
+       {value: 0x0040, lo: 0x86, hi: 0x87},
+       {value: 0x0008, lo: 0x88, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0x97},
+       {value: 0x0008, lo: 0x98, hi: 0xbf},
+       // Block 0x26, offset 0x188
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0008, lo: 0x80, hi: 0x90},
+       {value: 0x0040, lo: 0x91, hi: 0x91},
+       {value: 0x0008, lo: 0x92, hi: 0x95},
+       {value: 0x0040, lo: 0x96, hi: 0x97},
+       {value: 0x0008, lo: 0x98, hi: 0xbf},
+       // Block 0x27, offset 0x18e
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0008, lo: 0x80, hi: 0x9a},
+       {value: 0x0040, lo: 0x9b, hi: 0x9c},
+       {value: 0x1308, lo: 0x9d, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xbc},
+       {value: 0x0040, lo: 0xbd, hi: 0xbf},
+       // Block 0x28, offset 0x194
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xbf},
+       // Block 0x29, offset 0x199
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xb7},
+       {value: 0xe045, lo: 0xb8, hi: 0xbd},
+       {value: 0x0040, lo: 0xbe, hi: 0xbf},
+       // Block 0x2a, offset 0x19e
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0018, lo: 0x80, hi: 0x80},
+       {value: 0x0008, lo: 0x81, hi: 0xbf},
+       // Block 0x2b, offset 0x1a1
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0xac},
+       {value: 0x0018, lo: 0xad, hi: 0xae},
+       {value: 0x0008, lo: 0xaf, hi: 0xbf},
+       // Block 0x2c, offset 0x1a5
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0040, lo: 0x80, hi: 0x80},
+       {value: 0x0008, lo: 0x81, hi: 0x9a},
+       {value: 0x0018, lo: 0x9b, hi: 0x9c},
+       {value: 0x0040, lo: 0x9d, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xbf},
+       // Block 0x2d, offset 0x1ab
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0xaa},
+       {value: 0x0018, lo: 0xab, hi: 0xb0},
+       {value: 0x0008, lo: 0xb1, hi: 0xb8},
+       {value: 0x0040, lo: 0xb9, hi: 0xbf},
+       // Block 0x2e, offset 0x1b0
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0008, lo: 0x80, hi: 0x8c},
+       {value: 0x0040, lo: 0x8d, hi: 0x8d},
+       {value: 0x0008, lo: 0x8e, hi: 0x91},
+       {value: 0x1308, lo: 0x92, hi: 0x93},
+       {value: 0x1b08, lo: 0x94, hi: 0x94},
+       {value: 0x0040, lo: 0x95, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xb1},
+       {value: 0x1308, lo: 0xb2, hi: 0xb3},
+       {value: 0x1b08, lo: 0xb4, hi: 0xb4},
+       {value: 0x0018, lo: 0xb5, hi: 0xb6},
+       {value: 0x0040, lo: 0xb7, hi: 0xbf},
+       // Block 0x2f, offset 0x1bc
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0008, lo: 0x80, hi: 0x91},
+       {value: 0x1308, lo: 0x92, hi: 0x93},
+       {value: 0x0040, lo: 0x94, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xac},
+       {value: 0x0040, lo: 0xad, hi: 0xad},
+       {value: 0x0008, lo: 0xae, hi: 0xb0},
+       {value: 0x0040, lo: 0xb1, hi: 0xb1},
+       {value: 0x1308, lo: 0xb2, hi: 0xb3},
+       {value: 0x0040, lo: 0xb4, hi: 0xbf},
+       // Block 0x30, offset 0x1c6
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0008, lo: 0x80, hi: 0xb3},
+       {value: 0x1340, lo: 0xb4, hi: 0xb5},
+       {value: 0x1008, lo: 0xb6, hi: 0xb6},
+       {value: 0x1308, lo: 0xb7, hi: 0xbd},
+       {value: 0x1008, lo: 0xbe, hi: 0xbf},
+       // Block 0x31, offset 0x1cc
+       {value: 0x0000, lo: 0x10},
+       {value: 0x1008, lo: 0x80, hi: 0x85},
+       {value: 0x1308, lo: 0x86, hi: 0x86},
+       {value: 0x1008, lo: 0x87, hi: 0x88},
+       {value: 0x1308, lo: 0x89, hi: 0x91},
+       {value: 0x1b08, lo: 0x92, hi: 0x92},
+       {value: 0x1308, lo: 0x93, hi: 0x93},
+       {value: 0x0018, lo: 0x94, hi: 0x96},
+       {value: 0x0008, lo: 0x97, hi: 0x97},
+       {value: 0x0018, lo: 0x98, hi: 0x9b},
+       {value: 0x0008, lo: 0x9c, hi: 0x9c},
+       {value: 0x1308, lo: 0x9d, hi: 0x9d},
+       {value: 0x0040, lo: 0x9e, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa9},
+       {value: 0x0040, lo: 0xaa, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xb9},
+       {value: 0x0040, lo: 0xba, hi: 0xbf},
+       // Block 0x32, offset 0x1dd
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0018, lo: 0x80, hi: 0x85},
+       {value: 0x0040, lo: 0x86, hi: 0x86},
+       {value: 0x0218, lo: 0x87, hi: 0x87},
+       {value: 0x0018, lo: 0x88, hi: 0x8a},
+       {value: 0x13c0, lo: 0x8b, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9f},
+       {value: 0x0208, lo: 0xa0, hi: 0xbf},
+       // Block 0x33, offset 0x1e7
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0208, lo: 0x80, hi: 0xb7},
+       {value: 0x0040, lo: 0xb8, hi: 0xbf},
+       // Block 0x34, offset 0x1ea
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0008, lo: 0x80, hi: 0x84},
+       {value: 0x1308, lo: 0x85, hi: 0x86},
+       {value: 0x0208, lo: 0x87, hi: 0xa8},
+       {value: 0x1308, lo: 0xa9, hi: 0xa9},
+       {value: 0x0208, lo: 0xaa, hi: 0xaa},
+       {value: 0x0040, lo: 0xab, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0x35, offset 0x1f2
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xbf},
+       // Block 0x36, offset 0x1f5
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x0008, lo: 0x80, hi: 0x9e},
+       {value: 0x0040, lo: 0x9f, hi: 0x9f},
+       {value: 0x1308, lo: 0xa0, hi: 0xa2},
+       {value: 0x1008, lo: 0xa3, hi: 0xa6},
+       {value: 0x1308, lo: 0xa7, hi: 0xa8},
+       {value: 0x1008, lo: 0xa9, hi: 0xab},
+       {value: 0x0040, lo: 0xac, hi: 0xaf},
+       {value: 0x1008, lo: 0xb0, hi: 0xb1},
+       {value: 0x1308, lo: 0xb2, hi: 0xb2},
+       {value: 0x1008, lo: 0xb3, hi: 0xb8},
+       {value: 0x1308, lo: 0xb9, hi: 0xbb},
+       {value: 0x0040, lo: 0xbc, hi: 0xbf},
+       // Block 0x37, offset 0x202
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0018, lo: 0x80, hi: 0x80},
+       {value: 0x0040, lo: 0x81, hi: 0x83},
+       {value: 0x0018, lo: 0x84, hi: 0x85},
+       {value: 0x0008, lo: 0x86, hi: 0xad},
+       {value: 0x0040, lo: 0xae, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xb4},
+       {value: 0x0040, lo: 0xb5, hi: 0xbf},
+       // Block 0x38, offset 0x20a
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0xab},
+       {value: 0x0040, lo: 0xac, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0x39, offset 0x20e
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0008, lo: 0x80, hi: 0x89},
+       {value: 0x0040, lo: 0x8a, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0028, lo: 0x9a, hi: 0x9a},
+       {value: 0x0040, lo: 0x9b, hi: 0x9d},
+       {value: 0x0018, lo: 0x9e, hi: 0xbf},
+       // Block 0x3a, offset 0x215
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0008, lo: 0x80, hi: 0x96},
+       {value: 0x1308, lo: 0x97, hi: 0x98},
+       {value: 0x1008, lo: 0x99, hi: 0x9a},
+       {value: 0x1308, lo: 0x9b, hi: 0x9b},
+       {value: 0x0040, lo: 0x9c, hi: 0x9d},
+       {value: 0x0018, lo: 0x9e, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xbf},
+       // Block 0x3b, offset 0x21d
+       {value: 0x0000, lo: 0x0f},
+       {value: 0x0008, lo: 0x80, hi: 0x94},
+       {value: 0x1008, lo: 0x95, hi: 0x95},
+       {value: 0x1308, lo: 0x96, hi: 0x96},
+       {value: 0x1008, lo: 0x97, hi: 0x97},
+       {value: 0x1308, lo: 0x98, hi: 0x9e},
+       {value: 0x0040, lo: 0x9f, hi: 0x9f},
+       {value: 0x1b08, lo: 0xa0, hi: 0xa0},
+       {value: 0x1008, lo: 0xa1, hi: 0xa1},
+       {value: 0x1308, lo: 0xa2, hi: 0xa2},
+       {value: 0x1008, lo: 0xa3, hi: 0xa4},
+       {value: 0x1308, lo: 0xa5, hi: 0xac},
+       {value: 0x1008, lo: 0xad, hi: 0xb2},
+       {value: 0x1308, lo: 0xb3, hi: 0xbc},
+       {value: 0x0040, lo: 0xbd, hi: 0xbe},
+       {value: 0x1308, lo: 0xbf, hi: 0xbf},
+       // Block 0x3c, offset 0x22d
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0008, lo: 0x80, hi: 0x89},
+       {value: 0x0040, lo: 0x8a, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xa6},
+       {value: 0x0008, lo: 0xa7, hi: 0xa7},
+       {value: 0x0018, lo: 0xa8, hi: 0xad},
+       {value: 0x0040, lo: 0xae, hi: 0xaf},
+       {value: 0x1308, lo: 0xb0, hi: 0xbd},
+       {value: 0x1318, lo: 0xbe, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0x3d, offset 0x239
+       {value: 0x0000, lo: 0x01},
+       {value: 0x0040, lo: 0x80, hi: 0xbf},
+       // Block 0x3e, offset 0x23b
+       {value: 0x0000, lo: 0x09},
+       {value: 0x1308, lo: 0x80, hi: 0x83},
+       {value: 0x1008, lo: 0x84, hi: 0x84},
+       {value: 0x0008, lo: 0x85, hi: 0xb3},
+       {value: 0x1308, lo: 0xb4, hi: 0xb4},
+       {value: 0x1008, lo: 0xb5, hi: 0xb5},
+       {value: 0x1308, lo: 0xb6, hi: 0xba},
+       {value: 0x1008, lo: 0xbb, hi: 0xbb},
+       {value: 0x1308, lo: 0xbc, hi: 0xbc},
+       {value: 0x1008, lo: 0xbd, hi: 0xbf},
+       // Block 0x3f, offset 0x245
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x1008, lo: 0x80, hi: 0x81},
+       {value: 0x1308, lo: 0x82, hi: 0x82},
+       {value: 0x1008, lo: 0x83, hi: 0x83},
+       {value: 0x1808, lo: 0x84, hi: 0x84},
+       {value: 0x0008, lo: 0x85, hi: 0x8b},
+       {value: 0x0040, lo: 0x8c, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0018, lo: 0x9a, hi: 0xaa},
+       {value: 0x1308, lo: 0xab, hi: 0xb3},
+       {value: 0x0018, lo: 0xb4, hi: 0xbc},
+       {value: 0x0040, lo: 0xbd, hi: 0xbf},
+       // Block 0x40, offset 0x251
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x1308, lo: 0x80, hi: 0x81},
+       {value: 0x1008, lo: 0x82, hi: 0x82},
+       {value: 0x0008, lo: 0x83, hi: 0xa0},
+       {value: 0x1008, lo: 0xa1, hi: 0xa1},
+       {value: 0x1308, lo: 0xa2, hi: 0xa5},
+       {value: 0x1008, lo: 0xa6, hi: 0xa7},
+       {value: 0x1308, lo: 0xa8, hi: 0xa9},
+       {value: 0x1808, lo: 0xaa, hi: 0xaa},
+       {value: 0x1b08, lo: 0xab, hi: 0xab},
+       {value: 0x1308, lo: 0xac, hi: 0xad},
+       {value: 0x0008, lo: 0xae, hi: 0xbf},
+       // Block 0x41, offset 0x25d
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0008, lo: 0x80, hi: 0xa5},
+       {value: 0x1308, lo: 0xa6, hi: 0xa6},
+       {value: 0x1008, lo: 0xa7, hi: 0xa7},
+       {value: 0x1308, lo: 0xa8, hi: 0xa9},
+       {value: 0x1008, lo: 0xaa, hi: 0xac},
+       {value: 0x1308, lo: 0xad, hi: 0xad},
+       {value: 0x1008, lo: 0xae, hi: 0xae},
+       {value: 0x1308, lo: 0xaf, hi: 0xb1},
+       {value: 0x1808, lo: 0xb2, hi: 0xb3},
+       {value: 0x0040, lo: 0xb4, hi: 0xbb},
+       {value: 0x0018, lo: 0xbc, hi: 0xbf},
+       // Block 0x42, offset 0x269
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0008, lo: 0x80, hi: 0xa3},
+       {value: 0x1008, lo: 0xa4, hi: 0xab},
+       {value: 0x1308, lo: 0xac, hi: 0xb3},
+       {value: 0x1008, lo: 0xb4, hi: 0xb5},
+       {value: 0x1308, lo: 0xb6, hi: 0xb7},
+       {value: 0x0040, lo: 0xb8, hi: 0xba},
+       {value: 0x0018, lo: 0xbb, hi: 0xbf},
+       // Block 0x43, offset 0x271
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0x89},
+       {value: 0x0040, lo: 0x8a, hi: 0x8c},
+       {value: 0x0008, lo: 0x8d, hi: 0xbd},
+       {value: 0x0018, lo: 0xbe, hi: 0xbf},
+       // Block 0x44, offset 0x276
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0e29, lo: 0x80, hi: 0x80},
+       {value: 0x0e41, lo: 0x81, hi: 0x81},
+       {value: 0x0e59, lo: 0x82, hi: 0x82},
+       {value: 0x0e71, lo: 0x83, hi: 0x83},
+       {value: 0x0e89, lo: 0x84, hi: 0x85},
+       {value: 0x0ea1, lo: 0x86, hi: 0x86},
+       {value: 0x0eb9, lo: 0x87, hi: 0x87},
+       {value: 0x057d, lo: 0x88, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0xbf},
+       // Block 0x45, offset 0x280
+       {value: 0x0000, lo: 0x10},
+       {value: 0x0018, lo: 0x80, hi: 0x87},
+       {value: 0x0040, lo: 0x88, hi: 0x8f},
+       {value: 0x1308, lo: 0x90, hi: 0x92},
+       {value: 0x0018, lo: 0x93, hi: 0x93},
+       {value: 0x1308, lo: 0x94, hi: 0xa0},
+       {value: 0x1008, lo: 0xa1, hi: 0xa1},
+       {value: 0x1308, lo: 0xa2, hi: 0xa8},
+       {value: 0x0008, lo: 0xa9, hi: 0xac},
+       {value: 0x1308, lo: 0xad, hi: 0xad},
+       {value: 0x0008, lo: 0xae, hi: 0xb1},
+       {value: 0x1008, lo: 0xb2, hi: 0xb3},
+       {value: 0x1308, lo: 0xb4, hi: 0xb4},
+       {value: 0x0008, lo: 0xb5, hi: 0xb6},
+       {value: 0x0040, lo: 0xb7, hi: 0xb7},
+       {value: 0x1308, lo: 0xb8, hi: 0xb9},
+       {value: 0x0040, lo: 0xba, hi: 0xbf},
+       // Block 0x46, offset 0x291
+       {value: 0x0000, lo: 0x03},
+       {value: 0x1308, lo: 0x80, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xba},
+       {value: 0x1308, lo: 0xbb, hi: 0xbf},
+       // Block 0x47, offset 0x295
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x0008, lo: 0x80, hi: 0x87},
+       {value: 0xe045, lo: 0x88, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x95},
+       {value: 0x0040, lo: 0x96, hi: 0x97},
+       {value: 0xe045, lo: 0x98, hi: 0x9d},
+       {value: 0x0040, lo: 0x9e, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa7},
+       {value: 0xe045, lo: 0xa8, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xb7},
+       {value: 0xe045, lo: 0xb8, hi: 0xbf},
+       // Block 0x48, offset 0x2a0
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0040, lo: 0x80, hi: 0x8f},
+       {value: 0x1318, lo: 0x90, hi: 0xb0},
+       {value: 0x0040, lo: 0xb1, hi: 0xbf},
+       // Block 0x49, offset 0x2a4
+       {value: 0x0000, lo: 0x08},
+       {value: 0x0018, lo: 0x80, hi: 0x82},
+       {value: 0x0040, lo: 0x83, hi: 0x83},
+       {value: 0x0008, lo: 0x84, hi: 0x84},
+       {value: 0x0018, lo: 0x85, hi: 0x88},
+       {value: 0x24c1, lo: 0x89, hi: 0x89},
+       {value: 0x0018, lo: 0x8a, hi: 0x8b},
+       {value: 0x0040, lo: 0x8c, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0xbf},
+       // Block 0x4a, offset 0x2ad
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0018, lo: 0x80, hi: 0xab},
+       {value: 0x24f1, lo: 0xac, hi: 0xac},
+       {value: 0x2529, lo: 0xad, hi: 0xad},
+       {value: 0x0018, lo: 0xae, hi: 0xae},
+       {value: 0x2579, lo: 0xaf, hi: 0xaf},
+       {value: 0x25b1, lo: 0xb0, hi: 0xb0},
+       {value: 0x0018, lo: 0xb1, hi: 0xbf},
+       // Block 0x4b, offset 0x2b5
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0018, lo: 0x80, hi: 0x9f},
+       {value: 0x0080, lo: 0xa0, hi: 0xa0},
+       {value: 0x0018, lo: 0xa1, hi: 0xad},
+       {value: 0x0080, lo: 0xae, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xbf},
+       // Block 0x4c, offset 0x2bb
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0018, lo: 0x80, hi: 0xa8},
+       {value: 0x09c5, lo: 0xa9, hi: 0xa9},
+       {value: 0x09e5, lo: 0xaa, hi: 0xaa},
+       {value: 0x0018, lo: 0xab, hi: 0xbf},
+       // Block 0x4d, offset 0x2c0
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0018, lo: 0x80, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0x4e, offset 0x2c3
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0018, lo: 0x80, hi: 0xa6},
+       {value: 0x0040, lo: 0xa7, hi: 0xbf},
+       // Block 0x4f, offset 0x2c6
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0x8b},
+       {value: 0x28c1, lo: 0x8c, hi: 0x8c},
+       {value: 0x0018, lo: 0x8d, hi: 0xbf},
+       // Block 0x50, offset 0x2ca
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0018, lo: 0x80, hi: 0xb3},
+       {value: 0x0e66, lo: 0xb4, hi: 0xb4},
+       {value: 0x292a, lo: 0xb5, hi: 0xb5},
+       {value: 0x0e86, lo: 0xb6, hi: 0xb6},
+       {value: 0x0018, lo: 0xb7, hi: 0xbf},
+       // Block 0x51, offset 0x2d0
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0x9b},
+       {value: 0x2941, lo: 0x9c, hi: 0x9c},
+       {value: 0x0018, lo: 0x9d, hi: 0xbf},
+       // Block 0x52, offset 0x2d4
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0xb3},
+       {value: 0x0040, lo: 0xb4, hi: 0xb5},
+       {value: 0x0018, lo: 0xb6, hi: 0xbf},
+       // Block 0x53, offset 0x2d8
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0018, lo: 0x80, hi: 0x95},
+       {value: 0x0040, lo: 0x96, hi: 0x97},
+       {value: 0x0018, lo: 0x98, hi: 0xb9},
+       {value: 0x0040, lo: 0xba, hi: 0xbc},
+       {value: 0x0018, lo: 0xbd, hi: 0xbf},
+       // Block 0x54, offset 0x2de
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0018, lo: 0x80, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0x89},
+       {value: 0x0018, lo: 0x8a, hi: 0x91},
+       {value: 0x0040, lo: 0x92, hi: 0xab},
+       {value: 0x0018, lo: 0xac, hi: 0xaf},
+       {value: 0x0040, lo: 0xb0, hi: 0xbf},
+       // Block 0x55, offset 0x2e5
+       {value: 0x0000, lo: 0x05},
+       {value: 0xe185, lo: 0x80, hi: 0x8f},
+       {value: 0x03f5, lo: 0x90, hi: 0x9f},
+       {value: 0x0ea5, lo: 0xa0, hi: 0xae},
+       {value: 0x0040, lo: 0xaf, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0x56, offset 0x2eb
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0008, lo: 0x80, hi: 0xa5},
+       {value: 0x0040, lo: 0xa6, hi: 0xa6},
+       {value: 0x0008, lo: 0xa7, hi: 0xa7},
+       {value: 0x0040, lo: 0xa8, hi: 0xac},
+       {value: 0x0008, lo: 0xad, hi: 0xad},
+       {value: 0x0040, lo: 0xae, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0x57, offset 0x2f3
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0008, lo: 0x80, hi: 0xa7},
+       {value: 0x0040, lo: 0xa8, hi: 0xae},
+       {value: 0xe075, lo: 0xaf, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xb0},
+       {value: 0x0040, lo: 0xb1, hi: 0xbe},
+       {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+       // Block 0x58, offset 0x2fa
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x0008, lo: 0x80, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa6},
+       {value: 0x0040, lo: 0xa7, hi: 0xa7},
+       {value: 0x0008, lo: 0xa8, hi: 0xae},
+       {value: 0x0040, lo: 0xaf, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xb6},
+       {value: 0x0040, lo: 0xb7, hi: 0xb7},
+       {value: 0x0008, lo: 0xb8, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0x59, offset 0x305
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0008, lo: 0x80, hi: 0x86},
+       {value: 0x0040, lo: 0x87, hi: 0x87},
+       {value: 0x0008, lo: 0x88, hi: 0x8e},
+       {value: 0x0040, lo: 0x8f, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0x97},
+       {value: 0x0008, lo: 0x98, hi: 0x9e},
+       {value: 0x0040, lo: 0x9f, hi: 0x9f},
+       {value: 0x1308, lo: 0xa0, hi: 0xbf},
+       // Block 0x5a, offset 0x30f
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0xae},
+       {value: 0x0008, lo: 0xaf, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xbf},
+       // Block 0x5b, offset 0x313
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0018, lo: 0x80, hi: 0x84},
+       {value: 0x0040, lo: 0x85, hi: 0xbf},
+       // Block 0x5c, offset 0x316
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0018, lo: 0x80, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9a},
+       {value: 0x0018, lo: 0x9b, hi: 0x9e},
+       {value: 0x0edd, lo: 0x9f, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xbf},
+       // Block 0x5d, offset 0x31c
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0xb2},
+       {value: 0x0efd, lo: 0xb3, hi: 0xb3},
+       {value: 0x0040, lo: 0xb4, hi: 0xbf},
+       // Block 0x5e, offset 0x320
+       {value: 0x0020, lo: 0x01},
+       {value: 0x0f1d, lo: 0x80, hi: 0xbf},
+       // Block 0x5f, offset 0x322
+       {value: 0x0020, lo: 0x02},
+       {value: 0x171d, lo: 0x80, hi: 0x8f},
+       {value: 0x18fd, lo: 0x90, hi: 0xbf},
+       // Block 0x60, offset 0x325
+       {value: 0x0020, lo: 0x01},
+       {value: 0x1efd, lo: 0x80, hi: 0xbf},
+       // Block 0x61, offset 0x327
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0040, lo: 0x80, hi: 0x80},
+       {value: 0x0008, lo: 0x81, hi: 0xbf},
+       // Block 0x62, offset 0x32a
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0008, lo: 0x80, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0x98},
+       {value: 0x1308, lo: 0x99, hi: 0x9a},
+       {value: 0x29e2, lo: 0x9b, hi: 0x9b},
+       {value: 0x2a0a, lo: 0x9c, hi: 0x9c},
+       {value: 0x0008, lo: 0x9d, hi: 0x9e},
+       {value: 0x2a31, lo: 0x9f, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xa0},
+       {value: 0x0008, lo: 0xa1, hi: 0xbf},
+       // Block 0x63, offset 0x334
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0xbe},
+       {value: 0x2a69, lo: 0xbf, hi: 0xbf},
+       // Block 0x64, offset 0x337
+       {value: 0x0000, lo: 0x0e},
+       {value: 0x0040, lo: 0x80, hi: 0x84},
+       {value: 0x0008, lo: 0x85, hi: 0xad},
+       {value: 0x0040, lo: 0xae, hi: 0xb0},
+       {value: 0x2a1d, lo: 0xb1, hi: 0xb1},
+       {value: 0x2a3d, lo: 0xb2, hi: 0xb2},
+       {value: 0x2a5d, lo: 0xb3, hi: 0xb3},
+       {value: 0x2a7d, lo: 0xb4, hi: 0xb4},
+       {value: 0x2a5d, lo: 0xb5, hi: 0xb5},
+       {value: 0x2a9d, lo: 0xb6, hi: 0xb6},
+       {value: 0x2abd, lo: 0xb7, hi: 0xb7},
+       {value: 0x2add, lo: 0xb8, hi: 0xb9},
+       {value: 0x2afd, lo: 0xba, hi: 0xbb},
+       {value: 0x2b1d, lo: 0xbc, hi: 0xbd},
+       {value: 0x2afd, lo: 0xbe, hi: 0xbf},
+       // Block 0x65, offset 0x346
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0xa3},
+       {value: 0x0040, lo: 0xa4, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0x66, offset 0x34a
+       {value: 0x0030, lo: 0x04},
+       {value: 0x2aa2, lo: 0x80, hi: 0x9d},
+       {value: 0x305a, lo: 0x9e, hi: 0x9e},
+       {value: 0x0040, lo: 0x9f, hi: 0x9f},
+       {value: 0x30a2, lo: 0xa0, hi: 0xbf},
+       // Block 0x67, offset 0x34f
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0x95},
+       {value: 0x0040, lo: 0x96, hi: 0xbf},
+       // Block 0x68, offset 0x352
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0x8c},
+       {value: 0x0040, lo: 0x8d, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0xbf},
+       // Block 0x69, offset 0x356
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0018, lo: 0x80, hi: 0x86},
+       {value: 0x0040, lo: 0x87, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0xbd},
+       {value: 0x0018, lo: 0xbe, hi: 0xbf},
+       // Block 0x6a, offset 0x35b
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0x8c},
+       {value: 0x0018, lo: 0x8d, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0xab},
+       {value: 0x0040, lo: 0xac, hi: 0xbf},
+       // Block 0x6b, offset 0x360
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0008, lo: 0x80, hi: 0xa5},
+       {value: 0x0018, lo: 0xa6, hi: 0xaf},
+       {value: 0x1308, lo: 0xb0, hi: 0xb1},
+       {value: 0x0018, lo: 0xb2, hi: 0xb7},
+       {value: 0x0040, lo: 0xb8, hi: 0xbf},
+       // Block 0x6c, offset 0x366
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0040, lo: 0x80, hi: 0xb6},
+       {value: 0x0008, lo: 0xb7, hi: 0xb7},
+       {value: 0x2009, lo: 0xb8, hi: 0xb8},
+       {value: 0x6e89, lo: 0xb9, hi: 0xb9},
+       {value: 0x0008, lo: 0xba, hi: 0xbf},
+       // Block 0x6d, offset 0x36c
+       {value: 0x0000, lo: 0x0e},
+       {value: 0x0008, lo: 0x80, hi: 0x81},
+       {value: 0x1308, lo: 0x82, hi: 0x82},
+       {value: 0x0008, lo: 0x83, hi: 0x85},
+       {value: 0x1b08, lo: 0x86, hi: 0x86},
+       {value: 0x0008, lo: 0x87, hi: 0x8a},
+       {value: 0x1308, lo: 0x8b, hi: 0x8b},
+       {value: 0x0008, lo: 0x8c, hi: 0xa2},
+       {value: 0x1008, lo: 0xa3, hi: 0xa4},
+       {value: 0x1308, lo: 0xa5, hi: 0xa6},
+       {value: 0x1008, lo: 0xa7, hi: 0xa7},
+       {value: 0x0018, lo: 0xa8, hi: 0xab},
+       {value: 0x0040, lo: 0xac, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xb9},
+       {value: 0x0040, lo: 0xba, hi: 0xbf},
+       // Block 0x6e, offset 0x37b
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0208, lo: 0x80, hi: 0xb1},
+       {value: 0x0108, lo: 0xb2, hi: 0xb2},
+       {value: 0x0008, lo: 0xb3, hi: 0xb3},
+       {value: 0x0018, lo: 0xb4, hi: 0xb7},
+       {value: 0x0040, lo: 0xb8, hi: 0xbf},
+       // Block 0x6f, offset 0x381
+       {value: 0x0000, lo: 0x03},
+       {value: 0x1008, lo: 0x80, hi: 0x81},
+       {value: 0x0008, lo: 0x82, hi: 0xb3},
+       {value: 0x1008, lo: 0xb4, hi: 0xbf},
+       // Block 0x70, offset 0x385
+       {value: 0x0000, lo: 0x0e},
+       {value: 0x1008, lo: 0x80, hi: 0x83},
+       {value: 0x1b08, lo: 0x84, hi: 0x84},
+       {value: 0x1308, lo: 0x85, hi: 0x85},
+       {value: 0x0040, lo: 0x86, hi: 0x8d},
+       {value: 0x0018, lo: 0x8e, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9f},
+       {value: 0x1308, lo: 0xa0, hi: 0xb1},
+       {value: 0x0008, lo: 0xb2, hi: 0xb7},
+       {value: 0x0018, lo: 0xb8, hi: 0xba},
+       {value: 0x0008, lo: 0xbb, hi: 0xbb},
+       {value: 0x0018, lo: 0xbc, hi: 0xbc},
+       {value: 0x0008, lo: 0xbd, hi: 0xbd},
+       {value: 0x0040, lo: 0xbe, hi: 0xbf},
+       // Block 0x71, offset 0x394
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0xa5},
+       {value: 0x1308, lo: 0xa6, hi: 0xad},
+       {value: 0x0018, lo: 0xae, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0x72, offset 0x399
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0008, lo: 0x80, hi: 0x86},
+       {value: 0x1308, lo: 0x87, hi: 0x91},
+       {value: 0x1008, lo: 0x92, hi: 0x92},
+       {value: 0x1808, lo: 0x93, hi: 0x93},
+       {value: 0x0040, lo: 0x94, hi: 0x9e},
+       {value: 0x0018, lo: 0x9f, hi: 0xbc},
+       {value: 0x0040, lo: 0xbd, hi: 0xbf},
+       // Block 0x73, offset 0x3a1
+       {value: 0x0000, lo: 0x09},
+       {value: 0x1308, lo: 0x80, hi: 0x82},
+       {value: 0x1008, lo: 0x83, hi: 0x83},
+       {value: 0x0008, lo: 0x84, hi: 0xb2},
+       {value: 0x1308, lo: 0xb3, hi: 0xb3},
+       {value: 0x1008, lo: 0xb4, hi: 0xb5},
+       {value: 0x1308, lo: 0xb6, hi: 0xb9},
+       {value: 0x1008, lo: 0xba, hi: 0xbb},
+       {value: 0x1308, lo: 0xbc, hi: 0xbc},
+       {value: 0x1008, lo: 0xbd, hi: 0xbf},
+       // Block 0x74, offset 0x3ab
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x1808, lo: 0x80, hi: 0x80},
+       {value: 0x0018, lo: 0x81, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8e},
+       {value: 0x0008, lo: 0x8f, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9d},
+       {value: 0x0018, lo: 0x9e, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa4},
+       {value: 0x1308, lo: 0xa5, hi: 0xa5},
+       {value: 0x0008, lo: 0xa6, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0x75, offset 0x3b6
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0008, lo: 0x80, hi: 0xa8},
+       {value: 0x1308, lo: 0xa9, hi: 0xae},
+       {value: 0x1008, lo: 0xaf, hi: 0xb0},
+       {value: 0x1308, lo: 0xb1, hi: 0xb2},
+       {value: 0x1008, lo: 0xb3, hi: 0xb4},
+       {value: 0x1308, lo: 0xb5, hi: 0xb6},
+       {value: 0x0040, lo: 0xb7, hi: 0xbf},
+       // Block 0x76, offset 0x3be
+       {value: 0x0000, lo: 0x10},
+       {value: 0x0008, lo: 0x80, hi: 0x82},
+       {value: 0x1308, lo: 0x83, hi: 0x83},
+       {value: 0x0008, lo: 0x84, hi: 0x8b},
+       {value: 0x1308, lo: 0x8c, hi: 0x8c},
+       {value: 0x1008, lo: 0x8d, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9b},
+       {value: 0x0018, lo: 0x9c, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xb6},
+       {value: 0x0018, lo: 0xb7, hi: 0xb9},
+       {value: 0x0008, lo: 0xba, hi: 0xba},
+       {value: 0x1008, lo: 0xbb, hi: 0xbb},
+       {value: 0x1308, lo: 0xbc, hi: 0xbc},
+       {value: 0x1008, lo: 0xbd, hi: 0xbd},
+       {value: 0x0008, lo: 0xbe, hi: 0xbf},
+       // Block 0x77, offset 0x3cf
+       {value: 0x0000, lo: 0x08},
+       {value: 0x0008, lo: 0x80, hi: 0xaf},
+       {value: 0x1308, lo: 0xb0, hi: 0xb0},
+       {value: 0x0008, lo: 0xb1, hi: 0xb1},
+       {value: 0x1308, lo: 0xb2, hi: 0xb4},
+       {value: 0x0008, lo: 0xb5, hi: 0xb6},
+       {value: 0x1308, lo: 0xb7, hi: 0xb8},
+       {value: 0x0008, lo: 0xb9, hi: 0xbd},
+       {value: 0x1308, lo: 0xbe, hi: 0xbf},
+       // Block 0x78, offset 0x3d8
+       {value: 0x0000, lo: 0x0f},
+       {value: 0x0008, lo: 0x80, hi: 0x80},
+       {value: 0x1308, lo: 0x81, hi: 0x81},
+       {value: 0x0008, lo: 0x82, hi: 0x82},
+       {value: 0x0040, lo: 0x83, hi: 0x9a},
+       {value: 0x0008, lo: 0x9b, hi: 0x9d},
+       {value: 0x0018, lo: 0x9e, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xaa},
+       {value: 0x1008, lo: 0xab, hi: 0xab},
+       {value: 0x1308, lo: 0xac, hi: 0xad},
+       {value: 0x1008, lo: 0xae, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xb1},
+       {value: 0x0008, lo: 0xb2, hi: 0xb4},
+       {value: 0x1008, lo: 0xb5, hi: 0xb5},
+       {value: 0x1b08, lo: 0xb6, hi: 0xb6},
+       {value: 0x0040, lo: 0xb7, hi: 0xbf},
+       // Block 0x79, offset 0x3e8
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x0040, lo: 0x80, hi: 0x80},
+       {value: 0x0008, lo: 0x81, hi: 0x86},
+       {value: 0x0040, lo: 0x87, hi: 0x88},
+       {value: 0x0008, lo: 0x89, hi: 0x8e},
+       {value: 0x0040, lo: 0x8f, hi: 0x90},
+       {value: 0x0008, lo: 0x91, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa6},
+       {value: 0x0040, lo: 0xa7, hi: 0xa7},
+       {value: 0x0008, lo: 0xa8, hi: 0xae},
+       {value: 0x0040, lo: 0xaf, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0x7a, offset 0x3f5
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0008, lo: 0x80, hi: 0x9a},
+       {value: 0x0018, lo: 0x9b, hi: 0x9b},
+       {value: 0x4465, lo: 0x9c, hi: 0x9c},
+       {value: 0x447d, lo: 0x9d, hi: 0x9d},
+       {value: 0x2971, lo: 0x9e, hi: 0x9e},
+       {value: 0xe06d, lo: 0x9f, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa5},
+       {value: 0x0040, lo: 0xa6, hi: 0xaf},
+       {value: 0x4495, lo: 0xb0, hi: 0xbf},
+       // Block 0x7b, offset 0x3ff
+       {value: 0x0000, lo: 0x04},
+       {value: 0x44b5, lo: 0x80, hi: 0x8f},
+       {value: 0x44d5, lo: 0x90, hi: 0x9f},
+       {value: 0x44f5, lo: 0xa0, hi: 0xaf},
+       {value: 0x44d5, lo: 0xb0, hi: 0xbf},
+       // Block 0x7c, offset 0x404
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x0008, lo: 0x80, hi: 0xa2},
+       {value: 0x1008, lo: 0xa3, hi: 0xa4},
+       {value: 0x1308, lo: 0xa5, hi: 0xa5},
+       {value: 0x1008, lo: 0xa6, hi: 0xa7},
+       {value: 0x1308, lo: 0xa8, hi: 0xa8},
+       {value: 0x1008, lo: 0xa9, hi: 0xaa},
+       {value: 0x0018, lo: 0xab, hi: 0xab},
+       {value: 0x1008, lo: 0xac, hi: 0xac},
+       {value: 0x1b08, lo: 0xad, hi: 0xad},
+       {value: 0x0040, lo: 0xae, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xb9},
+       {value: 0x0040, lo: 0xba, hi: 0xbf},
+       // Block 0x7d, offset 0x411
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0xa3},
+       {value: 0x0040, lo: 0xa4, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xbf},
+       // Block 0x7e, offset 0x415
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0018, lo: 0x80, hi: 0x86},
+       {value: 0x0040, lo: 0x87, hi: 0x8a},
+       {value: 0x0018, lo: 0x8b, hi: 0xbb},
+       {value: 0x0040, lo: 0xbc, hi: 0xbf},
+       // Block 0x7f, offset 0x41a
+       {value: 0x0020, lo: 0x01},
+       {value: 0x4515, lo: 0x80, hi: 0xbf},
+       // Block 0x80, offset 0x41c
+       {value: 0x0020, lo: 0x03},
+       {value: 0x4d15, lo: 0x80, hi: 0x94},
+       {value: 0x4ad5, lo: 0x95, hi: 0x95},
+       {value: 0x4fb5, lo: 0x96, hi: 0xbf},
+       // Block 0x81, offset 0x420
+       {value: 0x0020, lo: 0x01},
+       {value: 0x54f5, lo: 0x80, hi: 0xbf},
+       // Block 0x82, offset 0x422
+       {value: 0x0020, lo: 0x03},
+       {value: 0x5cf5, lo: 0x80, hi: 0x84},
+       {value: 0x5655, lo: 0x85, hi: 0x85},
+       {value: 0x5d95, lo: 0x86, hi: 0xbf},
+       // Block 0x83, offset 0x426
+       {value: 0x0020, lo: 0x08},
+       {value: 0x6b55, lo: 0x80, hi: 0x8f},
+       {value: 0x6d15, lo: 0x90, hi: 0x90},
+       {value: 0x6d55, lo: 0x91, hi: 0xab},
+       {value: 0x6ea1, lo: 0xac, hi: 0xac},
+       {value: 0x70b5, lo: 0xad, hi: 0xad},
+       {value: 0x0040, lo: 0xae, hi: 0xae},
+       {value: 0x0040, lo: 0xaf, hi: 0xaf},
+       {value: 0x70d5, lo: 0xb0, hi: 0xbf},
+       // Block 0x84, offset 0x42f
+       {value: 0x0020, lo: 0x05},
+       {value: 0x72d5, lo: 0x80, hi: 0xad},
+       {value: 0x6535, lo: 0xae, hi: 0xae},
+       {value: 0x7895, lo: 0xaf, hi: 0xb5},
+       {value: 0x6f55, lo: 0xb6, hi: 0xb6},
+       {value: 0x7975, lo: 0xb7, hi: 0xbf},
+       // Block 0x85, offset 0x435
+       {value: 0x0028, lo: 0x03},
+       {value: 0x7c21, lo: 0x80, hi: 0x82},
+       {value: 0x7be1, lo: 0x83, hi: 0x83},
+       {value: 0x7c99, lo: 0x84, hi: 0xbf},
+       // Block 0x86, offset 0x439
+       {value: 0x0038, lo: 0x0f},
+       {value: 0x9db1, lo: 0x80, hi: 0x83},
+       {value: 0x9e59, lo: 0x84, hi: 0x85},
+       {value: 0x9e91, lo: 0x86, hi: 0x87},
+       {value: 0x9ec9, lo: 0x88, hi: 0x8f},
+       {value: 0x0040, lo: 0x90, hi: 0x90},
+       {value: 0x0040, lo: 0x91, hi: 0x91},
+       {value: 0xa089, lo: 0x92, hi: 0x97},
+       {value: 0xa1a1, lo: 0x98, hi: 0x9c},
+       {value: 0xa281, lo: 0x9d, hi: 0xb3},
+       {value: 0x9d41, lo: 0xb4, hi: 0xb4},
+       {value: 0x9db1, lo: 0xb5, hi: 0xb5},
+       {value: 0xa789, lo: 0xb6, hi: 0xbb},
+       {value: 0xa869, lo: 0xbc, hi: 0xbc},
+       {value: 0xa7f9, lo: 0xbd, hi: 0xbd},
+       {value: 0xa8d9, lo: 0xbe, hi: 0xbf},
+       // Block 0x87, offset 0x449
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0008, lo: 0x80, hi: 0x8b},
+       {value: 0x0040, lo: 0x8c, hi: 0x8c},
+       {value: 0x0008, lo: 0x8d, hi: 0xa6},
+       {value: 0x0040, lo: 0xa7, hi: 0xa7},
+       {value: 0x0008, lo: 0xa8, hi: 0xba},
+       {value: 0x0040, lo: 0xbb, hi: 0xbb},
+       {value: 0x0008, lo: 0xbc, hi: 0xbd},
+       {value: 0x0040, lo: 0xbe, hi: 0xbe},
+       {value: 0x0008, lo: 0xbf, hi: 0xbf},
+       // Block 0x88, offset 0x453
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x9d},
+       {value: 0x0040, lo: 0x9e, hi: 0xbf},
+       // Block 0x89, offset 0x458
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0xba},
+       {value: 0x0040, lo: 0xbb, hi: 0xbf},
+       // Block 0x8a, offset 0x45b
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0018, lo: 0x80, hi: 0x82},
+       {value: 0x0040, lo: 0x83, hi: 0x86},
+       {value: 0x0018, lo: 0x87, hi: 0xb3},
+       {value: 0x0040, lo: 0xb4, hi: 0xb6},
+       {value: 0x0018, lo: 0xb7, hi: 0xbf},
+       // Block 0x8b, offset 0x461
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0018, lo: 0x80, hi: 0x8e},
+       {value: 0x0040, lo: 0x8f, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0x9b},
+       {value: 0x0040, lo: 0x9c, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xa0},
+       {value: 0x0040, lo: 0xa1, hi: 0xbf},
+       // Block 0x8c, offset 0x468
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0040, lo: 0x80, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0xbc},
+       {value: 0x1308, lo: 0xbd, hi: 0xbd},
+       {value: 0x0040, lo: 0xbe, hi: 0xbf},
+       // Block 0x8d, offset 0x46d
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0x9c},
+       {value: 0x0040, lo: 0x9d, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xbf},
+       // Block 0x8e, offset 0x471
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0008, lo: 0x80, hi: 0x90},
+       {value: 0x0040, lo: 0x91, hi: 0x9f},
+       {value: 0x1308, lo: 0xa0, hi: 0xa0},
+       {value: 0x0018, lo: 0xa1, hi: 0xbb},
+       {value: 0x0040, lo: 0xbc, hi: 0xbf},
+       // Block 0x8f, offset 0x477
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xa3},
+       {value: 0x0040, lo: 0xa4, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0x90, offset 0x47c
+       {value: 0x0000, lo: 0x08},
+       {value: 0x0008, lo: 0x80, hi: 0x80},
+       {value: 0x0018, lo: 0x81, hi: 0x81},
+       {value: 0x0008, lo: 0x82, hi: 0x89},
+       {value: 0x0018, lo: 0x8a, hi: 0x8a},
+       {value: 0x0040, lo: 0x8b, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0xb5},
+       {value: 0x1308, lo: 0xb6, hi: 0xba},
+       {value: 0x0040, lo: 0xbb, hi: 0xbf},
+       // Block 0x91, offset 0x485
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0x9d},
+       {value: 0x0040, lo: 0x9e, hi: 0x9e},
+       {value: 0x0018, lo: 0x9f, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xbf},
+       // Block 0x92, offset 0x48a
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0008, lo: 0x80, hi: 0x83},
+       {value: 0x0040, lo: 0x84, hi: 0x87},
+       {value: 0x0008, lo: 0x88, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0x95},
+       {value: 0x0040, lo: 0x96, hi: 0xbf},
+       // Block 0x93, offset 0x490
+       {value: 0x0000, lo: 0x06},
+       {value: 0xe145, lo: 0x80, hi: 0x87},
+       {value: 0xe1c5, lo: 0x88, hi: 0x8f},
+       {value: 0xe145, lo: 0x90, hi: 0x97},
+       {value: 0x8ad5, lo: 0x98, hi: 0x9f},
+       {value: 0x8aed, lo: 0xa0, hi: 0xa7},
+       {value: 0x0008, lo: 0xa8, hi: 0xbf},
+       // Block 0x94, offset 0x497
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0008, lo: 0x80, hi: 0x9d},
+       {value: 0x0040, lo: 0x9e, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa9},
+       {value: 0x0040, lo: 0xaa, hi: 0xaf},
+       {value: 0x8aed, lo: 0xb0, hi: 0xb7},
+       {value: 0x8ad5, lo: 0xb8, hi: 0xbf},
+       // Block 0x95, offset 0x49e
+       {value: 0x0000, lo: 0x06},
+       {value: 0xe145, lo: 0x80, hi: 0x87},
+       {value: 0xe1c5, lo: 0x88, hi: 0x8f},
+       {value: 0xe145, lo: 0x90, hi: 0x93},
+       {value: 0x0040, lo: 0x94, hi: 0x97},
+       {value: 0x0008, lo: 0x98, hi: 0xbb},
+       {value: 0x0040, lo: 0xbc, hi: 0xbf},
+       // Block 0x96, offset 0x4a5
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0xa7},
+       {value: 0x0040, lo: 0xa8, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0x97, offset 0x4a9
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0xa3},
+       {value: 0x0040, lo: 0xa4, hi: 0xae},
+       {value: 0x0018, lo: 0xaf, hi: 0xaf},
+       {value: 0x0040, lo: 0xb0, hi: 0xbf},
+       // Block 0x98, offset 0x4ae
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0xb6},
+       {value: 0x0040, lo: 0xb7, hi: 0xbf},
+       // Block 0x99, offset 0x4b1
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0x95},
+       {value: 0x0040, lo: 0x96, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa7},
+       {value: 0x0040, lo: 0xa8, hi: 0xbf},
+       // Block 0x9a, offset 0x4b6
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0008, lo: 0x80, hi: 0x85},
+       {value: 0x0040, lo: 0x86, hi: 0x87},
+       {value: 0x0008, lo: 0x88, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0x89},
+       {value: 0x0008, lo: 0x8a, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xb6},
+       {value: 0x0008, lo: 0xb7, hi: 0xb8},
+       {value: 0x0040, lo: 0xb9, hi: 0xbb},
+       {value: 0x0008, lo: 0xbc, hi: 0xbc},
+       {value: 0x0040, lo: 0xbd, hi: 0xbe},
+       {value: 0x0008, lo: 0xbf, hi: 0xbf},
+       // Block 0x9b, offset 0x4c2
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0008, lo: 0x80, hi: 0x95},
+       {value: 0x0040, lo: 0x96, hi: 0x96},
+       {value: 0x0018, lo: 0x97, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xb6},
+       {value: 0x0018, lo: 0xb7, hi: 0xbf},
+       // Block 0x9c, offset 0x4c8
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0x9e},
+       {value: 0x0040, lo: 0x9f, hi: 0xa6},
+       {value: 0x0018, lo: 0xa7, hi: 0xaf},
+       {value: 0x0040, lo: 0xb0, hi: 0xbf},
+       // Block 0x9d, offset 0x4cd
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0040, lo: 0x80, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xb2},
+       {value: 0x0040, lo: 0xb3, hi: 0xb3},
+       {value: 0x0008, lo: 0xb4, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xba},
+       {value: 0x0018, lo: 0xbb, hi: 0xbf},
+       // Block 0x9e, offset 0x4d4
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0008, lo: 0x80, hi: 0x95},
+       {value: 0x0018, lo: 0x96, hi: 0x9b},
+       {value: 0x0040, lo: 0x9c, hi: 0x9e},
+       {value: 0x0018, lo: 0x9f, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xb9},
+       {value: 0x0040, lo: 0xba, hi: 0xbe},
+       {value: 0x0018, lo: 0xbf, hi: 0xbf},
+       // Block 0x9f, offset 0x4dc
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0xb7},
+       {value: 0x0040, lo: 0xb8, hi: 0xbb},
+       {value: 0x0018, lo: 0xbc, hi: 0xbd},
+       {value: 0x0008, lo: 0xbe, hi: 0xbf},
+       // Block 0xa0, offset 0x4e1
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0x8f},
+       {value: 0x0040, lo: 0x90, hi: 0x91},
+       {value: 0x0018, lo: 0x92, hi: 0xbf},
+       // Block 0xa1, offset 0x4e5
+       {value: 0x0000, lo: 0x0f},
+       {value: 0x0008, lo: 0x80, hi: 0x80},
+       {value: 0x1308, lo: 0x81, hi: 0x83},
+       {value: 0x0040, lo: 0x84, hi: 0x84},
+       {value: 0x1308, lo: 0x85, hi: 0x86},
+       {value: 0x0040, lo: 0x87, hi: 0x8b},
+       {value: 0x1308, lo: 0x8c, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x93},
+       {value: 0x0040, lo: 0x94, hi: 0x94},
+       {value: 0x0008, lo: 0x95, hi: 0x97},
+       {value: 0x0040, lo: 0x98, hi: 0x98},
+       {value: 0x0008, lo: 0x99, hi: 0xb3},
+       {value: 0x0040, lo: 0xb4, hi: 0xb7},
+       {value: 0x1308, lo: 0xb8, hi: 0xba},
+       {value: 0x0040, lo: 0xbb, hi: 0xbe},
+       {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+       // Block 0xa2, offset 0x4f5
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0018, lo: 0x80, hi: 0x87},
+       {value: 0x0040, lo: 0x88, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0x98},
+       {value: 0x0040, lo: 0x99, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xbc},
+       {value: 0x0018, lo: 0xbd, hi: 0xbf},
+       // Block 0xa3, offset 0x4fc
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0x9c},
+       {value: 0x0018, lo: 0x9d, hi: 0x9f},
+       {value: 0x0040, lo: 0xa0, hi: 0xbf},
+       // Block 0xa4, offset 0x500
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xb8},
+       {value: 0x0018, lo: 0xb9, hi: 0xbf},
+       // Block 0xa5, offset 0x504
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0008, lo: 0x80, hi: 0x95},
+       {value: 0x0040, lo: 0x96, hi: 0x97},
+       {value: 0x0018, lo: 0x98, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xb2},
+       {value: 0x0040, lo: 0xb3, hi: 0xb7},
+       {value: 0x0018, lo: 0xb8, hi: 0xbf},
+       // Block 0xa6, offset 0x50b
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0xbf},
+       // Block 0xa7, offset 0x50e
+       {value: 0x0000, lo: 0x02},
+       {value: 0x03dd, lo: 0x80, hi: 0xb2},
+       {value: 0x0040, lo: 0xb3, hi: 0xbf},
+       // Block 0xa8, offset 0x511
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0xb2},
+       {value: 0x0040, lo: 0xb3, hi: 0xb9},
+       {value: 0x0018, lo: 0xba, hi: 0xbf},
+       // Block 0xa9, offset 0x515
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0040, lo: 0x80, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0xaa, offset 0x519
+       {value: 0x0000, lo: 0x05},
+       {value: 0x1008, lo: 0x80, hi: 0x80},
+       {value: 0x1308, lo: 0x81, hi: 0x81},
+       {value: 0x1008, lo: 0x82, hi: 0x82},
+       {value: 0x0008, lo: 0x83, hi: 0xb7},
+       {value: 0x1308, lo: 0xb8, hi: 0xbf},
+       // Block 0xab, offset 0x51f
+       {value: 0x0000, lo: 0x08},
+       {value: 0x1308, lo: 0x80, hi: 0x85},
+       {value: 0x1b08, lo: 0x86, hi: 0x86},
+       {value: 0x0018, lo: 0x87, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x91},
+       {value: 0x0018, lo: 0x92, hi: 0xa5},
+       {value: 0x0008, lo: 0xa6, hi: 0xaf},
+       {value: 0x0040, lo: 0xb0, hi: 0xbe},
+       {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+       // Block 0xac, offset 0x528
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x1308, lo: 0x80, hi: 0x81},
+       {value: 0x1008, lo: 0x82, hi: 0x82},
+       {value: 0x0008, lo: 0x83, hi: 0xaf},
+       {value: 0x1008, lo: 0xb0, hi: 0xb2},
+       {value: 0x1308, lo: 0xb3, hi: 0xb6},
+       {value: 0x1008, lo: 0xb7, hi: 0xb8},
+       {value: 0x1b08, lo: 0xb9, hi: 0xb9},
+       {value: 0x1308, lo: 0xba, hi: 0xba},
+       {value: 0x0018, lo: 0xbb, hi: 0xbc},
+       {value: 0x0340, lo: 0xbd, hi: 0xbd},
+       {value: 0x0018, lo: 0xbe, hi: 0xbf},
+       // Block 0xad, offset 0x534
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0018, lo: 0x80, hi: 0x81},
+       {value: 0x0040, lo: 0x82, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0xa8},
+       {value: 0x0040, lo: 0xa9, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xb9},
+       {value: 0x0040, lo: 0xba, hi: 0xbf},
+       // Block 0xae, offset 0x53b
+       {value: 0x0000, lo: 0x08},
+       {value: 0x1308, lo: 0x80, hi: 0x82},
+       {value: 0x0008, lo: 0x83, hi: 0xa6},
+       {value: 0x1308, lo: 0xa7, hi: 0xab},
+       {value: 0x1008, lo: 0xac, hi: 0xac},
+       {value: 0x1308, lo: 0xad, hi: 0xb2},
+       {value: 0x1b08, lo: 0xb3, hi: 0xb4},
+       {value: 0x0040, lo: 0xb5, hi: 0xb5},
+       {value: 0x0008, lo: 0xb6, hi: 0xbf},
+       // Block 0xaf, offset 0x544
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0018, lo: 0x80, hi: 0x83},
+       {value: 0x0040, lo: 0x84, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0xb2},
+       {value: 0x1308, lo: 0xb3, hi: 0xb3},
+       {value: 0x0018, lo: 0xb4, hi: 0xb5},
+       {value: 0x0008, lo: 0xb6, hi: 0xb6},
+       {value: 0x0040, lo: 0xb7, hi: 0xbf},
+       // Block 0xb0, offset 0x54c
+       {value: 0x0000, lo: 0x06},
+       {value: 0x1308, lo: 0x80, hi: 0x81},
+       {value: 0x1008, lo: 0x82, hi: 0x82},
+       {value: 0x0008, lo: 0x83, hi: 0xb2},
+       {value: 0x1008, lo: 0xb3, hi: 0xb5},
+       {value: 0x1308, lo: 0xb6, hi: 0xbe},
+       {value: 0x1008, lo: 0xbf, hi: 0xbf},
+       // Block 0xb1, offset 0x553
+       {value: 0x0000, lo: 0x0d},
+       {value: 0x1808, lo: 0x80, hi: 0x80},
+       {value: 0x0008, lo: 0x81, hi: 0x84},
+       {value: 0x0018, lo: 0x85, hi: 0x89},
+       {value: 0x1308, lo: 0x8a, hi: 0x8c},
+       {value: 0x0018, lo: 0x8d, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x9a},
+       {value: 0x0018, lo: 0x9b, hi: 0x9b},
+       {value: 0x0008, lo: 0x9c, hi: 0x9c},
+       {value: 0x0018, lo: 0x9d, hi: 0x9f},
+       {value: 0x0040, lo: 0xa0, hi: 0xa0},
+       {value: 0x0018, lo: 0xa1, hi: 0xb4},
+       {value: 0x0040, lo: 0xb5, hi: 0xbf},
+       // Block 0xb2, offset 0x561
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x0008, lo: 0x80, hi: 0x91},
+       {value: 0x0040, lo: 0x92, hi: 0x92},
+       {value: 0x0008, lo: 0x93, hi: 0xab},
+       {value: 0x1008, lo: 0xac, hi: 0xae},
+       {value: 0x1308, lo: 0xaf, hi: 0xb1},
+       {value: 0x1008, lo: 0xb2, hi: 0xb3},
+       {value: 0x1308, lo: 0xb4, hi: 0xb4},
+       {value: 0x1808, lo: 0xb5, hi: 0xb5},
+       {value: 0x1308, lo: 0xb6, hi: 0xb7},
+       {value: 0x0018, lo: 0xb8, hi: 0xbd},
+       {value: 0x1308, lo: 0xbe, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0xb3, offset 0x56e
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x0008, lo: 0x80, hi: 0x86},
+       {value: 0x0040, lo: 0x87, hi: 0x87},
+       {value: 0x0008, lo: 0x88, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0x89},
+       {value: 0x0008, lo: 0x8a, hi: 0x8d},
+       {value: 0x0040, lo: 0x8e, hi: 0x8e},
+       {value: 0x0008, lo: 0x8f, hi: 0x9d},
+       {value: 0x0040, lo: 0x9e, hi: 0x9e},
+       {value: 0x0008, lo: 0x9f, hi: 0xa8},
+       {value: 0x0018, lo: 0xa9, hi: 0xa9},
+       {value: 0x0040, lo: 0xaa, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbf},
+       // Block 0xb4, offset 0x57b
+       {value: 0x0000, lo: 0x08},
+       {value: 0x0008, lo: 0x80, hi: 0x9e},
+       {value: 0x1308, lo: 0x9f, hi: 0x9f},
+       {value: 0x1008, lo: 0xa0, hi: 0xa2},
+       {value: 0x1308, lo: 0xa3, hi: 0xa9},
+       {value: 0x1b08, lo: 0xaa, hi: 0xaa},
+       {value: 0x0040, lo: 0xab, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xb9},
+       {value: 0x0040, lo: 0xba, hi: 0xbf},
+       // Block 0xb5, offset 0x584
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0xb4},
+       {value: 0x1008, lo: 0xb5, hi: 0xb7},
+       {value: 0x1308, lo: 0xb8, hi: 0xbf},
+       // Block 0xb6, offset 0x588
+       {value: 0x0000, lo: 0x0d},
+       {value: 0x1008, lo: 0x80, hi: 0x81},
+       {value: 0x1b08, lo: 0x82, hi: 0x82},
+       {value: 0x1308, lo: 0x83, hi: 0x84},
+       {value: 0x1008, lo: 0x85, hi: 0x85},
+       {value: 0x1308, lo: 0x86, hi: 0x86},
+       {value: 0x0008, lo: 0x87, hi: 0x8a},
+       {value: 0x0018, lo: 0x8b, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9a},
+       {value: 0x0018, lo: 0x9b, hi: 0x9b},
+       {value: 0x0040, lo: 0x9c, hi: 0x9c},
+       {value: 0x0018, lo: 0x9d, hi: 0x9d},
+       {value: 0x0040, lo: 0x9e, hi: 0xbf},
+       // Block 0xb7, offset 0x596
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0008, lo: 0x80, hi: 0xaf},
+       {value: 0x1008, lo: 0xb0, hi: 0xb2},
+       {value: 0x1308, lo: 0xb3, hi: 0xb8},
+       {value: 0x1008, lo: 0xb9, hi: 0xb9},
+       {value: 0x1308, lo: 0xba, hi: 0xba},
+       {value: 0x1008, lo: 0xbb, hi: 0xbe},
+       {value: 0x1308, lo: 0xbf, hi: 0xbf},
+       // Block 0xb8, offset 0x59e
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x1308, lo: 0x80, hi: 0x80},
+       {value: 0x1008, lo: 0x81, hi: 0x81},
+       {value: 0x1b08, lo: 0x82, hi: 0x82},
+       {value: 0x1308, lo: 0x83, hi: 0x83},
+       {value: 0x0008, lo: 0x84, hi: 0x85},
+       {value: 0x0018, lo: 0x86, hi: 0x86},
+       {value: 0x0008, lo: 0x87, hi: 0x87},
+       {value: 0x0040, lo: 0x88, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0xbf},
+       // Block 0xb9, offset 0x5a9
+       {value: 0x0000, lo: 0x08},
+       {value: 0x0008, lo: 0x80, hi: 0xae},
+       {value: 0x1008, lo: 0xaf, hi: 0xb1},
+       {value: 0x1308, lo: 0xb2, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xb7},
+       {value: 0x1008, lo: 0xb8, hi: 0xbb},
+       {value: 0x1308, lo: 0xbc, hi: 0xbd},
+       {value: 0x1008, lo: 0xbe, hi: 0xbe},
+       {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+       // Block 0xba, offset 0x5b2
+       {value: 0x0000, lo: 0x05},
+       {value: 0x1308, lo: 0x80, hi: 0x80},
+       {value: 0x0018, lo: 0x81, hi: 0x97},
+       {value: 0x0008, lo: 0x98, hi: 0x9b},
+       {value: 0x1308, lo: 0x9c, hi: 0x9d},
+       {value: 0x0040, lo: 0x9e, hi: 0xbf},
+       // Block 0xbb, offset 0x5b8
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0008, lo: 0x80, hi: 0xaf},
+       {value: 0x1008, lo: 0xb0, hi: 0xb2},
+       {value: 0x1308, lo: 0xb3, hi: 0xba},
+       {value: 0x1008, lo: 0xbb, hi: 0xbc},
+       {value: 0x1308, lo: 0xbd, hi: 0xbd},
+       {value: 0x1008, lo: 0xbe, hi: 0xbe},
+       {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+       // Block 0xbc, offset 0x5c0
+       {value: 0x0000, lo: 0x08},
+       {value: 0x1308, lo: 0x80, hi: 0x80},
+       {value: 0x0018, lo: 0x81, hi: 0x83},
+       {value: 0x0008, lo: 0x84, hi: 0x84},
+       {value: 0x0040, lo: 0x85, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xac},
+       {value: 0x0040, lo: 0xad, hi: 0xbf},
+       // Block 0xbd, offset 0x5c9
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0008, lo: 0x80, hi: 0xaa},
+       {value: 0x1308, lo: 0xab, hi: 0xab},
+       {value: 0x1008, lo: 0xac, hi: 0xac},
+       {value: 0x1308, lo: 0xad, hi: 0xad},
+       {value: 0x1008, lo: 0xae, hi: 0xaf},
+       {value: 0x1308, lo: 0xb0, hi: 0xb5},
+       {value: 0x1808, lo: 0xb6, hi: 0xb6},
+       {value: 0x1308, lo: 0xb7, hi: 0xb7},
+       {value: 0x0040, lo: 0xb8, hi: 0xbf},
+       // Block 0xbe, offset 0x5d3
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0x89},
+       {value: 0x0040, lo: 0x8a, hi: 0xbf},
+       // Block 0xbf, offset 0x5d6
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0008, lo: 0x80, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9c},
+       {value: 0x1308, lo: 0x9d, hi: 0x9f},
+       {value: 0x1008, lo: 0xa0, hi: 0xa1},
+       {value: 0x1308, lo: 0xa2, hi: 0xa5},
+       {value: 0x1008, lo: 0xa6, hi: 0xa6},
+       {value: 0x1308, lo: 0xa7, hi: 0xaa},
+       {value: 0x1b08, lo: 0xab, hi: 0xab},
+       {value: 0x0040, lo: 0xac, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xb9},
+       {value: 0x0018, lo: 0xba, hi: 0xbf},
+       // Block 0xc0, offset 0x5e2
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0040, lo: 0x80, hi: 0x9f},
+       {value: 0x049d, lo: 0xa0, hi: 0xbf},
+       // Block 0xc1, offset 0x5e5
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0xa9},
+       {value: 0x0018, lo: 0xaa, hi: 0xb2},
+       {value: 0x0040, lo: 0xb3, hi: 0xbe},
+       {value: 0x0008, lo: 0xbf, hi: 0xbf},
+       // Block 0xc2, offset 0x5ea
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0xb8},
+       {value: 0x0040, lo: 0xb9, hi: 0xbf},
+       // Block 0xc3, offset 0x5ed
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0008, lo: 0x80, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0x89},
+       {value: 0x0008, lo: 0x8a, hi: 0xae},
+       {value: 0x1008, lo: 0xaf, hi: 0xaf},
+       {value: 0x1308, lo: 0xb0, hi: 0xb6},
+       {value: 0x0040, lo: 0xb7, hi: 0xb7},
+       {value: 0x1308, lo: 0xb8, hi: 0xbd},
+       {value: 0x1008, lo: 0xbe, hi: 0xbe},
+       {value: 0x1b08, lo: 0xbf, hi: 0xbf},
+       // Block 0xc4, offset 0x5f7
+       {value: 0x0000, lo: 0x08},
+       {value: 0x0008, lo: 0x80, hi: 0x80},
+       {value: 0x0018, lo: 0x81, hi: 0x85},
+       {value: 0x0040, lo: 0x86, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0018, lo: 0x9a, hi: 0xac},
+       {value: 0x0040, lo: 0xad, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xb1},
+       {value: 0x0008, lo: 0xb2, hi: 0xbf},
+       // Block 0xc5, offset 0x600
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x0008, lo: 0x80, hi: 0x8f},
+       {value: 0x0040, lo: 0x90, hi: 0x91},
+       {value: 0x1308, lo: 0x92, hi: 0xa7},
+       {value: 0x0040, lo: 0xa8, hi: 0xa8},
+       {value: 0x1008, lo: 0xa9, hi: 0xa9},
+       {value: 0x1308, lo: 0xaa, hi: 0xb0},
+       {value: 0x1008, lo: 0xb1, hi: 0xb1},
+       {value: 0x1308, lo: 0xb2, hi: 0xb3},
+       {value: 0x1008, lo: 0xb4, hi: 0xb4},
+       {value: 0x1308, lo: 0xb5, hi: 0xb6},
+       {value: 0x0040, lo: 0xb7, hi: 0xbf},
+       // Block 0xc6, offset 0x60c
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0xbf},
+       // Block 0xc7, offset 0x60f
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0018, lo: 0x80, hi: 0xae},
+       {value: 0x0040, lo: 0xaf, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xb4},
+       {value: 0x0040, lo: 0xb5, hi: 0xbf},
+       // Block 0xc8, offset 0x614
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0x83},
+       {value: 0x0040, lo: 0x84, hi: 0xbf},
+       // Block 0xc9, offset 0x617
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0xae},
+       {value: 0x0040, lo: 0xaf, hi: 0xbf},
+       // Block 0xca, offset 0x61a
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0x86},
+       {value: 0x0040, lo: 0x87, hi: 0xbf},
+       // Block 0xcb, offset 0x61d
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0008, lo: 0x80, hi: 0x9e},
+       {value: 0x0040, lo: 0x9f, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa9},
+       {value: 0x0040, lo: 0xaa, hi: 0xad},
+       {value: 0x0018, lo: 0xae, hi: 0xaf},
+       {value: 0x0040, lo: 0xb0, hi: 0xbf},
+       // Block 0xcc, offset 0x624
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0040, lo: 0x80, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0xad},
+       {value: 0x0040, lo: 0xae, hi: 0xaf},
+       {value: 0x1308, lo: 0xb0, hi: 0xb4},
+       {value: 0x0018, lo: 0xb5, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xbf},
+       // Block 0xcd, offset 0x62b
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0xaf},
+       {value: 0x1308, lo: 0xb0, hi: 0xb6},
+       {value: 0x0018, lo: 0xb7, hi: 0xbf},
+       // Block 0xce, offset 0x62f
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x0008, lo: 0x80, hi: 0x83},
+       {value: 0x0018, lo: 0x84, hi: 0x85},
+       {value: 0x0040, lo: 0x86, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9a},
+       {value: 0x0018, lo: 0x9b, hi: 0xa1},
+       {value: 0x0040, lo: 0xa2, hi: 0xa2},
+       {value: 0x0008, lo: 0xa3, hi: 0xb7},
+       {value: 0x0040, lo: 0xb8, hi: 0xbc},
+       {value: 0x0008, lo: 0xbd, hi: 0xbf},
+       // Block 0xcf, offset 0x63a
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0x8f},
+       {value: 0x0040, lo: 0x90, hi: 0xbf},
+       // Block 0xd0, offset 0x63d
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0008, lo: 0x80, hi: 0x84},
+       {value: 0x0040, lo: 0x85, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x90},
+       {value: 0x1008, lo: 0x91, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0xd1, offset 0x643
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0040, lo: 0x80, hi: 0x8e},
+       {value: 0x1308, lo: 0x8f, hi: 0x92},
+       {value: 0x0008, lo: 0x93, hi: 0x9f},
+       {value: 0x0040, lo: 0xa0, hi: 0xbf},
+       // Block 0xd2, offset 0x648
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0040, lo: 0x80, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xa0},
+       {value: 0x0040, lo: 0xa1, hi: 0xbf},
+       // Block 0xd3, offset 0x64c
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0xac},
+       {value: 0x0040, lo: 0xad, hi: 0xbf},
+       // Block 0xd4, offset 0x64f
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0xb2},
+       {value: 0x0040, lo: 0xb3, hi: 0xbf},
+       // Block 0xd5, offset 0x652
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0x81},
+       {value: 0x0040, lo: 0x82, hi: 0xbf},
+       // Block 0xd6, offset 0x655
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0008, lo: 0x80, hi: 0xaa},
+       {value: 0x0040, lo: 0xab, hi: 0xaf},
+       {value: 0x0008, lo: 0xb0, hi: 0xbc},
+       {value: 0x0040, lo: 0xbd, hi: 0xbf},
+       // Block 0xd7, offset 0x65a
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0008, lo: 0x80, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9b},
+       {value: 0x0018, lo: 0x9c, hi: 0x9c},
+       {value: 0x1308, lo: 0x9d, hi: 0x9e},
+       {value: 0x0018, lo: 0x9f, hi: 0x9f},
+       {value: 0x03c0, lo: 0xa0, hi: 0xa3},
+       {value: 0x0040, lo: 0xa4, hi: 0xbf},
+       // Block 0xd8, offset 0x664
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0018, lo: 0x80, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xbf},
+       // Block 0xd9, offset 0x667
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0xa6},
+       {value: 0x0040, lo: 0xa7, hi: 0xa8},
+       {value: 0x0018, lo: 0xa9, hi: 0xbf},
+       // Block 0xda, offset 0x66b
+       {value: 0x0000, lo: 0x0e},
+       {value: 0x0018, lo: 0x80, hi: 0x9d},
+       {value: 0xb5b9, lo: 0x9e, hi: 0x9e},
+       {value: 0xb601, lo: 0x9f, hi: 0x9f},
+       {value: 0xb649, lo: 0xa0, hi: 0xa0},
+       {value: 0xb6b1, lo: 0xa1, hi: 0xa1},
+       {value: 0xb719, lo: 0xa2, hi: 0xa2},
+       {value: 0xb781, lo: 0xa3, hi: 0xa3},
+       {value: 0xb7e9, lo: 0xa4, hi: 0xa4},
+       {value: 0x1018, lo: 0xa5, hi: 0xa6},
+       {value: 0x1318, lo: 0xa7, hi: 0xa9},
+       {value: 0x0018, lo: 0xaa, hi: 0xac},
+       {value: 0x1018, lo: 0xad, hi: 0xb2},
+       {value: 0x0340, lo: 0xb3, hi: 0xba},
+       {value: 0x1318, lo: 0xbb, hi: 0xbf},
+       // Block 0xdb, offset 0x67a
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x1318, lo: 0x80, hi: 0x82},
+       {value: 0x0018, lo: 0x83, hi: 0x84},
+       {value: 0x1318, lo: 0x85, hi: 0x8b},
+       {value: 0x0018, lo: 0x8c, hi: 0xa9},
+       {value: 0x1318, lo: 0xaa, hi: 0xad},
+       {value: 0x0018, lo: 0xae, hi: 0xba},
+       {value: 0xb851, lo: 0xbb, hi: 0xbb},
+       {value: 0xb899, lo: 0xbc, hi: 0xbc},
+       {value: 0xb8e1, lo: 0xbd, hi: 0xbd},
+       {value: 0xb949, lo: 0xbe, hi: 0xbe},
+       {value: 0xb9b1, lo: 0xbf, hi: 0xbf},
+       // Block 0xdc, offset 0x686
+       {value: 0x0000, lo: 0x03},
+       {value: 0xba19, lo: 0x80, hi: 0x80},
+       {value: 0x0018, lo: 0x81, hi: 0xa8},
+       {value: 0x0040, lo: 0xa9, hi: 0xbf},
+       // Block 0xdd, offset 0x68a
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0018, lo: 0x80, hi: 0x81},
+       {value: 0x1318, lo: 0x82, hi: 0x84},
+       {value: 0x0018, lo: 0x85, hi: 0x85},
+       {value: 0x0040, lo: 0x86, hi: 0xbf},
+       // Block 0xde, offset 0x68f
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0018, lo: 0x80, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xb1},
+       {value: 0x0040, lo: 0xb2, hi: 0xbf},
+       // Block 0xdf, offset 0x694
+       {value: 0x0000, lo: 0x03},
+       {value: 0x1308, lo: 0x80, hi: 0xb6},
+       {value: 0x0018, lo: 0xb7, hi: 0xba},
+       {value: 0x1308, lo: 0xbb, hi: 0xbf},
+       // Block 0xe0, offset 0x698
+       {value: 0x0000, lo: 0x04},
+       {value: 0x1308, lo: 0x80, hi: 0xac},
+       {value: 0x0018, lo: 0xad, hi: 0xb4},
+       {value: 0x1308, lo: 0xb5, hi: 0xb5},
+       {value: 0x0018, lo: 0xb6, hi: 0xbf},
+       // Block 0xe1, offset 0x69d
+       {value: 0x0000, lo: 0x08},
+       {value: 0x0018, lo: 0x80, hi: 0x83},
+       {value: 0x1308, lo: 0x84, hi: 0x84},
+       {value: 0x0018, lo: 0x85, hi: 0x8b},
+       {value: 0x0040, lo: 0x8c, hi: 0x9a},
+       {value: 0x1308, lo: 0x9b, hi: 0x9f},
+       {value: 0x0040, lo: 0xa0, hi: 0xa0},
+       {value: 0x1308, lo: 0xa1, hi: 0xaf},
+       {value: 0x0040, lo: 0xb0, hi: 0xbf},
+       // Block 0xe2, offset 0x6a6
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x1308, lo: 0x80, hi: 0x86},
+       {value: 0x0040, lo: 0x87, hi: 0x87},
+       {value: 0x1308, lo: 0x88, hi: 0x98},
+       {value: 0x0040, lo: 0x99, hi: 0x9a},
+       {value: 0x1308, lo: 0x9b, hi: 0xa1},
+       {value: 0x0040, lo: 0xa2, hi: 0xa2},
+       {value: 0x1308, lo: 0xa3, hi: 0xa4},
+       {value: 0x0040, lo: 0xa5, hi: 0xa5},
+       {value: 0x1308, lo: 0xa6, hi: 0xaa},
+       {value: 0x0040, lo: 0xab, hi: 0xbf},
+       // Block 0xe3, offset 0x6b1
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0008, lo: 0x80, hi: 0x84},
+       {value: 0x0040, lo: 0x85, hi: 0x86},
+       {value: 0x0018, lo: 0x87, hi: 0x8f},
+       {value: 0x1308, lo: 0x90, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0xbf},
+       // Block 0xe4, offset 0x6b7
+       {value: 0x0000, lo: 0x07},
+       {value: 0x0208, lo: 0x80, hi: 0x83},
+       {value: 0x1308, lo: 0x84, hi: 0x8a},
+       {value: 0x0040, lo: 0x8b, hi: 0x8f},
+       {value: 0x0008, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9d},
+       {value: 0x0018, lo: 0x9e, hi: 0x9f},
+       {value: 0x0040, lo: 0xa0, hi: 0xbf},
+       // Block 0xe5, offset 0x6bf
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0040, lo: 0x80, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xb1},
+       {value: 0x0040, lo: 0xb2, hi: 0xbf},
+       // Block 0xe6, offset 0x6c3
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0xab},
+       {value: 0x0040, lo: 0xac, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xbf},
+       // Block 0xe7, offset 0x6c7
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0018, lo: 0x80, hi: 0x93},
+       {value: 0x0040, lo: 0x94, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xae},
+       {value: 0x0040, lo: 0xaf, hi: 0xb0},
+       {value: 0x0018, lo: 0xb1, hi: 0xbf},
+       // Block 0xe8, offset 0x6cd
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0040, lo: 0x80, hi: 0x80},
+       {value: 0x0018, lo: 0x81, hi: 0x8f},
+       {value: 0x0040, lo: 0x90, hi: 0x90},
+       {value: 0x0018, lo: 0x91, hi: 0xb5},
+       {value: 0x0040, lo: 0xb6, hi: 0xbf},
+       // Block 0xe9, offset 0x6d3
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0018, lo: 0x80, hi: 0x8f},
+       {value: 0xc1c1, lo: 0x90, hi: 0x90},
+       {value: 0x0018, lo: 0x91, hi: 0xac},
+       {value: 0x0040, lo: 0xad, hi: 0xbf},
+       // Block 0xea, offset 0x6d8
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0040, lo: 0x80, hi: 0xa5},
+       {value: 0x0018, lo: 0xa6, hi: 0xbf},
+       // Block 0xeb, offset 0x6db
+       {value: 0x0000, lo: 0x0d},
+       {value: 0xc7e9, lo: 0x80, hi: 0x80},
+       {value: 0xc839, lo: 0x81, hi: 0x81},
+       {value: 0xc889, lo: 0x82, hi: 0x82},
+       {value: 0xc8d9, lo: 0x83, hi: 0x83},
+       {value: 0xc929, lo: 0x84, hi: 0x84},
+       {value: 0xc979, lo: 0x85, hi: 0x85},
+       {value: 0xc9c9, lo: 0x86, hi: 0x86},
+       {value: 0xca19, lo: 0x87, hi: 0x87},
+       {value: 0xca69, lo: 0x88, hi: 0x88},
+       {value: 0x0040, lo: 0x89, hi: 0x8f},
+       {value: 0xcab9, lo: 0x90, hi: 0x90},
+       {value: 0xcad9, lo: 0x91, hi: 0x91},
+       {value: 0x0040, lo: 0x92, hi: 0xbf},
+       // Block 0xec, offset 0x6e9
+       {value: 0x0000, lo: 0x06},
+       {value: 0x0018, lo: 0x80, hi: 0x92},
+       {value: 0x0040, lo: 0x93, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xac},
+       {value: 0x0040, lo: 0xad, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xb6},
+       {value: 0x0040, lo: 0xb7, hi: 0xbf},
+       // Block 0xed, offset 0x6f0
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0018, lo: 0x80, hi: 0xb3},
+       {value: 0x0040, lo: 0xb4, hi: 0xbf},
+       // Block 0xee, offset 0x6f3
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0018, lo: 0x80, hi: 0x94},
+       {value: 0x0040, lo: 0x95, hi: 0xbf},
+       // Block 0xef, offset 0x6f6
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0018, lo: 0x80, hi: 0x8b},
+       {value: 0x0040, lo: 0x8c, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0xbf},
+       // Block 0xf0, offset 0x6fa
+       {value: 0x0000, lo: 0x05},
+       {value: 0x0018, lo: 0x80, hi: 0x87},
+       {value: 0x0040, lo: 0x88, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0x99},
+       {value: 0x0040, lo: 0x9a, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xbf},
+       // Block 0xf1, offset 0x700
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0018, lo: 0x80, hi: 0x87},
+       {value: 0x0040, lo: 0x88, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0xad},
+       {value: 0x0040, lo: 0xae, hi: 0xbf},
+       // Block 0xf2, offset 0x705
+       {value: 0x0000, lo: 0x09},
+       {value: 0x0040, lo: 0x80, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0x9e},
+       {value: 0x0040, lo: 0x9f, hi: 0x9f},
+       {value: 0x0018, lo: 0xa0, hi: 0xa7},
+       {value: 0x0040, lo: 0xa8, hi: 0xaf},
+       {value: 0x0018, lo: 0xb0, hi: 0xb0},
+       {value: 0x0040, lo: 0xb1, hi: 0xb2},
+       {value: 0x0018, lo: 0xb3, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0xf3, offset 0x70f
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0018, lo: 0x80, hi: 0x8b},
+       {value: 0x0040, lo: 0x8c, hi: 0x8f},
+       {value: 0x0018, lo: 0x90, hi: 0x9e},
+       {value: 0x0040, lo: 0x9f, hi: 0xbf},
+       // Block 0xf4, offset 0x714
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0018, lo: 0x80, hi: 0x91},
+       {value: 0x0040, lo: 0x92, hi: 0xbf},
+       // Block 0xf5, offset 0x717
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0018, lo: 0x80, hi: 0x80},
+       {value: 0x0040, lo: 0x81, hi: 0xbf},
+       // Block 0xf6, offset 0x71a
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0x96},
+       {value: 0x0040, lo: 0x97, hi: 0xbf},
+       // Block 0xf7, offset 0x71d
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0xb4},
+       {value: 0x0040, lo: 0xb5, hi: 0xbf},
+       // Block 0xf8, offset 0x720
+       {value: 0x0000, lo: 0x03},
+       {value: 0x0008, lo: 0x80, hi: 0x9d},
+       {value: 0x0040, lo: 0x9e, hi: 0x9f},
+       {value: 0x0008, lo: 0xa0, hi: 0xbf},
+       // Block 0xf9, offset 0x724
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0008, lo: 0x80, hi: 0xa1},
+       {value: 0x0040, lo: 0xa2, hi: 0xbf},
+       // Block 0xfa, offset 0x727
+       {value: 0x0020, lo: 0x0f},
+       {value: 0xdeb9, lo: 0x80, hi: 0x89},
+       {value: 0x8dfd, lo: 0x8a, hi: 0x8a},
+       {value: 0xdff9, lo: 0x8b, hi: 0x9c},
+       {value: 0x8e1d, lo: 0x9d, hi: 0x9d},
+       {value: 0xe239, lo: 0x9e, hi: 0xa2},
+       {value: 0x8e3d, lo: 0xa3, hi: 0xa3},
+       {value: 0xe2d9, lo: 0xa4, hi: 0xab},
+       {value: 0x7ed5, lo: 0xac, hi: 0xac},
+       {value: 0xe3d9, lo: 0xad, hi: 0xaf},
+       {value: 0x8e5d, lo: 0xb0, hi: 0xb0},
+       {value: 0xe439, lo: 0xb1, hi: 0xb6},
+       {value: 0x8e7d, lo: 0xb7, hi: 0xb9},
+       {value: 0xe4f9, lo: 0xba, hi: 0xba},
+       {value: 0x8edd, lo: 0xbb, hi: 0xbb},
+       {value: 0xe519, lo: 0xbc, hi: 0xbf},
+       // Block 0xfb, offset 0x737
+       {value: 0x0020, lo: 0x10},
+       {value: 0x937d, lo: 0x80, hi: 0x80},
+       {value: 0xf099, lo: 0x81, hi: 0x86},
+       {value: 0x939d, lo: 0x87, hi: 0x8a},
+       {value: 0xd9f9, lo: 0x8b, hi: 0x8b},
+       {value: 0xf159, lo: 0x8c, hi: 0x96},
+       {value: 0x941d, lo: 0x97, hi: 0x97},
+       {value: 0xf2b9, lo: 0x98, hi: 0xa3},
+       {value: 0x943d, lo: 0xa4, hi: 0xa6},
+       {value: 0xf439, lo: 0xa7, hi: 0xaa},
+       {value: 0x949d, lo: 0xab, hi: 0xab},
+       {value: 0xf4b9, lo: 0xac, hi: 0xac},
+       {value: 0x94bd, lo: 0xad, hi: 0xad},
+       {value: 0xf4d9, lo: 0xae, hi: 0xaf},
+       {value: 0x94dd, lo: 0xb0, hi: 0xb1},
+       {value: 0xf519, lo: 0xb2, hi: 0xbe},
+       {value: 0x0040, lo: 0xbf, hi: 0xbf},
+       // Block 0xfc, offset 0x748
+       {value: 0x0000, lo: 0x04},
+       {value: 0x0040, lo: 0x80, hi: 0x80},
+       {value: 0x0340, lo: 0x81, hi: 0x81},
+       {value: 0x0040, lo: 0x82, hi: 0x9f},
+       {value: 0x0340, lo: 0xa0, hi: 0xbf},
+       // Block 0xfd, offset 0x74d
+       {value: 0x0000, lo: 0x01},
+       {value: 0x0340, lo: 0x80, hi: 0xbf},
+       // Block 0xfe, offset 0x74f
+       {value: 0x0000, lo: 0x01},
+       {value: 0x13c0, lo: 0x80, hi: 0xbf},
+       // Block 0xff, offset 0x751
+       {value: 0x0000, lo: 0x02},
+       {value: 0x13c0, lo: 0x80, hi: 0xaf},
+       {value: 0x0040, lo: 0xb0, hi: 0xbf},
+}
+
+// Total table size 41559 bytes (40KiB); checksum: F4A1FA4E
diff --git a/vendor/golang.org/x/net/idna/trie.go b/vendor/golang.org/x/net/idna/trie.go
new file mode 100644 (file)
index 0000000..c4ef847
--- /dev/null
@@ -0,0 +1,72 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package idna
+
+// appendMapping appends the mapping for the respective rune. isMapped must be
+// true. A mapping is a categorization of a rune as defined in UTS #46.
+func (c info) appendMapping(b []byte, s string) []byte {
+       index := int(c >> indexShift)
+       if c&xorBit == 0 {
+               s := mappings[index:]
+               return append(b, s[1:s[0]+1]...)
+       }
+       b = append(b, s...)
+       if c&inlineXOR == inlineXOR {
+               // TODO: support and handle two-byte inline masks
+               b[len(b)-1] ^= byte(index)
+       } else {
+               for p := len(b) - int(xorData[index]); p < len(b); p++ {
+                       index++
+                       b[p] ^= xorData[index]
+               }
+       }
+       return b
+}
+
+// Sparse block handling code.
+
+type valueRange struct {
+       value  uint16 // header: value:stride
+       lo, hi byte   // header: lo:n
+}
+
+type sparseBlocks struct {
+       values []valueRange
+       offset []uint16
+}
+
+var idnaSparse = sparseBlocks{
+       values: idnaSparseValues[:],
+       offset: idnaSparseOffset[:],
+}
+
+// Don't use newIdnaTrie to avoid unconditional linking in of the table.
+var trie = &idnaTrie{}
+
+// lookup determines the type of block n and looks up the value for b.
+// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block
+// is a list of ranges with an accompanying value. Given a matching range r,
+// the value for b is by r.value + (b - r.lo) * stride.
+func (t *sparseBlocks) lookup(n uint32, b byte) uint16 {
+       offset := t.offset[n]
+       header := t.values[offset]
+       lo := offset + 1
+       hi := lo + uint16(header.lo)
+       for lo < hi {
+               m := lo + (hi-lo)/2
+               r := t.values[m]
+               if r.lo <= b && b <= r.hi {
+                       return r.value + uint16(b-r.lo)*header.value
+               }
+               if b < r.lo {
+                       hi = m
+               } else {
+                       lo = m + 1
+               }
+       }
+       return 0
+}
diff --git a/vendor/golang.org/x/net/idna/trieval.go b/vendor/golang.org/x/net/idna/trieval.go
new file mode 100644 (file)
index 0000000..63cb03b
--- /dev/null
@@ -0,0 +1,114 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package idna
+
+// This file contains definitions for interpreting the trie value of the idna
+// trie generated by "go run gen*.go". It is shared by both the generator
+// program and the resultant package. Sharing is achieved by the generator
+// copying gen_trieval.go to trieval.go and changing what's above this comment.
+
+// info holds information from the IDNA mapping table for a single rune. It is
+// the value returned by a trie lookup. In most cases, all information fits in
+// a 16-bit value. For mappings, this value may contain an index into a slice
+// with the mapped string. Such mappings can consist of the actual mapped value
+// or an XOR pattern to be applied to the bytes of the UTF8 encoding of the
+// input rune. This technique is used by the cases packages and reduces the
+// table size significantly.
+//
+// The per-rune values have the following format:
+//
+//   if mapped {
+//     if inlinedXOR {
+//       15..13 inline XOR marker
+//       12..11 unused
+//       10..3  inline XOR mask
+//     } else {
+//       15..3  index into xor or mapping table
+//     }
+//   } else {
+//       15..13 unused
+//           12 modifier (including virama)
+//           11 virama modifier
+//       10..8  joining type
+//        7..3  category type
+//   }
+//      2  use xor pattern
+//   1..0  mapped category
+//
+// See the definitions below for a more detailed description of the various
+// bits.
+type info uint16
+
+const (
+       catSmallMask = 0x3
+       catBigMask   = 0xF8
+       indexShift   = 3
+       xorBit       = 0x4    // interpret the index as an xor pattern
+       inlineXOR    = 0xE000 // These bits are set if the XOR pattern is inlined.
+
+       joinShift = 8
+       joinMask  = 0x07
+
+       viramaModifier = 0x0800
+       modifier       = 0x1000
+)
+
+// A category corresponds to a category defined in the IDNA mapping table.
+type category uint16
+
+const (
+       unknown              category = 0 // not defined currently in unicode.
+       mapped               category = 1
+       disallowedSTD3Mapped category = 2
+       deviation            category = 3
+)
+
+const (
+       valid               category = 0x08
+       validNV8            category = 0x18
+       validXV8            category = 0x28
+       disallowed          category = 0x40
+       disallowedSTD3Valid category = 0x80
+       ignored             category = 0xC0
+)
+
+// join types and additional rune information
+const (
+       joiningL = (iota + 1)
+       joiningD
+       joiningT
+       joiningR
+
+       //the following types are derived during processing
+       joinZWJ
+       joinZWNJ
+       joinVirama
+       numJoinTypes
+)
+
+func (c info) isMapped() bool {
+       return c&0x3 != 0
+}
+
+func (c info) category() category {
+       small := c & catSmallMask
+       if small != 0 {
+               return category(small)
+       }
+       return category(c & catBigMask)
+}
+
+func (c info) joinType() info {
+       if c.isMapped() {
+               return 0
+       }
+       return (c >> joinShift) & joinMask
+}
+
+func (c info) isModifier() bool {
+       return c&(modifier|catSmallMask) == modifier
+}
+
+func (c info) isViramaModifier() bool {
+       return c&(viramaModifier|catSmallMask) == viramaModifier
+}
diff --git a/vendor/golang.org/x/net/publicsuffix/gen.go b/vendor/golang.org/x/net/publicsuffix/gen.go
new file mode 100644 (file)
index 0000000..a2d4995
--- /dev/null
@@ -0,0 +1,713 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+package main
+
+// This program generates table.go and table_test.go based on the authoritative
+// public suffix list at https://publicsuffix.org/list/effective_tld_names.dat
+//
+// The version is derived from
+// https://api.github.com/repos/publicsuffix/list/commits?path=public_suffix_list.dat
+// and a human-readable form is at
+// https://github.com/publicsuffix/list/commits/master/public_suffix_list.dat
+//
+// To fetch a particular git revision, such as 5c70ccd250, pass
+// -url "https://raw.githubusercontent.com/publicsuffix/list/5c70ccd250/public_suffix_list.dat"
+// and -version "an explicit version string".
+
+import (
+       "bufio"
+       "bytes"
+       "flag"
+       "fmt"
+       "go/format"
+       "io"
+       "io/ioutil"
+       "net/http"
+       "os"
+       "regexp"
+       "sort"
+       "strings"
+
+       "golang.org/x/net/idna"
+)
+
+const (
+       // These sum of these four values must be no greater than 32.
+       nodesBitsChildren   = 9
+       nodesBitsICANN      = 1
+       nodesBitsTextOffset = 15
+       nodesBitsTextLength = 6
+
+       // These sum of these four values must be no greater than 32.
+       childrenBitsWildcard = 1
+       childrenBitsNodeType = 2
+       childrenBitsHi       = 14
+       childrenBitsLo       = 14
+)
+
+var (
+       maxChildren   int
+       maxTextOffset int
+       maxTextLength int
+       maxHi         uint32
+       maxLo         uint32
+)
+
+func max(a, b int) int {
+       if a < b {
+               return b
+       }
+       return a
+}
+
+func u32max(a, b uint32) uint32 {
+       if a < b {
+               return b
+       }
+       return a
+}
+
+const (
+       nodeTypeNormal     = 0
+       nodeTypeException  = 1
+       nodeTypeParentOnly = 2
+       numNodeType        = 3
+)
+
+func nodeTypeStr(n int) string {
+       switch n {
+       case nodeTypeNormal:
+               return "+"
+       case nodeTypeException:
+               return "!"
+       case nodeTypeParentOnly:
+               return "o"
+       }
+       panic("unreachable")
+}
+
+const (
+       defaultURL   = "https://publicsuffix.org/list/effective_tld_names.dat"
+       gitCommitURL = "https://api.github.com/repos/publicsuffix/list/commits?path=public_suffix_list.dat"
+)
+
+var (
+       labelEncoding = map[string]uint32{}
+       labelsList    = []string{}
+       labelsMap     = map[string]bool{}
+       rules         = []string{}
+
+       // validSuffixRE is used to check that the entries in the public suffix
+       // list are in canonical form (after Punycode encoding). Specifically,
+       // capital letters are not allowed.
+       validSuffixRE = regexp.MustCompile(`^[a-z0-9_\!\*\-\.]+$`)
+
+       shaRE  = regexp.MustCompile(`"sha":"([^"]+)"`)
+       dateRE = regexp.MustCompile(`"committer":{[^{]+"date":"([^"]+)"`)
+
+       comments = flag.Bool("comments", false, "generate table.go comments, for debugging")
+       subset   = flag.Bool("subset", false, "generate only a subset of the full table, for debugging")
+       url      = flag.String("url", defaultURL, "URL of the publicsuffix.org list. If empty, stdin is read instead")
+       v        = flag.Bool("v", false, "verbose output (to stderr)")
+       version  = flag.String("version", "", "the effective_tld_names.dat version")
+)
+
+func main() {
+       if err := main1(); err != nil {
+               fmt.Fprintln(os.Stderr, err)
+               os.Exit(1)
+       }
+}
+
+func main1() error {
+       flag.Parse()
+       if nodesBitsTextLength+nodesBitsTextOffset+nodesBitsICANN+nodesBitsChildren > 32 {
+               return fmt.Errorf("not enough bits to encode the nodes table")
+       }
+       if childrenBitsLo+childrenBitsHi+childrenBitsNodeType+childrenBitsWildcard > 32 {
+               return fmt.Errorf("not enough bits to encode the children table")
+       }
+       if *version == "" {
+               if *url != defaultURL {
+                       return fmt.Errorf("-version was not specified, and the -url is not the default one")
+               }
+               sha, date, err := gitCommit()
+               if err != nil {
+                       return err
+               }
+               *version = fmt.Sprintf("publicsuffix.org's public_suffix_list.dat, git revision %s (%s)", sha, date)
+       }
+       var r io.Reader = os.Stdin
+       if *url != "" {
+               res, err := http.Get(*url)
+               if err != nil {
+                       return err
+               }
+               if res.StatusCode != http.StatusOK {
+                       return fmt.Errorf("bad GET status for %s: %d", *url, res.Status)
+               }
+               r = res.Body
+               defer res.Body.Close()
+       }
+
+       var root node
+       icann := false
+       br := bufio.NewReader(r)
+       for {
+               s, err := br.ReadString('\n')
+               if err != nil {
+                       if err == io.EOF {
+                               break
+                       }
+                       return err
+               }
+               s = strings.TrimSpace(s)
+               if strings.Contains(s, "BEGIN ICANN DOMAINS") {
+                       icann = true
+                       continue
+               }
+               if strings.Contains(s, "END ICANN DOMAINS") {
+                       icann = false
+                       continue
+               }
+               if s == "" || strings.HasPrefix(s, "//") {
+                       continue
+               }
+               s, err = idna.ToASCII(s)
+               if err != nil {
+                       return err
+               }
+               if !validSuffixRE.MatchString(s) {
+                       return fmt.Errorf("bad publicsuffix.org list data: %q", s)
+               }
+
+               if *subset {
+                       switch {
+                       case s == "ac.jp" || strings.HasSuffix(s, ".ac.jp"):
+                       case s == "ak.us" || strings.HasSuffix(s, ".ak.us"):
+                       case s == "ao" || strings.HasSuffix(s, ".ao"):
+                       case s == "ar" || strings.HasSuffix(s, ".ar"):
+                       case s == "arpa" || strings.HasSuffix(s, ".arpa"):
+                       case s == "cy" || strings.HasSuffix(s, ".cy"):
+                       case s == "dyndns.org" || strings.HasSuffix(s, ".dyndns.org"):
+                       case s == "jp":
+                       case s == "kobe.jp" || strings.HasSuffix(s, ".kobe.jp"):
+                       case s == "kyoto.jp" || strings.HasSuffix(s, ".kyoto.jp"):
+                       case s == "om" || strings.HasSuffix(s, ".om"):
+                       case s == "uk" || strings.HasSuffix(s, ".uk"):
+                       case s == "uk.com" || strings.HasSuffix(s, ".uk.com"):
+                       case s == "tw" || strings.HasSuffix(s, ".tw"):
+                       case s == "zw" || strings.HasSuffix(s, ".zw"):
+                       case s == "xn--p1ai" || strings.HasSuffix(s, ".xn--p1ai"):
+                               // xn--p1ai is Russian-Cyrillic "рф".
+                       default:
+                               continue
+                       }
+               }
+
+               rules = append(rules, s)
+
+               nt, wildcard := nodeTypeNormal, false
+               switch {
+               case strings.HasPrefix(s, "*."):
+                       s, nt = s[2:], nodeTypeParentOnly
+                       wildcard = true
+               case strings.HasPrefix(s, "!"):
+                       s, nt = s[1:], nodeTypeException
+               }
+               labels := strings.Split(s, ".")
+               for n, i := &root, len(labels)-1; i >= 0; i-- {
+                       label := labels[i]
+                       n = n.child(label)
+                       if i == 0 {
+                               if nt != nodeTypeParentOnly && n.nodeType == nodeTypeParentOnly {
+                                       n.nodeType = nt
+                               }
+                               n.icann = n.icann && icann
+                               n.wildcard = n.wildcard || wildcard
+                       }
+                       labelsMap[label] = true
+               }
+       }
+       labelsList = make([]string, 0, len(labelsMap))
+       for label := range labelsMap {
+               labelsList = append(labelsList, label)
+       }
+       sort.Strings(labelsList)
+
+       if err := generate(printReal, &root, "table.go"); err != nil {
+               return err
+       }
+       if err := generate(printTest, &root, "table_test.go"); err != nil {
+               return err
+       }
+       return nil
+}
+
+func generate(p func(io.Writer, *node) error, root *node, filename string) error {
+       buf := new(bytes.Buffer)
+       if err := p(buf, root); err != nil {
+               return err
+       }
+       b, err := format.Source(buf.Bytes())
+       if err != nil {
+               return err
+       }
+       return ioutil.WriteFile(filename, b, 0644)
+}
+
+func gitCommit() (sha, date string, retErr error) {
+       res, err := http.Get(gitCommitURL)
+       if err != nil {
+               return "", "", err
+       }
+       if res.StatusCode != http.StatusOK {
+               return "", "", fmt.Errorf("bad GET status for %s: %d", gitCommitURL, res.Status)
+       }
+       defer res.Body.Close()
+       b, err := ioutil.ReadAll(res.Body)
+       if err != nil {
+               return "", "", err
+       }
+       if m := shaRE.FindSubmatch(b); m != nil {
+               sha = string(m[1])
+       }
+       if m := dateRE.FindSubmatch(b); m != nil {
+               date = string(m[1])
+       }
+       if sha == "" || date == "" {
+               retErr = fmt.Errorf("could not find commit SHA and date in %s", gitCommitURL)
+       }
+       return sha, date, retErr
+}
+
+func printTest(w io.Writer, n *node) error {
+       fmt.Fprintf(w, "// generated by go run gen.go; DO NOT EDIT\n\n")
+       fmt.Fprintf(w, "package publicsuffix\n\nvar rules = [...]string{\n")
+       for _, rule := range rules {
+               fmt.Fprintf(w, "%q,\n", rule)
+       }
+       fmt.Fprintf(w, "}\n\nvar nodeLabels = [...]string{\n")
+       if err := n.walk(w, printNodeLabel); err != nil {
+               return err
+       }
+       fmt.Fprintf(w, "}\n")
+       return nil
+}
+
+func printReal(w io.Writer, n *node) error {
+       const header = `// generated by go run gen.go; DO NOT EDIT
+
+package publicsuffix
+
+const version = %q
+
+const (
+       nodesBitsChildren   = %d
+       nodesBitsICANN      = %d
+       nodesBitsTextOffset = %d
+       nodesBitsTextLength = %d
+
+       childrenBitsWildcard = %d
+       childrenBitsNodeType = %d
+       childrenBitsHi       = %d
+       childrenBitsLo       = %d
+)
+
+const (
+       nodeTypeNormal     = %d
+       nodeTypeException  = %d
+       nodeTypeParentOnly = %d
+)
+
+// numTLD is the number of top level domains.
+const numTLD = %d
+
+`
+       fmt.Fprintf(w, header, *version,
+               nodesBitsChildren, nodesBitsICANN, nodesBitsTextOffset, nodesBitsTextLength,
+               childrenBitsWildcard, childrenBitsNodeType, childrenBitsHi, childrenBitsLo,
+               nodeTypeNormal, nodeTypeException, nodeTypeParentOnly, len(n.children))
+
+       text := combineText(labelsList)
+       if text == "" {
+               return fmt.Errorf("internal error: makeText returned no text")
+       }
+       for _, label := range labelsList {
+               offset, length := strings.Index(text, label), len(label)
+               if offset < 0 {
+                       return fmt.Errorf("internal error: could not find %q in text %q", label, text)
+               }
+               maxTextOffset, maxTextLength = max(maxTextOffset, offset), max(maxTextLength, length)
+               if offset >= 1<<nodesBitsTextOffset {
+                       return fmt.Errorf("text offset %d is too large, or nodeBitsTextOffset is too small", offset)
+               }
+               if length >= 1<<nodesBitsTextLength {
+                       return fmt.Errorf("text length %d is too large, or nodeBitsTextLength is too small", length)
+               }
+               labelEncoding[label] = uint32(offset)<<nodesBitsTextLength | uint32(length)
+       }
+       fmt.Fprintf(w, "// Text is the combined text of all labels.\nconst text = ")
+       for len(text) > 0 {
+               n, plus := len(text), ""
+               if n > 64 {
+                       n, plus = 64, " +"
+               }
+               fmt.Fprintf(w, "%q%s\n", text[:n], plus)
+               text = text[n:]
+       }
+
+       if err := n.walk(w, assignIndexes); err != nil {
+               return err
+       }
+
+       fmt.Fprintf(w, `
+
+// nodes is the list of nodes. Each node is represented as a uint32, which
+// encodes the node's children, wildcard bit and node type (as an index into
+// the children array), ICANN bit and text.
+//
+// If the table was generated with the -comments flag, there is a //-comment
+// after each node's data. In it is the nodes-array indexes of the children,
+// formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The
+// nodeType is printed as + for normal, ! for exception, and o for parent-only
+// nodes that have children but don't match a domain label in their own right.
+// An I denotes an ICANN domain.
+//
+// The layout within the uint32, from MSB to LSB, is:
+//     [%2d bits] unused
+//     [%2d bits] children index
+//     [%2d bits] ICANN bit
+//     [%2d bits] text index
+//     [%2d bits] text length
+var nodes = [...]uint32{
+`,
+               32-nodesBitsChildren-nodesBitsICANN-nodesBitsTextOffset-nodesBitsTextLength,
+               nodesBitsChildren, nodesBitsICANN, nodesBitsTextOffset, nodesBitsTextLength)
+       if err := n.walk(w, printNode); err != nil {
+               return err
+       }
+       fmt.Fprintf(w, `}
+
+// children is the list of nodes' children, the parent's wildcard bit and the
+// parent's node type. If a node has no children then their children index
+// will be in the range [0, 6), depending on the wildcard bit and node type.
+//
+// The layout within the uint32, from MSB to LSB, is:
+//     [%2d bits] unused
+//     [%2d bits] wildcard bit
+//     [%2d bits] node type
+//     [%2d bits] high nodes index (exclusive) of children
+//     [%2d bits] low nodes index (inclusive) of children
+var children=[...]uint32{
+`,
+               32-childrenBitsWildcard-childrenBitsNodeType-childrenBitsHi-childrenBitsLo,
+               childrenBitsWildcard, childrenBitsNodeType, childrenBitsHi, childrenBitsLo)
+       for i, c := range childrenEncoding {
+               s := "---------------"
+               lo := c & (1<<childrenBitsLo - 1)
+               hi := (c >> childrenBitsLo) & (1<<childrenBitsHi - 1)
+               if lo != hi {
+                       s = fmt.Sprintf("n0x%04x-n0x%04x", lo, hi)
+               }
+               nodeType := int(c>>(childrenBitsLo+childrenBitsHi)) & (1<<childrenBitsNodeType - 1)
+               wildcard := c>>(childrenBitsLo+childrenBitsHi+childrenBitsNodeType) != 0
+               if *comments {
+                       fmt.Fprintf(w, "0x%08x, // c0x%04x (%s)%s %s\n",
+                               c, i, s, wildcardStr(wildcard), nodeTypeStr(nodeType))
+               } else {
+                       fmt.Fprintf(w, "0x%x,\n", c)
+               }
+       }
+       fmt.Fprintf(w, "}\n\n")
+       fmt.Fprintf(w, "// max children %d (capacity %d)\n", maxChildren, 1<<nodesBitsChildren-1)
+       fmt.Fprintf(w, "// max text offset %d (capacity %d)\n", maxTextOffset, 1<<nodesBitsTextOffset-1)
+       fmt.Fprintf(w, "// max text length %d (capacity %d)\n", maxTextLength, 1<<nodesBitsTextLength-1)
+       fmt.Fprintf(w, "// max hi %d (capacity %d)\n", maxHi, 1<<childrenBitsHi-1)
+       fmt.Fprintf(w, "// max lo %d (capacity %d)\n", maxLo, 1<<childrenBitsLo-1)
+       return nil
+}
+
+type node struct {
+       label    string
+       nodeType int
+       icann    bool
+       wildcard bool
+       // nodesIndex and childrenIndex are the index of this node in the nodes
+       // and the index of its children offset/length in the children arrays.
+       nodesIndex, childrenIndex int
+       // firstChild is the index of this node's first child, or zero if this
+       // node has no children.
+       firstChild int
+       // children are the node's children, in strictly increasing node label order.
+       children []*node
+}
+
+func (n *node) walk(w io.Writer, f func(w1 io.Writer, n1 *node) error) error {
+       if err := f(w, n); err != nil {
+               return err
+       }
+       for _, c := range n.children {
+               if err := c.walk(w, f); err != nil {
+                       return err
+               }
+       }
+       return nil
+}
+
+// child returns the child of n with the given label. The child is created if
+// it did not exist beforehand.
+func (n *node) child(label string) *node {
+       for _, c := range n.children {
+               if c.label == label {
+                       return c
+               }
+       }
+       c := &node{
+               label:    label,
+               nodeType: nodeTypeParentOnly,
+               icann:    true,
+       }
+       n.children = append(n.children, c)
+       sort.Sort(byLabel(n.children))
+       return c
+}
+
+type byLabel []*node
+
+func (b byLabel) Len() int           { return len(b) }
+func (b byLabel) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
+func (b byLabel) Less(i, j int) bool { return b[i].label < b[j].label }
+
+var nextNodesIndex int
+
+// childrenEncoding are the encoded entries in the generated children array.
+// All these pre-defined entries have no children.
+var childrenEncoding = []uint32{
+       0 << (childrenBitsLo + childrenBitsHi), // Without wildcard bit, nodeTypeNormal.
+       1 << (childrenBitsLo + childrenBitsHi), // Without wildcard bit, nodeTypeException.
+       2 << (childrenBitsLo + childrenBitsHi), // Without wildcard bit, nodeTypeParentOnly.
+       4 << (childrenBitsLo + childrenBitsHi), // With wildcard bit, nodeTypeNormal.
+       5 << (childrenBitsLo + childrenBitsHi), // With wildcard bit, nodeTypeException.
+       6 << (childrenBitsLo + childrenBitsHi), // With wildcard bit, nodeTypeParentOnly.
+}
+
+var firstCallToAssignIndexes = true
+
+func assignIndexes(w io.Writer, n *node) error {
+       if len(n.children) != 0 {
+               // Assign nodesIndex.
+               n.firstChild = nextNodesIndex
+               for _, c := range n.children {
+                       c.nodesIndex = nextNodesIndex
+                       nextNodesIndex++
+               }
+
+               // The root node's children is implicit.
+               if firstCallToAssignIndexes {
+                       firstCallToAssignIndexes = false
+                       return nil
+               }
+
+               // Assign childrenIndex.
+               maxChildren = max(maxChildren, len(childrenEncoding))
+               if len(childrenEncoding) >= 1<<nodesBitsChildren {
+                       return fmt.Errorf("children table size %d is too large, or nodeBitsChildren is too small", len(childrenEncoding))
+               }
+               n.childrenIndex = len(childrenEncoding)
+               lo := uint32(n.firstChild)
+               hi := lo + uint32(len(n.children))
+               maxLo, maxHi = u32max(maxLo, lo), u32max(maxHi, hi)
+               if lo >= 1<<childrenBitsLo {
+                       return fmt.Errorf("children lo %d is too large, or childrenBitsLo is too small", lo)
+               }
+               if hi >= 1<<childrenBitsHi {
+                       return fmt.Errorf("children hi %d is too large, or childrenBitsHi is too small", hi)
+               }
+               enc := hi<<childrenBitsLo | lo
+               enc |= uint32(n.nodeType) << (childrenBitsLo + childrenBitsHi)
+               if n.wildcard {
+                       enc |= 1 << (childrenBitsLo + childrenBitsHi + childrenBitsNodeType)
+               }
+               childrenEncoding = append(childrenEncoding, enc)
+       } else {
+               n.childrenIndex = n.nodeType
+               if n.wildcard {
+                       n.childrenIndex += numNodeType
+               }
+       }
+       return nil
+}
+
+func printNode(w io.Writer, n *node) error {
+       for _, c := range n.children {
+               s := "---------------"
+               if len(c.children) != 0 {
+                       s = fmt.Sprintf("n0x%04x-n0x%04x", c.firstChild, c.firstChild+len(c.children))
+               }
+               encoding := labelEncoding[c.label]
+               if c.icann {
+                       encoding |= 1 << (nodesBitsTextLength + nodesBitsTextOffset)
+               }
+               encoding |= uint32(c.childrenIndex) << (nodesBitsTextLength + nodesBitsTextOffset + nodesBitsICANN)
+               if *comments {
+                       fmt.Fprintf(w, "0x%08x, // n0x%04x c0x%04x (%s)%s %s %s %s\n",
+                               encoding, c.nodesIndex, c.childrenIndex, s, wildcardStr(c.wildcard),
+                               nodeTypeStr(c.nodeType), icannStr(c.icann), c.label,
+                       )
+               } else {
+                       fmt.Fprintf(w, "0x%x,\n", encoding)
+               }
+       }
+       return nil
+}
+
+func printNodeLabel(w io.Writer, n *node) error {
+       for _, c := range n.children {
+               fmt.Fprintf(w, "%q,\n", c.label)
+       }
+       return nil
+}
+
+func icannStr(icann bool) string {
+       if icann {
+               return "I"
+       }
+       return " "
+}
+
+func wildcardStr(wildcard bool) string {
+       if wildcard {
+               return "*"
+       }
+       return " "
+}
+
+// combineText combines all the strings in labelsList to form one giant string.
+// Overlapping strings will be merged: "arpa" and "parliament" could yield
+// "arparliament".
+func combineText(labelsList []string) string {
+       beforeLength := 0
+       for _, s := range labelsList {
+               beforeLength += len(s)
+       }
+
+       text := crush(removeSubstrings(labelsList))
+       if *v {
+               fmt.Fprintf(os.Stderr, "crushed %d bytes to become %d bytes\n", beforeLength, len(text))
+       }
+       return text
+}
+
+type byLength []string
+
+func (s byLength) Len() int           { return len(s) }
+func (s byLength) Swap(i, j int)      { s[i], s[j] = s[j], s[i] }
+func (s byLength) Less(i, j int) bool { return len(s[i]) < len(s[j]) }
+
+// removeSubstrings returns a copy of its input with any strings removed
+// that are substrings of other provided strings.
+func removeSubstrings(input []string) []string {
+       // Make a copy of input.
+       ss := append(make([]string, 0, len(input)), input...)
+       sort.Sort(byLength(ss))
+
+       for i, shortString := range ss {
+               // For each string, only consider strings higher than it in sort order, i.e.
+               // of equal length or greater.
+               for _, longString := range ss[i+1:] {
+                       if strings.Contains(longString, shortString) {
+                               ss[i] = ""
+                               break
+                       }
+               }
+       }
+
+       // Remove the empty strings.
+       sort.Strings(ss)
+       for len(ss) > 0 && ss[0] == "" {
+               ss = ss[1:]
+       }
+       return ss
+}
+
+// crush combines a list of strings, taking advantage of overlaps. It returns a
+// single string that contains each input string as a substring.
+func crush(ss []string) string {
+       maxLabelLen := 0
+       for _, s := range ss {
+               if maxLabelLen < len(s) {
+                       maxLabelLen = len(s)
+               }
+       }
+
+       for prefixLen := maxLabelLen; prefixLen > 0; prefixLen-- {
+               prefixes := makePrefixMap(ss, prefixLen)
+               for i, s := range ss {
+                       if len(s) <= prefixLen {
+                               continue
+                       }
+                       mergeLabel(ss, i, prefixLen, prefixes)
+               }
+       }
+
+       return strings.Join(ss, "")
+}
+
+// mergeLabel merges the label at ss[i] with the first available matching label
+// in prefixMap, where the last "prefixLen" characters in ss[i] match the first
+// "prefixLen" characters in the matching label.
+// It will merge ss[i] repeatedly until no more matches are available.
+// All matching labels merged into ss[i] are replaced by "".
+func mergeLabel(ss []string, i, prefixLen int, prefixes prefixMap) {
+       s := ss[i]
+       suffix := s[len(s)-prefixLen:]
+       for _, j := range prefixes[suffix] {
+               // Empty strings mean "already used." Also avoid merging with self.
+               if ss[j] == "" || i == j {
+                       continue
+               }
+               if *v {
+                       fmt.Fprintf(os.Stderr, "%d-length overlap at (%4d,%4d): %q and %q share %q\n",
+                               prefixLen, i, j, ss[i], ss[j], suffix)
+               }
+               ss[i] += ss[j][prefixLen:]
+               ss[j] = ""
+               // ss[i] has a new suffix, so merge again if possible.
+               // Note: we only have to merge again at the same prefix length. Shorter
+               // prefix lengths will be handled in the next iteration of crush's for loop.
+               // Can there be matches for longer prefix lengths, introduced by the merge?
+               // I believe that any such matches would by necessity have been eliminated
+               // during substring removal or merged at a higher prefix length. For
+               // instance, in crush("abc", "cde", "bcdef"), combining "abc" and "cde"
+               // would yield "abcde", which could be merged with "bcdef." However, in
+               // practice "cde" would already have been elimintated by removeSubstrings.
+               mergeLabel(ss, i, prefixLen, prefixes)
+               return
+       }
+}
+
+// prefixMap maps from a prefix to a list of strings containing that prefix. The
+// list of strings is represented as indexes into a slice of strings stored
+// elsewhere.
+type prefixMap map[string][]int
+
+// makePrefixMap constructs a prefixMap from a slice of strings.
+func makePrefixMap(ss []string, prefixLen int) prefixMap {
+       prefixes := make(prefixMap)
+       for i, s := range ss {
+               // We use < rather than <= because if a label matches on a prefix equal to
+               // its full length, that's actually a substring match handled by
+               // removeSubstrings.
+               if prefixLen < len(s) {
+                       prefix := s[:prefixLen]
+                       prefixes[prefix] = append(prefixes[prefix], i)
+               }
+       }
+
+       return prefixes
+}
diff --git a/vendor/golang.org/x/net/publicsuffix/list.go b/vendor/golang.org/x/net/publicsuffix/list.go
new file mode 100644 (file)
index 0000000..8bbf3bc
--- /dev/null
@@ -0,0 +1,135 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run gen.go
+
+// Package publicsuffix provides a public suffix list based on data from
+// http://publicsuffix.org/. A public suffix is one under which Internet users
+// can directly register names.
+package publicsuffix // import "golang.org/x/net/publicsuffix"
+
+// TODO: specify case sensitivity and leading/trailing dot behavior for
+// func PublicSuffix and func EffectiveTLDPlusOne.
+
+import (
+       "fmt"
+       "net/http/cookiejar"
+       "strings"
+)
+
+// List implements the cookiejar.PublicSuffixList interface by calling the
+// PublicSuffix function.
+var List cookiejar.PublicSuffixList = list{}
+
+type list struct{}
+
+func (list) PublicSuffix(domain string) string {
+       ps, _ := PublicSuffix(domain)
+       return ps
+}
+
+func (list) String() string {
+       return version
+}
+
+// PublicSuffix returns the public suffix of the domain using a copy of the
+// publicsuffix.org database compiled into the library.
+//
+// icann is whether the public suffix is managed by the Internet Corporation
+// for Assigned Names and Numbers. If not, the public suffix is privately
+// managed. For example, foo.org and foo.co.uk are ICANN domains,
+// foo.dyndns.org and foo.blogspot.co.uk are private domains.
+//
+// Use cases for distinguishing ICANN domains like foo.com from private
+// domains like foo.appspot.com can be found at
+// https://wiki.mozilla.org/Public_Suffix_List/Use_Cases
+func PublicSuffix(domain string) (publicSuffix string, icann bool) {
+       lo, hi := uint32(0), uint32(numTLD)
+       s, suffix, wildcard := domain, len(domain), false
+loop:
+       for {
+               dot := strings.LastIndex(s, ".")
+               if wildcard {
+                       suffix = 1 + dot
+               }
+               if lo == hi {
+                       break
+               }
+               f := find(s[1+dot:], lo, hi)
+               if f == notFound {
+                       break
+               }
+
+               u := nodes[f] >> (nodesBitsTextOffset + nodesBitsTextLength)
+               icann = u&(1<<nodesBitsICANN-1) != 0
+               u >>= nodesBitsICANN
+               u = children[u&(1<<nodesBitsChildren-1)]
+               lo = u & (1<<childrenBitsLo - 1)
+               u >>= childrenBitsLo
+               hi = u & (1<<childrenBitsHi - 1)
+               u >>= childrenBitsHi
+               switch u & (1<<childrenBitsNodeType - 1) {
+               case nodeTypeNormal:
+                       suffix = 1 + dot
+               case nodeTypeException:
+                       suffix = 1 + len(s)
+                       break loop
+               }
+               u >>= childrenBitsNodeType
+               wildcard = u&(1<<childrenBitsWildcard-1) != 0
+
+               if dot == -1 {
+                       break
+               }
+               s = s[:dot]
+       }
+       if suffix == len(domain) {
+               // If no rules match, the prevailing rule is "*".
+               return domain[1+strings.LastIndex(domain, "."):], icann
+       }
+       return domain[suffix:], icann
+}
+
+const notFound uint32 = 1<<32 - 1
+
+// find returns the index of the node in the range [lo, hi) whose label equals
+// label, or notFound if there is no such node. The range is assumed to be in
+// strictly increasing node label order.
+func find(label string, lo, hi uint32) uint32 {
+       for lo < hi {
+               mid := lo + (hi-lo)/2
+               s := nodeLabel(mid)
+               if s < label {
+                       lo = mid + 1
+               } else if s == label {
+                       return mid
+               } else {
+                       hi = mid
+               }
+       }
+       return notFound
+}
+
+// nodeLabel returns the label for the i'th node.
+func nodeLabel(i uint32) string {
+       x := nodes[i]
+       length := x & (1<<nodesBitsTextLength - 1)
+       x >>= nodesBitsTextLength
+       offset := x & (1<<nodesBitsTextOffset - 1)
+       return text[offset : offset+length]
+}
+
+// EffectiveTLDPlusOne returns the effective top level domain plus one more
+// label. For example, the eTLD+1 for "foo.bar.golang.org" is "golang.org".
+func EffectiveTLDPlusOne(domain string) (string, error) {
+       suffix, _ := PublicSuffix(domain)
+       if len(domain) <= len(suffix) {
+               return "", fmt.Errorf("publicsuffix: cannot derive eTLD+1 for domain %q", domain)
+       }
+       i := len(domain) - len(suffix) - 1
+       if domain[i] != '.' {
+               return "", fmt.Errorf("publicsuffix: invalid public suffix %q for domain %q", suffix, domain)
+       }
+       return domain[1+strings.LastIndex(domain[:i], "."):], nil
+}
diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go
new file mode 100644 (file)
index 0000000..50f070a
--- /dev/null
@@ -0,0 +1,9253 @@
+// generated by go run gen.go; DO NOT EDIT
+
+package publicsuffix
+
+const version = "publicsuffix.org's public_suffix_list.dat, git revision f47d806df99585862c8426c3e064a50eb5a278f5 (2017-06-14T11:49:01Z)"
+
+const (
+       nodesBitsChildren   = 9
+       nodesBitsICANN      = 1
+       nodesBitsTextOffset = 15
+       nodesBitsTextLength = 6
+
+       childrenBitsWildcard = 1
+       childrenBitsNodeType = 2
+       childrenBitsHi       = 14
+       childrenBitsLo       = 14
+)
+
+const (
+       nodeTypeNormal     = 0
+       nodeTypeException  = 1
+       nodeTypeParentOnly = 2
+)
+
+// numTLD is the number of top level domains.
+const numTLD = 1549
+
+// Text is the combined text of all labels.
+const text = "bifukagawalterbihorologybikedagestangeorgeorgiaxasnesoddenmarkha" +
+       "ngelskjakdnepropetrovskiervaapsteiermarkaragandabruzzoologicalvi" +
+       "nklein-addrammenuernberggfarmerseine12bilbaogakidsmynasushiobara" +
+       "gusartsalangeninohekinannestadray-dnsiskinkyotobetsumidatlantica" +
+       "tholicheltenham-radio-opencraftranagatorodoybillustrationinomiya" +
+       "konojosoyrorosalondonetskarpaczeladzjavald-aostarnbergladegreevj" +
+       "e-og-hornnesaltdalimitedraydnsupdaternopilawabioceanographiquebi" +
+       "rdartcenterprisesakikuchikuseikarugamvikaruizawabirkenesoddtange" +
+       "novaraumalopolskanlandrivelandrobaknoluoktachikawakembuchikumaga" +
+       "yagawakkanaibetsubamericanfamilydscloudcontrolledekafjordrudunsa" +
+       "lvadordalibabalatinord-aurdalvdalaskanittedallasalleasinglesuran" +
+       "certmgretagajobojinzais-a-candidatebirthplacebjarkoybjerkreimbal" +
+       "sfjordgcahcesuolocus-1bjugnirasakis-a-catererblockbustermezlglas" +
+       "sassinationalheritagematsubarakawagoebloombergbauernishiazais-a-" +
+       "celticsfanishigoddabloxcmsalzburgliwicebluedancebmoattachmentsam" +
+       "egawabmsamnangerbmwegroweibolzanordkappgafanquannefrankfurtjmaxx" +
+       "xboxenapponazure-mobilebnpparibaselburglobalashovhachinohedmarka" +
+       "rumaifarmsteadupontariomutashinais-a-chefarsundurbanamexnethnolo" +
+       "gybnrweirbonnishiharabookinglobodoes-itvedestrandurhamburglogowf" +
+       "ashionishiizunazukis-a-conservativefsnillfjordvrcambridgestonexu" +
+       "s-2bootsamsclubindalimoliserniaboschaefflerdalindashorokanaiebos" +
+       "tikasaokaminokawanishiaizubangebostonakijinsekikogentingloppenza" +
+       "ogashimadachicagoboatsamsungmbhartiffanybotanicalgardenishikatak" +
+       "ayamatta-varjjatjometlifeinsurancebotanicgardenishikatsuragithub" +
+       "usercontentjxfinitybotanybouncemerckmsdnipropetrovskjervoyagebou" +
+       "nty-fullensakerrypropertiesandvikcoromantovalle-d-aostatic-acces" +
+       "sanfranciscofreakunemurorangeiseiyoichippubetsubetsugaruhrboutiq" +
+       "uebecngminakamichiharabozentsujiiebplacedogawarabikomaezakirunor" +
+       "dlandvrdnsangoppdalindesnesanjournalismailillesandefjordyndns-at" +
+       "-workinggroupaleobrandywinevalleybrasiliabresciabrindisibenikebr" +
+       "istoloslocalhistorybritishcolumbialowiezachpomorskienishikawazuk" +
+       "amitondabayashiogamagoriziabroadcastlegallocalhostrodawaravennag" +
+       "asukebroadwaybroke-itkmaxxjaworznowtvalled-aostavangerbrokerbron" +
+       "noysundyndns-blogdnsannanishimerabrothermesaverdeatnurembergmode" +
+       "nakasatsunais-a-cpadualstackspace-to-rentalstomakomaibarabrowser" +
+       "safetymarketsannohelplfinancialivornobrumunddalombardiamondsanok" +
+       "ashibatakashimaseratis-a-cubicle-slavellinotteroybrunelasticbean" +
+       "stalkashiharabrusselsantabarbarabruxellesantacruzsantafedjeffers" +
+       "onishinomiyashironobryanskleppalermomahachijorpelandyndns-freebo" +
+       "x-ostrowwlkpmgmxn--0trq7p7nnishinoomotegobrynewhollandyndns-home" +
+       "dnsanukis-a-democratmpalmspringsakerbuskerudinewmexicodyn-vpnplu" +
+       "sterbuzenishinoshimattelefonicarbonia-iglesias-carboniaiglesiasc" +
+       "arboniabuzzpamperedchefastlylbaltimore-og-romsdalwaysdatabasebal" +
+       "langenoamishirasatochigiessensiositelemarkarateu-1bwhalingrimsta" +
+       "dyndns-ipirangaulardalombardynamisches-dnsaotomemergencyachtsapo" +
+       "dlasiellaktyubinskiptveterinairealtorlandyndns-mailomzaporizhzhe" +
+       "guris-a-designerimarumorimachidabzhitomirumalselvendrellorenskog" +
+       "ripescaravantaacondoshichinohealth-carereformitakeharaconference" +
+       "constructionconsuladoesntexistanbullensvanguardyndns1consultanth" +
+       "ropologyconsultingvolluroycontactoyotsukaidownloadynnsaskatchewa" +
+       "ncontemporaryarteducationalchikugodoharuovatoyouracontractorsken" +
+       "conventureshinodesashibetsuikinderoycookingchannelblagdenesnaase" +
+       "ralingenkainanaejrietisalatinabenonichernivtsiciliacoolkuszczytn" +
+       "ore-og-uvdalutskasuyameldaluxembourgrpanamacooperaunitenrightath" +
+       "omeftpanasonichernovtsykkylvenetogakushimotoganewspapercopenhage" +
+       "ncyclopedichirurgiens-dentistes-en-francecorsicagliaridagawarsza" +
+       "washingtondclkaszubycorvettevadsoccertificationcosenzagancosidns" +
+       "dojoetsuwanouchikujogaszkoladbrokesassaris-a-huntercostumedio-ca" +
+       "mpidano-mediocampidanomediocouchpotatofriesatxn--11b4c3dynv6coun" +
+       "ciluxurycouponsaudacoursesauheradynvpnchiryukyuragifuchungbukhar" +
+       "acq-acranbrookuwanalyticsavannahgacreditcardyroyrvikingruecredit" +
+       "unioncremonashgabadaddjambyluzerncrewiiheyakagecricketrzyncrimea" +
+       "st-kazakhstanangercrotonextdirectoystre-slidrettozawacrownprovid" +
+       "ercrsvparaglidinguitarsaves-the-whalessandria-trani-barletta-and" +
+       "riatranibarlettaandriacruisesavonaplesaxocryptonomichigangwoncui" +
+       "sinellahppiacenzakopanerairguardiannakadomarinebraskaunjargalsac" +
+       "eoculturalcentertainmentozsdeltaitogliattiresbschokoladencuneocu" +
+       "pcakecxn--12c1fe0bradescorporationcyberlevagangaviikanonjis-a-kn" +
+       "ightpointtokaizukamikitayamatsuris-a-landscapercymrussiacyonabar" +
+       "ulvikatowicecyouthdfcbankatsushikabeeldengeluidfidonnakamurataji" +
+       "mibuildingulenfieldfiguerestaurantraniandriabarlettatraniandriaf" +
+       "ilateliafilegearthachiojiyahoofilminamidaitomangotsukisosakitaga" +
+       "wafinalfinancefineartschwarzgwangjuifminamiechizenfinlandfinnoyf" +
+       "irebaseapparisor-fronfirenzefirestonefirmdaleirvikaufenfishingol" +
+       "ffanschweizwildlifedorainfracloudfrontdoorfitjarmeniafitnessettl" +
+       "ementranoyfjalerflesbergunmarburguovdageaidnuslivinghistoryflick" +
+       "ragerotikakamigaharaflightsciencecentersciencehistoryflirflogint" +
+       "ogurafloraflorencefloridavvesiidazaifudaigojomedizinhistorisches" +
+       "cientistoragefloripaderbornfloristanohatakahamangyshlakasamatsud" +
+       "ontexisteingeekautokeinoflorogerscjohnsonflowerscotlandflynnhuba" +
+       "mblefrakkestadiscountysnes3-sa-east-1fndfoodnetworkshoppingushik" +
+       "amifuranortonsbergxn--12co0c3b4evalleaostatoilfor-ourfor-someetn" +
+       "edalfor-theaterforexrothachirogatakahatakaishimogosenforgotdnscr" +
+       "apper-siteforli-cesena-forlicesenaforlikescandynamic-dnscrapping" +
+       "forsaleitungsenforsandasuolodingenfortmissoulair-traffic-control" +
+       "leyfortworthadanosegawaforuminamifuranofosneserveftparliamentran" +
+       "sportransurlfotaruis-a-lawyerfoxfordedyn-ip24freeboxoservegame-s" +
+       "erversailleservehalflifestylefreemasonryfreetlservehttparmafreib" +
+       "urgfreightcminamiiselectrapaniimimatakatoris-a-liberalfresenius-" +
+       "3fribourgfriuli-v-giuliafriuli-ve-giuliafriuli-vegiuliafriuli-ve" +
+       "nezia-giuliafriuli-veneziagiuliafriuli-vgiuliafriuliv-giuliafriu" +
+       "live-giuliafriulivegiuliafriulivenezia-giuliafriuliveneziagiulia" +
+       "friulivgiuliafrlfroganservehumourfrognfrolandfrom-akrehamnfrom-a" +
+       "lfrom-arqhadselfiparocherkasyno-dserveirchitachinakagawassamukaw" +
+       "ataricohdatsunanjoburgriwataraidyndns-office-on-the-webcampobass" +
+       "ociatesapporofrom-azfrom-capebretonamiastapleserveminecraftravel" +
+       "channelfrom-collectionfrom-ctravelersinsurancefrom-dchitosetogit" +
+       "suldalotenkawafrom-defenseljordfrom-flanderservemp3from-gausdalf" +
+       "rom-higashiagatsumagoizumizakirkeneservep2parservepicservequakef" +
+       "rom-iafrom-idfrom-ilfrom-incheonfrom-kservesarcasmatartanddesign" +
+       "from-kyowariasahikawafrom-lajollamericanexpressexyfrom-maniwakur" +
+       "atextileksvikazofrom-mdfrom-megurokunohealthcareerservicesettsur" +
+       "geonshalloffamemorialfrom-microsoftbankazunofrom-mnfrom-modellin" +
+       "gfrom-msevastopolefrom-mtnfrom-nchloefrom-ndfrom-nefrom-nhktrdfr" +
+       "om-njcbnlfrom-nminamiizukamisatokamachintaifun-dnsaliasdaburfrom" +
+       "-nvalledaostavernfrom-nyfrom-ohkurafrom-oketohmannorth-kazakhsta" +
+       "nfrom-orfrom-padovaksdalfrom-pratohnoshoooshikamaishimodatefrom-" +
+       "rivnefrom-schoenbrunnfrom-sdfrom-tnfrom-txn--1ck2e1bananarepubli" +
+       "caseihichisobetsuitainairforcechirealminamiawajikibmdiscoveryomb" +
+       "ondishakotanavigationavoiitatebayashiibahcavuotnagaraholtaleniwa" +
+       "izumiotsukumiyamazonawsadodgemologicallyngenvironmentalconservat" +
+       "ionavuotnaklodzkodairassnasabaerobaticketselinogradultashkentata" +
+       "motors3-ap-northeast-2from-utazuerichardlillehammerfeste-ipartis" +
+       "-a-libertarianfrom-val-daostavalleyfrom-vtrentino-a-adigefrom-wa" +
+       "from-wielunnerfrom-wvallee-aosteroyfrom-wyfrosinonefrostalowa-wo" +
+       "lawafroyahikobeardubaiduckdnsevenassisicilyfstcgroupartnersewill" +
+       "iamhillfujiiderafujikawaguchikonefujiminohtawaramotoineppubologn" +
+       "akanotoddenfujinomiyadafujiokayamansionsfranziskanerdpolicefujis" +
+       "atoshonairtelecityeatsharis-a-linux-useranishiaritabashijonawate" +
+       "fujisawafujishiroishidakabiratoridefinimakanegasakindlegokasells" +
+       "-for-lessharpartshawaiijimarugame-hostrolekameokameyamatotakadaf" +
+       "ujitsurugashimaritimekeepingfujixeroxn--1ctwolominamatakkokamino" +
+       "yamaxunusualpersonfujiyoshidafukayabeatshellaspeziafukuchiyamada" +
+       "fukudominichocolatemasekashiwazakiyosatokashikiyosemitefukuis-a-" +
+       "llamarylandfukumitsubishigakirovogradoyfukuokazakiryuohaebarumin" +
+       "amimakis-a-musicianfukuroishikarikaturindalfukusakisarazurewebsi" +
+       "teshikagamiishibukawafukuyamagatakaharustkanoyakumoldeloittexasc" +
+       "olipicenoipifonynysaarlandfunabashiriuchinadafunagatakahashimama" +
+       "kishiwadafunahashikamiamakusatsumasendaisennangonohejis-a-nascar" +
+       "fanfundaciofuoiskujukuriyamanxn--1lqs03nfuosskoczowinbarcelonaga" +
+       "sakijobserverisignieznord-frontiereviewskrakowedeployomitanobihi" +
+       "rosakikamijimastronomy-gatewaybomloans3-ap-south-1furnituredston" +
+       "efurubiraquarelleborkangerfurudonostiaarpartyfurukawairtrafficho" +
+       "funatoriginsurecifedexhibitionishiokoppegardyndns-picsardegnamss" +
+       "koganeis-a-doctorayfusodegaurafussaikisofukushimaoris-a-nurserve" +
+       "bbshimojis-a-painteractivegarsheis-a-patsfanfutabayamaguchinomig" +
+       "awafutboldlygoingnowhere-for-moregontrailroadfuttsurugimperiafut" +
+       "urehostingfuturemailingfvgfyis-a-personaltrainerfylkesbiblackfri" +
+       "dayfyresdalhangoutsystemscloudfunctionshimokawahannanmokuizumode" +
+       "rnhannotaireshimokitayamahanyuzenhapmirhareidsbergenharstadharve" +
+       "stcelebrationhasamarcheapassagenshimonitayanagitlaborhasaminami-" +
+       "alpssells-itrentino-aadigehashbanghasudahasura-appassenger-assoc" +
+       "iationhasvikddielddanuorrikuzentakataiwanairlinedre-eikerhatogay" +
+       "aitakamoriokalmykiahatoyamazakitahiroshimarnardalhatsukaichikais" +
+       "eis-a-republicancerresearchaeologicaliforniahattfjelldalhayashim" +
+       "amotobungotakadapliernewjerseyhazuminobusellsyourhomegoodshimono" +
+       "sekikawahboehringerikehelsinkitakamiizumisanofidelitysvardollshi" +
+       "mosuwalkis-a-rockstarachowicehembygdsforbundhemneshimotsukehemse" +
+       "dalhepforgeherokussldheroyhgtvalleeaosteigenhigashichichibunkyon" +
+       "anaoshimageandsoundandvisionhigashihiroshimanehigashiizumozakita" +
+       "katakanabeautydalhigashikagawahigashikagurasoedahigashikawakitaa" +
+       "ikitakyushuaiahigashikurumeiwamarriottrentino-alto-adigehigashim" +
+       "atsushimarshallstatebankfhappouhigashimatsuyamakitaakitadaitoiga" +
+       "wahigashimurayamamotorcycleshimotsumahigashinarusembokukitamidor" +
+       "is-a-socialistmein-vigorgehigashinehigashiomihachimanchesterhiga" +
+       "shiosakasayamanakakogawahigashishirakawamatakanezawahigashisumiy" +
+       "oshikawaminamiaikitamotosumitakagildeskaliszhigashitsunotogawahi" +
+       "gashiurausukitanakagusukumoduminamiminowahigashiyamatokoriyamana" +
+       "shifteditchyouripaviancarrierhigashiyodogawahigashiyoshinogaris-" +
+       "a-soxfanhiraizumisatohobby-sitehirakatashinagawahiranais-a-stude" +
+       "ntalhirarahiratsukagawahirayaizuwakamatsubushikusakadogawahistor" +
+       "ichouseshinichinanhitachiomiyaginankokubunjis-a-teacherkassymant" +
+       "echnologyhitachiotagooglecodespotrentino-altoadigehitraeumtgerad" +
+       "elmenhorstalbanshinjournalistjohnhjartdalhjelmelandholeckobierzy" +
+       "ceholidayhomeipfizerhomelinkhakassiahomelinuxn--1lqs71dhomeoffic" +
+       "ehomesecuritymaceratakaokaluganskolevangerhomesecuritypccwindmil" +
+       "lhomesenseminehomeunixn--1qqw23ahondahoneywellbeingzonehongopocz" +
+       "northwesternmutualhonjyoitakarazukamakurazakitashiobarahornindal" +
+       "horseoulminamiogunicomcastresistancehortendofinternet-dnshinjuku" +
+       "manohospitalhoteleshinkamigotoyohashimotoshimahotmailhoyangerhoy" +
+       "landetroitskydivinghumanitieshinshinotsurgeryhurdalhurumajis-a-t" +
+       "echietis-a-therapistoiahyllestadhyogoris-an-accountantshinshiroh" +
+       "yugawarahyundaiwafunehzchoseiroumuenchenishitosashimizunaminamia" +
+       "shigarajfkhmelnitskiyamashikejgorajlchoyodobashichikashukujitawa" +
+       "rajlljmpharmacienshiojirishirifujiedajnjcpgfoggiajoyokaichibahcc" +
+       "avuotnagareyamalborkdalpha-myqnapcloudapplebesbyglandjpmorganjpn" +
+       "jprshioyanaizujuniperjurkoshimizumakis-an-engineeringkoshunantok" +
+       "igawakosugekotohiradomainshirakofuefukihaboromskoguchikuzenkotou" +
+       "rakouhokutamakis-an-entertainerkounosupplieshiranukamogawakouyam" +
+       "ashikokuchuokouzushimasoykozagawakozakis-bykpnkppspdnshiraois-ce" +
+       "rtifieducatorahimeshimamateramochizukirakrasnodarkredirectmelhus" +
+       "cultureggio-calabriakristiansandcatshiraokanagawakristiansundkro" +
+       "dsheradkrokstadelvaldaostarostwodzislawindowshiratakahagivestbyk" +
+       "ryminamisanrikubetsupportrentino-sued-tirolkumatorinokumejimasud" +
+       "akumenanyokkaichiropractichristmasakikugawatchandclockasukabedzi" +
+       "n-the-bandaikawachinaganoharamcoachampionshiphoptobishimaizurugb" +
+       "ydgoszczecinemakeupowiathletajimabariakeisenbahnishiwakis-a-fina" +
+       "ncialadvisor-aurdalottokonamegatakasugais-a-geekgalaxykunisakis-" +
+       "foundationkunitachiarailwaykunitomigusukumamotoyamassa-carrara-m" +
+       "assacarraramassabusinessebytomaritimobarakunneppulawykunstsammlu" +
+       "ngkunstunddesignkuokgrouphdkureggio-emilia-romagnakatsugawakurga" +
+       "nkurobelaudiblebtimnetzkurogimilanokuroisoftwarendalenugkuromats" +
+       "unais-gonekurotakikawasakis-into-animelbournekushirogawakustanai" +
+       "s-into-carshintomikasaharakusupplykutchanelkutnokuzumakis-into-c" +
+       "artoonshinyoshitomiokamitsuekvafjordkvalsundkvamfamberkeleykvana" +
+       "ngenkvinesdalkvinnheradkviteseidskogkvitsoykwpspiegelkzmissilewi" +
+       "smillermisugitokorozawamitourismolancastermitoyoakemiuramiyazumi" +
+       "yotamanomjondalenmlbfanmonmouthagebostadmonstermonticellolmontre" +
+       "alestatefarmequipmentrentino-suedtirolmonza-brianzaporizhzhiamon" +
+       "za-e-della-brianzapposhishikuis-not-certifiedunetbankharkovanylv" +
+       "enicemonzabrianzaptokuyamatsusakahoginowaniihamatamakawajimaphil" +
+       "adelphiaareadmyblogsitemonzaebrianzaramonzaedellabrianzamoonscal" +
+       "exusdecorativeartshisognemoparachutingmordoviajessheiminamitanem" +
+       "oriyamatsushigemoriyoshimilitarymormoneymoroyamatsuuramortgagemo" +
+       "scowinnershisuifuelveruminamiuonumatsumotofukemoseushistorymosjo" +
+       "enmoskeneshitaramamosshizukuishimofusaitamatsukuris-savedmosvikn" +
+       "x-serveronakatombetsunndalmoteginozawaonsenmoviemovistargardmtpc" +
+       "hromedicaltanissettairamtranbymuenstermugithubcloudusercontentre" +
+       "ntinoa-adigemuikamishihoronobeauxartsandcraftshizuokananporovigo" +
+       "tpantheonsitemukochikushinonsenergymulhouservebeermunakatanemunc" +
+       "ieszynmuosattemuphilatelymurmanskolobrzegersundmurotorcraftrenti" +
+       "noaadigemusashimurayamatsuzakis-slickhersonmusashinoharamuseetre" +
+       "ntinoalto-adigemuseumverenigingmusicargodaddynaliascoli-picenogi" +
+       "ftshoujis-uberleetrentino-stirolmutsuzawamy-vigorlicemy-wanggouv" +
+       "icenzamyactivedirectorymyasustor-elvdalmycdn77-securechtrainingm" +
+       "ydissentrentinoaltoadigemydrobofagemydshowamyeffectrentinos-tiro" +
+       "lmyfirewallonieruchomoscienceandindustrynmyfritzmyftpaccesshowti" +
+       "meteorapphilipsynology-diskstationmyfusionmyhome-serverrankoshig" +
+       "ayanagawamykolaivaporcloudmymailermymediapchryslermyokohamamatsu" +
+       "damypepsongdalenviknakanojohanamakinoharamypetshriramlidlugoleka" +
+       "gaminoduminamiyamashirokawanabelembroideryggeelvincklabudhabikin" +
+       "okawabarthagakhanamigawamyphotoshibajddarchaeologyeongnamegawalb" +
+       "rzycharternidmypsxn--30rr7ymysecuritycamerakermyshopblocksienara" +
+       "shinomytis-a-bookkeeperugiamyvnchungnamdalseidfjordyndns-remotew" +
+       "dyndns-serverdalouvreggioemiliaromagnakayamatsumaebashikshacknet" +
+       "oyookanmakiwakunigamidsundyndns-weberlincolnissandnessjoenissayo" +
+       "koshibahikariwanumatakazakis-a-greenissedalowiczest-le-patrondhe" +
+       "immobilienisshingugepicturesilkomaganepiemontepilotsimple-urlpim" +
+       "ientaketomisatolgapinkomakiyosumy-routerpioneerpippuphonefossigd" +
+       "alpiszpittsburghofauskedsmokorsetagayasells-for-unzenpiwatepizza" +
+       "pkomatsushimashikizunokunimihoboleslawiechristiansburgroks-thisa" +
+       "yamanobeokakudamatsueplanetariuminanoplantationplantsirdalplatfo" +
+       "rmshangrilanciaplaystationplazaplchurchaseljeepostfoldnavyplumbi" +
+       "ngopmnpodzonepohlpoivronpokerpokrovskomforbarclays3-us-gov-west-" +
+       "1politiendapolkowicepoltavalle-aostathellezajskommunalforbundpom" +
+       "orzeszowioslingpordenonepornporsangerporsanguidellogliastradingp" +
+       "orsgrunnanpoznanpraxis-a-bruinsfanprdpreservationpresidioprgmrpr" +
+       "imeloyalistockholmestrandprincipeprivatizehealthinsuranceprochow" +
+       "iceproductionslupskommuneprofbsbxn--12cfi8ixb8lvivano-frankivska" +
+       "tsuyamasfjordenprogressivegasiapromombetsurfbx-oscholarshipschoo" +
+       "lpropertyprotectionprotonetrentinosud-tirolprudentialpruszkowitd" +
+       "komonoprzeworskogptplusgardenpvtrentinosudtirolpwcirclegnicafede" +
+       "rationiyodogawapzqldqponqslgbtrentinosued-tirolquicksytesnoasait" +
+       "omobellevuelosangelesjaguarchitecturealtychyattorneyagawalesundq" +
+       "uipelementsokanazawaqvcircustomerstuff-4-salestufftoread-booksne" +
+       "solognestuttgartritonsusakis-very-evillagesusonosuzakaneyamazoes" +
+       "uzukaniepcesuzukis-very-goodhandsonsvalbardunloppacificitadelive" +
+       "rysveiosvelvikongsbergsvizzeraswedenswidnicartierswiebodzindiana" +
+       "polis-a-bloggerswiftcoversicherungswinoujscienceandhistoryswissh" +
+       "ikis-very-nicesynology-dsolundbeckomorotsukamiokamikoaniikappugl" +
+       "iatushuissier-justicetuvalle-daostaticsomatuxfamilytwmailvennesl" +
+       "askerrylogisticsomnaritakurashikis-very-badajozoravestfoldvestne" +
+       "soovestre-slidreamhostersopotrentinosuedtirolvestre-totennishiaw" +
+       "akuravestvagoyvevelstadvibo-valentiavibovalentiavideovillaskimit" +
+       "subatamicable-modembetsukuis-very-sweetpeppervinnicartoonartdeco" +
+       "ffeedbackplaneappspotagervinnytsiavipsinaappiagetmyiphoenixn--32" +
+       "vp30haibarakitahatakamatsukawavirginiavirtualvirtueeldomeindianm" +
+       "arketingvirtuelvisakegawavistaprinternationalfirearmsor-odalvite" +
+       "rboltrogstadvivoldavixn--3bst00minnesotaketakatsukis-into-gamess" +
+       "inatsukigatakasagotembaixadavlaanderenvladikavkazimierz-dolnyvla" +
+       "dimirvlogoipictetrentinostirolvolkswagentsor-varangervologdansko" +
+       "ninjamisonvolvolkenkundenvolyngdalvossevangenvotevotingvotoyonak" +
+       "agyokutoursorfoldwloclawekonskowolayangroupharmacyshirahamatonbe" +
+       "tsurnadalwmflabsorreisahayakawakamiichikawamisatotalworldworse-t" +
+       "handawowithgoogleapisa-hockeynutsiracusakatakinouewritesthisblog" +
+       "sytewroclawithyoutubeneventoeidsvollwtcitichernigovernmentoyonow" +
+       "tfbxoschulewuozuwwwiwatsukiyonowruzhgorodeowzmiuwajimaxn--45brj9" +
+       "civilaviationxn--45q11civilisationxn--4gbriminingxn--4it168dxn--" +
+       "4it797konyveloftrentino-sudtirolxn--4pvxs4allxn--54b7fta0ccivili" +
+       "zationxn--55qw42gxn--55qx5dxn--5js045dxn--5rtp49civilwarmanageme" +
+       "ntoyosatoyakokonoexn--5rtq34kooris-an-anarchistoricalsocietyxn--" +
+       "5su34j936bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2rxn--6qq986" +
+       "b3xlxn--7t0a264claimsarlucaniaxn--80adxhksortlandxn--80ao21axn--" +
+       "80aqecdr1axn--80asehdbarreauctionflfanfshostrowiecasertaipeiheij" +
+       "iiyamanouchikuhokuryugasakitaurayasudaukraanghkeymachineustarhub" +
+       "alsanagochihayaakasakawaharanzanpachigasakicks-assedicasadelamon" +
+       "edatingjemnes3-ap-southeast-2xn--80aswgxn--80audnedalnxn--8ltr62" +
+       "kopervikhmelnytskyivaolbia-tempio-olbiatempioolbialystokkepnogat" +
+       "aijis-an-actresshintokushimaxn--8pvr4uxn--8y0a063axn--90a3academ" +
+       "y-firewall-gatewayxn--90aishobaraomoriguchiharahkkeravjuedisches" +
+       "apeakebayernrtromsakakinokiaxn--90azhytomyrxn--9dbhblg6dietcimdb" +
+       "arrel-of-knowledgeologyonagoyaurskog-holandroverhalla-speziaerop" +
+       "ortalaheadjudaicaaarborteaches-yogasawaracingroks-theatree164xn-" +
+       "-9dbq2axn--9et52uxn--9krt00axn--andy-iraxn--aroport-byandexn--3d" +
+       "s443gxn--asky-iraxn--aurskog-hland-jnbarrell-of-knowledgeometre-" +
+       "experts-comptables3-us-west-1xn--avery-yuasakuhokkaidoomdnshome-" +
+       "webservercellikes-piedmontblancomeeresorumincommbankmpspbarclayc" +
+       "ards3-us-east-2xn--b-5gaxn--b4w605ferdxn--bck1b9a5dre4cldmailucc" +
+       "apitalonewportlligatoyotaris-a-gurulsandoyxn--bdddj-mrabdxn--bea" +
+       "ralvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-k7ax" +
+       "n--bidr-5nachikatsuuraxn--bievt-0qa2xn--bjarky-fyaotsurreyxn--bj" +
+       "ddar-ptamayufuettertdasnetzxn--blt-elabourxn--bmlo-graingerxn--b" +
+       "od-2naroyxn--brnny-wuaccident-investigation-aptibleaseating-orga" +
+       "nicbcn-north-1xn--brnnysund-m8accident-prevention-webhopenairbus" +
+       "antiquest-a-la-maisondre-landebudapest-a-la-masionionjukudoyamag" +
+       "entositelekommunikationthewifiat-band-campaniaxn--brum-voagatrom" +
+       "sojampagefrontapphotographysioxn--btsfjord-9zaxn--c1avgxn--c2br7" +
+       "gxn--c3s14mintelligencexn--cck2b3barsyonlinewhampshirebungoonord" +
+       "-odalazioceanographics3-us-west-2xn--cg4bkis-with-thebandovre-ei" +
+       "kerxn--ciqpnxn--clchc0ea0b2g2a9gcdn77-sslattumisakis-leetrentino" +
+       "-s-tirollagrigentomologyeongbukharkivgucciprianiigataishinomakim" +
+       "obetsuliguriaxn--comunicaes-v6a2oxn--correios-e-telecomunicaes-g" +
+       "hc29axn--czr694bashkiriaustevollarvikarasjohkamiminers3-ca-centr" +
+       "al-1xn--czrs0trusteexn--czru2dxn--czrw28basilicataniaustinnatura" +
+       "lsciencesnaturelles3-eu-central-1xn--d1acj3basketballfinanzgorau" +
+       "straliaisondriodejaneirochesterepbodynathomebuiltatarantottoribe" +
+       "staddnskingjerdrumckinseyokosukanzakiwienaturbruksgymnaturhistor" +
+       "isches3-eu-west-1xn--d1alfaromeoxn--d1atrvarggatroandinosaureise" +
+       "nxn--d5qv7z876clickasumigaurawa-mazowszextraspacekitagatajirissa" +
+       "gamiharaxn--davvenjrga-y4axn--djrs72d6uyxn--djty4koryokamikawane" +
+       "honbetsurutaharaxn--dnna-grajewolterskluwerxn--drbak-wuaxn--dyry" +
+       "-iraxn--e1a4clinichernihivanovodkagoshimalvikashiwaraxn--eckvdtc" +
+       "9dxn--efvn9southcarolinazawaxn--efvy88hair-surveillancexn--ehqz5" +
+       "6nxn--elqq16hakatanoshiroomuraxn--estv75gxn--eveni-0qa01gaxn--f6" +
+       "qx53axn--fct429kosaigawaxn--fhbeiarnxn--finny-yuaxn--fiq228c5hso" +
+       "uthwestfalenxn--fiq64batodayonaguniversityoriikariyaltakasakiyok" +
+       "awaraustrheimatunduhrennesoyokoteastcoastaldefencebinagisochildr" +
+       "ensgardenatuurwetenschappenaumburgjerstadotsuruokakegawaetnagaha" +
+       "maroygardenebakkeshibechambagriculturennebudejjudygarlandd-dnsfo" +
+       "r-better-thanawawdev-myqnapcloudcontrolapplinzi234xn--fiqs8sowax" +
+       "n--fiqz9spjelkavikomvuxn--2m4a15exn--fjord-lraxn--fjq720axn--fl-" +
+       "ziaxn--flor-jraxn--flw351exn--fpcrj9c3dxn--frde-grandrapidspread" +
+       "bettingxn--frna-woaraisaijotrysiljanxn--frya-hraxn--fzc2c9e2clin" +
+       "iquenoharaxn--fzys8d69uvgmailxn--g2xx48clintonoshoesarpsborgrond" +
+       "arxn--gckr3f0fedorapeopleirfjordxn--gecrj9clothingrongaxn--ggavi" +
+       "ika-8ya47hakodatexn--gildeskl-g0axn--givuotna-8yasakaiminatoyone" +
+       "zawaxn--gjvik-wuaxn--gk3at1exn--gls-elacaixaxn--gmq050isleofmand" +
+       "alxn--gmqw5axn--h-2failxn--h1aeghakonexn--h2brj9cnsarufutsunomiy" +
+       "awakasaikaitakoelnxn--h3cuzk1digitalxn--hbmer-xqaxn--hcesuolo-7y" +
+       "a35batsfjordivtasvuodnakaiwamizawauthordalandroiddnss3-eu-west-2" +
+       "xn--hery-iraxn--hgebostad-g3axn--hmmrfeasta-s4acctulangevagrarbo" +
+       "retumbriaxn--hnefoss-q1axn--hobl-iraxn--holtlen-hxaxn--hpmir-xqa" +
+       "xn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b6b1a6a2exn--imr" +
+       "513nxn--indery-fyasugissmarterthanyouxn--io0a7iwchoshibuyachiyod" +
+       "avvenjargapartmentsardiniaxn--j1aefedoraprojectrani-andria-barle" +
+       "tta-trani-andriaxn--j1amhakubaghdadxn--j6w193gxn--jlq61u9w7bauha" +
+       "usposts-and-telecommunicationsncfdivttasvuotnakamagayahababyklec" +
+       "lercasinordre-landiyoshiokaracoldwarmiamihamadautomotivecoalipay" +
+       "okozebinorfolkebibleikangereportateshinanomachimkentateyamagroce" +
+       "rybnikahokutobamaintenancebetsukubank12xn--jlster-byasuokanraxn-" +
+       "-jrpeland-54axn--jvr189misasaguris-lostre-toteneis-an-actorxn--k" +
+       "7yn95exn--karmy-yuaxn--kbrq7oxn--kcrx77d1x4axn--kfjord-iuaxn--kl" +
+       "bu-woaxn--klt787dxn--kltp7dxn--kltx9axn--klty5xn--3e0b707exn--ko" +
+       "luokta-7ya57hakuis-a-photographerokuappasadenamsosnowiechonanbui" +
+       "lderschmidtre-gauldalottexn--kprw13dxn--kpry57dxn--kpu716fermoda" +
+       "lenxn--kput3ixn--krager-gyatomitamamuraxn--kranghke-b0axn--krdsh" +
+       "erad-m8axn--krehamn-dxaxn--krjohka-hwab49jeonnamerikawauexn--ksn" +
+       "es-uuaxn--kvfjord-nxaxn--kvitsy-fyatsukanumazuryxn--kvnangen-k0a" +
+       "xn--l-1fairwindspydebergxn--l1accentureklamborghiniizaxn--lahead" +
+       "ju-7yatsushiroxn--langevg-jxaxn--lcvr32dxn--ldingen-q1axn--leaga" +
+       "viika-52bbcateringebugattipschlesisches3-website-ap-northeast-1x" +
+       "n--lesund-huaxn--lgbbat1ad8jetztrentino-sud-tirolxn--lgrd-poacnt" +
+       "oyotomiyazakis-a-hard-workerxn--lhppi-xqaxn--linds-pramericanart" +
+       "unesolutionsokndalxn--lns-qlansrlxn--loabt-0qaxn--lrdal-sraxn--l" +
+       "renskog-54axn--lt-liacolonialwilliamsburgrossetouchijiwadell-ogl" +
+       "iastraderxn--lten-granexn--lury-iraxn--m3ch0j3axn--mely-iraxn--m" +
+       "erker-kuaxn--mgb2ddesrtrentoyokawaxn--mgb9awbferraraxn--mgba3a3e" +
+       "jtunkongsvingerxn--mgba3a4f16axn--mgba3a4franamizuholdingsmilelx" +
+       "n--mgba7c0bbn0axn--mgbaakc7dvferrarittogoldpoint2thisamitsukexn-" +
+       "-mgbaam7a8hakusandiegoodyearxn--mgbab2bdxn--mgbai9a5eva00bbtatto" +
+       "olsztynsettlers3-website-ap-southeast-1xn--mgbai9azgqp6jevnakers" +
+       "huscountryestateofdelawarezzoologyxn--mgbayh7gpagespeedmobilizer" +
+       "oxn--mgbb9fbpobanazawaxn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzd" +
+       "oxn--mgberp4a5d4a87gxn--mgberp4a5d4arxn--mgbi4ecexposedxn--mgbpl" +
+       "2fhskodjejuegoshikiminokamoenairportland-4-salernoboribetsucksrv" +
+       "areserveblogspotrevisohughesolarssonxn--mgbqly7c0a67fbcoloradopl" +
+       "ateaudioxn--mgbqly7cvafredrikstadtvstordalxn--mgbt3dhdxn--mgbtf8" +
+       "flatangerxn--mgbtx2bbvacationswatch-and-clockerhcloudns3-website" +
+       "-ap-southeast-2xn--mgbx4cd0abbotturystykannamifunexn--mix082ferr" +
+       "eroticanonoichinomiyakexn--mix891fetsundxn--mjndalen-64axn--mk0a" +
+       "xindustriesteambulancexn--mk1bu44columbusheyxn--mkru45ixn--mlatv" +
+       "uopmi-s4axn--mli-tlanxesstorehabmerxn--mlselv-iuaxn--moreke-juax" +
+       "n--mori-qsakuragawaxn--mosjen-eyawaraxn--mot-tlapyatigorskypexn-" +
+       "-mre-og-romsdal-qqbentleyukinfinitintuitaxihuanhlfanhs3-website-" +
+       "eu-west-1xn--msy-ula0haldenxn--mtta-vrjjat-k7afamilycompanycommu" +
+       "nitysfjordyndns-wikinkobayashikaoirminamibosogndalucernexn--muos" +
+       "t-0qaxn--mxtq1misawaxn--ngbc5azdxn--ngbe9e0axn--ngbrxn--3oq18vl8" +
+       "pn36axn--nit225kosakaerodromegallupinbarefootballooningjovikarat" +
+       "suginamikatagamiharuconnectatsunobiraugustowadaegubs3-ap-southea" +
+       "st-1xn--nmesjevuemie-tcbalestrandabergamoarekexn--nnx388axn--nod" +
+       "exn--nqv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--ntsq17gxn--nttery" +
+       "-byaeservecounterstrikexn--nvuotna-hwaxn--nyqy26axn--o1achattano" +
+       "oganordreisa-geekoseis-an-artisteinkjerusalemrxn--o3cw4halsaintl" +
+       "ouis-a-anarchistoiredumbrellanbibaidarxn--o3cyx2axn--od0algxn--o" +
+       "d0aq3beppublishproxyzgorzeleccolognewyorkshirecipesaro-urbino-pe" +
+       "sarourbinopesaromasvuotnaharimamurogawatches3-website-sa-east-1x" +
+       "n--ogbpf8flekkefjordxn--oppegrd-ixaxn--ostery-fyawatahamaxn--osy" +
+       "ro-wuaxn--p1acfgujolsterxn--p1aixn--pbt977comobilyxn--pgbs0dhlxn" +
+       "--porsgu-sta26fhvalerxn--pssu33lxn--pssy2uxn--q9jyb4comparemarke" +
+       "rryhotelsasayamaxn--qcka1pmcdonaldstorfjordxn--qqqt11misconfused" +
+       "xn--qxamuneuestorjelenia-goraxn--rady-iraxn--rdal-poaxn--rde-ula" +
+       "quilancashireggiocalabriaxn--rdy-0nabarixn--rennesy-v1axn--rhkke" +
+       "rvju-01aflakstadaokagakibichuoxn--rholt-mragowoodsidexn--rhqv96g" +
+       "xn--rht27zxn--rht3dxn--rht61exn--risa-5narusawaxn--risr-iraxn--r" +
+       "land-uuaxn--rlingen-mxaxn--rmskog-byaxn--rny31hammarfeastafricap" +
+       "etownnews-stagingxn--rovu88bernuorockartuzyukuhashimoichinosekig" +
+       "aharautoscanadaejeonbukarasjokarasuyamarylhurstjordalshalsenaust" +
+       "dalavagiskebizenakaniikawatanaguramusementarnobrzegyptianaturalh" +
+       "istorymuseumcenterepaircraftarumizusawabogadocscbgdyniabkhaziama" +
+       "llamagazineat-url-o-g-i-nativeamericanantiques3-ap-northeast-1ka" +
+       "ppchizippodhaleangaviikadenadexetereit3l3p0rtargets-itargiving12" +
+       "000emmafanconagawakayamadridvagsoyericssonyoursidealerimo-i-rana" +
+       "amesjevuemielno-ip6xn--rros-granvindafjordxn--rskog-uuaxn--rst-0" +
+       "narutokyotangovtuscanyxn--rsta-francaiseharaxn--ryken-vuaxn--ryr" +
+       "vik-byaxn--s-1faithruherecreationxn--s9brj9compute-1xn--sandness" +
+       "jen-ogbizxn--sandy-yuaxn--seral-lraxn--ses554gxn--sgne-gratangen" +
+       "xn--skierv-utazaskoyabearalvahkihokumakogengerdalcestpetersburgx" +
+       "n--skjervy-v1axn--skjk-soaxn--sknit-yqaxn--sknland-fxaxn--slat-5" +
+       "narviikamisunagawaxn--slt-elabbvieeexn--smla-hraxn--smna-gratis-" +
+       "a-bulls-fanxn--snase-nraxn--sndre-land-0cbremangerxn--snes-poaxn" +
+       "--snsa-roaxn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-" +
+       "varanger-ggbeskidyn-o-saurlandes3-website-us-east-1xn--srfold-by" +
+       "axn--srreisa-q1axn--srum-grazxn--stfold-9xaxn--stjrdal-s1axn--st" +
+       "jrdalshalsen-sqbestbuyshouses3-website-us-west-1xn--stre-toten-z" +
+       "cbstreamsterdamnserverbaniaxn--t60b56axn--tckweatherchannelxn--t" +
+       "iq49xqyjewelryxn--tjme-hraxn--tn0agrinet-freakstudioxn--tnsberg-" +
+       "q1axn--tor131oxn--trany-yuaxn--trgstad-r1axn--trna-woaxn--troms-" +
+       "zuaxn--tysvr-vraxn--uc0atvaroyxn--uc0ay4axn--uist22hamurakamigor" +
+       "is-a-playerxn--uisz3gxn--unjrga-rtaobaokinawashirosatochiokinosh" +
+       "imalatvuopmiasakuchinotsuchiurakawakuyabukievenestudyndns-at-hom" +
+       "edepotenzamamicrolightingxn--unup4yxn--uuwu58axn--vads-jraxn--va" +
+       "rd-jraxn--vegrshei-c0axn--vermgensberater-ctbetainaboxfusejnyuri" +
+       "honjoyentgoryusuharaveroykenglandds3-external-1xn--vermgensberat" +
+       "ung-pwbieigersundnpalaceu-3utilitiesquare7xn--vestvgy-ixa6oxn--v" +
+       "g-yiabcgxn--vgan-qoaxn--vgsy-qoa0jewishartgalleryxn--vgu402compu" +
+       "terhistoryofscience-fictionxn--vhquvbargainstitutelevisionayorov" +
+       "nobninskarelianceu-2xn--vler-qoaxn--vre-eiker-k8axn--vrggt-xqadx" +
+       "n--vry-yla5gxn--vuq861bielawalmartjeldsundrangedalillyusuisserve" +
+       "exchangevents3-website-us-west-2xn--w4r85el8fhu5dnraxn--w4rs40lx" +
+       "n--wcvs22dxn--wgbh1comsecuritytacticsaseboknowsitallukowhoswhokk" +
+       "sundyndns-workisboringroundhandlingroznyxn--wgbl6axn--xhq521biel" +
+       "laakesvuemielecceverbankarlsoyuufcfanikinuyamashinashikitchenikk" +
+       "oebenhavnikolaevennodessagaeroclubmedecincinnationwidealstahauge" +
+       "sunderseaportsinfolldalabamagasakishimabarackmazerbaijan-mayendo" +
+       "ftheinternetflixilovecollegefantasyleaguernseyuzawavocatanzarowe" +
+       "ddingjesdalavangenaval-d-aosta-valleyolasitehimejibigawaskvolloa" +
+       "bathsbc66xn--xkc2al3hye2axn--xkc2dl3a5ee0hangglidingxn--y9a3aqua" +
+       "riumishimatsunoxn--yer-znarvikosherbrookegawaxn--yfro4i67oxn--yg" +
+       "arden-p1axn--ygbi2ammxn--3pxu8konsulatrobeepilepsydneyxn--ystre-" +
+       "slidre-ujbieszczadygeyachimataikikonaioirasebastopologyeonggieht" +
+       "avuoatnagaivuotnagaokakyotambabia-goracleaningatlantabuseekloges" +
+       "t-mon-blogueurovisionikonantankarmoyxn--zbx025dxn--zf0ao64axn--z" +
+       "f0avxn--42c2d9axn--zfr164bievatmallorcadaquesakurainvestmentsaky" +
+       "otanabellunorddalimanowarudavoues3-fips-us-gov-west-1xperiaxz"
+
+// nodes is the list of nodes. Each node is represented as a uint32, which
+// encodes the node's children, wildcard bit and node type (as an index into
+// the children array), ICANN bit and text.
+//
+// If the table was generated with the -comments flag, there is a //-comment
+// after each node's data. In it is the nodes-array indexes of the children,
+// formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The
+// nodeType is printed as + for normal, ! for exception, and o for parent-only
+// nodes that have children but don't match a domain label in their own right.
+// An I denotes an ICANN domain.
+//
+// The layout within the uint32, from MSB to LSB, is:
+//     [ 1 bits] unused
+//     [ 9 bits] children index
+//     [ 1 bits] ICANN bit
+//     [15 bits] text index
+//     [ 6 bits] text length
+var nodes = [...]uint32{
+       0x31a403,
+       0x284944,
+       0x2dd106,
+       0x3706c3,
+       0x3706c6,
+       0x398706,
+       0x3a8103,
+       0x2fe244,
+       0x38e987,
+       0x2dcd48,
+       0x1a05702,
+       0x316e87,
+       0x35c789,
+       0x2abb0a,
+       0x2abb0b,
+       0x22f383,
+       0x287506,
+       0x232dc5,
+       0x1e021c2,
+       0x2161c4,
+       0x238743,
+       0x26fc45,
+       0x2214902,
+       0x347743,
+       0x266f744,
+       0x33ddc5,
+       0x2a04702,
+       0x376b4e,
+       0x24c4c3,
+       0x38ae46,
+       0x2e00142,
+       0x2dd287,
+       0x236f46,
+       0x3209282,
+       0x229d83,
+       0x24d9c4,
+       0x325e86,
+       0x26c588,
+       0x2761c6,
+       0x2011c4,
+       0x3600242,
+       0x3335c9,
+       0x20a1c7,
+       0x351e86,
+       0x330c89,
+       0x298308,
+       0x26e904,
+       0x241ec6,
+       0x222a46,
+       0x3a022c2,
+       0x26480f,
+       0x20948e,
+       0x211d04,
+       0x2c2b85,
+       0x2fe145,
+       0x39e189,
+       0x23c409,
+       0x349a87,
+       0x20fa86,
+       0x275a83,
+       0x3e02a82,
+       0x315503,
+       0x34e24a,
+       0x20f903,
+       0x2af985,
+       0x284202,
+       0x284209,
+       0x4200ec2,
+       0x212484,
+       0x2b9686,
+       0x2f3645,
+       0x3552c4,
+       0x4a05644,
+       0x2030c3,
+       0x232344,
+       0x4e00c02,
+       0x268d44,
+       0x52ef6c4,
+       0x25ef4a,
+       0x5603dc2,
+       0x2ba587,
+       0x2f3b08,
+       0x6208142,
+       0x311687,
+       0x2bf204,
+       0x2bf207,
+       0x36e0c5,
+       0x34ffc7,
+       0x349846,
+       0x24f3c4,
+       0x38c105,
+       0x29e447,
+       0x72001c2,
+       0x26e503,
+       0x200b82,
+       0x200b83,
+       0x760de02,
+       0x2102c5,
+       0x7a02a42,
+       0x350e04,
+       0x2734c5,
+       0x211c47,
+       0x26bcce,
+       0x2b9184,
+       0x245544,
+       0x202f03,
+       0x281d49,
+       0x31ee0b,
+       0x2e9a88,
+       0x379948,
+       0x3a9908,
+       0x22ae48,
+       0x330aca,
+       0x34fec7,
+       0x318186,
+       0x7e87002,
+       0x35e203,
+       0x367e43,
+       0x36f4c4,
+       0x3a8143,
+       0x3250c3,
+       0x1720b82,
+       0x8202502,
+       0x27a8c5,
+       0x296206,
+       0x2d1b84,
+       0x375487,
+       0x2e1886,
+       0x331f84,
+       0x39d3c7,
+       0x203bc3,
+       0x86c54c2,
+       0x8b0f242,
+       0x8e16742,
+       0x216746,
+       0x9200002,
+       0x3523c5,
+       0x3220c3,
+       0x200604,
+       0x2e8f84,
+       0x2e8f85,
+       0x206b43,
+       0x978d2c3,
+       0x9a0bb42,
+       0x289e05,
+       0x289e0b,
+       0x31e686,
+       0x20cb4b,
+       0x221344,
+       0x20d949,
+       0x20e9c4,
+       0x9e0ec02,
+       0x20f143,
+       0x20f403,
+       0x16105c2,
+       0x268183,
+       0x2105ca,
+       0xa20b382,
+       0x216445,
+       0x29224a,
+       0x2d7744,
+       0x283783,
+       0x26cfc4,
+       0x212543,
+       0x212544,
+       0x212547,
+       0x2140c5,
+       0x2147c5,
+       0x214f46,
+       0x2157c6,
+       0x216a03,
+       0x21ae88,
+       0x210043,
+       0xa601c02,
+       0x243448,
+       0x213ccb,
+       0x220148,
+       0x220d86,
+       0x221847,
+       0x225348,
+       0xb642b42,
+       0xbabf3c2,
+       0x326788,
+       0x35e4c7,
+       0x246085,
+       0x357f48,
+       0x2bd408,
+       0x34dd83,
+       0x22a1c4,
+       0x36f502,
+       0xbe2bc82,
+       0xc238482,
+       0xca2e802,
+       0x22e803,
+       0xce01ec2,
+       0x2fe203,
+       0x2f1e84,
+       0x201ec3,
+       0x26e8c4,
+       0x201ecb,
+       0x213c03,
+       0x2de946,
+       0x239f84,
+       0x29034e,
+       0x371145,
+       0x38af48,
+       0x31ffc7,
+       0x31ffca,
+       0x229743,
+       0x22f147,
+       0x31efc5,
+       0x22f8c4,
+       0x265b06,
+       0x265b07,
+       0x2c11c4,
+       0x2f7a87,
+       0x313d44,
+       0x26c004,
+       0x26c006,
+       0x387184,
+       0x3510c6,
+       0x203f83,
+       0x35e288,
+       0x203f88,
+       0x245503,
+       0x268143,
+       0x399a04,
+       0x39e003,
+       0xd219f02,
+       0xd6d6a42,
+       0x20bac3,
+       0x207146,
+       0x241fc3,
+       0x377cc4,
+       0xdaee982,
+       0x3af843,
+       0x3507c3,
+       0x217a02,
+       0xde04142,
+       0x2c1946,
+       0x233ac7,
+       0x2e8945,
+       0x37de04,
+       0x28c505,
+       0x268907,
+       0x267805,
+       0x2b8649,
+       0x2cefc6,
+       0x2daa88,
+       0x2e8846,
+       0xe21a1c2,
+       0x32ca08,
+       0x2f1c46,
+       0x21a1c5,
+       0x2f6d87,
+       0x309984,
+       0x309985,
+       0x276384,
+       0x276388,
+       0xe60cc02,
+       0xea09882,
+       0x3103c6,
+       0x3b8988,
+       0x334385,
+       0x337306,
+       0x342f08,
+       0x344a88,
+       0xee09885,
+       0xf2142c4,
+       0x3b0787,
+       0xf60e5c2,
+       0xfa1b102,
+       0x10a099c2,
+       0x2b9785,
+       0x2a2645,
+       0x2fef86,
+       0x3b2547,
+       0x380747,
+       0x112a84c3,
+       0x2a84c7,
+       0x31eb08,
+       0x376ec9,
+       0x376d07,
+       0x384d07,
+       0x3a8ec8,
+       0x3ad4c6,
+       0x22f3c6,
+       0x23000c,
+       0x23120a,
+       0x231687,
+       0x232c8b,
+       0x233907,
+       0x23390e,
+       0x234cc4,
+       0x235ac4,
+       0x237a47,
+       0x3690c7,
+       0x23b206,
+       0x23b207,
+       0x23b4c7,
+       0x19604682,
+       0x23c886,
+       0x23c88a,
+       0x23ce8b,
+       0x23dbc7,
+       0x23ed45,
+       0x23f083,
+       0x240586,
+       0x240587,
+       0x38eb43,
+       0x19a0c442,
+       0x240f4a,
+       0x19f5d882,
+       0x1a2a5e02,
+       0x1a643142,
+       0x1aa2cd82,
+       0x244bc5,
+       0x245304,
+       0x1b205742,
+       0x268dc5,
+       0x23d483,
+       0x20eac5,
+       0x22ad44,
+       0x206804,
+       0x314046,
+       0x25e206,
+       0x28a003,
+       0x238284,
+       0x3a6803,
+       0x1b600dc2,
+       0x391c04,
+       0x391c06,
+       0x3b0d05,
+       0x205e06,
+       0x2f6e88,
+       0x266e84,
+       0x27ed08,
+       0x2426c5,
+       0x228308,
+       0x29ff86,
+       0x237587,
+       0x22e204,
+       0x22e206,
+       0x33f443,
+       0x383ec3,
+       0x223d08,
+       0x318dc4,
+       0x348747,
+       0x23e6c6,
+       0x2d6389,
+       0x250348,
+       0x26cd08,
+       0x26d084,
+       0x351443,
+       0x225e02,
+       0x1c60f882,
+       0x1ca10e82,
+       0x3a7403,
+       0x1ce04a42,
+       0x38eac4,
+       0x2862c6,
+       0x26e605,
+       0x21ba03,
+       0x232884,
+       0x2b14c7,
+       0x33da03,
+       0x231a88,
+       0x208545,
+       0x36e803,
+       0x273445,
+       0x273584,
+       0x2f6a86,
+       0x209ec4,
+       0x211346,
+       0x211b86,
+       0x3916c4,
+       0x213b43,
+       0x1d205882,
+       0x247345,
+       0x221c03,
+       0x1d61b0c2,
+       0x22ffc3,
+       0x209bc5,
+       0x232403,
+       0x232409,
+       0x1da05f02,
+       0x1e205e42,
+       0x2893c5,
+       0x218786,
+       0x2d1746,
+       0x2b0a88,
+       0x2b0a8b,
+       0x20718b,
+       0x2e8b45,
+       0x2db145,
+       0x2c6309,
+       0x1600302,
+       0x391888,
+       0x20dc44,
+       0x1ea007c2,
+       0x3a7883,
+       0x1f2c6086,
+       0x20ae88,
+       0x1f601402,
+       0x2344c8,
+       0x1fa2bb82,
+       0x3b92ca,
+       0x1feccc43,
+       0x3ac1c6,
+       0x3af408,
+       0x3ac008,
+       0x31d006,
+       0x36bc07,
+       0x264a07,
+       0x3349ca,
+       0x2d77c4,
+       0x3474c4,
+       0x35c1c9,
+       0x20794385,
+       0x209686,
+       0x20e1c3,
+       0x24a044,
+       0x20a02644,
+       0x202647,
+       0x212fc7,
+       0x22a584,
+       0x285445,
+       0x2ff048,
+       0x366747,
+       0x370f07,
+       0x20e18342,
+       0x327704,
+       0x292b48,
+       0x245bc4,
+       0x247784,
+       0x248085,
+       0x2481c7,
+       0x223589,
+       0x248fc4,
+       0x249709,
+       0x249948,
+       0x249dc4,
+       0x249dc7,
+       0x2124aa83,
+       0x24ad47,
+       0x1609d02,
+       0x16ad202,
+       0x24bec6,
+       0x24c507,
+       0x24cd44,
+       0x24e6c7,
+       0x24fa47,
+       0x24fdc3,
+       0x248902,
+       0x229642,
+       0x250a03,
+       0x250a04,
+       0x250a0b,
+       0x379a48,
+       0x256804,
+       0x2523c5,
+       0x254007,
+       0x2555c5,
+       0x2bc00a,
+       0x256743,
+       0x2160fc82,
+       0x226e84,
+       0x258d89,
+       0x25c343,
+       0x25c407,
+       0x24a849,
+       0x282688,
+       0x204743,
+       0x278fc7,
+       0x279709,
+       0x268ac3,
+       0x2810c4,
+       0x283c89,
+       0x2880c6,
+       0x289683,
+       0x200182,
+       0x21f983,
+       0x3a8a87,
+       0x21f985,
+       0x379746,
+       0x256e84,
+       0x302e85,
+       0x2e4403,
+       0x216c46,
+       0x20db42,
+       0x395144,
+       0x221402,
+       0x221403,
+       0x21a00782,
+       0x247303,
+       0x215c44,
+       0x215c47,
+       0x200906,
+       0x202602,
+       0x21e025c2,
+       0x2dca84,
+       0x22235e82,
+       0x22600b02,
+       0x2d4f84,
+       0x2d4f85,
+       0x2b6dc5,
+       0x390e06,
+       0x22a05d42,
+       0x205d45,
+       0x20cf05,
+       0x20ae03,
+       0x210986,
+       0x2126c5,
+       0x2166c2,
+       0x343605,
+       0x2166c4,
+       0x221ec3,
+       0x227343,
+       0x22e0c642,
+       0x2d4987,
+       0x3669c4,
+       0x3669c9,
+       0x249f44,
+       0x291d43,
+       0x2f6609,
+       0x367508,
+       0x232a24c4,
+       0x2a24c6,
+       0x21c303,
+       0x247bc3,
+       0x2e9dc3,
+       0x236eb382,
+       0x368cc2,
+       0x23a05e82,
+       0x323cc8,
+       0x32a388,
+       0x398e46,
+       0x2e27c5,
+       0x22efc5,
+       0x352ec7,
+       0x21d205,
+       0x228782,
+       0x23e38182,
+       0x1603002,
+       0x2416c8,
+       0x32c945,
+       0x2e3404,
+       0x2ebac5,
+       0x23f407,
+       0x3207c4,
+       0x240e42,
+       0x24200582,
+       0x338984,
+       0x212cc7,
+       0x28a2c7,
+       0x34ff84,
+       0x292203,
+       0x245444,
+       0x245448,
+       0x22f706,
+       0x26598a,
+       0x223444,
+       0x292588,
+       0x288504,
+       0x221946,
+       0x294684,
+       0x2b9a86,
+       0x366c89,
+       0x25da47,
+       0x3375c3,
+       0x24667e42,
+       0x267e43,
+       0x20ee02,
+       0x24a11ec2,
+       0x3085c6,
+       0x365c88,
+       0x2a4087,
+       0x3a3f49,
+       0x291c49,
+       0x2a5045,
+       0x2a6049,
+       0x2a6805,
+       0x2a6949,
+       0x2a8005,
+       0x2a9108,
+       0x21fb84,
+       0x24e890c7,
+       0x2a9303,
+       0x2a9307,
+       0x3850c6,
+       0x2a9b87,
+       0x2a1085,
+       0x2935c3,
+       0x2521ae02,
+       0x3b40c4,
+       0x2562ce82,
+       0x258203,
+       0x25a17f42,
+       0x36d586,
+       0x2f3a85,
+       0x2ac207,
+       0x26cc43,
+       0x325044,
+       0x20e903,
+       0x33e783,
+       0x25e02bc2,
+       0x266015c2,
+       0x398804,
+       0x2488c3,
+       0x243c85,
+       0x26a029c2,
+       0x27206482,
+       0x2b4506,
+       0x318f04,
+       0x2e3004,
+       0x2e300a,
+       0x27a01fc2,
+       0x37204a,
+       0x3756c8,
+       0x27fb1384,
+       0x20ad83,
+       0x201fc3,
+       0x3a9a49,
+       0x217649,
+       0x285246,
+       0x28244183,
+       0x3292c5,
+       0x30180d,
+       0x375886,
+       0x3bac8b,
+       0x28602e82,
+       0x22c1c8,
+       0x29206e82,
+       0x29606fc2,
+       0x2ae585,
+       0x29a03942,
+       0x258447,
+       0x21c907,
+       0x21e003,
+       0x2306c8,
+       0x29e06502,
+       0x312684,
+       0x212943,
+       0x351d45,
+       0x34db83,
+       0x2f3546,
+       0x205904,
+       0x268103,
+       0x2ae9c3,
+       0x2a205fc2,
+       0x2e8ac4,
+       0x35f6c5,
+       0x39f1c7,
+       0x275643,
+       0x2ad883,
+       0x2ae083,
+       0x160fec2,
+       0x2ae143,
+       0x2ae943,
+       0x2a605102,
+       0x282104,
+       0x25e406,
+       0x342643,
+       0x2aec43,
+       0x2aaafd42,
+       0x2afd48,
+       0x2b0004,
+       0x36c246,
+       0x2b0387,
+       0x249c46,
+       0x28e2c4,
+       0x38600682,
+       0x384f8b,
+       0x2fb08e,
+       0x21930f,
+       0x2985c3,
+       0x38ebbbc2,
+       0x1600f42,
+       0x39201582,
+       0x28f403,
+       0x2fdec3,
+       0x233706,
+       0x277c46,
+       0x3afd87,
+       0x3328c4,
+       0x396188c2,
+       0x39a08882,
+       0x348345,
+       0x2e6047,
+       0x3b5746,
+       0x39e27282,
+       0x227284,
+       0x2b3ac3,
+       0x3a20be02,
+       0x3a759ec3,
+       0x2b4c44,
+       0x2be409,
+       0x16c3ac2,
+       0x3aa03a82,
+       0x203a85,
+       0x3aec3d42,
+       0x3b203202,
+       0x346947,
+       0x239689,
+       0x35ca0b,
+       0x2647c5,
+       0x2c4849,
+       0x2e8246,
+       0x31e6c7,
+       0x3b608484,
+       0x3199c9,
+       0x373487,
+       0x20ab47,
+       0x20a383,
+       0x20a386,
+       0x3b68c7,
+       0x206a43,
+       0x2565c6,
+       0x3be02a02,
+       0x3c232682,
+       0x385803,
+       0x324c45,
+       0x350f47,
+       0x250086,
+       0x21f905,
+       0x277d44,
+       0x2c9fc5,
+       0x2f2684,
+       0x3c6040c2,
+       0x331107,
+       0x2dbd44,
+       0x217544,
+       0x21754d,
+       0x257509,
+       0x3a4448,
+       0x253944,
+       0x3abc45,
+       0x206447,
+       0x2144c4,
+       0x2e1947,
+       0x21c485,
+       0x3caa4604,
+       0x2d92c5,
+       0x25b004,
+       0x24bb86,
+       0x3b2345,
+       0x3ce250c2,
+       0x283844,
+       0x283845,
+       0x36fa46,
+       0x20c3c5,
+       0x30c304,
+       0x2c5dc3,
+       0x2053c6,
+       0x358505,
+       0x2bb485,
+       0x3b2444,
+       0x2234c3,
+       0x2234cc,
+       0x3d288a02,
+       0x3d6010c2,
+       0x3da00282,
+       0x206343,
+       0x206344,
+       0x3de04bc2,
+       0x2f9688,
+       0x379805,
+       0x235684,
+       0x23b086,
+       0x3e201f42,
+       0x3e609782,
+       0x3ea00e82,
+       0x306b85,
+       0x391586,
+       0x211084,
+       0x3263c6,
+       0x2ba346,
+       0x219943,
+       0x3ef0de0a,
+       0x247b05,
+       0x2c8e83,
+       0x223186,
+       0x300fc9,
+       0x223187,
+       0x297788,
+       0x2981c9,
+       0x224348,
+       0x229486,
+       0x20bf03,
+       0x3f2a8542,
+       0x385683,
+       0x385689,
+       0x332448,
+       0x3f649a02,
+       0x3fa02342,
+       0x227f83,
+       0x2da905,
+       0x251ec4,
+       0x2c0909,
+       0x22cb84,
+       0x266348,
+       0x202343,
+       0x202344,
+       0x278b03,
+       0x2187c8,
+       0x217487,
+       0x4020b102,
+       0x274082,
+       0x351905,
+       0x266689,
+       0x209703,
+       0x27b184,
+       0x329284,
+       0x2064c3,
+       0x27c3ca,
+       0x40752bc2,
+       0x40a83802,
+       0x2c5443,
+       0x3739c3,
+       0x1602302,
+       0x38ac03,
+       0x40e0f242,
+       0x4120ec42,
+       0x41610444,
+       0x210446,
+       0x383b06,
+       0x26ad44,
+       0x36c643,
+       0x38bcc3,
+       0x226883,
+       0x23d206,
+       0x2cb8c5,
+       0x2c5a07,
+       0x31e589,
+       0x2ca645,
+       0x2cb806,
+       0x2cbd88,
+       0x2cbf86,
+       0x236a04,
+       0x29944b,
+       0x2ceac3,
+       0x2ceac5,
+       0x2cec08,
+       0x228502,
+       0x346c42,
+       0x41a44c42,
+       0x41e0e602,
+       0x218903,
+       0x422675c2,
+       0x2675c3,
+       0x2cef04,
+       0x2cf5c3,
+       0x42a115c2,
+       0x42ed43c6,
+       0x2a7306,
+       0x43207902,
+       0x4360f442,
+       0x43a27382,
+       0x43e02c82,
+       0x4422dd02,
+       0x44602d02,
+       0x234703,
+       0x390685,
+       0x319606,
+       0x44a11cc4,
+       0x3b0b0a,
+       0x32fe86,
+       0x2e8d84,
+       0x281d03,
+       0x45604642,
+       0x200c82,
+       0x25fd03,
+       0x45a05503,
+       0x2c7b87,
+       0x3b2247,
+       0x47250b07,
+       0x312d87,
+       0x227b03,
+       0x227b0a,
+       0x236b84,
+       0x23e5c4,
+       0x23e5ca,
+       0x213f05,
+       0x47609642,
+       0x24e683,
+       0x47a008c2,
+       0x21c2c3,
+       0x267e03,
+       0x48203342,
+       0x2a8444,
+       0x21de84,
+       0x3b9505,
+       0x305005,
+       0x2e1ac6,
+       0x2e1e46,
+       0x48608442,
+       0x48a033c2,
+       0x3185c5,
+       0x2a7012,
+       0x2511c6,
+       0x220803,
+       0x30a746,
+       0x220805,
+       0x1610602,
+       0x50e120c2,
+       0x353e83,
+       0x2120c3,
+       0x2441c3,
+       0x512023c2,
+       0x376e43,
+       0x5160b482,
+       0x210483,
+       0x282148,
+       0x25e983,
+       0x25e986,
+       0x3a2987,
+       0x306806,
+       0x30680b,
+       0x2e8cc7,
+       0x3b3ec4,
+       0x51e04ec2,
+       0x379685,
+       0x522054c3,
+       0x2a6e03,
+       0x326c05,
+       0x329983,
+       0x52729986,
+       0x391a0a,
+       0x26a9c3,
+       0x204584,
+       0x3b88c6,
+       0x21a5c6,
+       0x52a00983,
+       0x324f07,
+       0x285147,
+       0x29b0c5,
+       0x2318c6,
+       0x224a83,
+       0x54a10bc3,
+       0x54e056c2,
+       0x328144,
+       0x22a2cc,
+       0x236149,
+       0x2414c7,
+       0x249245,
+       0x262a84,
+       0x273cc8,
+       0x278305,
+       0x55284a05,
+       0x28c609,
+       0x351f43,
+       0x2a5d84,
+       0x556013c2,
+       0x2013c3,
+       0x55a94142,
+       0x2a4386,
+       0x160f982,
+       0x55e06e02,
+       0x306a88,
+       0x2be603,
+       0x2d9207,
+       0x2e4d05,
+       0x2dd685,
+       0x32840b,
+       0x2dd686,
+       0x328606,
+       0x2ffac6,
+       0x262c84,
+       0x3042c6,
+       0x2e3508,
+       0x23a043,
+       0x250dc3,
+       0x250dc4,
+       0x2e4484,
+       0x2e4a07,
+       0x2e5ec5,
+       0x562e6002,
+       0x5660ba02,
+       0x20ba05,
+       0x2e83c4,
+       0x2e83cb,
+       0x2e8e88,
+       0x228f44,
+       0x2272c2,
+       0x56e28ec2,
+       0x23b903,
+       0x2e9344,
+       0x2e9605,
+       0x2ea047,
+       0x2eb604,
+       0x2e8b84,
+       0x57201302,
+       0x360cc9,
+       0x2ec405,
+       0x264a85,
+       0x2ecf85,
+       0x57601303,
+       0x2ee0c4,
+       0x2ee0cb,
+       0x2ee644,
+       0x2ef3cb,
+       0x2ef7c5,
+       0x21944a,
+       0x2f0048,
+       0x2f024a,
+       0x2f0ac3,
+       0x2f0aca,
+       0x57a01742,
+       0x57e2d4c2,
+       0x21aa03,
+       0x582f1bc2,
+       0x2f1bc3,
+       0x5875c402,
+       0x58b22842,
+       0x2f2504,
+       0x21afc6,
+       0x326105,
+       0x2f4503,
+       0x31a9c6,
+       0x204405,
+       0x25e704,
+       0x58e05ec2,
+       0x2c9244,
+       0x2c5f8a,
+       0x22d787,
+       0x2f38c6,
+       0x380b07,
+       0x22a403,
+       0x283e48,
+       0x37f48b,
+       0x3736c5,
+       0x333ec5,
+       0x333ec6,
+       0x390884,
+       0x3aa248,
+       0x222943,
+       0x222944,
+       0x222947,
+       0x38e446,
+       0x352686,
+       0x29018a,
+       0x246604,
+       0x24660a,
+       0x59282846,
+       0x282847,
+       0x252447,
+       0x270844,
+       0x270849,
+       0x25e0c5,
+       0x235e0b,
+       0x2e81c3,
+       0x211503,
+       0x22f003,
+       0x22fac4,
+       0x59600482,
+       0x25d4c6,
+       0x293345,
+       0x30a985,
+       0x24f6c6,
+       0x3395c4,
+       0x59a02782,
+       0x23f0c4,
+       0x59e01c42,
+       0x2b9f05,
+       0x21ad84,
+       0x21bec3,
+       0x5a612102,
+       0x212103,
+       0x23ba46,
+       0x5aa03082,
+       0x27f488,
+       0x223004,
+       0x223006,
+       0x374246,
+       0x2540c4,
+       0x205345,
+       0x2141c8,
+       0x216547,
+       0x219687,
+       0x21968f,
+       0x292a46,
+       0x22cf03,
+       0x22cf04,
+       0x310504,
+       0x20d003,
+       0x221a84,
+       0x240944,
+       0x5ae42b02,
+       0x289d43,
+       0x242b03,
+       0x5b209842,
+       0x229f83,
+       0x38eb83,
+       0x21484a,
+       0x358107,
+       0x2efc0c,
+       0x2efec6,
+       0x30a146,
+       0x248547,
+       0x5b64c687,
+       0x24f809,
+       0x243584,
+       0x24fbc4,
+       0x5ba18942,
+       0x5be027c2,
+       0x290546,
+       0x324d04,
+       0x2d6bc6,
+       0x2a5148,
+       0x3b8dc4,
+       0x258486,
+       0x2d1705,
+       0x265c88,
+       0x207383,
+       0x273705,
+       0x273e83,
+       0x264b83,
+       0x264b84,
+       0x2759c3,
+       0x5c2ec082,
+       0x5c602e02,
+       0x2e8089,
+       0x278205,
+       0x278404,
+       0x27a9c5,
+       0x20dd44,
+       0x2e0d07,
+       0x343bc5,
+       0x250cc4,
+       0x250cc8,
+       0x2d5086,
+       0x2d7984,
+       0x2d8e88,
+       0x2dbb87,
+       0x5ca03902,
+       0x2e36c4,
+       0x20d0c4,
+       0x20ad47,
+       0x5ce2b804,
+       0x2ccf42,
+       0x5d201102,
+       0x201543,
+       0x203984,
+       0x2aa283,
+       0x374e05,
+       0x5d61e182,
+       0x2eb285,
+       0x202c42,
+       0x34d5c5,
+       0x365e45,
+       0x5da00c42,
+       0x350744,
+       0x5de00d02,
+       0x2387c6,
+       0x29a146,
+       0x2667c8,
+       0x2bfa08,
+       0x36d504,
+       0x36d6c5,
+       0x3610c9,
+       0x2db1c4,
+       0x3919c4,
+       0x205183,
+       0x5e222705,
+       0x2c3b87,
+       0x2a2744,
+       0x341e8d,
+       0x361782,
+       0x361783,
+       0x364503,
+       0x5e600802,
+       0x388305,
+       0x25f9c7,
+       0x205b44,
+       0x312e47,
+       0x2983c9,
+       0x2c60c9,
+       0x2519c7,
+       0x273b03,
+       0x273b08,
+       0x2ed249,
+       0x24e187,
+       0x373605,
+       0x39e086,
+       0x39fb86,
+       0x3a3c05,
+       0x257605,
+       0x5ea02d82,
+       0x36ce45,
+       0x2b2908,
+       0x2c1706,
+       0x5eeb7487,
+       0x2efa04,
+       0x2aa987,
+       0x2f62c6,
+       0x5f230982,
+       0x36f746,
+       0x2f83ca,
+       0x2f8e85,
+       0x5f6de402,
+       0x5fa36542,
+       0x3b6c06,
+       0x2a1e88,
+       0x5fe8a487,
+       0x60234e42,
+       0x2255c3,
+       0x311d86,
+       0x225044,
+       0x3a2846,
+       0x390b06,
+       0x26ff0a,
+       0x331c05,
+       0x367ec6,
+       0x3759c3,
+       0x3759c4,
+       0x207102,
+       0x309943,
+       0x60606382,
+       0x2f0f83,
+       0x3722c4,
+       0x2a1fc4,
+       0x2a1fca,
+       0x229543,
+       0x276288,
+       0x22954a,
+       0x27b447,
+       0x2fcd86,
+       0x238684,
+       0x290bc2,
+       0x2a2e82,
+       0x60a04002,
+       0x245403,
+       0x252207,
+       0x31ac87,
+       0x2848c4,
+       0x26f8c7,
+       0x2ea146,
+       0x216847,
+       0x35e604,
+       0x242a05,
+       0x2b7985,
+       0x60e0fe82,
+       0x20fe86,
+       0x218283,
+       0x220502,
+       0x220506,
+       0x61203e02,
+       0x6160b0c2,
+       0x3ba785,
+       0x61a21c82,
+       0x61e03b42,
+       0x33b5c5,
+       0x393105,
+       0x367f85,
+       0x267303,
+       0x286385,
+       0x2dd747,
+       0x307bc5,
+       0x306185,
+       0x38b044,
+       0x3204c6,
+       0x23e804,
+       0x62201442,
+       0x62f630c5,
+       0x2ebe07,
+       0x2d6dc8,
+       0x25fe86,
+       0x25fe8d,
+       0x260709,
+       0x260712,
+       0x32f345,
+       0x3339c3,
+       0x6320a9c2,
+       0x309444,
+       0x375903,
+       0x360fc5,
+       0x2fa085,
+       0x63612982,
+       0x36e843,
+       0x63a50b82,
+       0x642bf542,
+       0x6460fb42,
+       0x353805,
+       0x37ac43,
+       0x37a4c8,
+       0x64a07842,
+       0x64e000c2,
+       0x2a8406,
+       0x33b80a,
+       0x21bf03,
+       0x20c343,
+       0x2ee3c3,
+       0x65a02dc2,
+       0x73e35482,
+       0x74601c82,
+       0x201682,
+       0x36f549,
+       0x2c2f04,
+       0x2309c8,
+       0x74af4542,
+       0x74e08602,
+       0x2ef605,
+       0x2330c8,
+       0x282288,
+       0x2f858c,
+       0x22d543,
+       0x25a9c2,
+       0x75201f82,
+       0x2caac6,
+       0x2fdc05,
+       0x26d343,
+       0x23cc46,
+       0x2fdd46,
+       0x201f83,
+       0x2ff883,
+       0x300786,
+       0x3013c4,
+       0x295586,
+       0x2cec85,
+       0x30164a,
+       0x2eebc4,
+       0x302304,
+       0x30370a,
+       0x7566b082,
+       0x337745,
+       0x30478a,
+       0x305285,
+       0x305b44,
+       0x305c46,
+       0x305dc4,
+       0x218dc6,
+       0x75a6dac2,
+       0x2f3206,
+       0x2f3dc5,
+       0x3ab6c7,
+       0x200206,
+       0x248744,
+       0x2d5e07,
+       0x30dd46,
+       0x2b8a45,
+       0x381947,
+       0x39eb47,
+       0x39eb4e,
+       0x25ed06,
+       0x2e1805,
+       0x27dec7,
+       0x282b43,
+       0x3b2f87,
+       0x20f5c5,
+       0x212144,
+       0x212f82,
+       0x3addc7,
+       0x332944,
+       0x377404,
+       0x273f0b,
+       0x21d5c3,
+       0x2b6987,
+       0x21d5c4,
+       0x2cc0c7,
+       0x228bc3,
+       0x33678d,
+       0x388b48,
+       0x21d044,
+       0x250bc5,
+       0x307d05,
+       0x308143,
+       0x75e22f02,
+       0x309903,
+       0x309fc3,
+       0x210004,
+       0x279805,
+       0x218307,
+       0x375a46,
+       0x372003,
+       0x23ab4b,
+       0x26ba4b,
+       0x2a654b,
+       0x2de44a,
+       0x30254b,
+       0x31be8b,
+       0x356b8c,
+       0x378d11,
+       0x3b654a,
+       0x3ba10b,
+       0x30ad8b,
+       0x30b34a,
+       0x30b88a,
+       0x30cb4e,
+       0x30d18b,
+       0x30d44a,
+       0x30ef11,
+       0x30f34a,
+       0x30f84b,
+       0x30fd8e,
+       0x31078c,
+       0x310c4b,
+       0x310f0e,
+       0x31128c,
+       0x31474a,
+       0x31698c,
+       0x76316c8a,
+       0x317489,
+       0x31af4a,
+       0x31b1ca,
+       0x31b44b,
+       0x31f60e,
+       0x31f991,
+       0x328b89,
+       0x328dca,
+       0x3295cb,
+       0x32a84a,
+       0x32b316,
+       0x32e14b,
+       0x32f10a,
+       0x32f50a,
+       0x33084b,
+       0x333449,
+       0x337109,
+       0x337d4d,
+       0x33870b,
+       0x33978b,
+       0x33a14b,
+       0x33a609,
+       0x33ac4e,
+       0x33b30a,
+       0x33fc8a,
+       0x33ffca,
+       0x340b8b,
+       0x3413cb,
+       0x34168d,
+       0x342c0d,
+       0x343290,
+       0x34374b,
+       0x34408c,
+       0x34480b,
+       0x34644b,
+       0x34798b,
+       0x34c00b,
+       0x34ca8f,
+       0x34ce4b,
+       0x34d94a,
+       0x34e689,
+       0x34f409,
+       0x34f8cb,
+       0x34fb8e,
+       0x35434b,
+       0x35574f,
+       0x35864b,
+       0x35890b,
+       0x358bcb,
+       0x3590ca,
+       0x35c609,
+       0x35f34f,
+       0x36424c,
+       0x36488c,
+       0x364d0e,
+       0x3653cf,
+       0x36578e,
+       0x365fd0,
+       0x3663cf,
+       0x366f4e,
+       0x36770c,
+       0x367a12,
+       0x3689d1,
+       0x36988e,
+       0x36a04e,
+       0x36a58e,
+       0x36a90f,
+       0x36acce,
+       0x36b053,
+       0x36b511,
+       0x36b94e,
+       0x36bdcc,
+       0x36d913,
+       0x36e210,
+       0x36ea8c,
+       0x36ed8c,
+       0x36f24b,
+       0x3703ce,
+       0x370c8b,
+       0x3715cb,
+       0x37258c,
+       0x37814a,
+       0x37850c,
+       0x37880c,
+       0x378b09,
+       0x37bb8b,
+       0x37be48,
+       0x37c049,
+       0x37c04f,
+       0x37d98b,
+       0x7677eb8a,
+       0x381fcc,
+       0x383189,
+       0x383608,
+       0x38380b,
+       0x383c8b,
+       0x38480a,
+       0x384a8b,
+       0x38540c,
+       0x386008,
+       0x388d4b,
+       0x38b44b,
+       0x39484b,
+       0x3958cb,
+       0x39e6cb,
+       0x39e989,
+       0x39eecd,
+       0x3a464a,
+       0x3a5597,
+       0x3a6bd8,
+       0x3a96c9,
+       0x3ab30b,
+       0x3ac814,
+       0x3acd0b,
+       0x3ad28a,
+       0x3aea0a,
+       0x3aec8b,
+       0x3b4250,
+       0x3b4651,
+       0x3b4d0a,
+       0x3b5b4d,
+       0x3b624d,
+       0x3ba3cb,
+       0x3bbd46,
+       0x20ff83,
+       0x76b80483,
+       0x22cdc6,
+       0x247645,
+       0x27a007,
+       0x31bd46,
+       0x1656682,
+       0x2ad9c9,
+       0x31a7c4,
+       0x2dacc8,
+       0x232b43,
+       0x309387,
+       0x234f42,
+       0x2ac243,
+       0x76e07b02,
+       0x2c7406,
+       0x2c9884,
+       0x369f44,
+       0x390143,
+       0x390145,
+       0x776c3d82,
+       0x77aa6cc4,
+       0x270787,
+       0x77e4a282,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x204e83,
+       0x205702,
+       0x16d208,
+       0x2099c2,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x214843,
+       0x324556,
+       0x325793,
+       0x26f749,
+       0x3b0688,
+       0x379509,
+       0x304906,
+       0x3389d0,
+       0x254b53,
+       0x38e508,
+       0x28ea47,
+       0x36c747,
+       0x284d0a,
+       0x372349,
+       0x38d849,
+       0x28decb,
+       0x349846,
+       0x379b4a,
+       0x220d86,
+       0x31a3c3,
+       0x2d48c5,
+       0x35e288,
+       0x23888d,
+       0x2b984c,
+       0x2de0c7,
+       0x30b00d,
+       0x2142c4,
+       0x22fd8a,
+       0x230d4a,
+       0x23120a,
+       0x2099c7,
+       0x23af07,
+       0x23d844,
+       0x22e206,
+       0x20c144,
+       0x2b4148,
+       0x22cbc9,
+       0x2b0a86,
+       0x2b0a88,
+       0x2422cd,
+       0x2c6309,
+       0x3ac008,
+       0x264a07,
+       0x2f1f0a,
+       0x24c506,
+       0x2580c7,
+       0x2cc3c4,
+       0x23f287,
+       0x309c0a,
+       0x3ae54e,
+       0x21d205,
+       0x3b4a4b,
+       0x331a09,
+       0x217649,
+       0x21c747,
+       0x2a34ca,
+       0x20ac87,
+       0x2fb1c9,
+       0x38f0c8,
+       0x3533cb,
+       0x2da905,
+       0x3a430a,
+       0x266e09,
+       0x26d2ca,
+       0x2ca6cb,
+       0x23f18b,
+       0x28dc55,
+       0x2e3b85,
+       0x264a85,
+       0x2ee0ca,
+       0x3945ca,
+       0x331787,
+       0x21da83,
+       0x2904c8,
+       0x2d2c4a,
+       0x223006,
+       0x24dfc9,
+       0x265c88,
+       0x2d7984,
+       0x2aa289,
+       0x2bfa08,
+       0x29fec7,
+       0x3630c6,
+       0x2ebe07,
+       0x289a47,
+       0x23d005,
+       0x21d04c,
+       0x250bc5,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2099c2,
+       0x2a84c3,
+       0x205503,
+       0x204e83,
+       0x200983,
+       0x2a84c3,
+       0x205503,
+       0x25e983,
+       0x200983,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x16d208,
+       0x2099c2,
+       0x2006c2,
+       0x231442,
+       0x206502,
+       0x200542,
+       0x2decc2,
+       0x46a84c3,
+       0x232403,
+       0x2163c3,
+       0x2e9dc3,
+       0x244183,
+       0x209703,
+       0x2d47c6,
+       0x205503,
+       0x200983,
+       0x233183,
+       0x16d208,
+       0x31ae44,
+       0x202107,
+       0x392403,
+       0x2ae584,
+       0x22e043,
+       0x21c7c3,
+       0x2e9dc3,
+       0x16fc07,
+       0x205702,
+       0x18d2c3,
+       0x5a099c2,
+       0x88f4d,
+       0x8928d,
+       0x231442,
+       0x1b1384,
+       0x200442,
+       0x5fb1288,
+       0xed844,
+       0x16d208,
+       0x1411d82,
+       0x15054c6,
+       0x231783,
+       0x200c03,
+       0x66a84c3,
+       0x22fd84,
+       0x6a32403,
+       0x6ee9dc3,
+       0x202bc2,
+       0x3b1384,
+       0x205503,
+       0x2f78c3,
+       0x203ec2,
+       0x200983,
+       0x21b5c2,
+       0x2f2443,
+       0x203082,
+       0x211643,
+       0x265d43,
+       0x200202,
+       0x16d208,
+       0x231783,
+       0x2f78c3,
+       0x203ec2,
+       0x2f2443,
+       0x203082,
+       0x211643,
+       0x265d43,
+       0x200202,
+       0x2f2443,
+       0x203082,
+       0x211643,
+       0x265d43,
+       0x200202,
+       0x2a84c3,
+       0x38d2c3,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x3b1384,
+       0x244183,
+       0x209703,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x20f942,
+       0x201303,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x38d2c3,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x3b1384,
+       0x205503,
+       0x200983,
+       0x373605,
+       0x212982,
+       0x205702,
+       0x16d208,
+       0x1456108,
+       0x2e9dc3,
+       0x2274c1,
+       0x202901,
+       0x202941,
+       0x23ad81,
+       0x23ad01,
+       0x30aec1,
+       0x23aec1,
+       0x2275c1,
+       0x2eea41,
+       0x30afc1,
+       0x200141,
+       0x200001,
+       0x129845,
+       0x16d208,
+       0x201ec1,
+       0x200701,
+       0x200301,
+       0x200081,
+       0x200181,
+       0x200401,
+       0x200041,
+       0x201181,
+       0x200101,
+       0x200281,
+       0x200e81,
+       0x2008c1,
+       0x200441,
+       0x201301,
+       0x206ec1,
+       0x200341,
+       0x200801,
+       0x2002c1,
+       0x2000c1,
+       0x201501,
+       0x200201,
+       0x200bc1,
+       0x2005c1,
+       0x201cc1,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x200442,
+       0x200983,
+       0x16fc07,
+       0x9807,
+       0x1cdc6,
+       0x13ef8a,
+       0x88648,
+       0x51d48,
+       0x52107,
+       0x191106,
+       0xd8c05,
+       0x192345,
+       0x5d306,
+       0x125c86,
+       0x25ef44,
+       0x311547,
+       0x16d208,
+       0x2d5f04,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2163c3,
+       0x2e9dc3,
+       0x244183,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x212982,
+       0x2c5983,
+       0x2bb143,
+       0x32c243,
+       0x2022c2,
+       0x25d183,
+       0x2030c3,
+       0x204903,
+       0x200001,
+       0x2dc745,
+       0x206b43,
+       0x221344,
+       0x26cc83,
+       0x318ec3,
+       0x21b103,
+       0x35ff43,
+       0xaaa84c3,
+       0x235ac4,
+       0x23dbc3,
+       0x21cc43,
+       0x21b0c3,
+       0x22ffc3,
+       0x232403,
+       0x232143,
+       0x2459c3,
+       0x2a2703,
+       0x318e43,
+       0x2344c3,
+       0x202643,
+       0x24ce44,
+       0x24e347,
+       0x248902,
+       0x250943,
+       0x256303,
+       0x273ac3,
+       0x390f43,
+       0x2025c3,
+       0xaee9dc3,
+       0x20bec3,
+       0x2143c3,
+       0x24a5c3,
+       0x328085,
+       0x209d43,
+       0x2fa383,
+       0xb21f903,
+       0x365f03,
+       0x20d543,
+       0x227f83,
+       0x209703,
+       0x228502,
+       0x27d2c3,
+       0x205503,
+       0x1604e83,
+       0x224a43,
+       0x209a43,
+       0x204a03,
+       0x200983,
+       0x35fe83,
+       0x20f943,
+       0x201303,
+       0x2efe83,
+       0x2ff903,
+       0x2f2603,
+       0x204405,
+       0x23e743,
+       0x285346,
+       0x2f2643,
+       0x36cf43,
+       0x3759c4,
+       0x2d9083,
+       0x2284c3,
+       0x267ec3,
+       0x233183,
+       0x212982,
+       0x22d543,
+       0x3024c3,
+       0x304144,
+       0x377404,
+       0x20ce83,
+       0x16d208,
+       0x205702,
+       0x200242,
+       0x2022c2,
+       0x201702,
+       0x202a42,
+       0x206c02,
+       0x245482,
+       0x2007c2,
+       0x20d882,
+       0x200e82,
+       0x20b102,
+       0x20e602,
+       0x2675c2,
+       0x2056c2,
+       0x2decc2,
+       0x2013c2,
+       0x2069c2,
+       0x201302,
+       0x2172c2,
+       0x202482,
+       0x200482,
+       0x219382,
+       0x202782,
+       0x209842,
+       0x2027c2,
+       0x222702,
+       0x203b42,
+       0x5702,
+       0x242,
+       0x22c2,
+       0x1702,
+       0x2a42,
+       0x6c02,
+       0x45482,
+       0x7c2,
+       0xd882,
+       0xe82,
+       0xb102,
+       0xe602,
+       0x675c2,
+       0x56c2,
+       0xdecc2,
+       0x13c2,
+       0x69c2,
+       0x1302,
+       0x172c2,
+       0x2482,
+       0x482,
+       0x19382,
+       0x2782,
+       0x9842,
+       0x27c2,
+       0x22702,
+       0x3b42,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2099c2,
+       0x200983,
+       0xc6a84c3,
+       0x2e9dc3,
+       0x209703,
+       0x21a2c2,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x7b02,
+       0x201bc2,
+       0x153f3c5,
+       0x25ed82,
+       0x16d208,
+       0x99c2,
+       0x20c182,
+       0x208d02,
+       0x2024c2,
+       0x209642,
+       0x208442,
+       0x192345,
+       0x2038c2,
+       0x203ec2,
+       0x2023c2,
+       0x204dc2,
+       0x2013c2,
+       0x385502,
+       0x201102,
+       0x236582,
+       0x16fc07,
+       0x1b270d,
+       0xd8c89,
+       0x56e8b,
+       0xdd608,
+       0x53dc9,
+       0xfacc6,
+       0x2e9dc3,
+       0x16d208,
+       0x16d208,
+       0x52e06,
+       0x1a78c7,
+       0x205702,
+       0x25ef44,
+       0x2099c2,
+       0x2a84c3,
+       0x2006c2,
+       0x232403,
+       0x20d882,
+       0x2d5f04,
+       0x244183,
+       0x249a02,
+       0x205503,
+       0x200442,
+       0x200983,
+       0x264a86,
+       0x31ba0f,
+       0x70a403,
+       0x16d208,
+       0x2099c2,
+       0x2163c3,
+       0x2e9dc3,
+       0x209703,
+       0x1526f4b,
+       0xd9888,
+       0x142b68a,
+       0x14fa807,
+       0xda405,
+       0x16fc07,
+       0x2099c2,
+       0x2a84c3,
+       0x2e9dc3,
+       0x205503,
+       0x205702,
+       0x20c202,
+       0x20bb42,
+       0xfea84c3,
+       0x23c042,
+       0x232403,
+       0x209d02,
+       0x221402,
+       0x2e9dc3,
+       0x228782,
+       0x251442,
+       0x2a6c82,
+       0x200f82,
+       0x28d742,
+       0x203442,
+       0x202e42,
+       0x267e42,
+       0x24ecc2,
+       0x211ec2,
+       0x2ad882,
+       0x2eab02,
+       0x2182c2,
+       0x2ad342,
+       0x209703,
+       0x20ec42,
+       0x205503,
+       0x200e42,
+       0x281702,
+       0x200983,
+       0x25d202,
+       0x209842,
+       0x218942,
+       0x202e02,
+       0x200c42,
+       0x2de402,
+       0x20fe82,
+       0x250b82,
+       0x220642,
+       0x30d44a,
+       0x34d94a,
+       0x37fc4a,
+       0x3bbec2,
+       0x202cc2,
+       0x2058c2,
+       0x1026e389,
+       0x1072510a,
+       0x1594ac7,
+       0x1410843,
+       0x24d50,
+       0x50642,
+       0x2030c4,
+       0x10ea84c3,
+       0x232403,
+       0x249944,
+       0x2e9dc3,
+       0x3b1384,
+       0x244183,
+       0x209703,
+       0x205503,
+       0xdc105,
+       0x204e83,
+       0x200983,
+       0x23e743,
+       0x25ed03,
+       0x16d208,
+       0x1591084,
+       0x18ff45,
+       0x1a768a,
+       0x116902,
+       0x18ae46,
+       0xaf551,
+       0x1166e389,
+       0x18ffc8,
+       0x13f9c8,
+       0xff387,
+       0xec2,
+       0x12984b,
+       0x1a5b0a,
+       0x21347,
+       0x16d208,
+       0x108f08,
+       0xe4c7,
+       0x17818f4b,
+       0x1b887,
+       0x1c02,
+       0x6c707,
+       0x1a1ca,
+       0x13f6cf,
+       0x988f,
+       0x1b102,
+       0x99c2,
+       0xa2648,
+       0x19e30a,
+       0x1320c8,
+       0xdc2,
+       0x13f44f,
+       0x9e18b,
+       0x68bc8,
+       0x38f47,
+       0x388a,
+       0x304cb,
+       0x4efc9,
+       0x11dd07,
+       0xfc34c,
+       0x2c07,
+       0x19b40a,
+       0xd4ac8,
+       0x1a3cce,
+       0x1cdce,
+       0x2118b,
+       0x26ccb,
+       0x27d4b,
+       0x2c009,
+       0x2da0b,
+       0x5e7cd,
+       0x85acb,
+       0xdfc8d,
+       0xe000d,
+       0xe164a,
+       0x17724b,
+       0x1ae0cb,
+       0x31c45,
+       0x1424d50,
+       0x12618f,
+       0x1268cf,
+       0xe2c0d,
+       0x1b8f90,
+       0x2bb82,
+       0x17fb0388,
+       0x9688,
+       0x182ee705,
+       0x48fcb,
+       0x117090,
+       0x4fdc8,
+       0x26e8a,
+       0x56b49,
+       0x5cb47,
+       0x5ce87,
+       0x5d047,
+       0x5f507,
+       0x60587,
+       0x60b87,
+       0x61387,
+       0x617c7,
+       0x61cc7,
+       0x61fc7,
+       0x62fc7,
+       0x63187,
+       0x63347,
+       0x63507,
+       0x63807,
+       0x64007,
+       0x64c87,
+       0x65407,
+       0x66547,
+       0x66b07,
+       0x66cc7,
+       0x67047,
+       0x67487,
+       0x67687,
+       0x67947,
+       0x67b07,
+       0x67cc7,
+       0x67f87,
+       0x68247,
+       0x68f07,
+       0x69607,
+       0x698c7,
+       0x6a047,
+       0x6a207,
+       0x6a607,
+       0x6aec7,
+       0x6b147,
+       0x6b547,
+       0x6b707,
+       0x6b8c7,
+       0x70587,
+       0x71387,
+       0x718c7,
+       0x71e47,
+       0x72007,
+       0x72387,
+       0x728c7,
+       0xdb42,
+       0xbbb0a,
+       0xffb87,
+       0x184cfa0b,
+       0x14cfa16,
+       0x17e91,
+       0x1082ca,
+       0xa24ca,
+       0x52e06,
+       0xd0f8b,
+       0x5e82,
+       0x2f711,
+       0x157789,
+       0x942c9,
+       0x67e42,
+       0x9f54a,
+       0xa4909,
+       0xa504f,
+       0xa5a8e,
+       0xa6388,
+       0x17f42,
+       0x18ef09,
+       0x17f08e,
+       0xf80cc,
+       0xdf20f,
+       0x198f4e,
+       0xc84c,
+       0x11809,
+       0x13491,
+       0x222c8,
+       0x24512,
+       0x281cd,
+       0x2e0cd,
+       0x8618b,
+       0xbadd5,
+       0xbb9c9,
+       0xe268a,
+       0x120689,
+       0x160310,
+       0x39a0b,
+       0x4480f,
+       0x5648b,
+       0x58a8c,
+       0x70f90,
+       0x7beca,
+       0x7d18d,
+       0x80d4e,
+       0x86cca,
+       0x8720c,
+       0x89714,
+       0x157411,
+       0x1a200b,
+       0x9004f,
+       0x9320d,
+       0x9a00e,
+       0x9fd8c,
+       0xa1acc,
+       0xaae8b,
+       0xab18e,
+       0xab990,
+       0x154c0b,
+       0x1160cd,
+       0x10e80f,
+       0x17e50c,
+       0xb090e,
+       0xb2391,
+       0xb3ecc,
+       0xc00c7,
+       0xc064d,
+       0xc0fcc,
+       0xc1dd0,
+       0x102c8d,
+       0x12bc87,
+       0xc7750,
+       0xd3748,
+       0xd51cb,
+       0x12aa8f,
+       0x17e248,
+       0x1084cd,
+       0x14d550,
+       0x18ba60c6,
+       0xaff43,
+       0xbe02,
+       0x11e309,
+       0x5394a,
+       0x104186,
+       0x18cd9009,
+       0x11d43,
+       0xd6191,
+       0xd65c9,
+       0xd7607,
+       0xaf6cb,
+       0xde6d0,
+       0xdeb8c,
+       0xdf6c5,
+       0x18f248,
+       0x19f94a,
+       0x111947,
+       0x33c2,
+       0x124a4a,
+       0x127549,
+       0x35b4a,
+       0x8a3cf,
+       0x3edcb,
+       0x12814c,
+       0x169b92,
+       0xaea45,
+       0x166aca,
+       0x192ece45,
+       0x18020c,
+       0x122843,
+       0x185502,
+       0xf2bca,
+       0x14f3fcc,
+       0x1b1a48,
+       0xdfe48,
+       0x16fb87,
+       0x1c42,
+       0x3082,
+       0x3f590,
+       0x27c2,
+       0x1ad58f,
+       0x5d306,
+       0x77ece,
+       0xe598b,
+       0x86ec8,
+       0xd1a49,
+       0x17d152,
+       0x1abecd,
+       0x55b08,
+       0x56d49,
+       0x572cd,
+       0x57b89,
+       0x5c58b,
+       0x5d848,
+       0x61ac8,
+       0x628c8,
+       0x62b49,
+       0x62d4a,
+       0x6398c,
+       0xe3cca,
+       0xff947,
+       0x2270d,
+       0xf4b4b,
+       0x11a5cc,
+       0x18b050,
+       0xc2,
+       0x7a14d,
+       0x2dc2,
+       0x35482,
+       0xff88a,
+       0x1081ca,
+       0x10928b,
+       0x1ae28c,
+       0x108c8e,
+       0x100cd,
+       0x1b3908,
+       0x7b02,
+       0x11b5ec4e,
+       0x1227020e,
+       0x12a83a0a,
+       0x1336864e,
+       0x13b143ce,
+       0x1432ee0c,
+       0x1594ac7,
+       0x1594ac9,
+       0x1410843,
+       0x14b3054c,
+       0x15333209,
+       0x15b49dc9,
+       0x50642,
+       0x18fb51,
+       0x70151,
+       0x8394d,
+       0x17acd1,
+       0x114311,
+       0x12ed4f,
+       0x13048f,
+       0x13314c,
+       0x149d0c,
+       0x1a688d,
+       0x1bb815,
+       0x5064c,
+       0x11f0cc,
+       0xe9c50,
+       0x11d44c,
+       0x12a54c,
+       0x15e999,
+       0x168399,
+       0x16fd99,
+       0x175d54,
+       0x181ad4,
+       0x19b7d4,
+       0x19d714,
+       0x1ac314,
+       0x16250709,
+       0x1699ba89,
+       0x1731f189,
+       0x11e224c9,
+       0x50642,
+       0x126224c9,
+       0x50642,
+       0x15e98a,
+       0x50642,
+       0x12e224c9,
+       0x50642,
+       0x15e98a,
+       0x50642,
+       0x136224c9,
+       0x50642,
+       0x13e224c9,
+       0x50642,
+       0x146224c9,
+       0x50642,
+       0x15e98a,
+       0x50642,
+       0x14e224c9,
+       0x50642,
+       0x15e98a,
+       0x50642,
+       0x156224c9,
+       0x50642,
+       0x15e224c9,
+       0x50642,
+       0x15e98a,
+       0x50642,
+       0x166224c9,
+       0x50642,
+       0x16e224c9,
+       0x50642,
+       0x176224c9,
+       0x50642,
+       0x15e98a,
+       0x50642,
+       0xaf545,
+       0x1a5b04,
+       0x2bb84,
+       0x1aa404,
+       0x1a75c4,
+       0xc484,
+       0x13fc4,
+       0x58f44,
+       0xff384,
+       0x14ab3c3,
+       0x143e603,
+       0xfb244,
+       0x1547c03,
+       0x2bb82,
+       0x100c3,
+       0x205702,
+       0x2099c2,
+       0x2006c2,
+       0x218342,
+       0x20d882,
+       0x200442,
+       0x203082,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x24a5c3,
+       0x205503,
+       0x200983,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x205503,
+       0x200983,
+       0x3fc3,
+       0x2e9dc3,
+       0x205702,
+       0x38d2c3,
+       0x1aea84c3,
+       0x3b8e47,
+       0x2e9dc3,
+       0x206343,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x255cca,
+       0x264a85,
+       0x201303,
+       0x20b0c2,
+       0x16d208,
+       0x16d208,
+       0x99c2,
+       0x11fd02,
+       0x6c845,
+       0x129845,
+       0x16d208,
+       0x1b887,
+       0xa84c3,
+       0x1ba38e47,
+       0x13ee06,
+       0x1bd49c05,
+       0x11de07,
+       0x66ca,
+       0x3748,
+       0x65c7,
+       0x56948,
+       0x28d87,
+       0x2c6cf,
+       0x30b87,
+       0x3b806,
+       0x117090,
+       0x12330f,
+       0x104204,
+       0x1c11dece,
+       0xa8b4c,
+       0x4f14a,
+       0x9a2c7,
+       0x112b8a,
+       0x18f409,
+       0xbf34a,
+       0x5414a,
+       0x104186,
+       0x9a38a,
+       0x8350a,
+       0xe47c9,
+       0xd5a48,
+       0xd5d46,
+       0xd9a8d,
+       0xb3c45,
+       0x1a78c7,
+       0x5d6c7,
+       0xd9394,
+       0xf938b,
+       0x68a0a,
+       0xa2d0d,
+       0x1cdc3,
+       0x1cdc3,
+       0x1cdc6,
+       0x1cdc3,
+       0x18d2c3,
+       0x16d208,
+       0x99c2,
+       0x49944,
+       0x887c3,
+       0x173605,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2030c3,
+       0x2a84c3,
+       0x232403,
+       0x2163c3,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x294483,
+       0x25ed03,
+       0x2030c3,
+       0x25ef44,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2082c3,
+       0x2a84c3,
+       0x232403,
+       0x218343,
+       0x2163c3,
+       0x2e9dc3,
+       0x3b1384,
+       0x353903,
+       0x227f83,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x201303,
+       0x311dc3,
+       0x1dea84c3,
+       0x232403,
+       0x246383,
+       0x2e9dc3,
+       0x20a203,
+       0x227f83,
+       0x200983,
+       0x2072c3,
+       0x33bac4,
+       0x16d208,
+       0x1e6a84c3,
+       0x232403,
+       0x2a6443,
+       0x2e9dc3,
+       0x209703,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x21db03,
+       0x16d208,
+       0x1eea84c3,
+       0x232403,
+       0x2163c3,
+       0x204e83,
+       0x200983,
+       0x16d208,
+       0x1594ac7,
+       0x38d2c3,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x3b1384,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x129845,
+       0x16fc07,
+       0xd95cb,
+       0xd69c4,
+       0xb3c45,
+       0x1456108,
+       0xa6a8d,
+       0x20284a05,
+       0x18004,
+       0x169c3,
+       0x186345,
+       0x349a05,
+       0x16d208,
+       0x1cdc2,
+       0x336c3,
+       0xf1446,
+       0x319ec8,
+       0x313bc7,
+       0x25ef44,
+       0x3b2c86,
+       0x3bb6c6,
+       0x16d208,
+       0x30ce43,
+       0x33e589,
+       0x237295,
+       0x3729f,
+       0x2a84c3,
+       0x31d012,
+       0xefac6,
+       0x10a045,
+       0x26e8a,
+       0x56b49,
+       0x31cdcf,
+       0x2d5f04,
+       0x20b145,
+       0x2fa150,
+       0x3b0887,
+       0x204e83,
+       0x28b148,
+       0x125bc6,
+       0x2ae1ca,
+       0x256044,
+       0x2ec883,
+       0x264a86,
+       0x20b0c2,
+       0x22d54b,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x2f1743,
+       0x2099c2,
+       0x2cd83,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x206343,
+       0x221f03,
+       0x200983,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x205503,
+       0x200983,
+       0x205702,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x9885,
+       0x25ef44,
+       0x2a84c3,
+       0x232403,
+       0x210444,
+       0x205503,
+       0x200983,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2163c3,
+       0x2143c3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x391683,
+       0x63643,
+       0x6343,
+       0x205503,
+       0x200983,
+       0x30d44a,
+       0x32b0c9,
+       0x346b0b,
+       0x34708a,
+       0x34d94a,
+       0x35d74b,
+       0x371e0a,
+       0x37814a,
+       0x37fc4a,
+       0x37fecb,
+       0x39f689,
+       0x3a140a,
+       0x3a178b,
+       0x3acfcb,
+       0x3b9eca,
+       0x2a84c3,
+       0x232403,
+       0x2163c3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x4589,
+       0x16d208,
+       0x2a84c3,
+       0x25cb44,
+       0x207ac2,
+       0x211cc4,
+       0x26fc45,
+       0x2030c3,
+       0x25ef44,
+       0x2a84c3,
+       0x235ac4,
+       0x232403,
+       0x249944,
+       0x2d5f04,
+       0x3b1384,
+       0x227f83,
+       0x205503,
+       0x200983,
+       0x27a305,
+       0x2082c3,
+       0x201303,
+       0x22ed03,
+       0x250cc4,
+       0x390fc4,
+       0x34ae45,
+       0x16d208,
+       0x302044,
+       0x3510c6,
+       0x276384,
+       0x2099c2,
+       0x371007,
+       0x24c0c7,
+       0x247784,
+       0x2555c5,
+       0x302e85,
+       0x2a9305,
+       0x3b1384,
+       0x3b8ac8,
+       0x239486,
+       0x30c188,
+       0x24ed05,
+       0x2da905,
+       0x236b84,
+       0x200983,
+       0x2ed844,
+       0x35c946,
+       0x264b83,
+       0x250cc4,
+       0x256005,
+       0x32d104,
+       0x334944,
+       0x20b0c2,
+       0x2425c6,
+       0x3962c6,
+       0x2fdc05,
+       0x205702,
+       0x38d2c3,
+       0x262099c2,
+       0x2333c4,
+       0x20d882,
+       0x209703,
+       0x202c82,
+       0x205503,
+       0x200442,
+       0x214843,
+       0x25ed03,
+       0x16d208,
+       0x16d208,
+       0x2e9dc3,
+       0x205702,
+       0x26e099c2,
+       0x2e9dc3,
+       0x245b43,
+       0x353903,
+       0x327344,
+       0x205503,
+       0x200983,
+       0x16d208,
+       0x205702,
+       0x276099c2,
+       0x2a84c3,
+       0x205503,
+       0x200983,
+       0x482,
+       0x20a9c2,
+       0x212982,
+       0x206343,
+       0x2e87c3,
+       0x205702,
+       0x129845,
+       0x16d208,
+       0x16fc07,
+       0x2099c2,
+       0x232403,
+       0x249944,
+       0x2032c3,
+       0x2e9dc3,
+       0x2143c3,
+       0x209703,
+       0x205503,
+       0x216b03,
+       0x200983,
+       0x21da83,
+       0x118fd3,
+       0x11c954,
+       0x16fc07,
+       0x13b46,
+       0x53b4b,
+       0x1cdc6,
+       0x51b87,
+       0x11ab09,
+       0xe6d4a,
+       0x8850d,
+       0x1b240c,
+       0x1ada8a,
+       0x192345,
+       0x6708,
+       0x5d306,
+       0x125c86,
+       0x22bb82,
+       0xff14c,
+       0x1a5cc7,
+       0x22e51,
+       0x2a84c3,
+       0x568c5,
+       0x77848,
+       0x9e04,
+       0x288347c6,
+       0x17e86,
+       0x8cb46,
+       0x8da0a,
+       0xac543,
+       0x28e54b04,
+       0x11aac5,
+       0xde283,
+       0xdc105,
+       0xd104c,
+       0xf04c8,
+       0xb5708,
+       0x9e009,
+       0x134b08,
+       0x141e046,
+       0xda40a,
+       0x82b48,
+       0xf4648,
+       0xff384,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x205702,
+       0x2099c2,
+       0x2e9dc3,
+       0x202bc2,
+       0x205503,
+       0x200983,
+       0x214843,
+       0x3653cf,
+       0x36578e,
+       0x16d208,
+       0x2a84c3,
+       0x42f87,
+       0x232403,
+       0x2e9dc3,
+       0x244183,
+       0x205503,
+       0x200983,
+       0x201bc3,
+       0x201bc7,
+       0x200142,
+       0x32c249,
+       0x200242,
+       0x23f88b,
+       0x297b8a,
+       0x2a2a49,
+       0x200882,
+       0x391206,
+       0x34ed15,
+       0x23f9d5,
+       0x246993,
+       0x23ff53,
+       0x202a82,
+       0x205ac5,
+       0x3b364c,
+       0x27160b,
+       0x2726c5,
+       0x201702,
+       0x284202,
+       0x386fc6,
+       0x200ec2,
+       0x3695c6,
+       0x2d4c4d,
+       0x27ef4c,
+       0x224dc4,
+       0x203dc2,
+       0x205942,
+       0x2248c8,
+       0x202a42,
+       0x312fc6,
+       0x2ba844,
+       0x34eed5,
+       0x246b13,
+       0x210783,
+       0x32fa0a,
+       0x3bb147,
+       0x3094c9,
+       0x37b887,
+       0x30f242,
+       0x200002,
+       0x3aef06,
+       0x20cb42,
+       0x16d208,
+       0x2105c2,
+       0x20b382,
+       0x274e87,
+       0x20f687,
+       0x21b585,
+       0x201c02,
+       0x21da47,
+       0x21dc08,
+       0x242b42,
+       0x2bf3c2,
+       0x22e802,
+       0x201ec2,
+       0x237b88,
+       0x201ec3,
+       0x2b5308,
+       0x2cf1cd,
+       0x213c03,
+       0x327988,
+       0x239f8f,
+       0x23a34e,
+       0x25edca,
+       0x229751,
+       0x229bd0,
+       0x2bcdcd,
+       0x2bd10c,
+       0x311c47,
+       0x32fb87,
+       0x3b2d49,
+       0x224ec2,
+       0x206c02,
+       0x25340c,
+       0x25370b,
+       0x204142,
+       0x2ab046,
+       0x21a1c2,
+       0x209882,
+       0x21b102,
+       0x2099c2,
+       0x383a84,
+       0x238bc7,
+       0x204682,
+       0x23d147,
+       0x23e487,
+       0x20e142,
+       0x2301c2,
+       0x242e45,
+       0x205742,
+       0x362e0e,
+       0x2ebb8d,
+       0x232403,
+       0x2be90e,
+       0x2e064d,
+       0x37eac3,
+       0x200e02,
+       0x21fec4,
+       0x2454c2,
+       0x2175c2,
+       0x358e45,
+       0x364b47,
+       0x383382,
+       0x218342,
+       0x249547,
+       0x24d288,
+       0x248902,
+       0x2aeac6,
+       0x25328c,
+       0x2535cb,
+       0x20fc82,
+       0x25924f,
+       0x259610,
+       0x259a0f,
+       0x259dd5,
+       0x25a314,
+       0x25a80e,
+       0x25ab8e,
+       0x25af0f,
+       0x25b2ce,
+       0x25b654,
+       0x25bb53,
+       0x25c00d,
+       0x272a89,
+       0x2895c3,
+       0x200782,
+       0x22b0c5,
+       0x207f86,
+       0x20d882,
+       0x21f507,
+       0x2e9dc3,
+       0x205e82,
+       0x362a08,
+       0x229991,
+       0x229dd0,
+       0x206482,
+       0x288d87,
+       0x203942,
+       0x214607,
+       0x20be02,
+       0x319cc9,
+       0x386f87,
+       0x27aac8,
+       0x234606,
+       0x2e86c3,
+       0x32a105,
+       0x232682,
+       0x202082,
+       0x3af305,
+       0x380685,
+       0x2040c2,
+       0x24c543,
+       0x32d187,
+       0x223787,
+       0x200502,
+       0x254684,
+       0x223b83,
+       0x223b89,
+       0x22c548,
+       0x200282,
+       0x204bc2,
+       0x3105c7,
+       0x31ff05,
+       0x2a5348,
+       0x219947,
+       0x200e83,
+       0x28c446,
+       0x2bcc4d,
+       0x2bcfcc,
+       0x2b45c6,
+       0x208d02,
+       0x2a8542,
+       0x202342,
+       0x239e0f,
+       0x23a20e,
+       0x302f07,
+       0x203d02,
+       0x2bf745,
+       0x2bf746,
+       0x20f242,
+       0x20ec42,
+       0x221f06,
+       0x214543,
+       0x214546,
+       0x2c6985,
+       0x2c698d,
+       0x2c6f55,
+       0x2c814c,
+       0x2c95cd,
+       0x2c9992,
+       0x20e602,
+       0x2675c2,
+       0x202d02,
+       0x240806,
+       0x2f7f86,
+       0x2033c2,
+       0x208006,
+       0x2023c2,
+       0x38b785,
+       0x200542,
+       0x2ebc89,
+       0x31554c,
+       0x31588b,
+       0x200442,
+       0x24e748,
+       0x203b02,
+       0x2056c2,
+       0x26a346,
+       0x222445,
+       0x226747,
+       0x257d85,
+       0x29e405,
+       0x243002,
+       0x2067c2,
+       0x2013c2,
+       0x2df507,
+       0x380c0d,
+       0x380f8c,
+       0x22f087,
+       0x20f982,
+       0x2069c2,
+       0x241248,
+       0x31e488,
+       0x2e3988,
+       0x308484,
+       0x2ab407,
+       0x2e90c3,
+       0x228ec2,
+       0x2082c2,
+       0x2eb3c9,
+       0x3a40c7,
+       0x201302,
+       0x26a745,
+       0x22d4c2,
+       0x21aa02,
+       0x2f9f03,
+       0x2f9f06,
+       0x2f1742,
+       0x2f23c2,
+       0x201a42,
+       0x202f86,
+       0x21fe07,
+       0x213bc2,
+       0x205ec2,
+       0x2b514f,
+       0x2be74d,
+       0x3872ce,
+       0x2e04cc,
+       0x2009c2,
+       0x207302,
+       0x234445,
+       0x30ba46,
+       0x2018c2,
+       0x202482,
+       0x200482,
+       0x2198c4,
+       0x2cf044,
+       0x2d0e86,
+       0x203082,
+       0x36cac7,
+       0x203083,
+       0x285d48,
+       0x34e488,
+       0x239887,
+       0x240706,
+       0x203902,
+       0x234b03,
+       0x234b07,
+       0x273946,
+       0x2dee45,
+       0x308808,
+       0x200d02,
+       0x331207,
+       0x222702,
+       0x361782,
+       0x20cfc2,
+       0x2c6749,
+       0x230982,
+       0x200842,
+       0x22f303,
+       0x331c87,
+       0x2002c2,
+       0x3156cc,
+       0x3159cb,
+       0x2b4646,
+       0x2de1c5,
+       0x221c82,
+       0x203b42,
+       0x2b7bc6,
+       0x260dc3,
+       0x38c187,
+       0x236102,
+       0x201442,
+       0x34eb95,
+       0x23fb95,
+       0x246853,
+       0x2400d3,
+       0x2585c7,
+       0x271a48,
+       0x271a50,
+       0x28d2cf,
+       0x297953,
+       0x2a2812,
+       0x32be10,
+       0x2d544f,
+       0x35f7d2,
+       0x30c3d1,
+       0x2b7613,
+       0x2c6512,
+       0x2cff4f,
+       0x2d2e8e,
+       0x2d3f52,
+       0x2d71d1,
+       0x2d7c8f,
+       0x30440e,
+       0x2f0691,
+       0x2f17d0,
+       0x2f2752,
+       0x2fc711,
+       0x364586,
+       0x36d3c7,
+       0x372187,
+       0x203142,
+       0x27d8c5,
+       0x3933c7,
+       0x212982,
+       0x209942,
+       0x228a85,
+       0x21e743,
+       0x34b0c6,
+       0x380dcd,
+       0x38110c,
+       0x201682,
+       0x3b34cb,
+       0x2714ca,
+       0x20598a,
+       0x2b6449,
+       0x2ea64b,
+       0x219a8d,
+       0x2fa5cc,
+       0x25180a,
+       0x22090c,
+       0x26908b,
+       0x27250c,
+       0x29474b,
+       0x3154c3,
+       0x36cfc6,
+       0x3a98c2,
+       0x2f4542,
+       0x20a743,
+       0x208602,
+       0x21fe83,
+       0x2366c6,
+       0x259f87,
+       0x2c7fc6,
+       0x39e4c8,
+       0x31e188,
+       0x2ce146,
+       0x201f82,
+       0x2fd5cd,
+       0x2fd90c,
+       0x2d5fc7,
+       0x301f07,
+       0x213b82,
+       0x201502,
+       0x234a82,
+       0x24d642,
+       0x2099c2,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x214843,
+       0x205702,
+       0x2021c2,
+       0x2ae8fdc5,
+       0x2b247e45,
+       0x2b717806,
+       0x16d208,
+       0x2baaee05,
+       0x2099c2,
+       0x2006c2,
+       0x2bfb3ac5,
+       0x2c27bdc5,
+       0x2c67c9c7,
+       0x2ca86a09,
+       0x2ce3bc44,
+       0x20d882,
+       0x205e82,
+       0x2d24b5c5,
+       0x2d68f849,
+       0x2db1db88,
+       0x2deab805,
+       0x2e300187,
+       0x2e61ed48,
+       0x2eae5d85,
+       0x2ee00106,
+       0x2f337809,
+       0x2f6b5a48,
+       0x2fac0488,
+       0x2fe9704a,
+       0x302732c4,
+       0x306d13c5,
+       0x30abc9c8,
+       0x30e03a85,
+       0x20cec2,
+       0x31248a43,
+       0x316a1686,
+       0x31b60148,
+       0x31eb94c6,
+       0x32281f08,
+       0x32719606,
+       0x32adef04,
+       0x200c82,
+       0x32f2cb87,
+       0x332a75c4,
+       0x336756c7,
+       0x33ba2987,
+       0x200442,
+       0x33e9b0c5,
+       0x34334f84,
+       0x346cd907,
+       0x34a5f187,
+       0x34e80886,
+       0x3527c585,
+       0x356959c7,
+       0x35ad0b48,
+       0x35e2b447,
+       0x363164c9,
+       0x36793105,
+       0x36b31dc7,
+       0x36e8f546,
+       0x37391408,
+       0x2273cd,
+       0x279909,
+       0x28174b,
+       0x2a4b0b,
+       0x34058b,
+       0x2ffe8b,
+       0x30bc4b,
+       0x30bf0b,
+       0x30c809,
+       0x30d6cb,
+       0x30d98b,
+       0x30e48b,
+       0x30f5ca,
+       0x30fb0a,
+       0x31010c,
+       0x314d8b,
+       0x31670a,
+       0x32904a,
+       0x33404e,
+       0x33568e,
+       0x335a0a,
+       0x33808a,
+       0x338dcb,
+       0x33908b,
+       0x339e8b,
+       0x354ecb,
+       0x3554ca,
+       0x35618b,
+       0x35644a,
+       0x3566ca,
+       0x35694a,
+       0x372b0b,
+       0x37914b,
+       0x37c74e,
+       0x37cacb,
+       0x38454b,
+       0x385acb,
+       0x38900a,
+       0x389289,
+       0x3894ca,
+       0x38a94a,
+       0x3a00cb,
+       0x3a1a4b,
+       0x3a22ca,
+       0x3a48cb,
+       0x3a8c4b,
+       0x3b990b,
+       0x3767e648,
+       0x37a87c89,
+       0x37e9de89,
+       0x382dacc8,
+       0x342505,
+       0x217083,
+       0x21c6c4,
+       0x220005,
+       0x23b986,
+       0x25da05,
+       0x2864c4,
+       0x21f408,
+       0x308005,
+       0x291784,
+       0x203447,
+       0x29cf8a,
+       0x3712ca,
+       0x338547,
+       0x3af9c7,
+       0x2f8f07,
+       0x264e87,
+       0x2f60c5,
+       0x33bb86,
+       0x2bb847,
+       0x2b4904,
+       0x2e4646,
+       0x2e4546,
+       0x3b9585,
+       0x26d1c4,
+       0x3519c6,
+       0x29bf47,
+       0x285746,
+       0x2e3247,
+       0x25e443,
+       0x2b1c06,
+       0x2328c5,
+       0x27cac7,
+       0x2641ca,
+       0x260e44,
+       0x217c08,
+       0x2abd89,
+       0x2cd247,
+       0x336286,
+       0x24e9c8,
+       0x2b9c09,
+       0x309684,
+       0x366944,
+       0x244245,
+       0x2bb548,
+       0x2c4b07,
+       0x2a9709,
+       0x364688,
+       0x345e86,
+       0x3204c6,
+       0x298048,
+       0x359646,
+       0x247e45,
+       0x280946,
+       0x275ec8,
+       0x24da46,
+       0x2525cb,
+       0x298646,
+       0x29994d,
+       0x3a6005,
+       0x2a7486,
+       0x208b45,
+       0x2f9bc9,
+       0x2f9a87,
+       0x37a208,
+       0x266986,
+       0x298bc9,
+       0x3793c6,
+       0x264145,
+       0x268686,
+       0x2cae46,
+       0x2cb3c9,
+       0x3530c6,
+       0x339487,
+       0x26ad85,
+       0x202ac3,
+       0x252745,
+       0x299c07,
+       0x33c6c6,
+       0x3a5f09,
+       0x317806,
+       0x280b86,
+       0x210c49,
+       0x280349,
+       0x29fc07,
+       0x282f88,
+       0x28c989,
+       0x27d548,
+       0x378386,
+       0x2d5805,
+       0x2418ca,
+       0x280c06,
+       0x3b7986,
+       0x2c8985,
+       0x265808,
+       0x223307,
+       0x22f50a,
+       0x249e46,
+       0x279d45,
+       0x37aa46,
+       0x21ac47,
+       0x336147,
+       0x21bbc5,
+       0x264305,
+       0x357dc6,
+       0x2ac5c6,
+       0x34dc06,
+       0x2b3204,
+       0x27f689,
+       0x288b46,
+       0x2dd38a,
+       0x21b388,
+       0x3078c8,
+       0x3712ca,
+       0x20b445,
+       0x29be85,
+       0x350b88,
+       0x2b2c88,
+       0x27b5c7,
+       0x258946,
+       0x322388,
+       0x2fdec7,
+       0x27dc48,
+       0x2b3846,
+       0x281408,
+       0x294f06,
+       0x24ee87,
+       0x299ec6,
+       0x3519c6,
+       0x3778ca,
+       0x2bd8c6,
+       0x2d5809,
+       0x26dbc6,
+       0x2af14a,
+       0x2def09,
+       0x2fb486,
+       0x2b4b04,
+       0x22b18d,
+       0x287f07,
+       0x326cc6,
+       0x2c0345,
+       0x379445,
+       0x374246,
+       0x2cd749,
+       0x2b1647,
+       0x277306,
+       0x2cc246,
+       0x286549,
+       0x247d84,
+       0x3482c4,
+       0x352cc8,
+       0x236a86,
+       0x26a808,
+       0x2e41c8,
+       0x312747,
+       0x3b7549,
+       0x34de07,
+       0x2aecca,
+       0x2e1f8f,
+       0x23188a,
+       0x234245,
+       0x276105,
+       0x216e85,
+       0x2ba787,
+       0x21a803,
+       0x283188,
+       0x396786,
+       0x396889,
+       0x2b87c6,
+       0x3b5207,
+       0x298989,
+       0x37a108,
+       0x2c8a47,
+       0x30a343,
+       0x342585,
+       0x21a785,
+       0x2b304b,
+       0x203b44,
+       0x2c2084,
+       0x274646,
+       0x30abc7,
+       0x382bca,
+       0x248ac7,
+       0x311e87,
+       0x27bdc5,
+       0x200645,
+       0x2eef89,
+       0x3519c6,
+       0x24894d,
+       0x353305,
+       0x2b1383,
+       0x205043,
+       0x26f685,
+       0x345c45,
+       0x24e9c8,
+       0x2790c7,
+       0x348046,
+       0x29db06,
+       0x229105,
+       0x2326c7,
+       0x312247,
+       0x239347,
+       0x2d144a,
+       0x2b1cc8,
+       0x2b3204,
+       0x24d7c7,
+       0x27acc7,
+       0x339306,
+       0x262107,
+       0x2dc4c8,
+       0x2e6f08,
+       0x268506,
+       0x303008,
+       0x2c87c4,
+       0x2bb846,
+       0x2353c6,
+       0x33bfc6,
+       0x2ba986,
+       0x286004,
+       0x264f46,
+       0x2bf5c6,
+       0x297546,
+       0x247846,
+       0x204f06,
+       0x26e2c6,
+       0x347f48,
+       0x2b0748,
+       0x2d1c88,
+       0x25dc08,
+       0x350b06,
+       0x20dcc5,
+       0x315ec6,
+       0x2ab885,
+       0x388447,
+       0x215305,
+       0x2125c3,
+       0x211585,
+       0x344cc4,
+       0x205045,
+       0x203b03,
+       0x33a447,
+       0x354648,
+       0x2e3306,
+       0x2c218d,
+       0x2760c6,
+       0x296ac5,
+       0x2b7843,
+       0x2bc389,
+       0x247f06,
+       0x28e7c6,
+       0x29f4c4,
+       0x231807,
+       0x233606,
+       0x2b1905,
+       0x203cc3,
+       0x3abd84,
+       0x27ae86,
+       0x2354c4,
+       0x2da048,
+       0x38ba89,
+       0x215589,
+       0x29f2ca,
+       0x2a070d,
+       0x313447,
+       0x2b9186,
+       0x206804,
+       0x286a09,
+       0x284688,
+       0x287b06,
+       0x33f286,
+       0x262107,
+       0x2b6b46,
+       0x226346,
+       0x26d606,
+       0x3a2a0a,
+       0x21ed48,
+       0x2bacc5,
+       0x262549,
+       0x27e14a,
+       0x2f5d08,
+       0x29b908,
+       0x295f08,
+       0x2a7acc,
+       0x30e705,
+       0x29dd88,
+       0x2e6586,
+       0x37a386,
+       0x3b50c7,
+       0x2489c5,
+       0x280ac5,
+       0x215449,
+       0x20e247,
+       0x396845,
+       0x227887,
+       0x205043,
+       0x2c5045,
+       0x20ef48,
+       0x252ac7,
+       0x29b7c9,
+       0x2d7985,
+       0x2fa984,
+       0x2a03c8,
+       0x32ccc7,
+       0x2c8c08,
+       0x38d688,
+       0x354b05,
+       0x3a3946,
+       0x278cc6,
+       0x244609,
+       0x2b01c7,
+       0x2ac006,
+       0x313787,
+       0x210103,
+       0x23bc44,
+       0x2a1785,
+       0x232804,
+       0x3833c4,
+       0x27fdc7,
+       0x26c147,
+       0x22e704,
+       0x29b610,
+       0x3b3c47,
+       0x200645,
+       0x24c20c,
+       0x20a8c4,
+       0x2c1488,
+       0x24ed89,
+       0x35acc6,
+       0x334c48,
+       0x215244,
+       0x36c4c8,
+       0x22fb06,
+       0x2accc8,
+       0x29c506,
+       0x2bec0b,
+       0x202ac5,
+       0x2c8748,
+       0x215ac4,
+       0x38beca,
+       0x29b7c9,
+       0x245f06,
+       0x216f48,
+       0x256385,
+       0x2b0f44,
+       0x2c1386,
+       0x239208,
+       0x27e648,
+       0x322c06,
+       0x3a9ec4,
+       0x241846,
+       0x34de87,
+       0x2755c7,
+       0x26210f,
+       0x207347,
+       0x2fb547,
+       0x3709c5,
+       0x353e05,
+       0x29f8c9,
+       0x2dd046,
+       0x27cc05,
+       0x280647,
+       0x2e0bc8,
+       0x297645,
+       0x299ec6,
+       0x21b1c8,
+       0x2b94ca,
+       0x2db4c8,
+       0x28ac87,
+       0x2e23c6,
+       0x262506,
+       0x21a5c3,
+       0x216a43,
+       0x27e309,
+       0x28c809,
+       0x2c1286,
+       0x2d7985,
+       0x33bd48,
+       0x216f48,
+       0x3597c8,
+       0x26d68b,
+       0x2c23c7,
+       0x30a589,
+       0x262388,
+       0x343084,
+       0x3514c8,
+       0x28cd89,
+       0x2ac305,
+       0x2ba687,
+       0x23bcc5,
+       0x27e548,
+       0x28fc4b,
+       0x295710,
+       0x2a6dc5,
+       0x215a0c,
+       0x348205,
+       0x27be43,
+       0x2a8f86,
+       0x2be6c4,
+       0x335086,
+       0x29bf47,
+       0x21b244,
+       0x240b88,
+       0x28304d,
+       0x302945,
+       0x29b104,
+       0x2243c4,
+       0x276949,
+       0x2a11c8,
+       0x317687,
+       0x22fb88,
+       0x27f748,
+       0x277605,
+       0x209287,
+       0x277587,
+       0x33e347,
+       0x264309,
+       0x233489,
+       0x214c46,
+       0x2bd306,
+       0x262346,
+       0x37f785,
+       0x3a7184,
+       0x200006,
+       0x200386,
+       0x277648,
+       0x21a90b,
+       0x260d07,
+       0x206804,
+       0x353646,
+       0x2fe447,
+       0x26dec5,
+       0x391d05,
+       0x219644,
+       0x233406,
+       0x200088,
+       0x286a09,
+       0x2510c6,
+       0x284048,
+       0x2b19c6,
+       0x345248,
+       0x306dcc,
+       0x2774c6,
+       0x29678d,
+       0x296c0b,
+       0x339545,
+       0x312387,
+       0x3531c6,
+       0x336008,
+       0x214cc9,
+       0x2d0588,
+       0x200645,
+       0x277987,
+       0x27d648,
+       0x349649,
+       0x28e946,
+       0x250fca,
+       0x335d88,
+       0x2d03cb,
+       0x39818c,
+       0x36c5c8,
+       0x27a7c6,
+       0x208c88,
+       0x3b77c7,
+       0x32cf49,
+       0x28f74d,
+       0x299dc6,
+       0x27b808,
+       0x2b0609,
+       0x2bda48,
+       0x281508,
+       0x2bfe0c,
+       0x2c0b47,
+       0x2c1887,
+       0x264145,
+       0x2ad587,
+       0x2e0a88,
+       0x2c1406,
+       0x2556cc,
+       0x2ef888,
+       0x2ccb88,
+       0x25dec6,
+       0x21a507,
+       0x214e44,
+       0x25dc08,
+       0x22200c,
+       0x2ce24c,
+       0x2342c5,
+       0x2d0d47,
+       0x3a9e46,
+       0x21a486,
+       0x2f9d88,
+       0x3af904,
+       0x28574b,
+       0x36cc0b,
+       0x2e23c6,
+       0x282ec7,
+       0x37a805,
+       0x269a05,
+       0x285886,
+       0x256345,
+       0x203b05,
+       0x2cc9c7,
+       0x274c49,
+       0x2ac784,
+       0x2fbb45,
+       0x2e4bc5,
+       0x2d9dc8,
+       0x329d05,
+       0x2b72c9,
+       0x2ae5c7,
+       0x2ae5cb,
+       0x381306,
+       0x347c89,
+       0x26d108,
+       0x276545,
+       0x33e448,
+       0x2334c8,
+       0x245747,
+       0x3776c7,
+       0x27fe49,
+       0x2acc07,
+       0x28a989,
+       0x2aa70c,
+       0x3163c8,
+       0x2b2ac9,
+       0x2b3d47,
+       0x27f809,
+       0x26c287,
+       0x398288,
+       0x3b7705,
+       0x2bb7c6,
+       0x2c0388,
+       0x308a88,
+       0x27e009,
+       0x203b47,
+       0x269ac5,
+       0x222b09,
+       0x2bd6c6,
+       0x28f544,
+       0x30e1c6,
+       0x35ffc8,
+       0x232ac7,
+       0x21ab08,
+       0x3030c9,
+       0x3a3707,
+       0x29d146,
+       0x312444,
+       0x211609,
+       0x209108,
+       0x25dd87,
+       0x27eb46,
+       0x21a846,
+       0x3b7904,
+       0x2241c6,
+       0x204fc3,
+       0x3b1649,
+       0x202a86,
+       0x303345,
+       0x29db06,
+       0x26cac5,
+       0x27dac8,
+       0x36c307,
+       0x381646,
+       0x3b3b06,
+       0x3078c8,
+       0x29fa47,
+       0x299e05,
+       0x29b408,
+       0x3a1e48,
+       0x335d88,
+       0x3480c5,
+       0x2bb846,
+       0x215349,
+       0x244484,
+       0x26c94b,
+       0x22604b,
+       0x2babc9,
+       0x205043,
+       0x254485,
+       0x2214c6,
+       0x385208,
+       0x2e1f04,
+       0x2e3306,
+       0x2d1589,
+       0x2ca445,
+       0x2cc906,
+       0x32ccc6,
+       0x216f44,
+       0x2a764a,
+       0x303288,
+       0x308a86,
+       0x3b8645,
+       0x37a687,
+       0x2e0fc7,
+       0x3a3944,
+       0x226287,
+       0x2aecc4,
+       0x33bf46,
+       0x2096c3,
+       0x264305,
+       0x32ad45,
+       0x207588,
+       0x24d985,
+       0x277209,
+       0x25da47,
+       0x25da4b,
+       0x2a148c,
+       0x2a224a,
+       0x300187,
+       0x203503,
+       0x3afc08,
+       0x348285,
+       0x2976c5,
+       0x205104,
+       0x398186,
+       0x24ed86,
+       0x224207,
+       0x33448b,
+       0x286004,
+       0x2e6684,
+       0x21f044,
+       0x2cafc6,
+       0x21b244,
+       0x2bb648,
+       0x342445,
+       0x21ba45,
+       0x359707,
+       0x312489,
+       0x345c45,
+       0x37424a,
+       0x26ac89,
+       0x2996ca,
+       0x3a2b49,
+       0x33fec4,
+       0x2cc305,
+       0x2b6c48,
+       0x2cd9cb,
+       0x244245,
+       0x2f2fc6,
+       0x213e84,
+       0x277746,
+       0x3a3589,
+       0x353707,
+       0x3179c8,
+       0x2a0a86,
+       0x34de07,
+       0x27e648,
+       0x3747c6,
+       0x375604,
+       0x365ac7,
+       0x357305,
+       0x367287,
+       0x200104,
+       0x353146,
+       0x2f4308,
+       0x296dc8,
+       0x2e6047,
+       0x274fc8,
+       0x294fc5,
+       0x204e84,
+       0x3711c8,
+       0x2750c4,
+       0x216e05,
+       0x2f5fc4,
+       0x2fdfc7,
+       0x288c07,
+       0x27f948,
+       0x2c8d86,
+       0x24d905,
+       0x277008,
+       0x2db6c8,
+       0x29f209,
+       0x226346,
+       0x22f588,
+       0x38bd4a,
+       0x26df48,
+       0x2e5d85,
+       0x20b306,
+       0x26ab48,
+       0x277a4a,
+       0x210f87,
+       0x284c45,
+       0x292708,
+       0x2ade04,
+       0x265886,
+       0x2c1c08,
+       0x204f06,
+       0x38e7c8,
+       0x28f187,
+       0x203346,
+       0x2b4b04,
+       0x284fc7,
+       0x2b0d84,
+       0x3a3547,
+       0x28e60d,
+       0x27b645,
+       0x2cd54b,
+       0x29c606,
+       0x24e848,
+       0x240b44,
+       0x350d06,
+       0x27ae86,
+       0x208fc7,
+       0x29644d,
+       0x243cc7,
+       0x2b12c8,
+       0x269b85,
+       0x278648,
+       0x2c4a86,
+       0x295048,
+       0x228086,
+       0x33d987,
+       0x300449,
+       0x343ac7,
+       0x287dc8,
+       0x2706c5,
+       0x21b608,
+       0x21a3c5,
+       0x3a4245,
+       0x3a2dc5,
+       0x234543,
+       0x2809c4,
+       0x262545,
+       0x337809,
+       0x27ea46,
+       0x2dc5c8,
+       0x377485,
+       0x2b2e87,
+       0x2a78ca,
+       0x2cc849,
+       0x2cad4a,
+       0x2d1d08,
+       0x2276cc,
+       0x2806cd,
+       0x2fc003,
+       0x38e6c8,
+       0x3abd45,
+       0x2b9286,
+       0x379f86,
+       0x2e58c5,
+       0x313889,
+       0x33cc45,
+       0x277008,
+       0x2552c6,
+       0x347806,
+       0x2a0289,
+       0x393947,
+       0x28ff06,
+       0x2a7848,
+       0x33bec8,
+       0x2daec7,
+       0x2ace4e,
+       0x2c4cc5,
+       0x349545,
+       0x204e08,
+       0x21fcc7,
+       0x21a882,
+       0x2bf984,
+       0x334f8a,
+       0x25de48,
+       0x2fe546,
+       0x298ac8,
+       0x278cc6,
+       0x332608,
+       0x2ac008,
+       0x3a4204,
+       0x2b33c5,
+       0x676384,
+       0x676384,
+       0x676384,
+       0x202b43,
+       0x21a6c6,
+       0x2774c6,
+       0x29cb0c,
+       0x203383,
+       0x27e146,
+       0x2151c4,
+       0x247e88,
+       0x2d13c5,
+       0x335086,
+       0x2bcac8,
+       0x2d2bc6,
+       0x3815c6,
+       0x245d08,
+       0x2a1807,
+       0x2ac9c9,
+       0x2f214a,
+       0x22b484,
+       0x215305,
+       0x2a96c5,
+       0x247c06,
+       0x313486,
+       0x29d546,
+       0x2f5546,
+       0x2acb04,
+       0x2acb0b,
+       0x231804,
+       0x29ccc5,
+       0x2aad85,
+       0x312806,
+       0x3a6308,
+       0x280587,
+       0x317784,
+       0x236203,
+       0x2ad905,
+       0x306047,
+       0x28048b,
+       0x207487,
+       0x2bc9c8,
+       0x2e62c7,
+       0x370b06,
+       0x279bc8,
+       0x2a820b,
+       0x21ff46,
+       0x212309,
+       0x2a8385,
+       0x30a343,
+       0x2cc906,
+       0x28f088,
+       0x213403,
+       0x24f403,
+       0x27e646,
+       0x278cc6,
+       0x35d10a,
+       0x27a805,
+       0x27accb,
+       0x29da4b,
+       0x23ef83,
+       0x202843,
+       0x2aec44,
+       0x278a87,
+       0x28f104,
+       0x244504,
+       0x2e6404,
+       0x26e248,
+       0x3b8588,
+       0x3baf89,
+       0x393188,
+       0x2b9dc7,
+       0x247846,
+       0x2dc20f,
+       0x2c4e06,
+       0x2d1344,
+       0x3b83ca,
+       0x305f47,
+       0x3b9606,
+       0x28f589,
+       0x3baf05,
+       0x2076c5,
+       0x3bb046,
+       0x21b743,
+       0x2ade49,
+       0x21eec6,
+       0x3afa89,
+       0x382bc6,
+       0x264305,
+       0x2346c5,
+       0x207343,
+       0x278bc8,
+       0x20d787,
+       0x396784,
+       0x247d08,
+       0x2e1244,
+       0x2f1006,
+       0x2a8f86,
+       0x23c346,
+       0x2c8609,
+       0x297645,
+       0x3519c6,
+       0x2582c9,
+       0x2c41c6,
+       0x26e2c6,
+       0x387886,
+       0x2160c5,
+       0x2f5fc6,
+       0x33d984,
+       0x3b7705,
+       0x2c0384,
+       0x2b2246,
+       0x3532c4,
+       0x203c43,
+       0x284745,
+       0x2331c8,
+       0x25e607,
+       0x2b8209,
+       0x284b48,
+       0x297e11,
+       0x32cd4a,
+       0x2e2307,
+       0x2e7246,
+       0x2151c4,
+       0x2c0488,
+       0x22e448,
+       0x297fca,
+       0x2b708d,
+       0x268686,
+       0x245e06,
+       0x285086,
+       0x21ba47,
+       0x2b1385,
+       0x3912c7,
+       0x247dc5,
+       0x2ae704,
+       0x2a6206,
+       0x224047,
+       0x2adb4d,
+       0x26aa87,
+       0x21f308,
+       0x277309,
+       0x20b206,
+       0x28e8c5,
+       0x22cb04,
+       0x3600c6,
+       0x3a3846,
+       0x25dfc6,
+       0x299348,
+       0x215f83,
+       0x208fc3,
+       0x352105,
+       0x277dc6,
+       0x2abfc5,
+       0x2a0c88,
+       0x29c10a,
+       0x282084,
+       0x247e88,
+       0x295f08,
+       0x312647,
+       0x377549,
+       0x2bc6c8,
+       0x286a87,
+       0x2587c6,
+       0x204f0a,
+       0x360148,
+       0x2f98c9,
+       0x2a1288,
+       0x221609,
+       0x2e7107,
+       0x2f2f05,
+       0x26d886,
+       0x2c1288,
+       0x27e7c8,
+       0x296088,
+       0x2e24c8,
+       0x29ccc5,
+       0x208a84,
+       0x20d488,
+       0x23e2c4,
+       0x3a2944,
+       0x264305,
+       0x2917c7,
+       0x312249,
+       0x208dc7,
+       0x210cc5,
+       0x274846,
+       0x34f606,
+       0x212444,
+       0x2a05c6,
+       0x24d744,
+       0x278546,
+       0x312006,
+       0x213246,
+       0x200645,
+       0x2a0b47,
+       0x203503,
+       0x2079c9,
+       0x3076c8,
+       0x247d04,
+       0x28690d,
+       0x296ec8,
+       0x2e3788,
+       0x2f9846,
+       0x300549,
+       0x2cc849,
+       0x3a3285,
+       0x29c20a,
+       0x27cf4a,
+       0x29d74c,
+       0x29d8c6,
+       0x275446,
+       0x2c4f86,
+       0x2b4749,
+       0x2b94c6,
+       0x29fa86,
+       0x33cd06,
+       0x25dc08,
+       0x274fc6,
+       0x2ce80b,
+       0x291945,
+       0x21ba45,
+       0x2756c5,
+       0x352a46,
+       0x204ec3,
+       0x23c2c6,
+       0x26aa07,
+       0x2c0345,
+       0x320585,
+       0x379445,
+       0x318446,
+       0x31da84,
+       0x31da86,
+       0x292f49,
+       0x3528cc,
+       0x2ae448,
+       0x239184,
+       0x2f5c06,
+       0x29c706,
+       0x28f088,
+       0x216f48,
+       0x3527c9,
+       0x37a687,
+       0x2367c9,
+       0x24cfc6,
+       0x22e904,
+       0x20ea44,
+       0x280144,
+       0x27e648,
+       0x31208a,
+       0x345bc6,
+       0x353cc7,
+       0x362c47,
+       0x347d85,
+       0x2a9684,
+       0x28cd46,
+       0x2b13c6,
+       0x2336c3,
+       0x307507,
+       0x38d588,
+       0x3a33ca,
+       0x2cbb88,
+       0x281f08,
+       0x353305,
+       0x339645,
+       0x260e05,
+       0x348146,
+       0x3ad906,
+       0x26c085,
+       0x3b1889,
+       0x2a948c,
+       0x260ec7,
+       0x298048,
+       0x2e5c05,
+       0x676384,
+       0x320944,
+       0x252c04,
+       0x22df86,
+       0x29eb0e,
+       0x207747,
+       0x21bc45,
+       0x24440c,
+       0x2e1107,
+       0x223fc7,
+       0x225109,
+       0x217cc9,
+       0x284c45,
+       0x3076c8,
+       0x215349,
+       0x335c45,
+       0x2c0288,
+       0x2c2586,
+       0x371446,
+       0x2def04,
+       0x2553c8,
+       0x20b3c3,
+       0x2af8c4,
+       0x2ad985,
+       0x3bab07,
+       0x21c245,
+       0x38bc09,
+       0x28b30d,
+       0x2a33c6,
+       0x225fc4,
+       0x2588c8,
+       0x274a8a,
+       0x2611c7,
+       0x235d45,
+       0x23b403,
+       0x29dc0e,
+       0x278ccc,
+       0x2f5e07,
+       0x29ecc7,
+       0x200143,
+       0x2b9505,
+       0x252c05,
+       0x298e88,
+       0x295d49,
+       0x239086,
+       0x28f104,
+       0x2e2246,
+       0x27b5cb,
+       0x2cc5cc,
+       0x366d87,
+       0x2d0305,
+       0x3a1d48,
+       0x2dac85,
+       0x3b83c7,
+       0x32cb87,
+       0x247585,
+       0x204ec3,
+       0x26e584,
+       0x21c685,
+       0x2ac685,
+       0x2ac686,
+       0x292008,
+       0x224047,
+       0x37a286,
+       0x26c486,
+       0x3a2d06,
+       0x268789,
+       0x209387,
+       0x25e286,
+       0x2cc746,
+       0x2731c6,
+       0x2a7585,
+       0x3b2b46,
+       0x380145,
+       0x329d88,
+       0x29114b,
+       0x28c346,
+       0x362c84,
+       0x2b4389,
+       0x25da44,
+       0x2c2508,
+       0x30e2c7,
+       0x281404,
+       0x2bbd88,
+       0x2c1684,
+       0x2a75c4,
+       0x286845,
+       0x302986,
+       0x26e187,
+       0x203043,
+       0x29d205,
+       0x323284,
+       0x349586,
+       0x3a3308,
+       0x38d2c5,
+       0x290e09,
+       0x222d05,
+       0x2dbf88,
+       0x215087,
+       0x388588,
+       0x2b8047,
+       0x2fb609,
+       0x264dc6,
+       0x32bb46,
+       0x28cac4,
+       0x258705,
+       0x2fce4c,
+       0x2756c7,
+       0x275fc7,
+       0x362b08,
+       0x2a33c6,
+       0x26a944,
+       0x328004,
+       0x27fcc9,
+       0x2c5086,
+       0x298a07,
+       0x208c04,
+       0x23da46,
+       0x33b785,
+       0x2c88c7,
+       0x2ce786,
+       0x250e89,
+       0x27cd87,
+       0x262107,
+       0x2a0106,
+       0x23d985,
+       0x27c548,
+       0x21ed48,
+       0x247a46,
+       0x38d305,
+       0x390586,
+       0x2034c3,
+       0x298d09,
+       0x29d2ce,
+       0x2b7d48,
+       0x2e1348,
+       0x24784b,
+       0x291046,
+       0x313104,
+       0x2802c4,
+       0x29d3ca,
+       0x215907,
+       0x25e345,
+       0x212309,
+       0x2bf685,
+       0x3a2987,
+       0x245c84,
+       0x287087,
+       0x2e40c8,
+       0x2cd306,
+       0x27b989,
+       0x2bc7ca,
+       0x215886,
+       0x296a06,
+       0x2aad05,
+       0x37d085,
+       0x282d07,
+       0x244e48,
+       0x33b6c8,
+       0x3a4206,
+       0x234745,
+       0x31320e,
+       0x2b3204,
+       0x2479c5,
+       0x2741c9,
+       0x2dce48,
+       0x28abc6,
+       0x29af0c,
+       0x29bd10,
+       0x29e74f,
+       0x29f7c8,
+       0x300187,
+       0x200645,
+       0x262545,
+       0x26e009,
+       0x292909,
+       0x241946,
+       0x2442c7,
+       0x2d0cc5,
+       0x337b09,
+       0x339386,
+       0x2b930d,
+       0x280009,
+       0x244504,
+       0x2b7ac8,
+       0x20d549,
+       0x345d86,
+       0x274945,
+       0x32bb46,
+       0x317889,
+       0x2f3c48,
+       0x20dcc5,
+       0x2553c4,
+       0x29b0cb,
+       0x345c45,
+       0x29b206,
+       0x280a06,
+       0x265e46,
+       0x276d4b,
+       0x290f09,
+       0x26c3c5,
+       0x388347,
+       0x32ccc6,
+       0x334dc6,
+       0x252988,
+       0x302a89,
+       0x21f0cc,
+       0x305e48,
+       0x309e46,
+       0x322c03,
+       0x2ba886,
+       0x276b85,
+       0x27b008,
+       0x234146,
+       0x2c8b08,
+       0x248b45,
+       0x279305,
+       0x32eb08,
+       0x332787,
+       0x379ec7,
+       0x224207,
+       0x334c48,
+       0x3002c8,
+       0x2ad486,
+       0x2b2087,
+       0x23bb07,
+       0x276a4a,
+       0x201e03,
+       0x352a46,
+       0x2392c5,
+       0x334f84,
+       0x277309,
+       0x2fb584,
+       0x25e684,
+       0x29c584,
+       0x29eccb,
+       0x20d6c7,
+       0x313445,
+       0x294cc8,
+       0x274846,
+       0x274848,
+       0x27a746,
+       0x28b085,
+       0x28b645,
+       0x28d886,
+       0x28ee48,
+       0x28f4c8,
+       0x2774c6,
+       0x294b0f,
+       0x2987d0,
+       0x3a6005,
+       0x203503,
+       0x22e9c5,
+       0x30a4c8,
+       0x292809,
+       0x335d88,
+       0x268608,
+       0x2b8d48,
+       0x20d787,
+       0x274509,
+       0x2c8d08,
+       0x265304,
+       0x29c408,
+       0x2d9e89,
+       0x2b27c7,
+       0x299d44,
+       0x208e88,
+       0x2a090a,
+       0x2e77c6,
+       0x268686,
+       0x226209,
+       0x29bf47,
+       0x2cba08,
+       0x204848,
+       0x2ddd88,
+       0x35cc45,
+       0x37e005,
+       0x21ba45,
+       0x252bc5,
+       0x3b5987,
+       0x204ec5,
+       0x2c0345,
+       0x313686,
+       0x335cc7,
+       0x2cd907,
+       0x2a0c06,
+       0x2d2245,
+       0x29b206,
+       0x27ba85,
+       0x2b58c8,
+       0x2f4284,
+       0x2c4246,
+       0x33b5c4,
+       0x2b0f48,
+       0x2c434a,
+       0x2790cc,
+       0x334685,
+       0x21bb06,
+       0x21f286,
+       0x351fc6,
+       0x309ec4,
+       0x33ba45,
+       0x27a587,
+       0x29bfc9,
+       0x2cb4c7,
+       0x676384,
+       0x676384,
+       0x317605,
+       0x37b944,
+       0x29a8ca,
+       0x2746c6,
+       0x279e04,
+       0x3b9585,
+       0x37e405,
+       0x2b12c4,
+       0x280647,
+       0x222c87,
+       0x2cafc8,
+       0x33de88,
+       0x20dcc9,
+       0x29cd88,
+       0x29aa8b,
+       0x2318c4,
+       0x366885,
+       0x27cc85,
+       0x224189,
+       0x302a89,
+       0x2b4288,
+       0x30e048,
+       0x2d6604,
+       0x29c745,
+       0x217083,
+       0x247bc5,
+       0x351a46,
+       0x295b8c,
+       0x208b06,
+       0x36c3c6,
+       0x28ae45,
+       0x3184c8,
+       0x2b7ec6,
+       0x2e73c6,
+       0x268686,
+       0x22920c,
+       0x25e184,
+       0x3a2e4a,
+       0x28ad88,
+       0x2959c7,
+       0x323186,
+       0x239147,
+       0x2ec145,
+       0x27eb46,
+       0x34d406,
+       0x35b847,
+       0x25e6c4,
+       0x2fe0c5,
+       0x2741c4,
+       0x2ae787,
+       0x274408,
+       0x2752ca,
+       0x27d4c7,
+       0x303407,
+       0x300107,
+       0x2dadc9,
+       0x295b8a,
+       0x21f083,
+       0x25e5c5,
+       0x213283,
+       0x2e6449,
+       0x33dc08,
+       0x3709c7,
+       0x335e89,
+       0x21ee46,
+       0x2b88c8,
+       0x33a3c5,
+       0x2db7ca,
+       0x2d3549,
+       0x2683c9,
+       0x3b50c7,
+       0x22e549,
+       0x213148,
+       0x35ba06,
+       0x21bcc8,
+       0x2160c7,
+       0x2acc07,
+       0x26ac87,
+       0x2d0b48,
+       0x2f5a86,
+       0x2a06c5,
+       0x27a587,
+       0x296508,
+       0x33b544,
+       0x2dd244,
+       0x28fe07,
+       0x2ac387,
+       0x2151ca,
+       0x35b986,
+       0x38c74a,
+       0x2bf8c7,
+       0x2b2fc7,
+       0x246004,
+       0x28aa44,
+       0x2ce686,
+       0x202d04,
+       0x202d0c,
+       0x3aff05,
+       0x216d89,
+       0x2d4f04,
+       0x2b1385,
+       0x274a08,
+       0x279fc5,
+       0x374246,
+       0x223ec4,
+       0x293c4a,
+       0x2b00c6,
+       0x29ba8a,
+       0x22b447,
+       0x21ac45,
+       0x21b745,
+       0x347dca,
+       0x28efc5,
+       0x26dfc6,
+       0x23e2c4,
+       0x2aedc6,
+       0x282dc5,
+       0x234206,
+       0x2e604c,
+       0x2cb14a,
+       0x2587c4,
+       0x247846,
+       0x29bf47,
+       0x2cf984,
+       0x25dc08,
+       0x393006,
+       0x313089,
+       0x2c7549,
+       0x3164c9,
+       0x26cb06,
+       0x2161c6,
+       0x21be07,
+       0x3b17c8,
+       0x215fc9,
+       0x20d6c7,
+       0x294e46,
+       0x34de87,
+       0x284f45,
+       0x2b3204,
+       0x21b9c7,
+       0x23bcc5,
+       0x286785,
+       0x226987,
+       0x247448,
+       0x3a1cc6,
+       0x29738d,
+       0x29908f,
+       0x29da4d,
+       0x210d04,
+       0x2332c6,
+       0x2d3c08,
+       0x33ccc5,
+       0x276c08,
+       0x24560a,
+       0x244504,
+       0x27bb46,
+       0x26f3c7,
+       0x286007,
+       0x2a18c9,
+       0x21bc85,
+       0x2b12c4,
+       0x2b330a,
+       0x2bc289,
+       0x22e647,
+       0x265706,
+       0x345d86,
+       0x29c686,
+       0x365b86,
+       0x2d320f,
+       0x2d3ac9,
+       0x274fc6,
+       0x22e346,
+       0x31a809,
+       0x2b2187,
+       0x217443,
+       0x229386,
+       0x216a43,
+       0x2e5788,
+       0x34dcc7,
+       0x29f9c9,
+       0x2a8e08,
+       0x37a008,
+       0x203c86,
+       0x208a49,
+       0x242785,
+       0x2b2244,
+       0x2a99c7,
+       0x2b47c5,
+       0x210d04,
+       0x313508,
+       0x215bc4,
+       0x2b1ec7,
+       0x3545c6,
+       0x357e85,
+       0x2a1288,
+       0x345c4b,
+       0x331dc7,
+       0x348046,
+       0x2c4e84,
+       0x319586,
+       0x264305,
+       0x23bcc5,
+       0x27c2c9,
+       0x280249,
+       0x2acc44,
+       0x2acc85,
+       0x247885,
+       0x2db646,
+       0x3077c8,
+       0x2bf046,
+       0x38d3cb,
+       0x35ab4a,
+       0x2b0e85,
+       0x28b6c6,
+       0x396485,
+       0x2cf485,
+       0x2a54c7,
+       0x352cc8,
+       0x2367c4,
+       0x25f806,
+       0x28f546,
+       0x213307,
+       0x30a304,
+       0x27ae86,
+       0x237cc5,
+       0x237cc9,
+       0x2163c4,
+       0x2a9809,
+       0x2774c6,
+       0x2c0c08,
+       0x247885,
+       0x362d45,
+       0x234206,
+       0x21efc9,
+       0x217cc9,
+       0x36c446,
+       0x2dcf48,
+       0x244508,
+       0x396444,
+       0x2b3644,
+       0x2b3648,
+       0x326dc8,
+       0x2368c9,
+       0x3519c6,
+       0x268686,
+       0x32224d,
+       0x2e3306,
+       0x306c89,
+       0x315fc5,
+       0x3bb046,
+       0x391408,
+       0x31d9c5,
+       0x23bb44,
+       0x264305,
+       0x27fb48,
+       0x29a689,
+       0x274284,
+       0x353146,
+       0x279e8a,
+       0x2f5d08,
+       0x215349,
+       0x38174a,
+       0x335e06,
+       0x299248,
+       0x3b8185,
+       0x2e0908,
+       0x2b8145,
+       0x21ed09,
+       0x36a349,
+       0x20d8c2,
+       0x2a8385,
+       0x269746,
+       0x277407,
+       0x3b05c5,
+       0x308986,
+       0x301448,
+       0x2a33c6,
+       0x2b6b09,
+       0x2760c6,
+       0x252808,
+       0x2a89c5,
+       0x23ebc6,
+       0x33da88,
+       0x27e648,
+       0x2e7008,
+       0x345f08,
+       0x3b2b44,
+       0x22a183,
+       0x2b6d44,
+       0x27d6c6,
+       0x284f84,
+       0x2e1287,
+       0x2e72c9,
+       0x2c45c5,
+       0x204846,
+       0x229386,
+       0x291e4b,
+       0x2b0dc6,
+       0x3b8cc6,
+       0x2c8488,
+       0x3204c6,
+       0x21aa43,
+       0x3af743,
+       0x2b3204,
+       0x22f485,
+       0x2b1807,
+       0x274408,
+       0x27440f,
+       0x27a48b,
+       0x3075c8,
+       0x3531c6,
+       0x3078ce,
+       0x2319c3,
+       0x2b1784,
+       0x2b0d45,
+       0x2b1146,
+       0x28ce4b,
+       0x291886,
+       0x21b249,
+       0x357e85,
+       0x3899c8,
+       0x20c688,
+       0x217b8c,
+       0x29ed06,
+       0x247c06,
+       0x2d7985,
+       0x287b88,
+       0x2790c5,
+       0x343088,
+       0x29b28a,
+       0x29de89,
+       0x676384,
+       0x38a099c2,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x38d2c3,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x3b1384,
+       0x205503,
+       0x200983,
+       0x20cf83,
+       0x25ef44,
+       0x2a84c3,
+       0x235ac4,
+       0x232403,
+       0x2d5f04,
+       0x2e9dc3,
+       0x3b0887,
+       0x209703,
+       0x204e83,
+       0x28b148,
+       0x200983,
+       0x2ae1cb,
+       0x2ec883,
+       0x264a86,
+       0x20b0c2,
+       0x22d54b,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x200983,
+       0x26be43,
+       0x204783,
+       0x205702,
+       0x16d208,
+       0x325f45,
+       0x23bd48,
+       0x2df7c8,
+       0x2099c2,
+       0x37ab45,
+       0x38c347,
+       0x2007c2,
+       0x240d87,
+       0x20d882,
+       0x248707,
+       0x32c589,
+       0x3b7d48,
+       0x2ddc09,
+       0x23e202,
+       0x263647,
+       0x36c1c4,
+       0x38c407,
+       0x35aa47,
+       0x2bbbc2,
+       0x209703,
+       0x20e602,
+       0x200c82,
+       0x200442,
+       0x2013c2,
+       0x205ec2,
+       0x209842,
+       0x2a80c5,
+       0x320885,
+       0x99c2,
+       0x32403,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x12083,
+       0x1ec1,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x3b1384,
+       0x244183,
+       0x205503,
+       0x200983,
+       0x219503,
+       0x3b819d06,
+       0x13f443,
+       0x7df85,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x4a82,
+       0x16d208,
+       0x44e04,
+       0xdb085,
+       0x205702,
+       0x26f544,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x2358c3,
+       0x2a9305,
+       0x244183,
+       0x206343,
+       0x205503,
+       0x21c2c3,
+       0x200983,
+       0x214843,
+       0x2387c3,
+       0x25ed03,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2099c2,
+       0x200983,
+       0x16d208,
+       0x2e9dc3,
+       0x16d208,
+       0x200c03,
+       0x2a84c3,
+       0x22fd84,
+       0x232403,
+       0x2e9dc3,
+       0x202bc2,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x202bc2,
+       0x227f83,
+       0x205503,
+       0x200983,
+       0x2e87c3,
+       0x214843,
+       0x205702,
+       0x2099c2,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x264a85,
+       0xe4886,
+       0x25ef44,
+       0x20b0c2,
+       0x16d208,
+       0x205702,
+       0x1d848,
+       0x1b4183,
+       0x2099c2,
+       0x3fc91386,
+       0x1320c4,
+       0xd95cb,
+       0x13eec6,
+       0x9807,
+       0x232403,
+       0x47208,
+       0x2e9dc3,
+       0xb9b45,
+       0x13fb84,
+       0x260f83,
+       0x4ce87,
+       0xd78c4,
+       0x205503,
+       0x7f1c4,
+       0x200983,
+       0x2ed844,
+       0xd9388,
+       0x125c86,
+       0x82b48,
+       0x6cf05,
+       0x1fa49,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x204e83,
+       0x200983,
+       0x2ec883,
+       0x20b0c2,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x24a5c3,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2d5f04,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x264a86,
+       0x232403,
+       0x2e9dc3,
+       0x176e43,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x9807,
+       0x16d208,
+       0x2e9dc3,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x426a84c3,
+       0x232403,
+       0x205503,
+       0x200983,
+       0x16d208,
+       0x205702,
+       0x2099c2,
+       0x2a84c3,
+       0x2e9dc3,
+       0x205503,
+       0x200442,
+       0x200983,
+       0x316e87,
+       0x33e6cb,
+       0x22d703,
+       0x241608,
+       0x3b1547,
+       0x20a7c6,
+       0x2c2c45,
+       0x372349,
+       0x209488,
+       0x360d49,
+       0x38f790,
+       0x360d4b,
+       0x39e189,
+       0x201b03,
+       0x20fb89,
+       0x230f06,
+       0x230f0c,
+       0x326008,
+       0x3b4f08,
+       0x34af09,
+       0x2905ce,
+       0x2dd9cb,
+       0x2f364c,
+       0x2030c3,
+       0x263d0c,
+       0x207089,
+       0x2fee47,
+       0x23234c,
+       0x3a89ca,
+       0x2030c4,
+       0x2d084d,
+       0x263bc8,
+       0x20cf8d,
+       0x273846,
+       0x28decb,
+       0x283349,
+       0x3b8b87,
+       0x32fd06,
+       0x330f89,
+       0x351b8a,
+       0x30b148,
+       0x2ec484,
+       0x2fba07,
+       0x34f707,
+       0x2bab04,
+       0x37b5c4,
+       0x22a749,
+       0x281d49,
+       0x22ae48,
+       0x210785,
+       0x3b4005,
+       0x20db86,
+       0x2d0709,
+       0x24588d,
+       0x2f30c8,
+       0x20da87,
+       0x2c2cc8,
+       0x2e1886,
+       0x38b6c4,
+       0x3523c5,
+       0x202986,
+       0x204b04,
+       0x206f87,
+       0x20b8ca,
+       0x212244,
+       0x2157c6,
+       0x216a09,
+       0x216a0f,
+       0x21788d,
+       0x2184c6,
+       0x21d450,
+       0x21d846,
+       0x21df87,
+       0x21e4c7,
+       0x21e4cf,
+       0x21f6c9,
+       0x224c46,
+       0x225347,
+       0x225348,
+       0x225809,
+       0x246088,
+       0x2e52c7,
+       0x20cc83,
+       0x372986,
+       0x3ba948,
+       0x29088a,
+       0x213c09,
+       0x2095c3,
+       0x38c246,
+       0x25f64a,
+       0x29e587,
+       0x2fec8a,
+       0x313d4e,
+       0x21f806,
+       0x2a8587,
+       0x20e006,
+       0x207146,
+       0x37de0b,
+       0x20414a,
+       0x317f0d,
+       0x216287,
+       0x33ce88,
+       0x33ce89,
+       0x33ce8f,
+       0x2b838c,
+       0x27b289,
+       0x2e6a0e,
+       0x3b098a,
+       0x2ba246,
+       0x2f4586,
+       0x30b58c,
+       0x30ce8c,
+       0x30dc08,
+       0x3439c7,
+       0x2b8c45,
+       0x351e04,
+       0x33c90e,
+       0x228d04,
+       0x351747,
+       0x26030a,
+       0x362554,
+       0x36dd8f,
+       0x21e688,
+       0x372848,
+       0x35040d,
+       0x35040e,
+       0x376ec9,
+       0x3a8ec8,
+       0x3a8ecf,
+       0x23204c,
+       0x23204f,
+       0x233007,
+       0x236dca,
+       0x2435cb,
+       0x238508,
+       0x239cc7,
+       0x3690cd,
+       0x250406,
+       0x2d0a06,
+       0x23c149,
+       0x394648,
+       0x242088,
+       0x24208e,
+       0x2b5007,
+       0x243885,
+       0x244bc5,
+       0x2063c4,
+       0x20aa86,
+       0x22ad48,
+       0x202203,
+       0x2ca10e,
+       0x369488,
+       0x2a2fcb,
+       0x200dc7,
+       0x3a4045,
+       0x22e206,
+       0x2aa0c7,
+       0x333d08,
+       0x26cd09,
+       0x292e45,
+       0x284788,
+       0x212c06,
+       0x38ad4a,
+       0x33c809,
+       0x232409,
+       0x23240b,
+       0x38dc48,
+       0x2ba9c9,
+       0x210846,
+       0x22eb8a,
+       0x2dc80a,
+       0x236fcc,
+       0x3a6687,
+       0x32c38a,
+       0x26ea8b,
+       0x26ea99,
+       0x3b6a88,
+       0x264b05,
+       0x2c6086,
+       0x211e49,
+       0x390746,
+       0x28550a,
+       0x209686,
+       0x202644,
+       0x2c620d,
+       0x202647,
+       0x211149,
+       0x246385,
+       0x2464c8,
+       0x246fc9,
+       0x247784,
+       0x248387,
+       0x248388,
+       0x248c87,
+       0x261908,
+       0x24d487,
+       0x26c645,
+       0x25488c,
+       0x2550c9,
+       0x2bc00a,
+       0x3937c9,
+       0x20fc89,
+       0x275a0c,
+       0x25774b,
+       0x257ec8,
+       0x259048,
+       0x25c404,
+       0x2810c8,
+       0x283c89,
+       0x3a8a87,
+       0x216c46,
+       0x2835c7,
+       0x2dcac9,
+       0x26e6cb,
+       0x319407,
+       0x200a07,
+       0x22b587,
+       0x20cf04,
+       0x20cf05,
+       0x29a545,
+       0x341c0b,
+       0x39c644,
+       0x3b2988,
+       0x26614a,
+       0x212cc7,
+       0x2f6707,
+       0x28bed2,
+       0x278446,
+       0x22f706,
+       0x33c24e,
+       0x27aa06,
+       0x292588,
+       0x29374f,
+       0x20d348,
+       0x37f308,
+       0x30eaca,
+       0x30ead1,
+       0x2a0e8e,
+       0x24dd0a,
+       0x24dd0c,
+       0x21e307,
+       0x3a90d0,
+       0x200408,
+       0x2a1085,
+       0x2aa4ca,
+       0x204b4c,
+       0x29518d,
+       0x2f7e46,
+       0x2f7e47,
+       0x2f7e4c,
+       0x300e4c,
+       0x3292cc,
+       0x2873cb,
+       0x284184,
+       0x226384,
+       0x346d89,
+       0x3050c7,
+       0x225e49,
+       0x37e909,
+       0x39f1c7,
+       0x3a8846,
+       0x3a8849,
+       0x2ad1c3,
+       0x21c74a,
+       0x31a287,
+       0x33eb8b,
+       0x317d8a,
+       0x248844,
+       0x22ba46,
+       0x27d749,
+       0x202b84,
+       0x3affca,
+       0x348345,
+       0x2bdd45,
+       0x2bdd4d,
+       0x2be08e,
+       0x28cc05,
+       0x323906,
+       0x264687,
+       0x3870ca,
+       0x39b686,
+       0x3616c4,
+       0x36d747,
+       0x2c3f0b,
+       0x2e1947,
+       0x33fa84,
+       0x24bb86,
+       0x24bb8d,
+       0x21e1cc,
+       0x2053c6,
+       0x2f32ca,
+       0x2e03c6,
+       0x2ed0c8,
+       0x377c47,
+       0x23568a,
+       0x23d6c6,
+       0x216183,
+       0x391586,
+       0x3ba7c8,
+       0x29ac8a,
+       0x275807,
+       0x275808,
+       0x281684,
+       0x24b687,
+       0x279348,
+       0x2bd748,
+       0x27c0c8,
+       0x38c94a,
+       0x2da905,
+       0x2cf0c7,
+       0x24db53,
+       0x31e806,
+       0x266348,
+       0x221a09,
+       0x240c48,
+       0x203d0b,
+       0x2cb608,
+       0x2a5f44,
+       0x32ec06,
+       0x30bac6,
+       0x3027c9,
+       0x2c3dc7,
+       0x254988,
+       0x28af06,
+       0x226884,
+       0x2cb8c5,
+       0x2c55c8,
+       0x2c5bca,
+       0x2c5e88,
+       0x2cbf86,
+       0x29944a,
+       0x2ac808,
+       0x2cf788,
+       0x2d18c8,
+       0x2d1f06,
+       0x2d3e06,
+       0x38e18c,
+       0x2d43d0,
+       0x27d2c5,
+       0x20d148,
+       0x301950,
+       0x20d150,
+       0x38f60e,
+       0x38de0e,
+       0x38de14,
+       0x32fe8f,
+       0x330246,
+       0x332d51,
+       0x33d213,
+       0x33d688,
+       0x3b3445,
+       0x241b48,
+       0x386245,
+       0x329a8c,
+       0x291549,
+       0x228b49,
+       0x3201c7,
+       0x236b89,
+       0x380887,
+       0x2f6146,
+       0x3521c7,
+       0x269c45,
+       0x2120c3,
+       0x2023c9,
+       0x221cc9,
+       0x376e43,
+       0x27f384,
+       0x32a20d,
+       0x206bcf,
+       0x2268c5,
+       0x329986,
+       0x211407,
+       0x325d87,
+       0x288786,
+       0x28878b,
+       0x2a2405,
+       0x256786,
+       0x2f6c07,
+       0x24e489,
+       0x3a7486,
+       0x21d305,
+       0x22854b,
+       0x235946,
+       0x249245,
+       0x357988,
+       0x306a88,
+       0x2c8f0c,
+       0x2c8f10,
+       0x2d2409,
+       0x2ffd07,
+       0x32840b,
+       0x2e3b86,
+       0x2e518a,
+       0x2e754b,
+       0x2e794a,
+       0x2e7bc6,
+       0x2e8685,
+       0x319fc6,
+       0x36c808,
+       0x32028a,
+       0x35009c,
+       0x2ec94c,
+       0x2ecc48,
+       0x264a85,
+       0x34ea07,
+       0x26bec6,
+       0x274e05,
+       0x21afc6,
+       0x288948,
+       0x2bc507,
+       0x2904c8,
+       0x2a868a,
+       0x33130c,
+       0x331589,
+       0x38b847,
+       0x2198c4,
+       0x244c86,
+       0x37ee8a,
+       0x37ea05,
+       0x209f8c,
+       0x20e648,
+       0x367388,
+       0x21a00c,
+       0x22550c,
+       0x225a09,
+       0x225c47,
+       0x231d4c,
+       0x23aa84,
+       0x23c60a,
+       0x35e6cc,
+       0x26b28b,
+       0x242b8b,
+       0x2efec6,
+       0x24a107,
+       0x24c687,
+       0x3a930f,
+       0x2f8a51,
+       0x2d8592,
+       0x24c68d,
+       0x24c68e,
+       0x24c9ce,
+       0x330048,
+       0x330052,
+       0x24fbc8,
+       0x3b1187,
+       0x24aeca,
+       0x3681c8,
+       0x27a9c5,
+       0x3b57ca,
+       0x21dd87,
+       0x2e36c4,
+       0x201543,
+       0x2a57c5,
+       0x30ed47,
+       0x2f5007,
+       0x29538e,
+       0x3382cd,
+       0x33af89,
+       0x222705,
+       0x35c3c3,
+       0x3a78c6,
+       0x36e745,
+       0x2a3208,
+       0x205b49,
+       0x2983c5,
+       0x3692cf,
+       0x2d96c7,
+       0x372285,
+       0x20178a,
+       0x2a36c6,
+       0x2ed249,
+       0x396ccc,
+       0x2f51c9,
+       0x3abdc6,
+       0x265f4c,
+       0x322d06,
+       0x2f7588,
+       0x2f7786,
+       0x3b6c06,
+       0x3b96c4,
+       0x258243,
+       0x2a1fca,
+       0x327191,
+       0x3a9c0a,
+       0x27ee85,
+       0x265047,
+       0x252207,
+       0x279444,
+       0x27944b,
+       0x3b7bc8,
+       0x2b7bc6,
+       0x362b85,
+       0x38b044,
+       0x255f09,
+       0x31ad84,
+       0x254f07,
+       0x32f345,
+       0x32f347,
+       0x33c485,
+       0x2a8183,
+       0x3b1048,
+       0x33b80a,
+       0x203043,
+       0x325f8a,
+       0x203046,
+       0x36904f,
+       0x2b4f89,
+       0x2ca090,
+       0x2f1548,
+       0x2ccc89,
+       0x2971c7,
+       0x24bb0f,
+       0x336244,
+       0x2d5f84,
+       0x21d6c6,
+       0x22f246,
+       0x25708a,
+       0x23cc46,
+       0x2f58c7,
+       0x300788,
+       0x300987,
+       0x301207,
+       0x30370a,
+       0x30534b,
+       0x2f3dc5,
+       0x2d81c8,
+       0x21bb03,
+       0x23800c,
+       0x36f78f,
+       0x2b8a4d,
+       0x2a7147,
+       0x33b0c9,
+       0x22bcc7,
+       0x24a2c8,
+       0x36274c,
+       0x2a5e48,
+       0x250bc8,
+       0x318ace,
+       0x32d354,
+       0x32d864,
+       0x3475ca,
+       0x36148b,
+       0x380944,
+       0x380949,
+       0x27bbc8,
+       0x245345,
+       0x201d0a,
+       0x3696c7,
+       0x26f744,
+       0x38d2c3,
+       0x2a84c3,
+       0x235ac4,
+       0x232403,
+       0x2e9dc3,
+       0x3b1384,
+       0x244183,
+       0x209703,
+       0x2d43c6,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x201303,
+       0x205702,
+       0x38d2c3,
+       0x2099c2,
+       0x2a84c3,
+       0x235ac4,
+       0x232403,
+       0x2e9dc3,
+       0x244183,
+       0x2d43c6,
+       0x205503,
+       0x200983,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2163c3,
+       0x205503,
+       0x200983,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x205702,
+       0x2bb143,
+       0x2099c2,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x201ec2,
+       0x219f02,
+       0x2099c2,
+       0x2a84c3,
+       0x202242,
+       0x201fc2,
+       0x3b1384,
+       0x210444,
+       0x227382,
+       0x211cc4,
+       0x200442,
+       0x200983,
+       0x201303,
+       0x2efec6,
+       0x212982,
+       0x202dc2,
+       0x222f02,
+       0x44e0d343,
+       0x4521e303,
+       0x52d46,
+       0x52d46,
+       0x25ef44,
+       0x204e83,
+       0x142abca,
+       0x12778c,
+       0x102cc,
+       0x7dd8d,
+       0x129845,
+       0x21347,
+       0x18648,
+       0x1b887,
+       0x20348,
+       0x19d4ca,
+       0x45ed6a45,
+       0x12b809,
+       0xaf848,
+       0x4a70a,
+       0x8a64e,
+       0x1440a4b,
+       0x1320c4,
+       0x77848,
+       0x68bc8,
+       0x38f47,
+       0x12807,
+       0x4efc9,
+       0x2c07,
+       0xd4ac8,
+       0x1318c9,
+       0x3adc5,
+       0x124d4e,
+       0xa8a0d,
+       0x9688,
+       0x4622a586,
+       0x46c2a588,
+       0x70cc8,
+       0x117090,
+       0x5f347,
+       0x601c7,
+       0x64547,
+       0x69447,
+       0xdb42,
+       0x190bc7,
+       0x430c,
+       0x35fc7,
+       0xa4246,
+       0xa4909,
+       0xa6388,
+       0x17f42,
+       0x1fc2,
+       0xb8fcb,
+       0x7f247,
+       0x11809,
+       0xbb9c9,
+       0x17e248,
+       0xafd42,
+       0x113a49,
+       0xcdf8a,
+       0xc9e09,
+       0xd6fc9,
+       0xd7ac8,
+       0xd8a47,
+       0xda889,
+       0xde345,
+       0xde6d0,
+       0x175b86,
+       0x192345,
+       0x5e98d,
+       0xf986,
+       0xe9187,
+       0xed858,
+       0x1b1a48,
+       0xb4c8a,
+       0x1c42,
+       0x52f4d,
+       0x27c2,
+       0x5d306,
+       0x8d108,
+       0x86ec8,
+       0x16d0c9,
+       0x55b08,
+       0x5fb4e,
+       0x1a78c7,
+       0x19d0d,
+       0xf2d05,
+       0x190948,
+       0x194448,
+       0xfacc6,
+       0xc2,
+       0x125c86,
+       0x7b02,
+       0x341,
+       0x57a07,
+       0xc8e83,
+       0x466ee0c4,
+       0x46a94443,
+       0x141,
+       0x10986,
+       0x141,
+       0x1,
+       0x10986,
+       0xc8e83,
+       0x1596bc5,
+       0x2030c4,
+       0x2a84c3,
+       0x249944,
+       0x3b1384,
+       0x205503,
+       0x2218c5,
+       0x219503,
+       0x23e743,
+       0x373605,
+       0x25ed03,
+       0x47ea84c3,
+       0x232403,
+       0x2e9dc3,
+       0x200041,
+       0x209703,
+       0x210444,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x214843,
+       0x16d208,
+       0x205702,
+       0x38d2c3,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x2163c3,
+       0x201fc2,
+       0x3b1384,
+       0x244183,
+       0x209703,
+       0x205503,
+       0x204e83,
+       0x200983,
+       0x25ed03,
+       0x16d208,
+       0x36f502,
+       0x99c2,
+       0x1456108,
+       0x100b4e,
+       0x48e016c2,
+       0x31a448,
+       0x234386,
+       0x209cc6,
+       0x233d07,
+       0x4920c202,
+       0x49768ec8,
+       0x20884a,
+       0x25cc88,
+       0x200242,
+       0x31a0c9,
+       0x2f3e07,
+       0x216bc6,
+       0x3b0d89,
+       0x2cf204,
+       0x20a6c6,
+       0x2dbcc4,
+       0x26ffc4,
+       0x2544c9,
+       0x326686,
+       0x320945,
+       0x22c445,
+       0x384e07,
+       0x2bfb47,
+       0x28fa44,
+       0x233f46,
+       0x2fb005,
+       0x2fde45,
+       0x3963c5,
+       0x3b3dc7,
+       0x200c05,
+       0x314b49,
+       0x312945,
+       0x333e44,
+       0x39b5c7,
+       0x31974e,
+       0x32e5c9,
+       0x33c109,
+       0x3a64c6,
+       0x23d408,
+       0x26d98b,
+       0x2aeecc,
+       0x37f806,
+       0x2dd887,
+       0x20a305,
+       0x37b5ca,
+       0x22af49,
+       0x20bf49,
+       0x24ff86,
+       0x2f69c5,
+       0x27ce45,
+       0x3490c9,
+       0x39654b,
+       0x273346,
+       0x33a786,
+       0x202504,
+       0x28bb86,
+       0x243908,
+       0x3ba646,
+       0x214386,
+       0x207c08,
+       0x20bb47,
+       0x20bd09,
+       0x20c585,
+       0x16d208,
+       0x212784,
+       0x3ada04,
+       0x283785,
+       0x399a49,
+       0x220f07,
+       0x220f0b,
+       0x22394a,
+       0x227a45,
+       0x49a08d42,
+       0x33ea47,
+       0x49e28908,
+       0x2afb87,
+       0x350e85,
+       0x20c1ca,
+       0x99c2,
+       0x34dfcb,
+       0x24d5ca,
+       0x221bc6,
+       0x282bc3,
+       0x28e34d,
+       0x3492cc,
+       0x35084d,
+       0x245c45,
+       0x32ae05,
+       0x202247,
+       0x3aba49,
+       0x208746,
+       0x23cac5,
+       0x2d29c8,
+       0x28ba83,
+       0x2dfac8,
+       0x28ba88,
+       0x2c3747,
+       0x309708,
+       0x3a7209,
+       0x2cc447,
+       0x33e247,
+       0x396a48,
+       0x251f44,
+       0x251f47,
+       0x273748,
+       0x3a3ac6,
+       0x205f4f,
+       0x211a07,
+       0x2e5446,
+       0x225d85,
+       0x223083,
+       0x371847,
+       0x36c043,
+       0x248e46,
+       0x24aa86,
+       0x24b286,
+       0x290c05,
+       0x261903,
+       0x388208,
+       0x36f009,
+       0x38224b,
+       0x24b408,
+       0x24d145,
+       0x24f605,
+       0x4a248902,
+       0x352289,
+       0x3b1407,
+       0x256805,
+       0x2543c7,
+       0x2559c6,
+       0x365a45,
+       0x36e58b,
+       0x257ec4,
+       0x25c845,
+       0x25c987,
+       0x272cc6,
+       0x273105,
+       0x2812c7,
+       0x281a07,
+       0x2cd884,
+       0x289c0a,
+       0x28a0c8,
+       0x3b8209,
+       0x241e85,
+       0x207886,
+       0x243aca,
+       0x22c346,
+       0x261e07,
+       0x3b7ecd,
+       0x29c809,
+       0x38d185,
+       0x314187,
+       0x332288,
+       0x33d848,
+       0x3b3107,
+       0x379d86,
+       0x215dc7,
+       0x249f43,
+       0x341c04,
+       0x363485,
+       0x392707,
+       0x395dc9,
+       0x22be48,
+       0x344c45,
+       0x23cd84,
+       0x246245,
+       0x24b80d,
+       0x200f82,
+       0x373746,
+       0x25d246,
+       0x2c578a,
+       0x376546,
+       0x37edc5,
+       0x33df85,
+       0x33df87,
+       0x38ab8c,
+       0x270b4a,
+       0x28b846,
+       0x2b9645,
+       0x28b9c6,
+       0x28bd07,
+       0x28e186,
+       0x290b0c,
+       0x3b0ec9,
+       0x4a610e07,
+       0x293b05,
+       0x293b06,
+       0x293ec8,
+       0x23b705,
+       0x2a2c85,
+       0x2a3848,
+       0x2a3a4a,
+       0x4aa4ecc2,
+       0x4ae0ee02,
+       0x2e6705,
+       0x284f83,
+       0x3adf08,
+       0x204043,
+       0x2a3cc4,
+       0x2ed38b,
+       0x26dd48,
+       0x2e4d48,
+       0x4b349909,
+       0x2a7dc9,
+       0x2a8906,
+       0x2a9d48,
+       0x2a9f49,
+       0x2aab46,
+       0x2aacc5,
+       0x3843c6,
+       0x2ab5c9,
+       0x331f47,
+       0x23ea86,
+       0x233747,
+       0x2085c7,
+       0x32c8c4,
+       0x4b7b1d49,
+       0x2cab88,
+       0x368dc8,
+       0x383447,
+       0x2c5246,
+       0x226ac9,
+       0x209c87,
+       0x32e90a,
+       0x38c588,
+       0x3af5c7,
+       0x3b9786,
+       0x24f38a,
+       0x262708,
+       0x2dccc5,
+       0x226645,
+       0x2ee487,
+       0x2f7349,
+       0x36510b,
+       0x315008,
+       0x3129c9,
+       0x24bfc7,
+       0x2b550c,
+       0x2b5c4c,
+       0x2b5f4a,
+       0x2b61cc,
+       0x2c2708,
+       0x2c2908,
+       0x2c2b04,
+       0x2c2ec9,
+       0x2c3109,
+       0x2c334a,
+       0x2c35c9,
+       0x2c3907,
+       0x3af00c,
+       0x241146,
+       0x34acc8,
+       0x22c406,
+       0x32e7c6,
+       0x38d087,
+       0x3b3288,
+       0x39034b,
+       0x2afa47,
+       0x352489,
+       0x3445c9,
+       0x249ac7,
+       0x278a04,
+       0x265187,
+       0x2db346,
+       0x214a06,
+       0x2f3485,
+       0x2a5888,
+       0x291444,
+       0x291446,
+       0x270a0b,
+       0x21ca49,
+       0x214b46,
+       0x21c489,
+       0x3b3f46,
+       0x254688,
+       0x223b83,
+       0x2f6b45,
+       0x22edc9,
+       0x261145,
+       0x2f9684,
+       0x272206,
+       0x231545,
+       0x228f86,
+       0x3056c7,
+       0x26e986,
+       0x3a304b,
+       0x22ea87,
+       0x3379c6,
+       0x346f06,
+       0x384ec6,
+       0x28fa09,
+       0x2ef14a,
+       0x2b3505,
+       0x2170cd,
+       0x2a3b46,
+       0x235546,
+       0x2b4e86,
+       0x2ed045,
+       0x2de9c7,
+       0x2e14c7,
+       0x3581ce,
+       0x209703,
+       0x2c5209,
+       0x391dc9,
+       0x37b9c7,
+       0x358f07,
+       0x29d645,
+       0x27ec45,
+       0x4ba2a88f,
+       0x2ccec7,
+       0x2cd088,
+       0x2cd484,
+       0x2cde46,
+       0x4be44c42,
+       0x2d2186,
+       0x2d43c6,
+       0x391f8e,
+       0x2df90a,
+       0x357b06,
+       0x285eca,
+       0x203549,
+       0x324105,
+       0x398008,
+       0x3b5606,
+       0x38cec8,
+       0x26f088,
+       0x28eb8b,
+       0x233e05,
+       0x200c88,
+       0x207d4c,
+       0x2bd507,
+       0x24ae06,
+       0x2e28c8,
+       0x20a948,
+       0x4c208442,
+       0x20a48b,
+       0x282549,
+       0x329f09,
+       0x3bb287,
+       0x20f7c8,
+       0x4c61bf48,
+       0x3511cb,
+       0x37e0c9,
+       0x234fcd,
+       0x2750c8,
+       0x224a48,
+       0x4ca03ec2,
+       0x20e3c4,
+       0x4ce1a2c2,
+       0x2f4ec6,
+       0x4d2004c2,
+       0x3813ca,
+       0x21c346,
+       0x285908,
+       0x284488,
+       0x2af446,
+       0x22d8c6,
+       0x2f12c6,
+       0x2a3185,
+       0x238c04,
+       0x4d61e144,
+       0x205146,
+       0x272707,
+       0x4dae8bc7,
+       0x35490b,
+       0x319b09,
+       0x32ae4a,
+       0x391804,
+       0x33e0c8,
+       0x23e84d,
+       0x2eb709,
+       0x2eb948,
+       0x2ebfc9,
+       0x2ed844,
+       0x243484,
+       0x27c885,
+       0x317b4b,
+       0x26dcc6,
+       0x3424c5,
+       0x250149,
+       0x234008,
+       0x2047c4,
+       0x37b749,
+       0x208105,
+       0x2bfb88,
+       0x33e907,
+       0x33c508,
+       0x27d946,
+       0x35e387,
+       0x292349,
+       0x2286c9,
+       0x2492c5,
+       0x334ec5,
+       0x4de2d902,
+       0x333c04,
+       0x2049c5,
+       0x32c146,
+       0x318385,
+       0x2b1ac7,
+       0x205245,
+       0x272d04,
+       0x3a6586,
+       0x23cb47,
+       0x232986,
+       0x2dca05,
+       0x203188,
+       0x234585,
+       0x2062c7,
+       0x20f1c9,
+       0x21cb8a,
+       0x2e1b87,
+       0x2e1b8c,
+       0x320906,
+       0x343cc9,
+       0x23b385,
+       0x23b648,
+       0x210803,
+       0x210805,
+       0x2e8a05,
+       0x261607,
+       0x4e20c002,
+       0x22d0c7,
+       0x2e4f06,
+       0x342786,
+       0x2e7d06,
+       0x20a886,
+       0x208388,
+       0x241c85,
+       0x2e5507,
+       0x2e550d,
+       0x201543,
+       0x21ec05,
+       0x201547,
+       0x22d408,
+       0x201105,
+       0x218c88,
+       0x36c0c6,
+       0x32b9c7,
+       0x2c4785,
+       0x233e86,
+       0x26f5c5,
+       0x21390a,
+       0x2f2e06,
+       0x377ac7,
+       0x2ca505,
+       0x3612c7,
+       0x36d6c4,
+       0x2f9606,
+       0x2fb3c5,
+       0x32648b,
+       0x2db1c9,
+       0x2bb24a,
+       0x249348,
+       0x301d08,
+       0x304a4c,
+       0x306287,
+       0x3073c8,
+       0x310a48,
+       0x31e945,
+       0x34020a,
+       0x35c3c9,
+       0x4e600802,
+       0x200806,
+       0x219d04,
+       0x2ea849,
+       0x220b49,
+       0x269287,
+       0x294947,
+       0x37e789,
+       0x38cb48,
+       0x38cb4f,
+       0x315d06,
+       0x2d670b,
+       0x36e8c5,
+       0x36e8c7,
+       0x385889,
+       0x212ac6,
+       0x37b6c7,
+       0x2d8905,
+       0x2303c4,
+       0x261006,
+       0x211ac4,
+       0x2ce4c7,
+       0x307048,
+       0x4eaf68c8,
+       0x2f7085,
+       0x2f71c7,
+       0x236549,
+       0x23e284,
+       0x23e288,
+       0x4ee2b888,
+       0x279444,
+       0x231388,
+       0x32fdc4,
+       0x3ab849,
+       0x2173c5,
+       0x4f20b0c2,
+       0x315d45,
+       0x2e4345,
+       0x251288,
+       0x232e47,
+       0x4f601442,
+       0x204785,
+       0x2cf606,
+       0x24b106,
+       0x333bc8,
+       0x302108,
+       0x318346,
+       0x327f06,
+       0x2e2e49,
+       0x3426c6,
+       0x21298b,
+       0x296305,
+       0x368106,
+       0x377088,
+       0x250506,
+       0x292cc6,
+       0x21914a,
+       0x23084a,
+       0x245005,
+       0x241d47,
+       0x308786,
+       0x4fa01682,
+       0x201687,
+       0x238705,
+       0x243a44,
+       0x243a45,
+       0x391706,
+       0x26a447,
+       0x219a85,
+       0x220c04,
+       0x2c7e88,
+       0x292d85,
+       0x333a47,
+       0x3a1645,
+       0x213845,
+       0x256e04,
+       0x287609,
+       0x2fae48,
+       0x2e0286,
+       0x2d9d06,
+       0x2b6e46,
+       0x4fefbc88,
+       0x2fbe87,
+       0x2fc0cd,
+       0x2fcb4c,
+       0x2fd149,
+       0x2fd389,
+       0x5035b2c2,
+       0x3a8603,
+       0x207943,
+       0x2db405,
+       0x39280a,
+       0x327dc6,
+       0x302385,
+       0x305884,
+       0x30588b,
+       0x31b70c,
+       0x31c14c,
+       0x31c455,
+       0x31d74d,
+       0x320a8f,
+       0x320e52,
+       0x3212cf,
+       0x321692,
+       0x321b13,
+       0x321fcd,
+       0x32258d,
+       0x32290e,
+       0x322e8e,
+       0x3236cc,
+       0x323a8c,
+       0x323ecb,
+       0x32424e,
+       0x325392,
+       0x327b8c,
+       0x328790,
+       0x335212,
+       0x33640c,
+       0x336acd,
+       0x336e0c,
+       0x339a51,
+       0x33a90d,
+       0x34084d,
+       0x340e4a,
+       0x3410cc,
+       0x3419cc,
+       0x3421cc,
+       0x34290c,
+       0x344dd3,
+       0x345450,
+       0x345850,
+       0x34610d,
+       0x34670c,
+       0x347309,
+       0x34890d,
+       0x348c53,
+       0x34a311,
+       0x34a753,
+       0x34b24f,
+       0x34b60c,
+       0x34b90f,
+       0x34bccd,
+       0x34c2cf,
+       0x34c690,
+       0x34d10e,
+       0x3539ce,
+       0x353f50,
+       0x35518d,
+       0x355b0e,
+       0x355e8c,
+       0x356e93,
+       0x35934e,
+       0x3599d0,
+       0x359dd1,
+       0x35a20f,
+       0x35a5d3,
+       0x35ae4d,
+       0x35b18f,
+       0x35b54e,
+       0x35bc10,
+       0x35c009,
+       0x35cd90,
+       0x35d38f,
+       0x35da0f,
+       0x35ddd2,
+       0x35efce,
+       0x35fc4d,
+       0x36070d,
+       0x360a4d,
+       0x36184d,
+       0x361b8d,
+       0x361ed0,
+       0x3622cb,
+       0x36324c,
+       0x3635cc,
+       0x363bcc,
+       0x363ece,
+       0x371a10,
+       0x372dd2,
+       0x37324b,
+       0x3738ce,
+       0x373c4e,
+       0x3744ce,
+       0x37494b,
+       0x50774f56,
+       0x37624d,
+       0x3766d4,
+       0x377e0d,
+       0x37b115,
+       0x37c40d,
+       0x37cd8f,
+       0x37d5cf,
+       0x38250f,
+       0x3828ce,
+       0x382e4d,
+       0x383f91,
+       0x38674c,
+       0x386a4c,
+       0x386d4b,
+       0x38764c,
+       0x387a0f,
+       0x387dd2,
+       0x38878d,
+       0x38974c,
+       0x389bcc,
+       0x389ecd,
+       0x38a20f,
+       0x38a5ce,
+       0x3924cc,
+       0x392a8d,
+       0x392dcb,
+       0x39358c,
+       0x393b0d,
+       0x393e4e,
+       0x3941c9,
+       0x394d13,
+       0x39524d,
+       0x39558d,
+       0x395b8c,
+       0x39600e,
+       0x396fcf,
+       0x39738c,
+       0x39768d,
+       0x3979cf,
+       0x397d8c,
+       0x39848c,
+       0x39890c,
+       0x398c0c,
+       0x3992cd,
+       0x399612,
+       0x399c8c,
+       0x399f8c,
+       0x39a291,
+       0x39a6cf,
+       0x39aa8f,
+       0x39ae53,
+       0x39bcce,
+       0x39c04f,
+       0x39c40c,
+       0x50b9c74e,
+       0x39cacf,
+       0x39ce96,
+       0x39dc12,
+       0x39f38c,
+       0x39fd0f,
+       0x3a038d,
+       0x3a06cf,
+       0x3a0a8c,
+       0x3a0d8d,
+       0x3a10cd,
+       0x3a254e,
+       0x3a4b8c,
+       0x3a4e8c,
+       0x3a5190,
+       0x3a7a91,
+       0x3a7ecb,
+       0x3a820c,
+       0x3a850e,
+       0x3aa811,
+       0x3aac4e,
+       0x3aafcd,
+       0x3b53cb,
+       0x3b5e8f,
+       0x3b6d94,
+       0x228782,
+       0x228782,
+       0x200c83,
+       0x228782,
+       0x200c83,
+       0x228782,
+       0x205142,
+       0x384405,
+       0x3aa50c,
+       0x228782,
+       0x228782,
+       0x205142,
+       0x228782,
+       0x294545,
+       0x21cb85,
+       0x228782,
+       0x228782,
+       0x20b382,
+       0x294545,
+       0x31f3c9,
+       0x34a00c,
+       0x228782,
+       0x228782,
+       0x228782,
+       0x228782,
+       0x384405,
+       0x228782,
+       0x228782,
+       0x228782,
+       0x228782,
+       0x20b382,
+       0x31f3c9,
+       0x228782,
+       0x228782,
+       0x228782,
+       0x21cb85,
+       0x228782,
+       0x21cb85,
+       0x34a00c,
+       0x3aa50c,
+       0x38d2c3,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x3b1384,
+       0x205503,
+       0x200983,
+       0x2708,
+       0x5fc84,
+       0xe0e08,
+       0x205702,
+       0x51a099c2,
+       0x23dbc3,
+       0x24f2c4,
+       0x2032c3,
+       0x393304,
+       0x22f706,
+       0x20e883,
+       0x3328c4,
+       0x286bc5,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x255cca,
+       0x2efec6,
+       0x373fcc,
+       0x16d208,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x227f83,
+       0x2d43c6,
+       0x205503,
+       0x200983,
+       0x201303,
+       0xa4508,
+       0x129845,
+       0x14902,
+       0x52f86185,
+       0x21347,
+       0xc93c8,
+       0xec0e,
+       0x88192,
+       0xfe20b,
+       0x532d6a45,
+       0x536d6a4c,
+       0xb007,
+       0x16fc07,
+       0x1b254a,
+       0x3a6d0,
+       0x149c05,
+       0xd95cb,
+       0x68bc8,
+       0x38f47,
+       0x304cb,
+       0x4efc9,
+       0x11dd07,
+       0x2c07,
+       0x73587,
+       0x1c106,
+       0xd4ac8,
+       0x53c1cdc6,
+       0xa8a0d,
+       0x1b1f10,
+       0x5402bb82,
+       0x9688,
+       0x4a450,
+       0x14434c,
+       0x5474e88d,
+       0x655c7,
+       0x78749,
+       0x52e06,
+       0x940c8,
+       0x67e42,
+       0x9f54a,
+       0x27f07,
+       0x35fc7,
+       0xa4909,
+       0xa6388,
+       0xb9b45,
+       0xec50e,
+       0xb54e,
+       0xdecf,
+       0x11809,
+       0xbb9c9,
+       0x43e4b,
+       0x7664f,
+       0x8780c,
+       0x9ef4b,
+       0xbbf48,
+       0x154807,
+       0xcdc48,
+       0xfb80b,
+       0xf568c,
+       0xf640c,
+       0xf908c,
+       0xfe68d,
+       0x17e248,
+       0xeab02,
+       0x113a49,
+       0x185d4b,
+       0xc5446,
+       0x116fcb,
+       0xd804a,
+       0xd8c05,
+       0xde6d0,
+       0x111806,
+       0x192345,
+       0xe3f48,
+       0xe9187,
+       0xe9447,
+       0xff487,
+       0xf4d0a,
+       0xc924a,
+       0x5d306,
+       0x91a0d,
+       0x86ec8,
+       0x55b08,
+       0x56d49,
+       0xb3c45,
+       0xf484c,
+       0xfe88b,
+       0x165044,
+       0xfaa89,
+       0xfacc6,
+       0x1af7c6,
+       0x2dc2,
+       0x125c86,
+       0x107247,
+       0x7b02,
+       0xc83c5,
+       0x29544,
+       0x1ec1,
+       0x4c983,
+       0x53a85146,
+       0x94443,
+       0xd882,
+       0x27f04,
+       0x242,
+       0x5ef44,
+       0x3dc2,
+       0x8142,
+       0x2502,
+       0x10f242,
+       0x1ec2,
+       0xd6a42,
+       0x4142,
+       0x1b102,
+       0x2cd82,
+       0x5742,
+       0xdc2,
+       0xf882,
+       0x32403,
+       0x5f02,
+       0x7c2,
+       0x18342,
+       0xfc82,
+       0x5e82,
+       0x1ae02,
+       0x17f42,
+       0x15c2,
+       0x29c2,
+       0x1fc2,
+       0x44183,
+       0x3942,
+       0x6502,
+       0xafd42,
+       0xbe02,
+       0x282,
+       0x4bc2,
+       0x1f42,
+       0xa8542,
+       0x2342,
+       0x152bc2,
+       0x675c2,
+       0x2c82,
+       0x5503,
+       0x8c2,
+       0x8442,
+       0x33c2,
+       0xb482,
+       0x49245,
+       0xba02,
+       0x2d4c2,
+       0x3c083,
+       0x482,
+       0x1c42,
+       0x27c2,
+       0x3902,
+       0x1102,
+       0x1442,
+       0xc2,
+       0x2dc2,
+       0x9885,
+       0x75c47,
+       0x212503,
+       0x205702,
+       0x2a84c3,
+       0x232403,
+       0x2163c3,
+       0x20ad83,
+       0x227f83,
+       0x205503,
+       0x204e83,
+       0x200983,
+       0x294483,
+       0x169c3,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2163c3,
+       0x209703,
+       0x205503,
+       0x204e83,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x200041,
+       0x209703,
+       0x205503,
+       0x21c2c3,
+       0x200983,
+       0x38d2c3,
+       0x2a84c3,
+       0x232403,
+       0x209683,
+       0x2163c3,
+       0x277dc3,
+       0x280b83,
+       0x21c303,
+       0x252c03,
+       0x2e9dc3,
+       0x3b1384,
+       0x205503,
+       0x200983,
+       0x25ed03,
+       0x352e84,
+       0x231a03,
+       0x30c3,
+       0x228483,
+       0x37a908,
+       0x24f3c4,
+       0x3b870a,
+       0x2b8ec6,
+       0x1b6a04,
+       0x39b2c7,
+       0x21e7ca,
+       0x315bc9,
+       0x3ab587,
+       0x3b724a,
+       0x38d2c3,
+       0x2e678b,
+       0x2b9fc9,
+       0x2bd645,
+       0x2d1fc7,
+       0x99c2,
+       0x2a84c3,
+       0x205747,
+       0x2e2b85,
+       0x2dbdc9,
+       0x232403,
+       0x233c06,
+       0x2c1a43,
+       0xdb283,
+       0x104e46,
+       0x18ec46,
+       0xe807,
+       0x212e46,
+       0x21b185,
+       0x282407,
+       0x2d5b87,
+       0x56ae9dc3,
+       0x336647,
+       0x365e03,
+       0x206a05,
+       0x3b1384,
+       0x220688,
+       0x38644c,
+       0x2ad745,
+       0x29c986,
+       0x205607,
+       0x38b907,
+       0x238347,
+       0x245108,
+       0x303b8f,
+       0x315e05,
+       0x23dcc7,
+       0x26f287,
+       0x2a3e0a,
+       0x2d2809,
+       0x304f85,
+       0x30664a,
+       0x82a06,
+       0x2c1ac5,
+       0x374b84,
+       0x2843c6,
+       0x2f1d47,
+       0x2eaa07,
+       0x3bb408,
+       0x22dc85,
+       0x2e2a86,
+       0x214305,
+       0x3adcc5,
+       0x21c984,
+       0x2af347,
+       0x2081ca,
+       0x334808,
+       0x35ba86,
+       0x27f83,
+       0x2da905,
+       0x25f906,
+       0x3af246,
+       0x392246,
+       0x209703,
+       0x388a07,
+       0x26f205,
+       0x205503,
+       0x2d830d,
+       0x204e83,
+       0x3bb508,
+       0x27f404,
+       0x272fc5,
+       0x2a3d06,
+       0x234d46,
+       0x368007,
+       0x2a6ec7,
+       0x267345,
+       0x200983,
+       0x21fbc7,
+       0x2788c9,
+       0x311a49,
+       0x22708a,
+       0x243002,
+       0x2069c4,
+       0x2e5084,
+       0x390207,
+       0x22cf88,
+       0x2ea2c9,
+       0x21eac9,
+       0x2eaf47,
+       0x2ba486,
+       0xec286,
+       0x2ed844,
+       0x2ede4a,
+       0x2f0d48,
+       0x2f1189,
+       0x2bdbc6,
+       0x2b1445,
+       0x3346c8,
+       0x2c5f8a,
+       0x22ed03,
+       0x353006,
+       0x2eb047,
+       0x223ec5,
+       0x3a5e05,
+       0x264b83,
+       0x250cc4,
+       0x226605,
+       0x281b07,
+       0x2faf85,
+       0x2ee346,
+       0xfc605,
+       0x247d83,
+       0x357bc9,
+       0x272d8c,
+       0x29344c,
+       0x2ced08,
+       0x293087,
+       0x2f7908,
+       0x2f7c4a,
+       0x2f888b,
+       0x2ba108,
+       0x234e48,
+       0x239586,
+       0x390d45,
+       0x38da4a,
+       0x3a6205,
+       0x20b0c2,
+       0x2c4647,
+       0x25fe86,
+       0x35c8c5,
+       0x370809,
+       0x2f39c5,
+       0x27e985,
+       0x2ddf09,
+       0x351846,
+       0x237e88,
+       0x33f383,
+       0x20f486,
+       0x272146,
+       0x306445,
+       0x306449,
+       0x2b6789,
+       0x279ac7,
+       0x109104,
+       0x309107,
+       0x21e9c9,
+       0x238d05,
+       0x413c8,
+       0x3b2e85,
+       0x330e85,
+       0x380509,
+       0x201702,
+       0x25e544,
+       0x201e82,
+       0x203942,
+       0x31ecc5,
+       0x3b6788,
+       0x2b3b85,
+       0x2c3ac3,
+       0x2c3ac5,
+       0x2d2383,
+       0x20f442,
+       0x377804,
+       0x2ac783,
+       0x2056c2,
+       0x379884,
+       0x2e5d43,
+       0x2082c2,
+       0x2b3c03,
+       0x28d084,
+       0x2e4c83,
+       0x248684,
+       0x203082,
+       0x218943,
+       0x22ef03,
+       0x200d02,
+       0x361782,
+       0x2b65c9,
+       0x207842,
+       0x288d04,
+       0x203cc2,
+       0x334544,
+       0x2ba444,
+       0x2b74c4,
+       0x202dc2,
+       0x2391c2,
+       0x225bc3,
+       0x2f8403,
+       0x23d904,
+       0x281c84,
+       0x2eb1c4,
+       0x2f0f04,
+       0x30a483,
+       0x26e543,
+       0x282984,
+       0x30a2c4,
+       0x30aac6,
+       0x22a282,
+       0x2099c2,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x205702,
+       0x38d2c3,
+       0x2a84c3,
+       0x232403,
+       0x2007c3,
+       0x2e9dc3,
+       0x3b1384,
+       0x2b6884,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x201303,
+       0x2ee644,
+       0x31a403,
+       0x2bd0c3,
+       0x34ab84,
+       0x3b2c86,
+       0x202f03,
+       0x16fc07,
+       0x222403,
+       0x2459c3,
+       0x2b0543,
+       0x206a43,
+       0x227f83,
+       0x2d6cc5,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x282c43,
+       0x2a5143,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x244183,
+       0x205503,
+       0x23a504,
+       0x200983,
+       0x26bec4,
+       0x2bf145,
+       0x16fc07,
+       0x2099c2,
+       0x2006c2,
+       0x20d882,
+       0x200c82,
+       0x200442,
+       0x2a84c3,
+       0x235ac4,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x214843,
+       0x25ef44,
+       0x16d208,
+       0x2a84c3,
+       0x204e83,
+       0x169c3,
+       0x2030c4,
+       0x16d208,
+       0x2a84c3,
+       0x249944,
+       0x3b1384,
+       0x204e83,
+       0x203ec2,
+       0x200983,
+       0x23e743,
+       0x50cc4,
+       0x373605,
+       0x20b0c2,
+       0x30a403,
+       0x205702,
+       0x16d208,
+       0x2099c2,
+       0x232403,
+       0x2e9dc3,
+       0x201fc2,
+       0x200983,
+       0x205702,
+       0x1b7407,
+       0x12e3c9,
+       0x6f83,
+       0x16d208,
+       0x18ebc3,
+       0x5a31fd87,
+       0xa84c3,
+       0x708,
+       0x232403,
+       0x2e9dc3,
+       0x1ae886,
+       0x244183,
+       0x8f2c8,
+       0xc0e08,
+       0x41a46,
+       0x209703,
+       0xca988,
+       0xb1b43,
+       0xdf145,
+       0x32607,
+       0x8003,
+       0x174c0a,
+       0x11ed83,
+       0x308d44,
+       0x10398b,
+       0x103f48,
+       0x8d742,
+       0x205702,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x2d5f04,
+       0x2e9dc3,
+       0x244183,
+       0x209703,
+       0x205503,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x227f83,
+       0x205503,
+       0x200983,
+       0x21aa03,
+       0x214843,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x169c3,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x3b1384,
+       0x227f83,
+       0x205503,
+       0x200983,
+       0x212982,
+       0x200141,
+       0x205702,
+       0x200001,
+       0x320b82,
+       0x16d208,
+       0x21d445,
+       0x201ec1,
+       0xa84c3,
+       0x200701,
+       0x200301,
+       0x200081,
+       0x298602,
+       0x36c044,
+       0x384383,
+       0x200181,
+       0x200401,
+       0x200041,
+       0x200101,
+       0x2e9907,
+       0x2eab8f,
+       0x340446,
+       0x200281,
+       0x37f6c6,
+       0x200e81,
+       0x2008c1,
+       0x332a0e,
+       0x200441,
+       0x200983,
+       0x201301,
+       0x270e85,
+       0x20f942,
+       0x264a85,
+       0x200341,
+       0x200801,
+       0x2002c1,
+       0x20b0c2,
+       0x2000c1,
+       0x200201,
+       0x200bc1,
+       0x2005c1,
+       0x201cc1,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x219503,
+       0x2a84c3,
+       0x2e9dc3,
+       0x8d688,
+       0x209703,
+       0x205503,
+       0x20803,
+       0x200983,
+       0x14e7e88,
+       0x16d208,
+       0x44e04,
+       0x14e7e8a,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x205503,
+       0x200983,
+       0x2030c3,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2d5f04,
+       0x200983,
+       0x27a305,
+       0x33b804,
+       0x2a84c3,
+       0x205503,
+       0x200983,
+       0x225ca,
+       0xd5284,
+       0x10c9c6,
+       0x2099c2,
+       0x2a84c3,
+       0x230309,
+       0x232403,
+       0x3034c9,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x2ed648,
+       0x22ca47,
+       0x373605,
+       0x18ed88,
+       0x1b7407,
+       0x2d20a,
+       0xecb,
+       0x4ab87,
+       0x3d2c8,
+       0x1b1b8a,
+       0x10a48,
+       0x12e3c9,
+       0x264c7,
+       0x3be87,
+       0x152b08,
+       0x708,
+       0x3df8f,
+       0x11d85,
+       0xa07,
+       0x1ae886,
+       0x137607,
+       0x3d586,
+       0x8f2c8,
+       0xa5606,
+       0x151647,
+       0x19c9,
+       0x1aa1c7,
+       0xa46c9,
+       0xb4a09,
+       0xbeec6,
+       0xc0e08,
+       0xbfcc5,
+       0x4eb4a,
+       0xca988,
+       0xb1b43,
+       0xd2648,
+       0x32607,
+       0x6d505,
+       0x69c50,
+       0x8003,
+       0x1aa047,
+       0x15ec5,
+       0xe9748,
+       0x13ce05,
+       0x11ed83,
+       0x6fd48,
+       0xcd46,
+       0x42849,
+       0xaa147,
+       0x6fa0b,
+       0x14ac44,
+       0xfa544,
+       0x10398b,
+       0x103f48,
+       0x104d47,
+       0x129845,
+       0x2a84c3,
+       0x232403,
+       0x2163c3,
+       0x200983,
+       0x22a403,
+       0x2e9dc3,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x43f8b,
+       0x205702,
+       0x2099c2,
+       0x200983,
+       0x16d208,
+       0x205702,
+       0x2099c2,
+       0x20d882,
+       0x201fc2,
+       0x203d02,
+       0x205503,
+       0x200442,
+       0x205702,
+       0x38d2c3,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x20d882,
+       0x2e9dc3,
+       0x244183,
+       0x209703,
+       0x211cc4,
+       0x205503,
+       0x216b03,
+       0x200983,
+       0x308d44,
+       0x25ed03,
+       0x2e9dc3,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x204e83,
+       0x200983,
+       0x39f847,
+       0x2a84c3,
+       0x2614c7,
+       0x2c7ac6,
+       0x219203,
+       0x218343,
+       0x2e9dc3,
+       0x2143c3,
+       0x3b1384,
+       0x37ef04,
+       0x31ea46,
+       0x20d143,
+       0x205503,
+       0x200983,
+       0x27a305,
+       0x318284,
+       0x3b2a43,
+       0x38b743,
+       0x2c4647,
+       0x33e885,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x28e87,
+       0x205942,
+       0x287003,
+       0x2bf143,
+       0x38d2c3,
+       0x626a84c3,
+       0x202242,
+       0x232403,
+       0x2032c3,
+       0x2e9dc3,
+       0x3b1384,
+       0x353903,
+       0x315e03,
+       0x209703,
+       0x211cc4,
+       0x62a04642,
+       0x205503,
+       0x200983,
+       0x2082c3,
+       0x229543,
+       0x212982,
+       0x25ed03,
+       0x16d208,
+       0x2e9dc3,
+       0x169c3,
+       0x26f744,
+       0x38d2c3,
+       0x2099c2,
+       0x2a84c3,
+       0x235ac4,
+       0x232403,
+       0x2e9dc3,
+       0x3b1384,
+       0x244183,
+       0x282104,
+       0x210444,
+       0x2d43c6,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x201303,
+       0x25fe86,
+       0x13f08b,
+       0x1cdc6,
+       0x5eb4a,
+       0x107e4a,
+       0x16d208,
+       0x2142c4,
+       0x63ea84c3,
+       0x38d284,
+       0x232403,
+       0x256e84,
+       0x2e9dc3,
+       0x391683,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x56243,
+       0x32f78b,
+       0x3a140a,
+       0x3b9bcc,
+       0xda688,
+       0x205702,
+       0x2099c2,
+       0x20d882,
+       0x2a9305,
+       0x3b1384,
+       0x202342,
+       0x209703,
+       0x210444,
+       0x200c82,
+       0x200442,
+       0x209842,
+       0x212982,
+       0x18d2c3,
+       0x19f02,
+       0x2a1cc9,
+       0x25d548,
+       0x309a89,
+       0x337449,
+       0x23490a,
+       0x23634a,
+       0x20cc02,
+       0x21b102,
+       0x99c2,
+       0x2a84c3,
+       0x204682,
+       0x23de86,
+       0x35d882,
+       0x201242,
+       0x20124e,
+       0x21898e,
+       0x27b107,
+       0x205487,
+       0x275d02,
+       0x232403,
+       0x2e9dc3,
+       0x200042,
+       0x201fc2,
+       0x4a5c3,
+       0x2eec0f,
+       0x200f42,
+       0x32c787,
+       0x2c7d07,
+       0x2d3907,
+       0x2ad24c,
+       0x3151cc,
+       0x3a3a44,
+       0x27c6ca,
+       0x2188c2,
+       0x20be02,
+       0x2b6fc4,
+       0x2226c2,
+       0x2c2702,
+       0x315404,
+       0x20cec2,
+       0x200282,
+       0x6343,
+       0x2a5687,
+       0x2352c5,
+       0x201f42,
+       0x2eeb84,
+       0x352bc2,
+       0x2da248,
+       0x205503,
+       0x3b0208,
+       0x200d42,
+       0x233385,
+       0x3b04c6,
+       0x200983,
+       0x20ba02,
+       0x2ea507,
+       0xf942,
+       0x26b005,
+       0x3a9f45,
+       0x201642,
+       0x242b02,
+       0x3b7a8a,
+       0x2671ca,
+       0x202c42,
+       0x2e4744,
+       0x2002c2,
+       0x206888,
+       0x201c82,
+       0x30a848,
+       0x2feb47,
+       0x2ff649,
+       0x26b082,
+       0x305645,
+       0x33bc85,
+       0x22dd4b,
+       0x2c6c4c,
+       0x22e848,
+       0x3188c8,
+       0x22a282,
+       0x35f782,
+       0x205702,
+       0x16d208,
+       0x2099c2,
+       0x2a84c3,
+       0x20d882,
+       0x200c82,
+       0x200442,
+       0x200983,
+       0x209842,
+       0x205702,
+       0x652099c2,
+       0x656e9dc3,
+       0x206343,
+       0x202342,
+       0x205503,
+       0x375cc3,
+       0x200983,
+       0x2e87c3,
+       0x275d46,
+       0x1614843,
+       0x16d208,
+       0x192345,
+       0xa6a8d,
+       0xa4dca,
+       0x65c87,
+       0x65e011c2,
+       0x66200242,
+       0x66600ec2,
+       0x66a00c02,
+       0x66e0de02,
+       0x67201ec2,
+       0x16fc07,
+       0x676099c2,
+       0x67a301c2,
+       0x67e09982,
+       0x68200dc2,
+       0x218983,
+       0x9e04,
+       0x225d83,
+       0x686149c2,
+       0x68a00182,
+       0x49f47,
+       0x68e03002,
+       0x69202e42,
+       0x69600b42,
+       0x69a02bc2,
+       0x69e029c2,
+       0x6a201fc2,
+       0xb3985,
+       0x234543,
+       0x202b84,
+       0x6a6226c2,
+       0x6aa03a82,
+       0x6ae03202,
+       0x16c90b,
+       0x6b200e82,
+       0x6ba49a02,
+       0x6be02342,
+       0x6c203d02,
+       0x6c60f242,
+       0x6ca0ec42,
+       0x6ce0e602,
+       0x6d2675c2,
+       0x6d604642,
+       0x6da01b42,
+       0x6de00c82,
+       0x6e2042c2,
+       0x6e61c702,
+       0x6ea00e42,
+       0x7f1c4,
+       0x350703,
+       0x6ee33082,
+       0x6f216982,
+       0x6f603402,
+       0x6fa089c2,
+       0x6fe00442,
+       0x702056c2,
+       0x44107,
+       0x70601302,
+       0x70a07302,
+       0x70e09842,
+       0x71218942,
+       0xf484c,
+       0x71621c82,
+       0x71a3ab02,
+       0x71e11602,
+       0x72201682,
+       0x72601f82,
+       0x72a34a82,
+       0x72e00202,
+       0x7320e8c2,
+       0x736724c2,
+       0x73a56642,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0xa203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x6b753903,
+       0x20a203,
+       0x2d6d44,
+       0x25d446,
+       0x2f1743,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x219f02,
+       0x219f02,
+       0x353903,
+       0x20a203,
+       0x742a84c3,
+       0x232403,
+       0x37ac03,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x16d208,
+       0x2099c2,
+       0x2a84c3,
+       0x205503,
+       0x200983,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x2030c4,
+       0x2099c2,
+       0x2a84c3,
+       0x2028c3,
+       0x232403,
+       0x249944,
+       0x2163c3,
+       0x2e9dc3,
+       0x3b1384,
+       0x244183,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x23e743,
+       0x373605,
+       0x2a1fc3,
+       0x25ed03,
+       0x2099c2,
+       0x2a84c3,
+       0x353903,
+       0x205503,
+       0x200983,
+       0x205702,
+       0x38d2c3,
+       0x16d208,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x22f706,
+       0x3b1384,
+       0x244183,
+       0x211cc4,
+       0x205503,
+       0x200983,
+       0x201303,
+       0x2a84c3,
+       0x232403,
+       0x205503,
+       0x200983,
+       0x14bb147,
+       0x2a84c3,
+       0x1cdc6,
+       0x232403,
+       0x2e9dc3,
+       0xdba46,
+       0x205503,
+       0x200983,
+       0x3149c8,
+       0x318709,
+       0x328b89,
+       0x333808,
+       0x37dc48,
+       0x37dc49,
+       0x24318d,
+       0x2ee80f,
+       0x251490,
+       0x34848d,
+       0x3638cc,
+       0x37f98b,
+       0x98605,
+       0x205702,
+       0x33e6c5,
+       0x200243,
+       0x772099c2,
+       0x232403,
+       0x2e9dc3,
+       0x343ec7,
+       0x206a43,
+       0x209703,
+       0x205503,
+       0x21c2c3,
+       0x20dcc3,
+       0x204e83,
+       0x200983,
+       0x2efec6,
+       0x20b0c2,
+       0x25ed03,
+       0x16d208,
+       0x205702,
+       0x38d2c3,
+       0x2099c2,
+       0x2a84c3,
+       0x232403,
+       0x2e9dc3,
+       0x3b1384,
+       0x209703,
+       0x205503,
+       0x200983,
+       0x214843,
+       0x14f53c6,
+       0x205702,
+       0x2099c2,
+       0x2e9dc3,
+       0x209703,
+       0x200983,
+}
+
+// children is the list of nodes' children, the parent's wildcard bit and the
+// parent's node type. If a node has no children then their children index
+// will be in the range [0, 6), depending on the wildcard bit and node type.
+//
+// The layout within the uint32, from MSB to LSB, is:
+//     [ 1 bits] unused
+//     [ 1 bits] wildcard bit
+//     [ 2 bits] node type
+//     [14 bits] high nodes index (exclusive) of children
+//     [14 bits] low nodes index (inclusive) of children
+var children = [...]uint32{
+       0x0,
+       0x10000000,
+       0x20000000,
+       0x40000000,
+       0x50000000,
+       0x60000000,
+       0x184c60d,
+       0x1850613,
+       0x1870614,
+       0x19cc61c,
+       0x19e0673,
+       0x19f4678,
+       0x1a0467d,
+       0x1a20681,
+       0x1a24688,
+       0x1a3c689,
+       0x1a6468f,
+       0x1a68699,
+       0x1a8069a,
+       0x1a846a0,
+       0x1a886a1,
+       0x1ab06a2,
+       0x1ab46ac,
+       0x21abc6ad,
+       0x1b046af,
+       0x1b086c1,
+       0x1b286c2,
+       0x1b3c6ca,
+       0x1b406cf,
+       0x1b706d0,
+       0x1b8c6dc,
+       0x1bb46e3,
+       0x1bc06ed,
+       0x1bc46f0,
+       0x1c5c6f1,
+       0x1c70717,
+       0x1c8471c,
+       0x1cb4721,
+       0x1cc472d,
+       0x1cd8731,
+       0x1cfc736,
+       0x1e3473f,
+       0x1e3878d,
+       0x1ea478e,
+       0x1f107a9,
+       0x1f247c4,
+       0x1f387c9,
+       0x1f407ce,
+       0x1f507d0,
+       0x1f547d4,
+       0x1f6c7d5,
+       0x1fb87db,
+       0x1fd47ee,
+       0x1fd87f5,
+       0x1fdc7f6,
+       0x1fe87f7,
+       0x20247fa,
+       0x62028809,
+       0x203c80a,
+       0x205080f,
+       0x2054814,
+       0x2064815,
+       0x2114819,
+       0x2118845,
+       0x22124846,
+       0x2212c849,
+       0x216484b,
+       0x2168859,
+       0x25b885a,
+       0x2265896e,
+       0x2265c996,
+       0x22660997,
+       0x2266c998,
+       0x2267099b,
+       0x2267c99c,
+       0x2268099f,
+       0x226849a0,
+       0x226889a1,
+       0x2268c9a2,
+       0x226909a3,
+       0x2269c9a4,
+       0x226a09a7,
+       0x226ac9a8,
+       0x226b09ab,
+       0x226b49ac,
+       0x226b89ad,
+       0x226c49ae,
+       0x226c89b1,
+       0x226cc9b2,
+       0x226d09b3,
+       0x26d49b4,
+       0x226d89b5,
+       0x226e49b6,
+       0x226e89b9,
+       0x26f09ba,
+       0x227089bc,
+       0x2270c9c2,
+       0x27189c3,
+       0x2271c9c6,
+       0x27209c7,
+       0x227249c8,
+       0x27409c9,
+       0x27589d0,
+       0x275c9d6,
+       0x276c9d7,
+       0x27749db,
+       0x27a89dd,
+       0x27ac9ea,
+       0x27bc9eb,
+       0x28609ef,
+       0x22864a18,
+       0x286ca19,
+       0x2870a1b,
+       0x2888a1c,
+       0x289ca22,
+       0x28c4a27,
+       0x28e4a31,
+       0x2914a39,
+       0x293ca45,
+       0x2940a4f,
+       0x2964a50,
+       0x2968a59,
+       0x297ca5a,
+       0x2980a5f,
+       0x2984a60,
+       0x29a4a61,
+       0x29c0a69,
+       0x29c4a70,
+       0x229c8a71,
+       0x29cca72,
+       0x29d0a73,
+       0x29e0a74,
+       0x29e4a78,
+       0x2a5ca79,
+       0x2a78a97,
+       0x2a88a9e,
+       0x2a9caa2,
+       0x2ab4aa7,
+       0x2ac8aad,
+       0x2ae0ab2,
+       0x2ae4ab8,
+       0x2afcab9,
+       0x2b14abf,
+       0x2b30ac5,
+       0x2b48acc,
+       0x2ba8ad2,
+       0x2bc0aea,
+       0x2bc4af0,
+       0x2bd8af1,
+       0x2c1caf6,
+       0x2c9cb07,
+       0x2cc8b27,
+       0x2cccb32,
+       0x2cd4b33,
+       0x2cf4b35,
+       0x2cf8b3d,
+       0x2d18b3e,
+       0x2d20b46,
+       0x2d5cb48,
+       0x2d9cb57,
+       0x2da0b67,
+       0x2e00b68,
+       0x2e04b80,
+       0x22e08b81,
+       0x2e20b82,
+       0x2e44b88,
+       0x2e64b91,
+       0x3428b99,
+       0x3434d0a,
+       0x3454d0d,
+       0x3610d15,
+       0x36e0d84,
+       0x3750db8,
+       0x37a8dd4,
+       0x3890dea,
+       0x38e8e24,
+       0x3924e3a,
+       0x3a20e49,
+       0x3aece88,
+       0x3b84ebb,
+       0x3c14ee1,
+       0x3c78f05,
+       0x3eb0f1e,
+       0x3f68fac,
+       0x4034fda,
+       0x408100d,
+       0x4109020,
+       0x4145042,
+       0x4195051,
+       0x420d065,
+       0x64211083,
+       0x64215084,
+       0x64219085,
+       0x4295086,
+       0x42f10a5,
+       0x436d0bc,
+       0x43e50db,
+       0x44650f9,
+       0x44d1119,
+       0x45fd134,
+       0x465517f,
+       0x64659195,
+       0x46f1196,
+       0x47791bc,
+       0x47c51de,
+       0x482d1f1,
+       0x48d520b,
+       0x499d235,
+       0x4a05267,
+       0x4b19281,
+       0x64b1d2c6,
+       0x64b212c7,
+       0x4b7d2c8,
+       0x4bd92df,
+       0x4c692f6,
+       0x4ce531a,
+       0x4d29339,
+       0x4e0d34a,
+       0x4e41383,
+       0x4ea1390,
+       0x4f153a8,
+       0x4f9d3c5,
+       0x4fdd3e7,
+       0x504d3f7,
+       0x65051413,
+       0x65055414,
+       0x25059415,
+       0x5071416,
+       0x508d41c,
+       0x50d1423,
+       0x50e1434,
+       0x50f9438,
+       0x517143e,
+       0x517945c,
+       0x518d45e,
+       0x51a5463,
+       0x51cd469,
+       0x51d1473,
+       0x51d9474,
+       0x51ed476,
+       0x520947b,
+       0x520d482,
+       0x5215483,
+       0x5251485,
+       0x5265494,
+       0x526d499,
+       0x527549b,
+       0x527949d,
+       0x529d49e,
+       0x52c14a7,
+       0x52d94b0,
+       0x52dd4b6,
+       0x52e54b7,
+       0x52e94b9,
+       0x534d4ba,
+       0x53514d3,
+       0x53754d4,
+       0x53954dd,
+       0x53b14e5,
+       0x53c14ec,
+       0x53d54f0,
+       0x53d94f5,
+       0x53e14f6,
+       0x53f54f8,
+       0x54054fd,
+       0x5409501,
+       0x5425502,
+       0x5cb5509,
+       0x5ced72d,
+       0x5d1973b,
+       0x5d31746,
+       0x5d5174c,
+       0x5d71754,
+       0x5db575c,
+       0x5dbd76d,
+       0x25dc176f,
+       0x25dc5770,
+       0x5dcd771,
+       0x5f29773,
+       0x25f2d7ca,
+       0x25f3d7cb,
+       0x25f457cf,
+       0x25f517d1,
+       0x5f557d4,
+       0x5f597d5,
+       0x5f817d6,
+       0x5fa97e0,
+       0x5fad7ea,
+       0x5fe57eb,
+       0x5ff97f9,
+       0x6b517fe,
+       0x6b55ad4,
+       0x6b59ad5,
+       0x26b5dad6,
+       0x6b61ad7,
+       0x26b65ad8,
+       0x6b69ad9,
+       0x26b75ada,
+       0x6b79add,
+       0x6b7dade,
+       0x26b81adf,
+       0x6b85ae0,
+       0x26b8dae1,
+       0x6b91ae3,
+       0x6b95ae4,
+       0x26ba5ae5,
+       0x6ba9ae9,
+       0x6badaea,
+       0x6bb1aeb,
+       0x6bb5aec,
+       0x26bb9aed,
+       0x6bbdaee,
+       0x6bc1aef,
+       0x6bc5af0,
+       0x6bc9af1,
+       0x26bd1af2,
+       0x6bd5af4,
+       0x6bd9af5,
+       0x6bddaf6,
+       0x26be1af7,
+       0x6be5af8,
+       0x26bedaf9,
+       0x26bf1afb,
+       0x6c0dafc,
+       0x6c19b03,
+       0x6c59b06,
+       0x6c5db16,
+       0x6c81b17,
+       0x6c85b20,
+       0x6c89b21,
+       0x6e01b22,
+       0x26e05b80,
+       0x26e0db81,
+       0x26e11b83,
+       0x26e15b84,
+       0x6e1db85,
+       0x6ef9b87,
+       0x26efdbbe,
+       0x6f01bbf,
+       0x6f2dbc0,
+       0x6f31bcb,
+       0x6f51bcc,
+       0x6f5dbd4,
+       0x6f7dbd7,
+       0x6fb5bdf,
+       0x724dbed,
+       0x7309c93,
+       0x731dcc2,
+       0x7351cc7,
+       0x7381cd4,
+       0x739dce0,
+       0x73c1ce7,
+       0x73ddcf0,
+       0x73f9cf7,
+       0x741dcfe,
+       0x742dd07,
+       0x7431d0b,
+       0x7465d0c,
+       0x7481d19,
+       0x74edd20,
+       0x274f1d3b,
+       0x7515d3c,
+       0x7535d45,
+       0x7549d4d,
+       0x755dd52,
+       0x7561d57,
+       0x7581d58,
+       0x7625d60,
+       0x7641d89,
+       0x7661d90,
+       0x7665d98,
+       0x766dd99,
+       0x7671d9b,
+       0x7685d9c,
+       0x76a5da1,
+       0x76b1da9,
+       0x76bddac,
+       0x76eddaf,
+       0x77bddbb,
+       0x77c1def,
+       0x77d5df0,
+       0x77d9df5,
+       0x77f1df6,
+       0x77f5dfc,
+       0x7801dfd,
+       0x7805e00,
+       0x7821e01,
+       0x785de08,
+       0x7861e17,
+       0x7881e18,
+       0x78d1e20,
+       0x78ede34,
+       0x7941e3b,
+       0x7945e50,
+       0x7949e51,
+       0x794de52,
+       0x7991e53,
+       0x79a1e64,
+       0x79dde68,
+       0x79e1e77,
+       0x7a11e78,
+       0x7b59e84,
+       0x7b7ded6,
+       0x7ba9edf,
+       0x7bb5eea,
+       0x7bbdeed,
+       0x7ccdeef,
+       0x7cd9f33,
+       0x7ce5f36,
+       0x7cf1f39,
+       0x7cfdf3c,
+       0x7d09f3f,
+       0x7d15f42,
+       0x7d21f45,
+       0x7d2df48,
+       0x7d39f4b,
+       0x7d45f4e,
+       0x7d51f51,
+       0x7d5df54,
+       0x7d69f57,
+       0x7d71f5a,
+       0x7d7df5c,
+       0x7d89f5f,
+       0x7d95f62,
+       0x7da1f65,
+       0x7dadf68,
+       0x7db9f6b,
+       0x7dc5f6e,
+       0x7dd1f71,
+       0x7dddf74,
+       0x7de9f77,
+       0x7df5f7a,
+       0x7e01f7d,
+       0x7e0df80,
+       0x7e19f83,
+       0x7e25f86,
+       0x7e31f89,
+       0x7e3df8c,
+       0x7e45f8f,
+       0x7e51f91,
+       0x7e5df94,
+       0x7e69f97,
+       0x7e75f9a,
+       0x7e81f9d,
+       0x7e8dfa0,
+       0x7e99fa3,
+       0x7ea5fa6,
+       0x7eb1fa9,
+       0x7ebdfac,
+       0x7ec9faf,
+       0x7ed5fb2,
+       0x7ee1fb5,
+       0x7ee9fb8,
+       0x7ef5fba,
+       0x7f01fbd,
+       0x7f0dfc0,
+       0x7f19fc3,
+       0x7f25fc6,
+       0x7f31fc9,
+       0x7f3dfcc,
+       0x7f49fcf,
+       0x7f4dfd2,
+       0x7f59fd3,
+       0x7f71fd6,
+       0x7f75fdc,
+       0x7f85fdd,
+       0x7f9dfe1,
+       0x7fe1fe7,
+       0x7ff5ff8,
+       0x8029ffd,
+       0x803a00a,
+       0x805a00e,
+       0x8072016,
+       0x808a01c,
+       0x808e022,
+       0x280d2023,
+       0x80d6034,
+       0x8102035,
+       0x8106040,
+       0x811a041,
+}
+
+// max children 479 (capacity 511)
+// max text offset 28411 (capacity 32767)
+// max text length 36 (capacity 63)
+// max hi 8262 (capacity 16383)
+// max lo 8257 (capacity 16383)
diff --git a/vendor/golang.org/x/text/LICENSE b/vendor/golang.org/x/text/LICENSE
new file mode 100644 (file)
index 0000000..6a66aea
--- /dev/null
@@ -0,0 +1,27 @@
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/golang.org/x/text/PATENTS b/vendor/golang.org/x/text/PATENTS
new file mode 100644 (file)
index 0000000..7330990
--- /dev/null
@@ -0,0 +1,22 @@
+Additional IP Rights Grant (Patents)
+
+"This implementation" means the copyrightable works distributed by
+Google as part of the Go project.
+
+Google hereby grants to You a perpetual, worldwide, non-exclusive,
+no-charge, royalty-free, irrevocable (except as stated in this section)
+patent license to make, have made, use, offer to sell, sell, import,
+transfer and otherwise run, modify and propagate the contents of this
+implementation of Go, where such license applies only to those patent
+claims, both currently owned or controlled by Google and acquired in
+the future, licensable by Google that are necessarily infringed by this
+implementation of Go.  This grant does not include claims that would be
+infringed only as a consequence of further modification of this
+implementation.  If you or your agent or exclusive licensee institute or
+order or agree to the institution of patent litigation against any
+entity (including a cross-claim or counterclaim in a lawsuit) alleging
+that this implementation of Go or any code incorporated within this
+implementation of Go constitutes direct or contributory patent
+infringement, or inducement of patent infringement, then any patent
+rights granted to you under this License for this implementation of Go
+shall terminate as of the date such litigation is filed.
diff --git a/vendor/golang.org/x/text/internal/gen/code.go b/vendor/golang.org/x/text/internal/gen/code.go
new file mode 100644 (file)
index 0000000..d7031b6
--- /dev/null
@@ -0,0 +1,351 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package gen
+
+import (
+       "bytes"
+       "encoding/gob"
+       "fmt"
+       "hash"
+       "hash/fnv"
+       "io"
+       "log"
+       "os"
+       "reflect"
+       "strings"
+       "unicode"
+       "unicode/utf8"
+)
+
+// This file contains utilities for generating code.
+
+// TODO: other write methods like:
+// - slices, maps, types, etc.
+
+// CodeWriter is a utility for writing structured code. It computes the content
+// hash and size of written content. It ensures there are newlines between
+// written code blocks.
+type CodeWriter struct {
+       buf  bytes.Buffer
+       Size int
+       Hash hash.Hash32 // content hash
+       gob  *gob.Encoder
+       // For comments we skip the usual one-line separator if they are followed by
+       // a code block.
+       skipSep bool
+}
+
+func (w *CodeWriter) Write(p []byte) (n int, err error) {
+       return w.buf.Write(p)
+}
+
+// NewCodeWriter returns a new CodeWriter.
+func NewCodeWriter() *CodeWriter {
+       h := fnv.New32()
+       return &CodeWriter{Hash: h, gob: gob.NewEncoder(h)}
+}
+
+// WriteGoFile appends the buffer with the total size of all created structures
+// and writes it as a Go file to the the given file with the given package name.
+func (w *CodeWriter) WriteGoFile(filename, pkg string) {
+       f, err := os.Create(filename)
+       if err != nil {
+               log.Fatalf("Could not create file %s: %v", filename, err)
+       }
+       defer f.Close()
+       if _, err = w.WriteGo(f, pkg); err != nil {
+               log.Fatalf("Error writing file %s: %v", filename, err)
+       }
+}
+
+// WriteGo appends the buffer with the total size of all created structures and
+// writes it as a Go file to the the given writer with the given package name.
+func (w *CodeWriter) WriteGo(out io.Writer, pkg string) (n int, err error) {
+       sz := w.Size
+       w.WriteComment("Total table size %d bytes (%dKiB); checksum: %X\n", sz, sz/1024, w.Hash.Sum32())
+       defer w.buf.Reset()
+       return WriteGo(out, pkg, w.buf.Bytes())
+}
+
+func (w *CodeWriter) printf(f string, x ...interface{}) {
+       fmt.Fprintf(w, f, x...)
+}
+
+func (w *CodeWriter) insertSep() {
+       if w.skipSep {
+               w.skipSep = false
+               return
+       }
+       // Use at least two newlines to ensure a blank space between the previous
+       // block. WriteGoFile will remove extraneous newlines.
+       w.printf("\n\n")
+}
+
+// WriteComment writes a comment block. All line starts are prefixed with "//".
+// Initial empty lines are gobbled. The indentation for the first line is
+// stripped from consecutive lines.
+func (w *CodeWriter) WriteComment(comment string, args ...interface{}) {
+       s := fmt.Sprintf(comment, args...)
+       s = strings.Trim(s, "\n")
+
+       // Use at least two newlines to ensure a blank space between the previous
+       // block. WriteGoFile will remove extraneous newlines.
+       w.printf("\n\n// ")
+       w.skipSep = true
+
+       // strip first indent level.
+       sep := "\n"
+       for ; len(s) > 0 && (s[0] == '\t' || s[0] == ' '); s = s[1:] {
+               sep += s[:1]
+       }
+
+       strings.NewReplacer(sep, "\n// ", "\n", "\n// ").WriteString(w, s)
+
+       w.printf("\n")
+}
+
+func (w *CodeWriter) writeSizeInfo(size int) {
+       w.printf("// Size: %d bytes\n", size)
+}
+
+// WriteConst writes a constant of the given name and value.
+func (w *CodeWriter) WriteConst(name string, x interface{}) {
+       w.insertSep()
+       v := reflect.ValueOf(x)
+
+       switch v.Type().Kind() {
+       case reflect.String:
+               w.printf("const %s %s = ", name, typeName(x))
+               w.WriteString(v.String())
+               w.printf("\n")
+       default:
+               w.printf("const %s = %#v\n", name, x)
+       }
+}
+
+// WriteVar writes a variable of the given name and value.
+func (w *CodeWriter) WriteVar(name string, x interface{}) {
+       w.insertSep()
+       v := reflect.ValueOf(x)
+       oldSize := w.Size
+       sz := int(v.Type().Size())
+       w.Size += sz
+
+       switch v.Type().Kind() {
+       case reflect.String:
+               w.printf("var %s %s = ", name, typeName(x))
+               w.WriteString(v.String())
+       case reflect.Struct:
+               w.gob.Encode(x)
+               fallthrough
+       case reflect.Slice, reflect.Array:
+               w.printf("var %s = ", name)
+               w.writeValue(v)
+               w.writeSizeInfo(w.Size - oldSize)
+       default:
+               w.printf("var %s %s = ", name, typeName(x))
+               w.gob.Encode(x)
+               w.writeValue(v)
+               w.writeSizeInfo(w.Size - oldSize)
+       }
+       w.printf("\n")
+}
+
+func (w *CodeWriter) writeValue(v reflect.Value) {
+       x := v.Interface()
+       switch v.Kind() {
+       case reflect.String:
+               w.WriteString(v.String())
+       case reflect.Array:
+               // Don't double count: callers of WriteArray count on the size being
+               // added, so we need to discount it here.
+               w.Size -= int(v.Type().Size())
+               w.writeSlice(x, true)
+       case reflect.Slice:
+               w.writeSlice(x, false)
+       case reflect.Struct:
+               w.printf("%s{\n", typeName(v.Interface()))
+               t := v.Type()
+               for i := 0; i < v.NumField(); i++ {
+                       w.printf("%s: ", t.Field(i).Name)
+                       w.writeValue(v.Field(i))
+                       w.printf(",\n")
+               }
+               w.printf("}")
+       default:
+               w.printf("%#v", x)
+       }
+}
+
+// WriteString writes a string literal.
+func (w *CodeWriter) WriteString(s string) {
+       s = strings.Replace(s, `\`, `\\`, -1)
+       io.WriteString(w.Hash, s) // content hash
+       w.Size += len(s)
+
+       const maxInline = 40
+       if len(s) <= maxInline {
+               w.printf("%q", s)
+               return
+       }
+
+       // We will render the string as a multi-line string.
+       const maxWidth = 80 - 4 - len(`"`) - len(`" +`)
+
+       // When starting on its own line, go fmt indents line 2+ an extra level.
+       n, max := maxWidth, maxWidth-4
+
+       // As per https://golang.org/issue/18078, the compiler has trouble
+       // compiling the concatenation of many strings, s0 + s1 + s2 + ... + sN,
+       // for large N. We insert redundant, explicit parentheses to work around
+       // that, lowering the N at any given step: (s0 + s1 + ... + s63) + (s64 +
+       // ... + s127) + etc + (etc + ... + sN).
+       explicitParens, extraComment := len(s) > 128*1024, ""
+       if explicitParens {
+               w.printf(`(`)
+               extraComment = "; the redundant, explicit parens are for https://golang.org/issue/18078"
+       }
+
+       // Print "" +\n, if a string does not start on its own line.
+       b := w.buf.Bytes()
+       if p := len(bytes.TrimRight(b, " \t")); p > 0 && b[p-1] != '\n' {
+               w.printf("\"\" + // Size: %d bytes%s\n", len(s), extraComment)
+               n, max = maxWidth, maxWidth
+       }
+
+       w.printf(`"`)
+
+       for sz, p, nLines := 0, 0, 0; p < len(s); {
+               var r rune
+               r, sz = utf8.DecodeRuneInString(s[p:])
+               out := s[p : p+sz]
+               chars := 1
+               if !unicode.IsPrint(r) || r == utf8.RuneError || r == '"' {
+                       switch sz {
+                       case 1:
+                               out = fmt.Sprintf("\\x%02x", s[p])
+                       case 2, 3:
+                               out = fmt.Sprintf("\\u%04x", r)
+                       case 4:
+                               out = fmt.Sprintf("\\U%08x", r)
+                       }
+                       chars = len(out)
+               }
+               if n -= chars; n < 0 {
+                       nLines++
+                       if explicitParens && nLines&63 == 63 {
+                               w.printf("\") + (\"")
+                       }
+                       w.printf("\" +\n\"")
+                       n = max - len(out)
+               }
+               w.printf("%s", out)
+               p += sz
+       }
+       w.printf(`"`)
+       if explicitParens {
+               w.printf(`)`)
+       }
+}
+
+// WriteSlice writes a slice value.
+func (w *CodeWriter) WriteSlice(x interface{}) {
+       w.writeSlice(x, false)
+}
+
+// WriteArray writes an array value.
+func (w *CodeWriter) WriteArray(x interface{}) {
+       w.writeSlice(x, true)
+}
+
+func (w *CodeWriter) writeSlice(x interface{}, isArray bool) {
+       v := reflect.ValueOf(x)
+       w.gob.Encode(v.Len())
+       w.Size += v.Len() * int(v.Type().Elem().Size())
+       name := typeName(x)
+       if isArray {
+               name = fmt.Sprintf("[%d]%s", v.Len(), name[strings.Index(name, "]")+1:])
+       }
+       if isArray {
+               w.printf("%s{\n", name)
+       } else {
+               w.printf("%s{ // %d elements\n", name, v.Len())
+       }
+
+       switch kind := v.Type().Elem().Kind(); kind {
+       case reflect.String:
+               for _, s := range x.([]string) {
+                       w.WriteString(s)
+                       w.printf(",\n")
+               }
+       case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
+               reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64:
+               // nLine and nBlock are the number of elements per line and block.
+               nLine, nBlock, format := 8, 64, "%d,"
+               switch kind {
+               case reflect.Uint8:
+                       format = "%#02x,"
+               case reflect.Uint16:
+                       format = "%#04x,"
+               case reflect.Uint32:
+                       nLine, nBlock, format = 4, 32, "%#08x,"
+               case reflect.Uint, reflect.Uint64:
+                       nLine, nBlock, format = 4, 32, "%#016x,"
+               case reflect.Int8:
+                       nLine = 16
+               }
+               n := nLine
+               for i := 0; i < v.Len(); i++ {
+                       if i%nBlock == 0 && v.Len() > nBlock {
+                               w.printf("// Entry %X - %X\n", i, i+nBlock-1)
+                       }
+                       x := v.Index(i).Interface()
+                       w.gob.Encode(x)
+                       w.printf(format, x)
+                       if n--; n == 0 {
+                               n = nLine
+                               w.printf("\n")
+                       }
+               }
+               w.printf("\n")
+       case reflect.Struct:
+               zero := reflect.Zero(v.Type().Elem()).Interface()
+               for i := 0; i < v.Len(); i++ {
+                       x := v.Index(i).Interface()
+                       w.gob.EncodeValue(v)
+                       if !reflect.DeepEqual(zero, x) {
+                               line := fmt.Sprintf("%#v,\n", x)
+                               line = line[strings.IndexByte(line, '{'):]
+                               w.printf("%d: ", i)
+                               w.printf(line)
+                       }
+               }
+       case reflect.Array:
+               for i := 0; i < v.Len(); i++ {
+                       w.printf("%d: %#v,\n", i, v.Index(i).Interface())
+               }
+       default:
+               panic("gen: slice elem type not supported")
+       }
+       w.printf("}")
+}
+
+// WriteType writes a definition of the type of the given value and returns the
+// type name.
+func (w *CodeWriter) WriteType(x interface{}) string {
+       t := reflect.TypeOf(x)
+       w.printf("type %s struct {\n", t.Name())
+       for i := 0; i < t.NumField(); i++ {
+               w.printf("\t%s %s\n", t.Field(i).Name, t.Field(i).Type)
+       }
+       w.printf("}\n")
+       return t.Name()
+}
+
+// typeName returns the name of the go type of x.
+func typeName(x interface{}) string {
+       t := reflect.ValueOf(x).Type()
+       return strings.Replace(fmt.Sprint(t), "main.", "", 1)
+}
diff --git a/vendor/golang.org/x/text/internal/gen/gen.go b/vendor/golang.org/x/text/internal/gen/gen.go
new file mode 100644 (file)
index 0000000..2acb035
--- /dev/null
@@ -0,0 +1,281 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package gen contains common code for the various code generation tools in the
+// text repository. Its usage ensures consistency between tools.
+//
+// This package defines command line flags that are common to most generation
+// tools. The flags allow for specifying specific Unicode and CLDR versions
+// in the public Unicode data repository (http://www.unicode.org/Public).
+//
+// A local Unicode data mirror can be set through the flag -local or the
+// environment variable UNICODE_DIR. The former takes precedence. The local
+// directory should follow the same structure as the public repository.
+//
+// IANA data can also optionally be mirrored by putting it in the iana directory
+// rooted at the top of the local mirror. Beware, though, that IANA data is not
+// versioned. So it is up to the developer to use the right version.
+package gen // import "golang.org/x/text/internal/gen"
+
+import (
+       "bytes"
+       "flag"
+       "fmt"
+       "go/build"
+       "go/format"
+       "io"
+       "io/ioutil"
+       "log"
+       "net/http"
+       "os"
+       "path"
+       "path/filepath"
+       "sync"
+       "unicode"
+
+       "golang.org/x/text/unicode/cldr"
+)
+
+var (
+       url = flag.String("url",
+               "http://www.unicode.org/Public",
+               "URL of Unicode database directory")
+       iana = flag.String("iana",
+               "http://www.iana.org",
+               "URL of the IANA repository")
+       unicodeVersion = flag.String("unicode",
+               getEnv("UNICODE_VERSION", unicode.Version),
+               "unicode version to use")
+       cldrVersion = flag.String("cldr",
+               getEnv("CLDR_VERSION", cldr.Version),
+               "cldr version to use")
+)
+
+func getEnv(name, def string) string {
+       if v := os.Getenv(name); v != "" {
+               return v
+       }
+       return def
+}
+
+// Init performs common initialization for a gen command. It parses the flags
+// and sets up the standard logging parameters.
+func Init() {
+       log.SetPrefix("")
+       log.SetFlags(log.Lshortfile)
+       flag.Parse()
+}
+
+const header = `// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package %s
+
+`
+
+// UnicodeVersion reports the requested Unicode version.
+func UnicodeVersion() string {
+       return *unicodeVersion
+}
+
+// UnicodeVersion reports the requested CLDR version.
+func CLDRVersion() string {
+       return *cldrVersion
+}
+
+// IsLocal reports whether data files are available locally.
+func IsLocal() bool {
+       dir, err := localReadmeFile()
+       if err != nil {
+               return false
+       }
+       if _, err = os.Stat(dir); err != nil {
+               return false
+       }
+       return true
+}
+
+// OpenUCDFile opens the requested UCD file. The file is specified relative to
+// the public Unicode root directory. It will call log.Fatal if there are any
+// errors.
+func OpenUCDFile(file string) io.ReadCloser {
+       return openUnicode(path.Join(*unicodeVersion, "ucd", file))
+}
+
+// OpenCLDRCoreZip opens the CLDR core zip file. It will call log.Fatal if there
+// are any errors.
+func OpenCLDRCoreZip() io.ReadCloser {
+       return OpenUnicodeFile("cldr", *cldrVersion, "core.zip")
+}
+
+// OpenUnicodeFile opens the requested file of the requested category from the
+// root of the Unicode data archive. The file is specified relative to the
+// public Unicode root directory. If version is "", it will use the default
+// Unicode version. It will call log.Fatal if there are any errors.
+func OpenUnicodeFile(category, version, file string) io.ReadCloser {
+       if version == "" {
+               version = UnicodeVersion()
+       }
+       return openUnicode(path.Join(category, version, file))
+}
+
+// OpenIANAFile opens the requested IANA file. The file is specified relative
+// to the IANA root, which is typically either http://www.iana.org or the
+// iana directory in the local mirror. It will call log.Fatal if there are any
+// errors.
+func OpenIANAFile(path string) io.ReadCloser {
+       return Open(*iana, "iana", path)
+}
+
+var (
+       dirMutex sync.Mutex
+       localDir string
+)
+
+const permissions = 0755
+
+func localReadmeFile() (string, error) {
+       p, err := build.Import("golang.org/x/text", "", build.FindOnly)
+       if err != nil {
+               return "", fmt.Errorf("Could not locate package: %v", err)
+       }
+       return filepath.Join(p.Dir, "DATA", "README"), nil
+}
+
+func getLocalDir() string {
+       dirMutex.Lock()
+       defer dirMutex.Unlock()
+
+       readme, err := localReadmeFile()
+       if err != nil {
+               log.Fatal(err)
+       }
+       dir := filepath.Dir(readme)
+       if _, err := os.Stat(readme); err != nil {
+               if err := os.MkdirAll(dir, permissions); err != nil {
+                       log.Fatalf("Could not create directory: %v", err)
+               }
+               ioutil.WriteFile(readme, []byte(readmeTxt), permissions)
+       }
+       return dir
+}
+
+const readmeTxt = `Generated by golang.org/x/text/internal/gen. DO NOT EDIT.
+
+This directory contains downloaded files used to generate the various tables
+in the golang.org/x/text subrepo.
+
+Note that the language subtag repo (iana/assignments/language-subtag-registry)
+and all other times in the iana subdirectory are not versioned and will need
+to be periodically manually updated. The easiest way to do this is to remove
+the entire iana directory. This is mostly of concern when updating the language
+package.
+`
+
+// Open opens subdir/path if a local directory is specified and the file exists,
+// where subdir is a directory relative to the local root, or fetches it from
+// urlRoot/path otherwise. It will call log.Fatal if there are any errors.
+func Open(urlRoot, subdir, path string) io.ReadCloser {
+       file := filepath.Join(getLocalDir(), subdir, filepath.FromSlash(path))
+       return open(file, urlRoot, path)
+}
+
+func openUnicode(path string) io.ReadCloser {
+       file := filepath.Join(getLocalDir(), filepath.FromSlash(path))
+       return open(file, *url, path)
+}
+
+// TODO: automatically periodically update non-versioned files.
+
+func open(file, urlRoot, path string) io.ReadCloser {
+       if f, err := os.Open(file); err == nil {
+               return f
+       }
+       r := get(urlRoot, path)
+       defer r.Close()
+       b, err := ioutil.ReadAll(r)
+       if err != nil {
+               log.Fatalf("Could not download file: %v", err)
+       }
+       os.MkdirAll(filepath.Dir(file), permissions)
+       if err := ioutil.WriteFile(file, b, permissions); err != nil {
+               log.Fatalf("Could not create file: %v", err)
+       }
+       return ioutil.NopCloser(bytes.NewReader(b))
+}
+
+func get(root, path string) io.ReadCloser {
+       url := root + "/" + path
+       fmt.Printf("Fetching %s...", url)
+       defer fmt.Println(" done.")
+       resp, err := http.Get(url)
+       if err != nil {
+               log.Fatalf("HTTP GET: %v", err)
+       }
+       if resp.StatusCode != 200 {
+               log.Fatalf("Bad GET status for %q: %q", url, resp.Status)
+       }
+       return resp.Body
+}
+
+// TODO: use Write*Version in all applicable packages.
+
+// WriteUnicodeVersion writes a constant for the Unicode version from which the
+// tables are generated.
+func WriteUnicodeVersion(w io.Writer) {
+       fmt.Fprintf(w, "// UnicodeVersion is the Unicode version from which the tables in this package are derived.\n")
+       fmt.Fprintf(w, "const UnicodeVersion = %q\n\n", UnicodeVersion())
+}
+
+// WriteCLDRVersion writes a constant for the CLDR version from which the
+// tables are generated.
+func WriteCLDRVersion(w io.Writer) {
+       fmt.Fprintf(w, "// CLDRVersion is the CLDR version from which the tables in this package are derived.\n")
+       fmt.Fprintf(w, "const CLDRVersion = %q\n\n", CLDRVersion())
+}
+
+// WriteGoFile prepends a standard file comment and package statement to the
+// given bytes, applies gofmt, and writes them to a file with the given name.
+// It will call log.Fatal if there are any errors.
+func WriteGoFile(filename, pkg string, b []byte) {
+       w, err := os.Create(filename)
+       if err != nil {
+               log.Fatalf("Could not create file %s: %v", filename, err)
+       }
+       defer w.Close()
+       if _, err = WriteGo(w, pkg, b); err != nil {
+               log.Fatalf("Error writing file %s: %v", filename, err)
+       }
+}
+
+// WriteGo prepends a standard file comment and package statement to the given
+// bytes, applies gofmt, and writes them to w.
+func WriteGo(w io.Writer, pkg string, b []byte) (n int, err error) {
+       src := []byte(fmt.Sprintf(header, pkg))
+       src = append(src, b...)
+       formatted, err := format.Source(src)
+       if err != nil {
+               // Print the generated code even in case of an error so that the
+               // returned error can be meaningfully interpreted.
+               n, _ = w.Write(src)
+               return n, err
+       }
+       return w.Write(formatted)
+}
+
+// Repackage rewrites a Go file from belonging to package main to belonging to
+// the given package.
+func Repackage(inFile, outFile, pkg string) {
+       src, err := ioutil.ReadFile(inFile)
+       if err != nil {
+               log.Fatalf("reading %s: %v", inFile, err)
+       }
+       const toDelete = "package main\n\n"
+       i := bytes.Index(src, []byte(toDelete))
+       if i < 0 {
+               log.Fatalf("Could not find %q in %s.", toDelete, inFile)
+       }
+       w := &bytes.Buffer{}
+       w.Write(src[i+len(toDelete):])
+       WriteGoFile(outFile, pkg, w.Bytes())
+}
diff --git a/vendor/golang.org/x/text/internal/triegen/compact.go b/vendor/golang.org/x/text/internal/triegen/compact.go
new file mode 100644 (file)
index 0000000..397b975
--- /dev/null
@@ -0,0 +1,58 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package triegen
+
+// This file defines Compacter and its implementations.
+
+import "io"
+
+// A Compacter generates an alternative, more space-efficient way to store a
+// trie value block. A trie value block holds all possible values for the last
+// byte of a UTF-8 encoded rune. Excluding ASCII characters, a trie value block
+// always has 64 values, as a UTF-8 encoding ends with a byte in [0x80, 0xC0).
+type Compacter interface {
+       // Size returns whether the Compacter could encode the given block as well
+       // as its size in case it can. len(v) is always 64.
+       Size(v []uint64) (sz int, ok bool)
+
+       // Store stores the block using the Compacter's compression method.
+       // It returns a handle with which the block can be retrieved.
+       // len(v) is always 64.
+       Store(v []uint64) uint32
+
+       // Print writes the data structures associated to the given store to w.
+       Print(w io.Writer) error
+
+       // Handler returns the name of a function that gets called during trie
+       // lookup for blocks generated by the Compacter. The function should be of
+       // the form func (n uint32, b byte) uint64, where n is the index returned by
+       // the Compacter's Store method and b is the last byte of the UTF-8
+       // encoding, where 0x80 <= b < 0xC0, for which to do the lookup in the
+       // block.
+       Handler() string
+}
+
+// simpleCompacter is the default Compacter used by builder. It implements a
+// normal trie block.
+type simpleCompacter builder
+
+func (b *simpleCompacter) Size([]uint64) (sz int, ok bool) {
+       return blockSize * b.ValueSize, true
+}
+
+func (b *simpleCompacter) Store(v []uint64) uint32 {
+       h := uint32(len(b.ValueBlocks) - blockOffset)
+       b.ValueBlocks = append(b.ValueBlocks, v)
+       return h
+}
+
+func (b *simpleCompacter) Print(io.Writer) error {
+       // Structures are printed in print.go.
+       return nil
+}
+
+func (b *simpleCompacter) Handler() string {
+       panic("Handler should be special-cased for this Compacter")
+}
diff --git a/vendor/golang.org/x/text/internal/triegen/print.go b/vendor/golang.org/x/text/internal/triegen/print.go
new file mode 100644 (file)
index 0000000..8d9f120
--- /dev/null
@@ -0,0 +1,251 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package triegen
+
+import (
+       "bytes"
+       "fmt"
+       "io"
+       "strings"
+       "text/template"
+)
+
+// print writes all the data structures as well as the code necessary to use the
+// trie to w.
+func (b *builder) print(w io.Writer) error {
+       b.Stats.NValueEntries = len(b.ValueBlocks) * blockSize
+       b.Stats.NValueBytes = len(b.ValueBlocks) * blockSize * b.ValueSize
+       b.Stats.NIndexEntries = len(b.IndexBlocks) * blockSize
+       b.Stats.NIndexBytes = len(b.IndexBlocks) * blockSize * b.IndexSize
+       b.Stats.NHandleBytes = len(b.Trie) * 2 * b.IndexSize
+
+       // If we only have one root trie, all starter blocks are at position 0 and
+       // we can access the arrays directly.
+       if len(b.Trie) == 1 {
+               // At this point we cannot refer to the generated tables directly.
+               b.ASCIIBlock = b.Name + "Values"
+               b.StarterBlock = b.Name + "Index"
+       } else {
+               // Otherwise we need to have explicit starter indexes in the trie
+               // structure.
+               b.ASCIIBlock = "t.ascii"
+               b.StarterBlock = "t.utf8Start"
+       }
+
+       b.SourceType = "[]byte"
+       if err := lookupGen.Execute(w, b); err != nil {
+               return err
+       }
+
+       b.SourceType = "string"
+       if err := lookupGen.Execute(w, b); err != nil {
+               return err
+       }
+
+       if err := trieGen.Execute(w, b); err != nil {
+               return err
+       }
+
+       for _, c := range b.Compactions {
+               if err := c.c.Print(w); err != nil {
+                       return err
+               }
+       }
+
+       return nil
+}
+
+func printValues(n int, values []uint64) string {
+       w := &bytes.Buffer{}
+       boff := n * blockSize
+       fmt.Fprintf(w, "\t// Block %#x, offset %#x", n, boff)
+       var newline bool
+       for i, v := range values {
+               if i%6 == 0 {
+                       newline = true
+               }
+               if v != 0 {
+                       if newline {
+                               fmt.Fprintf(w, "\n")
+                               newline = false
+                       }
+                       fmt.Fprintf(w, "\t%#02x:%#04x, ", boff+i, v)
+               }
+       }
+       return w.String()
+}
+
+func printIndex(b *builder, nr int, n *node) string {
+       w := &bytes.Buffer{}
+       boff := nr * blockSize
+       fmt.Fprintf(w, "\t// Block %#x, offset %#x", nr, boff)
+       var newline bool
+       for i, c := range n.children {
+               if i%8 == 0 {
+                       newline = true
+               }
+               if c != nil {
+                       v := b.Compactions[c.index.compaction].Offset + uint32(c.index.index)
+                       if v != 0 {
+                               if newline {
+                                       fmt.Fprintf(w, "\n")
+                                       newline = false
+                               }
+                               fmt.Fprintf(w, "\t%#02x:%#02x, ", boff+i, v)
+                       }
+               }
+       }
+       return w.String()
+}
+
+var (
+       trieGen = template.Must(template.New("trie").Funcs(template.FuncMap{
+               "printValues": printValues,
+               "printIndex":  printIndex,
+               "title":       strings.Title,
+               "dec":         func(x int) int { return x - 1 },
+               "psize": func(n int) string {
+                       return fmt.Sprintf("%d bytes (%.2f KiB)", n, float64(n)/1024)
+               },
+       }).Parse(trieTemplate))
+       lookupGen = template.Must(template.New("lookup").Parse(lookupTemplate))
+)
+
+// TODO: consider the return type of lookup. It could be uint64, even if the
+// internal value type is smaller. We will have to verify this with the
+// performance of unicode/norm, which is very sensitive to such changes.
+const trieTemplate = `{{$b := .}}{{$multi := gt (len .Trie) 1}}
+// {{.Name}}Trie. Total size: {{psize .Size}}. Checksum: {{printf "%08x" .Checksum}}.
+type {{.Name}}Trie struct { {{if $multi}}
+       ascii []{{.ValueType}} // index for ASCII bytes
+       utf8Start  []{{.IndexType}} // index for UTF-8 bytes >= 0xC0
+{{end}}}
+
+func new{{title .Name}}Trie(i int) *{{.Name}}Trie { {{if $multi}}
+       h := {{.Name}}TrieHandles[i]
+       return &{{.Name}}Trie{ {{.Name}}Values[uint32(h.ascii)<<6:], {{.Name}}Index[uint32(h.multi)<<6:] }
+}
+
+type {{.Name}}TrieHandle struct {
+       ascii, multi {{.IndexType}}
+}
+
+// {{.Name}}TrieHandles: {{len .Trie}} handles, {{.Stats.NHandleBytes}} bytes
+var {{.Name}}TrieHandles = [{{len .Trie}}]{{.Name}}TrieHandle{
+{{range .Trie}}        { {{.ASCIIIndex}}, {{.StarterIndex}} }, // {{printf "%08x" .Checksum}}: {{.Name}}
+{{end}}}{{else}}
+       return &{{.Name}}Trie{}
+}
+{{end}}
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *{{.Name}}Trie) lookupValue(n uint32, b byte) {{.ValueType}}{{$last := dec (len .Compactions)}} {
+       switch { {{range $i, $c := .Compactions}}
+               {{if eq $i $last}}default{{else}}case n < {{$c.Cutoff}}{{end}}:{{if ne $i 0}}
+                       n -= {{$c.Offset}}{{end}}
+                       return {{print $b.ValueType}}({{$c.Handler}}){{end}}
+       }
+}
+
+// {{.Name}}Values: {{len .ValueBlocks}} blocks, {{.Stats.NValueEntries}} entries, {{.Stats.NValueBytes}} bytes
+// The third block is the zero block.
+var {{.Name}}Values = [{{.Stats.NValueEntries}}]{{.ValueType}} {
+{{range $i, $v := .ValueBlocks}}{{printValues $i $v}}
+{{end}}}
+
+// {{.Name}}Index: {{len .IndexBlocks}} blocks, {{.Stats.NIndexEntries}} entries, {{.Stats.NIndexBytes}} bytes
+// Block 0 is the zero block.
+var {{.Name}}Index = [{{.Stats.NIndexEntries}}]{{.IndexType}} {
+{{range $i, $v := .IndexBlocks}}{{printIndex $b $i $v}}
+{{end}}}
+`
+
+// TODO: consider allowing zero-length strings after evaluating performance with
+// unicode/norm.
+const lookupTemplate = `
+// lookup{{if eq .SourceType "string"}}String{{end}} returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *{{.Name}}Trie) lookup{{if eq .SourceType "string"}}String{{end}}(s {{.SourceType}}) (v {{.ValueType}}, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return {{.ASCIIBlock}}[c0], 1
+       case c0 < 0xC2:
+               return 0, 1  // Illegal UTF-8: not a starter, not ASCII.
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return 0, 0
+               }
+               i := {{.StarterBlock}}[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c1), 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return 0, 0
+               }
+               i := {{.StarterBlock}}[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = {{.Name}}Index[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c2), 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return 0, 0
+               }
+               i := {{.StarterBlock}}[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = {{.Name}}Index[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = {{.Name}}Index[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return 0, 3 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c3), 4
+       }
+       // Illegal rune
+       return 0, 1
+}
+
+// lookup{{if eq .SourceType "string"}}String{{end}}Unsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *{{.Name}}Trie) lookup{{if eq .SourceType "string"}}String{{end}}Unsafe(s {{.SourceType}}) {{.ValueType}} {
+       c0 := s[0]
+       if c0 < 0x80 { // is ASCII
+               return {{.ASCIIBlock}}[c0]
+       }
+       i := {{.StarterBlock}}[c0]
+       if c0 < 0xE0 { // 2-byte UTF-8
+               return t.lookupValue(uint32(i), s[1])
+       }
+       i = {{.Name}}Index[uint32(i)<<6+uint32(s[1])]
+       if c0 < 0xF0 { // 3-byte UTF-8
+               return t.lookupValue(uint32(i), s[2])
+       }
+       i = {{.Name}}Index[uint32(i)<<6+uint32(s[2])]
+       if c0 < 0xF8 { // 4-byte UTF-8
+               return t.lookupValue(uint32(i), s[3])
+       }
+       return 0
+}
+`
diff --git a/vendor/golang.org/x/text/internal/triegen/triegen.go b/vendor/golang.org/x/text/internal/triegen/triegen.go
new file mode 100644 (file)
index 0000000..adb0108
--- /dev/null
@@ -0,0 +1,494 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package triegen implements a code generator for a trie for associating
+// unsigned integer values with UTF-8 encoded runes.
+//
+// Many of the go.text packages use tries for storing per-rune information.  A
+// trie is especially useful if many of the runes have the same value. If this
+// is the case, many blocks can be expected to be shared allowing for
+// information on many runes to be stored in little space.
+//
+// As most of the lookups are done directly on []byte slices, the tries use the
+// UTF-8 bytes directly for the lookup. This saves a conversion from UTF-8 to
+// runes and contributes a little bit to better performance. It also naturally
+// provides a fast path for ASCII.
+//
+// Space is also an issue. There are many code points defined in Unicode and as
+// a result tables can get quite large. So every byte counts. The triegen
+// package automatically chooses the smallest integer values to represent the
+// tables. Compacters allow further compression of the trie by allowing for
+// alternative representations of individual trie blocks.
+//
+// triegen allows generating multiple tries as a single structure. This is
+// useful when, for example, one wants to generate tries for several languages
+// that have a lot of values in common. Some existing libraries for
+// internationalization store all per-language data as a dynamically loadable
+// chunk. The go.text packages are designed with the assumption that the user
+// typically wants to compile in support for all supported languages, in line
+// with the approach common to Go to create a single standalone binary. The
+// multi-root trie approach can give significant storage savings in this
+// scenario.
+//
+// triegen generates both tables and code. The code is optimized to use the
+// automatically chosen data types. The following code is generated for a Trie
+// or multiple Tries named "foo":
+//     - type fooTrie
+//             The trie type.
+//
+//     - func newFooTrie(x int) *fooTrie
+//             Trie constructor, where x is the index of the trie passed to Gen.
+//
+//     - func (t *fooTrie) lookup(s []byte) (v uintX, sz int)
+//             The lookup method, where uintX is automatically chosen.
+//
+//     - func lookupString, lookupUnsafe and lookupStringUnsafe
+//             Variants of the above.
+//
+//     - var fooValues and fooIndex and any tables generated by Compacters.
+//             The core trie data.
+//
+//     - var fooTrieHandles
+//             Indexes of starter blocks in case of multiple trie roots.
+//
+// It is recommended that users test the generated trie by checking the returned
+// value for every rune. Such exhaustive tests are possible as the the number of
+// runes in Unicode is limited.
+package triegen // import "golang.org/x/text/internal/triegen"
+
+// TODO: Arguably, the internally optimized data types would not have to be
+// exposed in the generated API. We could also investigate not generating the
+// code, but using it through a package. We would have to investigate the impact
+// on performance of making such change, though. For packages like unicode/norm,
+// small changes like this could tank performance.
+
+import (
+       "encoding/binary"
+       "fmt"
+       "hash/crc64"
+       "io"
+       "log"
+       "unicode/utf8"
+)
+
+// builder builds a set of tries for associating values with runes. The set of
+// tries can share common index and value blocks.
+type builder struct {
+       Name string
+
+       // ValueType is the type of the trie values looked up.
+       ValueType string
+
+       // ValueSize is the byte size of the ValueType.
+       ValueSize int
+
+       // IndexType is the type of trie index values used for all UTF-8 bytes of
+       // a rune except the last one.
+       IndexType string
+
+       // IndexSize is the byte size of the IndexType.
+       IndexSize int
+
+       // SourceType is used when generating the lookup functions. If the user
+       // requests StringSupport, all lookup functions will be generated for
+       // string input as well.
+       SourceType string
+
+       Trie []*Trie
+
+       IndexBlocks []*node
+       ValueBlocks [][]uint64
+       Compactions []compaction
+       Checksum    uint64
+
+       ASCIIBlock   string
+       StarterBlock string
+
+       indexBlockIdx map[uint64]int
+       valueBlockIdx map[uint64]nodeIndex
+       asciiBlockIdx map[uint64]int
+
+       // Stats are used to fill out the template.
+       Stats struct {
+               NValueEntries int
+               NValueBytes   int
+               NIndexEntries int
+               NIndexBytes   int
+               NHandleBytes  int
+       }
+
+       err error
+}
+
+// A nodeIndex encodes the index of a node, which is defined by the compaction
+// which stores it and an index within the compaction. For internal nodes, the
+// compaction is always 0.
+type nodeIndex struct {
+       compaction int
+       index      int
+}
+
+// compaction keeps track of stats used for the compaction.
+type compaction struct {
+       c         Compacter
+       blocks    []*node
+       maxHandle uint32
+       totalSize int
+
+       // Used by template-based generator and thus exported.
+       Cutoff  uint32
+       Offset  uint32
+       Handler string
+}
+
+func (b *builder) setError(err error) {
+       if b.err == nil {
+               b.err = err
+       }
+}
+
+// An Option can be passed to Gen.
+type Option func(b *builder) error
+
+// Compact configures the trie generator to use the given Compacter.
+func Compact(c Compacter) Option {
+       return func(b *builder) error {
+               b.Compactions = append(b.Compactions, compaction{
+                       c:       c,
+                       Handler: c.Handler() + "(n, b)"})
+               return nil
+       }
+}
+
+// Gen writes Go code for a shared trie lookup structure to w for the given
+// Tries. The generated trie type will be called nameTrie. newNameTrie(x) will
+// return the *nameTrie for tries[x]. A value can be looked up by using one of
+// the various lookup methods defined on nameTrie. It returns the table size of
+// the generated trie.
+func Gen(w io.Writer, name string, tries []*Trie, opts ...Option) (sz int, err error) {
+       // The index contains two dummy blocks, followed by the zero block. The zero
+       // block is at offset 0x80, so that the offset for the zero block for
+       // continuation bytes is 0.
+       b := &builder{
+               Name:        name,
+               Trie:        tries,
+               IndexBlocks: []*node{{}, {}, {}},
+               Compactions: []compaction{{
+                       Handler: name + "Values[n<<6+uint32(b)]",
+               }},
+               // The 0 key in indexBlockIdx and valueBlockIdx is the hash of the zero
+               // block.
+               indexBlockIdx: map[uint64]int{0: 0},
+               valueBlockIdx: map[uint64]nodeIndex{0: {}},
+               asciiBlockIdx: map[uint64]int{},
+       }
+       b.Compactions[0].c = (*simpleCompacter)(b)
+
+       for _, f := range opts {
+               if err := f(b); err != nil {
+                       return 0, err
+               }
+       }
+       b.build()
+       if b.err != nil {
+               return 0, b.err
+       }
+       if err = b.print(w); err != nil {
+               return 0, err
+       }
+       return b.Size(), nil
+}
+
+// A Trie represents a single root node of a trie. A builder may build several
+// overlapping tries at once.
+type Trie struct {
+       root *node
+
+       hiddenTrie
+}
+
+// hiddenTrie contains values we want to be visible to the template generator,
+// but hidden from the API documentation.
+type hiddenTrie struct {
+       Name         string
+       Checksum     uint64
+       ASCIIIndex   int
+       StarterIndex int
+}
+
+// NewTrie returns a new trie root.
+func NewTrie(name string) *Trie {
+       return &Trie{
+               &node{
+                       children: make([]*node, blockSize),
+                       values:   make([]uint64, utf8.RuneSelf),
+               },
+               hiddenTrie{Name: name},
+       }
+}
+
+// Gen is a convenience wrapper around the Gen func passing t as the only trie
+// and uses the name passed to NewTrie. It returns the size of the generated
+// tables.
+func (t *Trie) Gen(w io.Writer, opts ...Option) (sz int, err error) {
+       return Gen(w, t.Name, []*Trie{t}, opts...)
+}
+
+// node is a node of the intermediate trie structure.
+type node struct {
+       // children holds this node's children. It is always of length 64.
+       // A child node may be nil.
+       children []*node
+
+       // values contains the values of this node. If it is non-nil, this node is
+       // either a root or leaf node:
+       // For root nodes, len(values) == 128 and it maps the bytes in [0x00, 0x7F].
+       // For leaf nodes, len(values) ==  64 and it maps the bytes in [0x80, 0xBF].
+       values []uint64
+
+       index nodeIndex
+}
+
+// Insert associates value with the given rune. Insert will panic if a non-zero
+// value is passed for an invalid rune.
+func (t *Trie) Insert(r rune, value uint64) {
+       if value == 0 {
+               return
+       }
+       s := string(r)
+       if []rune(s)[0] != r && value != 0 {
+               // Note: The UCD tables will always assign what amounts to a zero value
+               // to a surrogate. Allowing a zero value for an illegal rune allows
+               // users to iterate over [0..MaxRune] without having to explicitly
+               // exclude surrogates, which would be tedious.
+               panic(fmt.Sprintf("triegen: non-zero value for invalid rune %U", r))
+       }
+       if len(s) == 1 {
+               // It is a root node value (ASCII).
+               t.root.values[s[0]] = value
+               return
+       }
+
+       n := t.root
+       for ; len(s) > 1; s = s[1:] {
+               if n.children == nil {
+                       n.children = make([]*node, blockSize)
+               }
+               p := s[0] % blockSize
+               c := n.children[p]
+               if c == nil {
+                       c = &node{}
+                       n.children[p] = c
+               }
+               if len(s) > 2 && c.values != nil {
+                       log.Fatalf("triegen: insert(%U): found internal node with values", r)
+               }
+               n = c
+       }
+       if n.values == nil {
+               n.values = make([]uint64, blockSize)
+       }
+       if n.children != nil {
+               log.Fatalf("triegen: insert(%U): found leaf node that also has child nodes", r)
+       }
+       n.values[s[0]-0x80] = value
+}
+
+// Size returns the number of bytes the generated trie will take to store. It
+// needs to be exported as it is used in the templates.
+func (b *builder) Size() int {
+       // Index blocks.
+       sz := len(b.IndexBlocks) * blockSize * b.IndexSize
+
+       // Skip the first compaction, which represents the normal value blocks, as
+       // its totalSize does not account for the ASCII blocks, which are managed
+       // separately.
+       sz += len(b.ValueBlocks) * blockSize * b.ValueSize
+       for _, c := range b.Compactions[1:] {
+               sz += c.totalSize
+       }
+
+       // TODO: this computation does not account for the fixed overhead of a using
+       // a compaction, either code or data. As for data, though, the typical
+       // overhead of data is in the order of bytes (2 bytes for cases). Further,
+       // the savings of using a compaction should anyway be substantial for it to
+       // be worth it.
+
+       // For multi-root tries, we also need to account for the handles.
+       if len(b.Trie) > 1 {
+               sz += 2 * b.IndexSize * len(b.Trie)
+       }
+       return sz
+}
+
+func (b *builder) build() {
+       // Compute the sizes of the values.
+       var vmax uint64
+       for _, t := range b.Trie {
+               vmax = maxValue(t.root, vmax)
+       }
+       b.ValueType, b.ValueSize = getIntType(vmax)
+
+       // Compute all block allocations.
+       // TODO: first compute the ASCII blocks for all tries and then the other
+       // nodes. ASCII blocks are more restricted in placement, as they require two
+       // blocks to be placed consecutively. Processing them first may improve
+       // sharing (at least one zero block can be expected to be saved.)
+       for _, t := range b.Trie {
+               b.Checksum += b.buildTrie(t)
+       }
+
+       // Compute the offsets for all the Compacters.
+       offset := uint32(0)
+       for i := range b.Compactions {
+               c := &b.Compactions[i]
+               c.Offset = offset
+               offset += c.maxHandle + 1
+               c.Cutoff = offset
+       }
+
+       // Compute the sizes of indexes.
+       // TODO: different byte positions could have different sizes. So far we have
+       // not found a case where this is beneficial.
+       imax := uint64(b.Compactions[len(b.Compactions)-1].Cutoff)
+       for _, ib := range b.IndexBlocks {
+               if x := uint64(ib.index.index); x > imax {
+                       imax = x
+               }
+       }
+       b.IndexType, b.IndexSize = getIntType(imax)
+}
+
+func maxValue(n *node, max uint64) uint64 {
+       if n == nil {
+               return max
+       }
+       for _, c := range n.children {
+               max = maxValue(c, max)
+       }
+       for _, v := range n.values {
+               if max < v {
+                       max = v
+               }
+       }
+       return max
+}
+
+func getIntType(v uint64) (string, int) {
+       switch {
+       case v < 1<<8:
+               return "uint8", 1
+       case v < 1<<16:
+               return "uint16", 2
+       case v < 1<<32:
+               return "uint32", 4
+       }
+       return "uint64", 8
+}
+
+const (
+       blockSize = 64
+
+       // Subtract two blocks to offset 0x80, the first continuation byte.
+       blockOffset = 2
+
+       // Subtract three blocks to offset 0xC0, the first non-ASCII starter.
+       rootBlockOffset = 3
+)
+
+var crcTable = crc64.MakeTable(crc64.ISO)
+
+func (b *builder) buildTrie(t *Trie) uint64 {
+       n := t.root
+
+       // Get the ASCII offset. For the first trie, the ASCII block will be at
+       // position 0.
+       hasher := crc64.New(crcTable)
+       binary.Write(hasher, binary.BigEndian, n.values)
+       hash := hasher.Sum64()
+
+       v, ok := b.asciiBlockIdx[hash]
+       if !ok {
+               v = len(b.ValueBlocks)
+               b.asciiBlockIdx[hash] = v
+
+               b.ValueBlocks = append(b.ValueBlocks, n.values[:blockSize], n.values[blockSize:])
+               if v == 0 {
+                       // Add the zero block at position 2 so that it will be assigned a
+                       // zero reference in the lookup blocks.
+                       // TODO: always do this? This would allow us to remove a check from
+                       // the trie lookup, but at the expense of extra space. Analyze
+                       // performance for unicode/norm.
+                       b.ValueBlocks = append(b.ValueBlocks, make([]uint64, blockSize))
+               }
+       }
+       t.ASCIIIndex = v
+
+       // Compute remaining offsets.
+       t.Checksum = b.computeOffsets(n, true)
+       // We already subtracted the normal blockOffset from the index. Subtract the
+       // difference for starter bytes.
+       t.StarterIndex = n.index.index - (rootBlockOffset - blockOffset)
+       return t.Checksum
+}
+
+func (b *builder) computeOffsets(n *node, root bool) uint64 {
+       // For the first trie, the root lookup block will be at position 3, which is
+       // the offset for UTF-8 non-ASCII starter bytes.
+       first := len(b.IndexBlocks) == rootBlockOffset
+       if first {
+               b.IndexBlocks = append(b.IndexBlocks, n)
+       }
+
+       // We special-case the cases where all values recursively are 0. This allows
+       // for the use of a zero block to which all such values can be directed.
+       hash := uint64(0)
+       if n.children != nil || n.values != nil {
+               hasher := crc64.New(crcTable)
+               for _, c := range n.children {
+                       var v uint64
+                       if c != nil {
+                               v = b.computeOffsets(c, false)
+                       }
+                       binary.Write(hasher, binary.BigEndian, v)
+               }
+               binary.Write(hasher, binary.BigEndian, n.values)
+               hash = hasher.Sum64()
+       }
+
+       if first {
+               b.indexBlockIdx[hash] = rootBlockOffset - blockOffset
+       }
+
+       // Compacters don't apply to internal nodes.
+       if n.children != nil {
+               v, ok := b.indexBlockIdx[hash]
+               if !ok {
+                       v = len(b.IndexBlocks) - blockOffset
+                       b.IndexBlocks = append(b.IndexBlocks, n)
+                       b.indexBlockIdx[hash] = v
+               }
+               n.index = nodeIndex{0, v}
+       } else {
+               h, ok := b.valueBlockIdx[hash]
+               if !ok {
+                       bestI, bestSize := 0, blockSize*b.ValueSize
+                       for i, c := range b.Compactions[1:] {
+                               if sz, ok := c.c.Size(n.values); ok && bestSize > sz {
+                                       bestI, bestSize = i+1, sz
+                               }
+                       }
+                       c := &b.Compactions[bestI]
+                       c.totalSize += bestSize
+                       v := c.c.Store(n.values)
+                       if c.maxHandle < v {
+                               c.maxHandle = v
+                       }
+                       h = nodeIndex{bestI, int(v)}
+                       b.valueBlockIdx[hash] = h
+               }
+               n.index = h
+       }
+       return hash
+}
diff --git a/vendor/golang.org/x/text/internal/ucd/ucd.go b/vendor/golang.org/x/text/internal/ucd/ucd.go
new file mode 100644 (file)
index 0000000..309e8d8
--- /dev/null
@@ -0,0 +1,376 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package ucd provides a parser for Unicode Character Database files, the
+// format of which is defined in http://www.unicode.org/reports/tr44/. See
+// http://www.unicode.org/Public/UCD/latest/ucd/ for example files.
+//
+// It currently does not support substitutions of missing fields.
+package ucd // import "golang.org/x/text/internal/ucd"
+
+import (
+       "bufio"
+       "bytes"
+       "errors"
+       "io"
+       "log"
+       "regexp"
+       "strconv"
+       "strings"
+)
+
+// UnicodeData.txt fields.
+const (
+       CodePoint = iota
+       Name
+       GeneralCategory
+       CanonicalCombiningClass
+       BidiClass
+       DecompMapping
+       DecimalValue
+       DigitValue
+       NumericValue
+       BidiMirrored
+       Unicode1Name
+       ISOComment
+       SimpleUppercaseMapping
+       SimpleLowercaseMapping
+       SimpleTitlecaseMapping
+)
+
+// Parse calls f for each entry in the given reader of a UCD file. It will close
+// the reader upon return. It will call log.Fatal if any error occurred.
+//
+// This implements the most common usage pattern of using Parser.
+func Parse(r io.ReadCloser, f func(p *Parser)) {
+       defer r.Close()
+
+       p := New(r)
+       for p.Next() {
+               f(p)
+       }
+       if err := p.Err(); err != nil {
+               r.Close() // os.Exit will cause defers not to be called.
+               log.Fatal(err)
+       }
+}
+
+// An Option is used to configure a Parser.
+type Option func(p *Parser)
+
+func keepRanges(p *Parser) {
+       p.keepRanges = true
+}
+
+var (
+       // KeepRanges prevents the expansion of ranges. The raw ranges can be
+       // obtained by calling Range(0) on the parser.
+       KeepRanges Option = keepRanges
+)
+
+// The Part option register a handler for lines starting with a '@'. The text
+// after a '@' is available as the first field. Comments are handled as usual.
+func Part(f func(p *Parser)) Option {
+       return func(p *Parser) {
+               p.partHandler = f
+       }
+}
+
+// The CommentHandler option passes comments that are on a line by itself to
+// a given handler.
+func CommentHandler(f func(s string)) Option {
+       return func(p *Parser) {
+               p.commentHandler = f
+       }
+}
+
+// A Parser parses Unicode Character Database (UCD) files.
+type Parser struct {
+       scanner *bufio.Scanner
+
+       keepRanges bool // Don't expand rune ranges in field 0.
+
+       err     error
+       comment []byte
+       field   [][]byte
+       // parsedRange is needed in case Range(0) is called more than once for one
+       // field. In some cases this requires scanning ahead.
+       parsedRange          bool
+       rangeStart, rangeEnd rune
+
+       partHandler    func(p *Parser)
+       commentHandler func(s string)
+}
+
+func (p *Parser) setError(err error) {
+       if p.err == nil {
+               p.err = err
+       }
+}
+
+func (p *Parser) getField(i int) []byte {
+       if i >= len(p.field) {
+               return nil
+       }
+       return p.field[i]
+}
+
+// Err returns a non-nil error if any error occurred during parsing.
+func (p *Parser) Err() error {
+       return p.err
+}
+
+// New returns a Parser for the given Reader.
+func New(r io.Reader, o ...Option) *Parser {
+       p := &Parser{
+               scanner: bufio.NewScanner(r),
+       }
+       for _, f := range o {
+               f(p)
+       }
+       return p
+}
+
+// Next parses the next line in the file. It returns true if a line was parsed
+// and false if it reached the end of the file.
+func (p *Parser) Next() bool {
+       if !p.keepRanges && p.rangeStart < p.rangeEnd {
+               p.rangeStart++
+               return true
+       }
+       p.comment = nil
+       p.field = p.field[:0]
+       p.parsedRange = false
+
+       for p.scanner.Scan() {
+               b := p.scanner.Bytes()
+               if len(b) == 0 {
+                       continue
+               }
+               if b[0] == '#' {
+                       if p.commentHandler != nil {
+                               p.commentHandler(strings.TrimSpace(string(b[1:])))
+                       }
+                       continue
+               }
+
+               // Parse line
+               if i := bytes.IndexByte(b, '#'); i != -1 {
+                       p.comment = bytes.TrimSpace(b[i+1:])
+                       b = b[:i]
+               }
+               if b[0] == '@' {
+                       if p.partHandler != nil {
+                               p.field = append(p.field, bytes.TrimSpace(b[1:]))
+                               p.partHandler(p)
+                               p.field = p.field[:0]
+                       }
+                       p.comment = nil
+                       continue
+               }
+               for {
+                       i := bytes.IndexByte(b, ';')
+                       if i == -1 {
+                               p.field = append(p.field, bytes.TrimSpace(b))
+                               break
+                       }
+                       p.field = append(p.field, bytes.TrimSpace(b[:i]))
+                       b = b[i+1:]
+               }
+               if !p.keepRanges {
+                       p.rangeStart, p.rangeEnd = p.getRange(0)
+               }
+               return true
+       }
+       p.setError(p.scanner.Err())
+       return false
+}
+
+func parseRune(b []byte) (rune, error) {
+       if len(b) > 2 && b[0] == 'U' && b[1] == '+' {
+               b = b[2:]
+       }
+       x, err := strconv.ParseUint(string(b), 16, 32)
+       return rune(x), err
+}
+
+func (p *Parser) parseRune(b []byte) rune {
+       x, err := parseRune(b)
+       p.setError(err)
+       return x
+}
+
+// Rune parses and returns field i as a rune.
+func (p *Parser) Rune(i int) rune {
+       if i > 0 || p.keepRanges {
+               return p.parseRune(p.getField(i))
+       }
+       return p.rangeStart
+}
+
+// Runes interprets and returns field i as a sequence of runes.
+func (p *Parser) Runes(i int) (runes []rune) {
+       add := func(b []byte) {
+               if b = bytes.TrimSpace(b); len(b) > 0 {
+                       runes = append(runes, p.parseRune(b))
+               }
+       }
+       for b := p.getField(i); ; {
+               i := bytes.IndexByte(b, ' ')
+               if i == -1 {
+                       add(b)
+                       break
+               }
+               add(b[:i])
+               b = b[i+1:]
+       }
+       return
+}
+
+var (
+       errIncorrectLegacyRange = errors.New("ucd: unmatched <* First>")
+
+       // reRange matches one line of a legacy rune range.
+       reRange = regexp.MustCompile("^([0-9A-F]*);<([^,]*), ([^>]*)>(.*)$")
+)
+
+// Range parses and returns field i as a rune range. A range is inclusive at
+// both ends. If the field only has one rune, first and last will be identical.
+// It supports the legacy format for ranges used in UnicodeData.txt.
+func (p *Parser) Range(i int) (first, last rune) {
+       if !p.keepRanges {
+               return p.rangeStart, p.rangeStart
+       }
+       return p.getRange(i)
+}
+
+func (p *Parser) getRange(i int) (first, last rune) {
+       b := p.getField(i)
+       if k := bytes.Index(b, []byte("..")); k != -1 {
+               return p.parseRune(b[:k]), p.parseRune(b[k+2:])
+       }
+       // The first field may not be a rune, in which case we may ignore any error
+       // and set the range as 0..0.
+       x, err := parseRune(b)
+       if err != nil {
+               // Disable range parsing henceforth. This ensures that an error will be
+               // returned if the user subsequently will try to parse this field as
+               // a Rune.
+               p.keepRanges = true
+       }
+       // Special case for UnicodeData that was retained for backwards compatibility.
+       if i == 0 && len(p.field) > 1 && bytes.HasSuffix(p.field[1], []byte("First>")) {
+               if p.parsedRange {
+                       return p.rangeStart, p.rangeEnd
+               }
+               mf := reRange.FindStringSubmatch(p.scanner.Text())
+               if mf == nil || !p.scanner.Scan() {
+                       p.setError(errIncorrectLegacyRange)
+                       return x, x
+               }
+               // Using Bytes would be more efficient here, but Text is a lot easier
+               // and this is not a frequent case.
+               ml := reRange.FindStringSubmatch(p.scanner.Text())
+               if ml == nil || mf[2] != ml[2] || ml[3] != "Last" || mf[4] != ml[4] {
+                       p.setError(errIncorrectLegacyRange)
+                       return x, x
+               }
+               p.rangeStart, p.rangeEnd = x, p.parseRune(p.scanner.Bytes()[:len(ml[1])])
+               p.parsedRange = true
+               return p.rangeStart, p.rangeEnd
+       }
+       return x, x
+}
+
+// bools recognizes all valid UCD boolean values.
+var bools = map[string]bool{
+       "":      false,
+       "N":     false,
+       "No":    false,
+       "F":     false,
+       "False": false,
+       "Y":     true,
+       "Yes":   true,
+       "T":     true,
+       "True":  true,
+}
+
+// Bool parses and returns field i as a boolean value.
+func (p *Parser) Bool(i int) bool {
+       b := p.getField(i)
+       for s, v := range bools {
+               if bstrEq(b, s) {
+                       return v
+               }
+       }
+       p.setError(strconv.ErrSyntax)
+       return false
+}
+
+// Int parses and returns field i as an integer value.
+func (p *Parser) Int(i int) int {
+       x, err := strconv.ParseInt(string(p.getField(i)), 10, 64)
+       p.setError(err)
+       return int(x)
+}
+
+// Uint parses and returns field i as an unsigned integer value.
+func (p *Parser) Uint(i int) uint {
+       x, err := strconv.ParseUint(string(p.getField(i)), 10, 64)
+       p.setError(err)
+       return uint(x)
+}
+
+// Float parses and returns field i as a decimal value.
+func (p *Parser) Float(i int) float64 {
+       x, err := strconv.ParseFloat(string(p.getField(i)), 64)
+       p.setError(err)
+       return x
+}
+
+// String parses and returns field i as a string value.
+func (p *Parser) String(i int) string {
+       return string(p.getField(i))
+}
+
+// Strings parses and returns field i as a space-separated list of strings.
+func (p *Parser) Strings(i int) []string {
+       ss := strings.Split(string(p.getField(i)), " ")
+       for i, s := range ss {
+               ss[i] = strings.TrimSpace(s)
+       }
+       return ss
+}
+
+// Comment returns the comments for the current line.
+func (p *Parser) Comment() string {
+       return string(p.comment)
+}
+
+var errUndefinedEnum = errors.New("ucd: undefined enum value")
+
+// Enum interprets and returns field i as a value that must be one of the values
+// in enum.
+func (p *Parser) Enum(i int, enum ...string) string {
+       b := p.getField(i)
+       for _, s := range enum {
+               if bstrEq(b, s) {
+                       return s
+               }
+       }
+       p.setError(errUndefinedEnum)
+       return ""
+}
+
+func bstrEq(b []byte, s string) bool {
+       if len(b) != len(s) {
+               return false
+       }
+       for i, c := range b {
+               if c != s[i] {
+                       return false
+               }
+       }
+       return true
+}
diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule.go b/vendor/golang.org/x/text/secure/bidirule/bidirule.go
new file mode 100644 (file)
index 0000000..a7161bd
--- /dev/null
@@ -0,0 +1,342 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package bidirule implements the Bidi Rule defined by RFC 5893.
+//
+// This package is under development. The API may change without notice and
+// without preserving backward compatibility.
+package bidirule
+
+import (
+       "errors"
+       "unicode/utf8"
+
+       "golang.org/x/text/transform"
+       "golang.org/x/text/unicode/bidi"
+)
+
+// This file contains an implementation of RFC 5893: Right-to-Left Scripts for
+// Internationalized Domain Names for Applications (IDNA)
+//
+// A label is an individual component of a domain name.  Labels are usually
+// shown separated by dots; for example, the domain name "www.example.com" is
+// composed of three labels: "www", "example", and "com".
+//
+// An RTL label is a label that contains at least one character of class R, AL,
+// or AN. An LTR label is any label that is not an RTL label.
+//
+// A "Bidi domain name" is a domain name that contains at least one RTL label.
+//
+//  The following guarantees can be made based on the above:
+//
+//  o  In a domain name consisting of only labels that satisfy the rule,
+//     the requirements of Section 3 are satisfied.  Note that even LTR
+//     labels and pure ASCII labels have to be tested.
+//
+//  o  In a domain name consisting of only LDH labels (as defined in the
+//     Definitions document [RFC5890]) and labels that satisfy the rule,
+//     the requirements of Section 3 are satisfied as long as a label
+//     that starts with an ASCII digit does not come after a
+//     right-to-left label.
+//
+//  No guarantee is given for other combinations.
+
+// ErrInvalid indicates a label is invalid according to the Bidi Rule.
+var ErrInvalid = errors.New("bidirule: failed Bidi Rule")
+
+type ruleState uint8
+
+const (
+       ruleInitial ruleState = iota
+       ruleLTR
+       ruleLTRFinal
+       ruleRTL
+       ruleRTLFinal
+       ruleInvalid
+)
+
+type ruleTransition struct {
+       next ruleState
+       mask uint16
+}
+
+var transitions = [...][2]ruleTransition{
+       // [2.1] The first character must be a character with Bidi property L, R, or
+       // AL. If it has the R or AL property, it is an RTL label; if it has the L
+       // property, it is an LTR label.
+       ruleInitial: {
+               {ruleLTRFinal, 1 << bidi.L},
+               {ruleRTLFinal, 1<<bidi.R | 1<<bidi.AL},
+       },
+       ruleRTL: {
+               // [2.3] In an RTL label, the end of the label must be a character with
+               // Bidi property R, AL, EN, or AN, followed by zero or more characters
+               // with Bidi property NSM.
+               {ruleRTLFinal, 1<<bidi.R | 1<<bidi.AL | 1<<bidi.EN | 1<<bidi.AN},
+
+               // [2.2] In an RTL label, only characters with the Bidi properties R,
+               // AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed.
+               // We exclude the entries from [2.3]
+               {ruleRTL, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN | 1<<bidi.NSM},
+       },
+       ruleRTLFinal: {
+               // [2.3] In an RTL label, the end of the label must be a character with
+               // Bidi property R, AL, EN, or AN, followed by zero or more characters
+               // with Bidi property NSM.
+               {ruleRTLFinal, 1<<bidi.R | 1<<bidi.AL | 1<<bidi.EN | 1<<bidi.AN | 1<<bidi.NSM},
+
+               // [2.2] In an RTL label, only characters with the Bidi properties R,
+               // AL, AN, EN, ES, CS, ET, ON, BN, or NSM are allowed.
+               // We exclude the entries from [2.3] and NSM.
+               {ruleRTL, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN},
+       },
+       ruleLTR: {
+               // [2.6] In an LTR label, the end of the label must be a character with
+               // Bidi property L or EN, followed by zero or more characters with Bidi
+               // property NSM.
+               {ruleLTRFinal, 1<<bidi.L | 1<<bidi.EN},
+
+               // [2.5] In an LTR label, only characters with the Bidi properties L,
+               // EN, ES, CS, ET, ON, BN, or NSM are allowed.
+               // We exclude the entries from [2.6].
+               {ruleLTR, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN | 1<<bidi.NSM},
+       },
+       ruleLTRFinal: {
+               // [2.6] In an LTR label, the end of the label must be a character with
+               // Bidi property L or EN, followed by zero or more characters with Bidi
+               // property NSM.
+               {ruleLTRFinal, 1<<bidi.L | 1<<bidi.EN | 1<<bidi.NSM},
+
+               // [2.5] In an LTR label, only characters with the Bidi properties L,
+               // EN, ES, CS, ET, ON, BN, or NSM are allowed.
+               // We exclude the entries from [2.6].
+               {ruleLTR, 1<<bidi.ES | 1<<bidi.CS | 1<<bidi.ET | 1<<bidi.ON | 1<<bidi.BN},
+       },
+       ruleInvalid: {
+               {ruleInvalid, 0},
+               {ruleInvalid, 0},
+       },
+}
+
+// [2.4] In an RTL label, if an EN is present, no AN may be present, and
+// vice versa.
+const exclusiveRTL = uint16(1<<bidi.EN | 1<<bidi.AN)
+
+// From RFC 5893
+// An RTL label is a label that contains at least one character of type
+// R, AL, or AN.
+//
+// An LTR label is any label that is not an RTL label.
+
+// Direction reports the direction of the given label as defined by RFC 5893.
+// The Bidi Rule does not have to be applied to labels of the category
+// LeftToRight.
+func Direction(b []byte) bidi.Direction {
+       for i := 0; i < len(b); {
+               e, sz := bidi.Lookup(b[i:])
+               if sz == 0 {
+                       i++
+               }
+               c := e.Class()
+               if c == bidi.R || c == bidi.AL || c == bidi.AN {
+                       return bidi.RightToLeft
+               }
+               i += sz
+       }
+       return bidi.LeftToRight
+}
+
+// DirectionString reports the direction of the given label as defined by RFC
+// 5893. The Bidi Rule does not have to be applied to labels of the category
+// LeftToRight.
+func DirectionString(s string) bidi.Direction {
+       for i := 0; i < len(s); {
+               e, sz := bidi.LookupString(s[i:])
+               if sz == 0 {
+                       i++
+               }
+               c := e.Class()
+               if c == bidi.R || c == bidi.AL || c == bidi.AN {
+                       return bidi.RightToLeft
+               }
+               i += sz
+       }
+       return bidi.LeftToRight
+}
+
+// Valid reports whether b conforms to the BiDi rule.
+func Valid(b []byte) bool {
+       var t Transformer
+       if n, ok := t.advance(b); !ok || n < len(b) {
+               return false
+       }
+       return t.isFinal()
+}
+
+// ValidString reports whether s conforms to the BiDi rule.
+func ValidString(s string) bool {
+       var t Transformer
+       if n, ok := t.advanceString(s); !ok || n < len(s) {
+               return false
+       }
+       return t.isFinal()
+}
+
+// New returns a Transformer that verifies that input adheres to the Bidi Rule.
+func New() *Transformer {
+       return &Transformer{}
+}
+
+// Transformer implements transform.Transform.
+type Transformer struct {
+       state  ruleState
+       hasRTL bool
+       seen   uint16
+}
+
+// A rule can only be violated for "Bidi Domain names", meaning if one of the
+// following categories has been observed.
+func (t *Transformer) isRTL() bool {
+       const isRTL = 1<<bidi.R | 1<<bidi.AL | 1<<bidi.AN
+       return t.seen&isRTL != 0
+}
+
+func (t *Transformer) isFinal() bool {
+       if !t.isRTL() {
+               return true
+       }
+       return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial
+}
+
+// Reset implements transform.Transformer.
+func (t *Transformer) Reset() { *t = Transformer{} }
+
+// Transform implements transform.Transformer. This Transformer has state and
+// needs to be reset between uses.
+func (t *Transformer) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+       if len(dst) < len(src) {
+               src = src[:len(dst)]
+               atEOF = false
+               err = transform.ErrShortDst
+       }
+       n, err1 := t.Span(src, atEOF)
+       copy(dst, src[:n])
+       if err == nil || err1 != nil && err1 != transform.ErrShortSrc {
+               err = err1
+       }
+       return n, n, err
+}
+
+// Span returns the first n bytes of src that conform to the Bidi rule.
+func (t *Transformer) Span(src []byte, atEOF bool) (n int, err error) {
+       if t.state == ruleInvalid && t.isRTL() {
+               return 0, ErrInvalid
+       }
+       n, ok := t.advance(src)
+       switch {
+       case !ok:
+               err = ErrInvalid
+       case n < len(src):
+               if !atEOF {
+                       err = transform.ErrShortSrc
+                       break
+               }
+               err = ErrInvalid
+       case !t.isFinal():
+               err = ErrInvalid
+       }
+       return n, err
+}
+
+// Precomputing the ASCII values decreases running time for the ASCII fast path
+// by about 30%.
+var asciiTable [128]bidi.Properties
+
+func init() {
+       for i := range asciiTable {
+               p, _ := bidi.LookupRune(rune(i))
+               asciiTable[i] = p
+       }
+}
+
+func (t *Transformer) advance(s []byte) (n int, ok bool) {
+       var e bidi.Properties
+       var sz int
+       for n < len(s) {
+               if s[n] < utf8.RuneSelf {
+                       e, sz = asciiTable[s[n]], 1
+               } else {
+                       e, sz = bidi.Lookup(s[n:])
+                       if sz <= 1 {
+                               if sz == 1 {
+                                       // We always consider invalid UTF-8 to be invalid, even if
+                                       // the string has not yet been determined to be RTL.
+                                       // TODO: is this correct?
+                                       return n, false
+                               }
+                               return n, true // incomplete UTF-8 encoding
+                       }
+               }
+               // TODO: using CompactClass would result in noticeable speedup.
+               // See unicode/bidi/prop.go:Properties.CompactClass.
+               c := uint16(1 << e.Class())
+               t.seen |= c
+               if t.seen&exclusiveRTL == exclusiveRTL {
+                       t.state = ruleInvalid
+                       return n, false
+               }
+               switch tr := transitions[t.state]; {
+               case tr[0].mask&c != 0:
+                       t.state = tr[0].next
+               case tr[1].mask&c != 0:
+                       t.state = tr[1].next
+               default:
+                       t.state = ruleInvalid
+                       if t.isRTL() {
+                               return n, false
+                       }
+               }
+               n += sz
+       }
+       return n, true
+}
+
+func (t *Transformer) advanceString(s string) (n int, ok bool) {
+       var e bidi.Properties
+       var sz int
+       for n < len(s) {
+               if s[n] < utf8.RuneSelf {
+                       e, sz = asciiTable[s[n]], 1
+               } else {
+                       e, sz = bidi.LookupString(s[n:])
+                       if sz <= 1 {
+                               if sz == 1 {
+                                       return n, false // invalid UTF-8
+                               }
+                               return n, true // incomplete UTF-8 encoding
+                       }
+               }
+               // TODO: using CompactClass results in noticeable speedup.
+               // See unicode/bidi/prop.go:Properties.CompactClass.
+               c := uint16(1 << e.Class())
+               t.seen |= c
+               if t.seen&exclusiveRTL == exclusiveRTL {
+                       t.state = ruleInvalid
+                       return n, false
+               }
+               switch tr := transitions[t.state]; {
+               case tr[0].mask&c != 0:
+                       t.state = tr[0].next
+               case tr[1].mask&c != 0:
+                       t.state = tr[1].next
+               default:
+                       t.state = ruleInvalid
+                       if t.isRTL() {
+                               return n, false
+                       }
+               }
+               n += sz
+       }
+       return n, true
+}
diff --git a/vendor/golang.org/x/text/transform/transform.go b/vendor/golang.org/x/text/transform/transform.go
new file mode 100644 (file)
index 0000000..fe47b9b
--- /dev/null
@@ -0,0 +1,705 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package transform provides reader and writer wrappers that transform the
+// bytes passing through as well as various transformations. Example
+// transformations provided by other packages include normalization and
+// conversion between character sets.
+package transform // import "golang.org/x/text/transform"
+
+import (
+       "bytes"
+       "errors"
+       "io"
+       "unicode/utf8"
+)
+
+var (
+       // ErrShortDst means that the destination buffer was too short to
+       // receive all of the transformed bytes.
+       ErrShortDst = errors.New("transform: short destination buffer")
+
+       // ErrShortSrc means that the source buffer has insufficient data to
+       // complete the transformation.
+       ErrShortSrc = errors.New("transform: short source buffer")
+
+       // ErrEndOfSpan means that the input and output (the transformed input)
+       // are not identical.
+       ErrEndOfSpan = errors.New("transform: input and output are not identical")
+
+       // errInconsistentByteCount means that Transform returned success (nil
+       // error) but also returned nSrc inconsistent with the src argument.
+       errInconsistentByteCount = errors.New("transform: inconsistent byte count returned")
+
+       // errShortInternal means that an internal buffer is not large enough
+       // to make progress and the Transform operation must be aborted.
+       errShortInternal = errors.New("transform: short internal buffer")
+)
+
+// Transformer transforms bytes.
+type Transformer interface {
+       // Transform writes to dst the transformed bytes read from src, and
+       // returns the number of dst bytes written and src bytes read. The
+       // atEOF argument tells whether src represents the last bytes of the
+       // input.
+       //
+       // Callers should always process the nDst bytes produced and account
+       // for the nSrc bytes consumed before considering the error err.
+       //
+       // A nil error means that all of the transformed bytes (whether freshly
+       // transformed from src or left over from previous Transform calls)
+       // were written to dst. A nil error can be returned regardless of
+       // whether atEOF is true. If err is nil then nSrc must equal len(src);
+       // the converse is not necessarily true.
+       //
+       // ErrShortDst means that dst was too short to receive all of the
+       // transformed bytes. ErrShortSrc means that src had insufficient data
+       // to complete the transformation. If both conditions apply, then
+       // either error may be returned. Other than the error conditions listed
+       // here, implementations are free to report other errors that arise.
+       Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error)
+
+       // Reset resets the state and allows a Transformer to be reused.
+       Reset()
+}
+
+// SpanningTransformer extends the Transformer interface with a Span method
+// that determines how much of the input already conforms to the Transformer.
+type SpanningTransformer interface {
+       Transformer
+
+       // Span returns a position in src such that transforming src[:n] results in
+       // identical output src[:n] for these bytes. It does not necessarily return
+       // the largest such n. The atEOF argument tells whether src represents the
+       // last bytes of the input.
+       //
+       // Callers should always account for the n bytes consumed before
+       // considering the error err.
+       //
+       // A nil error means that all input bytes are known to be identical to the
+       // output produced by the Transformer. A nil error can be be returned
+       // regardless of whether atEOF is true. If err is nil, then then n must
+       // equal len(src); the converse is not necessarily true.
+       //
+       // ErrEndOfSpan means that the Transformer output may differ from the
+       // input after n bytes. Note that n may be len(src), meaning that the output
+       // would contain additional bytes after otherwise identical output.
+       // ErrShortSrc means that src had insufficient data to determine whether the
+       // remaining bytes would change. Other than the error conditions listed
+       // here, implementations are free to report other errors that arise.
+       //
+       // Calling Span can modify the Transformer state as a side effect. In
+       // effect, it does the transformation just as calling Transform would, only
+       // without copying to a destination buffer and only up to a point it can
+       // determine the input and output bytes are the same. This is obviously more
+       // limited than calling Transform, but can be more efficient in terms of
+       // copying and allocating buffers. Calls to Span and Transform may be
+       // interleaved.
+       Span(src []byte, atEOF bool) (n int, err error)
+}
+
+// NopResetter can be embedded by implementations of Transformer to add a nop
+// Reset method.
+type NopResetter struct{}
+
+// Reset implements the Reset method of the Transformer interface.
+func (NopResetter) Reset() {}
+
+// Reader wraps another io.Reader by transforming the bytes read.
+type Reader struct {
+       r   io.Reader
+       t   Transformer
+       err error
+
+       // dst[dst0:dst1] contains bytes that have been transformed by t but
+       // not yet copied out via Read.
+       dst        []byte
+       dst0, dst1 int
+
+       // src[src0:src1] contains bytes that have been read from r but not
+       // yet transformed through t.
+       src        []byte
+       src0, src1 int
+
+       // transformComplete is whether the transformation is complete,
+       // regardless of whether or not it was successful.
+       transformComplete bool
+}
+
+const defaultBufSize = 4096
+
+// NewReader returns a new Reader that wraps r by transforming the bytes read
+// via t. It calls Reset on t.
+func NewReader(r io.Reader, t Transformer) *Reader {
+       t.Reset()
+       return &Reader{
+               r:   r,
+               t:   t,
+               dst: make([]byte, defaultBufSize),
+               src: make([]byte, defaultBufSize),
+       }
+}
+
+// Read implements the io.Reader interface.
+func (r *Reader) Read(p []byte) (int, error) {
+       n, err := 0, error(nil)
+       for {
+               // Copy out any transformed bytes and return the final error if we are done.
+               if r.dst0 != r.dst1 {
+                       n = copy(p, r.dst[r.dst0:r.dst1])
+                       r.dst0 += n
+                       if r.dst0 == r.dst1 && r.transformComplete {
+                               return n, r.err
+                       }
+                       return n, nil
+               } else if r.transformComplete {
+                       return 0, r.err
+               }
+
+               // Try to transform some source bytes, or to flush the transformer if we
+               // are out of source bytes. We do this even if r.r.Read returned an error.
+               // As the io.Reader documentation says, "process the n > 0 bytes returned
+               // before considering the error".
+               if r.src0 != r.src1 || r.err != nil {
+                       r.dst0 = 0
+                       r.dst1, n, err = r.t.Transform(r.dst, r.src[r.src0:r.src1], r.err == io.EOF)
+                       r.src0 += n
+
+                       switch {
+                       case err == nil:
+                               if r.src0 != r.src1 {
+                                       r.err = errInconsistentByteCount
+                               }
+                               // The Transform call was successful; we are complete if we
+                               // cannot read more bytes into src.
+                               r.transformComplete = r.err != nil
+                               continue
+                       case err == ErrShortDst && (r.dst1 != 0 || n != 0):
+                               // Make room in dst by copying out, and try again.
+                               continue
+                       case err == ErrShortSrc && r.src1-r.src0 != len(r.src) && r.err == nil:
+                               // Read more bytes into src via the code below, and try again.
+                       default:
+                               r.transformComplete = true
+                               // The reader error (r.err) takes precedence over the
+                               // transformer error (err) unless r.err is nil or io.EOF.
+                               if r.err == nil || r.err == io.EOF {
+                                       r.err = err
+                               }
+                               continue
+                       }
+               }
+
+               // Move any untransformed source bytes to the start of the buffer
+               // and read more bytes.
+               if r.src0 != 0 {
+                       r.src0, r.src1 = 0, copy(r.src, r.src[r.src0:r.src1])
+               }
+               n, r.err = r.r.Read(r.src[r.src1:])
+               r.src1 += n
+       }
+}
+
+// TODO: implement ReadByte (and ReadRune??).
+
+// Writer wraps another io.Writer by transforming the bytes read.
+// The user needs to call Close to flush unwritten bytes that may
+// be buffered.
+type Writer struct {
+       w   io.Writer
+       t   Transformer
+       dst []byte
+
+       // src[:n] contains bytes that have not yet passed through t.
+       src []byte
+       n   int
+}
+
+// NewWriter returns a new Writer that wraps w by transforming the bytes written
+// via t. It calls Reset on t.
+func NewWriter(w io.Writer, t Transformer) *Writer {
+       t.Reset()
+       return &Writer{
+               w:   w,
+               t:   t,
+               dst: make([]byte, defaultBufSize),
+               src: make([]byte, defaultBufSize),
+       }
+}
+
+// Write implements the io.Writer interface. If there are not enough
+// bytes available to complete a Transform, the bytes will be buffered
+// for the next write. Call Close to convert the remaining bytes.
+func (w *Writer) Write(data []byte) (n int, err error) {
+       src := data
+       if w.n > 0 {
+               // Append bytes from data to the last remainder.
+               // TODO: limit the amount copied on first try.
+               n = copy(w.src[w.n:], data)
+               w.n += n
+               src = w.src[:w.n]
+       }
+       for {
+               nDst, nSrc, err := w.t.Transform(w.dst, src, false)
+               if _, werr := w.w.Write(w.dst[:nDst]); werr != nil {
+                       return n, werr
+               }
+               src = src[nSrc:]
+               if w.n == 0 {
+                       n += nSrc
+               } else if len(src) <= n {
+                       // Enough bytes from w.src have been consumed. We make src point
+                       // to data instead to reduce the copying.
+                       w.n = 0
+                       n -= len(src)
+                       src = data[n:]
+                       if n < len(data) && (err == nil || err == ErrShortSrc) {
+                               continue
+                       }
+               }
+               switch err {
+               case ErrShortDst:
+                       // This error is okay as long as we are making progress.
+                       if nDst > 0 || nSrc > 0 {
+                               continue
+                       }
+               case ErrShortSrc:
+                       if len(src) < len(w.src) {
+                               m := copy(w.src, src)
+                               // If w.n > 0, bytes from data were already copied to w.src and n
+                               // was already set to the number of bytes consumed.
+                               if w.n == 0 {
+                                       n += m
+                               }
+                               w.n = m
+                               err = nil
+                       } else if nDst > 0 || nSrc > 0 {
+                               // Not enough buffer to store the remainder. Keep processing as
+                               // long as there is progress. Without this case, transforms that
+                               // require a lookahead larger than the buffer may result in an
+                               // error. This is not something one may expect to be common in
+                               // practice, but it may occur when buffers are set to small
+                               // sizes during testing.
+                               continue
+                       }
+               case nil:
+                       if w.n > 0 {
+                               err = errInconsistentByteCount
+                       }
+               }
+               return n, err
+       }
+}
+
+// Close implements the io.Closer interface.
+func (w *Writer) Close() error {
+       src := w.src[:w.n]
+       for {
+               nDst, nSrc, err := w.t.Transform(w.dst, src, true)
+               if _, werr := w.w.Write(w.dst[:nDst]); werr != nil {
+                       return werr
+               }
+               if err != ErrShortDst {
+                       return err
+               }
+               src = src[nSrc:]
+       }
+}
+
+type nop struct{ NopResetter }
+
+func (nop) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+       n := copy(dst, src)
+       if n < len(src) {
+               err = ErrShortDst
+       }
+       return n, n, err
+}
+
+func (nop) Span(src []byte, atEOF bool) (n int, err error) {
+       return len(src), nil
+}
+
+type discard struct{ NopResetter }
+
+func (discard) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+       return 0, len(src), nil
+}
+
+var (
+       // Discard is a Transformer for which all Transform calls succeed
+       // by consuming all bytes and writing nothing.
+       Discard Transformer = discard{}
+
+       // Nop is a SpanningTransformer that copies src to dst.
+       Nop SpanningTransformer = nop{}
+)
+
+// chain is a sequence of links. A chain with N Transformers has N+1 links and
+// N+1 buffers. Of those N+1 buffers, the first and last are the src and dst
+// buffers given to chain.Transform and the middle N-1 buffers are intermediate
+// buffers owned by the chain. The i'th link transforms bytes from the i'th
+// buffer chain.link[i].b at read offset chain.link[i].p to the i+1'th buffer
+// chain.link[i+1].b at write offset chain.link[i+1].n, for i in [0, N).
+type chain struct {
+       link []link
+       err  error
+       // errStart is the index at which the error occurred plus 1. Processing
+       // errStart at this level at the next call to Transform. As long as
+       // errStart > 0, chain will not consume any more source bytes.
+       errStart int
+}
+
+func (c *chain) fatalError(errIndex int, err error) {
+       if i := errIndex + 1; i > c.errStart {
+               c.errStart = i
+               c.err = err
+       }
+}
+
+type link struct {
+       t Transformer
+       // b[p:n] holds the bytes to be transformed by t.
+       b []byte
+       p int
+       n int
+}
+
+func (l *link) src() []byte {
+       return l.b[l.p:l.n]
+}
+
+func (l *link) dst() []byte {
+       return l.b[l.n:]
+}
+
+// Chain returns a Transformer that applies t in sequence.
+func Chain(t ...Transformer) Transformer {
+       if len(t) == 0 {
+               return nop{}
+       }
+       c := &chain{link: make([]link, len(t)+1)}
+       for i, tt := range t {
+               c.link[i].t = tt
+       }
+       // Allocate intermediate buffers.
+       b := make([][defaultBufSize]byte, len(t)-1)
+       for i := range b {
+               c.link[i+1].b = b[i][:]
+       }
+       return c
+}
+
+// Reset resets the state of Chain. It calls Reset on all the Transformers.
+func (c *chain) Reset() {
+       for i, l := range c.link {
+               if l.t != nil {
+                       l.t.Reset()
+               }
+               c.link[i].p, c.link[i].n = 0, 0
+       }
+}
+
+// TODO: make chain use Span (is going to be fun to implement!)
+
+// Transform applies the transformers of c in sequence.
+func (c *chain) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+       // Set up src and dst in the chain.
+       srcL := &c.link[0]
+       dstL := &c.link[len(c.link)-1]
+       srcL.b, srcL.p, srcL.n = src, 0, len(src)
+       dstL.b, dstL.n = dst, 0
+       var lastFull, needProgress bool // for detecting progress
+
+       // i is the index of the next Transformer to apply, for i in [low, high].
+       // low is the lowest index for which c.link[low] may still produce bytes.
+       // high is the highest index for which c.link[high] has a Transformer.
+       // The error returned by Transform determines whether to increase or
+       // decrease i. We try to completely fill a buffer before converting it.
+       for low, i, high := c.errStart, c.errStart, len(c.link)-2; low <= i && i <= high; {
+               in, out := &c.link[i], &c.link[i+1]
+               nDst, nSrc, err0 := in.t.Transform(out.dst(), in.src(), atEOF && low == i)
+               out.n += nDst
+               in.p += nSrc
+               if i > 0 && in.p == in.n {
+                       in.p, in.n = 0, 0
+               }
+               needProgress, lastFull = lastFull, false
+               switch err0 {
+               case ErrShortDst:
+                       // Process the destination buffer next. Return if we are already
+                       // at the high index.
+                       if i == high {
+                               return dstL.n, srcL.p, ErrShortDst
+                       }
+                       if out.n != 0 {
+                               i++
+                               // If the Transformer at the next index is not able to process any
+                               // source bytes there is nothing that can be done to make progress
+                               // and the bytes will remain unprocessed. lastFull is used to
+                               // detect this and break out of the loop with a fatal error.
+                               lastFull = true
+                               continue
+                       }
+                       // The destination buffer was too small, but is completely empty.
+                       // Return a fatal error as this transformation can never complete.
+                       c.fatalError(i, errShortInternal)
+               case ErrShortSrc:
+                       if i == 0 {
+                               // Save ErrShortSrc in err. All other errors take precedence.
+                               err = ErrShortSrc
+                               break
+                       }
+                       // Source bytes were depleted before filling up the destination buffer.
+                       // Verify we made some progress, move the remaining bytes to the errStart
+                       // and try to get more source bytes.
+                       if needProgress && nSrc == 0 || in.n-in.p == len(in.b) {
+                               // There were not enough source bytes to proceed while the source
+                               // buffer cannot hold any more bytes. Return a fatal error as this
+                               // transformation can never complete.
+                               c.fatalError(i, errShortInternal)
+                               break
+                       }
+                       // in.b is an internal buffer and we can make progress.
+                       in.p, in.n = 0, copy(in.b, in.src())
+                       fallthrough
+               case nil:
+                       // if i == low, we have depleted the bytes at index i or any lower levels.
+                       // In that case we increase low and i. In all other cases we decrease i to
+                       // fetch more bytes before proceeding to the next index.
+                       if i > low {
+                               i--
+                               continue
+                       }
+               default:
+                       c.fatalError(i, err0)
+               }
+               // Exhausted level low or fatal error: increase low and continue
+               // to process the bytes accepted so far.
+               i++
+               low = i
+       }
+
+       // If c.errStart > 0, this means we found a fatal error.  We will clear
+       // all upstream buffers. At this point, no more progress can be made
+       // downstream, as Transform would have bailed while handling ErrShortDst.
+       if c.errStart > 0 {
+               for i := 1; i < c.errStart; i++ {
+                       c.link[i].p, c.link[i].n = 0, 0
+               }
+               err, c.errStart, c.err = c.err, 0, nil
+       }
+       return dstL.n, srcL.p, err
+}
+
+// Deprecated: use runes.Remove instead.
+func RemoveFunc(f func(r rune) bool) Transformer {
+       return removeF(f)
+}
+
+type removeF func(r rune) bool
+
+func (removeF) Reset() {}
+
+// Transform implements the Transformer interface.
+func (t removeF) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+       for r, sz := rune(0), 0; len(src) > 0; src = src[sz:] {
+
+               if r = rune(src[0]); r < utf8.RuneSelf {
+                       sz = 1
+               } else {
+                       r, sz = utf8.DecodeRune(src)
+
+                       if sz == 1 {
+                               // Invalid rune.
+                               if !atEOF && !utf8.FullRune(src) {
+                                       err = ErrShortSrc
+                                       break
+                               }
+                               // We replace illegal bytes with RuneError. Not doing so might
+                               // otherwise turn a sequence of invalid UTF-8 into valid UTF-8.
+                               // The resulting byte sequence may subsequently contain runes
+                               // for which t(r) is true that were passed unnoticed.
+                               if !t(r) {
+                                       if nDst+3 > len(dst) {
+                                               err = ErrShortDst
+                                               break
+                                       }
+                                       nDst += copy(dst[nDst:], "\uFFFD")
+                               }
+                               nSrc++
+                               continue
+                       }
+               }
+
+               if !t(r) {
+                       if nDst+sz > len(dst) {
+                               err = ErrShortDst
+                               break
+                       }
+                       nDst += copy(dst[nDst:], src[:sz])
+               }
+               nSrc += sz
+       }
+       return
+}
+
+// grow returns a new []byte that is longer than b, and copies the first n bytes
+// of b to the start of the new slice.
+func grow(b []byte, n int) []byte {
+       m := len(b)
+       if m <= 32 {
+               m = 64
+       } else if m <= 256 {
+               m *= 2
+       } else {
+               m += m >> 1
+       }
+       buf := make([]byte, m)
+       copy(buf, b[:n])
+       return buf
+}
+
+const initialBufSize = 128
+
+// String returns a string with the result of converting s[:n] using t, where
+// n <= len(s). If err == nil, n will be len(s). It calls Reset on t.
+func String(t Transformer, s string) (result string, n int, err error) {
+       t.Reset()
+       if s == "" {
+               // Fast path for the common case for empty input. Results in about a
+               // 86% reduction of running time for BenchmarkStringLowerEmpty.
+               if _, _, err := t.Transform(nil, nil, true); err == nil {
+                       return "", 0, nil
+               }
+       }
+
+       // Allocate only once. Note that both dst and src escape when passed to
+       // Transform.
+       buf := [2 * initialBufSize]byte{}
+       dst := buf[:initialBufSize:initialBufSize]
+       src := buf[initialBufSize : 2*initialBufSize]
+
+       // The input string s is transformed in multiple chunks (starting with a
+       // chunk size of initialBufSize). nDst and nSrc are per-chunk (or
+       // per-Transform-call) indexes, pDst and pSrc are overall indexes.
+       nDst, nSrc := 0, 0
+       pDst, pSrc := 0, 0
+
+       // pPrefix is the length of a common prefix: the first pPrefix bytes of the
+       // result will equal the first pPrefix bytes of s. It is not guaranteed to
+       // be the largest such value, but if pPrefix, len(result) and len(s) are
+       // all equal after the final transform (i.e. calling Transform with atEOF
+       // being true returned nil error) then we don't need to allocate a new
+       // result string.
+       pPrefix := 0
+       for {
+               // Invariant: pDst == pPrefix && pSrc == pPrefix.
+
+               n := copy(src, s[pSrc:])
+               nDst, nSrc, err = t.Transform(dst, src[:n], pSrc+n == len(s))
+               pDst += nDst
+               pSrc += nSrc
+
+               // TODO:  let transformers implement an optional Spanner interface, akin
+               // to norm's QuickSpan. This would even allow us to avoid any allocation.
+               if !bytes.Equal(dst[:nDst], src[:nSrc]) {
+                       break
+               }
+               pPrefix = pSrc
+               if err == ErrShortDst {
+                       // A buffer can only be short if a transformer modifies its input.
+                       break
+               } else if err == ErrShortSrc {
+                       if nSrc == 0 {
+                               // No progress was made.
+                               break
+                       }
+                       // Equal so far and !atEOF, so continue checking.
+               } else if err != nil || pPrefix == len(s) {
+                       return string(s[:pPrefix]), pPrefix, err
+               }
+       }
+       // Post-condition: pDst == pPrefix + nDst && pSrc == pPrefix + nSrc.
+
+       // We have transformed the first pSrc bytes of the input s to become pDst
+       // transformed bytes. Those transformed bytes are discontiguous: the first
+       // pPrefix of them equal s[:pPrefix] and the last nDst of them equal
+       // dst[:nDst]. We copy them around, into a new dst buffer if necessary, so
+       // that they become one contiguous slice: dst[:pDst].
+       if pPrefix != 0 {
+               newDst := dst
+               if pDst > len(newDst) {
+                       newDst = make([]byte, len(s)+nDst-nSrc)
+               }
+               copy(newDst[pPrefix:pDst], dst[:nDst])
+               copy(newDst[:pPrefix], s[:pPrefix])
+               dst = newDst
+       }
+
+       // Prevent duplicate Transform calls with atEOF being true at the end of
+       // the input. Also return if we have an unrecoverable error.
+       if (err == nil && pSrc == len(s)) ||
+               (err != nil && err != ErrShortDst && err != ErrShortSrc) {
+               return string(dst[:pDst]), pSrc, err
+       }
+
+       // Transform the remaining input, growing dst and src buffers as necessary.
+       for {
+               n := copy(src, s[pSrc:])
+               nDst, nSrc, err := t.Transform(dst[pDst:], src[:n], pSrc+n == len(s))
+               pDst += nDst
+               pSrc += nSrc
+
+               // If we got ErrShortDst or ErrShortSrc, do not grow as long as we can
+               // make progress. This may avoid excessive allocations.
+               if err == ErrShortDst {
+                       if nDst == 0 {
+                               dst = grow(dst, pDst)
+                       }
+               } else if err == ErrShortSrc {
+                       if nSrc == 0 {
+                               src = grow(src, 0)
+                       }
+               } else if err != nil || pSrc == len(s) {
+                       return string(dst[:pDst]), pSrc, err
+               }
+       }
+}
+
+// Bytes returns a new byte slice with the result of converting b[:n] using t,
+// where n <= len(b). If err == nil, n will be len(b). It calls Reset on t.
+func Bytes(t Transformer, b []byte) (result []byte, n int, err error) {
+       return doAppend(t, 0, make([]byte, len(b)), b)
+}
+
+// Append appends the result of converting src[:n] using t to dst, where
+// n <= len(src), If err == nil, n will be len(src). It calls Reset on t.
+func Append(t Transformer, dst, src []byte) (result []byte, n int, err error) {
+       if len(dst) == cap(dst) {
+               n := len(src) + len(dst) // It is okay for this to be 0.
+               b := make([]byte, n)
+               dst = b[:copy(b, dst)]
+       }
+       return doAppend(t, len(dst), dst[:cap(dst)], src)
+}
+
+func doAppend(t Transformer, pDst int, dst, src []byte) (result []byte, n int, err error) {
+       t.Reset()
+       pSrc := 0
+       for {
+               nDst, nSrc, err := t.Transform(dst[pDst:], src[pSrc:], true)
+               pDst += nDst
+               pSrc += nSrc
+               if err != ErrShortDst {
+                       return dst[:pDst], pSrc, err
+               }
+
+               // Grow the destination buffer, but do not grow as long as we can make
+               // progress. This may avoid excessive allocations.
+               if nDst == 0 {
+                       dst = grow(dst, pDst)
+               }
+       }
+}
diff --git a/vendor/golang.org/x/text/unicode/bidi/bidi.go b/vendor/golang.org/x/text/unicode/bidi/bidi.go
new file mode 100644 (file)
index 0000000..3fc4a62
--- /dev/null
@@ -0,0 +1,198 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run gen.go gen_trieval.go gen_ranges.go
+
+// Package bidi contains functionality for bidirectional text support.
+//
+// See http://www.unicode.org/reports/tr9.
+//
+// NOTE: UNDER CONSTRUCTION. This API may change in backwards incompatible ways
+// and without notice.
+package bidi // import "golang.org/x/text/unicode/bidi"
+
+// TODO:
+// The following functionality would not be hard to implement, but hinges on
+// the definition of a Segmenter interface. For now this is up to the user.
+// - Iterate over paragraphs
+// - Segmenter to iterate over runs directly from a given text.
+// Also:
+// - Transformer for reordering?
+// - Transformer (validator, really) for Bidi Rule.
+
+// This API tries to avoid dealing with embedding levels for now. Under the hood
+// these will be computed, but the question is to which extent the user should
+// know they exist. We should at some point allow the user to specify an
+// embedding hierarchy, though.
+
+// A Direction indicates the overall flow of text.
+type Direction int
+
+const (
+       // LeftToRight indicates the text contains no right-to-left characters and
+       // that either there are some left-to-right characters or the option
+       // DefaultDirection(LeftToRight) was passed.
+       LeftToRight Direction = iota
+
+       // RightToLeft indicates the text contains no left-to-right characters and
+       // that either there are some right-to-left characters or the option
+       // DefaultDirection(RightToLeft) was passed.
+       RightToLeft
+
+       // Mixed indicates text contains both left-to-right and right-to-left
+       // characters.
+       Mixed
+
+       // Neutral means that text contains no left-to-right and right-to-left
+       // characters and that no default direction has been set.
+       Neutral
+)
+
+type options struct{}
+
+// An Option is an option for Bidi processing.
+type Option func(*options)
+
+// ICU allows the user to define embedding levels. This may be used, for example,
+// to use hierarchical structure of markup languages to define embeddings.
+// The following option may be a way to expose this functionality in this API.
+// // LevelFunc sets a function that associates nesting levels with the given text.
+// // The levels function will be called with monotonically increasing values for p.
+// func LevelFunc(levels func(p int) int) Option {
+//     panic("unimplemented")
+// }
+
+// DefaultDirection sets the default direction for a Paragraph. The direction is
+// overridden if the text contains directional characters.
+func DefaultDirection(d Direction) Option {
+       panic("unimplemented")
+}
+
+// A Paragraph holds a single Paragraph for Bidi processing.
+type Paragraph struct {
+       // buffers
+}
+
+// SetBytes configures p for the given paragraph text. It replaces text
+// previously set by SetBytes or SetString. If b contains a paragraph separator
+// it will only process the first paragraph and report the number of bytes
+// consumed from b including this separator. Error may be non-nil if options are
+// given.
+func (p *Paragraph) SetBytes(b []byte, opts ...Option) (n int, err error) {
+       panic("unimplemented")
+}
+
+// SetString configures p for the given paragraph text. It replaces text
+// previously set by SetBytes or SetString. If b contains a paragraph separator
+// it will only process the first paragraph and report the number of bytes
+// consumed from b including this separator. Error may be non-nil if options are
+// given.
+func (p *Paragraph) SetString(s string, opts ...Option) (n int, err error) {
+       panic("unimplemented")
+}
+
+// IsLeftToRight reports whether the principle direction of rendering for this
+// paragraphs is left-to-right. If this returns false, the principle direction
+// of rendering is right-to-left.
+func (p *Paragraph) IsLeftToRight() bool {
+       panic("unimplemented")
+}
+
+// Direction returns the direction of the text of this paragraph.
+//
+// The direction may be LeftToRight, RightToLeft, Mixed, or Neutral.
+func (p *Paragraph) Direction() Direction {
+       panic("unimplemented")
+}
+
+// RunAt reports the Run at the given position of the input text.
+//
+// This method can be used for computing line breaks on paragraphs.
+func (p *Paragraph) RunAt(pos int) Run {
+       panic("unimplemented")
+}
+
+// Order computes the visual ordering of all the runs in a Paragraph.
+func (p *Paragraph) Order() (Ordering, error) {
+       panic("unimplemented")
+}
+
+// Line computes the visual ordering of runs for a single line starting and
+// ending at the given positions in the original text.
+func (p *Paragraph) Line(start, end int) (Ordering, error) {
+       panic("unimplemented")
+}
+
+// An Ordering holds the computed visual order of runs of a Paragraph. Calling
+// SetBytes or SetString on the originating Paragraph invalidates an Ordering.
+// The methods of an Ordering should only be called by one goroutine at a time.
+type Ordering struct{}
+
+// Direction reports the directionality of the runs.
+//
+// The direction may be LeftToRight, RightToLeft, Mixed, or Neutral.
+func (o *Ordering) Direction() Direction {
+       panic("unimplemented")
+}
+
+// NumRuns returns the number of runs.
+func (o *Ordering) NumRuns() int {
+       panic("unimplemented")
+}
+
+// Run returns the ith run within the ordering.
+func (o *Ordering) Run(i int) Run {
+       panic("unimplemented")
+}
+
+// TODO: perhaps with options.
+// // Reorder creates a reader that reads the runes in visual order per character.
+// // Modifiers remain after the runes they modify.
+// func (l *Runs) Reorder() io.Reader {
+//     panic("unimplemented")
+// }
+
+// A Run is a continuous sequence of characters of a single direction.
+type Run struct {
+}
+
+// String returns the text of the run in its original order.
+func (r *Run) String() string {
+       panic("unimplemented")
+}
+
+// Bytes returns the text of the run in its original order.
+func (r *Run) Bytes() []byte {
+       panic("unimplemented")
+}
+
+// TODO: methods for
+// - Display order
+// - headers and footers
+// - bracket replacement.
+
+// Direction reports the direction of the run.
+func (r *Run) Direction() Direction {
+       panic("unimplemented")
+}
+
+// Position of the Run within the text passed to SetBytes or SetString of the
+// originating Paragraph value.
+func (r *Run) Pos() (start, end int) {
+       panic("unimplemented")
+}
+
+// AppendReverse reverses the order of characters of in, appends them to out,
+// and returns the result. Modifiers will still follow the runes they modify.
+// Brackets are replaced with their counterparts.
+func AppendReverse(out, in []byte) []byte {
+       panic("unimplemented")
+}
+
+// ReverseString reverses the order of characters in s and returns a new string.
+// Modifiers will still follow the runes they modify. Brackets are replaced with
+// their counterparts.
+func ReverseString(s string) string {
+       panic("unimplemented")
+}
diff --git a/vendor/golang.org/x/text/unicode/bidi/bracket.go b/vendor/golang.org/x/text/unicode/bidi/bracket.go
new file mode 100644 (file)
index 0000000..601e259
--- /dev/null
@@ -0,0 +1,335 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package bidi
+
+import (
+       "container/list"
+       "fmt"
+       "sort"
+)
+
+// This file contains a port of the reference implementation of the
+// Bidi Parentheses Algorithm:
+// http://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/BidiPBAReference.java
+//
+// The implementation in this file covers definitions BD14-BD16 and rule N0
+// of UAX#9.
+//
+// Some preprocessing is done for each rune before data is passed to this
+// algorithm:
+//  - opening and closing brackets are identified
+//  - a bracket pair type, like '(' and ')' is assigned a unique identifier that
+//    is identical for the opening and closing bracket. It is left to do these
+//    mappings.
+//  - The BPA algorithm requires that bracket characters that are canonical
+//    equivalents of each other be able to be substituted for each other.
+//    It is the responsibility of the caller to do this canonicalization.
+//
+// In implementing BD16, this implementation departs slightly from the "logical"
+// algorithm defined in UAX#9. In particular, the stack referenced there
+// supports operations that go beyond a "basic" stack. An equivalent
+// implementation based on a linked list is used here.
+
+// Bidi_Paired_Bracket_Type
+// BD14. An opening paired bracket is a character whose
+// Bidi_Paired_Bracket_Type property value is Open.
+//
+// BD15. A closing paired bracket is a character whose
+// Bidi_Paired_Bracket_Type property value is Close.
+type bracketType byte
+
+const (
+       bpNone bracketType = iota
+       bpOpen
+       bpClose
+)
+
+// bracketPair holds a pair of index values for opening and closing bracket
+// location of a bracket pair.
+type bracketPair struct {
+       opener int
+       closer int
+}
+
+func (b *bracketPair) String() string {
+       return fmt.Sprintf("(%v, %v)", b.opener, b.closer)
+}
+
+// bracketPairs is a slice of bracketPairs with a sort.Interface implementation.
+type bracketPairs []bracketPair
+
+func (b bracketPairs) Len() int           { return len(b) }
+func (b bracketPairs) Swap(i, j int)      { b[i], b[j] = b[j], b[i] }
+func (b bracketPairs) Less(i, j int) bool { return b[i].opener < b[j].opener }
+
+// resolvePairedBrackets runs the paired bracket part of the UBA algorithm.
+//
+// For each rune, it takes the indexes into the original string, the class the
+// bracket type (in pairTypes) and the bracket identifier (pairValues). It also
+// takes the direction type for the start-of-sentence and the embedding level.
+//
+// The identifiers for bracket types are the rune of the canonicalized opening
+// bracket for brackets (open or close) or 0 for runes that are not brackets.
+func resolvePairedBrackets(s *isolatingRunSequence) {
+       p := bracketPairer{
+               sos:              s.sos,
+               openers:          list.New(),
+               codesIsolatedRun: s.types,
+               indexes:          s.indexes,
+       }
+       dirEmbed := L
+       if s.level&1 != 0 {
+               dirEmbed = R
+       }
+       p.locateBrackets(s.p.pairTypes, s.p.pairValues)
+       p.resolveBrackets(dirEmbed, s.p.initialTypes)
+}
+
+type bracketPairer struct {
+       sos Class // direction corresponding to start of sequence
+
+       // The following is a restatement of BD 16 using non-algorithmic language.
+       //
+       // A bracket pair is a pair of characters consisting of an opening
+       // paired bracket and a closing paired bracket such that the
+       // Bidi_Paired_Bracket property value of the former equals the latter,
+       // subject to the following constraints.
+       // - both characters of a pair occur in the same isolating run sequence
+       // - the closing character of a pair follows the opening character
+       // - any bracket character can belong at most to one pair, the earliest possible one
+       // - any bracket character not part of a pair is treated like an ordinary character
+       // - pairs may nest properly, but their spans may not overlap otherwise
+
+       // Bracket characters with canonical decompositions are supposed to be
+       // treated as if they had been normalized, to allow normalized and non-
+       // normalized text to give the same result. In this implementation that step
+       // is pushed out to the caller. The caller has to ensure that the pairValue
+       // slices contain the rune of the opening bracket after normalization for
+       // any opening or closing bracket.
+
+       openers *list.List // list of positions for opening brackets
+
+       // bracket pair positions sorted by location of opening bracket
+       pairPositions bracketPairs
+
+       codesIsolatedRun []Class // directional bidi codes for an isolated run
+       indexes          []int   // array of index values into the original string
+
+}
+
+// matchOpener reports whether characters at given positions form a matching
+// bracket pair.
+func (p *bracketPairer) matchOpener(pairValues []rune, opener, closer int) bool {
+       return pairValues[p.indexes[opener]] == pairValues[p.indexes[closer]]
+}
+
+const maxPairingDepth = 63
+
+// locateBrackets locates matching bracket pairs according to BD16.
+//
+// This implementation uses a linked list instead of a stack, because, while
+// elements are added at the front (like a push) they are not generally removed
+// in atomic 'pop' operations, reducing the benefit of the stack archetype.
+func (p *bracketPairer) locateBrackets(pairTypes []bracketType, pairValues []rune) {
+       // traverse the run
+       // do that explicitly (not in a for-each) so we can record position
+       for i, index := range p.indexes {
+
+               // look at the bracket type for each character
+               if pairTypes[index] == bpNone || p.codesIsolatedRun[i] != ON {
+                       // continue scanning
+                       continue
+               }
+               switch pairTypes[index] {
+               case bpOpen:
+                       // check if maximum pairing depth reached
+                       if p.openers.Len() == maxPairingDepth {
+                               p.openers.Init()
+                               return
+                       }
+                       // remember opener location, most recent first
+                       p.openers.PushFront(i)
+
+               case bpClose:
+                       // see if there is a match
+                       count := 0
+                       for elem := p.openers.Front(); elem != nil; elem = elem.Next() {
+                               count++
+                               opener := elem.Value.(int)
+                               if p.matchOpener(pairValues, opener, i) {
+                                       // if the opener matches, add nested pair to the ordered list
+                                       p.pairPositions = append(p.pairPositions, bracketPair{opener, i})
+                                       // remove up to and including matched opener
+                                       for ; count > 0; count-- {
+                                               p.openers.Remove(p.openers.Front())
+                                       }
+                                       break
+                               }
+                       }
+                       sort.Sort(p.pairPositions)
+                       // if we get here, the closing bracket matched no openers
+                       // and gets ignored
+               }
+       }
+}
+
+// Bracket pairs within an isolating run sequence are processed as units so
+// that both the opening and the closing paired bracket in a pair resolve to
+// the same direction.
+//
+// N0. Process bracket pairs in an isolating run sequence sequentially in
+// the logical order of the text positions of the opening paired brackets
+// using the logic given below. Within this scope, bidirectional types EN
+// and AN are treated as R.
+//
+// Identify the bracket pairs in the current isolating run sequence
+// according to BD16. For each bracket-pair element in the list of pairs of
+// text positions:
+//
+// a Inspect the bidirectional types of the characters enclosed within the
+// bracket pair.
+//
+// b If any strong type (either L or R) matching the embedding direction is
+// found, set the type for both brackets in the pair to match the embedding
+// direction.
+//
+// o [ e ] o -> o e e e o
+//
+// o [ o e ] -> o e o e e
+//
+// o [ NI e ] -> o e NI e e
+//
+// c Otherwise, if a strong type (opposite the embedding direction) is
+// found, test for adjacent strong types as follows: 1 First, check
+// backwards before the opening paired bracket until the first strong type
+// (L, R, or sos) is found. If that first preceding strong type is opposite
+// the embedding direction, then set the type for both brackets in the pair
+// to that type. 2 Otherwise, set the type for both brackets in the pair to
+// the embedding direction.
+//
+// o [ o ] e -> o o o o e
+//
+// o [ o NI ] o -> o o o NI o o
+//
+// e [ o ] o -> e e o e o
+//
+// e [ o ] e -> e e o e e
+//
+// e ( o [ o ] NI ) e -> e e o o o o NI e e
+//
+// d Otherwise, do not set the type for the current bracket pair. Note that
+// if the enclosed text contains no strong types the paired brackets will
+// both resolve to the same level when resolved individually using rules N1
+// and N2.
+//
+// e ( NI ) o -> e ( NI ) o
+
+// getStrongTypeN0 maps character's directional code to strong type as required
+// by rule N0.
+//
+// TODO: have separate type for "strong" directionality.
+func (p *bracketPairer) getStrongTypeN0(index int) Class {
+       switch p.codesIsolatedRun[index] {
+       // in the scope of N0, number types are treated as R
+       case EN, AN, AL, R:
+               return R
+       case L:
+               return L
+       default:
+               return ON
+       }
+}
+
+// classifyPairContent reports the strong types contained inside a Bracket Pair,
+// assuming the given embedding direction.
+//
+// It returns ON if no strong type is found. If a single strong type is found,
+// it returns this this type. Otherwise it returns the embedding direction.
+//
+// TODO: use separate type for "strong" directionality.
+func (p *bracketPairer) classifyPairContent(loc bracketPair, dirEmbed Class) Class {
+       dirOpposite := ON
+       for i := loc.opener + 1; i < loc.closer; i++ {
+               dir := p.getStrongTypeN0(i)
+               if dir == ON {
+                       continue
+               }
+               if dir == dirEmbed {
+                       return dir // type matching embedding direction found
+               }
+               dirOpposite = dir
+       }
+       // return ON if no strong type found, or class opposite to dirEmbed
+       return dirOpposite
+}
+
+// classBeforePair determines which strong types are present before a Bracket
+// Pair. Return R or L if strong type found, otherwise ON.
+func (p *bracketPairer) classBeforePair(loc bracketPair) Class {
+       for i := loc.opener - 1; i >= 0; i-- {
+               if dir := p.getStrongTypeN0(i); dir != ON {
+                       return dir
+               }
+       }
+       // no strong types found, return sos
+       return p.sos
+}
+
+// assignBracketType implements rule N0 for a single bracket pair.
+func (p *bracketPairer) assignBracketType(loc bracketPair, dirEmbed Class, initialTypes []Class) {
+       // rule "N0, a", inspect contents of pair
+       dirPair := p.classifyPairContent(loc, dirEmbed)
+
+       // dirPair is now L, R, or N (no strong type found)
+
+       // the following logical tests are performed out of order compared to
+       // the statement of the rules but yield the same results
+       if dirPair == ON {
+               return // case "d" - nothing to do
+       }
+
+       if dirPair != dirEmbed {
+               // case "c": strong type found, opposite - check before (c.1)
+               dirPair = p.classBeforePair(loc)
+               if dirPair == dirEmbed || dirPair == ON {
+                       // no strong opposite type found before - use embedding (c.2)
+                       dirPair = dirEmbed
+               }
+       }
+       // else: case "b", strong type found matching embedding,
+       // no explicit action needed, as dirPair is already set to embedding
+       // direction
+
+       // set the bracket types to the type found
+       p.setBracketsToType(loc, dirPair, initialTypes)
+}
+
+func (p *bracketPairer) setBracketsToType(loc bracketPair, dirPair Class, initialTypes []Class) {
+       p.codesIsolatedRun[loc.opener] = dirPair
+       p.codesIsolatedRun[loc.closer] = dirPair
+
+       for i := loc.opener + 1; i < loc.closer; i++ {
+               index := p.indexes[i]
+               if initialTypes[index] != NSM {
+                       break
+               }
+               p.codesIsolatedRun[i] = dirPair
+       }
+
+       for i := loc.closer + 1; i < len(p.indexes); i++ {
+               index := p.indexes[i]
+               if initialTypes[index] != NSM {
+                       break
+               }
+               p.codesIsolatedRun[i] = dirPair
+       }
+}
+
+// resolveBrackets implements rule N0 for a list of pairs.
+func (p *bracketPairer) resolveBrackets(dirEmbed Class, initialTypes []Class) {
+       for _, loc := range p.pairPositions {
+               p.assignBracketType(loc, dirEmbed, initialTypes)
+       }
+}
diff --git a/vendor/golang.org/x/text/unicode/bidi/core.go b/vendor/golang.org/x/text/unicode/bidi/core.go
new file mode 100644 (file)
index 0000000..d4c1399
--- /dev/null
@@ -0,0 +1,1058 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package bidi
+
+import "log"
+
+// This implementation is a port based on the reference implementation found at:
+// http://www.unicode.org/Public/PROGRAMS/BidiReferenceJava/
+//
+// described in Unicode Bidirectional Algorithm (UAX #9).
+//
+// Input:
+// There are two levels of input to the algorithm, since clients may prefer to
+// supply some information from out-of-band sources rather than relying on the
+// default behavior.
+//
+// - Bidi class array
+// - Bidi class array, with externally supplied base line direction
+//
+// Output:
+// Output is separated into several stages:
+//
+//  - levels array over entire paragraph
+//  - reordering array over entire paragraph
+//  - levels array over line
+//  - reordering array over line
+//
+// Note that for conformance to the Unicode Bidirectional Algorithm,
+// implementations are only required to generate correct reordering and
+// character directionality (odd or even levels) over a line. Generating
+// identical level arrays over a line is not required. Bidi explicit format
+// codes (LRE, RLE, LRO, RLO, PDF) and BN can be assigned arbitrary levels and
+// positions as long as the rest of the input is properly reordered.
+//
+// As the algorithm is defined to operate on a single paragraph at a time, this
+// implementation is written to handle single paragraphs. Thus rule P1 is
+// presumed by this implementation-- the data provided to the implementation is
+// assumed to be a single paragraph, and either contains no 'B' codes, or a
+// single 'B' code at the end of the input. 'B' is allowed as input to
+// illustrate how the algorithm assigns it a level.
+//
+// Also note that rules L3 and L4 depend on the rendering engine that uses the
+// result of the bidi algorithm. This implementation assumes that the rendering
+// engine expects combining marks in visual order (e.g. to the left of their
+// base character in RTL runs) and that it adjusts the glyphs used to render
+// mirrored characters that are in RTL runs so that they render appropriately.
+
+// level is the embedding level of a character. Even embedding levels indicate
+// left-to-right order and odd levels indicate right-to-left order. The special
+// level of -1 is reserved for undefined order.
+type level int8
+
+const implicitLevel level = -1
+
+// in returns if x is equal to any of the values in set.
+func (c Class) in(set ...Class) bool {
+       for _, s := range set {
+               if c == s {
+                       return true
+               }
+       }
+       return false
+}
+
+// A paragraph contains the state of a paragraph.
+type paragraph struct {
+       initialTypes []Class
+
+       // Arrays of properties needed for paired bracket evaluation in N0
+       pairTypes  []bracketType // paired Bracket types for paragraph
+       pairValues []rune        // rune for opening bracket or pbOpen and pbClose; 0 for pbNone
+
+       embeddingLevel level // default: = implicitLevel;
+
+       // at the paragraph levels
+       resultTypes  []Class
+       resultLevels []level
+
+       // Index of matching PDI for isolate initiator characters. For other
+       // characters, the value of matchingPDI will be set to -1. For isolate
+       // initiators with no matching PDI, matchingPDI will be set to the length of
+       // the input string.
+       matchingPDI []int
+
+       // Index of matching isolate initiator for PDI characters. For other
+       // characters, and for PDIs with no matching isolate initiator, the value of
+       // matchingIsolateInitiator will be set to -1.
+       matchingIsolateInitiator []int
+}
+
+// newParagraph initializes a paragraph. The user needs to supply a few arrays
+// corresponding to the preprocessed text input. The types correspond to the
+// Unicode BiDi classes for each rune. pairTypes indicates the bracket type for
+// each rune. pairValues provides a unique bracket class identifier for each
+// rune (suggested is the rune of the open bracket for opening and matching
+// close brackets, after normalization). The embedding levels are optional, but
+// may be supplied to encode embedding levels of styled text.
+//
+// TODO: return an error.
+func newParagraph(types []Class, pairTypes []bracketType, pairValues []rune, levels level) *paragraph {
+       validateTypes(types)
+       validatePbTypes(pairTypes)
+       validatePbValues(pairValues, pairTypes)
+       validateParagraphEmbeddingLevel(levels)
+
+       p := &paragraph{
+               initialTypes:   append([]Class(nil), types...),
+               embeddingLevel: levels,
+
+               pairTypes:  pairTypes,
+               pairValues: pairValues,
+
+               resultTypes: append([]Class(nil), types...),
+       }
+       p.run()
+       return p
+}
+
+func (p *paragraph) Len() int { return len(p.initialTypes) }
+
+// The algorithm. Does not include line-based processing (Rules L1, L2).
+// These are applied later in the line-based phase of the algorithm.
+func (p *paragraph) run() {
+       p.determineMatchingIsolates()
+
+       // 1) determining the paragraph level
+       // Rule P1 is the requirement for entering this algorithm.
+       // Rules P2, P3.
+       // If no externally supplied paragraph embedding level, use default.
+       if p.embeddingLevel == implicitLevel {
+               p.embeddingLevel = p.determineParagraphEmbeddingLevel(0, p.Len())
+       }
+
+       // Initialize result levels to paragraph embedding level.
+       p.resultLevels = make([]level, p.Len())
+       setLevels(p.resultLevels, p.embeddingLevel)
+
+       // 2) Explicit levels and directions
+       // Rules X1-X8.
+       p.determineExplicitEmbeddingLevels()
+
+       // Rule X9.
+       // We do not remove the embeddings, the overrides, the PDFs, and the BNs
+       // from the string explicitly. But they are not copied into isolating run
+       // sequences when they are created, so they are removed for all
+       // practical purposes.
+
+       // Rule X10.
+       // Run remainder of algorithm one isolating run sequence at a time
+       for _, seq := range p.determineIsolatingRunSequences() {
+               // 3) resolving weak types
+               // Rules W1-W7.
+               seq.resolveWeakTypes()
+
+               // 4a) resolving paired brackets
+               // Rule N0
+               resolvePairedBrackets(seq)
+
+               // 4b) resolving neutral types
+               // Rules N1-N3.
+               seq.resolveNeutralTypes()
+
+               // 5) resolving implicit embedding levels
+               // Rules I1, I2.
+               seq.resolveImplicitLevels()
+
+               // Apply the computed levels and types
+               seq.applyLevelsAndTypes()
+       }
+
+       // Assign appropriate levels to 'hide' LREs, RLEs, LROs, RLOs, PDFs, and
+       // BNs. This is for convenience, so the resulting level array will have
+       // a value for every character.
+       p.assignLevelsToCharactersRemovedByX9()
+}
+
+// determineMatchingIsolates determines the matching PDI for each isolate
+// initiator and vice versa.
+//
+// Definition BD9.
+//
+// At the end of this function:
+//
+//  - The member variable matchingPDI is set to point to the index of the
+//    matching PDI character for each isolate initiator character. If there is
+//    no matching PDI, it is set to the length of the input text. For other
+//    characters, it is set to -1.
+//  - The member variable matchingIsolateInitiator is set to point to the
+//    index of the matching isolate initiator character for each PDI character.
+//    If there is no matching isolate initiator, or the character is not a PDI,
+//    it is set to -1.
+func (p *paragraph) determineMatchingIsolates() {
+       p.matchingPDI = make([]int, p.Len())
+       p.matchingIsolateInitiator = make([]int, p.Len())
+
+       for i := range p.matchingIsolateInitiator {
+               p.matchingIsolateInitiator[i] = -1
+       }
+
+       for i := range p.matchingPDI {
+               p.matchingPDI[i] = -1
+
+               if t := p.resultTypes[i]; t.in(LRI, RLI, FSI) {
+                       depthCounter := 1
+                       for j := i + 1; j < p.Len(); j++ {
+                               if u := p.resultTypes[j]; u.in(LRI, RLI, FSI) {
+                                       depthCounter++
+                               } else if u == PDI {
+                                       if depthCounter--; depthCounter == 0 {
+                                               p.matchingPDI[i] = j
+                                               p.matchingIsolateInitiator[j] = i
+                                               break
+                                       }
+                               }
+                       }
+                       if p.matchingPDI[i] == -1 {
+                               p.matchingPDI[i] = p.Len()
+                       }
+               }
+       }
+}
+
+// determineParagraphEmbeddingLevel reports the resolved paragraph direction of
+// the substring limited by the given range [start, end).
+//
+// Determines the paragraph level based on rules P2, P3. This is also used
+// in rule X5c to find if an FSI should resolve to LRI or RLI.
+func (p *paragraph) determineParagraphEmbeddingLevel(start, end int) level {
+       var strongType Class = unknownClass
+
+       // Rule P2.
+       for i := start; i < end; i++ {
+               if t := p.resultTypes[i]; t.in(L, AL, R) {
+                       strongType = t
+                       break
+               } else if t.in(FSI, LRI, RLI) {
+                       i = p.matchingPDI[i] // skip over to the matching PDI
+                       if i > end {
+                               log.Panic("assert (i <= end)")
+                       }
+               }
+       }
+       // Rule P3.
+       switch strongType {
+       case unknownClass: // none found
+               // default embedding level when no strong types found is 0.
+               return 0
+       case L:
+               return 0
+       default: // AL, R
+               return 1
+       }
+}
+
+const maxDepth = 125
+
+// This stack will store the embedding levels and override and isolated
+// statuses
+type directionalStatusStack struct {
+       stackCounter        int
+       embeddingLevelStack [maxDepth + 1]level
+       overrideStatusStack [maxDepth + 1]Class
+       isolateStatusStack  [maxDepth + 1]bool
+}
+
+func (s *directionalStatusStack) empty()     { s.stackCounter = 0 }
+func (s *directionalStatusStack) pop()       { s.stackCounter-- }
+func (s *directionalStatusStack) depth() int { return s.stackCounter }
+
+func (s *directionalStatusStack) push(level level, overrideStatus Class, isolateStatus bool) {
+       s.embeddingLevelStack[s.stackCounter] = level
+       s.overrideStatusStack[s.stackCounter] = overrideStatus
+       s.isolateStatusStack[s.stackCounter] = isolateStatus
+       s.stackCounter++
+}
+
+func (s *directionalStatusStack) lastEmbeddingLevel() level {
+       return s.embeddingLevelStack[s.stackCounter-1]
+}
+
+func (s *directionalStatusStack) lastDirectionalOverrideStatus() Class {
+       return s.overrideStatusStack[s.stackCounter-1]
+}
+
+func (s *directionalStatusStack) lastDirectionalIsolateStatus() bool {
+       return s.isolateStatusStack[s.stackCounter-1]
+}
+
+// Determine explicit levels using rules X1 - X8
+func (p *paragraph) determineExplicitEmbeddingLevels() {
+       var stack directionalStatusStack
+       var overflowIsolateCount, overflowEmbeddingCount, validIsolateCount int
+
+       // Rule X1.
+       stack.push(p.embeddingLevel, ON, false)
+
+       for i, t := range p.resultTypes {
+               // Rules X2, X3, X4, X5, X5a, X5b, X5c
+               switch t {
+               case RLE, LRE, RLO, LRO, RLI, LRI, FSI:
+                       isIsolate := t.in(RLI, LRI, FSI)
+                       isRTL := t.in(RLE, RLO, RLI)
+
+                       // override if this is an FSI that resolves to RLI
+                       if t == FSI {
+                               isRTL = (p.determineParagraphEmbeddingLevel(i+1, p.matchingPDI[i]) == 1)
+                       }
+                       if isIsolate {
+                               p.resultLevels[i] = stack.lastEmbeddingLevel()
+                               if stack.lastDirectionalOverrideStatus() != ON {
+                                       p.resultTypes[i] = stack.lastDirectionalOverrideStatus()
+                               }
+                       }
+
+                       var newLevel level
+                       if isRTL {
+                               // least greater odd
+                               newLevel = (stack.lastEmbeddingLevel() + 1) | 1
+                       } else {
+                               // least greater even
+                               newLevel = (stack.lastEmbeddingLevel() + 2) &^ 1
+                       }
+
+                       if newLevel <= maxDepth && overflowIsolateCount == 0 && overflowEmbeddingCount == 0 {
+                               if isIsolate {
+                                       validIsolateCount++
+                               }
+                               // Push new embedding level, override status, and isolated
+                               // status.
+                               // No check for valid stack counter, since the level check
+                               // suffices.
+                               switch t {
+                               case LRO:
+                                       stack.push(newLevel, L, isIsolate)
+                               case RLO:
+                                       stack.push(newLevel, R, isIsolate)
+                               default:
+                                       stack.push(newLevel, ON, isIsolate)
+                               }
+                               // Not really part of the spec
+                               if !isIsolate {
+                                       p.resultLevels[i] = newLevel
+                               }
+                       } else {
+                               // This is an invalid explicit formatting character,
+                               // so apply the "Otherwise" part of rules X2-X5b.
+                               if isIsolate {
+                                       overflowIsolateCount++
+                               } else { // !isIsolate
+                                       if overflowIsolateCount == 0 {
+                                               overflowEmbeddingCount++
+                                       }
+                               }
+                       }
+
+               // Rule X6a
+               case PDI:
+                       if overflowIsolateCount > 0 {
+                               overflowIsolateCount--
+                       } else if validIsolateCount == 0 {
+                               // do nothing
+                       } else {
+                               overflowEmbeddingCount = 0
+                               for !stack.lastDirectionalIsolateStatus() {
+                                       stack.pop()
+                               }
+                               stack.pop()
+                               validIsolateCount--
+                       }
+                       p.resultLevels[i] = stack.lastEmbeddingLevel()
+
+               // Rule X7
+               case PDF:
+                       // Not really part of the spec
+                       p.resultLevels[i] = stack.lastEmbeddingLevel()
+
+                       if overflowIsolateCount > 0 {
+                               // do nothing
+                       } else if overflowEmbeddingCount > 0 {
+                               overflowEmbeddingCount--
+                       } else if !stack.lastDirectionalIsolateStatus() && stack.depth() >= 2 {
+                               stack.pop()
+                       }
+
+               case B: // paragraph separator.
+                       // Rule X8.
+
+                       // These values are reset for clarity, in this implementation B
+                       // can only occur as the last code in the array.
+                       stack.empty()
+                       overflowIsolateCount = 0
+                       overflowEmbeddingCount = 0
+                       validIsolateCount = 0
+                       p.resultLevels[i] = p.embeddingLevel
+
+               default:
+                       p.resultLevels[i] = stack.lastEmbeddingLevel()
+                       if stack.lastDirectionalOverrideStatus() != ON {
+                               p.resultTypes[i] = stack.lastDirectionalOverrideStatus()
+                       }
+               }
+       }
+}
+
+type isolatingRunSequence struct {
+       p *paragraph
+
+       indexes []int // indexes to the original string
+
+       types          []Class // type of each character using the index
+       resolvedLevels []level // resolved levels after application of rules
+       level          level
+       sos, eos       Class
+}
+
+func (i *isolatingRunSequence) Len() int { return len(i.indexes) }
+
+func maxLevel(a, b level) level {
+       if a > b {
+               return a
+       }
+       return b
+}
+
+// Rule X10, second bullet: Determine the start-of-sequence (sos) and end-of-sequence (eos) types,
+//                      either L or R, for each isolating run sequence.
+func (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence {
+       length := len(indexes)
+       types := make([]Class, length)
+       for i, x := range indexes {
+               types[i] = p.resultTypes[x]
+       }
+
+       // assign level, sos and eos
+       prevChar := indexes[0] - 1
+       for prevChar >= 0 && isRemovedByX9(p.initialTypes[prevChar]) {
+               prevChar--
+       }
+       prevLevel := p.embeddingLevel
+       if prevChar >= 0 {
+               prevLevel = p.resultLevels[prevChar]
+       }
+
+       var succLevel level
+       lastType := types[length-1]
+       if lastType.in(LRI, RLI, FSI) {
+               succLevel = p.embeddingLevel
+       } else {
+               // the first character after the end of run sequence
+               limit := indexes[length-1] + 1
+               for ; limit < p.Len() && isRemovedByX9(p.initialTypes[limit]); limit++ {
+
+               }
+               succLevel = p.embeddingLevel
+               if limit < p.Len() {
+                       succLevel = p.resultLevels[limit]
+               }
+       }
+       level := p.resultLevels[indexes[0]]
+       return &isolatingRunSequence{
+               p:       p,
+               indexes: indexes,
+               types:   types,
+               level:   level,
+               sos:     typeForLevel(maxLevel(prevLevel, level)),
+               eos:     typeForLevel(maxLevel(succLevel, level)),
+       }
+}
+
+// Resolving weak types Rules W1-W7.
+//
+// Note that some weak types (EN, AN) remain after this processing is
+// complete.
+func (s *isolatingRunSequence) resolveWeakTypes() {
+
+       // on entry, only these types remain
+       s.assertOnly(L, R, AL, EN, ES, ET, AN, CS, B, S, WS, ON, NSM, LRI, RLI, FSI, PDI)
+
+       // Rule W1.
+       // Changes all NSMs.
+       preceedingCharacterType := s.sos
+       for i, t := range s.types {
+               if t == NSM {
+                       s.types[i] = preceedingCharacterType
+               } else {
+                       if t.in(LRI, RLI, FSI, PDI) {
+                               preceedingCharacterType = ON
+                       }
+                       preceedingCharacterType = t
+               }
+       }
+
+       // Rule W2.
+       // EN does not change at the start of the run, because sos != AL.
+       for i, t := range s.types {
+               if t == EN {
+                       for j := i - 1; j >= 0; j-- {
+                               if t := s.types[j]; t.in(L, R, AL) {
+                                       if t == AL {
+                                               s.types[i] = AN
+                                       }
+                                       break
+                               }
+                       }
+               }
+       }
+
+       // Rule W3.
+       for i, t := range s.types {
+               if t == AL {
+                       s.types[i] = R
+               }
+       }
+
+       // Rule W4.
+       // Since there must be values on both sides for this rule to have an
+       // effect, the scan skips the first and last value.
+       //
+       // Although the scan proceeds left to right, and changes the type
+       // values in a way that would appear to affect the computations
+       // later in the scan, there is actually no problem. A change in the
+       // current value can only affect the value to its immediate right,
+       // and only affect it if it is ES or CS. But the current value can
+       // only change if the value to its right is not ES or CS. Thus
+       // either the current value will not change, or its change will have
+       // no effect on the remainder of the analysis.
+
+       for i := 1; i < s.Len()-1; i++ {
+               t := s.types[i]
+               if t == ES || t == CS {
+                       prevSepType := s.types[i-1]
+                       succSepType := s.types[i+1]
+                       if prevSepType == EN && succSepType == EN {
+                               s.types[i] = EN
+                       } else if s.types[i] == CS && prevSepType == AN && succSepType == AN {
+                               s.types[i] = AN
+                       }
+               }
+       }
+
+       // Rule W5.
+       for i, t := range s.types {
+               if t == ET {
+                       // locate end of sequence
+                       runStart := i
+                       runEnd := s.findRunLimit(runStart, ET)
+
+                       // check values at ends of sequence
+                       t := s.sos
+                       if runStart > 0 {
+                               t = s.types[runStart-1]
+                       }
+                       if t != EN {
+                               t = s.eos
+                               if runEnd < len(s.types) {
+                                       t = s.types[runEnd]
+                               }
+                       }
+                       if t == EN {
+                               setTypes(s.types[runStart:runEnd], EN)
+                       }
+                       // continue at end of sequence
+                       i = runEnd
+               }
+       }
+
+       // Rule W6.
+       for i, t := range s.types {
+               if t.in(ES, ET, CS) {
+                       s.types[i] = ON
+               }
+       }
+
+       // Rule W7.
+       for i, t := range s.types {
+               if t == EN {
+                       // set default if we reach start of run
+                       prevStrongType := s.sos
+                       for j := i - 1; j >= 0; j-- {
+                               t = s.types[j]
+                               if t == L || t == R { // AL's have been changed to R
+                                       prevStrongType = t
+                                       break
+                               }
+                       }
+                       if prevStrongType == L {
+                               s.types[i] = L
+                       }
+               }
+       }
+}
+
+// 6) resolving neutral types Rules N1-N2.
+func (s *isolatingRunSequence) resolveNeutralTypes() {
+
+       // on entry, only these types can be in resultTypes
+       s.assertOnly(L, R, EN, AN, B, S, WS, ON, RLI, LRI, FSI, PDI)
+
+       for i, t := range s.types {
+               switch t {
+               case WS, ON, B, S, RLI, LRI, FSI, PDI:
+                       // find bounds of run of neutrals
+                       runStart := i
+                       runEnd := s.findRunLimit(runStart, B, S, WS, ON, RLI, LRI, FSI, PDI)
+
+                       // determine effective types at ends of run
+                       var leadType, trailType Class
+
+                       // Note that the character found can only be L, R, AN, or
+                       // EN.
+                       if runStart == 0 {
+                               leadType = s.sos
+                       } else {
+                               leadType = s.types[runStart-1]
+                               if leadType.in(AN, EN) {
+                                       leadType = R
+                               }
+                       }
+                       if runEnd == len(s.types) {
+                               trailType = s.eos
+                       } else {
+                               trailType = s.types[runEnd]
+                               if trailType.in(AN, EN) {
+                                       trailType = R
+                               }
+                       }
+
+                       var resolvedType Class
+                       if leadType == trailType {
+                               // Rule N1.
+                               resolvedType = leadType
+                       } else {
+                               // Rule N2.
+                               // Notice the embedding level of the run is used, not
+                               // the paragraph embedding level.
+                               resolvedType = typeForLevel(s.level)
+                       }
+
+                       setTypes(s.types[runStart:runEnd], resolvedType)
+
+                       // skip over run of (former) neutrals
+                       i = runEnd
+               }
+       }
+}
+
+func setLevels(levels []level, newLevel level) {
+       for i := range levels {
+               levels[i] = newLevel
+       }
+}
+
+func setTypes(types []Class, newType Class) {
+       for i := range types {
+               types[i] = newType
+       }
+}
+
+// 7) resolving implicit embedding levels Rules I1, I2.
+func (s *isolatingRunSequence) resolveImplicitLevels() {
+
+       // on entry, only these types can be in resultTypes
+       s.assertOnly(L, R, EN, AN)
+
+       s.resolvedLevels = make([]level, len(s.types))
+       setLevels(s.resolvedLevels, s.level)
+
+       if (s.level & 1) == 0 { // even level
+               for i, t := range s.types {
+                       // Rule I1.
+                       if t == L {
+                               // no change
+                       } else if t == R {
+                               s.resolvedLevels[i] += 1
+                       } else { // t == AN || t == EN
+                               s.resolvedLevels[i] += 2
+                       }
+               }
+       } else { // odd level
+               for i, t := range s.types {
+                       // Rule I2.
+                       if t == R {
+                               // no change
+                       } else { // t == L || t == AN || t == EN
+                               s.resolvedLevels[i] += 1
+                       }
+               }
+       }
+}
+
+// Applies the levels and types resolved in rules W1-I2 to the
+// resultLevels array.
+func (s *isolatingRunSequence) applyLevelsAndTypes() {
+       for i, x := range s.indexes {
+               s.p.resultTypes[x] = s.types[i]
+               s.p.resultLevels[x] = s.resolvedLevels[i]
+       }
+}
+
+// Return the limit of the run consisting only of the types in validSet
+// starting at index. This checks the value at index, and will return
+// index if that value is not in validSet.
+func (s *isolatingRunSequence) findRunLimit(index int, validSet ...Class) int {
+loop:
+       for ; index < len(s.types); index++ {
+               t := s.types[index]
+               for _, valid := range validSet {
+                       if t == valid {
+                               continue loop
+                       }
+               }
+               return index // didn't find a match in validSet
+       }
+       return len(s.types)
+}
+
+// Algorithm validation. Assert that all values in types are in the
+// provided set.
+func (s *isolatingRunSequence) assertOnly(codes ...Class) {
+loop:
+       for i, t := range s.types {
+               for _, c := range codes {
+                       if t == c {
+                               continue loop
+                       }
+               }
+               log.Panicf("invalid bidi code %v present in assertOnly at position %d", t, s.indexes[i])
+       }
+}
+
+// determineLevelRuns returns an array of level runs. Each level run is
+// described as an array of indexes into the input string.
+//
+// Determines the level runs. Rule X9 will be applied in determining the
+// runs, in the way that makes sure the characters that are supposed to be
+// removed are not included in the runs.
+func (p *paragraph) determineLevelRuns() [][]int {
+       run := []int{}
+       allRuns := [][]int{}
+       currentLevel := implicitLevel
+
+       for i := range p.initialTypes {
+               if !isRemovedByX9(p.initialTypes[i]) {
+                       if p.resultLevels[i] != currentLevel {
+                               // we just encountered a new run; wrap up last run
+                               if currentLevel >= 0 { // only wrap it up if there was a run
+                                       allRuns = append(allRuns, run)
+                                       run = nil
+                               }
+                               // Start new run
+                               currentLevel = p.resultLevels[i]
+                       }
+                       run = append(run, i)
+               }
+       }
+       // Wrap up the final run, if any
+       if len(run) > 0 {
+               allRuns = append(allRuns, run)
+       }
+       return allRuns
+}
+
+// Definition BD13. Determine isolating run sequences.
+func (p *paragraph) determineIsolatingRunSequences() []*isolatingRunSequence {
+       levelRuns := p.determineLevelRuns()
+
+       // Compute the run that each character belongs to
+       runForCharacter := make([]int, p.Len())
+       for i, run := range levelRuns {
+               for _, index := range run {
+                       runForCharacter[index] = i
+               }
+       }
+
+       sequences := []*isolatingRunSequence{}
+
+       var currentRunSequence []int
+
+       for _, run := range levelRuns {
+               first := run[0]
+               if p.initialTypes[first] != PDI || p.matchingIsolateInitiator[first] == -1 {
+                       currentRunSequence = nil
+                       // int run = i;
+                       for {
+                               // Copy this level run into currentRunSequence
+                               currentRunSequence = append(currentRunSequence, run...)
+
+                               last := currentRunSequence[len(currentRunSequence)-1]
+                               lastT := p.initialTypes[last]
+                               if lastT.in(LRI, RLI, FSI) && p.matchingPDI[last] != p.Len() {
+                                       run = levelRuns[runForCharacter[p.matchingPDI[last]]]
+                               } else {
+                                       break
+                               }
+                       }
+                       sequences = append(sequences, p.isolatingRunSequence(currentRunSequence))
+               }
+       }
+       return sequences
+}
+
+// Assign level information to characters removed by rule X9. This is for
+// ease of relating the level information to the original input data. Note
+// that the levels assigned to these codes are arbitrary, they're chosen so
+// as to avoid breaking level runs.
+func (p *paragraph) assignLevelsToCharactersRemovedByX9() {
+       for i, t := range p.initialTypes {
+               if t.in(LRE, RLE, LRO, RLO, PDF, BN) {
+                       p.resultTypes[i] = t
+                       p.resultLevels[i] = -1
+               }
+       }
+       // now propagate forward the levels information (could have
+       // propagated backward, the main thing is not to introduce a level
+       // break where one doesn't already exist).
+
+       if p.resultLevels[0] == -1 {
+               p.resultLevels[0] = p.embeddingLevel
+       }
+       for i := 1; i < len(p.initialTypes); i++ {
+               if p.resultLevels[i] == -1 {
+                       p.resultLevels[i] = p.resultLevels[i-1]
+               }
+       }
+       // Embedding information is for informational purposes only so need not be
+       // adjusted.
+}
+
+//
+// Output
+//
+
+// getLevels computes levels array breaking lines at offsets in linebreaks.
+// Rule L1.
+//
+// The linebreaks array must include at least one value. The values must be
+// in strictly increasing order (no duplicates) between 1 and the length of
+// the text, inclusive. The last value must be the length of the text.
+func (p *paragraph) getLevels(linebreaks []int) []level {
+       // Note that since the previous processing has removed all
+       // P, S, and WS values from resultTypes, the values referred to
+       // in these rules are the initial types, before any processing
+       // has been applied (including processing of overrides).
+       //
+       // This example implementation has reinserted explicit format codes
+       // and BN, in order that the levels array correspond to the
+       // initial text. Their final placement is not normative.
+       // These codes are treated like WS in this implementation,
+       // so they don't interrupt sequences of WS.
+
+       validateLineBreaks(linebreaks, p.Len())
+
+       result := append([]level(nil), p.resultLevels...)
+
+       // don't worry about linebreaks since if there is a break within
+       // a series of WS values preceding S, the linebreak itself
+       // causes the reset.
+       for i, t := range p.initialTypes {
+               if t.in(B, S) {
+                       // Rule L1, clauses one and two.
+                       result[i] = p.embeddingLevel
+
+                       // Rule L1, clause three.
+                       for j := i - 1; j >= 0; j-- {
+                               if isWhitespace(p.initialTypes[j]) { // including format codes
+                                       result[j] = p.embeddingLevel
+                               } else {
+                                       break
+                               }
+                       }
+               }
+       }
+
+       // Rule L1, clause four.
+       start := 0
+       for _, limit := range linebreaks {
+               for j := limit - 1; j >= start; j-- {
+                       if isWhitespace(p.initialTypes[j]) { // including format codes
+                               result[j] = p.embeddingLevel
+                       } else {
+                               break
+                       }
+               }
+               start = limit
+       }
+
+       return result
+}
+
+// getReordering returns the reordering of lines from a visual index to a
+// logical index for line breaks at the given offsets.
+//
+// Lines are concatenated from left to right. So for example, the fifth
+// character from the left on the third line is
+//
+//             getReordering(linebreaks)[linebreaks[1] + 4]
+//
+// (linebreaks[1] is the position after the last character of the second
+// line, which is also the index of the first character on the third line,
+// and adding four gets the fifth character from the left).
+//
+// The linebreaks array must include at least one value. The values must be
+// in strictly increasing order (no duplicates) between 1 and the length of
+// the text, inclusive. The last value must be the length of the text.
+func (p *paragraph) getReordering(linebreaks []int) []int {
+       validateLineBreaks(linebreaks, p.Len())
+
+       return computeMultilineReordering(p.getLevels(linebreaks), linebreaks)
+}
+
+// Return multiline reordering array for a given level array. Reordering
+// does not occur across a line break.
+func computeMultilineReordering(levels []level, linebreaks []int) []int {
+       result := make([]int, len(levels))
+
+       start := 0
+       for _, limit := range linebreaks {
+               tempLevels := make([]level, limit-start)
+               copy(tempLevels, levels[start:])
+
+               for j, order := range computeReordering(tempLevels) {
+                       result[start+j] = order + start
+               }
+               start = limit
+       }
+       return result
+}
+
+// Return reordering array for a given level array. This reorders a single
+// line. The reordering is a visual to logical map. For example, the
+// leftmost char is string.charAt(order[0]). Rule L2.
+func computeReordering(levels []level) []int {
+       result := make([]int, len(levels))
+       // initialize order
+       for i := range result {
+               result[i] = i
+       }
+
+       // locate highest level found on line.
+       // Note the rules say text, but no reordering across line bounds is
+       // performed, so this is sufficient.
+       highestLevel := level(0)
+       lowestOddLevel := level(maxDepth + 2)
+       for _, level := range levels {
+               if level > highestLevel {
+                       highestLevel = level
+               }
+               if level&1 != 0 && level < lowestOddLevel {
+                       lowestOddLevel = level
+               }
+       }
+
+       for level := highestLevel; level >= lowestOddLevel; level-- {
+               for i := 0; i < len(levels); i++ {
+                       if levels[i] >= level {
+                               // find range of text at or above this level
+                               start := i
+                               limit := i + 1
+                               for limit < len(levels) && levels[limit] >= level {
+                                       limit++
+                               }
+
+                               for j, k := start, limit-1; j < k; j, k = j+1, k-1 {
+                                       result[j], result[k] = result[k], result[j]
+                               }
+                               // skip to end of level run
+                               i = limit
+                       }
+               }
+       }
+
+       return result
+}
+
+// isWhitespace reports whether the type is considered a whitespace type for the
+// line break rules.
+func isWhitespace(c Class) bool {
+       switch c {
+       case LRE, RLE, LRO, RLO, PDF, LRI, RLI, FSI, PDI, BN, WS:
+               return true
+       }
+       return false
+}
+
+// isRemovedByX9 reports whether the type is one of the types removed in X9.
+func isRemovedByX9(c Class) bool {
+       switch c {
+       case LRE, RLE, LRO, RLO, PDF, BN:
+               return true
+       }
+       return false
+}
+
+// typeForLevel reports the strong type (L or R) corresponding to the level.
+func typeForLevel(level level) Class {
+       if (level & 0x1) == 0 {
+               return L
+       }
+       return R
+}
+
+// TODO: change validation to not panic
+
+func validateTypes(types []Class) {
+       if len(types) == 0 {
+               log.Panic("types is null")
+       }
+       for i, t := range types[:len(types)-1] {
+               if t == B {
+                       log.Panicf("B type before end of paragraph at index: %d", i)
+               }
+       }
+}
+
+func validateParagraphEmbeddingLevel(embeddingLevel level) {
+       if embeddingLevel != implicitLevel &&
+               embeddingLevel != 0 &&
+               embeddingLevel != 1 {
+               log.Panicf("illegal paragraph embedding level: %d", embeddingLevel)
+       }
+}
+
+func validateLineBreaks(linebreaks []int, textLength int) {
+       prev := 0
+       for i, next := range linebreaks {
+               if next <= prev {
+                       log.Panicf("bad linebreak: %d at index: %d", next, i)
+               }
+               prev = next
+       }
+       if prev != textLength {
+               log.Panicf("last linebreak was %d, want %d", prev, textLength)
+       }
+}
+
+func validatePbTypes(pairTypes []bracketType) {
+       if len(pairTypes) == 0 {
+               log.Panic("pairTypes is null")
+       }
+       for i, pt := range pairTypes {
+               switch pt {
+               case bpNone, bpOpen, bpClose:
+               default:
+                       log.Panicf("illegal pairType value at %d: %v", i, pairTypes[i])
+               }
+       }
+}
+
+func validatePbValues(pairValues []rune, pairTypes []bracketType) {
+       if pairValues == nil {
+               log.Panic("pairValues is null")
+       }
+       if len(pairTypes) != len(pairValues) {
+               log.Panic("pairTypes is different length from pairValues")
+       }
+}
diff --git a/vendor/golang.org/x/text/unicode/bidi/gen.go b/vendor/golang.org/x/text/unicode/bidi/gen.go
new file mode 100644 (file)
index 0000000..040f301
--- /dev/null
@@ -0,0 +1,133 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+package main
+
+import (
+       "flag"
+       "log"
+
+       "golang.org/x/text/internal/gen"
+       "golang.org/x/text/internal/triegen"
+       "golang.org/x/text/internal/ucd"
+)
+
+var outputFile = flag.String("out", "tables.go", "output file")
+
+func main() {
+       gen.Init()
+       gen.Repackage("gen_trieval.go", "trieval.go", "bidi")
+       gen.Repackage("gen_ranges.go", "ranges_test.go", "bidi")
+
+       genTables()
+}
+
+// bidiClass names and codes taken from class "bc" in
+// http://www.unicode.org/Public/8.0.0/ucd/PropertyValueAliases.txt
+var bidiClass = map[string]Class{
+       "AL":  AL,  // ArabicLetter
+       "AN":  AN,  // ArabicNumber
+       "B":   B,   // ParagraphSeparator
+       "BN":  BN,  // BoundaryNeutral
+       "CS":  CS,  // CommonSeparator
+       "EN":  EN,  // EuropeanNumber
+       "ES":  ES,  // EuropeanSeparator
+       "ET":  ET,  // EuropeanTerminator
+       "L":   L,   // LeftToRight
+       "NSM": NSM, // NonspacingMark
+       "ON":  ON,  // OtherNeutral
+       "R":   R,   // RightToLeft
+       "S":   S,   // SegmentSeparator
+       "WS":  WS,  // WhiteSpace
+
+       "FSI": Control,
+       "PDF": Control,
+       "PDI": Control,
+       "LRE": Control,
+       "LRI": Control,
+       "LRO": Control,
+       "RLE": Control,
+       "RLI": Control,
+       "RLO": Control,
+}
+
+func genTables() {
+       if numClass > 0x0F {
+               log.Fatalf("Too many Class constants (%#x > 0x0F).", numClass)
+       }
+       w := gen.NewCodeWriter()
+       defer w.WriteGoFile(*outputFile, "bidi")
+
+       gen.WriteUnicodeVersion(w)
+
+       t := triegen.NewTrie("bidi")
+
+       // Build data about bracket mapping. These bits need to be or-ed with
+       // any other bits.
+       orMask := map[rune]uint64{}
+
+       xorMap := map[rune]int{}
+       xorMasks := []rune{0} // First value is no-op.
+
+       ucd.Parse(gen.OpenUCDFile("BidiBrackets.txt"), func(p *ucd.Parser) {
+               r1 := p.Rune(0)
+               r2 := p.Rune(1)
+               xor := r1 ^ r2
+               if _, ok := xorMap[xor]; !ok {
+                       xorMap[xor] = len(xorMasks)
+                       xorMasks = append(xorMasks, xor)
+               }
+               entry := uint64(xorMap[xor]) << xorMaskShift
+               switch p.String(2) {
+               case "o":
+                       entry |= openMask
+               case "c", "n":
+               default:
+                       log.Fatalf("Unknown bracket class %q.", p.String(2))
+               }
+               orMask[r1] = entry
+       })
+
+       w.WriteComment(`
+       xorMasks contains masks to be xor-ed with brackets to get the reverse
+       version.`)
+       w.WriteVar("xorMasks", xorMasks)
+
+       done := map[rune]bool{}
+
+       insert := func(r rune, c Class) {
+               if !done[r] {
+                       t.Insert(r, orMask[r]|uint64(c))
+                       done[r] = true
+               }
+       }
+
+       // Insert the derived BiDi properties.
+       ucd.Parse(gen.OpenUCDFile("extracted/DerivedBidiClass.txt"), func(p *ucd.Parser) {
+               r := p.Rune(0)
+               class, ok := bidiClass[p.String(1)]
+               if !ok {
+                       log.Fatalf("%U: Unknown BiDi class %q", r, p.String(1))
+               }
+               insert(r, class)
+       })
+       visitDefaults(insert)
+
+       // TODO: use sparse blocks. This would reduce table size considerably
+       // from the looks of it.
+
+       sz, err := t.Gen(w)
+       if err != nil {
+               log.Fatal(err)
+       }
+       w.Size += sz
+}
+
+// dummy values to make methods in gen_common compile. The real versions
+// will be generated by this file to tables.go.
+var (
+       xorMasks []rune
+)
diff --git a/vendor/golang.org/x/text/unicode/bidi/gen_ranges.go b/vendor/golang.org/x/text/unicode/bidi/gen_ranges.go
new file mode 100644 (file)
index 0000000..51bd68f
--- /dev/null
@@ -0,0 +1,57 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+package main
+
+import (
+       "unicode"
+
+       "golang.org/x/text/internal/gen"
+       "golang.org/x/text/internal/ucd"
+       "golang.org/x/text/unicode/rangetable"
+)
+
+// These tables are hand-extracted from:
+// http://www.unicode.org/Public/8.0.0/ucd/extracted/DerivedBidiClass.txt
+func visitDefaults(fn func(r rune, c Class)) {
+       // first write default values for ranges listed above.
+       visitRunes(fn, AL, []rune{
+               0x0600, 0x07BF, // Arabic
+               0x08A0, 0x08FF, // Arabic Extended-A
+               0xFB50, 0xFDCF, // Arabic Presentation Forms
+               0xFDF0, 0xFDFF,
+               0xFE70, 0xFEFF,
+               0x0001EE00, 0x0001EEFF, // Arabic Mathematical Alpha Symbols
+       })
+       visitRunes(fn, R, []rune{
+               0x0590, 0x05FF, // Hebrew
+               0x07C0, 0x089F, // Nko et al.
+               0xFB1D, 0xFB4F,
+               0x00010800, 0x00010FFF, // Cypriot Syllabary et. al.
+               0x0001E800, 0x0001EDFF,
+               0x0001EF00, 0x0001EFFF,
+       })
+       visitRunes(fn, ET, []rune{ // European Terminator
+               0x20A0, 0x20Cf, // Currency symbols
+       })
+       rangetable.Visit(unicode.Noncharacter_Code_Point, func(r rune) {
+               fn(r, BN) // Boundary Neutral
+       })
+       ucd.Parse(gen.OpenUCDFile("DerivedCoreProperties.txt"), func(p *ucd.Parser) {
+               if p.String(1) == "Default_Ignorable_Code_Point" {
+                       fn(p.Rune(0), BN) // Boundary Neutral
+               }
+       })
+}
+
+func visitRunes(fn func(r rune, c Class), c Class, runes []rune) {
+       for i := 0; i < len(runes); i += 2 {
+               lo, hi := runes[i], runes[i+1]
+               for j := lo; j <= hi; j++ {
+                       fn(j, c)
+               }
+       }
+}
diff --git a/vendor/golang.org/x/text/unicode/bidi/gen_trieval.go b/vendor/golang.org/x/text/unicode/bidi/gen_trieval.go
new file mode 100644 (file)
index 0000000..9cb9942
--- /dev/null
@@ -0,0 +1,64 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+package main
+
+// Class is the Unicode BiDi class. Each rune has a single class.
+type Class uint
+
+const (
+       L       Class = iota // LeftToRight
+       R                    // RightToLeft
+       EN                   // EuropeanNumber
+       ES                   // EuropeanSeparator
+       ET                   // EuropeanTerminator
+       AN                   // ArabicNumber
+       CS                   // CommonSeparator
+       B                    // ParagraphSeparator
+       S                    // SegmentSeparator
+       WS                   // WhiteSpace
+       ON                   // OtherNeutral
+       BN                   // BoundaryNeutral
+       NSM                  // NonspacingMark
+       AL                   // ArabicLetter
+       Control              // Control LRO - PDI
+
+       numClass
+
+       LRO // LeftToRightOverride
+       RLO // RightToLeftOverride
+       LRE // LeftToRightEmbedding
+       RLE // RightToLeftEmbedding
+       PDF // PopDirectionalFormat
+       LRI // LeftToRightIsolate
+       RLI // RightToLeftIsolate
+       FSI // FirstStrongIsolate
+       PDI // PopDirectionalIsolate
+
+       unknownClass = ^Class(0)
+)
+
+var controlToClass = map[rune]Class{
+       0x202D: LRO, // LeftToRightOverride,
+       0x202E: RLO, // RightToLeftOverride,
+       0x202A: LRE, // LeftToRightEmbedding,
+       0x202B: RLE, // RightToLeftEmbedding,
+       0x202C: PDF, // PopDirectionalFormat,
+       0x2066: LRI, // LeftToRightIsolate,
+       0x2067: RLI, // RightToLeftIsolate,
+       0x2068: FSI, // FirstStrongIsolate,
+       0x2069: PDI, // PopDirectionalIsolate,
+}
+
+// A trie entry has the following bits:
+// 7..5  XOR mask for brackets
+// 4     1: Bracket open, 0: Bracket close
+// 3..0  Class type
+
+const (
+       openMask     = 0x10
+       xorMaskShift = 5
+)
diff --git a/vendor/golang.org/x/text/unicode/bidi/prop.go b/vendor/golang.org/x/text/unicode/bidi/prop.go
new file mode 100644 (file)
index 0000000..7c9484e
--- /dev/null
@@ -0,0 +1,206 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package bidi
+
+import "unicode/utf8"
+
+// Properties provides access to BiDi properties of runes.
+type Properties struct {
+       entry uint8
+       last  uint8
+}
+
+var trie = newBidiTrie(0)
+
+// TODO: using this for bidirule reduces the running time by about 5%. Consider
+// if this is worth exposing or if we can find a way to speed up the Class
+// method.
+//
+// // CompactClass is like Class, but maps all of the BiDi control classes
+// // (LRO, RLO, LRE, RLE, PDF, LRI, RLI, FSI, PDI) to the class Control.
+// func (p Properties) CompactClass() Class {
+//     return Class(p.entry & 0x0F)
+// }
+
+// Class returns the Bidi class for p.
+func (p Properties) Class() Class {
+       c := Class(p.entry & 0x0F)
+       if c == Control {
+               c = controlByteToClass[p.last&0xF]
+       }
+       return c
+}
+
+// IsBracket reports whether the rune is a bracket.
+func (p Properties) IsBracket() bool { return p.entry&0xF0 != 0 }
+
+// IsOpeningBracket reports whether the rune is an opening bracket.
+// IsBracket must return true.
+func (p Properties) IsOpeningBracket() bool { return p.entry&openMask != 0 }
+
+// TODO: find a better API and expose.
+func (p Properties) reverseBracket(r rune) rune {
+       return xorMasks[p.entry>>xorMaskShift] ^ r
+}
+
+var controlByteToClass = [16]Class{
+       0xD: LRO, // U+202D LeftToRightOverride,
+       0xE: RLO, // U+202E RightToLeftOverride,
+       0xA: LRE, // U+202A LeftToRightEmbedding,
+       0xB: RLE, // U+202B RightToLeftEmbedding,
+       0xC: PDF, // U+202C PopDirectionalFormat,
+       0x6: LRI, // U+2066 LeftToRightIsolate,
+       0x7: RLI, // U+2067 RightToLeftIsolate,
+       0x8: FSI, // U+2068 FirstStrongIsolate,
+       0x9: PDI, // U+2069 PopDirectionalIsolate,
+}
+
+// LookupRune returns properties for r.
+func LookupRune(r rune) (p Properties, size int) {
+       var buf [4]byte
+       n := utf8.EncodeRune(buf[:], r)
+       return Lookup(buf[:n])
+}
+
+// TODO: these lookup methods are based on the generated trie code. The returned
+// sizes have slightly different semantics from the generated code, in that it
+// always returns size==1 for an illegal UTF-8 byte (instead of the length
+// of the maximum invalid subsequence). Most Transformers, like unicode/norm,
+// leave invalid UTF-8 untouched, in which case it has performance benefits to
+// do so (without changing the semantics). Bidi requires the semantics used here
+// for the bidirule implementation to be compatible with the Go semantics.
+//  They ultimately should perhaps be adopted by all trie implementations, for
+// convenience sake.
+// This unrolled code also boosts performance of the secure/bidirule package by
+// about 30%.
+// So, to remove this code:
+//   - add option to trie generator to define return type.
+//   - always return 1 byte size for ill-formed UTF-8 runes.
+
+// Lookup returns properties for the first rune in s and the width in bytes of
+// its encoding. The size will be 0 if s does not hold enough bytes to complete
+// the encoding.
+func Lookup(s []byte) (p Properties, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return Properties{entry: bidiValues[c0]}, 1
+       case c0 < 0xC2:
+               return Properties{}, 1
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return Properties{}, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return Properties{}, 1
+               }
+               return Properties{entry: trie.lookupValue(uint32(i), c1)}, 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return Properties{}, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return Properties{}, 1
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = bidiIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return Properties{}, 1
+               }
+               return Properties{entry: trie.lookupValue(uint32(i), c2), last: c2}, 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return Properties{}, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return Properties{}, 1
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = bidiIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return Properties{}, 1
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = bidiIndex[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return Properties{}, 1
+               }
+               return Properties{entry: trie.lookupValue(uint32(i), c3)}, 4
+       }
+       // Illegal rune
+       return Properties{}, 1
+}
+
+// LookupString returns properties for the first rune in s and the width in
+// bytes of its encoding. The size will be 0 if s does not hold enough bytes to
+// complete the encoding.
+func LookupString(s string) (p Properties, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return Properties{entry: bidiValues[c0]}, 1
+       case c0 < 0xC2:
+               return Properties{}, 1
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return Properties{}, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return Properties{}, 1
+               }
+               return Properties{entry: trie.lookupValue(uint32(i), c1)}, 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return Properties{}, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return Properties{}, 1
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = bidiIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return Properties{}, 1
+               }
+               return Properties{entry: trie.lookupValue(uint32(i), c2), last: c2}, 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return Properties{}, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return Properties{}, 1
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = bidiIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return Properties{}, 1
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = bidiIndex[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return Properties{}, 1
+               }
+               return Properties{entry: trie.lookupValue(uint32(i), c3)}, 4
+       }
+       // Illegal rune
+       return Properties{}, 1
+}
diff --git a/vendor/golang.org/x/text/unicode/bidi/tables.go b/vendor/golang.org/x/text/unicode/bidi/tables.go
new file mode 100644 (file)
index 0000000..7212d5a
--- /dev/null
@@ -0,0 +1,1779 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package bidi
+
+// UnicodeVersion is the Unicode version from which the tables in this package are derived.
+const UnicodeVersion = "9.0.0"
+
+// xorMasks contains masks to be xor-ed with brackets to get the reverse
+// version.
+var xorMasks = []int32{ // 8 elements
+       0, 1, 6, 7, 3, 15, 29, 63,
+} // Size: 56 bytes
+
+// lookup returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return bidiValues[c0], 1
+       case c0 < 0xC2:
+               return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return 0, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c1), 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return 0, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = bidiIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c2), 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return 0, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = bidiIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = bidiIndex[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return 0, 3 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c3), 4
+       }
+       // Illegal rune
+       return 0, 1
+}
+
+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *bidiTrie) lookupUnsafe(s []byte) uint8 {
+       c0 := s[0]
+       if c0 < 0x80 { // is ASCII
+               return bidiValues[c0]
+       }
+       i := bidiIndex[c0]
+       if c0 < 0xE0 { // 2-byte UTF-8
+               return t.lookupValue(uint32(i), s[1])
+       }
+       i = bidiIndex[uint32(i)<<6+uint32(s[1])]
+       if c0 < 0xF0 { // 3-byte UTF-8
+               return t.lookupValue(uint32(i), s[2])
+       }
+       i = bidiIndex[uint32(i)<<6+uint32(s[2])]
+       if c0 < 0xF8 { // 4-byte UTF-8
+               return t.lookupValue(uint32(i), s[3])
+       }
+       return 0
+}
+
+// lookupString returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *bidiTrie) lookupString(s string) (v uint8, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return bidiValues[c0], 1
+       case c0 < 0xC2:
+               return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return 0, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c1), 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return 0, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = bidiIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c2), 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return 0, 0
+               }
+               i := bidiIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = bidiIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = bidiIndex[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return 0, 3 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c3), 4
+       }
+       // Illegal rune
+       return 0, 1
+}
+
+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *bidiTrie) lookupStringUnsafe(s string) uint8 {
+       c0 := s[0]
+       if c0 < 0x80 { // is ASCII
+               return bidiValues[c0]
+       }
+       i := bidiIndex[c0]
+       if c0 < 0xE0 { // 2-byte UTF-8
+               return t.lookupValue(uint32(i), s[1])
+       }
+       i = bidiIndex[uint32(i)<<6+uint32(s[1])]
+       if c0 < 0xF0 { // 3-byte UTF-8
+               return t.lookupValue(uint32(i), s[2])
+       }
+       i = bidiIndex[uint32(i)<<6+uint32(s[2])]
+       if c0 < 0xF8 { // 4-byte UTF-8
+               return t.lookupValue(uint32(i), s[3])
+       }
+       return 0
+}
+
+// bidiTrie. Total size: 15744 bytes (15.38 KiB). Checksum: b4c3b70954803b86.
+type bidiTrie struct{}
+
+func newBidiTrie(i int) *bidiTrie {
+       return &bidiTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 {
+       switch {
+       default:
+               return uint8(bidiValues[n<<6+uint32(b)])
+       }
+}
+
+// bidiValues: 222 blocks, 14208 entries, 14208 bytes
+// The third block is the zero block.
+var bidiValues = [14208]uint8{
+       // Block 0x0, offset 0x0
+       0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b,
+       0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008,
+       0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b,
+       0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b,
+       0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007,
+       0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004,
+       0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a,
+       0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006,
+       0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002,
+       0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a,
+       0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a,
+       // Block 0x1, offset 0x40
+       0x40: 0x000a,
+       0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a,
+       0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a,
+       0x7b: 0x005a,
+       0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b,
+       // Block 0x2, offset 0x80
+       // Block 0x3, offset 0xc0
+       0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007,
+       0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b,
+       0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b,
+       0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b,
+       0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b,
+       0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004,
+       0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a,
+       0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a,
+       0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a,
+       0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a,
+       0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a,
+       // Block 0x4, offset 0x100
+       0x117: 0x000a,
+       0x137: 0x000a,
+       // Block 0x5, offset 0x140
+       0x179: 0x000a, 0x17a: 0x000a,
+       // Block 0x6, offset 0x180
+       0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a,
+       0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a,
+       0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a,
+       0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a,
+       0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a,
+       0x19e: 0x000a, 0x19f: 0x000a,
+       0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a,
+       0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a,
+       0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a,
+       0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a,
+       0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a,
+       // Block 0x7, offset 0x1c0
+       0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c,
+       0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c,
+       0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c,
+       0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c,
+       0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c,
+       0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c,
+       0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c,
+       0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c,
+       0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c,
+       0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c,
+       0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c,
+       // Block 0x8, offset 0x200
+       0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c,
+       0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c,
+       0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c,
+       0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c,
+       0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c,
+       0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c,
+       0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c,
+       0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c,
+       0x234: 0x000a, 0x235: 0x000a,
+       0x23e: 0x000a,
+       // Block 0x9, offset 0x240
+       0x244: 0x000a, 0x245: 0x000a,
+       0x247: 0x000a,
+       // Block 0xa, offset 0x280
+       0x2b6: 0x000a,
+       // Block 0xb, offset 0x2c0
+       0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c,
+       0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c,
+       // Block 0xc, offset 0x300
+       0x30a: 0x000a,
+       0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c,
+       0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c,
+       0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c,
+       0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c,
+       0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c,
+       0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c,
+       0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c,
+       0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c,
+       0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c,
+       // Block 0xd, offset 0x340
+       0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c,
+       0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001,
+       0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001,
+       0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001,
+       0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001,
+       0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001,
+       0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001,
+       0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001,
+       0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001,
+       0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001,
+       0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001,
+       // Block 0xe, offset 0x380
+       0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005,
+       0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d,
+       0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c,
+       0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c,
+       0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d,
+       0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d,
+       0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d,
+       0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d,
+       0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d,
+       0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d,
+       0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d,
+       // Block 0xf, offset 0x3c0
+       0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d,
+       0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c,
+       0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c,
+       0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c,
+       0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c,
+       0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005,
+       0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005,
+       0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d,
+       0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d,
+       0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d,
+       0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d,
+       // Block 0x10, offset 0x400
+       0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d,
+       0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d,
+       0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d,
+       0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d,
+       0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d,
+       0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d,
+       0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d,
+       0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d,
+       0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d,
+       0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d,
+       0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d,
+       // Block 0x11, offset 0x440
+       0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d,
+       0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d,
+       0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d,
+       0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c,
+       0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005,
+       0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c,
+       0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a,
+       0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d,
+       0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002,
+       0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d,
+       0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d,
+       // Block 0x12, offset 0x480
+       0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d,
+       0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d,
+       0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c,
+       0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d,
+       0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d,
+       0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d,
+       0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d,
+       0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d,
+       0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c,
+       0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c,
+       0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c,
+       // Block 0x13, offset 0x4c0
+       0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c,
+       0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d,
+       0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d,
+       0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d,
+       0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d,
+       0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d,
+       0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d,
+       0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d,
+       0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d,
+       0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d,
+       0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d,
+       // Block 0x14, offset 0x500
+       0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d,
+       0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d,
+       0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d,
+       0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d,
+       0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d,
+       0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d,
+       0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c,
+       0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c,
+       0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d,
+       0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d,
+       0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d,
+       // Block 0x15, offset 0x540
+       0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001,
+       0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001,
+       0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001,
+       0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001,
+       0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001,
+       0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001,
+       0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001,
+       0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c,
+       0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001,
+       0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001,
+       0x57c: 0x0001, 0x57d: 0x0001, 0x57e: 0x0001, 0x57f: 0x0001,
+       // Block 0x16, offset 0x580
+       0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001,
+       0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001,
+       0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001,
+       0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c,
+       0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c,
+       0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c,
+       0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c,
+       0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001,
+       0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001,
+       0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001,
+       0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001,
+       // Block 0x17, offset 0x5c0
+       0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001,
+       0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001,
+       0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001,
+       0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001,
+       0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001,
+       0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x0001, 0x5e1: 0x0001, 0x5e2: 0x0001, 0x5e3: 0x0001,
+       0x5e4: 0x0001, 0x5e5: 0x0001, 0x5e6: 0x0001, 0x5e7: 0x0001, 0x5e8: 0x0001, 0x5e9: 0x0001,
+       0x5ea: 0x0001, 0x5eb: 0x0001, 0x5ec: 0x0001, 0x5ed: 0x0001, 0x5ee: 0x0001, 0x5ef: 0x0001,
+       0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001,
+       0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001,
+       0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001,
+       // Block 0x18, offset 0x600
+       0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001,
+       0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001,
+       0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001,
+       0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001,
+       0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001,
+       0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d,
+       0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d,
+       0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d,
+       0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d,
+       0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d,
+       0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d,
+       // Block 0x19, offset 0x640
+       0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d,
+       0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d,
+       0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d,
+       0x652: 0x000d, 0x653: 0x000d, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c,
+       0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c,
+       0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c,
+       0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c,
+       0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c,
+       0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c,
+       0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c,
+       0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c,
+       // Block 0x1a, offset 0x680
+       0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c,
+       0x6ba: 0x000c,
+       0x6bc: 0x000c,
+       // Block 0x1b, offset 0x6c0
+       0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c,
+       0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c,
+       0x6cd: 0x000c, 0x6d1: 0x000c,
+       0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c,
+       0x6e2: 0x000c, 0x6e3: 0x000c,
+       // Block 0x1c, offset 0x700
+       0x701: 0x000c,
+       0x73c: 0x000c,
+       // Block 0x1d, offset 0x740
+       0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c,
+       0x74d: 0x000c,
+       0x762: 0x000c, 0x763: 0x000c,
+       0x772: 0x0004, 0x773: 0x0004,
+       0x77b: 0x0004,
+       // Block 0x1e, offset 0x780
+       0x781: 0x000c, 0x782: 0x000c,
+       0x7bc: 0x000c,
+       // Block 0x1f, offset 0x7c0
+       0x7c1: 0x000c, 0x7c2: 0x000c,
+       0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c,
+       0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c,
+       0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c,
+       // Block 0x20, offset 0x800
+       0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c,
+       0x807: 0x000c, 0x808: 0x000c,
+       0x80d: 0x000c,
+       0x822: 0x000c, 0x823: 0x000c,
+       0x831: 0x0004,
+       // Block 0x21, offset 0x840
+       0x841: 0x000c,
+       0x87c: 0x000c, 0x87f: 0x000c,
+       // Block 0x22, offset 0x880
+       0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c,
+       0x88d: 0x000c,
+       0x896: 0x000c,
+       0x8a2: 0x000c, 0x8a3: 0x000c,
+       // Block 0x23, offset 0x8c0
+       0x8c2: 0x000c,
+       // Block 0x24, offset 0x900
+       0x900: 0x000c,
+       0x90d: 0x000c,
+       0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a,
+       0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a,
+       // Block 0x25, offset 0x940
+       0x940: 0x000c,
+       0x97e: 0x000c, 0x97f: 0x000c,
+       // Block 0x26, offset 0x980
+       0x980: 0x000c,
+       0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c,
+       0x98c: 0x000c, 0x98d: 0x000c,
+       0x995: 0x000c, 0x996: 0x000c,
+       0x9a2: 0x000c, 0x9a3: 0x000c,
+       0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a,
+       0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a,
+       // Block 0x27, offset 0x9c0
+       0x9cc: 0x000c, 0x9cd: 0x000c,
+       0x9e2: 0x000c, 0x9e3: 0x000c,
+       // Block 0x28, offset 0xa00
+       0xa01: 0x000c,
+       // Block 0x29, offset 0xa40
+       0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c,
+       0xa4d: 0x000c,
+       0xa62: 0x000c, 0xa63: 0x000c,
+       // Block 0x2a, offset 0xa80
+       0xa8a: 0x000c,
+       0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c,
+       // Block 0x2b, offset 0xac0
+       0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c,
+       0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c,
+       0xaff: 0x0004,
+       // Block 0x2c, offset 0xb00
+       0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c,
+       0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c,
+       // Block 0x2d, offset 0xb40
+       0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c,
+       0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c,
+       0xb7c: 0x000c,
+       // Block 0x2e, offset 0xb80
+       0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c,
+       0xb8c: 0x000c, 0xb8d: 0x000c,
+       // Block 0x2f, offset 0xbc0
+       0xbd8: 0x000c, 0xbd9: 0x000c,
+       0xbf5: 0x000c,
+       0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a,
+       0xbfc: 0x003a, 0xbfd: 0x002a,
+       // Block 0x30, offset 0xc00
+       0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c,
+       0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c,
+       0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c,
+       // Block 0x31, offset 0xc40
+       0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c,
+       0xc46: 0x000c, 0xc47: 0x000c,
+       0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c,
+       0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c,
+       0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c,
+       0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c,
+       0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c,
+       0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c,
+       0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c,
+       0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c,
+       0xc7c: 0x000c,
+       // Block 0x32, offset 0xc80
+       0xc86: 0x000c,
+       // Block 0x33, offset 0xcc0
+       0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c,
+       0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c,
+       0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c,
+       0xcfd: 0x000c, 0xcfe: 0x000c,
+       // Block 0x34, offset 0xd00
+       0xd18: 0x000c, 0xd19: 0x000c,
+       0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c,
+       0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c,
+       // Block 0x35, offset 0xd40
+       0xd42: 0x000c, 0xd45: 0x000c,
+       0xd46: 0x000c,
+       0xd4d: 0x000c,
+       0xd5d: 0x000c,
+       // Block 0x36, offset 0xd80
+       0xd9d: 0x000c,
+       0xd9e: 0x000c, 0xd9f: 0x000c,
+       // Block 0x37, offset 0xdc0
+       0xdd0: 0x000a, 0xdd1: 0x000a,
+       0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a,
+       0xdd8: 0x000a, 0xdd9: 0x000a,
+       // Block 0x38, offset 0xe00
+       0xe00: 0x000a,
+       // Block 0x39, offset 0xe40
+       0xe40: 0x0009,
+       0xe5b: 0x007a, 0xe5c: 0x006a,
+       // Block 0x3a, offset 0xe80
+       0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c,
+       0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c,
+       // Block 0x3b, offset 0xec0
+       0xed2: 0x000c, 0xed3: 0x000c,
+       0xef2: 0x000c, 0xef3: 0x000c,
+       // Block 0x3c, offset 0xf00
+       0xf34: 0x000c, 0xf35: 0x000c,
+       0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c,
+       0xf3c: 0x000c, 0xf3d: 0x000c,
+       // Block 0x3d, offset 0xf40
+       0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c,
+       0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c,
+       0xf52: 0x000c, 0xf53: 0x000c,
+       0xf5b: 0x0004, 0xf5d: 0x000c,
+       0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a,
+       0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a,
+       // Block 0x3e, offset 0xf80
+       0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a,
+       0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c,
+       0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b,
+       // Block 0x3f, offset 0xfc0
+       0xfc5: 0x000c,
+       0xfc6: 0x000c,
+       0xfe9: 0x000c,
+       // Block 0x40, offset 0x1000
+       0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c,
+       0x1027: 0x000c, 0x1028: 0x000c,
+       0x1032: 0x000c,
+       0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c,
+       // Block 0x41, offset 0x1040
+       0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a,
+       // Block 0x42, offset 0x1080
+       0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a,
+       0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a,
+       0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a,
+       0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a,
+       0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a,
+       0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a,
+       // Block 0x43, offset 0x10c0
+       0x10d7: 0x000c,
+       0x10d8: 0x000c, 0x10db: 0x000c,
+       // Block 0x44, offset 0x1100
+       0x1116: 0x000c,
+       0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c,
+       0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c,
+       0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c,
+       0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c,
+       0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c,
+       0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c,
+       0x113c: 0x000c, 0x113f: 0x000c,
+       // Block 0x45, offset 0x1140
+       0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c,
+       0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c,
+       0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c,
+       // Block 0x46, offset 0x1180
+       0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c,
+       0x11b4: 0x000c,
+       0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c,
+       0x11bc: 0x000c,
+       // Block 0x47, offset 0x11c0
+       0x11c2: 0x000c,
+       0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c,
+       0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c,
+       // Block 0x48, offset 0x1200
+       0x1200: 0x000c, 0x1201: 0x000c,
+       0x1222: 0x000c, 0x1223: 0x000c,
+       0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c,
+       0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c,
+       // Block 0x49, offset 0x1240
+       0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c,
+       0x126d: 0x000c, 0x126f: 0x000c,
+       0x1270: 0x000c, 0x1271: 0x000c,
+       // Block 0x4a, offset 0x1280
+       0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c,
+       0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c,
+       0x12b6: 0x000c, 0x12b7: 0x000c,
+       // Block 0x4b, offset 0x12c0
+       0x12d0: 0x000c, 0x12d1: 0x000c,
+       0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c,
+       0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c,
+       0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c,
+       0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c,
+       0x12ed: 0x000c,
+       0x12f4: 0x000c,
+       0x12f8: 0x000c, 0x12f9: 0x000c,
+       // Block 0x4c, offset 0x1300
+       0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c,
+       0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c,
+       0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c,
+       0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c,
+       0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c,
+       0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c,
+       0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c,
+       0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c,
+       0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c,
+       0x133b: 0x000c,
+       0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c,
+       // Block 0x4d, offset 0x1340
+       0x137d: 0x000a, 0x137f: 0x000a,
+       // Block 0x4e, offset 0x1380
+       0x1380: 0x000a, 0x1381: 0x000a,
+       0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a,
+       0x139d: 0x000a,
+       0x139e: 0x000a, 0x139f: 0x000a,
+       0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a,
+       0x13bd: 0x000a, 0x13be: 0x000a,
+       // Block 0x4f, offset 0x13c0
+       0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009,
+       0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b,
+       0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a,
+       0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a,
+       0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a,
+       0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a,
+       0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007,
+       0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006,
+       0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a,
+       0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a,
+       0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a,
+       // Block 0x50, offset 0x1400
+       0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a,
+       0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a,
+       0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a,
+       0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a,
+       0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a,
+       0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b,
+       0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e,
+       0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b,
+       0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002,
+       0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003,
+       0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a,
+       // Block 0x51, offset 0x1440
+       0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002,
+       0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003,
+       0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a,
+       0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004,
+       0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004,
+       0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004,
+       0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004,
+       0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004,
+       0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004,
+       // Block 0x52, offset 0x1480
+       0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004,
+       0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004,
+       0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c,
+       0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c,
+       0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c,
+       0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c,
+       0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c,
+       0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c,
+       0x14b0: 0x000c,
+       // Block 0x53, offset 0x14c0
+       0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a,
+       0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a,
+       0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a,
+       0x14d8: 0x000a,
+       0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a,
+       0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a,
+       0x14ee: 0x0004,
+       0x14fa: 0x000a, 0x14fb: 0x000a,
+       // Block 0x54, offset 0x1500
+       0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a,
+       0x150a: 0x000a, 0x150b: 0x000a,
+       0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a,
+       0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a,
+       0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a,
+       0x151e: 0x000a, 0x151f: 0x000a,
+       // Block 0x55, offset 0x1540
+       0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a,
+       0x1550: 0x000a, 0x1551: 0x000a,
+       0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a,
+       0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a,
+       0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a,
+       0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a,
+       0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a,
+       0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a,
+       0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a,
+       0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a,
+       // Block 0x56, offset 0x1580
+       0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a,
+       0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a,
+       0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a,
+       0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a,
+       0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a,
+       0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a,
+       0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a,
+       0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a,
+       0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a,
+       0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a,
+       0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a,
+       // Block 0x57, offset 0x15c0
+       0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a,
+       0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a,
+       0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a,
+       0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a,
+       0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a,
+       0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a,
+       0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a,
+       0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a,
+       0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a,
+       0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a,
+       0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a,
+       // Block 0x58, offset 0x1600
+       0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a,
+       0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a,
+       0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a,
+       0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a,
+       0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a,
+       0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a,
+       0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a,
+       0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a,
+       0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a,
+       // Block 0x59, offset 0x1640
+       0x167b: 0x000a,
+       0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a,
+       // Block 0x5a, offset 0x1680
+       0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a,
+       0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a,
+       0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a,
+       0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a,
+       0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a,
+       0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a,
+       0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a,
+       0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a,
+       0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a,
+       0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a,
+       0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a,
+       // Block 0x5b, offset 0x16c0
+       0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a,
+       0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a,
+       0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a,
+       0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a,
+       0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a,
+       0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a,
+       0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, 0x16e7: 0x000a, 0x16e8: 0x000a, 0x16e9: 0x000a,
+       0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x000a, 0x16ee: 0x000a, 0x16ef: 0x000a,
+       0x16f0: 0x000a, 0x16f1: 0x000a, 0x16f2: 0x000a, 0x16f3: 0x000a, 0x16f4: 0x000a, 0x16f5: 0x000a,
+       0x16f6: 0x000a, 0x16f7: 0x000a, 0x16f8: 0x000a, 0x16f9: 0x000a, 0x16fa: 0x000a, 0x16fb: 0x000a,
+       0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a,
+       // Block 0x5c, offset 0x1700
+       0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a,
+       0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a,
+       0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a,
+       0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1715: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a,
+       0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a,
+       0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a,
+       0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a,
+       // Block 0x5d, offset 0x1740
+       0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a,
+       0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a,
+       0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a,
+       0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, 0x1767: 0x000a, 0x1768: 0x000a, 0x1769: 0x000a,
+       0x176a: 0x000a, 0x176b: 0x000a, 0x176c: 0x000a, 0x176d: 0x000a, 0x176e: 0x000a, 0x176f: 0x000a,
+       0x1770: 0x000a, 0x1771: 0x000a, 0x1772: 0x000a, 0x1773: 0x000a, 0x1774: 0x000a, 0x1775: 0x000a,
+       0x1776: 0x000a, 0x1777: 0x000a, 0x1778: 0x000a, 0x1779: 0x000a, 0x177a: 0x000a, 0x177b: 0x000a,
+       0x177c: 0x000a, 0x177d: 0x000a, 0x177e: 0x000a, 0x177f: 0x000a,
+       // Block 0x5e, offset 0x1780
+       0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a,
+       0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x0002, 0x1789: 0x0002, 0x178a: 0x0002, 0x178b: 0x0002,
+       0x178c: 0x0002, 0x178d: 0x0002, 0x178e: 0x0002, 0x178f: 0x0002, 0x1790: 0x0002, 0x1791: 0x0002,
+       0x1792: 0x0002, 0x1793: 0x0002, 0x1794: 0x0002, 0x1795: 0x0002, 0x1796: 0x0002, 0x1797: 0x0002,
+       0x1798: 0x0002, 0x1799: 0x0002, 0x179a: 0x0002, 0x179b: 0x0002,
+       // Block 0x5f, offset 0x17c0
+       0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ec: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a,
+       0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a,
+       0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a,
+       0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a,
+       // Block 0x60, offset 0x1800
+       0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a,
+       0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a,
+       0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a,
+       0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a,
+       0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a,
+       0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a,
+       0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x000a, 0x1829: 0x000a,
+       0x182a: 0x000a, 0x182b: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a,
+       0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a,
+       0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a,
+       0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a,
+       // Block 0x61, offset 0x1840
+       0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a,
+       0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a,
+       0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a,
+       0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a,
+       0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a,
+       0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a,
+       0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x003a, 0x1869: 0x002a,
+       0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a,
+       0x1870: 0x003a, 0x1871: 0x002a, 0x1872: 0x003a, 0x1873: 0x002a, 0x1874: 0x003a, 0x1875: 0x002a,
+       0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a,
+       0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a,
+       // Block 0x62, offset 0x1880
+       0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x009a,
+       0x1886: 0x008a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a,
+       0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a,
+       0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a,
+       0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a,
+       0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a,
+       0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x003a, 0x18a7: 0x002a, 0x18a8: 0x003a, 0x18a9: 0x002a,
+       0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a,
+       0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a,
+       0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a,
+       0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a,
+       // Block 0x63, offset 0x18c0
+       0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x007a, 0x18c4: 0x006a, 0x18c5: 0x009a,
+       0x18c6: 0x008a, 0x18c7: 0x00ba, 0x18c8: 0x00aa, 0x18c9: 0x009a, 0x18ca: 0x008a, 0x18cb: 0x007a,
+       0x18cc: 0x006a, 0x18cd: 0x00da, 0x18ce: 0x002a, 0x18cf: 0x003a, 0x18d0: 0x00ca, 0x18d1: 0x009a,
+       0x18d2: 0x008a, 0x18d3: 0x007a, 0x18d4: 0x006a, 0x18d5: 0x009a, 0x18d6: 0x008a, 0x18d7: 0x00ba,
+       0x18d8: 0x00aa, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a,
+       0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a,
+       0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a,
+       0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a,
+       0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a,
+       0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a,
+       0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a,
+       // Block 0x64, offset 0x1900
+       0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a,
+       0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a,
+       0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a,
+       0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a,
+       0x1918: 0x003a, 0x1919: 0x002a, 0x191a: 0x003a, 0x191b: 0x002a, 0x191c: 0x000a, 0x191d: 0x000a,
+       0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a,
+       0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a,
+       0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a,
+       0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a,
+       0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a,
+       0x193c: 0x003a, 0x193d: 0x002a, 0x193e: 0x000a, 0x193f: 0x000a,
+       // Block 0x65, offset 0x1940
+       0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a,
+       0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a,
+       0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a,
+       0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a,
+       0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a,
+       0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a,
+       0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a,
+       0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a,
+       0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a,
+       0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a,
+       0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a,
+       // Block 0x66, offset 0x1980
+       0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a,
+       0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x1989: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a,
+       0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a,
+       0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a,
+       0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a,
+       0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a,
+       0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a,
+       0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a,
+       0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, 0x19b4: 0x000a, 0x19b5: 0x000a,
+       0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a,
+       0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a,
+       // Block 0x67, offset 0x19c0
+       0x19c0: 0x000a, 0x19c1: 0x000a, 0x19c2: 0x000a, 0x19c3: 0x000a, 0x19c4: 0x000a, 0x19c5: 0x000a,
+       0x19c6: 0x000a, 0x19c7: 0x000a, 0x19c8: 0x000a, 0x19ca: 0x000a, 0x19cb: 0x000a,
+       0x19cc: 0x000a, 0x19cd: 0x000a, 0x19ce: 0x000a, 0x19cf: 0x000a, 0x19d0: 0x000a, 0x19d1: 0x000a,
+       0x19ec: 0x000a, 0x19ed: 0x000a, 0x19ee: 0x000a, 0x19ef: 0x000a,
+       // Block 0x68, offset 0x1a00
+       0x1a25: 0x000a, 0x1a26: 0x000a, 0x1a27: 0x000a, 0x1a28: 0x000a, 0x1a29: 0x000a,
+       0x1a2a: 0x000a, 0x1a2f: 0x000c,
+       0x1a30: 0x000c, 0x1a31: 0x000c,
+       0x1a39: 0x000a, 0x1a3a: 0x000a, 0x1a3b: 0x000a,
+       0x1a3c: 0x000a, 0x1a3d: 0x000a, 0x1a3e: 0x000a, 0x1a3f: 0x000a,
+       // Block 0x69, offset 0x1a40
+       0x1a7f: 0x000c,
+       // Block 0x6a, offset 0x1a80
+       0x1aa0: 0x000c, 0x1aa1: 0x000c, 0x1aa2: 0x000c, 0x1aa3: 0x000c,
+       0x1aa4: 0x000c, 0x1aa5: 0x000c, 0x1aa6: 0x000c, 0x1aa7: 0x000c, 0x1aa8: 0x000c, 0x1aa9: 0x000c,
+       0x1aaa: 0x000c, 0x1aab: 0x000c, 0x1aac: 0x000c, 0x1aad: 0x000c, 0x1aae: 0x000c, 0x1aaf: 0x000c,
+       0x1ab0: 0x000c, 0x1ab1: 0x000c, 0x1ab2: 0x000c, 0x1ab3: 0x000c, 0x1ab4: 0x000c, 0x1ab5: 0x000c,
+       0x1ab6: 0x000c, 0x1ab7: 0x000c, 0x1ab8: 0x000c, 0x1ab9: 0x000c, 0x1aba: 0x000c, 0x1abb: 0x000c,
+       0x1abc: 0x000c, 0x1abd: 0x000c, 0x1abe: 0x000c, 0x1abf: 0x000c,
+       // Block 0x6b, offset 0x1ac0
+       0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a,
+       0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a,
+       0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a,
+       0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a,
+       0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1ada: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a,
+       0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x003a, 0x1ae3: 0x002a,
+       0x1ae4: 0x003a, 0x1ae5: 0x002a, 0x1ae6: 0x003a, 0x1ae7: 0x002a, 0x1ae8: 0x003a, 0x1ae9: 0x002a,
+       0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a,
+       0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a,
+       0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a,
+       0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a,
+       // Block 0x6c, offset 0x1b00
+       0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a,
+       // Block 0x6d, offset 0x1b40
+       0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a,
+       0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a,
+       0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a,
+       0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a,
+       0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a,
+       0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a,
+       0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a,
+       0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a,
+       0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a,
+       0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a,
+       0x1b7c: 0x000a, 0x1b7d: 0x000a, 0x1b7e: 0x000a, 0x1b7f: 0x000a,
+       // Block 0x6e, offset 0x1b80
+       0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a,
+       0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a,
+       0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a,
+       0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, 0x1b96: 0x000a, 0x1b97: 0x000a,
+       0x1b98: 0x000a, 0x1b99: 0x000a, 0x1b9a: 0x000a, 0x1b9b: 0x000a, 0x1b9c: 0x000a, 0x1b9d: 0x000a,
+       0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, 0x1ba1: 0x000a, 0x1ba2: 0x000a, 0x1ba3: 0x000a,
+       0x1ba4: 0x000a, 0x1ba5: 0x000a, 0x1ba6: 0x000a, 0x1ba7: 0x000a, 0x1ba8: 0x000a, 0x1ba9: 0x000a,
+       0x1baa: 0x000a, 0x1bab: 0x000a, 0x1bac: 0x000a, 0x1bad: 0x000a, 0x1bae: 0x000a, 0x1baf: 0x000a,
+       0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a,
+       // Block 0x6f, offset 0x1bc0
+       0x1bc0: 0x000a, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, 0x1bc5: 0x000a,
+       0x1bc6: 0x000a, 0x1bc7: 0x000a, 0x1bc8: 0x000a, 0x1bc9: 0x000a, 0x1bca: 0x000a, 0x1bcb: 0x000a,
+       0x1bcc: 0x000a, 0x1bcd: 0x000a, 0x1bce: 0x000a, 0x1bcf: 0x000a, 0x1bd0: 0x000a, 0x1bd1: 0x000a,
+       0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x000a, 0x1bd5: 0x000a,
+       0x1bf0: 0x000a, 0x1bf1: 0x000a, 0x1bf2: 0x000a, 0x1bf3: 0x000a, 0x1bf4: 0x000a, 0x1bf5: 0x000a,
+       0x1bf6: 0x000a, 0x1bf7: 0x000a, 0x1bf8: 0x000a, 0x1bf9: 0x000a, 0x1bfa: 0x000a, 0x1bfb: 0x000a,
+       // Block 0x70, offset 0x1c00
+       0x1c00: 0x0009, 0x1c01: 0x000a, 0x1c02: 0x000a, 0x1c03: 0x000a, 0x1c04: 0x000a,
+       0x1c08: 0x003a, 0x1c09: 0x002a, 0x1c0a: 0x003a, 0x1c0b: 0x002a,
+       0x1c0c: 0x003a, 0x1c0d: 0x002a, 0x1c0e: 0x003a, 0x1c0f: 0x002a, 0x1c10: 0x003a, 0x1c11: 0x002a,
+       0x1c12: 0x000a, 0x1c13: 0x000a, 0x1c14: 0x003a, 0x1c15: 0x002a, 0x1c16: 0x003a, 0x1c17: 0x002a,
+       0x1c18: 0x003a, 0x1c19: 0x002a, 0x1c1a: 0x003a, 0x1c1b: 0x002a, 0x1c1c: 0x000a, 0x1c1d: 0x000a,
+       0x1c1e: 0x000a, 0x1c1f: 0x000a, 0x1c20: 0x000a,
+       0x1c2a: 0x000c, 0x1c2b: 0x000c, 0x1c2c: 0x000c, 0x1c2d: 0x000c,
+       0x1c30: 0x000a,
+       0x1c36: 0x000a, 0x1c37: 0x000a,
+       0x1c3d: 0x000a, 0x1c3e: 0x000a, 0x1c3f: 0x000a,
+       // Block 0x71, offset 0x1c40
+       0x1c59: 0x000c, 0x1c5a: 0x000c, 0x1c5b: 0x000a, 0x1c5c: 0x000a,
+       0x1c60: 0x000a,
+       // Block 0x72, offset 0x1c80
+       0x1cbb: 0x000a,
+       // Block 0x73, offset 0x1cc0
+       0x1cc0: 0x000a, 0x1cc1: 0x000a, 0x1cc2: 0x000a, 0x1cc3: 0x000a, 0x1cc4: 0x000a, 0x1cc5: 0x000a,
+       0x1cc6: 0x000a, 0x1cc7: 0x000a, 0x1cc8: 0x000a, 0x1cc9: 0x000a, 0x1cca: 0x000a, 0x1ccb: 0x000a,
+       0x1ccc: 0x000a, 0x1ccd: 0x000a, 0x1cce: 0x000a, 0x1ccf: 0x000a, 0x1cd0: 0x000a, 0x1cd1: 0x000a,
+       0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a,
+       0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a,
+       0x1cde: 0x000a, 0x1cdf: 0x000a, 0x1ce0: 0x000a, 0x1ce1: 0x000a, 0x1ce2: 0x000a, 0x1ce3: 0x000a,
+       // Block 0x74, offset 0x1d00
+       0x1d1d: 0x000a,
+       0x1d1e: 0x000a,
+       // Block 0x75, offset 0x1d40
+       0x1d50: 0x000a, 0x1d51: 0x000a,
+       0x1d52: 0x000a, 0x1d53: 0x000a, 0x1d54: 0x000a, 0x1d55: 0x000a, 0x1d56: 0x000a, 0x1d57: 0x000a,
+       0x1d58: 0x000a, 0x1d59: 0x000a, 0x1d5a: 0x000a, 0x1d5b: 0x000a, 0x1d5c: 0x000a, 0x1d5d: 0x000a,
+       0x1d5e: 0x000a, 0x1d5f: 0x000a,
+       0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a,
+       // Block 0x76, offset 0x1d80
+       0x1db1: 0x000a, 0x1db2: 0x000a, 0x1db3: 0x000a, 0x1db4: 0x000a, 0x1db5: 0x000a,
+       0x1db6: 0x000a, 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, 0x1dbb: 0x000a,
+       0x1dbc: 0x000a, 0x1dbd: 0x000a, 0x1dbe: 0x000a, 0x1dbf: 0x000a,
+       // Block 0x77, offset 0x1dc0
+       0x1dcc: 0x000a, 0x1dcd: 0x000a, 0x1dce: 0x000a, 0x1dcf: 0x000a,
+       // Block 0x78, offset 0x1e00
+       0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a,
+       // Block 0x79, offset 0x1e40
+       0x1e5e: 0x000a, 0x1e5f: 0x000a,
+       0x1e7f: 0x000a,
+       // Block 0x7a, offset 0x1e80
+       0x1e90: 0x000a, 0x1e91: 0x000a,
+       0x1e92: 0x000a, 0x1e93: 0x000a, 0x1e94: 0x000a, 0x1e95: 0x000a, 0x1e96: 0x000a, 0x1e97: 0x000a,
+       0x1e98: 0x000a, 0x1e99: 0x000a, 0x1e9a: 0x000a, 0x1e9b: 0x000a, 0x1e9c: 0x000a, 0x1e9d: 0x000a,
+       0x1e9e: 0x000a, 0x1e9f: 0x000a, 0x1ea0: 0x000a, 0x1ea1: 0x000a, 0x1ea2: 0x000a, 0x1ea3: 0x000a,
+       0x1ea4: 0x000a, 0x1ea5: 0x000a, 0x1ea6: 0x000a, 0x1ea7: 0x000a, 0x1ea8: 0x000a, 0x1ea9: 0x000a,
+       0x1eaa: 0x000a, 0x1eab: 0x000a, 0x1eac: 0x000a, 0x1ead: 0x000a, 0x1eae: 0x000a, 0x1eaf: 0x000a,
+       0x1eb0: 0x000a, 0x1eb1: 0x000a, 0x1eb2: 0x000a, 0x1eb3: 0x000a, 0x1eb4: 0x000a, 0x1eb5: 0x000a,
+       0x1eb6: 0x000a, 0x1eb7: 0x000a, 0x1eb8: 0x000a, 0x1eb9: 0x000a, 0x1eba: 0x000a, 0x1ebb: 0x000a,
+       0x1ebc: 0x000a, 0x1ebd: 0x000a, 0x1ebe: 0x000a, 0x1ebf: 0x000a,
+       // Block 0x7b, offset 0x1ec0
+       0x1ec0: 0x000a, 0x1ec1: 0x000a, 0x1ec2: 0x000a, 0x1ec3: 0x000a, 0x1ec4: 0x000a, 0x1ec5: 0x000a,
+       0x1ec6: 0x000a,
+       // Block 0x7c, offset 0x1f00
+       0x1f0d: 0x000a, 0x1f0e: 0x000a, 0x1f0f: 0x000a,
+       // Block 0x7d, offset 0x1f40
+       0x1f6f: 0x000c,
+       0x1f70: 0x000c, 0x1f71: 0x000c, 0x1f72: 0x000c, 0x1f73: 0x000a, 0x1f74: 0x000c, 0x1f75: 0x000c,
+       0x1f76: 0x000c, 0x1f77: 0x000c, 0x1f78: 0x000c, 0x1f79: 0x000c, 0x1f7a: 0x000c, 0x1f7b: 0x000c,
+       0x1f7c: 0x000c, 0x1f7d: 0x000c, 0x1f7e: 0x000a, 0x1f7f: 0x000a,
+       // Block 0x7e, offset 0x1f80
+       0x1f9e: 0x000c, 0x1f9f: 0x000c,
+       // Block 0x7f, offset 0x1fc0
+       0x1ff0: 0x000c, 0x1ff1: 0x000c,
+       // Block 0x80, offset 0x2000
+       0x2000: 0x000a, 0x2001: 0x000a, 0x2002: 0x000a, 0x2003: 0x000a, 0x2004: 0x000a, 0x2005: 0x000a,
+       0x2006: 0x000a, 0x2007: 0x000a, 0x2008: 0x000a, 0x2009: 0x000a, 0x200a: 0x000a, 0x200b: 0x000a,
+       0x200c: 0x000a, 0x200d: 0x000a, 0x200e: 0x000a, 0x200f: 0x000a, 0x2010: 0x000a, 0x2011: 0x000a,
+       0x2012: 0x000a, 0x2013: 0x000a, 0x2014: 0x000a, 0x2015: 0x000a, 0x2016: 0x000a, 0x2017: 0x000a,
+       0x2018: 0x000a, 0x2019: 0x000a, 0x201a: 0x000a, 0x201b: 0x000a, 0x201c: 0x000a, 0x201d: 0x000a,
+       0x201e: 0x000a, 0x201f: 0x000a, 0x2020: 0x000a, 0x2021: 0x000a,
+       // Block 0x81, offset 0x2040
+       0x2048: 0x000a,
+       // Block 0x82, offset 0x2080
+       0x2082: 0x000c,
+       0x2086: 0x000c, 0x208b: 0x000c,
+       0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a8: 0x000a, 0x20a9: 0x000a,
+       0x20aa: 0x000a, 0x20ab: 0x000a,
+       0x20b8: 0x0004, 0x20b9: 0x0004,
+       // Block 0x83, offset 0x20c0
+       0x20f4: 0x000a, 0x20f5: 0x000a,
+       0x20f6: 0x000a, 0x20f7: 0x000a,
+       // Block 0x84, offset 0x2100
+       0x2104: 0x000c, 0x2105: 0x000c,
+       0x2120: 0x000c, 0x2121: 0x000c, 0x2122: 0x000c, 0x2123: 0x000c,
+       0x2124: 0x000c, 0x2125: 0x000c, 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c,
+       0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, 0x212e: 0x000c, 0x212f: 0x000c,
+       0x2130: 0x000c, 0x2131: 0x000c,
+       // Block 0x85, offset 0x2140
+       0x2166: 0x000c, 0x2167: 0x000c, 0x2168: 0x000c, 0x2169: 0x000c,
+       0x216a: 0x000c, 0x216b: 0x000c, 0x216c: 0x000c, 0x216d: 0x000c,
+       // Block 0x86, offset 0x2180
+       0x2187: 0x000c, 0x2188: 0x000c, 0x2189: 0x000c, 0x218a: 0x000c, 0x218b: 0x000c,
+       0x218c: 0x000c, 0x218d: 0x000c, 0x218e: 0x000c, 0x218f: 0x000c, 0x2190: 0x000c, 0x2191: 0x000c,
+       // Block 0x87, offset 0x21c0
+       0x21c0: 0x000c, 0x21c1: 0x000c, 0x21c2: 0x000c,
+       0x21f3: 0x000c,
+       0x21f6: 0x000c, 0x21f7: 0x000c, 0x21f8: 0x000c, 0x21f9: 0x000c,
+       0x21fc: 0x000c,
+       // Block 0x88, offset 0x2200
+       0x2225: 0x000c,
+       // Block 0x89, offset 0x2240
+       0x2269: 0x000c,
+       0x226a: 0x000c, 0x226b: 0x000c, 0x226c: 0x000c, 0x226d: 0x000c, 0x226e: 0x000c,
+       0x2271: 0x000c, 0x2272: 0x000c, 0x2275: 0x000c,
+       0x2276: 0x000c,
+       // Block 0x8a, offset 0x2280
+       0x2283: 0x000c,
+       0x228c: 0x000c,
+       0x22bc: 0x000c,
+       // Block 0x8b, offset 0x22c0
+       0x22f0: 0x000c, 0x22f2: 0x000c, 0x22f3: 0x000c, 0x22f4: 0x000c,
+       0x22f7: 0x000c, 0x22f8: 0x000c,
+       0x22fe: 0x000c, 0x22ff: 0x000c,
+       // Block 0x8c, offset 0x2300
+       0x2301: 0x000c,
+       0x232c: 0x000c, 0x232d: 0x000c,
+       0x2336: 0x000c,
+       // Block 0x8d, offset 0x2340
+       0x2365: 0x000c, 0x2368: 0x000c,
+       0x236d: 0x000c,
+       // Block 0x8e, offset 0x2380
+       0x239d: 0x0001,
+       0x239e: 0x000c, 0x239f: 0x0001, 0x23a0: 0x0001, 0x23a1: 0x0001, 0x23a2: 0x0001, 0x23a3: 0x0001,
+       0x23a4: 0x0001, 0x23a5: 0x0001, 0x23a6: 0x0001, 0x23a7: 0x0001, 0x23a8: 0x0001, 0x23a9: 0x0003,
+       0x23aa: 0x0001, 0x23ab: 0x0001, 0x23ac: 0x0001, 0x23ad: 0x0001, 0x23ae: 0x0001, 0x23af: 0x0001,
+       0x23b0: 0x0001, 0x23b1: 0x0001, 0x23b2: 0x0001, 0x23b3: 0x0001, 0x23b4: 0x0001, 0x23b5: 0x0001,
+       0x23b6: 0x0001, 0x23b7: 0x0001, 0x23b8: 0x0001, 0x23b9: 0x0001, 0x23ba: 0x0001, 0x23bb: 0x0001,
+       0x23bc: 0x0001, 0x23bd: 0x0001, 0x23be: 0x0001, 0x23bf: 0x0001,
+       // Block 0x8f, offset 0x23c0
+       0x23c0: 0x0001, 0x23c1: 0x0001, 0x23c2: 0x0001, 0x23c3: 0x0001, 0x23c4: 0x0001, 0x23c5: 0x0001,
+       0x23c6: 0x0001, 0x23c7: 0x0001, 0x23c8: 0x0001, 0x23c9: 0x0001, 0x23ca: 0x0001, 0x23cb: 0x0001,
+       0x23cc: 0x0001, 0x23cd: 0x0001, 0x23ce: 0x0001, 0x23cf: 0x0001, 0x23d0: 0x000d, 0x23d1: 0x000d,
+       0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d,
+       0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d,
+       0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d,
+       0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d,
+       0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d,
+       0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d,
+       0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d,
+       0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000d, 0x23ff: 0x000d,
+       // Block 0x90, offset 0x2400
+       0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d,
+       0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d,
+       0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000d, 0x2411: 0x000d,
+       0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d,
+       0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d,
+       0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d,
+       0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d,
+       0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d,
+       0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d,
+       0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d,
+       0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000a, 0x243f: 0x000a,
+       // Block 0x91, offset 0x2440
+       0x2440: 0x000d, 0x2441: 0x000d, 0x2442: 0x000d, 0x2443: 0x000d, 0x2444: 0x000d, 0x2445: 0x000d,
+       0x2446: 0x000d, 0x2447: 0x000d, 0x2448: 0x000d, 0x2449: 0x000d, 0x244a: 0x000d, 0x244b: 0x000d,
+       0x244c: 0x000d, 0x244d: 0x000d, 0x244e: 0x000d, 0x244f: 0x000d, 0x2450: 0x000b, 0x2451: 0x000b,
+       0x2452: 0x000b, 0x2453: 0x000b, 0x2454: 0x000b, 0x2455: 0x000b, 0x2456: 0x000b, 0x2457: 0x000b,
+       0x2458: 0x000b, 0x2459: 0x000b, 0x245a: 0x000b, 0x245b: 0x000b, 0x245c: 0x000b, 0x245d: 0x000b,
+       0x245e: 0x000b, 0x245f: 0x000b, 0x2460: 0x000b, 0x2461: 0x000b, 0x2462: 0x000b, 0x2463: 0x000b,
+       0x2464: 0x000b, 0x2465: 0x000b, 0x2466: 0x000b, 0x2467: 0x000b, 0x2468: 0x000b, 0x2469: 0x000b,
+       0x246a: 0x000b, 0x246b: 0x000b, 0x246c: 0x000b, 0x246d: 0x000b, 0x246e: 0x000b, 0x246f: 0x000b,
+       0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d,
+       0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d,
+       0x247c: 0x000d, 0x247d: 0x000a, 0x247e: 0x000d, 0x247f: 0x000d,
+       // Block 0x92, offset 0x2480
+       0x2480: 0x000c, 0x2481: 0x000c, 0x2482: 0x000c, 0x2483: 0x000c, 0x2484: 0x000c, 0x2485: 0x000c,
+       0x2486: 0x000c, 0x2487: 0x000c, 0x2488: 0x000c, 0x2489: 0x000c, 0x248a: 0x000c, 0x248b: 0x000c,
+       0x248c: 0x000c, 0x248d: 0x000c, 0x248e: 0x000c, 0x248f: 0x000c, 0x2490: 0x000a, 0x2491: 0x000a,
+       0x2492: 0x000a, 0x2493: 0x000a, 0x2494: 0x000a, 0x2495: 0x000a, 0x2496: 0x000a, 0x2497: 0x000a,
+       0x2498: 0x000a, 0x2499: 0x000a,
+       0x24a0: 0x000c, 0x24a1: 0x000c, 0x24a2: 0x000c, 0x24a3: 0x000c,
+       0x24a4: 0x000c, 0x24a5: 0x000c, 0x24a6: 0x000c, 0x24a7: 0x000c, 0x24a8: 0x000c, 0x24a9: 0x000c,
+       0x24aa: 0x000c, 0x24ab: 0x000c, 0x24ac: 0x000c, 0x24ad: 0x000c, 0x24ae: 0x000c, 0x24af: 0x000c,
+       0x24b0: 0x000a, 0x24b1: 0x000a, 0x24b2: 0x000a, 0x24b3: 0x000a, 0x24b4: 0x000a, 0x24b5: 0x000a,
+       0x24b6: 0x000a, 0x24b7: 0x000a, 0x24b8: 0x000a, 0x24b9: 0x000a, 0x24ba: 0x000a, 0x24bb: 0x000a,
+       0x24bc: 0x000a, 0x24bd: 0x000a, 0x24be: 0x000a, 0x24bf: 0x000a,
+       // Block 0x93, offset 0x24c0
+       0x24c0: 0x000a, 0x24c1: 0x000a, 0x24c2: 0x000a, 0x24c3: 0x000a, 0x24c4: 0x000a, 0x24c5: 0x000a,
+       0x24c6: 0x000a, 0x24c7: 0x000a, 0x24c8: 0x000a, 0x24c9: 0x000a, 0x24ca: 0x000a, 0x24cb: 0x000a,
+       0x24cc: 0x000a, 0x24cd: 0x000a, 0x24ce: 0x000a, 0x24cf: 0x000a, 0x24d0: 0x0006, 0x24d1: 0x000a,
+       0x24d2: 0x0006, 0x24d4: 0x000a, 0x24d5: 0x0006, 0x24d6: 0x000a, 0x24d7: 0x000a,
+       0x24d8: 0x000a, 0x24d9: 0x009a, 0x24da: 0x008a, 0x24db: 0x007a, 0x24dc: 0x006a, 0x24dd: 0x009a,
+       0x24de: 0x008a, 0x24df: 0x0004, 0x24e0: 0x000a, 0x24e1: 0x000a, 0x24e2: 0x0003, 0x24e3: 0x0003,
+       0x24e4: 0x000a, 0x24e5: 0x000a, 0x24e6: 0x000a, 0x24e8: 0x000a, 0x24e9: 0x0004,
+       0x24ea: 0x0004, 0x24eb: 0x000a,
+       0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d,
+       0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d,
+       0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000d,
+       // Block 0x94, offset 0x2500
+       0x2500: 0x000d, 0x2501: 0x000d, 0x2502: 0x000d, 0x2503: 0x000d, 0x2504: 0x000d, 0x2505: 0x000d,
+       0x2506: 0x000d, 0x2507: 0x000d, 0x2508: 0x000d, 0x2509: 0x000d, 0x250a: 0x000d, 0x250b: 0x000d,
+       0x250c: 0x000d, 0x250d: 0x000d, 0x250e: 0x000d, 0x250f: 0x000d, 0x2510: 0x000d, 0x2511: 0x000d,
+       0x2512: 0x000d, 0x2513: 0x000d, 0x2514: 0x000d, 0x2515: 0x000d, 0x2516: 0x000d, 0x2517: 0x000d,
+       0x2518: 0x000d, 0x2519: 0x000d, 0x251a: 0x000d, 0x251b: 0x000d, 0x251c: 0x000d, 0x251d: 0x000d,
+       0x251e: 0x000d, 0x251f: 0x000d, 0x2520: 0x000d, 0x2521: 0x000d, 0x2522: 0x000d, 0x2523: 0x000d,
+       0x2524: 0x000d, 0x2525: 0x000d, 0x2526: 0x000d, 0x2527: 0x000d, 0x2528: 0x000d, 0x2529: 0x000d,
+       0x252a: 0x000d, 0x252b: 0x000d, 0x252c: 0x000d, 0x252d: 0x000d, 0x252e: 0x000d, 0x252f: 0x000d,
+       0x2530: 0x000d, 0x2531: 0x000d, 0x2532: 0x000d, 0x2533: 0x000d, 0x2534: 0x000d, 0x2535: 0x000d,
+       0x2536: 0x000d, 0x2537: 0x000d, 0x2538: 0x000d, 0x2539: 0x000d, 0x253a: 0x000d, 0x253b: 0x000d,
+       0x253c: 0x000d, 0x253d: 0x000d, 0x253e: 0x000d, 0x253f: 0x000b,
+       // Block 0x95, offset 0x2540
+       0x2541: 0x000a, 0x2542: 0x000a, 0x2543: 0x0004, 0x2544: 0x0004, 0x2545: 0x0004,
+       0x2546: 0x000a, 0x2547: 0x000a, 0x2548: 0x003a, 0x2549: 0x002a, 0x254a: 0x000a, 0x254b: 0x0003,
+       0x254c: 0x0006, 0x254d: 0x0003, 0x254e: 0x0006, 0x254f: 0x0006, 0x2550: 0x0002, 0x2551: 0x0002,
+       0x2552: 0x0002, 0x2553: 0x0002, 0x2554: 0x0002, 0x2555: 0x0002, 0x2556: 0x0002, 0x2557: 0x0002,
+       0x2558: 0x0002, 0x2559: 0x0002, 0x255a: 0x0006, 0x255b: 0x000a, 0x255c: 0x000a, 0x255d: 0x000a,
+       0x255e: 0x000a, 0x255f: 0x000a, 0x2560: 0x000a,
+       0x257b: 0x005a,
+       0x257c: 0x000a, 0x257d: 0x004a, 0x257e: 0x000a, 0x257f: 0x000a,
+       // Block 0x96, offset 0x2580
+       0x2580: 0x000a,
+       0x259b: 0x005a, 0x259c: 0x000a, 0x259d: 0x004a,
+       0x259e: 0x000a, 0x259f: 0x00fa, 0x25a0: 0x00ea, 0x25a1: 0x000a, 0x25a2: 0x003a, 0x25a3: 0x002a,
+       0x25a4: 0x000a, 0x25a5: 0x000a,
+       // Block 0x97, offset 0x25c0
+       0x25e0: 0x0004, 0x25e1: 0x0004, 0x25e2: 0x000a, 0x25e3: 0x000a,
+       0x25e4: 0x000a, 0x25e5: 0x0004, 0x25e6: 0x0004, 0x25e8: 0x000a, 0x25e9: 0x000a,
+       0x25ea: 0x000a, 0x25eb: 0x000a, 0x25ec: 0x000a, 0x25ed: 0x000a, 0x25ee: 0x000a,
+       0x25f0: 0x000b, 0x25f1: 0x000b, 0x25f2: 0x000b, 0x25f3: 0x000b, 0x25f4: 0x000b, 0x25f5: 0x000b,
+       0x25f6: 0x000b, 0x25f7: 0x000b, 0x25f8: 0x000b, 0x25f9: 0x000a, 0x25fa: 0x000a, 0x25fb: 0x000a,
+       0x25fc: 0x000a, 0x25fd: 0x000a, 0x25fe: 0x000b, 0x25ff: 0x000b,
+       // Block 0x98, offset 0x2600
+       0x2601: 0x000a,
+       // Block 0x99, offset 0x2640
+       0x2640: 0x000a, 0x2641: 0x000a, 0x2642: 0x000a, 0x2643: 0x000a, 0x2644: 0x000a, 0x2645: 0x000a,
+       0x2646: 0x000a, 0x2647: 0x000a, 0x2648: 0x000a, 0x2649: 0x000a, 0x264a: 0x000a, 0x264b: 0x000a,
+       0x264c: 0x000a, 0x2650: 0x000a, 0x2651: 0x000a,
+       0x2652: 0x000a, 0x2653: 0x000a, 0x2654: 0x000a, 0x2655: 0x000a, 0x2656: 0x000a, 0x2657: 0x000a,
+       0x2658: 0x000a, 0x2659: 0x000a, 0x265a: 0x000a, 0x265b: 0x000a,
+       0x2660: 0x000a,
+       // Block 0x9a, offset 0x2680
+       0x26bd: 0x000c,
+       // Block 0x9b, offset 0x26c0
+       0x26e0: 0x000c, 0x26e1: 0x0002, 0x26e2: 0x0002, 0x26e3: 0x0002,
+       0x26e4: 0x0002, 0x26e5: 0x0002, 0x26e6: 0x0002, 0x26e7: 0x0002, 0x26e8: 0x0002, 0x26e9: 0x0002,
+       0x26ea: 0x0002, 0x26eb: 0x0002, 0x26ec: 0x0002, 0x26ed: 0x0002, 0x26ee: 0x0002, 0x26ef: 0x0002,
+       0x26f0: 0x0002, 0x26f1: 0x0002, 0x26f2: 0x0002, 0x26f3: 0x0002, 0x26f4: 0x0002, 0x26f5: 0x0002,
+       0x26f6: 0x0002, 0x26f7: 0x0002, 0x26f8: 0x0002, 0x26f9: 0x0002, 0x26fa: 0x0002, 0x26fb: 0x0002,
+       // Block 0x9c, offset 0x2700
+       0x2736: 0x000c, 0x2737: 0x000c, 0x2738: 0x000c, 0x2739: 0x000c, 0x273a: 0x000c,
+       // Block 0x9d, offset 0x2740
+       0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001,
+       0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001,
+       0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001,
+       0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001,
+       0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001,
+       0x275e: 0x0001, 0x275f: 0x0001, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001,
+       0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001,
+       0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001,
+       0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001,
+       0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001,
+       0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001,
+       // Block 0x9e, offset 0x2780
+       0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001,
+       0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001,
+       0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001,
+       0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001,
+       0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001,
+       0x279e: 0x0001, 0x279f: 0x000a, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001,
+       0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001,
+       0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001,
+       0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001,
+       0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001,
+       0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001,
+       // Block 0x9f, offset 0x27c0
+       0x27c0: 0x0001, 0x27c1: 0x000c, 0x27c2: 0x000c, 0x27c3: 0x000c, 0x27c4: 0x0001, 0x27c5: 0x000c,
+       0x27c6: 0x000c, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001,
+       0x27cc: 0x000c, 0x27cd: 0x000c, 0x27ce: 0x000c, 0x27cf: 0x000c, 0x27d0: 0x0001, 0x27d1: 0x0001,
+       0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001,
+       0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001,
+       0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001,
+       0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001,
+       0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001,
+       0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001,
+       0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x000c, 0x27f9: 0x000c, 0x27fa: 0x000c, 0x27fb: 0x0001,
+       0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x000c,
+       // Block 0xa0, offset 0x2800
+       0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001,
+       0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001,
+       0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001,
+       0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001,
+       0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001,
+       0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001,
+       0x2824: 0x0001, 0x2825: 0x000c, 0x2826: 0x000c, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001,
+       0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001,
+       0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001,
+       0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x0001, 0x283a: 0x0001, 0x283b: 0x0001,
+       0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x0001,
+       // Block 0xa1, offset 0x2840
+       0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001,
+       0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001,
+       0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001,
+       0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001,
+       0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001,
+       0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001,
+       0x2864: 0x0001, 0x2865: 0x0001, 0x2866: 0x0001, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001,
+       0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001,
+       0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001,
+       0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x000a, 0x287a: 0x000a, 0x287b: 0x000a,
+       0x287c: 0x000a, 0x287d: 0x000a, 0x287e: 0x000a, 0x287f: 0x000a,
+       // Block 0xa2, offset 0x2880
+       0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001,
+       0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001,
+       0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001,
+       0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001,
+       0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001,
+       0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0005, 0x28a1: 0x0005, 0x28a2: 0x0005, 0x28a3: 0x0005,
+       0x28a4: 0x0005, 0x28a5: 0x0005, 0x28a6: 0x0005, 0x28a7: 0x0005, 0x28a8: 0x0005, 0x28a9: 0x0005,
+       0x28aa: 0x0005, 0x28ab: 0x0005, 0x28ac: 0x0005, 0x28ad: 0x0005, 0x28ae: 0x0005, 0x28af: 0x0005,
+       0x28b0: 0x0005, 0x28b1: 0x0005, 0x28b2: 0x0005, 0x28b3: 0x0005, 0x28b4: 0x0005, 0x28b5: 0x0005,
+       0x28b6: 0x0005, 0x28b7: 0x0005, 0x28b8: 0x0005, 0x28b9: 0x0005, 0x28ba: 0x0005, 0x28bb: 0x0005,
+       0x28bc: 0x0005, 0x28bd: 0x0005, 0x28be: 0x0005, 0x28bf: 0x0001,
+       // Block 0xa3, offset 0x28c0
+       0x28c1: 0x000c,
+       0x28f8: 0x000c, 0x28f9: 0x000c, 0x28fa: 0x000c, 0x28fb: 0x000c,
+       0x28fc: 0x000c, 0x28fd: 0x000c, 0x28fe: 0x000c, 0x28ff: 0x000c,
+       // Block 0xa4, offset 0x2900
+       0x2900: 0x000c, 0x2901: 0x000c, 0x2902: 0x000c, 0x2903: 0x000c, 0x2904: 0x000c, 0x2905: 0x000c,
+       0x2906: 0x000c,
+       0x2912: 0x000a, 0x2913: 0x000a, 0x2914: 0x000a, 0x2915: 0x000a, 0x2916: 0x000a, 0x2917: 0x000a,
+       0x2918: 0x000a, 0x2919: 0x000a, 0x291a: 0x000a, 0x291b: 0x000a, 0x291c: 0x000a, 0x291d: 0x000a,
+       0x291e: 0x000a, 0x291f: 0x000a, 0x2920: 0x000a, 0x2921: 0x000a, 0x2922: 0x000a, 0x2923: 0x000a,
+       0x2924: 0x000a, 0x2925: 0x000a,
+       0x293f: 0x000c,
+       // Block 0xa5, offset 0x2940
+       0x2940: 0x000c, 0x2941: 0x000c,
+       0x2973: 0x000c, 0x2974: 0x000c, 0x2975: 0x000c,
+       0x2976: 0x000c, 0x2979: 0x000c, 0x297a: 0x000c,
+       // Block 0xa6, offset 0x2980
+       0x2980: 0x000c, 0x2981: 0x000c, 0x2982: 0x000c,
+       0x29a7: 0x000c, 0x29a8: 0x000c, 0x29a9: 0x000c,
+       0x29aa: 0x000c, 0x29ab: 0x000c, 0x29ad: 0x000c, 0x29ae: 0x000c, 0x29af: 0x000c,
+       0x29b0: 0x000c, 0x29b1: 0x000c, 0x29b2: 0x000c, 0x29b3: 0x000c, 0x29b4: 0x000c,
+       // Block 0xa7, offset 0x29c0
+       0x29f3: 0x000c,
+       // Block 0xa8, offset 0x2a00
+       0x2a00: 0x000c, 0x2a01: 0x000c,
+       0x2a36: 0x000c, 0x2a37: 0x000c, 0x2a38: 0x000c, 0x2a39: 0x000c, 0x2a3a: 0x000c, 0x2a3b: 0x000c,
+       0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c,
+       // Block 0xa9, offset 0x2a40
+       0x2a4a: 0x000c, 0x2a4b: 0x000c,
+       0x2a4c: 0x000c,
+       // Block 0xaa, offset 0x2a80
+       0x2aaf: 0x000c,
+       0x2ab0: 0x000c, 0x2ab1: 0x000c, 0x2ab4: 0x000c,
+       0x2ab6: 0x000c, 0x2ab7: 0x000c,
+       0x2abe: 0x000c,
+       // Block 0xab, offset 0x2ac0
+       0x2adf: 0x000c, 0x2ae3: 0x000c,
+       0x2ae4: 0x000c, 0x2ae5: 0x000c, 0x2ae6: 0x000c, 0x2ae7: 0x000c, 0x2ae8: 0x000c, 0x2ae9: 0x000c,
+       0x2aea: 0x000c,
+       // Block 0xac, offset 0x2b00
+       0x2b00: 0x000c, 0x2b01: 0x000c,
+       0x2b3c: 0x000c,
+       // Block 0xad, offset 0x2b40
+       0x2b40: 0x000c,
+       0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c,
+       0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6c: 0x000c,
+       0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c,
+       // Block 0xae, offset 0x2b80
+       0x2bb8: 0x000c, 0x2bb9: 0x000c, 0x2bba: 0x000c, 0x2bbb: 0x000c,
+       0x2bbc: 0x000c, 0x2bbd: 0x000c, 0x2bbe: 0x000c, 0x2bbf: 0x000c,
+       // Block 0xaf, offset 0x2bc0
+       0x2bc2: 0x000c, 0x2bc3: 0x000c, 0x2bc4: 0x000c,
+       0x2bc6: 0x000c,
+       // Block 0xb0, offset 0x2c00
+       0x2c33: 0x000c, 0x2c34: 0x000c, 0x2c35: 0x000c,
+       0x2c36: 0x000c, 0x2c37: 0x000c, 0x2c38: 0x000c, 0x2c3a: 0x000c,
+       0x2c3f: 0x000c,
+       // Block 0xb1, offset 0x2c40
+       0x2c40: 0x000c, 0x2c42: 0x000c, 0x2c43: 0x000c,
+       // Block 0xb2, offset 0x2c80
+       0x2cb2: 0x000c, 0x2cb3: 0x000c, 0x2cb4: 0x000c, 0x2cb5: 0x000c,
+       0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbf: 0x000c,
+       // Block 0xb3, offset 0x2cc0
+       0x2cc0: 0x000c,
+       0x2cdc: 0x000c, 0x2cdd: 0x000c,
+       // Block 0xb4, offset 0x2d00
+       0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c,
+       0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c,
+       0x2d3d: 0x000c, 0x2d3f: 0x000c,
+       // Block 0xb5, offset 0x2d40
+       0x2d40: 0x000c,
+       0x2d60: 0x000a, 0x2d61: 0x000a, 0x2d62: 0x000a, 0x2d63: 0x000a,
+       0x2d64: 0x000a, 0x2d65: 0x000a, 0x2d66: 0x000a, 0x2d67: 0x000a, 0x2d68: 0x000a, 0x2d69: 0x000a,
+       0x2d6a: 0x000a, 0x2d6b: 0x000a, 0x2d6c: 0x000a,
+       // Block 0xb6, offset 0x2d80
+       0x2dab: 0x000c, 0x2dad: 0x000c,
+       0x2db0: 0x000c, 0x2db1: 0x000c, 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c,
+       0x2db7: 0x000c,
+       // Block 0xb7, offset 0x2dc0
+       0x2ddd: 0x000c,
+       0x2dde: 0x000c, 0x2ddf: 0x000c, 0x2de2: 0x000c, 0x2de3: 0x000c,
+       0x2de4: 0x000c, 0x2de5: 0x000c, 0x2de7: 0x000c, 0x2de8: 0x000c, 0x2de9: 0x000c,
+       0x2dea: 0x000c, 0x2deb: 0x000c,
+       // Block 0xb8, offset 0x2e00
+       0x2e30: 0x000c, 0x2e31: 0x000c, 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c,
+       0x2e36: 0x000c, 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, 0x2e3b: 0x000c,
+       0x2e3c: 0x000c, 0x2e3d: 0x000c,
+       // Block 0xb9, offset 0x2e40
+       0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, 0x2e57: 0x000c,
+       0x2e58: 0x000c, 0x2e59: 0x000c, 0x2e5a: 0x000c, 0x2e5b: 0x000c, 0x2e5c: 0x000c, 0x2e5d: 0x000c,
+       0x2e5e: 0x000c, 0x2e5f: 0x000c, 0x2e60: 0x000c, 0x2e61: 0x000c, 0x2e62: 0x000c, 0x2e63: 0x000c,
+       0x2e64: 0x000c, 0x2e65: 0x000c, 0x2e66: 0x000c, 0x2e67: 0x000c,
+       0x2e6a: 0x000c, 0x2e6b: 0x000c, 0x2e6c: 0x000c, 0x2e6d: 0x000c, 0x2e6e: 0x000c, 0x2e6f: 0x000c,
+       0x2e70: 0x000c, 0x2e72: 0x000c, 0x2e73: 0x000c, 0x2e75: 0x000c,
+       0x2e76: 0x000c,
+       // Block 0xba, offset 0x2e80
+       0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c,
+       // Block 0xbb, offset 0x2ec0
+       0x2ef0: 0x000c, 0x2ef1: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef4: 0x000c, 0x2ef5: 0x000c,
+       0x2ef6: 0x000c,
+       // Block 0xbc, offset 0x2f00
+       0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c,
+       0x2f12: 0x000c,
+       // Block 0xbd, offset 0x2f40
+       0x2f5d: 0x000c,
+       0x2f5e: 0x000c, 0x2f60: 0x000b, 0x2f61: 0x000b, 0x2f62: 0x000b, 0x2f63: 0x000b,
+       // Block 0xbe, offset 0x2f80
+       0x2fa7: 0x000c, 0x2fa8: 0x000c, 0x2fa9: 0x000c,
+       0x2fb3: 0x000b, 0x2fb4: 0x000b, 0x2fb5: 0x000b,
+       0x2fb6: 0x000b, 0x2fb7: 0x000b, 0x2fb8: 0x000b, 0x2fb9: 0x000b, 0x2fba: 0x000b, 0x2fbb: 0x000c,
+       0x2fbc: 0x000c, 0x2fbd: 0x000c, 0x2fbe: 0x000c, 0x2fbf: 0x000c,
+       // Block 0xbf, offset 0x2fc0
+       0x2fc0: 0x000c, 0x2fc1: 0x000c, 0x2fc2: 0x000c, 0x2fc5: 0x000c,
+       0x2fc6: 0x000c, 0x2fc7: 0x000c, 0x2fc8: 0x000c, 0x2fc9: 0x000c, 0x2fca: 0x000c, 0x2fcb: 0x000c,
+       0x2fea: 0x000c, 0x2feb: 0x000c, 0x2fec: 0x000c, 0x2fed: 0x000c,
+       // Block 0xc0, offset 0x3000
+       0x3000: 0x000a, 0x3001: 0x000a, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000a,
+       // Block 0xc1, offset 0x3040
+       0x3040: 0x000a, 0x3041: 0x000a, 0x3042: 0x000a, 0x3043: 0x000a, 0x3044: 0x000a, 0x3045: 0x000a,
+       0x3046: 0x000a, 0x3047: 0x000a, 0x3048: 0x000a, 0x3049: 0x000a, 0x304a: 0x000a, 0x304b: 0x000a,
+       0x304c: 0x000a, 0x304d: 0x000a, 0x304e: 0x000a, 0x304f: 0x000a, 0x3050: 0x000a, 0x3051: 0x000a,
+       0x3052: 0x000a, 0x3053: 0x000a, 0x3054: 0x000a, 0x3055: 0x000a, 0x3056: 0x000a,
+       // Block 0xc2, offset 0x3080
+       0x309b: 0x000a,
+       // Block 0xc3, offset 0x30c0
+       0x30d5: 0x000a,
+       // Block 0xc4, offset 0x3100
+       0x310f: 0x000a,
+       // Block 0xc5, offset 0x3140
+       0x3149: 0x000a,
+       // Block 0xc6, offset 0x3180
+       0x3183: 0x000a,
+       0x318e: 0x0002, 0x318f: 0x0002, 0x3190: 0x0002, 0x3191: 0x0002,
+       0x3192: 0x0002, 0x3193: 0x0002, 0x3194: 0x0002, 0x3195: 0x0002, 0x3196: 0x0002, 0x3197: 0x0002,
+       0x3198: 0x0002, 0x3199: 0x0002, 0x319a: 0x0002, 0x319b: 0x0002, 0x319c: 0x0002, 0x319d: 0x0002,
+       0x319e: 0x0002, 0x319f: 0x0002, 0x31a0: 0x0002, 0x31a1: 0x0002, 0x31a2: 0x0002, 0x31a3: 0x0002,
+       0x31a4: 0x0002, 0x31a5: 0x0002, 0x31a6: 0x0002, 0x31a7: 0x0002, 0x31a8: 0x0002, 0x31a9: 0x0002,
+       0x31aa: 0x0002, 0x31ab: 0x0002, 0x31ac: 0x0002, 0x31ad: 0x0002, 0x31ae: 0x0002, 0x31af: 0x0002,
+       0x31b0: 0x0002, 0x31b1: 0x0002, 0x31b2: 0x0002, 0x31b3: 0x0002, 0x31b4: 0x0002, 0x31b5: 0x0002,
+       0x31b6: 0x0002, 0x31b7: 0x0002, 0x31b8: 0x0002, 0x31b9: 0x0002, 0x31ba: 0x0002, 0x31bb: 0x0002,
+       0x31bc: 0x0002, 0x31bd: 0x0002, 0x31be: 0x0002, 0x31bf: 0x0002,
+       // Block 0xc7, offset 0x31c0
+       0x31c0: 0x000c, 0x31c1: 0x000c, 0x31c2: 0x000c, 0x31c3: 0x000c, 0x31c4: 0x000c, 0x31c5: 0x000c,
+       0x31c6: 0x000c, 0x31c7: 0x000c, 0x31c8: 0x000c, 0x31c9: 0x000c, 0x31ca: 0x000c, 0x31cb: 0x000c,
+       0x31cc: 0x000c, 0x31cd: 0x000c, 0x31ce: 0x000c, 0x31cf: 0x000c, 0x31d0: 0x000c, 0x31d1: 0x000c,
+       0x31d2: 0x000c, 0x31d3: 0x000c, 0x31d4: 0x000c, 0x31d5: 0x000c, 0x31d6: 0x000c, 0x31d7: 0x000c,
+       0x31d8: 0x000c, 0x31d9: 0x000c, 0x31da: 0x000c, 0x31db: 0x000c, 0x31dc: 0x000c, 0x31dd: 0x000c,
+       0x31de: 0x000c, 0x31df: 0x000c, 0x31e0: 0x000c, 0x31e1: 0x000c, 0x31e2: 0x000c, 0x31e3: 0x000c,
+       0x31e4: 0x000c, 0x31e5: 0x000c, 0x31e6: 0x000c, 0x31e7: 0x000c, 0x31e8: 0x000c, 0x31e9: 0x000c,
+       0x31ea: 0x000c, 0x31eb: 0x000c, 0x31ec: 0x000c, 0x31ed: 0x000c, 0x31ee: 0x000c, 0x31ef: 0x000c,
+       0x31f0: 0x000c, 0x31f1: 0x000c, 0x31f2: 0x000c, 0x31f3: 0x000c, 0x31f4: 0x000c, 0x31f5: 0x000c,
+       0x31f6: 0x000c, 0x31fb: 0x000c,
+       0x31fc: 0x000c, 0x31fd: 0x000c, 0x31fe: 0x000c, 0x31ff: 0x000c,
+       // Block 0xc8, offset 0x3200
+       0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3203: 0x000c, 0x3204: 0x000c, 0x3205: 0x000c,
+       0x3206: 0x000c, 0x3207: 0x000c, 0x3208: 0x000c, 0x3209: 0x000c, 0x320a: 0x000c, 0x320b: 0x000c,
+       0x320c: 0x000c, 0x320d: 0x000c, 0x320e: 0x000c, 0x320f: 0x000c, 0x3210: 0x000c, 0x3211: 0x000c,
+       0x3212: 0x000c, 0x3213: 0x000c, 0x3214: 0x000c, 0x3215: 0x000c, 0x3216: 0x000c, 0x3217: 0x000c,
+       0x3218: 0x000c, 0x3219: 0x000c, 0x321a: 0x000c, 0x321b: 0x000c, 0x321c: 0x000c, 0x321d: 0x000c,
+       0x321e: 0x000c, 0x321f: 0x000c, 0x3220: 0x000c, 0x3221: 0x000c, 0x3222: 0x000c, 0x3223: 0x000c,
+       0x3224: 0x000c, 0x3225: 0x000c, 0x3226: 0x000c, 0x3227: 0x000c, 0x3228: 0x000c, 0x3229: 0x000c,
+       0x322a: 0x000c, 0x322b: 0x000c, 0x322c: 0x000c,
+       0x3235: 0x000c,
+       // Block 0xc9, offset 0x3240
+       0x3244: 0x000c,
+       0x325b: 0x000c, 0x325c: 0x000c, 0x325d: 0x000c,
+       0x325e: 0x000c, 0x325f: 0x000c, 0x3261: 0x000c, 0x3262: 0x000c, 0x3263: 0x000c,
+       0x3264: 0x000c, 0x3265: 0x000c, 0x3266: 0x000c, 0x3267: 0x000c, 0x3268: 0x000c, 0x3269: 0x000c,
+       0x326a: 0x000c, 0x326b: 0x000c, 0x326c: 0x000c, 0x326d: 0x000c, 0x326e: 0x000c, 0x326f: 0x000c,
+       // Block 0xca, offset 0x3280
+       0x3280: 0x000c, 0x3281: 0x000c, 0x3282: 0x000c, 0x3283: 0x000c, 0x3284: 0x000c, 0x3285: 0x000c,
+       0x3286: 0x000c, 0x3288: 0x000c, 0x3289: 0x000c, 0x328a: 0x000c, 0x328b: 0x000c,
+       0x328c: 0x000c, 0x328d: 0x000c, 0x328e: 0x000c, 0x328f: 0x000c, 0x3290: 0x000c, 0x3291: 0x000c,
+       0x3292: 0x000c, 0x3293: 0x000c, 0x3294: 0x000c, 0x3295: 0x000c, 0x3296: 0x000c, 0x3297: 0x000c,
+       0x3298: 0x000c, 0x329b: 0x000c, 0x329c: 0x000c, 0x329d: 0x000c,
+       0x329e: 0x000c, 0x329f: 0x000c, 0x32a0: 0x000c, 0x32a1: 0x000c, 0x32a3: 0x000c,
+       0x32a4: 0x000c, 0x32a6: 0x000c, 0x32a7: 0x000c, 0x32a8: 0x000c, 0x32a9: 0x000c,
+       0x32aa: 0x000c,
+       // Block 0xcb, offset 0x32c0
+       0x32c0: 0x0001, 0x32c1: 0x0001, 0x32c2: 0x0001, 0x32c3: 0x0001, 0x32c4: 0x0001, 0x32c5: 0x0001,
+       0x32c6: 0x0001, 0x32c7: 0x0001, 0x32c8: 0x0001, 0x32c9: 0x0001, 0x32ca: 0x0001, 0x32cb: 0x0001,
+       0x32cc: 0x0001, 0x32cd: 0x0001, 0x32ce: 0x0001, 0x32cf: 0x0001, 0x32d0: 0x000c, 0x32d1: 0x000c,
+       0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x0001,
+       0x32d8: 0x0001, 0x32d9: 0x0001, 0x32da: 0x0001, 0x32db: 0x0001, 0x32dc: 0x0001, 0x32dd: 0x0001,
+       0x32de: 0x0001, 0x32df: 0x0001, 0x32e0: 0x0001, 0x32e1: 0x0001, 0x32e2: 0x0001, 0x32e3: 0x0001,
+       0x32e4: 0x0001, 0x32e5: 0x0001, 0x32e6: 0x0001, 0x32e7: 0x0001, 0x32e8: 0x0001, 0x32e9: 0x0001,
+       0x32ea: 0x0001, 0x32eb: 0x0001, 0x32ec: 0x0001, 0x32ed: 0x0001, 0x32ee: 0x0001, 0x32ef: 0x0001,
+       0x32f0: 0x0001, 0x32f1: 0x0001, 0x32f2: 0x0001, 0x32f3: 0x0001, 0x32f4: 0x0001, 0x32f5: 0x0001,
+       0x32f6: 0x0001, 0x32f7: 0x0001, 0x32f8: 0x0001, 0x32f9: 0x0001, 0x32fa: 0x0001, 0x32fb: 0x0001,
+       0x32fc: 0x0001, 0x32fd: 0x0001, 0x32fe: 0x0001, 0x32ff: 0x0001,
+       // Block 0xcc, offset 0x3300
+       0x3300: 0x0001, 0x3301: 0x0001, 0x3302: 0x0001, 0x3303: 0x0001, 0x3304: 0x000c, 0x3305: 0x000c,
+       0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x0001,
+       0x330c: 0x0001, 0x330d: 0x0001, 0x330e: 0x0001, 0x330f: 0x0001, 0x3310: 0x0001, 0x3311: 0x0001,
+       0x3312: 0x0001, 0x3313: 0x0001, 0x3314: 0x0001, 0x3315: 0x0001, 0x3316: 0x0001, 0x3317: 0x0001,
+       0x3318: 0x0001, 0x3319: 0x0001, 0x331a: 0x0001, 0x331b: 0x0001, 0x331c: 0x0001, 0x331d: 0x0001,
+       0x331e: 0x0001, 0x331f: 0x0001, 0x3320: 0x0001, 0x3321: 0x0001, 0x3322: 0x0001, 0x3323: 0x0001,
+       0x3324: 0x0001, 0x3325: 0x0001, 0x3326: 0x0001, 0x3327: 0x0001, 0x3328: 0x0001, 0x3329: 0x0001,
+       0x332a: 0x0001, 0x332b: 0x0001, 0x332c: 0x0001, 0x332d: 0x0001, 0x332e: 0x0001, 0x332f: 0x0001,
+       0x3330: 0x0001, 0x3331: 0x0001, 0x3332: 0x0001, 0x3333: 0x0001, 0x3334: 0x0001, 0x3335: 0x0001,
+       0x3336: 0x0001, 0x3337: 0x0001, 0x3338: 0x0001, 0x3339: 0x0001, 0x333a: 0x0001, 0x333b: 0x0001,
+       0x333c: 0x0001, 0x333d: 0x0001, 0x333e: 0x0001, 0x333f: 0x0001,
+       // Block 0xcd, offset 0x3340
+       0x3340: 0x000d, 0x3341: 0x000d, 0x3342: 0x000d, 0x3343: 0x000d, 0x3344: 0x000d, 0x3345: 0x000d,
+       0x3346: 0x000d, 0x3347: 0x000d, 0x3348: 0x000d, 0x3349: 0x000d, 0x334a: 0x000d, 0x334b: 0x000d,
+       0x334c: 0x000d, 0x334d: 0x000d, 0x334e: 0x000d, 0x334f: 0x000d, 0x3350: 0x000d, 0x3351: 0x000d,
+       0x3352: 0x000d, 0x3353: 0x000d, 0x3354: 0x000d, 0x3355: 0x000d, 0x3356: 0x000d, 0x3357: 0x000d,
+       0x3358: 0x000d, 0x3359: 0x000d, 0x335a: 0x000d, 0x335b: 0x000d, 0x335c: 0x000d, 0x335d: 0x000d,
+       0x335e: 0x000d, 0x335f: 0x000d, 0x3360: 0x000d, 0x3361: 0x000d, 0x3362: 0x000d, 0x3363: 0x000d,
+       0x3364: 0x000d, 0x3365: 0x000d, 0x3366: 0x000d, 0x3367: 0x000d, 0x3368: 0x000d, 0x3369: 0x000d,
+       0x336a: 0x000d, 0x336b: 0x000d, 0x336c: 0x000d, 0x336d: 0x000d, 0x336e: 0x000d, 0x336f: 0x000d,
+       0x3370: 0x000a, 0x3371: 0x000a, 0x3372: 0x000d, 0x3373: 0x000d, 0x3374: 0x000d, 0x3375: 0x000d,
+       0x3376: 0x000d, 0x3377: 0x000d, 0x3378: 0x000d, 0x3379: 0x000d, 0x337a: 0x000d, 0x337b: 0x000d,
+       0x337c: 0x000d, 0x337d: 0x000d, 0x337e: 0x000d, 0x337f: 0x000d,
+       // Block 0xce, offset 0x3380
+       0x3380: 0x000a, 0x3381: 0x000a, 0x3382: 0x000a, 0x3383: 0x000a, 0x3384: 0x000a, 0x3385: 0x000a,
+       0x3386: 0x000a, 0x3387: 0x000a, 0x3388: 0x000a, 0x3389: 0x000a, 0x338a: 0x000a, 0x338b: 0x000a,
+       0x338c: 0x000a, 0x338d: 0x000a, 0x338e: 0x000a, 0x338f: 0x000a, 0x3390: 0x000a, 0x3391: 0x000a,
+       0x3392: 0x000a, 0x3393: 0x000a, 0x3394: 0x000a, 0x3395: 0x000a, 0x3396: 0x000a, 0x3397: 0x000a,
+       0x3398: 0x000a, 0x3399: 0x000a, 0x339a: 0x000a, 0x339b: 0x000a, 0x339c: 0x000a, 0x339d: 0x000a,
+       0x339e: 0x000a, 0x339f: 0x000a, 0x33a0: 0x000a, 0x33a1: 0x000a, 0x33a2: 0x000a, 0x33a3: 0x000a,
+       0x33a4: 0x000a, 0x33a5: 0x000a, 0x33a6: 0x000a, 0x33a7: 0x000a, 0x33a8: 0x000a, 0x33a9: 0x000a,
+       0x33aa: 0x000a, 0x33ab: 0x000a,
+       0x33b0: 0x000a, 0x33b1: 0x000a, 0x33b2: 0x000a, 0x33b3: 0x000a, 0x33b4: 0x000a, 0x33b5: 0x000a,
+       0x33b6: 0x000a, 0x33b7: 0x000a, 0x33b8: 0x000a, 0x33b9: 0x000a, 0x33ba: 0x000a, 0x33bb: 0x000a,
+       0x33bc: 0x000a, 0x33bd: 0x000a, 0x33be: 0x000a, 0x33bf: 0x000a,
+       // Block 0xcf, offset 0x33c0
+       0x33c0: 0x000a, 0x33c1: 0x000a, 0x33c2: 0x000a, 0x33c3: 0x000a, 0x33c4: 0x000a, 0x33c5: 0x000a,
+       0x33c6: 0x000a, 0x33c7: 0x000a, 0x33c8: 0x000a, 0x33c9: 0x000a, 0x33ca: 0x000a, 0x33cb: 0x000a,
+       0x33cc: 0x000a, 0x33cd: 0x000a, 0x33ce: 0x000a, 0x33cf: 0x000a, 0x33d0: 0x000a, 0x33d1: 0x000a,
+       0x33d2: 0x000a, 0x33d3: 0x000a,
+       0x33e0: 0x000a, 0x33e1: 0x000a, 0x33e2: 0x000a, 0x33e3: 0x000a,
+       0x33e4: 0x000a, 0x33e5: 0x000a, 0x33e6: 0x000a, 0x33e7: 0x000a, 0x33e8: 0x000a, 0x33e9: 0x000a,
+       0x33ea: 0x000a, 0x33eb: 0x000a, 0x33ec: 0x000a, 0x33ed: 0x000a, 0x33ee: 0x000a,
+       0x33f1: 0x000a, 0x33f2: 0x000a, 0x33f3: 0x000a, 0x33f4: 0x000a, 0x33f5: 0x000a,
+       0x33f6: 0x000a, 0x33f7: 0x000a, 0x33f8: 0x000a, 0x33f9: 0x000a, 0x33fa: 0x000a, 0x33fb: 0x000a,
+       0x33fc: 0x000a, 0x33fd: 0x000a, 0x33fe: 0x000a, 0x33ff: 0x000a,
+       // Block 0xd0, offset 0x3400
+       0x3401: 0x000a, 0x3402: 0x000a, 0x3403: 0x000a, 0x3404: 0x000a, 0x3405: 0x000a,
+       0x3406: 0x000a, 0x3407: 0x000a, 0x3408: 0x000a, 0x3409: 0x000a, 0x340a: 0x000a, 0x340b: 0x000a,
+       0x340c: 0x000a, 0x340d: 0x000a, 0x340e: 0x000a, 0x340f: 0x000a, 0x3411: 0x000a,
+       0x3412: 0x000a, 0x3413: 0x000a, 0x3414: 0x000a, 0x3415: 0x000a, 0x3416: 0x000a, 0x3417: 0x000a,
+       0x3418: 0x000a, 0x3419: 0x000a, 0x341a: 0x000a, 0x341b: 0x000a, 0x341c: 0x000a, 0x341d: 0x000a,
+       0x341e: 0x000a, 0x341f: 0x000a, 0x3420: 0x000a, 0x3421: 0x000a, 0x3422: 0x000a, 0x3423: 0x000a,
+       0x3424: 0x000a, 0x3425: 0x000a, 0x3426: 0x000a, 0x3427: 0x000a, 0x3428: 0x000a, 0x3429: 0x000a,
+       0x342a: 0x000a, 0x342b: 0x000a, 0x342c: 0x000a, 0x342d: 0x000a, 0x342e: 0x000a, 0x342f: 0x000a,
+       0x3430: 0x000a, 0x3431: 0x000a, 0x3432: 0x000a, 0x3433: 0x000a, 0x3434: 0x000a, 0x3435: 0x000a,
+       // Block 0xd1, offset 0x3440
+       0x3440: 0x0002, 0x3441: 0x0002, 0x3442: 0x0002, 0x3443: 0x0002, 0x3444: 0x0002, 0x3445: 0x0002,
+       0x3446: 0x0002, 0x3447: 0x0002, 0x3448: 0x0002, 0x3449: 0x0002, 0x344a: 0x0002, 0x344b: 0x000a,
+       0x344c: 0x000a,
+       // Block 0xd2, offset 0x3480
+       0x34aa: 0x000a, 0x34ab: 0x000a,
+       // Block 0xd3, offset 0x34c0
+       0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a,
+       0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a,
+       0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a,
+       0x34d2: 0x000a,
+       0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a,
+       0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a,
+       0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a,
+       0x34f0: 0x000a, 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a,
+       0x34f6: 0x000a,
+       // Block 0xd4, offset 0x3500
+       0x3500: 0x000a, 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a,
+       0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a,
+       0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3510: 0x000a, 0x3511: 0x000a,
+       0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a,
+       // Block 0xd5, offset 0x3540
+       0x3540: 0x000a, 0x3541: 0x000a, 0x3542: 0x000a, 0x3543: 0x000a, 0x3544: 0x000a, 0x3545: 0x000a,
+       0x3546: 0x000a, 0x3547: 0x000a, 0x3548: 0x000a, 0x3549: 0x000a, 0x354a: 0x000a, 0x354b: 0x000a,
+       0x3550: 0x000a, 0x3551: 0x000a,
+       0x3552: 0x000a, 0x3553: 0x000a, 0x3554: 0x000a, 0x3555: 0x000a, 0x3556: 0x000a, 0x3557: 0x000a,
+       0x3558: 0x000a, 0x3559: 0x000a, 0x355a: 0x000a, 0x355b: 0x000a, 0x355c: 0x000a, 0x355d: 0x000a,
+       0x355e: 0x000a, 0x355f: 0x000a, 0x3560: 0x000a, 0x3561: 0x000a, 0x3562: 0x000a, 0x3563: 0x000a,
+       0x3564: 0x000a, 0x3565: 0x000a, 0x3566: 0x000a, 0x3567: 0x000a, 0x3568: 0x000a, 0x3569: 0x000a,
+       0x356a: 0x000a, 0x356b: 0x000a, 0x356c: 0x000a, 0x356d: 0x000a, 0x356e: 0x000a, 0x356f: 0x000a,
+       0x3570: 0x000a, 0x3571: 0x000a, 0x3572: 0x000a, 0x3573: 0x000a, 0x3574: 0x000a, 0x3575: 0x000a,
+       0x3576: 0x000a, 0x3577: 0x000a, 0x3578: 0x000a, 0x3579: 0x000a, 0x357a: 0x000a, 0x357b: 0x000a,
+       0x357c: 0x000a, 0x357d: 0x000a, 0x357e: 0x000a, 0x357f: 0x000a,
+       // Block 0xd6, offset 0x3580
+       0x3580: 0x000a, 0x3581: 0x000a, 0x3582: 0x000a, 0x3583: 0x000a, 0x3584: 0x000a, 0x3585: 0x000a,
+       0x3586: 0x000a, 0x3587: 0x000a,
+       0x3590: 0x000a, 0x3591: 0x000a,
+       0x3592: 0x000a, 0x3593: 0x000a, 0x3594: 0x000a, 0x3595: 0x000a, 0x3596: 0x000a, 0x3597: 0x000a,
+       0x3598: 0x000a, 0x3599: 0x000a,
+       0x35a0: 0x000a, 0x35a1: 0x000a, 0x35a2: 0x000a, 0x35a3: 0x000a,
+       0x35a4: 0x000a, 0x35a5: 0x000a, 0x35a6: 0x000a, 0x35a7: 0x000a, 0x35a8: 0x000a, 0x35a9: 0x000a,
+       0x35aa: 0x000a, 0x35ab: 0x000a, 0x35ac: 0x000a, 0x35ad: 0x000a, 0x35ae: 0x000a, 0x35af: 0x000a,
+       0x35b0: 0x000a, 0x35b1: 0x000a, 0x35b2: 0x000a, 0x35b3: 0x000a, 0x35b4: 0x000a, 0x35b5: 0x000a,
+       0x35b6: 0x000a, 0x35b7: 0x000a, 0x35b8: 0x000a, 0x35b9: 0x000a, 0x35ba: 0x000a, 0x35bb: 0x000a,
+       0x35bc: 0x000a, 0x35bd: 0x000a, 0x35be: 0x000a, 0x35bf: 0x000a,
+       // Block 0xd7, offset 0x35c0
+       0x35c0: 0x000a, 0x35c1: 0x000a, 0x35c2: 0x000a, 0x35c3: 0x000a, 0x35c4: 0x000a, 0x35c5: 0x000a,
+       0x35c6: 0x000a, 0x35c7: 0x000a,
+       0x35d0: 0x000a, 0x35d1: 0x000a,
+       0x35d2: 0x000a, 0x35d3: 0x000a, 0x35d4: 0x000a, 0x35d5: 0x000a, 0x35d6: 0x000a, 0x35d7: 0x000a,
+       0x35d8: 0x000a, 0x35d9: 0x000a, 0x35da: 0x000a, 0x35db: 0x000a, 0x35dc: 0x000a, 0x35dd: 0x000a,
+       0x35de: 0x000a, 0x35df: 0x000a, 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a,
+       0x35e4: 0x000a, 0x35e5: 0x000a, 0x35e6: 0x000a, 0x35e7: 0x000a, 0x35e8: 0x000a, 0x35e9: 0x000a,
+       0x35ea: 0x000a, 0x35eb: 0x000a, 0x35ec: 0x000a, 0x35ed: 0x000a,
+       // Block 0xd8, offset 0x3600
+       0x3610: 0x000a, 0x3611: 0x000a,
+       0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a, 0x3615: 0x000a, 0x3616: 0x000a, 0x3617: 0x000a,
+       0x3618: 0x000a, 0x3619: 0x000a, 0x361a: 0x000a, 0x361b: 0x000a, 0x361c: 0x000a, 0x361d: 0x000a,
+       0x361e: 0x000a, 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a,
+       0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a,
+       0x3630: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a,
+       0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, 0x3639: 0x000a, 0x363a: 0x000a, 0x363b: 0x000a,
+       0x363c: 0x000a, 0x363d: 0x000a, 0x363e: 0x000a,
+       // Block 0xd9, offset 0x3640
+       0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a,
+       0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a,
+       0x3650: 0x000a, 0x3651: 0x000a,
+       0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, 0x3655: 0x000a, 0x3656: 0x000a, 0x3657: 0x000a,
+       0x3658: 0x000a, 0x3659: 0x000a, 0x365a: 0x000a, 0x365b: 0x000a, 0x365c: 0x000a, 0x365d: 0x000a,
+       0x365e: 0x000a,
+       // Block 0xda, offset 0x3680
+       0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a,
+       0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a,
+       0x368c: 0x000a, 0x368d: 0x000a, 0x368e: 0x000a, 0x368f: 0x000a, 0x3690: 0x000a, 0x3691: 0x000a,
+       // Block 0xdb, offset 0x36c0
+       0x36fe: 0x000b, 0x36ff: 0x000b,
+       // Block 0xdc, offset 0x3700
+       0x3700: 0x000b, 0x3701: 0x000b, 0x3702: 0x000b, 0x3703: 0x000b, 0x3704: 0x000b, 0x3705: 0x000b,
+       0x3706: 0x000b, 0x3707: 0x000b, 0x3708: 0x000b, 0x3709: 0x000b, 0x370a: 0x000b, 0x370b: 0x000b,
+       0x370c: 0x000b, 0x370d: 0x000b, 0x370e: 0x000b, 0x370f: 0x000b, 0x3710: 0x000b, 0x3711: 0x000b,
+       0x3712: 0x000b, 0x3713: 0x000b, 0x3714: 0x000b, 0x3715: 0x000b, 0x3716: 0x000b, 0x3717: 0x000b,
+       0x3718: 0x000b, 0x3719: 0x000b, 0x371a: 0x000b, 0x371b: 0x000b, 0x371c: 0x000b, 0x371d: 0x000b,
+       0x371e: 0x000b, 0x371f: 0x000b, 0x3720: 0x000b, 0x3721: 0x000b, 0x3722: 0x000b, 0x3723: 0x000b,
+       0x3724: 0x000b, 0x3725: 0x000b, 0x3726: 0x000b, 0x3727: 0x000b, 0x3728: 0x000b, 0x3729: 0x000b,
+       0x372a: 0x000b, 0x372b: 0x000b, 0x372c: 0x000b, 0x372d: 0x000b, 0x372e: 0x000b, 0x372f: 0x000b,
+       0x3730: 0x000b, 0x3731: 0x000b, 0x3732: 0x000b, 0x3733: 0x000b, 0x3734: 0x000b, 0x3735: 0x000b,
+       0x3736: 0x000b, 0x3737: 0x000b, 0x3738: 0x000b, 0x3739: 0x000b, 0x373a: 0x000b, 0x373b: 0x000b,
+       0x373c: 0x000b, 0x373d: 0x000b, 0x373e: 0x000b, 0x373f: 0x000b,
+       // Block 0xdd, offset 0x3740
+       0x3740: 0x000c, 0x3741: 0x000c, 0x3742: 0x000c, 0x3743: 0x000c, 0x3744: 0x000c, 0x3745: 0x000c,
+       0x3746: 0x000c, 0x3747: 0x000c, 0x3748: 0x000c, 0x3749: 0x000c, 0x374a: 0x000c, 0x374b: 0x000c,
+       0x374c: 0x000c, 0x374d: 0x000c, 0x374e: 0x000c, 0x374f: 0x000c, 0x3750: 0x000c, 0x3751: 0x000c,
+       0x3752: 0x000c, 0x3753: 0x000c, 0x3754: 0x000c, 0x3755: 0x000c, 0x3756: 0x000c, 0x3757: 0x000c,
+       0x3758: 0x000c, 0x3759: 0x000c, 0x375a: 0x000c, 0x375b: 0x000c, 0x375c: 0x000c, 0x375d: 0x000c,
+       0x375e: 0x000c, 0x375f: 0x000c, 0x3760: 0x000c, 0x3761: 0x000c, 0x3762: 0x000c, 0x3763: 0x000c,
+       0x3764: 0x000c, 0x3765: 0x000c, 0x3766: 0x000c, 0x3767: 0x000c, 0x3768: 0x000c, 0x3769: 0x000c,
+       0x376a: 0x000c, 0x376b: 0x000c, 0x376c: 0x000c, 0x376d: 0x000c, 0x376e: 0x000c, 0x376f: 0x000c,
+       0x3770: 0x000b, 0x3771: 0x000b, 0x3772: 0x000b, 0x3773: 0x000b, 0x3774: 0x000b, 0x3775: 0x000b,
+       0x3776: 0x000b, 0x3777: 0x000b, 0x3778: 0x000b, 0x3779: 0x000b, 0x377a: 0x000b, 0x377b: 0x000b,
+       0x377c: 0x000b, 0x377d: 0x000b, 0x377e: 0x000b, 0x377f: 0x000b,
+}
+
+// bidiIndex: 24 blocks, 1536 entries, 1536 bytes
+// Block 0 is the zero block.
+var bidiIndex = [1536]uint8{
+       // Block 0x0, offset 0x0
+       // Block 0x1, offset 0x40
+       // Block 0x2, offset 0x80
+       // Block 0x3, offset 0xc0
+       0xc2: 0x01, 0xc3: 0x02,
+       0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08,
+       0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b,
+       0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13,
+       0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06,
+       0xea: 0x07, 0xef: 0x08,
+       0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15,
+       // Block 0x4, offset 0x100
+       0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b,
+       0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22,
+       0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28,
+       0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30,
+       // Block 0x5, offset 0x140
+       0x140: 0x31, 0x141: 0x32, 0x142: 0x33,
+       0x14d: 0x34, 0x14e: 0x35,
+       0x150: 0x36,
+       0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b,
+       0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40,
+       0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47,
+       0x170: 0x48, 0x173: 0x49, 0x177: 0x4a,
+       0x17e: 0x4b, 0x17f: 0x4c,
+       // Block 0x6, offset 0x180
+       0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54,
+       0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x59,
+       0x190: 0x5a, 0x191: 0x5b, 0x192: 0x5c, 0x193: 0x5d, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54,
+       0x198: 0x54, 0x199: 0x54, 0x19a: 0x5e, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5f, 0x19e: 0x54, 0x19f: 0x60,
+       0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x61, 0x1a7: 0x62,
+       0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x63, 0x1ae: 0x64, 0x1af: 0x65,
+       0x1b3: 0x66, 0x1b5: 0x67, 0x1b7: 0x68,
+       0x1b8: 0x69, 0x1b9: 0x6a, 0x1ba: 0x6b, 0x1bb: 0x6c, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6d,
+       // Block 0x7, offset 0x1c0
+       0x1c0: 0x6e, 0x1c2: 0x6f, 0x1c3: 0x70, 0x1c7: 0x71,
+       0x1c8: 0x72, 0x1c9: 0x73, 0x1ca: 0x74, 0x1cb: 0x75, 0x1cd: 0x76, 0x1cf: 0x77,
+       // Block 0x8, offset 0x200
+       0x237: 0x54,
+       // Block 0x9, offset 0x240
+       0x252: 0x78, 0x253: 0x79,
+       0x258: 0x7a, 0x259: 0x7b, 0x25a: 0x7c, 0x25b: 0x7d, 0x25c: 0x7e, 0x25e: 0x7f,
+       0x260: 0x80, 0x261: 0x81, 0x263: 0x82, 0x264: 0x83, 0x265: 0x84, 0x266: 0x85, 0x267: 0x86,
+       0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26f: 0x8b,
+       // Block 0xa, offset 0x280
+       0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x0e, 0x2af: 0x0e,
+       0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8e, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8f,
+       0x2b8: 0x90, 0x2b9: 0x91, 0x2ba: 0x0e, 0x2bb: 0x92, 0x2bc: 0x93, 0x2bd: 0x94, 0x2bf: 0x95,
+       // Block 0xb, offset 0x2c0
+       0x2c4: 0x96, 0x2c5: 0x54, 0x2c6: 0x97, 0x2c7: 0x98,
+       0x2cb: 0x99, 0x2cd: 0x9a,
+       0x2e0: 0x9b, 0x2e1: 0x9b, 0x2e2: 0x9b, 0x2e3: 0x9b, 0x2e4: 0x9c, 0x2e5: 0x9b, 0x2e6: 0x9b, 0x2e7: 0x9b,
+       0x2e8: 0x9d, 0x2e9: 0x9b, 0x2ea: 0x9b, 0x2eb: 0x9e, 0x2ec: 0x9f, 0x2ed: 0x9b, 0x2ee: 0x9b, 0x2ef: 0x9b,
+       0x2f0: 0x9b, 0x2f1: 0x9b, 0x2f2: 0x9b, 0x2f3: 0x9b, 0x2f4: 0x9b, 0x2f5: 0x9b, 0x2f6: 0x9b, 0x2f7: 0x9b,
+       0x2f8: 0x9b, 0x2f9: 0xa0, 0x2fa: 0x9b, 0x2fb: 0x9b, 0x2fc: 0x9b, 0x2fd: 0x9b, 0x2fe: 0x9b, 0x2ff: 0x9b,
+       // Block 0xc, offset 0x300
+       0x300: 0xa1, 0x301: 0xa2, 0x302: 0xa3, 0x304: 0xa4, 0x305: 0xa5, 0x306: 0xa6, 0x307: 0xa7,
+       0x308: 0xa8, 0x30b: 0xa9, 0x30c: 0xaa, 0x30d: 0xab,
+       0x310: 0xac, 0x311: 0xad, 0x312: 0xae, 0x313: 0xaf, 0x316: 0xb0, 0x317: 0xb1,
+       0x318: 0xb2, 0x319: 0xb3, 0x31a: 0xb4, 0x31c: 0xb5,
+       0x330: 0xb6, 0x332: 0xb7,
+       // Block 0xd, offset 0x340
+       0x36b: 0xb8, 0x36c: 0xb9,
+       0x37e: 0xba,
+       // Block 0xe, offset 0x380
+       0x3b2: 0xbb,
+       // Block 0xf, offset 0x3c0
+       0x3c5: 0xbc, 0x3c6: 0xbd,
+       0x3c8: 0x54, 0x3c9: 0xbe, 0x3cc: 0x54, 0x3cd: 0xbf,
+       0x3db: 0xc0, 0x3dc: 0xc1, 0x3dd: 0xc2, 0x3de: 0xc3, 0x3df: 0xc4,
+       0x3e8: 0xc5, 0x3e9: 0xc6, 0x3ea: 0xc7,
+       // Block 0x10, offset 0x400
+       0x400: 0xc8,
+       0x420: 0x9b, 0x421: 0x9b, 0x422: 0x9b, 0x423: 0xc9, 0x424: 0x9b, 0x425: 0xca, 0x426: 0x9b, 0x427: 0x9b,
+       0x428: 0x9b, 0x429: 0x9b, 0x42a: 0x9b, 0x42b: 0x9b, 0x42c: 0x9b, 0x42d: 0x9b, 0x42e: 0x9b, 0x42f: 0x9b,
+       0x430: 0x9b, 0x431: 0x9b, 0x432: 0x9b, 0x433: 0x9b, 0x434: 0x9b, 0x435: 0x9b, 0x436: 0x9b, 0x437: 0x9b,
+       0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcb, 0x43c: 0x9b, 0x43d: 0x9b, 0x43e: 0x9b, 0x43f: 0x9b,
+       // Block 0x11, offset 0x440
+       0x440: 0xcc, 0x441: 0x54, 0x442: 0xcd, 0x443: 0xce, 0x444: 0xcf, 0x445: 0xd0,
+       0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54,
+       0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54,
+       0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd1, 0x45c: 0x54, 0x45d: 0x6c, 0x45e: 0x54, 0x45f: 0xd2,
+       0x460: 0xd3, 0x461: 0xd4, 0x462: 0xd5, 0x464: 0xd6, 0x465: 0xd7, 0x466: 0xd8, 0x467: 0x36,
+       0x47f: 0xd9,
+       // Block 0x12, offset 0x480
+       0x4bf: 0xd9,
+       // Block 0x13, offset 0x4c0
+       0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b,
+       0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f,
+       0x4ef: 0x10,
+       0x4ff: 0x10,
+       // Block 0x14, offset 0x500
+       0x50f: 0x10,
+       0x51f: 0x10,
+       0x52f: 0x10,
+       0x53f: 0x10,
+       // Block 0x15, offset 0x540
+       0x540: 0xda, 0x541: 0xda, 0x542: 0xda, 0x543: 0xda, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xdb,
+       0x548: 0xda, 0x549: 0xda, 0x54a: 0xda, 0x54b: 0xda, 0x54c: 0xda, 0x54d: 0xda, 0x54e: 0xda, 0x54f: 0xda,
+       0x550: 0xda, 0x551: 0xda, 0x552: 0xda, 0x553: 0xda, 0x554: 0xda, 0x555: 0xda, 0x556: 0xda, 0x557: 0xda,
+       0x558: 0xda, 0x559: 0xda, 0x55a: 0xda, 0x55b: 0xda, 0x55c: 0xda, 0x55d: 0xda, 0x55e: 0xda, 0x55f: 0xda,
+       0x560: 0xda, 0x561: 0xda, 0x562: 0xda, 0x563: 0xda, 0x564: 0xda, 0x565: 0xda, 0x566: 0xda, 0x567: 0xda,
+       0x568: 0xda, 0x569: 0xda, 0x56a: 0xda, 0x56b: 0xda, 0x56c: 0xda, 0x56d: 0xda, 0x56e: 0xda, 0x56f: 0xda,
+       0x570: 0xda, 0x571: 0xda, 0x572: 0xda, 0x573: 0xda, 0x574: 0xda, 0x575: 0xda, 0x576: 0xda, 0x577: 0xda,
+       0x578: 0xda, 0x579: 0xda, 0x57a: 0xda, 0x57b: 0xda, 0x57c: 0xda, 0x57d: 0xda, 0x57e: 0xda, 0x57f: 0xda,
+       // Block 0x16, offset 0x580
+       0x58f: 0x10,
+       0x59f: 0x10,
+       0x5a0: 0x13,
+       0x5af: 0x10,
+       0x5bf: 0x10,
+       // Block 0x17, offset 0x5c0
+       0x5cf: 0x10,
+}
+
+// Total table size 15800 bytes (15KiB); checksum: F50EF68C
diff --git a/vendor/golang.org/x/text/unicode/bidi/trieval.go b/vendor/golang.org/x/text/unicode/bidi/trieval.go
new file mode 100644 (file)
index 0000000..4c459c4
--- /dev/null
@@ -0,0 +1,60 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package bidi
+
+// Class is the Unicode BiDi class. Each rune has a single class.
+type Class uint
+
+const (
+       L       Class = iota // LeftToRight
+       R                    // RightToLeft
+       EN                   // EuropeanNumber
+       ES                   // EuropeanSeparator
+       ET                   // EuropeanTerminator
+       AN                   // ArabicNumber
+       CS                   // CommonSeparator
+       B                    // ParagraphSeparator
+       S                    // SegmentSeparator
+       WS                   // WhiteSpace
+       ON                   // OtherNeutral
+       BN                   // BoundaryNeutral
+       NSM                  // NonspacingMark
+       AL                   // ArabicLetter
+       Control              // Control LRO - PDI
+
+       numClass
+
+       LRO // LeftToRightOverride
+       RLO // RightToLeftOverride
+       LRE // LeftToRightEmbedding
+       RLE // RightToLeftEmbedding
+       PDF // PopDirectionalFormat
+       LRI // LeftToRightIsolate
+       RLI // RightToLeftIsolate
+       FSI // FirstStrongIsolate
+       PDI // PopDirectionalIsolate
+
+       unknownClass = ^Class(0)
+)
+
+var controlToClass = map[rune]Class{
+       0x202D: LRO, // LeftToRightOverride,
+       0x202E: RLO, // RightToLeftOverride,
+       0x202A: LRE, // LeftToRightEmbedding,
+       0x202B: RLE, // RightToLeftEmbedding,
+       0x202C: PDF, // PopDirectionalFormat,
+       0x2066: LRI, // LeftToRightIsolate,
+       0x2067: RLI, // RightToLeftIsolate,
+       0x2068: FSI, // FirstStrongIsolate,
+       0x2069: PDI, // PopDirectionalIsolate,
+}
+
+// A trie entry has the following bits:
+// 7..5  XOR mask for brackets
+// 4     1: Bracket open, 0: Bracket close
+// 3..0  Class type
+
+const (
+       openMask     = 0x10
+       xorMaskShift = 5
+)
diff --git a/vendor/golang.org/x/text/unicode/cldr/base.go b/vendor/golang.org/x/text/unicode/cldr/base.go
new file mode 100644 (file)
index 0000000..2382f4d
--- /dev/null
@@ -0,0 +1,100 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cldr
+
+import (
+       "encoding/xml"
+       "regexp"
+       "strconv"
+)
+
+// Elem is implemented by every XML element.
+type Elem interface {
+       setEnclosing(Elem)
+       setName(string)
+       enclosing() Elem
+
+       GetCommon() *Common
+}
+
+type hidden struct {
+       CharData string `xml:",chardata"`
+       Alias    *struct {
+               Common
+               Source string `xml:"source,attr"`
+               Path   string `xml:"path,attr"`
+       } `xml:"alias"`
+       Def *struct {
+               Common
+               Choice string `xml:"choice,attr,omitempty"`
+               Type   string `xml:"type,attr,omitempty"`
+       } `xml:"default"`
+}
+
+// Common holds several of the most common attributes and sub elements
+// of an XML element.
+type Common struct {
+       XMLName         xml.Name
+       name            string
+       enclElem        Elem
+       Type            string `xml:"type,attr,omitempty"`
+       Reference       string `xml:"reference,attr,omitempty"`
+       Alt             string `xml:"alt,attr,omitempty"`
+       ValidSubLocales string `xml:"validSubLocales,attr,omitempty"`
+       Draft           string `xml:"draft,attr,omitempty"`
+       hidden
+}
+
+// Default returns the default type to select from the enclosed list
+// or "" if no default value is specified.
+func (e *Common) Default() string {
+       if e.Def == nil {
+               return ""
+       }
+       if e.Def.Choice != "" {
+               return e.Def.Choice
+       } else if e.Def.Type != "" {
+               // Type is still used by the default element in collation.
+               return e.Def.Type
+       }
+       return ""
+}
+
+// GetCommon returns e. It is provided such that Common implements Elem.
+func (e *Common) GetCommon() *Common {
+       return e
+}
+
+// Data returns the character data accumulated for this element.
+func (e *Common) Data() string {
+       e.CharData = charRe.ReplaceAllStringFunc(e.CharData, replaceUnicode)
+       return e.CharData
+}
+
+func (e *Common) setName(s string) {
+       e.name = s
+}
+
+func (e *Common) enclosing() Elem {
+       return e.enclElem
+}
+
+func (e *Common) setEnclosing(en Elem) {
+       e.enclElem = en
+}
+
+// Escape characters that can be escaped without further escaping the string.
+var charRe = regexp.MustCompile(`&#x[0-9a-fA-F]*;|\\u[0-9a-fA-F]{4}|\\U[0-9a-fA-F]{8}|\\x[0-9a-fA-F]{2}|\\[0-7]{3}|\\[abtnvfr]`)
+
+// replaceUnicode converts hexadecimal Unicode codepoint notations to a one-rune string.
+// It assumes the input string is correctly formatted.
+func replaceUnicode(s string) string {
+       if s[1] == '#' {
+               r, _ := strconv.ParseInt(s[3:len(s)-1], 16, 32)
+               return string(r)
+       }
+       r, _, _, _ := strconv.UnquoteChar(s, 0)
+       return string(r)
+}
diff --git a/vendor/golang.org/x/text/unicode/cldr/cldr.go b/vendor/golang.org/x/text/unicode/cldr/cldr.go
new file mode 100644 (file)
index 0000000..2197f8a
--- /dev/null
@@ -0,0 +1,130 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run makexml.go -output xml.go
+
+// Package cldr provides a parser for LDML and related XML formats.
+// This package is intended to be used by the table generation tools
+// for the various internationalization-related packages.
+// As the XML types are generated from the CLDR DTD, and as the CLDR standard
+// is periodically amended, this package may change considerably over time.
+// This mostly means that data may appear and disappear between versions.
+// That is, old code should keep compiling for newer versions, but data
+// may have moved or changed.
+// CLDR version 22 is the first version supported by this package.
+// Older versions may not work.
+package cldr // import "golang.org/x/text/unicode/cldr"
+
+import (
+       "fmt"
+       "sort"
+)
+
+// CLDR provides access to parsed data of the Unicode Common Locale Data Repository.
+type CLDR struct {
+       parent   map[string][]string
+       locale   map[string]*LDML
+       resolved map[string]*LDML
+       bcp47    *LDMLBCP47
+       supp     *SupplementalData
+}
+
+func makeCLDR() *CLDR {
+       return &CLDR{
+               parent:   make(map[string][]string),
+               locale:   make(map[string]*LDML),
+               resolved: make(map[string]*LDML),
+               bcp47:    &LDMLBCP47{},
+               supp:     &SupplementalData{},
+       }
+}
+
+// BCP47 returns the parsed BCP47 LDML data. If no such data was parsed, nil is returned.
+func (cldr *CLDR) BCP47() *LDMLBCP47 {
+       return nil
+}
+
+// Draft indicates the draft level of an element.
+type Draft int
+
+const (
+       Approved Draft = iota
+       Contributed
+       Provisional
+       Unconfirmed
+)
+
+var drafts = []string{"unconfirmed", "provisional", "contributed", "approved", ""}
+
+// ParseDraft returns the Draft value corresponding to the given string. The
+// empty string corresponds to Approved.
+func ParseDraft(level string) (Draft, error) {
+       if level == "" {
+               return Approved, nil
+       }
+       for i, s := range drafts {
+               if level == s {
+                       return Unconfirmed - Draft(i), nil
+               }
+       }
+       return Approved, fmt.Errorf("cldr: unknown draft level %q", level)
+}
+
+func (d Draft) String() string {
+       return drafts[len(drafts)-1-int(d)]
+}
+
+// SetDraftLevel sets which draft levels to include in the evaluated LDML.
+// Any draft element for which the draft level is higher than lev will be excluded.
+// If multiple draft levels are available for a single element, the one with the
+// lowest draft level will be selected, unless preferDraft is true, in which case
+// the highest draft will be chosen.
+// It is assumed that the underlying LDML is canonicalized.
+func (cldr *CLDR) SetDraftLevel(lev Draft, preferDraft bool) {
+       // TODO: implement
+       cldr.resolved = make(map[string]*LDML)
+}
+
+// RawLDML returns the LDML XML for id in unresolved form.
+// id must be one of the strings returned by Locales.
+func (cldr *CLDR) RawLDML(loc string) *LDML {
+       return cldr.locale[loc]
+}
+
+// LDML returns the fully resolved LDML XML for loc, which must be one of
+// the strings returned by Locales.
+func (cldr *CLDR) LDML(loc string) (*LDML, error) {
+       return cldr.resolve(loc)
+}
+
+// Supplemental returns the parsed supplemental data. If no such data was parsed,
+// nil is returned.
+func (cldr *CLDR) Supplemental() *SupplementalData {
+       return cldr.supp
+}
+
+// Locales returns the locales for which there exist files.
+// Valid sublocales for which there is no file are not included.
+// The root locale is always sorted first.
+func (cldr *CLDR) Locales() []string {
+       loc := []string{"root"}
+       hasRoot := false
+       for l, _ := range cldr.locale {
+               if l == "root" {
+                       hasRoot = true
+                       continue
+               }
+               loc = append(loc, l)
+       }
+       sort.Strings(loc[1:])
+       if !hasRoot {
+               return loc[1:]
+       }
+       return loc
+}
+
+// Get fills in the fields of x based on the XPath path.
+func Get(e Elem, path string) (res Elem, err error) {
+       return walkXPath(e, path)
+}
diff --git a/vendor/golang.org/x/text/unicode/cldr/collate.go b/vendor/golang.org/x/text/unicode/cldr/collate.go
new file mode 100644 (file)
index 0000000..80ee28d
--- /dev/null
@@ -0,0 +1,359 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cldr
+
+import (
+       "bufio"
+       "encoding/xml"
+       "errors"
+       "fmt"
+       "strconv"
+       "strings"
+       "unicode"
+       "unicode/utf8"
+)
+
+// RuleProcessor can be passed to Collator's Process method, which
+// parses the rules and calls the respective method for each rule found.
+type RuleProcessor interface {
+       Reset(anchor string, before int) error
+       Insert(level int, str, context, extend string) error
+       Index(id string)
+}
+
+const (
+       // cldrIndex is a Unicode-reserved sentinel value used to mark the start
+       // of a grouping within an index.
+       // We ignore any rule that starts with this rune.
+       // See http://unicode.org/reports/tr35/#Collation_Elements for details.
+       cldrIndex = "\uFDD0"
+
+       // specialAnchor is the format in which to represent logical reset positions,
+       // such as "first tertiary ignorable".
+       specialAnchor = "<%s/>"
+)
+
+// Process parses the rules for the tailorings of this collation
+// and calls the respective methods of p for each rule found.
+func (c Collation) Process(p RuleProcessor) (err error) {
+       if len(c.Cr) > 0 {
+               if len(c.Cr) > 1 {
+                       return fmt.Errorf("multiple cr elements, want 0 or 1")
+               }
+               return processRules(p, c.Cr[0].Data())
+       }
+       if c.Rules.Any != nil {
+               return c.processXML(p)
+       }
+       return errors.New("no tailoring data")
+}
+
+// processRules parses rules in the Collation Rule Syntax defined in
+// http://www.unicode.org/reports/tr35/tr35-collation.html#Collation_Tailorings.
+func processRules(p RuleProcessor, s string) (err error) {
+       chk := func(s string, e error) string {
+               if err == nil {
+                       err = e
+               }
+               return s
+       }
+       i := 0 // Save the line number for use after the loop.
+       scanner := bufio.NewScanner(strings.NewReader(s))
+       for ; scanner.Scan() && err == nil; i++ {
+               for s := skipSpace(scanner.Text()); s != "" && s[0] != '#'; s = skipSpace(s) {
+                       level := 5
+                       var ch byte
+                       switch ch, s = s[0], s[1:]; ch {
+                       case '&': // followed by <anchor> or '[' <key> ']'
+                               if s = skipSpace(s); consume(&s, '[') {
+                                       s = chk(parseSpecialAnchor(p, s))
+                               } else {
+                                       s = chk(parseAnchor(p, 0, s))
+                               }
+                       case '<': // sort relation '<'{1,4}, optionally followed by '*'.
+                               for level = 1; consume(&s, '<'); level++ {
+                               }
+                               if level > 4 {
+                                       err = fmt.Errorf("level %d > 4", level)
+                               }
+                               fallthrough
+                       case '=': // identity relation, optionally followed by *.
+                               if consume(&s, '*') {
+                                       s = chk(parseSequence(p, level, s))
+                               } else {
+                                       s = chk(parseOrder(p, level, s))
+                               }
+                       default:
+                               chk("", fmt.Errorf("illegal operator %q", ch))
+                               break
+                       }
+               }
+       }
+       if chk("", scanner.Err()); err != nil {
+               return fmt.Errorf("%d: %v", i, err)
+       }
+       return nil
+}
+
+// parseSpecialAnchor parses the anchor syntax which is either of the form
+//    ['before' <level>] <anchor>
+// or
+//    [<label>]
+// The starting should already be consumed.
+func parseSpecialAnchor(p RuleProcessor, s string) (tail string, err error) {
+       i := strings.IndexByte(s, ']')
+       if i == -1 {
+               return "", errors.New("unmatched bracket")
+       }
+       a := strings.TrimSpace(s[:i])
+       s = s[i+1:]
+       if strings.HasPrefix(a, "before ") {
+               l, err := strconv.ParseUint(skipSpace(a[len("before "):]), 10, 3)
+               if err != nil {
+                       return s, err
+               }
+               return parseAnchor(p, int(l), s)
+       }
+       return s, p.Reset(fmt.Sprintf(specialAnchor, a), 0)
+}
+
+func parseAnchor(p RuleProcessor, level int, s string) (tail string, err error) {
+       anchor, s, err := scanString(s)
+       if err != nil {
+               return s, err
+       }
+       return s, p.Reset(anchor, level)
+}
+
+func parseOrder(p RuleProcessor, level int, s string) (tail string, err error) {
+       var value, context, extend string
+       if value, s, err = scanString(s); err != nil {
+               return s, err
+       }
+       if strings.HasPrefix(value, cldrIndex) {
+               p.Index(value[len(cldrIndex):])
+               return
+       }
+       if consume(&s, '|') {
+               if context, s, err = scanString(s); err != nil {
+                       return s, errors.New("missing string after context")
+               }
+       }
+       if consume(&s, '/') {
+               if extend, s, err = scanString(s); err != nil {
+                       return s, errors.New("missing string after extension")
+               }
+       }
+       return s, p.Insert(level, value, context, extend)
+}
+
+// scanString scans a single input string.
+func scanString(s string) (str, tail string, err error) {
+       if s = skipSpace(s); s == "" {
+               return s, s, errors.New("missing string")
+       }
+       buf := [16]byte{} // small but enough to hold most cases.
+       value := buf[:0]
+       for s != "" {
+               if consume(&s, '\'') {
+                       i := strings.IndexByte(s, '\'')
+                       if i == -1 {
+                               return "", "", errors.New(`unmatched single quote`)
+                       }
+                       if i == 0 {
+                               value = append(value, '\'')
+                       } else {
+                               value = append(value, s[:i]...)
+                       }
+                       s = s[i+1:]
+                       continue
+               }
+               r, sz := utf8.DecodeRuneInString(s)
+               if unicode.IsSpace(r) || strings.ContainsRune("&<=#", r) {
+                       break
+               }
+               value = append(value, s[:sz]...)
+               s = s[sz:]
+       }
+       return string(value), skipSpace(s), nil
+}
+
+func parseSequence(p RuleProcessor, level int, s string) (tail string, err error) {
+       if s = skipSpace(s); s == "" {
+               return s, errors.New("empty sequence")
+       }
+       last := rune(0)
+       for s != "" {
+               r, sz := utf8.DecodeRuneInString(s)
+               s = s[sz:]
+
+               if r == '-' {
+                       // We have a range. The first element was already written.
+                       if last == 0 {
+                               return s, errors.New("range without starter value")
+                       }
+                       r, sz = utf8.DecodeRuneInString(s)
+                       s = s[sz:]
+                       if r == utf8.RuneError || r < last {
+                               return s, fmt.Errorf("invalid range %q-%q", last, r)
+                       }
+                       for i := last + 1; i <= r; i++ {
+                               if err := p.Insert(level, string(i), "", ""); err != nil {
+                                       return s, err
+                               }
+                       }
+                       last = 0
+                       continue
+               }
+
+               if unicode.IsSpace(r) || unicode.IsPunct(r) {
+                       break
+               }
+
+               // normal case
+               if err := p.Insert(level, string(r), "", ""); err != nil {
+                       return s, err
+               }
+               last = r
+       }
+       return s, nil
+}
+
+func skipSpace(s string) string {
+       return strings.TrimLeftFunc(s, unicode.IsSpace)
+}
+
+// consumes returns whether the next byte is ch. If so, it gobbles it by
+// updating s.
+func consume(s *string, ch byte) (ok bool) {
+       if *s == "" || (*s)[0] != ch {
+               return false
+       }
+       *s = (*s)[1:]
+       return true
+}
+
+// The following code parses Collation rules of CLDR version 24 and before.
+
+var lmap = map[byte]int{
+       'p': 1,
+       's': 2,
+       't': 3,
+       'i': 5,
+}
+
+type rulesElem struct {
+       Rules struct {
+               Common
+               Any []*struct {
+                       XMLName xml.Name
+                       rule
+               } `xml:",any"`
+       } `xml:"rules"`
+}
+
+type rule struct {
+       Value  string `xml:",chardata"`
+       Before string `xml:"before,attr"`
+       Any    []*struct {
+               XMLName xml.Name
+               rule
+       } `xml:",any"`
+}
+
+var emptyValueError = errors.New("cldr: empty rule value")
+
+func (r *rule) value() (string, error) {
+       // Convert hexadecimal Unicode codepoint notation to a string.
+       s := charRe.ReplaceAllStringFunc(r.Value, replaceUnicode)
+       r.Value = s
+       if s == "" {
+               if len(r.Any) != 1 {
+                       return "", emptyValueError
+               }
+               r.Value = fmt.Sprintf(specialAnchor, r.Any[0].XMLName.Local)
+               r.Any = nil
+       } else if len(r.Any) != 0 {
+               return "", fmt.Errorf("cldr: XML elements found in collation rule: %v", r.Any)
+       }
+       return r.Value, nil
+}
+
+func (r rule) process(p RuleProcessor, name, context, extend string) error {
+       v, err := r.value()
+       if err != nil {
+               return err
+       }
+       switch name {
+       case "p", "s", "t", "i":
+               if strings.HasPrefix(v, cldrIndex) {
+                       p.Index(v[len(cldrIndex):])
+                       return nil
+               }
+               if err := p.Insert(lmap[name[0]], v, context, extend); err != nil {
+                       return err
+               }
+       case "pc", "sc", "tc", "ic":
+               level := lmap[name[0]]
+               for _, s := range v {
+                       if err := p.Insert(level, string(s), context, extend); err != nil {
+                               return err
+                       }
+               }
+       default:
+               return fmt.Errorf("cldr: unsupported tag: %q", name)
+       }
+       return nil
+}
+
+// processXML parses the format of CLDR versions 24 and older.
+func (c Collation) processXML(p RuleProcessor) (err error) {
+       // Collation is generated and defined in xml.go.
+       var v string
+       for _, r := range c.Rules.Any {
+               switch r.XMLName.Local {
+               case "reset":
+                       level := 0
+                       switch r.Before {
+                       case "primary", "1":
+                               level = 1
+                       case "secondary", "2":
+                               level = 2
+                       case "tertiary", "3":
+                               level = 3
+                       case "":
+                       default:
+                               return fmt.Errorf("cldr: unknown level %q", r.Before)
+                       }
+                       v, err = r.value()
+                       if err == nil {
+                               err = p.Reset(v, level)
+                       }
+               case "x":
+                       var context, extend string
+                       for _, r1 := range r.Any {
+                               v, err = r1.value()
+                               switch r1.XMLName.Local {
+                               case "context":
+                                       context = v
+                               case "extend":
+                                       extend = v
+                               }
+                       }
+                       for _, r1 := range r.Any {
+                               if t := r1.XMLName.Local; t == "context" || t == "extend" {
+                                       continue
+                               }
+                               r1.rule.process(p, r1.XMLName.Local, context, extend)
+                       }
+               default:
+                       err = r.rule.process(p, r.XMLName.Local, "", "")
+               }
+               if err != nil {
+                       return err
+               }
+       }
+       return nil
+}
diff --git a/vendor/golang.org/x/text/unicode/cldr/decode.go b/vendor/golang.org/x/text/unicode/cldr/decode.go
new file mode 100644 (file)
index 0000000..e5ee4ae
--- /dev/null
@@ -0,0 +1,171 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cldr
+
+import (
+       "archive/zip"
+       "bytes"
+       "encoding/xml"
+       "fmt"
+       "io"
+       "io/ioutil"
+       "log"
+       "os"
+       "path/filepath"
+       "regexp"
+)
+
+// A Decoder loads an archive of CLDR data.
+type Decoder struct {
+       dirFilter     []string
+       sectionFilter []string
+       loader        Loader
+       cldr          *CLDR
+       curLocale     string
+}
+
+// SetSectionFilter takes a list top-level LDML element names to which
+// evaluation of LDML should be limited.  It automatically calls SetDirFilter.
+func (d *Decoder) SetSectionFilter(filter ...string) {
+       d.sectionFilter = filter
+       // TODO: automatically set dir filter
+}
+
+// SetDirFilter limits the loading of LDML XML files of the specied directories.
+// Note that sections may be split across directories differently for different CLDR versions.
+// For more robust code, use SetSectionFilter.
+func (d *Decoder) SetDirFilter(dir ...string) {
+       d.dirFilter = dir
+}
+
+// A Loader provides access to the files of a CLDR archive.
+type Loader interface {
+       Len() int
+       Path(i int) string
+       Reader(i int) (io.ReadCloser, error)
+}
+
+var fileRe = regexp.MustCompile(".*/(.*)/(.*)\\.xml")
+
+// Decode loads and decodes the files represented by l.
+func (d *Decoder) Decode(l Loader) (cldr *CLDR, err error) {
+       d.cldr = makeCLDR()
+       for i := 0; i < l.Len(); i++ {
+               fname := l.Path(i)
+               if m := fileRe.FindStringSubmatch(fname); m != nil {
+                       if len(d.dirFilter) > 0 && !in(d.dirFilter, m[1]) {
+                               continue
+                       }
+                       var r io.Reader
+                       if r, err = l.Reader(i); err == nil {
+                               err = d.decode(m[1], m[2], r)
+                       }
+                       if err != nil {
+                               return nil, err
+                       }
+               }
+       }
+       d.cldr.finalize(d.sectionFilter)
+       return d.cldr, nil
+}
+
+func (d *Decoder) decode(dir, id string, r io.Reader) error {
+       var v interface{}
+       var l *LDML
+       cldr := d.cldr
+       switch {
+       case dir == "supplemental":
+               v = cldr.supp
+       case dir == "transforms":
+               return nil
+       case dir == "bcp47":
+               v = cldr.bcp47
+       case dir == "validity":
+               return nil
+       default:
+               ok := false
+               if v, ok = cldr.locale[id]; !ok {
+                       l = &LDML{}
+                       v, cldr.locale[id] = l, l
+               }
+       }
+       x := xml.NewDecoder(r)
+       if err := x.Decode(v); err != nil {
+               log.Printf("%s/%s: %v", dir, id, err)
+               return err
+       }
+       if l != nil {
+               if l.Identity == nil {
+                       return fmt.Errorf("%s/%s: missing identity element", dir, id)
+               }
+               // TODO: verify when CLDR bug http://unicode.org/cldr/trac/ticket/8970
+               // is resolved.
+               // path := strings.Split(id, "_")
+               // if lang := l.Identity.Language.Type; lang != path[0] {
+               //      return fmt.Errorf("%s/%s: language was %s; want %s", dir, id, lang, path[0])
+               // }
+       }
+       return nil
+}
+
+type pathLoader []string
+
+func makePathLoader(path string) (pl pathLoader, err error) {
+       err = filepath.Walk(path, func(path string, _ os.FileInfo, err error) error {
+               pl = append(pl, path)
+               return err
+       })
+       return pl, err
+}
+
+func (pl pathLoader) Len() int {
+       return len(pl)
+}
+
+func (pl pathLoader) Path(i int) string {
+       return pl[i]
+}
+
+func (pl pathLoader) Reader(i int) (io.ReadCloser, error) {
+       return os.Open(pl[i])
+}
+
+// DecodePath loads CLDR data from the given path.
+func (d *Decoder) DecodePath(path string) (cldr *CLDR, err error) {
+       loader, err := makePathLoader(path)
+       if err != nil {
+               return nil, err
+       }
+       return d.Decode(loader)
+}
+
+type zipLoader struct {
+       r *zip.Reader
+}
+
+func (zl zipLoader) Len() int {
+       return len(zl.r.File)
+}
+
+func (zl zipLoader) Path(i int) string {
+       return zl.r.File[i].Name
+}
+
+func (zl zipLoader) Reader(i int) (io.ReadCloser, error) {
+       return zl.r.File[i].Open()
+}
+
+// DecodeZip loads CLDR data from the zip archive for which r is the source.
+func (d *Decoder) DecodeZip(r io.Reader) (cldr *CLDR, err error) {
+       buffer, err := ioutil.ReadAll(r)
+       if err != nil {
+               return nil, err
+       }
+       archive, err := zip.NewReader(bytes.NewReader(buffer), int64(len(buffer)))
+       if err != nil {
+               return nil, err
+       }
+       return d.Decode(zipLoader{archive})
+}
diff --git a/vendor/golang.org/x/text/unicode/cldr/makexml.go b/vendor/golang.org/x/text/unicode/cldr/makexml.go
new file mode 100644 (file)
index 0000000..6114d01
--- /dev/null
@@ -0,0 +1,400 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+// This tool generates types for the various XML formats of CLDR.
+package main
+
+import (
+       "archive/zip"
+       "bytes"
+       "encoding/xml"
+       "flag"
+       "fmt"
+       "io"
+       "io/ioutil"
+       "log"
+       "os"
+       "regexp"
+       "strings"
+
+       "golang.org/x/text/internal/gen"
+)
+
+var outputFile = flag.String("output", "xml.go", "output file name")
+
+func main() {
+       flag.Parse()
+
+       r := gen.OpenCLDRCoreZip()
+       buffer, err := ioutil.ReadAll(r)
+       if err != nil {
+               log.Fatal("Could not read zip file")
+       }
+       r.Close()
+       z, err := zip.NewReader(bytes.NewReader(buffer), int64(len(buffer)))
+       if err != nil {
+               log.Fatalf("Could not read zip archive: %v", err)
+       }
+
+       var buf bytes.Buffer
+
+       version := gen.CLDRVersion()
+
+       for _, dtd := range files {
+               for _, f := range z.File {
+                       if strings.HasSuffix(f.Name, dtd.file+".dtd") {
+                               r, err := f.Open()
+                               failOnError(err)
+
+                               b := makeBuilder(&buf, dtd)
+                               b.parseDTD(r)
+                               b.resolve(b.index[dtd.top[0]])
+                               b.write()
+                               if b.version != "" && version != b.version {
+                                       println(f.Name)
+                                       log.Fatalf("main: inconsistent versions: found %s; want %s", b.version, version)
+                               }
+                               break
+                       }
+               }
+       }
+       fmt.Fprintln(&buf, "// Version is the version of CLDR from which the XML definitions are generated.")
+       fmt.Fprintf(&buf, "const Version = %q\n", version)
+
+       gen.WriteGoFile(*outputFile, "cldr", buf.Bytes())
+}
+
+func failOnError(err error) {
+       if err != nil {
+               log.New(os.Stderr, "", log.Lshortfile).Output(2, err.Error())
+               os.Exit(1)
+       }
+}
+
+// configuration data per DTD type
+type dtd struct {
+       file string   // base file name
+       root string   // Go name of the root XML element
+       top  []string // create a different type for this section
+
+       skipElem    []string // hard-coded or deprecated elements
+       skipAttr    []string // attributes to exclude
+       predefined  []string // hard-coded elements exist of the form <name>Elem
+       forceRepeat []string // elements to make slices despite DTD
+}
+
+var files = []dtd{
+       {
+               file: "ldmlBCP47",
+               root: "LDMLBCP47",
+               top:  []string{"ldmlBCP47"},
+               skipElem: []string{
+                       "cldrVersion", // deprecated, not used
+               },
+       },
+       {
+               file: "ldmlSupplemental",
+               root: "SupplementalData",
+               top:  []string{"supplementalData"},
+               skipElem: []string{
+                       "cldrVersion", // deprecated, not used
+               },
+               forceRepeat: []string{
+                       "plurals", // data defined in plurals.xml and ordinals.xml
+               },
+       },
+       {
+               file: "ldml",
+               root: "LDML",
+               top: []string{
+                       "ldml", "collation", "calendar", "timeZoneNames", "localeDisplayNames", "numbers",
+               },
+               skipElem: []string{
+                       "cp",       // not used anywhere
+                       "special",  // not used anywhere
+                       "fallback", // deprecated, not used
+                       "alias",    // in Common
+                       "default",  // in Common
+               },
+               skipAttr: []string{
+                       "hiraganaQuarternary", // typo in DTD, correct version included as well
+               },
+               predefined: []string{"rules"},
+       },
+}
+
+var comments = map[string]string{
+       "ldmlBCP47": `
+// LDMLBCP47 holds information on allowable values for various variables in LDML.
+`,
+       "supplementalData": `
+// SupplementalData holds information relevant for internationalization
+// and proper use of CLDR, but that is not contained in the locale hierarchy.
+`,
+       "ldml": `
+// LDML is the top-level type for locale-specific data.
+`,
+       "collation": `
+// Collation contains rules that specify a certain sort-order,
+// as a tailoring of the root order. 
+// The parsed rules are obtained by passing a RuleProcessor to Collation's
+// Process method.
+`,
+       "calendar": `
+// Calendar specifies the fields used for formatting and parsing dates and times.
+// The month and quarter names are identified numerically, starting at 1.
+// The day (of the week) names are identified with short strings, since there is
+// no universally-accepted numeric designation.
+`,
+       "dates": `
+// Dates contains information regarding the format and parsing of dates and times.
+`,
+       "localeDisplayNames": `
+// LocaleDisplayNames specifies localized display names for for scripts, languages,
+// countries, currencies, and variants.
+`,
+       "numbers": `
+// Numbers supplies information for formatting and parsing numbers and currencies.
+`,
+}
+
+type element struct {
+       name      string // XML element name
+       category  string // elements contained by this element
+       signature string // category + attrKey*
+
+       attr []*attribute // attributes supported by this element.
+       sub  []struct {   // parsed and evaluated sub elements of this element.
+               e      *element
+               repeat bool // true if the element needs to be a slice
+       }
+
+       resolved bool // prevent multiple resolutions of this element.
+}
+
+type attribute struct {
+       name string
+       key  string
+       list []string
+
+       tag string // Go tag
+}
+
+var (
+       reHead  = regexp.MustCompile(` *(\w+) +([\w\-]+)`)
+       reAttr  = regexp.MustCompile(` *(\w+) *(?:(\w+)|\(([\w\- \|]+)\)) *(?:#([A-Z]*) *(?:\"([\.\d+])\")?)? *("[\w\-:]*")?`)
+       reElem  = regexp.MustCompile(`^ *(EMPTY|ANY|\(.*\)[\*\+\?]?) *$`)
+       reToken = regexp.MustCompile(`\w\-`)
+)
+
+// builder is used to read in the DTD files from CLDR and generate Go code
+// to be used with the encoding/xml package.
+type builder struct {
+       w       io.Writer
+       index   map[string]*element
+       elem    []*element
+       info    dtd
+       version string
+}
+
+func makeBuilder(w io.Writer, d dtd) builder {
+       return builder{
+               w:     w,
+               index: make(map[string]*element),
+               elem:  []*element{},
+               info:  d,
+       }
+}
+
+// parseDTD parses a DTD file.
+func (b *builder) parseDTD(r io.Reader) {
+       for d := xml.NewDecoder(r); ; {
+               t, err := d.Token()
+               if t == nil {
+                       break
+               }
+               failOnError(err)
+               dir, ok := t.(xml.Directive)
+               if !ok {
+                       continue
+               }
+               m := reHead.FindSubmatch(dir)
+               dir = dir[len(m[0]):]
+               ename := string(m[2])
+               el, elementFound := b.index[ename]
+               switch string(m[1]) {
+               case "ELEMENT":
+                       if elementFound {
+                               log.Fatal("parseDTD: duplicate entry for element %q", ename)
+                       }
+                       m := reElem.FindSubmatch(dir)
+                       if m == nil {
+                               log.Fatalf("parseDTD: invalid element %q", string(dir))
+                       }
+                       if len(m[0]) != len(dir) {
+                               log.Fatal("parseDTD: invalid element %q", string(dir), len(dir), len(m[0]), string(m[0]))
+                       }
+                       s := string(m[1])
+                       el = &element{
+                               name:     ename,
+                               category: s,
+                       }
+                       b.index[ename] = el
+               case "ATTLIST":
+                       if !elementFound {
+                               log.Fatalf("parseDTD: unknown element %q", ename)
+                       }
+                       s := string(dir)
+                       m := reAttr.FindStringSubmatch(s)
+                       if m == nil {
+                               log.Fatal(fmt.Errorf("parseDTD: invalid attribute %q", string(dir)))
+                       }
+                       if m[4] == "FIXED" {
+                               b.version = m[5]
+                       } else {
+                               switch m[1] {
+                               case "draft", "references", "alt", "validSubLocales", "standard" /* in Common */ :
+                               case "type", "choice":
+                               default:
+                                       el.attr = append(el.attr, &attribute{
+                                               name: m[1],
+                                               key:  s,
+                                               list: reToken.FindAllString(m[3], -1),
+                                       })
+                                       el.signature = fmt.Sprintf("%s=%s+%s", el.signature, m[1], m[2])
+                               }
+                       }
+               }
+       }
+}
+
+var reCat = regexp.MustCompile(`[ ,\|]*(?:(\(|\)|\#?[\w_-]+)([\*\+\?]?))?`)
+
+// resolve takes a parsed element and converts it into structured data
+// that can be used to generate the XML code.
+func (b *builder) resolve(e *element) {
+       if e.resolved {
+               return
+       }
+       b.elem = append(b.elem, e)
+       e.resolved = true
+       s := e.category
+       found := make(map[string]bool)
+       sequenceStart := []int{}
+       for len(s) > 0 {
+               m := reCat.FindStringSubmatch(s)
+               if m == nil {
+                       log.Fatalf("%s: invalid category string %q", e.name, s)
+               }
+               repeat := m[2] == "*" || m[2] == "+" || in(b.info.forceRepeat, m[1])
+               switch m[1] {
+               case "":
+               case "(":
+                       sequenceStart = append(sequenceStart, len(e.sub))
+               case ")":
+                       if len(sequenceStart) == 0 {
+                               log.Fatalf("%s: unmatched closing parenthesis", e.name)
+                       }
+                       for i := sequenceStart[len(sequenceStart)-1]; i < len(e.sub); i++ {
+                               e.sub[i].repeat = e.sub[i].repeat || repeat
+                       }
+                       sequenceStart = sequenceStart[:len(sequenceStart)-1]
+               default:
+                       if in(b.info.skipElem, m[1]) {
+                       } else if sub, ok := b.index[m[1]]; ok {
+                               if !found[sub.name] {
+                                       e.sub = append(e.sub, struct {
+                                               e      *element
+                                               repeat bool
+                                       }{sub, repeat})
+                                       found[sub.name] = true
+                                       b.resolve(sub)
+                               }
+                       } else if m[1] == "#PCDATA" || m[1] == "ANY" {
+                       } else if m[1] != "EMPTY" {
+                               log.Fatalf("resolve:%s: element %q not found", e.name, m[1])
+                       }
+               }
+               s = s[len(m[0]):]
+       }
+}
+
+// return true if s is contained in set.
+func in(set []string, s string) bool {
+       for _, v := range set {
+               if v == s {
+                       return true
+               }
+       }
+       return false
+}
+
+var repl = strings.NewReplacer("-", " ", "_", " ")
+
+// title puts the first character or each character following '_' in title case and
+// removes all occurrences of '_'.
+func title(s string) string {
+       return strings.Replace(strings.Title(repl.Replace(s)), " ", "", -1)
+}
+
+// writeElem generates Go code for a single element, recursively.
+func (b *builder) writeElem(tab int, e *element) {
+       p := func(f string, x ...interface{}) {
+               f = strings.Replace(f, "\n", "\n"+strings.Repeat("\t", tab), -1)
+               fmt.Fprintf(b.w, f, x...)
+       }
+       if len(e.sub) == 0 && len(e.attr) == 0 {
+               p("Common")
+               return
+       }
+       p("struct {")
+       tab++
+       p("\nCommon")
+       for _, attr := range e.attr {
+               if !in(b.info.skipAttr, attr.name) {
+                       p("\n%s string `xml:\"%s,attr\"`", title(attr.name), attr.name)
+               }
+       }
+       for _, sub := range e.sub {
+               if in(b.info.predefined, sub.e.name) {
+                       p("\n%sElem", sub.e.name)
+                       continue
+               }
+               if in(b.info.skipElem, sub.e.name) {
+                       continue
+               }
+               p("\n%s ", title(sub.e.name))
+               if sub.repeat {
+                       p("[]")
+               }
+               p("*")
+               if in(b.info.top, sub.e.name) {
+                       p(title(sub.e.name))
+               } else {
+                       b.writeElem(tab, sub.e)
+               }
+               p(" `xml:\"%s\"`", sub.e.name)
+       }
+       tab--
+       p("\n}")
+}
+
+// write generates the Go XML code.
+func (b *builder) write() {
+       for i, name := range b.info.top {
+               e := b.index[name]
+               if e != nil {
+                       fmt.Fprintf(b.w, comments[name])
+                       name := title(e.name)
+                       if i == 0 {
+                               name = b.info.root
+                       }
+                       fmt.Fprintf(b.w, "type %s ", name)
+                       b.writeElem(0, e)
+                       fmt.Fprint(b.w, "\n")
+               }
+       }
+}
diff --git a/vendor/golang.org/x/text/unicode/cldr/resolve.go b/vendor/golang.org/x/text/unicode/cldr/resolve.go
new file mode 100644 (file)
index 0000000..691b590
--- /dev/null
@@ -0,0 +1,602 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cldr
+
+// This file implements the various inheritance constructs defined by LDML.
+// See http://www.unicode.org/reports/tr35/#Inheritance_and_Validity
+// for more details.
+
+import (
+       "fmt"
+       "log"
+       "reflect"
+       "regexp"
+       "sort"
+       "strings"
+)
+
+// fieldIter iterates over fields in a struct. It includes
+// fields of embedded structs.
+type fieldIter struct {
+       v        reflect.Value
+       index, n []int
+}
+
+func iter(v reflect.Value) fieldIter {
+       if v.Kind() != reflect.Struct {
+               log.Panicf("value %v must be a struct", v)
+       }
+       i := fieldIter{
+               v:     v,
+               index: []int{0},
+               n:     []int{v.NumField()},
+       }
+       i.descent()
+       return i
+}
+
+func (i *fieldIter) descent() {
+       for f := i.field(); f.Anonymous && f.Type.NumField() > 0; f = i.field() {
+               i.index = append(i.index, 0)
+               i.n = append(i.n, f.Type.NumField())
+       }
+}
+
+func (i *fieldIter) done() bool {
+       return len(i.index) == 1 && i.index[0] >= i.n[0]
+}
+
+func skip(f reflect.StructField) bool {
+       return !f.Anonymous && (f.Name[0] < 'A' || f.Name[0] > 'Z')
+}
+
+func (i *fieldIter) next() {
+       for {
+               k := len(i.index) - 1
+               i.index[k]++
+               if i.index[k] < i.n[k] {
+                       if !skip(i.field()) {
+                               break
+                       }
+               } else {
+                       if k == 0 {
+                               return
+                       }
+                       i.index = i.index[:k]
+                       i.n = i.n[:k]
+               }
+       }
+       i.descent()
+}
+
+func (i *fieldIter) value() reflect.Value {
+       return i.v.FieldByIndex(i.index)
+}
+
+func (i *fieldIter) field() reflect.StructField {
+       return i.v.Type().FieldByIndex(i.index)
+}
+
+type visitor func(v reflect.Value) error
+
+var stopDescent = fmt.Errorf("do not recurse")
+
+func (f visitor) visit(x interface{}) error {
+       return f.visitRec(reflect.ValueOf(x))
+}
+
+// visit recursively calls f on all nodes in v.
+func (f visitor) visitRec(v reflect.Value) error {
+       if v.Kind() == reflect.Ptr {
+               if v.IsNil() {
+                       return nil
+               }
+               return f.visitRec(v.Elem())
+       }
+       if err := f(v); err != nil {
+               if err == stopDescent {
+                       return nil
+               }
+               return err
+       }
+       switch v.Kind() {
+       case reflect.Struct:
+               for i := iter(v); !i.done(); i.next() {
+                       if err := f.visitRec(i.value()); err != nil {
+                               return err
+                       }
+               }
+       case reflect.Slice:
+               for i := 0; i < v.Len(); i++ {
+                       if err := f.visitRec(v.Index(i)); err != nil {
+                               return err
+                       }
+               }
+       }
+       return nil
+}
+
+// getPath is used for error reporting purposes only.
+func getPath(e Elem) string {
+       if e == nil {
+               return "<nil>"
+       }
+       if e.enclosing() == nil {
+               return e.GetCommon().name
+       }
+       if e.GetCommon().Type == "" {
+               return fmt.Sprintf("%s.%s", getPath(e.enclosing()), e.GetCommon().name)
+       }
+       return fmt.Sprintf("%s.%s[type=%s]", getPath(e.enclosing()), e.GetCommon().name, e.GetCommon().Type)
+}
+
+// xmlName returns the xml name of the element or attribute
+func xmlName(f reflect.StructField) (name string, attr bool) {
+       tags := strings.Split(f.Tag.Get("xml"), ",")
+       for _, s := range tags {
+               attr = attr || s == "attr"
+       }
+       return tags[0], attr
+}
+
+func findField(v reflect.Value, key string) (reflect.Value, error) {
+       v = reflect.Indirect(v)
+       for i := iter(v); !i.done(); i.next() {
+               if n, _ := xmlName(i.field()); n == key {
+                       return i.value(), nil
+               }
+       }
+       return reflect.Value{}, fmt.Errorf("cldr: no field %q in element %#v", key, v.Interface())
+}
+
+var xpathPart = regexp.MustCompile(`(\pL+)(?:\[@(\pL+)='([\w-]+)'\])?`)
+
+func walkXPath(e Elem, path string) (res Elem, err error) {
+       for _, c := range strings.Split(path, "/") {
+               if c == ".." {
+                       if e = e.enclosing(); e == nil {
+                               panic("path ..")
+                               return nil, fmt.Errorf(`cldr: ".." moves past root in path %q`, path)
+                       }
+                       continue
+               } else if c == "" {
+                       continue
+               }
+               m := xpathPart.FindStringSubmatch(c)
+               if len(m) == 0 || len(m[0]) != len(c) {
+                       return nil, fmt.Errorf("cldr: syntax error in path component %q", c)
+               }
+               v, err := findField(reflect.ValueOf(e), m[1])
+               if err != nil {
+                       return nil, err
+               }
+               switch v.Kind() {
+               case reflect.Slice:
+                       i := 0
+                       if m[2] != "" || v.Len() > 1 {
+                               if m[2] == "" {
+                                       m[2] = "type"
+                                       if m[3] = e.GetCommon().Default(); m[3] == "" {
+                                               return nil, fmt.Errorf("cldr: type selector or default value needed for element %s", m[1])
+                                       }
+                               }
+                               for ; i < v.Len(); i++ {
+                                       vi := v.Index(i)
+                                       key, err := findField(vi.Elem(), m[2])
+                                       if err != nil {
+                                               return nil, err
+                                       }
+                                       key = reflect.Indirect(key)
+                                       if key.Kind() == reflect.String && key.String() == m[3] {
+                                               break
+                                       }
+                               }
+                       }
+                       if i == v.Len() || v.Index(i).IsNil() {
+                               return nil, fmt.Errorf("no %s found with %s==%s", m[1], m[2], m[3])
+                       }
+                       e = v.Index(i).Interface().(Elem)
+               case reflect.Ptr:
+                       if v.IsNil() {
+                               return nil, fmt.Errorf("cldr: element %q not found within element %q", m[1], e.GetCommon().name)
+                       }
+                       var ok bool
+                       if e, ok = v.Interface().(Elem); !ok {
+                               return nil, fmt.Errorf("cldr: %q is not an XML element", m[1])
+                       } else if m[2] != "" || m[3] != "" {
+                               return nil, fmt.Errorf("cldr: no type selector allowed for element %s", m[1])
+                       }
+               default:
+                       return nil, fmt.Errorf("cldr: %q is not an XML element", m[1])
+               }
+       }
+       return e, nil
+}
+
+const absPrefix = "//ldml/"
+
+func (cldr *CLDR) resolveAlias(e Elem, src, path string) (res Elem, err error) {
+       if src != "locale" {
+               if !strings.HasPrefix(path, absPrefix) {
+                       return nil, fmt.Errorf("cldr: expected absolute path, found %q", path)
+               }
+               path = path[len(absPrefix):]
+               if e, err = cldr.resolve(src); err != nil {
+                       return nil, err
+               }
+       }
+       return walkXPath(e, path)
+}
+
+func (cldr *CLDR) resolveAndMergeAlias(e Elem) error {
+       alias := e.GetCommon().Alias
+       if alias == nil {
+               return nil
+       }
+       a, err := cldr.resolveAlias(e, alias.Source, alias.Path)
+       if err != nil {
+               return fmt.Errorf("%v: error evaluating path %q: %v", getPath(e), alias.Path, err)
+       }
+       // Ensure alias node was already evaluated. TODO: avoid double evaluation.
+       err = cldr.resolveAndMergeAlias(a)
+       v := reflect.ValueOf(e).Elem()
+       for i := iter(reflect.ValueOf(a).Elem()); !i.done(); i.next() {
+               if vv := i.value(); vv.Kind() != reflect.Ptr || !vv.IsNil() {
+                       if _, attr := xmlName(i.field()); !attr {
+                               v.FieldByIndex(i.index).Set(vv)
+                       }
+               }
+       }
+       return err
+}
+
+func (cldr *CLDR) aliasResolver() visitor {
+       return func(v reflect.Value) (err error) {
+               if e, ok := v.Addr().Interface().(Elem); ok {
+                       err = cldr.resolveAndMergeAlias(e)
+                       if err == nil && blocking[e.GetCommon().name] {
+                               return stopDescent
+                       }
+               }
+               return err
+       }
+}
+
+// elements within blocking elements do not inherit.
+// Taken from CLDR's supplementalMetaData.xml.
+var blocking = map[string]bool{
+       "identity":         true,
+       "supplementalData": true,
+       "cldrTest":         true,
+       "collation":        true,
+       "transform":        true,
+}
+
+// Distinguishing attributes affect inheritance; two elements with different
+// distinguishing attributes are treated as different for purposes of inheritance,
+// except when such attributes occur in the indicated elements.
+// Taken from CLDR's supplementalMetaData.xml.
+var distinguishing = map[string][]string{
+       "key":        nil,
+       "request_id": nil,
+       "id":         nil,
+       "registry":   nil,
+       "alt":        nil,
+       "iso4217":    nil,
+       "iso3166":    nil,
+       "mzone":      nil,
+       "from":       nil,
+       "to":         nil,
+       "type": []string{
+               "abbreviationFallback",
+               "default",
+               "mapping",
+               "measurementSystem",
+               "preferenceOrdering",
+       },
+       "numberSystem": nil,
+}
+
+func in(set []string, s string) bool {
+       for _, v := range set {
+               if v == s {
+                       return true
+               }
+       }
+       return false
+}
+
+// attrKey computes a key based on the distinguishable attributes of
+// an element and it's values.
+func attrKey(v reflect.Value, exclude ...string) string {
+       parts := []string{}
+       ename := v.Interface().(Elem).GetCommon().name
+       v = v.Elem()
+       for i := iter(v); !i.done(); i.next() {
+               if name, attr := xmlName(i.field()); attr {
+                       if except, ok := distinguishing[name]; ok && !in(exclude, name) && !in(except, ename) {
+                               v := i.value()
+                               if v.Kind() == reflect.Ptr {
+                                       v = v.Elem()
+                               }
+                               if v.IsValid() {
+                                       parts = append(parts, fmt.Sprintf("%s=%s", name, v.String()))
+                               }
+                       }
+               }
+       }
+       sort.Strings(parts)
+       return strings.Join(parts, ";")
+}
+
+// Key returns a key for e derived from all distinguishing attributes
+// except those specified by exclude.
+func Key(e Elem, exclude ...string) string {
+       return attrKey(reflect.ValueOf(e), exclude...)
+}
+
+// linkEnclosing sets the enclosing element as well as the name
+// for all sub-elements of child, recursively.
+func linkEnclosing(parent, child Elem) {
+       child.setEnclosing(parent)
+       v := reflect.ValueOf(child).Elem()
+       for i := iter(v); !i.done(); i.next() {
+               vf := i.value()
+               if vf.Kind() == reflect.Slice {
+                       for j := 0; j < vf.Len(); j++ {
+                               linkEnclosing(child, vf.Index(j).Interface().(Elem))
+                       }
+               } else if vf.Kind() == reflect.Ptr && !vf.IsNil() && vf.Elem().Kind() == reflect.Struct {
+                       linkEnclosing(child, vf.Interface().(Elem))
+               }
+       }
+}
+
+func setNames(e Elem, name string) {
+       e.setName(name)
+       v := reflect.ValueOf(e).Elem()
+       for i := iter(v); !i.done(); i.next() {
+               vf := i.value()
+               name, _ = xmlName(i.field())
+               if vf.Kind() == reflect.Slice {
+                       for j := 0; j < vf.Len(); j++ {
+                               setNames(vf.Index(j).Interface().(Elem), name)
+                       }
+               } else if vf.Kind() == reflect.Ptr && !vf.IsNil() && vf.Elem().Kind() == reflect.Struct {
+                       setNames(vf.Interface().(Elem), name)
+               }
+       }
+}
+
+// deepCopy copies elements of v recursively.  All elements of v that may
+// be modified by inheritance are explicitly copied.
+func deepCopy(v reflect.Value) reflect.Value {
+       switch v.Kind() {
+       case reflect.Ptr:
+               if v.IsNil() || v.Elem().Kind() != reflect.Struct {
+                       return v
+               }
+               nv := reflect.New(v.Elem().Type())
+               nv.Elem().Set(v.Elem())
+               deepCopyRec(nv.Elem(), v.Elem())
+               return nv
+       case reflect.Slice:
+               nv := reflect.MakeSlice(v.Type(), v.Len(), v.Len())
+               for i := 0; i < v.Len(); i++ {
+                       deepCopyRec(nv.Index(i), v.Index(i))
+               }
+               return nv
+       }
+       panic("deepCopy: must be called with pointer or slice")
+}
+
+// deepCopyRec is only called by deepCopy.
+func deepCopyRec(nv, v reflect.Value) {
+       if v.Kind() == reflect.Struct {
+               t := v.Type()
+               for i := 0; i < v.NumField(); i++ {
+                       if name, attr := xmlName(t.Field(i)); name != "" && !attr {
+                               deepCopyRec(nv.Field(i), v.Field(i))
+                       }
+               }
+       } else {
+               nv.Set(deepCopy(v))
+       }
+}
+
+// newNode is used to insert a missing node during inheritance.
+func (cldr *CLDR) newNode(v, enc reflect.Value) reflect.Value {
+       n := reflect.New(v.Type())
+       for i := iter(v); !i.done(); i.next() {
+               if name, attr := xmlName(i.field()); name == "" || attr {
+                       n.Elem().FieldByIndex(i.index).Set(i.value())
+               }
+       }
+       n.Interface().(Elem).GetCommon().setEnclosing(enc.Addr().Interface().(Elem))
+       return n
+}
+
+// v, parent must be pointers to struct
+func (cldr *CLDR) inheritFields(v, parent reflect.Value) (res reflect.Value, err error) {
+       t := v.Type()
+       nv := reflect.New(t)
+       nv.Elem().Set(v)
+       for i := iter(v); !i.done(); i.next() {
+               vf := i.value()
+               f := i.field()
+               name, attr := xmlName(f)
+               if name == "" || attr {
+                       continue
+               }
+               pf := parent.FieldByIndex(i.index)
+               if blocking[name] {
+                       if vf.IsNil() {
+                               vf = pf
+                       }
+                       nv.Elem().FieldByIndex(i.index).Set(deepCopy(vf))
+                       continue
+               }
+               switch f.Type.Kind() {
+               case reflect.Ptr:
+                       if f.Type.Elem().Kind() == reflect.Struct {
+                               if !vf.IsNil() {
+                                       if vf, err = cldr.inheritStructPtr(vf, pf); err != nil {
+                                               return reflect.Value{}, err
+                                       }
+                                       vf.Interface().(Elem).setEnclosing(nv.Interface().(Elem))
+                                       nv.Elem().FieldByIndex(i.index).Set(vf)
+                               } else if !pf.IsNil() {
+                                       n := cldr.newNode(pf.Elem(), v)
+                                       if vf, err = cldr.inheritStructPtr(n, pf); err != nil {
+                                               return reflect.Value{}, err
+                                       }
+                                       vf.Interface().(Elem).setEnclosing(nv.Interface().(Elem))
+                                       nv.Elem().FieldByIndex(i.index).Set(vf)
+                               }
+                       }
+               case reflect.Slice:
+                       vf, err := cldr.inheritSlice(nv.Elem(), vf, pf)
+                       if err != nil {
+                               return reflect.Zero(t), err
+                       }
+                       nv.Elem().FieldByIndex(i.index).Set(vf)
+               }
+       }
+       return nv, nil
+}
+
+func root(e Elem) *LDML {
+       for ; e.enclosing() != nil; e = e.enclosing() {
+       }
+       return e.(*LDML)
+}
+
+// inheritStructPtr first merges possible aliases in with v and then inherits
+// any underspecified elements from parent.
+func (cldr *CLDR) inheritStructPtr(v, parent reflect.Value) (r reflect.Value, err error) {
+       if !v.IsNil() {
+               e := v.Interface().(Elem).GetCommon()
+               alias := e.Alias
+               if alias == nil && !parent.IsNil() {
+                       alias = parent.Interface().(Elem).GetCommon().Alias
+               }
+               if alias != nil {
+                       a, err := cldr.resolveAlias(v.Interface().(Elem), alias.Source, alias.Path)
+                       if a != nil {
+                               if v, err = cldr.inheritFields(v.Elem(), reflect.ValueOf(a).Elem()); err != nil {
+                                       return reflect.Value{}, err
+                               }
+                       }
+               }
+               if !parent.IsNil() {
+                       return cldr.inheritFields(v.Elem(), parent.Elem())
+               }
+       } else if parent.IsNil() {
+               panic("should not reach here")
+       }
+       return v, nil
+}
+
+// Must be slice of struct pointers.
+func (cldr *CLDR) inheritSlice(enc, v, parent reflect.Value) (res reflect.Value, err error) {
+       t := v.Type()
+       index := make(map[string]reflect.Value)
+       if !v.IsNil() {
+               for i := 0; i < v.Len(); i++ {
+                       vi := v.Index(i)
+                       key := attrKey(vi)
+                       index[key] = vi
+               }
+       }
+       if !parent.IsNil() {
+               for i := 0; i < parent.Len(); i++ {
+                       vi := parent.Index(i)
+                       key := attrKey(vi)
+                       if w, ok := index[key]; ok {
+                               index[key], err = cldr.inheritStructPtr(w, vi)
+                       } else {
+                               n := cldr.newNode(vi.Elem(), enc)
+                               index[key], err = cldr.inheritStructPtr(n, vi)
+                       }
+                       index[key].Interface().(Elem).setEnclosing(enc.Addr().Interface().(Elem))
+                       if err != nil {
+                               return v, err
+                       }
+               }
+       }
+       keys := make([]string, 0, len(index))
+       for k, _ := range index {
+               keys = append(keys, k)
+       }
+       sort.Strings(keys)
+       sl := reflect.MakeSlice(t, len(index), len(index))
+       for i, k := range keys {
+               sl.Index(i).Set(index[k])
+       }
+       return sl, nil
+}
+
+func parentLocale(loc string) string {
+       parts := strings.Split(loc, "_")
+       if len(parts) == 1 {
+               return "root"
+       }
+       parts = parts[:len(parts)-1]
+       key := strings.Join(parts, "_")
+       return key
+}
+
+func (cldr *CLDR) resolve(loc string) (res *LDML, err error) {
+       if r := cldr.resolved[loc]; r != nil {
+               return r, nil
+       }
+       x := cldr.RawLDML(loc)
+       if x == nil {
+               return nil, fmt.Errorf("cldr: unknown locale %q", loc)
+       }
+       var v reflect.Value
+       if loc == "root" {
+               x = deepCopy(reflect.ValueOf(x)).Interface().(*LDML)
+               linkEnclosing(nil, x)
+               err = cldr.aliasResolver().visit(x)
+       } else {
+               key := parentLocale(loc)
+               var parent *LDML
+               for ; cldr.locale[key] == nil; key = parentLocale(key) {
+               }
+               if parent, err = cldr.resolve(key); err != nil {
+                       return nil, err
+               }
+               v, err = cldr.inheritFields(reflect.ValueOf(x).Elem(), reflect.ValueOf(parent).Elem())
+               x = v.Interface().(*LDML)
+               linkEnclosing(nil, x)
+       }
+       if err != nil {
+               return nil, err
+       }
+       cldr.resolved[loc] = x
+       return x, err
+}
+
+// finalize finalizes the initialization of the raw LDML structs.  It also
+// removed unwanted fields, as specified by filter, so that they will not
+// be unnecessarily evaluated.
+func (cldr *CLDR) finalize(filter []string) {
+       for _, x := range cldr.locale {
+               if filter != nil {
+                       v := reflect.ValueOf(x).Elem()
+                       t := v.Type()
+                       for i := 0; i < v.NumField(); i++ {
+                               f := t.Field(i)
+                               name, _ := xmlName(f)
+                               if name != "" && name != "identity" && !in(filter, name) {
+                                       v.Field(i).Set(reflect.Zero(f.Type))
+                               }
+                       }
+               }
+               linkEnclosing(nil, x) // for resolving aliases and paths
+               setNames(x, "ldml")
+       }
+}
diff --git a/vendor/golang.org/x/text/unicode/cldr/slice.go b/vendor/golang.org/x/text/unicode/cldr/slice.go
new file mode 100644 (file)
index 0000000..388c983
--- /dev/null
@@ -0,0 +1,144 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cldr
+
+import (
+       "fmt"
+       "reflect"
+       "sort"
+)
+
+// Slice provides utilities for modifying slices of elements.
+// It can be wrapped around any slice of which the element type implements
+// interface Elem.
+type Slice struct {
+       ptr reflect.Value
+       typ reflect.Type
+}
+
+// Value returns the reflect.Value of the underlying slice.
+func (s *Slice) Value() reflect.Value {
+       return s.ptr.Elem()
+}
+
+// MakeSlice wraps a pointer to a slice of Elems.
+// It replaces the array pointed to by the slice so that subsequent modifications
+// do not alter the data in a CLDR type.
+// It panics if an incorrect type is passed.
+func MakeSlice(slicePtr interface{}) Slice {
+       ptr := reflect.ValueOf(slicePtr)
+       if ptr.Kind() != reflect.Ptr {
+               panic(fmt.Sprintf("MakeSlice: argument must be pointer to slice, found %v", ptr.Type()))
+       }
+       sl := ptr.Elem()
+       if sl.Kind() != reflect.Slice {
+               panic(fmt.Sprintf("MakeSlice: argument must point to a slice, found %v", sl.Type()))
+       }
+       intf := reflect.TypeOf((*Elem)(nil)).Elem()
+       if !sl.Type().Elem().Implements(intf) {
+               panic(fmt.Sprintf("MakeSlice: element type of slice (%v) does not implement Elem", sl.Type().Elem()))
+       }
+       nsl := reflect.MakeSlice(sl.Type(), sl.Len(), sl.Len())
+       reflect.Copy(nsl, sl)
+       sl.Set(nsl)
+       return Slice{
+               ptr: ptr,
+               typ: sl.Type().Elem().Elem(),
+       }
+}
+
+func (s Slice) indexForAttr(a string) []int {
+       for i := iter(reflect.Zero(s.typ)); !i.done(); i.next() {
+               if n, _ := xmlName(i.field()); n == a {
+                       return i.index
+               }
+       }
+       panic(fmt.Sprintf("MakeSlice: no attribute %q for type %v", a, s.typ))
+}
+
+// Filter filters s to only include elements for which fn returns true.
+func (s Slice) Filter(fn func(e Elem) bool) {
+       k := 0
+       sl := s.Value()
+       for i := 0; i < sl.Len(); i++ {
+               vi := sl.Index(i)
+               if fn(vi.Interface().(Elem)) {
+                       sl.Index(k).Set(vi)
+                       k++
+               }
+       }
+       sl.Set(sl.Slice(0, k))
+}
+
+// Group finds elements in s for which fn returns the same value and groups
+// them in a new Slice.
+func (s Slice) Group(fn func(e Elem) string) []Slice {
+       m := make(map[string][]reflect.Value)
+       sl := s.Value()
+       for i := 0; i < sl.Len(); i++ {
+               vi := sl.Index(i)
+               key := fn(vi.Interface().(Elem))
+               m[key] = append(m[key], vi)
+       }
+       keys := []string{}
+       for k, _ := range m {
+               keys = append(keys, k)
+       }
+       sort.Strings(keys)
+       res := []Slice{}
+       for _, k := range keys {
+               nsl := reflect.New(sl.Type())
+               nsl.Elem().Set(reflect.Append(nsl.Elem(), m[k]...))
+               res = append(res, MakeSlice(nsl.Interface()))
+       }
+       return res
+}
+
+// SelectAnyOf filters s to contain only elements for which attr matches
+// any of the values.
+func (s Slice) SelectAnyOf(attr string, values ...string) {
+       index := s.indexForAttr(attr)
+       s.Filter(func(e Elem) bool {
+               vf := reflect.ValueOf(e).Elem().FieldByIndex(index)
+               return in(values, vf.String())
+       })
+}
+
+// SelectOnePerGroup filters s to include at most one element e per group of
+// elements matching Key(attr), where e has an attribute a that matches any
+// the values in v.
+// If more than one element in a group matches a value in v preference
+// is given to the element that matches the first value in v.
+func (s Slice) SelectOnePerGroup(a string, v []string) {
+       index := s.indexForAttr(a)
+       grouped := s.Group(func(e Elem) string { return Key(e, a) })
+       sl := s.Value()
+       sl.Set(sl.Slice(0, 0))
+       for _, g := range grouped {
+               e := reflect.Value{}
+               found := len(v)
+               gsl := g.Value()
+               for i := 0; i < gsl.Len(); i++ {
+                       vi := gsl.Index(i).Elem().FieldByIndex(index)
+                       j := 0
+                       for ; j < len(v) && v[j] != vi.String(); j++ {
+                       }
+                       if j < found {
+                               found = j
+                               e = gsl.Index(i)
+                       }
+               }
+               if found < len(v) {
+                       sl.Set(reflect.Append(sl, e))
+               }
+       }
+}
+
+// SelectDraft drops all elements from the list with a draft level smaller than d
+// and selects the highest draft level of the remaining.
+// This method assumes that the input CLDR is canonicalized.
+func (s Slice) SelectDraft(d Draft) {
+       s.SelectOnePerGroup("draft", drafts[len(drafts)-2-int(d):])
+}
diff --git a/vendor/golang.org/x/text/unicode/cldr/xml.go b/vendor/golang.org/x/text/unicode/cldr/xml.go
new file mode 100644 (file)
index 0000000..ce32038
--- /dev/null
@@ -0,0 +1,1487 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package cldr
+
+// LDMLBCP47 holds information on allowable values for various variables in LDML.
+type LDMLBCP47 struct {
+       Common
+       Version *struct {
+               Common
+               Number string `xml:"number,attr"`
+       } `xml:"version"`
+       Generation *struct {
+               Common
+               Date string `xml:"date,attr"`
+       } `xml:"generation"`
+       Keyword []*struct {
+               Common
+               Key []*struct {
+                       Common
+                       Extension   string `xml:"extension,attr"`
+                       Name        string `xml:"name,attr"`
+                       Description string `xml:"description,attr"`
+                       Deprecated  string `xml:"deprecated,attr"`
+                       Preferred   string `xml:"preferred,attr"`
+                       Alias       string `xml:"alias,attr"`
+                       ValueType   string `xml:"valueType,attr"`
+                       Since       string `xml:"since,attr"`
+                       Type        []*struct {
+                               Common
+                               Name        string `xml:"name,attr"`
+                               Description string `xml:"description,attr"`
+                               Deprecated  string `xml:"deprecated,attr"`
+                               Preferred   string `xml:"preferred,attr"`
+                               Alias       string `xml:"alias,attr"`
+                               Since       string `xml:"since,attr"`
+                       } `xml:"type"`
+               } `xml:"key"`
+       } `xml:"keyword"`
+       Attribute []*struct {
+               Common
+               Name        string `xml:"name,attr"`
+               Description string `xml:"description,attr"`
+               Deprecated  string `xml:"deprecated,attr"`
+               Preferred   string `xml:"preferred,attr"`
+               Since       string `xml:"since,attr"`
+       } `xml:"attribute"`
+}
+
+// SupplementalData holds information relevant for internationalization
+// and proper use of CLDR, but that is not contained in the locale hierarchy.
+type SupplementalData struct {
+       Common
+       Version *struct {
+               Common
+               Number string `xml:"number,attr"`
+       } `xml:"version"`
+       Generation *struct {
+               Common
+               Date string `xml:"date,attr"`
+       } `xml:"generation"`
+       CurrencyData *struct {
+               Common
+               Fractions []*struct {
+                       Common
+                       Info []*struct {
+                               Common
+                               Iso4217      string `xml:"iso4217,attr"`
+                               Digits       string `xml:"digits,attr"`
+                               Rounding     string `xml:"rounding,attr"`
+                               CashDigits   string `xml:"cashDigits,attr"`
+                               CashRounding string `xml:"cashRounding,attr"`
+                       } `xml:"info"`
+               } `xml:"fractions"`
+               Region []*struct {
+                       Common
+                       Iso3166  string `xml:"iso3166,attr"`
+                       Currency []*struct {
+                               Common
+                               Before       string `xml:"before,attr"`
+                               From         string `xml:"from,attr"`
+                               To           string `xml:"to,attr"`
+                               Iso4217      string `xml:"iso4217,attr"`
+                               Digits       string `xml:"digits,attr"`
+                               Rounding     string `xml:"rounding,attr"`
+                               CashRounding string `xml:"cashRounding,attr"`
+                               Tender       string `xml:"tender,attr"`
+                               Alternate    []*struct {
+                                       Common
+                                       Iso4217 string `xml:"iso4217,attr"`
+                               } `xml:"alternate"`
+                       } `xml:"currency"`
+               } `xml:"region"`
+       } `xml:"currencyData"`
+       TerritoryContainment *struct {
+               Common
+               Group []*struct {
+                       Common
+                       Contains string `xml:"contains,attr"`
+                       Grouping string `xml:"grouping,attr"`
+                       Status   string `xml:"status,attr"`
+               } `xml:"group"`
+       } `xml:"territoryContainment"`
+       SubdivisionContainment *struct {
+               Common
+               Subgroup []*struct {
+                       Common
+                       Subtype  string `xml:"subtype,attr"`
+                       Contains string `xml:"contains,attr"`
+               } `xml:"subgroup"`
+       } `xml:"subdivisionContainment"`
+       LanguageData *struct {
+               Common
+               Language []*struct {
+                       Common
+                       Scripts     string `xml:"scripts,attr"`
+                       Territories string `xml:"territories,attr"`
+                       Variants    string `xml:"variants,attr"`
+               } `xml:"language"`
+       } `xml:"languageData"`
+       TerritoryInfo *struct {
+               Common
+               Territory []*struct {
+                       Common
+                       Gdp                string `xml:"gdp,attr"`
+                       LiteracyPercent    string `xml:"literacyPercent,attr"`
+                       Population         string `xml:"population,attr"`
+                       LanguagePopulation []*struct {
+                               Common
+                               LiteracyPercent   string `xml:"literacyPercent,attr"`
+                               WritingPercent    string `xml:"writingPercent,attr"`
+                               PopulationPercent string `xml:"populationPercent,attr"`
+                               OfficialStatus    string `xml:"officialStatus,attr"`
+                       } `xml:"languagePopulation"`
+               } `xml:"territory"`
+       } `xml:"territoryInfo"`
+       PostalCodeData *struct {
+               Common
+               PostCodeRegex []*struct {
+                       Common
+                       TerritoryId string `xml:"territoryId,attr"`
+               } `xml:"postCodeRegex"`
+       } `xml:"postalCodeData"`
+       CalendarData *struct {
+               Common
+               Calendar []*struct {
+                       Common
+                       Territories    string  `xml:"territories,attr"`
+                       CalendarSystem *Common `xml:"calendarSystem"`
+                       Eras           *struct {
+                               Common
+                               Era []*struct {
+                                       Common
+                                       Start string `xml:"start,attr"`
+                                       End   string `xml:"end,attr"`
+                               } `xml:"era"`
+                       } `xml:"eras"`
+               } `xml:"calendar"`
+       } `xml:"calendarData"`
+       CalendarPreferenceData *struct {
+               Common
+               CalendarPreference []*struct {
+                       Common
+                       Territories string `xml:"territories,attr"`
+                       Ordering    string `xml:"ordering,attr"`
+               } `xml:"calendarPreference"`
+       } `xml:"calendarPreferenceData"`
+       WeekData *struct {
+               Common
+               MinDays []*struct {
+                       Common
+                       Count       string `xml:"count,attr"`
+                       Territories string `xml:"territories,attr"`
+               } `xml:"minDays"`
+               FirstDay []*struct {
+                       Common
+                       Day         string `xml:"day,attr"`
+                       Territories string `xml:"territories,attr"`
+               } `xml:"firstDay"`
+               WeekendStart []*struct {
+                       Common
+                       Day         string `xml:"day,attr"`
+                       Territories string `xml:"territories,attr"`
+               } `xml:"weekendStart"`
+               WeekendEnd []*struct {
+                       Common
+                       Day         string `xml:"day,attr"`
+                       Territories string `xml:"territories,attr"`
+               } `xml:"weekendEnd"`
+               WeekOfPreference []*struct {
+                       Common
+                       Locales  string `xml:"locales,attr"`
+                       Ordering string `xml:"ordering,attr"`
+               } `xml:"weekOfPreference"`
+       } `xml:"weekData"`
+       TimeData *struct {
+               Common
+               Hours []*struct {
+                       Common
+                       Allowed   string `xml:"allowed,attr"`
+                       Preferred string `xml:"preferred,attr"`
+                       Regions   string `xml:"regions,attr"`
+               } `xml:"hours"`
+       } `xml:"timeData"`
+       MeasurementData *struct {
+               Common
+               MeasurementSystem []*struct {
+                       Common
+                       Category    string `xml:"category,attr"`
+                       Territories string `xml:"territories,attr"`
+               } `xml:"measurementSystem"`
+               PaperSize []*struct {
+                       Common
+                       Territories string `xml:"territories,attr"`
+               } `xml:"paperSize"`
+       } `xml:"measurementData"`
+       UnitPreferenceData *struct {
+               Common
+               UnitPreferences []*struct {
+                       Common
+                       Category       string `xml:"category,attr"`
+                       Usage          string `xml:"usage,attr"`
+                       Scope          string `xml:"scope,attr"`
+                       UnitPreference []*struct {
+                               Common
+                               Regions string `xml:"regions,attr"`
+                       } `xml:"unitPreference"`
+               } `xml:"unitPreferences"`
+       } `xml:"unitPreferenceData"`
+       TimezoneData *struct {
+               Common
+               MapTimezones []*struct {
+                       Common
+                       OtherVersion string `xml:"otherVersion,attr"`
+                       TypeVersion  string `xml:"typeVersion,attr"`
+                       MapZone      []*struct {
+                               Common
+                               Other     string `xml:"other,attr"`
+                               Territory string `xml:"territory,attr"`
+                       } `xml:"mapZone"`
+               } `xml:"mapTimezones"`
+               ZoneFormatting []*struct {
+                       Common
+                       Multizone   string `xml:"multizone,attr"`
+                       TzidVersion string `xml:"tzidVersion,attr"`
+                       ZoneItem    []*struct {
+                               Common
+                               Territory string `xml:"territory,attr"`
+                               Aliases   string `xml:"aliases,attr"`
+                       } `xml:"zoneItem"`
+               } `xml:"zoneFormatting"`
+       } `xml:"timezoneData"`
+       Characters *struct {
+               Common
+               CharacterFallback []*struct {
+                       Common
+                       Character []*struct {
+                               Common
+                               Value      string    `xml:"value,attr"`
+                               Substitute []*Common `xml:"substitute"`
+                       } `xml:"character"`
+               } `xml:"character-fallback"`
+       } `xml:"characters"`
+       Transforms *struct {
+               Common
+               Transform []*struct {
+                       Common
+                       Source        string    `xml:"source,attr"`
+                       Target        string    `xml:"target,attr"`
+                       Variant       string    `xml:"variant,attr"`
+                       Direction     string    `xml:"direction,attr"`
+                       Alias         string    `xml:"alias,attr"`
+                       BackwardAlias string    `xml:"backwardAlias,attr"`
+                       Visibility    string    `xml:"visibility,attr"`
+                       Comment       []*Common `xml:"comment"`
+                       TRule         []*Common `xml:"tRule"`
+               } `xml:"transform"`
+       } `xml:"transforms"`
+       Metadata *struct {
+               Common
+               AttributeOrder *Common `xml:"attributeOrder"`
+               ElementOrder   *Common `xml:"elementOrder"`
+               SerialElements *Common `xml:"serialElements"`
+               Suppress       *struct {
+                       Common
+                       Attributes []*struct {
+                               Common
+                               Element        string `xml:"element,attr"`
+                               Attribute      string `xml:"attribute,attr"`
+                               AttributeValue string `xml:"attributeValue,attr"`
+                       } `xml:"attributes"`
+               } `xml:"suppress"`
+               Validity *struct {
+                       Common
+                       Variable []*struct {
+                               Common
+                               Id string `xml:"id,attr"`
+                       } `xml:"variable"`
+                       AttributeValues []*struct {
+                               Common
+                               Dtds       string `xml:"dtds,attr"`
+                               Elements   string `xml:"elements,attr"`
+                               Attributes string `xml:"attributes,attr"`
+                               Order      string `xml:"order,attr"`
+                       } `xml:"attributeValues"`
+               } `xml:"validity"`
+               Alias *struct {
+                       Common
+                       LanguageAlias []*struct {
+                               Common
+                               Replacement string `xml:"replacement,attr"`
+                               Reason      string `xml:"reason,attr"`
+                       } `xml:"languageAlias"`
+                       ScriptAlias []*struct {
+                               Common
+                               Replacement string `xml:"replacement,attr"`
+                               Reason      string `xml:"reason,attr"`
+                       } `xml:"scriptAlias"`
+                       TerritoryAlias []*struct {
+                               Common
+                               Replacement string `xml:"replacement,attr"`
+                               Reason      string `xml:"reason,attr"`
+                       } `xml:"territoryAlias"`
+                       SubdivisionAlias []*struct {
+                               Common
+                               Replacement string `xml:"replacement,attr"`
+                               Reason      string `xml:"reason,attr"`
+                       } `xml:"subdivisionAlias"`
+                       VariantAlias []*struct {
+                               Common
+                               Replacement string `xml:"replacement,attr"`
+                               Reason      string `xml:"reason,attr"`
+                       } `xml:"variantAlias"`
+                       ZoneAlias []*struct {
+                               Common
+                               Replacement string `xml:"replacement,attr"`
+                               Reason      string `xml:"reason,attr"`
+                       } `xml:"zoneAlias"`
+               } `xml:"alias"`
+               Deprecated *struct {
+                       Common
+                       DeprecatedItems []*struct {
+                               Common
+                               Elements   string `xml:"elements,attr"`
+                               Attributes string `xml:"attributes,attr"`
+                               Values     string `xml:"values,attr"`
+                       } `xml:"deprecatedItems"`
+               } `xml:"deprecated"`
+               Distinguishing *struct {
+                       Common
+                       DistinguishingItems []*struct {
+                               Common
+                               Exclude    string `xml:"exclude,attr"`
+                               Elements   string `xml:"elements,attr"`
+                               Attributes string `xml:"attributes,attr"`
+                       } `xml:"distinguishingItems"`
+               } `xml:"distinguishing"`
+               Blocking *struct {
+                       Common
+                       BlockingItems []*struct {
+                               Common
+                               Elements string `xml:"elements,attr"`
+                       } `xml:"blockingItems"`
+               } `xml:"blocking"`
+               CoverageAdditions *struct {
+                       Common
+                       LanguageCoverage []*struct {
+                               Common
+                               Values string `xml:"values,attr"`
+                       } `xml:"languageCoverage"`
+                       ScriptCoverage []*struct {
+                               Common
+                               Values string `xml:"values,attr"`
+                       } `xml:"scriptCoverage"`
+                       TerritoryCoverage []*struct {
+                               Common
+                               Values string `xml:"values,attr"`
+                       } `xml:"territoryCoverage"`
+                       CurrencyCoverage []*struct {
+                               Common
+                               Values string `xml:"values,attr"`
+                       } `xml:"currencyCoverage"`
+                       TimezoneCoverage []*struct {
+                               Common
+                               Values string `xml:"values,attr"`
+                       } `xml:"timezoneCoverage"`
+               } `xml:"coverageAdditions"`
+               SkipDefaultLocale *struct {
+                       Common
+                       Services string `xml:"services,attr"`
+               } `xml:"skipDefaultLocale"`
+               DefaultContent *struct {
+                       Common
+                       Locales string `xml:"locales,attr"`
+               } `xml:"defaultContent"`
+       } `xml:"metadata"`
+       CodeMappings *struct {
+               Common
+               LanguageCodes []*struct {
+                       Common
+                       Alpha3 string `xml:"alpha3,attr"`
+               } `xml:"languageCodes"`
+               TerritoryCodes []*struct {
+                       Common
+                       Numeric  string `xml:"numeric,attr"`
+                       Alpha3   string `xml:"alpha3,attr"`
+                       Fips10   string `xml:"fips10,attr"`
+                       Internet string `xml:"internet,attr"`
+               } `xml:"territoryCodes"`
+               CurrencyCodes []*struct {
+                       Common
+                       Numeric string `xml:"numeric,attr"`
+               } `xml:"currencyCodes"`
+       } `xml:"codeMappings"`
+       ParentLocales *struct {
+               Common
+               ParentLocale []*struct {
+                       Common
+                       Parent  string `xml:"parent,attr"`
+                       Locales string `xml:"locales,attr"`
+               } `xml:"parentLocale"`
+       } `xml:"parentLocales"`
+       LikelySubtags *struct {
+               Common
+               LikelySubtag []*struct {
+                       Common
+                       From string `xml:"from,attr"`
+                       To   string `xml:"to,attr"`
+               } `xml:"likelySubtag"`
+       } `xml:"likelySubtags"`
+       MetazoneInfo *struct {
+               Common
+               Timezone []*struct {
+                       Common
+                       UsesMetazone []*struct {
+                               Common
+                               From  string `xml:"from,attr"`
+                               To    string `xml:"to,attr"`
+                               Mzone string `xml:"mzone,attr"`
+                       } `xml:"usesMetazone"`
+               } `xml:"timezone"`
+       } `xml:"metazoneInfo"`
+       Plurals []*struct {
+               Common
+               PluralRules []*struct {
+                       Common
+                       Locales    string `xml:"locales,attr"`
+                       PluralRule []*struct {
+                               Common
+                               Count string `xml:"count,attr"`
+                       } `xml:"pluralRule"`
+               } `xml:"pluralRules"`
+               PluralRanges []*struct {
+                       Common
+                       Locales     string `xml:"locales,attr"`
+                       PluralRange []*struct {
+                               Common
+                               Start  string `xml:"start,attr"`
+                               End    string `xml:"end,attr"`
+                               Result string `xml:"result,attr"`
+                       } `xml:"pluralRange"`
+               } `xml:"pluralRanges"`
+       } `xml:"plurals"`
+       TelephoneCodeData *struct {
+               Common
+               CodesByTerritory []*struct {
+                       Common
+                       Territory            string `xml:"territory,attr"`
+                       TelephoneCountryCode []*struct {
+                               Common
+                               Code string `xml:"code,attr"`
+                               From string `xml:"from,attr"`
+                               To   string `xml:"to,attr"`
+                       } `xml:"telephoneCountryCode"`
+               } `xml:"codesByTerritory"`
+       } `xml:"telephoneCodeData"`
+       NumberingSystems *struct {
+               Common
+               NumberingSystem []*struct {
+                       Common
+                       Id     string `xml:"id,attr"`
+                       Radix  string `xml:"radix,attr"`
+                       Digits string `xml:"digits,attr"`
+                       Rules  string `xml:"rules,attr"`
+               } `xml:"numberingSystem"`
+       } `xml:"numberingSystems"`
+       Bcp47KeywordMappings *struct {
+               Common
+               MapKeys *struct {
+                       Common
+                       KeyMap []*struct {
+                               Common
+                               Bcp47 string `xml:"bcp47,attr"`
+                       } `xml:"keyMap"`
+               } `xml:"mapKeys"`
+               MapTypes []*struct {
+                       Common
+                       TypeMap []*struct {
+                               Common
+                               Bcp47 string `xml:"bcp47,attr"`
+                       } `xml:"typeMap"`
+               } `xml:"mapTypes"`
+       } `xml:"bcp47KeywordMappings"`
+       Gender *struct {
+               Common
+               PersonList []*struct {
+                       Common
+                       Locales string `xml:"locales,attr"`
+               } `xml:"personList"`
+       } `xml:"gender"`
+       References *struct {
+               Common
+               Reference []*struct {
+                       Common
+                       Uri string `xml:"uri,attr"`
+               } `xml:"reference"`
+       } `xml:"references"`
+       LanguageMatching *struct {
+               Common
+               LanguageMatches []*struct {
+                       Common
+                       ParadigmLocales []*struct {
+                               Common
+                               Locales string `xml:"locales,attr"`
+                       } `xml:"paradigmLocales"`
+                       MatchVariable []*struct {
+                               Common
+                               Id    string `xml:"id,attr"`
+                               Value string `xml:"value,attr"`
+                       } `xml:"matchVariable"`
+                       LanguageMatch []*struct {
+                               Common
+                               Desired   string `xml:"desired,attr"`
+                               Supported string `xml:"supported,attr"`
+                               Percent   string `xml:"percent,attr"`
+                               Distance  string `xml:"distance,attr"`
+                               Oneway    string `xml:"oneway,attr"`
+                       } `xml:"languageMatch"`
+               } `xml:"languageMatches"`
+       } `xml:"languageMatching"`
+       DayPeriodRuleSet []*struct {
+               Common
+               DayPeriodRules []*struct {
+                       Common
+                       Locales       string `xml:"locales,attr"`
+                       DayPeriodRule []*struct {
+                               Common
+                               At     string `xml:"at,attr"`
+                               After  string `xml:"after,attr"`
+                               Before string `xml:"before,attr"`
+                               From   string `xml:"from,attr"`
+                               To     string `xml:"to,attr"`
+                       } `xml:"dayPeriodRule"`
+               } `xml:"dayPeriodRules"`
+       } `xml:"dayPeriodRuleSet"`
+       MetaZones *struct {
+               Common
+               MetazoneInfo *struct {
+                       Common
+                       Timezone []*struct {
+                               Common
+                               UsesMetazone []*struct {
+                                       Common
+                                       From  string `xml:"from,attr"`
+                                       To    string `xml:"to,attr"`
+                                       Mzone string `xml:"mzone,attr"`
+                               } `xml:"usesMetazone"`
+                       } `xml:"timezone"`
+               } `xml:"metazoneInfo"`
+               MapTimezones *struct {
+                       Common
+                       OtherVersion string `xml:"otherVersion,attr"`
+                       TypeVersion  string `xml:"typeVersion,attr"`
+                       MapZone      []*struct {
+                               Common
+                               Other     string `xml:"other,attr"`
+                               Territory string `xml:"territory,attr"`
+                       } `xml:"mapZone"`
+               } `xml:"mapTimezones"`
+       } `xml:"metaZones"`
+       PrimaryZones *struct {
+               Common
+               PrimaryZone []*struct {
+                       Common
+                       Iso3166 string `xml:"iso3166,attr"`
+               } `xml:"primaryZone"`
+       } `xml:"primaryZones"`
+       WindowsZones *struct {
+               Common
+               MapTimezones *struct {
+                       Common
+                       OtherVersion string `xml:"otherVersion,attr"`
+                       TypeVersion  string `xml:"typeVersion,attr"`
+                       MapZone      []*struct {
+                               Common
+                               Other     string `xml:"other,attr"`
+                               Territory string `xml:"territory,attr"`
+                       } `xml:"mapZone"`
+               } `xml:"mapTimezones"`
+       } `xml:"windowsZones"`
+       CoverageLevels *struct {
+               Common
+               ApprovalRequirements *struct {
+                       Common
+                       ApprovalRequirement []*struct {
+                               Common
+                               Votes   string `xml:"votes,attr"`
+                               Locales string `xml:"locales,attr"`
+                               Paths   string `xml:"paths,attr"`
+                       } `xml:"approvalRequirement"`
+               } `xml:"approvalRequirements"`
+               CoverageVariable []*struct {
+                       Common
+                       Key   string `xml:"key,attr"`
+                       Value string `xml:"value,attr"`
+               } `xml:"coverageVariable"`
+               CoverageLevel []*struct {
+                       Common
+                       InLanguage  string `xml:"inLanguage,attr"`
+                       InScript    string `xml:"inScript,attr"`
+                       InTerritory string `xml:"inTerritory,attr"`
+                       Value       string `xml:"value,attr"`
+                       Match       string `xml:"match,attr"`
+               } `xml:"coverageLevel"`
+       } `xml:"coverageLevels"`
+       IdValidity *struct {
+               Common
+               Id []*struct {
+                       Common
+                       IdStatus string `xml:"idStatus,attr"`
+               } `xml:"id"`
+       } `xml:"idValidity"`
+       RgScope *struct {
+               Common
+               RgPath []*struct {
+                       Common
+                       Path string `xml:"path,attr"`
+               } `xml:"rgPath"`
+       } `xml:"rgScope"`
+}
+
+// LDML is the top-level type for locale-specific data.
+type LDML struct {
+       Common
+       Version  string `xml:"version,attr"`
+       Identity *struct {
+               Common
+               Version *struct {
+                       Common
+                       Number string `xml:"number,attr"`
+               } `xml:"version"`
+               Generation *struct {
+                       Common
+                       Date string `xml:"date,attr"`
+               } `xml:"generation"`
+               Language  *Common `xml:"language"`
+               Script    *Common `xml:"script"`
+               Territory *Common `xml:"territory"`
+               Variant   *Common `xml:"variant"`
+       } `xml:"identity"`
+       LocaleDisplayNames *LocaleDisplayNames `xml:"localeDisplayNames"`
+       Layout             *struct {
+               Common
+               Orientation []*struct {
+                       Common
+                       Characters     string    `xml:"characters,attr"`
+                       Lines          string    `xml:"lines,attr"`
+                       CharacterOrder []*Common `xml:"characterOrder"`
+                       LineOrder      []*Common `xml:"lineOrder"`
+               } `xml:"orientation"`
+               InList []*struct {
+                       Common
+                       Casing string `xml:"casing,attr"`
+               } `xml:"inList"`
+               InText []*Common `xml:"inText"`
+       } `xml:"layout"`
+       ContextTransforms *struct {
+               Common
+               ContextTransformUsage []*struct {
+                       Common
+                       ContextTransform []*Common `xml:"contextTransform"`
+               } `xml:"contextTransformUsage"`
+       } `xml:"contextTransforms"`
+       Characters *struct {
+               Common
+               ExemplarCharacters []*Common `xml:"exemplarCharacters"`
+               Ellipsis           []*Common `xml:"ellipsis"`
+               MoreInformation    []*Common `xml:"moreInformation"`
+               Stopwords          []*struct {
+                       Common
+                       StopwordList []*Common `xml:"stopwordList"`
+               } `xml:"stopwords"`
+               IndexLabels []*struct {
+                       Common
+                       IndexSeparator           []*Common `xml:"indexSeparator"`
+                       CompressedIndexSeparator []*Common `xml:"compressedIndexSeparator"`
+                       IndexRangePattern        []*Common `xml:"indexRangePattern"`
+                       IndexLabelBefore         []*Common `xml:"indexLabelBefore"`
+                       IndexLabelAfter          []*Common `xml:"indexLabelAfter"`
+                       IndexLabel               []*struct {
+                               Common
+                               IndexSource string `xml:"indexSource,attr"`
+                               Priority    string `xml:"priority,attr"`
+                       } `xml:"indexLabel"`
+               } `xml:"indexLabels"`
+               Mapping []*struct {
+                       Common
+                       Registry string `xml:"registry,attr"`
+               } `xml:"mapping"`
+               ParseLenients []*struct {
+                       Common
+                       Scope        string `xml:"scope,attr"`
+                       Level        string `xml:"level,attr"`
+                       ParseLenient []*struct {
+                               Common
+                               Sample string `xml:"sample,attr"`
+                       } `xml:"parseLenient"`
+               } `xml:"parseLenients"`
+       } `xml:"characters"`
+       Delimiters *struct {
+               Common
+               QuotationStart          []*Common `xml:"quotationStart"`
+               QuotationEnd            []*Common `xml:"quotationEnd"`
+               AlternateQuotationStart []*Common `xml:"alternateQuotationStart"`
+               AlternateQuotationEnd   []*Common `xml:"alternateQuotationEnd"`
+       } `xml:"delimiters"`
+       Measurement *struct {
+               Common
+               MeasurementSystem []*Common `xml:"measurementSystem"`
+               PaperSize         []*struct {
+                       Common
+                       Height []*Common `xml:"height"`
+                       Width  []*Common `xml:"width"`
+               } `xml:"paperSize"`
+       } `xml:"measurement"`
+       Dates *struct {
+               Common
+               LocalizedPatternChars []*Common `xml:"localizedPatternChars"`
+               DateRangePattern      []*Common `xml:"dateRangePattern"`
+               Calendars             *struct {
+                       Common
+                       Calendar []*Calendar `xml:"calendar"`
+               } `xml:"calendars"`
+               Fields *struct {
+                       Common
+                       Field []*struct {
+                               Common
+                               DisplayName []*struct {
+                                       Common
+                                       Count string `xml:"count,attr"`
+                               } `xml:"displayName"`
+                               Relative     []*Common `xml:"relative"`
+                               RelativeTime []*struct {
+                                       Common
+                                       RelativeTimePattern []*struct {
+                                               Common
+                                               Count string `xml:"count,attr"`
+                                       } `xml:"relativeTimePattern"`
+                               } `xml:"relativeTime"`
+                               RelativePeriod []*Common `xml:"relativePeriod"`
+                       } `xml:"field"`
+               } `xml:"fields"`
+               TimeZoneNames *TimeZoneNames `xml:"timeZoneNames"`
+       } `xml:"dates"`
+       Numbers *Numbers `xml:"numbers"`
+       Units   *struct {
+               Common
+               Unit []*struct {
+                       Common
+                       DisplayName []*struct {
+                               Common
+                               Count string `xml:"count,attr"`
+                       } `xml:"displayName"`
+                       UnitPattern []*struct {
+                               Common
+                               Count string `xml:"count,attr"`
+                       } `xml:"unitPattern"`
+                       PerUnitPattern []*Common `xml:"perUnitPattern"`
+               } `xml:"unit"`
+               UnitLength []*struct {
+                       Common
+                       CompoundUnit []*struct {
+                               Common
+                               CompoundUnitPattern []*Common `xml:"compoundUnitPattern"`
+                       } `xml:"compoundUnit"`
+                       Unit []*struct {
+                               Common
+                               DisplayName []*struct {
+                                       Common
+                                       Count string `xml:"count,attr"`
+                               } `xml:"displayName"`
+                               UnitPattern []*struct {
+                                       Common
+                                       Count string `xml:"count,attr"`
+                               } `xml:"unitPattern"`
+                               PerUnitPattern []*Common `xml:"perUnitPattern"`
+                       } `xml:"unit"`
+                       CoordinateUnit []*struct {
+                               Common
+                               CoordinateUnitPattern []*Common `xml:"coordinateUnitPattern"`
+                       } `xml:"coordinateUnit"`
+               } `xml:"unitLength"`
+               DurationUnit []*struct {
+                       Common
+                       DurationUnitPattern []*Common `xml:"durationUnitPattern"`
+               } `xml:"durationUnit"`
+       } `xml:"units"`
+       ListPatterns *struct {
+               Common
+               ListPattern []*struct {
+                       Common
+                       ListPatternPart []*Common `xml:"listPatternPart"`
+               } `xml:"listPattern"`
+       } `xml:"listPatterns"`
+       Collations *struct {
+               Common
+               Version          string       `xml:"version,attr"`
+               DefaultCollation *Common      `xml:"defaultCollation"`
+               Collation        []*Collation `xml:"collation"`
+       } `xml:"collations"`
+       Posix *struct {
+               Common
+               Messages []*struct {
+                       Common
+                       Yesstr  []*Common `xml:"yesstr"`
+                       Nostr   []*Common `xml:"nostr"`
+                       Yesexpr []*Common `xml:"yesexpr"`
+                       Noexpr  []*Common `xml:"noexpr"`
+               } `xml:"messages"`
+       } `xml:"posix"`
+       CharacterLabels *struct {
+               Common
+               CharacterLabelPattern []*struct {
+                       Common
+                       Count string `xml:"count,attr"`
+               } `xml:"characterLabelPattern"`
+               CharacterLabel []*Common `xml:"characterLabel"`
+       } `xml:"characterLabels"`
+       Segmentations *struct {
+               Common
+               Segmentation []*struct {
+                       Common
+                       Variables *struct {
+                               Common
+                               Variable []*struct {
+                                       Common
+                                       Id string `xml:"id,attr"`
+                               } `xml:"variable"`
+                       } `xml:"variables"`
+                       SegmentRules *struct {
+                               Common
+                               Rule []*struct {
+                                       Common
+                                       Id string `xml:"id,attr"`
+                               } `xml:"rule"`
+                       } `xml:"segmentRules"`
+                       Exceptions *struct {
+                               Common
+                               Exception []*Common `xml:"exception"`
+                       } `xml:"exceptions"`
+                       Suppressions *struct {
+                               Common
+                               Suppression []*Common `xml:"suppression"`
+                       } `xml:"suppressions"`
+               } `xml:"segmentation"`
+       } `xml:"segmentations"`
+       Rbnf *struct {
+               Common
+               RulesetGrouping []*struct {
+                       Common
+                       Ruleset []*struct {
+                               Common
+                               Access        string `xml:"access,attr"`
+                               AllowsParsing string `xml:"allowsParsing,attr"`
+                               Rbnfrule      []*struct {
+                                       Common
+                                       Value  string `xml:"value,attr"`
+                                       Radix  string `xml:"radix,attr"`
+                                       Decexp string `xml:"decexp,attr"`
+                               } `xml:"rbnfrule"`
+                       } `xml:"ruleset"`
+               } `xml:"rulesetGrouping"`
+       } `xml:"rbnf"`
+       Annotations *struct {
+               Common
+               Annotation []*struct {
+                       Common
+                       Cp  string `xml:"cp,attr"`
+                       Tts string `xml:"tts,attr"`
+               } `xml:"annotation"`
+       } `xml:"annotations"`
+       Metadata *struct {
+               Common
+               CasingData *struct {
+                       Common
+                       CasingItem []*struct {
+                               Common
+                               Override   string `xml:"override,attr"`
+                               ForceError string `xml:"forceError,attr"`
+                       } `xml:"casingItem"`
+               } `xml:"casingData"`
+       } `xml:"metadata"`
+       References *struct {
+               Common
+               Reference []*struct {
+                       Common
+                       Uri string `xml:"uri,attr"`
+               } `xml:"reference"`
+       } `xml:"references"`
+}
+
+// Collation contains rules that specify a certain sort-order,
+// as a tailoring of the root order.
+// The parsed rules are obtained by passing a RuleProcessor to Collation's
+// Process method.
+type Collation struct {
+       Common
+       Visibility string  `xml:"visibility,attr"`
+       Base       *Common `xml:"base"`
+       Import     []*struct {
+               Common
+               Source string `xml:"source,attr"`
+       } `xml:"import"`
+       Settings *struct {
+               Common
+               Strength           string `xml:"strength,attr"`
+               Alternate          string `xml:"alternate,attr"`
+               Backwards          string `xml:"backwards,attr"`
+               Normalization      string `xml:"normalization,attr"`
+               CaseLevel          string `xml:"caseLevel,attr"`
+               CaseFirst          string `xml:"caseFirst,attr"`
+               HiraganaQuaternary string `xml:"hiraganaQuaternary,attr"`
+               MaxVariable        string `xml:"maxVariable,attr"`
+               Numeric            string `xml:"numeric,attr"`
+               Private            string `xml:"private,attr"`
+               VariableTop        string `xml:"variableTop,attr"`
+               Reorder            string `xml:"reorder,attr"`
+       } `xml:"settings"`
+       SuppressContractions *Common   `xml:"suppress_contractions"`
+       Optimize             *Common   `xml:"optimize"`
+       Cr                   []*Common `xml:"cr"`
+       rulesElem
+}
+
+// Calendar specifies the fields used for formatting and parsing dates and times.
+// The month and quarter names are identified numerically, starting at 1.
+// The day (of the week) names are identified with short strings, since there is
+// no universally-accepted numeric designation.
+type Calendar struct {
+       Common
+       Months *struct {
+               Common
+               MonthContext []*struct {
+                       Common
+                       MonthWidth []*struct {
+                               Common
+                               Month []*struct {
+                                       Common
+                                       Yeartype string `xml:"yeartype,attr"`
+                               } `xml:"month"`
+                       } `xml:"monthWidth"`
+               } `xml:"monthContext"`
+       } `xml:"months"`
+       MonthNames *struct {
+               Common
+               Month []*struct {
+                       Common
+                       Yeartype string `xml:"yeartype,attr"`
+               } `xml:"month"`
+       } `xml:"monthNames"`
+       MonthAbbr *struct {
+               Common
+               Month []*struct {
+                       Common
+                       Yeartype string `xml:"yeartype,attr"`
+               } `xml:"month"`
+       } `xml:"monthAbbr"`
+       MonthPatterns *struct {
+               Common
+               MonthPatternContext []*struct {
+                       Common
+                       MonthPatternWidth []*struct {
+                               Common
+                               MonthPattern []*Common `xml:"monthPattern"`
+                       } `xml:"monthPatternWidth"`
+               } `xml:"monthPatternContext"`
+       } `xml:"monthPatterns"`
+       Days *struct {
+               Common
+               DayContext []*struct {
+                       Common
+                       DayWidth []*struct {
+                               Common
+                               Day []*Common `xml:"day"`
+                       } `xml:"dayWidth"`
+               } `xml:"dayContext"`
+       } `xml:"days"`
+       DayNames *struct {
+               Common
+               Day []*Common `xml:"day"`
+       } `xml:"dayNames"`
+       DayAbbr *struct {
+               Common
+               Day []*Common `xml:"day"`
+       } `xml:"dayAbbr"`
+       Quarters *struct {
+               Common
+               QuarterContext []*struct {
+                       Common
+                       QuarterWidth []*struct {
+                               Common
+                               Quarter []*Common `xml:"quarter"`
+                       } `xml:"quarterWidth"`
+               } `xml:"quarterContext"`
+       } `xml:"quarters"`
+       Week *struct {
+               Common
+               MinDays []*struct {
+                       Common
+                       Count string `xml:"count,attr"`
+               } `xml:"minDays"`
+               FirstDay []*struct {
+                       Common
+                       Day string `xml:"day,attr"`
+               } `xml:"firstDay"`
+               WeekendStart []*struct {
+                       Common
+                       Day  string `xml:"day,attr"`
+                       Time string `xml:"time,attr"`
+               } `xml:"weekendStart"`
+               WeekendEnd []*struct {
+                       Common
+                       Day  string `xml:"day,attr"`
+                       Time string `xml:"time,attr"`
+               } `xml:"weekendEnd"`
+       } `xml:"week"`
+       Am         []*Common `xml:"am"`
+       Pm         []*Common `xml:"pm"`
+       DayPeriods *struct {
+               Common
+               DayPeriodContext []*struct {
+                       Common
+                       DayPeriodWidth []*struct {
+                               Common
+                               DayPeriod []*Common `xml:"dayPeriod"`
+                       } `xml:"dayPeriodWidth"`
+               } `xml:"dayPeriodContext"`
+       } `xml:"dayPeriods"`
+       Eras *struct {
+               Common
+               EraNames *struct {
+                       Common
+                       Era []*Common `xml:"era"`
+               } `xml:"eraNames"`
+               EraAbbr *struct {
+                       Common
+                       Era []*Common `xml:"era"`
+               } `xml:"eraAbbr"`
+               EraNarrow *struct {
+                       Common
+                       Era []*Common `xml:"era"`
+               } `xml:"eraNarrow"`
+       } `xml:"eras"`
+       CyclicNameSets *struct {
+               Common
+               CyclicNameSet []*struct {
+                       Common
+                       CyclicNameContext []*struct {
+                               Common
+                               CyclicNameWidth []*struct {
+                                       Common
+                                       CyclicName []*Common `xml:"cyclicName"`
+                               } `xml:"cyclicNameWidth"`
+                       } `xml:"cyclicNameContext"`
+               } `xml:"cyclicNameSet"`
+       } `xml:"cyclicNameSets"`
+       DateFormats *struct {
+               Common
+               DateFormatLength []*struct {
+                       Common
+                       DateFormat []*struct {
+                               Common
+                               Pattern []*struct {
+                                       Common
+                                       Numbers string `xml:"numbers,attr"`
+                                       Count   string `xml:"count,attr"`
+                               } `xml:"pattern"`
+                               DisplayName []*struct {
+                                       Common
+                                       Count string `xml:"count,attr"`
+                               } `xml:"displayName"`
+                       } `xml:"dateFormat"`
+               } `xml:"dateFormatLength"`
+       } `xml:"dateFormats"`
+       TimeFormats *struct {
+               Common
+               TimeFormatLength []*struct {
+                       Common
+                       TimeFormat []*struct {
+                               Common
+                               Pattern []*struct {
+                                       Common
+                                       Numbers string `xml:"numbers,attr"`
+                                       Count   string `xml:"count,attr"`
+                               } `xml:"pattern"`
+                               DisplayName []*struct {
+                                       Common
+                                       Count string `xml:"count,attr"`
+                               } `xml:"displayName"`
+                       } `xml:"timeFormat"`
+               } `xml:"timeFormatLength"`
+       } `xml:"timeFormats"`
+       DateTimeFormats *struct {
+               Common
+               DateTimeFormatLength []*struct {
+                       Common
+                       DateTimeFormat []*struct {
+                               Common
+                               Pattern []*struct {
+                                       Common
+                                       Numbers string `xml:"numbers,attr"`
+                                       Count   string `xml:"count,attr"`
+                               } `xml:"pattern"`
+                               DisplayName []*struct {
+                                       Common
+                                       Count string `xml:"count,attr"`
+                               } `xml:"displayName"`
+                       } `xml:"dateTimeFormat"`
+               } `xml:"dateTimeFormatLength"`
+               AvailableFormats []*struct {
+                       Common
+                       DateFormatItem []*struct {
+                               Common
+                               Id    string `xml:"id,attr"`
+                               Count string `xml:"count,attr"`
+                       } `xml:"dateFormatItem"`
+               } `xml:"availableFormats"`
+               AppendItems []*struct {
+                       Common
+                       AppendItem []*struct {
+                               Common
+                               Request string `xml:"request,attr"`
+                       } `xml:"appendItem"`
+               } `xml:"appendItems"`
+               IntervalFormats []*struct {
+                       Common
+                       IntervalFormatFallback []*Common `xml:"intervalFormatFallback"`
+                       IntervalFormatItem     []*struct {
+                               Common
+                               Id                 string `xml:"id,attr"`
+                               GreatestDifference []*struct {
+                                       Common
+                                       Id string `xml:"id,attr"`
+                               } `xml:"greatestDifference"`
+                       } `xml:"intervalFormatItem"`
+               } `xml:"intervalFormats"`
+       } `xml:"dateTimeFormats"`
+       Fields []*struct {
+               Common
+               Field []*struct {
+                       Common
+                       DisplayName []*struct {
+                               Common
+                               Count string `xml:"count,attr"`
+                       } `xml:"displayName"`
+                       Relative     []*Common `xml:"relative"`
+                       RelativeTime []*struct {
+                               Common
+                               RelativeTimePattern []*struct {
+                                       Common
+                                       Count string `xml:"count,attr"`
+                               } `xml:"relativeTimePattern"`
+                       } `xml:"relativeTime"`
+                       RelativePeriod []*Common `xml:"relativePeriod"`
+               } `xml:"field"`
+       } `xml:"fields"`
+}
+type TimeZoneNames struct {
+       Common
+       HourFormat           []*Common `xml:"hourFormat"`
+       HoursFormat          []*Common `xml:"hoursFormat"`
+       GmtFormat            []*Common `xml:"gmtFormat"`
+       GmtZeroFormat        []*Common `xml:"gmtZeroFormat"`
+       RegionFormat         []*Common `xml:"regionFormat"`
+       FallbackFormat       []*Common `xml:"fallbackFormat"`
+       FallbackRegionFormat []*Common `xml:"fallbackRegionFormat"`
+       AbbreviationFallback []*Common `xml:"abbreviationFallback"`
+       PreferenceOrdering   []*Common `xml:"preferenceOrdering"`
+       SingleCountries      []*struct {
+               Common
+               List string `xml:"list,attr"`
+       } `xml:"singleCountries"`
+       Zone []*struct {
+               Common
+               Long []*struct {
+                       Common
+                       Generic  []*Common `xml:"generic"`
+                       Standard []*Common `xml:"standard"`
+                       Daylight []*Common `xml:"daylight"`
+               } `xml:"long"`
+               Short []*struct {
+                       Common
+                       Generic  []*Common `xml:"generic"`
+                       Standard []*Common `xml:"standard"`
+                       Daylight []*Common `xml:"daylight"`
+               } `xml:"short"`
+               CommonlyUsed []*struct {
+                       Common
+                       Used string `xml:"used,attr"`
+               } `xml:"commonlyUsed"`
+               ExemplarCity []*Common `xml:"exemplarCity"`
+       } `xml:"zone"`
+       Metazone []*struct {
+               Common
+               Long []*struct {
+                       Common
+                       Generic  []*Common `xml:"generic"`
+                       Standard []*Common `xml:"standard"`
+                       Daylight []*Common `xml:"daylight"`
+               } `xml:"long"`
+               Short []*struct {
+                       Common
+                       Generic  []*Common `xml:"generic"`
+                       Standard []*Common `xml:"standard"`
+                       Daylight []*Common `xml:"daylight"`
+               } `xml:"short"`
+               CommonlyUsed []*struct {
+                       Common
+                       Used string `xml:"used,attr"`
+               } `xml:"commonlyUsed"`
+       } `xml:"metazone"`
+}
+
+// LocaleDisplayNames specifies localized display names for for scripts, languages,
+// countries, currencies, and variants.
+type LocaleDisplayNames struct {
+       Common
+       LocaleDisplayPattern *struct {
+               Common
+               LocalePattern        []*Common `xml:"localePattern"`
+               LocaleSeparator      []*Common `xml:"localeSeparator"`
+               LocaleKeyTypePattern []*Common `xml:"localeKeyTypePattern"`
+       } `xml:"localeDisplayPattern"`
+       Languages *struct {
+               Common
+               Language []*Common `xml:"language"`
+       } `xml:"languages"`
+       Scripts *struct {
+               Common
+               Script []*Common `xml:"script"`
+       } `xml:"scripts"`
+       Territories *struct {
+               Common
+               Territory []*Common `xml:"territory"`
+       } `xml:"territories"`
+       Subdivisions *struct {
+               Common
+               Subdivision []*Common `xml:"subdivision"`
+       } `xml:"subdivisions"`
+       Variants *struct {
+               Common
+               Variant []*Common `xml:"variant"`
+       } `xml:"variants"`
+       Keys *struct {
+               Common
+               Key []*Common `xml:"key"`
+       } `xml:"keys"`
+       Types *struct {
+               Common
+               Type []*struct {
+                       Common
+                       Key string `xml:"key,attr"`
+               } `xml:"type"`
+       } `xml:"types"`
+       TransformNames *struct {
+               Common
+               TransformName []*Common `xml:"transformName"`
+       } `xml:"transformNames"`
+       MeasurementSystemNames *struct {
+               Common
+               MeasurementSystemName []*Common `xml:"measurementSystemName"`
+       } `xml:"measurementSystemNames"`
+       CodePatterns *struct {
+               Common
+               CodePattern []*Common `xml:"codePattern"`
+       } `xml:"codePatterns"`
+}
+
+// Numbers supplies information for formatting and parsing numbers and currencies.
+type Numbers struct {
+       Common
+       DefaultNumberingSystem []*Common `xml:"defaultNumberingSystem"`
+       OtherNumberingSystems  []*struct {
+               Common
+               Native      []*Common `xml:"native"`
+               Traditional []*Common `xml:"traditional"`
+               Finance     []*Common `xml:"finance"`
+       } `xml:"otherNumberingSystems"`
+       MinimumGroupingDigits []*Common `xml:"minimumGroupingDigits"`
+       Symbols               []*struct {
+               Common
+               NumberSystem string `xml:"numberSystem,attr"`
+               Decimal      []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"decimal"`
+               Group []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"group"`
+               List []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"list"`
+               PercentSign []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"percentSign"`
+               NativeZeroDigit []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"nativeZeroDigit"`
+               PatternDigit []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"patternDigit"`
+               PlusSign []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"plusSign"`
+               MinusSign []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"minusSign"`
+               Exponential []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"exponential"`
+               SuperscriptingExponent []*Common `xml:"superscriptingExponent"`
+               PerMille               []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"perMille"`
+               Infinity []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"infinity"`
+               Nan []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"nan"`
+               CurrencyDecimal []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"currencyDecimal"`
+               CurrencyGroup []*struct {
+                       Common
+                       NumberSystem string `xml:"numberSystem,attr"`
+               } `xml:"currencyGroup"`
+               TimeSeparator []*Common `xml:"timeSeparator"`
+       } `xml:"symbols"`
+       DecimalFormats []*struct {
+               Common
+               NumberSystem        string `xml:"numberSystem,attr"`
+               DecimalFormatLength []*struct {
+                       Common
+                       DecimalFormat []*struct {
+                               Common
+                               Pattern []*struct {
+                                       Common
+                                       Numbers string `xml:"numbers,attr"`
+                                       Count   string `xml:"count,attr"`
+                               } `xml:"pattern"`
+                       } `xml:"decimalFormat"`
+               } `xml:"decimalFormatLength"`
+       } `xml:"decimalFormats"`
+       ScientificFormats []*struct {
+               Common
+               NumberSystem           string `xml:"numberSystem,attr"`
+               ScientificFormatLength []*struct {
+                       Common
+                       ScientificFormat []*struct {
+                               Common
+                               Pattern []*struct {
+                                       Common
+                                       Numbers string `xml:"numbers,attr"`
+                                       Count   string `xml:"count,attr"`
+                               } `xml:"pattern"`
+                       } `xml:"scientificFormat"`
+               } `xml:"scientificFormatLength"`
+       } `xml:"scientificFormats"`
+       PercentFormats []*struct {
+               Common
+               NumberSystem        string `xml:"numberSystem,attr"`
+               PercentFormatLength []*struct {
+                       Common
+                       PercentFormat []*struct {
+                               Common
+                               Pattern []*struct {
+                                       Common
+                                       Numbers string `xml:"numbers,attr"`
+                                       Count   string `xml:"count,attr"`
+                               } `xml:"pattern"`
+                       } `xml:"percentFormat"`
+               } `xml:"percentFormatLength"`
+       } `xml:"percentFormats"`
+       CurrencyFormats []*struct {
+               Common
+               NumberSystem    string `xml:"numberSystem,attr"`
+               CurrencySpacing []*struct {
+                       Common
+                       BeforeCurrency []*struct {
+                               Common
+                               CurrencyMatch    []*Common `xml:"currencyMatch"`
+                               SurroundingMatch []*Common `xml:"surroundingMatch"`
+                               InsertBetween    []*Common `xml:"insertBetween"`
+                       } `xml:"beforeCurrency"`
+                       AfterCurrency []*struct {
+                               Common
+                               CurrencyMatch    []*Common `xml:"currencyMatch"`
+                               SurroundingMatch []*Common `xml:"surroundingMatch"`
+                               InsertBetween    []*Common `xml:"insertBetween"`
+                       } `xml:"afterCurrency"`
+               } `xml:"currencySpacing"`
+               CurrencyFormatLength []*struct {
+                       Common
+                       CurrencyFormat []*struct {
+                               Common
+                               Pattern []*struct {
+                                       Common
+                                       Numbers string `xml:"numbers,attr"`
+                                       Count   string `xml:"count,attr"`
+                               } `xml:"pattern"`
+                       } `xml:"currencyFormat"`
+               } `xml:"currencyFormatLength"`
+               UnitPattern []*struct {
+                       Common
+                       Count string `xml:"count,attr"`
+               } `xml:"unitPattern"`
+       } `xml:"currencyFormats"`
+       Currencies *struct {
+               Common
+               Currency []*struct {
+                       Common
+                       Pattern []*struct {
+                               Common
+                               Numbers string `xml:"numbers,attr"`
+                               Count   string `xml:"count,attr"`
+                       } `xml:"pattern"`
+                       DisplayName []*struct {
+                               Common
+                               Count string `xml:"count,attr"`
+                       } `xml:"displayName"`
+                       Symbol  []*Common `xml:"symbol"`
+                       Decimal []*struct {
+                               Common
+                               NumberSystem string `xml:"numberSystem,attr"`
+                       } `xml:"decimal"`
+                       Group []*struct {
+                               Common
+                               NumberSystem string `xml:"numberSystem,attr"`
+                       } `xml:"group"`
+               } `xml:"currency"`
+       } `xml:"currencies"`
+       MiscPatterns []*struct {
+               Common
+               NumberSystem string `xml:"numberSystem,attr"`
+               Pattern      []*struct {
+                       Common
+                       Numbers string `xml:"numbers,attr"`
+                       Count   string `xml:"count,attr"`
+               } `xml:"pattern"`
+       } `xml:"miscPatterns"`
+       MinimalPairs []*struct {
+               Common
+               PluralMinimalPairs []*struct {
+                       Common
+                       Count string `xml:"count,attr"`
+               } `xml:"pluralMinimalPairs"`
+               OrdinalMinimalPairs []*struct {
+                       Common
+                       Ordinal string `xml:"ordinal,attr"`
+               } `xml:"ordinalMinimalPairs"`
+       } `xml:"minimalPairs"`
+}
+
+// Version is the version of CLDR from which the XML definitions are generated.
+const Version = "31"
diff --git a/vendor/golang.org/x/text/unicode/norm/composition.go b/vendor/golang.org/x/text/unicode/norm/composition.go
new file mode 100644 (file)
index 0000000..bab4c5d
--- /dev/null
@@ -0,0 +1,508 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package norm
+
+import "unicode/utf8"
+
+const (
+       maxNonStarters = 30
+       // The maximum number of characters needed for a buffer is
+       // maxNonStarters + 1 for the starter + 1 for the GCJ
+       maxBufferSize    = maxNonStarters + 2
+       maxNFCExpansion  = 3  // NFC(0x1D160)
+       maxNFKCExpansion = 18 // NFKC(0xFDFA)
+
+       maxByteBufferSize = utf8.UTFMax * maxBufferSize // 128
+)
+
+// ssState is used for reporting the segment state after inserting a rune.
+// It is returned by streamSafe.next.
+type ssState int
+
+const (
+       // Indicates a rune was successfully added to the segment.
+       ssSuccess ssState = iota
+       // Indicates a rune starts a new segment and should not be added.
+       ssStarter
+       // Indicates a rune caused a segment overflow and a CGJ should be inserted.
+       ssOverflow
+)
+
+// streamSafe implements the policy of when a CGJ should be inserted.
+type streamSafe uint8
+
+// first inserts the first rune of a segment. It is a faster version of next if
+// it is known p represents the first rune in a segment.
+func (ss *streamSafe) first(p Properties) {
+       *ss = streamSafe(p.nTrailingNonStarters())
+}
+
+// insert returns a ssState value to indicate whether a rune represented by p
+// can be inserted.
+func (ss *streamSafe) next(p Properties) ssState {
+       if *ss > maxNonStarters {
+               panic("streamSafe was not reset")
+       }
+       n := p.nLeadingNonStarters()
+       if *ss += streamSafe(n); *ss > maxNonStarters {
+               *ss = 0
+               return ssOverflow
+       }
+       // The Stream-Safe Text Processing prescribes that the counting can stop
+       // as soon as a starter is encountered. However, there are some starters,
+       // like Jamo V and T, that can combine with other runes, leaving their
+       // successive non-starters appended to the previous, possibly causing an
+       // overflow. We will therefore consider any rune with a non-zero nLead to
+       // be a non-starter. Note that it always hold that if nLead > 0 then
+       // nLead == nTrail.
+       if n == 0 {
+               *ss = streamSafe(p.nTrailingNonStarters())
+               return ssStarter
+       }
+       return ssSuccess
+}
+
+// backwards is used for checking for overflow and segment starts
+// when traversing a string backwards. Users do not need to call first
+// for the first rune. The state of the streamSafe retains the count of
+// the non-starters loaded.
+func (ss *streamSafe) backwards(p Properties) ssState {
+       if *ss > maxNonStarters {
+               panic("streamSafe was not reset")
+       }
+       c := *ss + streamSafe(p.nTrailingNonStarters())
+       if c > maxNonStarters {
+               return ssOverflow
+       }
+       *ss = c
+       if p.nLeadingNonStarters() == 0 {
+               return ssStarter
+       }
+       return ssSuccess
+}
+
+func (ss streamSafe) isMax() bool {
+       return ss == maxNonStarters
+}
+
+// GraphemeJoiner is inserted after maxNonStarters non-starter runes.
+const GraphemeJoiner = "\u034F"
+
+// reorderBuffer is used to normalize a single segment.  Characters inserted with
+// insert are decomposed and reordered based on CCC. The compose method can
+// be used to recombine characters.  Note that the byte buffer does not hold
+// the UTF-8 characters in order.  Only the rune array is maintained in sorted
+// order. flush writes the resulting segment to a byte array.
+type reorderBuffer struct {
+       rune  [maxBufferSize]Properties // Per character info.
+       byte  [maxByteBufferSize]byte   // UTF-8 buffer. Referenced by runeInfo.pos.
+       nbyte uint8                     // Number or bytes.
+       ss    streamSafe                // For limiting length of non-starter sequence.
+       nrune int                       // Number of runeInfos.
+       f     formInfo
+
+       src      input
+       nsrc     int
+       tmpBytes input
+
+       out    []byte
+       flushF func(*reorderBuffer) bool
+}
+
+func (rb *reorderBuffer) init(f Form, src []byte) {
+       rb.f = *formTable[f]
+       rb.src.setBytes(src)
+       rb.nsrc = len(src)
+       rb.ss = 0
+}
+
+func (rb *reorderBuffer) initString(f Form, src string) {
+       rb.f = *formTable[f]
+       rb.src.setString(src)
+       rb.nsrc = len(src)
+       rb.ss = 0
+}
+
+func (rb *reorderBuffer) setFlusher(out []byte, f func(*reorderBuffer) bool) {
+       rb.out = out
+       rb.flushF = f
+}
+
+// reset discards all characters from the buffer.
+func (rb *reorderBuffer) reset() {
+       rb.nrune = 0
+       rb.nbyte = 0
+}
+
+func (rb *reorderBuffer) doFlush() bool {
+       if rb.f.composing {
+               rb.compose()
+       }
+       res := rb.flushF(rb)
+       rb.reset()
+       return res
+}
+
+// appendFlush appends the normalized segment to rb.out.
+func appendFlush(rb *reorderBuffer) bool {
+       for i := 0; i < rb.nrune; i++ {
+               start := rb.rune[i].pos
+               end := start + rb.rune[i].size
+               rb.out = append(rb.out, rb.byte[start:end]...)
+       }
+       return true
+}
+
+// flush appends the normalized segment to out and resets rb.
+func (rb *reorderBuffer) flush(out []byte) []byte {
+       for i := 0; i < rb.nrune; i++ {
+               start := rb.rune[i].pos
+               end := start + rb.rune[i].size
+               out = append(out, rb.byte[start:end]...)
+       }
+       rb.reset()
+       return out
+}
+
+// flushCopy copies the normalized segment to buf and resets rb.
+// It returns the number of bytes written to buf.
+func (rb *reorderBuffer) flushCopy(buf []byte) int {
+       p := 0
+       for i := 0; i < rb.nrune; i++ {
+               runep := rb.rune[i]
+               p += copy(buf[p:], rb.byte[runep.pos:runep.pos+runep.size])
+       }
+       rb.reset()
+       return p
+}
+
+// insertOrdered inserts a rune in the buffer, ordered by Canonical Combining Class.
+// It returns false if the buffer is not large enough to hold the rune.
+// It is used internally by insert and insertString only.
+func (rb *reorderBuffer) insertOrdered(info Properties) {
+       n := rb.nrune
+       b := rb.rune[:]
+       cc := info.ccc
+       if cc > 0 {
+               // Find insertion position + move elements to make room.
+               for ; n > 0; n-- {
+                       if b[n-1].ccc <= cc {
+                               break
+                       }
+                       b[n] = b[n-1]
+               }
+       }
+       rb.nrune += 1
+       pos := uint8(rb.nbyte)
+       rb.nbyte += utf8.UTFMax
+       info.pos = pos
+       b[n] = info
+}
+
+// insertErr is an error code returned by insert. Using this type instead
+// of error improves performance up to 20% for many of the benchmarks.
+type insertErr int
+
+const (
+       iSuccess insertErr = -iota
+       iShortDst
+       iShortSrc
+)
+
+// insertFlush inserts the given rune in the buffer ordered by CCC.
+// If a decomposition with multiple segments are encountered, they leading
+// ones are flushed.
+// It returns a non-zero error code if the rune was not inserted.
+func (rb *reorderBuffer) insertFlush(src input, i int, info Properties) insertErr {
+       if rune := src.hangul(i); rune != 0 {
+               rb.decomposeHangul(rune)
+               return iSuccess
+       }
+       if info.hasDecomposition() {
+               return rb.insertDecomposed(info.Decomposition())
+       }
+       rb.insertSingle(src, i, info)
+       return iSuccess
+}
+
+// insertUnsafe inserts the given rune in the buffer ordered by CCC.
+// It is assumed there is sufficient space to hold the runes. It is the
+// responsibility of the caller to ensure this. This can be done by checking
+// the state returned by the streamSafe type.
+func (rb *reorderBuffer) insertUnsafe(src input, i int, info Properties) {
+       if rune := src.hangul(i); rune != 0 {
+               rb.decomposeHangul(rune)
+       }
+       if info.hasDecomposition() {
+               // TODO: inline.
+               rb.insertDecomposed(info.Decomposition())
+       } else {
+               rb.insertSingle(src, i, info)
+       }
+}
+
+// insertDecomposed inserts an entry in to the reorderBuffer for each rune
+// in dcomp. dcomp must be a sequence of decomposed UTF-8-encoded runes.
+// It flushes the buffer on each new segment start.
+func (rb *reorderBuffer) insertDecomposed(dcomp []byte) insertErr {
+       rb.tmpBytes.setBytes(dcomp)
+       // As the streamSafe accounting already handles the counting for modifiers,
+       // we don't have to call next. However, we do need to keep the accounting
+       // intact when flushing the buffer.
+       for i := 0; i < len(dcomp); {
+               info := rb.f.info(rb.tmpBytes, i)
+               if info.BoundaryBefore() && rb.nrune > 0 && !rb.doFlush() {
+                       return iShortDst
+               }
+               i += copy(rb.byte[rb.nbyte:], dcomp[i:i+int(info.size)])
+               rb.insertOrdered(info)
+       }
+       return iSuccess
+}
+
+// insertSingle inserts an entry in the reorderBuffer for the rune at
+// position i. info is the runeInfo for the rune at position i.
+func (rb *reorderBuffer) insertSingle(src input, i int, info Properties) {
+       src.copySlice(rb.byte[rb.nbyte:], i, i+int(info.size))
+       rb.insertOrdered(info)
+}
+
+// insertCGJ inserts a Combining Grapheme Joiner (0x034f) into rb.
+func (rb *reorderBuffer) insertCGJ() {
+       rb.insertSingle(input{str: GraphemeJoiner}, 0, Properties{size: uint8(len(GraphemeJoiner))})
+}
+
+// appendRune inserts a rune at the end of the buffer. It is used for Hangul.
+func (rb *reorderBuffer) appendRune(r rune) {
+       bn := rb.nbyte
+       sz := utf8.EncodeRune(rb.byte[bn:], rune(r))
+       rb.nbyte += utf8.UTFMax
+       rb.rune[rb.nrune] = Properties{pos: bn, size: uint8(sz)}
+       rb.nrune++
+}
+
+// assignRune sets a rune at position pos. It is used for Hangul and recomposition.
+func (rb *reorderBuffer) assignRune(pos int, r rune) {
+       bn := rb.rune[pos].pos
+       sz := utf8.EncodeRune(rb.byte[bn:], rune(r))
+       rb.rune[pos] = Properties{pos: bn, size: uint8(sz)}
+}
+
+// runeAt returns the rune at position n. It is used for Hangul and recomposition.
+func (rb *reorderBuffer) runeAt(n int) rune {
+       inf := rb.rune[n]
+       r, _ := utf8.DecodeRune(rb.byte[inf.pos : inf.pos+inf.size])
+       return r
+}
+
+// bytesAt returns the UTF-8 encoding of the rune at position n.
+// It is used for Hangul and recomposition.
+func (rb *reorderBuffer) bytesAt(n int) []byte {
+       inf := rb.rune[n]
+       return rb.byte[inf.pos : int(inf.pos)+int(inf.size)]
+}
+
+// For Hangul we combine algorithmically, instead of using tables.
+const (
+       hangulBase  = 0xAC00 // UTF-8(hangulBase) -> EA B0 80
+       hangulBase0 = 0xEA
+       hangulBase1 = 0xB0
+       hangulBase2 = 0x80
+
+       hangulEnd  = hangulBase + jamoLVTCount // UTF-8(0xD7A4) -> ED 9E A4
+       hangulEnd0 = 0xED
+       hangulEnd1 = 0x9E
+       hangulEnd2 = 0xA4
+
+       jamoLBase  = 0x1100 // UTF-8(jamoLBase) -> E1 84 00
+       jamoLBase0 = 0xE1
+       jamoLBase1 = 0x84
+       jamoLEnd   = 0x1113
+       jamoVBase  = 0x1161
+       jamoVEnd   = 0x1176
+       jamoTBase  = 0x11A7
+       jamoTEnd   = 0x11C3
+
+       jamoTCount   = 28
+       jamoVCount   = 21
+       jamoVTCount  = 21 * 28
+       jamoLVTCount = 19 * 21 * 28
+)
+
+const hangulUTF8Size = 3
+
+func isHangul(b []byte) bool {
+       if len(b) < hangulUTF8Size {
+               return false
+       }
+       b0 := b[0]
+       if b0 < hangulBase0 {
+               return false
+       }
+       b1 := b[1]
+       switch {
+       case b0 == hangulBase0:
+               return b1 >= hangulBase1
+       case b0 < hangulEnd0:
+               return true
+       case b0 > hangulEnd0:
+               return false
+       case b1 < hangulEnd1:
+               return true
+       }
+       return b1 == hangulEnd1 && b[2] < hangulEnd2
+}
+
+func isHangulString(b string) bool {
+       if len(b) < hangulUTF8Size {
+               return false
+       }
+       b0 := b[0]
+       if b0 < hangulBase0 {
+               return false
+       }
+       b1 := b[1]
+       switch {
+       case b0 == hangulBase0:
+               return b1 >= hangulBase1
+       case b0 < hangulEnd0:
+               return true
+       case b0 > hangulEnd0:
+               return false
+       case b1 < hangulEnd1:
+               return true
+       }
+       return b1 == hangulEnd1 && b[2] < hangulEnd2
+}
+
+// Caller must ensure len(b) >= 2.
+func isJamoVT(b []byte) bool {
+       // True if (rune & 0xff00) == jamoLBase
+       return b[0] == jamoLBase0 && (b[1]&0xFC) == jamoLBase1
+}
+
+func isHangulWithoutJamoT(b []byte) bool {
+       c, _ := utf8.DecodeRune(b)
+       c -= hangulBase
+       return c < jamoLVTCount && c%jamoTCount == 0
+}
+
+// decomposeHangul writes the decomposed Hangul to buf and returns the number
+// of bytes written.  len(buf) should be at least 9.
+func decomposeHangul(buf []byte, r rune) int {
+       const JamoUTF8Len = 3
+       r -= hangulBase
+       x := r % jamoTCount
+       r /= jamoTCount
+       utf8.EncodeRune(buf, jamoLBase+r/jamoVCount)
+       utf8.EncodeRune(buf[JamoUTF8Len:], jamoVBase+r%jamoVCount)
+       if x != 0 {
+               utf8.EncodeRune(buf[2*JamoUTF8Len:], jamoTBase+x)
+               return 3 * JamoUTF8Len
+       }
+       return 2 * JamoUTF8Len
+}
+
+// decomposeHangul algorithmically decomposes a Hangul rune into
+// its Jamo components.
+// See http://unicode.org/reports/tr15/#Hangul for details on decomposing Hangul.
+func (rb *reorderBuffer) decomposeHangul(r rune) {
+       r -= hangulBase
+       x := r % jamoTCount
+       r /= jamoTCount
+       rb.appendRune(jamoLBase + r/jamoVCount)
+       rb.appendRune(jamoVBase + r%jamoVCount)
+       if x != 0 {
+               rb.appendRune(jamoTBase + x)
+       }
+}
+
+// combineHangul algorithmically combines Jamo character components into Hangul.
+// See http://unicode.org/reports/tr15/#Hangul for details on combining Hangul.
+func (rb *reorderBuffer) combineHangul(s, i, k int) {
+       b := rb.rune[:]
+       bn := rb.nrune
+       for ; i < bn; i++ {
+               cccB := b[k-1].ccc
+               cccC := b[i].ccc
+               if cccB == 0 {
+                       s = k - 1
+               }
+               if s != k-1 && cccB >= cccC {
+                       // b[i] is blocked by greater-equal cccX below it
+                       b[k] = b[i]
+                       k++
+               } else {
+                       l := rb.runeAt(s) // also used to compare to hangulBase
+                       v := rb.runeAt(i) // also used to compare to jamoT
+                       switch {
+                       case jamoLBase <= l && l < jamoLEnd &&
+                               jamoVBase <= v && v < jamoVEnd:
+                               // 11xx plus 116x to LV
+                               rb.assignRune(s, hangulBase+
+                                       (l-jamoLBase)*jamoVTCount+(v-jamoVBase)*jamoTCount)
+                       case hangulBase <= l && l < hangulEnd &&
+                               jamoTBase < v && v < jamoTEnd &&
+                               ((l-hangulBase)%jamoTCount) == 0:
+                               // ACxx plus 11Ax to LVT
+                               rb.assignRune(s, l+v-jamoTBase)
+                       default:
+                               b[k] = b[i]
+                               k++
+                       }
+               }
+       }
+       rb.nrune = k
+}
+
+// compose recombines the runes in the buffer.
+// It should only be used to recompose a single segment, as it will not
+// handle alternations between Hangul and non-Hangul characters correctly.
+func (rb *reorderBuffer) compose() {
+       // UAX #15, section X5 , including Corrigendum #5
+       // "In any character sequence beginning with starter S, a character C is
+       //  blocked from S if and only if there is some character B between S
+       //  and C, and either B is a starter or it has the same or higher
+       //  combining class as C."
+       bn := rb.nrune
+       if bn == 0 {
+               return
+       }
+       k := 1
+       b := rb.rune[:]
+       for s, i := 0, 1; i < bn; i++ {
+               if isJamoVT(rb.bytesAt(i)) {
+                       // Redo from start in Hangul mode. Necessary to support
+                       // U+320E..U+321E in NFKC mode.
+                       rb.combineHangul(s, i, k)
+                       return
+               }
+               ii := b[i]
+               // We can only use combineForward as a filter if we later
+               // get the info for the combined character. This is more
+               // expensive than using the filter. Using combinesBackward()
+               // is safe.
+               if ii.combinesBackward() {
+                       cccB := b[k-1].ccc
+                       cccC := ii.ccc
+                       blocked := false // b[i] blocked by starter or greater or equal CCC?
+                       if cccB == 0 {
+                               s = k - 1
+                       } else {
+                               blocked = s != k-1 && cccB >= cccC
+                       }
+                       if !blocked {
+                               combined := combine(rb.runeAt(s), rb.runeAt(i))
+                               if combined != 0 {
+                                       rb.assignRune(s, combined)
+                                       continue
+                               }
+                       }
+               }
+               b[k] = b[i]
+               k++
+       }
+       rb.nrune = k
+}
diff --git a/vendor/golang.org/x/text/unicode/norm/forminfo.go b/vendor/golang.org/x/text/unicode/norm/forminfo.go
new file mode 100644 (file)
index 0000000..e67e765
--- /dev/null
@@ -0,0 +1,259 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package norm
+
+// This file contains Form-specific logic and wrappers for data in tables.go.
+
+// Rune info is stored in a separate trie per composing form. A composing form
+// and its corresponding decomposing form share the same trie.  Each trie maps
+// a rune to a uint16. The values take two forms.  For v >= 0x8000:
+//   bits
+//   15:    1 (inverse of NFD_QC bit of qcInfo)
+//   13..7: qcInfo (see below). isYesD is always true (no decompostion).
+//    6..0: ccc (compressed CCC value).
+// For v < 0x8000, the respective rune has a decomposition and v is an index
+// into a byte array of UTF-8 decomposition sequences and additional info and
+// has the form:
+//    <header> <decomp_byte>* [<tccc> [<lccc>]]
+// The header contains the number of bytes in the decomposition (excluding this
+// length byte). The two most significant bits of this length byte correspond
+// to bit 5 and 4 of qcInfo (see below).  The byte sequence itself starts at v+1.
+// The byte sequence is followed by a trailing and leading CCC if the values
+// for these are not zero.  The value of v determines which ccc are appended
+// to the sequences.  For v < firstCCC, there are none, for v >= firstCCC,
+// the sequence is followed by a trailing ccc, and for v >= firstLeadingCC
+// there is an additional leading ccc. The value of tccc itself is the
+// trailing CCC shifted left 2 bits. The two least-significant bits of tccc
+// are the number of trailing non-starters.
+
+const (
+       qcInfoMask      = 0x3F // to clear all but the relevant bits in a qcInfo
+       headerLenMask   = 0x3F // extract the length value from the header byte
+       headerFlagsMask = 0xC0 // extract the qcInfo bits from the header byte
+)
+
+// Properties provides access to normalization properties of a rune.
+type Properties struct {
+       pos   uint8  // start position in reorderBuffer; used in composition.go
+       size  uint8  // length of UTF-8 encoding of this rune
+       ccc   uint8  // leading canonical combining class (ccc if not decomposition)
+       tccc  uint8  // trailing canonical combining class (ccc if not decomposition)
+       nLead uint8  // number of leading non-starters.
+       flags qcInfo // quick check flags
+       index uint16
+}
+
+// functions dispatchable per form
+type lookupFunc func(b input, i int) Properties
+
+// formInfo holds Form-specific functions and tables.
+type formInfo struct {
+       form                     Form
+       composing, compatibility bool // form type
+       info                     lookupFunc
+       nextMain                 iterFunc
+}
+
+var formTable = []*formInfo{{
+       form:          NFC,
+       composing:     true,
+       compatibility: false,
+       info:          lookupInfoNFC,
+       nextMain:      nextComposed,
+}, {
+       form:          NFD,
+       composing:     false,
+       compatibility: false,
+       info:          lookupInfoNFC,
+       nextMain:      nextDecomposed,
+}, {
+       form:          NFKC,
+       composing:     true,
+       compatibility: true,
+       info:          lookupInfoNFKC,
+       nextMain:      nextComposed,
+}, {
+       form:          NFKD,
+       composing:     false,
+       compatibility: true,
+       info:          lookupInfoNFKC,
+       nextMain:      nextDecomposed,
+}}
+
+// We do not distinguish between boundaries for NFC, NFD, etc. to avoid
+// unexpected behavior for the user.  For example, in NFD, there is a boundary
+// after 'a'.  However, 'a' might combine with modifiers, so from the application's
+// perspective it is not a good boundary. We will therefore always use the
+// boundaries for the combining variants.
+
+// BoundaryBefore returns true if this rune starts a new segment and
+// cannot combine with any rune on the left.
+func (p Properties) BoundaryBefore() bool {
+       if p.ccc == 0 && !p.combinesBackward() {
+               return true
+       }
+       // We assume that the CCC of the first character in a decomposition
+       // is always non-zero if different from info.ccc and that we can return
+       // false at this point. This is verified by maketables.
+       return false
+}
+
+// BoundaryAfter returns true if runes cannot combine with or otherwise
+// interact with this or previous runes.
+func (p Properties) BoundaryAfter() bool {
+       // TODO: loosen these conditions.
+       return p.isInert()
+}
+
+// We pack quick check data in 4 bits:
+//   5:    Combines forward  (0 == false, 1 == true)
+//   4..3: NFC_QC Yes(00), No (10), or Maybe (11)
+//   2:    NFD_QC Yes (0) or No (1). No also means there is a decomposition.
+//   1..0: Number of trailing non-starters.
+//
+// When all 4 bits are zero, the character is inert, meaning it is never
+// influenced by normalization.
+type qcInfo uint8
+
+func (p Properties) isYesC() bool { return p.flags&0x10 == 0 }
+func (p Properties) isYesD() bool { return p.flags&0x4 == 0 }
+
+func (p Properties) combinesForward() bool  { return p.flags&0x20 != 0 }
+func (p Properties) combinesBackward() bool { return p.flags&0x8 != 0 } // == isMaybe
+func (p Properties) hasDecomposition() bool { return p.flags&0x4 != 0 } // == isNoD
+
+func (p Properties) isInert() bool {
+       return p.flags&qcInfoMask == 0 && p.ccc == 0
+}
+
+func (p Properties) multiSegment() bool {
+       return p.index >= firstMulti && p.index < endMulti
+}
+
+func (p Properties) nLeadingNonStarters() uint8 {
+       return p.nLead
+}
+
+func (p Properties) nTrailingNonStarters() uint8 {
+       return uint8(p.flags & 0x03)
+}
+
+// Decomposition returns the decomposition for the underlying rune
+// or nil if there is none.
+func (p Properties) Decomposition() []byte {
+       // TODO: create the decomposition for Hangul?
+       if p.index == 0 {
+               return nil
+       }
+       i := p.index
+       n := decomps[i] & headerLenMask
+       i++
+       return decomps[i : i+uint16(n)]
+}
+
+// Size returns the length of UTF-8 encoding of the rune.
+func (p Properties) Size() int {
+       return int(p.size)
+}
+
+// CCC returns the canonical combining class of the underlying rune.
+func (p Properties) CCC() uint8 {
+       if p.index >= firstCCCZeroExcept {
+               return 0
+       }
+       return ccc[p.ccc]
+}
+
+// LeadCCC returns the CCC of the first rune in the decomposition.
+// If there is no decomposition, LeadCCC equals CCC.
+func (p Properties) LeadCCC() uint8 {
+       return ccc[p.ccc]
+}
+
+// TrailCCC returns the CCC of the last rune in the decomposition.
+// If there is no decomposition, TrailCCC equals CCC.
+func (p Properties) TrailCCC() uint8 {
+       return ccc[p.tccc]
+}
+
+// Recomposition
+// We use 32-bit keys instead of 64-bit for the two codepoint keys.
+// This clips off the bits of three entries, but we know this will not
+// result in a collision. In the unlikely event that changes to
+// UnicodeData.txt introduce collisions, the compiler will catch it.
+// Note that the recomposition map for NFC and NFKC are identical.
+
+// combine returns the combined rune or 0 if it doesn't exist.
+func combine(a, b rune) rune {
+       key := uint32(uint16(a))<<16 + uint32(uint16(b))
+       return recompMap[key]
+}
+
+func lookupInfoNFC(b input, i int) Properties {
+       v, sz := b.charinfoNFC(i)
+       return compInfo(v, sz)
+}
+
+func lookupInfoNFKC(b input, i int) Properties {
+       v, sz := b.charinfoNFKC(i)
+       return compInfo(v, sz)
+}
+
+// Properties returns properties for the first rune in s.
+func (f Form) Properties(s []byte) Properties {
+       if f == NFC || f == NFD {
+               return compInfo(nfcData.lookup(s))
+       }
+       return compInfo(nfkcData.lookup(s))
+}
+
+// PropertiesString returns properties for the first rune in s.
+func (f Form) PropertiesString(s string) Properties {
+       if f == NFC || f == NFD {
+               return compInfo(nfcData.lookupString(s))
+       }
+       return compInfo(nfkcData.lookupString(s))
+}
+
+// compInfo converts the information contained in v and sz
+// to a Properties.  See the comment at the top of the file
+// for more information on the format.
+func compInfo(v uint16, sz int) Properties {
+       if v == 0 {
+               return Properties{size: uint8(sz)}
+       } else if v >= 0x8000 {
+               p := Properties{
+                       size:  uint8(sz),
+                       ccc:   uint8(v),
+                       tccc:  uint8(v),
+                       flags: qcInfo(v >> 8),
+               }
+               if p.ccc > 0 || p.combinesBackward() {
+                       p.nLead = uint8(p.flags & 0x3)
+               }
+               return p
+       }
+       // has decomposition
+       h := decomps[v]
+       f := (qcInfo(h&headerFlagsMask) >> 2) | 0x4
+       p := Properties{size: uint8(sz), flags: f, index: v}
+       if v >= firstCCC {
+               v += uint16(h&headerLenMask) + 1
+               c := decomps[v]
+               p.tccc = c >> 2
+               p.flags |= qcInfo(c & 0x3)
+               if v >= firstLeadingCCC {
+                       p.nLead = c & 0x3
+                       if v >= firstStarterWithNLead {
+                               // We were tricked. Remove the decomposition.
+                               p.flags &= 0x03
+                               p.index = 0
+                               return p
+                       }
+                       p.ccc = decomps[v+1]
+               }
+       }
+       return p
+}
diff --git a/vendor/golang.org/x/text/unicode/norm/input.go b/vendor/golang.org/x/text/unicode/norm/input.go
new file mode 100644 (file)
index 0000000..479e35b
--- /dev/null
@@ -0,0 +1,109 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package norm
+
+import "unicode/utf8"
+
+type input struct {
+       str   string
+       bytes []byte
+}
+
+func inputBytes(str []byte) input {
+       return input{bytes: str}
+}
+
+func inputString(str string) input {
+       return input{str: str}
+}
+
+func (in *input) setBytes(str []byte) {
+       in.str = ""
+       in.bytes = str
+}
+
+func (in *input) setString(str string) {
+       in.str = str
+       in.bytes = nil
+}
+
+func (in *input) _byte(p int) byte {
+       if in.bytes == nil {
+               return in.str[p]
+       }
+       return in.bytes[p]
+}
+
+func (in *input) skipASCII(p, max int) int {
+       if in.bytes == nil {
+               for ; p < max && in.str[p] < utf8.RuneSelf; p++ {
+               }
+       } else {
+               for ; p < max && in.bytes[p] < utf8.RuneSelf; p++ {
+               }
+       }
+       return p
+}
+
+func (in *input) skipContinuationBytes(p int) int {
+       if in.bytes == nil {
+               for ; p < len(in.str) && !utf8.RuneStart(in.str[p]); p++ {
+               }
+       } else {
+               for ; p < len(in.bytes) && !utf8.RuneStart(in.bytes[p]); p++ {
+               }
+       }
+       return p
+}
+
+func (in *input) appendSlice(buf []byte, b, e int) []byte {
+       if in.bytes != nil {
+               return append(buf, in.bytes[b:e]...)
+       }
+       for i := b; i < e; i++ {
+               buf = append(buf, in.str[i])
+       }
+       return buf
+}
+
+func (in *input) copySlice(buf []byte, b, e int) int {
+       if in.bytes == nil {
+               return copy(buf, in.str[b:e])
+       }
+       return copy(buf, in.bytes[b:e])
+}
+
+func (in *input) charinfoNFC(p int) (uint16, int) {
+       if in.bytes == nil {
+               return nfcData.lookupString(in.str[p:])
+       }
+       return nfcData.lookup(in.bytes[p:])
+}
+
+func (in *input) charinfoNFKC(p int) (uint16, int) {
+       if in.bytes == nil {
+               return nfkcData.lookupString(in.str[p:])
+       }
+       return nfkcData.lookup(in.bytes[p:])
+}
+
+func (in *input) hangul(p int) (r rune) {
+       var size int
+       if in.bytes == nil {
+               if !isHangulString(in.str[p:]) {
+                       return 0
+               }
+               r, size = utf8.DecodeRuneInString(in.str[p:])
+       } else {
+               if !isHangul(in.bytes[p:]) {
+                       return 0
+               }
+               r, size = utf8.DecodeRune(in.bytes[p:])
+       }
+       if size != hangulUTF8Size {
+               return 0
+       }
+       return r
+}
diff --git a/vendor/golang.org/x/text/unicode/norm/iter.go b/vendor/golang.org/x/text/unicode/norm/iter.go
new file mode 100644 (file)
index 0000000..ce17f96
--- /dev/null
@@ -0,0 +1,457 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package norm
+
+import (
+       "fmt"
+       "unicode/utf8"
+)
+
+// MaxSegmentSize is the maximum size of a byte buffer needed to consider any
+// sequence of starter and non-starter runes for the purpose of normalization.
+const MaxSegmentSize = maxByteBufferSize
+
+// An Iter iterates over a string or byte slice, while normalizing it
+// to a given Form.
+type Iter struct {
+       rb     reorderBuffer
+       buf    [maxByteBufferSize]byte
+       info   Properties // first character saved from previous iteration
+       next   iterFunc   // implementation of next depends on form
+       asciiF iterFunc
+
+       p        int    // current position in input source
+       multiSeg []byte // remainder of multi-segment decomposition
+}
+
+type iterFunc func(*Iter) []byte
+
+// Init initializes i to iterate over src after normalizing it to Form f.
+func (i *Iter) Init(f Form, src []byte) {
+       i.p = 0
+       if len(src) == 0 {
+               i.setDone()
+               i.rb.nsrc = 0
+               return
+       }
+       i.multiSeg = nil
+       i.rb.init(f, src)
+       i.next = i.rb.f.nextMain
+       i.asciiF = nextASCIIBytes
+       i.info = i.rb.f.info(i.rb.src, i.p)
+       i.rb.ss.first(i.info)
+}
+
+// InitString initializes i to iterate over src after normalizing it to Form f.
+func (i *Iter) InitString(f Form, src string) {
+       i.p = 0
+       if len(src) == 0 {
+               i.setDone()
+               i.rb.nsrc = 0
+               return
+       }
+       i.multiSeg = nil
+       i.rb.initString(f, src)
+       i.next = i.rb.f.nextMain
+       i.asciiF = nextASCIIString
+       i.info = i.rb.f.info(i.rb.src, i.p)
+       i.rb.ss.first(i.info)
+}
+
+// Seek sets the segment to be returned by the next call to Next to start
+// at position p.  It is the responsibility of the caller to set p to the
+// start of a segment.
+func (i *Iter) Seek(offset int64, whence int) (int64, error) {
+       var abs int64
+       switch whence {
+       case 0:
+               abs = offset
+       case 1:
+               abs = int64(i.p) + offset
+       case 2:
+               abs = int64(i.rb.nsrc) + offset
+       default:
+               return 0, fmt.Errorf("norm: invalid whence")
+       }
+       if abs < 0 {
+               return 0, fmt.Errorf("norm: negative position")
+       }
+       if int(abs) >= i.rb.nsrc {
+               i.setDone()
+               return int64(i.p), nil
+       }
+       i.p = int(abs)
+       i.multiSeg = nil
+       i.next = i.rb.f.nextMain
+       i.info = i.rb.f.info(i.rb.src, i.p)
+       i.rb.ss.first(i.info)
+       return abs, nil
+}
+
+// returnSlice returns a slice of the underlying input type as a byte slice.
+// If the underlying is of type []byte, it will simply return a slice.
+// If the underlying is of type string, it will copy the slice to the buffer
+// and return that.
+func (i *Iter) returnSlice(a, b int) []byte {
+       if i.rb.src.bytes == nil {
+               return i.buf[:copy(i.buf[:], i.rb.src.str[a:b])]
+       }
+       return i.rb.src.bytes[a:b]
+}
+
+// Pos returns the byte position at which the next call to Next will commence processing.
+func (i *Iter) Pos() int {
+       return i.p
+}
+
+func (i *Iter) setDone() {
+       i.next = nextDone
+       i.p = i.rb.nsrc
+}
+
+// Done returns true if there is no more input to process.
+func (i *Iter) Done() bool {
+       return i.p >= i.rb.nsrc
+}
+
+// Next returns f(i.input[i.Pos():n]), where n is a boundary of i.input.
+// For any input a and b for which f(a) == f(b), subsequent calls
+// to Next will return the same segments.
+// Modifying runes are grouped together with the preceding starter, if such a starter exists.
+// Although not guaranteed, n will typically be the smallest possible n.
+func (i *Iter) Next() []byte {
+       return i.next(i)
+}
+
+func nextASCIIBytes(i *Iter) []byte {
+       p := i.p + 1
+       if p >= i.rb.nsrc {
+               i.setDone()
+               return i.rb.src.bytes[i.p:p]
+       }
+       if i.rb.src.bytes[p] < utf8.RuneSelf {
+               p0 := i.p
+               i.p = p
+               return i.rb.src.bytes[p0:p]
+       }
+       i.info = i.rb.f.info(i.rb.src, i.p)
+       i.next = i.rb.f.nextMain
+       return i.next(i)
+}
+
+func nextASCIIString(i *Iter) []byte {
+       p := i.p + 1
+       if p >= i.rb.nsrc {
+               i.buf[0] = i.rb.src.str[i.p]
+               i.setDone()
+               return i.buf[:1]
+       }
+       if i.rb.src.str[p] < utf8.RuneSelf {
+               i.buf[0] = i.rb.src.str[i.p]
+               i.p = p
+               return i.buf[:1]
+       }
+       i.info = i.rb.f.info(i.rb.src, i.p)
+       i.next = i.rb.f.nextMain
+       return i.next(i)
+}
+
+func nextHangul(i *Iter) []byte {
+       p := i.p
+       next := p + hangulUTF8Size
+       if next >= i.rb.nsrc {
+               i.setDone()
+       } else if i.rb.src.hangul(next) == 0 {
+               i.rb.ss.next(i.info)
+               i.info = i.rb.f.info(i.rb.src, i.p)
+               i.next = i.rb.f.nextMain
+               return i.next(i)
+       }
+       i.p = next
+       return i.buf[:decomposeHangul(i.buf[:], i.rb.src.hangul(p))]
+}
+
+func nextDone(i *Iter) []byte {
+       return nil
+}
+
+// nextMulti is used for iterating over multi-segment decompositions
+// for decomposing normal forms.
+func nextMulti(i *Iter) []byte {
+       j := 0
+       d := i.multiSeg
+       // skip first rune
+       for j = 1; j < len(d) && !utf8.RuneStart(d[j]); j++ {
+       }
+       for j < len(d) {
+               info := i.rb.f.info(input{bytes: d}, j)
+               if info.BoundaryBefore() {
+                       i.multiSeg = d[j:]
+                       return d[:j]
+               }
+               j += int(info.size)
+       }
+       // treat last segment as normal decomposition
+       i.next = i.rb.f.nextMain
+       return i.next(i)
+}
+
+// nextMultiNorm is used for iterating over multi-segment decompositions
+// for composing normal forms.
+func nextMultiNorm(i *Iter) []byte {
+       j := 0
+       d := i.multiSeg
+       for j < len(d) {
+               info := i.rb.f.info(input{bytes: d}, j)
+               if info.BoundaryBefore() {
+                       i.rb.compose()
+                       seg := i.buf[:i.rb.flushCopy(i.buf[:])]
+                       i.rb.insertUnsafe(input{bytes: d}, j, info)
+                       i.multiSeg = d[j+int(info.size):]
+                       return seg
+               }
+               i.rb.insertUnsafe(input{bytes: d}, j, info)
+               j += int(info.size)
+       }
+       i.multiSeg = nil
+       i.next = nextComposed
+       return doNormComposed(i)
+}
+
+// nextDecomposed is the implementation of Next for forms NFD and NFKD.
+func nextDecomposed(i *Iter) (next []byte) {
+       outp := 0
+       inCopyStart, outCopyStart := i.p, 0
+       for {
+               if sz := int(i.info.size); sz <= 1 {
+                       i.rb.ss = 0
+                       p := i.p
+                       i.p++ // ASCII or illegal byte.  Either way, advance by 1.
+                       if i.p >= i.rb.nsrc {
+                               i.setDone()
+                               return i.returnSlice(p, i.p)
+                       } else if i.rb.src._byte(i.p) < utf8.RuneSelf {
+                               i.next = i.asciiF
+                               return i.returnSlice(p, i.p)
+                       }
+                       outp++
+               } else if d := i.info.Decomposition(); d != nil {
+                       // Note: If leading CCC != 0, then len(d) == 2 and last is also non-zero.
+                       // Case 1: there is a leftover to copy.  In this case the decomposition
+                       // must begin with a modifier and should always be appended.
+                       // Case 2: no leftover. Simply return d if followed by a ccc == 0 value.
+                       p := outp + len(d)
+                       if outp > 0 {
+                               i.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p)
+                               // TODO: this condition should not be possible, but we leave it
+                               // in for defensive purposes.
+                               if p > len(i.buf) {
+                                       return i.buf[:outp]
+                               }
+                       } else if i.info.multiSegment() {
+                               // outp must be 0 as multi-segment decompositions always
+                               // start a new segment.
+                               if i.multiSeg == nil {
+                                       i.multiSeg = d
+                                       i.next = nextMulti
+                                       return nextMulti(i)
+                               }
+                               // We are in the last segment.  Treat as normal decomposition.
+                               d = i.multiSeg
+                               i.multiSeg = nil
+                               p = len(d)
+                       }
+                       prevCC := i.info.tccc
+                       if i.p += sz; i.p >= i.rb.nsrc {
+                               i.setDone()
+                               i.info = Properties{} // Force BoundaryBefore to succeed.
+                       } else {
+                               i.info = i.rb.f.info(i.rb.src, i.p)
+                       }
+                       switch i.rb.ss.next(i.info) {
+                       case ssOverflow:
+                               i.next = nextCGJDecompose
+                               fallthrough
+                       case ssStarter:
+                               if outp > 0 {
+                                       copy(i.buf[outp:], d)
+                                       return i.buf[:p]
+                               }
+                               return d
+                       }
+                       copy(i.buf[outp:], d)
+                       outp = p
+                       inCopyStart, outCopyStart = i.p, outp
+                       if i.info.ccc < prevCC {
+                               goto doNorm
+                       }
+                       continue
+               } else if r := i.rb.src.hangul(i.p); r != 0 {
+                       outp = decomposeHangul(i.buf[:], r)
+                       i.p += hangulUTF8Size
+                       inCopyStart, outCopyStart = i.p, outp
+                       if i.p >= i.rb.nsrc {
+                               i.setDone()
+                               break
+                       } else if i.rb.src.hangul(i.p) != 0 {
+                               i.next = nextHangul
+                               return i.buf[:outp]
+                       }
+               } else {
+                       p := outp + sz
+                       if p > len(i.buf) {
+                               break
+                       }
+                       outp = p
+                       i.p += sz
+               }
+               if i.p >= i.rb.nsrc {
+                       i.setDone()
+                       break
+               }
+               prevCC := i.info.tccc
+               i.info = i.rb.f.info(i.rb.src, i.p)
+               if v := i.rb.ss.next(i.info); v == ssStarter {
+                       break
+               } else if v == ssOverflow {
+                       i.next = nextCGJDecompose
+                       break
+               }
+               if i.info.ccc < prevCC {
+                       goto doNorm
+               }
+       }
+       if outCopyStart == 0 {
+               return i.returnSlice(inCopyStart, i.p)
+       } else if inCopyStart < i.p {
+               i.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p)
+       }
+       return i.buf[:outp]
+doNorm:
+       // Insert what we have decomposed so far in the reorderBuffer.
+       // As we will only reorder, there will always be enough room.
+       i.rb.src.copySlice(i.buf[outCopyStart:], inCopyStart, i.p)
+       i.rb.insertDecomposed(i.buf[0:outp])
+       return doNormDecomposed(i)
+}
+
+func doNormDecomposed(i *Iter) []byte {
+       for {
+               i.rb.insertUnsafe(i.rb.src, i.p, i.info)
+               if i.p += int(i.info.size); i.p >= i.rb.nsrc {
+                       i.setDone()
+                       break
+               }
+               i.info = i.rb.f.info(i.rb.src, i.p)
+               if i.info.ccc == 0 {
+                       break
+               }
+               if s := i.rb.ss.next(i.info); s == ssOverflow {
+                       i.next = nextCGJDecompose
+                       break
+               }
+       }
+       // new segment or too many combining characters: exit normalization
+       return i.buf[:i.rb.flushCopy(i.buf[:])]
+}
+
+func nextCGJDecompose(i *Iter) []byte {
+       i.rb.ss = 0
+       i.rb.insertCGJ()
+       i.next = nextDecomposed
+       i.rb.ss.first(i.info)
+       buf := doNormDecomposed(i)
+       return buf
+}
+
+// nextComposed is the implementation of Next for forms NFC and NFKC.
+func nextComposed(i *Iter) []byte {
+       outp, startp := 0, i.p
+       var prevCC uint8
+       for {
+               if !i.info.isYesC() {
+                       goto doNorm
+               }
+               prevCC = i.info.tccc
+               sz := int(i.info.size)
+               if sz == 0 {
+                       sz = 1 // illegal rune: copy byte-by-byte
+               }
+               p := outp + sz
+               if p > len(i.buf) {
+                       break
+               }
+               outp = p
+               i.p += sz
+               if i.p >= i.rb.nsrc {
+                       i.setDone()
+                       break
+               } else if i.rb.src._byte(i.p) < utf8.RuneSelf {
+                       i.rb.ss = 0
+                       i.next = i.asciiF
+                       break
+               }
+               i.info = i.rb.f.info(i.rb.src, i.p)
+               if v := i.rb.ss.next(i.info); v == ssStarter {
+                       break
+               } else if v == ssOverflow {
+                       i.next = nextCGJCompose
+                       break
+               }
+               if i.info.ccc < prevCC {
+                       goto doNorm
+               }
+       }
+       return i.returnSlice(startp, i.p)
+doNorm:
+       // reset to start position
+       i.p = startp
+       i.info = i.rb.f.info(i.rb.src, i.p)
+       i.rb.ss.first(i.info)
+       if i.info.multiSegment() {
+               d := i.info.Decomposition()
+               info := i.rb.f.info(input{bytes: d}, 0)
+               i.rb.insertUnsafe(input{bytes: d}, 0, info)
+               i.multiSeg = d[int(info.size):]
+               i.next = nextMultiNorm
+               return nextMultiNorm(i)
+       }
+       i.rb.ss.first(i.info)
+       i.rb.insertUnsafe(i.rb.src, i.p, i.info)
+       return doNormComposed(i)
+}
+
+func doNormComposed(i *Iter) []byte {
+       // First rune should already be inserted.
+       for {
+               if i.p += int(i.info.size); i.p >= i.rb.nsrc {
+                       i.setDone()
+                       break
+               }
+               i.info = i.rb.f.info(i.rb.src, i.p)
+               if s := i.rb.ss.next(i.info); s == ssStarter {
+                       break
+               } else if s == ssOverflow {
+                       i.next = nextCGJCompose
+                       break
+               }
+               i.rb.insertUnsafe(i.rb.src, i.p, i.info)
+       }
+       i.rb.compose()
+       seg := i.buf[:i.rb.flushCopy(i.buf[:])]
+       return seg
+}
+
+func nextCGJCompose(i *Iter) []byte {
+       i.rb.ss = 0 // instead of first
+       i.rb.insertCGJ()
+       i.next = nextComposed
+       // Note that we treat any rune with nLeadingNonStarters > 0 as a non-starter,
+       // even if they are not. This is particularly dubious for U+FF9E and UFF9A.
+       // If we ever change that, insert a check here.
+       i.rb.ss.first(i.info)
+       i.rb.insertUnsafe(i.rb.src, i.p, i.info)
+       return doNormComposed(i)
+}
diff --git a/vendor/golang.org/x/text/unicode/norm/maketables.go b/vendor/golang.org/x/text/unicode/norm/maketables.go
new file mode 100644 (file)
index 0000000..8d41816
--- /dev/null
@@ -0,0 +1,976 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+// Normalization table generator.
+// Data read from the web.
+// See forminfo.go for a description of the trie values associated with each rune.
+
+package main
+
+import (
+       "bytes"
+       "flag"
+       "fmt"
+       "io"
+       "log"
+       "sort"
+       "strconv"
+       "strings"
+
+       "golang.org/x/text/internal/gen"
+       "golang.org/x/text/internal/triegen"
+       "golang.org/x/text/internal/ucd"
+)
+
+func main() {
+       gen.Init()
+       loadUnicodeData()
+       compactCCC()
+       loadCompositionExclusions()
+       completeCharFields(FCanonical)
+       completeCharFields(FCompatibility)
+       computeNonStarterCounts()
+       verifyComputed()
+       printChars()
+       testDerived()
+       printTestdata()
+       makeTables()
+}
+
+var (
+       tablelist = flag.String("tables",
+               "all",
+               "comma-separated list of which tables to generate; "+
+                       "can be 'decomp', 'recomp', 'info' and 'all'")
+       test = flag.Bool("test",
+               false,
+               "test existing tables against DerivedNormalizationProps and generate test data for regression testing")
+       verbose = flag.Bool("verbose",
+               false,
+               "write data to stdout as it is parsed")
+)
+
+const MaxChar = 0x10FFFF // anything above this shouldn't exist
+
+// Quick Check properties of runes allow us to quickly
+// determine whether a rune may occur in a normal form.
+// For a given normal form, a rune may be guaranteed to occur
+// verbatim (QC=Yes), may or may not combine with another
+// rune (QC=Maybe), or may not occur (QC=No).
+type QCResult int
+
+const (
+       QCUnknown QCResult = iota
+       QCYes
+       QCNo
+       QCMaybe
+)
+
+func (r QCResult) String() string {
+       switch r {
+       case QCYes:
+               return "Yes"
+       case QCNo:
+               return "No"
+       case QCMaybe:
+               return "Maybe"
+       }
+       return "***UNKNOWN***"
+}
+
+const (
+       FCanonical     = iota // NFC or NFD
+       FCompatibility        // NFKC or NFKD
+       FNumberOfFormTypes
+)
+
+const (
+       MComposed   = iota // NFC or NFKC
+       MDecomposed        // NFD or NFKD
+       MNumberOfModes
+)
+
+// This contains only the properties we're interested in.
+type Char struct {
+       name          string
+       codePoint     rune  // if zero, this index is not a valid code point.
+       ccc           uint8 // canonical combining class
+       origCCC       uint8
+       excludeInComp bool // from CompositionExclusions.txt
+       compatDecomp  bool // it has a compatibility expansion
+
+       nTrailingNonStarters uint8
+       nLeadingNonStarters  uint8 // must be equal to trailing if non-zero
+
+       forms [FNumberOfFormTypes]FormInfo // For FCanonical and FCompatibility
+
+       state State
+}
+
+var chars = make([]Char, MaxChar+1)
+var cccMap = make(map[uint8]uint8)
+
+func (c Char) String() string {
+       buf := new(bytes.Buffer)
+
+       fmt.Fprintf(buf, "%U [%s]:\n", c.codePoint, c.name)
+       fmt.Fprintf(buf, "  ccc: %v\n", c.ccc)
+       fmt.Fprintf(buf, "  excludeInComp: %v\n", c.excludeInComp)
+       fmt.Fprintf(buf, "  compatDecomp: %v\n", c.compatDecomp)
+       fmt.Fprintf(buf, "  state: %v\n", c.state)
+       fmt.Fprintf(buf, "  NFC:\n")
+       fmt.Fprint(buf, c.forms[FCanonical])
+       fmt.Fprintf(buf, "  NFKC:\n")
+       fmt.Fprint(buf, c.forms[FCompatibility])
+
+       return buf.String()
+}
+
+// In UnicodeData.txt, some ranges are marked like this:
+//     3400;<CJK Ideograph Extension A, First>;Lo;0;L;;;;;N;;;;;
+//     4DB5;<CJK Ideograph Extension A, Last>;Lo;0;L;;;;;N;;;;;
+// parseCharacter keeps a state variable indicating the weirdness.
+type State int
+
+const (
+       SNormal State = iota // known to be zero for the type
+       SFirst
+       SLast
+       SMissing
+)
+
+var lastChar = rune('\u0000')
+
+func (c Char) isValid() bool {
+       return c.codePoint != 0 && c.state != SMissing
+}
+
+type FormInfo struct {
+       quickCheck [MNumberOfModes]QCResult // index: MComposed or MDecomposed
+       verified   [MNumberOfModes]bool     // index: MComposed or MDecomposed
+
+       combinesForward  bool // May combine with rune on the right
+       combinesBackward bool // May combine with rune on the left
+       isOneWay         bool // Never appears in result
+       inDecomp         bool // Some decompositions result in this char.
+       decomp           Decomposition
+       expandedDecomp   Decomposition
+}
+
+func (f FormInfo) String() string {
+       buf := bytes.NewBuffer(make([]byte, 0))
+
+       fmt.Fprintf(buf, "    quickCheck[C]: %v\n", f.quickCheck[MComposed])
+       fmt.Fprintf(buf, "    quickCheck[D]: %v\n", f.quickCheck[MDecomposed])
+       fmt.Fprintf(buf, "    cmbForward: %v\n", f.combinesForward)
+       fmt.Fprintf(buf, "    cmbBackward: %v\n", f.combinesBackward)
+       fmt.Fprintf(buf, "    isOneWay: %v\n", f.isOneWay)
+       fmt.Fprintf(buf, "    inDecomp: %v\n", f.inDecomp)
+       fmt.Fprintf(buf, "    decomposition: %X\n", f.decomp)
+       fmt.Fprintf(buf, "    expandedDecomp: %X\n", f.expandedDecomp)
+
+       return buf.String()
+}
+
+type Decomposition []rune
+
+func parseDecomposition(s string, skipfirst bool) (a []rune, err error) {
+       decomp := strings.Split(s, " ")
+       if len(decomp) > 0 && skipfirst {
+               decomp = decomp[1:]
+       }
+       for _, d := range decomp {
+               point, err := strconv.ParseUint(d, 16, 64)
+               if err != nil {
+                       return a, err
+               }
+               a = append(a, rune(point))
+       }
+       return a, nil
+}
+
+func loadUnicodeData() {
+       f := gen.OpenUCDFile("UnicodeData.txt")
+       defer f.Close()
+       p := ucd.New(f)
+       for p.Next() {
+               r := p.Rune(ucd.CodePoint)
+               char := &chars[r]
+
+               char.ccc = uint8(p.Uint(ucd.CanonicalCombiningClass))
+               decmap := p.String(ucd.DecompMapping)
+
+               exp, err := parseDecomposition(decmap, false)
+               isCompat := false
+               if err != nil {
+                       if len(decmap) > 0 {
+                               exp, err = parseDecomposition(decmap, true)
+                               if err != nil {
+                                       log.Fatalf(`%U: bad decomp |%v|: "%s"`, r, decmap, err)
+                               }
+                               isCompat = true
+                       }
+               }
+
+               char.name = p.String(ucd.Name)
+               char.codePoint = r
+               char.forms[FCompatibility].decomp = exp
+               if !isCompat {
+                       char.forms[FCanonical].decomp = exp
+               } else {
+                       char.compatDecomp = true
+               }
+               if len(decmap) > 0 {
+                       char.forms[FCompatibility].decomp = exp
+               }
+       }
+       if err := p.Err(); err != nil {
+               log.Fatal(err)
+       }
+}
+
+// compactCCC converts the sparse set of CCC values to a continguous one,
+// reducing the number of bits needed from 8 to 6.
+func compactCCC() {
+       m := make(map[uint8]uint8)
+       for i := range chars {
+               c := &chars[i]
+               m[c.ccc] = 0
+       }
+       cccs := []int{}
+       for v, _ := range m {
+               cccs = append(cccs, int(v))
+       }
+       sort.Ints(cccs)
+       for i, c := range cccs {
+               cccMap[uint8(i)] = uint8(c)
+               m[uint8(c)] = uint8(i)
+       }
+       for i := range chars {
+               c := &chars[i]
+               c.origCCC = c.ccc
+               c.ccc = m[c.ccc]
+       }
+       if len(m) >= 1<<6 {
+               log.Fatalf("too many difference CCC values: %d >= 64", len(m))
+       }
+}
+
+// CompositionExclusions.txt has form:
+// 0958    # ...
+// See http://unicode.org/reports/tr44/ for full explanation
+func loadCompositionExclusions() {
+       f := gen.OpenUCDFile("CompositionExclusions.txt")
+       defer f.Close()
+       p := ucd.New(f)
+       for p.Next() {
+               c := &chars[p.Rune(0)]
+               if c.excludeInComp {
+                       log.Fatalf("%U: Duplicate entry in exclusions.", c.codePoint)
+               }
+               c.excludeInComp = true
+       }
+       if e := p.Err(); e != nil {
+               log.Fatal(e)
+       }
+}
+
+// hasCompatDecomp returns true if any of the recursive
+// decompositions contains a compatibility expansion.
+// In this case, the character may not occur in NFK*.
+func hasCompatDecomp(r rune) bool {
+       c := &chars[r]
+       if c.compatDecomp {
+               return true
+       }
+       for _, d := range c.forms[FCompatibility].decomp {
+               if hasCompatDecomp(d) {
+                       return true
+               }
+       }
+       return false
+}
+
+// Hangul related constants.
+const (
+       HangulBase = 0xAC00
+       HangulEnd  = 0xD7A4 // hangulBase + Jamo combinations (19 * 21 * 28)
+
+       JamoLBase = 0x1100
+       JamoLEnd  = 0x1113
+       JamoVBase = 0x1161
+       JamoVEnd  = 0x1176
+       JamoTBase = 0x11A8
+       JamoTEnd  = 0x11C3
+
+       JamoLVTCount = 19 * 21 * 28
+       JamoTCount   = 28
+)
+
+func isHangul(r rune) bool {
+       return HangulBase <= r && r < HangulEnd
+}
+
+func isHangulWithoutJamoT(r rune) bool {
+       if !isHangul(r) {
+               return false
+       }
+       r -= HangulBase
+       return r < JamoLVTCount && r%JamoTCount == 0
+}
+
+func ccc(r rune) uint8 {
+       return chars[r].ccc
+}
+
+// Insert a rune in a buffer, ordered by Canonical Combining Class.
+func insertOrdered(b Decomposition, r rune) Decomposition {
+       n := len(b)
+       b = append(b, 0)
+       cc := ccc(r)
+       if cc > 0 {
+               // Use bubble sort.
+               for ; n > 0; n-- {
+                       if ccc(b[n-1]) <= cc {
+                               break
+                       }
+                       b[n] = b[n-1]
+               }
+       }
+       b[n] = r
+       return b
+}
+
+// Recursively decompose.
+func decomposeRecursive(form int, r rune, d Decomposition) Decomposition {
+       dcomp := chars[r].forms[form].decomp
+       if len(dcomp) == 0 {
+               return insertOrdered(d, r)
+       }
+       for _, c := range dcomp {
+               d = decomposeRecursive(form, c, d)
+       }
+       return d
+}
+
+func completeCharFields(form int) {
+       // Phase 0: pre-expand decomposition.
+       for i := range chars {
+               f := &chars[i].forms[form]
+               if len(f.decomp) == 0 {
+                       continue
+               }
+               exp := make(Decomposition, 0)
+               for _, c := range f.decomp {
+                       exp = decomposeRecursive(form, c, exp)
+               }
+               f.expandedDecomp = exp
+       }
+
+       // Phase 1: composition exclusion, mark decomposition.
+       for i := range chars {
+               c := &chars[i]
+               f := &c.forms[form]
+
+               // Marks script-specific exclusions and version restricted.
+               f.isOneWay = c.excludeInComp
+
+               // Singletons
+               f.isOneWay = f.isOneWay || len(f.decomp) == 1
+
+               // Non-starter decompositions
+               if len(f.decomp) > 1 {
+                       chk := c.ccc != 0 || chars[f.decomp[0]].ccc != 0
+                       f.isOneWay = f.isOneWay || chk
+               }
+
+               // Runes that decompose into more than two runes.
+               f.isOneWay = f.isOneWay || len(f.decomp) > 2
+
+               if form == FCompatibility {
+                       f.isOneWay = f.isOneWay || hasCompatDecomp(c.codePoint)
+               }
+
+               for _, r := range f.decomp {
+                       chars[r].forms[form].inDecomp = true
+               }
+       }
+
+       // Phase 2: forward and backward combining.
+       for i := range chars {
+               c := &chars[i]
+               f := &c.forms[form]
+
+               if !f.isOneWay && len(f.decomp) == 2 {
+                       f0 := &chars[f.decomp[0]].forms[form]
+                       f1 := &chars[f.decomp[1]].forms[form]
+                       if !f0.isOneWay {
+                               f0.combinesForward = true
+                       }
+                       if !f1.isOneWay {
+                               f1.combinesBackward = true
+                       }
+               }
+               if isHangulWithoutJamoT(rune(i)) {
+                       f.combinesForward = true
+               }
+       }
+
+       // Phase 3: quick check values.
+       for i := range chars {
+               c := &chars[i]
+               f := &c.forms[form]
+
+               switch {
+               case len(f.decomp) > 0:
+                       f.quickCheck[MDecomposed] = QCNo
+               case isHangul(rune(i)):
+                       f.quickCheck[MDecomposed] = QCNo
+               default:
+                       f.quickCheck[MDecomposed] = QCYes
+               }
+               switch {
+               case f.isOneWay:
+                       f.quickCheck[MComposed] = QCNo
+               case (i & 0xffff00) == JamoLBase:
+                       f.quickCheck[MComposed] = QCYes
+                       if JamoLBase <= i && i < JamoLEnd {
+                               f.combinesForward = true
+                       }
+                       if JamoVBase <= i && i < JamoVEnd {
+                               f.quickCheck[MComposed] = QCMaybe
+                               f.combinesBackward = true
+                               f.combinesForward = true
+                       }
+                       if JamoTBase <= i && i < JamoTEnd {
+                               f.quickCheck[MComposed] = QCMaybe
+                               f.combinesBackward = true
+                       }
+               case !f.combinesBackward:
+                       f.quickCheck[MComposed] = QCYes
+               default:
+                       f.quickCheck[MComposed] = QCMaybe
+               }
+       }
+}
+
+func computeNonStarterCounts() {
+       // Phase 4: leading and trailing non-starter count
+       for i := range chars {
+               c := &chars[i]
+
+               runes := []rune{rune(i)}
+               // We always use FCompatibility so that the CGJ insertion points do not
+               // change for repeated normalizations with different forms.
+               if exp := c.forms[FCompatibility].expandedDecomp; len(exp) > 0 {
+                       runes = exp
+               }
+               // We consider runes that combine backwards to be non-starters for the
+               // purpose of Stream-Safe Text Processing.
+               for _, r := range runes {
+                       if cr := &chars[r]; cr.ccc == 0 && !cr.forms[FCompatibility].combinesBackward {
+                               break
+                       }
+                       c.nLeadingNonStarters++
+               }
+               for i := len(runes) - 1; i >= 0; i-- {
+                       if cr := &chars[runes[i]]; cr.ccc == 0 && !cr.forms[FCompatibility].combinesBackward {
+                               break
+                       }
+                       c.nTrailingNonStarters++
+               }
+               if c.nTrailingNonStarters > 3 {
+                       log.Fatalf("%U: Decomposition with more than 3 (%d) trailing modifiers (%U)", i, c.nTrailingNonStarters, runes)
+               }
+
+               if isHangul(rune(i)) {
+                       c.nTrailingNonStarters = 2
+                       if isHangulWithoutJamoT(rune(i)) {
+                               c.nTrailingNonStarters = 1
+                       }
+               }
+
+               if l, t := c.nLeadingNonStarters, c.nTrailingNonStarters; l > 0 && l != t {
+                       log.Fatalf("%U: number of leading and trailing non-starters should be equal (%d vs %d)", i, l, t)
+               }
+               if t := c.nTrailingNonStarters; t > 3 {
+                       log.Fatalf("%U: number of trailing non-starters is %d > 3", t)
+               }
+       }
+}
+
+func printBytes(w io.Writer, b []byte, name string) {
+       fmt.Fprintf(w, "// %s: %d bytes\n", name, len(b))
+       fmt.Fprintf(w, "var %s = [...]byte {", name)
+       for i, c := range b {
+               switch {
+               case i%64 == 0:
+                       fmt.Fprintf(w, "\n// Bytes %x - %x\n", i, i+63)
+               case i%8 == 0:
+                       fmt.Fprintf(w, "\n")
+               }
+               fmt.Fprintf(w, "0x%.2X, ", c)
+       }
+       fmt.Fprint(w, "\n}\n\n")
+}
+
+// See forminfo.go for format.
+func makeEntry(f *FormInfo, c *Char) uint16 {
+       e := uint16(0)
+       if r := c.codePoint; HangulBase <= r && r < HangulEnd {
+               e |= 0x40
+       }
+       if f.combinesForward {
+               e |= 0x20
+       }
+       if f.quickCheck[MDecomposed] == QCNo {
+               e |= 0x4
+       }
+       switch f.quickCheck[MComposed] {
+       case QCYes:
+       case QCNo:
+               e |= 0x10
+       case QCMaybe:
+               e |= 0x18
+       default:
+               log.Fatalf("Illegal quickcheck value %v.", f.quickCheck[MComposed])
+       }
+       e |= uint16(c.nTrailingNonStarters)
+       return e
+}
+
+// decompSet keeps track of unique decompositions, grouped by whether
+// the decomposition is followed by a trailing and/or leading CCC.
+type decompSet [7]map[string]bool
+
+const (
+       normalDecomp = iota
+       firstMulti
+       firstCCC
+       endMulti
+       firstLeadingCCC
+       firstCCCZeroExcept
+       firstStarterWithNLead
+       lastDecomp
+)
+
+var cname = []string{"firstMulti", "firstCCC", "endMulti", "firstLeadingCCC", "firstCCCZeroExcept", "firstStarterWithNLead", "lastDecomp"}
+
+func makeDecompSet() decompSet {
+       m := decompSet{}
+       for i := range m {
+               m[i] = make(map[string]bool)
+       }
+       return m
+}
+func (m *decompSet) insert(key int, s string) {
+       m[key][s] = true
+}
+
+func printCharInfoTables(w io.Writer) int {
+       mkstr := func(r rune, f *FormInfo) (int, string) {
+               d := f.expandedDecomp
+               s := string([]rune(d))
+               if max := 1 << 6; len(s) >= max {
+                       const msg = "%U: too many bytes in decomposition: %d >= %d"
+                       log.Fatalf(msg, r, len(s), max)
+               }
+               head := uint8(len(s))
+               if f.quickCheck[MComposed] != QCYes {
+                       head |= 0x40
+               }
+               if f.combinesForward {
+                       head |= 0x80
+               }
+               s = string([]byte{head}) + s
+
+               lccc := ccc(d[0])
+               tccc := ccc(d[len(d)-1])
+               cc := ccc(r)
+               if cc != 0 && lccc == 0 && tccc == 0 {
+                       log.Fatalf("%U: trailing and leading ccc are 0 for non-zero ccc %d", r, cc)
+               }
+               if tccc < lccc && lccc != 0 {
+                       const msg = "%U: lccc (%d) must be <= tcc (%d)"
+                       log.Fatalf(msg, r, lccc, tccc)
+               }
+               index := normalDecomp
+               nTrail := chars[r].nTrailingNonStarters
+               nLead := chars[r].nLeadingNonStarters
+               if tccc > 0 || lccc > 0 || nTrail > 0 {
+                       tccc <<= 2
+                       tccc |= nTrail
+                       s += string([]byte{tccc})
+                       index = endMulti
+                       for _, r := range d[1:] {
+                               if ccc(r) == 0 {
+                                       index = firstCCC
+                               }
+                       }
+                       if lccc > 0 || nLead > 0 {
+                               s += string([]byte{lccc})
+                               if index == firstCCC {
+                                       log.Fatalf("%U: multi-segment decomposition not supported for decompositions with leading CCC != 0", r)
+                               }
+                               index = firstLeadingCCC
+                       }
+                       if cc != lccc {
+                               if cc != 0 {
+                                       log.Fatalf("%U: for lccc != ccc, expected ccc to be 0; was %d", r, cc)
+                               }
+                               index = firstCCCZeroExcept
+                       }
+               } else if len(d) > 1 {
+                       index = firstMulti
+               }
+               return index, s
+       }
+
+       decompSet := makeDecompSet()
+       const nLeadStr = "\x00\x01" // 0-byte length and tccc with nTrail.
+       decompSet.insert(firstStarterWithNLead, nLeadStr)
+
+       // Store the uniqued decompositions in a byte buffer,
+       // preceded by their byte length.
+       for _, c := range chars {
+               for _, f := range c.forms {
+                       if len(f.expandedDecomp) == 0 {
+                               continue
+                       }
+                       if f.combinesBackward {
+                               log.Fatalf("%U: combinesBackward and decompose", c.codePoint)
+                       }
+                       index, s := mkstr(c.codePoint, &f)
+                       decompSet.insert(index, s)
+               }
+       }
+
+       decompositions := bytes.NewBuffer(make([]byte, 0, 10000))
+       size := 0
+       positionMap := make(map[string]uint16)
+       decompositions.WriteString("\000")
+       fmt.Fprintln(w, "const (")
+       for i, m := range decompSet {
+               sa := []string{}
+               for s := range m {
+                       sa = append(sa, s)
+               }
+               sort.Strings(sa)
+               for _, s := range sa {
+                       p := decompositions.Len()
+                       decompositions.WriteString(s)
+                       positionMap[s] = uint16(p)
+               }
+               if cname[i] != "" {
+                       fmt.Fprintf(w, "%s = 0x%X\n", cname[i], decompositions.Len())
+               }
+       }
+       fmt.Fprintln(w, "maxDecomp = 0x8000")
+       fmt.Fprintln(w, ")")
+       b := decompositions.Bytes()
+       printBytes(w, b, "decomps")
+       size += len(b)
+
+       varnames := []string{"nfc", "nfkc"}
+       for i := 0; i < FNumberOfFormTypes; i++ {
+               trie := triegen.NewTrie(varnames[i])
+
+               for r, c := range chars {
+                       f := c.forms[i]
+                       d := f.expandedDecomp
+                       if len(d) != 0 {
+                               _, key := mkstr(c.codePoint, &f)
+                               trie.Insert(rune(r), uint64(positionMap[key]))
+                               if c.ccc != ccc(d[0]) {
+                                       // We assume the lead ccc of a decomposition !=0 in this case.
+                                       if ccc(d[0]) == 0 {
+                                               log.Fatalf("Expected leading CCC to be non-zero; ccc is %d", c.ccc)
+                                       }
+                               }
+                       } else if c.nLeadingNonStarters > 0 && len(f.expandedDecomp) == 0 && c.ccc == 0 && !f.combinesBackward {
+                               // Handle cases where it can't be detected that the nLead should be equal
+                               // to nTrail.
+                               trie.Insert(c.codePoint, uint64(positionMap[nLeadStr]))
+                       } else if v := makeEntry(&f, &c)<<8 | uint16(c.ccc); v != 0 {
+                               trie.Insert(c.codePoint, uint64(0x8000|v))
+                       }
+               }
+               sz, err := trie.Gen(w, triegen.Compact(&normCompacter{name: varnames[i]}))
+               if err != nil {
+                       log.Fatal(err)
+               }
+               size += sz
+       }
+       return size
+}
+
+func contains(sa []string, s string) bool {
+       for _, a := range sa {
+               if a == s {
+                       return true
+               }
+       }
+       return false
+}
+
+func makeTables() {
+       w := &bytes.Buffer{}
+
+       size := 0
+       if *tablelist == "" {
+               return
+       }
+       list := strings.Split(*tablelist, ",")
+       if *tablelist == "all" {
+               list = []string{"recomp", "info"}
+       }
+
+       // Compute maximum decomposition size.
+       max := 0
+       for _, c := range chars {
+               if n := len(string(c.forms[FCompatibility].expandedDecomp)); n > max {
+                       max = n
+               }
+       }
+
+       fmt.Fprintln(w, "const (")
+       fmt.Fprintln(w, "\t// Version is the Unicode edition from which the tables are derived.")
+       fmt.Fprintf(w, "\tVersion = %q\n", gen.UnicodeVersion())
+       fmt.Fprintln(w)
+       fmt.Fprintln(w, "\t// MaxTransformChunkSize indicates the maximum number of bytes that Transform")
+       fmt.Fprintln(w, "\t// may need to write atomically for any Form. Making a destination buffer at")
+       fmt.Fprintln(w, "\t// least this size ensures that Transform can always make progress and that")
+       fmt.Fprintln(w, "\t// the user does not need to grow the buffer on an ErrShortDst.")
+       fmt.Fprintf(w, "\tMaxTransformChunkSize = %d+maxNonStarters*4\n", len(string(0x034F))+max)
+       fmt.Fprintln(w, ")\n")
+
+       // Print the CCC remap table.
+       size += len(cccMap)
+       fmt.Fprintf(w, "var ccc = [%d]uint8{", len(cccMap))
+       for i := 0; i < len(cccMap); i++ {
+               if i%8 == 0 {
+                       fmt.Fprintln(w)
+               }
+               fmt.Fprintf(w, "%3d, ", cccMap[uint8(i)])
+       }
+       fmt.Fprintln(w, "\n}\n")
+
+       if contains(list, "info") {
+               size += printCharInfoTables(w)
+       }
+
+       if contains(list, "recomp") {
+               // Note that we use 32 bit keys, instead of 64 bit.
+               // This clips the bits of three entries, but we know
+               // this won't cause a collision. The compiler will catch
+               // any changes made to UnicodeData.txt that introduces
+               // a collision.
+               // Note that the recomposition map for NFC and NFKC
+               // are identical.
+
+               // Recomposition map
+               nrentries := 0
+               for _, c := range chars {
+                       f := c.forms[FCanonical]
+                       if !f.isOneWay && len(f.decomp) > 0 {
+                               nrentries++
+                       }
+               }
+               sz := nrentries * 8
+               size += sz
+               fmt.Fprintf(w, "// recompMap: %d bytes (entries only)\n", sz)
+               fmt.Fprintln(w, "var recompMap = map[uint32]rune{")
+               for i, c := range chars {
+                       f := c.forms[FCanonical]
+                       d := f.decomp
+                       if !f.isOneWay && len(d) > 0 {
+                               key := uint32(uint16(d[0]))<<16 + uint32(uint16(d[1]))
+                               fmt.Fprintf(w, "0x%.8X: 0x%.4X,\n", key, i)
+                       }
+               }
+               fmt.Fprintf(w, "}\n\n")
+       }
+
+       fmt.Fprintf(w, "// Total size of tables: %dKB (%d bytes)\n", (size+512)/1024, size)
+       gen.WriteGoFile("tables.go", "norm", w.Bytes())
+}
+
+func printChars() {
+       if *verbose {
+               for _, c := range chars {
+                       if !c.isValid() || c.state == SMissing {
+                               continue
+                       }
+                       fmt.Println(c)
+               }
+       }
+}
+
+// verifyComputed does various consistency tests.
+func verifyComputed() {
+       for i, c := range chars {
+               for _, f := range c.forms {
+                       isNo := (f.quickCheck[MDecomposed] == QCNo)
+                       if (len(f.decomp) > 0) != isNo && !isHangul(rune(i)) {
+                               log.Fatalf("%U: NF*D QC must be No if rune decomposes", i)
+                       }
+
+                       isMaybe := f.quickCheck[MComposed] == QCMaybe
+                       if f.combinesBackward != isMaybe {
+                               log.Fatalf("%U: NF*C QC must be Maybe if combinesBackward", i)
+                       }
+                       if len(f.decomp) > 0 && f.combinesForward && isMaybe {
+                               log.Fatalf("%U: NF*C QC must be Yes or No if combinesForward and decomposes", i)
+                       }
+
+                       if len(f.expandedDecomp) != 0 {
+                               continue
+                       }
+                       if a, b := c.nLeadingNonStarters > 0, (c.ccc > 0 || f.combinesBackward); a != b {
+                               // We accept these runes to be treated differently (it only affects
+                               // segment breaking in iteration, most likely on improper use), but
+                               // reconsider if more characters are added.
+                               // U+FF9E HALFWIDTH KATAKANA VOICED SOUND MARK;Lm;0;L;<narrow> 3099;;;;N;;;;;
+                               // U+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L;<narrow> 309A;;;;N;;;;;
+                               // U+3133 HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<compat> 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
+                               // U+318E HANGUL LETTER ARAEAE;Lo;0;L;<compat> 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
+                               // U+FFA3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L;<narrow> 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
+                               // U+FFDC HALFWIDTH HANGUL LETTER I;Lo;0;L;<narrow> 3163;;;;N;;;;;
+                               if i != 0xFF9E && i != 0xFF9F && !(0x3133 <= i && i <= 0x318E) && !(0xFFA3 <= i && i <= 0xFFDC) {
+                                       log.Fatalf("%U: nLead was %v; want %v", i, a, b)
+                               }
+                       }
+               }
+               nfc := c.forms[FCanonical]
+               nfkc := c.forms[FCompatibility]
+               if nfc.combinesBackward != nfkc.combinesBackward {
+                       log.Fatalf("%U: Cannot combine combinesBackward\n", c.codePoint)
+               }
+       }
+}
+
+// Use values in DerivedNormalizationProps.txt to compare against the
+// values we computed.
+// DerivedNormalizationProps.txt has form:
+// 00C0..00C5    ; NFD_QC; N # ...
+// 0374          ; NFD_QC; N # ...
+// See http://unicode.org/reports/tr44/ for full explanation
+func testDerived() {
+       f := gen.OpenUCDFile("DerivedNormalizationProps.txt")
+       defer f.Close()
+       p := ucd.New(f)
+       for p.Next() {
+               r := p.Rune(0)
+               c := &chars[r]
+
+               var ftype, mode int
+               qt := p.String(1)
+               switch qt {
+               case "NFC_QC":
+                       ftype, mode = FCanonical, MComposed
+               case "NFD_QC":
+                       ftype, mode = FCanonical, MDecomposed
+               case "NFKC_QC":
+                       ftype, mode = FCompatibility, MComposed
+               case "NFKD_QC":
+                       ftype, mode = FCompatibility, MDecomposed
+               default:
+                       continue
+               }
+               var qr QCResult
+               switch p.String(2) {
+               case "Y":
+                       qr = QCYes
+               case "N":
+                       qr = QCNo
+               case "M":
+                       qr = QCMaybe
+               default:
+                       log.Fatalf(`Unexpected quick check value "%s"`, p.String(2))
+               }
+               if got := c.forms[ftype].quickCheck[mode]; got != qr {
+                       log.Printf("%U: FAILED %s (was %v need %v)\n", r, qt, got, qr)
+               }
+               c.forms[ftype].verified[mode] = true
+       }
+       if err := p.Err(); err != nil {
+               log.Fatal(err)
+       }
+       // Any unspecified value must be QCYes. Verify this.
+       for i, c := range chars {
+               for j, fd := range c.forms {
+                       for k, qr := range fd.quickCheck {
+                               if !fd.verified[k] && qr != QCYes {
+                                       m := "%U: FAIL F:%d M:%d (was %v need Yes) %s\n"
+                                       log.Printf(m, i, j, k, qr, c.name)
+                               }
+                       }
+               }
+       }
+}
+
+var testHeader = `const (
+       Yes = iota
+       No
+       Maybe
+)
+
+type formData struct {
+       qc              uint8
+       combinesForward bool
+       decomposition   string
+}
+
+type runeData struct {
+       r      rune
+       ccc    uint8
+       nLead  uint8
+       nTrail uint8
+       f      [2]formData // 0: canonical; 1: compatibility
+}
+
+func f(qc uint8, cf bool, dec string) [2]formData {
+       return [2]formData{{qc, cf, dec}, {qc, cf, dec}}
+}
+
+func g(qc, qck uint8, cf, cfk bool, d, dk string) [2]formData {
+       return [2]formData{{qc, cf, d}, {qck, cfk, dk}}
+}
+
+var testData = []runeData{
+`
+
+func printTestdata() {
+       type lastInfo struct {
+               ccc    uint8
+               nLead  uint8
+               nTrail uint8
+               f      string
+       }
+
+       last := lastInfo{}
+       w := &bytes.Buffer{}
+       fmt.Fprintf(w, testHeader)
+       for r, c := range chars {
+               f := c.forms[FCanonical]
+               qc, cf, d := f.quickCheck[MComposed], f.combinesForward, string(f.expandedDecomp)
+               f = c.forms[FCompatibility]
+               qck, cfk, dk := f.quickCheck[MComposed], f.combinesForward, string(f.expandedDecomp)
+               s := ""
+               if d == dk && qc == qck && cf == cfk {
+                       s = fmt.Sprintf("f(%s, %v, %q)", qc, cf, d)
+               } else {
+                       s = fmt.Sprintf("g(%s, %s, %v, %v, %q, %q)", qc, qck, cf, cfk, d, dk)
+               }
+               current := lastInfo{c.ccc, c.nLeadingNonStarters, c.nTrailingNonStarters, s}
+               if last != current {
+                       fmt.Fprintf(w, "\t{0x%x, %d, %d, %d, %s},\n", r, c.origCCC, c.nLeadingNonStarters, c.nTrailingNonStarters, s)
+                       last = current
+               }
+       }
+       fmt.Fprintln(w, "}")
+       gen.WriteGoFile("data_test.go", "norm", w.Bytes())
+}
diff --git a/vendor/golang.org/x/text/unicode/norm/normalize.go b/vendor/golang.org/x/text/unicode/norm/normalize.go
new file mode 100644 (file)
index 0000000..e28ac64
--- /dev/null
@@ -0,0 +1,609 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Note: the file data_test.go that is generated should not be checked in.
+//go:generate go run maketables.go triegen.go
+//go:generate go test -tags test
+
+// Package norm contains types and functions for normalizing Unicode strings.
+package norm // import "golang.org/x/text/unicode/norm"
+
+import (
+       "unicode/utf8"
+
+       "golang.org/x/text/transform"
+)
+
+// A Form denotes a canonical representation of Unicode code points.
+// The Unicode-defined normalization and equivalence forms are:
+//
+//   NFC   Unicode Normalization Form C
+//   NFD   Unicode Normalization Form D
+//   NFKC  Unicode Normalization Form KC
+//   NFKD  Unicode Normalization Form KD
+//
+// For a Form f, this documentation uses the notation f(x) to mean
+// the bytes or string x converted to the given form.
+// A position n in x is called a boundary if conversion to the form can
+// proceed independently on both sides:
+//   f(x) == append(f(x[0:n]), f(x[n:])...)
+//
+// References: http://unicode.org/reports/tr15/ and
+// http://unicode.org/notes/tn5/.
+type Form int
+
+const (
+       NFC Form = iota
+       NFD
+       NFKC
+       NFKD
+)
+
+// Bytes returns f(b). May return b if f(b) = b.
+func (f Form) Bytes(b []byte) []byte {
+       src := inputBytes(b)
+       ft := formTable[f]
+       n, ok := ft.quickSpan(src, 0, len(b), true)
+       if ok {
+               return b
+       }
+       out := make([]byte, n, len(b))
+       copy(out, b[0:n])
+       rb := reorderBuffer{f: *ft, src: src, nsrc: len(b), out: out, flushF: appendFlush}
+       return doAppendInner(&rb, n)
+}
+
+// String returns f(s).
+func (f Form) String(s string) string {
+       src := inputString(s)
+       ft := formTable[f]
+       n, ok := ft.quickSpan(src, 0, len(s), true)
+       if ok {
+               return s
+       }
+       out := make([]byte, n, len(s))
+       copy(out, s[0:n])
+       rb := reorderBuffer{f: *ft, src: src, nsrc: len(s), out: out, flushF: appendFlush}
+       return string(doAppendInner(&rb, n))
+}
+
+// IsNormal returns true if b == f(b).
+func (f Form) IsNormal(b []byte) bool {
+       src := inputBytes(b)
+       ft := formTable[f]
+       bp, ok := ft.quickSpan(src, 0, len(b), true)
+       if ok {
+               return true
+       }
+       rb := reorderBuffer{f: *ft, src: src, nsrc: len(b)}
+       rb.setFlusher(nil, cmpNormalBytes)
+       for bp < len(b) {
+               rb.out = b[bp:]
+               if bp = decomposeSegment(&rb, bp, true); bp < 0 {
+                       return false
+               }
+               bp, _ = rb.f.quickSpan(rb.src, bp, len(b), true)
+       }
+       return true
+}
+
+func cmpNormalBytes(rb *reorderBuffer) bool {
+       b := rb.out
+       for i := 0; i < rb.nrune; i++ {
+               info := rb.rune[i]
+               if int(info.size) > len(b) {
+                       return false
+               }
+               p := info.pos
+               pe := p + info.size
+               for ; p < pe; p++ {
+                       if b[0] != rb.byte[p] {
+                               return false
+                       }
+                       b = b[1:]
+               }
+       }
+       return true
+}
+
+// IsNormalString returns true if s == f(s).
+func (f Form) IsNormalString(s string) bool {
+       src := inputString(s)
+       ft := formTable[f]
+       bp, ok := ft.quickSpan(src, 0, len(s), true)
+       if ok {
+               return true
+       }
+       rb := reorderBuffer{f: *ft, src: src, nsrc: len(s)}
+       rb.setFlusher(nil, func(rb *reorderBuffer) bool {
+               for i := 0; i < rb.nrune; i++ {
+                       info := rb.rune[i]
+                       if bp+int(info.size) > len(s) {
+                               return false
+                       }
+                       p := info.pos
+                       pe := p + info.size
+                       for ; p < pe; p++ {
+                               if s[bp] != rb.byte[p] {
+                                       return false
+                               }
+                               bp++
+                       }
+               }
+               return true
+       })
+       for bp < len(s) {
+               if bp = decomposeSegment(&rb, bp, true); bp < 0 {
+                       return false
+               }
+               bp, _ = rb.f.quickSpan(rb.src, bp, len(s), true)
+       }
+       return true
+}
+
+// patchTail fixes a case where a rune may be incorrectly normalized
+// if it is followed by illegal continuation bytes. It returns the
+// patched buffer and whether the decomposition is still in progress.
+func patchTail(rb *reorderBuffer) bool {
+       info, p := lastRuneStart(&rb.f, rb.out)
+       if p == -1 || info.size == 0 {
+               return true
+       }
+       end := p + int(info.size)
+       extra := len(rb.out) - end
+       if extra > 0 {
+               // Potentially allocating memory. However, this only
+               // happens with ill-formed UTF-8.
+               x := make([]byte, 0)
+               x = append(x, rb.out[len(rb.out)-extra:]...)
+               rb.out = rb.out[:end]
+               decomposeToLastBoundary(rb)
+               rb.doFlush()
+               rb.out = append(rb.out, x...)
+               return false
+       }
+       buf := rb.out[p:]
+       rb.out = rb.out[:p]
+       decomposeToLastBoundary(rb)
+       if s := rb.ss.next(info); s == ssStarter {
+               rb.doFlush()
+               rb.ss.first(info)
+       } else if s == ssOverflow {
+               rb.doFlush()
+               rb.insertCGJ()
+               rb.ss = 0
+       }
+       rb.insertUnsafe(inputBytes(buf), 0, info)
+       return true
+}
+
+func appendQuick(rb *reorderBuffer, i int) int {
+       if rb.nsrc == i {
+               return i
+       }
+       end, _ := rb.f.quickSpan(rb.src, i, rb.nsrc, true)
+       rb.out = rb.src.appendSlice(rb.out, i, end)
+       return end
+}
+
+// Append returns f(append(out, b...)).
+// The buffer out must be nil, empty, or equal to f(out).
+func (f Form) Append(out []byte, src ...byte) []byte {
+       return f.doAppend(out, inputBytes(src), len(src))
+}
+
+func (f Form) doAppend(out []byte, src input, n int) []byte {
+       if n == 0 {
+               return out
+       }
+       ft := formTable[f]
+       // Attempt to do a quickSpan first so we can avoid initializing the reorderBuffer.
+       if len(out) == 0 {
+               p, _ := ft.quickSpan(src, 0, n, true)
+               out = src.appendSlice(out, 0, p)
+               if p == n {
+                       return out
+               }
+               rb := reorderBuffer{f: *ft, src: src, nsrc: n, out: out, flushF: appendFlush}
+               return doAppendInner(&rb, p)
+       }
+       rb := reorderBuffer{f: *ft, src: src, nsrc: n}
+       return doAppend(&rb, out, 0)
+}
+
+func doAppend(rb *reorderBuffer, out []byte, p int) []byte {
+       rb.setFlusher(out, appendFlush)
+       src, n := rb.src, rb.nsrc
+       doMerge := len(out) > 0
+       if q := src.skipContinuationBytes(p); q > p {
+               // Move leading non-starters to destination.
+               rb.out = src.appendSlice(rb.out, p, q)
+               p = q
+               doMerge = patchTail(rb)
+       }
+       fd := &rb.f
+       if doMerge {
+               var info Properties
+               if p < n {
+                       info = fd.info(src, p)
+                       if !info.BoundaryBefore() || info.nLeadingNonStarters() > 0 {
+                               if p == 0 {
+                                       decomposeToLastBoundary(rb)
+                               }
+                               p = decomposeSegment(rb, p, true)
+                       }
+               }
+               if info.size == 0 {
+                       rb.doFlush()
+                       // Append incomplete UTF-8 encoding.
+                       return src.appendSlice(rb.out, p, n)
+               }
+               if rb.nrune > 0 {
+                       return doAppendInner(rb, p)
+               }
+       }
+       p = appendQuick(rb, p)
+       return doAppendInner(rb, p)
+}
+
+func doAppendInner(rb *reorderBuffer, p int) []byte {
+       for n := rb.nsrc; p < n; {
+               p = decomposeSegment(rb, p, true)
+               p = appendQuick(rb, p)
+       }
+       return rb.out
+}
+
+// AppendString returns f(append(out, []byte(s))).
+// The buffer out must be nil, empty, or equal to f(out).
+func (f Form) AppendString(out []byte, src string) []byte {
+       return f.doAppend(out, inputString(src), len(src))
+}
+
+// QuickSpan returns a boundary n such that b[0:n] == f(b[0:n]).
+// It is not guaranteed to return the largest such n.
+func (f Form) QuickSpan(b []byte) int {
+       n, _ := formTable[f].quickSpan(inputBytes(b), 0, len(b), true)
+       return n
+}
+
+// Span implements transform.SpanningTransformer. It returns a boundary n such
+// that b[0:n] == f(b[0:n]). It is not guaranteed to return the largest such n.
+func (f Form) Span(b []byte, atEOF bool) (n int, err error) {
+       n, ok := formTable[f].quickSpan(inputBytes(b), 0, len(b), atEOF)
+       if n < len(b) {
+               if !ok {
+                       err = transform.ErrEndOfSpan
+               } else {
+                       err = transform.ErrShortSrc
+               }
+       }
+       return n, err
+}
+
+// SpanString returns a boundary n such that s[0:n] == f(s[0:n]).
+// It is not guaranteed to return the largest such n.
+func (f Form) SpanString(s string, atEOF bool) (n int, err error) {
+       n, ok := formTable[f].quickSpan(inputString(s), 0, len(s), atEOF)
+       if n < len(s) {
+               if !ok {
+                       err = transform.ErrEndOfSpan
+               } else {
+                       err = transform.ErrShortSrc
+               }
+       }
+       return n, err
+}
+
+// quickSpan returns a boundary n such that src[0:n] == f(src[0:n]) and
+// whether any non-normalized parts were found. If atEOF is false, n will
+// not point past the last segment if this segment might be become
+// non-normalized by appending other runes.
+func (f *formInfo) quickSpan(src input, i, end int, atEOF bool) (n int, ok bool) {
+       var lastCC uint8
+       ss := streamSafe(0)
+       lastSegStart := i
+       for n = end; i < n; {
+               if j := src.skipASCII(i, n); i != j {
+                       i = j
+                       lastSegStart = i - 1
+                       lastCC = 0
+                       ss = 0
+                       continue
+               }
+               info := f.info(src, i)
+               if info.size == 0 {
+                       if atEOF {
+                               // include incomplete runes
+                               return n, true
+                       }
+                       return lastSegStart, true
+               }
+               // This block needs to be before the next, because it is possible to
+               // have an overflow for runes that are starters (e.g. with U+FF9E).
+               switch ss.next(info) {
+               case ssStarter:
+                       lastSegStart = i
+               case ssOverflow:
+                       return lastSegStart, false
+               case ssSuccess:
+                       if lastCC > info.ccc {
+                               return lastSegStart, false
+                       }
+               }
+               if f.composing {
+                       if !info.isYesC() {
+                               break
+                       }
+               } else {
+                       if !info.isYesD() {
+                               break
+                       }
+               }
+               lastCC = info.ccc
+               i += int(info.size)
+       }
+       if i == n {
+               if !atEOF {
+                       n = lastSegStart
+               }
+               return n, true
+       }
+       return lastSegStart, false
+}
+
+// QuickSpanString returns a boundary n such that s[0:n] == f(s[0:n]).
+// It is not guaranteed to return the largest such n.
+func (f Form) QuickSpanString(s string) int {
+       n, _ := formTable[f].quickSpan(inputString(s), 0, len(s), true)
+       return n
+}
+
+// FirstBoundary returns the position i of the first boundary in b
+// or -1 if b contains no boundary.
+func (f Form) FirstBoundary(b []byte) int {
+       return f.firstBoundary(inputBytes(b), len(b))
+}
+
+func (f Form) firstBoundary(src input, nsrc int) int {
+       i := src.skipContinuationBytes(0)
+       if i >= nsrc {
+               return -1
+       }
+       fd := formTable[f]
+       ss := streamSafe(0)
+       // We should call ss.first here, but we can't as the first rune is
+       // skipped already. This means FirstBoundary can't really determine
+       // CGJ insertion points correctly. Luckily it doesn't have to.
+       for {
+               info := fd.info(src, i)
+               if info.size == 0 {
+                       return -1
+               }
+               if s := ss.next(info); s != ssSuccess {
+                       return i
+               }
+               i += int(info.size)
+               if i >= nsrc {
+                       if !info.BoundaryAfter() && !ss.isMax() {
+                               return -1
+                       }
+                       return nsrc
+               }
+       }
+}
+
+// FirstBoundaryInString returns the position i of the first boundary in s
+// or -1 if s contains no boundary.
+func (f Form) FirstBoundaryInString(s string) int {
+       return f.firstBoundary(inputString(s), len(s))
+}
+
+// NextBoundary reports the index of the boundary between the first and next
+// segment in b or -1 if atEOF is false and there are not enough bytes to
+// determine this boundary.
+func (f Form) NextBoundary(b []byte, atEOF bool) int {
+       return f.nextBoundary(inputBytes(b), len(b), atEOF)
+}
+
+// NextBoundaryInString reports the index of the boundary between the first and
+// next segment in b or -1 if atEOF is false and there are not enough bytes to
+// determine this boundary.
+func (f Form) NextBoundaryInString(s string, atEOF bool) int {
+       return f.nextBoundary(inputString(s), len(s), atEOF)
+}
+
+func (f Form) nextBoundary(src input, nsrc int, atEOF bool) int {
+       if nsrc == 0 {
+               if atEOF {
+                       return 0
+               }
+               return -1
+       }
+       fd := formTable[f]
+       info := fd.info(src, 0)
+       if info.size == 0 {
+               if atEOF {
+                       return 1
+               }
+               return -1
+       }
+       ss := streamSafe(0)
+       ss.first(info)
+
+       for i := int(info.size); i < nsrc; i += int(info.size) {
+               info = fd.info(src, i)
+               if info.size == 0 {
+                       if atEOF {
+                               return i
+                       }
+                       return -1
+               }
+               // TODO: Using streamSafe to determine the boundary isn't the same as
+               // using BoundaryBefore. Determine which should be used.
+               if s := ss.next(info); s != ssSuccess {
+                       return i
+               }
+       }
+       if !atEOF && !info.BoundaryAfter() && !ss.isMax() {
+               return -1
+       }
+       return nsrc
+}
+
+// LastBoundary returns the position i of the last boundary in b
+// or -1 if b contains no boundary.
+func (f Form) LastBoundary(b []byte) int {
+       return lastBoundary(formTable[f], b)
+}
+
+func lastBoundary(fd *formInfo, b []byte) int {
+       i := len(b)
+       info, p := lastRuneStart(fd, b)
+       if p == -1 {
+               return -1
+       }
+       if info.size == 0 { // ends with incomplete rune
+               if p == 0 { // starts with incomplete rune
+                       return -1
+               }
+               i = p
+               info, p = lastRuneStart(fd, b[:i])
+               if p == -1 { // incomplete UTF-8 encoding or non-starter bytes without a starter
+                       return i
+               }
+       }
+       if p+int(info.size) != i { // trailing non-starter bytes: illegal UTF-8
+               return i
+       }
+       if info.BoundaryAfter() {
+               return i
+       }
+       ss := streamSafe(0)
+       v := ss.backwards(info)
+       for i = p; i >= 0 && v != ssStarter; i = p {
+               info, p = lastRuneStart(fd, b[:i])
+               if v = ss.backwards(info); v == ssOverflow {
+                       break
+               }
+               if p+int(info.size) != i {
+                       if p == -1 { // no boundary found
+                               return -1
+                       }
+                       return i // boundary after an illegal UTF-8 encoding
+               }
+       }
+       return i
+}
+
+// decomposeSegment scans the first segment in src into rb. It inserts 0x034f
+// (Grapheme Joiner) when it encounters a sequence of more than 30 non-starters
+// and returns the number of bytes consumed from src or iShortDst or iShortSrc.
+func decomposeSegment(rb *reorderBuffer, sp int, atEOF bool) int {
+       // Force one character to be consumed.
+       info := rb.f.info(rb.src, sp)
+       if info.size == 0 {
+               return 0
+       }
+       if s := rb.ss.next(info); s == ssStarter {
+               // TODO: this could be removed if we don't support merging.
+               if rb.nrune > 0 {
+                       goto end
+               }
+       } else if s == ssOverflow {
+               rb.insertCGJ()
+               goto end
+       }
+       if err := rb.insertFlush(rb.src, sp, info); err != iSuccess {
+               return int(err)
+       }
+       for {
+               sp += int(info.size)
+               if sp >= rb.nsrc {
+                       if !atEOF && !info.BoundaryAfter() {
+                               return int(iShortSrc)
+                       }
+                       break
+               }
+               info = rb.f.info(rb.src, sp)
+               if info.size == 0 {
+                       if !atEOF {
+                               return int(iShortSrc)
+                       }
+                       break
+               }
+               if s := rb.ss.next(info); s == ssStarter {
+                       break
+               } else if s == ssOverflow {
+                       rb.insertCGJ()
+                       break
+               }
+               if err := rb.insertFlush(rb.src, sp, info); err != iSuccess {
+                       return int(err)
+               }
+       }
+end:
+       if !rb.doFlush() {
+               return int(iShortDst)
+       }
+       return sp
+}
+
+// lastRuneStart returns the runeInfo and position of the last
+// rune in buf or the zero runeInfo and -1 if no rune was found.
+func lastRuneStart(fd *formInfo, buf []byte) (Properties, int) {
+       p := len(buf) - 1
+       for ; p >= 0 && !utf8.RuneStart(buf[p]); p-- {
+       }
+       if p < 0 {
+               return Properties{}, -1
+       }
+       return fd.info(inputBytes(buf), p), p
+}
+
+// decomposeToLastBoundary finds an open segment at the end of the buffer
+// and scans it into rb. Returns the buffer minus the last segment.
+func decomposeToLastBoundary(rb *reorderBuffer) {
+       fd := &rb.f
+       info, i := lastRuneStart(fd, rb.out)
+       if int(info.size) != len(rb.out)-i {
+               // illegal trailing continuation bytes
+               return
+       }
+       if info.BoundaryAfter() {
+               return
+       }
+       var add [maxNonStarters + 1]Properties // stores runeInfo in reverse order
+       padd := 0
+       ss := streamSafe(0)
+       p := len(rb.out)
+       for {
+               add[padd] = info
+               v := ss.backwards(info)
+               if v == ssOverflow {
+                       // Note that if we have an overflow, it the string we are appending to
+                       // is not correctly normalized. In this case the behavior is undefined.
+                       break
+               }
+               padd++
+               p -= int(info.size)
+               if v == ssStarter || p < 0 {
+                       break
+               }
+               info, i = lastRuneStart(fd, rb.out[:p])
+               if int(info.size) != p-i {
+                       break
+               }
+       }
+       rb.ss = ss
+       // Copy bytes for insertion as we may need to overwrite rb.out.
+       var buf [maxBufferSize * utf8.UTFMax]byte
+       cp := buf[:copy(buf[:], rb.out[p:])]
+       rb.out = rb.out[:p]
+       for padd--; padd >= 0; padd-- {
+               info = add[padd]
+               rb.insertUnsafe(inputBytes(cp), 0, info)
+               cp = cp[info.size:]
+       }
+}
diff --git a/vendor/golang.org/x/text/unicode/norm/readwriter.go b/vendor/golang.org/x/text/unicode/norm/readwriter.go
new file mode 100644 (file)
index 0000000..d926ee9
--- /dev/null
@@ -0,0 +1,125 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package norm
+
+import "io"
+
+type normWriter struct {
+       rb  reorderBuffer
+       w   io.Writer
+       buf []byte
+}
+
+// Write implements the standard write interface.  If the last characters are
+// not at a normalization boundary, the bytes will be buffered for the next
+// write. The remaining bytes will be written on close.
+func (w *normWriter) Write(data []byte) (n int, err error) {
+       // Process data in pieces to keep w.buf size bounded.
+       const chunk = 4000
+
+       for len(data) > 0 {
+               // Normalize into w.buf.
+               m := len(data)
+               if m > chunk {
+                       m = chunk
+               }
+               w.rb.src = inputBytes(data[:m])
+               w.rb.nsrc = m
+               w.buf = doAppend(&w.rb, w.buf, 0)
+               data = data[m:]
+               n += m
+
+               // Write out complete prefix, save remainder.
+               // Note that lastBoundary looks back at most 31 runes.
+               i := lastBoundary(&w.rb.f, w.buf)
+               if i == -1 {
+                       i = 0
+               }
+               if i > 0 {
+                       if _, err = w.w.Write(w.buf[:i]); err != nil {
+                               break
+                       }
+                       bn := copy(w.buf, w.buf[i:])
+                       w.buf = w.buf[:bn]
+               }
+       }
+       return n, err
+}
+
+// Close forces data that remains in the buffer to be written.
+func (w *normWriter) Close() error {
+       if len(w.buf) > 0 {
+               _, err := w.w.Write(w.buf)
+               if err != nil {
+                       return err
+               }
+       }
+       return nil
+}
+
+// Writer returns a new writer that implements Write(b)
+// by writing f(b) to w.  The returned writer may use an
+// an internal buffer to maintain state across Write calls.
+// Calling its Close method writes any buffered data to w.
+func (f Form) Writer(w io.Writer) io.WriteCloser {
+       wr := &normWriter{rb: reorderBuffer{}, w: w}
+       wr.rb.init(f, nil)
+       return wr
+}
+
+type normReader struct {
+       rb           reorderBuffer
+       r            io.Reader
+       inbuf        []byte
+       outbuf       []byte
+       bufStart     int
+       lastBoundary int
+       err          error
+}
+
+// Read implements the standard read interface.
+func (r *normReader) Read(p []byte) (int, error) {
+       for {
+               if r.lastBoundary-r.bufStart > 0 {
+                       n := copy(p, r.outbuf[r.bufStart:r.lastBoundary])
+                       r.bufStart += n
+                       if r.lastBoundary-r.bufStart > 0 {
+                               return n, nil
+                       }
+                       return n, r.err
+               }
+               if r.err != nil {
+                       return 0, r.err
+               }
+               outn := copy(r.outbuf, r.outbuf[r.lastBoundary:])
+               r.outbuf = r.outbuf[0:outn]
+               r.bufStart = 0
+
+               n, err := r.r.Read(r.inbuf)
+               r.rb.src = inputBytes(r.inbuf[0:n])
+               r.rb.nsrc, r.err = n, err
+               if n > 0 {
+                       r.outbuf = doAppend(&r.rb, r.outbuf, 0)
+               }
+               if err == io.EOF {
+                       r.lastBoundary = len(r.outbuf)
+               } else {
+                       r.lastBoundary = lastBoundary(&r.rb.f, r.outbuf)
+                       if r.lastBoundary == -1 {
+                               r.lastBoundary = 0
+                       }
+               }
+       }
+}
+
+// Reader returns a new reader that implements Read
+// by reading data from r and returning f(data).
+func (f Form) Reader(r io.Reader) io.Reader {
+       const chunk = 4000
+       buf := make([]byte, chunk)
+       rr := &normReader{rb: reorderBuffer{}, r: r, inbuf: buf}
+       rr.rb.init(f, buf)
+       return rr
+}
diff --git a/vendor/golang.org/x/text/unicode/norm/tables.go b/vendor/golang.org/x/text/unicode/norm/tables.go
new file mode 100644 (file)
index 0000000..bf9ff80
--- /dev/null
@@ -0,0 +1,7631 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package norm
+
+const (
+       // Version is the Unicode edition from which the tables are derived.
+       Version = "9.0.0"
+
+       // MaxTransformChunkSize indicates the maximum number of bytes that Transform
+       // may need to write atomically for any Form. Making a destination buffer at
+       // least this size ensures that Transform can always make progress and that
+       // the user does not need to grow the buffer on an ErrShortDst.
+       MaxTransformChunkSize = 35 + maxNonStarters*4
+)
+
+var ccc = [55]uint8{
+       0, 1, 7, 8, 9, 10, 11, 12,
+       13, 14, 15, 16, 17, 18, 19, 20,
+       21, 22, 23, 24, 25, 26, 27, 28,
+       29, 30, 31, 32, 33, 34, 35, 36,
+       84, 91, 103, 107, 118, 122, 129, 130,
+       132, 202, 214, 216, 218, 220, 222, 224,
+       226, 228, 230, 232, 233, 234, 240,
+}
+
+const (
+       firstMulti            = 0x186D
+       firstCCC              = 0x2C9E
+       endMulti              = 0x2F60
+       firstLeadingCCC       = 0x49AE
+       firstCCCZeroExcept    = 0x4A78
+       firstStarterWithNLead = 0x4A9F
+       lastDecomp            = 0x4AA1
+       maxDecomp             = 0x8000
+)
+
+// decomps: 19105 bytes
+var decomps = [...]byte{
+       // Bytes 0 - 3f
+       0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41,
+       0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41,
+       0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41,
+       0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41,
+       0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41,
+       0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41,
+       0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41,
+       0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41,
+       // Bytes 40 - 7f
+       0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41,
+       0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41,
+       0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41,
+       0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41,
+       0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41,
+       0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41,
+       0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41,
+       0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41,
+       // Bytes 80 - bf
+       0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41,
+       0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41,
+       0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41,
+       0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41,
+       0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41,
+       0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41,
+       0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41,
+       0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42,
+       // Bytes c0 - ff
+       0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5,
+       0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2,
+       0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42,
+       0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1,
+       0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6,
+       0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42,
+       0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90,
+       0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9,
+       // Bytes 100 - 13f
+       0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42,
+       0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F,
+       0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9,
+       0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42,
+       0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB,
+       0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9,
+       0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42,
+       0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5,
+       // Bytes 140 - 17f
+       0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9,
+       0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42,
+       0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A,
+       0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA,
+       0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42,
+       0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F,
+       0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE,
+       0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42,
+       // Bytes 180 - 1bf
+       0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97,
+       0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE,
+       0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42,
+       0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F,
+       0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE,
+       0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42,
+       0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8,
+       0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE,
+       // Bytes 1c0 - 1ff
+       0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42,
+       0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7,
+       0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE,
+       0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42,
+       0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF,
+       0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF,
+       0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42,
+       0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87,
+       // Bytes 200 - 23f
+       0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF,
+       0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42,
+       0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90,
+       0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7,
+       0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42,
+       0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2,
+       0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8,
+       0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42,
+       // Bytes 240 - 27f
+       0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB,
+       0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8,
+       0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42,
+       0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3,
+       0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8,
+       0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42,
+       0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81,
+       0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9,
+       // Bytes 280 - 2bf
+       0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42,
+       0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89,
+       0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9,
+       0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42,
+       0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE,
+       0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA,
+       0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42,
+       0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C,
+       // Bytes 2c0 - 2ff
+       0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA,
+       0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42,
+       0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9,
+       0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA,
+       0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42,
+       0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81,
+       0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB,
+       0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42,
+       // Bytes 300 - 33f
+       0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90,
+       0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43,
+       0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43,
+       0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43,
+       0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43,
+       0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43,
+       0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43,
+       0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43,
+       // Bytes 340 - 37f
+       0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43,
+       0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43,
+       0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43,
+       0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43,
+       0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43,
+       0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43,
+       0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43,
+       0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43,
+       // Bytes 380 - 3bf
+       0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43,
+       0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43,
+       0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43,
+       0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43,
+       0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43,
+       0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43,
+       0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43,
+       0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43,
+       // Bytes 3c0 - 3ff
+       0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43,
+       0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43,
+       0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43,
+       0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43,
+       0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43,
+       0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43,
+       0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43,
+       0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43,
+       // Bytes 400 - 43f
+       0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43,
+       0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43,
+       0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43,
+       0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43,
+       0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43,
+       0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43,
+       0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43,
+       0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43,
+       // Bytes 440 - 47f
+       0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43,
+       0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43,
+       0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43,
+       0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43,
+       0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43,
+       0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43,
+       0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43,
+       0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43,
+       // Bytes 480 - 4bf
+       0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43,
+       0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43,
+       0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43,
+       0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43,
+       0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43,
+       0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43,
+       0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43,
+       0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43,
+       // Bytes 4c0 - 4ff
+       0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43,
+       0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43,
+       0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43,
+       0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43,
+       0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43,
+       0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43,
+       0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43,
+       0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43,
+       // Bytes 500 - 53f
+       0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43,
+       0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43,
+       0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43,
+       0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43,
+       0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43,
+       0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43,
+       0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43,
+       0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43,
+       // Bytes 540 - 57f
+       0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43,
+       0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43,
+       0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43,
+       0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43,
+       0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43,
+       0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43,
+       0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43,
+       0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43,
+       // Bytes 580 - 5bf
+       0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43,
+       0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43,
+       0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43,
+       0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43,
+       0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43,
+       0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43,
+       0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43,
+       0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43,
+       // Bytes 5c0 - 5ff
+       0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43,
+       0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43,
+       0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43,
+       0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43,
+       0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43,
+       0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43,
+       0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43,
+       0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43,
+       // Bytes 600 - 63f
+       0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43,
+       0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43,
+       0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43,
+       0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43,
+       0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43,
+       0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43,
+       0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43,
+       0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43,
+       // Bytes 640 - 67f
+       0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43,
+       0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43,
+       0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43,
+       0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43,
+       0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43,
+       0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43,
+       0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43,
+       0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43,
+       // Bytes 680 - 6bf
+       0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43,
+       0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43,
+       0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43,
+       0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43,
+       0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43,
+       0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43,
+       0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43,
+       0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43,
+       // Bytes 6c0 - 6ff
+       0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43,
+       0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43,
+       0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43,
+       0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43,
+       0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43,
+       0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43,
+       0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43,
+       0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43,
+       // Bytes 700 - 73f
+       0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43,
+       0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43,
+       0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43,
+       0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43,
+       0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43,
+       0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43,
+       0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43,
+       0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43,
+       // Bytes 740 - 77f
+       0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43,
+       0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43,
+       0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43,
+       0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43,
+       0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43,
+       0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43,
+       0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43,
+       0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43,
+       // Bytes 780 - 7bf
+       0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43,
+       0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43,
+       0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43,
+       0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43,
+       0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43,
+       0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43,
+       0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43,
+       0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43,
+       // Bytes 7c0 - 7ff
+       0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43,
+       0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43,
+       0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43,
+       0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43,
+       0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43,
+       0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43,
+       0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43,
+       0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43,
+       // Bytes 800 - 83f
+       0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43,
+       0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43,
+       0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43,
+       0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43,
+       0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43,
+       0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43,
+       0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43,
+       0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43,
+       // Bytes 840 - 87f
+       0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43,
+       0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43,
+       0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43,
+       0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43,
+       0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43,
+       0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43,
+       0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43,
+       0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43,
+       // Bytes 880 - 8bf
+       0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43,
+       0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43,
+       0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43,
+       0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43,
+       0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43,
+       0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43,
+       0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43,
+       0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43,
+       // Bytes 8c0 - 8ff
+       0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43,
+       0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43,
+       0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43,
+       0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43,
+       0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43,
+       0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43,
+       0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43,
+       0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43,
+       // Bytes 900 - 93f
+       0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43,
+       0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43,
+       0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43,
+       0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43,
+       0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43,
+       0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43,
+       0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43,
+       0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43,
+       // Bytes 940 - 97f
+       0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43,
+       0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43,
+       0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43,
+       0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43,
+       0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43,
+       0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43,
+       0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43,
+       0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43,
+       // Bytes 980 - 9bf
+       0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43,
+       0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43,
+       0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43,
+       0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43,
+       0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43,
+       0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43,
+       0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43,
+       0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43,
+       // Bytes 9c0 - 9ff
+       0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43,
+       0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43,
+       0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43,
+       0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43,
+       0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43,
+       0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43,
+       0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43,
+       0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43,
+       // Bytes a00 - a3f
+       0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43,
+       0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43,
+       0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43,
+       0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43,
+       0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43,
+       0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43,
+       0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43,
+       0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43,
+       // Bytes a40 - a7f
+       0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43,
+       0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43,
+       0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43,
+       0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43,
+       0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43,
+       0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43,
+       0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43,
+       0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43,
+       // Bytes a80 - abf
+       0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43,
+       0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43,
+       0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43,
+       0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43,
+       0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43,
+       0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43,
+       0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43,
+       0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43,
+       // Bytes ac0 - aff
+       0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43,
+       0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43,
+       0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43,
+       0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43,
+       0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43,
+       0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43,
+       0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43,
+       0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43,
+       // Bytes b00 - b3f
+       0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43,
+       0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43,
+       0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43,
+       0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43,
+       0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43,
+       0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43,
+       0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43,
+       0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43,
+       // Bytes b40 - b7f
+       0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43,
+       0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43,
+       0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43,
+       0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43,
+       0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43,
+       0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43,
+       0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43,
+       0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43,
+       // Bytes b80 - bbf
+       0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43,
+       0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43,
+       0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43,
+       0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43,
+       0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43,
+       0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43,
+       0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43,
+       0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43,
+       // Bytes bc0 - bff
+       0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43,
+       0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43,
+       0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43,
+       0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43,
+       0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43,
+       0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43,
+       0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43,
+       0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43,
+       // Bytes c00 - c3f
+       0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43,
+       0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43,
+       0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43,
+       0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43,
+       0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43,
+       0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43,
+       0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43,
+       0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43,
+       // Bytes c40 - c7f
+       0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43,
+       0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43,
+       0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43,
+       0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43,
+       0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43,
+       0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43,
+       0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43,
+       0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43,
+       // Bytes c80 - cbf
+       0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43,
+       0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43,
+       0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43,
+       0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43,
+       0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43,
+       0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43,
+       0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43,
+       0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43,
+       // Bytes cc0 - cff
+       0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43,
+       0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43,
+       0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43,
+       0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43,
+       0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43,
+       0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43,
+       0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43,
+       0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43,
+       // Bytes d00 - d3f
+       0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43,
+       0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43,
+       0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43,
+       0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43,
+       0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43,
+       0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43,
+       0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43,
+       0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43,
+       // Bytes d40 - d7f
+       0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43,
+       0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43,
+       0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43,
+       0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43,
+       0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43,
+       0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43,
+       0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43,
+       0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43,
+       // Bytes d80 - dbf
+       0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43,
+       0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43,
+       0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43,
+       0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43,
+       0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43,
+       0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43,
+       0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43,
+       0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43,
+       // Bytes dc0 - dff
+       0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43,
+       0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43,
+       0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43,
+       0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43,
+       0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43,
+       0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43,
+       0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43,
+       0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43,
+       // Bytes e00 - e3f
+       0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43,
+       0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43,
+       0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43,
+       0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43,
+       0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43,
+       0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43,
+       0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43,
+       0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43,
+       // Bytes e40 - e7f
+       0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43,
+       0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43,
+       0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43,
+       0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43,
+       0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43,
+       0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43,
+       0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43,
+       0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43,
+       // Bytes e80 - ebf
+       0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43,
+       0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43,
+       0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43,
+       0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43,
+       0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43,
+       0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43,
+       0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43,
+       0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43,
+       // Bytes ec0 - eff
+       0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43,
+       0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43,
+       0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43,
+       0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43,
+       0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43,
+       0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43,
+       0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43,
+       0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43,
+       // Bytes f00 - f3f
+       0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43,
+       0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43,
+       0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43,
+       0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43,
+       0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43,
+       0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43,
+       0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43,
+       0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43,
+       // Bytes f40 - f7f
+       0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43,
+       0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43,
+       0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43,
+       0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43,
+       0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43,
+       0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43,
+       0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43,
+       0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43,
+       // Bytes f80 - fbf
+       0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43,
+       0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43,
+       0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43,
+       0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43,
+       0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43,
+       0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43,
+       0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43,
+       0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43,
+       // Bytes fc0 - fff
+       0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43,
+       0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43,
+       0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43,
+       0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43,
+       0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43,
+       0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43,
+       0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43,
+       0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43,
+       // Bytes 1000 - 103f
+       0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43,
+       0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43,
+       0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43,
+       0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43,
+       0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43,
+       0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43,
+       0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43,
+       0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43,
+       // Bytes 1040 - 107f
+       0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43,
+       0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43,
+       0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43,
+       0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43,
+       0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43,
+       0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43,
+       0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43,
+       0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43,
+       // Bytes 1080 - 10bf
+       0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43,
+       0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43,
+       0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43,
+       0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43,
+       0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43,
+       0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43,
+       0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43,
+       0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43,
+       // Bytes 10c0 - 10ff
+       0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43,
+       0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43,
+       0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43,
+       0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43,
+       0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43,
+       0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43,
+       0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43,
+       0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43,
+       // Bytes 1100 - 113f
+       0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43,
+       0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43,
+       0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43,
+       0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43,
+       0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43,
+       0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43,
+       0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43,
+       0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43,
+       // Bytes 1140 - 117f
+       0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43,
+       0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43,
+       0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43,
+       0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43,
+       0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43,
+       0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43,
+       0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43,
+       0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43,
+       // Bytes 1180 - 11bf
+       0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43,
+       0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43,
+       0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43,
+       0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43,
+       0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43,
+       0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43,
+       0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43,
+       0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43,
+       // Bytes 11c0 - 11ff
+       0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43,
+       0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43,
+       0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43,
+       0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43,
+       0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43,
+       0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43,
+       0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43,
+       0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43,
+       // Bytes 1200 - 123f
+       0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43,
+       0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43,
+       0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43,
+       0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43,
+       0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43,
+       0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43,
+       0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43,
+       0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43,
+       // Bytes 1240 - 127f
+       0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43,
+       0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43,
+       0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43,
+       0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43,
+       0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43,
+       0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43,
+       0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43,
+       0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43,
+       // Bytes 1280 - 12bf
+       0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43,
+       0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43,
+       0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43,
+       0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43,
+       0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43,
+       0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43,
+       0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43,
+       0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43,
+       // Bytes 12c0 - 12ff
+       0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43,
+       0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43,
+       0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43,
+       0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43,
+       0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43,
+       0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43,
+       0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43,
+       0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43,
+       // Bytes 1300 - 133f
+       0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43,
+       0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43,
+       0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43,
+       0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43,
+       0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43,
+       0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43,
+       0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43,
+       0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43,
+       // Bytes 1340 - 137f
+       0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43,
+       0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43,
+       0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43,
+       0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43,
+       0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43,
+       0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43,
+       0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43,
+       0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43,
+       // Bytes 1380 - 13bf
+       0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43,
+       0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43,
+       0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43,
+       0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43,
+       0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43,
+       0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43,
+       0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43,
+       0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43,
+       // Bytes 13c0 - 13ff
+       0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43,
+       0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43,
+       0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43,
+       0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43,
+       0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43,
+       0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43,
+       0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43,
+       0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43,
+       // Bytes 1400 - 143f
+       0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43,
+       0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43,
+       0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43,
+       0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43,
+       0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43,
+       0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43,
+       0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43,
+       0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43,
+       // Bytes 1440 - 147f
+       0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43,
+       0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43,
+       0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43,
+       0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43,
+       0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43,
+       0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43,
+       0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43,
+       0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43,
+       // Bytes 1480 - 14bf
+       0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43,
+       0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43,
+       0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43,
+       0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43,
+       0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43,
+       0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43,
+       0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43,
+       0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43,
+       // Bytes 14c0 - 14ff
+       0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43,
+       0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43,
+       0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43,
+       0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43,
+       0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43,
+       0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43,
+       0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43,
+       0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43,
+       // Bytes 1500 - 153f
+       0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43,
+       0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43,
+       0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43,
+       0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43,
+       0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43,
+       0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43,
+       0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43,
+       0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43,
+       // Bytes 1540 - 157f
+       0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43,
+       0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43,
+       0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43,
+       0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43,
+       0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43,
+       0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43,
+       0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43,
+       0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43,
+       // Bytes 1580 - 15bf
+       0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43,
+       0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43,
+       0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43,
+       0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43,
+       0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43,
+       0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43,
+       0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43,
+       0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43,
+       // Bytes 15c0 - 15ff
+       0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43,
+       0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43,
+       0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43,
+       0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43,
+       0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43,
+       0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43,
+       0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43,
+       0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43,
+       // Bytes 1600 - 163f
+       0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43,
+       0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43,
+       0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43,
+       0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43,
+       0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43,
+       0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43,
+       0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43,
+       0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43,
+       // Bytes 1640 - 167f
+       0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44,
+       0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94,
+       0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0,
+       0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA,
+       0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0,
+       0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44,
+       0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93,
+       0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0,
+       // Bytes 1680 - 16bf
+       0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88,
+       0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1,
+       0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44,
+       0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86,
+       0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0,
+       0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94,
+       0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2,
+       0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44,
+       // Bytes 16c0 - 16ff
+       0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80,
+       0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0,
+       0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93,
+       0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3,
+       0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44,
+       0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A,
+       0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0,
+       0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA,
+       // Bytes 1700 - 173f
+       0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3,
+       0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44,
+       0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE,
+       0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0,
+       0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB,
+       0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4,
+       0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44,
+       0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2,
+       // Bytes 1740 - 177f
+       0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0,
+       0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84,
+       0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5,
+       0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44,
+       0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89,
+       0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0,
+       0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A,
+       0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5,
+       // Bytes 1780 - 17bf
+       0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44,
+       0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2,
+       0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0,
+       0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A,
+       0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6,
+       0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44,
+       0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93,
+       0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0,
+       // Bytes 17c0 - 17ff
+       0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7,
+       0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6,
+       0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44,
+       0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5,
+       0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0,
+       0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92,
+       0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7,
+       0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44,
+       // Bytes 1800 - 183f
+       0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2,
+       0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0,
+       0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92,
+       0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8,
+       0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44,
+       0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85,
+       0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0,
+       0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A,
+       // Bytes 1840 - 187f
+       0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9,
+       0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44,
+       0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84,
+       0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0,
+       0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92,
+       0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21,
+       0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30,
+       0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42,
+       // Bytes 1880 - 18bf
+       0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31,
+       0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31,
+       0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42,
+       0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39,
+       0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32,
+       0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42,
+       0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35,
+       0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32,
+       // Bytes 18c0 - 18ff
+       0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42,
+       0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31,
+       0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33,
+       0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42,
+       0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39,
+       0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34,
+       0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42,
+       0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35,
+       // Bytes 1900 - 193f
+       0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34,
+       0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42,
+       0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C,
+       0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37,
+       0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42,
+       0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D,
+       0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41,
+       0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42,
+       // Bytes 1940 - 197f
+       0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A,
+       0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48,
+       0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42,
+       0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A,
+       0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49,
+       0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42,
+       0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A,
+       0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D,
+       // Bytes 1980 - 19bf
+       0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42,
+       0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F,
+       0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50,
+       0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42,
+       0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76,
+       0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57,
+       0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42,
+       0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64,
+       // Bytes 19c0 - 19ff
+       0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64,
+       0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42,
+       0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66,
+       0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66,
+       0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42,
+       0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76,
+       0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B,
+       0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42,
+       // Bytes 1a00 - 1a3f
+       0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74,
+       0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C,
+       0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42,
+       0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56,
+       0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D,
+       0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42,
+       0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46,
+       0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E,
+       // Bytes 1a40 - 1a7f
+       0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42,
+       0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46,
+       0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70,
+       0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42,
+       0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69,
+       0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29,
+       0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29,
+       0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29,
+       // Bytes 1a80 - 1abf
+       0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29,
+       0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29,
+       0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29,
+       0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29,
+       0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29,
+       0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29,
+       0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29,
+       0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29,
+       // Bytes 1ac0 - 1aff
+       0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29,
+       0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29,
+       0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29,
+       0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29,
+       0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29,
+       0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29,
+       0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29,
+       0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29,
+       // Bytes 1b00 - 1b3f
+       0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29,
+       0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29,
+       0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29,
+       0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29,
+       0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29,
+       0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29,
+       0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29,
+       0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29,
+       // Bytes 1b40 - 1b7f
+       0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29,
+       0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29,
+       0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29,
+       0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E,
+       0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E,
+       0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E,
+       0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E,
+       0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E,
+       // Bytes 1b80 - 1bbf
+       0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E,
+       0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D,
+       0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E,
+       0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A,
+       0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49,
+       0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7,
+       0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61,
+       0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D,
+       // Bytes 1bc0 - 1bff
+       0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45,
+       0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A,
+       0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49,
+       0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73,
+       0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72,
+       0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75,
+       0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32,
+       0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32,
+       // Bytes 1c00 - 1c3f
+       0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67,
+       0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C,
+       0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61,
+       0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A,
+       0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32,
+       0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9,
+       0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7,
+       0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32,
+       // Bytes 1c40 - 1c7f
+       0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C,
+       0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69,
+       0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43,
+       0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E,
+       0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46,
+       0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57,
+       0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C,
+       0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73,
+       // Bytes 1c80 - 1cbf
+       0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31,
+       0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44,
+       0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34,
+       0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28,
+       0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29,
+       0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31,
+       0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44,
+       0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81,
+       // Bytes 1cc0 - 1cff
+       0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31,
+       0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9,
+       0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6,
+       0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44,
+       0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C,
+       0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34,
+       0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88,
+       0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6,
+       // Bytes 1d00 - 1d3f
+       0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44,
+       0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97,
+       0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36,
+       0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5,
+       0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7,
+       0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44,
+       0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82,
+       0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39,
+       // Bytes 1d40 - 1d7f
+       0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9,
+       0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E,
+       0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44,
+       0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69,
+       0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5,
+       0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB,
+       0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4,
+       0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44,
+       // Bytes 1d80 - 1dbf
+       0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9,
+       0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8,
+       0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE,
+       0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8,
+       0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44,
+       0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9,
+       0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8,
+       0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC,
+       // Bytes 1dc0 - 1dff
+       0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA,
+       0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44,
+       0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9,
+       0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8,
+       0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89,
+       0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB,
+       0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44,
+       0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9,
+       // Bytes 1e00 - 1e3f
+       0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8,
+       0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89,
+       0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC,
+       0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44,
+       0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9,
+       0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8,
+       0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89,
+       0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE,
+       // Bytes 1e40 - 1e7f
+       0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44,
+       0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9,
+       0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8,
+       0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD,
+       0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3,
+       0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44,
+       0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9,
+       0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8,
+       // Bytes 1e80 - 1ebf
+       0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD,
+       0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4,
+       0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44,
+       0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9,
+       0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8,
+       0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE,
+       0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5,
+       0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44,
+       // Bytes 1ec0 - 1eff
+       0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8,
+       0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8,
+       0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1,
+       0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6,
+       0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44,
+       0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9,
+       0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8,
+       0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85,
+       // Bytes 1f00 - 1f3f
+       0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9,
+       0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44,
+       0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8,
+       0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8,
+       0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A,
+       0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81,
+       0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44,
+       0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9,
+       // Bytes 1f40 - 1f7f
+       0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9,
+       0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85,
+       0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82,
+       0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44,
+       0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8,
+       0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9,
+       0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85,
+       0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83,
+       // Bytes 1f80 - 1fbf
+       0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44,
+       0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8,
+       0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9,
+       0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87,
+       0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84,
+       0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44,
+       0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8,
+       0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9,
+       // Bytes 1fc0 - 1fff
+       0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89,
+       0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86,
+       0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44,
+       0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8,
+       0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9,
+       0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86,
+       0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86,
+       0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44,
+       // Bytes 2000 - 203f
+       0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9,
+       0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9,
+       0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4,
+       0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A,
+       0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44,
+       0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8,
+       0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9,
+       0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87,
+       // Bytes 2040 - 207f
+       0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A,
+       0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44,
+       0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84,
+       0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29,
+       0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28,
+       0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84,
+       0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29,
+       0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28,
+       // Bytes 2080 - 20bf
+       0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84,
+       0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29,
+       0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28,
+       0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84,
+       0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29,
+       0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28,
+       0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8,
+       0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29,
+       // Bytes 20c0 - 20ff
+       0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28,
+       0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB,
+       0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29,
+       0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28,
+       0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85,
+       0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29,
+       0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28,
+       0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90,
+       // Bytes 2100 - 213f
+       0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29,
+       0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28,
+       0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD,
+       0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29,
+       0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28,
+       0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C,
+       0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29,
+       0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28,
+       // Bytes 2140 - 217f
+       0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89,
+       0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29,
+       0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28,
+       0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5,
+       0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29,
+       0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28,
+       0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3,
+       0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29,
+       // Bytes 2180 - 21bf
+       0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31,
+       0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6,
+       0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9,
+       0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31,
+       0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7,
+       0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5,
+       0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31,
+       0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6,
+       // Bytes 21c0 - 21ff
+       0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9,
+       0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31,
+       0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6,
+       0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9,
+       0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31,
+       0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6,
+       0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9,
+       0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31,
+       // Bytes 2200 - 223f
+       0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6,
+       0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9,
+       0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31,
+       0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81,
+       0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35,
+       0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31,
+       0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81,
+       0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39,
+       // Bytes 2240 - 227f
+       0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32,
+       0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6,
+       0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9,
+       0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32,
+       0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6,
+       0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9,
+       0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32,
+       0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6,
+       // Bytes 2280 - 22bf
+       0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5,
+       0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32,
+       0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6,
+       0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33,
+       0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,
+       0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6,
+       0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34,
+       0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33,
+       // Bytes 22c0 - 22ff
+       0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81,
+       0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36,
+       0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37,
+       0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88,
+       0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D,
+       0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31,
+       0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2,
+       0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88,
+       // Bytes 2300 - 233f
+       0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD,
+       0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9,
+       0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85,
+       0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46,
+       0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
+       0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA,
+       0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8,
+       0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE,
+       // Bytes 2340 - 237f
+       0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9,
+       0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC,
+       0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46,
+       0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8,
+       0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA,
+       0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8,
+       0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD,
+       0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8,
+       // Bytes 2380 - 23bf
+       0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89,
+       0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
+       0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8,
+       0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD,
+       0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8,
+       0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC,
+       0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8,
+       0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89,
+       // Bytes 23c0 - 23ff
+       0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46,
+       0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8,
+       0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3,
+       0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8,
+       0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD,
+       0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9,
+       0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE,
+       0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46,
+       // Bytes 2400 - 243f
+       0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8,
+       0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5,
+       0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9,
+       0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85,
+       0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9,
+       0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A,
+       0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46,
+       0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8,
+       // Bytes 2440 - 247f
+       0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7,
+       0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8,
+       0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85,
+       0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9,
+       0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A,
+       0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46,
+       0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8,
+       0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81,
+       // Bytes 2480 - 24bf
+       0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9,
+       0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84,
+       0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8,
+       0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85,
+       0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46,
+       0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
+       0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84,
+       0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8,
+       // Bytes 24c0 - 24ff
+       0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC,
+       0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9,
+       0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89,
+       0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46,
+       0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9,
+       0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84,
+       0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8,
+       0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC,
+       // Bytes 2500 - 253f
+       0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9,
+       0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A,
+       0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46,
+       0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9,
+       0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85,
+       0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8,
+       0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE,
+       0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9,
+       // Bytes 2540 - 257f
+       0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD,
+       0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46,
+       0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9,
+       0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86,
+       0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8,
+       0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD,
+       0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9,
+       0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A,
+       // Bytes 2580 - 25bf
+       0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46,
+       0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9,
+       0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A,
+       0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9,
+       0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85,
+       0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8,
+       0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC,
+       0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46,
+       // Bytes 25c0 - 25ff
+       0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9,
+       0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A,
+       0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9,
+       0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
+       0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9,
+       0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88,
+       0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46,
+       0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9,
+       // Bytes 2600 - 263f
+       0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A,
+       0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9,
+       0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94,
+       0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB,
+       0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2,
+       0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46,
+       0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0,
+       0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD,
+       // Bytes 2640 - 267f
+       0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82,
+       0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0,
+       0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE,
+       0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7,
+       0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46,
+       0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0,
+       0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE,
+       0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1,
+       // Bytes 2680 - 26bf
+       0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0,
+       0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE,
+       0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
+       0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46,
+       0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2,
+       0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81,
+       0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88,
+       0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3,
+       // Bytes 26c0 - 26ff
+       0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82,
+       0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88,
+       0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46,
+       0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3,
+       0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83,
+       0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA,
+       0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3,
+       0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD,
+       // Bytes 2700 - 273f
+       0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90,
+       0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46,
+       0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72,
+       0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3,
+       0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28,
+       0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48,
+       0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29,
+       0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1,
+       // Bytes 2740 - 277f
+       0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85,
+       0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1,
+       0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87,
+       0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
+       0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1,
+       0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28,
+       0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48,
+       0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29,
+       // Bytes 2780 - 27bf
+       0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1,
+       0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85,
+       0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1,
+       0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91,
+       0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84,
+       0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61,
+       0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8,
+       0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48,
+       // Bytes 27c0 - 27ff
+       0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87,
+       0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9,
+       0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7,
+       0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8,
+       0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84,
+       0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8,
+       0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88,
+       0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2,
+       // Bytes 2800 - 283f
+       0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
+       0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2,
+       0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88,
+       0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE,
+       0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3,
+       0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95,
+       0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3,
+       0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B,
+       // Bytes 2840 - 287f
+       0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,
+       0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3,
+       0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95,
+       0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3,
+       0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C,
+       0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94,
+       0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3,
+       0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95,
+       // Bytes 2880 - 28bf
+       0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3,
+       0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
+       0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6,
+       0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3,
+       0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9,
+       0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3,
+       0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
+       0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1,
+       // Bytes 28c0 - 28ff
+       0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3,
+       0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A,
+       0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3,
+       0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83,
+       0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86,
+       0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3,
+       0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,
+       0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3,
+       // Bytes 2900 - 293f
+       0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82,
+       0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92,
+       0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3,
+       0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3,
+       0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3,
+       0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82,
+       0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98,
+       0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3,
+       // Bytes 2940 - 297f
+       0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB,
+       0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3,
+       0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82,
+       0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E,
+       0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3,
+       0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF,
+       0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3,
+       0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82,
+       // Bytes 2980 - 29bf
+       0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF,
+       0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2,
+       0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2,
+       0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2,
+       0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB,
+       0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3,
+       0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82,
+       0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3,
+       // Bytes 29c0 - 29ff
+       0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82,
+       0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C,
+       0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+       0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB,
+       0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83,
+       0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD,
+       0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3,
+       0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B,
+       // Bytes 2a00 - 2a3f
+       0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3,
+       0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC,
+       0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3,
+       0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82,
+       0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3,
+       0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82,
+       0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C,
+       0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+       // Bytes 2a40 - 2a7f
+       0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F,
+       0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
+       0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A,
+       0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
+       0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC,
+       0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3,
+       0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF,
+       0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3,
+       // Bytes 2a80 - 2abf
+       0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83,
+       0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3,
+       0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82,
+       0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C,
+       0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82,
+       0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F,
+       0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83,
+       0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC,
+       // Bytes 2ac0 - 2aff
+       0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3,
+       0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88,
+       0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3,
+       0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,
+       0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4,
+       0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1,
+       0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92,
+       0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9,
+       // Bytes 2b00 - 2b3f
+       0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7,
+       0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2,
+       0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
+       0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2,
+       0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82,
+       0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD,
+       0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83,
+       0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5,
+       // Bytes 2b40 - 2b7f
+       0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83,
+       0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F,
+       0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
+       0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98,
+       0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83,
+       0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B,
+       0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83,
+       0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E,
+       // Bytes 2b80 - 2bbf
+       0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83,
+       0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1,
+       0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+       0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB,
+       0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82,
+       0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84,
+       0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1,
+       0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3,
+       // Bytes 2bc0 - 2bff
+       0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB,
+       0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+       0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD,
+       0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+       0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD,
+       0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83,
+       0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52,
+       0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83,
+       // Bytes 2c00 - 2c3f
+       0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3,
+       0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83,
+       0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3,
+       0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83,
+       0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3,
+       0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88,
+       0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3,
+       0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88,
+       // Bytes 2c40 - 2c7f
+       0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3,
+       0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7,
+       0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3,
+       0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F,
+       0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
+       0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3,
+       0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82,
+       0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9,
+       // Bytes 2c80 - 2cbf
+       0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84,
+       0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9,
+       0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88,
+       0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0,
+       0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0,
+       0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0,
+       0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0,
+       0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0,
+       // Bytes 2cc0 - 2cff
+       0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0,
+       0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,
+       0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,
+       0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0,
+       0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0,
+       0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,
+       0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0,
+       0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0,
+       // Bytes 2d00 - 2d3f
+       0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,
+       0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0,
+       0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0,
+       0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1,
+       0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1,
+       0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+       0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+       0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+       // Bytes 2d40 - 2d7f
+       0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+       0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+       0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+       0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+       0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+       0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+       0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1,
+       0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0,
+       // Bytes 2d80 - 2dbf
+       0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01,
+       0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84,
+       0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0,
+       0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D,
+       0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0,
+       0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01,
+       0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92,
+       0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0,
+       // Bytes 2dc0 - 2dff
+       0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96,
+       0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0,
+       0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01,
+       0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0,
+       0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0,
+       0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44,
+       0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC,
+       0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9,
+       // Bytes 2e00 - 2e3f
+       0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9,
+       0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9,
+       0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
+       0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01,
+       // Bytes 2e40 - 2e7f
+       0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01,
+       0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01,
+       // Bytes 2e80 - 2ebf
+       0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01,
+       0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01,
+       0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3,
+       0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1,
+       0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4,
+       0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99,
+       0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C,
+       0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83,
+       // Bytes 2ec0 - 2eff
+       0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83,
+       0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3,
+       0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1,
+       0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80,
+       0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4,
+       0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82,
+       0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82,
+       0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3,
+       // Bytes 2f00 - 2f3f
+       0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3,
+       0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC,
+       0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F,
+       0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83,
+       0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
+       0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3,
+       0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88,
+       0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95,
+       // Bytes 2f40 - 2f7f
+       0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83,
+       0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
+       0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01,
+       0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01,
+       0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC,
+       0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03,
+       0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81,
+       0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41,
+       // Bytes 2f80 - 2fbf
+       0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9,
+       0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC,
+       0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03,
+       0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8,
+       0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42,
+       0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5,
+       0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC,
+       0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03,
+       // Bytes 2fc0 - 2fff
+       0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87,
+       0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44,
+       0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5,
+       0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC,
+       0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03,
+       0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83,
+       0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45,
+       0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9,
+       // Bytes 3000 - 303f
+       0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC,
+       0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03,
+       0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8,
+       0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45,
+       0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9,
+       0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC,
+       0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03,
+       0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87,
+       // Bytes 3040 - 307f
+       0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47,
+       0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9,
+       0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC,
+       0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03,
+       0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7,
+       0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49,
+       0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9,
+       0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC,
+       // Bytes 3080 - 30bf
+       0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03,
+       0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87,
+       0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49,
+       0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9,
+       0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC,
+       0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03,
+       0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82,
+       0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B,
+       // Bytes 30c0 - 30ff
+       0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5,
+       0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC,
+       0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03,
+       0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7,
+       0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C,
+       0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9,
+       0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC,
+       0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03,
+       // Bytes 3100 - 313f
+       0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83,
+       0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E,
+       0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5,
+       0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC,
+       0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03,
+       0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81,
+       0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F,
+       0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9,
+       // Bytes 3140 - 317f
+       0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC,
+       0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03,
+       0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87,
+       0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52,
+       0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9,
+       0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC,
+       0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03,
+       0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82,
+       // Bytes 3180 - 31bf
+       0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53,
+       0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5,
+       0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC,
+       0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03,
+       0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7,
+       0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54,
+       0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9,
+       0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC,
+       // Bytes 31c0 - 31ff
+       0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03,
+       0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A,
+       0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55,
+       0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9,
+       0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC,
+       0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03,
+       0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD,
+       0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56,
+       // Bytes 3200 - 323f
+       0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5,
+       0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC,
+       0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03,
+       0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88,
+       0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58,
+       0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9,
+       0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC,
+       0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03,
+       // Bytes 3240 - 327f
+       0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84,
+       0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59,
+       0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9,
+       0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC,
+       0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03,
+       0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C,
+       0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A,
+       0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9,
+       // Bytes 3280 - 32bf
+       0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC,
+       0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03,
+       0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C,
+       0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61,
+       0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5,
+       0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC,
+       0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03,
+       0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81,
+       // Bytes 32c0 - 32ff
+       0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63,
+       0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9,
+       0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC,
+       0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03,
+       0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD,
+       0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65,
+       0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9,
+       0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC,
+       // Bytes 3300 - 333f
+       0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03,
+       0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89,
+       0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65,
+       0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9,
+       0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC,
+       0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03,
+       0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81,
+       0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67,
+       // Bytes 3340 - 337f
+       0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9,
+       0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC,
+       0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03,
+       0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87,
+       0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68,
+       0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5,
+       0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC,
+       0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03,
+       // Bytes 3380 - 33bf
+       0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81,
+       0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69,
+       0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9,
+       0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC,
+       0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03,
+       0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91,
+       0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69,
+       0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5,
+       // Bytes 33c0 - 33ff
+       0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC,
+       0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03,
+       0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3,
+       0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B,
+       0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9,
+       0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC,
+       0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03,
+       0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81,
+       // Bytes 3400 - 343f
+       0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D,
+       0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9,
+       0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC,
+       0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03,
+       0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3,
+       0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E,
+       0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5,
+       0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC,
+       // Bytes 3440 - 347f
+       0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03,
+       0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B,
+       0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F,
+       0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9,
+       0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC,
+       0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03,
+       0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C,
+       0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72,
+       // Bytes 3480 - 34bf
+       0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5,
+       0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC,
+       0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03,
+       0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7,
+       0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74,
+       0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9,
+       0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC,
+       0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03,
+       // Bytes 34c0 - 34ff
+       0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1,
+       0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75,
+       0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9,
+       0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC,
+       0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03,
+       0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C,
+       0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75,
+       0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5,
+       // Bytes 3500 - 353f
+       0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC,
+       0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03,
+       0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83,
+       0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77,
+       0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9,
+       0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC,
+       0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03,
+       0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3,
+       // Bytes 3540 - 357f
+       0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78,
+       0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9,
+       0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC,
+       0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03,
+       0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87,
+       0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79,
+       0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9,
+       0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC,
+       // Bytes 3580 - 35bf
+       0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03,
+       0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C,
+       0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A,
+       0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80,
+       0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04,
+       0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86,
+       0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84,
+       0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04,
+       // Bytes 35c0 - 35ff
+       0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6,
+       0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81,
+       0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04,
+       0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92,
+       0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80,
+       0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04,
+       0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91,
+       0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85,
+       // Bytes 3600 - 363f
+       0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04,
+       0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97,
+       0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81,
+       0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04,
+       0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99,
+       0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84,
+       0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04,
+       0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F,
+       // Bytes 3640 - 367f
+       0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81,
+       0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04,
+       0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5,
+       0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84,
+       0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04,
+       0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9,
+       0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81,
+       0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04,
+       // Bytes 3680 - 36bf
+       0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1,
+       0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85,
+       0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04,
+       0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7,
+       0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80,
+       0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04,
+       0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9,
+       0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82,
+       // Bytes 36c0 - 36ff
+       0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04,
+       0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81,
+       0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94,
+       0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04,
+       0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85,
+       0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86,
+       0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04,
+       0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92,
+       // Bytes 3700 - 373f
+       0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88,
+       0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04,
+       0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90,
+       0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81,
+       0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04,
+       0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95,
+       0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86,
+       0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04,
+       // Bytes 3740 - 377f
+       0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98,
+       0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84,
+       0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04,
+       0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A,
+       0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88,
+       0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04,
+       0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3,
+       0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B,
+       // Bytes 3780 - 37bf
+       0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04,
+       0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD,
+       0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86,
+       0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04,
+       0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5,
+       0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86,
+       0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04,
+       0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6,
+       // Bytes 37c0 - 37ff
+       0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88,
+       0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04,
+       0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8,
+       0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88,
+       0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04,
+       0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83,
+       0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86,
+       0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04,
+       // Bytes 3800 - 383f
+       0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87,
+       0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88,
+       0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04,
+       0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4,
+       0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F,
+       0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04,
+       0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8,
+       0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88,
+       // Bytes 3840 - 387f
+       0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04,
+       0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7,
+       0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94,
+       0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04,
+       0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92,
+       0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94,
+       0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA,
+       0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,
+       // Bytes 3880 - 38bf
+       0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41,
+       0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC,
+       0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86,
+       0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC,
+       0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89,
+       0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA,
+       0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05,
+       0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41,
+       // Bytes 38c0 - 38ff
+       0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC,
+       0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7,
+       0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC,
+       0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81,
+       0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA,
+       0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05,
+       0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45,
+       0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC,
+       // Bytes 3900 - 393f
+       0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7,
+       0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC,
+       0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84,
+       0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA,
+       0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05,
+       0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F,
+       0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC,
+       0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83,
+       // Bytes 3940 - 397f
+       0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC,
+       0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80,
+       0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA,
+       0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,
+       0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F,
+       0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC,
+       0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B,
+       0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC,
+       // Bytes 3980 - 39bf
+       0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3,
+       0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA,
+       0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05,
+       0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53,
+       0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC,
+       0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3,
+       0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC,
+       0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88,
+       // Bytes 39c0 - 39ff
+       0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
+       0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05,
+       0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55,
+       0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC,
+       0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B,
+       0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC,
+       0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89,
+       0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,
+       // Bytes 3a00 - 3a3f
+       0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,
+       0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61,
+       0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC,
+       0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86,
+       0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC,
+       0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83,
+       0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA,
+       0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05,
+       // Bytes 3a40 - 3a7f
+       0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61,
+       0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC,
+       0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3,
+       0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC,
+       0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80,
+       0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA,
+       0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05,
+       0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65,
+       // Bytes 3a80 - 3abf
+       0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC,
+       0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3,
+       0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC,
+       0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81,
+       0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA,
+       0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05,
+       0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F,
+       0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC,
+       // Bytes 3ac0 - 3aff
+       0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83,
+       0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC,
+       0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88,
+       0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA,
+       0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05,
+       0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F,
+       0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC,
+       0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B,
+       // Bytes 3b00 - 3b3f
+       0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC,
+       0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89,
+       0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6,
+       0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05,
+       0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72,
+       0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC,
+       0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C,
+       0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC,
+       // Bytes 3b40 - 3b7f
+       0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81,
+       0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA,
+       0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05,
+       0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75,
+       0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC,
+       0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B,
+       0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC,
+       0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83,
+       // Bytes 3b80 - 3bbf
+       0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA,
+       0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05,
+       0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1,
+       0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE,
+       0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE,
+       0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC,
+       0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82,
+       0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05,
+       // Bytes 3bc0 - 3bff
+       0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05,
+       0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
+       0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87,
+       0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94,
+       0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC,
+       0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8,
+       0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05,
+       0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05,
+       // Bytes 3c00 - 3c3f
+       0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
+       0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
+       0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85,
+       0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC,
+       0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8,
+       0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05,
+       0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05,
+       0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
+       // Bytes 3c40 - 3c7f
+       0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89,
+       0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6,
+       0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC,
+       0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8,
+       0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05,
+       0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05,
+       0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
+       0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
+       // Bytes 3c80 - 3cbf
+       0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86,
+       0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC,
+       0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8,
+       0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05,
+       0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05,
+       0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2,
+       0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A,
+       0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2,
+       // Bytes 3cc0 - 3cff
+       0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC,
+       0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8,
+       0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05,
+       0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+       // Bytes 3d00 - 3d3f
+       0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
+       0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+       // Bytes 3d40 - 3d7f
+       0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
+       0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
+       // Bytes 3d80 - 3dbf
+       0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+       // Bytes 3dc0 - 3dff
+       0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+       0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
+       // Bytes 3e00 - 3e3f
+       0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA,
+       0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
+       0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+       // Bytes 3e40 - 3e7f
+       0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
+       0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+       0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+       0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+       0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA,
+       0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA,
+       0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA,
+       // Bytes 3e80 - 3ebf
+       0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+       0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
+       0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
+       0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
+       0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
+       0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
+       0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA,
+       0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA,
+       // Bytes 3ec0 - 3eff
+       0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA,
+       0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA,
+       0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA,
+       0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09,
+       0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09,
+       0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09,
+       0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85,
+       0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11,
+       // Bytes 3f00 - 3f3f
+       0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D,
+       // Bytes 3f40 - 3f7f
+       0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D,
+       // Bytes 3f80 - 3fbf
+       0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D,
+       0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D,
+       0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D,
+       0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D,
+       // Bytes 3fc0 - 3fff
+       0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D,
+       0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D,
+       // Bytes 4000 - 403f
+       0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D,
+       // Bytes 4040 - 407f
+       0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D,
+       0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D,
+       0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D,
+       // Bytes 4080 - 40bf
+       0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D,
+       0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D,
+       0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D,
+       0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D,
+       // Bytes 40c0 - 40ff
+       0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D,
+       0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D,
+       0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
+       0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC,
+       0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC,
+       0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+       0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
+       0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
+       // Bytes 4100 - 413f
+       0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD,
+       0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,
+       0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+       0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
+       0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
+       0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC,
+       0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC,
+       0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+       // Bytes 4140 - 417f
+       0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
+       0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
+       0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC,
+       0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC,
+       0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+       0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
+       0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
+       0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD,
+       // Bytes 4180 - 41bf
+       0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,
+       0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+       0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
+       0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
+       0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC,
+       0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC,
+       0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+       0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
+       // Bytes 41c0 - 41ff
+       0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD,
+       0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC,
+       0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC,
+       0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE,
+       0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB,
+       0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD,
+       0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD,
+       0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,
+       // Bytes 4200 - 423f
+       0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF,
+       0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB,
+       0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD,
+       0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC,
+       0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC,
+       0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF,
+       0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB,
+       0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82,
+       // Bytes 4240 - 427f
+       0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0,
+       0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82,
+       0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2,
+       0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43,
+       0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84,
+       0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20,
+       0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9,
+       0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC,
+       // Bytes 4280 - 42bf
+       0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43,
+       0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94,
+       0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20,
+       0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5,
+       0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD,
+       0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43,
+       0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D,
+       0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20,
+       // Bytes 42c0 - 42ff
+       0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D,
+       0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9,
+       0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43,
+       0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82,
+       0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D,
+       0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE,
+       0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC,
+       0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9,
+       // Bytes 4300 - 433f
+       0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
+       0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC,
+       0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9,
+       0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
+       0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC,
+       0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9,
+       0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
+       0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC,
+       // Bytes 4340 - 437f
+       0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9,
+       0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7,
+       0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6,
+       0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41,
+       0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
+       0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6,
+       0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41,
+       0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7,
+       // Bytes 4380 - 43bf
+       0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6,
+       0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41,
+       0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7,
+       0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6,
+       0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41,
+       0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7,
+       0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6,
+       0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41,
+       // Bytes 43c0 - 43ff
+       0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
+       0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6,
+       0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49,
+       0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
+       0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6,
+       0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41,
+       0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7,
+       0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6,
+       // Bytes 4400 - 443f
+       0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31,
+       0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8,
+       0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9,
+       0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5,
+       0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8,
+       0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9,
+       0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65,
+       0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9,
+       // Bytes 4440 - 447f
+       0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9,
+       0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75,
+       0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9,
+       0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9,
+       0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9,
+       0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB,
+       0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88,
+       0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC,
+       // Bytes 4480 - 44bf
+       0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82,
+       0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
+       0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45,
+       0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20,
+       0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC,
+       0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94,
+       0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9,
+       0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91,
+       // Bytes 44c0 - 44ff
+       0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72,
+       0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45,
+       0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20,
+       0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB,
+       0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC,
+       0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC,
+       0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6,
+       0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6,
+       // Bytes 4500 - 453f
+       0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9,
+       0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
+       0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9,
+       0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95,
+       0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96,
+       0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97,
+       0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C,
+       0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1,
+       // Bytes 4540 - 457f
+       0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2,
+       0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB,
+       0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF,
+       0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1,
+       0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2,
+       0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF,
+       0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96,
+       0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97,
+       // Bytes 4580 - 45bf
+       0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C,
+       0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB,
+       0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2,
+       0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8,
+       0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1,
+       0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2,
+       0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2,
+       0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3,
+       // Bytes 45c0 - 45ff
+       0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86,
+       0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85,
+       0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0,
+       0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD,
+       0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
+       0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
+       0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2,
+       0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49,
+       // Bytes 4600 - 463f
+       0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE,
+       0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
+       0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE,
+       0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85,
+       0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0,
+       0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
+       0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85,
+       0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
+       // Bytes 4640 - 467f
+       0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0,
+       0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE,
+       0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85,
+       0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0,
+       0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
+       0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,
+       0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85,
+       0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0,
+       // Bytes 4680 - 46bf
+       0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE,
+       0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC,
+       0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83,
+       0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A,
+       0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43,
+       0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9,
+       0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC,
+       0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83,
+       // Bytes 46c0 - 46ff
+       0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3,
+       0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F,
+       0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9,
+       0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC,
+       0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83,
+       0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8,
+       0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53,
+       0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9,
+       // Bytes 4700 - 473f
+       0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC,
+       0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83,
+       0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B,
+       0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61,
+       0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9,
+       0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC,
+       0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83,
+       0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82,
+       // Bytes 4740 - 477f
+       0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65,
+       0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5,
+       0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC,
+       0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83,
+       0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84,
+       0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F,
+       0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD,
+       0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC,
+       // Bytes 4780 - 47bf
+       0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83,
+       0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C,
+       0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75,
+       0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9,
+       0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC,
+       0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9,
+       0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
+       0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC,
+       // Bytes 47c0 - 47ff
+       0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9,
+       0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
+       0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC,
+       0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9,
+       0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE,
+       0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC,
+       0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9,
+       0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE,
+       // Bytes 4800 - 483f
+       0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC,
+       0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9,
+       0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE,
+       0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC,
+       0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9,
+       0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE,
+       0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC,
+       0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9,
+       // Bytes 4840 - 487f
+       0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE,
+       0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC,
+       0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9,
+       0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF,
+       0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC,
+       0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9,
+       0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF,
+       0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC,
+       // Bytes 4880 - 48bf
+       0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9,
+       0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE,
+       0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+       0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+       0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+       0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+       0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+       0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+       // Bytes 48c0 - 48ff
+       0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+       0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+       0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+       0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+       0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+       0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+       0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+       0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+       // Bytes 4900 - 493f
+       0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+       0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+       0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+       0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+       0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+       0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+       0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+       0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+       // Bytes 4940 - 497f
+       0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+       0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+       0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+       0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+       0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE,
+       0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE,
+       0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE,
+       0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
+       // Bytes 4980 - 49bf
+       0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
+       0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
+       0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF,
+       0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF,
+       0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF,
+       0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC,
+       0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32,
+       0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85,
+       // Bytes 49c0 - 49ff
+       0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01,
+       0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43,
+       0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85,
+       0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01,
+       0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43,
+       0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85,
+       0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01,
+       0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43,
+       // Bytes 4a00 - 4a3f
+       0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85,
+       0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01,
+       0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43,
+       0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85,
+       0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01,
+       0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43,
+       0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85,
+       0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01,
+       // Bytes 4a40 - 4a7f
+       0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43,
+       0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86,
+       0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01,
+       0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43,
+       0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86,
+       0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01,
+       0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32,
+       0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3,
+       // Bytes 4a80 - 4abf
+       0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1,
+       0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD,
+       0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0,
+       0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00,
+       0x01,
+}
+
+// lookup returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return nfcValues[c0], 1
+       case c0 < 0xC2:
+               return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return 0, 0
+               }
+               i := nfcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c1), 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return 0, 0
+               }
+               i := nfcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = nfcIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c2), 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return 0, 0
+               }
+               i := nfcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = nfcIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = nfcIndex[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return 0, 3 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c3), 4
+       }
+       // Illegal rune
+       return 0, 1
+}
+
+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *nfcTrie) lookupUnsafe(s []byte) uint16 {
+       c0 := s[0]
+       if c0 < 0x80 { // is ASCII
+               return nfcValues[c0]
+       }
+       i := nfcIndex[c0]
+       if c0 < 0xE0 { // 2-byte UTF-8
+               return t.lookupValue(uint32(i), s[1])
+       }
+       i = nfcIndex[uint32(i)<<6+uint32(s[1])]
+       if c0 < 0xF0 { // 3-byte UTF-8
+               return t.lookupValue(uint32(i), s[2])
+       }
+       i = nfcIndex[uint32(i)<<6+uint32(s[2])]
+       if c0 < 0xF8 { // 4-byte UTF-8
+               return t.lookupValue(uint32(i), s[3])
+       }
+       return 0
+}
+
+// lookupString returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *nfcTrie) lookupString(s string) (v uint16, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return nfcValues[c0], 1
+       case c0 < 0xC2:
+               return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return 0, 0
+               }
+               i := nfcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c1), 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return 0, 0
+               }
+               i := nfcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = nfcIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c2), 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return 0, 0
+               }
+               i := nfcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = nfcIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = nfcIndex[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return 0, 3 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c3), 4
+       }
+       // Illegal rune
+       return 0, 1
+}
+
+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *nfcTrie) lookupStringUnsafe(s string) uint16 {
+       c0 := s[0]
+       if c0 < 0x80 { // is ASCII
+               return nfcValues[c0]
+       }
+       i := nfcIndex[c0]
+       if c0 < 0xE0 { // 2-byte UTF-8
+               return t.lookupValue(uint32(i), s[1])
+       }
+       i = nfcIndex[uint32(i)<<6+uint32(s[1])]
+       if c0 < 0xF0 { // 3-byte UTF-8
+               return t.lookupValue(uint32(i), s[2])
+       }
+       i = nfcIndex[uint32(i)<<6+uint32(s[2])]
+       if c0 < 0xF8 { // 4-byte UTF-8
+               return t.lookupValue(uint32(i), s[3])
+       }
+       return 0
+}
+
+// nfcTrie. Total size: 10332 bytes (10.09 KiB). Checksum: 51cc525b297fc970.
+type nfcTrie struct{}
+
+func newNfcTrie(i int) *nfcTrie {
+       return &nfcTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 {
+       switch {
+       case n < 44:
+               return uint16(nfcValues[n<<6+uint32(b)])
+       default:
+               n -= 44
+               return uint16(nfcSparse.lookup(n, b))
+       }
+}
+
+// nfcValues: 46 blocks, 2944 entries, 5888 bytes
+// The third block is the zero block.
+var nfcValues = [2944]uint16{
+       // Block 0x0, offset 0x0
+       0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
+       // Block 0x1, offset 0x40
+       0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
+       0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
+       0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
+       0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
+       0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
+       0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
+       0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
+       0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
+       0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
+       0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
+       // Block 0x2, offset 0x80
+       // Block 0x3, offset 0xc0
+       0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
+       0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
+       0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
+       0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
+       0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
+       0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
+       0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
+       0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
+       0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
+       0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
+       0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
+       // Block 0x4, offset 0x100
+       0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
+       0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
+       0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
+       0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
+       0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
+       0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
+       0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
+       0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,
+       0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0,
+       0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,
+       0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8,
+       // Block 0x5, offset 0x140
+       0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
+       0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f,
+       0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
+       0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
+       0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
+       0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
+       0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
+       0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
+       0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
+       0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
+       0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000,
+       // Block 0x6, offset 0x180
+       0x184: 0x8100, 0x185: 0x8100,
+       0x186: 0x8100,
+       0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,
+       0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,
+       0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
+       0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
+       0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
+       0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
+       0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334,
+       0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
+       0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
+       // Block 0x7, offset 0x1c0
+       0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,
+       0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,
+       0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,
+       0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
+       0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
+       0x1de: 0x305a, 0x1df: 0x3366,
+       0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
+       0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
+       0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
+       // Block 0x8, offset 0x200
+       0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
+       0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
+       0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
+       0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
+       0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
+       0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
+       0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
+       0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
+       0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
+       0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
+       0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
+       // Block 0x9, offset 0x240
+       0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
+       0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
+       0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
+       0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
+       0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
+       0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
+       0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
+       0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
+       0x274: 0x0170,
+       0x27a: 0x8100,
+       0x27e: 0x0037,
+       // Block 0xa, offset 0x280
+       0x284: 0x8100, 0x285: 0x35a1,
+       0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
+       0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
+       0x295: 0xa000, 0x297: 0xa000,
+       0x299: 0xa000,
+       0x29f: 0xa000, 0x2a1: 0xa000,
+       0x2a5: 0xa000, 0x2a9: 0xa000,
+       0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
+       0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
+       0x2b7: 0xa000, 0x2b9: 0xa000,
+       0x2bf: 0xa000,
+       // Block 0xb, offset 0x2c0
+       0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b,
+       0x2c6: 0xa000, 0x2c7: 0x3709,
+       0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000,
+       0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,
+       0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000,
+       0x2de: 0xa000, 0x2e3: 0xa000,
+       0x2e7: 0xa000,
+       0x2eb: 0xa000, 0x2ed: 0xa000,
+       0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000,
+       0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000,
+       0x2fe: 0xa000,
+       // Block 0xc, offset 0x300
+       0x301: 0x3733, 0x302: 0x37b7,
+       0x310: 0x370f, 0x311: 0x3793,
+       0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab,
+       0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd,
+       0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf,
+       0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000,
+       0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed,
+       0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805,
+       0x338: 0x3787, 0x339: 0x380b,
+       // Block 0xd, offset 0x340
+       0x351: 0x812d,
+       0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132,
+       0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132,
+       0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d,
+       0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132,
+       0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132,
+       0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a,
+       0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f,
+       0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112,
+       // Block 0xe, offset 0x380
+       0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116,
+       0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c,
+       0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132,
+       0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132,
+       0x39e: 0x8132, 0x39f: 0x812d,
+       0x3b0: 0x811e,
+       // Block 0xf, offset 0x3c0
+       0x3c5: 0xa000,
+       0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000,
+       0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000,
+       0x3d2: 0x2d4e,
+       0x3f4: 0x8102, 0x3f5: 0x9900,
+       0x3fa: 0xa000, 0x3fb: 0x2d56,
+       0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000,
+       // Block 0x10, offset 0x400
+       0x400: 0x2f97, 0x401: 0x32a3, 0x402: 0x2fa1, 0x403: 0x32ad, 0x404: 0x2fa6, 0x405: 0x32b2,
+       0x406: 0x2fab, 0x407: 0x32b7, 0x408: 0x38cc, 0x409: 0x3a5b, 0x40a: 0x2fc4, 0x40b: 0x32d0,
+       0x40c: 0x2fce, 0x40d: 0x32da, 0x40e: 0x2fdd, 0x40f: 0x32e9, 0x410: 0x2fd3, 0x411: 0x32df,
+       0x412: 0x2fd8, 0x413: 0x32e4, 0x414: 0x38ef, 0x415: 0x3a7e, 0x416: 0x38f6, 0x417: 0x3a85,
+       0x418: 0x3019, 0x419: 0x3325, 0x41a: 0x301e, 0x41b: 0x332a, 0x41c: 0x3904, 0x41d: 0x3a93,
+       0x41e: 0x3023, 0x41f: 0x332f, 0x420: 0x3032, 0x421: 0x333e, 0x422: 0x3050, 0x423: 0x335c,
+       0x424: 0x305f, 0x425: 0x336b, 0x426: 0x3055, 0x427: 0x3361, 0x428: 0x3064, 0x429: 0x3370,
+       0x42a: 0x3069, 0x42b: 0x3375, 0x42c: 0x30af, 0x42d: 0x33bb, 0x42e: 0x390b, 0x42f: 0x3a9a,
+       0x430: 0x30b9, 0x431: 0x33ca, 0x432: 0x30c3, 0x433: 0x33d4, 0x434: 0x30cd, 0x435: 0x33de,
+       0x436: 0x46c4, 0x437: 0x4755, 0x438: 0x3912, 0x439: 0x3aa1, 0x43a: 0x30e6, 0x43b: 0x33f7,
+       0x43c: 0x30e1, 0x43d: 0x33f2, 0x43e: 0x30eb, 0x43f: 0x33fc,
+       // Block 0x11, offset 0x440
+       0x440: 0x30f0, 0x441: 0x3401, 0x442: 0x30f5, 0x443: 0x3406, 0x444: 0x3109, 0x445: 0x341a,
+       0x446: 0x3113, 0x447: 0x3424, 0x448: 0x3122, 0x449: 0x3433, 0x44a: 0x311d, 0x44b: 0x342e,
+       0x44c: 0x3935, 0x44d: 0x3ac4, 0x44e: 0x3943, 0x44f: 0x3ad2, 0x450: 0x394a, 0x451: 0x3ad9,
+       0x452: 0x3951, 0x453: 0x3ae0, 0x454: 0x314f, 0x455: 0x3460, 0x456: 0x3154, 0x457: 0x3465,
+       0x458: 0x315e, 0x459: 0x346f, 0x45a: 0x46f1, 0x45b: 0x4782, 0x45c: 0x3997, 0x45d: 0x3b26,
+       0x45e: 0x3177, 0x45f: 0x3488, 0x460: 0x3181, 0x461: 0x3492, 0x462: 0x4700, 0x463: 0x4791,
+       0x464: 0x399e, 0x465: 0x3b2d, 0x466: 0x39a5, 0x467: 0x3b34, 0x468: 0x39ac, 0x469: 0x3b3b,
+       0x46a: 0x3190, 0x46b: 0x34a1, 0x46c: 0x319a, 0x46d: 0x34b0, 0x46e: 0x31ae, 0x46f: 0x34c4,
+       0x470: 0x31a9, 0x471: 0x34bf, 0x472: 0x31ea, 0x473: 0x3500, 0x474: 0x31f9, 0x475: 0x350f,
+       0x476: 0x31f4, 0x477: 0x350a, 0x478: 0x39b3, 0x479: 0x3b42, 0x47a: 0x39ba, 0x47b: 0x3b49,
+       0x47c: 0x31fe, 0x47d: 0x3514, 0x47e: 0x3203, 0x47f: 0x3519,
+       // Block 0x12, offset 0x480
+       0x480: 0x3208, 0x481: 0x351e, 0x482: 0x320d, 0x483: 0x3523, 0x484: 0x321c, 0x485: 0x3532,
+       0x486: 0x3217, 0x487: 0x352d, 0x488: 0x3221, 0x489: 0x353c, 0x48a: 0x3226, 0x48b: 0x3541,
+       0x48c: 0x322b, 0x48d: 0x3546, 0x48e: 0x3249, 0x48f: 0x3564, 0x490: 0x3262, 0x491: 0x3582,
+       0x492: 0x3271, 0x493: 0x3591, 0x494: 0x3276, 0x495: 0x3596, 0x496: 0x337a, 0x497: 0x34a6,
+       0x498: 0x3537, 0x499: 0x3573, 0x49b: 0x35d1,
+       0x4a0: 0x46a1, 0x4a1: 0x4732, 0x4a2: 0x2f83, 0x4a3: 0x328f,
+       0x4a4: 0x3878, 0x4a5: 0x3a07, 0x4a6: 0x3871, 0x4a7: 0x3a00, 0x4a8: 0x3886, 0x4a9: 0x3a15,
+       0x4aa: 0x387f, 0x4ab: 0x3a0e, 0x4ac: 0x38be, 0x4ad: 0x3a4d, 0x4ae: 0x3894, 0x4af: 0x3a23,
+       0x4b0: 0x388d, 0x4b1: 0x3a1c, 0x4b2: 0x38a2, 0x4b3: 0x3a31, 0x4b4: 0x389b, 0x4b5: 0x3a2a,
+       0x4b6: 0x38c5, 0x4b7: 0x3a54, 0x4b8: 0x46b5, 0x4b9: 0x4746, 0x4ba: 0x3000, 0x4bb: 0x330c,
+       0x4bc: 0x2fec, 0x4bd: 0x32f8, 0x4be: 0x38da, 0x4bf: 0x3a69,
+       // Block 0x13, offset 0x4c0
+       0x4c0: 0x38d3, 0x4c1: 0x3a62, 0x4c2: 0x38e8, 0x4c3: 0x3a77, 0x4c4: 0x38e1, 0x4c5: 0x3a70,
+       0x4c6: 0x38fd, 0x4c7: 0x3a8c, 0x4c8: 0x3091, 0x4c9: 0x339d, 0x4ca: 0x30a5, 0x4cb: 0x33b1,
+       0x4cc: 0x46e7, 0x4cd: 0x4778, 0x4ce: 0x3136, 0x4cf: 0x3447, 0x4d0: 0x3920, 0x4d1: 0x3aaf,
+       0x4d2: 0x3919, 0x4d3: 0x3aa8, 0x4d4: 0x392e, 0x4d5: 0x3abd, 0x4d6: 0x3927, 0x4d7: 0x3ab6,
+       0x4d8: 0x3989, 0x4d9: 0x3b18, 0x4da: 0x396d, 0x4db: 0x3afc, 0x4dc: 0x3966, 0x4dd: 0x3af5,
+       0x4de: 0x397b, 0x4df: 0x3b0a, 0x4e0: 0x3974, 0x4e1: 0x3b03, 0x4e2: 0x3982, 0x4e3: 0x3b11,
+       0x4e4: 0x31e5, 0x4e5: 0x34fb, 0x4e6: 0x31c7, 0x4e7: 0x34dd, 0x4e8: 0x39e4, 0x4e9: 0x3b73,
+       0x4ea: 0x39dd, 0x4eb: 0x3b6c, 0x4ec: 0x39f2, 0x4ed: 0x3b81, 0x4ee: 0x39eb, 0x4ef: 0x3b7a,
+       0x4f0: 0x39f9, 0x4f1: 0x3b88, 0x4f2: 0x3230, 0x4f3: 0x354b, 0x4f4: 0x3258, 0x4f5: 0x3578,
+       0x4f6: 0x3253, 0x4f7: 0x356e, 0x4f8: 0x323f, 0x4f9: 0x355a,
+       // Block 0x14, offset 0x500
+       0x500: 0x4804, 0x501: 0x480a, 0x502: 0x491e, 0x503: 0x4936, 0x504: 0x4926, 0x505: 0x493e,
+       0x506: 0x492e, 0x507: 0x4946, 0x508: 0x47aa, 0x509: 0x47b0, 0x50a: 0x488e, 0x50b: 0x48a6,
+       0x50c: 0x4896, 0x50d: 0x48ae, 0x50e: 0x489e, 0x50f: 0x48b6, 0x510: 0x4816, 0x511: 0x481c,
+       0x512: 0x3db8, 0x513: 0x3dc8, 0x514: 0x3dc0, 0x515: 0x3dd0,
+       0x518: 0x47b6, 0x519: 0x47bc, 0x51a: 0x3ce8, 0x51b: 0x3cf8, 0x51c: 0x3cf0, 0x51d: 0x3d00,
+       0x520: 0x482e, 0x521: 0x4834, 0x522: 0x494e, 0x523: 0x4966,
+       0x524: 0x4956, 0x525: 0x496e, 0x526: 0x495e, 0x527: 0x4976, 0x528: 0x47c2, 0x529: 0x47c8,
+       0x52a: 0x48be, 0x52b: 0x48d6, 0x52c: 0x48c6, 0x52d: 0x48de, 0x52e: 0x48ce, 0x52f: 0x48e6,
+       0x530: 0x4846, 0x531: 0x484c, 0x532: 0x3e18, 0x533: 0x3e30, 0x534: 0x3e20, 0x535: 0x3e38,
+       0x536: 0x3e28, 0x537: 0x3e40, 0x538: 0x47ce, 0x539: 0x47d4, 0x53a: 0x3d18, 0x53b: 0x3d30,
+       0x53c: 0x3d20, 0x53d: 0x3d38, 0x53e: 0x3d28, 0x53f: 0x3d40,
+       // Block 0x15, offset 0x540
+       0x540: 0x4852, 0x541: 0x4858, 0x542: 0x3e48, 0x543: 0x3e58, 0x544: 0x3e50, 0x545: 0x3e60,
+       0x548: 0x47da, 0x549: 0x47e0, 0x54a: 0x3d48, 0x54b: 0x3d58,
+       0x54c: 0x3d50, 0x54d: 0x3d60, 0x550: 0x4864, 0x551: 0x486a,
+       0x552: 0x3e80, 0x553: 0x3e98, 0x554: 0x3e88, 0x555: 0x3ea0, 0x556: 0x3e90, 0x557: 0x3ea8,
+       0x559: 0x47e6, 0x55b: 0x3d68, 0x55d: 0x3d70,
+       0x55f: 0x3d78, 0x560: 0x487c, 0x561: 0x4882, 0x562: 0x497e, 0x563: 0x4996,
+       0x564: 0x4986, 0x565: 0x499e, 0x566: 0x498e, 0x567: 0x49a6, 0x568: 0x47ec, 0x569: 0x47f2,
+       0x56a: 0x48ee, 0x56b: 0x4906, 0x56c: 0x48f6, 0x56d: 0x490e, 0x56e: 0x48fe, 0x56f: 0x4916,
+       0x570: 0x47f8, 0x571: 0x431e, 0x572: 0x3691, 0x573: 0x4324, 0x574: 0x4822, 0x575: 0x432a,
+       0x576: 0x36a3, 0x577: 0x4330, 0x578: 0x36c1, 0x579: 0x4336, 0x57a: 0x36d9, 0x57b: 0x433c,
+       0x57c: 0x4870, 0x57d: 0x4342,
+       // Block 0x16, offset 0x580
+       0x580: 0x3da0, 0x581: 0x3da8, 0x582: 0x4184, 0x583: 0x41a2, 0x584: 0x418e, 0x585: 0x41ac,
+       0x586: 0x4198, 0x587: 0x41b6, 0x588: 0x3cd8, 0x589: 0x3ce0, 0x58a: 0x40d0, 0x58b: 0x40ee,
+       0x58c: 0x40da, 0x58d: 0x40f8, 0x58e: 0x40e4, 0x58f: 0x4102, 0x590: 0x3de8, 0x591: 0x3df0,
+       0x592: 0x41c0, 0x593: 0x41de, 0x594: 0x41ca, 0x595: 0x41e8, 0x596: 0x41d4, 0x597: 0x41f2,
+       0x598: 0x3d08, 0x599: 0x3d10, 0x59a: 0x410c, 0x59b: 0x412a, 0x59c: 0x4116, 0x59d: 0x4134,
+       0x59e: 0x4120, 0x59f: 0x413e, 0x5a0: 0x3ec0, 0x5a1: 0x3ec8, 0x5a2: 0x41fc, 0x5a3: 0x421a,
+       0x5a4: 0x4206, 0x5a5: 0x4224, 0x5a6: 0x4210, 0x5a7: 0x422e, 0x5a8: 0x3d80, 0x5a9: 0x3d88,
+       0x5aa: 0x4148, 0x5ab: 0x4166, 0x5ac: 0x4152, 0x5ad: 0x4170, 0x5ae: 0x415c, 0x5af: 0x417a,
+       0x5b0: 0x3685, 0x5b1: 0x367f, 0x5b2: 0x3d90, 0x5b3: 0x368b, 0x5b4: 0x3d98,
+       0x5b6: 0x4810, 0x5b7: 0x3db0, 0x5b8: 0x35f5, 0x5b9: 0x35ef, 0x5ba: 0x35e3, 0x5bb: 0x42ee,
+       0x5bc: 0x35fb, 0x5bd: 0x8100, 0x5be: 0x01d3, 0x5bf: 0xa100,
+       // Block 0x17, offset 0x5c0
+       0x5c0: 0x8100, 0x5c1: 0x35a7, 0x5c2: 0x3dd8, 0x5c3: 0x369d, 0x5c4: 0x3de0,
+       0x5c6: 0x483a, 0x5c7: 0x3df8, 0x5c8: 0x3601, 0x5c9: 0x42f4, 0x5ca: 0x360d, 0x5cb: 0x42fa,
+       0x5cc: 0x3619, 0x5cd: 0x3b8f, 0x5ce: 0x3b96, 0x5cf: 0x3b9d, 0x5d0: 0x36b5, 0x5d1: 0x36af,
+       0x5d2: 0x3e00, 0x5d3: 0x44e4, 0x5d6: 0x36bb, 0x5d7: 0x3e10,
+       0x5d8: 0x3631, 0x5d9: 0x362b, 0x5da: 0x361f, 0x5db: 0x4300, 0x5dd: 0x3ba4,
+       0x5de: 0x3bab, 0x5df: 0x3bb2, 0x5e0: 0x36eb, 0x5e1: 0x36e5, 0x5e2: 0x3e68, 0x5e3: 0x44ec,
+       0x5e4: 0x36cd, 0x5e5: 0x36d3, 0x5e6: 0x36f1, 0x5e7: 0x3e78, 0x5e8: 0x3661, 0x5e9: 0x365b,
+       0x5ea: 0x364f, 0x5eb: 0x430c, 0x5ec: 0x3649, 0x5ed: 0x359b, 0x5ee: 0x42e8, 0x5ef: 0x0081,
+       0x5f2: 0x3eb0, 0x5f3: 0x36f7, 0x5f4: 0x3eb8,
+       0x5f6: 0x4888, 0x5f7: 0x3ed0, 0x5f8: 0x363d, 0x5f9: 0x4306, 0x5fa: 0x366d, 0x5fb: 0x4318,
+       0x5fc: 0x3679, 0x5fd: 0x4256, 0x5fe: 0xa100,
+       // Block 0x18, offset 0x600
+       0x601: 0x3c06, 0x603: 0xa000, 0x604: 0x3c0d, 0x605: 0xa000,
+       0x607: 0x3c14, 0x608: 0xa000, 0x609: 0x3c1b,
+       0x60d: 0xa000,
+       0x620: 0x2f65, 0x621: 0xa000, 0x622: 0x3c29,
+       0x624: 0xa000, 0x625: 0xa000,
+       0x62d: 0x3c22, 0x62e: 0x2f60, 0x62f: 0x2f6a,
+       0x630: 0x3c30, 0x631: 0x3c37, 0x632: 0xa000, 0x633: 0xa000, 0x634: 0x3c3e, 0x635: 0x3c45,
+       0x636: 0xa000, 0x637: 0xa000, 0x638: 0x3c4c, 0x639: 0x3c53, 0x63a: 0xa000, 0x63b: 0xa000,
+       0x63c: 0xa000, 0x63d: 0xa000,
+       // Block 0x19, offset 0x640
+       0x640: 0x3c5a, 0x641: 0x3c61, 0x642: 0xa000, 0x643: 0xa000, 0x644: 0x3c76, 0x645: 0x3c7d,
+       0x646: 0xa000, 0x647: 0xa000, 0x648: 0x3c84, 0x649: 0x3c8b,
+       0x651: 0xa000,
+       0x652: 0xa000,
+       0x662: 0xa000,
+       0x668: 0xa000, 0x669: 0xa000,
+       0x66b: 0xa000, 0x66c: 0x3ca0, 0x66d: 0x3ca7, 0x66e: 0x3cae, 0x66f: 0x3cb5,
+       0x672: 0xa000, 0x673: 0xa000, 0x674: 0xa000, 0x675: 0xa000,
+       // Block 0x1a, offset 0x680
+       0x686: 0xa000, 0x68b: 0xa000,
+       0x68c: 0x3f08, 0x68d: 0xa000, 0x68e: 0x3f10, 0x68f: 0xa000, 0x690: 0x3f18, 0x691: 0xa000,
+       0x692: 0x3f20, 0x693: 0xa000, 0x694: 0x3f28, 0x695: 0xa000, 0x696: 0x3f30, 0x697: 0xa000,
+       0x698: 0x3f38, 0x699: 0xa000, 0x69a: 0x3f40, 0x69b: 0xa000, 0x69c: 0x3f48, 0x69d: 0xa000,
+       0x69e: 0x3f50, 0x69f: 0xa000, 0x6a0: 0x3f58, 0x6a1: 0xa000, 0x6a2: 0x3f60,
+       0x6a4: 0xa000, 0x6a5: 0x3f68, 0x6a6: 0xa000, 0x6a7: 0x3f70, 0x6a8: 0xa000, 0x6a9: 0x3f78,
+       0x6af: 0xa000,
+       0x6b0: 0x3f80, 0x6b1: 0x3f88, 0x6b2: 0xa000, 0x6b3: 0x3f90, 0x6b4: 0x3f98, 0x6b5: 0xa000,
+       0x6b6: 0x3fa0, 0x6b7: 0x3fa8, 0x6b8: 0xa000, 0x6b9: 0x3fb0, 0x6ba: 0x3fb8, 0x6bb: 0xa000,
+       0x6bc: 0x3fc0, 0x6bd: 0x3fc8,
+       // Block 0x1b, offset 0x6c0
+       0x6d4: 0x3f00,
+       0x6d9: 0x9903, 0x6da: 0x9903, 0x6db: 0x8100, 0x6dc: 0x8100, 0x6dd: 0xa000,
+       0x6de: 0x3fd0,
+       0x6e6: 0xa000,
+       0x6eb: 0xa000, 0x6ec: 0x3fe0, 0x6ed: 0xa000, 0x6ee: 0x3fe8, 0x6ef: 0xa000,
+       0x6f0: 0x3ff0, 0x6f1: 0xa000, 0x6f2: 0x3ff8, 0x6f3: 0xa000, 0x6f4: 0x4000, 0x6f5: 0xa000,
+       0x6f6: 0x4008, 0x6f7: 0xa000, 0x6f8: 0x4010, 0x6f9: 0xa000, 0x6fa: 0x4018, 0x6fb: 0xa000,
+       0x6fc: 0x4020, 0x6fd: 0xa000, 0x6fe: 0x4028, 0x6ff: 0xa000,
+       // Block 0x1c, offset 0x700
+       0x700: 0x4030, 0x701: 0xa000, 0x702: 0x4038, 0x704: 0xa000, 0x705: 0x4040,
+       0x706: 0xa000, 0x707: 0x4048, 0x708: 0xa000, 0x709: 0x4050,
+       0x70f: 0xa000, 0x710: 0x4058, 0x711: 0x4060,
+       0x712: 0xa000, 0x713: 0x4068, 0x714: 0x4070, 0x715: 0xa000, 0x716: 0x4078, 0x717: 0x4080,
+       0x718: 0xa000, 0x719: 0x4088, 0x71a: 0x4090, 0x71b: 0xa000, 0x71c: 0x4098, 0x71d: 0x40a0,
+       0x72f: 0xa000,
+       0x730: 0xa000, 0x731: 0xa000, 0x732: 0xa000, 0x734: 0x3fd8,
+       0x737: 0x40a8, 0x738: 0x40b0, 0x739: 0x40b8, 0x73a: 0x40c0,
+       0x73d: 0xa000, 0x73e: 0x40c8,
+       // Block 0x1d, offset 0x740
+       0x740: 0x1377, 0x741: 0x0cfb, 0x742: 0x13d3, 0x743: 0x139f, 0x744: 0x0e57, 0x745: 0x06eb,
+       0x746: 0x08df, 0x747: 0x162b, 0x748: 0x162b, 0x749: 0x0a0b, 0x74a: 0x145f, 0x74b: 0x0943,
+       0x74c: 0x0a07, 0x74d: 0x0bef, 0x74e: 0x0fcf, 0x74f: 0x115f, 0x750: 0x1297, 0x751: 0x12d3,
+       0x752: 0x1307, 0x753: 0x141b, 0x754: 0x0d73, 0x755: 0x0dff, 0x756: 0x0eab, 0x757: 0x0f43,
+       0x758: 0x125f, 0x759: 0x1447, 0x75a: 0x1573, 0x75b: 0x070f, 0x75c: 0x08b3, 0x75d: 0x0d87,
+       0x75e: 0x0ecf, 0x75f: 0x1293, 0x760: 0x15c3, 0x761: 0x0ab3, 0x762: 0x0e77, 0x763: 0x1283,
+       0x764: 0x1317, 0x765: 0x0c23, 0x766: 0x11bb, 0x767: 0x12df, 0x768: 0x0b1f, 0x769: 0x0d0f,
+       0x76a: 0x0e17, 0x76b: 0x0f1b, 0x76c: 0x1427, 0x76d: 0x074f, 0x76e: 0x07e7, 0x76f: 0x0853,
+       0x770: 0x0c8b, 0x771: 0x0d7f, 0x772: 0x0ecb, 0x773: 0x0fef, 0x774: 0x1177, 0x775: 0x128b,
+       0x776: 0x12a3, 0x777: 0x13c7, 0x778: 0x14ef, 0x779: 0x15a3, 0x77a: 0x15bf, 0x77b: 0x102b,
+       0x77c: 0x106b, 0x77d: 0x1123, 0x77e: 0x1243, 0x77f: 0x147b,
+       // Block 0x1e, offset 0x780
+       0x780: 0x15cb, 0x781: 0x134b, 0x782: 0x09c7, 0x783: 0x0b3b, 0x784: 0x10db, 0x785: 0x119b,
+       0x786: 0x0eff, 0x787: 0x1033, 0x788: 0x1397, 0x789: 0x14e7, 0x78a: 0x09c3, 0x78b: 0x0a8f,
+       0x78c: 0x0d77, 0x78d: 0x0e2b, 0x78e: 0x0e5f, 0x78f: 0x1113, 0x790: 0x113b, 0x791: 0x14a7,
+       0x792: 0x084f, 0x793: 0x11a7, 0x794: 0x07f3, 0x795: 0x07ef, 0x796: 0x1097, 0x797: 0x1127,
+       0x798: 0x125b, 0x799: 0x14af, 0x79a: 0x1367, 0x79b: 0x0c27, 0x79c: 0x0d73, 0x79d: 0x1357,
+       0x79e: 0x06f7, 0x79f: 0x0a63, 0x7a0: 0x0b93, 0x7a1: 0x0f2f, 0x7a2: 0x0faf, 0x7a3: 0x0873,
+       0x7a4: 0x103b, 0x7a5: 0x075f, 0x7a6: 0x0b77, 0x7a7: 0x06d7, 0x7a8: 0x0deb, 0x7a9: 0x0ca3,
+       0x7aa: 0x110f, 0x7ab: 0x08c7, 0x7ac: 0x09b3, 0x7ad: 0x0ffb, 0x7ae: 0x1263, 0x7af: 0x133b,
+       0x7b0: 0x0db7, 0x7b1: 0x13f7, 0x7b2: 0x0de3, 0x7b3: 0x0c37, 0x7b4: 0x121b, 0x7b5: 0x0c57,
+       0x7b6: 0x0fab, 0x7b7: 0x072b, 0x7b8: 0x07a7, 0x7b9: 0x07eb, 0x7ba: 0x0d53, 0x7bb: 0x10fb,
+       0x7bc: 0x11f3, 0x7bd: 0x1347, 0x7be: 0x145b, 0x7bf: 0x085b,
+       // Block 0x1f, offset 0x7c0
+       0x7c0: 0x090f, 0x7c1: 0x0a17, 0x7c2: 0x0b2f, 0x7c3: 0x0cbf, 0x7c4: 0x0e7b, 0x7c5: 0x103f,
+       0x7c6: 0x1497, 0x7c7: 0x157b, 0x7c8: 0x15cf, 0x7c9: 0x15e7, 0x7ca: 0x0837, 0x7cb: 0x0cf3,
+       0x7cc: 0x0da3, 0x7cd: 0x13eb, 0x7ce: 0x0afb, 0x7cf: 0x0bd7, 0x7d0: 0x0bf3, 0x7d1: 0x0c83,
+       0x7d2: 0x0e6b, 0x7d3: 0x0eb7, 0x7d4: 0x0f67, 0x7d5: 0x108b, 0x7d6: 0x112f, 0x7d7: 0x1193,
+       0x7d8: 0x13db, 0x7d9: 0x126b, 0x7da: 0x1403, 0x7db: 0x147f, 0x7dc: 0x080f, 0x7dd: 0x083b,
+       0x7de: 0x0923, 0x7df: 0x0ea7, 0x7e0: 0x12f3, 0x7e1: 0x133b, 0x7e2: 0x0b1b, 0x7e3: 0x0b8b,
+       0x7e4: 0x0c4f, 0x7e5: 0x0daf, 0x7e6: 0x10d7, 0x7e7: 0x0f23, 0x7e8: 0x073b, 0x7e9: 0x097f,
+       0x7ea: 0x0a63, 0x7eb: 0x0ac7, 0x7ec: 0x0b97, 0x7ed: 0x0f3f, 0x7ee: 0x0f5b, 0x7ef: 0x116b,
+       0x7f0: 0x118b, 0x7f1: 0x1463, 0x7f2: 0x14e3, 0x7f3: 0x14f3, 0x7f4: 0x152f, 0x7f5: 0x0753,
+       0x7f6: 0x107f, 0x7f7: 0x144f, 0x7f8: 0x14cb, 0x7f9: 0x0baf, 0x7fa: 0x0717, 0x7fb: 0x0777,
+       0x7fc: 0x0a67, 0x7fd: 0x0a87, 0x7fe: 0x0caf, 0x7ff: 0x0d73,
+       // Block 0x20, offset 0x800
+       0x800: 0x0ec3, 0x801: 0x0fcb, 0x802: 0x1277, 0x803: 0x1417, 0x804: 0x1623, 0x805: 0x0ce3,
+       0x806: 0x14a3, 0x807: 0x0833, 0x808: 0x0d2f, 0x809: 0x0d3b, 0x80a: 0x0e0f, 0x80b: 0x0e47,
+       0x80c: 0x0f4b, 0x80d: 0x0fa7, 0x80e: 0x1027, 0x80f: 0x110b, 0x810: 0x153b, 0x811: 0x07af,
+       0x812: 0x0c03, 0x813: 0x14b3, 0x814: 0x0767, 0x815: 0x0aab, 0x816: 0x0e2f, 0x817: 0x13df,
+       0x818: 0x0b67, 0x819: 0x0bb7, 0x81a: 0x0d43, 0x81b: 0x0f2f, 0x81c: 0x14bb, 0x81d: 0x0817,
+       0x81e: 0x08ff, 0x81f: 0x0a97, 0x820: 0x0cd3, 0x821: 0x0d1f, 0x822: 0x0d5f, 0x823: 0x0df3,
+       0x824: 0x0f47, 0x825: 0x0fbb, 0x826: 0x1157, 0x827: 0x12f7, 0x828: 0x1303, 0x829: 0x1457,
+       0x82a: 0x14d7, 0x82b: 0x0883, 0x82c: 0x0e4b, 0x82d: 0x0903, 0x82e: 0x0ec7, 0x82f: 0x0f6b,
+       0x830: 0x1287, 0x831: 0x14bf, 0x832: 0x15ab, 0x833: 0x15d3, 0x834: 0x0d37, 0x835: 0x0e27,
+       0x836: 0x11c3, 0x837: 0x10b7, 0x838: 0x10c3, 0x839: 0x10e7, 0x83a: 0x0f17, 0x83b: 0x0e9f,
+       0x83c: 0x1363, 0x83d: 0x0733, 0x83e: 0x122b, 0x83f: 0x081b,
+       // Block 0x21, offset 0x840
+       0x840: 0x080b, 0x841: 0x0b0b, 0x842: 0x0c2b, 0x843: 0x10f3, 0x844: 0x0a53, 0x845: 0x0e03,
+       0x846: 0x0cef, 0x847: 0x13e7, 0x848: 0x12e7, 0x849: 0x14ab, 0x84a: 0x1323, 0x84b: 0x0b27,
+       0x84c: 0x0787, 0x84d: 0x095b, 0x850: 0x09af,
+       0x852: 0x0cdf, 0x855: 0x07f7, 0x856: 0x0f1f, 0x857: 0x0fe3,
+       0x858: 0x1047, 0x859: 0x1063, 0x85a: 0x1067, 0x85b: 0x107b, 0x85c: 0x14fb, 0x85d: 0x10eb,
+       0x85e: 0x116f, 0x860: 0x128f, 0x862: 0x1353,
+       0x865: 0x1407, 0x866: 0x1433,
+       0x86a: 0x154f, 0x86b: 0x1553, 0x86c: 0x1557, 0x86d: 0x15bb, 0x86e: 0x142b, 0x86f: 0x14c7,
+       0x870: 0x0757, 0x871: 0x077b, 0x872: 0x078f, 0x873: 0x084b, 0x874: 0x0857, 0x875: 0x0897,
+       0x876: 0x094b, 0x877: 0x0967, 0x878: 0x096f, 0x879: 0x09ab, 0x87a: 0x09b7, 0x87b: 0x0a93,
+       0x87c: 0x0a9b, 0x87d: 0x0ba3, 0x87e: 0x0bcb, 0x87f: 0x0bd3,
+       // Block 0x22, offset 0x880
+       0x880: 0x0beb, 0x881: 0x0c97, 0x882: 0x0cc7, 0x883: 0x0ce7, 0x884: 0x0d57, 0x885: 0x0e1b,
+       0x886: 0x0e37, 0x887: 0x0e67, 0x888: 0x0ebb, 0x889: 0x0edb, 0x88a: 0x0f4f, 0x88b: 0x102f,
+       0x88c: 0x104b, 0x88d: 0x1053, 0x88e: 0x104f, 0x88f: 0x1057, 0x890: 0x105b, 0x891: 0x105f,
+       0x892: 0x1073, 0x893: 0x1077, 0x894: 0x109b, 0x895: 0x10af, 0x896: 0x10cb, 0x897: 0x112f,
+       0x898: 0x1137, 0x899: 0x113f, 0x89a: 0x1153, 0x89b: 0x117b, 0x89c: 0x11cb, 0x89d: 0x11ff,
+       0x89e: 0x11ff, 0x89f: 0x1267, 0x8a0: 0x130f, 0x8a1: 0x1327, 0x8a2: 0x135b, 0x8a3: 0x135f,
+       0x8a4: 0x13a3, 0x8a5: 0x13a7, 0x8a6: 0x13ff, 0x8a7: 0x1407, 0x8a8: 0x14db, 0x8a9: 0x151f,
+       0x8aa: 0x1537, 0x8ab: 0x0b9b, 0x8ac: 0x171e, 0x8ad: 0x11e3,
+       0x8b0: 0x06df, 0x8b1: 0x07e3, 0x8b2: 0x07a3, 0x8b3: 0x074b, 0x8b4: 0x078b, 0x8b5: 0x07b7,
+       0x8b6: 0x0847, 0x8b7: 0x0863, 0x8b8: 0x094b, 0x8b9: 0x0937, 0x8ba: 0x0947, 0x8bb: 0x0963,
+       0x8bc: 0x09af, 0x8bd: 0x09bf, 0x8be: 0x0a03, 0x8bf: 0x0a0f,
+       // Block 0x23, offset 0x8c0
+       0x8c0: 0x0a2b, 0x8c1: 0x0a3b, 0x8c2: 0x0b23, 0x8c3: 0x0b2b, 0x8c4: 0x0b5b, 0x8c5: 0x0b7b,
+       0x8c6: 0x0bab, 0x8c7: 0x0bc3, 0x8c8: 0x0bb3, 0x8c9: 0x0bd3, 0x8ca: 0x0bc7, 0x8cb: 0x0beb,
+       0x8cc: 0x0c07, 0x8cd: 0x0c5f, 0x8ce: 0x0c6b, 0x8cf: 0x0c73, 0x8d0: 0x0c9b, 0x8d1: 0x0cdf,
+       0x8d2: 0x0d0f, 0x8d3: 0x0d13, 0x8d4: 0x0d27, 0x8d5: 0x0da7, 0x8d6: 0x0db7, 0x8d7: 0x0e0f,
+       0x8d8: 0x0e5b, 0x8d9: 0x0e53, 0x8da: 0x0e67, 0x8db: 0x0e83, 0x8dc: 0x0ebb, 0x8dd: 0x1013,
+       0x8de: 0x0edf, 0x8df: 0x0f13, 0x8e0: 0x0f1f, 0x8e1: 0x0f5f, 0x8e2: 0x0f7b, 0x8e3: 0x0f9f,
+       0x8e4: 0x0fc3, 0x8e5: 0x0fc7, 0x8e6: 0x0fe3, 0x8e7: 0x0fe7, 0x8e8: 0x0ff7, 0x8e9: 0x100b,
+       0x8ea: 0x1007, 0x8eb: 0x1037, 0x8ec: 0x10b3, 0x8ed: 0x10cb, 0x8ee: 0x10e3, 0x8ef: 0x111b,
+       0x8f0: 0x112f, 0x8f1: 0x114b, 0x8f2: 0x117b, 0x8f3: 0x122f, 0x8f4: 0x1257, 0x8f5: 0x12cb,
+       0x8f6: 0x1313, 0x8f7: 0x131f, 0x8f8: 0x1327, 0x8f9: 0x133f, 0x8fa: 0x1353, 0x8fb: 0x1343,
+       0x8fc: 0x135b, 0x8fd: 0x1357, 0x8fe: 0x134f, 0x8ff: 0x135f,
+       // Block 0x24, offset 0x900
+       0x900: 0x136b, 0x901: 0x13a7, 0x902: 0x13e3, 0x903: 0x1413, 0x904: 0x144b, 0x905: 0x146b,
+       0x906: 0x14b7, 0x907: 0x14db, 0x908: 0x14fb, 0x909: 0x150f, 0x90a: 0x151f, 0x90b: 0x152b,
+       0x90c: 0x1537, 0x90d: 0x158b, 0x90e: 0x162b, 0x90f: 0x16b5, 0x910: 0x16b0, 0x911: 0x16e2,
+       0x912: 0x0607, 0x913: 0x062f, 0x914: 0x0633, 0x915: 0x1764, 0x916: 0x1791, 0x917: 0x1809,
+       0x918: 0x1617, 0x919: 0x1627,
+       // Block 0x25, offset 0x940
+       0x940: 0x06fb, 0x941: 0x06f3, 0x942: 0x0703, 0x943: 0x1647, 0x944: 0x0747, 0x945: 0x0757,
+       0x946: 0x075b, 0x947: 0x0763, 0x948: 0x076b, 0x949: 0x076f, 0x94a: 0x077b, 0x94b: 0x0773,
+       0x94c: 0x05b3, 0x94d: 0x165b, 0x94e: 0x078f, 0x94f: 0x0793, 0x950: 0x0797, 0x951: 0x07b3,
+       0x952: 0x164c, 0x953: 0x05b7, 0x954: 0x079f, 0x955: 0x07bf, 0x956: 0x1656, 0x957: 0x07cf,
+       0x958: 0x07d7, 0x959: 0x0737, 0x95a: 0x07df, 0x95b: 0x07e3, 0x95c: 0x1831, 0x95d: 0x07ff,
+       0x95e: 0x0807, 0x95f: 0x05bf, 0x960: 0x081f, 0x961: 0x0823, 0x962: 0x082b, 0x963: 0x082f,
+       0x964: 0x05c3, 0x965: 0x0847, 0x966: 0x084b, 0x967: 0x0857, 0x968: 0x0863, 0x969: 0x0867,
+       0x96a: 0x086b, 0x96b: 0x0873, 0x96c: 0x0893, 0x96d: 0x0897, 0x96e: 0x089f, 0x96f: 0x08af,
+       0x970: 0x08b7, 0x971: 0x08bb, 0x972: 0x08bb, 0x973: 0x08bb, 0x974: 0x166a, 0x975: 0x0e93,
+       0x976: 0x08cf, 0x977: 0x08d7, 0x978: 0x166f, 0x979: 0x08e3, 0x97a: 0x08eb, 0x97b: 0x08f3,
+       0x97c: 0x091b, 0x97d: 0x0907, 0x97e: 0x0913, 0x97f: 0x0917,
+       // Block 0x26, offset 0x980
+       0x980: 0x091f, 0x981: 0x0927, 0x982: 0x092b, 0x983: 0x0933, 0x984: 0x093b, 0x985: 0x093f,
+       0x986: 0x093f, 0x987: 0x0947, 0x988: 0x094f, 0x989: 0x0953, 0x98a: 0x095f, 0x98b: 0x0983,
+       0x98c: 0x0967, 0x98d: 0x0987, 0x98e: 0x096b, 0x98f: 0x0973, 0x990: 0x080b, 0x991: 0x09cf,
+       0x992: 0x0997, 0x993: 0x099b, 0x994: 0x099f, 0x995: 0x0993, 0x996: 0x09a7, 0x997: 0x09a3,
+       0x998: 0x09bb, 0x999: 0x1674, 0x99a: 0x09d7, 0x99b: 0x09db, 0x99c: 0x09e3, 0x99d: 0x09ef,
+       0x99e: 0x09f7, 0x99f: 0x0a13, 0x9a0: 0x1679, 0x9a1: 0x167e, 0x9a2: 0x0a1f, 0x9a3: 0x0a23,
+       0x9a4: 0x0a27, 0x9a5: 0x0a1b, 0x9a6: 0x0a2f, 0x9a7: 0x05c7, 0x9a8: 0x05cb, 0x9a9: 0x0a37,
+       0x9aa: 0x0a3f, 0x9ab: 0x0a3f, 0x9ac: 0x1683, 0x9ad: 0x0a5b, 0x9ae: 0x0a5f, 0x9af: 0x0a63,
+       0x9b0: 0x0a6b, 0x9b1: 0x1688, 0x9b2: 0x0a73, 0x9b3: 0x0a77, 0x9b4: 0x0b4f, 0x9b5: 0x0a7f,
+       0x9b6: 0x05cf, 0x9b7: 0x0a8b, 0x9b8: 0x0a9b, 0x9b9: 0x0aa7, 0x9ba: 0x0aa3, 0x9bb: 0x1692,
+       0x9bc: 0x0aaf, 0x9bd: 0x1697, 0x9be: 0x0abb, 0x9bf: 0x0ab7,
+       // Block 0x27, offset 0x9c0
+       0x9c0: 0x0abf, 0x9c1: 0x0acf, 0x9c2: 0x0ad3, 0x9c3: 0x05d3, 0x9c4: 0x0ae3, 0x9c5: 0x0aeb,
+       0x9c6: 0x0aef, 0x9c7: 0x0af3, 0x9c8: 0x05d7, 0x9c9: 0x169c, 0x9ca: 0x05db, 0x9cb: 0x0b0f,
+       0x9cc: 0x0b13, 0x9cd: 0x0b17, 0x9ce: 0x0b1f, 0x9cf: 0x1863, 0x9d0: 0x0b37, 0x9d1: 0x16a6,
+       0x9d2: 0x16a6, 0x9d3: 0x11d7, 0x9d4: 0x0b47, 0x9d5: 0x0b47, 0x9d6: 0x05df, 0x9d7: 0x16c9,
+       0x9d8: 0x179b, 0x9d9: 0x0b57, 0x9da: 0x0b5f, 0x9db: 0x05e3, 0x9dc: 0x0b73, 0x9dd: 0x0b83,
+       0x9de: 0x0b87, 0x9df: 0x0b8f, 0x9e0: 0x0b9f, 0x9e1: 0x05eb, 0x9e2: 0x05e7, 0x9e3: 0x0ba3,
+       0x9e4: 0x16ab, 0x9e5: 0x0ba7, 0x9e6: 0x0bbb, 0x9e7: 0x0bbf, 0x9e8: 0x0bc3, 0x9e9: 0x0bbf,
+       0x9ea: 0x0bcf, 0x9eb: 0x0bd3, 0x9ec: 0x0be3, 0x9ed: 0x0bdb, 0x9ee: 0x0bdf, 0x9ef: 0x0be7,
+       0x9f0: 0x0beb, 0x9f1: 0x0bef, 0x9f2: 0x0bfb, 0x9f3: 0x0bff, 0x9f4: 0x0c17, 0x9f5: 0x0c1f,
+       0x9f6: 0x0c2f, 0x9f7: 0x0c43, 0x9f8: 0x16ba, 0x9f9: 0x0c3f, 0x9fa: 0x0c33, 0x9fb: 0x0c4b,
+       0x9fc: 0x0c53, 0x9fd: 0x0c67, 0x9fe: 0x16bf, 0x9ff: 0x0c6f,
+       // Block 0x28, offset 0xa00
+       0xa00: 0x0c63, 0xa01: 0x0c5b, 0xa02: 0x05ef, 0xa03: 0x0c77, 0xa04: 0x0c7f, 0xa05: 0x0c87,
+       0xa06: 0x0c7b, 0xa07: 0x05f3, 0xa08: 0x0c97, 0xa09: 0x0c9f, 0xa0a: 0x16c4, 0xa0b: 0x0ccb,
+       0xa0c: 0x0cff, 0xa0d: 0x0cdb, 0xa0e: 0x05ff, 0xa0f: 0x0ce7, 0xa10: 0x05fb, 0xa11: 0x05f7,
+       0xa12: 0x07c3, 0xa13: 0x07c7, 0xa14: 0x0d03, 0xa15: 0x0ceb, 0xa16: 0x11ab, 0xa17: 0x0663,
+       0xa18: 0x0d0f, 0xa19: 0x0d13, 0xa1a: 0x0d17, 0xa1b: 0x0d2b, 0xa1c: 0x0d23, 0xa1d: 0x16dd,
+       0xa1e: 0x0603, 0xa1f: 0x0d3f, 0xa20: 0x0d33, 0xa21: 0x0d4f, 0xa22: 0x0d57, 0xa23: 0x16e7,
+       0xa24: 0x0d5b, 0xa25: 0x0d47, 0xa26: 0x0d63, 0xa27: 0x0607, 0xa28: 0x0d67, 0xa29: 0x0d6b,
+       0xa2a: 0x0d6f, 0xa2b: 0x0d7b, 0xa2c: 0x16ec, 0xa2d: 0x0d83, 0xa2e: 0x060b, 0xa2f: 0x0d8f,
+       0xa30: 0x16f1, 0xa31: 0x0d93, 0xa32: 0x060f, 0xa33: 0x0d9f, 0xa34: 0x0dab, 0xa35: 0x0db7,
+       0xa36: 0x0dbb, 0xa37: 0x16f6, 0xa38: 0x168d, 0xa39: 0x16fb, 0xa3a: 0x0ddb, 0xa3b: 0x1700,
+       0xa3c: 0x0de7, 0xa3d: 0x0def, 0xa3e: 0x0ddf, 0xa3f: 0x0dfb,
+       // Block 0x29, offset 0xa40
+       0xa40: 0x0e0b, 0xa41: 0x0e1b, 0xa42: 0x0e0f, 0xa43: 0x0e13, 0xa44: 0x0e1f, 0xa45: 0x0e23,
+       0xa46: 0x1705, 0xa47: 0x0e07, 0xa48: 0x0e3b, 0xa49: 0x0e3f, 0xa4a: 0x0613, 0xa4b: 0x0e53,
+       0xa4c: 0x0e4f, 0xa4d: 0x170a, 0xa4e: 0x0e33, 0xa4f: 0x0e6f, 0xa50: 0x170f, 0xa51: 0x1714,
+       0xa52: 0x0e73, 0xa53: 0x0e87, 0xa54: 0x0e83, 0xa55: 0x0e7f, 0xa56: 0x0617, 0xa57: 0x0e8b,
+       0xa58: 0x0e9b, 0xa59: 0x0e97, 0xa5a: 0x0ea3, 0xa5b: 0x1651, 0xa5c: 0x0eb3, 0xa5d: 0x1719,
+       0xa5e: 0x0ebf, 0xa5f: 0x1723, 0xa60: 0x0ed3, 0xa61: 0x0edf, 0xa62: 0x0ef3, 0xa63: 0x1728,
+       0xa64: 0x0f07, 0xa65: 0x0f0b, 0xa66: 0x172d, 0xa67: 0x1732, 0xa68: 0x0f27, 0xa69: 0x0f37,
+       0xa6a: 0x061b, 0xa6b: 0x0f3b, 0xa6c: 0x061f, 0xa6d: 0x061f, 0xa6e: 0x0f53, 0xa6f: 0x0f57,
+       0xa70: 0x0f5f, 0xa71: 0x0f63, 0xa72: 0x0f6f, 0xa73: 0x0623, 0xa74: 0x0f87, 0xa75: 0x1737,
+       0xa76: 0x0fa3, 0xa77: 0x173c, 0xa78: 0x0faf, 0xa79: 0x16a1, 0xa7a: 0x0fbf, 0xa7b: 0x1741,
+       0xa7c: 0x1746, 0xa7d: 0x174b, 0xa7e: 0x0627, 0xa7f: 0x062b,
+       // Block 0x2a, offset 0xa80
+       0xa80: 0x0ff7, 0xa81: 0x1755, 0xa82: 0x1750, 0xa83: 0x175a, 0xa84: 0x175f, 0xa85: 0x0fff,
+       0xa86: 0x1003, 0xa87: 0x1003, 0xa88: 0x100b, 0xa89: 0x0633, 0xa8a: 0x100f, 0xa8b: 0x0637,
+       0xa8c: 0x063b, 0xa8d: 0x1769, 0xa8e: 0x1023, 0xa8f: 0x102b, 0xa90: 0x1037, 0xa91: 0x063f,
+       0xa92: 0x176e, 0xa93: 0x105b, 0xa94: 0x1773, 0xa95: 0x1778, 0xa96: 0x107b, 0xa97: 0x1093,
+       0xa98: 0x0643, 0xa99: 0x109b, 0xa9a: 0x109f, 0xa9b: 0x10a3, 0xa9c: 0x177d, 0xa9d: 0x1782,
+       0xa9e: 0x1782, 0xa9f: 0x10bb, 0xaa0: 0x0647, 0xaa1: 0x1787, 0xaa2: 0x10cf, 0xaa3: 0x10d3,
+       0xaa4: 0x064b, 0xaa5: 0x178c, 0xaa6: 0x10ef, 0xaa7: 0x064f, 0xaa8: 0x10ff, 0xaa9: 0x10f7,
+       0xaaa: 0x1107, 0xaab: 0x1796, 0xaac: 0x111f, 0xaad: 0x0653, 0xaae: 0x112b, 0xaaf: 0x1133,
+       0xab0: 0x1143, 0xab1: 0x0657, 0xab2: 0x17a0, 0xab3: 0x17a5, 0xab4: 0x065b, 0xab5: 0x17aa,
+       0xab6: 0x115b, 0xab7: 0x17af, 0xab8: 0x1167, 0xab9: 0x1173, 0xaba: 0x117b, 0xabb: 0x17b4,
+       0xabc: 0x17b9, 0xabd: 0x118f, 0xabe: 0x17be, 0xabf: 0x1197,
+       // Block 0x2b, offset 0xac0
+       0xac0: 0x16ce, 0xac1: 0x065f, 0xac2: 0x11af, 0xac3: 0x11b3, 0xac4: 0x0667, 0xac5: 0x11b7,
+       0xac6: 0x0a33, 0xac7: 0x17c3, 0xac8: 0x17c8, 0xac9: 0x16d3, 0xaca: 0x16d8, 0xacb: 0x11d7,
+       0xacc: 0x11db, 0xacd: 0x13f3, 0xace: 0x066b, 0xacf: 0x1207, 0xad0: 0x1203, 0xad1: 0x120b,
+       0xad2: 0x083f, 0xad3: 0x120f, 0xad4: 0x1213, 0xad5: 0x1217, 0xad6: 0x121f, 0xad7: 0x17cd,
+       0xad8: 0x121b, 0xad9: 0x1223, 0xada: 0x1237, 0xadb: 0x123b, 0xadc: 0x1227, 0xadd: 0x123f,
+       0xade: 0x1253, 0xadf: 0x1267, 0xae0: 0x1233, 0xae1: 0x1247, 0xae2: 0x124b, 0xae3: 0x124f,
+       0xae4: 0x17d2, 0xae5: 0x17dc, 0xae6: 0x17d7, 0xae7: 0x066f, 0xae8: 0x126f, 0xae9: 0x1273,
+       0xaea: 0x127b, 0xaeb: 0x17f0, 0xaec: 0x127f, 0xaed: 0x17e1, 0xaee: 0x0673, 0xaef: 0x0677,
+       0xaf0: 0x17e6, 0xaf1: 0x17eb, 0xaf2: 0x067b, 0xaf3: 0x129f, 0xaf4: 0x12a3, 0xaf5: 0x12a7,
+       0xaf6: 0x12ab, 0xaf7: 0x12b7, 0xaf8: 0x12b3, 0xaf9: 0x12bf, 0xafa: 0x12bb, 0xafb: 0x12cb,
+       0xafc: 0x12c3, 0xafd: 0x12c7, 0xafe: 0x12cf, 0xaff: 0x067f,
+       // Block 0x2c, offset 0xb00
+       0xb00: 0x12d7, 0xb01: 0x12db, 0xb02: 0x0683, 0xb03: 0x12eb, 0xb04: 0x12ef, 0xb05: 0x17f5,
+       0xb06: 0x12fb, 0xb07: 0x12ff, 0xb08: 0x0687, 0xb09: 0x130b, 0xb0a: 0x05bb, 0xb0b: 0x17fa,
+       0xb0c: 0x17ff, 0xb0d: 0x068b, 0xb0e: 0x068f, 0xb0f: 0x1337, 0xb10: 0x134f, 0xb11: 0x136b,
+       0xb12: 0x137b, 0xb13: 0x1804, 0xb14: 0x138f, 0xb15: 0x1393, 0xb16: 0x13ab, 0xb17: 0x13b7,
+       0xb18: 0x180e, 0xb19: 0x1660, 0xb1a: 0x13c3, 0xb1b: 0x13bf, 0xb1c: 0x13cb, 0xb1d: 0x1665,
+       0xb1e: 0x13d7, 0xb1f: 0x13e3, 0xb20: 0x1813, 0xb21: 0x1818, 0xb22: 0x1423, 0xb23: 0x142f,
+       0xb24: 0x1437, 0xb25: 0x181d, 0xb26: 0x143b, 0xb27: 0x1467, 0xb28: 0x1473, 0xb29: 0x1477,
+       0xb2a: 0x146f, 0xb2b: 0x1483, 0xb2c: 0x1487, 0xb2d: 0x1822, 0xb2e: 0x1493, 0xb2f: 0x0693,
+       0xb30: 0x149b, 0xb31: 0x1827, 0xb32: 0x0697, 0xb33: 0x14d3, 0xb34: 0x0ac3, 0xb35: 0x14eb,
+       0xb36: 0x182c, 0xb37: 0x1836, 0xb38: 0x069b, 0xb39: 0x069f, 0xb3a: 0x1513, 0xb3b: 0x183b,
+       0xb3c: 0x06a3, 0xb3d: 0x1840, 0xb3e: 0x152b, 0xb3f: 0x152b,
+       // Block 0x2d, offset 0xb40
+       0xb40: 0x1533, 0xb41: 0x1845, 0xb42: 0x154b, 0xb43: 0x06a7, 0xb44: 0x155b, 0xb45: 0x1567,
+       0xb46: 0x156f, 0xb47: 0x1577, 0xb48: 0x06ab, 0xb49: 0x184a, 0xb4a: 0x158b, 0xb4b: 0x15a7,
+       0xb4c: 0x15b3, 0xb4d: 0x06af, 0xb4e: 0x06b3, 0xb4f: 0x15b7, 0xb50: 0x184f, 0xb51: 0x06b7,
+       0xb52: 0x1854, 0xb53: 0x1859, 0xb54: 0x185e, 0xb55: 0x15db, 0xb56: 0x06bb, 0xb57: 0x15ef,
+       0xb58: 0x15f7, 0xb59: 0x15fb, 0xb5a: 0x1603, 0xb5b: 0x160b, 0xb5c: 0x1613, 0xb5d: 0x1868,
+}
+
+// nfcIndex: 22 blocks, 1408 entries, 1408 bytes
+// Block 0 is the zero block.
+var nfcIndex = [1408]uint8{
+       // Block 0x0, offset 0x0
+       // Block 0x1, offset 0x40
+       // Block 0x2, offset 0x80
+       // Block 0x3, offset 0xc0
+       0xc2: 0x2c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2d, 0xc7: 0x04,
+       0xc8: 0x05, 0xca: 0x2e, 0xcb: 0x2f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x30,
+       0xd0: 0x09, 0xd1: 0x31, 0xd2: 0x32, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x33,
+       0xd8: 0x34, 0xd9: 0x0c, 0xdb: 0x35, 0xdc: 0x36, 0xdd: 0x37, 0xdf: 0x38,
+       0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
+       0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
+       0xf0: 0x13,
+       // Block 0x4, offset 0x100
+       0x120: 0x39, 0x121: 0x3a, 0x123: 0x3b, 0x124: 0x3c, 0x125: 0x3d, 0x126: 0x3e, 0x127: 0x3f,
+       0x128: 0x40, 0x129: 0x41, 0x12a: 0x42, 0x12b: 0x43, 0x12c: 0x3e, 0x12d: 0x44, 0x12e: 0x45, 0x12f: 0x46,
+       0x131: 0x47, 0x132: 0x48, 0x133: 0x49, 0x134: 0x4a, 0x135: 0x4b, 0x137: 0x4c,
+       0x138: 0x4d, 0x139: 0x4e, 0x13a: 0x4f, 0x13b: 0x50, 0x13c: 0x51, 0x13d: 0x52, 0x13e: 0x53, 0x13f: 0x54,
+       // Block 0x5, offset 0x140
+       0x140: 0x55, 0x142: 0x56, 0x144: 0x57, 0x145: 0x58, 0x146: 0x59, 0x147: 0x5a,
+       0x14d: 0x5b,
+       0x15c: 0x5c, 0x15f: 0x5d,
+       0x162: 0x5e, 0x164: 0x5f,
+       0x168: 0x60, 0x169: 0x61, 0x16a: 0x62, 0x16c: 0x0d, 0x16d: 0x63, 0x16e: 0x64, 0x16f: 0x65,
+       0x170: 0x66, 0x173: 0x67, 0x177: 0x68,
+       0x178: 0x0e, 0x179: 0x0f, 0x17a: 0x10, 0x17b: 0x11, 0x17c: 0x12, 0x17d: 0x13, 0x17e: 0x14, 0x17f: 0x15,
+       // Block 0x6, offset 0x180
+       0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d,
+       0x188: 0x6e, 0x189: 0x16, 0x18a: 0x17, 0x18b: 0x6f, 0x18c: 0x70,
+       0x1ab: 0x71,
+       0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74,
+       // Block 0x7, offset 0x1c0
+       0x1c0: 0x75, 0x1c1: 0x18, 0x1c2: 0x19, 0x1c3: 0x1a, 0x1c4: 0x76, 0x1c5: 0x77,
+       0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a,
+       // Block 0x8, offset 0x200
+       0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d,
+       0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83,
+       0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86,
+       0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87,
+       0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88,
+       // Block 0x9, offset 0x240
+       0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89,
+       0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a,
+       0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b,
+       0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c,
+       0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d,
+       0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87,
+       0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88,
+       0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89,
+       // Block 0xa, offset 0x280
+       0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a,
+       0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b,
+       0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c,
+       0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d,
+       0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87,
+       0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88,
+       0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89,
+       0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a,
+       // Block 0xb, offset 0x2c0
+       0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b,
+       0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c,
+       0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d,
+       0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e,
+       // Block 0xc, offset 0x300
+       0x324: 0x1b, 0x325: 0x1c, 0x326: 0x1d, 0x327: 0x1e,
+       0x328: 0x1f, 0x329: 0x20, 0x32a: 0x21, 0x32b: 0x22, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91,
+       0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95,
+       0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b,
+       // Block 0xd, offset 0x340
+       0x347: 0x9c,
+       0x34b: 0x9d, 0x34d: 0x9e,
+       0x368: 0x9f, 0x36b: 0xa0,
+       // Block 0xe, offset 0x380
+       0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4,
+       0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3e, 0x38d: 0xa7,
+       0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac,
+       0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae,
+       0x3b0: 0x73,
+       // Block 0xf, offset 0x3c0
+       0x3eb: 0xaf, 0x3ec: 0xb0,
+       // Block 0x10, offset 0x400
+       0x432: 0xb1,
+       // Block 0x11, offset 0x440
+       0x445: 0xb2, 0x446: 0xb3, 0x447: 0xb4,
+       0x449: 0xb5,
+       // Block 0x12, offset 0x480
+       0x480: 0xb6,
+       0x4a3: 0xb7, 0x4a5: 0xb8,
+       // Block 0x13, offset 0x4c0
+       0x4c8: 0xb9,
+       // Block 0x14, offset 0x500
+       0x520: 0x23, 0x521: 0x24, 0x522: 0x25, 0x523: 0x26, 0x524: 0x27, 0x525: 0x28, 0x526: 0x29, 0x527: 0x2a,
+       0x528: 0x2b,
+       // Block 0x15, offset 0x540
+       0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
+       0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
+       0x56f: 0x12,
+}
+
+// nfcSparseOffset: 142 entries, 284 bytes
+var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x7a, 0x82, 0x89, 0x8c, 0x93, 0x97, 0x9b, 0x9d, 0x9f, 0xa8, 0xac, 0xb3, 0xb8, 0xbb, 0xc5, 0xc7, 0xce, 0xd6, 0xd9, 0xdb, 0xdd, 0xdf, 0xe4, 0xf5, 0x101, 0x103, 0x109, 0x10b, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x118, 0x11b, 0x11d, 0x120, 0x123, 0x127, 0x12c, 0x135, 0x137, 0x13a, 0x13c, 0x147, 0x157, 0x15b, 0x169, 0x16c, 0x172, 0x178, 0x183, 0x187, 0x189, 0x18b, 0x18d, 0x18f, 0x191, 0x197, 0x19b, 0x19d, 0x19f, 0x1a7, 0x1ab, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1b7, 0x1b9, 0x1bb, 0x1bd, 0x1bf, 0x1c5, 0x1c8, 0x1ca, 0x1d1, 0x1d7, 0x1dd, 0x1e5, 0x1eb, 0x1f1, 0x1f7, 0x1fb, 0x209, 0x212, 0x215, 0x218, 0x21a, 0x21d, 0x21f, 0x223, 0x228, 0x22a, 0x22c, 0x231, 0x237, 0x239, 0x23b, 0x23d, 0x243, 0x246, 0x249, 0x251, 0x258, 0x25b, 0x25e, 0x260, 0x268, 0x26b, 0x272, 0x275, 0x27b, 0x27d, 0x280, 0x282, 0x284, 0x286, 0x288, 0x295, 0x29f, 0x2a1, 0x2a3, 0x2a9, 0x2ab, 0x2ae}
+
+// nfcSparseValues: 688 entries, 2752 bytes
+var nfcSparseValues = [688]valueRange{
+       // Block 0x0, offset 0x0
+       {value: 0x0000, lo: 0x04},
+       {value: 0xa100, lo: 0xa8, hi: 0xa8},
+       {value: 0x8100, lo: 0xaf, hi: 0xaf},
+       {value: 0x8100, lo: 0xb4, hi: 0xb4},
+       {value: 0x8100, lo: 0xb8, hi: 0xb8},
+       // Block 0x1, offset 0x5
+       {value: 0x0091, lo: 0x03},
+       {value: 0x46e2, lo: 0xa0, hi: 0xa1},
+       {value: 0x4714, lo: 0xaf, hi: 0xb0},
+       {value: 0xa000, lo: 0xb7, hi: 0xb7},
+       // Block 0x2, offset 0x9
+       {value: 0x0000, lo: 0x01},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       // Block 0x3, offset 0xb
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8100, lo: 0x98, hi: 0x9d},
+       // Block 0x4, offset 0xd
+       {value: 0x0006, lo: 0x0a},
+       {value: 0xa000, lo: 0x81, hi: 0x81},
+       {value: 0xa000, lo: 0x85, hi: 0x85},
+       {value: 0xa000, lo: 0x89, hi: 0x89},
+       {value: 0x4840, lo: 0x8a, hi: 0x8a},
+       {value: 0x485e, lo: 0x8b, hi: 0x8b},
+       {value: 0x36c7, lo: 0x8c, hi: 0x8c},
+       {value: 0x36df, lo: 0x8d, hi: 0x8d},
+       {value: 0x4876, lo: 0x8e, hi: 0x8e},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       {value: 0x36fd, lo: 0x93, hi: 0x94},
+       // Block 0x5, offset 0x18
+       {value: 0x0000, lo: 0x0f},
+       {value: 0xa000, lo: 0x83, hi: 0x83},
+       {value: 0xa000, lo: 0x87, hi: 0x87},
+       {value: 0xa000, lo: 0x8b, hi: 0x8b},
+       {value: 0xa000, lo: 0x8d, hi: 0x8d},
+       {value: 0x37a5, lo: 0x90, hi: 0x90},
+       {value: 0x37b1, lo: 0x91, hi: 0x91},
+       {value: 0x379f, lo: 0x93, hi: 0x93},
+       {value: 0xa000, lo: 0x96, hi: 0x96},
+       {value: 0x3817, lo: 0x97, hi: 0x97},
+       {value: 0x37e1, lo: 0x9c, hi: 0x9c},
+       {value: 0x37c9, lo: 0x9d, hi: 0x9d},
+       {value: 0x37f3, lo: 0x9e, hi: 0x9e},
+       {value: 0xa000, lo: 0xb4, hi: 0xb5},
+       {value: 0x381d, lo: 0xb6, hi: 0xb6},
+       {value: 0x3823, lo: 0xb7, hi: 0xb7},
+       // Block 0x6, offset 0x28
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0x83, hi: 0x87},
+       // Block 0x7, offset 0x2a
+       {value: 0x0001, lo: 0x04},
+       {value: 0x8113, lo: 0x81, hi: 0x82},
+       {value: 0x8132, lo: 0x84, hi: 0x84},
+       {value: 0x812d, lo: 0x85, hi: 0x85},
+       {value: 0x810d, lo: 0x87, hi: 0x87},
+       // Block 0x8, offset 0x2f
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x8132, lo: 0x90, hi: 0x97},
+       {value: 0x8119, lo: 0x98, hi: 0x98},
+       {value: 0x811a, lo: 0x99, hi: 0x99},
+       {value: 0x811b, lo: 0x9a, hi: 0x9a},
+       {value: 0x3841, lo: 0xa2, hi: 0xa2},
+       {value: 0x3847, lo: 0xa3, hi: 0xa3},
+       {value: 0x3853, lo: 0xa4, hi: 0xa4},
+       {value: 0x384d, lo: 0xa5, hi: 0xa5},
+       {value: 0x3859, lo: 0xa6, hi: 0xa6},
+       {value: 0xa000, lo: 0xa7, hi: 0xa7},
+       // Block 0x9, offset 0x3a
+       {value: 0x0000, lo: 0x0e},
+       {value: 0x386b, lo: 0x80, hi: 0x80},
+       {value: 0xa000, lo: 0x81, hi: 0x81},
+       {value: 0x385f, lo: 0x82, hi: 0x82},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       {value: 0x3865, lo: 0x93, hi: 0x93},
+       {value: 0xa000, lo: 0x95, hi: 0x95},
+       {value: 0x8132, lo: 0x96, hi: 0x9c},
+       {value: 0x8132, lo: 0x9f, hi: 0xa2},
+       {value: 0x812d, lo: 0xa3, hi: 0xa3},
+       {value: 0x8132, lo: 0xa4, hi: 0xa4},
+       {value: 0x8132, lo: 0xa7, hi: 0xa8},
+       {value: 0x812d, lo: 0xaa, hi: 0xaa},
+       {value: 0x8132, lo: 0xab, hi: 0xac},
+       {value: 0x812d, lo: 0xad, hi: 0xad},
+       // Block 0xa, offset 0x49
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x811f, lo: 0x91, hi: 0x91},
+       {value: 0x8132, lo: 0xb0, hi: 0xb0},
+       {value: 0x812d, lo: 0xb1, hi: 0xb1},
+       {value: 0x8132, lo: 0xb2, hi: 0xb3},
+       {value: 0x812d, lo: 0xb4, hi: 0xb4},
+       {value: 0x8132, lo: 0xb5, hi: 0xb6},
+       {value: 0x812d, lo: 0xb7, hi: 0xb9},
+       {value: 0x8132, lo: 0xba, hi: 0xba},
+       {value: 0x812d, lo: 0xbb, hi: 0xbc},
+       {value: 0x8132, lo: 0xbd, hi: 0xbd},
+       {value: 0x812d, lo: 0xbe, hi: 0xbe},
+       {value: 0x8132, lo: 0xbf, hi: 0xbf},
+       // Block 0xb, offset 0x56
+       {value: 0x0005, lo: 0x07},
+       {value: 0x8132, lo: 0x80, hi: 0x80},
+       {value: 0x8132, lo: 0x81, hi: 0x81},
+       {value: 0x812d, lo: 0x82, hi: 0x83},
+       {value: 0x812d, lo: 0x84, hi: 0x85},
+       {value: 0x812d, lo: 0x86, hi: 0x87},
+       {value: 0x812d, lo: 0x88, hi: 0x89},
+       {value: 0x8132, lo: 0x8a, hi: 0x8a},
+       // Block 0xc, offset 0x5e
+       {value: 0x0000, lo: 0x03},
+       {value: 0x8132, lo: 0xab, hi: 0xb1},
+       {value: 0x812d, lo: 0xb2, hi: 0xb2},
+       {value: 0x8132, lo: 0xb3, hi: 0xb3},
+       // Block 0xd, offset 0x62
+       {value: 0x0000, lo: 0x04},
+       {value: 0x8132, lo: 0x96, hi: 0x99},
+       {value: 0x8132, lo: 0x9b, hi: 0xa3},
+       {value: 0x8132, lo: 0xa5, hi: 0xa7},
+       {value: 0x8132, lo: 0xa9, hi: 0xad},
+       // Block 0xe, offset 0x67
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0x99, hi: 0x9b},
+       // Block 0xf, offset 0x69
+       {value: 0x0000, lo: 0x10},
+       {value: 0x8132, lo: 0x94, hi: 0xa1},
+       {value: 0x812d, lo: 0xa3, hi: 0xa3},
+       {value: 0x8132, lo: 0xa4, hi: 0xa5},
+       {value: 0x812d, lo: 0xa6, hi: 0xa6},
+       {value: 0x8132, lo: 0xa7, hi: 0xa8},
+       {value: 0x812d, lo: 0xa9, hi: 0xa9},
+       {value: 0x8132, lo: 0xaa, hi: 0xac},
+       {value: 0x812d, lo: 0xad, hi: 0xaf},
+       {value: 0x8116, lo: 0xb0, hi: 0xb0},
+       {value: 0x8117, lo: 0xb1, hi: 0xb1},
+       {value: 0x8118, lo: 0xb2, hi: 0xb2},
+       {value: 0x8132, lo: 0xb3, hi: 0xb5},
+       {value: 0x812d, lo: 0xb6, hi: 0xb6},
+       {value: 0x8132, lo: 0xb7, hi: 0xb8},
+       {value: 0x812d, lo: 0xb9, hi: 0xba},
+       {value: 0x8132, lo: 0xbb, hi: 0xbf},
+       // Block 0x10, offset 0x7a
+       {value: 0x0000, lo: 0x07},
+       {value: 0xa000, lo: 0xa8, hi: 0xa8},
+       {value: 0x3ed8, lo: 0xa9, hi: 0xa9},
+       {value: 0xa000, lo: 0xb0, hi: 0xb0},
+       {value: 0x3ee0, lo: 0xb1, hi: 0xb1},
+       {value: 0xa000, lo: 0xb3, hi: 0xb3},
+       {value: 0x3ee8, lo: 0xb4, hi: 0xb4},
+       {value: 0x9902, lo: 0xbc, hi: 0xbc},
+       // Block 0x11, offset 0x82
+       {value: 0x0008, lo: 0x06},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x8132, lo: 0x91, hi: 0x91},
+       {value: 0x812d, lo: 0x92, hi: 0x92},
+       {value: 0x8132, lo: 0x93, hi: 0x93},
+       {value: 0x8132, lo: 0x94, hi: 0x94},
+       {value: 0x451c, lo: 0x98, hi: 0x9f},
+       // Block 0x12, offset 0x89
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8102, lo: 0xbc, hi: 0xbc},
+       {value: 0x9900, lo: 0xbe, hi: 0xbe},
+       // Block 0x13, offset 0x8c
+       {value: 0x0008, lo: 0x06},
+       {value: 0xa000, lo: 0x87, hi: 0x87},
+       {value: 0x2c9e, lo: 0x8b, hi: 0x8c},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x97, hi: 0x97},
+       {value: 0x455c, lo: 0x9c, hi: 0x9d},
+       {value: 0x456c, lo: 0x9f, hi: 0x9f},
+       // Block 0x14, offset 0x93
+       {value: 0x0000, lo: 0x03},
+       {value: 0x4594, lo: 0xb3, hi: 0xb3},
+       {value: 0x459c, lo: 0xb6, hi: 0xb6},
+       {value: 0x8102, lo: 0xbc, hi: 0xbc},
+       // Block 0x15, offset 0x97
+       {value: 0x0008, lo: 0x03},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x4574, lo: 0x99, hi: 0x9b},
+       {value: 0x458c, lo: 0x9e, hi: 0x9e},
+       // Block 0x16, offset 0x9b
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8102, lo: 0xbc, hi: 0xbc},
+       // Block 0x17, offset 0x9d
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       // Block 0x18, offset 0x9f
+       {value: 0x0000, lo: 0x08},
+       {value: 0xa000, lo: 0x87, hi: 0x87},
+       {value: 0x2cb6, lo: 0x88, hi: 0x88},
+       {value: 0x2cae, lo: 0x8b, hi: 0x8b},
+       {value: 0x2cbe, lo: 0x8c, hi: 0x8c},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x96, hi: 0x97},
+       {value: 0x45a4, lo: 0x9c, hi: 0x9c},
+       {value: 0x45ac, lo: 0x9d, hi: 0x9d},
+       // Block 0x19, offset 0xa8
+       {value: 0x0000, lo: 0x03},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       {value: 0x2cc6, lo: 0x94, hi: 0x94},
+       {value: 0x9900, lo: 0xbe, hi: 0xbe},
+       // Block 0x1a, offset 0xac
+       {value: 0x0000, lo: 0x06},
+       {value: 0xa000, lo: 0x86, hi: 0x87},
+       {value: 0x2cce, lo: 0x8a, hi: 0x8a},
+       {value: 0x2cde, lo: 0x8b, hi: 0x8b},
+       {value: 0x2cd6, lo: 0x8c, hi: 0x8c},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x97, hi: 0x97},
+       // Block 0x1b, offset 0xb3
+       {value: 0x1801, lo: 0x04},
+       {value: 0xa000, lo: 0x86, hi: 0x86},
+       {value: 0x3ef0, lo: 0x88, hi: 0x88},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x8120, lo: 0x95, hi: 0x96},
+       // Block 0x1c, offset 0xb8
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8102, lo: 0xbc, hi: 0xbc},
+       {value: 0xa000, lo: 0xbf, hi: 0xbf},
+       // Block 0x1d, offset 0xbb
+       {value: 0x0000, lo: 0x09},
+       {value: 0x2ce6, lo: 0x80, hi: 0x80},
+       {value: 0x9900, lo: 0x82, hi: 0x82},
+       {value: 0xa000, lo: 0x86, hi: 0x86},
+       {value: 0x2cee, lo: 0x87, hi: 0x87},
+       {value: 0x2cf6, lo: 0x88, hi: 0x88},
+       {value: 0x2f50, lo: 0x8a, hi: 0x8a},
+       {value: 0x2dd8, lo: 0x8b, hi: 0x8b},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x95, hi: 0x96},
+       // Block 0x1e, offset 0xc5
+       {value: 0x0000, lo: 0x01},
+       {value: 0x9900, lo: 0xbe, hi: 0xbe},
+       // Block 0x1f, offset 0xc7
+       {value: 0x0000, lo: 0x06},
+       {value: 0xa000, lo: 0x86, hi: 0x87},
+       {value: 0x2cfe, lo: 0x8a, hi: 0x8a},
+       {value: 0x2d0e, lo: 0x8b, hi: 0x8b},
+       {value: 0x2d06, lo: 0x8c, hi: 0x8c},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x97, hi: 0x97},
+       // Block 0x20, offset 0xce
+       {value: 0x6bea, lo: 0x07},
+       {value: 0x9904, lo: 0x8a, hi: 0x8a},
+       {value: 0x9900, lo: 0x8f, hi: 0x8f},
+       {value: 0xa000, lo: 0x99, hi: 0x99},
+       {value: 0x3ef8, lo: 0x9a, hi: 0x9a},
+       {value: 0x2f58, lo: 0x9c, hi: 0x9c},
+       {value: 0x2de3, lo: 0x9d, hi: 0x9d},
+       {value: 0x2d16, lo: 0x9e, hi: 0x9f},
+       // Block 0x21, offset 0xd6
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8122, lo: 0xb8, hi: 0xb9},
+       {value: 0x8104, lo: 0xba, hi: 0xba},
+       // Block 0x22, offset 0xd9
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8123, lo: 0x88, hi: 0x8b},
+       // Block 0x23, offset 0xdb
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8124, lo: 0xb8, hi: 0xb9},
+       // Block 0x24, offset 0xdd
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8125, lo: 0x88, hi: 0x8b},
+       // Block 0x25, offset 0xdf
+       {value: 0x0000, lo: 0x04},
+       {value: 0x812d, lo: 0x98, hi: 0x99},
+       {value: 0x812d, lo: 0xb5, hi: 0xb5},
+       {value: 0x812d, lo: 0xb7, hi: 0xb7},
+       {value: 0x812b, lo: 0xb9, hi: 0xb9},
+       // Block 0x26, offset 0xe4
+       {value: 0x0000, lo: 0x10},
+       {value: 0x2644, lo: 0x83, hi: 0x83},
+       {value: 0x264b, lo: 0x8d, hi: 0x8d},
+       {value: 0x2652, lo: 0x92, hi: 0x92},
+       {value: 0x2659, lo: 0x97, hi: 0x97},
+       {value: 0x2660, lo: 0x9c, hi: 0x9c},
+       {value: 0x263d, lo: 0xa9, hi: 0xa9},
+       {value: 0x8126, lo: 0xb1, hi: 0xb1},
+       {value: 0x8127, lo: 0xb2, hi: 0xb2},
+       {value: 0x4a84, lo: 0xb3, hi: 0xb3},
+       {value: 0x8128, lo: 0xb4, hi: 0xb4},
+       {value: 0x4a8d, lo: 0xb5, hi: 0xb5},
+       {value: 0x45b4, lo: 0xb6, hi: 0xb6},
+       {value: 0x8200, lo: 0xb7, hi: 0xb7},
+       {value: 0x45bc, lo: 0xb8, hi: 0xb8},
+       {value: 0x8200, lo: 0xb9, hi: 0xb9},
+       {value: 0x8127, lo: 0xba, hi: 0xbd},
+       // Block 0x27, offset 0xf5
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x8127, lo: 0x80, hi: 0x80},
+       {value: 0x4a96, lo: 0x81, hi: 0x81},
+       {value: 0x8132, lo: 0x82, hi: 0x83},
+       {value: 0x8104, lo: 0x84, hi: 0x84},
+       {value: 0x8132, lo: 0x86, hi: 0x87},
+       {value: 0x266e, lo: 0x93, hi: 0x93},
+       {value: 0x2675, lo: 0x9d, hi: 0x9d},
+       {value: 0x267c, lo: 0xa2, hi: 0xa2},
+       {value: 0x2683, lo: 0xa7, hi: 0xa7},
+       {value: 0x268a, lo: 0xac, hi: 0xac},
+       {value: 0x2667, lo: 0xb9, hi: 0xb9},
+       // Block 0x28, offset 0x101
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0x86, hi: 0x86},
+       // Block 0x29, offset 0x103
+       {value: 0x0000, lo: 0x05},
+       {value: 0xa000, lo: 0xa5, hi: 0xa5},
+       {value: 0x2d1e, lo: 0xa6, hi: 0xa6},
+       {value: 0x9900, lo: 0xae, hi: 0xae},
+       {value: 0x8102, lo: 0xb7, hi: 0xb7},
+       {value: 0x8104, lo: 0xb9, hi: 0xba},
+       // Block 0x2a, offset 0x109
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0x8d, hi: 0x8d},
+       // Block 0x2b, offset 0x10b
+       {value: 0x0000, lo: 0x01},
+       {value: 0xa000, lo: 0x80, hi: 0x92},
+       // Block 0x2c, offset 0x10d
+       {value: 0x0000, lo: 0x01},
+       {value: 0xb900, lo: 0xa1, hi: 0xb5},
+       // Block 0x2d, offset 0x10f
+       {value: 0x0000, lo: 0x01},
+       {value: 0x9900, lo: 0xa8, hi: 0xbf},
+       // Block 0x2e, offset 0x111
+       {value: 0x0000, lo: 0x01},
+       {value: 0x9900, lo: 0x80, hi: 0x82},
+       // Block 0x2f, offset 0x113
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0x9d, hi: 0x9f},
+       // Block 0x30, offset 0x115
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x94, hi: 0x94},
+       {value: 0x8104, lo: 0xb4, hi: 0xb4},
+       // Block 0x31, offset 0x118
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x92, hi: 0x92},
+       {value: 0x8132, lo: 0x9d, hi: 0x9d},
+       // Block 0x32, offset 0x11b
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8131, lo: 0xa9, hi: 0xa9},
+       // Block 0x33, offset 0x11d
+       {value: 0x0004, lo: 0x02},
+       {value: 0x812e, lo: 0xb9, hi: 0xba},
+       {value: 0x812d, lo: 0xbb, hi: 0xbb},
+       // Block 0x34, offset 0x120
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8132, lo: 0x97, hi: 0x97},
+       {value: 0x812d, lo: 0x98, hi: 0x98},
+       // Block 0x35, offset 0x123
+       {value: 0x0000, lo: 0x03},
+       {value: 0x8104, lo: 0xa0, hi: 0xa0},
+       {value: 0x8132, lo: 0xb5, hi: 0xbc},
+       {value: 0x812d, lo: 0xbf, hi: 0xbf},
+       // Block 0x36, offset 0x127
+       {value: 0x0000, lo: 0x04},
+       {value: 0x8132, lo: 0xb0, hi: 0xb4},
+       {value: 0x812d, lo: 0xb5, hi: 0xba},
+       {value: 0x8132, lo: 0xbb, hi: 0xbc},
+       {value: 0x812d, lo: 0xbd, hi: 0xbd},
+       // Block 0x37, offset 0x12c
+       {value: 0x0000, lo: 0x08},
+       {value: 0x2d66, lo: 0x80, hi: 0x80},
+       {value: 0x2d6e, lo: 0x81, hi: 0x81},
+       {value: 0xa000, lo: 0x82, hi: 0x82},
+       {value: 0x2d76, lo: 0x83, hi: 0x83},
+       {value: 0x8104, lo: 0x84, hi: 0x84},
+       {value: 0x8132, lo: 0xab, hi: 0xab},
+       {value: 0x812d, lo: 0xac, hi: 0xac},
+       {value: 0x8132, lo: 0xad, hi: 0xb3},
+       // Block 0x38, offset 0x135
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0xaa, hi: 0xab},
+       // Block 0x39, offset 0x137
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8102, lo: 0xa6, hi: 0xa6},
+       {value: 0x8104, lo: 0xb2, hi: 0xb3},
+       // Block 0x3a, offset 0x13a
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8102, lo: 0xb7, hi: 0xb7},
+       // Block 0x3b, offset 0x13c
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x8132, lo: 0x90, hi: 0x92},
+       {value: 0x8101, lo: 0x94, hi: 0x94},
+       {value: 0x812d, lo: 0x95, hi: 0x99},
+       {value: 0x8132, lo: 0x9a, hi: 0x9b},
+       {value: 0x812d, lo: 0x9c, hi: 0x9f},
+       {value: 0x8132, lo: 0xa0, hi: 0xa0},
+       {value: 0x8101, lo: 0xa2, hi: 0xa8},
+       {value: 0x812d, lo: 0xad, hi: 0xad},
+       {value: 0x8132, lo: 0xb4, hi: 0xb4},
+       {value: 0x8132, lo: 0xb8, hi: 0xb9},
+       // Block 0x3c, offset 0x147
+       {value: 0x0000, lo: 0x0f},
+       {value: 0x8132, lo: 0x80, hi: 0x81},
+       {value: 0x812d, lo: 0x82, hi: 0x82},
+       {value: 0x8132, lo: 0x83, hi: 0x89},
+       {value: 0x812d, lo: 0x8a, hi: 0x8a},
+       {value: 0x8132, lo: 0x8b, hi: 0x8c},
+       {value: 0x8135, lo: 0x8d, hi: 0x8d},
+       {value: 0x812a, lo: 0x8e, hi: 0x8e},
+       {value: 0x812d, lo: 0x8f, hi: 0x8f},
+       {value: 0x8129, lo: 0x90, hi: 0x90},
+       {value: 0x8132, lo: 0x91, hi: 0xb5},
+       {value: 0x8132, lo: 0xbb, hi: 0xbb},
+       {value: 0x8134, lo: 0xbc, hi: 0xbc},
+       {value: 0x812d, lo: 0xbd, hi: 0xbd},
+       {value: 0x8132, lo: 0xbe, hi: 0xbe},
+       {value: 0x812d, lo: 0xbf, hi: 0xbf},
+       // Block 0x3d, offset 0x157
+       {value: 0x0004, lo: 0x03},
+       {value: 0x0433, lo: 0x80, hi: 0x81},
+       {value: 0x8100, lo: 0x97, hi: 0x97},
+       {value: 0x8100, lo: 0xbe, hi: 0xbe},
+       // Block 0x3e, offset 0x15b
+       {value: 0x0000, lo: 0x0d},
+       {value: 0x8132, lo: 0x90, hi: 0x91},
+       {value: 0x8101, lo: 0x92, hi: 0x93},
+       {value: 0x8132, lo: 0x94, hi: 0x97},
+       {value: 0x8101, lo: 0x98, hi: 0x9a},
+       {value: 0x8132, lo: 0x9b, hi: 0x9c},
+       {value: 0x8132, lo: 0xa1, hi: 0xa1},
+       {value: 0x8101, lo: 0xa5, hi: 0xa6},
+       {value: 0x8132, lo: 0xa7, hi: 0xa7},
+       {value: 0x812d, lo: 0xa8, hi: 0xa8},
+       {value: 0x8132, lo: 0xa9, hi: 0xa9},
+       {value: 0x8101, lo: 0xaa, hi: 0xab},
+       {value: 0x812d, lo: 0xac, hi: 0xaf},
+       {value: 0x8132, lo: 0xb0, hi: 0xb0},
+       // Block 0x3f, offset 0x169
+       {value: 0x427b, lo: 0x02},
+       {value: 0x01b8, lo: 0xa6, hi: 0xa6},
+       {value: 0x0057, lo: 0xaa, hi: 0xab},
+       // Block 0x40, offset 0x16c
+       {value: 0x0007, lo: 0x05},
+       {value: 0xa000, lo: 0x90, hi: 0x90},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       {value: 0xa000, lo: 0x94, hi: 0x94},
+       {value: 0x3bb9, lo: 0x9a, hi: 0x9b},
+       {value: 0x3bc7, lo: 0xae, hi: 0xae},
+       // Block 0x41, offset 0x172
+       {value: 0x000e, lo: 0x05},
+       {value: 0x3bce, lo: 0x8d, hi: 0x8e},
+       {value: 0x3bd5, lo: 0x8f, hi: 0x8f},
+       {value: 0xa000, lo: 0x90, hi: 0x90},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       {value: 0xa000, lo: 0x94, hi: 0x94},
+       // Block 0x42, offset 0x178
+       {value: 0x6408, lo: 0x0a},
+       {value: 0xa000, lo: 0x83, hi: 0x83},
+       {value: 0x3be3, lo: 0x84, hi: 0x84},
+       {value: 0xa000, lo: 0x88, hi: 0x88},
+       {value: 0x3bea, lo: 0x89, hi: 0x89},
+       {value: 0xa000, lo: 0x8b, hi: 0x8b},
+       {value: 0x3bf1, lo: 0x8c, hi: 0x8c},
+       {value: 0xa000, lo: 0xa3, hi: 0xa3},
+       {value: 0x3bf8, lo: 0xa4, hi: 0xa5},
+       {value: 0x3bff, lo: 0xa6, hi: 0xa6},
+       {value: 0xa000, lo: 0xbc, hi: 0xbc},
+       // Block 0x43, offset 0x183
+       {value: 0x0007, lo: 0x03},
+       {value: 0x3c68, lo: 0xa0, hi: 0xa1},
+       {value: 0x3c92, lo: 0xa2, hi: 0xa3},
+       {value: 0x3cbc, lo: 0xaa, hi: 0xad},
+       // Block 0x44, offset 0x187
+       {value: 0x0004, lo: 0x01},
+       {value: 0x048b, lo: 0xa9, hi: 0xaa},
+       // Block 0x45, offset 0x189
+       {value: 0x0000, lo: 0x01},
+       {value: 0x44dd, lo: 0x9c, hi: 0x9c},
+       // Block 0x46, offset 0x18b
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0xaf, hi: 0xb1},
+       // Block 0x47, offset 0x18d
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0xbf, hi: 0xbf},
+       // Block 0x48, offset 0x18f
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0xa0, hi: 0xbf},
+       // Block 0x49, offset 0x191
+       {value: 0x0000, lo: 0x05},
+       {value: 0x812c, lo: 0xaa, hi: 0xaa},
+       {value: 0x8131, lo: 0xab, hi: 0xab},
+       {value: 0x8133, lo: 0xac, hi: 0xac},
+       {value: 0x812e, lo: 0xad, hi: 0xad},
+       {value: 0x812f, lo: 0xae, hi: 0xaf},
+       // Block 0x4a, offset 0x197
+       {value: 0x0000, lo: 0x03},
+       {value: 0x4a9f, lo: 0xb3, hi: 0xb3},
+       {value: 0x4a9f, lo: 0xb5, hi: 0xb6},
+       {value: 0x4a9f, lo: 0xba, hi: 0xbf},
+       // Block 0x4b, offset 0x19b
+       {value: 0x0000, lo: 0x01},
+       {value: 0x4a9f, lo: 0x8f, hi: 0xa3},
+       // Block 0x4c, offset 0x19d
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8100, lo: 0xae, hi: 0xbe},
+       // Block 0x4d, offset 0x19f
+       {value: 0x0000, lo: 0x07},
+       {value: 0x8100, lo: 0x84, hi: 0x84},
+       {value: 0x8100, lo: 0x87, hi: 0x87},
+       {value: 0x8100, lo: 0x90, hi: 0x90},
+       {value: 0x8100, lo: 0x9e, hi: 0x9e},
+       {value: 0x8100, lo: 0xa1, hi: 0xa1},
+       {value: 0x8100, lo: 0xb2, hi: 0xb2},
+       {value: 0x8100, lo: 0xbb, hi: 0xbb},
+       // Block 0x4e, offset 0x1a7
+       {value: 0x0000, lo: 0x03},
+       {value: 0x8100, lo: 0x80, hi: 0x80},
+       {value: 0x8100, lo: 0x8b, hi: 0x8b},
+       {value: 0x8100, lo: 0x8e, hi: 0x8e},
+       // Block 0x4f, offset 0x1ab
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8132, lo: 0xaf, hi: 0xaf},
+       {value: 0x8132, lo: 0xb4, hi: 0xbd},
+       // Block 0x50, offset 0x1ae
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0x9e, hi: 0x9f},
+       // Block 0x51, offset 0x1b0
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0xb0, hi: 0xb1},
+       // Block 0x52, offset 0x1b2
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0x86, hi: 0x86},
+       // Block 0x53, offset 0x1b4
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x84, hi: 0x84},
+       {value: 0x8132, lo: 0xa0, hi: 0xb1},
+       // Block 0x54, offset 0x1b7
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0xab, hi: 0xad},
+       // Block 0x55, offset 0x1b9
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0x93, hi: 0x93},
+       // Block 0x56, offset 0x1bb
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8102, lo: 0xb3, hi: 0xb3},
+       // Block 0x57, offset 0x1bd
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0x80, hi: 0x80},
+       // Block 0x58, offset 0x1bf
+       {value: 0x0000, lo: 0x05},
+       {value: 0x8132, lo: 0xb0, hi: 0xb0},
+       {value: 0x8132, lo: 0xb2, hi: 0xb3},
+       {value: 0x812d, lo: 0xb4, hi: 0xb4},
+       {value: 0x8132, lo: 0xb7, hi: 0xb8},
+       {value: 0x8132, lo: 0xbe, hi: 0xbf},
+       // Block 0x59, offset 0x1c5
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8132, lo: 0x81, hi: 0x81},
+       {value: 0x8104, lo: 0xb6, hi: 0xb6},
+       // Block 0x5a, offset 0x1c8
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0xad, hi: 0xad},
+       // Block 0x5b, offset 0x1ca
+       {value: 0x0000, lo: 0x06},
+       {value: 0xe500, lo: 0x80, hi: 0x80},
+       {value: 0xc600, lo: 0x81, hi: 0x9b},
+       {value: 0xe500, lo: 0x9c, hi: 0x9c},
+       {value: 0xc600, lo: 0x9d, hi: 0xb7},
+       {value: 0xe500, lo: 0xb8, hi: 0xb8},
+       {value: 0xc600, lo: 0xb9, hi: 0xbf},
+       // Block 0x5c, offset 0x1d1
+       {value: 0x0000, lo: 0x05},
+       {value: 0xc600, lo: 0x80, hi: 0x93},
+       {value: 0xe500, lo: 0x94, hi: 0x94},
+       {value: 0xc600, lo: 0x95, hi: 0xaf},
+       {value: 0xe500, lo: 0xb0, hi: 0xb0},
+       {value: 0xc600, lo: 0xb1, hi: 0xbf},
+       // Block 0x5d, offset 0x1d7
+       {value: 0x0000, lo: 0x05},
+       {value: 0xc600, lo: 0x80, hi: 0x8b},
+       {value: 0xe500, lo: 0x8c, hi: 0x8c},
+       {value: 0xc600, lo: 0x8d, hi: 0xa7},
+       {value: 0xe500, lo: 0xa8, hi: 0xa8},
+       {value: 0xc600, lo: 0xa9, hi: 0xbf},
+       // Block 0x5e, offset 0x1dd
+       {value: 0x0000, lo: 0x07},
+       {value: 0xc600, lo: 0x80, hi: 0x83},
+       {value: 0xe500, lo: 0x84, hi: 0x84},
+       {value: 0xc600, lo: 0x85, hi: 0x9f},
+       {value: 0xe500, lo: 0xa0, hi: 0xa0},
+       {value: 0xc600, lo: 0xa1, hi: 0xbb},
+       {value: 0xe500, lo: 0xbc, hi: 0xbc},
+       {value: 0xc600, lo: 0xbd, hi: 0xbf},
+       // Block 0x5f, offset 0x1e5
+       {value: 0x0000, lo: 0x05},
+       {value: 0xc600, lo: 0x80, hi: 0x97},
+       {value: 0xe500, lo: 0x98, hi: 0x98},
+       {value: 0xc600, lo: 0x99, hi: 0xb3},
+       {value: 0xe500, lo: 0xb4, hi: 0xb4},
+       {value: 0xc600, lo: 0xb5, hi: 0xbf},
+       // Block 0x60, offset 0x1eb
+       {value: 0x0000, lo: 0x05},
+       {value: 0xc600, lo: 0x80, hi: 0x8f},
+       {value: 0xe500, lo: 0x90, hi: 0x90},
+       {value: 0xc600, lo: 0x91, hi: 0xab},
+       {value: 0xe500, lo: 0xac, hi: 0xac},
+       {value: 0xc600, lo: 0xad, hi: 0xbf},
+       // Block 0x61, offset 0x1f1
+       {value: 0x0000, lo: 0x05},
+       {value: 0xc600, lo: 0x80, hi: 0x87},
+       {value: 0xe500, lo: 0x88, hi: 0x88},
+       {value: 0xc600, lo: 0x89, hi: 0xa3},
+       {value: 0xe500, lo: 0xa4, hi: 0xa4},
+       {value: 0xc600, lo: 0xa5, hi: 0xbf},
+       // Block 0x62, offset 0x1f7
+       {value: 0x0000, lo: 0x03},
+       {value: 0xc600, lo: 0x80, hi: 0x87},
+       {value: 0xe500, lo: 0x88, hi: 0x88},
+       {value: 0xc600, lo: 0x89, hi: 0xa3},
+       // Block 0x63, offset 0x1fb
+       {value: 0x0006, lo: 0x0d},
+       {value: 0x4390, lo: 0x9d, hi: 0x9d},
+       {value: 0x8115, lo: 0x9e, hi: 0x9e},
+       {value: 0x4402, lo: 0x9f, hi: 0x9f},
+       {value: 0x43f0, lo: 0xaa, hi: 0xab},
+       {value: 0x44f4, lo: 0xac, hi: 0xac},
+       {value: 0x44fc, lo: 0xad, hi: 0xad},
+       {value: 0x4348, lo: 0xae, hi: 0xb1},
+       {value: 0x4366, lo: 0xb2, hi: 0xb4},
+       {value: 0x437e, lo: 0xb5, hi: 0xb6},
+       {value: 0x438a, lo: 0xb8, hi: 0xb8},
+       {value: 0x4396, lo: 0xb9, hi: 0xbb},
+       {value: 0x43ae, lo: 0xbc, hi: 0xbc},
+       {value: 0x43b4, lo: 0xbe, hi: 0xbe},
+       // Block 0x64, offset 0x209
+       {value: 0x0006, lo: 0x08},
+       {value: 0x43ba, lo: 0x80, hi: 0x81},
+       {value: 0x43c6, lo: 0x83, hi: 0x84},
+       {value: 0x43d8, lo: 0x86, hi: 0x89},
+       {value: 0x43fc, lo: 0x8a, hi: 0x8a},
+       {value: 0x4378, lo: 0x8b, hi: 0x8b},
+       {value: 0x4360, lo: 0x8c, hi: 0x8c},
+       {value: 0x43a8, lo: 0x8d, hi: 0x8d},
+       {value: 0x43d2, lo: 0x8e, hi: 0x8e},
+       // Block 0x65, offset 0x212
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8100, lo: 0xa4, hi: 0xa5},
+       {value: 0x8100, lo: 0xb0, hi: 0xb1},
+       // Block 0x66, offset 0x215
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8100, lo: 0x9b, hi: 0x9d},
+       {value: 0x8200, lo: 0x9e, hi: 0xa3},
+       // Block 0x67, offset 0x218
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8100, lo: 0x90, hi: 0x90},
+       // Block 0x68, offset 0x21a
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8100, lo: 0x99, hi: 0x99},
+       {value: 0x8200, lo: 0xb2, hi: 0xb4},
+       // Block 0x69, offset 0x21d
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8100, lo: 0xbc, hi: 0xbd},
+       // Block 0x6a, offset 0x21f
+       {value: 0x0000, lo: 0x03},
+       {value: 0x8132, lo: 0xa0, hi: 0xa6},
+       {value: 0x812d, lo: 0xa7, hi: 0xad},
+       {value: 0x8132, lo: 0xae, hi: 0xaf},
+       // Block 0x6b, offset 0x223
+       {value: 0x0000, lo: 0x04},
+       {value: 0x8100, lo: 0x89, hi: 0x8c},
+       {value: 0x8100, lo: 0xb0, hi: 0xb2},
+       {value: 0x8100, lo: 0xb4, hi: 0xb4},
+       {value: 0x8100, lo: 0xb6, hi: 0xbf},
+       // Block 0x6c, offset 0x228
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8100, lo: 0x81, hi: 0x8c},
+       // Block 0x6d, offset 0x22a
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8100, lo: 0xb5, hi: 0xba},
+       // Block 0x6e, offset 0x22c
+       {value: 0x0000, lo: 0x04},
+       {value: 0x4a9f, lo: 0x9e, hi: 0x9f},
+       {value: 0x4a9f, lo: 0xa3, hi: 0xa3},
+       {value: 0x4a9f, lo: 0xa5, hi: 0xa6},
+       {value: 0x4a9f, lo: 0xaa, hi: 0xaf},
+       // Block 0x6f, offset 0x231
+       {value: 0x0000, lo: 0x05},
+       {value: 0x4a9f, lo: 0x82, hi: 0x87},
+       {value: 0x4a9f, lo: 0x8a, hi: 0x8f},
+       {value: 0x4a9f, lo: 0x92, hi: 0x97},
+       {value: 0x4a9f, lo: 0x9a, hi: 0x9c},
+       {value: 0x8100, lo: 0xa3, hi: 0xa3},
+       // Block 0x70, offset 0x237
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0xbd, hi: 0xbd},
+       // Block 0x71, offset 0x239
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0xa0, hi: 0xa0},
+       // Block 0x72, offset 0x23b
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0xb6, hi: 0xba},
+       // Block 0x73, offset 0x23d
+       {value: 0x002c, lo: 0x05},
+       {value: 0x812d, lo: 0x8d, hi: 0x8d},
+       {value: 0x8132, lo: 0x8f, hi: 0x8f},
+       {value: 0x8132, lo: 0xb8, hi: 0xb8},
+       {value: 0x8101, lo: 0xb9, hi: 0xba},
+       {value: 0x8104, lo: 0xbf, hi: 0xbf},
+       // Block 0x74, offset 0x243
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8132, lo: 0xa5, hi: 0xa5},
+       {value: 0x812d, lo: 0xa6, hi: 0xa6},
+       // Block 0x75, offset 0x246
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x86, hi: 0x86},
+       {value: 0x8104, lo: 0xbf, hi: 0xbf},
+       // Block 0x76, offset 0x249
+       {value: 0x17fe, lo: 0x07},
+       {value: 0xa000, lo: 0x99, hi: 0x99},
+       {value: 0x4238, lo: 0x9a, hi: 0x9a},
+       {value: 0xa000, lo: 0x9b, hi: 0x9b},
+       {value: 0x4242, lo: 0x9c, hi: 0x9c},
+       {value: 0xa000, lo: 0xa5, hi: 0xa5},
+       {value: 0x424c, lo: 0xab, hi: 0xab},
+       {value: 0x8104, lo: 0xb9, hi: 0xba},
+       // Block 0x77, offset 0x251
+       {value: 0x0000, lo: 0x06},
+       {value: 0x8132, lo: 0x80, hi: 0x82},
+       {value: 0x9900, lo: 0xa7, hi: 0xa7},
+       {value: 0x2d7e, lo: 0xae, hi: 0xae},
+       {value: 0x2d88, lo: 0xaf, hi: 0xaf},
+       {value: 0xa000, lo: 0xb1, hi: 0xb2},
+       {value: 0x8104, lo: 0xb3, hi: 0xb4},
+       // Block 0x78, offset 0x258
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x80, hi: 0x80},
+       {value: 0x8102, lo: 0x8a, hi: 0x8a},
+       // Block 0x79, offset 0x25b
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0xb5, hi: 0xb5},
+       {value: 0x8102, lo: 0xb6, hi: 0xb6},
+       // Block 0x7a, offset 0x25e
+       {value: 0x0002, lo: 0x01},
+       {value: 0x8102, lo: 0xa9, hi: 0xaa},
+       // Block 0x7b, offset 0x260
+       {value: 0x0000, lo: 0x07},
+       {value: 0xa000, lo: 0x87, hi: 0x87},
+       {value: 0x2d92, lo: 0x8b, hi: 0x8b},
+       {value: 0x2d9c, lo: 0x8c, hi: 0x8c},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x97, hi: 0x97},
+       {value: 0x8132, lo: 0xa6, hi: 0xac},
+       {value: 0x8132, lo: 0xb0, hi: 0xb4},
+       // Block 0x7c, offset 0x268
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x82, hi: 0x82},
+       {value: 0x8102, lo: 0x86, hi: 0x86},
+       // Block 0x7d, offset 0x26b
+       {value: 0x6b5a, lo: 0x06},
+       {value: 0x9900, lo: 0xb0, hi: 0xb0},
+       {value: 0xa000, lo: 0xb9, hi: 0xb9},
+       {value: 0x9900, lo: 0xba, hi: 0xba},
+       {value: 0x2db0, lo: 0xbb, hi: 0xbb},
+       {value: 0x2da6, lo: 0xbc, hi: 0xbd},
+       {value: 0x2dba, lo: 0xbe, hi: 0xbe},
+       // Block 0x7e, offset 0x272
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x82, hi: 0x82},
+       {value: 0x8102, lo: 0x83, hi: 0x83},
+       // Block 0x7f, offset 0x275
+       {value: 0x0000, lo: 0x05},
+       {value: 0x9900, lo: 0xaf, hi: 0xaf},
+       {value: 0xa000, lo: 0xb8, hi: 0xb9},
+       {value: 0x2dc4, lo: 0xba, hi: 0xba},
+       {value: 0x2dce, lo: 0xbb, hi: 0xbb},
+       {value: 0x8104, lo: 0xbf, hi: 0xbf},
+       // Block 0x80, offset 0x27b
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8102, lo: 0x80, hi: 0x80},
+       // Block 0x81, offset 0x27d
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0xb6, hi: 0xb6},
+       {value: 0x8102, lo: 0xb7, hi: 0xb7},
+       // Block 0x82, offset 0x280
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0xab, hi: 0xab},
+       // Block 0x83, offset 0x282
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8101, lo: 0xb0, hi: 0xb4},
+       // Block 0x84, offset 0x284
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0xb0, hi: 0xb6},
+       // Block 0x85, offset 0x286
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8101, lo: 0x9e, hi: 0x9e},
+       // Block 0x86, offset 0x288
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x45cc, lo: 0x9e, hi: 0x9e},
+       {value: 0x45d6, lo: 0x9f, hi: 0x9f},
+       {value: 0x460a, lo: 0xa0, hi: 0xa0},
+       {value: 0x4618, lo: 0xa1, hi: 0xa1},
+       {value: 0x4626, lo: 0xa2, hi: 0xa2},
+       {value: 0x4634, lo: 0xa3, hi: 0xa3},
+       {value: 0x4642, lo: 0xa4, hi: 0xa4},
+       {value: 0x812b, lo: 0xa5, hi: 0xa6},
+       {value: 0x8101, lo: 0xa7, hi: 0xa9},
+       {value: 0x8130, lo: 0xad, hi: 0xad},
+       {value: 0x812b, lo: 0xae, hi: 0xb2},
+       {value: 0x812d, lo: 0xbb, hi: 0xbf},
+       // Block 0x87, offset 0x295
+       {value: 0x0000, lo: 0x09},
+       {value: 0x812d, lo: 0x80, hi: 0x82},
+       {value: 0x8132, lo: 0x85, hi: 0x89},
+       {value: 0x812d, lo: 0x8a, hi: 0x8b},
+       {value: 0x8132, lo: 0xaa, hi: 0xad},
+       {value: 0x45e0, lo: 0xbb, hi: 0xbb},
+       {value: 0x45ea, lo: 0xbc, hi: 0xbc},
+       {value: 0x4650, lo: 0xbd, hi: 0xbd},
+       {value: 0x466c, lo: 0xbe, hi: 0xbe},
+       {value: 0x465e, lo: 0xbf, hi: 0xbf},
+       // Block 0x88, offset 0x29f
+       {value: 0x0000, lo: 0x01},
+       {value: 0x467a, lo: 0x80, hi: 0x80},
+       // Block 0x89, offset 0x2a1
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0x82, hi: 0x84},
+       // Block 0x8a, offset 0x2a3
+       {value: 0x0000, lo: 0x05},
+       {value: 0x8132, lo: 0x80, hi: 0x86},
+       {value: 0x8132, lo: 0x88, hi: 0x98},
+       {value: 0x8132, lo: 0x9b, hi: 0xa1},
+       {value: 0x8132, lo: 0xa3, hi: 0xa4},
+       {value: 0x8132, lo: 0xa6, hi: 0xaa},
+       // Block 0x8b, offset 0x2a9
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0x90, hi: 0x96},
+       // Block 0x8c, offset 0x2ab
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8132, lo: 0x84, hi: 0x89},
+       {value: 0x8102, lo: 0x8a, hi: 0x8a},
+       // Block 0x8d, offset 0x2ae
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8100, lo: 0x93, hi: 0x93},
+}
+
+// lookup returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return nfkcValues[c0], 1
+       case c0 < 0xC2:
+               return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return 0, 0
+               }
+               i := nfkcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c1), 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return 0, 0
+               }
+               i := nfkcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = nfkcIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c2), 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return 0, 0
+               }
+               i := nfkcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = nfkcIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = nfkcIndex[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return 0, 3 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c3), 4
+       }
+       // Illegal rune
+       return 0, 1
+}
+
+// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 {
+       c0 := s[0]
+       if c0 < 0x80 { // is ASCII
+               return nfkcValues[c0]
+       }
+       i := nfkcIndex[c0]
+       if c0 < 0xE0 { // 2-byte UTF-8
+               return t.lookupValue(uint32(i), s[1])
+       }
+       i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
+       if c0 < 0xF0 { // 3-byte UTF-8
+               return t.lookupValue(uint32(i), s[2])
+       }
+       i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
+       if c0 < 0xF8 { // 4-byte UTF-8
+               return t.lookupValue(uint32(i), s[3])
+       }
+       return 0
+}
+
+// lookupString returns the trie value for the first UTF-8 encoding in s and
+// the width in bytes of this encoding. The size will be 0 if s does not
+// hold enough bytes to complete the encoding. len(s) must be greater than 0.
+func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) {
+       c0 := s[0]
+       switch {
+       case c0 < 0x80: // is ASCII
+               return nfkcValues[c0], 1
+       case c0 < 0xC2:
+               return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+       case c0 < 0xE0: // 2-byte UTF-8
+               if len(s) < 2 {
+                       return 0, 0
+               }
+               i := nfkcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c1), 2
+       case c0 < 0xF0: // 3-byte UTF-8
+               if len(s) < 3 {
+                       return 0, 0
+               }
+               i := nfkcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = nfkcIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c2), 3
+       case c0 < 0xF8: // 4-byte UTF-8
+               if len(s) < 4 {
+                       return 0, 0
+               }
+               i := nfkcIndex[c0]
+               c1 := s[1]
+               if c1 < 0x80 || 0xC0 <= c1 {
+                       return 0, 1 // Illegal UTF-8: not a continuation byte.
+               }
+               o := uint32(i)<<6 + uint32(c1)
+               i = nfkcIndex[o]
+               c2 := s[2]
+               if c2 < 0x80 || 0xC0 <= c2 {
+                       return 0, 2 // Illegal UTF-8: not a continuation byte.
+               }
+               o = uint32(i)<<6 + uint32(c2)
+               i = nfkcIndex[o]
+               c3 := s[3]
+               if c3 < 0x80 || 0xC0 <= c3 {
+                       return 0, 3 // Illegal UTF-8: not a continuation byte.
+               }
+               return t.lookupValue(uint32(i), c3), 4
+       }
+       // Illegal rune
+       return 0, 1
+}
+
+// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
+// s must start with a full and valid UTF-8 encoded rune.
+func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 {
+       c0 := s[0]
+       if c0 < 0x80 { // is ASCII
+               return nfkcValues[c0]
+       }
+       i := nfkcIndex[c0]
+       if c0 < 0xE0 { // 2-byte UTF-8
+               return t.lookupValue(uint32(i), s[1])
+       }
+       i = nfkcIndex[uint32(i)<<6+uint32(s[1])]
+       if c0 < 0xF0 { // 3-byte UTF-8
+               return t.lookupValue(uint32(i), s[2])
+       }
+       i = nfkcIndex[uint32(i)<<6+uint32(s[2])]
+       if c0 < 0xF8 { // 4-byte UTF-8
+               return t.lookupValue(uint32(i), s[3])
+       }
+       return 0
+}
+
+// nfkcTrie. Total size: 16994 bytes (16.60 KiB). Checksum: c3ed54ee046f3c46.
+type nfkcTrie struct{}
+
+func newNfkcTrie(i int) *nfkcTrie {
+       return &nfkcTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 {
+       switch {
+       case n < 90:
+               return uint16(nfkcValues[n<<6+uint32(b)])
+       default:
+               n -= 90
+               return uint16(nfkcSparse.lookup(n, b))
+       }
+}
+
+// nfkcValues: 92 blocks, 5888 entries, 11776 bytes
+// The third block is the zero block.
+var nfkcValues = [5888]uint16{
+       // Block 0x0, offset 0x0
+       0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000,
+       // Block 0x1, offset 0x40
+       0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000,
+       0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000,
+       0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000,
+       0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000,
+       0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000,
+       0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000,
+       0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000,
+       0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000,
+       0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000,
+       0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000,
+       // Block 0x2, offset 0x80
+       // Block 0x3, offset 0xc0
+       0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c,
+       0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb,
+       0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104,
+       0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd,
+       0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235,
+       0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285,
+       0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3,
+       0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750,
+       0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f,
+       0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3,
+       0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569,
+       // Block 0x4, offset 0x100
+       0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8,
+       0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6,
+       0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5,
+       0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302,
+       0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339,
+       0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352,
+       0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e,
+       0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6,
+       0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0,
+       0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc,
+       0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac,
+       // Block 0x5, offset 0x140
+       0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118,
+       0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c,
+       0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c,
+       0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483,
+       0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d,
+       0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba,
+       0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796,
+       0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2,
+       0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528,
+       0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267,
+       0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7,
+       // Block 0x6, offset 0x180
+       0x184: 0x2dee, 0x185: 0x2df4,
+       0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a,
+       0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140,
+       0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8,
+       0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50,
+       0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5,
+       0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf,
+       0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd,
+       0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334,
+       0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46,
+       0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb,
+       // Block 0x7, offset 0x1c0
+       0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316,
+       0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac,
+       0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479,
+       0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6,
+       0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5,
+       0x1de: 0x305a, 0x1df: 0x3366,
+       0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b,
+       0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769,
+       0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f,
+       // Block 0x8, offset 0x200
+       0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132,
+       0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932,
+       0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932,
+       0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d,
+       0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d,
+       0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d,
+       0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d,
+       0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d,
+       0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101,
+       0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d,
+       0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132,
+       // Block 0x9, offset 0x240
+       0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936,
+       0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132,
+       0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132,
+       0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132,
+       0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135,
+       0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132,
+       0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132,
+       0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132,
+       0x274: 0x0170,
+       0x27a: 0x42a5,
+       0x27e: 0x0037,
+       // Block 0xa, offset 0x280
+       0x284: 0x425a, 0x285: 0x447b,
+       0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625,
+       0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000,
+       0x295: 0xa000, 0x297: 0xa000,
+       0x299: 0xa000,
+       0x29f: 0xa000, 0x2a1: 0xa000,
+       0x2a5: 0xa000, 0x2a9: 0xa000,
+       0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9,
+       0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000,
+       0x2b7: 0xa000, 0x2b9: 0xa000,
+       0x2bf: 0xa000,
+       // Block 0xb, offset 0x2c0
+       0x2c1: 0xa000, 0x2c5: 0xa000,
+       0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e,
+       0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0,
+       0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8,
+       0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,
+       0x2f9: 0x01a6,
+       // Block 0xc, offset 0x300
+       0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b,
+       0x306: 0xa000, 0x307: 0x3709,
+       0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000,
+       0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,
+       0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000,
+       0x31e: 0xa000, 0x323: 0xa000,
+       0x327: 0xa000,
+       0x32b: 0xa000, 0x32d: 0xa000,
+       0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000,
+       0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000,
+       0x33e: 0xa000,
+       // Block 0xd, offset 0x340
+       0x341: 0x3733, 0x342: 0x37b7,
+       0x350: 0x370f, 0x351: 0x3793,
+       0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab,
+       0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd,
+       0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf,
+       0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000,
+       0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed,
+       0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805,
+       0x378: 0x3787, 0x379: 0x380b,
+       // Block 0xe, offset 0x380
+       0x387: 0x1d61,
+       0x391: 0x812d,
+       0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132,
+       0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132,
+       0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d,
+       0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132,
+       0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132,
+       0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a,
+       0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f,
+       0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112,
+       // Block 0xf, offset 0x3c0
+       0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116,
+       0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c,
+       0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132,
+       0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132,
+       0x3de: 0x8132, 0x3df: 0x812d,
+       0x3f0: 0x811e, 0x3f5: 0x1d84,
+       0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a,
+       // Block 0x10, offset 0x400
+       0x405: 0xa000,
+       0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000,
+       0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000,
+       0x412: 0x2d4e,
+       0x434: 0x8102, 0x435: 0x9900,
+       0x43a: 0xa000, 0x43b: 0x2d56,
+       0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000,
+       // Block 0x11, offset 0x440
+       0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8,
+       0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107,
+       0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0,
+       0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9,
+       0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be,
+       0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5,
+       0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa,
+       0x46a: 0x01fd,
+       0x478: 0x020c,
+       // Block 0x12, offset 0x480
+       0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101,
+       0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116,
+       0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128,
+       0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137,
+       0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec,
+       0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5,
+       0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0,
+       // Block 0x13, offset 0x4c0
+       0x4c0: 0x2f97, 0x4c1: 0x32a3, 0x4c2: 0x2fa1, 0x4c3: 0x32ad, 0x4c4: 0x2fa6, 0x4c5: 0x32b2,
+       0x4c6: 0x2fab, 0x4c7: 0x32b7, 0x4c8: 0x38cc, 0x4c9: 0x3a5b, 0x4ca: 0x2fc4, 0x4cb: 0x32d0,
+       0x4cc: 0x2fce, 0x4cd: 0x32da, 0x4ce: 0x2fdd, 0x4cf: 0x32e9, 0x4d0: 0x2fd3, 0x4d1: 0x32df,
+       0x4d2: 0x2fd8, 0x4d3: 0x32e4, 0x4d4: 0x38ef, 0x4d5: 0x3a7e, 0x4d6: 0x38f6, 0x4d7: 0x3a85,
+       0x4d8: 0x3019, 0x4d9: 0x3325, 0x4da: 0x301e, 0x4db: 0x332a, 0x4dc: 0x3904, 0x4dd: 0x3a93,
+       0x4de: 0x3023, 0x4df: 0x332f, 0x4e0: 0x3032, 0x4e1: 0x333e, 0x4e2: 0x3050, 0x4e3: 0x335c,
+       0x4e4: 0x305f, 0x4e5: 0x336b, 0x4e6: 0x3055, 0x4e7: 0x3361, 0x4e8: 0x3064, 0x4e9: 0x3370,
+       0x4ea: 0x3069, 0x4eb: 0x3375, 0x4ec: 0x30af, 0x4ed: 0x33bb, 0x4ee: 0x390b, 0x4ef: 0x3a9a,
+       0x4f0: 0x30b9, 0x4f1: 0x33ca, 0x4f2: 0x30c3, 0x4f3: 0x33d4, 0x4f4: 0x30cd, 0x4f5: 0x33de,
+       0x4f6: 0x46c4, 0x4f7: 0x4755, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x30e6, 0x4fb: 0x33f7,
+       0x4fc: 0x30e1, 0x4fd: 0x33f2, 0x4fe: 0x30eb, 0x4ff: 0x33fc,
+       // Block 0x14, offset 0x500
+       0x500: 0x30f0, 0x501: 0x3401, 0x502: 0x30f5, 0x503: 0x3406, 0x504: 0x3109, 0x505: 0x341a,
+       0x506: 0x3113, 0x507: 0x3424, 0x508: 0x3122, 0x509: 0x3433, 0x50a: 0x311d, 0x50b: 0x342e,
+       0x50c: 0x3935, 0x50d: 0x3ac4, 0x50e: 0x3943, 0x50f: 0x3ad2, 0x510: 0x394a, 0x511: 0x3ad9,
+       0x512: 0x3951, 0x513: 0x3ae0, 0x514: 0x314f, 0x515: 0x3460, 0x516: 0x3154, 0x517: 0x3465,
+       0x518: 0x315e, 0x519: 0x346f, 0x51a: 0x46f1, 0x51b: 0x4782, 0x51c: 0x3997, 0x51d: 0x3b26,
+       0x51e: 0x3177, 0x51f: 0x3488, 0x520: 0x3181, 0x521: 0x3492, 0x522: 0x4700, 0x523: 0x4791,
+       0x524: 0x399e, 0x525: 0x3b2d, 0x526: 0x39a5, 0x527: 0x3b34, 0x528: 0x39ac, 0x529: 0x3b3b,
+       0x52a: 0x3190, 0x52b: 0x34a1, 0x52c: 0x319a, 0x52d: 0x34b0, 0x52e: 0x31ae, 0x52f: 0x34c4,
+       0x530: 0x31a9, 0x531: 0x34bf, 0x532: 0x31ea, 0x533: 0x3500, 0x534: 0x31f9, 0x535: 0x350f,
+       0x536: 0x31f4, 0x537: 0x350a, 0x538: 0x39b3, 0x539: 0x3b42, 0x53a: 0x39ba, 0x53b: 0x3b49,
+       0x53c: 0x31fe, 0x53d: 0x3514, 0x53e: 0x3203, 0x53f: 0x3519,
+       // Block 0x15, offset 0x540
+       0x540: 0x3208, 0x541: 0x351e, 0x542: 0x320d, 0x543: 0x3523, 0x544: 0x321c, 0x545: 0x3532,
+       0x546: 0x3217, 0x547: 0x352d, 0x548: 0x3221, 0x549: 0x353c, 0x54a: 0x3226, 0x54b: 0x3541,
+       0x54c: 0x322b, 0x54d: 0x3546, 0x54e: 0x3249, 0x54f: 0x3564, 0x550: 0x3262, 0x551: 0x3582,
+       0x552: 0x3271, 0x553: 0x3591, 0x554: 0x3276, 0x555: 0x3596, 0x556: 0x337a, 0x557: 0x34a6,
+       0x558: 0x3537, 0x559: 0x3573, 0x55a: 0x1be0, 0x55b: 0x42d7,
+       0x560: 0x46a1, 0x561: 0x4732, 0x562: 0x2f83, 0x563: 0x328f,
+       0x564: 0x3878, 0x565: 0x3a07, 0x566: 0x3871, 0x567: 0x3a00, 0x568: 0x3886, 0x569: 0x3a15,
+       0x56a: 0x387f, 0x56b: 0x3a0e, 0x56c: 0x38be, 0x56d: 0x3a4d, 0x56e: 0x3894, 0x56f: 0x3a23,
+       0x570: 0x388d, 0x571: 0x3a1c, 0x572: 0x38a2, 0x573: 0x3a31, 0x574: 0x389b, 0x575: 0x3a2a,
+       0x576: 0x38c5, 0x577: 0x3a54, 0x578: 0x46b5, 0x579: 0x4746, 0x57a: 0x3000, 0x57b: 0x330c,
+       0x57c: 0x2fec, 0x57d: 0x32f8, 0x57e: 0x38da, 0x57f: 0x3a69,
+       // Block 0x16, offset 0x580
+       0x580: 0x38d3, 0x581: 0x3a62, 0x582: 0x38e8, 0x583: 0x3a77, 0x584: 0x38e1, 0x585: 0x3a70,
+       0x586: 0x38fd, 0x587: 0x3a8c, 0x588: 0x3091, 0x589: 0x339d, 0x58a: 0x30a5, 0x58b: 0x33b1,
+       0x58c: 0x46e7, 0x58d: 0x4778, 0x58e: 0x3136, 0x58f: 0x3447, 0x590: 0x3920, 0x591: 0x3aaf,
+       0x592: 0x3919, 0x593: 0x3aa8, 0x594: 0x392e, 0x595: 0x3abd, 0x596: 0x3927, 0x597: 0x3ab6,
+       0x598: 0x3989, 0x599: 0x3b18, 0x59a: 0x396d, 0x59b: 0x3afc, 0x59c: 0x3966, 0x59d: 0x3af5,
+       0x59e: 0x397b, 0x59f: 0x3b0a, 0x5a0: 0x3974, 0x5a1: 0x3b03, 0x5a2: 0x3982, 0x5a3: 0x3b11,
+       0x5a4: 0x31e5, 0x5a5: 0x34fb, 0x5a6: 0x31c7, 0x5a7: 0x34dd, 0x5a8: 0x39e4, 0x5a9: 0x3b73,
+       0x5aa: 0x39dd, 0x5ab: 0x3b6c, 0x5ac: 0x39f2, 0x5ad: 0x3b81, 0x5ae: 0x39eb, 0x5af: 0x3b7a,
+       0x5b0: 0x39f9, 0x5b1: 0x3b88, 0x5b2: 0x3230, 0x5b3: 0x354b, 0x5b4: 0x3258, 0x5b5: 0x3578,
+       0x5b6: 0x3253, 0x5b7: 0x356e, 0x5b8: 0x323f, 0x5b9: 0x355a,
+       // Block 0x17, offset 0x5c0
+       0x5c0: 0x4804, 0x5c1: 0x480a, 0x5c2: 0x491e, 0x5c3: 0x4936, 0x5c4: 0x4926, 0x5c5: 0x493e,
+       0x5c6: 0x492e, 0x5c7: 0x4946, 0x5c8: 0x47aa, 0x5c9: 0x47b0, 0x5ca: 0x488e, 0x5cb: 0x48a6,
+       0x5cc: 0x4896, 0x5cd: 0x48ae, 0x5ce: 0x489e, 0x5cf: 0x48b6, 0x5d0: 0x4816, 0x5d1: 0x481c,
+       0x5d2: 0x3db8, 0x5d3: 0x3dc8, 0x5d4: 0x3dc0, 0x5d5: 0x3dd0,
+       0x5d8: 0x47b6, 0x5d9: 0x47bc, 0x5da: 0x3ce8, 0x5db: 0x3cf8, 0x5dc: 0x3cf0, 0x5dd: 0x3d00,
+       0x5e0: 0x482e, 0x5e1: 0x4834, 0x5e2: 0x494e, 0x5e3: 0x4966,
+       0x5e4: 0x4956, 0x5e5: 0x496e, 0x5e6: 0x495e, 0x5e7: 0x4976, 0x5e8: 0x47c2, 0x5e9: 0x47c8,
+       0x5ea: 0x48be, 0x5eb: 0x48d6, 0x5ec: 0x48c6, 0x5ed: 0x48de, 0x5ee: 0x48ce, 0x5ef: 0x48e6,
+       0x5f0: 0x4846, 0x5f1: 0x484c, 0x5f2: 0x3e18, 0x5f3: 0x3e30, 0x5f4: 0x3e20, 0x5f5: 0x3e38,
+       0x5f6: 0x3e28, 0x5f7: 0x3e40, 0x5f8: 0x47ce, 0x5f9: 0x47d4, 0x5fa: 0x3d18, 0x5fb: 0x3d30,
+       0x5fc: 0x3d20, 0x5fd: 0x3d38, 0x5fe: 0x3d28, 0x5ff: 0x3d40,
+       // Block 0x18, offset 0x600
+       0x600: 0x4852, 0x601: 0x4858, 0x602: 0x3e48, 0x603: 0x3e58, 0x604: 0x3e50, 0x605: 0x3e60,
+       0x608: 0x47da, 0x609: 0x47e0, 0x60a: 0x3d48, 0x60b: 0x3d58,
+       0x60c: 0x3d50, 0x60d: 0x3d60, 0x610: 0x4864, 0x611: 0x486a,
+       0x612: 0x3e80, 0x613: 0x3e98, 0x614: 0x3e88, 0x615: 0x3ea0, 0x616: 0x3e90, 0x617: 0x3ea8,
+       0x619: 0x47e6, 0x61b: 0x3d68, 0x61d: 0x3d70,
+       0x61f: 0x3d78, 0x620: 0x487c, 0x621: 0x4882, 0x622: 0x497e, 0x623: 0x4996,
+       0x624: 0x4986, 0x625: 0x499e, 0x626: 0x498e, 0x627: 0x49a6, 0x628: 0x47ec, 0x629: 0x47f2,
+       0x62a: 0x48ee, 0x62b: 0x4906, 0x62c: 0x48f6, 0x62d: 0x490e, 0x62e: 0x48fe, 0x62f: 0x4916,
+       0x630: 0x47f8, 0x631: 0x431e, 0x632: 0x3691, 0x633: 0x4324, 0x634: 0x4822, 0x635: 0x432a,
+       0x636: 0x36a3, 0x637: 0x4330, 0x638: 0x36c1, 0x639: 0x4336, 0x63a: 0x36d9, 0x63b: 0x433c,
+       0x63c: 0x4870, 0x63d: 0x4342,
+       // Block 0x19, offset 0x640
+       0x640: 0x3da0, 0x641: 0x3da8, 0x642: 0x4184, 0x643: 0x41a2, 0x644: 0x418e, 0x645: 0x41ac,
+       0x646: 0x4198, 0x647: 0x41b6, 0x648: 0x3cd8, 0x649: 0x3ce0, 0x64a: 0x40d0, 0x64b: 0x40ee,
+       0x64c: 0x40da, 0x64d: 0x40f8, 0x64e: 0x40e4, 0x64f: 0x4102, 0x650: 0x3de8, 0x651: 0x3df0,
+       0x652: 0x41c0, 0x653: 0x41de, 0x654: 0x41ca, 0x655: 0x41e8, 0x656: 0x41d4, 0x657: 0x41f2,
+       0x658: 0x3d08, 0x659: 0x3d10, 0x65a: 0x410c, 0x65b: 0x412a, 0x65c: 0x4116, 0x65d: 0x4134,
+       0x65e: 0x4120, 0x65f: 0x413e, 0x660: 0x3ec0, 0x661: 0x3ec8, 0x662: 0x41fc, 0x663: 0x421a,
+       0x664: 0x4206, 0x665: 0x4224, 0x666: 0x4210, 0x667: 0x422e, 0x668: 0x3d80, 0x669: 0x3d88,
+       0x66a: 0x4148, 0x66b: 0x4166, 0x66c: 0x4152, 0x66d: 0x4170, 0x66e: 0x415c, 0x66f: 0x417a,
+       0x670: 0x3685, 0x671: 0x367f, 0x672: 0x3d90, 0x673: 0x368b, 0x674: 0x3d98,
+       0x676: 0x4810, 0x677: 0x3db0, 0x678: 0x35f5, 0x679: 0x35ef, 0x67a: 0x35e3, 0x67b: 0x42ee,
+       0x67c: 0x35fb, 0x67d: 0x4287, 0x67e: 0x01d3, 0x67f: 0x4287,
+       // Block 0x1a, offset 0x680
+       0x680: 0x42a0, 0x681: 0x4482, 0x682: 0x3dd8, 0x683: 0x369d, 0x684: 0x3de0,
+       0x686: 0x483a, 0x687: 0x3df8, 0x688: 0x3601, 0x689: 0x42f4, 0x68a: 0x360d, 0x68b: 0x42fa,
+       0x68c: 0x3619, 0x68d: 0x4489, 0x68e: 0x4490, 0x68f: 0x4497, 0x690: 0x36b5, 0x691: 0x36af,
+       0x692: 0x3e00, 0x693: 0x44e4, 0x696: 0x36bb, 0x697: 0x3e10,
+       0x698: 0x3631, 0x699: 0x362b, 0x69a: 0x361f, 0x69b: 0x4300, 0x69d: 0x449e,
+       0x69e: 0x44a5, 0x69f: 0x44ac, 0x6a0: 0x36eb, 0x6a1: 0x36e5, 0x6a2: 0x3e68, 0x6a3: 0x44ec,
+       0x6a4: 0x36cd, 0x6a5: 0x36d3, 0x6a6: 0x36f1, 0x6a7: 0x3e78, 0x6a8: 0x3661, 0x6a9: 0x365b,
+       0x6aa: 0x364f, 0x6ab: 0x430c, 0x6ac: 0x3649, 0x6ad: 0x4474, 0x6ae: 0x447b, 0x6af: 0x0081,
+       0x6b2: 0x3eb0, 0x6b3: 0x36f7, 0x6b4: 0x3eb8,
+       0x6b6: 0x4888, 0x6b7: 0x3ed0, 0x6b8: 0x363d, 0x6b9: 0x4306, 0x6ba: 0x366d, 0x6bb: 0x4318,
+       0x6bc: 0x3679, 0x6bd: 0x425a, 0x6be: 0x428c,
+       // Block 0x1b, offset 0x6c0
+       0x6c0: 0x1bd8, 0x6c1: 0x1bdc, 0x6c2: 0x0047, 0x6c3: 0x1c54, 0x6c5: 0x1be8,
+       0x6c6: 0x1bec, 0x6c7: 0x00e9, 0x6c9: 0x1c58, 0x6ca: 0x008f, 0x6cb: 0x0051,
+       0x6cc: 0x0051, 0x6cd: 0x0051, 0x6ce: 0x0091, 0x6cf: 0x00da, 0x6d0: 0x0053, 0x6d1: 0x0053,
+       0x6d2: 0x0059, 0x6d3: 0x0099, 0x6d5: 0x005d, 0x6d6: 0x198d,
+       0x6d9: 0x0061, 0x6da: 0x0063, 0x6db: 0x0065, 0x6dc: 0x0065, 0x6dd: 0x0065,
+       0x6e0: 0x199f, 0x6e1: 0x1bc8, 0x6e2: 0x19a8,
+       0x6e4: 0x0075, 0x6e6: 0x01b8, 0x6e8: 0x0075,
+       0x6ea: 0x0057, 0x6eb: 0x42d2, 0x6ec: 0x0045, 0x6ed: 0x0047, 0x6ef: 0x008b,
+       0x6f0: 0x004b, 0x6f1: 0x004d, 0x6f3: 0x005b, 0x6f4: 0x009f, 0x6f5: 0x0215,
+       0x6f6: 0x0218, 0x6f7: 0x021b, 0x6f8: 0x021e, 0x6f9: 0x0093, 0x6fb: 0x1b98,
+       0x6fc: 0x01e8, 0x6fd: 0x01c1, 0x6fe: 0x0179, 0x6ff: 0x01a0,
+       // Block 0x1c, offset 0x700
+       0x700: 0x0463, 0x705: 0x0049,
+       0x706: 0x0089, 0x707: 0x008b, 0x708: 0x0093, 0x709: 0x0095,
+       0x710: 0x222e, 0x711: 0x223a,
+       0x712: 0x22ee, 0x713: 0x2216, 0x714: 0x229a, 0x715: 0x2222, 0x716: 0x22a0, 0x717: 0x22b8,
+       0x718: 0x22c4, 0x719: 0x2228, 0x71a: 0x22ca, 0x71b: 0x2234, 0x71c: 0x22be, 0x71d: 0x22d0,
+       0x71e: 0x22d6, 0x71f: 0x1cbc, 0x720: 0x0053, 0x721: 0x195a, 0x722: 0x1ba4, 0x723: 0x1963,
+       0x724: 0x006d, 0x725: 0x19ab, 0x726: 0x1bd0, 0x727: 0x1d48, 0x728: 0x1966, 0x729: 0x0071,
+       0x72a: 0x19b7, 0x72b: 0x1bd4, 0x72c: 0x0059, 0x72d: 0x0047, 0x72e: 0x0049, 0x72f: 0x005b,
+       0x730: 0x0093, 0x731: 0x19e4, 0x732: 0x1c18, 0x733: 0x19ed, 0x734: 0x00ad, 0x735: 0x1a62,
+       0x736: 0x1c4c, 0x737: 0x1d5c, 0x738: 0x19f0, 0x739: 0x00b1, 0x73a: 0x1a65, 0x73b: 0x1c50,
+       0x73c: 0x0099, 0x73d: 0x0087, 0x73e: 0x0089, 0x73f: 0x009b,
+       // Block 0x1d, offset 0x740
+       0x741: 0x3c06, 0x743: 0xa000, 0x744: 0x3c0d, 0x745: 0xa000,
+       0x747: 0x3c14, 0x748: 0xa000, 0x749: 0x3c1b,
+       0x74d: 0xa000,
+       0x760: 0x2f65, 0x761: 0xa000, 0x762: 0x3c29,
+       0x764: 0xa000, 0x765: 0xa000,
+       0x76d: 0x3c22, 0x76e: 0x2f60, 0x76f: 0x2f6a,
+       0x770: 0x3c30, 0x771: 0x3c37, 0x772: 0xa000, 0x773: 0xa000, 0x774: 0x3c3e, 0x775: 0x3c45,
+       0x776: 0xa000, 0x777: 0xa000, 0x778: 0x3c4c, 0x779: 0x3c53, 0x77a: 0xa000, 0x77b: 0xa000,
+       0x77c: 0xa000, 0x77d: 0xa000,
+       // Block 0x1e, offset 0x780
+       0x780: 0x3c5a, 0x781: 0x3c61, 0x782: 0xa000, 0x783: 0xa000, 0x784: 0x3c76, 0x785: 0x3c7d,
+       0x786: 0xa000, 0x787: 0xa000, 0x788: 0x3c84, 0x789: 0x3c8b,
+       0x791: 0xa000,
+       0x792: 0xa000,
+       0x7a2: 0xa000,
+       0x7a8: 0xa000, 0x7a9: 0xa000,
+       0x7ab: 0xa000, 0x7ac: 0x3ca0, 0x7ad: 0x3ca7, 0x7ae: 0x3cae, 0x7af: 0x3cb5,
+       0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0xa000, 0x7b5: 0xa000,
+       // Block 0x1f, offset 0x7c0
+       0x7e0: 0x0023, 0x7e1: 0x0025, 0x7e2: 0x0027, 0x7e3: 0x0029,
+       0x7e4: 0x002b, 0x7e5: 0x002d, 0x7e6: 0x002f, 0x7e7: 0x0031, 0x7e8: 0x0033, 0x7e9: 0x1882,
+       0x7ea: 0x1885, 0x7eb: 0x1888, 0x7ec: 0x188b, 0x7ed: 0x188e, 0x7ee: 0x1891, 0x7ef: 0x1894,
+       0x7f0: 0x1897, 0x7f1: 0x189a, 0x7f2: 0x189d, 0x7f3: 0x18a6, 0x7f4: 0x1a68, 0x7f5: 0x1a6c,
+       0x7f6: 0x1a70, 0x7f7: 0x1a74, 0x7f8: 0x1a78, 0x7f9: 0x1a7c, 0x7fa: 0x1a80, 0x7fb: 0x1a84,
+       0x7fc: 0x1a88, 0x7fd: 0x1c80, 0x7fe: 0x1c85, 0x7ff: 0x1c8a,
+       // Block 0x20, offset 0x800
+       0x800: 0x1c8f, 0x801: 0x1c94, 0x802: 0x1c99, 0x803: 0x1c9e, 0x804: 0x1ca3, 0x805: 0x1ca8,
+       0x806: 0x1cad, 0x807: 0x1cb2, 0x808: 0x187f, 0x809: 0x18a3, 0x80a: 0x18c7, 0x80b: 0x18eb,
+       0x80c: 0x190f, 0x80d: 0x1918, 0x80e: 0x191e, 0x80f: 0x1924, 0x810: 0x192a, 0x811: 0x1b60,
+       0x812: 0x1b64, 0x813: 0x1b68, 0x814: 0x1b6c, 0x815: 0x1b70, 0x816: 0x1b74, 0x817: 0x1b78,
+       0x818: 0x1b7c, 0x819: 0x1b80, 0x81a: 0x1b84, 0x81b: 0x1b88, 0x81c: 0x1af4, 0x81d: 0x1af8,
+       0x81e: 0x1afc, 0x81f: 0x1b00, 0x820: 0x1b04, 0x821: 0x1b08, 0x822: 0x1b0c, 0x823: 0x1b10,
+       0x824: 0x1b14, 0x825: 0x1b18, 0x826: 0x1b1c, 0x827: 0x1b20, 0x828: 0x1b24, 0x829: 0x1b28,
+       0x82a: 0x1b2c, 0x82b: 0x1b30, 0x82c: 0x1b34, 0x82d: 0x1b38, 0x82e: 0x1b3c, 0x82f: 0x1b40,
+       0x830: 0x1b44, 0x831: 0x1b48, 0x832: 0x1b4c, 0x833: 0x1b50, 0x834: 0x1b54, 0x835: 0x1b58,
+       0x836: 0x0043, 0x837: 0x0045, 0x838: 0x0047, 0x839: 0x0049, 0x83a: 0x004b, 0x83b: 0x004d,
+       0x83c: 0x004f, 0x83d: 0x0051, 0x83e: 0x0053, 0x83f: 0x0055,
+       // Block 0x21, offset 0x840
+       0x840: 0x06bf, 0x841: 0x06e3, 0x842: 0x06ef, 0x843: 0x06ff, 0x844: 0x0707, 0x845: 0x0713,
+       0x846: 0x071b, 0x847: 0x0723, 0x848: 0x072f, 0x849: 0x0783, 0x84a: 0x079b, 0x84b: 0x07ab,
+       0x84c: 0x07bb, 0x84d: 0x07cb, 0x84e: 0x07db, 0x84f: 0x07fb, 0x850: 0x07ff, 0x851: 0x0803,
+       0x852: 0x0837, 0x853: 0x085f, 0x854: 0x086f, 0x855: 0x0877, 0x856: 0x087b, 0x857: 0x0887,
+       0x858: 0x08a3, 0x859: 0x08a7, 0x85a: 0x08bf, 0x85b: 0x08c3, 0x85c: 0x08cb, 0x85d: 0x08db,
+       0x85e: 0x0977, 0x85f: 0x098b, 0x860: 0x09cb, 0x861: 0x09df, 0x862: 0x09e7, 0x863: 0x09eb,
+       0x864: 0x09fb, 0x865: 0x0a17, 0x866: 0x0a43, 0x867: 0x0a4f, 0x868: 0x0a6f, 0x869: 0x0a7b,
+       0x86a: 0x0a7f, 0x86b: 0x0a83, 0x86c: 0x0a9b, 0x86d: 0x0a9f, 0x86e: 0x0acb, 0x86f: 0x0ad7,
+       0x870: 0x0adf, 0x871: 0x0ae7, 0x872: 0x0af7, 0x873: 0x0aff, 0x874: 0x0b07, 0x875: 0x0b33,
+       0x876: 0x0b37, 0x877: 0x0b3f, 0x878: 0x0b43, 0x879: 0x0b4b, 0x87a: 0x0b53, 0x87b: 0x0b63,
+       0x87c: 0x0b7f, 0x87d: 0x0bf7, 0x87e: 0x0c0b, 0x87f: 0x0c0f,
+       // Block 0x22, offset 0x880
+       0x880: 0x0c8f, 0x881: 0x0c93, 0x882: 0x0ca7, 0x883: 0x0cab, 0x884: 0x0cb3, 0x885: 0x0cbb,
+       0x886: 0x0cc3, 0x887: 0x0ccf, 0x888: 0x0cf7, 0x889: 0x0d07, 0x88a: 0x0d1b, 0x88b: 0x0d8b,
+       0x88c: 0x0d97, 0x88d: 0x0da7, 0x88e: 0x0db3, 0x88f: 0x0dbf, 0x890: 0x0dc7, 0x891: 0x0dcb,
+       0x892: 0x0dcf, 0x893: 0x0dd3, 0x894: 0x0dd7, 0x895: 0x0e8f, 0x896: 0x0ed7, 0x897: 0x0ee3,
+       0x898: 0x0ee7, 0x899: 0x0eeb, 0x89a: 0x0eef, 0x89b: 0x0ef7, 0x89c: 0x0efb, 0x89d: 0x0f0f,
+       0x89e: 0x0f2b, 0x89f: 0x0f33, 0x8a0: 0x0f73, 0x8a1: 0x0f77, 0x8a2: 0x0f7f, 0x8a3: 0x0f83,
+       0x8a4: 0x0f8b, 0x8a5: 0x0f8f, 0x8a6: 0x0fb3, 0x8a7: 0x0fb7, 0x8a8: 0x0fd3, 0x8a9: 0x0fd7,
+       0x8aa: 0x0fdb, 0x8ab: 0x0fdf, 0x8ac: 0x0ff3, 0x8ad: 0x1017, 0x8ae: 0x101b, 0x8af: 0x101f,
+       0x8b0: 0x1043, 0x8b1: 0x1083, 0x8b2: 0x1087, 0x8b3: 0x10a7, 0x8b4: 0x10b7, 0x8b5: 0x10bf,
+       0x8b6: 0x10df, 0x8b7: 0x1103, 0x8b8: 0x1147, 0x8b9: 0x114f, 0x8ba: 0x1163, 0x8bb: 0x116f,
+       0x8bc: 0x1177, 0x8bd: 0x117f, 0x8be: 0x1183, 0x8bf: 0x1187,
+       // Block 0x23, offset 0x8c0
+       0x8c0: 0x119f, 0x8c1: 0x11a3, 0x8c2: 0x11bf, 0x8c3: 0x11c7, 0x8c4: 0x11cf, 0x8c5: 0x11d3,
+       0x8c6: 0x11df, 0x8c7: 0x11e7, 0x8c8: 0x11eb, 0x8c9: 0x11ef, 0x8ca: 0x11f7, 0x8cb: 0x11fb,
+       0x8cc: 0x129b, 0x8cd: 0x12af, 0x8ce: 0x12e3, 0x8cf: 0x12e7, 0x8d0: 0x12ef, 0x8d1: 0x131b,
+       0x8d2: 0x1323, 0x8d3: 0x132b, 0x8d4: 0x1333, 0x8d5: 0x136f, 0x8d6: 0x1373, 0x8d7: 0x137b,
+       0x8d8: 0x137f, 0x8d9: 0x1383, 0x8da: 0x13af, 0x8db: 0x13b3, 0x8dc: 0x13bb, 0x8dd: 0x13cf,
+       0x8de: 0x13d3, 0x8df: 0x13ef, 0x8e0: 0x13f7, 0x8e1: 0x13fb, 0x8e2: 0x141f, 0x8e3: 0x143f,
+       0x8e4: 0x1453, 0x8e5: 0x1457, 0x8e6: 0x145f, 0x8e7: 0x148b, 0x8e8: 0x148f, 0x8e9: 0x149f,
+       0x8ea: 0x14c3, 0x8eb: 0x14cf, 0x8ec: 0x14df, 0x8ed: 0x14f7, 0x8ee: 0x14ff, 0x8ef: 0x1503,
+       0x8f0: 0x1507, 0x8f1: 0x150b, 0x8f2: 0x1517, 0x8f3: 0x151b, 0x8f4: 0x1523, 0x8f5: 0x153f,
+       0x8f6: 0x1543, 0x8f7: 0x1547, 0x8f8: 0x155f, 0x8f9: 0x1563, 0x8fa: 0x156b, 0x8fb: 0x157f,
+       0x8fc: 0x1583, 0x8fd: 0x1587, 0x8fe: 0x158f, 0x8ff: 0x1593,
+       // Block 0x24, offset 0x900
+       0x906: 0xa000, 0x90b: 0xa000,
+       0x90c: 0x3f08, 0x90d: 0xa000, 0x90e: 0x3f10, 0x90f: 0xa000, 0x910: 0x3f18, 0x911: 0xa000,
+       0x912: 0x3f20, 0x913: 0xa000, 0x914: 0x3f28, 0x915: 0xa000, 0x916: 0x3f30, 0x917: 0xa000,
+       0x918: 0x3f38, 0x919: 0xa000, 0x91a: 0x3f40, 0x91b: 0xa000, 0x91c: 0x3f48, 0x91d: 0xa000,
+       0x91e: 0x3f50, 0x91f: 0xa000, 0x920: 0x3f58, 0x921: 0xa000, 0x922: 0x3f60,
+       0x924: 0xa000, 0x925: 0x3f68, 0x926: 0xa000, 0x927: 0x3f70, 0x928: 0xa000, 0x929: 0x3f78,
+       0x92f: 0xa000,
+       0x930: 0x3f80, 0x931: 0x3f88, 0x932: 0xa000, 0x933: 0x3f90, 0x934: 0x3f98, 0x935: 0xa000,
+       0x936: 0x3fa0, 0x937: 0x3fa8, 0x938: 0xa000, 0x939: 0x3fb0, 0x93a: 0x3fb8, 0x93b: 0xa000,
+       0x93c: 0x3fc0, 0x93d: 0x3fc8,
+       // Block 0x25, offset 0x940
+       0x954: 0x3f00,
+       0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x42dc, 0x95c: 0x42e2, 0x95d: 0xa000,
+       0x95e: 0x3fd0, 0x95f: 0x26b4,
+       0x966: 0xa000,
+       0x96b: 0xa000, 0x96c: 0x3fe0, 0x96d: 0xa000, 0x96e: 0x3fe8, 0x96f: 0xa000,
+       0x970: 0x3ff0, 0x971: 0xa000, 0x972: 0x3ff8, 0x973: 0xa000, 0x974: 0x4000, 0x975: 0xa000,
+       0x976: 0x4008, 0x977: 0xa000, 0x978: 0x4010, 0x979: 0xa000, 0x97a: 0x4018, 0x97b: 0xa000,
+       0x97c: 0x4020, 0x97d: 0xa000, 0x97e: 0x4028, 0x97f: 0xa000,
+       // Block 0x26, offset 0x980
+       0x980: 0x4030, 0x981: 0xa000, 0x982: 0x4038, 0x984: 0xa000, 0x985: 0x4040,
+       0x986: 0xa000, 0x987: 0x4048, 0x988: 0xa000, 0x989: 0x4050,
+       0x98f: 0xa000, 0x990: 0x4058, 0x991: 0x4060,
+       0x992: 0xa000, 0x993: 0x4068, 0x994: 0x4070, 0x995: 0xa000, 0x996: 0x4078, 0x997: 0x4080,
+       0x998: 0xa000, 0x999: 0x4088, 0x99a: 0x4090, 0x99b: 0xa000, 0x99c: 0x4098, 0x99d: 0x40a0,
+       0x9af: 0xa000,
+       0x9b0: 0xa000, 0x9b1: 0xa000, 0x9b2: 0xa000, 0x9b4: 0x3fd8,
+       0x9b7: 0x40a8, 0x9b8: 0x40b0, 0x9b9: 0x40b8, 0x9ba: 0x40c0,
+       0x9bd: 0xa000, 0x9be: 0x40c8, 0x9bf: 0x26c9,
+       // Block 0x27, offset 0x9c0
+       0x9c0: 0x0367, 0x9c1: 0x032b, 0x9c2: 0x032f, 0x9c3: 0x0333, 0x9c4: 0x037b, 0x9c5: 0x0337,
+       0x9c6: 0x033b, 0x9c7: 0x033f, 0x9c8: 0x0343, 0x9c9: 0x0347, 0x9ca: 0x034b, 0x9cb: 0x034f,
+       0x9cc: 0x0353, 0x9cd: 0x0357, 0x9ce: 0x035b, 0x9cf: 0x49bd, 0x9d0: 0x49c3, 0x9d1: 0x49c9,
+       0x9d2: 0x49cf, 0x9d3: 0x49d5, 0x9d4: 0x49db, 0x9d5: 0x49e1, 0x9d6: 0x49e7, 0x9d7: 0x49ed,
+       0x9d8: 0x49f3, 0x9d9: 0x49f9, 0x9da: 0x49ff, 0x9db: 0x4a05, 0x9dc: 0x4a0b, 0x9dd: 0x4a11,
+       0x9de: 0x4a17, 0x9df: 0x4a1d, 0x9e0: 0x4a23, 0x9e1: 0x4a29, 0x9e2: 0x4a2f, 0x9e3: 0x4a35,
+       0x9e4: 0x03c3, 0x9e5: 0x035f, 0x9e6: 0x0363, 0x9e7: 0x03e7, 0x9e8: 0x03eb, 0x9e9: 0x03ef,
+       0x9ea: 0x03f3, 0x9eb: 0x03f7, 0x9ec: 0x03fb, 0x9ed: 0x03ff, 0x9ee: 0x036b, 0x9ef: 0x0403,
+       0x9f0: 0x0407, 0x9f1: 0x036f, 0x9f2: 0x0373, 0x9f3: 0x0377, 0x9f4: 0x037f, 0x9f5: 0x0383,
+       0x9f6: 0x0387, 0x9f7: 0x038b, 0x9f8: 0x038f, 0x9f9: 0x0393, 0x9fa: 0x0397, 0x9fb: 0x039b,
+       0x9fc: 0x039f, 0x9fd: 0x03a3, 0x9fe: 0x03a7, 0x9ff: 0x03ab,
+       // Block 0x28, offset 0xa00
+       0xa00: 0x03af, 0xa01: 0x03b3, 0xa02: 0x040b, 0xa03: 0x040f, 0xa04: 0x03b7, 0xa05: 0x03bb,
+       0xa06: 0x03bf, 0xa07: 0x03c7, 0xa08: 0x03cb, 0xa09: 0x03cf, 0xa0a: 0x03d3, 0xa0b: 0x03d7,
+       0xa0c: 0x03db, 0xa0d: 0x03df, 0xa0e: 0x03e3,
+       0xa12: 0x06bf, 0xa13: 0x071b, 0xa14: 0x06cb, 0xa15: 0x097b, 0xa16: 0x06cf, 0xa17: 0x06e7,
+       0xa18: 0x06d3, 0xa19: 0x0f93, 0xa1a: 0x0707, 0xa1b: 0x06db, 0xa1c: 0x06c3, 0xa1d: 0x09ff,
+       0xa1e: 0x098f, 0xa1f: 0x072f,
+       // Block 0x29, offset 0xa40
+       0xa40: 0x2054, 0xa41: 0x205a, 0xa42: 0x2060, 0xa43: 0x2066, 0xa44: 0x206c, 0xa45: 0x2072,
+       0xa46: 0x2078, 0xa47: 0x207e, 0xa48: 0x2084, 0xa49: 0x208a, 0xa4a: 0x2090, 0xa4b: 0x2096,
+       0xa4c: 0x209c, 0xa4d: 0x20a2, 0xa4e: 0x2726, 0xa4f: 0x272f, 0xa50: 0x2738, 0xa51: 0x2741,
+       0xa52: 0x274a, 0xa53: 0x2753, 0xa54: 0x275c, 0xa55: 0x2765, 0xa56: 0x276e, 0xa57: 0x2780,
+       0xa58: 0x2789, 0xa59: 0x2792, 0xa5a: 0x279b, 0xa5b: 0x27a4, 0xa5c: 0x2777, 0xa5d: 0x2bac,
+       0xa5e: 0x2aed, 0xa60: 0x20a8, 0xa61: 0x20c0, 0xa62: 0x20b4, 0xa63: 0x2108,
+       0xa64: 0x20c6, 0xa65: 0x20e4, 0xa66: 0x20ae, 0xa67: 0x20de, 0xa68: 0x20ba, 0xa69: 0x20f0,
+       0xa6a: 0x2120, 0xa6b: 0x213e, 0xa6c: 0x2138, 0xa6d: 0x212c, 0xa6e: 0x217a, 0xa6f: 0x210e,
+       0xa70: 0x211a, 0xa71: 0x2132, 0xa72: 0x2126, 0xa73: 0x2150, 0xa74: 0x20fc, 0xa75: 0x2144,
+       0xa76: 0x216e, 0xa77: 0x2156, 0xa78: 0x20ea, 0xa79: 0x20cc, 0xa7a: 0x2102, 0xa7b: 0x2114,
+       0xa7c: 0x214a, 0xa7d: 0x20d2, 0xa7e: 0x2174, 0xa7f: 0x20f6,
+       // Block 0x2a, offset 0xa80
+       0xa80: 0x215c, 0xa81: 0x20d8, 0xa82: 0x2162, 0xa83: 0x2168, 0xa84: 0x092f, 0xa85: 0x0b03,
+       0xa86: 0x0ca7, 0xa87: 0x10c7,
+       0xa90: 0x1bc4, 0xa91: 0x18a9,
+       0xa92: 0x18ac, 0xa93: 0x18af, 0xa94: 0x18b2, 0xa95: 0x18b5, 0xa96: 0x18b8, 0xa97: 0x18bb,
+       0xa98: 0x18be, 0xa99: 0x18c1, 0xa9a: 0x18ca, 0xa9b: 0x18cd, 0xa9c: 0x18d0, 0xa9d: 0x18d3,
+       0xa9e: 0x18d6, 0xa9f: 0x18d9, 0xaa0: 0x0313, 0xaa1: 0x031b, 0xaa2: 0x031f, 0xaa3: 0x0327,
+       0xaa4: 0x032b, 0xaa5: 0x032f, 0xaa6: 0x0337, 0xaa7: 0x033f, 0xaa8: 0x0343, 0xaa9: 0x034b,
+       0xaaa: 0x034f, 0xaab: 0x0353, 0xaac: 0x0357, 0xaad: 0x035b, 0xaae: 0x2e18, 0xaaf: 0x2e20,
+       0xab0: 0x2e28, 0xab1: 0x2e30, 0xab2: 0x2e38, 0xab3: 0x2e40, 0xab4: 0x2e48, 0xab5: 0x2e50,
+       0xab6: 0x2e60, 0xab7: 0x2e68, 0xab8: 0x2e70, 0xab9: 0x2e78, 0xaba: 0x2e80, 0xabb: 0x2e88,
+       0xabc: 0x2ed3, 0xabd: 0x2e9b, 0xabe: 0x2e58,
+       // Block 0x2b, offset 0xac0
+       0xac0: 0x06bf, 0xac1: 0x071b, 0xac2: 0x06cb, 0xac3: 0x097b, 0xac4: 0x071f, 0xac5: 0x07af,
+       0xac6: 0x06c7, 0xac7: 0x07ab, 0xac8: 0x070b, 0xac9: 0x0887, 0xaca: 0x0d07, 0xacb: 0x0e8f,
+       0xacc: 0x0dd7, 0xacd: 0x0d1b, 0xace: 0x145f, 0xacf: 0x098b, 0xad0: 0x0ccf, 0xad1: 0x0d4b,
+       0xad2: 0x0d0b, 0xad3: 0x104b, 0xad4: 0x08fb, 0xad5: 0x0f03, 0xad6: 0x1387, 0xad7: 0x105f,
+       0xad8: 0x0843, 0xad9: 0x108f, 0xada: 0x0f9b, 0xadb: 0x0a17, 0xadc: 0x140f, 0xadd: 0x077f,
+       0xade: 0x08ab, 0xadf: 0x0df7, 0xae0: 0x1527, 0xae1: 0x0743, 0xae2: 0x07d3, 0xae3: 0x0d9b,
+       0xae4: 0x06cf, 0xae5: 0x06e7, 0xae6: 0x06d3, 0xae7: 0x0adb, 0xae8: 0x08ef, 0xae9: 0x087f,
+       0xaea: 0x0a57, 0xaeb: 0x0a4b, 0xaec: 0x0feb, 0xaed: 0x073f, 0xaee: 0x139b, 0xaef: 0x089b,
+       0xaf0: 0x09f3, 0xaf1: 0x18dc, 0xaf2: 0x18df, 0xaf3: 0x18e2, 0xaf4: 0x18e5, 0xaf5: 0x18ee,
+       0xaf6: 0x18f1, 0xaf7: 0x18f4, 0xaf8: 0x18f7, 0xaf9: 0x18fa, 0xafa: 0x18fd, 0xafb: 0x1900,
+       0xafc: 0x1903, 0xafd: 0x1906, 0xafe: 0x1909, 0xaff: 0x1912,
+       // Block 0x2c, offset 0xb00
+       0xb00: 0x1cc6, 0xb01: 0x1cd5, 0xb02: 0x1ce4, 0xb03: 0x1cf3, 0xb04: 0x1d02, 0xb05: 0x1d11,
+       0xb06: 0x1d20, 0xb07: 0x1d2f, 0xb08: 0x1d3e, 0xb09: 0x218c, 0xb0a: 0x219e, 0xb0b: 0x21b0,
+       0xb0c: 0x1954, 0xb0d: 0x1c04, 0xb0e: 0x19d2, 0xb0f: 0x1ba8, 0xb10: 0x04cb, 0xb11: 0x04d3,
+       0xb12: 0x04db, 0xb13: 0x04e3, 0xb14: 0x04eb, 0xb15: 0x04ef, 0xb16: 0x04f3, 0xb17: 0x04f7,
+       0xb18: 0x04fb, 0xb19: 0x04ff, 0xb1a: 0x0503, 0xb1b: 0x0507, 0xb1c: 0x050b, 0xb1d: 0x050f,
+       0xb1e: 0x0513, 0xb1f: 0x0517, 0xb20: 0x051b, 0xb21: 0x0523, 0xb22: 0x0527, 0xb23: 0x052b,
+       0xb24: 0x052f, 0xb25: 0x0533, 0xb26: 0x0537, 0xb27: 0x053b, 0xb28: 0x053f, 0xb29: 0x0543,
+       0xb2a: 0x0547, 0xb2b: 0x054b, 0xb2c: 0x054f, 0xb2d: 0x0553, 0xb2e: 0x0557, 0xb2f: 0x055b,
+       0xb30: 0x055f, 0xb31: 0x0563, 0xb32: 0x0567, 0xb33: 0x056f, 0xb34: 0x0577, 0xb35: 0x057f,
+       0xb36: 0x0583, 0xb37: 0x0587, 0xb38: 0x058b, 0xb39: 0x058f, 0xb3a: 0x0593, 0xb3b: 0x0597,
+       0xb3c: 0x059b, 0xb3d: 0x059f, 0xb3e: 0x05a3,
+       // Block 0x2d, offset 0xb40
+       0xb40: 0x2b0c, 0xb41: 0x29a8, 0xb42: 0x2b1c, 0xb43: 0x2880, 0xb44: 0x2ee4, 0xb45: 0x288a,
+       0xb46: 0x2894, 0xb47: 0x2f28, 0xb48: 0x29b5, 0xb49: 0x289e, 0xb4a: 0x28a8, 0xb4b: 0x28b2,
+       0xb4c: 0x29dc, 0xb4d: 0x29e9, 0xb4e: 0x29c2, 0xb4f: 0x29cf, 0xb50: 0x2ea9, 0xb51: 0x29f6,
+       0xb52: 0x2a03, 0xb53: 0x2bbe, 0xb54: 0x26bb, 0xb55: 0x2bd1, 0xb56: 0x2be4, 0xb57: 0x2b2c,
+       0xb58: 0x2a10, 0xb59: 0x2bf7, 0xb5a: 0x2c0a, 0xb5b: 0x2a1d, 0xb5c: 0x28bc, 0xb5d: 0x28c6,
+       0xb5e: 0x2eb7, 0xb5f: 0x2a2a, 0xb60: 0x2b3c, 0xb61: 0x2ef5, 0xb62: 0x28d0, 0xb63: 0x28da,
+       0xb64: 0x2a37, 0xb65: 0x28e4, 0xb66: 0x28ee, 0xb67: 0x26d0, 0xb68: 0x26d7, 0xb69: 0x28f8,
+       0xb6a: 0x2902, 0xb6b: 0x2c1d, 0xb6c: 0x2a44, 0xb6d: 0x2b4c, 0xb6e: 0x2c30, 0xb6f: 0x2a51,
+       0xb70: 0x2916, 0xb71: 0x290c, 0xb72: 0x2f3c, 0xb73: 0x2a5e, 0xb74: 0x2c43, 0xb75: 0x2920,
+       0xb76: 0x2b5c, 0xb77: 0x292a, 0xb78: 0x2a78, 0xb79: 0x2934, 0xb7a: 0x2a85, 0xb7b: 0x2f06,
+       0xb7c: 0x2a6b, 0xb7d: 0x2b6c, 0xb7e: 0x2a92, 0xb7f: 0x26de,
+       // Block 0x2e, offset 0xb80
+       0xb80: 0x2f17, 0xb81: 0x293e, 0xb82: 0x2948, 0xb83: 0x2a9f, 0xb84: 0x2952, 0xb85: 0x295c,
+       0xb86: 0x2966, 0xb87: 0x2b7c, 0xb88: 0x2aac, 0xb89: 0x26e5, 0xb8a: 0x2c56, 0xb8b: 0x2e90,
+       0xb8c: 0x2b8c, 0xb8d: 0x2ab9, 0xb8e: 0x2ec5, 0xb8f: 0x2970, 0xb90: 0x297a, 0xb91: 0x2ac6,
+       0xb92: 0x26ec, 0xb93: 0x2ad3, 0xb94: 0x2b9c, 0xb95: 0x26f3, 0xb96: 0x2c69, 0xb97: 0x2984,
+       0xb98: 0x1cb7, 0xb99: 0x1ccb, 0xb9a: 0x1cda, 0xb9b: 0x1ce9, 0xb9c: 0x1cf8, 0xb9d: 0x1d07,
+       0xb9e: 0x1d16, 0xb9f: 0x1d25, 0xba0: 0x1d34, 0xba1: 0x1d43, 0xba2: 0x2192, 0xba3: 0x21a4,
+       0xba4: 0x21b6, 0xba5: 0x21c2, 0xba6: 0x21ce, 0xba7: 0x21da, 0xba8: 0x21e6, 0xba9: 0x21f2,
+       0xbaa: 0x21fe, 0xbab: 0x220a, 0xbac: 0x2246, 0xbad: 0x2252, 0xbae: 0x225e, 0xbaf: 0x226a,
+       0xbb0: 0x2276, 0xbb1: 0x1c14, 0xbb2: 0x19c6, 0xbb3: 0x1936, 0xbb4: 0x1be4, 0xbb5: 0x1a47,
+       0xbb6: 0x1a56, 0xbb7: 0x19cc, 0xbb8: 0x1bfc, 0xbb9: 0x1c00, 0xbba: 0x1960, 0xbbb: 0x2701,
+       0xbbc: 0x270f, 0xbbd: 0x26fa, 0xbbe: 0x2708, 0xbbf: 0x2ae0,
+       // Block 0x2f, offset 0xbc0
+       0xbc0: 0x1a4a, 0xbc1: 0x1a32, 0xbc2: 0x1c60, 0xbc3: 0x1a1a, 0xbc4: 0x19f3, 0xbc5: 0x1969,
+       0xbc6: 0x1978, 0xbc7: 0x1948, 0xbc8: 0x1bf0, 0xbc9: 0x1d52, 0xbca: 0x1a4d, 0xbcb: 0x1a35,
+       0xbcc: 0x1c64, 0xbcd: 0x1c70, 0xbce: 0x1a26, 0xbcf: 0x19fc, 0xbd0: 0x1957, 0xbd1: 0x1c1c,
+       0xbd2: 0x1bb0, 0xbd3: 0x1b9c, 0xbd4: 0x1bcc, 0xbd5: 0x1c74, 0xbd6: 0x1a29, 0xbd7: 0x19c9,
+       0xbd8: 0x19ff, 0xbd9: 0x19de, 0xbda: 0x1a41, 0xbdb: 0x1c78, 0xbdc: 0x1a2c, 0xbdd: 0x19c0,
+       0xbde: 0x1a02, 0xbdf: 0x1c3c, 0xbe0: 0x1bf4, 0xbe1: 0x1a14, 0xbe2: 0x1c24, 0xbe3: 0x1c40,
+       0xbe4: 0x1bf8, 0xbe5: 0x1a17, 0xbe6: 0x1c28, 0xbe7: 0x22e8, 0xbe8: 0x22fc, 0xbe9: 0x1996,
+       0xbea: 0x1c20, 0xbeb: 0x1bb4, 0xbec: 0x1ba0, 0xbed: 0x1c48, 0xbee: 0x2716, 0xbef: 0x27ad,
+       0xbf0: 0x1a59, 0xbf1: 0x1a44, 0xbf2: 0x1c7c, 0xbf3: 0x1a2f, 0xbf4: 0x1a50, 0xbf5: 0x1a38,
+       0xbf6: 0x1c68, 0xbf7: 0x1a1d, 0xbf8: 0x19f6, 0xbf9: 0x1981, 0xbfa: 0x1a53, 0xbfb: 0x1a3b,
+       0xbfc: 0x1c6c, 0xbfd: 0x1a20, 0xbfe: 0x19f9, 0xbff: 0x1984,
+       // Block 0x30, offset 0xc00
+       0xc00: 0x1c2c, 0xc01: 0x1bb8, 0xc02: 0x1d4d, 0xc03: 0x1939, 0xc04: 0x19ba, 0xc05: 0x19bd,
+       0xc06: 0x22f5, 0xc07: 0x1b94, 0xc08: 0x19c3, 0xc09: 0x194b, 0xc0a: 0x19e1, 0xc0b: 0x194e,
+       0xc0c: 0x19ea, 0xc0d: 0x196c, 0xc0e: 0x196f, 0xc0f: 0x1a05, 0xc10: 0x1a0b, 0xc11: 0x1a0e,
+       0xc12: 0x1c30, 0xc13: 0x1a11, 0xc14: 0x1a23, 0xc15: 0x1c38, 0xc16: 0x1c44, 0xc17: 0x1990,
+       0xc18: 0x1d57, 0xc19: 0x1bbc, 0xc1a: 0x1993, 0xc1b: 0x1a5c, 0xc1c: 0x19a5, 0xc1d: 0x19b4,
+       0xc1e: 0x22e2, 0xc1f: 0x22dc, 0xc20: 0x1cc1, 0xc21: 0x1cd0, 0xc22: 0x1cdf, 0xc23: 0x1cee,
+       0xc24: 0x1cfd, 0xc25: 0x1d0c, 0xc26: 0x1d1b, 0xc27: 0x1d2a, 0xc28: 0x1d39, 0xc29: 0x2186,
+       0xc2a: 0x2198, 0xc2b: 0x21aa, 0xc2c: 0x21bc, 0xc2d: 0x21c8, 0xc2e: 0x21d4, 0xc2f: 0x21e0,
+       0xc30: 0x21ec, 0xc31: 0x21f8, 0xc32: 0x2204, 0xc33: 0x2240, 0xc34: 0x224c, 0xc35: 0x2258,
+       0xc36: 0x2264, 0xc37: 0x2270, 0xc38: 0x227c, 0xc39: 0x2282, 0xc3a: 0x2288, 0xc3b: 0x228e,
+       0xc3c: 0x2294, 0xc3d: 0x22a6, 0xc3e: 0x22ac, 0xc3f: 0x1c10,
+       // Block 0x31, offset 0xc40
+       0xc40: 0x1377, 0xc41: 0x0cfb, 0xc42: 0x13d3, 0xc43: 0x139f, 0xc44: 0x0e57, 0xc45: 0x06eb,
+       0xc46: 0x08df, 0xc47: 0x162b, 0xc48: 0x162b, 0xc49: 0x0a0b, 0xc4a: 0x145f, 0xc4b: 0x0943,
+       0xc4c: 0x0a07, 0xc4d: 0x0bef, 0xc4e: 0x0fcf, 0xc4f: 0x115f, 0xc50: 0x1297, 0xc51: 0x12d3,
+       0xc52: 0x1307, 0xc53: 0x141b, 0xc54: 0x0d73, 0xc55: 0x0dff, 0xc56: 0x0eab, 0xc57: 0x0f43,
+       0xc58: 0x125f, 0xc59: 0x1447, 0xc5a: 0x1573, 0xc5b: 0x070f, 0xc5c: 0x08b3, 0xc5d: 0x0d87,
+       0xc5e: 0x0ecf, 0xc5f: 0x1293, 0xc60: 0x15c3, 0xc61: 0x0ab3, 0xc62: 0x0e77, 0xc63: 0x1283,
+       0xc64: 0x1317, 0xc65: 0x0c23, 0xc66: 0x11bb, 0xc67: 0x12df, 0xc68: 0x0b1f, 0xc69: 0x0d0f,
+       0xc6a: 0x0e17, 0xc6b: 0x0f1b, 0xc6c: 0x1427, 0xc6d: 0x074f, 0xc6e: 0x07e7, 0xc6f: 0x0853,
+       0xc70: 0x0c8b, 0xc71: 0x0d7f, 0xc72: 0x0ecb, 0xc73: 0x0fef, 0xc74: 0x1177, 0xc75: 0x128b,
+       0xc76: 0x12a3, 0xc77: 0x13c7, 0xc78: 0x14ef, 0xc79: 0x15a3, 0xc7a: 0x15bf, 0xc7b: 0x102b,
+       0xc7c: 0x106b, 0xc7d: 0x1123, 0xc7e: 0x1243, 0xc7f: 0x147b,
+       // Block 0x32, offset 0xc80
+       0xc80: 0x15cb, 0xc81: 0x134b, 0xc82: 0x09c7, 0xc83: 0x0b3b, 0xc84: 0x10db, 0xc85: 0x119b,
+       0xc86: 0x0eff, 0xc87: 0x1033, 0xc88: 0x1397, 0xc89: 0x14e7, 0xc8a: 0x09c3, 0xc8b: 0x0a8f,
+       0xc8c: 0x0d77, 0xc8d: 0x0e2b, 0xc8e: 0x0e5f, 0xc8f: 0x1113, 0xc90: 0x113b, 0xc91: 0x14a7,
+       0xc92: 0x084f, 0xc93: 0x11a7, 0xc94: 0x07f3, 0xc95: 0x07ef, 0xc96: 0x1097, 0xc97: 0x1127,
+       0xc98: 0x125b, 0xc99: 0x14af, 0xc9a: 0x1367, 0xc9b: 0x0c27, 0xc9c: 0x0d73, 0xc9d: 0x1357,
+       0xc9e: 0x06f7, 0xc9f: 0x0a63, 0xca0: 0x0b93, 0xca1: 0x0f2f, 0xca2: 0x0faf, 0xca3: 0x0873,
+       0xca4: 0x103b, 0xca5: 0x075f, 0xca6: 0x0b77, 0xca7: 0x06d7, 0xca8: 0x0deb, 0xca9: 0x0ca3,
+       0xcaa: 0x110f, 0xcab: 0x08c7, 0xcac: 0x09b3, 0xcad: 0x0ffb, 0xcae: 0x1263, 0xcaf: 0x133b,
+       0xcb0: 0x0db7, 0xcb1: 0x13f7, 0xcb2: 0x0de3, 0xcb3: 0x0c37, 0xcb4: 0x121b, 0xcb5: 0x0c57,
+       0xcb6: 0x0fab, 0xcb7: 0x072b, 0xcb8: 0x07a7, 0xcb9: 0x07eb, 0xcba: 0x0d53, 0xcbb: 0x10fb,
+       0xcbc: 0x11f3, 0xcbd: 0x1347, 0xcbe: 0x145b, 0xcbf: 0x085b,
+       // Block 0x33, offset 0xcc0
+       0xcc0: 0x090f, 0xcc1: 0x0a17, 0xcc2: 0x0b2f, 0xcc3: 0x0cbf, 0xcc4: 0x0e7b, 0xcc5: 0x103f,
+       0xcc6: 0x1497, 0xcc7: 0x157b, 0xcc8: 0x15cf, 0xcc9: 0x15e7, 0xcca: 0x0837, 0xccb: 0x0cf3,
+       0xccc: 0x0da3, 0xccd: 0x13eb, 0xcce: 0x0afb, 0xccf: 0x0bd7, 0xcd0: 0x0bf3, 0xcd1: 0x0c83,
+       0xcd2: 0x0e6b, 0xcd3: 0x0eb7, 0xcd4: 0x0f67, 0xcd5: 0x108b, 0xcd6: 0x112f, 0xcd7: 0x1193,
+       0xcd8: 0x13db, 0xcd9: 0x126b, 0xcda: 0x1403, 0xcdb: 0x147f, 0xcdc: 0x080f, 0xcdd: 0x083b,
+       0xcde: 0x0923, 0xcdf: 0x0ea7, 0xce0: 0x12f3, 0xce1: 0x133b, 0xce2: 0x0b1b, 0xce3: 0x0b8b,
+       0xce4: 0x0c4f, 0xce5: 0x0daf, 0xce6: 0x10d7, 0xce7: 0x0f23, 0xce8: 0x073b, 0xce9: 0x097f,
+       0xcea: 0x0a63, 0xceb: 0x0ac7, 0xcec: 0x0b97, 0xced: 0x0f3f, 0xcee: 0x0f5b, 0xcef: 0x116b,
+       0xcf0: 0x118b, 0xcf1: 0x1463, 0xcf2: 0x14e3, 0xcf3: 0x14f3, 0xcf4: 0x152f, 0xcf5: 0x0753,
+       0xcf6: 0x107f, 0xcf7: 0x144f, 0xcf8: 0x14cb, 0xcf9: 0x0baf, 0xcfa: 0x0717, 0xcfb: 0x0777,
+       0xcfc: 0x0a67, 0xcfd: 0x0a87, 0xcfe: 0x0caf, 0xcff: 0x0d73,
+       // Block 0x34, offset 0xd00
+       0xd00: 0x0ec3, 0xd01: 0x0fcb, 0xd02: 0x1277, 0xd03: 0x1417, 0xd04: 0x1623, 0xd05: 0x0ce3,
+       0xd06: 0x14a3, 0xd07: 0x0833, 0xd08: 0x0d2f, 0xd09: 0x0d3b, 0xd0a: 0x0e0f, 0xd0b: 0x0e47,
+       0xd0c: 0x0f4b, 0xd0d: 0x0fa7, 0xd0e: 0x1027, 0xd0f: 0x110b, 0xd10: 0x153b, 0xd11: 0x07af,
+       0xd12: 0x0c03, 0xd13: 0x14b3, 0xd14: 0x0767, 0xd15: 0x0aab, 0xd16: 0x0e2f, 0xd17: 0x13df,
+       0xd18: 0x0b67, 0xd19: 0x0bb7, 0xd1a: 0x0d43, 0xd1b: 0x0f2f, 0xd1c: 0x14bb, 0xd1d: 0x0817,
+       0xd1e: 0x08ff, 0xd1f: 0x0a97, 0xd20: 0x0cd3, 0xd21: 0x0d1f, 0xd22: 0x0d5f, 0xd23: 0x0df3,
+       0xd24: 0x0f47, 0xd25: 0x0fbb, 0xd26: 0x1157, 0xd27: 0x12f7, 0xd28: 0x1303, 0xd29: 0x1457,
+       0xd2a: 0x14d7, 0xd2b: 0x0883, 0xd2c: 0x0e4b, 0xd2d: 0x0903, 0xd2e: 0x0ec7, 0xd2f: 0x0f6b,
+       0xd30: 0x1287, 0xd31: 0x14bf, 0xd32: 0x15ab, 0xd33: 0x15d3, 0xd34: 0x0d37, 0xd35: 0x0e27,
+       0xd36: 0x11c3, 0xd37: 0x10b7, 0xd38: 0x10c3, 0xd39: 0x10e7, 0xd3a: 0x0f17, 0xd3b: 0x0e9f,
+       0xd3c: 0x1363, 0xd3d: 0x0733, 0xd3e: 0x122b, 0xd3f: 0x081b,
+       // Block 0x35, offset 0xd40
+       0xd40: 0x080b, 0xd41: 0x0b0b, 0xd42: 0x0c2b, 0xd43: 0x10f3, 0xd44: 0x0a53, 0xd45: 0x0e03,
+       0xd46: 0x0cef, 0xd47: 0x13e7, 0xd48: 0x12e7, 0xd49: 0x14ab, 0xd4a: 0x1323, 0xd4b: 0x0b27,
+       0xd4c: 0x0787, 0xd4d: 0x095b, 0xd50: 0x09af,
+       0xd52: 0x0cdf, 0xd55: 0x07f7, 0xd56: 0x0f1f, 0xd57: 0x0fe3,
+       0xd58: 0x1047, 0xd59: 0x1063, 0xd5a: 0x1067, 0xd5b: 0x107b, 0xd5c: 0x14fb, 0xd5d: 0x10eb,
+       0xd5e: 0x116f, 0xd60: 0x128f, 0xd62: 0x1353,
+       0xd65: 0x1407, 0xd66: 0x1433,
+       0xd6a: 0x154f, 0xd6b: 0x1553, 0xd6c: 0x1557, 0xd6d: 0x15bb, 0xd6e: 0x142b, 0xd6f: 0x14c7,
+       0xd70: 0x0757, 0xd71: 0x077b, 0xd72: 0x078f, 0xd73: 0x084b, 0xd74: 0x0857, 0xd75: 0x0897,
+       0xd76: 0x094b, 0xd77: 0x0967, 0xd78: 0x096f, 0xd79: 0x09ab, 0xd7a: 0x09b7, 0xd7b: 0x0a93,
+       0xd7c: 0x0a9b, 0xd7d: 0x0ba3, 0xd7e: 0x0bcb, 0xd7f: 0x0bd3,
+       // Block 0x36, offset 0xd80
+       0xd80: 0x0beb, 0xd81: 0x0c97, 0xd82: 0x0cc7, 0xd83: 0x0ce7, 0xd84: 0x0d57, 0xd85: 0x0e1b,
+       0xd86: 0x0e37, 0xd87: 0x0e67, 0xd88: 0x0ebb, 0xd89: 0x0edb, 0xd8a: 0x0f4f, 0xd8b: 0x102f,
+       0xd8c: 0x104b, 0xd8d: 0x1053, 0xd8e: 0x104f, 0xd8f: 0x1057, 0xd90: 0x105b, 0xd91: 0x105f,
+       0xd92: 0x1073, 0xd93: 0x1077, 0xd94: 0x109b, 0xd95: 0x10af, 0xd96: 0x10cb, 0xd97: 0x112f,
+       0xd98: 0x1137, 0xd99: 0x113f, 0xd9a: 0x1153, 0xd9b: 0x117b, 0xd9c: 0x11cb, 0xd9d: 0x11ff,
+       0xd9e: 0x11ff, 0xd9f: 0x1267, 0xda0: 0x130f, 0xda1: 0x1327, 0xda2: 0x135b, 0xda3: 0x135f,
+       0xda4: 0x13a3, 0xda5: 0x13a7, 0xda6: 0x13ff, 0xda7: 0x1407, 0xda8: 0x14db, 0xda9: 0x151f,
+       0xdaa: 0x1537, 0xdab: 0x0b9b, 0xdac: 0x171e, 0xdad: 0x11e3,
+       0xdb0: 0x06df, 0xdb1: 0x07e3, 0xdb2: 0x07a3, 0xdb3: 0x074b, 0xdb4: 0x078b, 0xdb5: 0x07b7,
+       0xdb6: 0x0847, 0xdb7: 0x0863, 0xdb8: 0x094b, 0xdb9: 0x0937, 0xdba: 0x0947, 0xdbb: 0x0963,
+       0xdbc: 0x09af, 0xdbd: 0x09bf, 0xdbe: 0x0a03, 0xdbf: 0x0a0f,
+       // Block 0x37, offset 0xdc0
+       0xdc0: 0x0a2b, 0xdc1: 0x0a3b, 0xdc2: 0x0b23, 0xdc3: 0x0b2b, 0xdc4: 0x0b5b, 0xdc5: 0x0b7b,
+       0xdc6: 0x0bab, 0xdc7: 0x0bc3, 0xdc8: 0x0bb3, 0xdc9: 0x0bd3, 0xdca: 0x0bc7, 0xdcb: 0x0beb,
+       0xdcc: 0x0c07, 0xdcd: 0x0c5f, 0xdce: 0x0c6b, 0xdcf: 0x0c73, 0xdd0: 0x0c9b, 0xdd1: 0x0cdf,
+       0xdd2: 0x0d0f, 0xdd3: 0x0d13, 0xdd4: 0x0d27, 0xdd5: 0x0da7, 0xdd6: 0x0db7, 0xdd7: 0x0e0f,
+       0xdd8: 0x0e5b, 0xdd9: 0x0e53, 0xdda: 0x0e67, 0xddb: 0x0e83, 0xddc: 0x0ebb, 0xddd: 0x1013,
+       0xdde: 0x0edf, 0xddf: 0x0f13, 0xde0: 0x0f1f, 0xde1: 0x0f5f, 0xde2: 0x0f7b, 0xde3: 0x0f9f,
+       0xde4: 0x0fc3, 0xde5: 0x0fc7, 0xde6: 0x0fe3, 0xde7: 0x0fe7, 0xde8: 0x0ff7, 0xde9: 0x100b,
+       0xdea: 0x1007, 0xdeb: 0x1037, 0xdec: 0x10b3, 0xded: 0x10cb, 0xdee: 0x10e3, 0xdef: 0x111b,
+       0xdf0: 0x112f, 0xdf1: 0x114b, 0xdf2: 0x117b, 0xdf3: 0x122f, 0xdf4: 0x1257, 0xdf5: 0x12cb,
+       0xdf6: 0x1313, 0xdf7: 0x131f, 0xdf8: 0x1327, 0xdf9: 0x133f, 0xdfa: 0x1353, 0xdfb: 0x1343,
+       0xdfc: 0x135b, 0xdfd: 0x1357, 0xdfe: 0x134f, 0xdff: 0x135f,
+       // Block 0x38, offset 0xe00
+       0xe00: 0x136b, 0xe01: 0x13a7, 0xe02: 0x13e3, 0xe03: 0x1413, 0xe04: 0x144b, 0xe05: 0x146b,
+       0xe06: 0x14b7, 0xe07: 0x14db, 0xe08: 0x14fb, 0xe09: 0x150f, 0xe0a: 0x151f, 0xe0b: 0x152b,
+       0xe0c: 0x1537, 0xe0d: 0x158b, 0xe0e: 0x162b, 0xe0f: 0x16b5, 0xe10: 0x16b0, 0xe11: 0x16e2,
+       0xe12: 0x0607, 0xe13: 0x062f, 0xe14: 0x0633, 0xe15: 0x1764, 0xe16: 0x1791, 0xe17: 0x1809,
+       0xe18: 0x1617, 0xe19: 0x1627,
+       // Block 0x39, offset 0xe40
+       0xe40: 0x19d5, 0xe41: 0x19d8, 0xe42: 0x19db, 0xe43: 0x1c08, 0xe44: 0x1c0c, 0xe45: 0x1a5f,
+       0xe46: 0x1a5f,
+       0xe53: 0x1d75, 0xe54: 0x1d66, 0xe55: 0x1d6b, 0xe56: 0x1d7a, 0xe57: 0x1d70,
+       0xe5d: 0x4390,
+       0xe5e: 0x8115, 0xe5f: 0x4402, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221,
+       0xe64: 0x0224, 0xe65: 0x0227, 0xe66: 0x022a, 0xe67: 0x0230, 0xe68: 0x0233, 0xe69: 0x0017,
+       0xe6a: 0x43f0, 0xe6b: 0x43f6, 0xe6c: 0x44f4, 0xe6d: 0x44fc, 0xe6e: 0x4348, 0xe6f: 0x434e,
+       0xe70: 0x4354, 0xe71: 0x435a, 0xe72: 0x4366, 0xe73: 0x436c, 0xe74: 0x4372, 0xe75: 0x437e,
+       0xe76: 0x4384, 0xe78: 0x438a, 0xe79: 0x4396, 0xe7a: 0x439c, 0xe7b: 0x43a2,
+       0xe7c: 0x43ae, 0xe7e: 0x43b4,
+       // Block 0x3a, offset 0xe80
+       0xe80: 0x43ba, 0xe81: 0x43c0, 0xe83: 0x43c6, 0xe84: 0x43cc,
+       0xe86: 0x43d8, 0xe87: 0x43de, 0xe88: 0x43e4, 0xe89: 0x43ea, 0xe8a: 0x43fc, 0xe8b: 0x4378,
+       0xe8c: 0x4360, 0xe8d: 0x43a8, 0xe8e: 0x43d2, 0xe8f: 0x1d7f, 0xe90: 0x0299, 0xe91: 0x0299,
+       0xe92: 0x02a2, 0xe93: 0x02a2, 0xe94: 0x02a2, 0xe95: 0x02a2, 0xe96: 0x02a5, 0xe97: 0x02a5,
+       0xe98: 0x02a5, 0xe99: 0x02a5, 0xe9a: 0x02ab, 0xe9b: 0x02ab, 0xe9c: 0x02ab, 0xe9d: 0x02ab,
+       0xe9e: 0x029f, 0xe9f: 0x029f, 0xea0: 0x029f, 0xea1: 0x029f, 0xea2: 0x02a8, 0xea3: 0x02a8,
+       0xea4: 0x02a8, 0xea5: 0x02a8, 0xea6: 0x029c, 0xea7: 0x029c, 0xea8: 0x029c, 0xea9: 0x029c,
+       0xeaa: 0x02cf, 0xeab: 0x02cf, 0xeac: 0x02cf, 0xead: 0x02cf, 0xeae: 0x02d2, 0xeaf: 0x02d2,
+       0xeb0: 0x02d2, 0xeb1: 0x02d2, 0xeb2: 0x02b1, 0xeb3: 0x02b1, 0xeb4: 0x02b1, 0xeb5: 0x02b1,
+       0xeb6: 0x02ae, 0xeb7: 0x02ae, 0xeb8: 0x02ae, 0xeb9: 0x02ae, 0xeba: 0x02b4, 0xebb: 0x02b4,
+       0xebc: 0x02b4, 0xebd: 0x02b4, 0xebe: 0x02b7, 0xebf: 0x02b7,
+       // Block 0x3b, offset 0xec0
+       0xec0: 0x02b7, 0xec1: 0x02b7, 0xec2: 0x02c0, 0xec3: 0x02c0, 0xec4: 0x02bd, 0xec5: 0x02bd,
+       0xec6: 0x02c3, 0xec7: 0x02c3, 0xec8: 0x02ba, 0xec9: 0x02ba, 0xeca: 0x02c9, 0xecb: 0x02c9,
+       0xecc: 0x02c6, 0xecd: 0x02c6, 0xece: 0x02d5, 0xecf: 0x02d5, 0xed0: 0x02d5, 0xed1: 0x02d5,
+       0xed2: 0x02db, 0xed3: 0x02db, 0xed4: 0x02db, 0xed5: 0x02db, 0xed6: 0x02e1, 0xed7: 0x02e1,
+       0xed8: 0x02e1, 0xed9: 0x02e1, 0xeda: 0x02de, 0xedb: 0x02de, 0xedc: 0x02de, 0xedd: 0x02de,
+       0xede: 0x02e4, 0xedf: 0x02e4, 0xee0: 0x02e7, 0xee1: 0x02e7, 0xee2: 0x02e7, 0xee3: 0x02e7,
+       0xee4: 0x446e, 0xee5: 0x446e, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed,
+       0xeea: 0x02ea, 0xeeb: 0x02ea, 0xeec: 0x02ea, 0xeed: 0x02ea, 0xeee: 0x0308, 0xeef: 0x0308,
+       0xef0: 0x4468, 0xef1: 0x4468,
+       // Block 0x3c, offset 0xf00
+       0xf13: 0x02d8, 0xf14: 0x02d8, 0xf15: 0x02d8, 0xf16: 0x02d8, 0xf17: 0x02f6,
+       0xf18: 0x02f6, 0xf19: 0x02f3, 0xf1a: 0x02f3, 0xf1b: 0x02f9, 0xf1c: 0x02f9, 0xf1d: 0x204f,
+       0xf1e: 0x02ff, 0xf1f: 0x02ff, 0xf20: 0x02f0, 0xf21: 0x02f0, 0xf22: 0x02fc, 0xf23: 0x02fc,
+       0xf24: 0x0305, 0xf25: 0x0305, 0xf26: 0x0305, 0xf27: 0x0305, 0xf28: 0x028d, 0xf29: 0x028d,
+       0xf2a: 0x25aa, 0xf2b: 0x25aa, 0xf2c: 0x261a, 0xf2d: 0x261a, 0xf2e: 0x25e9, 0xf2f: 0x25e9,
+       0xf30: 0x2605, 0xf31: 0x2605, 0xf32: 0x25fe, 0xf33: 0x25fe, 0xf34: 0x260c, 0xf35: 0x260c,
+       0xf36: 0x2613, 0xf37: 0x2613, 0xf38: 0x2613, 0xf39: 0x25f0, 0xf3a: 0x25f0, 0xf3b: 0x25f0,
+       0xf3c: 0x0302, 0xf3d: 0x0302, 0xf3e: 0x0302, 0xf3f: 0x0302,
+       // Block 0x3d, offset 0xf40
+       0xf40: 0x25b1, 0xf41: 0x25b8, 0xf42: 0x25d4, 0xf43: 0x25f0, 0xf44: 0x25f7, 0xf45: 0x1d89,
+       0xf46: 0x1d8e, 0xf47: 0x1d93, 0xf48: 0x1da2, 0xf49: 0x1db1, 0xf4a: 0x1db6, 0xf4b: 0x1dbb,
+       0xf4c: 0x1dc0, 0xf4d: 0x1dc5, 0xf4e: 0x1dd4, 0xf4f: 0x1de3, 0xf50: 0x1de8, 0xf51: 0x1ded,
+       0xf52: 0x1dfc, 0xf53: 0x1e0b, 0xf54: 0x1e10, 0xf55: 0x1e15, 0xf56: 0x1e1a, 0xf57: 0x1e29,
+       0xf58: 0x1e2e, 0xf59: 0x1e3d, 0xf5a: 0x1e42, 0xf5b: 0x1e47, 0xf5c: 0x1e56, 0xf5d: 0x1e5b,
+       0xf5e: 0x1e60, 0xf5f: 0x1e6a, 0xf60: 0x1ea6, 0xf61: 0x1eb5, 0xf62: 0x1ec4, 0xf63: 0x1ec9,
+       0xf64: 0x1ece, 0xf65: 0x1ed8, 0xf66: 0x1ee7, 0xf67: 0x1eec, 0xf68: 0x1efb, 0xf69: 0x1f00,
+       0xf6a: 0x1f05, 0xf6b: 0x1f14, 0xf6c: 0x1f19, 0xf6d: 0x1f28, 0xf6e: 0x1f2d, 0xf6f: 0x1f32,
+       0xf70: 0x1f37, 0xf71: 0x1f3c, 0xf72: 0x1f41, 0xf73: 0x1f46, 0xf74: 0x1f4b, 0xf75: 0x1f50,
+       0xf76: 0x1f55, 0xf77: 0x1f5a, 0xf78: 0x1f5f, 0xf79: 0x1f64, 0xf7a: 0x1f69, 0xf7b: 0x1f6e,
+       0xf7c: 0x1f73, 0xf7d: 0x1f78, 0xf7e: 0x1f7d, 0xf7f: 0x1f87,
+       // Block 0x3e, offset 0xf80
+       0xf80: 0x1f8c, 0xf81: 0x1f91, 0xf82: 0x1f96, 0xf83: 0x1fa0, 0xf84: 0x1fa5, 0xf85: 0x1faf,
+       0xf86: 0x1fb4, 0xf87: 0x1fb9, 0xf88: 0x1fbe, 0xf89: 0x1fc3, 0xf8a: 0x1fc8, 0xf8b: 0x1fcd,
+       0xf8c: 0x1fd2, 0xf8d: 0x1fd7, 0xf8e: 0x1fe6, 0xf8f: 0x1ff5, 0xf90: 0x1ffa, 0xf91: 0x1fff,
+       0xf92: 0x2004, 0xf93: 0x2009, 0xf94: 0x200e, 0xf95: 0x2018, 0xf96: 0x201d, 0xf97: 0x2022,
+       0xf98: 0x2031, 0xf99: 0x2040, 0xf9a: 0x2045, 0xf9b: 0x4420, 0xf9c: 0x4426, 0xf9d: 0x445c,
+       0xf9e: 0x44b3, 0xf9f: 0x44ba, 0xfa0: 0x44c1, 0xfa1: 0x44c8, 0xfa2: 0x44cf, 0xfa3: 0x44d6,
+       0xfa4: 0x25c6, 0xfa5: 0x25cd, 0xfa6: 0x25d4, 0xfa7: 0x25db, 0xfa8: 0x25f0, 0xfa9: 0x25f7,
+       0xfaa: 0x1d98, 0xfab: 0x1d9d, 0xfac: 0x1da2, 0xfad: 0x1da7, 0xfae: 0x1db1, 0xfaf: 0x1db6,
+       0xfb0: 0x1dca, 0xfb1: 0x1dcf, 0xfb2: 0x1dd4, 0xfb3: 0x1dd9, 0xfb4: 0x1de3, 0xfb5: 0x1de8,
+       0xfb6: 0x1df2, 0xfb7: 0x1df7, 0xfb8: 0x1dfc, 0xfb9: 0x1e01, 0xfba: 0x1e0b, 0xfbb: 0x1e10,
+       0xfbc: 0x1f3c, 0xfbd: 0x1f41, 0xfbe: 0x1f50, 0xfbf: 0x1f55,
+       // Block 0x3f, offset 0xfc0
+       0xfc0: 0x1f5a, 0xfc1: 0x1f6e, 0xfc2: 0x1f73, 0xfc3: 0x1f78, 0xfc4: 0x1f7d, 0xfc5: 0x1f96,
+       0xfc6: 0x1fa0, 0xfc7: 0x1fa5, 0xfc8: 0x1faa, 0xfc9: 0x1fbe, 0xfca: 0x1fdc, 0xfcb: 0x1fe1,
+       0xfcc: 0x1fe6, 0xfcd: 0x1feb, 0xfce: 0x1ff5, 0xfcf: 0x1ffa, 0xfd0: 0x445c, 0xfd1: 0x2027,
+       0xfd2: 0x202c, 0xfd3: 0x2031, 0xfd4: 0x2036, 0xfd5: 0x2040, 0xfd6: 0x2045, 0xfd7: 0x25b1,
+       0xfd8: 0x25b8, 0xfd9: 0x25bf, 0xfda: 0x25d4, 0xfdb: 0x25e2, 0xfdc: 0x1d89, 0xfdd: 0x1d8e,
+       0xfde: 0x1d93, 0xfdf: 0x1da2, 0xfe0: 0x1dac, 0xfe1: 0x1dbb, 0xfe2: 0x1dc0, 0xfe3: 0x1dc5,
+       0xfe4: 0x1dd4, 0xfe5: 0x1dde, 0xfe6: 0x1dfc, 0xfe7: 0x1e15, 0xfe8: 0x1e1a, 0xfe9: 0x1e29,
+       0xfea: 0x1e2e, 0xfeb: 0x1e3d, 0xfec: 0x1e47, 0xfed: 0x1e56, 0xfee: 0x1e5b, 0xfef: 0x1e60,
+       0xff0: 0x1e6a, 0xff1: 0x1ea6, 0xff2: 0x1eab, 0xff3: 0x1eb5, 0xff4: 0x1ec4, 0xff5: 0x1ec9,
+       0xff6: 0x1ece, 0xff7: 0x1ed8, 0xff8: 0x1ee7, 0xff9: 0x1efb, 0xffa: 0x1f00, 0xffb: 0x1f05,
+       0xffc: 0x1f14, 0xffd: 0x1f19, 0xffe: 0x1f28, 0xfff: 0x1f2d,
+       // Block 0x40, offset 0x1000
+       0x1000: 0x1f32, 0x1001: 0x1f37, 0x1002: 0x1f46, 0x1003: 0x1f4b, 0x1004: 0x1f5f, 0x1005: 0x1f64,
+       0x1006: 0x1f69, 0x1007: 0x1f6e, 0x1008: 0x1f73, 0x1009: 0x1f87, 0x100a: 0x1f8c, 0x100b: 0x1f91,
+       0x100c: 0x1f96, 0x100d: 0x1f9b, 0x100e: 0x1faf, 0x100f: 0x1fb4, 0x1010: 0x1fb9, 0x1011: 0x1fbe,
+       0x1012: 0x1fcd, 0x1013: 0x1fd2, 0x1014: 0x1fd7, 0x1015: 0x1fe6, 0x1016: 0x1ff0, 0x1017: 0x1fff,
+       0x1018: 0x2004, 0x1019: 0x4450, 0x101a: 0x2018, 0x101b: 0x201d, 0x101c: 0x2022, 0x101d: 0x2031,
+       0x101e: 0x203b, 0x101f: 0x25d4, 0x1020: 0x25e2, 0x1021: 0x1da2, 0x1022: 0x1dac, 0x1023: 0x1dd4,
+       0x1024: 0x1dde, 0x1025: 0x1dfc, 0x1026: 0x1e06, 0x1027: 0x1e6a, 0x1028: 0x1e6f, 0x1029: 0x1e92,
+       0x102a: 0x1e97, 0x102b: 0x1f6e, 0x102c: 0x1f73, 0x102d: 0x1f96, 0x102e: 0x1fe6, 0x102f: 0x1ff0,
+       0x1030: 0x2031, 0x1031: 0x203b, 0x1032: 0x4504, 0x1033: 0x450c, 0x1034: 0x4514, 0x1035: 0x1ef1,
+       0x1036: 0x1ef6, 0x1037: 0x1f0a, 0x1038: 0x1f0f, 0x1039: 0x1f1e, 0x103a: 0x1f23, 0x103b: 0x1e74,
+       0x103c: 0x1e79, 0x103d: 0x1e9c, 0x103e: 0x1ea1, 0x103f: 0x1e33,
+       // Block 0x41, offset 0x1040
+       0x1040: 0x1e38, 0x1041: 0x1e1f, 0x1042: 0x1e24, 0x1043: 0x1e4c, 0x1044: 0x1e51, 0x1045: 0x1eba,
+       0x1046: 0x1ebf, 0x1047: 0x1edd, 0x1048: 0x1ee2, 0x1049: 0x1e7e, 0x104a: 0x1e83, 0x104b: 0x1e88,
+       0x104c: 0x1e92, 0x104d: 0x1e8d, 0x104e: 0x1e65, 0x104f: 0x1eb0, 0x1050: 0x1ed3, 0x1051: 0x1ef1,
+       0x1052: 0x1ef6, 0x1053: 0x1f0a, 0x1054: 0x1f0f, 0x1055: 0x1f1e, 0x1056: 0x1f23, 0x1057: 0x1e74,
+       0x1058: 0x1e79, 0x1059: 0x1e9c, 0x105a: 0x1ea1, 0x105b: 0x1e33, 0x105c: 0x1e38, 0x105d: 0x1e1f,
+       0x105e: 0x1e24, 0x105f: 0x1e4c, 0x1060: 0x1e51, 0x1061: 0x1eba, 0x1062: 0x1ebf, 0x1063: 0x1edd,
+       0x1064: 0x1ee2, 0x1065: 0x1e7e, 0x1066: 0x1e83, 0x1067: 0x1e88, 0x1068: 0x1e92, 0x1069: 0x1e8d,
+       0x106a: 0x1e65, 0x106b: 0x1eb0, 0x106c: 0x1ed3, 0x106d: 0x1e7e, 0x106e: 0x1e83, 0x106f: 0x1e88,
+       0x1070: 0x1e92, 0x1071: 0x1e6f, 0x1072: 0x1e97, 0x1073: 0x1eec, 0x1074: 0x1e56, 0x1075: 0x1e5b,
+       0x1076: 0x1e60, 0x1077: 0x1e7e, 0x1078: 0x1e83, 0x1079: 0x1e88, 0x107a: 0x1eec, 0x107b: 0x1efb,
+       0x107c: 0x4408, 0x107d: 0x4408,
+       // Block 0x42, offset 0x1080
+       0x1090: 0x2311, 0x1091: 0x2326,
+       0x1092: 0x2326, 0x1093: 0x232d, 0x1094: 0x2334, 0x1095: 0x2349, 0x1096: 0x2350, 0x1097: 0x2357,
+       0x1098: 0x237a, 0x1099: 0x237a, 0x109a: 0x239d, 0x109b: 0x2396, 0x109c: 0x23b2, 0x109d: 0x23a4,
+       0x109e: 0x23ab, 0x109f: 0x23ce, 0x10a0: 0x23ce, 0x10a1: 0x23c7, 0x10a2: 0x23d5, 0x10a3: 0x23d5,
+       0x10a4: 0x23ff, 0x10a5: 0x23ff, 0x10a6: 0x241b, 0x10a7: 0x23e3, 0x10a8: 0x23e3, 0x10a9: 0x23dc,
+       0x10aa: 0x23f1, 0x10ab: 0x23f1, 0x10ac: 0x23f8, 0x10ad: 0x23f8, 0x10ae: 0x2422, 0x10af: 0x2430,
+       0x10b0: 0x2430, 0x10b1: 0x2437, 0x10b2: 0x2437, 0x10b3: 0x243e, 0x10b4: 0x2445, 0x10b5: 0x244c,
+       0x10b6: 0x2453, 0x10b7: 0x2453, 0x10b8: 0x245a, 0x10b9: 0x2468, 0x10ba: 0x2476, 0x10bb: 0x246f,
+       0x10bc: 0x247d, 0x10bd: 0x247d, 0x10be: 0x2492, 0x10bf: 0x2499,
+       // Block 0x43, offset 0x10c0
+       0x10c0: 0x24ca, 0x10c1: 0x24d8, 0x10c2: 0x24d1, 0x10c3: 0x24b5, 0x10c4: 0x24b5, 0x10c5: 0x24df,
+       0x10c6: 0x24df, 0x10c7: 0x24e6, 0x10c8: 0x24e6, 0x10c9: 0x2510, 0x10ca: 0x2517, 0x10cb: 0x251e,
+       0x10cc: 0x24f4, 0x10cd: 0x2502, 0x10ce: 0x2525, 0x10cf: 0x252c,
+       0x10d2: 0x24fb, 0x10d3: 0x2580, 0x10d4: 0x2587, 0x10d5: 0x255d, 0x10d6: 0x2564, 0x10d7: 0x2548,
+       0x10d8: 0x2548, 0x10d9: 0x254f, 0x10da: 0x2579, 0x10db: 0x2572, 0x10dc: 0x259c, 0x10dd: 0x259c,
+       0x10de: 0x230a, 0x10df: 0x231f, 0x10e0: 0x2318, 0x10e1: 0x2342, 0x10e2: 0x233b, 0x10e3: 0x2365,
+       0x10e4: 0x235e, 0x10e5: 0x2388, 0x10e6: 0x236c, 0x10e7: 0x2381, 0x10e8: 0x23b9, 0x10e9: 0x2406,
+       0x10ea: 0x23ea, 0x10eb: 0x2429, 0x10ec: 0x24c3, 0x10ed: 0x24ed, 0x10ee: 0x2595, 0x10ef: 0x258e,
+       0x10f0: 0x25a3, 0x10f1: 0x253a, 0x10f2: 0x24a0, 0x10f3: 0x256b, 0x10f4: 0x2492, 0x10f5: 0x24ca,
+       0x10f6: 0x2461, 0x10f7: 0x24ae, 0x10f8: 0x2541, 0x10f9: 0x2533, 0x10fa: 0x24bc, 0x10fb: 0x24a7,
+       0x10fc: 0x24bc, 0x10fd: 0x2541, 0x10fe: 0x2373, 0x10ff: 0x238f,
+       // Block 0x44, offset 0x1100
+       0x1100: 0x2509, 0x1101: 0x2484, 0x1102: 0x2303, 0x1103: 0x24a7, 0x1104: 0x244c, 0x1105: 0x241b,
+       0x1106: 0x23c0, 0x1107: 0x2556,
+       0x1130: 0x2414, 0x1131: 0x248b, 0x1132: 0x27bf, 0x1133: 0x27b6, 0x1134: 0x27ec, 0x1135: 0x27da,
+       0x1136: 0x27c8, 0x1137: 0x27e3, 0x1138: 0x27f5, 0x1139: 0x240d, 0x113a: 0x2c7c, 0x113b: 0x2afc,
+       0x113c: 0x27d1,
+       // Block 0x45, offset 0x1140
+       0x1150: 0x0019, 0x1151: 0x0483,
+       0x1152: 0x0487, 0x1153: 0x0035, 0x1154: 0x0037, 0x1155: 0x0003, 0x1156: 0x003f, 0x1157: 0x04bf,
+       0x1158: 0x04c3, 0x1159: 0x1b5c,
+       0x1160: 0x8132, 0x1161: 0x8132, 0x1162: 0x8132, 0x1163: 0x8132,
+       0x1164: 0x8132, 0x1165: 0x8132, 0x1166: 0x8132, 0x1167: 0x812d, 0x1168: 0x812d, 0x1169: 0x812d,
+       0x116a: 0x812d, 0x116b: 0x812d, 0x116c: 0x812d, 0x116d: 0x812d, 0x116e: 0x8132, 0x116f: 0x8132,
+       0x1170: 0x1873, 0x1171: 0x0443, 0x1172: 0x043f, 0x1173: 0x007f, 0x1174: 0x007f, 0x1175: 0x0011,
+       0x1176: 0x0013, 0x1177: 0x00b7, 0x1178: 0x00bb, 0x1179: 0x04b7, 0x117a: 0x04bb, 0x117b: 0x04ab,
+       0x117c: 0x04af, 0x117d: 0x0493, 0x117e: 0x0497, 0x117f: 0x048b,
+       // Block 0x46, offset 0x1180
+       0x1180: 0x048f, 0x1181: 0x049b, 0x1182: 0x049f, 0x1183: 0x04a3, 0x1184: 0x04a7,
+       0x1187: 0x0077, 0x1188: 0x007b, 0x1189: 0x4269, 0x118a: 0x4269, 0x118b: 0x4269,
+       0x118c: 0x4269, 0x118d: 0x007f, 0x118e: 0x007f, 0x118f: 0x007f, 0x1190: 0x0019, 0x1191: 0x0483,
+       0x1192: 0x001d, 0x1194: 0x0037, 0x1195: 0x0035, 0x1196: 0x003f, 0x1197: 0x0003,
+       0x1198: 0x0443, 0x1199: 0x0011, 0x119a: 0x0013, 0x119b: 0x00b7, 0x119c: 0x00bb, 0x119d: 0x04b7,
+       0x119e: 0x04bb, 0x119f: 0x0007, 0x11a0: 0x000d, 0x11a1: 0x0015, 0x11a2: 0x0017, 0x11a3: 0x001b,
+       0x11a4: 0x0039, 0x11a5: 0x003d, 0x11a6: 0x003b, 0x11a8: 0x0079, 0x11a9: 0x0009,
+       0x11aa: 0x000b, 0x11ab: 0x0041,
+       0x11b0: 0x42aa, 0x11b1: 0x442c, 0x11b2: 0x42af, 0x11b4: 0x42b4,
+       0x11b6: 0x42b9, 0x11b7: 0x4432, 0x11b8: 0x42be, 0x11b9: 0x4438, 0x11ba: 0x42c3, 0x11bb: 0x443e,
+       0x11bc: 0x42c8, 0x11bd: 0x4444, 0x11be: 0x42cd, 0x11bf: 0x444a,
+       // Block 0x47, offset 0x11c0
+       0x11c0: 0x0236, 0x11c1: 0x440e, 0x11c2: 0x440e, 0x11c3: 0x4414, 0x11c4: 0x4414, 0x11c5: 0x4456,
+       0x11c6: 0x4456, 0x11c7: 0x441a, 0x11c8: 0x441a, 0x11c9: 0x4462, 0x11ca: 0x4462, 0x11cb: 0x4462,
+       0x11cc: 0x4462, 0x11cd: 0x0239, 0x11ce: 0x0239, 0x11cf: 0x023c, 0x11d0: 0x023c, 0x11d1: 0x023c,
+       0x11d2: 0x023c, 0x11d3: 0x023f, 0x11d4: 0x023f, 0x11d5: 0x0242, 0x11d6: 0x0242, 0x11d7: 0x0242,
+       0x11d8: 0x0242, 0x11d9: 0x0245, 0x11da: 0x0245, 0x11db: 0x0245, 0x11dc: 0x0245, 0x11dd: 0x0248,
+       0x11de: 0x0248, 0x11df: 0x0248, 0x11e0: 0x0248, 0x11e1: 0x024b, 0x11e2: 0x024b, 0x11e3: 0x024b,
+       0x11e4: 0x024b, 0x11e5: 0x024e, 0x11e6: 0x024e, 0x11e7: 0x024e, 0x11e8: 0x024e, 0x11e9: 0x0251,
+       0x11ea: 0x0251, 0x11eb: 0x0254, 0x11ec: 0x0254, 0x11ed: 0x0257, 0x11ee: 0x0257, 0x11ef: 0x025a,
+       0x11f0: 0x025a, 0x11f1: 0x025d, 0x11f2: 0x025d, 0x11f3: 0x025d, 0x11f4: 0x025d, 0x11f5: 0x0260,
+       0x11f6: 0x0260, 0x11f7: 0x0260, 0x11f8: 0x0260, 0x11f9: 0x0263, 0x11fa: 0x0263, 0x11fb: 0x0263,
+       0x11fc: 0x0263, 0x11fd: 0x0266, 0x11fe: 0x0266, 0x11ff: 0x0266,
+       // Block 0x48, offset 0x1200
+       0x1200: 0x0266, 0x1201: 0x0269, 0x1202: 0x0269, 0x1203: 0x0269, 0x1204: 0x0269, 0x1205: 0x026c,
+       0x1206: 0x026c, 0x1207: 0x026c, 0x1208: 0x026c, 0x1209: 0x026f, 0x120a: 0x026f, 0x120b: 0x026f,
+       0x120c: 0x026f, 0x120d: 0x0272, 0x120e: 0x0272, 0x120f: 0x0272, 0x1210: 0x0272, 0x1211: 0x0275,
+       0x1212: 0x0275, 0x1213: 0x0275, 0x1214: 0x0275, 0x1215: 0x0278, 0x1216: 0x0278, 0x1217: 0x0278,
+       0x1218: 0x0278, 0x1219: 0x027b, 0x121a: 0x027b, 0x121b: 0x027b, 0x121c: 0x027b, 0x121d: 0x027e,
+       0x121e: 0x027e, 0x121f: 0x027e, 0x1220: 0x027e, 0x1221: 0x0281, 0x1222: 0x0281, 0x1223: 0x0281,
+       0x1224: 0x0281, 0x1225: 0x0284, 0x1226: 0x0284, 0x1227: 0x0284, 0x1228: 0x0284, 0x1229: 0x0287,
+       0x122a: 0x0287, 0x122b: 0x0287, 0x122c: 0x0287, 0x122d: 0x028a, 0x122e: 0x028a, 0x122f: 0x028d,
+       0x1230: 0x028d, 0x1231: 0x0290, 0x1232: 0x0290, 0x1233: 0x0290, 0x1234: 0x0290, 0x1235: 0x2e00,
+       0x1236: 0x2e00, 0x1237: 0x2e08, 0x1238: 0x2e08, 0x1239: 0x2e10, 0x123a: 0x2e10, 0x123b: 0x1f82,
+       0x123c: 0x1f82,
+       // Block 0x49, offset 0x1240
+       0x1240: 0x0081, 0x1241: 0x0083, 0x1242: 0x0085, 0x1243: 0x0087, 0x1244: 0x0089, 0x1245: 0x008b,
+       0x1246: 0x008d, 0x1247: 0x008f, 0x1248: 0x0091, 0x1249: 0x0093, 0x124a: 0x0095, 0x124b: 0x0097,
+       0x124c: 0x0099, 0x124d: 0x009b, 0x124e: 0x009d, 0x124f: 0x009f, 0x1250: 0x00a1, 0x1251: 0x00a3,
+       0x1252: 0x00a5, 0x1253: 0x00a7, 0x1254: 0x00a9, 0x1255: 0x00ab, 0x1256: 0x00ad, 0x1257: 0x00af,
+       0x1258: 0x00b1, 0x1259: 0x00b3, 0x125a: 0x00b5, 0x125b: 0x00b7, 0x125c: 0x00b9, 0x125d: 0x00bb,
+       0x125e: 0x00bd, 0x125f: 0x0477, 0x1260: 0x047b, 0x1261: 0x0487, 0x1262: 0x049b, 0x1263: 0x049f,
+       0x1264: 0x0483, 0x1265: 0x05ab, 0x1266: 0x05a3, 0x1267: 0x04c7, 0x1268: 0x04cf, 0x1269: 0x04d7,
+       0x126a: 0x04df, 0x126b: 0x04e7, 0x126c: 0x056b, 0x126d: 0x0573, 0x126e: 0x057b, 0x126f: 0x051f,
+       0x1270: 0x05af, 0x1271: 0x04cb, 0x1272: 0x04d3, 0x1273: 0x04db, 0x1274: 0x04e3, 0x1275: 0x04eb,
+       0x1276: 0x04ef, 0x1277: 0x04f3, 0x1278: 0x04f7, 0x1279: 0x04fb, 0x127a: 0x04ff, 0x127b: 0x0503,
+       0x127c: 0x0507, 0x127d: 0x050b, 0x127e: 0x050f, 0x127f: 0x0513,
+       // Block 0x4a, offset 0x1280
+       0x1280: 0x0517, 0x1281: 0x051b, 0x1282: 0x0523, 0x1283: 0x0527, 0x1284: 0x052b, 0x1285: 0x052f,
+       0x1286: 0x0533, 0x1287: 0x0537, 0x1288: 0x053b, 0x1289: 0x053f, 0x128a: 0x0543, 0x128b: 0x0547,
+       0x128c: 0x054b, 0x128d: 0x054f, 0x128e: 0x0553, 0x128f: 0x0557, 0x1290: 0x055b, 0x1291: 0x055f,
+       0x1292: 0x0563, 0x1293: 0x0567, 0x1294: 0x056f, 0x1295: 0x0577, 0x1296: 0x057f, 0x1297: 0x0583,
+       0x1298: 0x0587, 0x1299: 0x058b, 0x129a: 0x058f, 0x129b: 0x0593, 0x129c: 0x0597, 0x129d: 0x05a7,
+       0x129e: 0x4a78, 0x129f: 0x4a7e, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4a3b,
+       0x12a4: 0x031b, 0x12a5: 0x4a41, 0x12a6: 0x4a47, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327,
+       0x12aa: 0x4a4d, 0x12ab: 0x4a53, 0x12ac: 0x4a59, 0x12ad: 0x4a5f, 0x12ae: 0x4a65, 0x12af: 0x4a6b,
+       0x12b0: 0x0367, 0x12b1: 0x032b, 0x12b2: 0x032f, 0x12b3: 0x0333, 0x12b4: 0x037b, 0x12b5: 0x0337,
+       0x12b6: 0x033b, 0x12b7: 0x033f, 0x12b8: 0x0343, 0x12b9: 0x0347, 0x12ba: 0x034b, 0x12bb: 0x034f,
+       0x12bc: 0x0353, 0x12bd: 0x0357, 0x12be: 0x035b,
+       // Block 0x4b, offset 0x12c0
+       0x12c2: 0x49bd, 0x12c3: 0x49c3, 0x12c4: 0x49c9, 0x12c5: 0x49cf,
+       0x12c6: 0x49d5, 0x12c7: 0x49db, 0x12ca: 0x49e1, 0x12cb: 0x49e7,
+       0x12cc: 0x49ed, 0x12cd: 0x49f3, 0x12ce: 0x49f9, 0x12cf: 0x49ff,
+       0x12d2: 0x4a05, 0x12d3: 0x4a0b, 0x12d4: 0x4a11, 0x12d5: 0x4a17, 0x12d6: 0x4a1d, 0x12d7: 0x4a23,
+       0x12da: 0x4a29, 0x12db: 0x4a2f, 0x12dc: 0x4a35,
+       0x12e0: 0x00bf, 0x12e1: 0x00c2, 0x12e2: 0x00cb, 0x12e3: 0x4264,
+       0x12e4: 0x00c8, 0x12e5: 0x00c5, 0x12e6: 0x0447, 0x12e8: 0x046b, 0x12e9: 0x044b,
+       0x12ea: 0x044f, 0x12eb: 0x0453, 0x12ec: 0x0457, 0x12ed: 0x046f, 0x12ee: 0x0473,
+       // Block 0x4c, offset 0x1300
+       0x1300: 0x0063, 0x1301: 0x0065, 0x1302: 0x0067, 0x1303: 0x0069, 0x1304: 0x006b, 0x1305: 0x006d,
+       0x1306: 0x006f, 0x1307: 0x0071, 0x1308: 0x0073, 0x1309: 0x0075, 0x130a: 0x0083, 0x130b: 0x0085,
+       0x130c: 0x0087, 0x130d: 0x0089, 0x130e: 0x008b, 0x130f: 0x008d, 0x1310: 0x008f, 0x1311: 0x0091,
+       0x1312: 0x0093, 0x1313: 0x0095, 0x1314: 0x0097, 0x1315: 0x0099, 0x1316: 0x009b, 0x1317: 0x009d,
+       0x1318: 0x009f, 0x1319: 0x00a1, 0x131a: 0x00a3, 0x131b: 0x00a5, 0x131c: 0x00a7, 0x131d: 0x00a9,
+       0x131e: 0x00ab, 0x131f: 0x00ad, 0x1320: 0x00af, 0x1321: 0x00b1, 0x1322: 0x00b3, 0x1323: 0x00b5,
+       0x1324: 0x00dd, 0x1325: 0x00f2, 0x1328: 0x0173, 0x1329: 0x0176,
+       0x132a: 0x0179, 0x132b: 0x017c, 0x132c: 0x017f, 0x132d: 0x0182, 0x132e: 0x0185, 0x132f: 0x0188,
+       0x1330: 0x018b, 0x1331: 0x018e, 0x1332: 0x0191, 0x1333: 0x0194, 0x1334: 0x0197, 0x1335: 0x019a,
+       0x1336: 0x019d, 0x1337: 0x01a0, 0x1338: 0x01a3, 0x1339: 0x0188, 0x133a: 0x01a6, 0x133b: 0x01a9,
+       0x133c: 0x01ac, 0x133d: 0x01af, 0x133e: 0x01b2, 0x133f: 0x01b5,
+       // Block 0x4d, offset 0x1340
+       0x1340: 0x01fd, 0x1341: 0x0200, 0x1342: 0x0203, 0x1343: 0x045b, 0x1344: 0x01c7, 0x1345: 0x01d0,
+       0x1346: 0x01d6, 0x1347: 0x01fa, 0x1348: 0x01eb, 0x1349: 0x01e8, 0x134a: 0x0206, 0x134b: 0x0209,
+       0x134e: 0x0021, 0x134f: 0x0023, 0x1350: 0x0025, 0x1351: 0x0027,
+       0x1352: 0x0029, 0x1353: 0x002b, 0x1354: 0x002d, 0x1355: 0x002f, 0x1356: 0x0031, 0x1357: 0x0033,
+       0x1358: 0x0021, 0x1359: 0x0023, 0x135a: 0x0025, 0x135b: 0x0027, 0x135c: 0x0029, 0x135d: 0x002b,
+       0x135e: 0x002d, 0x135f: 0x002f, 0x1360: 0x0031, 0x1361: 0x0033, 0x1362: 0x0021, 0x1363: 0x0023,
+       0x1364: 0x0025, 0x1365: 0x0027, 0x1366: 0x0029, 0x1367: 0x002b, 0x1368: 0x002d, 0x1369: 0x002f,
+       0x136a: 0x0031, 0x136b: 0x0033, 0x136c: 0x0021, 0x136d: 0x0023, 0x136e: 0x0025, 0x136f: 0x0027,
+       0x1370: 0x0029, 0x1371: 0x002b, 0x1372: 0x002d, 0x1373: 0x002f, 0x1374: 0x0031, 0x1375: 0x0033,
+       0x1376: 0x0021, 0x1377: 0x0023, 0x1378: 0x0025, 0x1379: 0x0027, 0x137a: 0x0029, 0x137b: 0x002b,
+       0x137c: 0x002d, 0x137d: 0x002f, 0x137e: 0x0031, 0x137f: 0x0033,
+       // Block 0x4e, offset 0x1380
+       0x1380: 0x0239, 0x1381: 0x023c, 0x1382: 0x0248, 0x1383: 0x0251, 0x1385: 0x028a,
+       0x1386: 0x025a, 0x1387: 0x024b, 0x1388: 0x0269, 0x1389: 0x0290, 0x138a: 0x027b, 0x138b: 0x027e,
+       0x138c: 0x0281, 0x138d: 0x0284, 0x138e: 0x025d, 0x138f: 0x026f, 0x1390: 0x0275, 0x1391: 0x0263,
+       0x1392: 0x0278, 0x1393: 0x0257, 0x1394: 0x0260, 0x1395: 0x0242, 0x1396: 0x0245, 0x1397: 0x024e,
+       0x1398: 0x0254, 0x1399: 0x0266, 0x139a: 0x026c, 0x139b: 0x0272, 0x139c: 0x0293, 0x139d: 0x02e4,
+       0x139e: 0x02cc, 0x139f: 0x0296, 0x13a1: 0x023c, 0x13a2: 0x0248,
+       0x13a4: 0x0287, 0x13a7: 0x024b, 0x13a9: 0x0290,
+       0x13aa: 0x027b, 0x13ab: 0x027e, 0x13ac: 0x0281, 0x13ad: 0x0284, 0x13ae: 0x025d, 0x13af: 0x026f,
+       0x13b0: 0x0275, 0x13b1: 0x0263, 0x13b2: 0x0278, 0x13b4: 0x0260, 0x13b5: 0x0242,
+       0x13b6: 0x0245, 0x13b7: 0x024e, 0x13b9: 0x0266, 0x13bb: 0x0272,
+       // Block 0x4f, offset 0x13c0
+       0x13c2: 0x0248,
+       0x13c7: 0x024b, 0x13c9: 0x0290, 0x13cb: 0x027e,
+       0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d1: 0x0263,
+       0x13d2: 0x0278, 0x13d4: 0x0260, 0x13d7: 0x024e,
+       0x13d9: 0x0266, 0x13db: 0x0272, 0x13dd: 0x02e4,
+       0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248,
+       0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e8: 0x0269, 0x13e9: 0x0290,
+       0x13ea: 0x027b, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f,
+       0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242,
+       0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fa: 0x026c, 0x13fb: 0x0272,
+       0x13fc: 0x0293, 0x13fe: 0x02cc,
+       // Block 0x50, offset 0x1400
+       0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1404: 0x0287, 0x1405: 0x028a,
+       0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140b: 0x027e,
+       0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263,
+       0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e,
+       0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272,
+       0x1421: 0x023c, 0x1422: 0x0248, 0x1423: 0x0251,
+       0x1425: 0x028a, 0x1426: 0x025a, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290,
+       0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f,
+       0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1433: 0x0257, 0x1434: 0x0260, 0x1435: 0x0242,
+       0x1436: 0x0245, 0x1437: 0x024e, 0x1438: 0x0254, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272,
+       // Block 0x51, offset 0x1440
+       0x1440: 0x1879, 0x1441: 0x1876, 0x1442: 0x187c, 0x1443: 0x18a0, 0x1444: 0x18c4, 0x1445: 0x18e8,
+       0x1446: 0x190c, 0x1447: 0x1915, 0x1448: 0x191b, 0x1449: 0x1921, 0x144a: 0x1927,
+       0x1450: 0x1a8c, 0x1451: 0x1a90,
+       0x1452: 0x1a94, 0x1453: 0x1a98, 0x1454: 0x1a9c, 0x1455: 0x1aa0, 0x1456: 0x1aa4, 0x1457: 0x1aa8,
+       0x1458: 0x1aac, 0x1459: 0x1ab0, 0x145a: 0x1ab4, 0x145b: 0x1ab8, 0x145c: 0x1abc, 0x145d: 0x1ac0,
+       0x145e: 0x1ac4, 0x145f: 0x1ac8, 0x1460: 0x1acc, 0x1461: 0x1ad0, 0x1462: 0x1ad4, 0x1463: 0x1ad8,
+       0x1464: 0x1adc, 0x1465: 0x1ae0, 0x1466: 0x1ae4, 0x1467: 0x1ae8, 0x1468: 0x1aec, 0x1469: 0x1af0,
+       0x146a: 0x271e, 0x146b: 0x0047, 0x146c: 0x0065, 0x146d: 0x193c, 0x146e: 0x19b1,
+       0x1470: 0x0043, 0x1471: 0x0045, 0x1472: 0x0047, 0x1473: 0x0049, 0x1474: 0x004b, 0x1475: 0x004d,
+       0x1476: 0x004f, 0x1477: 0x0051, 0x1478: 0x0053, 0x1479: 0x0055, 0x147a: 0x0057, 0x147b: 0x0059,
+       0x147c: 0x005b, 0x147d: 0x005d, 0x147e: 0x005f, 0x147f: 0x0061,
+       // Block 0x52, offset 0x1480
+       0x1480: 0x26ad, 0x1481: 0x26c2, 0x1482: 0x0503,
+       0x1490: 0x0c0f, 0x1491: 0x0a47,
+       0x1492: 0x08d3, 0x1493: 0x45c4, 0x1494: 0x071b, 0x1495: 0x09ef, 0x1496: 0x132f, 0x1497: 0x09ff,
+       0x1498: 0x0727, 0x1499: 0x0cd7, 0x149a: 0x0eaf, 0x149b: 0x0caf, 0x149c: 0x0827, 0x149d: 0x0b6b,
+       0x149e: 0x07bf, 0x149f: 0x0cb7, 0x14a0: 0x0813, 0x14a1: 0x1117, 0x14a2: 0x0f83, 0x14a3: 0x138b,
+       0x14a4: 0x09d3, 0x14a5: 0x090b, 0x14a6: 0x0e63, 0x14a7: 0x0c1b, 0x14a8: 0x0c47, 0x14a9: 0x06bf,
+       0x14aa: 0x06cb, 0x14ab: 0x140b, 0x14ac: 0x0adb, 0x14ad: 0x06e7, 0x14ae: 0x08ef, 0x14af: 0x0c3b,
+       0x14b0: 0x13b3, 0x14b1: 0x0c13, 0x14b2: 0x106f, 0x14b3: 0x10ab, 0x14b4: 0x08f7, 0x14b5: 0x0e43,
+       0x14b6: 0x0d0b, 0x14b7: 0x0d07, 0x14b8: 0x0f97, 0x14b9: 0x082b, 0x14ba: 0x0957, 0x14bb: 0x1443,
+       // Block 0x53, offset 0x14c0
+       0x14c0: 0x06fb, 0x14c1: 0x06f3, 0x14c2: 0x0703, 0x14c3: 0x1647, 0x14c4: 0x0747, 0x14c5: 0x0757,
+       0x14c6: 0x075b, 0x14c7: 0x0763, 0x14c8: 0x076b, 0x14c9: 0x076f, 0x14ca: 0x077b, 0x14cb: 0x0773,
+       0x14cc: 0x05b3, 0x14cd: 0x165b, 0x14ce: 0x078f, 0x14cf: 0x0793, 0x14d0: 0x0797, 0x14d1: 0x07b3,
+       0x14d2: 0x164c, 0x14d3: 0x05b7, 0x14d4: 0x079f, 0x14d5: 0x07bf, 0x14d6: 0x1656, 0x14d7: 0x07cf,
+       0x14d8: 0x07d7, 0x14d9: 0x0737, 0x14da: 0x07df, 0x14db: 0x07e3, 0x14dc: 0x1831, 0x14dd: 0x07ff,
+       0x14de: 0x0807, 0x14df: 0x05bf, 0x14e0: 0x081f, 0x14e1: 0x0823, 0x14e2: 0x082b, 0x14e3: 0x082f,
+       0x14e4: 0x05c3, 0x14e5: 0x0847, 0x14e6: 0x084b, 0x14e7: 0x0857, 0x14e8: 0x0863, 0x14e9: 0x0867,
+       0x14ea: 0x086b, 0x14eb: 0x0873, 0x14ec: 0x0893, 0x14ed: 0x0897, 0x14ee: 0x089f, 0x14ef: 0x08af,
+       0x14f0: 0x08b7, 0x14f1: 0x08bb, 0x14f2: 0x08bb, 0x14f3: 0x08bb, 0x14f4: 0x166a, 0x14f5: 0x0e93,
+       0x14f6: 0x08cf, 0x14f7: 0x08d7, 0x14f8: 0x166f, 0x14f9: 0x08e3, 0x14fa: 0x08eb, 0x14fb: 0x08f3,
+       0x14fc: 0x091b, 0x14fd: 0x0907, 0x14fe: 0x0913, 0x14ff: 0x0917,
+       // Block 0x54, offset 0x1500
+       0x1500: 0x091f, 0x1501: 0x0927, 0x1502: 0x092b, 0x1503: 0x0933, 0x1504: 0x093b, 0x1505: 0x093f,
+       0x1506: 0x093f, 0x1507: 0x0947, 0x1508: 0x094f, 0x1509: 0x0953, 0x150a: 0x095f, 0x150b: 0x0983,
+       0x150c: 0x0967, 0x150d: 0x0987, 0x150e: 0x096b, 0x150f: 0x0973, 0x1510: 0x080b, 0x1511: 0x09cf,
+       0x1512: 0x0997, 0x1513: 0x099b, 0x1514: 0x099f, 0x1515: 0x0993, 0x1516: 0x09a7, 0x1517: 0x09a3,
+       0x1518: 0x09bb, 0x1519: 0x1674, 0x151a: 0x09d7, 0x151b: 0x09db, 0x151c: 0x09e3, 0x151d: 0x09ef,
+       0x151e: 0x09f7, 0x151f: 0x0a13, 0x1520: 0x1679, 0x1521: 0x167e, 0x1522: 0x0a1f, 0x1523: 0x0a23,
+       0x1524: 0x0a27, 0x1525: 0x0a1b, 0x1526: 0x0a2f, 0x1527: 0x05c7, 0x1528: 0x05cb, 0x1529: 0x0a37,
+       0x152a: 0x0a3f, 0x152b: 0x0a3f, 0x152c: 0x1683, 0x152d: 0x0a5b, 0x152e: 0x0a5f, 0x152f: 0x0a63,
+       0x1530: 0x0a6b, 0x1531: 0x1688, 0x1532: 0x0a73, 0x1533: 0x0a77, 0x1534: 0x0b4f, 0x1535: 0x0a7f,
+       0x1536: 0x05cf, 0x1537: 0x0a8b, 0x1538: 0x0a9b, 0x1539: 0x0aa7, 0x153a: 0x0aa3, 0x153b: 0x1692,
+       0x153c: 0x0aaf, 0x153d: 0x1697, 0x153e: 0x0abb, 0x153f: 0x0ab7,
+       // Block 0x55, offset 0x1540
+       0x1540: 0x0abf, 0x1541: 0x0acf, 0x1542: 0x0ad3, 0x1543: 0x05d3, 0x1544: 0x0ae3, 0x1545: 0x0aeb,
+       0x1546: 0x0aef, 0x1547: 0x0af3, 0x1548: 0x05d7, 0x1549: 0x169c, 0x154a: 0x05db, 0x154b: 0x0b0f,
+       0x154c: 0x0b13, 0x154d: 0x0b17, 0x154e: 0x0b1f, 0x154f: 0x1863, 0x1550: 0x0b37, 0x1551: 0x16a6,
+       0x1552: 0x16a6, 0x1553: 0x11d7, 0x1554: 0x0b47, 0x1555: 0x0b47, 0x1556: 0x05df, 0x1557: 0x16c9,
+       0x1558: 0x179b, 0x1559: 0x0b57, 0x155a: 0x0b5f, 0x155b: 0x05e3, 0x155c: 0x0b73, 0x155d: 0x0b83,
+       0x155e: 0x0b87, 0x155f: 0x0b8f, 0x1560: 0x0b9f, 0x1561: 0x05eb, 0x1562: 0x05e7, 0x1563: 0x0ba3,
+       0x1564: 0x16ab, 0x1565: 0x0ba7, 0x1566: 0x0bbb, 0x1567: 0x0bbf, 0x1568: 0x0bc3, 0x1569: 0x0bbf,
+       0x156a: 0x0bcf, 0x156b: 0x0bd3, 0x156c: 0x0be3, 0x156d: 0x0bdb, 0x156e: 0x0bdf, 0x156f: 0x0be7,
+       0x1570: 0x0beb, 0x1571: 0x0bef, 0x1572: 0x0bfb, 0x1573: 0x0bff, 0x1574: 0x0c17, 0x1575: 0x0c1f,
+       0x1576: 0x0c2f, 0x1577: 0x0c43, 0x1578: 0x16ba, 0x1579: 0x0c3f, 0x157a: 0x0c33, 0x157b: 0x0c4b,
+       0x157c: 0x0c53, 0x157d: 0x0c67, 0x157e: 0x16bf, 0x157f: 0x0c6f,
+       // Block 0x56, offset 0x1580
+       0x1580: 0x0c63, 0x1581: 0x0c5b, 0x1582: 0x05ef, 0x1583: 0x0c77, 0x1584: 0x0c7f, 0x1585: 0x0c87,
+       0x1586: 0x0c7b, 0x1587: 0x05f3, 0x1588: 0x0c97, 0x1589: 0x0c9f, 0x158a: 0x16c4, 0x158b: 0x0ccb,
+       0x158c: 0x0cff, 0x158d: 0x0cdb, 0x158e: 0x05ff, 0x158f: 0x0ce7, 0x1590: 0x05fb, 0x1591: 0x05f7,
+       0x1592: 0x07c3, 0x1593: 0x07c7, 0x1594: 0x0d03, 0x1595: 0x0ceb, 0x1596: 0x11ab, 0x1597: 0x0663,
+       0x1598: 0x0d0f, 0x1599: 0x0d13, 0x159a: 0x0d17, 0x159b: 0x0d2b, 0x159c: 0x0d23, 0x159d: 0x16dd,
+       0x159e: 0x0603, 0x159f: 0x0d3f, 0x15a0: 0x0d33, 0x15a1: 0x0d4f, 0x15a2: 0x0d57, 0x15a3: 0x16e7,
+       0x15a4: 0x0d5b, 0x15a5: 0x0d47, 0x15a6: 0x0d63, 0x15a7: 0x0607, 0x15a8: 0x0d67, 0x15a9: 0x0d6b,
+       0x15aa: 0x0d6f, 0x15ab: 0x0d7b, 0x15ac: 0x16ec, 0x15ad: 0x0d83, 0x15ae: 0x060b, 0x15af: 0x0d8f,
+       0x15b0: 0x16f1, 0x15b1: 0x0d93, 0x15b2: 0x060f, 0x15b3: 0x0d9f, 0x15b4: 0x0dab, 0x15b5: 0x0db7,
+       0x15b6: 0x0dbb, 0x15b7: 0x16f6, 0x15b8: 0x168d, 0x15b9: 0x16fb, 0x15ba: 0x0ddb, 0x15bb: 0x1700,
+       0x15bc: 0x0de7, 0x15bd: 0x0def, 0x15be: 0x0ddf, 0x15bf: 0x0dfb,
+       // Block 0x57, offset 0x15c0
+       0x15c0: 0x0e0b, 0x15c1: 0x0e1b, 0x15c2: 0x0e0f, 0x15c3: 0x0e13, 0x15c4: 0x0e1f, 0x15c5: 0x0e23,
+       0x15c6: 0x1705, 0x15c7: 0x0e07, 0x15c8: 0x0e3b, 0x15c9: 0x0e3f, 0x15ca: 0x0613, 0x15cb: 0x0e53,
+       0x15cc: 0x0e4f, 0x15cd: 0x170a, 0x15ce: 0x0e33, 0x15cf: 0x0e6f, 0x15d0: 0x170f, 0x15d1: 0x1714,
+       0x15d2: 0x0e73, 0x15d3: 0x0e87, 0x15d4: 0x0e83, 0x15d5: 0x0e7f, 0x15d6: 0x0617, 0x15d7: 0x0e8b,
+       0x15d8: 0x0e9b, 0x15d9: 0x0e97, 0x15da: 0x0ea3, 0x15db: 0x1651, 0x15dc: 0x0eb3, 0x15dd: 0x1719,
+       0x15de: 0x0ebf, 0x15df: 0x1723, 0x15e0: 0x0ed3, 0x15e1: 0x0edf, 0x15e2: 0x0ef3, 0x15e3: 0x1728,
+       0x15e4: 0x0f07, 0x15e5: 0x0f0b, 0x15e6: 0x172d, 0x15e7: 0x1732, 0x15e8: 0x0f27, 0x15e9: 0x0f37,
+       0x15ea: 0x061b, 0x15eb: 0x0f3b, 0x15ec: 0x061f, 0x15ed: 0x061f, 0x15ee: 0x0f53, 0x15ef: 0x0f57,
+       0x15f0: 0x0f5f, 0x15f1: 0x0f63, 0x15f2: 0x0f6f, 0x15f3: 0x0623, 0x15f4: 0x0f87, 0x15f5: 0x1737,
+       0x15f6: 0x0fa3, 0x15f7: 0x173c, 0x15f8: 0x0faf, 0x15f9: 0x16a1, 0x15fa: 0x0fbf, 0x15fb: 0x1741,
+       0x15fc: 0x1746, 0x15fd: 0x174b, 0x15fe: 0x0627, 0x15ff: 0x062b,
+       // Block 0x58, offset 0x1600
+       0x1600: 0x0ff7, 0x1601: 0x1755, 0x1602: 0x1750, 0x1603: 0x175a, 0x1604: 0x175f, 0x1605: 0x0fff,
+       0x1606: 0x1003, 0x1607: 0x1003, 0x1608: 0x100b, 0x1609: 0x0633, 0x160a: 0x100f, 0x160b: 0x0637,
+       0x160c: 0x063b, 0x160d: 0x1769, 0x160e: 0x1023, 0x160f: 0x102b, 0x1610: 0x1037, 0x1611: 0x063f,
+       0x1612: 0x176e, 0x1613: 0x105b, 0x1614: 0x1773, 0x1615: 0x1778, 0x1616: 0x107b, 0x1617: 0x1093,
+       0x1618: 0x0643, 0x1619: 0x109b, 0x161a: 0x109f, 0x161b: 0x10a3, 0x161c: 0x177d, 0x161d: 0x1782,
+       0x161e: 0x1782, 0x161f: 0x10bb, 0x1620: 0x0647, 0x1621: 0x1787, 0x1622: 0x10cf, 0x1623: 0x10d3,
+       0x1624: 0x064b, 0x1625: 0x178c, 0x1626: 0x10ef, 0x1627: 0x064f, 0x1628: 0x10ff, 0x1629: 0x10f7,
+       0x162a: 0x1107, 0x162b: 0x1796, 0x162c: 0x111f, 0x162d: 0x0653, 0x162e: 0x112b, 0x162f: 0x1133,
+       0x1630: 0x1143, 0x1631: 0x0657, 0x1632: 0x17a0, 0x1633: 0x17a5, 0x1634: 0x065b, 0x1635: 0x17aa,
+       0x1636: 0x115b, 0x1637: 0x17af, 0x1638: 0x1167, 0x1639: 0x1173, 0x163a: 0x117b, 0x163b: 0x17b4,
+       0x163c: 0x17b9, 0x163d: 0x118f, 0x163e: 0x17be, 0x163f: 0x1197,
+       // Block 0x59, offset 0x1640
+       0x1640: 0x16ce, 0x1641: 0x065f, 0x1642: 0x11af, 0x1643: 0x11b3, 0x1644: 0x0667, 0x1645: 0x11b7,
+       0x1646: 0x0a33, 0x1647: 0x17c3, 0x1648: 0x17c8, 0x1649: 0x16d3, 0x164a: 0x16d8, 0x164b: 0x11d7,
+       0x164c: 0x11db, 0x164d: 0x13f3, 0x164e: 0x066b, 0x164f: 0x1207, 0x1650: 0x1203, 0x1651: 0x120b,
+       0x1652: 0x083f, 0x1653: 0x120f, 0x1654: 0x1213, 0x1655: 0x1217, 0x1656: 0x121f, 0x1657: 0x17cd,
+       0x1658: 0x121b, 0x1659: 0x1223, 0x165a: 0x1237, 0x165b: 0x123b, 0x165c: 0x1227, 0x165d: 0x123f,
+       0x165e: 0x1253, 0x165f: 0x1267, 0x1660: 0x1233, 0x1661: 0x1247, 0x1662: 0x124b, 0x1663: 0x124f,
+       0x1664: 0x17d2, 0x1665: 0x17dc, 0x1666: 0x17d7, 0x1667: 0x066f, 0x1668: 0x126f, 0x1669: 0x1273,
+       0x166a: 0x127b, 0x166b: 0x17f0, 0x166c: 0x127f, 0x166d: 0x17e1, 0x166e: 0x0673, 0x166f: 0x0677,
+       0x1670: 0x17e6, 0x1671: 0x17eb, 0x1672: 0x067b, 0x1673: 0x129f, 0x1674: 0x12a3, 0x1675: 0x12a7,
+       0x1676: 0x12ab, 0x1677: 0x12b7, 0x1678: 0x12b3, 0x1679: 0x12bf, 0x167a: 0x12bb, 0x167b: 0x12cb,
+       0x167c: 0x12c3, 0x167d: 0x12c7, 0x167e: 0x12cf, 0x167f: 0x067f,
+       // Block 0x5a, offset 0x1680
+       0x1680: 0x12d7, 0x1681: 0x12db, 0x1682: 0x0683, 0x1683: 0x12eb, 0x1684: 0x12ef, 0x1685: 0x17f5,
+       0x1686: 0x12fb, 0x1687: 0x12ff, 0x1688: 0x0687, 0x1689: 0x130b, 0x168a: 0x05bb, 0x168b: 0x17fa,
+       0x168c: 0x17ff, 0x168d: 0x068b, 0x168e: 0x068f, 0x168f: 0x1337, 0x1690: 0x134f, 0x1691: 0x136b,
+       0x1692: 0x137b, 0x1693: 0x1804, 0x1694: 0x138f, 0x1695: 0x1393, 0x1696: 0x13ab, 0x1697: 0x13b7,
+       0x1698: 0x180e, 0x1699: 0x1660, 0x169a: 0x13c3, 0x169b: 0x13bf, 0x169c: 0x13cb, 0x169d: 0x1665,
+       0x169e: 0x13d7, 0x169f: 0x13e3, 0x16a0: 0x1813, 0x16a1: 0x1818, 0x16a2: 0x1423, 0x16a3: 0x142f,
+       0x16a4: 0x1437, 0x16a5: 0x181d, 0x16a6: 0x143b, 0x16a7: 0x1467, 0x16a8: 0x1473, 0x16a9: 0x1477,
+       0x16aa: 0x146f, 0x16ab: 0x1483, 0x16ac: 0x1487, 0x16ad: 0x1822, 0x16ae: 0x1493, 0x16af: 0x0693,
+       0x16b0: 0x149b, 0x16b1: 0x1827, 0x16b2: 0x0697, 0x16b3: 0x14d3, 0x16b4: 0x0ac3, 0x16b5: 0x14eb,
+       0x16b6: 0x182c, 0x16b7: 0x1836, 0x16b8: 0x069b, 0x16b9: 0x069f, 0x16ba: 0x1513, 0x16bb: 0x183b,
+       0x16bc: 0x06a3, 0x16bd: 0x1840, 0x16be: 0x152b, 0x16bf: 0x152b,
+       // Block 0x5b, offset 0x16c0
+       0x16c0: 0x1533, 0x16c1: 0x1845, 0x16c2: 0x154b, 0x16c3: 0x06a7, 0x16c4: 0x155b, 0x16c5: 0x1567,
+       0x16c6: 0x156f, 0x16c7: 0x1577, 0x16c8: 0x06ab, 0x16c9: 0x184a, 0x16ca: 0x158b, 0x16cb: 0x15a7,
+       0x16cc: 0x15b3, 0x16cd: 0x06af, 0x16ce: 0x06b3, 0x16cf: 0x15b7, 0x16d0: 0x184f, 0x16d1: 0x06b7,
+       0x16d2: 0x1854, 0x16d3: 0x1859, 0x16d4: 0x185e, 0x16d5: 0x15db, 0x16d6: 0x06bb, 0x16d7: 0x15ef,
+       0x16d8: 0x15f7, 0x16d9: 0x15fb, 0x16da: 0x1603, 0x16db: 0x160b, 0x16dc: 0x1613, 0x16dd: 0x1868,
+}
+
+// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes
+// Block 0 is the zero block.
+var nfkcIndex = [1408]uint8{
+       // Block 0x0, offset 0x0
+       // Block 0x1, offset 0x40
+       // Block 0x2, offset 0x80
+       // Block 0x3, offset 0xc0
+       0xc2: 0x5a, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5b, 0xc7: 0x04,
+       0xc8: 0x05, 0xca: 0x5c, 0xcb: 0x5d, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09,
+       0xd0: 0x0a, 0xd1: 0x5e, 0xd2: 0x5f, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x60,
+       0xd8: 0x61, 0xd9: 0x0d, 0xdb: 0x62, 0xdc: 0x63, 0xdd: 0x64, 0xdf: 0x65,
+       0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
+       0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a,
+       0xf0: 0x13,
+       // Block 0x4, offset 0x100
+       0x120: 0x66, 0x121: 0x67, 0x123: 0x68, 0x124: 0x69, 0x125: 0x6a, 0x126: 0x6b, 0x127: 0x6c,
+       0x128: 0x6d, 0x129: 0x6e, 0x12a: 0x6f, 0x12b: 0x70, 0x12c: 0x6b, 0x12d: 0x71, 0x12e: 0x72, 0x12f: 0x73,
+       0x131: 0x74, 0x132: 0x75, 0x133: 0x76, 0x134: 0x77, 0x135: 0x78, 0x137: 0x79,
+       0x138: 0x7a, 0x139: 0x7b, 0x13a: 0x7c, 0x13b: 0x7d, 0x13c: 0x7e, 0x13d: 0x7f, 0x13e: 0x80, 0x13f: 0x81,
+       // Block 0x5, offset 0x140
+       0x140: 0x82, 0x142: 0x83, 0x143: 0x84, 0x144: 0x85, 0x145: 0x86, 0x146: 0x87, 0x147: 0x88,
+       0x14d: 0x89,
+       0x15c: 0x8a, 0x15f: 0x8b,
+       0x162: 0x8c, 0x164: 0x8d,
+       0x168: 0x8e, 0x169: 0x8f, 0x16a: 0x90, 0x16c: 0x0e, 0x16d: 0x91, 0x16e: 0x92, 0x16f: 0x93,
+       0x170: 0x94, 0x173: 0x95, 0x174: 0x96, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x97,
+       0x178: 0x11, 0x179: 0x12, 0x17a: 0x13, 0x17b: 0x14, 0x17c: 0x15, 0x17d: 0x16, 0x17e: 0x17, 0x17f: 0x18,
+       // Block 0x6, offset 0x180
+       0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x19, 0x185: 0x1a, 0x186: 0x9c, 0x187: 0x9d,
+       0x188: 0x9e, 0x189: 0x1b, 0x18a: 0x1c, 0x18b: 0x9f, 0x18c: 0xa0,
+       0x191: 0x1d, 0x192: 0x1e, 0x193: 0xa1,
+       0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4,
+       0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8,
+       0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x1f, 0x1bd: 0x20, 0x1be: 0x21, 0x1bf: 0xab,
+       // Block 0x7, offset 0x1c0
+       0x1c0: 0xac, 0x1c1: 0x22, 0x1c2: 0x23, 0x1c3: 0x24, 0x1c4: 0xad, 0x1c5: 0x25, 0x1c6: 0x26,
+       0x1c8: 0x27, 0x1c9: 0x28, 0x1ca: 0x29, 0x1cb: 0x2a, 0x1cc: 0x2b, 0x1cd: 0x2c, 0x1ce: 0x2d, 0x1cf: 0x2e,
+       // Block 0x8, offset 0x200
+       0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2,
+       0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8,
+       0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc,
+       0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd,
+       0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe,
+       // Block 0x9, offset 0x240
+       0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf,
+       0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0,
+       0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1,
+       0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2,
+       0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3,
+       0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd,
+       0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe,
+       0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf,
+       // Block 0xa, offset 0x280
+       0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0,
+       0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1,
+       0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2,
+       0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3,
+       0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd,
+       0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe,
+       0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf,
+       0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0,
+       // Block 0xb, offset 0x2c0
+       0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1,
+       0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2,
+       0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3,
+       0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4,
+       // Block 0xc, offset 0x300
+       0x324: 0x2f, 0x325: 0x30, 0x326: 0x31, 0x327: 0x32,
+       0x328: 0x33, 0x329: 0x34, 0x32a: 0x35, 0x32b: 0x36, 0x32c: 0x37, 0x32d: 0x38, 0x32e: 0x39, 0x32f: 0x3a,
+       0x330: 0x3b, 0x331: 0x3c, 0x332: 0x3d, 0x333: 0x3e, 0x334: 0x3f, 0x335: 0x40, 0x336: 0x41, 0x337: 0x42,
+       0x338: 0x43, 0x339: 0x44, 0x33a: 0x45, 0x33b: 0x46, 0x33c: 0xc5, 0x33d: 0x47, 0x33e: 0x48, 0x33f: 0x49,
+       // Block 0xd, offset 0x340
+       0x347: 0xc6,
+       0x34b: 0xc7, 0x34d: 0xc8,
+       0x368: 0xc9, 0x36b: 0xca,
+       // Block 0xe, offset 0x380
+       0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce,
+       0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6b, 0x38d: 0xd1,
+       0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6,
+       0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9,
+       0x3b0: 0xd7,
+       // Block 0xf, offset 0x3c0
+       0x3eb: 0xda, 0x3ec: 0xdb,
+       // Block 0x10, offset 0x400
+       0x432: 0xdc,
+       // Block 0x11, offset 0x440
+       0x445: 0xdd, 0x446: 0xde, 0x447: 0xdf,
+       0x449: 0xe0,
+       0x450: 0xe1, 0x451: 0xe2, 0x452: 0xe3, 0x453: 0xe4, 0x454: 0xe5, 0x455: 0xe6, 0x456: 0xe7, 0x457: 0xe8,
+       0x458: 0xe9, 0x459: 0xea, 0x45a: 0x4a, 0x45b: 0xeb, 0x45c: 0xec, 0x45d: 0xed, 0x45e: 0xee, 0x45f: 0x4b,
+       // Block 0x12, offset 0x480
+       0x480: 0xef,
+       0x4a3: 0xf0, 0x4a5: 0xf1,
+       0x4b8: 0x4c, 0x4b9: 0x4d, 0x4ba: 0x4e,
+       // Block 0x13, offset 0x4c0
+       0x4c4: 0x4f, 0x4c5: 0xf2, 0x4c6: 0xf3,
+       0x4c8: 0x50, 0x4c9: 0xf4,
+       // Block 0x14, offset 0x500
+       0x520: 0x51, 0x521: 0x52, 0x522: 0x53, 0x523: 0x54, 0x524: 0x55, 0x525: 0x56, 0x526: 0x57, 0x527: 0x58,
+       0x528: 0x59,
+       // Block 0x15, offset 0x540
+       0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d,
+       0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11,
+       0x56f: 0x12,
+}
+
+// nfkcSparseOffset: 155 entries, 310 bytes
+var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x87, 0x8f, 0x96, 0x99, 0xa0, 0xa4, 0xa8, 0xaa, 0xac, 0xb5, 0xb9, 0xc0, 0xc5, 0xc8, 0xd2, 0xd4, 0xdb, 0xe3, 0xe7, 0xe9, 0xec, 0xf0, 0xf6, 0x107, 0x113, 0x115, 0x11b, 0x11d, 0x11f, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12c, 0x12f, 0x131, 0x134, 0x137, 0x13b, 0x140, 0x149, 0x14b, 0x14e, 0x150, 0x15b, 0x166, 0x176, 0x184, 0x192, 0x1a2, 0x1b0, 0x1b7, 0x1bd, 0x1cc, 0x1d0, 0x1d2, 0x1d6, 0x1d8, 0x1db, 0x1dd, 0x1e0, 0x1e2, 0x1e5, 0x1e7, 0x1e9, 0x1eb, 0x1f7, 0x201, 0x20b, 0x20e, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21d, 0x21f, 0x221, 0x223, 0x225, 0x22b, 0x22e, 0x232, 0x234, 0x23b, 0x241, 0x247, 0x24f, 0x255, 0x25b, 0x261, 0x265, 0x267, 0x269, 0x26b, 0x26d, 0x273, 0x276, 0x279, 0x281, 0x288, 0x28b, 0x28e, 0x290, 0x298, 0x29b, 0x2a2, 0x2a5, 0x2ab, 0x2ad, 0x2af, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2c7, 0x2d1, 0x2d3, 0x2d5, 0x2d9, 0x2de, 0x2ea, 0x2ef, 0x2f8, 0x2fe, 0x303, 0x307, 0x30c, 0x310, 0x320, 0x32e, 0x33c, 0x34a, 0x350, 0x352, 0x355, 0x35f, 0x361}
+
+// nfkcSparseValues: 875 entries, 3500 bytes
+var nfkcSparseValues = [875]valueRange{
+       // Block 0x0, offset 0x0
+       {value: 0x0002, lo: 0x0d},
+       {value: 0x0001, lo: 0xa0, hi: 0xa0},
+       {value: 0x4278, lo: 0xa8, hi: 0xa8},
+       {value: 0x0083, lo: 0xaa, hi: 0xaa},
+       {value: 0x4264, lo: 0xaf, hi: 0xaf},
+       {value: 0x0025, lo: 0xb2, hi: 0xb3},
+       {value: 0x425a, lo: 0xb4, hi: 0xb4},
+       {value: 0x01dc, lo: 0xb5, hi: 0xb5},
+       {value: 0x4291, lo: 0xb8, hi: 0xb8},
+       {value: 0x0023, lo: 0xb9, hi: 0xb9},
+       {value: 0x009f, lo: 0xba, hi: 0xba},
+       {value: 0x221c, lo: 0xbc, hi: 0xbc},
+       {value: 0x2210, lo: 0xbd, hi: 0xbd},
+       {value: 0x22b2, lo: 0xbe, hi: 0xbe},
+       // Block 0x1, offset 0xe
+       {value: 0x0091, lo: 0x03},
+       {value: 0x46e2, lo: 0xa0, hi: 0xa1},
+       {value: 0x4714, lo: 0xaf, hi: 0xb0},
+       {value: 0xa000, lo: 0xb7, hi: 0xb7},
+       // Block 0x2, offset 0x12
+       {value: 0x0003, lo: 0x08},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       {value: 0x0091, lo: 0xb0, hi: 0xb0},
+       {value: 0x0119, lo: 0xb1, hi: 0xb1},
+       {value: 0x0095, lo: 0xb2, hi: 0xb2},
+       {value: 0x00a5, lo: 0xb3, hi: 0xb3},
+       {value: 0x0143, lo: 0xb4, hi: 0xb6},
+       {value: 0x00af, lo: 0xb7, hi: 0xb7},
+       {value: 0x00b3, lo: 0xb8, hi: 0xb8},
+       // Block 0x3, offset 0x1b
+       {value: 0x000a, lo: 0x09},
+       {value: 0x426e, lo: 0x98, hi: 0x98},
+       {value: 0x4273, lo: 0x99, hi: 0x9a},
+       {value: 0x4296, lo: 0x9b, hi: 0x9b},
+       {value: 0x425f, lo: 0x9c, hi: 0x9c},
+       {value: 0x4282, lo: 0x9d, hi: 0x9d},
+       {value: 0x0113, lo: 0xa0, hi: 0xa0},
+       {value: 0x0099, lo: 0xa1, hi: 0xa1},
+       {value: 0x00a7, lo: 0xa2, hi: 0xa3},
+       {value: 0x0167, lo: 0xa4, hi: 0xa4},
+       // Block 0x4, offset 0x25
+       {value: 0x0000, lo: 0x0f},
+       {value: 0xa000, lo: 0x83, hi: 0x83},
+       {value: 0xa000, lo: 0x87, hi: 0x87},
+       {value: 0xa000, lo: 0x8b, hi: 0x8b},
+       {value: 0xa000, lo: 0x8d, hi: 0x8d},
+       {value: 0x37a5, lo: 0x90, hi: 0x90},
+       {value: 0x37b1, lo: 0x91, hi: 0x91},
+       {value: 0x379f, lo: 0x93, hi: 0x93},
+       {value: 0xa000, lo: 0x96, hi: 0x96},
+       {value: 0x3817, lo: 0x97, hi: 0x97},
+       {value: 0x37e1, lo: 0x9c, hi: 0x9c},
+       {value: 0x37c9, lo: 0x9d, hi: 0x9d},
+       {value: 0x37f3, lo: 0x9e, hi: 0x9e},
+       {value: 0xa000, lo: 0xb4, hi: 0xb5},
+       {value: 0x381d, lo: 0xb6, hi: 0xb6},
+       {value: 0x3823, lo: 0xb7, hi: 0xb7},
+       // Block 0x5, offset 0x35
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0x83, hi: 0x87},
+       // Block 0x6, offset 0x37
+       {value: 0x0001, lo: 0x04},
+       {value: 0x8113, lo: 0x81, hi: 0x82},
+       {value: 0x8132, lo: 0x84, hi: 0x84},
+       {value: 0x812d, lo: 0x85, hi: 0x85},
+       {value: 0x810d, lo: 0x87, hi: 0x87},
+       // Block 0x7, offset 0x3c
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x8132, lo: 0x90, hi: 0x97},
+       {value: 0x8119, lo: 0x98, hi: 0x98},
+       {value: 0x811a, lo: 0x99, hi: 0x99},
+       {value: 0x811b, lo: 0x9a, hi: 0x9a},
+       {value: 0x3841, lo: 0xa2, hi: 0xa2},
+       {value: 0x3847, lo: 0xa3, hi: 0xa3},
+       {value: 0x3853, lo: 0xa4, hi: 0xa4},
+       {value: 0x384d, lo: 0xa5, hi: 0xa5},
+       {value: 0x3859, lo: 0xa6, hi: 0xa6},
+       {value: 0xa000, lo: 0xa7, hi: 0xa7},
+       // Block 0x8, offset 0x47
+       {value: 0x0000, lo: 0x0e},
+       {value: 0x386b, lo: 0x80, hi: 0x80},
+       {value: 0xa000, lo: 0x81, hi: 0x81},
+       {value: 0x385f, lo: 0x82, hi: 0x82},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       {value: 0x3865, lo: 0x93, hi: 0x93},
+       {value: 0xa000, lo: 0x95, hi: 0x95},
+       {value: 0x8132, lo: 0x96, hi: 0x9c},
+       {value: 0x8132, lo: 0x9f, hi: 0xa2},
+       {value: 0x812d, lo: 0xa3, hi: 0xa3},
+       {value: 0x8132, lo: 0xa4, hi: 0xa4},
+       {value: 0x8132, lo: 0xa7, hi: 0xa8},
+       {value: 0x812d, lo: 0xaa, hi: 0xaa},
+       {value: 0x8132, lo: 0xab, hi: 0xac},
+       {value: 0x812d, lo: 0xad, hi: 0xad},
+       // Block 0x9, offset 0x56
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x811f, lo: 0x91, hi: 0x91},
+       {value: 0x8132, lo: 0xb0, hi: 0xb0},
+       {value: 0x812d, lo: 0xb1, hi: 0xb1},
+       {value: 0x8132, lo: 0xb2, hi: 0xb3},
+       {value: 0x812d, lo: 0xb4, hi: 0xb4},
+       {value: 0x8132, lo: 0xb5, hi: 0xb6},
+       {value: 0x812d, lo: 0xb7, hi: 0xb9},
+       {value: 0x8132, lo: 0xba, hi: 0xba},
+       {value: 0x812d, lo: 0xbb, hi: 0xbc},
+       {value: 0x8132, lo: 0xbd, hi: 0xbd},
+       {value: 0x812d, lo: 0xbe, hi: 0xbe},
+       {value: 0x8132, lo: 0xbf, hi: 0xbf},
+       // Block 0xa, offset 0x63
+       {value: 0x0005, lo: 0x07},
+       {value: 0x8132, lo: 0x80, hi: 0x80},
+       {value: 0x8132, lo: 0x81, hi: 0x81},
+       {value: 0x812d, lo: 0x82, hi: 0x83},
+       {value: 0x812d, lo: 0x84, hi: 0x85},
+       {value: 0x812d, lo: 0x86, hi: 0x87},
+       {value: 0x812d, lo: 0x88, hi: 0x89},
+       {value: 0x8132, lo: 0x8a, hi: 0x8a},
+       // Block 0xb, offset 0x6b
+       {value: 0x0000, lo: 0x03},
+       {value: 0x8132, lo: 0xab, hi: 0xb1},
+       {value: 0x812d, lo: 0xb2, hi: 0xb2},
+       {value: 0x8132, lo: 0xb3, hi: 0xb3},
+       // Block 0xc, offset 0x6f
+       {value: 0x0000, lo: 0x04},
+       {value: 0x8132, lo: 0x96, hi: 0x99},
+       {value: 0x8132, lo: 0x9b, hi: 0xa3},
+       {value: 0x8132, lo: 0xa5, hi: 0xa7},
+       {value: 0x8132, lo: 0xa9, hi: 0xad},
+       // Block 0xd, offset 0x74
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0x99, hi: 0x9b},
+       // Block 0xe, offset 0x76
+       {value: 0x0000, lo: 0x10},
+       {value: 0x8132, lo: 0x94, hi: 0xa1},
+       {value: 0x812d, lo: 0xa3, hi: 0xa3},
+       {value: 0x8132, lo: 0xa4, hi: 0xa5},
+       {value: 0x812d, lo: 0xa6, hi: 0xa6},
+       {value: 0x8132, lo: 0xa7, hi: 0xa8},
+       {value: 0x812d, lo: 0xa9, hi: 0xa9},
+       {value: 0x8132, lo: 0xaa, hi: 0xac},
+       {value: 0x812d, lo: 0xad, hi: 0xaf},
+       {value: 0x8116, lo: 0xb0, hi: 0xb0},
+       {value: 0x8117, lo: 0xb1, hi: 0xb1},
+       {value: 0x8118, lo: 0xb2, hi: 0xb2},
+       {value: 0x8132, lo: 0xb3, hi: 0xb5},
+       {value: 0x812d, lo: 0xb6, hi: 0xb6},
+       {value: 0x8132, lo: 0xb7, hi: 0xb8},
+       {value: 0x812d, lo: 0xb9, hi: 0xba},
+       {value: 0x8132, lo: 0xbb, hi: 0xbf},
+       // Block 0xf, offset 0x87
+       {value: 0x0000, lo: 0x07},
+       {value: 0xa000, lo: 0xa8, hi: 0xa8},
+       {value: 0x3ed8, lo: 0xa9, hi: 0xa9},
+       {value: 0xa000, lo: 0xb0, hi: 0xb0},
+       {value: 0x3ee0, lo: 0xb1, hi: 0xb1},
+       {value: 0xa000, lo: 0xb3, hi: 0xb3},
+       {value: 0x3ee8, lo: 0xb4, hi: 0xb4},
+       {value: 0x9902, lo: 0xbc, hi: 0xbc},
+       // Block 0x10, offset 0x8f
+       {value: 0x0008, lo: 0x06},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x8132, lo: 0x91, hi: 0x91},
+       {value: 0x812d, lo: 0x92, hi: 0x92},
+       {value: 0x8132, lo: 0x93, hi: 0x93},
+       {value: 0x8132, lo: 0x94, hi: 0x94},
+       {value: 0x451c, lo: 0x98, hi: 0x9f},
+       // Block 0x11, offset 0x96
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8102, lo: 0xbc, hi: 0xbc},
+       {value: 0x9900, lo: 0xbe, hi: 0xbe},
+       // Block 0x12, offset 0x99
+       {value: 0x0008, lo: 0x06},
+       {value: 0xa000, lo: 0x87, hi: 0x87},
+       {value: 0x2c9e, lo: 0x8b, hi: 0x8c},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x97, hi: 0x97},
+       {value: 0x455c, lo: 0x9c, hi: 0x9d},
+       {value: 0x456c, lo: 0x9f, hi: 0x9f},
+       // Block 0x13, offset 0xa0
+       {value: 0x0000, lo: 0x03},
+       {value: 0x4594, lo: 0xb3, hi: 0xb3},
+       {value: 0x459c, lo: 0xb6, hi: 0xb6},
+       {value: 0x8102, lo: 0xbc, hi: 0xbc},
+       // Block 0x14, offset 0xa4
+       {value: 0x0008, lo: 0x03},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x4574, lo: 0x99, hi: 0x9b},
+       {value: 0x458c, lo: 0x9e, hi: 0x9e},
+       // Block 0x15, offset 0xa8
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8102, lo: 0xbc, hi: 0xbc},
+       // Block 0x16, offset 0xaa
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       // Block 0x17, offset 0xac
+       {value: 0x0000, lo: 0x08},
+       {value: 0xa000, lo: 0x87, hi: 0x87},
+       {value: 0x2cb6, lo: 0x88, hi: 0x88},
+       {value: 0x2cae, lo: 0x8b, hi: 0x8b},
+       {value: 0x2cbe, lo: 0x8c, hi: 0x8c},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x96, hi: 0x97},
+       {value: 0x45a4, lo: 0x9c, hi: 0x9c},
+       {value: 0x45ac, lo: 0x9d, hi: 0x9d},
+       // Block 0x18, offset 0xb5
+       {value: 0x0000, lo: 0x03},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       {value: 0x2cc6, lo: 0x94, hi: 0x94},
+       {value: 0x9900, lo: 0xbe, hi: 0xbe},
+       // Block 0x19, offset 0xb9
+       {value: 0x0000, lo: 0x06},
+       {value: 0xa000, lo: 0x86, hi: 0x87},
+       {value: 0x2cce, lo: 0x8a, hi: 0x8a},
+       {value: 0x2cde, lo: 0x8b, hi: 0x8b},
+       {value: 0x2cd6, lo: 0x8c, hi: 0x8c},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x97, hi: 0x97},
+       // Block 0x1a, offset 0xc0
+       {value: 0x1801, lo: 0x04},
+       {value: 0xa000, lo: 0x86, hi: 0x86},
+       {value: 0x3ef0, lo: 0x88, hi: 0x88},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x8120, lo: 0x95, hi: 0x96},
+       // Block 0x1b, offset 0xc5
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8102, lo: 0xbc, hi: 0xbc},
+       {value: 0xa000, lo: 0xbf, hi: 0xbf},
+       // Block 0x1c, offset 0xc8
+       {value: 0x0000, lo: 0x09},
+       {value: 0x2ce6, lo: 0x80, hi: 0x80},
+       {value: 0x9900, lo: 0x82, hi: 0x82},
+       {value: 0xa000, lo: 0x86, hi: 0x86},
+       {value: 0x2cee, lo: 0x87, hi: 0x87},
+       {value: 0x2cf6, lo: 0x88, hi: 0x88},
+       {value: 0x2f50, lo: 0x8a, hi: 0x8a},
+       {value: 0x2dd8, lo: 0x8b, hi: 0x8b},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x95, hi: 0x96},
+       // Block 0x1d, offset 0xd2
+       {value: 0x0000, lo: 0x01},
+       {value: 0x9900, lo: 0xbe, hi: 0xbe},
+       // Block 0x1e, offset 0xd4
+       {value: 0x0000, lo: 0x06},
+       {value: 0xa000, lo: 0x86, hi: 0x87},
+       {value: 0x2cfe, lo: 0x8a, hi: 0x8a},
+       {value: 0x2d0e, lo: 0x8b, hi: 0x8b},
+       {value: 0x2d06, lo: 0x8c, hi: 0x8c},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x97, hi: 0x97},
+       // Block 0x1f, offset 0xdb
+       {value: 0x6bea, lo: 0x07},
+       {value: 0x9904, lo: 0x8a, hi: 0x8a},
+       {value: 0x9900, lo: 0x8f, hi: 0x8f},
+       {value: 0xa000, lo: 0x99, hi: 0x99},
+       {value: 0x3ef8, lo: 0x9a, hi: 0x9a},
+       {value: 0x2f58, lo: 0x9c, hi: 0x9c},
+       {value: 0x2de3, lo: 0x9d, hi: 0x9d},
+       {value: 0x2d16, lo: 0x9e, hi: 0x9f},
+       // Block 0x20, offset 0xe3
+       {value: 0x0000, lo: 0x03},
+       {value: 0x2621, lo: 0xb3, hi: 0xb3},
+       {value: 0x8122, lo: 0xb8, hi: 0xb9},
+       {value: 0x8104, lo: 0xba, hi: 0xba},
+       // Block 0x21, offset 0xe7
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8123, lo: 0x88, hi: 0x8b},
+       // Block 0x22, offset 0xe9
+       {value: 0x0000, lo: 0x02},
+       {value: 0x2636, lo: 0xb3, hi: 0xb3},
+       {value: 0x8124, lo: 0xb8, hi: 0xb9},
+       // Block 0x23, offset 0xec
+       {value: 0x0000, lo: 0x03},
+       {value: 0x8125, lo: 0x88, hi: 0x8b},
+       {value: 0x2628, lo: 0x9c, hi: 0x9c},
+       {value: 0x262f, lo: 0x9d, hi: 0x9d},
+       // Block 0x24, offset 0xf0
+       {value: 0x0000, lo: 0x05},
+       {value: 0x030b, lo: 0x8c, hi: 0x8c},
+       {value: 0x812d, lo: 0x98, hi: 0x99},
+       {value: 0x812d, lo: 0xb5, hi: 0xb5},
+       {value: 0x812d, lo: 0xb7, hi: 0xb7},
+       {value: 0x812b, lo: 0xb9, hi: 0xb9},
+       // Block 0x25, offset 0xf6
+       {value: 0x0000, lo: 0x10},
+       {value: 0x2644, lo: 0x83, hi: 0x83},
+       {value: 0x264b, lo: 0x8d, hi: 0x8d},
+       {value: 0x2652, lo: 0x92, hi: 0x92},
+       {value: 0x2659, lo: 0x97, hi: 0x97},
+       {value: 0x2660, lo: 0x9c, hi: 0x9c},
+       {value: 0x263d, lo: 0xa9, hi: 0xa9},
+       {value: 0x8126, lo: 0xb1, hi: 0xb1},
+       {value: 0x8127, lo: 0xb2, hi: 0xb2},
+       {value: 0x4a84, lo: 0xb3, hi: 0xb3},
+       {value: 0x8128, lo: 0xb4, hi: 0xb4},
+       {value: 0x4a8d, lo: 0xb5, hi: 0xb5},
+       {value: 0x45b4, lo: 0xb6, hi: 0xb6},
+       {value: 0x45f4, lo: 0xb7, hi: 0xb7},
+       {value: 0x45bc, lo: 0xb8, hi: 0xb8},
+       {value: 0x45ff, lo: 0xb9, hi: 0xb9},
+       {value: 0x8127, lo: 0xba, hi: 0xbd},
+       // Block 0x26, offset 0x107
+       {value: 0x0000, lo: 0x0b},
+       {value: 0x8127, lo: 0x80, hi: 0x80},
+       {value: 0x4a96, lo: 0x81, hi: 0x81},
+       {value: 0x8132, lo: 0x82, hi: 0x83},
+       {value: 0x8104, lo: 0x84, hi: 0x84},
+       {value: 0x8132, lo: 0x86, hi: 0x87},
+       {value: 0x266e, lo: 0x93, hi: 0x93},
+       {value: 0x2675, lo: 0x9d, hi: 0x9d},
+       {value: 0x267c, lo: 0xa2, hi: 0xa2},
+       {value: 0x2683, lo: 0xa7, hi: 0xa7},
+       {value: 0x268a, lo: 0xac, hi: 0xac},
+       {value: 0x2667, lo: 0xb9, hi: 0xb9},
+       // Block 0x27, offset 0x113
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0x86, hi: 0x86},
+       // Block 0x28, offset 0x115
+       {value: 0x0000, lo: 0x05},
+       {value: 0xa000, lo: 0xa5, hi: 0xa5},
+       {value: 0x2d1e, lo: 0xa6, hi: 0xa6},
+       {value: 0x9900, lo: 0xae, hi: 0xae},
+       {value: 0x8102, lo: 0xb7, hi: 0xb7},
+       {value: 0x8104, lo: 0xb9, hi: 0xba},
+       // Block 0x29, offset 0x11b
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0x8d, hi: 0x8d},
+       // Block 0x2a, offset 0x11d
+       {value: 0x0000, lo: 0x01},
+       {value: 0x030f, lo: 0xbc, hi: 0xbc},
+       // Block 0x2b, offset 0x11f
+       {value: 0x0000, lo: 0x01},
+       {value: 0xa000, lo: 0x80, hi: 0x92},
+       // Block 0x2c, offset 0x121
+       {value: 0x0000, lo: 0x01},
+       {value: 0xb900, lo: 0xa1, hi: 0xb5},
+       // Block 0x2d, offset 0x123
+       {value: 0x0000, lo: 0x01},
+       {value: 0x9900, lo: 0xa8, hi: 0xbf},
+       // Block 0x2e, offset 0x125
+       {value: 0x0000, lo: 0x01},
+       {value: 0x9900, lo: 0x80, hi: 0x82},
+       // Block 0x2f, offset 0x127
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0x9d, hi: 0x9f},
+       // Block 0x30, offset 0x129
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x94, hi: 0x94},
+       {value: 0x8104, lo: 0xb4, hi: 0xb4},
+       // Block 0x31, offset 0x12c
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x92, hi: 0x92},
+       {value: 0x8132, lo: 0x9d, hi: 0x9d},
+       // Block 0x32, offset 0x12f
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8131, lo: 0xa9, hi: 0xa9},
+       // Block 0x33, offset 0x131
+       {value: 0x0004, lo: 0x02},
+       {value: 0x812e, lo: 0xb9, hi: 0xba},
+       {value: 0x812d, lo: 0xbb, hi: 0xbb},
+       // Block 0x34, offset 0x134
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8132, lo: 0x97, hi: 0x97},
+       {value: 0x812d, lo: 0x98, hi: 0x98},
+       // Block 0x35, offset 0x137
+       {value: 0x0000, lo: 0x03},
+       {value: 0x8104, lo: 0xa0, hi: 0xa0},
+       {value: 0x8132, lo: 0xb5, hi: 0xbc},
+       {value: 0x812d, lo: 0xbf, hi: 0xbf},
+       // Block 0x36, offset 0x13b
+       {value: 0x0000, lo: 0x04},
+       {value: 0x8132, lo: 0xb0, hi: 0xb4},
+       {value: 0x812d, lo: 0xb5, hi: 0xba},
+       {value: 0x8132, lo: 0xbb, hi: 0xbc},
+       {value: 0x812d, lo: 0xbd, hi: 0xbd},
+       // Block 0x37, offset 0x140
+       {value: 0x0000, lo: 0x08},
+       {value: 0x2d66, lo: 0x80, hi: 0x80},
+       {value: 0x2d6e, lo: 0x81, hi: 0x81},
+       {value: 0xa000, lo: 0x82, hi: 0x82},
+       {value: 0x2d76, lo: 0x83, hi: 0x83},
+       {value: 0x8104, lo: 0x84, hi: 0x84},
+       {value: 0x8132, lo: 0xab, hi: 0xab},
+       {value: 0x812d, lo: 0xac, hi: 0xac},
+       {value: 0x8132, lo: 0xad, hi: 0xb3},
+       // Block 0x38, offset 0x149
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0xaa, hi: 0xab},
+       // Block 0x39, offset 0x14b
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8102, lo: 0xa6, hi: 0xa6},
+       {value: 0x8104, lo: 0xb2, hi: 0xb3},
+       // Block 0x3a, offset 0x14e
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8102, lo: 0xb7, hi: 0xb7},
+       // Block 0x3b, offset 0x150
+       {value: 0x0000, lo: 0x0a},
+       {value: 0x8132, lo: 0x90, hi: 0x92},
+       {value: 0x8101, lo: 0x94, hi: 0x94},
+       {value: 0x812d, lo: 0x95, hi: 0x99},
+       {value: 0x8132, lo: 0x9a, hi: 0x9b},
+       {value: 0x812d, lo: 0x9c, hi: 0x9f},
+       {value: 0x8132, lo: 0xa0, hi: 0xa0},
+       {value: 0x8101, lo: 0xa2, hi: 0xa8},
+       {value: 0x812d, lo: 0xad, hi: 0xad},
+       {value: 0x8132, lo: 0xb4, hi: 0xb4},
+       {value: 0x8132, lo: 0xb8, hi: 0xb9},
+       // Block 0x3c, offset 0x15b
+       {value: 0x0002, lo: 0x0a},
+       {value: 0x0043, lo: 0xac, hi: 0xac},
+       {value: 0x00d1, lo: 0xad, hi: 0xad},
+       {value: 0x0045, lo: 0xae, hi: 0xae},
+       {value: 0x0049, lo: 0xb0, hi: 0xb1},
+       {value: 0x00e6, lo: 0xb2, hi: 0xb2},
+       {value: 0x004f, lo: 0xb3, hi: 0xba},
+       {value: 0x005f, lo: 0xbc, hi: 0xbc},
+       {value: 0x00ef, lo: 0xbd, hi: 0xbd},
+       {value: 0x0061, lo: 0xbe, hi: 0xbe},
+       {value: 0x0065, lo: 0xbf, hi: 0xbf},
+       // Block 0x3d, offset 0x166
+       {value: 0x0000, lo: 0x0f},
+       {value: 0x8132, lo: 0x80, hi: 0x81},
+       {value: 0x812d, lo: 0x82, hi: 0x82},
+       {value: 0x8132, lo: 0x83, hi: 0x89},
+       {value: 0x812d, lo: 0x8a, hi: 0x8a},
+       {value: 0x8132, lo: 0x8b, hi: 0x8c},
+       {value: 0x8135, lo: 0x8d, hi: 0x8d},
+       {value: 0x812a, lo: 0x8e, hi: 0x8e},
+       {value: 0x812d, lo: 0x8f, hi: 0x8f},
+       {value: 0x8129, lo: 0x90, hi: 0x90},
+       {value: 0x8132, lo: 0x91, hi: 0xb5},
+       {value: 0x8132, lo: 0xbb, hi: 0xbb},
+       {value: 0x8134, lo: 0xbc, hi: 0xbc},
+       {value: 0x812d, lo: 0xbd, hi: 0xbd},
+       {value: 0x8132, lo: 0xbe, hi: 0xbe},
+       {value: 0x812d, lo: 0xbf, hi: 0xbf},
+       // Block 0x3e, offset 0x176
+       {value: 0x0000, lo: 0x0d},
+       {value: 0x0001, lo: 0x80, hi: 0x8a},
+       {value: 0x043b, lo: 0x91, hi: 0x91},
+       {value: 0x429b, lo: 0x97, hi: 0x97},
+       {value: 0x001d, lo: 0xa4, hi: 0xa4},
+       {value: 0x1873, lo: 0xa5, hi: 0xa5},
+       {value: 0x1b5c, lo: 0xa6, hi: 0xa6},
+       {value: 0x0001, lo: 0xaf, hi: 0xaf},
+       {value: 0x2691, lo: 0xb3, hi: 0xb3},
+       {value: 0x27fe, lo: 0xb4, hi: 0xb4},
+       {value: 0x2698, lo: 0xb6, hi: 0xb6},
+       {value: 0x2808, lo: 0xb7, hi: 0xb7},
+       {value: 0x186d, lo: 0xbc, hi: 0xbc},
+       {value: 0x4269, lo: 0xbe, hi: 0xbe},
+       // Block 0x3f, offset 0x184
+       {value: 0x0002, lo: 0x0d},
+       {value: 0x1933, lo: 0x87, hi: 0x87},
+       {value: 0x1930, lo: 0x88, hi: 0x88},
+       {value: 0x1870, lo: 0x89, hi: 0x89},
+       {value: 0x298e, lo: 0x97, hi: 0x97},
+       {value: 0x0001, lo: 0x9f, hi: 0x9f},
+       {value: 0x0021, lo: 0xb0, hi: 0xb0},
+       {value: 0x0093, lo: 0xb1, hi: 0xb1},
+       {value: 0x0029, lo: 0xb4, hi: 0xb9},
+       {value: 0x0017, lo: 0xba, hi: 0xba},
+       {value: 0x0467, lo: 0xbb, hi: 0xbb},
+       {value: 0x003b, lo: 0xbc, hi: 0xbc},
+       {value: 0x0011, lo: 0xbd, hi: 0xbe},
+       {value: 0x009d, lo: 0xbf, hi: 0xbf},
+       // Block 0x40, offset 0x192
+       {value: 0x0002, lo: 0x0f},
+       {value: 0x0021, lo: 0x80, hi: 0x89},
+       {value: 0x0017, lo: 0x8a, hi: 0x8a},
+       {value: 0x0467, lo: 0x8b, hi: 0x8b},
+       {value: 0x003b, lo: 0x8c, hi: 0x8c},
+       {value: 0x0011, lo: 0x8d, hi: 0x8e},
+       {value: 0x0083, lo: 0x90, hi: 0x90},
+       {value: 0x008b, lo: 0x91, hi: 0x91},
+       {value: 0x009f, lo: 0x92, hi: 0x92},
+       {value: 0x00b1, lo: 0x93, hi: 0x93},
+       {value: 0x0104, lo: 0x94, hi: 0x94},
+       {value: 0x0091, lo: 0x95, hi: 0x95},
+       {value: 0x0097, lo: 0x96, hi: 0x99},
+       {value: 0x00a1, lo: 0x9a, hi: 0x9a},
+       {value: 0x00a7, lo: 0x9b, hi: 0x9c},
+       {value: 0x1999, lo: 0xa8, hi: 0xa8},
+       // Block 0x41, offset 0x1a2
+       {value: 0x0000, lo: 0x0d},
+       {value: 0x8132, lo: 0x90, hi: 0x91},
+       {value: 0x8101, lo: 0x92, hi: 0x93},
+       {value: 0x8132, lo: 0x94, hi: 0x97},
+       {value: 0x8101, lo: 0x98, hi: 0x9a},
+       {value: 0x8132, lo: 0x9b, hi: 0x9c},
+       {value: 0x8132, lo: 0xa1, hi: 0xa1},
+       {value: 0x8101, lo: 0xa5, hi: 0xa6},
+       {value: 0x8132, lo: 0xa7, hi: 0xa7},
+       {value: 0x812d, lo: 0xa8, hi: 0xa8},
+       {value: 0x8132, lo: 0xa9, hi: 0xa9},
+       {value: 0x8101, lo: 0xaa, hi: 0xab},
+       {value: 0x812d, lo: 0xac, hi: 0xaf},
+       {value: 0x8132, lo: 0xb0, hi: 0xb0},
+       // Block 0x42, offset 0x1b0
+       {value: 0x0007, lo: 0x06},
+       {value: 0x2180, lo: 0x89, hi: 0x89},
+       {value: 0xa000, lo: 0x90, hi: 0x90},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       {value: 0xa000, lo: 0x94, hi: 0x94},
+       {value: 0x3bb9, lo: 0x9a, hi: 0x9b},
+       {value: 0x3bc7, lo: 0xae, hi: 0xae},
+       // Block 0x43, offset 0x1b7
+       {value: 0x000e, lo: 0x05},
+       {value: 0x3bce, lo: 0x8d, hi: 0x8e},
+       {value: 0x3bd5, lo: 0x8f, hi: 0x8f},
+       {value: 0xa000, lo: 0x90, hi: 0x90},
+       {value: 0xa000, lo: 0x92, hi: 0x92},
+       {value: 0xa000, lo: 0x94, hi: 0x94},
+       // Block 0x44, offset 0x1bd
+       {value: 0x0173, lo: 0x0e},
+       {value: 0xa000, lo: 0x83, hi: 0x83},
+       {value: 0x3be3, lo: 0x84, hi: 0x84},
+       {value: 0xa000, lo: 0x88, hi: 0x88},
+       {value: 0x3bea, lo: 0x89, hi: 0x89},
+       {value: 0xa000, lo: 0x8b, hi: 0x8b},
+       {value: 0x3bf1, lo: 0x8c, hi: 0x8c},
+       {value: 0xa000, lo: 0xa3, hi: 0xa3},
+       {value: 0x3bf8, lo: 0xa4, hi: 0xa4},
+       {value: 0xa000, lo: 0xa5, hi: 0xa5},
+       {value: 0x3bff, lo: 0xa6, hi: 0xa6},
+       {value: 0x269f, lo: 0xac, hi: 0xad},
+       {value: 0x26a6, lo: 0xaf, hi: 0xaf},
+       {value: 0x281c, lo: 0xb0, hi: 0xb0},
+       {value: 0xa000, lo: 0xbc, hi: 0xbc},
+       // Block 0x45, offset 0x1cc
+       {value: 0x0007, lo: 0x03},
+       {value: 0x3c68, lo: 0xa0, hi: 0xa1},
+       {value: 0x3c92, lo: 0xa2, hi: 0xa3},
+       {value: 0x3cbc, lo: 0xaa, hi: 0xad},
+       // Block 0x46, offset 0x1d0
+       {value: 0x0004, lo: 0x01},
+       {value: 0x048b, lo: 0xa9, hi: 0xaa},
+       // Block 0x47, offset 0x1d2
+       {value: 0x0002, lo: 0x03},
+       {value: 0x0057, lo: 0x80, hi: 0x8f},
+       {value: 0x0083, lo: 0x90, hi: 0xa9},
+       {value: 0x0021, lo: 0xaa, hi: 0xaa},
+       // Block 0x48, offset 0x1d6
+       {value: 0x0000, lo: 0x01},
+       {value: 0x299b, lo: 0x8c, hi: 0x8c},
+       // Block 0x49, offset 0x1d8
+       {value: 0x0263, lo: 0x02},
+       {value: 0x1b8c, lo: 0xb4, hi: 0xb4},
+       {value: 0x192d, lo: 0xb5, hi: 0xb6},
+       // Block 0x4a, offset 0x1db
+       {value: 0x0000, lo: 0x01},
+       {value: 0x44dd, lo: 0x9c, hi: 0x9c},
+       // Block 0x4b, offset 0x1dd
+       {value: 0x0000, lo: 0x02},
+       {value: 0x0095, lo: 0xbc, hi: 0xbc},
+       {value: 0x006d, lo: 0xbd, hi: 0xbd},
+       // Block 0x4c, offset 0x1e0
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0xaf, hi: 0xb1},
+       // Block 0x4d, offset 0x1e2
+       {value: 0x0000, lo: 0x02},
+       {value: 0x047f, lo: 0xaf, hi: 0xaf},
+       {value: 0x8104, lo: 0xbf, hi: 0xbf},
+       // Block 0x4e, offset 0x1e5
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0xa0, hi: 0xbf},
+       // Block 0x4f, offset 0x1e7
+       {value: 0x0000, lo: 0x01},
+       {value: 0x0dc3, lo: 0x9f, hi: 0x9f},
+       // Block 0x50, offset 0x1e9
+       {value: 0x0000, lo: 0x01},
+       {value: 0x162f, lo: 0xb3, hi: 0xb3},
+       // Block 0x51, offset 0x1eb
+       {value: 0x0004, lo: 0x0b},
+       {value: 0x1597, lo: 0x80, hi: 0x82},
+       {value: 0x15af, lo: 0x83, hi: 0x83},
+       {value: 0x15c7, lo: 0x84, hi: 0x85},
+       {value: 0x15d7, lo: 0x86, hi: 0x89},
+       {value: 0x15eb, lo: 0x8a, hi: 0x8c},
+       {value: 0x15ff, lo: 0x8d, hi: 0x8d},
+       {value: 0x1607, lo: 0x8e, hi: 0x8e},
+       {value: 0x160f, lo: 0x8f, hi: 0x90},
+       {value: 0x161b, lo: 0x91, hi: 0x93},
+       {value: 0x162b, lo: 0x94, hi: 0x94},
+       {value: 0x1633, lo: 0x95, hi: 0x95},
+       // Block 0x52, offset 0x1f7
+       {value: 0x0004, lo: 0x09},
+       {value: 0x0001, lo: 0x80, hi: 0x80},
+       {value: 0x812c, lo: 0xaa, hi: 0xaa},
+       {value: 0x8131, lo: 0xab, hi: 0xab},
+       {value: 0x8133, lo: 0xac, hi: 0xac},
+       {value: 0x812e, lo: 0xad, hi: 0xad},
+       {value: 0x812f, lo: 0xae, hi: 0xae},
+       {value: 0x812f, lo: 0xaf, hi: 0xaf},
+       {value: 0x04b3, lo: 0xb6, hi: 0xb6},
+       {value: 0x0887, lo: 0xb8, hi: 0xba},
+       // Block 0x53, offset 0x201
+       {value: 0x0006, lo: 0x09},
+       {value: 0x0313, lo: 0xb1, hi: 0xb1},
+       {value: 0x0317, lo: 0xb2, hi: 0xb2},
+       {value: 0x4a3b, lo: 0xb3, hi: 0xb3},
+       {value: 0x031b, lo: 0xb4, hi: 0xb4},
+       {value: 0x4a41, lo: 0xb5, hi: 0xb6},
+       {value: 0x031f, lo: 0xb7, hi: 0xb7},
+       {value: 0x0323, lo: 0xb8, hi: 0xb8},
+       {value: 0x0327, lo: 0xb9, hi: 0xb9},
+       {value: 0x4a4d, lo: 0xba, hi: 0xbf},
+       // Block 0x54, offset 0x20b
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8132, lo: 0xaf, hi: 0xaf},
+       {value: 0x8132, lo: 0xb4, hi: 0xbd},
+       // Block 0x55, offset 0x20e
+       {value: 0x0000, lo: 0x03},
+       {value: 0x020f, lo: 0x9c, hi: 0x9c},
+       {value: 0x0212, lo: 0x9d, hi: 0x9d},
+       {value: 0x8132, lo: 0x9e, hi: 0x9f},
+       // Block 0x56, offset 0x212
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0xb0, hi: 0xb1},
+       // Block 0x57, offset 0x214
+       {value: 0x0000, lo: 0x01},
+       {value: 0x163b, lo: 0xb0, hi: 0xb0},
+       // Block 0x58, offset 0x216
+       {value: 0x000c, lo: 0x01},
+       {value: 0x00d7, lo: 0xb8, hi: 0xb9},
+       // Block 0x59, offset 0x218
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0x86, hi: 0x86},
+       // Block 0x5a, offset 0x21a
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x84, hi: 0x84},
+       {value: 0x8132, lo: 0xa0, hi: 0xb1},
+       // Block 0x5b, offset 0x21d
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0xab, hi: 0xad},
+       // Block 0x5c, offset 0x21f
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0x93, hi: 0x93},
+       // Block 0x5d, offset 0x221
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8102, lo: 0xb3, hi: 0xb3},
+       // Block 0x5e, offset 0x223
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0x80, hi: 0x80},
+       // Block 0x5f, offset 0x225
+       {value: 0x0000, lo: 0x05},
+       {value: 0x8132, lo: 0xb0, hi: 0xb0},
+       {value: 0x8132, lo: 0xb2, hi: 0xb3},
+       {value: 0x812d, lo: 0xb4, hi: 0xb4},
+       {value: 0x8132, lo: 0xb7, hi: 0xb8},
+       {value: 0x8132, lo: 0xbe, hi: 0xbf},
+       // Block 0x60, offset 0x22b
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8132, lo: 0x81, hi: 0x81},
+       {value: 0x8104, lo: 0xb6, hi: 0xb6},
+       // Block 0x61, offset 0x22e
+       {value: 0x0008, lo: 0x03},
+       {value: 0x1637, lo: 0x9c, hi: 0x9d},
+       {value: 0x0125, lo: 0x9e, hi: 0x9e},
+       {value: 0x1643, lo: 0x9f, hi: 0x9f},
+       // Block 0x62, offset 0x232
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0xad, hi: 0xad},
+       // Block 0x63, offset 0x234
+       {value: 0x0000, lo: 0x06},
+       {value: 0xe500, lo: 0x80, hi: 0x80},
+       {value: 0xc600, lo: 0x81, hi: 0x9b},
+       {value: 0xe500, lo: 0x9c, hi: 0x9c},
+       {value: 0xc600, lo: 0x9d, hi: 0xb7},
+       {value: 0xe500, lo: 0xb8, hi: 0xb8},
+       {value: 0xc600, lo: 0xb9, hi: 0xbf},
+       // Block 0x64, offset 0x23b
+       {value: 0x0000, lo: 0x05},
+       {value: 0xc600, lo: 0x80, hi: 0x93},
+       {value: 0xe500, lo: 0x94, hi: 0x94},
+       {value: 0xc600, lo: 0x95, hi: 0xaf},
+       {value: 0xe500, lo: 0xb0, hi: 0xb0},
+       {value: 0xc600, lo: 0xb1, hi: 0xbf},
+       // Block 0x65, offset 0x241
+       {value: 0x0000, lo: 0x05},
+       {value: 0xc600, lo: 0x80, hi: 0x8b},
+       {value: 0xe500, lo: 0x8c, hi: 0x8c},
+       {value: 0xc600, lo: 0x8d, hi: 0xa7},
+       {value: 0xe500, lo: 0xa8, hi: 0xa8},
+       {value: 0xc600, lo: 0xa9, hi: 0xbf},
+       // Block 0x66, offset 0x247
+       {value: 0x0000, lo: 0x07},
+       {value: 0xc600, lo: 0x80, hi: 0x83},
+       {value: 0xe500, lo: 0x84, hi: 0x84},
+       {value: 0xc600, lo: 0x85, hi: 0x9f},
+       {value: 0xe500, lo: 0xa0, hi: 0xa0},
+       {value: 0xc600, lo: 0xa1, hi: 0xbb},
+       {value: 0xe500, lo: 0xbc, hi: 0xbc},
+       {value: 0xc600, lo: 0xbd, hi: 0xbf},
+       // Block 0x67, offset 0x24f
+       {value: 0x0000, lo: 0x05},
+       {value: 0xc600, lo: 0x80, hi: 0x97},
+       {value: 0xe500, lo: 0x98, hi: 0x98},
+       {value: 0xc600, lo: 0x99, hi: 0xb3},
+       {value: 0xe500, lo: 0xb4, hi: 0xb4},
+       {value: 0xc600, lo: 0xb5, hi: 0xbf},
+       // Block 0x68, offset 0x255
+       {value: 0x0000, lo: 0x05},
+       {value: 0xc600, lo: 0x80, hi: 0x8f},
+       {value: 0xe500, lo: 0x90, hi: 0x90},
+       {value: 0xc600, lo: 0x91, hi: 0xab},
+       {value: 0xe500, lo: 0xac, hi: 0xac},
+       {value: 0xc600, lo: 0xad, hi: 0xbf},
+       // Block 0x69, offset 0x25b
+       {value: 0x0000, lo: 0x05},
+       {value: 0xc600, lo: 0x80, hi: 0x87},
+       {value: 0xe500, lo: 0x88, hi: 0x88},
+       {value: 0xc600, lo: 0x89, hi: 0xa3},
+       {value: 0xe500, lo: 0xa4, hi: 0xa4},
+       {value: 0xc600, lo: 0xa5, hi: 0xbf},
+       // Block 0x6a, offset 0x261
+       {value: 0x0000, lo: 0x03},
+       {value: 0xc600, lo: 0x80, hi: 0x87},
+       {value: 0xe500, lo: 0x88, hi: 0x88},
+       {value: 0xc600, lo: 0x89, hi: 0xa3},
+       // Block 0x6b, offset 0x265
+       {value: 0x0002, lo: 0x01},
+       {value: 0x0003, lo: 0x81, hi: 0xbf},
+       // Block 0x6c, offset 0x267
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0xbd, hi: 0xbd},
+       // Block 0x6d, offset 0x269
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0xa0, hi: 0xa0},
+       // Block 0x6e, offset 0x26b
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0xb6, hi: 0xba},
+       // Block 0x6f, offset 0x26d
+       {value: 0x002c, lo: 0x05},
+       {value: 0x812d, lo: 0x8d, hi: 0x8d},
+       {value: 0x8132, lo: 0x8f, hi: 0x8f},
+       {value: 0x8132, lo: 0xb8, hi: 0xb8},
+       {value: 0x8101, lo: 0xb9, hi: 0xba},
+       {value: 0x8104, lo: 0xbf, hi: 0xbf},
+       // Block 0x70, offset 0x273
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8132, lo: 0xa5, hi: 0xa5},
+       {value: 0x812d, lo: 0xa6, hi: 0xa6},
+       // Block 0x71, offset 0x276
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x86, hi: 0x86},
+       {value: 0x8104, lo: 0xbf, hi: 0xbf},
+       // Block 0x72, offset 0x279
+       {value: 0x17fe, lo: 0x07},
+       {value: 0xa000, lo: 0x99, hi: 0x99},
+       {value: 0x4238, lo: 0x9a, hi: 0x9a},
+       {value: 0xa000, lo: 0x9b, hi: 0x9b},
+       {value: 0x4242, lo: 0x9c, hi: 0x9c},
+       {value: 0xa000, lo: 0xa5, hi: 0xa5},
+       {value: 0x424c, lo: 0xab, hi: 0xab},
+       {value: 0x8104, lo: 0xb9, hi: 0xba},
+       // Block 0x73, offset 0x281
+       {value: 0x0000, lo: 0x06},
+       {value: 0x8132, lo: 0x80, hi: 0x82},
+       {value: 0x9900, lo: 0xa7, hi: 0xa7},
+       {value: 0x2d7e, lo: 0xae, hi: 0xae},
+       {value: 0x2d88, lo: 0xaf, hi: 0xaf},
+       {value: 0xa000, lo: 0xb1, hi: 0xb2},
+       {value: 0x8104, lo: 0xb3, hi: 0xb4},
+       // Block 0x74, offset 0x288
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x80, hi: 0x80},
+       {value: 0x8102, lo: 0x8a, hi: 0x8a},
+       // Block 0x75, offset 0x28b
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0xb5, hi: 0xb5},
+       {value: 0x8102, lo: 0xb6, hi: 0xb6},
+       // Block 0x76, offset 0x28e
+       {value: 0x0002, lo: 0x01},
+       {value: 0x8102, lo: 0xa9, hi: 0xaa},
+       // Block 0x77, offset 0x290
+       {value: 0x0000, lo: 0x07},
+       {value: 0xa000, lo: 0x87, hi: 0x87},
+       {value: 0x2d92, lo: 0x8b, hi: 0x8b},
+       {value: 0x2d9c, lo: 0x8c, hi: 0x8c},
+       {value: 0x8104, lo: 0x8d, hi: 0x8d},
+       {value: 0x9900, lo: 0x97, hi: 0x97},
+       {value: 0x8132, lo: 0xa6, hi: 0xac},
+       {value: 0x8132, lo: 0xb0, hi: 0xb4},
+       // Block 0x78, offset 0x298
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x82, hi: 0x82},
+       {value: 0x8102, lo: 0x86, hi: 0x86},
+       // Block 0x79, offset 0x29b
+       {value: 0x6b5a, lo: 0x06},
+       {value: 0x9900, lo: 0xb0, hi: 0xb0},
+       {value: 0xa000, lo: 0xb9, hi: 0xb9},
+       {value: 0x9900, lo: 0xba, hi: 0xba},
+       {value: 0x2db0, lo: 0xbb, hi: 0xbb},
+       {value: 0x2da6, lo: 0xbc, hi: 0xbd},
+       {value: 0x2dba, lo: 0xbe, hi: 0xbe},
+       // Block 0x7a, offset 0x2a2
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0x82, hi: 0x82},
+       {value: 0x8102, lo: 0x83, hi: 0x83},
+       // Block 0x7b, offset 0x2a5
+       {value: 0x0000, lo: 0x05},
+       {value: 0x9900, lo: 0xaf, hi: 0xaf},
+       {value: 0xa000, lo: 0xb8, hi: 0xb9},
+       {value: 0x2dc4, lo: 0xba, hi: 0xba},
+       {value: 0x2dce, lo: 0xbb, hi: 0xbb},
+       {value: 0x8104, lo: 0xbf, hi: 0xbf},
+       // Block 0x7c, offset 0x2ab
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8102, lo: 0x80, hi: 0x80},
+       // Block 0x7d, offset 0x2ad
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0xbf, hi: 0xbf},
+       // Block 0x7e, offset 0x2af
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8104, lo: 0xb6, hi: 0xb6},
+       {value: 0x8102, lo: 0xb7, hi: 0xb7},
+       // Block 0x7f, offset 0x2b2
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8104, lo: 0xab, hi: 0xab},
+       // Block 0x80, offset 0x2b4
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8101, lo: 0xb0, hi: 0xb4},
+       // Block 0x81, offset 0x2b6
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0xb0, hi: 0xb6},
+       // Block 0x82, offset 0x2b8
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8101, lo: 0x9e, hi: 0x9e},
+       // Block 0x83, offset 0x2ba
+       {value: 0x0000, lo: 0x0c},
+       {value: 0x45cc, lo: 0x9e, hi: 0x9e},
+       {value: 0x45d6, lo: 0x9f, hi: 0x9f},
+       {value: 0x460a, lo: 0xa0, hi: 0xa0},
+       {value: 0x4618, lo: 0xa1, hi: 0xa1},
+       {value: 0x4626, lo: 0xa2, hi: 0xa2},
+       {value: 0x4634, lo: 0xa3, hi: 0xa3},
+       {value: 0x4642, lo: 0xa4, hi: 0xa4},
+       {value: 0x812b, lo: 0xa5, hi: 0xa6},
+       {value: 0x8101, lo: 0xa7, hi: 0xa9},
+       {value: 0x8130, lo: 0xad, hi: 0xad},
+       {value: 0x812b, lo: 0xae, hi: 0xb2},
+       {value: 0x812d, lo: 0xbb, hi: 0xbf},
+       // Block 0x84, offset 0x2c7
+       {value: 0x0000, lo: 0x09},
+       {value: 0x812d, lo: 0x80, hi: 0x82},
+       {value: 0x8132, lo: 0x85, hi: 0x89},
+       {value: 0x812d, lo: 0x8a, hi: 0x8b},
+       {value: 0x8132, lo: 0xaa, hi: 0xad},
+       {value: 0x45e0, lo: 0xbb, hi: 0xbb},
+       {value: 0x45ea, lo: 0xbc, hi: 0xbc},
+       {value: 0x4650, lo: 0xbd, hi: 0xbd},
+       {value: 0x466c, lo: 0xbe, hi: 0xbe},
+       {value: 0x465e, lo: 0xbf, hi: 0xbf},
+       // Block 0x85, offset 0x2d1
+       {value: 0x0000, lo: 0x01},
+       {value: 0x467a, lo: 0x80, hi: 0x80},
+       // Block 0x86, offset 0x2d3
+       {value: 0x0000, lo: 0x01},
+       {value: 0x8132, lo: 0x82, hi: 0x84},
+       // Block 0x87, offset 0x2d5
+       {value: 0x0002, lo: 0x03},
+       {value: 0x0043, lo: 0x80, hi: 0x99},
+       {value: 0x0083, lo: 0x9a, hi: 0xb3},
+       {value: 0x0043, lo: 0xb4, hi: 0xbf},
+       // Block 0x88, offset 0x2d9
+       {value: 0x0002, lo: 0x04},
+       {value: 0x005b, lo: 0x80, hi: 0x8d},
+       {value: 0x0083, lo: 0x8e, hi: 0x94},
+       {value: 0x0093, lo: 0x96, hi: 0xa7},
+       {value: 0x0043, lo: 0xa8, hi: 0xbf},
+       // Block 0x89, offset 0x2de
+       {value: 0x0002, lo: 0x0b},
+       {value: 0x0073, lo: 0x80, hi: 0x81},
+       {value: 0x0083, lo: 0x82, hi: 0x9b},
+       {value: 0x0043, lo: 0x9c, hi: 0x9c},
+       {value: 0x0047, lo: 0x9e, hi: 0x9f},
+       {value: 0x004f, lo: 0xa2, hi: 0xa2},
+       {value: 0x0055, lo: 0xa5, hi: 0xa6},
+       {value: 0x005d, lo: 0xa9, hi: 0xac},
+       {value: 0x0067, lo: 0xae, hi: 0xb5},
+       {value: 0x0083, lo: 0xb6, hi: 0xb9},
+       {value: 0x008d, lo: 0xbb, hi: 0xbb},
+       {value: 0x0091, lo: 0xbd, hi: 0xbf},
+       // Block 0x8a, offset 0x2ea
+       {value: 0x0002, lo: 0x04},
+       {value: 0x0097, lo: 0x80, hi: 0x83},
+       {value: 0x00a1, lo: 0x85, hi: 0x8f},
+       {value: 0x0043, lo: 0x90, hi: 0xa9},
+       {value: 0x0083, lo: 0xaa, hi: 0xbf},
+       // Block 0x8b, offset 0x2ef
+       {value: 0x0002, lo: 0x08},
+       {value: 0x00af, lo: 0x80, hi: 0x83},
+       {value: 0x0043, lo: 0x84, hi: 0x85},
+       {value: 0x0049, lo: 0x87, hi: 0x8a},
+       {value: 0x0055, lo: 0x8d, hi: 0x94},
+       {value: 0x0067, lo: 0x96, hi: 0x9c},
+       {value: 0x0083, lo: 0x9e, hi: 0xb7},
+       {value: 0x0043, lo: 0xb8, hi: 0xb9},
+       {value: 0x0049, lo: 0xbb, hi: 0xbe},
+       // Block 0x8c, offset 0x2f8
+       {value: 0x0002, lo: 0x05},
+       {value: 0x0053, lo: 0x80, hi: 0x84},
+       {value: 0x005f, lo: 0x86, hi: 0x86},
+       {value: 0x0067, lo: 0x8a, hi: 0x90},
+       {value: 0x0083, lo: 0x92, hi: 0xab},
+       {value: 0x0043, lo: 0xac, hi: 0xbf},
+       // Block 0x8d, offset 0x2fe
+       {value: 0x0002, lo: 0x04},
+       {value: 0x006b, lo: 0x80, hi: 0x85},
+       {value: 0x0083, lo: 0x86, hi: 0x9f},
+       {value: 0x0043, lo: 0xa0, hi: 0xb9},
+       {value: 0x0083, lo: 0xba, hi: 0xbf},
+       // Block 0x8e, offset 0x303
+       {value: 0x0002, lo: 0x03},
+       {value: 0x008f, lo: 0x80, hi: 0x93},
+       {value: 0x0043, lo: 0x94, hi: 0xad},
+       {value: 0x0083, lo: 0xae, hi: 0xbf},
+       // Block 0x8f, offset 0x307
+       {value: 0x0002, lo: 0x04},
+       {value: 0x00a7, lo: 0x80, hi: 0x87},
+       {value: 0x0043, lo: 0x88, hi: 0xa1},
+       {value: 0x0083, lo: 0xa2, hi: 0xbb},
+       {value: 0x0043, lo: 0xbc, hi: 0xbf},
+       // Block 0x90, offset 0x30c
+       {value: 0x0002, lo: 0x03},
+       {value: 0x004b, lo: 0x80, hi: 0x95},
+       {value: 0x0083, lo: 0x96, hi: 0xaf},
+       {value: 0x0043, lo: 0xb0, hi: 0xbf},
+       // Block 0x91, offset 0x310
+       {value: 0x0003, lo: 0x0f},
+       {value: 0x01b8, lo: 0x80, hi: 0x80},
+       {value: 0x045f, lo: 0x81, hi: 0x81},
+       {value: 0x01bb, lo: 0x82, hi: 0x9a},
+       {value: 0x045b, lo: 0x9b, hi: 0x9b},
+       {value: 0x01c7, lo: 0x9c, hi: 0x9c},
+       {value: 0x01d0, lo: 0x9d, hi: 0x9d},
+       {value: 0x01d6, lo: 0x9e, hi: 0x9e},
+       {value: 0x01fa, lo: 0x9f, hi: 0x9f},
+       {value: 0x01eb, lo: 0xa0, hi: 0xa0},
+       {value: 0x01e8, lo: 0xa1, hi: 0xa1},
+       {value: 0x0173, lo: 0xa2, hi: 0xb2},
+       {value: 0x0188, lo: 0xb3, hi: 0xb3},
+       {value: 0x01a6, lo: 0xb4, hi: 0xba},
+       {value: 0x045f, lo: 0xbb, hi: 0xbb},
+       {value: 0x01bb, lo: 0xbc, hi: 0xbf},
+       // Block 0x92, offset 0x320
+       {value: 0x0003, lo: 0x0d},
+       {value: 0x01c7, lo: 0x80, hi: 0x94},
+       {value: 0x045b, lo: 0x95, hi: 0x95},
+       {value: 0x01c7, lo: 0x96, hi: 0x96},
+       {value: 0x01d0, lo: 0x97, hi: 0x97},
+       {value: 0x01d6, lo: 0x98, hi: 0x98},
+       {value: 0x01fa, lo: 0x99, hi: 0x99},
+       {value: 0x01eb, lo: 0x9a, hi: 0x9a},
+       {value: 0x01e8, lo: 0x9b, hi: 0x9b},
+       {value: 0x0173, lo: 0x9c, hi: 0xac},
+       {value: 0x0188, lo: 0xad, hi: 0xad},
+       {value: 0x01a6, lo: 0xae, hi: 0xb4},
+       {value: 0x045f, lo: 0xb5, hi: 0xb5},
+       {value: 0x01bb, lo: 0xb6, hi: 0xbf},
+       // Block 0x93, offset 0x32e
+       {value: 0x0003, lo: 0x0d},
+       {value: 0x01d9, lo: 0x80, hi: 0x8e},
+       {value: 0x045b, lo: 0x8f, hi: 0x8f},
+       {value: 0x01c7, lo: 0x90, hi: 0x90},
+       {value: 0x01d0, lo: 0x91, hi: 0x91},
+       {value: 0x01d6, lo: 0x92, hi: 0x92},
+       {value: 0x01fa, lo: 0x93, hi: 0x93},
+       {value: 0x01eb, lo: 0x94, hi: 0x94},
+       {value: 0x01e8, lo: 0x95, hi: 0x95},
+       {value: 0x0173, lo: 0x96, hi: 0xa6},
+       {value: 0x0188, lo: 0xa7, hi: 0xa7},
+       {value: 0x01a6, lo: 0xa8, hi: 0xae},
+       {value: 0x045f, lo: 0xaf, hi: 0xaf},
+       {value: 0x01bb, lo: 0xb0, hi: 0xbf},
+       // Block 0x94, offset 0x33c
+       {value: 0x0003, lo: 0x0d},
+       {value: 0x01eb, lo: 0x80, hi: 0x88},
+       {value: 0x045b, lo: 0x89, hi: 0x89},
+       {value: 0x01c7, lo: 0x8a, hi: 0x8a},
+       {value: 0x01d0, lo: 0x8b, hi: 0x8b},
+       {value: 0x01d6, lo: 0x8c, hi: 0x8c},
+       {value: 0x01fa, lo: 0x8d, hi: 0x8d},
+       {value: 0x01eb, lo: 0x8e, hi: 0x8e},
+       {value: 0x01e8, lo: 0x8f, hi: 0x8f},
+       {value: 0x0173, lo: 0x90, hi: 0xa0},
+       {value: 0x0188, lo: 0xa1, hi: 0xa1},
+       {value: 0x01a6, lo: 0xa2, hi: 0xa8},
+       {value: 0x045f, lo: 0xa9, hi: 0xa9},
+       {value: 0x01bb, lo: 0xaa, hi: 0xbf},
+       // Block 0x95, offset 0x34a
+       {value: 0x0000, lo: 0x05},
+       {value: 0x8132, lo: 0x80, hi: 0x86},
+       {value: 0x8132, lo: 0x88, hi: 0x98},
+       {value: 0x8132, lo: 0x9b, hi: 0xa1},
+       {value: 0x8132, lo: 0xa3, hi: 0xa4},
+       {value: 0x8132, lo: 0xa6, hi: 0xaa},
+       // Block 0x96, offset 0x350
+       {value: 0x0000, lo: 0x01},
+       {value: 0x812d, lo: 0x90, hi: 0x96},
+       // Block 0x97, offset 0x352
+       {value: 0x0000, lo: 0x02},
+       {value: 0x8132, lo: 0x84, hi: 0x89},
+       {value: 0x8102, lo: 0x8a, hi: 0x8a},
+       // Block 0x98, offset 0x355
+       {value: 0x0002, lo: 0x09},
+       {value: 0x0063, lo: 0x80, hi: 0x89},
+       {value: 0x1951, lo: 0x8a, hi: 0x8a},
+       {value: 0x1981, lo: 0x8b, hi: 0x8b},
+       {value: 0x199c, lo: 0x8c, hi: 0x8c},
+       {value: 0x19a2, lo: 0x8d, hi: 0x8d},
+       {value: 0x1bc0, lo: 0x8e, hi: 0x8e},
+       {value: 0x19ae, lo: 0x8f, hi: 0x8f},
+       {value: 0x197b, lo: 0xaa, hi: 0xaa},
+       {value: 0x197e, lo: 0xab, hi: 0xab},
+       // Block 0x99, offset 0x35f
+       {value: 0x0000, lo: 0x01},
+       {value: 0x193f, lo: 0x90, hi: 0x90},
+       // Block 0x9a, offset 0x361
+       {value: 0x0028, lo: 0x09},
+       {value: 0x2862, lo: 0x80, hi: 0x80},
+       {value: 0x2826, lo: 0x81, hi: 0x81},
+       {value: 0x2830, lo: 0x82, hi: 0x82},
+       {value: 0x2844, lo: 0x83, hi: 0x84},
+       {value: 0x284e, lo: 0x85, hi: 0x86},
+       {value: 0x283a, lo: 0x87, hi: 0x87},
+       {value: 0x2858, lo: 0x88, hi: 0x88},
+       {value: 0x0b6f, lo: 0x90, hi: 0x90},
+       {value: 0x08e7, lo: 0x91, hi: 0x91},
+}
+
+// recompMap: 7520 bytes (entries only)
+var recompMap = map[uint32]rune{
+       0x00410300: 0x00C0,
+       0x00410301: 0x00C1,
+       0x00410302: 0x00C2,
+       0x00410303: 0x00C3,
+       0x00410308: 0x00C4,
+       0x0041030A: 0x00C5,
+       0x00430327: 0x00C7,
+       0x00450300: 0x00C8,
+       0x00450301: 0x00C9,
+       0x00450302: 0x00CA,
+       0x00450308: 0x00CB,
+       0x00490300: 0x00CC,
+       0x00490301: 0x00CD,
+       0x00490302: 0x00CE,
+       0x00490308: 0x00CF,
+       0x004E0303: 0x00D1,
+       0x004F0300: 0x00D2,
+       0x004F0301: 0x00D3,
+       0x004F0302: 0x00D4,
+       0x004F0303: 0x00D5,
+       0x004F0308: 0x00D6,
+       0x00550300: 0x00D9,
+       0x00550301: 0x00DA,
+       0x00550302: 0x00DB,
+       0x00550308: 0x00DC,
+       0x00590301: 0x00DD,
+       0x00610300: 0x00E0,
+       0x00610301: 0x00E1,
+       0x00610302: 0x00E2,
+       0x00610303: 0x00E3,
+       0x00610308: 0x00E4,
+       0x0061030A: 0x00E5,
+       0x00630327: 0x00E7,
+       0x00650300: 0x00E8,
+       0x00650301: 0x00E9,
+       0x00650302: 0x00EA,
+       0x00650308: 0x00EB,
+       0x00690300: 0x00EC,
+       0x00690301: 0x00ED,
+       0x00690302: 0x00EE,
+       0x00690308: 0x00EF,
+       0x006E0303: 0x00F1,
+       0x006F0300: 0x00F2,
+       0x006F0301: 0x00F3,
+       0x006F0302: 0x00F4,
+       0x006F0303: 0x00F5,
+       0x006F0308: 0x00F6,
+       0x00750300: 0x00F9,
+       0x00750301: 0x00FA,
+       0x00750302: 0x00FB,
+       0x00750308: 0x00FC,
+       0x00790301: 0x00FD,
+       0x00790308: 0x00FF,
+       0x00410304: 0x0100,
+       0x00610304: 0x0101,
+       0x00410306: 0x0102,
+       0x00610306: 0x0103,
+       0x00410328: 0x0104,
+       0x00610328: 0x0105,
+       0x00430301: 0x0106,
+       0x00630301: 0x0107,
+       0x00430302: 0x0108,
+       0x00630302: 0x0109,
+       0x00430307: 0x010A,
+       0x00630307: 0x010B,
+       0x0043030C: 0x010C,
+       0x0063030C: 0x010D,
+       0x0044030C: 0x010E,
+       0x0064030C: 0x010F,
+       0x00450304: 0x0112,
+       0x00650304: 0x0113,
+       0x00450306: 0x0114,
+       0x00650306: 0x0115,
+       0x00450307: 0x0116,
+       0x00650307: 0x0117,
+       0x00450328: 0x0118,
+       0x00650328: 0x0119,
+       0x0045030C: 0x011A,
+       0x0065030C: 0x011B,
+       0x00470302: 0x011C,
+       0x00670302: 0x011D,
+       0x00470306: 0x011E,
+       0x00670306: 0x011F,
+       0x00470307: 0x0120,
+       0x00670307: 0x0121,
+       0x00470327: 0x0122,
+       0x00670327: 0x0123,
+       0x00480302: 0x0124,
+       0x00680302: 0x0125,
+       0x00490303: 0x0128,
+       0x00690303: 0x0129,
+       0x00490304: 0x012A,
+       0x00690304: 0x012B,
+       0x00490306: 0x012C,
+       0x00690306: 0x012D,
+       0x00490328: 0x012E,
+       0x00690328: 0x012F,
+       0x00490307: 0x0130,
+       0x004A0302: 0x0134,
+       0x006A0302: 0x0135,
+       0x004B0327: 0x0136,
+       0x006B0327: 0x0137,
+       0x004C0301: 0x0139,
+       0x006C0301: 0x013A,
+       0x004C0327: 0x013B,
+       0x006C0327: 0x013C,
+       0x004C030C: 0x013D,
+       0x006C030C: 0x013E,
+       0x004E0301: 0x0143,
+       0x006E0301: 0x0144,
+       0x004E0327: 0x0145,
+       0x006E0327: 0x0146,
+       0x004E030C: 0x0147,
+       0x006E030C: 0x0148,
+       0x004F0304: 0x014C,
+       0x006F0304: 0x014D,
+       0x004F0306: 0x014E,
+       0x006F0306: 0x014F,
+       0x004F030B: 0x0150,
+       0x006F030B: 0x0151,
+       0x00520301: 0x0154,
+       0x00720301: 0x0155,
+       0x00520327: 0x0156,
+       0x00720327: 0x0157,
+       0x0052030C: 0x0158,
+       0x0072030C: 0x0159,
+       0x00530301: 0x015A,
+       0x00730301: 0x015B,
+       0x00530302: 0x015C,
+       0x00730302: 0x015D,
+       0x00530327: 0x015E,
+       0x00730327: 0x015F,
+       0x0053030C: 0x0160,
+       0x0073030C: 0x0161,
+       0x00540327: 0x0162,
+       0x00740327: 0x0163,
+       0x0054030C: 0x0164,
+       0x0074030C: 0x0165,
+       0x00550303: 0x0168,
+       0x00750303: 0x0169,
+       0x00550304: 0x016A,
+       0x00750304: 0x016B,
+       0x00550306: 0x016C,
+       0x00750306: 0x016D,
+       0x0055030A: 0x016E,
+       0x0075030A: 0x016F,
+       0x0055030B: 0x0170,
+       0x0075030B: 0x0171,
+       0x00550328: 0x0172,
+       0x00750328: 0x0173,
+       0x00570302: 0x0174,
+       0x00770302: 0x0175,
+       0x00590302: 0x0176,
+       0x00790302: 0x0177,
+       0x00590308: 0x0178,
+       0x005A0301: 0x0179,
+       0x007A0301: 0x017A,
+       0x005A0307: 0x017B,
+       0x007A0307: 0x017C,
+       0x005A030C: 0x017D,
+       0x007A030C: 0x017E,
+       0x004F031B: 0x01A0,
+       0x006F031B: 0x01A1,
+       0x0055031B: 0x01AF,
+       0x0075031B: 0x01B0,
+       0x0041030C: 0x01CD,
+       0x0061030C: 0x01CE,
+       0x0049030C: 0x01CF,
+       0x0069030C: 0x01D0,
+       0x004F030C: 0x01D1,
+       0x006F030C: 0x01D2,
+       0x0055030C: 0x01D3,
+       0x0075030C: 0x01D4,
+       0x00DC0304: 0x01D5,
+       0x00FC0304: 0x01D6,
+       0x00DC0301: 0x01D7,
+       0x00FC0301: 0x01D8,
+       0x00DC030C: 0x01D9,
+       0x00FC030C: 0x01DA,
+       0x00DC0300: 0x01DB,
+       0x00FC0300: 0x01DC,
+       0x00C40304: 0x01DE,
+       0x00E40304: 0x01DF,
+       0x02260304: 0x01E0,
+       0x02270304: 0x01E1,
+       0x00C60304: 0x01E2,
+       0x00E60304: 0x01E3,
+       0x0047030C: 0x01E6,
+       0x0067030C: 0x01E7,
+       0x004B030C: 0x01E8,
+       0x006B030C: 0x01E9,
+       0x004F0328: 0x01EA,
+       0x006F0328: 0x01EB,
+       0x01EA0304: 0x01EC,
+       0x01EB0304: 0x01ED,
+       0x01B7030C: 0x01EE,
+       0x0292030C: 0x01EF,
+       0x006A030C: 0x01F0,
+       0x00470301: 0x01F4,
+       0x00670301: 0x01F5,
+       0x004E0300: 0x01F8,
+       0x006E0300: 0x01F9,
+       0x00C50301: 0x01FA,
+       0x00E50301: 0x01FB,
+       0x00C60301: 0x01FC,
+       0x00E60301: 0x01FD,
+       0x00D80301: 0x01FE,
+       0x00F80301: 0x01FF,
+       0x0041030F: 0x0200,
+       0x0061030F: 0x0201,
+       0x00410311: 0x0202,
+       0x00610311: 0x0203,
+       0x0045030F: 0x0204,
+       0x0065030F: 0x0205,
+       0x00450311: 0x0206,
+       0x00650311: 0x0207,
+       0x0049030F: 0x0208,
+       0x0069030F: 0x0209,
+       0x00490311: 0x020A,
+       0x00690311: 0x020B,
+       0x004F030F: 0x020C,
+       0x006F030F: 0x020D,
+       0x004F0311: 0x020E,
+       0x006F0311: 0x020F,
+       0x0052030F: 0x0210,
+       0x0072030F: 0x0211,
+       0x00520311: 0x0212,
+       0x00720311: 0x0213,
+       0x0055030F: 0x0214,
+       0x0075030F: 0x0215,
+       0x00550311: 0x0216,
+       0x00750311: 0x0217,
+       0x00530326: 0x0218,
+       0x00730326: 0x0219,
+       0x00540326: 0x021A,
+       0x00740326: 0x021B,
+       0x0048030C: 0x021E,
+       0x0068030C: 0x021F,
+       0x00410307: 0x0226,
+       0x00610307: 0x0227,
+       0x00450327: 0x0228,
+       0x00650327: 0x0229,
+       0x00D60304: 0x022A,
+       0x00F60304: 0x022B,
+       0x00D50304: 0x022C,
+       0x00F50304: 0x022D,
+       0x004F0307: 0x022E,
+       0x006F0307: 0x022F,
+       0x022E0304: 0x0230,
+       0x022F0304: 0x0231,
+       0x00590304: 0x0232,
+       0x00790304: 0x0233,
+       0x00A80301: 0x0385,
+       0x03910301: 0x0386,
+       0x03950301: 0x0388,
+       0x03970301: 0x0389,
+       0x03990301: 0x038A,
+       0x039F0301: 0x038C,
+       0x03A50301: 0x038E,
+       0x03A90301: 0x038F,
+       0x03CA0301: 0x0390,
+       0x03990308: 0x03AA,
+       0x03A50308: 0x03AB,
+       0x03B10301: 0x03AC,
+       0x03B50301: 0x03AD,
+       0x03B70301: 0x03AE,
+       0x03B90301: 0x03AF,
+       0x03CB0301: 0x03B0,
+       0x03B90308: 0x03CA,
+       0x03C50308: 0x03CB,
+       0x03BF0301: 0x03CC,
+       0x03C50301: 0x03CD,
+       0x03C90301: 0x03CE,
+       0x03D20301: 0x03D3,
+       0x03D20308: 0x03D4,
+       0x04150300: 0x0400,
+       0x04150308: 0x0401,
+       0x04130301: 0x0403,
+       0x04060308: 0x0407,
+       0x041A0301: 0x040C,
+       0x04180300: 0x040D,
+       0x04230306: 0x040E,
+       0x04180306: 0x0419,
+       0x04380306: 0x0439,
+       0x04350300: 0x0450,
+       0x04350308: 0x0451,
+       0x04330301: 0x0453,
+       0x04560308: 0x0457,
+       0x043A0301: 0x045C,
+       0x04380300: 0x045D,
+       0x04430306: 0x045E,
+       0x0474030F: 0x0476,
+       0x0475030F: 0x0477,
+       0x04160306: 0x04C1,
+       0x04360306: 0x04C2,
+       0x04100306: 0x04D0,
+       0x04300306: 0x04D1,
+       0x04100308: 0x04D2,
+       0x04300308: 0x04D3,
+       0x04150306: 0x04D6,
+       0x04350306: 0x04D7,
+       0x04D80308: 0x04DA,
+       0x04D90308: 0x04DB,
+       0x04160308: 0x04DC,
+       0x04360308: 0x04DD,
+       0x04170308: 0x04DE,
+       0x04370308: 0x04DF,
+       0x04180304: 0x04E2,
+       0x04380304: 0x04E3,
+       0x04180308: 0x04E4,
+       0x04380308: 0x04E5,
+       0x041E0308: 0x04E6,
+       0x043E0308: 0x04E7,
+       0x04E80308: 0x04EA,
+       0x04E90308: 0x04EB,
+       0x042D0308: 0x04EC,
+       0x044D0308: 0x04ED,
+       0x04230304: 0x04EE,
+       0x04430304: 0x04EF,
+       0x04230308: 0x04F0,
+       0x04430308: 0x04F1,
+       0x0423030B: 0x04F2,
+       0x0443030B: 0x04F3,
+       0x04270308: 0x04F4,
+       0x04470308: 0x04F5,
+       0x042B0308: 0x04F8,
+       0x044B0308: 0x04F9,
+       0x06270653: 0x0622,
+       0x06270654: 0x0623,
+       0x06480654: 0x0624,
+       0x06270655: 0x0625,
+       0x064A0654: 0x0626,
+       0x06D50654: 0x06C0,
+       0x06C10654: 0x06C2,
+       0x06D20654: 0x06D3,
+       0x0928093C: 0x0929,
+       0x0930093C: 0x0931,
+       0x0933093C: 0x0934,
+       0x09C709BE: 0x09CB,
+       0x09C709D7: 0x09CC,
+       0x0B470B56: 0x0B48,
+       0x0B470B3E: 0x0B4B,
+       0x0B470B57: 0x0B4C,
+       0x0B920BD7: 0x0B94,
+       0x0BC60BBE: 0x0BCA,
+       0x0BC70BBE: 0x0BCB,
+       0x0BC60BD7: 0x0BCC,
+       0x0C460C56: 0x0C48,
+       0x0CBF0CD5: 0x0CC0,
+       0x0CC60CD5: 0x0CC7,
+       0x0CC60CD6: 0x0CC8,
+       0x0CC60CC2: 0x0CCA,
+       0x0CCA0CD5: 0x0CCB,
+       0x0D460D3E: 0x0D4A,
+       0x0D470D3E: 0x0D4B,
+       0x0D460D57: 0x0D4C,
+       0x0DD90DCA: 0x0DDA,
+       0x0DD90DCF: 0x0DDC,
+       0x0DDC0DCA: 0x0DDD,
+       0x0DD90DDF: 0x0DDE,
+       0x1025102E: 0x1026,
+       0x1B051B35: 0x1B06,
+       0x1B071B35: 0x1B08,
+       0x1B091B35: 0x1B0A,
+       0x1B0B1B35: 0x1B0C,
+       0x1B0D1B35: 0x1B0E,
+       0x1B111B35: 0x1B12,
+       0x1B3A1B35: 0x1B3B,
+       0x1B3C1B35: 0x1B3D,
+       0x1B3E1B35: 0x1B40,
+       0x1B3F1B35: 0x1B41,
+       0x1B421B35: 0x1B43,
+       0x00410325: 0x1E00,
+       0x00610325: 0x1E01,
+       0x00420307: 0x1E02,
+       0x00620307: 0x1E03,
+       0x00420323: 0x1E04,
+       0x00620323: 0x1E05,
+       0x00420331: 0x1E06,
+       0x00620331: 0x1E07,
+       0x00C70301: 0x1E08,
+       0x00E70301: 0x1E09,
+       0x00440307: 0x1E0A,
+       0x00640307: 0x1E0B,
+       0x00440323: 0x1E0C,
+       0x00640323: 0x1E0D,
+       0x00440331: 0x1E0E,
+       0x00640331: 0x1E0F,
+       0x00440327: 0x1E10,
+       0x00640327: 0x1E11,
+       0x0044032D: 0x1E12,
+       0x0064032D: 0x1E13,
+       0x01120300: 0x1E14,
+       0x01130300: 0x1E15,
+       0x01120301: 0x1E16,
+       0x01130301: 0x1E17,
+       0x0045032D: 0x1E18,
+       0x0065032D: 0x1E19,
+       0x00450330: 0x1E1A,
+       0x00650330: 0x1E1B,
+       0x02280306: 0x1E1C,
+       0x02290306: 0x1E1D,
+       0x00460307: 0x1E1E,
+       0x00660307: 0x1E1F,
+       0x00470304: 0x1E20,
+       0x00670304: 0x1E21,
+       0x00480307: 0x1E22,
+       0x00680307: 0x1E23,
+       0x00480323: 0x1E24,
+       0x00680323: 0x1E25,
+       0x00480308: 0x1E26,
+       0x00680308: 0x1E27,
+       0x00480327: 0x1E28,
+       0x00680327: 0x1E29,
+       0x0048032E: 0x1E2A,
+       0x0068032E: 0x1E2B,
+       0x00490330: 0x1E2C,
+       0x00690330: 0x1E2D,
+       0x00CF0301: 0x1E2E,
+       0x00EF0301: 0x1E2F,
+       0x004B0301: 0x1E30,
+       0x006B0301: 0x1E31,
+       0x004B0323: 0x1E32,
+       0x006B0323: 0x1E33,
+       0x004B0331: 0x1E34,
+       0x006B0331: 0x1E35,
+       0x004C0323: 0x1E36,
+       0x006C0323: 0x1E37,
+       0x1E360304: 0x1E38,
+       0x1E370304: 0x1E39,
+       0x004C0331: 0x1E3A,
+       0x006C0331: 0x1E3B,
+       0x004C032D: 0x1E3C,
+       0x006C032D: 0x1E3D,
+       0x004D0301: 0x1E3E,
+       0x006D0301: 0x1E3F,
+       0x004D0307: 0x1E40,
+       0x006D0307: 0x1E41,
+       0x004D0323: 0x1E42,
+       0x006D0323: 0x1E43,
+       0x004E0307: 0x1E44,
+       0x006E0307: 0x1E45,
+       0x004E0323: 0x1E46,
+       0x006E0323: 0x1E47,
+       0x004E0331: 0x1E48,
+       0x006E0331: 0x1E49,
+       0x004E032D: 0x1E4A,
+       0x006E032D: 0x1E4B,
+       0x00D50301: 0x1E4C,
+       0x00F50301: 0x1E4D,
+       0x00D50308: 0x1E4E,
+       0x00F50308: 0x1E4F,
+       0x014C0300: 0x1E50,
+       0x014D0300: 0x1E51,
+       0x014C0301: 0x1E52,
+       0x014D0301: 0x1E53,
+       0x00500301: 0x1E54,
+       0x00700301: 0x1E55,
+       0x00500307: 0x1E56,
+       0x00700307: 0x1E57,
+       0x00520307: 0x1E58,
+       0x00720307: 0x1E59,
+       0x00520323: 0x1E5A,
+       0x00720323: 0x1E5B,
+       0x1E5A0304: 0x1E5C,
+       0x1E5B0304: 0x1E5D,
+       0x00520331: 0x1E5E,
+       0x00720331: 0x1E5F,
+       0x00530307: 0x1E60,
+       0x00730307: 0x1E61,
+       0x00530323: 0x1E62,
+       0x00730323: 0x1E63,
+       0x015A0307: 0x1E64,
+       0x015B0307: 0x1E65,
+       0x01600307: 0x1E66,
+       0x01610307: 0x1E67,
+       0x1E620307: 0x1E68,
+       0x1E630307: 0x1E69,
+       0x00540307: 0x1E6A,
+       0x00740307: 0x1E6B,
+       0x00540323: 0x1E6C,
+       0x00740323: 0x1E6D,
+       0x00540331: 0x1E6E,
+       0x00740331: 0x1E6F,
+       0x0054032D: 0x1E70,
+       0x0074032D: 0x1E71,
+       0x00550324: 0x1E72,
+       0x00750324: 0x1E73,
+       0x00550330: 0x1E74,
+       0x00750330: 0x1E75,
+       0x0055032D: 0x1E76,
+       0x0075032D: 0x1E77,
+       0x01680301: 0x1E78,
+       0x01690301: 0x1E79,
+       0x016A0308: 0x1E7A,
+       0x016B0308: 0x1E7B,
+       0x00560303: 0x1E7C,
+       0x00760303: 0x1E7D,
+       0x00560323: 0x1E7E,
+       0x00760323: 0x1E7F,
+       0x00570300: 0x1E80,
+       0x00770300: 0x1E81,
+       0x00570301: 0x1E82,
+       0x00770301: 0x1E83,
+       0x00570308: 0x1E84,
+       0x00770308: 0x1E85,
+       0x00570307: 0x1E86,
+       0x00770307: 0x1E87,
+       0x00570323: 0x1E88,
+       0x00770323: 0x1E89,
+       0x00580307: 0x1E8A,
+       0x00780307: 0x1E8B,
+       0x00580308: 0x1E8C,
+       0x00780308: 0x1E8D,
+       0x00590307: 0x1E8E,
+       0x00790307: 0x1E8F,
+       0x005A0302: 0x1E90,
+       0x007A0302: 0x1E91,
+       0x005A0323: 0x1E92,
+       0x007A0323: 0x1E93,
+       0x005A0331: 0x1E94,
+       0x007A0331: 0x1E95,
+       0x00680331: 0x1E96,
+       0x00740308: 0x1E97,
+       0x0077030A: 0x1E98,
+       0x0079030A: 0x1E99,
+       0x017F0307: 0x1E9B,
+       0x00410323: 0x1EA0,
+       0x00610323: 0x1EA1,
+       0x00410309: 0x1EA2,
+       0x00610309: 0x1EA3,
+       0x00C20301: 0x1EA4,
+       0x00E20301: 0x1EA5,
+       0x00C20300: 0x1EA6,
+       0x00E20300: 0x1EA7,
+       0x00C20309: 0x1EA8,
+       0x00E20309: 0x1EA9,
+       0x00C20303: 0x1EAA,
+       0x00E20303: 0x1EAB,
+       0x1EA00302: 0x1EAC,
+       0x1EA10302: 0x1EAD,
+       0x01020301: 0x1EAE,
+       0x01030301: 0x1EAF,
+       0x01020300: 0x1EB0,
+       0x01030300: 0x1EB1,
+       0x01020309: 0x1EB2,
+       0x01030309: 0x1EB3,
+       0x01020303: 0x1EB4,
+       0x01030303: 0x1EB5,
+       0x1EA00306: 0x1EB6,
+       0x1EA10306: 0x1EB7,
+       0x00450323: 0x1EB8,
+       0x00650323: 0x1EB9,
+       0x00450309: 0x1EBA,
+       0x00650309: 0x1EBB,
+       0x00450303: 0x1EBC,
+       0x00650303: 0x1EBD,
+       0x00CA0301: 0x1EBE,
+       0x00EA0301: 0x1EBF,
+       0x00CA0300: 0x1EC0,
+       0x00EA0300: 0x1EC1,
+       0x00CA0309: 0x1EC2,
+       0x00EA0309: 0x1EC3,
+       0x00CA0303: 0x1EC4,
+       0x00EA0303: 0x1EC5,
+       0x1EB80302: 0x1EC6,
+       0x1EB90302: 0x1EC7,
+       0x00490309: 0x1EC8,
+       0x00690309: 0x1EC9,
+       0x00490323: 0x1ECA,
+       0x00690323: 0x1ECB,
+       0x004F0323: 0x1ECC,
+       0x006F0323: 0x1ECD,
+       0x004F0309: 0x1ECE,
+       0x006F0309: 0x1ECF,
+       0x00D40301: 0x1ED0,
+       0x00F40301: 0x1ED1,
+       0x00D40300: 0x1ED2,
+       0x00F40300: 0x1ED3,
+       0x00D40309: 0x1ED4,
+       0x00F40309: 0x1ED5,
+       0x00D40303: 0x1ED6,
+       0x00F40303: 0x1ED7,
+       0x1ECC0302: 0x1ED8,
+       0x1ECD0302: 0x1ED9,
+       0x01A00301: 0x1EDA,
+       0x01A10301: 0x1EDB,
+       0x01A00300: 0x1EDC,
+       0x01A10300: 0x1EDD,
+       0x01A00309: 0x1EDE,
+       0x01A10309: 0x1EDF,
+       0x01A00303: 0x1EE0,
+       0x01A10303: 0x1EE1,
+       0x01A00323: 0x1EE2,
+       0x01A10323: 0x1EE3,
+       0x00550323: 0x1EE4,
+       0x00750323: 0x1EE5,
+       0x00550309: 0x1EE6,
+       0x00750309: 0x1EE7,
+       0x01AF0301: 0x1EE8,
+       0x01B00301: 0x1EE9,
+       0x01AF0300: 0x1EEA,
+       0x01B00300: 0x1EEB,
+       0x01AF0309: 0x1EEC,
+       0x01B00309: 0x1EED,
+       0x01AF0303: 0x1EEE,
+       0x01B00303: 0x1EEF,
+       0x01AF0323: 0x1EF0,
+       0x01B00323: 0x1EF1,
+       0x00590300: 0x1EF2,
+       0x00790300: 0x1EF3,
+       0x00590323: 0x1EF4,
+       0x00790323: 0x1EF5,
+       0x00590309: 0x1EF6,
+       0x00790309: 0x1EF7,
+       0x00590303: 0x1EF8,
+       0x00790303: 0x1EF9,
+       0x03B10313: 0x1F00,
+       0x03B10314: 0x1F01,
+       0x1F000300: 0x1F02,
+       0x1F010300: 0x1F03,
+       0x1F000301: 0x1F04,
+       0x1F010301: 0x1F05,
+       0x1F000342: 0x1F06,
+       0x1F010342: 0x1F07,
+       0x03910313: 0x1F08,
+       0x03910314: 0x1F09,
+       0x1F080300: 0x1F0A,
+       0x1F090300: 0x1F0B,
+       0x1F080301: 0x1F0C,
+       0x1F090301: 0x1F0D,
+       0x1F080342: 0x1F0E,
+       0x1F090342: 0x1F0F,
+       0x03B50313: 0x1F10,
+       0x03B50314: 0x1F11,
+       0x1F100300: 0x1F12,
+       0x1F110300: 0x1F13,
+       0x1F100301: 0x1F14,
+       0x1F110301: 0x1F15,
+       0x03950313: 0x1F18,
+       0x03950314: 0x1F19,
+       0x1F180300: 0x1F1A,
+       0x1F190300: 0x1F1B,
+       0x1F180301: 0x1F1C,
+       0x1F190301: 0x1F1D,
+       0x03B70313: 0x1F20,
+       0x03B70314: 0x1F21,
+       0x1F200300: 0x1F22,
+       0x1F210300: 0x1F23,
+       0x1F200301: 0x1F24,
+       0x1F210301: 0x1F25,
+       0x1F200342: 0x1F26,
+       0x1F210342: 0x1F27,
+       0x03970313: 0x1F28,
+       0x03970314: 0x1F29,
+       0x1F280300: 0x1F2A,
+       0x1F290300: 0x1F2B,
+       0x1F280301: 0x1F2C,
+       0x1F290301: 0x1F2D,
+       0x1F280342: 0x1F2E,
+       0x1F290342: 0x1F2F,
+       0x03B90313: 0x1F30,
+       0x03B90314: 0x1F31,
+       0x1F300300: 0x1F32,
+       0x1F310300: 0x1F33,
+       0x1F300301: 0x1F34,
+       0x1F310301: 0x1F35,
+       0x1F300342: 0x1F36,
+       0x1F310342: 0x1F37,
+       0x03990313: 0x1F38,
+       0x03990314: 0x1F39,
+       0x1F380300: 0x1F3A,
+       0x1F390300: 0x1F3B,
+       0x1F380301: 0x1F3C,
+       0x1F390301: 0x1F3D,
+       0x1F380342: 0x1F3E,
+       0x1F390342: 0x1F3F,
+       0x03BF0313: 0x1F40,
+       0x03BF0314: 0x1F41,
+       0x1F400300: 0x1F42,
+       0x1F410300: 0x1F43,
+       0x1F400301: 0x1F44,
+       0x1F410301: 0x1F45,
+       0x039F0313: 0x1F48,
+       0x039F0314: 0x1F49,
+       0x1F480300: 0x1F4A,
+       0x1F490300: 0x1F4B,
+       0x1F480301: 0x1F4C,
+       0x1F490301: 0x1F4D,
+       0x03C50313: 0x1F50,
+       0x03C50314: 0x1F51,
+       0x1F500300: 0x1F52,
+       0x1F510300: 0x1F53,
+       0x1F500301: 0x1F54,
+       0x1F510301: 0x1F55,
+       0x1F500342: 0x1F56,
+       0x1F510342: 0x1F57,
+       0x03A50314: 0x1F59,
+       0x1F590300: 0x1F5B,
+       0x1F590301: 0x1F5D,
+       0x1F590342: 0x1F5F,
+       0x03C90313: 0x1F60,
+       0x03C90314: 0x1F61,
+       0x1F600300: 0x1F62,
+       0x1F610300: 0x1F63,
+       0x1F600301: 0x1F64,
+       0x1F610301: 0x1F65,
+       0x1F600342: 0x1F66,
+       0x1F610342: 0x1F67,
+       0x03A90313: 0x1F68,
+       0x03A90314: 0x1F69,
+       0x1F680300: 0x1F6A,
+       0x1F690300: 0x1F6B,
+       0x1F680301: 0x1F6C,
+       0x1F690301: 0x1F6D,
+       0x1F680342: 0x1F6E,
+       0x1F690342: 0x1F6F,
+       0x03B10300: 0x1F70,
+       0x03B50300: 0x1F72,
+       0x03B70300: 0x1F74,
+       0x03B90300: 0x1F76,
+       0x03BF0300: 0x1F78,
+       0x03C50300: 0x1F7A,
+       0x03C90300: 0x1F7C,
+       0x1F000345: 0x1F80,
+       0x1F010345: 0x1F81,
+       0x1F020345: 0x1F82,
+       0x1F030345: 0x1F83,
+       0x1F040345: 0x1F84,
+       0x1F050345: 0x1F85,
+       0x1F060345: 0x1F86,
+       0x1F070345: 0x1F87,
+       0x1F080345: 0x1F88,
+       0x1F090345: 0x1F89,
+       0x1F0A0345: 0x1F8A,
+       0x1F0B0345: 0x1F8B,
+       0x1F0C0345: 0x1F8C,
+       0x1F0D0345: 0x1F8D,
+       0x1F0E0345: 0x1F8E,
+       0x1F0F0345: 0x1F8F,
+       0x1F200345: 0x1F90,
+       0x1F210345: 0x1F91,
+       0x1F220345: 0x1F92,
+       0x1F230345: 0x1F93,
+       0x1F240345: 0x1F94,
+       0x1F250345: 0x1F95,
+       0x1F260345: 0x1F96,
+       0x1F270345: 0x1F97,
+       0x1F280345: 0x1F98,
+       0x1F290345: 0x1F99,
+       0x1F2A0345: 0x1F9A,
+       0x1F2B0345: 0x1F9B,
+       0x1F2C0345: 0x1F9C,
+       0x1F2D0345: 0x1F9D,
+       0x1F2E0345: 0x1F9E,
+       0x1F2F0345: 0x1F9F,
+       0x1F600345: 0x1FA0,
+       0x1F610345: 0x1FA1,
+       0x1F620345: 0x1FA2,
+       0x1F630345: 0x1FA3,
+       0x1F640345: 0x1FA4,
+       0x1F650345: 0x1FA5,
+       0x1F660345: 0x1FA6,
+       0x1F670345: 0x1FA7,
+       0x1F680345: 0x1FA8,
+       0x1F690345: 0x1FA9,
+       0x1F6A0345: 0x1FAA,
+       0x1F6B0345: 0x1FAB,
+       0x1F6C0345: 0x1FAC,
+       0x1F6D0345: 0x1FAD,
+       0x1F6E0345: 0x1FAE,
+       0x1F6F0345: 0x1FAF,
+       0x03B10306: 0x1FB0,
+       0x03B10304: 0x1FB1,
+       0x1F700345: 0x1FB2,
+       0x03B10345: 0x1FB3,
+       0x03AC0345: 0x1FB4,
+       0x03B10342: 0x1FB6,
+       0x1FB60345: 0x1FB7,
+       0x03910306: 0x1FB8,
+       0x03910304: 0x1FB9,
+       0x03910300: 0x1FBA,
+       0x03910345: 0x1FBC,
+       0x00A80342: 0x1FC1,
+       0x1F740345: 0x1FC2,
+       0x03B70345: 0x1FC3,
+       0x03AE0345: 0x1FC4,
+       0x03B70342: 0x1FC6,
+       0x1FC60345: 0x1FC7,
+       0x03950300: 0x1FC8,
+       0x03970300: 0x1FCA,
+       0x03970345: 0x1FCC,
+       0x1FBF0300: 0x1FCD,
+       0x1FBF0301: 0x1FCE,
+       0x1FBF0342: 0x1FCF,
+       0x03B90306: 0x1FD0,
+       0x03B90304: 0x1FD1,
+       0x03CA0300: 0x1FD2,
+       0x03B90342: 0x1FD6,
+       0x03CA0342: 0x1FD7,
+       0x03990306: 0x1FD8,
+       0x03990304: 0x1FD9,
+       0x03990300: 0x1FDA,
+       0x1FFE0300: 0x1FDD,
+       0x1FFE0301: 0x1FDE,
+       0x1FFE0342: 0x1FDF,
+       0x03C50306: 0x1FE0,
+       0x03C50304: 0x1FE1,
+       0x03CB0300: 0x1FE2,
+       0x03C10313: 0x1FE4,
+       0x03C10314: 0x1FE5,
+       0x03C50342: 0x1FE6,
+       0x03CB0342: 0x1FE7,
+       0x03A50306: 0x1FE8,
+       0x03A50304: 0x1FE9,
+       0x03A50300: 0x1FEA,
+       0x03A10314: 0x1FEC,
+       0x00A80300: 0x1FED,
+       0x1F7C0345: 0x1FF2,
+       0x03C90345: 0x1FF3,
+       0x03CE0345: 0x1FF4,
+       0x03C90342: 0x1FF6,
+       0x1FF60345: 0x1FF7,
+       0x039F0300: 0x1FF8,
+       0x03A90300: 0x1FFA,
+       0x03A90345: 0x1FFC,
+       0x21900338: 0x219A,
+       0x21920338: 0x219B,
+       0x21940338: 0x21AE,
+       0x21D00338: 0x21CD,
+       0x21D40338: 0x21CE,
+       0x21D20338: 0x21CF,
+       0x22030338: 0x2204,
+       0x22080338: 0x2209,
+       0x220B0338: 0x220C,
+       0x22230338: 0x2224,
+       0x22250338: 0x2226,
+       0x223C0338: 0x2241,
+       0x22430338: 0x2244,
+       0x22450338: 0x2247,
+       0x22480338: 0x2249,
+       0x003D0338: 0x2260,
+       0x22610338: 0x2262,
+       0x224D0338: 0x226D,
+       0x003C0338: 0x226E,
+       0x003E0338: 0x226F,
+       0x22640338: 0x2270,
+       0x22650338: 0x2271,
+       0x22720338: 0x2274,
+       0x22730338: 0x2275,
+       0x22760338: 0x2278,
+       0x22770338: 0x2279,
+       0x227A0338: 0x2280,
+       0x227B0338: 0x2281,
+       0x22820338: 0x2284,
+       0x22830338: 0x2285,
+       0x22860338: 0x2288,
+       0x22870338: 0x2289,
+       0x22A20338: 0x22AC,
+       0x22A80338: 0x22AD,
+       0x22A90338: 0x22AE,
+       0x22AB0338: 0x22AF,
+       0x227C0338: 0x22E0,
+       0x227D0338: 0x22E1,
+       0x22910338: 0x22E2,
+       0x22920338: 0x22E3,
+       0x22B20338: 0x22EA,
+       0x22B30338: 0x22EB,
+       0x22B40338: 0x22EC,
+       0x22B50338: 0x22ED,
+       0x304B3099: 0x304C,
+       0x304D3099: 0x304E,
+       0x304F3099: 0x3050,
+       0x30513099: 0x3052,
+       0x30533099: 0x3054,
+       0x30553099: 0x3056,
+       0x30573099: 0x3058,
+       0x30593099: 0x305A,
+       0x305B3099: 0x305C,
+       0x305D3099: 0x305E,
+       0x305F3099: 0x3060,
+       0x30613099: 0x3062,
+       0x30643099: 0x3065,
+       0x30663099: 0x3067,
+       0x30683099: 0x3069,
+       0x306F3099: 0x3070,
+       0x306F309A: 0x3071,
+       0x30723099: 0x3073,
+       0x3072309A: 0x3074,
+       0x30753099: 0x3076,
+       0x3075309A: 0x3077,
+       0x30783099: 0x3079,
+       0x3078309A: 0x307A,
+       0x307B3099: 0x307C,
+       0x307B309A: 0x307D,
+       0x30463099: 0x3094,
+       0x309D3099: 0x309E,
+       0x30AB3099: 0x30AC,
+       0x30AD3099: 0x30AE,
+       0x30AF3099: 0x30B0,
+       0x30B13099: 0x30B2,
+       0x30B33099: 0x30B4,
+       0x30B53099: 0x30B6,
+       0x30B73099: 0x30B8,
+       0x30B93099: 0x30BA,
+       0x30BB3099: 0x30BC,
+       0x30BD3099: 0x30BE,
+       0x30BF3099: 0x30C0,
+       0x30C13099: 0x30C2,
+       0x30C43099: 0x30C5,
+       0x30C63099: 0x30C7,
+       0x30C83099: 0x30C9,
+       0x30CF3099: 0x30D0,
+       0x30CF309A: 0x30D1,
+       0x30D23099: 0x30D3,
+       0x30D2309A: 0x30D4,
+       0x30D53099: 0x30D6,
+       0x30D5309A: 0x30D7,
+       0x30D83099: 0x30D9,
+       0x30D8309A: 0x30DA,
+       0x30DB3099: 0x30DC,
+       0x30DB309A: 0x30DD,
+       0x30A63099: 0x30F4,
+       0x30EF3099: 0x30F7,
+       0x30F03099: 0x30F8,
+       0x30F13099: 0x30F9,
+       0x30F23099: 0x30FA,
+       0x30FD3099: 0x30FE,
+       0x109910BA: 0x1109A,
+       0x109B10BA: 0x1109C,
+       0x10A510BA: 0x110AB,
+       0x11311127: 0x1112E,
+       0x11321127: 0x1112F,
+       0x1347133E: 0x1134B,
+       0x13471357: 0x1134C,
+       0x14B914BA: 0x114BB,
+       0x14B914B0: 0x114BC,
+       0x14B914BD: 0x114BE,
+       0x15B815AF: 0x115BA,
+       0x15B915AF: 0x115BB,
+}
+
+// Total size of tables: 53KB (54006 bytes)
diff --git a/vendor/golang.org/x/text/unicode/norm/transform.go b/vendor/golang.org/x/text/unicode/norm/transform.go
new file mode 100644 (file)
index 0000000..8589067
--- /dev/null
@@ -0,0 +1,88 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package norm
+
+import (
+       "unicode/utf8"
+
+       "golang.org/x/text/transform"
+)
+
+// Reset implements the Reset method of the transform.Transformer interface.
+func (Form) Reset() {}
+
+// Transform implements the Transform method of the transform.Transformer
+// interface. It may need to write segments of up to MaxSegmentSize at once.
+// Users should either catch ErrShortDst and allow dst to grow or have dst be at
+// least of size MaxTransformChunkSize to be guaranteed of progress.
+func (f Form) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+       n := 0
+       // Cap the maximum number of src bytes to check.
+       b := src
+       eof := atEOF
+       if ns := len(dst); ns < len(b) {
+               err = transform.ErrShortDst
+               eof = false
+               b = b[:ns]
+       }
+       i, ok := formTable[f].quickSpan(inputBytes(b), n, len(b), eof)
+       n += copy(dst[n:], b[n:i])
+       if !ok {
+               nDst, nSrc, err = f.transform(dst[n:], src[n:], atEOF)
+               return nDst + n, nSrc + n, err
+       }
+       if n < len(src) && !atEOF {
+               err = transform.ErrShortSrc
+       }
+       return n, n, err
+}
+
+func flushTransform(rb *reorderBuffer) bool {
+       // Write out (must fully fit in dst, or else it is a ErrShortDst).
+       if len(rb.out) < rb.nrune*utf8.UTFMax {
+               return false
+       }
+       rb.out = rb.out[rb.flushCopy(rb.out):]
+       return true
+}
+
+var errs = []error{nil, transform.ErrShortDst, transform.ErrShortSrc}
+
+// transform implements the transform.Transformer interface. It is only called
+// when quickSpan does not pass for a given string.
+func (f Form) transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+       // TODO: get rid of reorderBuffer. See CL 23460044.
+       rb := reorderBuffer{}
+       rb.init(f, src)
+       for {
+               // Load segment into reorder buffer.
+               rb.setFlusher(dst[nDst:], flushTransform)
+               end := decomposeSegment(&rb, nSrc, atEOF)
+               if end < 0 {
+                       return nDst, nSrc, errs[-end]
+               }
+               nDst = len(dst) - len(rb.out)
+               nSrc = end
+
+               // Next quickSpan.
+               end = rb.nsrc
+               eof := atEOF
+               if n := nSrc + len(dst) - nDst; n < end {
+                       err = transform.ErrShortDst
+                       end = n
+                       eof = false
+               }
+               end, ok := rb.f.quickSpan(rb.src, nSrc, end, eof)
+               n := copy(dst[nDst:], rb.src.bytes[nSrc:end])
+               nSrc += n
+               nDst += n
+               if ok {
+                       if n < rb.nsrc && !atEOF {
+                               err = transform.ErrShortSrc
+                       }
+                       return nDst, nSrc, err
+               }
+       }
+}
diff --git a/vendor/golang.org/x/text/unicode/norm/trie.go b/vendor/golang.org/x/text/unicode/norm/trie.go
new file mode 100644 (file)
index 0000000..423386b
--- /dev/null
@@ -0,0 +1,54 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package norm
+
+type valueRange struct {
+       value  uint16 // header: value:stride
+       lo, hi byte   // header: lo:n
+}
+
+type sparseBlocks struct {
+       values []valueRange
+       offset []uint16
+}
+
+var nfcSparse = sparseBlocks{
+       values: nfcSparseValues[:],
+       offset: nfcSparseOffset[:],
+}
+
+var nfkcSparse = sparseBlocks{
+       values: nfkcSparseValues[:],
+       offset: nfkcSparseOffset[:],
+}
+
+var (
+       nfcData  = newNfcTrie(0)
+       nfkcData = newNfkcTrie(0)
+)
+
+// lookupValue determines the type of block n and looks up the value for b.
+// For n < t.cutoff, the block is a simple lookup table. Otherwise, the block
+// is a list of ranges with an accompanying value. Given a matching range r,
+// the value for b is by r.value + (b - r.lo) * stride.
+func (t *sparseBlocks) lookup(n uint32, b byte) uint16 {
+       offset := t.offset[n]
+       header := t.values[offset]
+       lo := offset + 1
+       hi := lo + uint16(header.lo)
+       for lo < hi {
+               m := lo + (hi-lo)/2
+               r := t.values[m]
+               if r.lo <= b && b <= r.hi {
+                       return r.value + uint16(b-r.lo)*header.value
+               }
+               if b < r.lo {
+                       hi = m
+               } else {
+                       lo = m + 1
+               }
+       }
+       return 0
+}
diff --git a/vendor/golang.org/x/text/unicode/norm/triegen.go b/vendor/golang.org/x/text/unicode/norm/triegen.go
new file mode 100644 (file)
index 0000000..45d7119
--- /dev/null
@@ -0,0 +1,117 @@
+// Copyright 2011 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+// Trie table generator.
+// Used by make*tables tools to generate a go file with trie data structures
+// for mapping UTF-8 to a 16-bit value. All but the last byte in a UTF-8 byte
+// sequence are used to lookup offsets in the index table to be used for the
+// next byte. The last byte is used to index into a table with 16-bit values.
+
+package main
+
+import (
+       "fmt"
+       "io"
+)
+
+const maxSparseEntries = 16
+
+type normCompacter struct {
+       sparseBlocks [][]uint64
+       sparseOffset []uint16
+       sparseCount  int
+       name         string
+}
+
+func mostFrequentStride(a []uint64) int {
+       counts := make(map[int]int)
+       var v int
+       for _, x := range a {
+               if stride := int(x) - v; v != 0 && stride >= 0 {
+                       counts[stride]++
+               }
+               v = int(x)
+       }
+       var maxs, maxc int
+       for stride, cnt := range counts {
+               if cnt > maxc || (cnt == maxc && stride < maxs) {
+                       maxs, maxc = stride, cnt
+               }
+       }
+       return maxs
+}
+
+func countSparseEntries(a []uint64) int {
+       stride := mostFrequentStride(a)
+       var v, count int
+       for _, tv := range a {
+               if int(tv)-v != stride {
+                       if tv != 0 {
+                               count++
+                       }
+               }
+               v = int(tv)
+       }
+       return count
+}
+
+func (c *normCompacter) Size(v []uint64) (sz int, ok bool) {
+       if n := countSparseEntries(v); n <= maxSparseEntries {
+               return (n+1)*4 + 2, true
+       }
+       return 0, false
+}
+
+func (c *normCompacter) Store(v []uint64) uint32 {
+       h := uint32(len(c.sparseOffset))
+       c.sparseBlocks = append(c.sparseBlocks, v)
+       c.sparseOffset = append(c.sparseOffset, uint16(c.sparseCount))
+       c.sparseCount += countSparseEntries(v) + 1
+       return h
+}
+
+func (c *normCompacter) Handler() string {
+       return c.name + "Sparse.lookup"
+}
+
+func (c *normCompacter) Print(w io.Writer) (retErr error) {
+       p := func(f string, x ...interface{}) {
+               if _, err := fmt.Fprintf(w, f, x...); retErr == nil && err != nil {
+                       retErr = err
+               }
+       }
+
+       ls := len(c.sparseBlocks)
+       p("// %sSparseOffset: %d entries, %d bytes\n", c.name, ls, ls*2)
+       p("var %sSparseOffset = %#v\n\n", c.name, c.sparseOffset)
+
+       ns := c.sparseCount
+       p("// %sSparseValues: %d entries, %d bytes\n", c.name, ns, ns*4)
+       p("var %sSparseValues = [%d]valueRange {", c.name, ns)
+       for i, b := range c.sparseBlocks {
+               p("\n// Block %#x, offset %#x", i, c.sparseOffset[i])
+               var v int
+               stride := mostFrequentStride(b)
+               n := countSparseEntries(b)
+               p("\n{value:%#04x,lo:%#02x},", stride, uint8(n))
+               for i, nv := range b {
+                       if int(nv)-v != stride {
+                               if v != 0 {
+                                       p(",hi:%#02x},", 0x80+i-1)
+                               }
+                               if nv != 0 {
+                                       p("\n{value:%#04x,lo:%#02x", nv, 0x80+i)
+                               }
+                       }
+                       v = int(nv)
+               }
+               if v != 0 {
+                       p(",hi:%#02x},", 0x80+len(b)-1)
+               }
+       }
+       p("\n}\n\n")
+       return
+}
diff --git a/vendor/golang.org/x/text/unicode/rangetable/gen.go b/vendor/golang.org/x/text/unicode/rangetable/gen.go
new file mode 100644 (file)
index 0000000..bea49dd
--- /dev/null
@@ -0,0 +1,113 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// +build ignore
+
+package main
+
+import (
+       "bytes"
+       "flag"
+       "fmt"
+       "io"
+       "log"
+       "reflect"
+       "sort"
+       "strings"
+       "unicode"
+
+       "golang.org/x/text/internal/gen"
+       "golang.org/x/text/internal/ucd"
+       "golang.org/x/text/unicode/rangetable"
+)
+
+var versionList = flag.String("versions", "",
+       "list of versions for which to generate RangeTables")
+
+const bootstrapMessage = `No versions specified.
+To bootstrap the code generation, run:
+       go run gen.go --versions=4.1.0,5.0.0,6.0.0,6.1.0,6.2.0,6.3.0,7.0.0
+
+and ensure that the latest versions are included by checking:
+       http://www.unicode.org/Public/`
+
+func getVersions() []string {
+       if *versionList == "" {
+               log.Fatal(bootstrapMessage)
+       }
+
+       versions := strings.Split(*versionList, ",")
+       sort.Strings(versions)
+
+       // Ensure that at least the current version is included.
+       for _, v := range versions {
+               if v == gen.UnicodeVersion() {
+                       return versions
+               }
+       }
+
+       versions = append(versions, gen.UnicodeVersion())
+       sort.Strings(versions)
+       return versions
+}
+
+func main() {
+       gen.Init()
+
+       versions := getVersions()
+
+       w := &bytes.Buffer{}
+
+       fmt.Fprintf(w, "//go:generate go run gen.go --versions=%s\n\n", strings.Join(versions, ","))
+       fmt.Fprintf(w, "import \"unicode\"\n\n")
+
+       vstr := func(s string) string { return strings.Replace(s, ".", "_", -1) }
+
+       fmt.Fprintf(w, "var assigned = map[string]*unicode.RangeTable{\n")
+       for _, v := range versions {
+               fmt.Fprintf(w, "\t%q: assigned%s,\n", v, vstr(v))
+       }
+       fmt.Fprintf(w, "}\n\n")
+
+       var size int
+       for _, v := range versions {
+               assigned := []rune{}
+
+               r := gen.Open("http://www.unicode.org/Public/", "", v+"/ucd/UnicodeData.txt")
+               ucd.Parse(r, func(p *ucd.Parser) {
+                       assigned = append(assigned, p.Rune(0))
+               })
+
+               rt := rangetable.New(assigned...)
+               sz := int(reflect.TypeOf(unicode.RangeTable{}).Size())
+               sz += int(reflect.TypeOf(unicode.Range16{}).Size()) * len(rt.R16)
+               sz += int(reflect.TypeOf(unicode.Range32{}).Size()) * len(rt.R32)
+
+               fmt.Fprintf(w, "// size %d bytes (%d KiB)\n", sz, sz/1024)
+               fmt.Fprintf(w, "var assigned%s = ", vstr(v))
+               print(w, rt)
+
+               size += sz
+       }
+
+       fmt.Fprintf(w, "// Total size %d bytes (%d KiB)\n", size, size/1024)
+
+       gen.WriteGoFile("tables.go", "rangetable", w.Bytes())
+}
+
+func print(w io.Writer, rt *unicode.RangeTable) {
+       fmt.Fprintln(w, "&unicode.RangeTable{")
+       fmt.Fprintln(w, "\tR16: []unicode.Range16{")
+       for _, r := range rt.R16 {
+               fmt.Fprintf(w, "\t\t{%#04x, %#04x, %d},\n", r.Lo, r.Hi, r.Stride)
+       }
+       fmt.Fprintln(w, "\t},")
+       fmt.Fprintln(w, "\tR32: []unicode.Range32{")
+       for _, r := range rt.R32 {
+               fmt.Fprintf(w, "\t\t{%#08x, %#08x, %d},\n", r.Lo, r.Hi, r.Stride)
+       }
+       fmt.Fprintln(w, "\t},")
+       fmt.Fprintf(w, "\tLatinOffset: %d,\n", rt.LatinOffset)
+       fmt.Fprintf(w, "}\n\n")
+}
diff --git a/vendor/golang.org/x/text/unicode/rangetable/merge.go b/vendor/golang.org/x/text/unicode/rangetable/merge.go
new file mode 100644 (file)
index 0000000..ea2a080
--- /dev/null
@@ -0,0 +1,260 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package rangetable
+
+import (
+       "unicode"
+)
+
+// atEnd is used to mark a completed iteration.
+const atEnd = unicode.MaxRune + 1
+
+// Merge returns a new RangeTable that is the union of the given tables.
+// It can also be used to compact user-created RangeTables. The entries in
+// R16 and R32 for any given RangeTable should be sorted and non-overlapping.
+//
+// A lookup in the resulting table can be several times faster than using In
+// directly on the ranges. Merge is an expensive operation, however, and only
+// makes sense if one intends to use the result for more than a couple of
+// hundred lookups.
+func Merge(ranges ...*unicode.RangeTable) *unicode.RangeTable {
+       rt := &unicode.RangeTable{}
+       if len(ranges) == 0 {
+               return rt
+       }
+
+       iter := tablesIter(make([]tableIndex, len(ranges)))
+
+       for i, t := range ranges {
+               iter[i] = tableIndex{t, 0, atEnd}
+               if len(t.R16) > 0 {
+                       iter[i].next = rune(t.R16[0].Lo)
+               }
+       }
+
+       if r0 := iter.next16(); r0.Stride != 0 {
+               for {
+                       r1 := iter.next16()
+                       if r1.Stride == 0 {
+                               rt.R16 = append(rt.R16, r0)
+                               break
+                       }
+                       stride := r1.Lo - r0.Hi
+                       if (r1.Lo == r1.Hi || stride == r1.Stride) && (r0.Lo == r0.Hi || stride == r0.Stride) {
+                               // Fully merge the next range into the previous one.
+                               r0.Hi, r0.Stride = r1.Hi, stride
+                               continue
+                       } else if stride == r0.Stride {
+                               // Move the first element of r1 to r0. This may eliminate an
+                               // entry.
+                               r0.Hi = r1.Lo
+                               r0.Stride = stride
+                               r1.Lo = r1.Lo + r1.Stride
+                               if r1.Lo > r1.Hi {
+                                       continue
+                               }
+                       }
+                       rt.R16 = append(rt.R16, r0)
+                       r0 = r1
+               }
+       }
+
+       for i, t := range ranges {
+               iter[i] = tableIndex{t, 0, atEnd}
+               if len(t.R32) > 0 {
+                       iter[i].next = rune(t.R32[0].Lo)
+               }
+       }
+
+       if r0 := iter.next32(); r0.Stride != 0 {
+               for {
+                       r1 := iter.next32()
+                       if r1.Stride == 0 {
+                               rt.R32 = append(rt.R32, r0)
+                               break
+                       }
+                       stride := r1.Lo - r0.Hi
+                       if (r1.Lo == r1.Hi || stride == r1.Stride) && (r0.Lo == r0.Hi || stride == r0.Stride) {
+                               // Fully merge the next range into the previous one.
+                               r0.Hi, r0.Stride = r1.Hi, stride
+                               continue
+                       } else if stride == r0.Stride {
+                               // Move the first element of r1 to r0. This may eliminate an
+                               // entry.
+                               r0.Hi = r1.Lo
+                               r1.Lo = r1.Lo + r1.Stride
+                               if r1.Lo > r1.Hi {
+                                       continue
+                               }
+                       }
+                       rt.R32 = append(rt.R32, r0)
+                       r0 = r1
+               }
+       }
+
+       for i := 0; i < len(rt.R16) && rt.R16[i].Hi <= unicode.MaxLatin1; i++ {
+               rt.LatinOffset = i + 1
+       }
+
+       return rt
+}
+
+type tableIndex struct {
+       t    *unicode.RangeTable
+       p    uint32
+       next rune
+}
+
+type tablesIter []tableIndex
+
+// sortIter does an insertion sort using the next field of tableIndex. Insertion
+// sort is a good sorting algorithm for this case.
+func sortIter(t []tableIndex) {
+       for i := range t {
+               for j := i; j > 0 && t[j-1].next > t[j].next; j-- {
+                       t[j], t[j-1] = t[j-1], t[j]
+               }
+       }
+}
+
+// next16 finds the ranged to be added to the table. If ranges overlap between
+// multiple tables it clips the result to a non-overlapping range if the
+// elements are not fully subsumed. It returns a zero range if there are no more
+// ranges.
+func (ti tablesIter) next16() unicode.Range16 {
+       sortIter(ti)
+
+       t0 := ti[0]
+       if t0.next == atEnd {
+               return unicode.Range16{}
+       }
+       r0 := t0.t.R16[t0.p]
+       r0.Lo = uint16(t0.next)
+
+       // We restrict the Hi of the current range if it overlaps with another range.
+       for i := range ti {
+               tn := ti[i]
+               // Since our tableIndices are sorted by next, we can break if the there
+               // is no overlap. The first value of a next range can always be merged
+               // into the current one, so we can break in case of equality as well.
+               if rune(r0.Hi) <= tn.next {
+                       break
+               }
+               rn := tn.t.R16[tn.p]
+               rn.Lo = uint16(tn.next)
+
+               // Limit r0.Hi based on next ranges in list, but allow it to overlap
+               // with ranges as long as it subsumes it.
+               m := (rn.Lo - r0.Lo) % r0.Stride
+               if m == 0 && (rn.Stride == r0.Stride || rn.Lo == rn.Hi) {
+                       // Overlap, take the min of the two Hi values: for simplicity's sake
+                       // we only process one range at a time.
+                       if r0.Hi > rn.Hi {
+                               r0.Hi = rn.Hi
+                       }
+               } else {
+                       // Not a compatible stride. Set to the last possible value before
+                       // rn.Lo, but ensure there is at least one value.
+                       if x := rn.Lo - m; r0.Lo <= x {
+                               r0.Hi = x
+                       }
+                       break
+               }
+       }
+
+       // Update the next values for each table.
+       for i := range ti {
+               tn := &ti[i]
+               if rune(r0.Hi) < tn.next {
+                       break
+               }
+               rn := tn.t.R16[tn.p]
+               stride := rune(rn.Stride)
+               tn.next += stride * (1 + ((rune(r0.Hi) - tn.next) / stride))
+               if rune(rn.Hi) < tn.next {
+                       if tn.p++; int(tn.p) == len(tn.t.R16) {
+                               tn.next = atEnd
+                       } else {
+                               tn.next = rune(tn.t.R16[tn.p].Lo)
+                       }
+               }
+       }
+
+       if r0.Lo == r0.Hi {
+               r0.Stride = 1
+       }
+
+       return r0
+}
+
+// next32 finds the ranged to be added to the table. If ranges overlap between
+// multiple tables it clips the result to a non-overlapping range if the
+// elements are not fully subsumed. It returns a zero range if there are no more
+// ranges.
+func (ti tablesIter) next32() unicode.Range32 {
+       sortIter(ti)
+
+       t0 := ti[0]
+       if t0.next == atEnd {
+               return unicode.Range32{}
+       }
+       r0 := t0.t.R32[t0.p]
+       r0.Lo = uint32(t0.next)
+
+       // We restrict the Hi of the current range if it overlaps with another range.
+       for i := range ti {
+               tn := ti[i]
+               // Since our tableIndices are sorted by next, we can break if the there
+               // is no overlap. The first value of a next range can always be merged
+               // into the current one, so we can break in case of equality as well.
+               if rune(r0.Hi) <= tn.next {
+                       break
+               }
+               rn := tn.t.R32[tn.p]
+               rn.Lo = uint32(tn.next)
+
+               // Limit r0.Hi based on next ranges in list, but allow it to overlap
+               // with ranges as long as it subsumes it.
+               m := (rn.Lo - r0.Lo) % r0.Stride
+               if m == 0 && (rn.Stride == r0.Stride || rn.Lo == rn.Hi) {
+                       // Overlap, take the min of the two Hi values: for simplicity's sake
+                       // we only process one range at a time.
+                       if r0.Hi > rn.Hi {
+                               r0.Hi = rn.Hi
+                       }
+               } else {
+                       // Not a compatible stride. Set to the last possible value before
+                       // rn.Lo, but ensure there is at least one value.
+                       if x := rn.Lo - m; r0.Lo <= x {
+                               r0.Hi = x
+                       }
+                       break
+               }
+       }
+
+       // Update the next values for each table.
+       for i := range ti {
+               tn := &ti[i]
+               if rune(r0.Hi) < tn.next {
+                       break
+               }
+               rn := tn.t.R32[tn.p]
+               stride := rune(rn.Stride)
+               tn.next += stride * (1 + ((rune(r0.Hi) - tn.next) / stride))
+               if rune(rn.Hi) < tn.next {
+                       if tn.p++; int(tn.p) == len(tn.t.R32) {
+                               tn.next = atEnd
+                       } else {
+                               tn.next = rune(tn.t.R32[tn.p].Lo)
+                       }
+               }
+       }
+
+       if r0.Lo == r0.Hi {
+               r0.Stride = 1
+       }
+
+       return r0
+}
diff --git a/vendor/golang.org/x/text/unicode/rangetable/rangetable.go b/vendor/golang.org/x/text/unicode/rangetable/rangetable.go
new file mode 100644 (file)
index 0000000..187882c
--- /dev/null
@@ -0,0 +1,70 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package rangetable provides utilities for creating and inspecting
+// unicode.RangeTables.
+package rangetable
+
+import (
+       "sort"
+       "unicode"
+)
+
+// New creates a RangeTable from the given runes, which may contain duplicates.
+func New(r ...rune) *unicode.RangeTable {
+       if len(r) == 0 {
+               return &unicode.RangeTable{}
+       }
+
+       sort.Sort(byRune(r))
+
+       // Remove duplicates.
+       k := 1
+       for i := 1; i < len(r); i++ {
+               if r[k-1] != r[i] {
+                       r[k] = r[i]
+                       k++
+               }
+       }
+
+       var rt unicode.RangeTable
+       for _, r := range r[:k] {
+               if r <= 0xFFFF {
+                       rt.R16 = append(rt.R16, unicode.Range16{Lo: uint16(r), Hi: uint16(r), Stride: 1})
+               } else {
+                       rt.R32 = append(rt.R32, unicode.Range32{Lo: uint32(r), Hi: uint32(r), Stride: 1})
+               }
+       }
+
+       // Optimize RangeTable.
+       return Merge(&rt)
+}
+
+type byRune []rune
+
+func (r byRune) Len() int           { return len(r) }
+func (r byRune) Swap(i, j int)      { r[i], r[j] = r[j], r[i] }
+func (r byRune) Less(i, j int) bool { return r[i] < r[j] }
+
+// Visit visits all runes in the given RangeTable in order, calling fn for each.
+func Visit(rt *unicode.RangeTable, fn func(rune)) {
+       for _, r16 := range rt.R16 {
+               for r := rune(r16.Lo); r <= rune(r16.Hi); r += rune(r16.Stride) {
+                       fn(r)
+               }
+       }
+       for _, r32 := range rt.R32 {
+               for r := rune(r32.Lo); r <= rune(r32.Hi); r += rune(r32.Stride) {
+                       fn(r)
+               }
+       }
+}
+
+// Assigned returns a RangeTable with all assigned code points for a given
+// Unicode version. This includes graphic, format, control, and private-use
+// characters. It returns nil if the data for the given version is not
+// available.
+func Assigned(version string) *unicode.RangeTable {
+       return assigned[version]
+}
diff --git a/vendor/golang.org/x/text/unicode/rangetable/tables.go b/vendor/golang.org/x/text/unicode/rangetable/tables.go
new file mode 100644 (file)
index 0000000..61c989b
--- /dev/null
@@ -0,0 +1,5735 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package rangetable
+
+//go:generate go run gen.go --versions=4.1.0,5.0.0,5.1.0,5.2.0,6.0.0,6.1.0,6.2.0,6.3.0,7.0.0,8.0.0,9.0.0
+
+import "unicode"
+
+var assigned = map[string]*unicode.RangeTable{
+       "4.1.0": assigned4_1_0,
+       "5.0.0": assigned5_0_0,
+       "5.1.0": assigned5_1_0,
+       "5.2.0": assigned5_2_0,
+       "6.0.0": assigned6_0_0,
+       "6.1.0": assigned6_1_0,
+       "6.2.0": assigned6_2_0,
+       "6.3.0": assigned6_3_0,
+       "7.0.0": assigned7_0_0,
+       "8.0.0": assigned8_0_0,
+       "9.0.0": assigned9_0_0,
+}
+
+// size 2924 bytes (2 KiB)
+var assigned4_1_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x0241, 1},
+               {0x0250, 0x036f, 1},
+               {0x0374, 0x0375, 1},
+               {0x037a, 0x037e, 4},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x03ce, 1},
+               {0x03d0, 0x0486, 1},
+               {0x0488, 0x04ce, 1},
+               {0x04d0, 0x04f9, 1},
+               {0x0500, 0x050f, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x0591, 0x05b9, 1},
+               {0x05bb, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x0603, 1},
+               {0x060b, 0x0615, 1},
+               {0x061b, 0x061e, 3},
+               {0x061f, 0x0621, 2},
+               {0x0622, 0x063a, 1},
+               {0x0640, 0x065e, 1},
+               {0x0660, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x076d, 1},
+               {0x0780, 0x07b1, 1},
+               {0x0901, 0x0939, 1},
+               {0x093c, 0x094d, 1},
+               {0x0950, 0x0954, 1},
+               {0x0958, 0x0970, 1},
+               {0x097d, 0x0981, 4},
+               {0x0982, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fa, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a59, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a74, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0aef, 1},
+               {0x0af1, 0x0b01, 16},
+               {0x0b02, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b43, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b61, 1},
+               {0x0b66, 0x0b71, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd7, 0x0be6, 15},
+               {0x0be7, 0x0bfa, 1},
+               {0x0c01, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c33, 1},
+               {0x0c35, 0x0c39, 1},
+               {0x0c3e, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c60, 0x0c61, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c82, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce6, 5},
+               {0x0ce7, 0x0cef, 1},
+               {0x0d02, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d28, 1},
+               {0x0d2a, 0x0d39, 1},
+               {0x0d3e, 0x0d43, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4d, 1},
+               {0x0d57, 0x0d60, 9},
+               {0x0d61, 0x0d66, 5},
+               {0x0d67, 0x0d6f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edd, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6a, 1},
+               {0x0f71, 0x0f8b, 1},
+               {0x0f90, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fcf, 0x0fd1, 1},
+               {0x1000, 0x1021, 1},
+               {0x1023, 0x1027, 1},
+               {0x1029, 0x102a, 1},
+               {0x102c, 0x1032, 1},
+               {0x1036, 0x1039, 1},
+               {0x1040, 0x1059, 1},
+               {0x10a0, 0x10c5, 1},
+               {0x10d0, 0x10fc, 1},
+               {0x1100, 0x1159, 1},
+               {0x115f, 0x11a2, 1},
+               {0x11a8, 0x11f9, 1},
+               {0x1200, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135f, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f4, 1},
+               {0x1401, 0x1676, 1},
+               {0x1680, 0x169c, 1},
+               {0x16a0, 0x16f0, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18a9, 1},
+               {0x1900, 0x191c, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19a9, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19d9, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a1f, 1},
+               {0x1d00, 0x1dc3, 1},
+               {0x1e00, 0x1e9b, 1},
+               {0x1ea0, 0x1ef9, 1},
+               {0x1f00, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2063, 1},
+               {0x206a, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x2094, 1},
+               {0x20a0, 0x20b5, 1},
+               {0x20d0, 0x20eb, 1},
+               {0x2100, 0x214c, 1},
+               {0x2153, 0x2183, 1},
+               {0x2190, 0x23db, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x269c, 1},
+               {0x26a0, 0x26b1, 1},
+               {0x2701, 0x2704, 1},
+               {0x2706, 0x2709, 1},
+               {0x270c, 0x2727, 1},
+               {0x2729, 0x274b, 1},
+               {0x274d, 0x274f, 2},
+               {0x2750, 0x2752, 1},
+               {0x2756, 0x2758, 2},
+               {0x2759, 0x275e, 1},
+               {0x2761, 0x2794, 1},
+               {0x2798, 0x27af, 1},
+               {0x27b1, 0x27be, 1},
+               {0x27c0, 0x27c6, 1},
+               {0x27d0, 0x27eb, 1},
+               {0x27f0, 0x2b13, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c80, 0x2cea, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d30, 0x2d65, 1},
+               {0x2d6f, 0x2d80, 17},
+               {0x2d81, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2e00, 0x2e17, 1},
+               {0x2e1c, 0x2e1d, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312c, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31b7, 1},
+               {0x31c0, 0x31cf, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x3243, 1},
+               {0x3250, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fbb, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa700, 0xa716, 1},
+               {0xa800, 0xa82b, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd800, 0xfa2d, 1},
+               {0xfa30, 0xfa6a, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbb1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe23, 1},
+               {0xfe30, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018a, 1},
+               {0x00010300, 0x0001031e, 1},
+               {0x00010320, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010a00, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d12a, 0x0001d1dd, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7c9, 1},
+               {0x0001d7ce, 0x0001d7ff, 1},
+               {0x00020000, 0x0002a6d6, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// size 3026 bytes (2 KiB)
+var assigned5_0_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x036f, 1},
+               {0x0374, 0x0375, 1},
+               {0x037a, 0x037e, 1},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x03ce, 1},
+               {0x03d0, 0x0486, 1},
+               {0x0488, 0x0513, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x0591, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x0603, 1},
+               {0x060b, 0x0615, 1},
+               {0x061b, 0x061e, 3},
+               {0x061f, 0x0621, 2},
+               {0x0622, 0x063a, 1},
+               {0x0640, 0x065e, 1},
+               {0x0660, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x076d, 1},
+               {0x0780, 0x07b1, 1},
+               {0x07c0, 0x07fa, 1},
+               {0x0901, 0x0939, 1},
+               {0x093c, 0x094d, 1},
+               {0x0950, 0x0954, 1},
+               {0x0958, 0x0970, 1},
+               {0x097b, 0x097f, 1},
+               {0x0981, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fa, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a59, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a74, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0aef, 1},
+               {0x0af1, 0x0b01, 16},
+               {0x0b02, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b43, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b61, 1},
+               {0x0b66, 0x0b71, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd7, 0x0be6, 15},
+               {0x0be7, 0x0bfa, 1},
+               {0x0c01, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c33, 1},
+               {0x0c35, 0x0c39, 1},
+               {0x0c3e, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c60, 0x0c61, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c82, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce3, 1},
+               {0x0ce6, 0x0cef, 1},
+               {0x0cf1, 0x0cf2, 1},
+               {0x0d02, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d28, 1},
+               {0x0d2a, 0x0d39, 1},
+               {0x0d3e, 0x0d43, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4d, 1},
+               {0x0d57, 0x0d60, 9},
+               {0x0d61, 0x0d66, 5},
+               {0x0d67, 0x0d6f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edd, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6a, 1},
+               {0x0f71, 0x0f8b, 1},
+               {0x0f90, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fcf, 0x0fd1, 1},
+               {0x1000, 0x1021, 1},
+               {0x1023, 0x1027, 1},
+               {0x1029, 0x102a, 1},
+               {0x102c, 0x1032, 1},
+               {0x1036, 0x1039, 1},
+               {0x1040, 0x1059, 1},
+               {0x10a0, 0x10c5, 1},
+               {0x10d0, 0x10fc, 1},
+               {0x1100, 0x1159, 1},
+               {0x115f, 0x11a2, 1},
+               {0x11a8, 0x11f9, 1},
+               {0x1200, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135f, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f4, 1},
+               {0x1401, 0x1676, 1},
+               {0x1680, 0x169c, 1},
+               {0x16a0, 0x16f0, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18a9, 1},
+               {0x1900, 0x191c, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19a9, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19d9, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a1f, 1},
+               {0x1b00, 0x1b4b, 1},
+               {0x1b50, 0x1b7c, 1},
+               {0x1d00, 0x1dca, 1},
+               {0x1dfe, 0x1e9b, 1},
+               {0x1ea0, 0x1ef9, 1},
+               {0x1f00, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2063, 1},
+               {0x206a, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x2094, 1},
+               {0x20a0, 0x20b5, 1},
+               {0x20d0, 0x20ef, 1},
+               {0x2100, 0x214e, 1},
+               {0x2153, 0x2184, 1},
+               {0x2190, 0x23e7, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x269c, 1},
+               {0x26a0, 0x26b2, 1},
+               {0x2701, 0x2704, 1},
+               {0x2706, 0x2709, 1},
+               {0x270c, 0x2727, 1},
+               {0x2729, 0x274b, 1},
+               {0x274d, 0x274f, 2},
+               {0x2750, 0x2752, 1},
+               {0x2756, 0x2758, 2},
+               {0x2759, 0x275e, 1},
+               {0x2761, 0x2794, 1},
+               {0x2798, 0x27af, 1},
+               {0x27b1, 0x27be, 1},
+               {0x27c0, 0x27ca, 1},
+               {0x27d0, 0x27eb, 1},
+               {0x27f0, 0x2b1a, 1},
+               {0x2b20, 0x2b23, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c60, 0x2c6c, 1},
+               {0x2c74, 0x2c77, 1},
+               {0x2c80, 0x2cea, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d30, 0x2d65, 1},
+               {0x2d6f, 0x2d80, 17},
+               {0x2d81, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2e00, 0x2e17, 1},
+               {0x2e1c, 0x2e1d, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312c, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31b7, 1},
+               {0x31c0, 0x31cf, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x3243, 1},
+               {0x3250, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fbb, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa700, 0xa71a, 1},
+               {0xa720, 0xa721, 1},
+               {0xa800, 0xa82b, 1},
+               {0xa840, 0xa877, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd800, 0xfa2d, 1},
+               {0xfa30, 0xfa6a, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbb1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe23, 1},
+               {0xfe30, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018a, 1},
+               {0x00010300, 0x0001031e, 1},
+               {0x00010320, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010900, 0x00010919, 1},
+               {0x0001091f, 0x00010a00, 225},
+               {0x00010a01, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x00012000, 0x0001236e, 1},
+               {0x00012400, 0x00012462, 1},
+               {0x00012470, 0x00012473, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d12a, 0x0001d1dd, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d360, 0x0001d371, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7cb, 1},
+               {0x0001d7ce, 0x0001d7ff, 1},
+               {0x00020000, 0x0002a6d6, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// size 3152 bytes (3 KiB)
+var assigned5_1_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x0377, 1},
+               {0x037a, 0x037e, 1},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x0523, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x0591, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x0603, 1},
+               {0x0606, 0x061b, 1},
+               {0x061e, 0x061f, 1},
+               {0x0621, 0x065e, 1},
+               {0x0660, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x07b1, 1},
+               {0x07c0, 0x07fa, 1},
+               {0x0901, 0x0939, 1},
+               {0x093c, 0x094d, 1},
+               {0x0950, 0x0954, 1},
+               {0x0958, 0x0972, 1},
+               {0x097b, 0x097f, 1},
+               {0x0981, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fa, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a51, 0x0a59, 8},
+               {0x0a5a, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a75, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0aef, 1},
+               {0x0af1, 0x0b01, 16},
+               {0x0b02, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b44, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b63, 1},
+               {0x0b66, 0x0b71, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd0, 0x0bd7, 7},
+               {0x0be6, 0x0bfa, 1},
+               {0x0c01, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c33, 1},
+               {0x0c35, 0x0c39, 1},
+               {0x0c3d, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c58, 0x0c59, 1},
+               {0x0c60, 0x0c63, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c78, 0x0c7f, 1},
+               {0x0c82, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce3, 1},
+               {0x0ce6, 0x0cef, 1},
+               {0x0cf1, 0x0cf2, 1},
+               {0x0d02, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d28, 1},
+               {0x0d2a, 0x0d39, 1},
+               {0x0d3d, 0x0d44, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4d, 1},
+               {0x0d57, 0x0d60, 9},
+               {0x0d61, 0x0d63, 1},
+               {0x0d66, 0x0d75, 1},
+               {0x0d79, 0x0d7f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edd, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6c, 1},
+               {0x0f71, 0x0f8b, 1},
+               {0x0f90, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fce, 0x0fd4, 1},
+               {0x1000, 0x1099, 1},
+               {0x109e, 0x10c5, 1},
+               {0x10d0, 0x10fc, 1},
+               {0x1100, 0x1159, 1},
+               {0x115f, 0x11a2, 1},
+               {0x11a8, 0x11f9, 1},
+               {0x1200, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135f, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f4, 1},
+               {0x1401, 0x1676, 1},
+               {0x1680, 0x169c, 1},
+               {0x16a0, 0x16f0, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18aa, 1},
+               {0x1900, 0x191c, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19a9, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19d9, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a1f, 1},
+               {0x1b00, 0x1b4b, 1},
+               {0x1b50, 0x1b7c, 1},
+               {0x1b80, 0x1baa, 1},
+               {0x1bae, 0x1bb9, 1},
+               {0x1c00, 0x1c37, 1},
+               {0x1c3b, 0x1c49, 1},
+               {0x1c4d, 0x1c7f, 1},
+               {0x1d00, 0x1de6, 1},
+               {0x1dfe, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2064, 1},
+               {0x206a, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x2094, 1},
+               {0x20a0, 0x20b5, 1},
+               {0x20d0, 0x20f0, 1},
+               {0x2100, 0x214f, 1},
+               {0x2153, 0x2188, 1},
+               {0x2190, 0x23e7, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x269d, 1},
+               {0x26a0, 0x26bc, 1},
+               {0x26c0, 0x26c3, 1},
+               {0x2701, 0x2704, 1},
+               {0x2706, 0x2709, 1},
+               {0x270c, 0x2727, 1},
+               {0x2729, 0x274b, 1},
+               {0x274d, 0x274f, 2},
+               {0x2750, 0x2752, 1},
+               {0x2756, 0x2758, 2},
+               {0x2759, 0x275e, 1},
+               {0x2761, 0x2794, 1},
+               {0x2798, 0x27af, 1},
+               {0x27b1, 0x27be, 1},
+               {0x27c0, 0x27ca, 1},
+               {0x27cc, 0x27d0, 4},
+               {0x27d1, 0x2b4c, 1},
+               {0x2b50, 0x2b54, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c60, 0x2c6f, 1},
+               {0x2c71, 0x2c7d, 1},
+               {0x2c80, 0x2cea, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d30, 0x2d65, 1},
+               {0x2d6f, 0x2d80, 17},
+               {0x2d81, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2de0, 0x2e30, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312d, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31b7, 1},
+               {0x31c0, 0x31e3, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x3243, 1},
+               {0x3250, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fc3, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa500, 0xa62b, 1},
+               {0xa640, 0xa65f, 1},
+               {0xa662, 0xa673, 1},
+               {0xa67c, 0xa697, 1},
+               {0xa700, 0xa78c, 1},
+               {0xa7fb, 0xa82b, 1},
+               {0xa840, 0xa877, 1},
+               {0xa880, 0xa8c4, 1},
+               {0xa8ce, 0xa8d9, 1},
+               {0xa900, 0xa953, 1},
+               {0xa95f, 0xaa00, 161},
+               {0xaa01, 0xaa36, 1},
+               {0xaa40, 0xaa4d, 1},
+               {0xaa50, 0xaa59, 1},
+               {0xaa5c, 0xaa5f, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd800, 0xfa2d, 1},
+               {0xfa30, 0xfa6a, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbb1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe26, 1},
+               {0xfe30, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018a, 1},
+               {0x00010190, 0x0001019b, 1},
+               {0x000101d0, 0x000101fd, 1},
+               {0x00010280, 0x0001029c, 1},
+               {0x000102a0, 0x000102d0, 1},
+               {0x00010300, 0x0001031e, 1},
+               {0x00010320, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010900, 0x00010919, 1},
+               {0x0001091f, 0x00010939, 1},
+               {0x0001093f, 0x00010a00, 193},
+               {0x00010a01, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x00012000, 0x0001236e, 1},
+               {0x00012400, 0x00012462, 1},
+               {0x00012470, 0x00012473, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d129, 0x0001d1dd, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d360, 0x0001d371, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7cb, 1},
+               {0x0001d7ce, 0x0001d7ff, 1},
+               {0x0001f000, 0x0001f02b, 1},
+               {0x0001f030, 0x0001f093, 1},
+               {0x00020000, 0x0002a6d6, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// size 3518 bytes (3 KiB)
+var assigned5_2_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x0377, 1},
+               {0x037a, 0x037e, 1},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x0525, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x0591, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x0603, 1},
+               {0x0606, 0x061b, 1},
+               {0x061e, 0x061f, 1},
+               {0x0621, 0x065e, 1},
+               {0x0660, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x07b1, 1},
+               {0x07c0, 0x07fa, 1},
+               {0x0800, 0x082d, 1},
+               {0x0830, 0x083e, 1},
+               {0x0900, 0x0939, 1},
+               {0x093c, 0x094e, 1},
+               {0x0950, 0x0955, 1},
+               {0x0958, 0x0972, 1},
+               {0x0979, 0x097f, 1},
+               {0x0981, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fb, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a51, 0x0a59, 8},
+               {0x0a5a, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a75, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0aef, 1},
+               {0x0af1, 0x0b01, 16},
+               {0x0b02, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b44, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b63, 1},
+               {0x0b66, 0x0b71, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd0, 0x0bd7, 7},
+               {0x0be6, 0x0bfa, 1},
+               {0x0c01, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c33, 1},
+               {0x0c35, 0x0c39, 1},
+               {0x0c3d, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c58, 0x0c59, 1},
+               {0x0c60, 0x0c63, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c78, 0x0c7f, 1},
+               {0x0c82, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce3, 1},
+               {0x0ce6, 0x0cef, 1},
+               {0x0cf1, 0x0cf2, 1},
+               {0x0d02, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d28, 1},
+               {0x0d2a, 0x0d39, 1},
+               {0x0d3d, 0x0d44, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4d, 1},
+               {0x0d57, 0x0d60, 9},
+               {0x0d61, 0x0d63, 1},
+               {0x0d66, 0x0d75, 1},
+               {0x0d79, 0x0d7f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edd, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6c, 1},
+               {0x0f71, 0x0f8b, 1},
+               {0x0f90, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fce, 0x0fd8, 1},
+               {0x1000, 0x10c5, 1},
+               {0x10d0, 0x10fc, 1},
+               {0x1100, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135f, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f4, 1},
+               {0x1400, 0x169c, 1},
+               {0x16a0, 0x16f0, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18aa, 1},
+               {0x18b0, 0x18f5, 1},
+               {0x1900, 0x191c, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19ab, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19da, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a5e, 1},
+               {0x1a60, 0x1a7c, 1},
+               {0x1a7f, 0x1a89, 1},
+               {0x1a90, 0x1a99, 1},
+               {0x1aa0, 0x1aad, 1},
+               {0x1b00, 0x1b4b, 1},
+               {0x1b50, 0x1b7c, 1},
+               {0x1b80, 0x1baa, 1},
+               {0x1bae, 0x1bb9, 1},
+               {0x1c00, 0x1c37, 1},
+               {0x1c3b, 0x1c49, 1},
+               {0x1c4d, 0x1c7f, 1},
+               {0x1cd0, 0x1cf2, 1},
+               {0x1d00, 0x1de6, 1},
+               {0x1dfd, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2064, 1},
+               {0x206a, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x2094, 1},
+               {0x20a0, 0x20b8, 1},
+               {0x20d0, 0x20f0, 1},
+               {0x2100, 0x2189, 1},
+               {0x2190, 0x23e8, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x26cd, 1},
+               {0x26cf, 0x26e1, 1},
+               {0x26e3, 0x26e8, 5},
+               {0x26e9, 0x26ff, 1},
+               {0x2701, 0x2704, 1},
+               {0x2706, 0x2709, 1},
+               {0x270c, 0x2727, 1},
+               {0x2729, 0x274b, 1},
+               {0x274d, 0x274f, 2},
+               {0x2750, 0x2752, 1},
+               {0x2756, 0x275e, 1},
+               {0x2761, 0x2794, 1},
+               {0x2798, 0x27af, 1},
+               {0x27b1, 0x27be, 1},
+               {0x27c0, 0x27ca, 1},
+               {0x27cc, 0x27d0, 4},
+               {0x27d1, 0x2b4c, 1},
+               {0x2b50, 0x2b59, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c60, 0x2cf1, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d30, 0x2d65, 1},
+               {0x2d6f, 0x2d80, 17},
+               {0x2d81, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2de0, 0x2e31, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312d, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31b7, 1},
+               {0x31c0, 0x31e3, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fcb, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa4d0, 0xa62b, 1},
+               {0xa640, 0xa65f, 1},
+               {0xa662, 0xa673, 1},
+               {0xa67c, 0xa697, 1},
+               {0xa6a0, 0xa6f7, 1},
+               {0xa700, 0xa78c, 1},
+               {0xa7fb, 0xa82b, 1},
+               {0xa830, 0xa839, 1},
+               {0xa840, 0xa877, 1},
+               {0xa880, 0xa8c4, 1},
+               {0xa8ce, 0xa8d9, 1},
+               {0xa8e0, 0xa8fb, 1},
+               {0xa900, 0xa953, 1},
+               {0xa95f, 0xa97c, 1},
+               {0xa980, 0xa9cd, 1},
+               {0xa9cf, 0xa9d9, 1},
+               {0xa9de, 0xa9df, 1},
+               {0xaa00, 0xaa36, 1},
+               {0xaa40, 0xaa4d, 1},
+               {0xaa50, 0xaa59, 1},
+               {0xaa5c, 0xaa7b, 1},
+               {0xaa80, 0xaac2, 1},
+               {0xaadb, 0xaadf, 1},
+               {0xabc0, 0xabed, 1},
+               {0xabf0, 0xabf9, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd7b0, 0xd7c6, 1},
+               {0xd7cb, 0xd7fb, 1},
+               {0xd800, 0xfa2d, 1},
+               {0xfa30, 0xfa6d, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbb1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe26, 1},
+               {0xfe30, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018a, 1},
+               {0x00010190, 0x0001019b, 1},
+               {0x000101d0, 0x000101fd, 1},
+               {0x00010280, 0x0001029c, 1},
+               {0x000102a0, 0x000102d0, 1},
+               {0x00010300, 0x0001031e, 1},
+               {0x00010320, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010840, 0x00010855, 1},
+               {0x00010857, 0x0001085f, 1},
+               {0x00010900, 0x0001091b, 1},
+               {0x0001091f, 0x00010939, 1},
+               {0x0001093f, 0x00010a00, 193},
+               {0x00010a01, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x00010a60, 0x00010a7f, 1},
+               {0x00010b00, 0x00010b35, 1},
+               {0x00010b39, 0x00010b55, 1},
+               {0x00010b58, 0x00010b72, 1},
+               {0x00010b78, 0x00010b7f, 1},
+               {0x00010c00, 0x00010c48, 1},
+               {0x00010e60, 0x00010e7e, 1},
+               {0x00011080, 0x000110c1, 1},
+               {0x00012000, 0x0001236e, 1},
+               {0x00012400, 0x00012462, 1},
+               {0x00012470, 0x00012473, 1},
+               {0x00013000, 0x0001342e, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d129, 0x0001d1dd, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d360, 0x0001d371, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7cb, 1},
+               {0x0001d7ce, 0x0001d7ff, 1},
+               {0x0001f000, 0x0001f02b, 1},
+               {0x0001f030, 0x0001f093, 1},
+               {0x0001f100, 0x0001f10a, 1},
+               {0x0001f110, 0x0001f12e, 1},
+               {0x0001f131, 0x0001f13d, 12},
+               {0x0001f13f, 0x0001f142, 3},
+               {0x0001f146, 0x0001f14a, 4},
+               {0x0001f14b, 0x0001f14e, 1},
+               {0x0001f157, 0x0001f15f, 8},
+               {0x0001f179, 0x0001f17b, 2},
+               {0x0001f17c, 0x0001f17f, 3},
+               {0x0001f18a, 0x0001f18d, 1},
+               {0x0001f190, 0x0001f200, 112},
+               {0x0001f210, 0x0001f231, 1},
+               {0x0001f240, 0x0001f248, 1},
+               {0x00020000, 0x0002a6d6, 1},
+               {0x0002a700, 0x0002b734, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// size 3812 bytes (3 KiB)
+var assigned6_0_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x0377, 1},
+               {0x037a, 0x037e, 1},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x0527, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x0591, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x0603, 1},
+               {0x0606, 0x061b, 1},
+               {0x061e, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x07b1, 1},
+               {0x07c0, 0x07fa, 1},
+               {0x0800, 0x082d, 1},
+               {0x0830, 0x083e, 1},
+               {0x0840, 0x085b, 1},
+               {0x085e, 0x0900, 162},
+               {0x0901, 0x0977, 1},
+               {0x0979, 0x097f, 1},
+               {0x0981, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fb, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a51, 0x0a59, 8},
+               {0x0a5a, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a75, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0aef, 1},
+               {0x0af1, 0x0b01, 16},
+               {0x0b02, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b44, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b63, 1},
+               {0x0b66, 0x0b77, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd0, 0x0bd7, 7},
+               {0x0be6, 0x0bfa, 1},
+               {0x0c01, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c33, 1},
+               {0x0c35, 0x0c39, 1},
+               {0x0c3d, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c58, 0x0c59, 1},
+               {0x0c60, 0x0c63, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c78, 0x0c7f, 1},
+               {0x0c82, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce3, 1},
+               {0x0ce6, 0x0cef, 1},
+               {0x0cf1, 0x0cf2, 1},
+               {0x0d02, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d3a, 1},
+               {0x0d3d, 0x0d44, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4e, 1},
+               {0x0d57, 0x0d60, 9},
+               {0x0d61, 0x0d63, 1},
+               {0x0d66, 0x0d75, 1},
+               {0x0d79, 0x0d7f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edd, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6c, 1},
+               {0x0f71, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fce, 0x0fda, 1},
+               {0x1000, 0x10c5, 1},
+               {0x10d0, 0x10fc, 1},
+               {0x1100, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135d, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f4, 1},
+               {0x1400, 0x169c, 1},
+               {0x16a0, 0x16f0, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18aa, 1},
+               {0x18b0, 0x18f5, 1},
+               {0x1900, 0x191c, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19ab, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19da, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a5e, 1},
+               {0x1a60, 0x1a7c, 1},
+               {0x1a7f, 0x1a89, 1},
+               {0x1a90, 0x1a99, 1},
+               {0x1aa0, 0x1aad, 1},
+               {0x1b00, 0x1b4b, 1},
+               {0x1b50, 0x1b7c, 1},
+               {0x1b80, 0x1baa, 1},
+               {0x1bae, 0x1bb9, 1},
+               {0x1bc0, 0x1bf3, 1},
+               {0x1bfc, 0x1c37, 1},
+               {0x1c3b, 0x1c49, 1},
+               {0x1c4d, 0x1c7f, 1},
+               {0x1cd0, 0x1cf2, 1},
+               {0x1d00, 0x1de6, 1},
+               {0x1dfc, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2064, 1},
+               {0x206a, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x209c, 1},
+               {0x20a0, 0x20b9, 1},
+               {0x20d0, 0x20f0, 1},
+               {0x2100, 0x2189, 1},
+               {0x2190, 0x23f3, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x26ff, 1},
+               {0x2701, 0x27ca, 1},
+               {0x27cc, 0x27ce, 2},
+               {0x27cf, 0x2b4c, 1},
+               {0x2b50, 0x2b59, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c60, 0x2cf1, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d30, 0x2d65, 1},
+               {0x2d6f, 0x2d70, 1},
+               {0x2d7f, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2de0, 0x2e31, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312d, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31ba, 1},
+               {0x31c0, 0x31e3, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fcb, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa4d0, 0xa62b, 1},
+               {0xa640, 0xa673, 1},
+               {0xa67c, 0xa697, 1},
+               {0xa6a0, 0xa6f7, 1},
+               {0xa700, 0xa78e, 1},
+               {0xa790, 0xa791, 1},
+               {0xa7a0, 0xa7a9, 1},
+               {0xa7fa, 0xa82b, 1},
+               {0xa830, 0xa839, 1},
+               {0xa840, 0xa877, 1},
+               {0xa880, 0xa8c4, 1},
+               {0xa8ce, 0xa8d9, 1},
+               {0xa8e0, 0xa8fb, 1},
+               {0xa900, 0xa953, 1},
+               {0xa95f, 0xa97c, 1},
+               {0xa980, 0xa9cd, 1},
+               {0xa9cf, 0xa9d9, 1},
+               {0xa9de, 0xa9df, 1},
+               {0xaa00, 0xaa36, 1},
+               {0xaa40, 0xaa4d, 1},
+               {0xaa50, 0xaa59, 1},
+               {0xaa5c, 0xaa7b, 1},
+               {0xaa80, 0xaac2, 1},
+               {0xaadb, 0xaadf, 1},
+               {0xab01, 0xab06, 1},
+               {0xab09, 0xab0e, 1},
+               {0xab11, 0xab16, 1},
+               {0xab20, 0xab26, 1},
+               {0xab28, 0xab2e, 1},
+               {0xabc0, 0xabed, 1},
+               {0xabf0, 0xabf9, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd7b0, 0xd7c6, 1},
+               {0xd7cb, 0xd7fb, 1},
+               {0xd800, 0xfa2d, 1},
+               {0xfa30, 0xfa6d, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbc1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe26, 1},
+               {0xfe30, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018a, 1},
+               {0x00010190, 0x0001019b, 1},
+               {0x000101d0, 0x000101fd, 1},
+               {0x00010280, 0x0001029c, 1},
+               {0x000102a0, 0x000102d0, 1},
+               {0x00010300, 0x0001031e, 1},
+               {0x00010320, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010840, 0x00010855, 1},
+               {0x00010857, 0x0001085f, 1},
+               {0x00010900, 0x0001091b, 1},
+               {0x0001091f, 0x00010939, 1},
+               {0x0001093f, 0x00010a00, 193},
+               {0x00010a01, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x00010a60, 0x00010a7f, 1},
+               {0x00010b00, 0x00010b35, 1},
+               {0x00010b39, 0x00010b55, 1},
+               {0x00010b58, 0x00010b72, 1},
+               {0x00010b78, 0x00010b7f, 1},
+               {0x00010c00, 0x00010c48, 1},
+               {0x00010e60, 0x00010e7e, 1},
+               {0x00011000, 0x0001104d, 1},
+               {0x00011052, 0x0001106f, 1},
+               {0x00011080, 0x000110c1, 1},
+               {0x00012000, 0x0001236e, 1},
+               {0x00012400, 0x00012462, 1},
+               {0x00012470, 0x00012473, 1},
+               {0x00013000, 0x0001342e, 1},
+               {0x00016800, 0x00016a38, 1},
+               {0x0001b000, 0x0001b001, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d129, 0x0001d1dd, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d360, 0x0001d371, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7cb, 1},
+               {0x0001d7ce, 0x0001d7ff, 1},
+               {0x0001f000, 0x0001f02b, 1},
+               {0x0001f030, 0x0001f093, 1},
+               {0x0001f0a0, 0x0001f0ae, 1},
+               {0x0001f0b1, 0x0001f0be, 1},
+               {0x0001f0c1, 0x0001f0cf, 1},
+               {0x0001f0d1, 0x0001f0df, 1},
+               {0x0001f100, 0x0001f10a, 1},
+               {0x0001f110, 0x0001f12e, 1},
+               {0x0001f130, 0x0001f169, 1},
+               {0x0001f170, 0x0001f19a, 1},
+               {0x0001f1e6, 0x0001f202, 1},
+               {0x0001f210, 0x0001f23a, 1},
+               {0x0001f240, 0x0001f248, 1},
+               {0x0001f250, 0x0001f251, 1},
+               {0x0001f300, 0x0001f320, 1},
+               {0x0001f330, 0x0001f335, 1},
+               {0x0001f337, 0x0001f37c, 1},
+               {0x0001f380, 0x0001f393, 1},
+               {0x0001f3a0, 0x0001f3c4, 1},
+               {0x0001f3c6, 0x0001f3ca, 1},
+               {0x0001f3e0, 0x0001f3f0, 1},
+               {0x0001f400, 0x0001f43e, 1},
+               {0x0001f440, 0x0001f442, 2},
+               {0x0001f443, 0x0001f4f7, 1},
+               {0x0001f4f9, 0x0001f4fc, 1},
+               {0x0001f500, 0x0001f53d, 1},
+               {0x0001f550, 0x0001f567, 1},
+               {0x0001f5fb, 0x0001f5ff, 1},
+               {0x0001f601, 0x0001f610, 1},
+               {0x0001f612, 0x0001f614, 1},
+               {0x0001f616, 0x0001f61c, 2},
+               {0x0001f61d, 0x0001f61e, 1},
+               {0x0001f620, 0x0001f625, 1},
+               {0x0001f628, 0x0001f62b, 1},
+               {0x0001f62d, 0x0001f630, 3},
+               {0x0001f631, 0x0001f633, 1},
+               {0x0001f635, 0x0001f640, 1},
+               {0x0001f645, 0x0001f64f, 1},
+               {0x0001f680, 0x0001f6c5, 1},
+               {0x0001f700, 0x0001f773, 1},
+               {0x00020000, 0x0002a6d6, 1},
+               {0x0002a700, 0x0002b734, 1},
+               {0x0002b740, 0x0002b81d, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// size 4160 bytes (4 KiB)
+var assigned6_1_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x0377, 1},
+               {0x037a, 0x037e, 1},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x0527, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x058f, 0x0591, 2},
+               {0x0592, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x0604, 1},
+               {0x0606, 0x061b, 1},
+               {0x061e, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x07b1, 1},
+               {0x07c0, 0x07fa, 1},
+               {0x0800, 0x082d, 1},
+               {0x0830, 0x083e, 1},
+               {0x0840, 0x085b, 1},
+               {0x085e, 0x08a0, 66},
+               {0x08a2, 0x08ac, 1},
+               {0x08e4, 0x08fe, 1},
+               {0x0900, 0x0977, 1},
+               {0x0979, 0x097f, 1},
+               {0x0981, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fb, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a51, 0x0a59, 8},
+               {0x0a5a, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a75, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0af1, 1},
+               {0x0b01, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b44, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b63, 1},
+               {0x0b66, 0x0b77, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd0, 0x0bd7, 7},
+               {0x0be6, 0x0bfa, 1},
+               {0x0c01, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c33, 1},
+               {0x0c35, 0x0c39, 1},
+               {0x0c3d, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c58, 0x0c59, 1},
+               {0x0c60, 0x0c63, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c78, 0x0c7f, 1},
+               {0x0c82, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce3, 1},
+               {0x0ce6, 0x0cef, 1},
+               {0x0cf1, 0x0cf2, 1},
+               {0x0d02, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d3a, 1},
+               {0x0d3d, 0x0d44, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4e, 1},
+               {0x0d57, 0x0d60, 9},
+               {0x0d61, 0x0d63, 1},
+               {0x0d66, 0x0d75, 1},
+               {0x0d79, 0x0d7f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edf, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6c, 1},
+               {0x0f71, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fce, 0x0fda, 1},
+               {0x1000, 0x10c5, 1},
+               {0x10c7, 0x10cd, 6},
+               {0x10d0, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135d, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f4, 1},
+               {0x1400, 0x169c, 1},
+               {0x16a0, 0x16f0, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18aa, 1},
+               {0x18b0, 0x18f5, 1},
+               {0x1900, 0x191c, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19ab, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19da, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a5e, 1},
+               {0x1a60, 0x1a7c, 1},
+               {0x1a7f, 0x1a89, 1},
+               {0x1a90, 0x1a99, 1},
+               {0x1aa0, 0x1aad, 1},
+               {0x1b00, 0x1b4b, 1},
+               {0x1b50, 0x1b7c, 1},
+               {0x1b80, 0x1bf3, 1},
+               {0x1bfc, 0x1c37, 1},
+               {0x1c3b, 0x1c49, 1},
+               {0x1c4d, 0x1c7f, 1},
+               {0x1cc0, 0x1cc7, 1},
+               {0x1cd0, 0x1cf6, 1},
+               {0x1d00, 0x1de6, 1},
+               {0x1dfc, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2064, 1},
+               {0x206a, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x209c, 1},
+               {0x20a0, 0x20b9, 1},
+               {0x20d0, 0x20f0, 1},
+               {0x2100, 0x2189, 1},
+               {0x2190, 0x23f3, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x26ff, 1},
+               {0x2701, 0x2b4c, 1},
+               {0x2b50, 0x2b59, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c60, 0x2cf3, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d27, 0x2d2d, 6},
+               {0x2d30, 0x2d67, 1},
+               {0x2d6f, 0x2d70, 1},
+               {0x2d7f, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2de0, 0x2e3b, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312d, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31ba, 1},
+               {0x31c0, 0x31e3, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fcc, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa4d0, 0xa62b, 1},
+               {0xa640, 0xa697, 1},
+               {0xa69f, 0xa6f7, 1},
+               {0xa700, 0xa78e, 1},
+               {0xa790, 0xa793, 1},
+               {0xa7a0, 0xa7aa, 1},
+               {0xa7f8, 0xa82b, 1},
+               {0xa830, 0xa839, 1},
+               {0xa840, 0xa877, 1},
+               {0xa880, 0xa8c4, 1},
+               {0xa8ce, 0xa8d9, 1},
+               {0xa8e0, 0xa8fb, 1},
+               {0xa900, 0xa953, 1},
+               {0xa95f, 0xa97c, 1},
+               {0xa980, 0xa9cd, 1},
+               {0xa9cf, 0xa9d9, 1},
+               {0xa9de, 0xa9df, 1},
+               {0xaa00, 0xaa36, 1},
+               {0xaa40, 0xaa4d, 1},
+               {0xaa50, 0xaa59, 1},
+               {0xaa5c, 0xaa7b, 1},
+               {0xaa80, 0xaac2, 1},
+               {0xaadb, 0xaaf6, 1},
+               {0xab01, 0xab06, 1},
+               {0xab09, 0xab0e, 1},
+               {0xab11, 0xab16, 1},
+               {0xab20, 0xab26, 1},
+               {0xab28, 0xab2e, 1},
+               {0xabc0, 0xabed, 1},
+               {0xabf0, 0xabf9, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd7b0, 0xd7c6, 1},
+               {0xd7cb, 0xd7fb, 1},
+               {0xd800, 0xfa6d, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbc1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe26, 1},
+               {0xfe30, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018a, 1},
+               {0x00010190, 0x0001019b, 1},
+               {0x000101d0, 0x000101fd, 1},
+               {0x00010280, 0x0001029c, 1},
+               {0x000102a0, 0x000102d0, 1},
+               {0x00010300, 0x0001031e, 1},
+               {0x00010320, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010840, 0x00010855, 1},
+               {0x00010857, 0x0001085f, 1},
+               {0x00010900, 0x0001091b, 1},
+               {0x0001091f, 0x00010939, 1},
+               {0x0001093f, 0x00010980, 65},
+               {0x00010981, 0x000109b7, 1},
+               {0x000109be, 0x000109bf, 1},
+               {0x00010a00, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x00010a60, 0x00010a7f, 1},
+               {0x00010b00, 0x00010b35, 1},
+               {0x00010b39, 0x00010b55, 1},
+               {0x00010b58, 0x00010b72, 1},
+               {0x00010b78, 0x00010b7f, 1},
+               {0x00010c00, 0x00010c48, 1},
+               {0x00010e60, 0x00010e7e, 1},
+               {0x00011000, 0x0001104d, 1},
+               {0x00011052, 0x0001106f, 1},
+               {0x00011080, 0x000110c1, 1},
+               {0x000110d0, 0x000110e8, 1},
+               {0x000110f0, 0x000110f9, 1},
+               {0x00011100, 0x00011134, 1},
+               {0x00011136, 0x00011143, 1},
+               {0x00011180, 0x000111c8, 1},
+               {0x000111d0, 0x000111d9, 1},
+               {0x00011680, 0x000116b7, 1},
+               {0x000116c0, 0x000116c9, 1},
+               {0x00012000, 0x0001236e, 1},
+               {0x00012400, 0x00012462, 1},
+               {0x00012470, 0x00012473, 1},
+               {0x00013000, 0x0001342e, 1},
+               {0x00016800, 0x00016a38, 1},
+               {0x00016f00, 0x00016f44, 1},
+               {0x00016f50, 0x00016f7e, 1},
+               {0x00016f8f, 0x00016f9f, 1},
+               {0x0001b000, 0x0001b001, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d129, 0x0001d1dd, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d360, 0x0001d371, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7cb, 1},
+               {0x0001d7ce, 0x0001d7ff, 1},
+               {0x0001ee00, 0x0001ee03, 1},
+               {0x0001ee05, 0x0001ee1f, 1},
+               {0x0001ee21, 0x0001ee22, 1},
+               {0x0001ee24, 0x0001ee27, 3},
+               {0x0001ee29, 0x0001ee32, 1},
+               {0x0001ee34, 0x0001ee37, 1},
+               {0x0001ee39, 0x0001ee3b, 2},
+               {0x0001ee42, 0x0001ee47, 5},
+               {0x0001ee49, 0x0001ee4d, 2},
+               {0x0001ee4e, 0x0001ee4f, 1},
+               {0x0001ee51, 0x0001ee52, 1},
+               {0x0001ee54, 0x0001ee57, 3},
+               {0x0001ee59, 0x0001ee61, 2},
+               {0x0001ee62, 0x0001ee64, 2},
+               {0x0001ee67, 0x0001ee6a, 1},
+               {0x0001ee6c, 0x0001ee72, 1},
+               {0x0001ee74, 0x0001ee77, 1},
+               {0x0001ee79, 0x0001ee7c, 1},
+               {0x0001ee7e, 0x0001ee80, 2},
+               {0x0001ee81, 0x0001ee89, 1},
+               {0x0001ee8b, 0x0001ee9b, 1},
+               {0x0001eea1, 0x0001eea3, 1},
+               {0x0001eea5, 0x0001eea9, 1},
+               {0x0001eeab, 0x0001eebb, 1},
+               {0x0001eef0, 0x0001eef1, 1},
+               {0x0001f000, 0x0001f02b, 1},
+               {0x0001f030, 0x0001f093, 1},
+               {0x0001f0a0, 0x0001f0ae, 1},
+               {0x0001f0b1, 0x0001f0be, 1},
+               {0x0001f0c1, 0x0001f0cf, 1},
+               {0x0001f0d1, 0x0001f0df, 1},
+               {0x0001f100, 0x0001f10a, 1},
+               {0x0001f110, 0x0001f12e, 1},
+               {0x0001f130, 0x0001f16b, 1},
+               {0x0001f170, 0x0001f19a, 1},
+               {0x0001f1e6, 0x0001f202, 1},
+               {0x0001f210, 0x0001f23a, 1},
+               {0x0001f240, 0x0001f248, 1},
+               {0x0001f250, 0x0001f251, 1},
+               {0x0001f300, 0x0001f320, 1},
+               {0x0001f330, 0x0001f335, 1},
+               {0x0001f337, 0x0001f37c, 1},
+               {0x0001f380, 0x0001f393, 1},
+               {0x0001f3a0, 0x0001f3c4, 1},
+               {0x0001f3c6, 0x0001f3ca, 1},
+               {0x0001f3e0, 0x0001f3f0, 1},
+               {0x0001f400, 0x0001f43e, 1},
+               {0x0001f440, 0x0001f442, 2},
+               {0x0001f443, 0x0001f4f7, 1},
+               {0x0001f4f9, 0x0001f4fc, 1},
+               {0x0001f500, 0x0001f53d, 1},
+               {0x0001f540, 0x0001f543, 1},
+               {0x0001f550, 0x0001f567, 1},
+               {0x0001f5fb, 0x0001f640, 1},
+               {0x0001f645, 0x0001f64f, 1},
+               {0x0001f680, 0x0001f6c5, 1},
+               {0x0001f700, 0x0001f773, 1},
+               {0x00020000, 0x0002a6d6, 1},
+               {0x0002a700, 0x0002b734, 1},
+               {0x0002b740, 0x0002b81d, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// size 4160 bytes (4 KiB)
+var assigned6_2_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x0377, 1},
+               {0x037a, 0x037e, 1},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x0527, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x058f, 0x0591, 2},
+               {0x0592, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x0604, 1},
+               {0x0606, 0x061b, 1},
+               {0x061e, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x07b1, 1},
+               {0x07c0, 0x07fa, 1},
+               {0x0800, 0x082d, 1},
+               {0x0830, 0x083e, 1},
+               {0x0840, 0x085b, 1},
+               {0x085e, 0x08a0, 66},
+               {0x08a2, 0x08ac, 1},
+               {0x08e4, 0x08fe, 1},
+               {0x0900, 0x0977, 1},
+               {0x0979, 0x097f, 1},
+               {0x0981, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fb, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a51, 0x0a59, 8},
+               {0x0a5a, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a75, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0af1, 1},
+               {0x0b01, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b44, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b63, 1},
+               {0x0b66, 0x0b77, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd0, 0x0bd7, 7},
+               {0x0be6, 0x0bfa, 1},
+               {0x0c01, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c33, 1},
+               {0x0c35, 0x0c39, 1},
+               {0x0c3d, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c58, 0x0c59, 1},
+               {0x0c60, 0x0c63, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c78, 0x0c7f, 1},
+               {0x0c82, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce3, 1},
+               {0x0ce6, 0x0cef, 1},
+               {0x0cf1, 0x0cf2, 1},
+               {0x0d02, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d3a, 1},
+               {0x0d3d, 0x0d44, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4e, 1},
+               {0x0d57, 0x0d60, 9},
+               {0x0d61, 0x0d63, 1},
+               {0x0d66, 0x0d75, 1},
+               {0x0d79, 0x0d7f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edf, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6c, 1},
+               {0x0f71, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fce, 0x0fda, 1},
+               {0x1000, 0x10c5, 1},
+               {0x10c7, 0x10cd, 6},
+               {0x10d0, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135d, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f4, 1},
+               {0x1400, 0x169c, 1},
+               {0x16a0, 0x16f0, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18aa, 1},
+               {0x18b0, 0x18f5, 1},
+               {0x1900, 0x191c, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19ab, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19da, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a5e, 1},
+               {0x1a60, 0x1a7c, 1},
+               {0x1a7f, 0x1a89, 1},
+               {0x1a90, 0x1a99, 1},
+               {0x1aa0, 0x1aad, 1},
+               {0x1b00, 0x1b4b, 1},
+               {0x1b50, 0x1b7c, 1},
+               {0x1b80, 0x1bf3, 1},
+               {0x1bfc, 0x1c37, 1},
+               {0x1c3b, 0x1c49, 1},
+               {0x1c4d, 0x1c7f, 1},
+               {0x1cc0, 0x1cc7, 1},
+               {0x1cd0, 0x1cf6, 1},
+               {0x1d00, 0x1de6, 1},
+               {0x1dfc, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2064, 1},
+               {0x206a, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x209c, 1},
+               {0x20a0, 0x20ba, 1},
+               {0x20d0, 0x20f0, 1},
+               {0x2100, 0x2189, 1},
+               {0x2190, 0x23f3, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x26ff, 1},
+               {0x2701, 0x2b4c, 1},
+               {0x2b50, 0x2b59, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c60, 0x2cf3, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d27, 0x2d2d, 6},
+               {0x2d30, 0x2d67, 1},
+               {0x2d6f, 0x2d70, 1},
+               {0x2d7f, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2de0, 0x2e3b, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312d, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31ba, 1},
+               {0x31c0, 0x31e3, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fcc, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa4d0, 0xa62b, 1},
+               {0xa640, 0xa697, 1},
+               {0xa69f, 0xa6f7, 1},
+               {0xa700, 0xa78e, 1},
+               {0xa790, 0xa793, 1},
+               {0xa7a0, 0xa7aa, 1},
+               {0xa7f8, 0xa82b, 1},
+               {0xa830, 0xa839, 1},
+               {0xa840, 0xa877, 1},
+               {0xa880, 0xa8c4, 1},
+               {0xa8ce, 0xa8d9, 1},
+               {0xa8e0, 0xa8fb, 1},
+               {0xa900, 0xa953, 1},
+               {0xa95f, 0xa97c, 1},
+               {0xa980, 0xa9cd, 1},
+               {0xa9cf, 0xa9d9, 1},
+               {0xa9de, 0xa9df, 1},
+               {0xaa00, 0xaa36, 1},
+               {0xaa40, 0xaa4d, 1},
+               {0xaa50, 0xaa59, 1},
+               {0xaa5c, 0xaa7b, 1},
+               {0xaa80, 0xaac2, 1},
+               {0xaadb, 0xaaf6, 1},
+               {0xab01, 0xab06, 1},
+               {0xab09, 0xab0e, 1},
+               {0xab11, 0xab16, 1},
+               {0xab20, 0xab26, 1},
+               {0xab28, 0xab2e, 1},
+               {0xabc0, 0xabed, 1},
+               {0xabf0, 0xabf9, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd7b0, 0xd7c6, 1},
+               {0xd7cb, 0xd7fb, 1},
+               {0xd800, 0xfa6d, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbc1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe26, 1},
+               {0xfe30, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018a, 1},
+               {0x00010190, 0x0001019b, 1},
+               {0x000101d0, 0x000101fd, 1},
+               {0x00010280, 0x0001029c, 1},
+               {0x000102a0, 0x000102d0, 1},
+               {0x00010300, 0x0001031e, 1},
+               {0x00010320, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010840, 0x00010855, 1},
+               {0x00010857, 0x0001085f, 1},
+               {0x00010900, 0x0001091b, 1},
+               {0x0001091f, 0x00010939, 1},
+               {0x0001093f, 0x00010980, 65},
+               {0x00010981, 0x000109b7, 1},
+               {0x000109be, 0x000109bf, 1},
+               {0x00010a00, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x00010a60, 0x00010a7f, 1},
+               {0x00010b00, 0x00010b35, 1},
+               {0x00010b39, 0x00010b55, 1},
+               {0x00010b58, 0x00010b72, 1},
+               {0x00010b78, 0x00010b7f, 1},
+               {0x00010c00, 0x00010c48, 1},
+               {0x00010e60, 0x00010e7e, 1},
+               {0x00011000, 0x0001104d, 1},
+               {0x00011052, 0x0001106f, 1},
+               {0x00011080, 0x000110c1, 1},
+               {0x000110d0, 0x000110e8, 1},
+               {0x000110f0, 0x000110f9, 1},
+               {0x00011100, 0x00011134, 1},
+               {0x00011136, 0x00011143, 1},
+               {0x00011180, 0x000111c8, 1},
+               {0x000111d0, 0x000111d9, 1},
+               {0x00011680, 0x000116b7, 1},
+               {0x000116c0, 0x000116c9, 1},
+               {0x00012000, 0x0001236e, 1},
+               {0x00012400, 0x00012462, 1},
+               {0x00012470, 0x00012473, 1},
+               {0x00013000, 0x0001342e, 1},
+               {0x00016800, 0x00016a38, 1},
+               {0x00016f00, 0x00016f44, 1},
+               {0x00016f50, 0x00016f7e, 1},
+               {0x00016f8f, 0x00016f9f, 1},
+               {0x0001b000, 0x0001b001, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d129, 0x0001d1dd, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d360, 0x0001d371, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7cb, 1},
+               {0x0001d7ce, 0x0001d7ff, 1},
+               {0x0001ee00, 0x0001ee03, 1},
+               {0x0001ee05, 0x0001ee1f, 1},
+               {0x0001ee21, 0x0001ee22, 1},
+               {0x0001ee24, 0x0001ee27, 3},
+               {0x0001ee29, 0x0001ee32, 1},
+               {0x0001ee34, 0x0001ee37, 1},
+               {0x0001ee39, 0x0001ee3b, 2},
+               {0x0001ee42, 0x0001ee47, 5},
+               {0x0001ee49, 0x0001ee4d, 2},
+               {0x0001ee4e, 0x0001ee4f, 1},
+               {0x0001ee51, 0x0001ee52, 1},
+               {0x0001ee54, 0x0001ee57, 3},
+               {0x0001ee59, 0x0001ee61, 2},
+               {0x0001ee62, 0x0001ee64, 2},
+               {0x0001ee67, 0x0001ee6a, 1},
+               {0x0001ee6c, 0x0001ee72, 1},
+               {0x0001ee74, 0x0001ee77, 1},
+               {0x0001ee79, 0x0001ee7c, 1},
+               {0x0001ee7e, 0x0001ee80, 2},
+               {0x0001ee81, 0x0001ee89, 1},
+               {0x0001ee8b, 0x0001ee9b, 1},
+               {0x0001eea1, 0x0001eea3, 1},
+               {0x0001eea5, 0x0001eea9, 1},
+               {0x0001eeab, 0x0001eebb, 1},
+               {0x0001eef0, 0x0001eef1, 1},
+               {0x0001f000, 0x0001f02b, 1},
+               {0x0001f030, 0x0001f093, 1},
+               {0x0001f0a0, 0x0001f0ae, 1},
+               {0x0001f0b1, 0x0001f0be, 1},
+               {0x0001f0c1, 0x0001f0cf, 1},
+               {0x0001f0d1, 0x0001f0df, 1},
+               {0x0001f100, 0x0001f10a, 1},
+               {0x0001f110, 0x0001f12e, 1},
+               {0x0001f130, 0x0001f16b, 1},
+               {0x0001f170, 0x0001f19a, 1},
+               {0x0001f1e6, 0x0001f202, 1},
+               {0x0001f210, 0x0001f23a, 1},
+               {0x0001f240, 0x0001f248, 1},
+               {0x0001f250, 0x0001f251, 1},
+               {0x0001f300, 0x0001f320, 1},
+               {0x0001f330, 0x0001f335, 1},
+               {0x0001f337, 0x0001f37c, 1},
+               {0x0001f380, 0x0001f393, 1},
+               {0x0001f3a0, 0x0001f3c4, 1},
+               {0x0001f3c6, 0x0001f3ca, 1},
+               {0x0001f3e0, 0x0001f3f0, 1},
+               {0x0001f400, 0x0001f43e, 1},
+               {0x0001f440, 0x0001f442, 2},
+               {0x0001f443, 0x0001f4f7, 1},
+               {0x0001f4f9, 0x0001f4fc, 1},
+               {0x0001f500, 0x0001f53d, 1},
+               {0x0001f540, 0x0001f543, 1},
+               {0x0001f550, 0x0001f567, 1},
+               {0x0001f5fb, 0x0001f640, 1},
+               {0x0001f645, 0x0001f64f, 1},
+               {0x0001f680, 0x0001f6c5, 1},
+               {0x0001f700, 0x0001f773, 1},
+               {0x00020000, 0x0002a6d6, 1},
+               {0x0002a700, 0x0002b734, 1},
+               {0x0002b740, 0x0002b81d, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// size 4160 bytes (4 KiB)
+var assigned6_3_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x0377, 1},
+               {0x037a, 0x037e, 1},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x0527, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x058f, 0x0591, 2},
+               {0x0592, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x0604, 1},
+               {0x0606, 0x061c, 1},
+               {0x061e, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x07b1, 1},
+               {0x07c0, 0x07fa, 1},
+               {0x0800, 0x082d, 1},
+               {0x0830, 0x083e, 1},
+               {0x0840, 0x085b, 1},
+               {0x085e, 0x08a0, 66},
+               {0x08a2, 0x08ac, 1},
+               {0x08e4, 0x08fe, 1},
+               {0x0900, 0x0977, 1},
+               {0x0979, 0x097f, 1},
+               {0x0981, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fb, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a51, 0x0a59, 8},
+               {0x0a5a, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a75, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0af1, 1},
+               {0x0b01, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b44, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b63, 1},
+               {0x0b66, 0x0b77, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd0, 0x0bd7, 7},
+               {0x0be6, 0x0bfa, 1},
+               {0x0c01, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c33, 1},
+               {0x0c35, 0x0c39, 1},
+               {0x0c3d, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c58, 0x0c59, 1},
+               {0x0c60, 0x0c63, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c78, 0x0c7f, 1},
+               {0x0c82, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce3, 1},
+               {0x0ce6, 0x0cef, 1},
+               {0x0cf1, 0x0cf2, 1},
+               {0x0d02, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d3a, 1},
+               {0x0d3d, 0x0d44, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4e, 1},
+               {0x0d57, 0x0d60, 9},
+               {0x0d61, 0x0d63, 1},
+               {0x0d66, 0x0d75, 1},
+               {0x0d79, 0x0d7f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edf, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6c, 1},
+               {0x0f71, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fce, 0x0fda, 1},
+               {0x1000, 0x10c5, 1},
+               {0x10c7, 0x10cd, 6},
+               {0x10d0, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135d, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f4, 1},
+               {0x1400, 0x169c, 1},
+               {0x16a0, 0x16f0, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18aa, 1},
+               {0x18b0, 0x18f5, 1},
+               {0x1900, 0x191c, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19ab, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19da, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a5e, 1},
+               {0x1a60, 0x1a7c, 1},
+               {0x1a7f, 0x1a89, 1},
+               {0x1a90, 0x1a99, 1},
+               {0x1aa0, 0x1aad, 1},
+               {0x1b00, 0x1b4b, 1},
+               {0x1b50, 0x1b7c, 1},
+               {0x1b80, 0x1bf3, 1},
+               {0x1bfc, 0x1c37, 1},
+               {0x1c3b, 0x1c49, 1},
+               {0x1c4d, 0x1c7f, 1},
+               {0x1cc0, 0x1cc7, 1},
+               {0x1cd0, 0x1cf6, 1},
+               {0x1d00, 0x1de6, 1},
+               {0x1dfc, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2064, 1},
+               {0x2066, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x209c, 1},
+               {0x20a0, 0x20ba, 1},
+               {0x20d0, 0x20f0, 1},
+               {0x2100, 0x2189, 1},
+               {0x2190, 0x23f3, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x26ff, 1},
+               {0x2701, 0x2b4c, 1},
+               {0x2b50, 0x2b59, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c60, 0x2cf3, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d27, 0x2d2d, 6},
+               {0x2d30, 0x2d67, 1},
+               {0x2d6f, 0x2d70, 1},
+               {0x2d7f, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2de0, 0x2e3b, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312d, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31ba, 1},
+               {0x31c0, 0x31e3, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fcc, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa4d0, 0xa62b, 1},
+               {0xa640, 0xa697, 1},
+               {0xa69f, 0xa6f7, 1},
+               {0xa700, 0xa78e, 1},
+               {0xa790, 0xa793, 1},
+               {0xa7a0, 0xa7aa, 1},
+               {0xa7f8, 0xa82b, 1},
+               {0xa830, 0xa839, 1},
+               {0xa840, 0xa877, 1},
+               {0xa880, 0xa8c4, 1},
+               {0xa8ce, 0xa8d9, 1},
+               {0xa8e0, 0xa8fb, 1},
+               {0xa900, 0xa953, 1},
+               {0xa95f, 0xa97c, 1},
+               {0xa980, 0xa9cd, 1},
+               {0xa9cf, 0xa9d9, 1},
+               {0xa9de, 0xa9df, 1},
+               {0xaa00, 0xaa36, 1},
+               {0xaa40, 0xaa4d, 1},
+               {0xaa50, 0xaa59, 1},
+               {0xaa5c, 0xaa7b, 1},
+               {0xaa80, 0xaac2, 1},
+               {0xaadb, 0xaaf6, 1},
+               {0xab01, 0xab06, 1},
+               {0xab09, 0xab0e, 1},
+               {0xab11, 0xab16, 1},
+               {0xab20, 0xab26, 1},
+               {0xab28, 0xab2e, 1},
+               {0xabc0, 0xabed, 1},
+               {0xabf0, 0xabf9, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd7b0, 0xd7c6, 1},
+               {0xd7cb, 0xd7fb, 1},
+               {0xd800, 0xfa6d, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbc1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe26, 1},
+               {0xfe30, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018a, 1},
+               {0x00010190, 0x0001019b, 1},
+               {0x000101d0, 0x000101fd, 1},
+               {0x00010280, 0x0001029c, 1},
+               {0x000102a0, 0x000102d0, 1},
+               {0x00010300, 0x0001031e, 1},
+               {0x00010320, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010840, 0x00010855, 1},
+               {0x00010857, 0x0001085f, 1},
+               {0x00010900, 0x0001091b, 1},
+               {0x0001091f, 0x00010939, 1},
+               {0x0001093f, 0x00010980, 65},
+               {0x00010981, 0x000109b7, 1},
+               {0x000109be, 0x000109bf, 1},
+               {0x00010a00, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x00010a60, 0x00010a7f, 1},
+               {0x00010b00, 0x00010b35, 1},
+               {0x00010b39, 0x00010b55, 1},
+               {0x00010b58, 0x00010b72, 1},
+               {0x00010b78, 0x00010b7f, 1},
+               {0x00010c00, 0x00010c48, 1},
+               {0x00010e60, 0x00010e7e, 1},
+               {0x00011000, 0x0001104d, 1},
+               {0x00011052, 0x0001106f, 1},
+               {0x00011080, 0x000110c1, 1},
+               {0x000110d0, 0x000110e8, 1},
+               {0x000110f0, 0x000110f9, 1},
+               {0x00011100, 0x00011134, 1},
+               {0x00011136, 0x00011143, 1},
+               {0x00011180, 0x000111c8, 1},
+               {0x000111d0, 0x000111d9, 1},
+               {0x00011680, 0x000116b7, 1},
+               {0x000116c0, 0x000116c9, 1},
+               {0x00012000, 0x0001236e, 1},
+               {0x00012400, 0x00012462, 1},
+               {0x00012470, 0x00012473, 1},
+               {0x00013000, 0x0001342e, 1},
+               {0x00016800, 0x00016a38, 1},
+               {0x00016f00, 0x00016f44, 1},
+               {0x00016f50, 0x00016f7e, 1},
+               {0x00016f8f, 0x00016f9f, 1},
+               {0x0001b000, 0x0001b001, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d129, 0x0001d1dd, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d360, 0x0001d371, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7cb, 1},
+               {0x0001d7ce, 0x0001d7ff, 1},
+               {0x0001ee00, 0x0001ee03, 1},
+               {0x0001ee05, 0x0001ee1f, 1},
+               {0x0001ee21, 0x0001ee22, 1},
+               {0x0001ee24, 0x0001ee27, 3},
+               {0x0001ee29, 0x0001ee32, 1},
+               {0x0001ee34, 0x0001ee37, 1},
+               {0x0001ee39, 0x0001ee3b, 2},
+               {0x0001ee42, 0x0001ee47, 5},
+               {0x0001ee49, 0x0001ee4d, 2},
+               {0x0001ee4e, 0x0001ee4f, 1},
+               {0x0001ee51, 0x0001ee52, 1},
+               {0x0001ee54, 0x0001ee57, 3},
+               {0x0001ee59, 0x0001ee61, 2},
+               {0x0001ee62, 0x0001ee64, 2},
+               {0x0001ee67, 0x0001ee6a, 1},
+               {0x0001ee6c, 0x0001ee72, 1},
+               {0x0001ee74, 0x0001ee77, 1},
+               {0x0001ee79, 0x0001ee7c, 1},
+               {0x0001ee7e, 0x0001ee80, 2},
+               {0x0001ee81, 0x0001ee89, 1},
+               {0x0001ee8b, 0x0001ee9b, 1},
+               {0x0001eea1, 0x0001eea3, 1},
+               {0x0001eea5, 0x0001eea9, 1},
+               {0x0001eeab, 0x0001eebb, 1},
+               {0x0001eef0, 0x0001eef1, 1},
+               {0x0001f000, 0x0001f02b, 1},
+               {0x0001f030, 0x0001f093, 1},
+               {0x0001f0a0, 0x0001f0ae, 1},
+               {0x0001f0b1, 0x0001f0be, 1},
+               {0x0001f0c1, 0x0001f0cf, 1},
+               {0x0001f0d1, 0x0001f0df, 1},
+               {0x0001f100, 0x0001f10a, 1},
+               {0x0001f110, 0x0001f12e, 1},
+               {0x0001f130, 0x0001f16b, 1},
+               {0x0001f170, 0x0001f19a, 1},
+               {0x0001f1e6, 0x0001f202, 1},
+               {0x0001f210, 0x0001f23a, 1},
+               {0x0001f240, 0x0001f248, 1},
+               {0x0001f250, 0x0001f251, 1},
+               {0x0001f300, 0x0001f320, 1},
+               {0x0001f330, 0x0001f335, 1},
+               {0x0001f337, 0x0001f37c, 1},
+               {0x0001f380, 0x0001f393, 1},
+               {0x0001f3a0, 0x0001f3c4, 1},
+               {0x0001f3c6, 0x0001f3ca, 1},
+               {0x0001f3e0, 0x0001f3f0, 1},
+               {0x0001f400, 0x0001f43e, 1},
+               {0x0001f440, 0x0001f442, 2},
+               {0x0001f443, 0x0001f4f7, 1},
+               {0x0001f4f9, 0x0001f4fc, 1},
+               {0x0001f500, 0x0001f53d, 1},
+               {0x0001f540, 0x0001f543, 1},
+               {0x0001f550, 0x0001f567, 1},
+               {0x0001f5fb, 0x0001f640, 1},
+               {0x0001f645, 0x0001f64f, 1},
+               {0x0001f680, 0x0001f6c5, 1},
+               {0x0001f700, 0x0001f773, 1},
+               {0x00020000, 0x0002a6d6, 1},
+               {0x0002a700, 0x0002b734, 1},
+               {0x0002b740, 0x0002b81d, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// size 4898 bytes (4 KiB)
+var assigned7_0_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x0377, 1},
+               {0x037a, 0x037f, 1},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x052f, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x058d, 0x058f, 1},
+               {0x0591, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x061c, 1},
+               {0x061e, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x07b1, 1},
+               {0x07c0, 0x07fa, 1},
+               {0x0800, 0x082d, 1},
+               {0x0830, 0x083e, 1},
+               {0x0840, 0x085b, 1},
+               {0x085e, 0x08a0, 66},
+               {0x08a1, 0x08b2, 1},
+               {0x08e4, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fb, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a51, 0x0a59, 8},
+               {0x0a5a, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a75, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0af1, 1},
+               {0x0b01, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b44, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b63, 1},
+               {0x0b66, 0x0b77, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd0, 0x0bd7, 7},
+               {0x0be6, 0x0bfa, 1},
+               {0x0c00, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c39, 1},
+               {0x0c3d, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c58, 0x0c59, 1},
+               {0x0c60, 0x0c63, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c78, 0x0c7f, 1},
+               {0x0c81, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce3, 1},
+               {0x0ce6, 0x0cef, 1},
+               {0x0cf1, 0x0cf2, 1},
+               {0x0d01, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d3a, 1},
+               {0x0d3d, 0x0d44, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4e, 1},
+               {0x0d57, 0x0d60, 9},
+               {0x0d61, 0x0d63, 1},
+               {0x0d66, 0x0d75, 1},
+               {0x0d79, 0x0d7f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0de6, 0x0def, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edf, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6c, 1},
+               {0x0f71, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fce, 0x0fda, 1},
+               {0x1000, 0x10c5, 1},
+               {0x10c7, 0x10cd, 6},
+               {0x10d0, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135d, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f4, 1},
+               {0x1400, 0x169c, 1},
+               {0x16a0, 0x16f8, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18aa, 1},
+               {0x18b0, 0x18f5, 1},
+               {0x1900, 0x191e, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19ab, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19da, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a5e, 1},
+               {0x1a60, 0x1a7c, 1},
+               {0x1a7f, 0x1a89, 1},
+               {0x1a90, 0x1a99, 1},
+               {0x1aa0, 0x1aad, 1},
+               {0x1ab0, 0x1abe, 1},
+               {0x1b00, 0x1b4b, 1},
+               {0x1b50, 0x1b7c, 1},
+               {0x1b80, 0x1bf3, 1},
+               {0x1bfc, 0x1c37, 1},
+               {0x1c3b, 0x1c49, 1},
+               {0x1c4d, 0x1c7f, 1},
+               {0x1cc0, 0x1cc7, 1},
+               {0x1cd0, 0x1cf6, 1},
+               {0x1cf8, 0x1cf9, 1},
+               {0x1d00, 0x1df5, 1},
+               {0x1dfc, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2064, 1},
+               {0x2066, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x209c, 1},
+               {0x20a0, 0x20bd, 1},
+               {0x20d0, 0x20f0, 1},
+               {0x2100, 0x2189, 1},
+               {0x2190, 0x23fa, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x2b73, 1},
+               {0x2b76, 0x2b95, 1},
+               {0x2b98, 0x2bb9, 1},
+               {0x2bbd, 0x2bc8, 1},
+               {0x2bca, 0x2bd1, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c60, 0x2cf3, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d27, 0x2d2d, 6},
+               {0x2d30, 0x2d67, 1},
+               {0x2d6f, 0x2d70, 1},
+               {0x2d7f, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2de0, 0x2e42, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312d, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31ba, 1},
+               {0x31c0, 0x31e3, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fcc, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa4d0, 0xa62b, 1},
+               {0xa640, 0xa69d, 1},
+               {0xa69f, 0xa6f7, 1},
+               {0xa700, 0xa78e, 1},
+               {0xa790, 0xa7ad, 1},
+               {0xa7b0, 0xa7b1, 1},
+               {0xa7f7, 0xa82b, 1},
+               {0xa830, 0xa839, 1},
+               {0xa840, 0xa877, 1},
+               {0xa880, 0xa8c4, 1},
+               {0xa8ce, 0xa8d9, 1},
+               {0xa8e0, 0xa8fb, 1},
+               {0xa900, 0xa953, 1},
+               {0xa95f, 0xa97c, 1},
+               {0xa980, 0xa9cd, 1},
+               {0xa9cf, 0xa9d9, 1},
+               {0xa9de, 0xa9fe, 1},
+               {0xaa00, 0xaa36, 1},
+               {0xaa40, 0xaa4d, 1},
+               {0xaa50, 0xaa59, 1},
+               {0xaa5c, 0xaac2, 1},
+               {0xaadb, 0xaaf6, 1},
+               {0xab01, 0xab06, 1},
+               {0xab09, 0xab0e, 1},
+               {0xab11, 0xab16, 1},
+               {0xab20, 0xab26, 1},
+               {0xab28, 0xab2e, 1},
+               {0xab30, 0xab5f, 1},
+               {0xab64, 0xab65, 1},
+               {0xabc0, 0xabed, 1},
+               {0xabf0, 0xabf9, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd7b0, 0xd7c6, 1},
+               {0xd7cb, 0xd7fb, 1},
+               {0xd800, 0xfa6d, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbc1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe2d, 1},
+               {0xfe30, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018c, 1},
+               {0x00010190, 0x0001019b, 1},
+               {0x000101a0, 0x000101d0, 48},
+               {0x000101d1, 0x000101fd, 1},
+               {0x00010280, 0x0001029c, 1},
+               {0x000102a0, 0x000102d0, 1},
+               {0x000102e0, 0x000102fb, 1},
+               {0x00010300, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010350, 0x0001037a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x00010500, 0x00010527, 1},
+               {0x00010530, 0x00010563, 1},
+               {0x0001056f, 0x00010600, 145},
+               {0x00010601, 0x00010736, 1},
+               {0x00010740, 0x00010755, 1},
+               {0x00010760, 0x00010767, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010840, 0x00010855, 1},
+               {0x00010857, 0x0001089e, 1},
+               {0x000108a7, 0x000108af, 1},
+               {0x00010900, 0x0001091b, 1},
+               {0x0001091f, 0x00010939, 1},
+               {0x0001093f, 0x00010980, 65},
+               {0x00010981, 0x000109b7, 1},
+               {0x000109be, 0x000109bf, 1},
+               {0x00010a00, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x00010a60, 0x00010a9f, 1},
+               {0x00010ac0, 0x00010ae6, 1},
+               {0x00010aeb, 0x00010af6, 1},
+               {0x00010b00, 0x00010b35, 1},
+               {0x00010b39, 0x00010b55, 1},
+               {0x00010b58, 0x00010b72, 1},
+               {0x00010b78, 0x00010b91, 1},
+               {0x00010b99, 0x00010b9c, 1},
+               {0x00010ba9, 0x00010baf, 1},
+               {0x00010c00, 0x00010c48, 1},
+               {0x00010e60, 0x00010e7e, 1},
+               {0x00011000, 0x0001104d, 1},
+               {0x00011052, 0x0001106f, 1},
+               {0x0001107f, 0x000110c1, 1},
+               {0x000110d0, 0x000110e8, 1},
+               {0x000110f0, 0x000110f9, 1},
+               {0x00011100, 0x00011134, 1},
+               {0x00011136, 0x00011143, 1},
+               {0x00011150, 0x00011176, 1},
+               {0x00011180, 0x000111c8, 1},
+               {0x000111cd, 0x000111d0, 3},
+               {0x000111d1, 0x000111da, 1},
+               {0x000111e1, 0x000111f4, 1},
+               {0x00011200, 0x00011211, 1},
+               {0x00011213, 0x0001123d, 1},
+               {0x000112b0, 0x000112ea, 1},
+               {0x000112f0, 0x000112f9, 1},
+               {0x00011301, 0x00011303, 1},
+               {0x00011305, 0x0001130c, 1},
+               {0x0001130f, 0x00011310, 1},
+               {0x00011313, 0x00011328, 1},
+               {0x0001132a, 0x00011330, 1},
+               {0x00011332, 0x00011333, 1},
+               {0x00011335, 0x00011339, 1},
+               {0x0001133c, 0x00011344, 1},
+               {0x00011347, 0x00011348, 1},
+               {0x0001134b, 0x0001134d, 1},
+               {0x00011357, 0x0001135d, 6},
+               {0x0001135e, 0x00011363, 1},
+               {0x00011366, 0x0001136c, 1},
+               {0x00011370, 0x00011374, 1},
+               {0x00011480, 0x000114c7, 1},
+               {0x000114d0, 0x000114d9, 1},
+               {0x00011580, 0x000115b5, 1},
+               {0x000115b8, 0x000115c9, 1},
+               {0x00011600, 0x00011644, 1},
+               {0x00011650, 0x00011659, 1},
+               {0x00011680, 0x000116b7, 1},
+               {0x000116c0, 0x000116c9, 1},
+               {0x000118a0, 0x000118f2, 1},
+               {0x000118ff, 0x00011ac0, 449},
+               {0x00011ac1, 0x00011af8, 1},
+               {0x00012000, 0x00012398, 1},
+               {0x00012400, 0x0001246e, 1},
+               {0x00012470, 0x00012474, 1},
+               {0x00013000, 0x0001342e, 1},
+               {0x00016800, 0x00016a38, 1},
+               {0x00016a40, 0x00016a5e, 1},
+               {0x00016a60, 0x00016a69, 1},
+               {0x00016a6e, 0x00016a6f, 1},
+               {0x00016ad0, 0x00016aed, 1},
+               {0x00016af0, 0x00016af5, 1},
+               {0x00016b00, 0x00016b45, 1},
+               {0x00016b50, 0x00016b59, 1},
+               {0x00016b5b, 0x00016b61, 1},
+               {0x00016b63, 0x00016b77, 1},
+               {0x00016b7d, 0x00016b8f, 1},
+               {0x00016f00, 0x00016f44, 1},
+               {0x00016f50, 0x00016f7e, 1},
+               {0x00016f8f, 0x00016f9f, 1},
+               {0x0001b000, 0x0001b001, 1},
+               {0x0001bc00, 0x0001bc6a, 1},
+               {0x0001bc70, 0x0001bc7c, 1},
+               {0x0001bc80, 0x0001bc88, 1},
+               {0x0001bc90, 0x0001bc99, 1},
+               {0x0001bc9c, 0x0001bca3, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d129, 0x0001d1dd, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d360, 0x0001d371, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7cb, 1},
+               {0x0001d7ce, 0x0001d7ff, 1},
+               {0x0001e800, 0x0001e8c4, 1},
+               {0x0001e8c7, 0x0001e8d6, 1},
+               {0x0001ee00, 0x0001ee03, 1},
+               {0x0001ee05, 0x0001ee1f, 1},
+               {0x0001ee21, 0x0001ee22, 1},
+               {0x0001ee24, 0x0001ee27, 3},
+               {0x0001ee29, 0x0001ee32, 1},
+               {0x0001ee34, 0x0001ee37, 1},
+               {0x0001ee39, 0x0001ee3b, 2},
+               {0x0001ee42, 0x0001ee47, 5},
+               {0x0001ee49, 0x0001ee4d, 2},
+               {0x0001ee4e, 0x0001ee4f, 1},
+               {0x0001ee51, 0x0001ee52, 1},
+               {0x0001ee54, 0x0001ee57, 3},
+               {0x0001ee59, 0x0001ee61, 2},
+               {0x0001ee62, 0x0001ee64, 2},
+               {0x0001ee67, 0x0001ee6a, 1},
+               {0x0001ee6c, 0x0001ee72, 1},
+               {0x0001ee74, 0x0001ee77, 1},
+               {0x0001ee79, 0x0001ee7c, 1},
+               {0x0001ee7e, 0x0001ee80, 2},
+               {0x0001ee81, 0x0001ee89, 1},
+               {0x0001ee8b, 0x0001ee9b, 1},
+               {0x0001eea1, 0x0001eea3, 1},
+               {0x0001eea5, 0x0001eea9, 1},
+               {0x0001eeab, 0x0001eebb, 1},
+               {0x0001eef0, 0x0001eef1, 1},
+               {0x0001f000, 0x0001f02b, 1},
+               {0x0001f030, 0x0001f093, 1},
+               {0x0001f0a0, 0x0001f0ae, 1},
+               {0x0001f0b1, 0x0001f0bf, 1},
+               {0x0001f0c1, 0x0001f0cf, 1},
+               {0x0001f0d1, 0x0001f0f5, 1},
+               {0x0001f100, 0x0001f10c, 1},
+               {0x0001f110, 0x0001f12e, 1},
+               {0x0001f130, 0x0001f16b, 1},
+               {0x0001f170, 0x0001f19a, 1},
+               {0x0001f1e6, 0x0001f202, 1},
+               {0x0001f210, 0x0001f23a, 1},
+               {0x0001f240, 0x0001f248, 1},
+               {0x0001f250, 0x0001f251, 1},
+               {0x0001f300, 0x0001f32c, 1},
+               {0x0001f330, 0x0001f37d, 1},
+               {0x0001f380, 0x0001f3ce, 1},
+               {0x0001f3d4, 0x0001f3f7, 1},
+               {0x0001f400, 0x0001f4fe, 1},
+               {0x0001f500, 0x0001f54a, 1},
+               {0x0001f550, 0x0001f579, 1},
+               {0x0001f57b, 0x0001f5a3, 1},
+               {0x0001f5a5, 0x0001f642, 1},
+               {0x0001f645, 0x0001f6cf, 1},
+               {0x0001f6e0, 0x0001f6ec, 1},
+               {0x0001f6f0, 0x0001f6f3, 1},
+               {0x0001f700, 0x0001f773, 1},
+               {0x0001f780, 0x0001f7d4, 1},
+               {0x0001f800, 0x0001f80b, 1},
+               {0x0001f810, 0x0001f847, 1},
+               {0x0001f850, 0x0001f859, 1},
+               {0x0001f860, 0x0001f887, 1},
+               {0x0001f890, 0x0001f8ad, 1},
+               {0x00020000, 0x0002a6d6, 1},
+               {0x0002a700, 0x0002b734, 1},
+               {0x0002b740, 0x0002b81d, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// size 5048 bytes (4 KiB)
+var assigned8_0_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x0377, 1},
+               {0x037a, 0x037f, 1},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x052f, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x058d, 0x058f, 1},
+               {0x0591, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x061c, 1},
+               {0x061e, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x07b1, 1},
+               {0x07c0, 0x07fa, 1},
+               {0x0800, 0x082d, 1},
+               {0x0830, 0x083e, 1},
+               {0x0840, 0x085b, 1},
+               {0x085e, 0x08a0, 66},
+               {0x08a1, 0x08b4, 1},
+               {0x08e3, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fb, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a51, 0x0a59, 8},
+               {0x0a5a, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a75, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0af1, 1},
+               {0x0af9, 0x0b01, 8},
+               {0x0b02, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b44, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b63, 1},
+               {0x0b66, 0x0b77, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd0, 0x0bd7, 7},
+               {0x0be6, 0x0bfa, 1},
+               {0x0c00, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c39, 1},
+               {0x0c3d, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c58, 0x0c5a, 1},
+               {0x0c60, 0x0c63, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c78, 0x0c7f, 1},
+               {0x0c81, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce3, 1},
+               {0x0ce6, 0x0cef, 1},
+               {0x0cf1, 0x0cf2, 1},
+               {0x0d01, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d3a, 1},
+               {0x0d3d, 0x0d44, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4e, 1},
+               {0x0d57, 0x0d5f, 8},
+               {0x0d60, 0x0d63, 1},
+               {0x0d66, 0x0d75, 1},
+               {0x0d79, 0x0d7f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0de6, 0x0def, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edf, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6c, 1},
+               {0x0f71, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fce, 0x0fda, 1},
+               {0x1000, 0x10c5, 1},
+               {0x10c7, 0x10cd, 6},
+               {0x10d0, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135d, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f5, 1},
+               {0x13f8, 0x13fd, 1},
+               {0x1400, 0x169c, 1},
+               {0x16a0, 0x16f8, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18aa, 1},
+               {0x18b0, 0x18f5, 1},
+               {0x1900, 0x191e, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19ab, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19da, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a5e, 1},
+               {0x1a60, 0x1a7c, 1},
+               {0x1a7f, 0x1a89, 1},
+               {0x1a90, 0x1a99, 1},
+               {0x1aa0, 0x1aad, 1},
+               {0x1ab0, 0x1abe, 1},
+               {0x1b00, 0x1b4b, 1},
+               {0x1b50, 0x1b7c, 1},
+               {0x1b80, 0x1bf3, 1},
+               {0x1bfc, 0x1c37, 1},
+               {0x1c3b, 0x1c49, 1},
+               {0x1c4d, 0x1c7f, 1},
+               {0x1cc0, 0x1cc7, 1},
+               {0x1cd0, 0x1cf6, 1},
+               {0x1cf8, 0x1cf9, 1},
+               {0x1d00, 0x1df5, 1},
+               {0x1dfc, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2064, 1},
+               {0x2066, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x209c, 1},
+               {0x20a0, 0x20be, 1},
+               {0x20d0, 0x20f0, 1},
+               {0x2100, 0x218b, 1},
+               {0x2190, 0x23fa, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x2b73, 1},
+               {0x2b76, 0x2b95, 1},
+               {0x2b98, 0x2bb9, 1},
+               {0x2bbd, 0x2bc8, 1},
+               {0x2bca, 0x2bd1, 1},
+               {0x2bec, 0x2bef, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c60, 0x2cf3, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d27, 0x2d2d, 6},
+               {0x2d30, 0x2d67, 1},
+               {0x2d6f, 0x2d70, 1},
+               {0x2d7f, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2de0, 0x2e42, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312d, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31ba, 1},
+               {0x31c0, 0x31e3, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fd5, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa4d0, 0xa62b, 1},
+               {0xa640, 0xa6f7, 1},
+               {0xa700, 0xa7ad, 1},
+               {0xa7b0, 0xa7b7, 1},
+               {0xa7f7, 0xa82b, 1},
+               {0xa830, 0xa839, 1},
+               {0xa840, 0xa877, 1},
+               {0xa880, 0xa8c4, 1},
+               {0xa8ce, 0xa8d9, 1},
+               {0xa8e0, 0xa8fd, 1},
+               {0xa900, 0xa953, 1},
+               {0xa95f, 0xa97c, 1},
+               {0xa980, 0xa9cd, 1},
+               {0xa9cf, 0xa9d9, 1},
+               {0xa9de, 0xa9fe, 1},
+               {0xaa00, 0xaa36, 1},
+               {0xaa40, 0xaa4d, 1},
+               {0xaa50, 0xaa59, 1},
+               {0xaa5c, 0xaac2, 1},
+               {0xaadb, 0xaaf6, 1},
+               {0xab01, 0xab06, 1},
+               {0xab09, 0xab0e, 1},
+               {0xab11, 0xab16, 1},
+               {0xab20, 0xab26, 1},
+               {0xab28, 0xab2e, 1},
+               {0xab30, 0xab65, 1},
+               {0xab70, 0xabed, 1},
+               {0xabf0, 0xabf9, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd7b0, 0xd7c6, 1},
+               {0xd7cb, 0xd7fb, 1},
+               {0xd800, 0xfa6d, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbc1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018c, 1},
+               {0x00010190, 0x0001019b, 1},
+               {0x000101a0, 0x000101d0, 48},
+               {0x000101d1, 0x000101fd, 1},
+               {0x00010280, 0x0001029c, 1},
+               {0x000102a0, 0x000102d0, 1},
+               {0x000102e0, 0x000102fb, 1},
+               {0x00010300, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010350, 0x0001037a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x00010500, 0x00010527, 1},
+               {0x00010530, 0x00010563, 1},
+               {0x0001056f, 0x00010600, 145},
+               {0x00010601, 0x00010736, 1},
+               {0x00010740, 0x00010755, 1},
+               {0x00010760, 0x00010767, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010840, 0x00010855, 1},
+               {0x00010857, 0x0001089e, 1},
+               {0x000108a7, 0x000108af, 1},
+               {0x000108e0, 0x000108f2, 1},
+               {0x000108f4, 0x000108f5, 1},
+               {0x000108fb, 0x0001091b, 1},
+               {0x0001091f, 0x00010939, 1},
+               {0x0001093f, 0x00010980, 65},
+               {0x00010981, 0x000109b7, 1},
+               {0x000109bc, 0x000109cf, 1},
+               {0x000109d2, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x00010a60, 0x00010a9f, 1},
+               {0x00010ac0, 0x00010ae6, 1},
+               {0x00010aeb, 0x00010af6, 1},
+               {0x00010b00, 0x00010b35, 1},
+               {0x00010b39, 0x00010b55, 1},
+               {0x00010b58, 0x00010b72, 1},
+               {0x00010b78, 0x00010b91, 1},
+               {0x00010b99, 0x00010b9c, 1},
+               {0x00010ba9, 0x00010baf, 1},
+               {0x00010c00, 0x00010c48, 1},
+               {0x00010c80, 0x00010cb2, 1},
+               {0x00010cc0, 0x00010cf2, 1},
+               {0x00010cfa, 0x00010cff, 1},
+               {0x00010e60, 0x00010e7e, 1},
+               {0x00011000, 0x0001104d, 1},
+               {0x00011052, 0x0001106f, 1},
+               {0x0001107f, 0x000110c1, 1},
+               {0x000110d0, 0x000110e8, 1},
+               {0x000110f0, 0x000110f9, 1},
+               {0x00011100, 0x00011134, 1},
+               {0x00011136, 0x00011143, 1},
+               {0x00011150, 0x00011176, 1},
+               {0x00011180, 0x000111cd, 1},
+               {0x000111d0, 0x000111df, 1},
+               {0x000111e1, 0x000111f4, 1},
+               {0x00011200, 0x00011211, 1},
+               {0x00011213, 0x0001123d, 1},
+               {0x00011280, 0x00011286, 1},
+               {0x00011288, 0x0001128a, 2},
+               {0x0001128b, 0x0001128d, 1},
+               {0x0001128f, 0x0001129d, 1},
+               {0x0001129f, 0x000112a9, 1},
+               {0x000112b0, 0x000112ea, 1},
+               {0x000112f0, 0x000112f9, 1},
+               {0x00011300, 0x00011303, 1},
+               {0x00011305, 0x0001130c, 1},
+               {0x0001130f, 0x00011310, 1},
+               {0x00011313, 0x00011328, 1},
+               {0x0001132a, 0x00011330, 1},
+               {0x00011332, 0x00011333, 1},
+               {0x00011335, 0x00011339, 1},
+               {0x0001133c, 0x00011344, 1},
+               {0x00011347, 0x00011348, 1},
+               {0x0001134b, 0x0001134d, 1},
+               {0x00011350, 0x00011357, 7},
+               {0x0001135d, 0x00011363, 1},
+               {0x00011366, 0x0001136c, 1},
+               {0x00011370, 0x00011374, 1},
+               {0x00011480, 0x000114c7, 1},
+               {0x000114d0, 0x000114d9, 1},
+               {0x00011580, 0x000115b5, 1},
+               {0x000115b8, 0x000115dd, 1},
+               {0x00011600, 0x00011644, 1},
+               {0x00011650, 0x00011659, 1},
+               {0x00011680, 0x000116b7, 1},
+               {0x000116c0, 0x000116c9, 1},
+               {0x00011700, 0x00011719, 1},
+               {0x0001171d, 0x0001172b, 1},
+               {0x00011730, 0x0001173f, 1},
+               {0x000118a0, 0x000118f2, 1},
+               {0x000118ff, 0x00011ac0, 449},
+               {0x00011ac1, 0x00011af8, 1},
+               {0x00012000, 0x00012399, 1},
+               {0x00012400, 0x0001246e, 1},
+               {0x00012470, 0x00012474, 1},
+               {0x00012480, 0x00012543, 1},
+               {0x00013000, 0x0001342e, 1},
+               {0x00014400, 0x00014646, 1},
+               {0x00016800, 0x00016a38, 1},
+               {0x00016a40, 0x00016a5e, 1},
+               {0x00016a60, 0x00016a69, 1},
+               {0x00016a6e, 0x00016a6f, 1},
+               {0x00016ad0, 0x00016aed, 1},
+               {0x00016af0, 0x00016af5, 1},
+               {0x00016b00, 0x00016b45, 1},
+               {0x00016b50, 0x00016b59, 1},
+               {0x00016b5b, 0x00016b61, 1},
+               {0x00016b63, 0x00016b77, 1},
+               {0x00016b7d, 0x00016b8f, 1},
+               {0x00016f00, 0x00016f44, 1},
+               {0x00016f50, 0x00016f7e, 1},
+               {0x00016f8f, 0x00016f9f, 1},
+               {0x0001b000, 0x0001b001, 1},
+               {0x0001bc00, 0x0001bc6a, 1},
+               {0x0001bc70, 0x0001bc7c, 1},
+               {0x0001bc80, 0x0001bc88, 1},
+               {0x0001bc90, 0x0001bc99, 1},
+               {0x0001bc9c, 0x0001bca3, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d129, 0x0001d1e8, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d360, 0x0001d371, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7cb, 1},
+               {0x0001d7ce, 0x0001da8b, 1},
+               {0x0001da9b, 0x0001da9f, 1},
+               {0x0001daa1, 0x0001daaf, 1},
+               {0x0001e800, 0x0001e8c4, 1},
+               {0x0001e8c7, 0x0001e8d6, 1},
+               {0x0001ee00, 0x0001ee03, 1},
+               {0x0001ee05, 0x0001ee1f, 1},
+               {0x0001ee21, 0x0001ee22, 1},
+               {0x0001ee24, 0x0001ee27, 3},
+               {0x0001ee29, 0x0001ee32, 1},
+               {0x0001ee34, 0x0001ee37, 1},
+               {0x0001ee39, 0x0001ee3b, 2},
+               {0x0001ee42, 0x0001ee47, 5},
+               {0x0001ee49, 0x0001ee4d, 2},
+               {0x0001ee4e, 0x0001ee4f, 1},
+               {0x0001ee51, 0x0001ee52, 1},
+               {0x0001ee54, 0x0001ee57, 3},
+               {0x0001ee59, 0x0001ee61, 2},
+               {0x0001ee62, 0x0001ee64, 2},
+               {0x0001ee67, 0x0001ee6a, 1},
+               {0x0001ee6c, 0x0001ee72, 1},
+               {0x0001ee74, 0x0001ee77, 1},
+               {0x0001ee79, 0x0001ee7c, 1},
+               {0x0001ee7e, 0x0001ee80, 2},
+               {0x0001ee81, 0x0001ee89, 1},
+               {0x0001ee8b, 0x0001ee9b, 1},
+               {0x0001eea1, 0x0001eea3, 1},
+               {0x0001eea5, 0x0001eea9, 1},
+               {0x0001eeab, 0x0001eebb, 1},
+               {0x0001eef0, 0x0001eef1, 1},
+               {0x0001f000, 0x0001f02b, 1},
+               {0x0001f030, 0x0001f093, 1},
+               {0x0001f0a0, 0x0001f0ae, 1},
+               {0x0001f0b1, 0x0001f0bf, 1},
+               {0x0001f0c1, 0x0001f0cf, 1},
+               {0x0001f0d1, 0x0001f0f5, 1},
+               {0x0001f100, 0x0001f10c, 1},
+               {0x0001f110, 0x0001f12e, 1},
+               {0x0001f130, 0x0001f16b, 1},
+               {0x0001f170, 0x0001f19a, 1},
+               {0x0001f1e6, 0x0001f202, 1},
+               {0x0001f210, 0x0001f23a, 1},
+               {0x0001f240, 0x0001f248, 1},
+               {0x0001f250, 0x0001f251, 1},
+               {0x0001f300, 0x0001f579, 1},
+               {0x0001f57b, 0x0001f5a3, 1},
+               {0x0001f5a5, 0x0001f6d0, 1},
+               {0x0001f6e0, 0x0001f6ec, 1},
+               {0x0001f6f0, 0x0001f6f3, 1},
+               {0x0001f700, 0x0001f773, 1},
+               {0x0001f780, 0x0001f7d4, 1},
+               {0x0001f800, 0x0001f80b, 1},
+               {0x0001f810, 0x0001f847, 1},
+               {0x0001f850, 0x0001f859, 1},
+               {0x0001f860, 0x0001f887, 1},
+               {0x0001f890, 0x0001f8ad, 1},
+               {0x0001f910, 0x0001f918, 1},
+               {0x0001f980, 0x0001f984, 1},
+               {0x0001f9c0, 0x00020000, 1600},
+               {0x00020001, 0x0002a6d6, 1},
+               {0x0002a700, 0x0002b734, 1},
+               {0x0002b740, 0x0002b81d, 1},
+               {0x0002b820, 0x0002cea1, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// size 5348 bytes (5 KiB)
+var assigned9_0_0 = &unicode.RangeTable{
+       R16: []unicode.Range16{
+               {0x0000, 0x0377, 1},
+               {0x037a, 0x037f, 1},
+               {0x0384, 0x038a, 1},
+               {0x038c, 0x038e, 2},
+               {0x038f, 0x03a1, 1},
+               {0x03a3, 0x052f, 1},
+               {0x0531, 0x0556, 1},
+               {0x0559, 0x055f, 1},
+               {0x0561, 0x0587, 1},
+               {0x0589, 0x058a, 1},
+               {0x058d, 0x058f, 1},
+               {0x0591, 0x05c7, 1},
+               {0x05d0, 0x05ea, 1},
+               {0x05f0, 0x05f4, 1},
+               {0x0600, 0x061c, 1},
+               {0x061e, 0x070d, 1},
+               {0x070f, 0x074a, 1},
+               {0x074d, 0x07b1, 1},
+               {0x07c0, 0x07fa, 1},
+               {0x0800, 0x082d, 1},
+               {0x0830, 0x083e, 1},
+               {0x0840, 0x085b, 1},
+               {0x085e, 0x08a0, 66},
+               {0x08a1, 0x08b4, 1},
+               {0x08b6, 0x08bd, 1},
+               {0x08d4, 0x0983, 1},
+               {0x0985, 0x098c, 1},
+               {0x098f, 0x0990, 1},
+               {0x0993, 0x09a8, 1},
+               {0x09aa, 0x09b0, 1},
+               {0x09b2, 0x09b6, 4},
+               {0x09b7, 0x09b9, 1},
+               {0x09bc, 0x09c4, 1},
+               {0x09c7, 0x09c8, 1},
+               {0x09cb, 0x09ce, 1},
+               {0x09d7, 0x09dc, 5},
+               {0x09dd, 0x09df, 2},
+               {0x09e0, 0x09e3, 1},
+               {0x09e6, 0x09fb, 1},
+               {0x0a01, 0x0a03, 1},
+               {0x0a05, 0x0a0a, 1},
+               {0x0a0f, 0x0a10, 1},
+               {0x0a13, 0x0a28, 1},
+               {0x0a2a, 0x0a30, 1},
+               {0x0a32, 0x0a33, 1},
+               {0x0a35, 0x0a36, 1},
+               {0x0a38, 0x0a39, 1},
+               {0x0a3c, 0x0a3e, 2},
+               {0x0a3f, 0x0a42, 1},
+               {0x0a47, 0x0a48, 1},
+               {0x0a4b, 0x0a4d, 1},
+               {0x0a51, 0x0a59, 8},
+               {0x0a5a, 0x0a5c, 1},
+               {0x0a5e, 0x0a66, 8},
+               {0x0a67, 0x0a75, 1},
+               {0x0a81, 0x0a83, 1},
+               {0x0a85, 0x0a8d, 1},
+               {0x0a8f, 0x0a91, 1},
+               {0x0a93, 0x0aa8, 1},
+               {0x0aaa, 0x0ab0, 1},
+               {0x0ab2, 0x0ab3, 1},
+               {0x0ab5, 0x0ab9, 1},
+               {0x0abc, 0x0ac5, 1},
+               {0x0ac7, 0x0ac9, 1},
+               {0x0acb, 0x0acd, 1},
+               {0x0ad0, 0x0ae0, 16},
+               {0x0ae1, 0x0ae3, 1},
+               {0x0ae6, 0x0af1, 1},
+               {0x0af9, 0x0b01, 8},
+               {0x0b02, 0x0b03, 1},
+               {0x0b05, 0x0b0c, 1},
+               {0x0b0f, 0x0b10, 1},
+               {0x0b13, 0x0b28, 1},
+               {0x0b2a, 0x0b30, 1},
+               {0x0b32, 0x0b33, 1},
+               {0x0b35, 0x0b39, 1},
+               {0x0b3c, 0x0b44, 1},
+               {0x0b47, 0x0b48, 1},
+               {0x0b4b, 0x0b4d, 1},
+               {0x0b56, 0x0b57, 1},
+               {0x0b5c, 0x0b5d, 1},
+               {0x0b5f, 0x0b63, 1},
+               {0x0b66, 0x0b77, 1},
+               {0x0b82, 0x0b83, 1},
+               {0x0b85, 0x0b8a, 1},
+               {0x0b8e, 0x0b90, 1},
+               {0x0b92, 0x0b95, 1},
+               {0x0b99, 0x0b9a, 1},
+               {0x0b9c, 0x0b9e, 2},
+               {0x0b9f, 0x0ba3, 4},
+               {0x0ba4, 0x0ba8, 4},
+               {0x0ba9, 0x0baa, 1},
+               {0x0bae, 0x0bb9, 1},
+               {0x0bbe, 0x0bc2, 1},
+               {0x0bc6, 0x0bc8, 1},
+               {0x0bca, 0x0bcd, 1},
+               {0x0bd0, 0x0bd7, 7},
+               {0x0be6, 0x0bfa, 1},
+               {0x0c00, 0x0c03, 1},
+               {0x0c05, 0x0c0c, 1},
+               {0x0c0e, 0x0c10, 1},
+               {0x0c12, 0x0c28, 1},
+               {0x0c2a, 0x0c39, 1},
+               {0x0c3d, 0x0c44, 1},
+               {0x0c46, 0x0c48, 1},
+               {0x0c4a, 0x0c4d, 1},
+               {0x0c55, 0x0c56, 1},
+               {0x0c58, 0x0c5a, 1},
+               {0x0c60, 0x0c63, 1},
+               {0x0c66, 0x0c6f, 1},
+               {0x0c78, 0x0c83, 1},
+               {0x0c85, 0x0c8c, 1},
+               {0x0c8e, 0x0c90, 1},
+               {0x0c92, 0x0ca8, 1},
+               {0x0caa, 0x0cb3, 1},
+               {0x0cb5, 0x0cb9, 1},
+               {0x0cbc, 0x0cc4, 1},
+               {0x0cc6, 0x0cc8, 1},
+               {0x0cca, 0x0ccd, 1},
+               {0x0cd5, 0x0cd6, 1},
+               {0x0cde, 0x0ce0, 2},
+               {0x0ce1, 0x0ce3, 1},
+               {0x0ce6, 0x0cef, 1},
+               {0x0cf1, 0x0cf2, 1},
+               {0x0d01, 0x0d03, 1},
+               {0x0d05, 0x0d0c, 1},
+               {0x0d0e, 0x0d10, 1},
+               {0x0d12, 0x0d3a, 1},
+               {0x0d3d, 0x0d44, 1},
+               {0x0d46, 0x0d48, 1},
+               {0x0d4a, 0x0d4f, 1},
+               {0x0d54, 0x0d63, 1},
+               {0x0d66, 0x0d7f, 1},
+               {0x0d82, 0x0d83, 1},
+               {0x0d85, 0x0d96, 1},
+               {0x0d9a, 0x0db1, 1},
+               {0x0db3, 0x0dbb, 1},
+               {0x0dbd, 0x0dc0, 3},
+               {0x0dc1, 0x0dc6, 1},
+               {0x0dca, 0x0dcf, 5},
+               {0x0dd0, 0x0dd4, 1},
+               {0x0dd6, 0x0dd8, 2},
+               {0x0dd9, 0x0ddf, 1},
+               {0x0de6, 0x0def, 1},
+               {0x0df2, 0x0df4, 1},
+               {0x0e01, 0x0e3a, 1},
+               {0x0e3f, 0x0e5b, 1},
+               {0x0e81, 0x0e82, 1},
+               {0x0e84, 0x0e87, 3},
+               {0x0e88, 0x0e8a, 2},
+               {0x0e8d, 0x0e94, 7},
+               {0x0e95, 0x0e97, 1},
+               {0x0e99, 0x0e9f, 1},
+               {0x0ea1, 0x0ea3, 1},
+               {0x0ea5, 0x0ea7, 2},
+               {0x0eaa, 0x0eab, 1},
+               {0x0ead, 0x0eb9, 1},
+               {0x0ebb, 0x0ebd, 1},
+               {0x0ec0, 0x0ec4, 1},
+               {0x0ec6, 0x0ec8, 2},
+               {0x0ec9, 0x0ecd, 1},
+               {0x0ed0, 0x0ed9, 1},
+               {0x0edc, 0x0edf, 1},
+               {0x0f00, 0x0f47, 1},
+               {0x0f49, 0x0f6c, 1},
+               {0x0f71, 0x0f97, 1},
+               {0x0f99, 0x0fbc, 1},
+               {0x0fbe, 0x0fcc, 1},
+               {0x0fce, 0x0fda, 1},
+               {0x1000, 0x10c5, 1},
+               {0x10c7, 0x10cd, 6},
+               {0x10d0, 0x1248, 1},
+               {0x124a, 0x124d, 1},
+               {0x1250, 0x1256, 1},
+               {0x1258, 0x125a, 2},
+               {0x125b, 0x125d, 1},
+               {0x1260, 0x1288, 1},
+               {0x128a, 0x128d, 1},
+               {0x1290, 0x12b0, 1},
+               {0x12b2, 0x12b5, 1},
+               {0x12b8, 0x12be, 1},
+               {0x12c0, 0x12c2, 2},
+               {0x12c3, 0x12c5, 1},
+               {0x12c8, 0x12d6, 1},
+               {0x12d8, 0x1310, 1},
+               {0x1312, 0x1315, 1},
+               {0x1318, 0x135a, 1},
+               {0x135d, 0x137c, 1},
+               {0x1380, 0x1399, 1},
+               {0x13a0, 0x13f5, 1},
+               {0x13f8, 0x13fd, 1},
+               {0x1400, 0x169c, 1},
+               {0x16a0, 0x16f8, 1},
+               {0x1700, 0x170c, 1},
+               {0x170e, 0x1714, 1},
+               {0x1720, 0x1736, 1},
+               {0x1740, 0x1753, 1},
+               {0x1760, 0x176c, 1},
+               {0x176e, 0x1770, 1},
+               {0x1772, 0x1773, 1},
+               {0x1780, 0x17dd, 1},
+               {0x17e0, 0x17e9, 1},
+               {0x17f0, 0x17f9, 1},
+               {0x1800, 0x180e, 1},
+               {0x1810, 0x1819, 1},
+               {0x1820, 0x1877, 1},
+               {0x1880, 0x18aa, 1},
+               {0x18b0, 0x18f5, 1},
+               {0x1900, 0x191e, 1},
+               {0x1920, 0x192b, 1},
+               {0x1930, 0x193b, 1},
+               {0x1940, 0x1944, 4},
+               {0x1945, 0x196d, 1},
+               {0x1970, 0x1974, 1},
+               {0x1980, 0x19ab, 1},
+               {0x19b0, 0x19c9, 1},
+               {0x19d0, 0x19da, 1},
+               {0x19de, 0x1a1b, 1},
+               {0x1a1e, 0x1a5e, 1},
+               {0x1a60, 0x1a7c, 1},
+               {0x1a7f, 0x1a89, 1},
+               {0x1a90, 0x1a99, 1},
+               {0x1aa0, 0x1aad, 1},
+               {0x1ab0, 0x1abe, 1},
+               {0x1b00, 0x1b4b, 1},
+               {0x1b50, 0x1b7c, 1},
+               {0x1b80, 0x1bf3, 1},
+               {0x1bfc, 0x1c37, 1},
+               {0x1c3b, 0x1c49, 1},
+               {0x1c4d, 0x1c88, 1},
+               {0x1cc0, 0x1cc7, 1},
+               {0x1cd0, 0x1cf6, 1},
+               {0x1cf8, 0x1cf9, 1},
+               {0x1d00, 0x1df5, 1},
+               {0x1dfb, 0x1f15, 1},
+               {0x1f18, 0x1f1d, 1},
+               {0x1f20, 0x1f45, 1},
+               {0x1f48, 0x1f4d, 1},
+               {0x1f50, 0x1f57, 1},
+               {0x1f59, 0x1f5f, 2},
+               {0x1f60, 0x1f7d, 1},
+               {0x1f80, 0x1fb4, 1},
+               {0x1fb6, 0x1fc4, 1},
+               {0x1fc6, 0x1fd3, 1},
+               {0x1fd6, 0x1fdb, 1},
+               {0x1fdd, 0x1fef, 1},
+               {0x1ff2, 0x1ff4, 1},
+               {0x1ff6, 0x1ffe, 1},
+               {0x2000, 0x2064, 1},
+               {0x2066, 0x2071, 1},
+               {0x2074, 0x208e, 1},
+               {0x2090, 0x209c, 1},
+               {0x20a0, 0x20be, 1},
+               {0x20d0, 0x20f0, 1},
+               {0x2100, 0x218b, 1},
+               {0x2190, 0x23fe, 1},
+               {0x2400, 0x2426, 1},
+               {0x2440, 0x244a, 1},
+               {0x2460, 0x2b73, 1},
+               {0x2b76, 0x2b95, 1},
+               {0x2b98, 0x2bb9, 1},
+               {0x2bbd, 0x2bc8, 1},
+               {0x2bca, 0x2bd1, 1},
+               {0x2bec, 0x2bef, 1},
+               {0x2c00, 0x2c2e, 1},
+               {0x2c30, 0x2c5e, 1},
+               {0x2c60, 0x2cf3, 1},
+               {0x2cf9, 0x2d25, 1},
+               {0x2d27, 0x2d2d, 6},
+               {0x2d30, 0x2d67, 1},
+               {0x2d6f, 0x2d70, 1},
+               {0x2d7f, 0x2d96, 1},
+               {0x2da0, 0x2da6, 1},
+               {0x2da8, 0x2dae, 1},
+               {0x2db0, 0x2db6, 1},
+               {0x2db8, 0x2dbe, 1},
+               {0x2dc0, 0x2dc6, 1},
+               {0x2dc8, 0x2dce, 1},
+               {0x2dd0, 0x2dd6, 1},
+               {0x2dd8, 0x2dde, 1},
+               {0x2de0, 0x2e44, 1},
+               {0x2e80, 0x2e99, 1},
+               {0x2e9b, 0x2ef3, 1},
+               {0x2f00, 0x2fd5, 1},
+               {0x2ff0, 0x2ffb, 1},
+               {0x3000, 0x303f, 1},
+               {0x3041, 0x3096, 1},
+               {0x3099, 0x30ff, 1},
+               {0x3105, 0x312d, 1},
+               {0x3131, 0x318e, 1},
+               {0x3190, 0x31ba, 1},
+               {0x31c0, 0x31e3, 1},
+               {0x31f0, 0x321e, 1},
+               {0x3220, 0x32fe, 1},
+               {0x3300, 0x4db5, 1},
+               {0x4dc0, 0x9fd5, 1},
+               {0xa000, 0xa48c, 1},
+               {0xa490, 0xa4c6, 1},
+               {0xa4d0, 0xa62b, 1},
+               {0xa640, 0xa6f7, 1},
+               {0xa700, 0xa7ae, 1},
+               {0xa7b0, 0xa7b7, 1},
+               {0xa7f7, 0xa82b, 1},
+               {0xa830, 0xa839, 1},
+               {0xa840, 0xa877, 1},
+               {0xa880, 0xa8c5, 1},
+               {0xa8ce, 0xa8d9, 1},
+               {0xa8e0, 0xa8fd, 1},
+               {0xa900, 0xa953, 1},
+               {0xa95f, 0xa97c, 1},
+               {0xa980, 0xa9cd, 1},
+               {0xa9cf, 0xa9d9, 1},
+               {0xa9de, 0xa9fe, 1},
+               {0xaa00, 0xaa36, 1},
+               {0xaa40, 0xaa4d, 1},
+               {0xaa50, 0xaa59, 1},
+               {0xaa5c, 0xaac2, 1},
+               {0xaadb, 0xaaf6, 1},
+               {0xab01, 0xab06, 1},
+               {0xab09, 0xab0e, 1},
+               {0xab11, 0xab16, 1},
+               {0xab20, 0xab26, 1},
+               {0xab28, 0xab2e, 1},
+               {0xab30, 0xab65, 1},
+               {0xab70, 0xabed, 1},
+               {0xabf0, 0xabf9, 1},
+               {0xac00, 0xd7a3, 1},
+               {0xd7b0, 0xd7c6, 1},
+               {0xd7cb, 0xd7fb, 1},
+               {0xd800, 0xfa6d, 1},
+               {0xfa70, 0xfad9, 1},
+               {0xfb00, 0xfb06, 1},
+               {0xfb13, 0xfb17, 1},
+               {0xfb1d, 0xfb36, 1},
+               {0xfb38, 0xfb3c, 1},
+               {0xfb3e, 0xfb40, 2},
+               {0xfb41, 0xfb43, 2},
+               {0xfb44, 0xfb46, 2},
+               {0xfb47, 0xfbc1, 1},
+               {0xfbd3, 0xfd3f, 1},
+               {0xfd50, 0xfd8f, 1},
+               {0xfd92, 0xfdc7, 1},
+               {0xfdf0, 0xfdfd, 1},
+               {0xfe00, 0xfe19, 1},
+               {0xfe20, 0xfe52, 1},
+               {0xfe54, 0xfe66, 1},
+               {0xfe68, 0xfe6b, 1},
+               {0xfe70, 0xfe74, 1},
+               {0xfe76, 0xfefc, 1},
+               {0xfeff, 0xff01, 2},
+               {0xff02, 0xffbe, 1},
+               {0xffc2, 0xffc7, 1},
+               {0xffca, 0xffcf, 1},
+               {0xffd2, 0xffd7, 1},
+               {0xffda, 0xffdc, 1},
+               {0xffe0, 0xffe6, 1},
+               {0xffe8, 0xffee, 1},
+               {0xfff9, 0xfffd, 1},
+       },
+       R32: []unicode.Range32{
+               {0x00010000, 0x0001000b, 1},
+               {0x0001000d, 0x00010026, 1},
+               {0x00010028, 0x0001003a, 1},
+               {0x0001003c, 0x0001003d, 1},
+               {0x0001003f, 0x0001004d, 1},
+               {0x00010050, 0x0001005d, 1},
+               {0x00010080, 0x000100fa, 1},
+               {0x00010100, 0x00010102, 1},
+               {0x00010107, 0x00010133, 1},
+               {0x00010137, 0x0001018e, 1},
+               {0x00010190, 0x0001019b, 1},
+               {0x000101a0, 0x000101d0, 48},
+               {0x000101d1, 0x000101fd, 1},
+               {0x00010280, 0x0001029c, 1},
+               {0x000102a0, 0x000102d0, 1},
+               {0x000102e0, 0x000102fb, 1},
+               {0x00010300, 0x00010323, 1},
+               {0x00010330, 0x0001034a, 1},
+               {0x00010350, 0x0001037a, 1},
+               {0x00010380, 0x0001039d, 1},
+               {0x0001039f, 0x000103c3, 1},
+               {0x000103c8, 0x000103d5, 1},
+               {0x00010400, 0x0001049d, 1},
+               {0x000104a0, 0x000104a9, 1},
+               {0x000104b0, 0x000104d3, 1},
+               {0x000104d8, 0x000104fb, 1},
+               {0x00010500, 0x00010527, 1},
+               {0x00010530, 0x00010563, 1},
+               {0x0001056f, 0x00010600, 145},
+               {0x00010601, 0x00010736, 1},
+               {0x00010740, 0x00010755, 1},
+               {0x00010760, 0x00010767, 1},
+               {0x00010800, 0x00010805, 1},
+               {0x00010808, 0x0001080a, 2},
+               {0x0001080b, 0x00010835, 1},
+               {0x00010837, 0x00010838, 1},
+               {0x0001083c, 0x0001083f, 3},
+               {0x00010840, 0x00010855, 1},
+               {0x00010857, 0x0001089e, 1},
+               {0x000108a7, 0x000108af, 1},
+               {0x000108e0, 0x000108f2, 1},
+               {0x000108f4, 0x000108f5, 1},
+               {0x000108fb, 0x0001091b, 1},
+               {0x0001091f, 0x00010939, 1},
+               {0x0001093f, 0x00010980, 65},
+               {0x00010981, 0x000109b7, 1},
+               {0x000109bc, 0x000109cf, 1},
+               {0x000109d2, 0x00010a03, 1},
+               {0x00010a05, 0x00010a06, 1},
+               {0x00010a0c, 0x00010a13, 1},
+               {0x00010a15, 0x00010a17, 1},
+               {0x00010a19, 0x00010a33, 1},
+               {0x00010a38, 0x00010a3a, 1},
+               {0x00010a3f, 0x00010a47, 1},
+               {0x00010a50, 0x00010a58, 1},
+               {0x00010a60, 0x00010a9f, 1},
+               {0x00010ac0, 0x00010ae6, 1},
+               {0x00010aeb, 0x00010af6, 1},
+               {0x00010b00, 0x00010b35, 1},
+               {0x00010b39, 0x00010b55, 1},
+               {0x00010b58, 0x00010b72, 1},
+               {0x00010b78, 0x00010b91, 1},
+               {0x00010b99, 0x00010b9c, 1},
+               {0x00010ba9, 0x00010baf, 1},
+               {0x00010c00, 0x00010c48, 1},
+               {0x00010c80, 0x00010cb2, 1},
+               {0x00010cc0, 0x00010cf2, 1},
+               {0x00010cfa, 0x00010cff, 1},
+               {0x00010e60, 0x00010e7e, 1},
+               {0x00011000, 0x0001104d, 1},
+               {0x00011052, 0x0001106f, 1},
+               {0x0001107f, 0x000110c1, 1},
+               {0x000110d0, 0x000110e8, 1},
+               {0x000110f0, 0x000110f9, 1},
+               {0x00011100, 0x00011134, 1},
+               {0x00011136, 0x00011143, 1},
+               {0x00011150, 0x00011176, 1},
+               {0x00011180, 0x000111cd, 1},
+               {0x000111d0, 0x000111df, 1},
+               {0x000111e1, 0x000111f4, 1},
+               {0x00011200, 0x00011211, 1},
+               {0x00011213, 0x0001123e, 1},
+               {0x00011280, 0x00011286, 1},
+               {0x00011288, 0x0001128a, 2},
+               {0x0001128b, 0x0001128d, 1},
+               {0x0001128f, 0x0001129d, 1},
+               {0x0001129f, 0x000112a9, 1},
+               {0x000112b0, 0x000112ea, 1},
+               {0x000112f0, 0x000112f9, 1},
+               {0x00011300, 0x00011303, 1},
+               {0x00011305, 0x0001130c, 1},
+               {0x0001130f, 0x00011310, 1},
+               {0x00011313, 0x00011328, 1},
+               {0x0001132a, 0x00011330, 1},
+               {0x00011332, 0x00011333, 1},
+               {0x00011335, 0x00011339, 1},
+               {0x0001133c, 0x00011344, 1},
+               {0x00011347, 0x00011348, 1},
+               {0x0001134b, 0x0001134d, 1},
+               {0x00011350, 0x00011357, 7},
+               {0x0001135d, 0x00011363, 1},
+               {0x00011366, 0x0001136c, 1},
+               {0x00011370, 0x00011374, 1},
+               {0x00011400, 0x00011459, 1},
+               {0x0001145b, 0x0001145d, 2},
+               {0x00011480, 0x000114c7, 1},
+               {0x000114d0, 0x000114d9, 1},
+               {0x00011580, 0x000115b5, 1},
+               {0x000115b8, 0x000115dd, 1},
+               {0x00011600, 0x00011644, 1},
+               {0x00011650, 0x00011659, 1},
+               {0x00011660, 0x0001166c, 1},
+               {0x00011680, 0x000116b7, 1},
+               {0x000116c0, 0x000116c9, 1},
+               {0x00011700, 0x00011719, 1},
+               {0x0001171d, 0x0001172b, 1},
+               {0x00011730, 0x0001173f, 1},
+               {0x000118a0, 0x000118f2, 1},
+               {0x000118ff, 0x00011ac0, 449},
+               {0x00011ac1, 0x00011af8, 1},
+               {0x00011c00, 0x00011c08, 1},
+               {0x00011c0a, 0x00011c36, 1},
+               {0x00011c38, 0x00011c45, 1},
+               {0x00011c50, 0x00011c6c, 1},
+               {0x00011c70, 0x00011c8f, 1},
+               {0x00011c92, 0x00011ca7, 1},
+               {0x00011ca9, 0x00011cb6, 1},
+               {0x00012000, 0x00012399, 1},
+               {0x00012400, 0x0001246e, 1},
+               {0x00012470, 0x00012474, 1},
+               {0x00012480, 0x00012543, 1},
+               {0x00013000, 0x0001342e, 1},
+               {0x00014400, 0x00014646, 1},
+               {0x00016800, 0x00016a38, 1},
+               {0x00016a40, 0x00016a5e, 1},
+               {0x00016a60, 0x00016a69, 1},
+               {0x00016a6e, 0x00016a6f, 1},
+               {0x00016ad0, 0x00016aed, 1},
+               {0x00016af0, 0x00016af5, 1},
+               {0x00016b00, 0x00016b45, 1},
+               {0x00016b50, 0x00016b59, 1},
+               {0x00016b5b, 0x00016b61, 1},
+               {0x00016b63, 0x00016b77, 1},
+               {0x00016b7d, 0x00016b8f, 1},
+               {0x00016f00, 0x00016f44, 1},
+               {0x00016f50, 0x00016f7e, 1},
+               {0x00016f8f, 0x00016f9f, 1},
+               {0x00016fe0, 0x00017000, 32},
+               {0x00017001, 0x000187ec, 1},
+               {0x00018800, 0x00018af2, 1},
+               {0x0001b000, 0x0001b001, 1},
+               {0x0001bc00, 0x0001bc6a, 1},
+               {0x0001bc70, 0x0001bc7c, 1},
+               {0x0001bc80, 0x0001bc88, 1},
+               {0x0001bc90, 0x0001bc99, 1},
+               {0x0001bc9c, 0x0001bca3, 1},
+               {0x0001d000, 0x0001d0f5, 1},
+               {0x0001d100, 0x0001d126, 1},
+               {0x0001d129, 0x0001d1e8, 1},
+               {0x0001d200, 0x0001d245, 1},
+               {0x0001d300, 0x0001d356, 1},
+               {0x0001d360, 0x0001d371, 1},
+               {0x0001d400, 0x0001d454, 1},
+               {0x0001d456, 0x0001d49c, 1},
+               {0x0001d49e, 0x0001d49f, 1},
+               {0x0001d4a2, 0x0001d4a5, 3},
+               {0x0001d4a6, 0x0001d4a9, 3},
+               {0x0001d4aa, 0x0001d4ac, 1},
+               {0x0001d4ae, 0x0001d4b9, 1},
+               {0x0001d4bb, 0x0001d4bd, 2},
+               {0x0001d4be, 0x0001d4c3, 1},
+               {0x0001d4c5, 0x0001d505, 1},
+               {0x0001d507, 0x0001d50a, 1},
+               {0x0001d50d, 0x0001d514, 1},
+               {0x0001d516, 0x0001d51c, 1},
+               {0x0001d51e, 0x0001d539, 1},
+               {0x0001d53b, 0x0001d53e, 1},
+               {0x0001d540, 0x0001d544, 1},
+               {0x0001d546, 0x0001d54a, 4},
+               {0x0001d54b, 0x0001d550, 1},
+               {0x0001d552, 0x0001d6a5, 1},
+               {0x0001d6a8, 0x0001d7cb, 1},
+               {0x0001d7ce, 0x0001da8b, 1},
+               {0x0001da9b, 0x0001da9f, 1},
+               {0x0001daa1, 0x0001daaf, 1},
+               {0x0001e000, 0x0001e006, 1},
+               {0x0001e008, 0x0001e018, 1},
+               {0x0001e01b, 0x0001e021, 1},
+               {0x0001e023, 0x0001e024, 1},
+               {0x0001e026, 0x0001e02a, 1},
+               {0x0001e800, 0x0001e8c4, 1},
+               {0x0001e8c7, 0x0001e8d6, 1},
+               {0x0001e900, 0x0001e94a, 1},
+               {0x0001e950, 0x0001e959, 1},
+               {0x0001e95e, 0x0001e95f, 1},
+               {0x0001ee00, 0x0001ee03, 1},
+               {0x0001ee05, 0x0001ee1f, 1},
+               {0x0001ee21, 0x0001ee22, 1},
+               {0x0001ee24, 0x0001ee27, 3},
+               {0x0001ee29, 0x0001ee32, 1},
+               {0x0001ee34, 0x0001ee37, 1},
+               {0x0001ee39, 0x0001ee3b, 2},
+               {0x0001ee42, 0x0001ee47, 5},
+               {0x0001ee49, 0x0001ee4d, 2},
+               {0x0001ee4e, 0x0001ee4f, 1},
+               {0x0001ee51, 0x0001ee52, 1},
+               {0x0001ee54, 0x0001ee57, 3},
+               {0x0001ee59, 0x0001ee61, 2},
+               {0x0001ee62, 0x0001ee64, 2},
+               {0x0001ee67, 0x0001ee6a, 1},
+               {0x0001ee6c, 0x0001ee72, 1},
+               {0x0001ee74, 0x0001ee77, 1},
+               {0x0001ee79, 0x0001ee7c, 1},
+               {0x0001ee7e, 0x0001ee80, 2},
+               {0x0001ee81, 0x0001ee89, 1},
+               {0x0001ee8b, 0x0001ee9b, 1},
+               {0x0001eea1, 0x0001eea3, 1},
+               {0x0001eea5, 0x0001eea9, 1},
+               {0x0001eeab, 0x0001eebb, 1},
+               {0x0001eef0, 0x0001eef1, 1},
+               {0x0001f000, 0x0001f02b, 1},
+               {0x0001f030, 0x0001f093, 1},
+               {0x0001f0a0, 0x0001f0ae, 1},
+               {0x0001f0b1, 0x0001f0bf, 1},
+               {0x0001f0c1, 0x0001f0cf, 1},
+               {0x0001f0d1, 0x0001f0f5, 1},
+               {0x0001f100, 0x0001f10c, 1},
+               {0x0001f110, 0x0001f12e, 1},
+               {0x0001f130, 0x0001f16b, 1},
+               {0x0001f170, 0x0001f1ac, 1},
+               {0x0001f1e6, 0x0001f202, 1},
+               {0x0001f210, 0x0001f23b, 1},
+               {0x0001f240, 0x0001f248, 1},
+               {0x0001f250, 0x0001f251, 1},
+               {0x0001f300, 0x0001f6d2, 1},
+               {0x0001f6e0, 0x0001f6ec, 1},
+               {0x0001f6f0, 0x0001f6f6, 1},
+               {0x0001f700, 0x0001f773, 1},
+               {0x0001f780, 0x0001f7d4, 1},
+               {0x0001f800, 0x0001f80b, 1},
+               {0x0001f810, 0x0001f847, 1},
+               {0x0001f850, 0x0001f859, 1},
+               {0x0001f860, 0x0001f887, 1},
+               {0x0001f890, 0x0001f8ad, 1},
+               {0x0001f910, 0x0001f91e, 1},
+               {0x0001f920, 0x0001f927, 1},
+               {0x0001f930, 0x0001f933, 3},
+               {0x0001f934, 0x0001f93e, 1},
+               {0x0001f940, 0x0001f94b, 1},
+               {0x0001f950, 0x0001f95e, 1},
+               {0x0001f980, 0x0001f991, 1},
+               {0x0001f9c0, 0x00020000, 1600},
+               {0x00020001, 0x0002a6d6, 1},
+               {0x0002a700, 0x0002b734, 1},
+               {0x0002b740, 0x0002b81d, 1},
+               {0x0002b820, 0x0002cea1, 1},
+               {0x0002f800, 0x0002fa1d, 1},
+               {0x000e0001, 0x000e0020, 31},
+               {0x000e0021, 0x000e007f, 1},
+               {0x000e0100, 0x000e01ef, 1},
+               {0x000f0000, 0x000ffffd, 1},
+               {0x00100000, 0x0010fffd, 1},
+       },
+       LatinOffset: 0,
+}
+
+// Total size 44206 bytes (43 KiB)
index 6c5ed524424ddcac602a5b4f89f8bdeca0467a03..ab3806387922bcfec4f2a8b956ffcaa2729ee144 100644 (file)
                        "revision": "31df19d69da8728e9220def59b80ee577c3e48bf",
                        "revisionTime": "2016-03-29T10:16:23+11:00"
                },
+               {
+                       "checksumSHA1": "g/Z/Ka0VgJESgQK7/SJCjm/aX0I=",
+                       "path": "golang.org/x/net/idna",
+                       "revision": "054b33e6527139ad5b1ec2f6232c3b175bd9a30c",
+                       "revisionTime": "2017-07-05T22:25:54Z"
+               },
                {
                        "checksumSHA1": "yRuyntx9a59ugMi5NlN4ST0XRcI=",
                        "path": "golang.org/x/net/internal/iana",
                        "revision": "31df19d69da8728e9220def59b80ee577c3e48bf",
                        "revisionTime": "2016-03-29T10:16:23+11:00"
                },
+               {
+                       "checksumSHA1": "txD8w9+dmFn4uG8BbqdZwXawT6E=",
+                       "path": "golang.org/x/net/publicsuffix",
+                       "revision": "054b33e6527139ad5b1ec2f6232c3b175bd9a30c",
+                       "revisionTime": "2017-07-05T22:25:54Z"
+               },
                {
                        "checksumSHA1": "85cxg2Rd2bSb8OLyjHqCSu2xbVY=",
                        "path": "golang.org/x/sys/unix",
                        "revision": "a646d33e2ee3172a661fc09bca23bb4889a41bc8",
                        "revisionTime": "2016-07-15T05:43:45Z"
                },
+               {
+                       "checksumSHA1": "ZQdHbB9VYCXwQ+9/CmZPhJv0+SM=",
+                       "path": "golang.org/x/text/internal/gen",
+                       "revision": "cfdf022e86b4ecfb646e1efbd7db175dd623a8fa",
+                       "revisionTime": "2017-06-28T09:51:01Z"
+               },
+               {
+                       "checksumSHA1": "47nwiUyVBY2RKoEGXmCSvusY4Js=",
+                       "path": "golang.org/x/text/internal/triegen",
+                       "revision": "cfdf022e86b4ecfb646e1efbd7db175dd623a8fa",
+                       "revisionTime": "2017-06-28T09:51:01Z"
+               },
+               {
+                       "checksumSHA1": "Yd5wMObzagIfCiKLpZbtBIrOUA4=",
+                       "path": "golang.org/x/text/internal/ucd",
+                       "revision": "cfdf022e86b4ecfb646e1efbd7db175dd623a8fa",
+                       "revisionTime": "2017-06-28T09:51:01Z"
+               },
+               {
+                       "checksumSHA1": "faFDXp++cLjLBlvsr+izZ+go1WU=",
+                       "path": "golang.org/x/text/secure/bidirule",
+                       "revision": "cfdf022e86b4ecfb646e1efbd7db175dd623a8fa",
+                       "revisionTime": "2017-06-28T09:51:01Z"
+               },
+               {
+                       "checksumSHA1": "ziMb9+ANGRJSSIuxYdRbA+cDRBQ=",
+                       "path": "golang.org/x/text/transform",
+                       "revision": "cfdf022e86b4ecfb646e1efbd7db175dd623a8fa",
+                       "revisionTime": "2017-06-28T09:51:01Z"
+               },
+               {
+                       "checksumSHA1": "KG+XZAbxdkpBm3Fa3bJ3Ylq8CKI=",
+                       "path": "golang.org/x/text/unicode/bidi",
+                       "revision": "cfdf022e86b4ecfb646e1efbd7db175dd623a8fa",
+                       "revisionTime": "2017-06-28T09:51:01Z"
+               },
+               {
+                       "checksumSHA1": "u67CNB7snnIRQfOV+pE1mwCDkNc=",
+                       "path": "golang.org/x/text/unicode/cldr",
+                       "revision": "cfdf022e86b4ecfb646e1efbd7db175dd623a8fa",
+                       "revisionTime": "2017-06-28T09:51:01Z"
+               },
+               {
+                       "checksumSHA1": "Anof4bt0AU+Sa3R8Rq0KBnlpbaQ=",
+                       "path": "golang.org/x/text/unicode/norm",
+                       "revision": "cfdf022e86b4ecfb646e1efbd7db175dd623a8fa",
+                       "revisionTime": "2017-06-28T09:51:01Z"
+               },
+               {
+                       "checksumSHA1": "5R2IZ5umPfkD5QKt3pwrbIgmrDk=",
+                       "path": "golang.org/x/text/unicode/rangetable",
+                       "revision": "cfdf022e86b4ecfb646e1efbd7db175dd623a8fa",
+                       "revisionTime": "2017-06-28T09:51:01Z"
+               },
                {
                        "checksumSHA1": "+OgOXBoiQ+X+C2dsAeiOHwBIEH0=",
                        "path": "gopkg.in/yaml.v2",