diff --git a/cmd/strelaypoolsrv/Godeps/Godeps.json b/cmd/strelaypoolsrv/Godeps/Godeps.json
deleted file mode 100644
index e7bc322d..00000000
--- a/cmd/strelaypoolsrv/Godeps/Godeps.json
+++ /dev/null
@@ -1,95 +0,0 @@
-{
- "ImportPath": "github.com/syncthing/relaypoolsrv",
- "GoVersion": "go1.5.1",
- "Packages": [
- "."
- ],
- "Deps": [
- {
- "ImportPath": "github.com/bkaradzic/go-lz4",
- "Rev": "74ddf82598bc4745b965729e9c6a463bedd33049"
- },
- {
- "ImportPath": "github.com/calmh/du",
- "Rev": "3c0690cca16228b97741327b1b6781397afbdb24"
- },
- {
- "ImportPath": "github.com/calmh/luhn",
- "Rev": "0c8388ff95fa92d4094011e5a04fc99dea3d1632"
- },
- {
- "ImportPath": "github.com/calmh/xdr",
- "Rev": "9eb3e1a622d9364deb39c831f7e5f164393d7e37"
- },
- {
- "ImportPath": "github.com/golang/groupcache/lru",
- "Rev": "604ed5785183e59ae2789449d89e73f3a2a77987"
- },
- {
- "ImportPath": "github.com/juju/ratelimit",
- "Rev": "772f5c38e468398c4511514f4f6aa9a4185bc0a0"
- },
- {
- "ImportPath": "github.com/oschwald/geoip2-golang",
- "Comment": "v0.1.0-28-gfe8132a",
- "Rev": "fe8132a35233b371398441ab4c5655ae1244564a"
- },
- {
- "ImportPath": "github.com/oschwald/maxminddb-golang",
- "Comment": "v0.2.0-41-gbfd1341",
- "Rev": "bfd134128faa57c37ef41fff5fb1a9ca94450a9b"
- },
- {
- "ImportPath": "github.com/syncthing/syncthing/lib/dialer",
- "Comment": "v0.12.6-6-g38e9b92",
- "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677"
- },
- {
- "ImportPath": "github.com/syncthing/syncthing/lib/logger",
- "Comment": "v0.12.6-6-g38e9b92",
- "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677"
- },
- {
- "ImportPath": "github.com/syncthing/syncthing/lib/osutil",
- "Comment": "v0.12.6-6-g38e9b92",
- "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677"
- },
- {
- "ImportPath": "github.com/syncthing/syncthing/lib/protocol",
- "Comment": "v0.12.6-6-g38e9b92",
- "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677"
- },
- {
- "ImportPath": "github.com/syncthing/syncthing/lib/relay/client",
- "Comment": "v0.12.6-6-g38e9b92",
- "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677"
- },
- {
- "ImportPath": "github.com/syncthing/syncthing/lib/relay/protocol",
- "Comment": "v0.12.6-6-g38e9b92",
- "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677"
- },
- {
- "ImportPath": "github.com/syncthing/syncthing/lib/sync",
- "Comment": "v0.12.6-6-g38e9b92",
- "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677"
- },
- {
- "ImportPath": "github.com/syncthing/syncthing/lib/tlsutil",
- "Comment": "v0.12.6-6-g38e9b92",
- "Rev": "38e9b92c42d827292cdddada39d7ddde646e1677"
- },
- {
- "ImportPath": "golang.org/x/net/proxy",
- "Rev": "042ba42fa6633b34205efc66ba5719cd3afd8d38"
- },
- {
- "ImportPath": "golang.org/x/text/transform",
- "Rev": "5eb8d4684c4796dd36c74f6452f2c0fa6c79597e"
- },
- {
- "ImportPath": "golang.org/x/text/unicode/norm",
- "Rev": "5eb8d4684c4796dd36c74f6452f2c0fa6c79597e"
- }
- ]
-}
diff --git a/cmd/strelaypoolsrv/Godeps/Readme b/cmd/strelaypoolsrv/Godeps/Readme
deleted file mode 100644
index 4cdaa53d..00000000
--- a/cmd/strelaypoolsrv/Godeps/Readme
+++ /dev/null
@@ -1,5 +0,0 @@
-This directory tree is generated automatically by godep.
-
-Please do not edit.
-
-See https://github.com/tools/godep for more information.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/.gitignore b/cmd/strelaypoolsrv/Godeps/_workspace/.gitignore
deleted file mode 100644
index f037d684..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/pkg
-/bin
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.gitignore b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.gitignore
deleted file mode 100644
index be64db61..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/lz4-example/lz4-example
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.travis.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.travis.yml
deleted file mode 100644
index d5870798..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/.travis.yml
+++ /dev/null
@@ -1,9 +0,0 @@
-language: go
-
-go:
- - 1.1
- - 1.2
- - 1.3
- - 1.4
- - 1.5
- - tip
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/LICENSE
deleted file mode 100644
index 0545977b..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-Copyright 2011-2012 Branimir Karadzic. All rights reserved.
-Copyright 2013 Damian Gryski. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. 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.
-
-THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``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 COPYRIGHT HOLDER 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/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/README.md
deleted file mode 100644
index ef3fe1e1..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/README.md
+++ /dev/null
@@ -1,71 +0,0 @@
-go-lz4
-======
-
-go-lz4 is port of LZ4 lossless compression algorithm to Go. The original C code
-is located at:
-
-https://github.com/Cyan4973/lz4
-
-Status
-------
-[](http://travis-ci.org/bkaradzic/go-lz4)
-[](https://godoc.org/github.com/bkaradzic/go-lz4)
-
-Usage
------
-
- go get github.com/bkaradzic/go-lz4
-
- import "github.com/bkaradzic/go-lz4"
-
-The package name is `lz4`
-
-Notes
------
-
-* go-lz4 saves a uint32 with the original uncompressed length at the beginning
- of the encoded buffer. They may get in the way of interoperability with
- other implementations.
-
-Contributors
-------------
-
-Damian Gryski ([@dgryski](https://github.com/dgryski))
-Dustin Sallings ([@dustin](https://github.com/dustin))
-
-Contact
--------
-
-[@bkaradzic](https://twitter.com/bkaradzic)
-http://www.stuckingeometry.com
-
-Project page
-https://github.com/bkaradzic/go-lz4
-
-License
--------
-
-Copyright 2011-2012 Branimir Karadzic. All rights reserved.
-Copyright 2013 Damian Gryski. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without modification,
-are permitted provided that the following conditions are met:
-
- 1. Redistributions of source code must retain the above copyright notice, this
- list of conditions and the following disclaimer.
-
- 2. 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.
-
-THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``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 COPYRIGHT HOLDER 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/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzz.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzz.go
deleted file mode 100644
index e4989de9..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzz.go
+++ /dev/null
@@ -1,23 +0,0 @@
-// +build gofuzz
-
-package lz4
-
-import "encoding/binary"
-
-func Fuzz(data []byte) int {
-
- if len(data) < 4 {
- return 0
- }
-
- ln := binary.LittleEndian.Uint32(data)
- if ln > (1 << 21) {
- return 0
- }
-
- if _, err := Decode(nil, data); err != nil {
- return 0
- }
-
- return 1
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzzer/main.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzzer/main.go
deleted file mode 100644
index 6c8ee575..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/fuzzer/main.go
+++ /dev/null
@@ -1,74 +0,0 @@
-package main
-
-import (
- "math/rand"
-
- "github.com/bkaradzic/go-lz4"
-
- // lz4's API matches snappy's, so we can easily see how it performs
- // lz4 "code.google.com/p/snappy-go/snappy"
-)
-
-var input = `
-ADVENTURE I. A SCANDAL IN BOHEMIA
-
-I.
-
-To Sherlock Holmes she is always THE woman. I have seldom heard
-him mention her under any other name. In his eyes she eclipses
-and predominates the whole of her sex. It was not that he felt
-any emotion akin to love for Irene Adler. All emotions, and that
-one particularly, were abhorrent to his cold, precise but
-admirably balanced mind. He was, I take it, the most perfect
-reasoning and observing machine that the world has seen, but as a
-lover he would have placed himself in a false position. He never
-spoke of the softer passions, save with a gibe and a sneer. They
-were admirable things for the observer--excellent for drawing the
-veil from men's motives and actions. But for the trained reasoner
-to admit such intrusions into his own delicate and finely
-adjusted temperament was to introduce a distracting factor which
-might throw a doubt upon all his mental results. Grit in a
-sensitive instrument, or a crack in one of his own high-power
-lenses, would not be more disturbing than a strong emotion in a
-nature such as his. And yet there was but one woman to him, and
-that woman was the late Irene Adler, of dubious and questionable
-memory.
-
-I had seen little of Holmes lately. My marriage had drifted us
-away from each other. My own complete happiness, and the
-home-centred interests which rise up around the man who first
-finds himself master of his own establishment, were sufficient to
-absorb all my attention, while Holmes, who loathed every form of
-society with his whole Bohemian soul, remained in our lodgings in
-Baker Street, buried among his old books, and alternating from
-week to week between cocaine and ambition, the drowsiness of the
-drug, and the fierce energy of his own keen nature. He was still,
-as ever, deeply attracted by the study of crime, and occupied his
-immense faculties and extraordinary powers of observation in
-following out those clues, and clearing up those mysteries which
-had been abandoned as hopeless by the official police. From time
-to time I heard some vague account of his doings: of his summons
-to Odessa in the case of the Trepoff murder, of his clearing up
-of the singular tragedy of the Atkinson brothers at Trincomalee,
-and finally of the mission which he had accomplished so
-delicately and successfully for the reigning family of Holland.
-Beyond these signs of his activity, however, which I merely
-shared with all the readers of the daily press, I knew little of
-my former friend and companion.
-`
-
-func main() {
-
- compressed, _ := lz4.Encode(nil, []byte(input))
-
- modified := make([]byte, len(compressed))
-
- for {
- copy(modified, compressed)
- for i := 0; i < 100; i++ {
- modified[rand.Intn(len(compressed)-4)+4] = byte(rand.Intn(256))
- }
- lz4.Decode(nil, modified)
- }
-
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/lz4-example/main.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/lz4-example/main.go
deleted file mode 100644
index ae457c86..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/lz4-example/main.go
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright 2011 Branimir Karadzic. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``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 COPYRIGHT HOLDER 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.
- */
-
-package main
-
-import (
- "flag"
- "fmt"
- "io/ioutil"
- "log"
- "os"
- "runtime/pprof"
-
- lz4 "github.com/bkaradzic/go-lz4"
-)
-
-var (
- decompress = flag.Bool("d", false, "decompress")
-)
-
-func main() {
-
- var optCPUProfile = flag.String("cpuprofile", "", "profile")
- flag.Parse()
-
- if *optCPUProfile != "" {
- f, err := os.Create(*optCPUProfile)
- if err != nil {
- log.Fatal(err)
- }
- pprof.StartCPUProfile(f)
- defer pprof.StopCPUProfile()
- }
-
- args := flag.Args()
-
- var data []byte
-
- if len(args) < 2 {
- fmt.Print("Usage: lz4 [-d] \n")
- os.Exit(1)
- }
-
- input, err := os.OpenFile(args[0], os.O_RDONLY, 0644)
- if err != nil {
- fmt.Printf("Failed to open input file %s\n", args[0])
- os.Exit(1)
- }
- defer input.Close()
-
- if *decompress {
- data, _ = ioutil.ReadAll(input)
- data, err = lz4.Decode(nil, data)
- if err != nil {
- fmt.Println("Failed to decode:", err)
- return
- }
- } else {
- data, _ = ioutil.ReadAll(input)
- data, err = lz4.Encode(nil, data)
- if err != nil {
- fmt.Println("Failed to encode:", err)
- return
- }
- }
-
- err = ioutil.WriteFile(args[1], data, 0644)
- if err != nil {
- fmt.Printf("Failed to open output file %s\n", args[1])
- os.Exit(1)
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/reader.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/reader.go
deleted file mode 100644
index a2b6535f..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/reader.go
+++ /dev/null
@@ -1,199 +0,0 @@
-/*
- * Copyright 2011-2012 Branimir Karadzic. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``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 COPYRIGHT HOLDER 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.
- */
-
-package lz4
-
-import (
- "encoding/binary"
- "errors"
- "io"
-)
-
-var (
- // ErrCorrupt indicates the input was corrupt
- ErrCorrupt = errors.New("corrupt input")
-)
-
-const (
- mlBits = 4
- mlMask = (1 << mlBits) - 1
- runBits = 8 - mlBits
- runMask = (1 << runBits) - 1
-)
-
-type decoder struct {
- src []byte
- dst []byte
- spos uint32
- dpos uint32
- ref uint32
-}
-
-func (d *decoder) readByte() (uint8, error) {
- if int(d.spos) == len(d.src) {
- return 0, io.EOF
- }
- b := d.src[d.spos]
- d.spos++
- return b, nil
-}
-
-func (d *decoder) getLen() (uint32, error) {
-
- length := uint32(0)
- ln, err := d.readByte()
- if err != nil {
- return 0, ErrCorrupt
- }
- for ln == 255 {
- length += 255
- ln, err = d.readByte()
- if err != nil {
- return 0, ErrCorrupt
- }
- }
- length += uint32(ln)
-
- return length, nil
-}
-
-func (d *decoder) cp(length, decr uint32) {
-
- if int(d.ref+length) < int(d.dpos) {
- copy(d.dst[d.dpos:], d.dst[d.ref:d.ref+length])
- } else {
- for ii := uint32(0); ii < length; ii++ {
- d.dst[d.dpos+ii] = d.dst[d.ref+ii]
- }
- }
- d.dpos += length
- d.ref += length - decr
-}
-
-func (d *decoder) finish(err error) error {
- if err == io.EOF {
- return nil
- }
-
- return err
-}
-
-// Decode returns the decoded form of src. The returned slice may be a
-// subslice of dst if it was large enough to hold the entire decoded block.
-func Decode(dst, src []byte) ([]byte, error) {
-
- if len(src) < 4 {
- return nil, ErrCorrupt
- }
-
- uncompressedLen := binary.LittleEndian.Uint32(src)
-
- if uncompressedLen == 0 {
- return nil, nil
- }
-
- if uncompressedLen > MaxInputSize {
- return nil, ErrTooLarge
- }
-
- if dst == nil || len(dst) < int(uncompressedLen) {
- dst = make([]byte, uncompressedLen)
- }
-
- d := decoder{src: src, dst: dst[:uncompressedLen], spos: 4}
-
- decr := []uint32{0, 3, 2, 3}
-
- for {
- code, err := d.readByte()
- if err != nil {
- return d.dst, d.finish(err)
- }
-
- length := uint32(code >> mlBits)
- if length == runMask {
- ln, err := d.getLen()
- if err != nil {
- return nil, ErrCorrupt
- }
- length += ln
- }
-
- if int(d.spos+length) > len(d.src) || int(d.dpos+length) > len(d.dst) {
- return nil, ErrCorrupt
- }
-
- for ii := uint32(0); ii < length; ii++ {
- d.dst[d.dpos+ii] = d.src[d.spos+ii]
- }
-
- d.spos += length
- d.dpos += length
-
- if int(d.spos) == len(d.src) {
- return d.dst, nil
- }
-
- if int(d.spos+2) >= len(d.src) {
- return nil, ErrCorrupt
- }
-
- back := uint32(d.src[d.spos]) | uint32(d.src[d.spos+1])<<8
-
- if back > d.dpos {
- return nil, ErrCorrupt
- }
-
- d.spos += 2
- d.ref = d.dpos - back
-
- length = uint32(code & mlMask)
- if length == mlMask {
- ln, err := d.getLen()
- if err != nil {
- return nil, ErrCorrupt
- }
- length += ln
- }
-
- literal := d.dpos - d.ref
-
- if literal < 4 {
- if int(d.dpos+4) > len(d.dst) {
- return nil, ErrCorrupt
- }
-
- d.cp(4, decr[literal])
- } else {
- length += 4
- }
-
- if d.dpos+length > uncompressedLen {
- return nil, ErrCorrupt
- }
-
- d.cp(length, 0)
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/writer.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/writer.go
deleted file mode 100644
index 2bf84da5..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/bkaradzic/go-lz4/writer.go
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
- * Copyright 2011-2012 Branimir Karadzic. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without modification,
- * are permitted provided that the following conditions are met:
- *
- * 1. Redistributions of source code must retain the above copyright notice, this
- * list of conditions and the following disclaimer.
- *
- * 2. 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.
- *
- * THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER ``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 COPYRIGHT HOLDER 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.
- */
-
-package lz4
-
-import (
- "encoding/binary"
- "errors"
-)
-
-const (
- minMatch = 4
- hashLog = 17
- hashTableSize = 1 << hashLog
- hashShift = (minMatch * 8) - hashLog
- incompressible uint32 = 128
- uninitHash = 0x88888888
-
- // MaxInputSize is the largest buffer than can be compressed in a single block
- MaxInputSize = 0x7E000000
-)
-
-var (
- // ErrTooLarge indicates the input buffer was too large
- ErrTooLarge = errors.New("input too large")
-)
-
-type encoder struct {
- src []byte
- dst []byte
- hashTable []uint32
- pos uint32
- anchor uint32
- dpos uint32
-}
-
-// CompressBound returns the maximum length of a lz4 block, given it's uncompressed length
-func CompressBound(isize int) int {
- if isize > MaxInputSize {
- return 0
- }
- return isize + ((isize) / 255) + 16 + 4
-}
-
-func (e *encoder) writeLiterals(length, mlLen, pos uint32) {
-
- ln := length
-
- var code byte
- if ln > runMask-1 {
- code = runMask
- } else {
- code = byte(ln)
- }
-
- if mlLen > mlMask-1 {
- e.dst[e.dpos] = (code << mlBits) + byte(mlMask)
- } else {
- e.dst[e.dpos] = (code << mlBits) + byte(mlLen)
- }
- e.dpos++
-
- if code == runMask {
- ln -= runMask
- for ; ln > 254; ln -= 255 {
- e.dst[e.dpos] = 255
- e.dpos++
- }
-
- e.dst[e.dpos] = byte(ln)
- e.dpos++
- }
-
- for ii := uint32(0); ii < length; ii++ {
- e.dst[e.dpos+ii] = e.src[pos+ii]
- }
-
- e.dpos += length
-}
-
-// Encode returns the encoded form of src. The returned array may be a
-// sub-slice of dst if it was large enough to hold the entire output.
-func Encode(dst, src []byte) ([]byte, error) {
-
- if len(src) >= MaxInputSize {
- return nil, ErrTooLarge
- }
-
- if n := CompressBound(len(src)); len(dst) < n {
- dst = make([]byte, n)
- }
-
- e := encoder{src: src, dst: dst, hashTable: make([]uint32, hashTableSize)}
-
- binary.LittleEndian.PutUint32(dst, uint32(len(src)))
- e.dpos = 4
-
- var (
- step uint32 = 1
- limit = incompressible
- )
-
- for {
- if int(e.pos)+12 >= len(e.src) {
- e.writeLiterals(uint32(len(e.src))-e.anchor, 0, e.anchor)
- return e.dst[:e.dpos], nil
- }
-
- sequence := uint32(e.src[e.pos+3])<<24 | uint32(e.src[e.pos+2])<<16 | uint32(e.src[e.pos+1])<<8 | uint32(e.src[e.pos+0])
-
- hash := (sequence * 2654435761) >> hashShift
- ref := e.hashTable[hash] + uninitHash
- e.hashTable[hash] = e.pos - uninitHash
-
- if ((e.pos-ref)>>16) != 0 || uint32(e.src[ref+3])<<24|uint32(e.src[ref+2])<<16|uint32(e.src[ref+1])<<8|uint32(e.src[ref+0]) != sequence {
- if e.pos-e.anchor > limit {
- limit <<= 1
- step += 1 + (step >> 2)
- }
- e.pos += step
- continue
- }
-
- if step > 1 {
- e.hashTable[hash] = ref - uninitHash
- e.pos -= step - 1
- step = 1
- continue
- }
- limit = incompressible
-
- ln := e.pos - e.anchor
- back := e.pos - ref
-
- anchor := e.anchor
-
- e.pos += minMatch
- ref += minMatch
- e.anchor = e.pos
-
- for int(e.pos) < len(e.src)-5 && e.src[e.pos] == e.src[ref] {
- e.pos++
- ref++
- }
-
- mlLen := e.pos - e.anchor
-
- e.writeLiterals(ln, mlLen, anchor)
- e.dst[e.dpos] = uint8(back)
- e.dst[e.dpos+1] = uint8(back >> 8)
- e.dpos += 2
-
- if mlLen > mlMask-1 {
- mlLen -= mlMask
- for mlLen > 254 {
- mlLen -= 255
-
- e.dst[e.dpos] = 255
- e.dpos++
- }
-
- e.dst[e.dpos] = byte(mlLen)
- e.dpos++
- }
-
- e.anchor = e.pos
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/LICENSE
deleted file mode 100644
index cf1ab25d..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/LICENSE
+++ /dev/null
@@ -1,24 +0,0 @@
-This is free and unencumbered software released into the public domain.
-
-Anyone is free to copy, modify, publish, use, compile, sell, or
-distribute this software, either in source code form or as a compiled
-binary, for any purpose, commercial or non-commercial, and by any
-means.
-
-In jurisdictions that recognize copyright laws, the author or authors
-of this software dedicate any and all copyright interest in the
-software to the public domain. We make this dedication for the benefit
-of the public at large and to the detriment of our heirs and
-successors. We intend this dedication to be an overt act of
-relinquishment in perpetuity of all present and future rights to this
-software under copyright law.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-For more information, please refer to
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/README.md
deleted file mode 100644
index 0cb5e5d7..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/README.md
+++ /dev/null
@@ -1,14 +0,0 @@
-du
-==
-
-Get total and available disk space on a given volume.
-
-Documentation
--------------
-
-http://godoc.org/github.com/calmh/du
-
-License
--------
-
-Public Domain
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/cmd/du/main.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/cmd/du/main.go
deleted file mode 100644
index 3b8b5446..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/cmd/du/main.go
+++ /dev/null
@@ -1,21 +0,0 @@
-package main
-
-import (
- "fmt"
- "log"
- "os"
-
- "github.com/calmh/du"
-)
-
-var KB = int64(1024)
-
-func main() {
- usage, err := du.Get(os.Args[1])
- if err != nil {
- log.Fatal(err)
- }
- fmt.Println("Free:", usage.FreeBytes/(KB*KB), "MiB")
- fmt.Println("Available:", usage.AvailBytes/(KB*KB), "MiB")
- fmt.Println("Size:", usage.TotalBytes/(KB*KB), "MiB")
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage.go
deleted file mode 100644
index f6bb975c..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage.go
+++ /dev/null
@@ -1,8 +0,0 @@
-package du
-
-// Usage holds information about total and available storage on a volume.
-type Usage struct {
- TotalBytes int64 // Size of volume
- FreeBytes int64 // Unused size
- AvailBytes int64 // Available to a non-privileged user
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_posix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_posix.go
deleted file mode 100644
index 6502bdb6..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_posix.go
+++ /dev/null
@@ -1,24 +0,0 @@
-// +build !windows,!netbsd,!openbsd,!solaris
-
-package du
-
-import (
- "path/filepath"
- "syscall"
-)
-
-// Get returns the Usage of a given path, or an error if usage data is
-// unavailable.
-func Get(path string) (Usage, error) {
- var stat syscall.Statfs_t
- err := syscall.Statfs(filepath.Clean(path), &stat)
- if err != nil {
- return Usage{}, err
- }
- u := Usage{
- FreeBytes: int64(stat.Bfree) * int64(stat.Bsize),
- TotalBytes: int64(stat.Blocks) * int64(stat.Bsize),
- AvailBytes: int64(stat.Bavail) * int64(stat.Bsize),
- }
- return u, nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_unsupported.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_unsupported.go
deleted file mode 100644
index 044e7748..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_unsupported.go
+++ /dev/null
@@ -1,13 +0,0 @@
-// +build netbsd openbsd solaris
-
-package du
-
-import "errors"
-
-var ErrUnsupported = errors.New("unsupported platform")
-
-// Get returns the Usage of a given path, or an error if usage data is
-// unavailable.
-func Get(path string) (Usage, error) {
- return Usage{}, ErrUnsupported
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_windows.go
deleted file mode 100644
index 6ed5e52e..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/du/diskusage_windows.go
+++ /dev/null
@@ -1,27 +0,0 @@
-package du
-
-import (
- "syscall"
- "unsafe"
-)
-
-// Get returns the Usage of a given path, or an error if usage data is
-// unavailable.
-func Get(path string) (Usage, error) {
- h := syscall.MustLoadDLL("kernel32.dll")
- c := h.MustFindProc("GetDiskFreeSpaceExW")
-
- var u Usage
-
- ret, _, err := c.Call(
- uintptr(unsafe.Pointer(syscall.StringToUTF16Ptr(path))),
- uintptr(unsafe.Pointer(&u.FreeBytes)),
- uintptr(unsafe.Pointer(&u.TotalBytes)),
- uintptr(unsafe.Pointer(&u.AvailBytes)))
-
- if ret == 0 {
- return u, err
- }
-
- return u, nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/LICENSE
deleted file mode 100644
index 0e07d0e1..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (C) 2014 Jakob Borg
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/luhn.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/luhn.go
deleted file mode 100644
index 8bcb0cd1..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/luhn/luhn.go
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (C) 2014 Jakob Borg
-
-// Package luhn generates and validates Luhn mod N check digits.
-package luhn
-
-import (
- "fmt"
- "strings"
-)
-
-// An alphabet is a string of N characters, representing the digits of a given
-// base N.
-type Alphabet string
-
-var (
- Base32 Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ234567"
-)
-
-// Generate returns a check digit for the string s, which should be composed
-// of characters from the Alphabet a.
-func (a Alphabet) Generate(s string) (rune, error) {
- if err := a.check(); err != nil {
- return 0, err
- }
-
- factor := 1
- sum := 0
- n := len(a)
-
- for i := range s {
- codepoint := strings.IndexByte(string(a), s[i])
- if codepoint == -1 {
- return 0, fmt.Errorf("Digit %q not valid in alphabet %q", s[i], a)
- }
- addend := factor * codepoint
- if factor == 2 {
- factor = 1
- } else {
- factor = 2
- }
- addend = (addend / n) + (addend % n)
- sum += addend
- }
- remainder := sum % n
- checkCodepoint := (n - remainder) % n
- return rune(a[checkCodepoint]), nil
-}
-
-// Validate returns true if the last character of the string s is correct, for
-// a string s composed of characters in the alphabet a.
-func (a Alphabet) Validate(s string) bool {
- t := s[:len(s)-1]
- c, err := a.Generate(t)
- if err != nil {
- return false
- }
- return rune(s[len(s)-1]) == c
-}
-
-// check returns an error if the given alphabet does not consist of unique characters
-func (a Alphabet) check() error {
- cm := make(map[byte]bool, len(a))
- for i := range a {
- if cm[a[i]] {
- return fmt.Errorf("Digit %q non-unique in alphabet %q", a[i], a)
- }
- cm[a[i]] = true
- }
- return nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.gitignore b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.gitignore
deleted file mode 100644
index 2d830686..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-coverage.out
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml
deleted file mode 100644
index 0fccc9e3..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/.travis.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-language: go
-go:
-- tip
-
-install:
-- export PATH=$PATH:$HOME/gopath/bin
-- go get golang.org/x/tools/cover
-- go get github.com/mattn/goveralls
-
-script:
-- ./generate.sh
-- go test -coverprofile=coverage.out
-
-after_success:
-- goveralls -coverprofile=coverage.out -service=travis-ci -package=calmh/xdr -repotoken="$COVERALLS_TOKEN"
-
-env:
- global:
- secure: SmgnrGfp2zLrA44ChRMpjPeujubt9veZ8Fx/OseMWECmacyV5N/TuDhzIbwo6QwV4xB0sBacoPzvxQbJRVjNKsPiSu72UbcQmQ7flN4Tf7nW09tSh1iW8NgrpBCq/3UYLoBu2iPBEBKm93IK0aGNAKs6oEkB0fU27iTVBwiTXOY=
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/LICENSE
deleted file mode 100644
index 8fdf7b0a..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (C) 2014 Jakob Borg.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to
-deal in the Software without restriction, including without limitation the
-rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-sell copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
-FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
-IN THE SOFTWARE.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/README.md
deleted file mode 100644
index f4ebae78..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-xdr
-===
-
-[](https://circleci.com/gh/calmh/xdr)
-[](https://coveralls.io/r/calmh/xdr?branch=master)
-[](http://godoc.org/github.com/calmh/xdr)
-[](http://opensource.org/licenses/MIT)
-
-This is an XDR encoding/decoding library. It uses code generation and
-not reflection. It supports the IPDR bastardized XDR format when built
-with `-tags ipdr`.
-
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/circle.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/circle.yml
deleted file mode 100644
index f61e26df..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/circle.yml
+++ /dev/null
@@ -1,3 +0,0 @@
-dependencies:
- post:
- - ./generate.sh
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go
deleted file mode 100644
index dbca9b7e..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go
+++ /dev/null
@@ -1,530 +0,0 @@
-// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code
-// is governed by an MIT-style license that can be found in the LICENSE file.
-
-package main
-
-import (
- "bytes"
- "flag"
- "fmt"
- "go/ast"
- "go/format"
- "go/parser"
- "go/token"
- "io"
- "log"
- "os"
- "regexp"
- "strconv"
- "strings"
- "text/template"
-)
-
-type fieldInfo struct {
- Name string
- IsBasic bool // handled by one the native Read/WriteUint64 etc functions
- IsSlice bool // field is a slice of FieldType
- FieldType string // original type of field, i.e. "int"
- Encoder string // the encoder name, i.e. "Uint64" for Read/WriteUint64
- Convert string // what to convert to when encoding, i.e. "uint64"
- Max int // max size for slices and strings
- Submax int // max size for strings inside slices
-}
-
-type structInfo struct {
- Name string
- Fields []fieldInfo
-}
-
-var headerTpl = template.Must(template.New("header").Parse(`// ************************************************************
-// This file is automatically generated by genxdr. Do not edit.
-// ************************************************************
-
-package {{.Package}}
-
-import (
- "bytes"
- "io"
-
- "github.com/calmh/xdr"
-)
-`))
-
-var encodeTpl = template.Must(template.New("encoder").Parse(`
-func (o {{.TypeName}}) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}//+n
-
-func (o {{.TypeName}}) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}//+n
-
-func (o {{.TypeName}}) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}//+n
-
-func (o {{.TypeName}}) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}//+n
-
-func (o {{.TypeName}}) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- {{range $fieldInfo := .Fields}}
- {{if not $fieldInfo.IsSlice}}
- {{if ne $fieldInfo.Convert ""}}
- xw.Write{{$fieldInfo.Encoder}}({{$fieldInfo.Convert}}(o.{{$fieldInfo.Name}}))
- {{else if $fieldInfo.IsBasic}}
- {{if ge $fieldInfo.Max 1}}
- if l := len(o.{{$fieldInfo.Name}}); l > {{$fieldInfo.Max}} {
- return xw.Tot(), xdr.ElementSizeExceeded("{{$fieldInfo.Name}}", l, {{$fieldInfo.Max}})
- }
- {{end}}
- xw.Write{{$fieldInfo.Encoder}}(o.{{$fieldInfo.Name}})
- {{else}}
- _, err := o.{{$fieldInfo.Name}}.EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- {{end}}
- {{else}}
- {{if ge $fieldInfo.Max 1}}
- if l := len(o.{{$fieldInfo.Name}}); l > {{$fieldInfo.Max}} {
- return xw.Tot(), xdr.ElementSizeExceeded("{{$fieldInfo.Name}}", l, {{$fieldInfo.Max}})
- }
- {{end}}
- xw.WriteUint32(uint32(len(o.{{$fieldInfo.Name}})))
- for i := range o.{{$fieldInfo.Name}} {
- {{if ne $fieldInfo.Convert ""}}
- xw.Write{{$fieldInfo.Encoder}}({{$fieldInfo.Convert}}(o.{{$fieldInfo.Name}}[i]))
- {{else if $fieldInfo.IsBasic}}
- xw.Write{{$fieldInfo.Encoder}}(o.{{$fieldInfo.Name}}[i])
- {{else}}
- _, err := o.{{$fieldInfo.Name}}[i].EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- {{end}}
- }
- {{end}}
- {{end}}
- return xw.Tot(), xw.Error()
-}//+n
-
-func (o *{{.TypeName}}) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}//+n
-
-func (o *{{.TypeName}}) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}//+n
-
-func (o *{{.TypeName}}) DecodeXDRFrom(xr *xdr.Reader) error {
- {{range $fieldInfo := .Fields}}
- {{if not $fieldInfo.IsSlice}}
- {{if ne $fieldInfo.Convert ""}}
- o.{{$fieldInfo.Name}} = {{$fieldInfo.FieldType}}(xr.Read{{$fieldInfo.Encoder}}())
- {{else if $fieldInfo.IsBasic}}
- {{if ge $fieldInfo.Max 1}}
- o.{{$fieldInfo.Name}} = xr.Read{{$fieldInfo.Encoder}}Max({{$fieldInfo.Max}})
- {{else}}
- o.{{$fieldInfo.Name}} = xr.Read{{$fieldInfo.Encoder}}()
- {{end}}
- {{else}}
- (&o.{{$fieldInfo.Name}}).DecodeXDRFrom(xr)
- {{end}}
- {{else}}
- _{{$fieldInfo.Name}}Size := int(xr.ReadUint32())
- if _{{$fieldInfo.Name}}Size < 0 {
- return xdr.ElementSizeExceeded("{{$fieldInfo.Name}}", _{{$fieldInfo.Name}}Size, {{$fieldInfo.Max}})
- }
- {{if ge $fieldInfo.Max 1}}
- if _{{$fieldInfo.Name}}Size > {{$fieldInfo.Max}} {
- return xdr.ElementSizeExceeded("{{$fieldInfo.Name}}", _{{$fieldInfo.Name}}Size, {{$fieldInfo.Max}})
- }
- {{end}}
- o.{{$fieldInfo.Name}} = make([]{{$fieldInfo.FieldType}}, _{{$fieldInfo.Name}}Size)
- for i := range o.{{$fieldInfo.Name}} {
- {{if ne $fieldInfo.Convert ""}}
- o.{{$fieldInfo.Name}}[i] = {{$fieldInfo.FieldType}}(xr.Read{{$fieldInfo.Encoder}}())
- {{else if $fieldInfo.IsBasic}}
- {{if ge $fieldInfo.Submax 1}}
- o.{{$fieldInfo.Name}}[i] = xr.Read{{$fieldInfo.Encoder}}Max({{$fieldInfo.Submax}})
- {{else}}
- o.{{$fieldInfo.Name}}[i] = xr.Read{{$fieldInfo.Encoder}}()
- {{end}}
- {{else}}
- (&o.{{$fieldInfo.Name}}[i]).DecodeXDRFrom(xr)
- {{end}}
- }
- {{end}}
- {{end}}
- return xr.Error()
-}`))
-
-var emptyTypeTpl = template.Must(template.New("encoder").Parse(`
-func (o {{.TypeName}}) EncodeXDR(w io.Writer) (int, error) {
- return 0, nil
-}//+n
-
-func (o {{.TypeName}}) MarshalXDR() ([]byte, error) {
- return nil, nil
-}//+n
-
-func (o {{.TypeName}}) MustMarshalXDR() []byte {
- return nil
-}//+n
-
-func (o {{.TypeName}}) AppendXDR(bs []byte) ([]byte, error) {
- return bs, nil
-}//+n
-
-func (o {{.TypeName}}) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- return xw.Tot(), xw.Error()
-}//+n
-
-func (o *{{.TypeName}}) DecodeXDR(r io.Reader) error {
- return nil
-}//+n
-
-func (o *{{.TypeName}}) UnmarshalXDR(bs []byte) error {
- return nil
-}//+n
-
-func (o *{{.TypeName}}) DecodeXDRFrom(xr *xdr.Reader) error {
- return xr.Error()
-}`))
-
-var maxRe = regexp.MustCompile(`(?:\Wmax:)(\d+)(?:\s*,\s*(\d+))?`)
-
-type typeSet struct {
- Type string
- Encoder string
-}
-
-var xdrEncoders = map[string]typeSet{
- "int8": typeSet{"uint8", "Uint8"},
- "uint8": typeSet{"", "Uint8"},
- "int16": typeSet{"uint16", "Uint16"},
- "uint16": typeSet{"", "Uint16"},
- "int32": typeSet{"uint32", "Uint32"},
- "uint32": typeSet{"", "Uint32"},
- "int64": typeSet{"uint64", "Uint64"},
- "uint64": typeSet{"", "Uint64"},
- "int": typeSet{"uint64", "Uint64"},
- "string": typeSet{"", "String"},
- "[]byte": typeSet{"", "Bytes"},
- "bool": typeSet{"", "Bool"},
-}
-
-func handleStruct(t *ast.StructType) []fieldInfo {
- var fs []fieldInfo
-
- for _, sf := range t.Fields.List {
- if len(sf.Names) == 0 {
- // We don't handle anonymous fields
- continue
- }
-
- fn := sf.Names[0].Name
- var max1, max2 int
- if sf.Comment != nil {
- c := sf.Comment.List[0].Text
- m := maxRe.FindStringSubmatch(c)
- if len(m) >= 2 {
- max1, _ = strconv.Atoi(m[1])
- }
- if len(m) >= 3 {
- max2, _ = strconv.Atoi(m[2])
- }
- if strings.Contains(c, "noencode") {
- continue
- }
- }
-
- var f fieldInfo
- switch ft := sf.Type.(type) {
- case *ast.Ident:
- tn := ft.Name
- if enc, ok := xdrEncoders[tn]; ok {
- f = fieldInfo{
- Name: fn,
- IsBasic: true,
- FieldType: tn,
- Encoder: enc.Encoder,
- Convert: enc.Type,
- Max: max1,
- Submax: max2,
- }
- } else {
- f = fieldInfo{
- Name: fn,
- IsBasic: false,
- FieldType: tn,
- Max: max1,
- Submax: max2,
- }
- }
-
- case *ast.ArrayType:
- if ft.Len != nil {
- // We don't handle arrays
- continue
- }
-
- tn := ft.Elt.(*ast.Ident).Name
- if enc, ok := xdrEncoders["[]"+tn]; ok {
- f = fieldInfo{
- Name: fn,
- IsBasic: true,
- FieldType: tn,
- Encoder: enc.Encoder,
- Convert: enc.Type,
- Max: max1,
- Submax: max2,
- }
- } else if enc, ok := xdrEncoders[tn]; ok {
- f = fieldInfo{
- Name: fn,
- IsBasic: true,
- IsSlice: true,
- FieldType: tn,
- Encoder: enc.Encoder,
- Convert: enc.Type,
- Max: max1,
- Submax: max2,
- }
- } else {
- f = fieldInfo{
- Name: fn,
- IsSlice: true,
- FieldType: tn,
- Max: max1,
- Submax: max2,
- }
- }
-
- case *ast.SelectorExpr:
- f = fieldInfo{
- Name: fn,
- FieldType: ft.Sel.Name,
- Max: max1,
- Submax: max2,
- }
- }
-
- fs = append(fs, f)
- }
-
- return fs
-}
-
-func generateCode(output io.Writer, s structInfo) {
- name := s.Name
- fs := s.Fields
-
- var buf bytes.Buffer
- var err error
- if len(fs) == 0 {
- // This is an empty type. We can create a quite simple codec for it.
- err = emptyTypeTpl.Execute(&buf, map[string]interface{}{"TypeName": name})
- } else {
- // Generate with the default template.
- err = encodeTpl.Execute(&buf, map[string]interface{}{"TypeName": name, "Fields": fs})
- }
- if err != nil {
- panic(err)
- }
-
- bs := regexp.MustCompile(`(\s*\n)+`).ReplaceAll(buf.Bytes(), []byte("\n"))
- bs = bytes.Replace(bs, []byte("//+n"), []byte("\n"), -1)
-
- bs, err = format.Source(bs)
- if err != nil {
- panic(err)
- }
- fmt.Fprintln(output, string(bs))
-}
-
-func uncamelize(s string) string {
- return regexp.MustCompile("[a-z][A-Z]").ReplaceAllStringFunc(s, func(camel string) string {
- return camel[:1] + " " + camel[1:]
- })
-}
-
-func generateDiagram(output io.Writer, s structInfo) {
- sn := s.Name
- fs := s.Fields
-
- fmt.Fprintln(output, sn+" Structure:")
-
- if len(fs) == 0 {
- fmt.Fprintln(output, "(contains no fields)")
- fmt.Fprintln(output)
- fmt.Fprintln(output)
- return
- }
-
- fmt.Fprintln(output)
- fmt.Fprintln(output, " 0 1 2 3")
- fmt.Fprintln(output, " 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1")
- line := "+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+"
- fmt.Fprintln(output, line)
-
- for _, f := range fs {
- tn := f.FieldType
- name := uncamelize(f.Name)
-
- if f.IsSlice {
- fmt.Fprintf(output, "| %s |\n", center("Number of "+name, 61))
- fmt.Fprintln(output, line)
- }
- switch tn {
- case "bool":
- fmt.Fprintf(output, "| %s |V|\n", center(name+" (V=0 or 1)", 59))
- fmt.Fprintln(output, line)
- case "int16", "uint16":
- fmt.Fprintf(output, "| %s | %s |\n", center("0x0000", 29), center(name, 29))
- fmt.Fprintln(output, line)
- case "int32", "uint32":
- fmt.Fprintf(output, "| %s |\n", center(name, 61))
- fmt.Fprintln(output, line)
- case "int64", "uint64":
- fmt.Fprintf(output, "| %-61s |\n", "")
- fmt.Fprintf(output, "+ %s +\n", center(name+" (64 bits)", 61))
- fmt.Fprintf(output, "| %-61s |\n", "")
- fmt.Fprintln(output, line)
- case "string", "byte": // XXX We assume slice of byte!
- fmt.Fprintf(output, "| %s |\n", center("Length of "+name, 61))
- fmt.Fprintln(output, line)
- fmt.Fprintf(output, "/ %61s /\n", "")
- fmt.Fprintf(output, "\\ %s \\\n", center(name+" (variable length)", 61))
- fmt.Fprintf(output, "/ %61s /\n", "")
- fmt.Fprintln(output, line)
- default:
- if f.IsSlice {
- tn = "Zero or more " + tn + " Structures"
- fmt.Fprintf(output, "/ %s /\n", center("", 61))
- fmt.Fprintf(output, "\\ %s \\\n", center(tn, 61))
- fmt.Fprintf(output, "/ %s /\n", center("", 61))
- } else {
- tn = tn + " Structure"
- fmt.Fprintf(output, "/ %s /\n", center("", 61))
- fmt.Fprintf(output, "\\ %s \\\n", center(tn, 61))
- fmt.Fprintf(output, "/ %s /\n", center("", 61))
- }
- fmt.Fprintln(output, line)
- }
- }
- fmt.Fprintln(output)
- fmt.Fprintln(output)
-}
-
-func generateXdr(output io.Writer, s structInfo) {
- sn := s.Name
- fs := s.Fields
-
- fmt.Fprintf(output, "struct %s {\n", sn)
-
- for _, f := range fs {
- tn := f.FieldType
- fn := f.Name
- suf := ""
- l := ""
- if f.Max > 0 {
- l = strconv.Itoa(f.Max)
- }
- if f.IsSlice {
- suf = "<" + l + ">"
- }
-
- switch tn {
- case "int16", "int32":
- fmt.Fprintf(output, "\tint %s%s;\n", fn, suf)
- case "uint16", "uint32":
- fmt.Fprintf(output, "\tunsigned int %s%s;\n", fn, suf)
- case "int64":
- fmt.Fprintf(output, "\thyper %s%s;\n", fn, suf)
- case "uint64":
- fmt.Fprintf(output, "\tunsigned hyper %s%s;\n", fn, suf)
- case "string":
- fmt.Fprintf(output, "\tstring %s<%s>;\n", fn, l)
- case "byte":
- fmt.Fprintf(output, "\topaque %s<%s>;\n", fn, l)
- default:
- fmt.Fprintf(output, "\t%s %s%s;\n", tn, fn, suf)
- }
- }
- fmt.Fprintln(output, "}")
- fmt.Fprintln(output)
-}
-
-func center(s string, w int) string {
- w -= len(s)
- l := w / 2
- r := l
- if l+r < w {
- r++
- }
- return strings.Repeat(" ", l) + s + strings.Repeat(" ", r)
-}
-
-func inspector(structs *[]structInfo) func(ast.Node) bool {
- return func(n ast.Node) bool {
- switch n := n.(type) {
- case *ast.TypeSpec:
- switch t := n.Type.(type) {
- case *ast.StructType:
- name := n.Name.Name
- fs := handleStruct(t)
- *structs = append(*structs, structInfo{name, fs})
- }
- return false
- default:
- return true
- }
- }
-}
-
-func main() {
- outputFile := flag.String("o", "", "Output file, blank for stdout")
- flag.Parse()
- fname := flag.Arg(0)
-
- fset := token.NewFileSet()
- f, err := parser.ParseFile(fset, fname, nil, parser.ParseComments)
- if err != nil {
- log.Fatal(err)
- }
-
- var structs []structInfo
- i := inspector(&structs)
- ast.Inspect(f, i)
-
- var output io.Writer = os.Stdout
- if *outputFile != "" {
- fd, err := os.Create(*outputFile)
- if err != nil {
- log.Fatal(err)
- }
- output = fd
- }
-
- headerTpl.Execute(output, map[string]string{"Package": f.Name.Name})
- for _, s := range structs {
- fmt.Fprintf(output, "\n/*\n\n")
- generateDiagram(output, s)
- generateXdr(output, s)
- fmt.Fprintf(output, "*/\n")
- generateCode(output, s)
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/debug.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/debug.go
deleted file mode 100644
index be3f092b..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/debug.go
+++ /dev/null
@@ -1,16 +0,0 @@
-// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code
-// is governed by an MIT-style license that can be found in the LICENSE file.
-
-package xdr
-
-import (
- "log"
- "os"
-)
-
-var (
- debug = len(os.Getenv("XDRTRACE")) > 0
- dl = log.New(os.Stdout, "xdr: ", log.Lshortfile|log.Ltime|log.Lmicroseconds)
-)
-
-const maxDebugBytes = 32
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/doc.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/doc.go
deleted file mode 100644
index 41b59bc1..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/doc.go
+++ /dev/null
@@ -1,5 +0,0 @@
-// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code
-// is governed by an MIT-style license that can be found in the LICENSE file.
-
-// Package xdr implements an XDR (RFC 4506) encoder/decoder.
-package xdr
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/generate.sh b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/generate.sh
deleted file mode 100644
index 2f348226..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/generate.sh
+++ /dev/null
@@ -1,4 +0,0 @@
-#!/bin/sh
-
-go run cmd/genxdr/main.go -- bench_test.go > bench_xdr_test.go
-go run cmd/genxdr/main.go -- encdec_test.go > encdec_xdr_test.go
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_ipdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_ipdr.go
deleted file mode 100644
index 813a9b61..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_ipdr.go
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code
-// is governed by an MIT-style license that can be found in the LICENSE file.
-
-// +build ipdr
-
-package xdr
-
-func pad(l int) int {
- return 0
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_xdr.go
deleted file mode 100644
index b1cac864..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/pad_xdr.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code
-// is governed by an MIT-style license that can be found in the LICENSE file.
-
-// +build !ipdr
-
-package xdr
-
-func pad(l int) int {
- d := l % 4
- if d == 0 {
- return 0
- }
- return 4 - d
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader.go
deleted file mode 100644
index feb3cd31..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader.go
+++ /dev/null
@@ -1,171 +0,0 @@
-// Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file).
-// All rights reserved. Use of this source code is governed by an MIT-style
-// license that can be found in the LICENSE file.
-
-package xdr
-
-import (
- "fmt"
- "io"
- "reflect"
- "unsafe"
-)
-
-type Reader struct {
- r io.Reader
- err error
- b [8]byte
-}
-
-func NewReader(r io.Reader) *Reader {
- return &Reader{
- r: r,
- }
-}
-
-func (r *Reader) ReadRaw(bs []byte) (int, error) {
- if r.err != nil {
- return 0, r.err
- }
-
- var n int
- n, r.err = io.ReadFull(r.r, bs)
- return n, r.err
-}
-
-func (r *Reader) ReadString() string {
- return r.ReadStringMax(0)
-}
-
-func (r *Reader) ReadStringMax(max int) string {
- buf := r.ReadBytesMaxInto(max, nil)
- bh := (*reflect.SliceHeader)(unsafe.Pointer(&buf))
- sh := reflect.StringHeader{
- Data: bh.Data,
- Len: bh.Len,
- }
- return *((*string)(unsafe.Pointer(&sh)))
-}
-
-func (r *Reader) ReadBytes() []byte {
- return r.ReadBytesInto(nil)
-}
-
-func (r *Reader) ReadBytesMax(max int) []byte {
- return r.ReadBytesMaxInto(max, nil)
-}
-
-func (r *Reader) ReadBytesInto(dst []byte) []byte {
- return r.ReadBytesMaxInto(0, dst)
-}
-
-func (r *Reader) ReadBytesMaxInto(max int, dst []byte) []byte {
- if r.err != nil {
- return nil
- }
-
- l := int(r.ReadUint32())
- if r.err != nil {
- return nil
- }
- if l < 0 || max > 0 && l > max {
- // l may be negative on 32 bit builds
- r.err = ElementSizeExceeded("bytes field", l, max)
- return nil
- }
-
- if fullLen := l + pad(l); fullLen > len(dst) {
- dst = make([]byte, fullLen)
- } else {
- dst = dst[:fullLen]
- }
-
- var n int
- n, r.err = io.ReadFull(r.r, dst)
- if r.err != nil {
- if debug {
- dl.Printf("rd bytes (%d): %v", len(dst), r.err)
- }
- return nil
- }
-
- if debug {
- if n > maxDebugBytes {
- dl.Printf("rd bytes (%d): %x...", len(dst), dst[:maxDebugBytes])
- } else {
- dl.Printf("rd bytes (%d): %x", len(dst), dst)
- }
- }
- return dst[:l]
-}
-
-func (r *Reader) ReadBool() bool {
- return r.ReadUint8() != 0
-}
-
-func (r *Reader) ReadUint32() uint32 {
- if r.err != nil {
- return 0
- }
-
- _, r.err = io.ReadFull(r.r, r.b[:4])
- if r.err != nil {
- if debug {
- dl.Printf("rd uint32: %v", r.err)
- }
- return 0
- }
-
- v := uint32(r.b[3]) | uint32(r.b[2])<<8 | uint32(r.b[1])<<16 | uint32(r.b[0])<<24
-
- if debug {
- dl.Printf("rd uint32=%d (0x%08x)", v, v)
- }
- return v
-}
-
-func (r *Reader) ReadUint64() uint64 {
- if r.err != nil {
- return 0
- }
-
- _, r.err = io.ReadFull(r.r, r.b[:8])
- if r.err != nil {
- if debug {
- dl.Printf("rd uint64: %v", r.err)
- }
- return 0
- }
-
- v := uint64(r.b[7]) | uint64(r.b[6])<<8 | uint64(r.b[5])<<16 | uint64(r.b[4])<<24 |
- uint64(r.b[3])<<32 | uint64(r.b[2])<<40 | uint64(r.b[1])<<48 | uint64(r.b[0])<<56
-
- if debug {
- dl.Printf("rd uint64=%d (0x%016x)", v, v)
- }
- return v
-}
-
-type XDRError struct {
- op string
- err error
-}
-
-func (e XDRError) Error() string {
- return "xdr " + e.op + ": " + e.err.Error()
-}
-
-func (e XDRError) IsEOF() bool {
- return e.err == io.EOF
-}
-
-func (r *Reader) Error() error {
- if r.err == nil {
- return nil
- }
- return XDRError{"read", r.err}
-}
-
-func ElementSizeExceeded(field string, size, limit int) error {
- return fmt.Errorf("%s exceeds size limit; %d > %d", field, size, limit)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_ipdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_ipdr.go
deleted file mode 100644
index 28e0b56a..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_ipdr.go
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file).
-// All rights reserved. Use of this source code is governed by an MIT-style
-// license that can be found in the LICENSE file.
-
-// +build ipdr
-
-package xdr
-
-import "io"
-
-func (r *Reader) ReadUint8() uint8 {
- if r.err != nil {
- return 0
- }
-
- _, r.err = io.ReadFull(r.r, r.b[:1])
- if r.err != nil {
- if debug {
- dl.Printf("rd uint8: %v", r.err)
- }
- return 0
- }
-
- if debug {
- dl.Printf("rd uint8=%d (0x%02x)", r.b[0], r.b[0])
- }
- return r.b[0]
-}
-
-func (r *Reader) ReadUint16() uint16 {
- if r.err != nil {
- return 0
- }
-
- _, r.err = io.ReadFull(r.r, r.b[:2])
- if r.err != nil {
- if debug {
- dl.Printf("rd uint16: %v", r.err)
- }
- return 0
- }
-
- v := uint16(r.b[1]) | uint16(r.b[0])<<8
-
- if debug {
- dl.Printf("rd uint16=%d (0x%04x)", v, v)
- }
- return v
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_xdr.go
deleted file mode 100644
index 4ac629a0..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/reader_xdr.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (C) 2014 Jakob Borg and Contributors (see the CONTRIBUTORS file).
-// All rights reserved. Use of this source code is governed by an MIT-style
-// license that can be found in the LICENSE file.
-
-// +build !ipdr
-
-package xdr
-
-func (r *Reader) ReadUint8() uint8 {
- return uint8(r.ReadUint32())
-}
-
-func (r *Reader) ReadUint16() uint16 {
- return uint16(r.ReadUint32())
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer.go
deleted file mode 100644
index d1ec47bc..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer.go
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code
-// is governed by an MIT-style license that can be found in the LICENSE file.
-
-package xdr
-
-import (
- "io"
- "reflect"
- "unsafe"
-)
-
-var padBytes = []byte{0, 0, 0}
-
-type Writer struct {
- w io.Writer
- tot int
- err error
- b [8]byte
-}
-
-type AppendWriter []byte
-
-func (w *AppendWriter) Write(bs []byte) (int, error) {
- *w = append(*w, bs...)
- return len(bs), nil
-}
-
-func NewWriter(w io.Writer) *Writer {
- return &Writer{
- w: w,
- }
-}
-
-func (w *Writer) WriteRaw(bs []byte) (int, error) {
- if w.err != nil {
- return 0, w.err
- }
-
- var n int
- n, w.err = w.w.Write(bs)
- return n, w.err
-}
-
-func (w *Writer) WriteString(s string) (int, error) {
- sh := *((*reflect.StringHeader)(unsafe.Pointer(&s)))
- bh := reflect.SliceHeader{
- Data: sh.Data,
- Len: sh.Len,
- Cap: sh.Len,
- }
- return w.WriteBytes(*(*[]byte)(unsafe.Pointer(&bh)))
-}
-
-func (w *Writer) WriteBytes(bs []byte) (int, error) {
- if w.err != nil {
- return 0, w.err
- }
-
- w.WriteUint32(uint32(len(bs)))
- if w.err != nil {
- return 0, w.err
- }
-
- if debug {
- if len(bs) > maxDebugBytes {
- dl.Printf("wr bytes (%d): %x...", len(bs), bs[:maxDebugBytes])
- } else {
- dl.Printf("wr bytes (%d): %x", len(bs), bs)
- }
- }
-
- var l, n int
- n, w.err = w.w.Write(bs)
- l += n
-
- if p := pad(len(bs)); w.err == nil && p > 0 {
- n, w.err = w.w.Write(padBytes[:p])
- l += n
- }
-
- w.tot += l
- return l, w.err
-}
-
-func (w *Writer) WriteBool(v bool) (int, error) {
- if v {
- return w.WriteUint8(1)
- } else {
- return w.WriteUint8(0)
- }
-}
-
-func (w *Writer) WriteUint32(v uint32) (int, error) {
- if w.err != nil {
- return 0, w.err
- }
-
- if debug {
- dl.Printf("wr uint32=%d", v)
- }
-
- w.b[0] = byte(v >> 24)
- w.b[1] = byte(v >> 16)
- w.b[2] = byte(v >> 8)
- w.b[3] = byte(v)
-
- var l int
- l, w.err = w.w.Write(w.b[:4])
- w.tot += l
- return l, w.err
-}
-
-func (w *Writer) WriteUint64(v uint64) (int, error) {
- if w.err != nil {
- return 0, w.err
- }
-
- if debug {
- dl.Printf("wr uint64=%d", v)
- }
-
- w.b[0] = byte(v >> 56)
- w.b[1] = byte(v >> 48)
- w.b[2] = byte(v >> 40)
- w.b[3] = byte(v >> 32)
- w.b[4] = byte(v >> 24)
- w.b[5] = byte(v >> 16)
- w.b[6] = byte(v >> 8)
- w.b[7] = byte(v)
-
- var l int
- l, w.err = w.w.Write(w.b[:8])
- w.tot += l
- return l, w.err
-}
-
-func (w *Writer) Tot() int {
- return w.tot
-}
-
-func (w *Writer) Error() error {
- if w.err == nil {
- return nil
- }
- return XDRError{"write", w.err}
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_ipdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_ipdr.go
deleted file mode 100644
index df803ae3..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_ipdr.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code
-// is governed by an MIT-style license that can be found in the LICENSE file.
-
-// +build ipdr
-
-package xdr
-
-func (w *Writer) WriteUint8(v uint8) (int, error) {
- if w.err != nil {
- return 0, w.err
- }
-
- if debug {
- dl.Printf("wr uint8=%d", v)
- }
-
- w.b[0] = byte(v)
-
- var l int
- l, w.err = w.w.Write(w.b[:1])
- w.tot += l
- return l, w.err
-}
-
-func (w *Writer) WriteUint16(v uint16) (int, error) {
- if w.err != nil {
- return 0, w.err
- }
-
- if debug {
- dl.Printf("wr uint8=%d", v)
- }
-
- w.b[0] = byte(v >> 8)
- w.b[1] = byte(v)
-
- var l int
- l, w.err = w.w.Write(w.b[:2])
- w.tot += l
- return l, w.err
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_xdr.go
deleted file mode 100644
index 190fd549..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/calmh/xdr/writer_xdr.go
+++ /dev/null
@@ -1,14 +0,0 @@
-// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code
-// is governed by an MIT-style license that can be found in the LICENSE file.
-
-// +build !ipdr
-
-package xdr
-
-func (w *Writer) WriteUint8(v uint8) (int, error) {
- return w.WriteUint32(uint32(v))
-}
-
-func (w *Writer) WriteUint16(v uint16) (int, error) {
- return w.WriteUint32(uint32(v))
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/golang/groupcache/lru/lru.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/golang/groupcache/lru/lru.go
deleted file mode 100644
index cdfe2991..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/golang/groupcache/lru/lru.go
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-Copyright 2013 Google Inc.
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-*/
-
-// Package lru implements an LRU cache.
-package lru
-
-import "container/list"
-
-// Cache is an LRU cache. It is not safe for concurrent access.
-type Cache struct {
- // MaxEntries is the maximum number of cache entries before
- // an item is evicted. Zero means no limit.
- MaxEntries int
-
- // OnEvicted optionally specificies a callback function to be
- // executed when an entry is purged from the cache.
- OnEvicted func(key Key, value interface{})
-
- ll *list.List
- cache map[interface{}]*list.Element
-}
-
-// A Key may be any value that is comparable. See http://golang.org/ref/spec#Comparison_operators
-type Key interface{}
-
-type entry struct {
- key Key
- value interface{}
-}
-
-// New creates a new Cache.
-// If maxEntries is zero, the cache has no limit and it's assumed
-// that eviction is done by the caller.
-func New(maxEntries int) *Cache {
- return &Cache{
- MaxEntries: maxEntries,
- ll: list.New(),
- cache: make(map[interface{}]*list.Element),
- }
-}
-
-// Add adds a value to the cache.
-func (c *Cache) Add(key Key, value interface{}) {
- if c.cache == nil {
- c.cache = make(map[interface{}]*list.Element)
- c.ll = list.New()
- }
- if ee, ok := c.cache[key]; ok {
- c.ll.MoveToFront(ee)
- ee.Value.(*entry).value = value
- return
- }
- ele := c.ll.PushFront(&entry{key, value})
- c.cache[key] = ele
- if c.MaxEntries != 0 && c.ll.Len() > c.MaxEntries {
- c.RemoveOldest()
- }
-}
-
-// Get looks up a key's value from the cache.
-func (c *Cache) Get(key Key) (value interface{}, ok bool) {
- if c.cache == nil {
- return
- }
- if ele, hit := c.cache[key]; hit {
- c.ll.MoveToFront(ele)
- return ele.Value.(*entry).value, true
- }
- return
-}
-
-// Remove removes the provided key from the cache.
-func (c *Cache) Remove(key Key) {
- if c.cache == nil {
- return
- }
- if ele, hit := c.cache[key]; hit {
- c.removeElement(ele)
- }
-}
-
-// RemoveOldest removes the oldest item from the cache.
-func (c *Cache) RemoveOldest() {
- if c.cache == nil {
- return
- }
- ele := c.ll.Back()
- if ele != nil {
- c.removeElement(ele)
- }
-}
-
-func (c *Cache) removeElement(e *list.Element) {
- c.ll.Remove(e)
- kv := e.Value.(*entry)
- delete(c.cache, kv.key)
- if c.OnEvicted != nil {
- c.OnEvicted(kv.key, kv.value)
- }
-}
-
-// Len returns the number of items in the cache.
-func (c *Cache) Len() int {
- if c.cache == nil {
- return 0
- }
- return c.ll.Len()
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/LICENSE
deleted file mode 100644
index ade9307b..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/LICENSE
+++ /dev/null
@@ -1,191 +0,0 @@
-All files in this repository are licensed as follows. If you contribute
-to this repository, it is assumed that you license your contribution
-under the same license unless you state otherwise.
-
-All files Copyright (C) 2015 Canonical Ltd. unless otherwise specified in the file.
-
-This software is licensed under the LGPLv3, included below.
-
-As a special exception to the GNU Lesser General Public License version 3
-("LGPL3"), the copyright holders of this Library give you permission to
-convey to a third party a Combined Work that links statically or dynamically
-to this Library without providing any Minimal Corresponding Source or
-Minimal Application Code as set out in 4d or providing the installation
-information set out in section 4e, provided that you comply with the other
-provisions of LGPL3 and provided that you meet, for the Application the
-terms and conditions of the license(s) which apply to the Application.
-
-Except as stated in this special exception, the provisions of LGPL3 will
-continue to comply in full to this Library. If you modify this Library, you
-may apply this exception to your version of this Library, but you are not
-obliged to do so. If you do not wish to do so, delete this exception
-statement from your version. This exception does not (and cannot) modify any
-license terms which apply to the Application, with which you must still
-comply.
-
-
- GNU LESSER GENERAL PUBLIC LICENSE
- Version 3, 29 June 2007
-
- Copyright (C) 2007 Free Software Foundation, Inc.
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
-
- This version of the GNU Lesser General Public License incorporates
-the terms and conditions of version 3 of the GNU General Public
-License, supplemented by the additional permissions listed below.
-
- 0. Additional Definitions.
-
- As used herein, "this License" refers to version 3 of the GNU Lesser
-General Public License, and the "GNU GPL" refers to version 3 of the GNU
-General Public License.
-
- "The Library" refers to a covered work governed by this License,
-other than an Application or a Combined Work as defined below.
-
- An "Application" is any work that makes use of an interface provided
-by the Library, but which is not otherwise based on the Library.
-Defining a subclass of a class defined by the Library is deemed a mode
-of using an interface provided by the Library.
-
- A "Combined Work" is a work produced by combining or linking an
-Application with the Library. The particular version of the Library
-with which the Combined Work was made is also called the "Linked
-Version".
-
- The "Minimal Corresponding Source" for a Combined Work means the
-Corresponding Source for the Combined Work, excluding any source code
-for portions of the Combined Work that, considered in isolation, are
-based on the Application, and not on the Linked Version.
-
- The "Corresponding Application Code" for a Combined Work means the
-object code and/or source code for the Application, including any data
-and utility programs needed for reproducing the Combined Work from the
-Application, but excluding the System Libraries of the Combined Work.
-
- 1. Exception to Section 3 of the GNU GPL.
-
- You may convey a covered work under sections 3 and 4 of this License
-without being bound by section 3 of the GNU GPL.
-
- 2. Conveying Modified Versions.
-
- If you modify a copy of the Library, and, in your modifications, a
-facility refers to a function or data to be supplied by an Application
-that uses the facility (other than as an argument passed when the
-facility is invoked), then you may convey a copy of the modified
-version:
-
- a) under this License, provided that you make a good faith effort to
- ensure that, in the event an Application does not supply the
- function or data, the facility still operates, and performs
- whatever part of its purpose remains meaningful, or
-
- b) under the GNU GPL, with none of the additional permissions of
- this License applicable to that copy.
-
- 3. Object Code Incorporating Material from Library Header Files.
-
- The object code form of an Application may incorporate material from
-a header file that is part of the Library. You may convey such object
-code under terms of your choice, provided that, if the incorporated
-material is not limited to numerical parameters, data structure
-layouts and accessors, or small macros, inline functions and templates
-(ten or fewer lines in length), you do both of the following:
-
- a) Give prominent notice with each copy of the object code that the
- Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the object code with a copy of the GNU GPL and this license
- document.
-
- 4. Combined Works.
-
- You may convey a Combined Work under terms of your choice that,
-taken together, effectively do not restrict modification of the
-portions of the Library contained in the Combined Work and reverse
-engineering for debugging such modifications, if you also do each of
-the following:
-
- a) Give prominent notice with each copy of the Combined Work that
- the Library is used in it and that the Library and its use are
- covered by this License.
-
- b) Accompany the Combined Work with a copy of the GNU GPL and this license
- document.
-
- c) For a Combined Work that displays copyright notices during
- execution, include the copyright notice for the Library among
- these notices, as well as a reference directing the user to the
- copies of the GNU GPL and this license document.
-
- d) Do one of the following:
-
- 0) Convey the Minimal Corresponding Source under the terms of this
- License, and the Corresponding Application Code in a form
- suitable for, and under terms that permit, the user to
- recombine or relink the Application with a modified version of
- the Linked Version to produce a modified Combined Work, in the
- manner specified by section 6 of the GNU GPL for conveying
- Corresponding Source.
-
- 1) Use a suitable shared library mechanism for linking with the
- Library. A suitable mechanism is one that (a) uses at run time
- a copy of the Library already present on the user's computer
- system, and (b) will operate properly with a modified version
- of the Library that is interface-compatible with the Linked
- Version.
-
- e) Provide Installation Information, but only if you would otherwise
- be required to provide such information under section 6 of the
- GNU GPL, and only to the extent that such information is
- necessary to install and execute a modified version of the
- Combined Work produced by recombining or relinking the
- Application with a modified version of the Linked Version. (If
- you use option 4d0, the Installation Information must accompany
- the Minimal Corresponding Source and Corresponding Application
- Code. If you use option 4d1, you must provide the Installation
- Information in the manner specified by section 6 of the GNU GPL
- for conveying Corresponding Source.)
-
- 5. Combined Libraries.
-
- You may place library facilities that are a work based on the
-Library side by side in a single library together with other library
-facilities that are not Applications and are not covered by this
-License, and convey such a combined library under terms of your
-choice, if you do both of the following:
-
- a) Accompany the combined library with a copy of the same work based
- on the Library, uncombined with any other library facilities,
- conveyed under the terms of this License.
-
- b) Give prominent notice with the combined library that part of it
- is a work based on the Library, and explaining where to find the
- accompanying uncombined form of the same work.
-
- 6. Revised Versions of the GNU Lesser General Public License.
-
- The Free Software Foundation may publish revised and/or new versions
-of the GNU Lesser General Public License from time to time. Such new
-versions will be similar in spirit to the present version, but may
-differ in detail to address new problems or concerns.
-
- Each version is given a distinguishing version number. If the
-Library as you received it specifies that a certain numbered version
-of the GNU Lesser General Public License "or any later version"
-applies to it, you have the option of following the terms and
-conditions either of that published version or of any later version
-published by the Free Software Foundation. If the Library as you
-received it does not specify a version number of the GNU Lesser
-General Public License, you may choose any version of the GNU Lesser
-General Public License ever published by the Free Software Foundation.
-
- If the Library as you received it specifies that a proxy can decide
-whether future versions of the GNU Lesser General Public License shall
-apply, that proxy's public statement of acceptance of any version is
-permanent authorization for you to choose that version for the
-Library.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/README.md
deleted file mode 100644
index a0fdfe2b..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/README.md
+++ /dev/null
@@ -1,117 +0,0 @@
-# ratelimit
---
- import "github.com/juju/ratelimit"
-
-The ratelimit package provides an efficient token bucket implementation. See
-http://en.wikipedia.org/wiki/Token_bucket.
-
-## Usage
-
-#### func Reader
-
-```go
-func Reader(r io.Reader, bucket *Bucket) io.Reader
-```
-Reader returns a reader that is rate limited by the given token bucket. Each
-token in the bucket represents one byte.
-
-#### func Writer
-
-```go
-func Writer(w io.Writer, bucket *Bucket) io.Writer
-```
-Writer returns a writer that is rate limited by the given token bucket. Each
-token in the bucket represents one byte.
-
-#### type Bucket
-
-```go
-type Bucket struct {
-}
-```
-
-Bucket represents a token bucket that fills at a predetermined rate. Methods on
-Bucket may be called concurrently.
-
-#### func NewBucket
-
-```go
-func NewBucket(fillInterval time.Duration, capacity int64) *Bucket
-```
-NewBucket returns a new token bucket that fills at the rate of one token every
-fillInterval, up to the given maximum capacity. Both arguments must be positive.
-The bucket is initially full.
-
-#### func NewBucketWithQuantum
-
-```go
-func NewBucketWithQuantum(fillInterval time.Duration, capacity, quantum int64) *Bucket
-```
-NewBucketWithQuantum is similar to NewBucket, but allows the specification of
-the quantum size - quantum tokens are added every fillInterval.
-
-#### func NewBucketWithRate
-
-```go
-func NewBucketWithRate(rate float64, capacity int64) *Bucket
-```
-NewBucketWithRate returns a token bucket that fills the bucket at the rate of
-rate tokens per second up to the given maximum capacity. Because of limited
-clock resolution, at high rates, the actual rate may be up to 1% different from
-the specified rate.
-
-#### func (*Bucket) Rate
-
-```go
-func (tb *Bucket) Rate() float64
-```
-Rate returns the fill rate of the bucket, in tokens per second.
-
-#### func (*Bucket) Take
-
-```go
-func (tb *Bucket) Take(count int64) time.Duration
-```
-Take takes count tokens from the bucket without blocking. It returns the time
-that the caller should wait until the tokens are actually available.
-
-Note that if the request is irrevocable - there is no way to return tokens to
-the bucket once this method commits us to taking them.
-
-#### func (*Bucket) TakeAvailable
-
-```go
-func (tb *Bucket) TakeAvailable(count int64) int64
-```
-TakeAvailable takes up to count immediately available tokens from the bucket. It
-returns the number of tokens removed, or zero if there are no available tokens.
-It does not block.
-
-#### func (*Bucket) TakeMaxDuration
-
-```go
-func (tb *Bucket) TakeMaxDuration(count int64, maxWait time.Duration) (time.Duration, bool)
-```
-TakeMaxDuration is like Take, except that it will only take tokens from the
-bucket if the wait time for the tokens is no greater than maxWait.
-
-If it would take longer than maxWait for the tokens to become available, it does
-nothing and reports false, otherwise it returns the time that the caller should
-wait until the tokens are actually available, and reports true.
-
-#### func (*Bucket) Wait
-
-```go
-func (tb *Bucket) Wait(count int64)
-```
-Wait takes count tokens from the bucket, waiting until they are available.
-
-#### func (*Bucket) WaitMaxDuration
-
-```go
-func (tb *Bucket) WaitMaxDuration(count int64, maxWait time.Duration) bool
-```
-WaitMaxDuration is like Wait except that it will only take tokens from the
-bucket if it needs to wait for no greater than maxWait. It reports whether any
-tokens have been removed from the bucket If no tokens have been removed, it
-returns immediately.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/ratelimit.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/ratelimit.go
deleted file mode 100644
index a36ffc74..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/ratelimit.go
+++ /dev/null
@@ -1,221 +0,0 @@
-// Copyright 2014 Canonical Ltd.
-// Licensed under the LGPLv3 with static-linking exception.
-// See LICENCE file for details.
-
-// The ratelimit package provides an efficient token bucket implementation
-// that can be used to limit the rate of arbitrary things.
-// See http://en.wikipedia.org/wiki/Token_bucket.
-package ratelimit
-
-import (
- "strconv"
- "sync"
- "time"
- "math"
-)
-
-// Bucket represents a token bucket that fills at a predetermined rate.
-// Methods on Bucket may be called concurrently.
-type Bucket struct {
- startTime time.Time
- capacity int64
- quantum int64
- fillInterval time.Duration
-
- // The mutex guards the fields following it.
- mu sync.Mutex
-
- // avail holds the number of available tokens
- // in the bucket, as of availTick ticks from startTime.
- // It will be negative when there are consumers
- // waiting for tokens.
- avail int64
- availTick int64
-}
-
-// NewBucket returns a new token bucket that fills at the
-// rate of one token every fillInterval, up to the given
-// maximum capacity. Both arguments must be
-// positive. The bucket is initially full.
-func NewBucket(fillInterval time.Duration, capacity int64) *Bucket {
- return NewBucketWithQuantum(fillInterval, capacity, 1)
-}
-
-// rateMargin specifes the allowed variance of actual
-// rate from specified rate. 1% seems reasonable.
-const rateMargin = 0.01
-
-// NewBucketWithRate returns a token bucket that fills the bucket
-// at the rate of rate tokens per second up to the given
-// maximum capacity. Because of limited clock resolution,
-// at high rates, the actual rate may be up to 1% different from the
-// specified rate.
-func NewBucketWithRate(rate float64, capacity int64) *Bucket {
- for quantum := int64(1); quantum < 1<<50; quantum = nextQuantum(quantum) {
- fillInterval := time.Duration(1e9 * float64(quantum) / rate)
- if fillInterval <= 0 {
- continue
- }
- tb := NewBucketWithQuantum(fillInterval, capacity, quantum)
- if diff := math.Abs(tb.Rate() - rate); diff/rate <= rateMargin {
- return tb
- }
- }
- panic("cannot find suitable quantum for " + strconv.FormatFloat(rate, 'g', -1, 64))
-}
-
-// nextQuantum returns the next quantum to try after q.
-// We grow the quantum exponentially, but slowly, so we
-// get a good fit in the lower numbers.
-func nextQuantum(q int64) int64 {
- q1 := q * 11 / 10
- if q1 == q {
- q1++
- }
- return q1
-}
-
-// NewBucketWithQuantum is similar to NewBucket, but allows
-// the specification of the quantum size - quantum tokens
-// are added every fillInterval.
-func NewBucketWithQuantum(fillInterval time.Duration, capacity, quantum int64) *Bucket {
- if fillInterval <= 0 {
- panic("token bucket fill interval is not > 0")
- }
- if capacity <= 0 {
- panic("token bucket capacity is not > 0")
- }
- if quantum <= 0 {
- panic("token bucket quantum is not > 0")
- }
- return &Bucket{
- startTime: time.Now(),
- capacity: capacity,
- quantum: quantum,
- avail: capacity,
- fillInterval: fillInterval,
- }
-}
-
-// Wait takes count tokens from the bucket, waiting until they are
-// available.
-func (tb *Bucket) Wait(count int64) {
- if d := tb.Take(count); d > 0 {
- time.Sleep(d)
- }
-}
-
-// WaitMaxDuration is like Wait except that it will
-// only take tokens from the bucket if it needs to wait
-// for no greater than maxWait. It reports whether
-// any tokens have been removed from the bucket
-// If no tokens have been removed, it returns immediately.
-func (tb *Bucket) WaitMaxDuration(count int64, maxWait time.Duration) bool {
- d, ok := tb.TakeMaxDuration(count, maxWait)
- if d > 0 {
- time.Sleep(d)
- }
- return ok
-}
-
-const infinityDuration time.Duration = 0x7fffffffffffffff
-
-// Take takes count tokens from the bucket without blocking. It returns
-// the time that the caller should wait until the tokens are actually
-// available.
-//
-// Note that if the request is irrevocable - there is no way to return
-// tokens to the bucket once this method commits us to taking them.
-func (tb *Bucket) Take(count int64) time.Duration {
- d, _ := tb.take(time.Now(), count, infinityDuration)
- return d
-}
-
-// TakeMaxDuration is like Take, except that
-// it will only take tokens from the bucket if the wait
-// time for the tokens is no greater than maxWait.
-//
-// If it would take longer than maxWait for the tokens
-// to become available, it does nothing and reports false,
-// otherwise it returns the time that the caller should
-// wait until the tokens are actually available, and reports
-// true.
-func (tb *Bucket) TakeMaxDuration(count int64, maxWait time.Duration) (time.Duration, bool) {
- return tb.take(time.Now(), count, maxWait)
-}
-
-// TakeAvailable takes up to count immediately available tokens from the
-// bucket. It returns the number of tokens removed, or zero if there are
-// no available tokens. It does not block.
-func (tb *Bucket) TakeAvailable(count int64) int64 {
- return tb.takeAvailable(time.Now(), count)
-}
-
-// takeAvailable is the internal version of TakeAvailable - it takes the
-// current time as an argument to enable easy testing.
-func (tb *Bucket) takeAvailable(now time.Time, count int64) int64 {
- if count <= 0 {
- return 0
- }
- tb.mu.Lock()
- defer tb.mu.Unlock()
-
- tb.adjust(now)
- if tb.avail <= 0 {
- return 0
- }
- if count > tb.avail {
- count = tb.avail
- }
- tb.avail -= count
- return count
-}
-
-// Rate returns the fill rate of the bucket, in tokens per second.
-func (tb *Bucket) Rate() float64 {
- return 1e9 * float64(tb.quantum) / float64(tb.fillInterval)
-}
-
-// take is the internal version of Take - it takes the current time as
-// an argument to enable easy testing.
-func (tb *Bucket) take(now time.Time, count int64, maxWait time.Duration) (time.Duration, bool) {
- if count <= 0 {
- return 0, true
- }
- tb.mu.Lock()
- defer tb.mu.Unlock()
-
- currentTick := tb.adjust(now)
- avail := tb.avail - count
- if avail >= 0 {
- tb.avail = avail
- return 0, true
- }
- // Round up the missing tokens to the nearest multiple
- // of quantum - the tokens won't be available until
- // that tick.
- endTick := currentTick + (-avail+tb.quantum-1)/tb.quantum
- endTime := tb.startTime.Add(time.Duration(endTick) * tb.fillInterval)
- waitTime := endTime.Sub(now)
- if waitTime > maxWait {
- return 0, false
- }
- tb.avail = avail
- return waitTime, true
-}
-
-// adjust adjusts the current bucket capacity based on the current time.
-// It returns the current tick.
-func (tb *Bucket) adjust(now time.Time) (currentTick int64) {
- currentTick = int64(now.Sub(tb.startTime) / tb.fillInterval)
-
- if tb.avail >= tb.capacity {
- return
- }
- tb.avail += (currentTick - tb.availTick) * tb.quantum
- if tb.avail > tb.capacity {
- tb.avail = tb.capacity
- }
- tb.availTick = currentTick
- return
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/reader.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/reader.go
deleted file mode 100644
index 6403bf78..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/juju/ratelimit/reader.go
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright 2014 Canonical Ltd.
-// Licensed under the LGPLv3 with static-linking exception.
-// See LICENCE file for details.
-
-package ratelimit
-
-import "io"
-
-type reader struct {
- r io.Reader
- bucket *Bucket
-}
-
-// Reader returns a reader that is rate limited by
-// the given token bucket. Each token in the bucket
-// represents one byte.
-func Reader(r io.Reader, bucket *Bucket) io.Reader {
- return &reader{
- r: r,
- bucket: bucket,
- }
-}
-
-func (r *reader) Read(buf []byte) (int, error) {
- n, err := r.r.Read(buf)
- if n <= 0 {
- return n, err
- }
- r.bucket.Wait(int64(n))
- return n, err
-}
-
-type writer struct {
- w io.Writer
- bucket *Bucket
-}
-
-// Writer returns a reader that is rate limited by
-// the given token bucket. Each token in the bucket
-// represents one byte.
-func Writer(w io.Writer, bucket *Bucket) io.Writer {
- return &writer{
- w: w,
- bucket: bucket,
- }
-}
-
-func (w *writer) Write(buf []byte) (int, error) {
- w.bucket.Wait(int64(len(buf)))
- return w.w.Write(buf)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.gitmodules b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.gitmodules
deleted file mode 100644
index 51779cbf..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "test-data"]
- path = test-data
- url = git://github.com/maxmind/MaxMind-DB.git
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.travis.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.travis.yml
deleted file mode 100644
index d2f25674..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/.travis.yml
+++ /dev/null
@@ -1,20 +0,0 @@
-language: go
-
-go:
- - 1.2
- - 1.3
- - 1.4
- - 1.5
- - 1.6
- - tip
-
-before_install:
- - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then go get -v github.com/golang/lint/golint; fi"
-
-script:
- - go test -race -cpu 1,4 -v
- - go test -race -v -tags appengine
- - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then go vet ./...; fi"
- - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then golint .; fi"
-
-sudo: false
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/LICENSE
deleted file mode 100644
index ba53dd18..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/LICENSE
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright (c) 2015, Gregory J. Oschwald
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/README.md
deleted file mode 100644
index 7a3c22a0..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/README.md
+++ /dev/null
@@ -1,90 +0,0 @@
-# GeoIP2 Reader for Go #
-
-[](https://travis-ci.org/oschwald/geoip2-golang)
-[](https://godoc.org/github.com/oschwald/geoip2-golang)
-
-This library reads MaxMind [GeoLite2](http://dev.maxmind.com/geoip/geoip2/geolite2/)
-and [GeoIP2](http://www.maxmind.com/en/geolocation_landing) databases.
-
-This library is built using
-[the Go maxminddb reader](https://github.com/oschwald/maxminddb-golang).
-All data for the database record is decoded using this library. If you only
-need several fields, you may get superior performance by using maxminddb's
-`Lookup` directly with a result struct that only contains the required fields.
-(See [example_test.go](https://github.com/oschwald/maxminddb-golang/blob/master/example_test.go)
-in the maxminddb repository for an example of this.)
-
-## Installation ##
-
-```
-go get github.com/oschwald/geoip2-golang
-```
-
-## Usage ##
-
-[See GoDoc](http://godoc.org/github.com/oschwald/geoip2-golang) for
-documentation and examples.
-
-## Example ##
-
-```go
-package main
-
-import (
- "fmt"
- "github.com/oschwald/geoip2-golang"
- "log"
- "net"
-)
-
-func main() {
- db, err := geoip2.Open("GeoIP2-City.mmdb")
- if err != nil {
- log.Fatal(err)
- }
- defer db.Close()
- // If you are using strings that may be invalid, check that ip is not nil
- ip := net.ParseIP("81.2.69.142")
- record, err := db.City(ip)
- if err != nil {
- log.Fatal(err)
- }
- fmt.Printf("Portuguese (BR) city name: %v\n", record.City.Names["pt-BR"])
- fmt.Printf("English subdivision name: %v\n", record.Subdivisions[0].Names["en"])
- fmt.Printf("Russian country name: %v\n", record.Country.Names["ru"])
- fmt.Printf("ISO country code: %v\n", record.Country.IsoCode)
- fmt.Printf("Time zone: %v\n", record.Location.TimeZone)
- fmt.Printf("Coordinates: %v, %v\n", record.Location.Latitude, record.Location.Longitude)
- // Output:
- // Portuguese (BR) city name: Londres
- // English subdivision name: England
- // Russian country name: Великобритания
- // ISO country code: GB
- // Time zone: Europe/London
- // Coordinates: 51.5142, -0.0931
-}
-```
-
-## Testing ##
-
-Make sure you checked out test data submodule:
-
-```
-git submodule init
-git submodule update
-```
-
-Execute test suite:
-
-```
-go test
-```
-
-## Contributing ##
-
-Contributions welcome! Please fork the repository and open a pull request
-with your changes.
-
-## License ##
-
-This is free software, licensed under the ISC license.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/reader.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/reader.go
deleted file mode 100644
index 45d642be..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/geoip2-golang/reader.go
+++ /dev/null
@@ -1,202 +0,0 @@
-// Package geoip2 provides a wrapper around the maxminddb package for
-// easy use with the MaxMind GeoIP2 and GeoLite2 databases. The records for
-// the IP address is returned from this package as well-formed structures
-// that match the internal layout of data from MaxMind.
-package geoip2
-
-import (
- "net"
-
- "github.com/oschwald/maxminddb-golang"
-)
-
-// The City structure corresponds to the data in the GeoIP2/GeoLite2 City
-// databases.
-type City struct {
- City struct {
- GeoNameID uint `maxminddb:"geoname_id"`
- Names map[string]string `maxminddb:"names"`
- } `maxminddb:"city"`
- Continent struct {
- Code string `maxminddb:"code"`
- GeoNameID uint `maxminddb:"geoname_id"`
- Names map[string]string `maxminddb:"names"`
- } `maxminddb:"continent"`
- Country struct {
- GeoNameID uint `maxminddb:"geoname_id"`
- IsoCode string `maxminddb:"iso_code"`
- Names map[string]string `maxminddb:"names"`
- } `maxminddb:"country"`
- Location struct {
- Latitude float64 `maxminddb:"latitude"`
- Longitude float64 `maxminddb:"longitude"`
- MetroCode uint `maxminddb:"metro_code"`
- TimeZone string `maxminddb:"time_zone"`
- } `maxminddb:"location"`
- Postal struct {
- Code string `maxminddb:"code"`
- } `maxminddb:"postal"`
- RegisteredCountry struct {
- GeoNameID uint `maxminddb:"geoname_id"`
- IsoCode string `maxminddb:"iso_code"`
- Names map[string]string `maxminddb:"names"`
- } `maxminddb:"registered_country"`
- RepresentedCountry struct {
- GeoNameID uint `maxminddb:"geoname_id"`
- IsoCode string `maxminddb:"iso_code"`
- Names map[string]string `maxminddb:"names"`
- Type string `maxminddb:"type"`
- } `maxminddb:"represented_country"`
- Subdivisions []struct {
- GeoNameID uint `maxminddb:"geoname_id"`
- IsoCode string `maxminddb:"iso_code"`
- Names map[string]string `maxminddb:"names"`
- } `maxminddb:"subdivisions"`
- Traits struct {
- IsAnonymousProxy bool `maxminddb:"is_anonymous_proxy"`
- IsSatelliteProvider bool `maxminddb:"is_satellite_provider"`
- } `maxminddb:"traits"`
-}
-
-// The Country structure corresponds to the data in the GeoIP2/GeoLite2
-// Country databases.
-type Country struct {
- Continent struct {
- Code string `maxminddb:"code"`
- GeoNameID uint `maxminddb:"geoname_id"`
- Names map[string]string `maxminddb:"names"`
- } `maxminddb:"continent"`
- Country struct {
- GeoNameID uint `maxminddb:"geoname_id"`
- IsoCode string `maxminddb:"iso_code"`
- Names map[string]string `maxminddb:"names"`
- } `maxminddb:"country"`
- RegisteredCountry struct {
- GeoNameID uint `maxminddb:"geoname_id"`
- IsoCode string `maxminddb:"iso_code"`
- Names map[string]string `maxminddb:"names"`
- } `maxminddb:"registered_country"`
- RepresentedCountry struct {
- GeoNameID uint `maxminddb:"geoname_id"`
- IsoCode string `maxminddb:"iso_code"`
- Names map[string]string `maxminddb:"names"`
- Type string `maxminddb:"type"`
- } `maxminddb:"represented_country"`
- Traits struct {
- IsAnonymousProxy bool `maxminddb:"is_anonymous_proxy"`
- IsSatelliteProvider bool `maxminddb:"is_satellite_provider"`
- } `maxminddb:"traits"`
-}
-
-// The AnonymousIP structure corresponds to the data in the GeoIP2
-// Anonymous IP database.
-type AnonymousIP struct {
- IsAnonymous bool `maxminddb:"is_anonymous"`
- IsAnonymousVPN bool `maxminddb:"is_anonymous_vpn"`
- IsHostingProvider bool `maxminddb:"is_hosting_provider"`
- IsPublicProxy bool `maxminddb:"is_public_proxy"`
- IsTorExitNode bool `maxminddb:"is_tor_exit_node"`
-}
-
-// The ConnectionType structure corresponds to the data in the GeoIP2
-// Connection-Type database.
-type ConnectionType struct {
- ConnectionType string `maxminddb:"connection_type"`
-}
-
-// The Domain structure corresponds to the data in the GeoIP2 Domain database.
-type Domain struct {
- Domain string `maxminddb:"domain"`
-}
-
-// The ISP structure corresponds to the data in the GeoIP2 ISP database.
-type ISP struct {
- AutonomousSystemNumber uint `maxminddb:"autonomous_system_number"`
- AutonomousSystemOrganization string `maxminddb:"autonomous_system_organization"`
- ISP string `maxminddb:"isp"`
- Organization string `maxminddb:"organization"`
-}
-
-// Reader holds the maxminddb.Reader structure. It should be created
-// using the Open function.
-type Reader struct {
- mmdbReader *maxminddb.Reader
-}
-
-// Open takes a string path to a file and returns a Reader structure or an
-// error. The database file is opened using a memory map. Use the Close method
-// on the Reader object to return the resources to the system.
-func Open(file string) (*Reader, error) {
- reader, err := maxminddb.Open(file)
- return &Reader{mmdbReader: reader}, err
-}
-
-// FromBytes takes a byte slice corresponding to a GeoIP2/GeoLite2 database
-// file and returns a Reader structure or an error.
-func FromBytes(bytes []byte) (*Reader, error) {
- reader, err := maxminddb.FromBytes(bytes)
- return &Reader{mmdbReader: reader}, err
-}
-
-// City takes an IP address as a net.IP struct and returns a City struct
-// and/or an error. Although this can be used with other databases, this
-// method generally should be used with the GeoIP2 or GeoLite2 City databases.
-func (r *Reader) City(ipAddress net.IP) (*City, error) {
- var city City
- err := r.mmdbReader.Lookup(ipAddress, &city)
- return &city, err
-}
-
-// Country takes an IP address as a net.IP struct and returns a Country struct
-// and/or an error. Although this can be used with other databases, this
-// method generally should be used with the GeoIP2 or GeoLite2 Country
-// databases.
-func (r *Reader) Country(ipAddress net.IP) (*Country, error) {
- var country Country
- err := r.mmdbReader.Lookup(ipAddress, &country)
- return &country, err
-}
-
-// AnonymousIP takes an IP address as a net.IP struct and returns a
-// AnonymousIP struct and/or an error.
-func (r *Reader) AnonymousIP(ipAddress net.IP) (*AnonymousIP, error) {
- var anonIP AnonymousIP
- err := r.mmdbReader.Lookup(ipAddress, &anonIP)
- return &anonIP, err
-}
-
-// ConnectionType takes an IP address as a net.IP struct and returns a
-// ConnectionType struct and/or an error
-func (r *Reader) ConnectionType(ipAddress net.IP) (*ConnectionType, error) {
- var val ConnectionType
- err := r.mmdbReader.Lookup(ipAddress, &val)
- return &val, err
-}
-
-// Domain takes an IP address as a net.IP struct and returns a
-// Domain struct and/or an error
-func (r *Reader) Domain(ipAddress net.IP) (*Domain, error) {
- var val Domain
- err := r.mmdbReader.Lookup(ipAddress, &val)
- return &val, err
-}
-
-// ISP takes an IP address as a net.IP struct and returns a ISP struct and/or
-// an error
-func (r *Reader) ISP(ipAddress net.IP) (*ISP, error) {
- var val ISP
- err := r.mmdbReader.Lookup(ipAddress, &val)
- return &val, err
-}
-
-// Metadata takes no arguments and returns a struct containing metadata about
-// the MaxMind database in use by the Reader.
-func (r *Reader) Metadata() maxminddb.Metadata {
- return r.mmdbReader.Metadata
-}
-
-// Close unmaps the database file from virtual memory and returns the
-// resources to the system.
-func (r *Reader) Close() error {
- return r.mmdbReader.Close()
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.gitmodules b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.gitmodules
deleted file mode 100644
index 51779cbf..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.gitmodules
+++ /dev/null
@@ -1,3 +0,0 @@
-[submodule "test-data"]
- path = test-data
- url = git://github.com/maxmind/MaxMind-DB.git
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.travis.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.travis.yml
deleted file mode 100644
index e01d99a2..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/.travis.yml
+++ /dev/null
@@ -1,23 +0,0 @@
-language: go
-
-go:
- - 1.2
- - 1.3
- - 1.4
- - 1.5
- - 1.6
- - tip
-
-before_install:
- - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then go get -v github.com/golang/lint/golint; fi"
-
-install:
- - go get gopkg.in/check.v1
-
-script:
- - go test -race -cpu 1,4 -v
- - go test -race -v -tags appengine
- - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then go vet ./...; fi"
- - "if [[ $TRAVIS_GO_VERSION == 1.6 ]]; then golint .; fi"
-
-sudo: false
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/LICENSE
deleted file mode 100644
index ba53dd18..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/LICENSE
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright (c) 2015, Gregory J. Oschwald
-
-Permission to use, copy, modify, and/or distribute this software for any
-purpose with or without fee is hereby granted, provided that the above
-copyright notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
-REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
-AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
-INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
-LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
-OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
-PERFORMANCE OF THIS SOFTWARE.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/README.md
deleted file mode 100644
index d83a2760..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/README.md
+++ /dev/null
@@ -1,37 +0,0 @@
-# MaxMind DB Reader for Go #
-
-[](https://travis-ci.org/oschwald/maxminddb-golang)
-[](https://ci.appveyor.com/project/oschwald/maxminddb-golang/branch/master)
-[](https://godoc.org/github.com/oschwald/maxminddb-golang)
-
-
-This is a Go reader for the MaxMind DB format. This can be used to read
-[GeoLite2](http://dev.maxmind.com/geoip/geoip2/geolite2/) and
-[GeoIP2](http://www.maxmind.com/en/geolocation_landing) databases.
-
-This is not an official MaxMind API.
-
-## Installation ##
-
-```
-go get github.com/oschwald/maxminddb-golang
-```
-
-## Usage ##
-
-[See GoDoc](http://godoc.org/github.com/oschwald/maxminddb-golang) for
-documentation and examples.
-
-## Examples ##
-
-See [GoDoc](http://godoc.org/github.com/oschwald/maxminddb-golang) or
-`example_test.go` for examples.
-
-## Contributing ##
-
-Contributions welcome! Please fork the repository and open a pull request
-with your changes.
-
-## License ##
-
-This is free software, licensed under the ISC License.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/appveyor.yml b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/appveyor.yml
deleted file mode 100644
index e2bb9dd2..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/appveyor.yml
+++ /dev/null
@@ -1,19 +0,0 @@
-version: "{build}"
-
-os: Windows Server 2012 R2
-
-clone_folder: c:\gopath\src\github.com\oschwald\maxminddb-golang
-
-environment:
- GOPATH: c:\gopath
-
-install:
- - echo %PATH%
- - echo %GOPATH%
- - git submodule update --init --recursive
- - go version
- - go env
- - go get -v -t ./...
-
-build_script:
- - go test -v ./...
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/decoder.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/decoder.go
deleted file mode 100644
index 1782a36e..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/decoder.go
+++ /dev/null
@@ -1,530 +0,0 @@
-package maxminddb
-
-import (
- "encoding/binary"
- "fmt"
- "math"
- "math/big"
- "reflect"
- "sync"
-)
-
-type decoder struct {
- buffer []byte
-}
-
-type dataType int
-
-const (
- _Extended dataType = iota
- _Pointer
- _String
- _Float64
- _Bytes
- _Uint16
- _Uint32
- _Map
- _Int32
- _Uint64
- _Uint128
- _Slice
- _Container
- _Marker
- _Bool
- _Float32
-)
-
-func (d *decoder) decode(offset uint, result reflect.Value) (uint, error) {
- typeNum, size, newOffset := d.decodeCtrlData(offset)
- return d.decodeFromType(typeNum, size, newOffset, result)
-}
-
-func (d *decoder) decodeCtrlData(offset uint) (dataType, uint, uint) {
- newOffset := offset + 1
- ctrlByte := d.buffer[offset]
-
- typeNum := dataType(ctrlByte >> 5)
- if typeNum == _Extended {
- typeNum = dataType(d.buffer[newOffset] + 7)
- newOffset++
- }
-
- var size uint
- size, newOffset = d.sizeFromCtrlByte(ctrlByte, newOffset, typeNum)
- return typeNum, size, newOffset
-}
-
-func (d *decoder) sizeFromCtrlByte(ctrlByte byte, offset uint, typeNum dataType) (uint, uint) {
- size := uint(ctrlByte & 0x1f)
- if typeNum == _Extended {
- return size, offset
- }
-
- var bytesToRead uint
- if size > 28 {
- bytesToRead = size - 28
- }
-
- newOffset := offset + bytesToRead
- sizeBytes := d.buffer[offset:newOffset]
-
- switch {
- case size == 29:
- size = 29 + uint(sizeBytes[0])
- case size == 30:
- size = 285 + uint(uintFromBytes(0, sizeBytes))
- case size > 30:
- size = uint(uintFromBytes(0, sizeBytes)) + 65821
- }
- return size, newOffset
-}
-
-func (d *decoder) decodeFromType(dtype dataType, size uint, offset uint, result reflect.Value) (uint, error) {
- if result.Kind() == reflect.Ptr {
- result = reflect.Indirect(result)
- }
-
- switch dtype {
- case _Bool:
- return d.unmarshalBool(size, offset, result)
- case _Bytes:
- return d.unmarshalBytes(size, offset, result)
- case _Float32:
- return d.unmarshalFloat32(size, offset, result)
- case _Float64:
- return d.unmarshalFloat64(size, offset, result)
- case _Int32:
- return d.unmarshalInt32(size, offset, result)
- case _Map:
- return d.unmarshalMap(size, offset, result)
- case _Pointer:
- return d.unmarshalPointer(size, offset, result)
- case _Slice:
- return d.unmarshalSlice(size, offset, result)
- case _String:
- return d.unmarshalString(size, offset, result)
- case _Uint16:
- return d.unmarshalUint(size, offset, result, 16)
- case _Uint32:
- return d.unmarshalUint(size, offset, result, 32)
- case _Uint64:
- return d.unmarshalUint(size, offset, result, 64)
- case _Uint128:
- return d.unmarshalUint128(size, offset, result)
- default:
- return 0, newInvalidDatabaseError("unknown type: %d", dtype)
- }
-}
-
-func (d *decoder) unmarshalBool(size uint, offset uint, result reflect.Value) (uint, error) {
- if size > 1 {
- return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (bool size of %v)", size)
- }
- value, newOffset, err := d.decodeBool(size, offset)
- if err != nil {
- return 0, err
- }
- switch result.Kind() {
- default:
- return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type())
- case reflect.Bool:
- result.SetBool(value)
- return newOffset, nil
- case reflect.Interface:
- result.Set(reflect.ValueOf(value))
- return newOffset, nil
- }
-}
-
-func (d *decoder) unmarshalBytes(size uint, offset uint, result reflect.Value) (uint, error) {
-
- value, newOffset, err := d.decodeBytes(size, offset)
- if err != nil {
- return 0, err
- }
- switch result.Kind() {
- default:
- return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type())
- case reflect.Slice:
- result.SetBytes(value)
- return newOffset, nil
- case reflect.Interface:
- result.Set(reflect.ValueOf(value))
- return newOffset, nil
- }
-}
-
-func (d *decoder) unmarshalFloat32(size uint, offset uint, result reflect.Value) (uint, error) {
- if size != 4 {
- return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (float32 size of %v)", size)
- }
- value, newOffset, err := d.decodeFloat32(size, offset)
- if err != nil {
- return 0, err
- }
-
- switch result.Kind() {
- default:
- return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type())
- case reflect.Float32, reflect.Float64:
- result.SetFloat(float64(value))
- return newOffset, nil
- case reflect.Interface:
- result.Set(reflect.ValueOf(value))
- return newOffset, nil
- }
-}
-
-func (d *decoder) unmarshalFloat64(size uint, offset uint, result reflect.Value) (uint, error) {
-
- if size != 8 {
- return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (float 64 size of %v)", size)
- }
- value, newOffset, err := d.decodeFloat64(size, offset)
- if err != nil {
- return 0, err
- }
- switch result.Kind() {
- default:
- return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type())
- case reflect.Float32, reflect.Float64:
- result.SetFloat(value)
- return newOffset, nil
- case reflect.Interface:
- result.Set(reflect.ValueOf(value))
- return newOffset, nil
- }
-}
-
-func (d *decoder) unmarshalInt32(size uint, offset uint, result reflect.Value) (uint, error) {
- if size > 4 {
- return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (int32 size of %v)", size)
- }
- value, newOffset, err := d.decodeInt(size, offset)
- if err != nil {
- return 0, err
- }
-
- switch result.Kind() {
- default:
- return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type())
- case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
- result.SetInt(int64(value))
- return newOffset, nil
- case reflect.Interface:
- result.Set(reflect.ValueOf(value))
- return newOffset, nil
- }
-}
-
-func (d *decoder) unmarshalMap(size uint, offset uint, result reflect.Value) (uint, error) {
- switch result.Kind() {
- default:
- return 0, fmt.Errorf("trying to unmarshal a map into %v", result.Type())
- case reflect.Struct:
- return d.decodeStruct(size, offset, result)
- case reflect.Map:
- return d.decodeMap(size, offset, result)
- case reflect.Interface:
- rv := reflect.ValueOf(make(map[string]interface{}, size))
- newOffset, err := d.decodeMap(size, offset, rv)
- result.Set(rv)
- return newOffset, err
- }
-}
-
-func (d *decoder) unmarshalPointer(size uint, offset uint, result reflect.Value) (uint, error) {
- pointer, newOffset := d.decodePointer(size, offset)
- _, err := d.decode(pointer, result)
- return newOffset, err
-}
-
-func (d *decoder) unmarshalSlice(size uint, offset uint, result reflect.Value) (uint, error) {
-
- switch result.Kind() {
- default:
- return 0, fmt.Errorf("trying to unmarshal an array into %v", result.Type())
- case reflect.Slice:
- return d.decodeSlice(size, offset, result)
- case reflect.Interface:
- a := []interface{}{}
- rv := reflect.ValueOf(&a).Elem()
- newOffset, err := d.decodeSlice(size, offset, rv)
- result.Set(rv)
- return newOffset, err
- }
-}
-
-func (d *decoder) unmarshalString(size uint, offset uint, result reflect.Value) (uint, error) {
-
- value, newOffset, err := d.decodeString(size, offset)
-
- if err != nil {
- return 0, err
- }
- switch result.Kind() {
- default:
- return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type())
- case reflect.String:
- result.SetString(value)
- return newOffset, nil
- case reflect.Interface:
- result.Set(reflect.ValueOf(value))
- return newOffset, nil
- }
-}
-
-func (d *decoder) unmarshalUint(size uint, offset uint, result reflect.Value, uintType uint) (uint, error) {
- if size > uintType/8 {
- return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (uint%v size of %v)", uintType, size)
- }
-
- value, newOffset, err := d.decodeUint(size, offset)
- if err != nil {
- return 0, err
- }
-
- switch result.Kind() {
- default:
- return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type())
- case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr:
- result.SetUint(value)
- return newOffset, nil
- case reflect.Interface:
- result.Set(reflect.ValueOf(value))
- return newOffset, nil
- }
-}
-
-func (d *decoder) unmarshalUint128(size uint, offset uint, result reflect.Value) (uint, error) {
- if size > 16 {
- return 0, newInvalidDatabaseError("the MaxMind DB file's data section contains bad data (uint128 size of %v)", size)
- }
- value, newOffset, err := d.decodeUint128(size, offset)
- if err != nil {
- return 0, err
- }
-
- // XXX - this should allow *big.Int rather than just bigInt
- // Currently this is reported as invalid
- switch result.Kind() {
- default:
- return newOffset, fmt.Errorf("trying to unmarshal %v into %v", value, result.Type())
- case reflect.Struct:
- result.Set(reflect.ValueOf(*value))
- return newOffset, nil
- case reflect.Interface, reflect.Ptr:
- result.Set(reflect.ValueOf(value))
- return newOffset, nil
- }
-}
-
-func (d *decoder) decodeBool(size uint, offset uint) (bool, uint, error) {
- return size != 0, offset, nil
-}
-
-func (d *decoder) decodeBytes(size uint, offset uint) ([]byte, uint, error) {
- newOffset := offset + size
- bytes := make([]byte, size)
- copy(bytes, d.buffer[offset:newOffset])
- return bytes, newOffset, nil
-}
-
-func (d *decoder) decodeFloat64(size uint, offset uint) (float64, uint, error) {
- newOffset := offset + size
- bits := binary.BigEndian.Uint64(d.buffer[offset:newOffset])
- return math.Float64frombits(bits), newOffset, nil
-}
-
-func (d *decoder) decodeFloat32(size uint, offset uint) (float32, uint, error) {
- newOffset := offset + size
- bits := binary.BigEndian.Uint32(d.buffer[offset:newOffset])
- return math.Float32frombits(bits), newOffset, nil
-}
-
-func (d *decoder) decodeInt(size uint, offset uint) (int, uint, error) {
- newOffset := offset + size
- var val int32
- for _, b := range d.buffer[offset:newOffset] {
- val = (val << 8) | int32(b)
- }
- return int(val), newOffset, nil
-}
-
-func (d *decoder) decodeMap(size uint, offset uint, result reflect.Value) (uint, error) {
- if result.IsNil() {
- result.Set(reflect.MakeMap(result.Type()))
- }
-
- for i := uint(0); i < size; i++ {
- var key string
- var err error
- key, offset, err = d.decodeKeyString(offset)
-
- if err != nil {
- return 0, err
- }
-
- value := reflect.New(result.Type().Elem())
- offset, err = d.decode(offset, value)
- if err != nil {
- return 0, err
- }
- result.SetMapIndex(reflect.ValueOf(key), value.Elem())
- }
- return offset, nil
-}
-
-func (d *decoder) decodePointer(size uint, offset uint) (uint, uint) {
- pointerSize := ((size >> 3) & 0x3) + 1
- newOffset := offset + pointerSize
- pointerBytes := d.buffer[offset:newOffset]
- var prefix uint64
- if pointerSize == 4 {
- prefix = 0
- } else {
- prefix = uint64(size & 0x7)
- }
- unpacked := uint(uintFromBytes(prefix, pointerBytes))
-
- var pointerValueOffset uint
- switch pointerSize {
- case 1:
- pointerValueOffset = 0
- case 2:
- pointerValueOffset = 2048
- case 3:
- pointerValueOffset = 526336
- case 4:
- pointerValueOffset = 0
- }
-
- pointer := unpacked + pointerValueOffset
-
- return pointer, newOffset
-}
-
-func (d *decoder) decodeSlice(size uint, offset uint, result reflect.Value) (uint, error) {
- result.Set(reflect.MakeSlice(result.Type(), int(size), int(size)))
- for i := 0; i < int(size); i++ {
- var err error
- offset, err = d.decode(offset, result.Index(i))
- if err != nil {
- return 0, err
- }
- }
- return offset, nil
-}
-
-func (d *decoder) decodeString(size uint, offset uint) (string, uint, error) {
- newOffset := offset + size
- return string(d.buffer[offset:newOffset]), newOffset, nil
-}
-
-var (
- fieldMap = map[reflect.Type]map[string]int{}
- fieldMapMu sync.RWMutex
-)
-
-func (d *decoder) decodeStruct(size uint, offset uint, result reflect.Value) (uint, error) {
- resultType := result.Type()
-
- fieldMapMu.RLock()
- fields, ok := fieldMap[resultType]
- fieldMapMu.RUnlock()
- if !ok {
- numFields := resultType.NumField()
- fields = make(map[string]int, numFields)
- for i := 0; i < numFields; i++ {
- fieldType := resultType.Field(i)
-
- fieldName := fieldType.Name
- if tag := fieldType.Tag.Get("maxminddb"); tag != "" {
- fieldName = tag
- }
- fields[fieldName] = i
- }
- fieldMapMu.Lock()
- fieldMap[resultType] = fields
- fieldMapMu.Unlock()
- }
-
- for i := uint(0); i < size; i++ {
- var (
- err error
- key string
- )
- key, offset, err = d.decodeStructKey(offset)
- if err != nil {
- return 0, err
- }
- i, ok := fields[key]
- if !ok {
- offset = d.nextValueOffset(offset, 1)
- continue
- }
- offset, err = d.decode(offset, result.Field(i))
- if err != nil {
- return 0, err
- }
- }
- return offset, nil
-}
-
-func (d *decoder) decodeUint(size uint, offset uint) (uint64, uint, error) {
- newOffset := offset + size
- val := uintFromBytes(0, d.buffer[offset:newOffset])
-
- return val, newOffset, nil
-}
-
-func (d *decoder) decodeUint128(size uint, offset uint) (*big.Int, uint, error) {
- newOffset := offset + size
- val := new(big.Int)
- val.SetBytes(d.buffer[offset:newOffset])
-
- return val, newOffset, nil
-}
-
-func uintFromBytes(prefix uint64, uintBytes []byte) uint64 {
- val := prefix
- for _, b := range uintBytes {
- val = (val << 8) | uint64(b)
- }
- return val
-}
-
-func (d *decoder) decodeKeyString(offset uint) (string, uint, error) {
- typeNum, size, newOffset := d.decodeCtrlData(offset)
- if typeNum == _Pointer {
- pointer, ptrOffset := d.decodePointer(size, newOffset)
- key, _, err := d.decodeKeyString(pointer)
- return key, ptrOffset, err
- }
- if typeNum != _String {
- return "", 0, newInvalidDatabaseError("unexpected type when decoding string: %v", typeNum)
- }
- return d.decodeString(size, newOffset)
-}
-
-// This function is used to skip ahead to the next value without decoding
-// the one at the offset passed in. The size bits have different meanings for
-// different data types
-func (d *decoder) nextValueOffset(offset uint, numberToSkip uint) uint {
- if numberToSkip == 0 {
- return offset
- }
- typeNum, size, offset := d.decodeCtrlData(offset)
- switch typeNum {
- case _Pointer:
- _, offset = d.decodePointer(size, offset)
- case _Map:
- numberToSkip += 2 * size
- case _Slice:
- numberToSkip += size
- case _Bool:
- default:
- offset += size
- }
- return d.nextValueOffset(offset, numberToSkip-1)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/errors.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/errors.go
deleted file mode 100644
index 2a2acf99..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/errors.go
+++ /dev/null
@@ -1,17 +0,0 @@
-package maxminddb
-
-import "fmt"
-
-// InvalidDatabaseError is returned when the database contains invalid data
-// and cannot be parsed.
-type InvalidDatabaseError struct {
- message string
-}
-
-func newInvalidDatabaseError(format string, args ...interface{}) InvalidDatabaseError {
- return InvalidDatabaseError{fmt.Sprintf(format, args...)}
-}
-
-func (e InvalidDatabaseError) Error() string {
- return e.message
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_appengine.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_appengine.go
deleted file mode 100644
index c7dc6ef0..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_appengine.go
+++ /dev/null
@@ -1,7 +0,0 @@
-// +build appengine
-
-package maxminddb
-
-func (d *decoder) decodeStructKey(offset uint) (string, uint, error) {
- return d.decodeKeyString(offset)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_other.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_other.go
deleted file mode 100644
index 577e6f80..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/key_other.go
+++ /dev/null
@@ -1,28 +0,0 @@
-// +build !appengine
-
-package maxminddb
-
-import (
- "reflect"
- "unsafe"
-)
-
-// decodeStructKey returns a string which points into the database. Don't keep
-// it around.
-func (d *decoder) decodeStructKey(offset uint) (string, uint, error) {
- typeNum, size, newOffset := d.decodeCtrlData(offset)
- switch typeNum {
- case _Pointer:
- pointer, ptrOffset := d.decodePointer(size, newOffset)
- s, _, err := d.decodeStructKey(pointer)
- return s, ptrOffset, err
- case _String:
- var s string
- val := (*reflect.StringHeader)(unsafe.Pointer(&s))
- val.Data = uintptr(unsafe.Pointer(&d.buffer[newOffset]))
- val.Len = int(size)
- return s, newOffset + size, nil
- default:
- return "", 0, newInvalidDatabaseError("unexpected type when decoding struct key: %v", typeNum)
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_unix.go
deleted file mode 100644
index 99f98cab..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_unix.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// +build !windows,!appengine
-
-package maxminddb
-
-import (
- "syscall"
-
- "golang.org/x/sys/unix"
-)
-
-func mmap(fd int, length int) (data []byte, err error) {
- return unix.Mmap(fd, 0, length, syscall.PROT_READ, syscall.MAP_SHARED)
-}
-
-func munmap(b []byte) (err error) {
- return unix.Munmap(b)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_windows.go
deleted file mode 100644
index 083f096c..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/mmap_windows.go
+++ /dev/null
@@ -1,83 +0,0 @@
-package maxminddb
-
-// Windows support largely borrowed from mmap-go.
-//
-// Copyright 2011 Evan Shaw. All rights reserved.
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-import (
- "errors"
- "os"
- "reflect"
- "sync"
- "unsafe"
-
- "golang.org/x/sys/windows"
-)
-
-type memoryMap []byte
-
-// Windows
-var handleLock sync.Mutex
-var handleMap = map[uintptr]windows.Handle{}
-
-func mmap(fd int, length int) (data []byte, err error) {
- h, errno := windows.CreateFileMapping(windows.Handle(fd), nil,
- uint32(windows.PAGE_READONLY), 0, uint32(length), nil)
- if h == 0 {
- return nil, os.NewSyscallError("CreateFileMapping", errno)
- }
-
- addr, errno := windows.MapViewOfFile(h, uint32(windows.FILE_MAP_READ), 0,
- 0, uintptr(length))
- if addr == 0 {
- return nil, os.NewSyscallError("MapViewOfFile", errno)
- }
- handleLock.Lock()
- handleMap[addr] = h
- handleLock.Unlock()
-
- m := memoryMap{}
- dh := m.header()
- dh.Data = addr
- dh.Len = length
- dh.Cap = dh.Len
-
- return m, nil
-}
-
-func (m *memoryMap) header() *reflect.SliceHeader {
- return (*reflect.SliceHeader)(unsafe.Pointer(m))
-}
-
-func flush(addr, len uintptr) error {
- errno := windows.FlushViewOfFile(addr, len)
- return os.NewSyscallError("FlushViewOfFile", errno)
-}
-
-func munmap(b []byte) (err error) {
- m := memoryMap(b)
- dh := m.header()
-
- addr := dh.Data
- length := uintptr(dh.Len)
-
- flush(addr, length)
- err = windows.UnmapViewOfFile(addr)
- if err != nil {
- return err
- }
-
- handleLock.Lock()
- defer handleLock.Unlock()
- handle, ok := handleMap[addr]
- if !ok {
- // should be impossible; we would've errored above
- return errors.New("unknown base address")
- }
- delete(handleMap, addr)
-
- e := windows.CloseHandle(windows.Handle(handle))
- return os.NewSyscallError("CloseHandle", e)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader.go
deleted file mode 100644
index a65abde1..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader.go
+++ /dev/null
@@ -1,221 +0,0 @@
-package maxminddb
-
-import (
- "bytes"
- "errors"
- "fmt"
- "net"
- "reflect"
-)
-
-const dataSectionSeparatorSize = 16
-
-var metadataStartMarker = []byte("\xAB\xCD\xEFMaxMind.com")
-
-// Reader holds the data corresponding to the MaxMind DB file. Its only public
-// field is Metadata, which contains the metadata from the MaxMind DB file.
-type Reader struct {
- hasMappedFile bool
- buffer []byte
- decoder decoder
- Metadata Metadata
- ipv4Start uint
-}
-
-// Metadata holds the metadata decoded from the MaxMind DB file. In particular
-// in has the format version, the build time as Unix epoch time, the database
-// type and description, the IP version supported, and a slice of the natural
-// languages included.
-type Metadata struct {
- BinaryFormatMajorVersion uint `maxminddb:"binary_format_major_version"`
- BinaryFormatMinorVersion uint `maxminddb:"binary_format_minor_version"`
- BuildEpoch uint `maxminddb:"build_epoch"`
- DatabaseType string `maxminddb:"database_type"`
- Description map[string]string `maxminddb:"description"`
- IPVersion uint `maxminddb:"ip_version"`
- Languages []string `maxminddb:"languages"`
- NodeCount uint `maxminddb:"node_count"`
- RecordSize uint `maxminddb:"record_size"`
-}
-
-// FromBytes takes a byte slice corresponding to a MaxMind DB file and returns
-// a Reader structure or an error.
-func FromBytes(buffer []byte) (*Reader, error) {
- metadataStart := bytes.LastIndex(buffer, metadataStartMarker)
-
- if metadataStart == -1 {
- return nil, newInvalidDatabaseError("error opening database: invalid MaxMind DB file")
- }
-
- metadataStart += len(metadataStartMarker)
- metadataDecoder := decoder{buffer[metadataStart:]}
-
- var metadata Metadata
-
- rvMetdata := reflect.ValueOf(&metadata)
- _, err := metadataDecoder.decode(0, rvMetdata)
- if err != nil {
- return nil, err
- }
-
- searchTreeSize := metadata.NodeCount * metadata.RecordSize / 4
- dataSectionStart := searchTreeSize + dataSectionSeparatorSize
- dataSectionEnd := uint(metadataStart - len(metadataStartMarker))
- if dataSectionStart > dataSectionEnd {
- return nil, newInvalidDatabaseError("the MaxMind DB contains invalid metadata")
- }
- d := decoder{
- buffer[searchTreeSize+dataSectionSeparatorSize : metadataStart-len(metadataStartMarker)],
- }
-
- reader := &Reader{
- buffer: buffer,
- decoder: d,
- Metadata: metadata,
- ipv4Start: 0,
- }
-
- reader.ipv4Start, err = reader.startNode()
-
- return reader, err
-}
-
-func (r *Reader) startNode() (uint, error) {
- if r.Metadata.IPVersion != 6 {
- return 0, nil
- }
-
- nodeCount := r.Metadata.NodeCount
-
- node := uint(0)
- var err error
- for i := 0; i < 96 && node < nodeCount; i++ {
- node, err = r.readNode(node, 0)
- if err != nil {
- return 0, err
- }
- }
- return node, err
-}
-
-// Lookup takes an IP address as a net.IP structure and a pointer to the
-// result value to decode into. The result value pointed to must be a data
-// value that corresponds to a record in the database. This may include a
-// struct representation of the data, a map capable of holding the data or an
-// empty interface{} value.
-//
-// If result is a pointer to a struct, the struct need not include a field
-// for every value that may be in the database. If a field is not present in
-// the structure, the decoder will not decode that field, reducing the time
-// required to decode the record.
-//
-// Currently the decoder expect most data types to correspond exactly (e.g.,
-// a uint64 database type must be decoded into a uint64 Go type). In the
-// future, this may be made more flexible.
-func (r *Reader) Lookup(ipAddress net.IP, result interface{}) error {
- if ipAddress == nil {
- return errors.New("ipAddress passed to Lookup cannot be nil")
- }
-
- ipV4Address := ipAddress.To4()
- if ipV4Address != nil {
- ipAddress = ipV4Address
- }
- if len(ipAddress) == 16 && r.Metadata.IPVersion == 4 {
- return fmt.Errorf("error looking up '%s': you attempted to look up an IPv6 address in an IPv4-only database", ipAddress.String())
- }
-
- pointer, err := r.findAddressInTree(ipAddress)
-
- if pointer == 0 {
- return err
- }
-
- return r.retrieveData(pointer, result)
-}
-
-func (r *Reader) findAddressInTree(ipAddress net.IP) (uint, error) {
-
- bitCount := uint(len(ipAddress) * 8)
-
- var node uint
- if bitCount == 32 {
- node = r.ipv4Start
- }
-
- nodeCount := r.Metadata.NodeCount
-
- for i := uint(0); i < bitCount && node < nodeCount; i++ {
- bit := uint(1) & (uint(ipAddress[i>>3]) >> (7 - (i % 8)))
-
- var err error
- node, err = r.readNode(node, bit)
- if err != nil {
- return 0, err
- }
- }
- if node == nodeCount {
- // Record is empty
- return 0, nil
- } else if node > nodeCount {
- return node, nil
- }
-
- return 0, newInvalidDatabaseError("invalid node in search tree")
-}
-
-func (r *Reader) readNode(nodeNumber uint, index uint) (uint, error) {
- RecordSize := r.Metadata.RecordSize
-
- baseOffset := nodeNumber * RecordSize / 4
-
- var nodeBytes []byte
- var prefix uint64
- switch RecordSize {
- case 24:
- offset := baseOffset + index*3
- nodeBytes = r.buffer[offset : offset+3]
- case 28:
- prefix = uint64(r.buffer[baseOffset+3])
- if index != 0 {
- prefix &= 0x0F
- } else {
- prefix = (0xF0 & prefix) >> 4
- }
- offset := baseOffset + index*4
- nodeBytes = r.buffer[offset : offset+3]
- case 32:
- offset := baseOffset + index*4
- nodeBytes = r.buffer[offset : offset+4]
- default:
- return 0, newInvalidDatabaseError("unknown record size: %d", RecordSize)
- }
- return uint(uintFromBytes(prefix, nodeBytes)), nil
-}
-
-func (r *Reader) retrieveData(pointer uint, result interface{}) error {
- rv := reflect.ValueOf(result)
- if rv.Kind() != reflect.Ptr || rv.IsNil() {
- return errors.New("result param must be a pointer")
- }
-
- offset, err := r.resolveDataPointer(pointer)
- if err != nil {
- return err
- }
-
- _, err = r.decoder.decode(offset, rv)
- return err
-}
-
-func (r *Reader) resolveDataPointer(pointer uint) (uint, error) {
- nodeCount := r.Metadata.NodeCount
-
- resolved := pointer - nodeCount - dataSectionSeparatorSize
-
- if resolved > uint(len(r.buffer)) {
- return 0, newInvalidDatabaseError("the MaxMind DB file's search tree is corrupt")
- }
-
- return resolved, nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_appengine.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_appengine.go
deleted file mode 100644
index 631e1953..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_appengine.go
+++ /dev/null
@@ -1,26 +0,0 @@
-// +build appengine
-
-package maxminddb
-
-import "io/ioutil"
-
-// Open takes a string path to a MaxMind DB file and returns a Reader
-// structure or an error. The database file is opened using a memory map,
-// except on Google App Engine where mmap is not supported; there the database
-// is loaded into memory. Use the Close method on the Reader object to return
-// the resources to the system.
-func Open(file string) (*Reader, error) {
- bytes, err := ioutil.ReadFile(file)
- if err != nil {
- return nil, err
- }
-
- return FromBytes(bytes)
-}
-
-// Close unmaps the database file from virtual memory and returns the
-// resources to the system. If called on a Reader opened using FromBytes
-// or Open on Google App Engine, this method does nothing.
-func (r *Reader) Close() error {
- return nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_other.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_other.go
deleted file mode 100644
index 0ef5df3a..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/reader_other.go
+++ /dev/null
@@ -1,56 +0,0 @@
-// +build !appengine
-
-package maxminddb
-
-import "os"
-
-// Open takes a string path to a MaxMind DB file and returns a Reader
-// structure or an error. The database file is opened using a memory map,
-// except on Google App Engine where mmap is not supported; there the database
-// is loaded into memory. Use the Close method on the Reader object to return
-// the resources to the system.
-func Open(file string) (*Reader, error) {
- mapFile, err := os.Open(file)
- if err != nil {
- return nil, err
- }
- defer func() {
- if rerr := mapFile.Close(); rerr != nil {
- err = rerr
- }
- }()
-
- stats, err := mapFile.Stat()
- if err != nil {
- return nil, err
- }
-
- fileSize := int(stats.Size())
- mmap, err := mmap(int(mapFile.Fd()), fileSize)
- if err != nil {
- return nil, err
- }
-
- reader, err := FromBytes(mmap)
- if err != nil {
- if err2 := munmap(mmap); err2 != nil {
- // failing to unmap the file is probably the more severe error
- return nil, err2
- }
- return nil, err
- }
-
- reader.hasMappedFile = true
- return reader, err
-}
-
-// Close unmaps the database file from virtual memory and returns the
-// resources to the system. If called on a Reader opened using FromBytes
-// or Open on Google App Engine, this method does nothing.
-func (r *Reader) Close() (err error) {
- if r.hasMappedFile {
- err = munmap(r.buffer)
- r.hasMappedFile = false
- }
- return err
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/traverse.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/traverse.go
deleted file mode 100644
index e794d998..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/traverse.go
+++ /dev/null
@@ -1,108 +0,0 @@
-package maxminddb
-
-import "net"
-
-// Internal structure used to keep track of nodes we still need to visit.
-type netNode struct {
- ip net.IP
- bit uint
- pointer uint
-}
-
-// Networks represents a set of subnets that we are iterating over.
-type Networks struct {
- reader *Reader
- nodes []netNode // Nodes we still have to visit.
- lastNode netNode
- err error
-}
-
-// Networks returns an iterator that can be used to traverse all networks in
-// the database.
-//
-// Please note that a MaxMind DB may map IPv4 networks into several locations
-// in in an IPv6 database. This iterator will iterate over all of these
-// locations separately.
-func (r *Reader) Networks() *Networks {
- s := 4
- if r.Metadata.IPVersion == 6 {
- s = 16
- }
- return &Networks{
- reader: r,
- nodes: []netNode{
- netNode{
- ip: make(net.IP, s),
- },
- },
- }
-}
-
-// Next prepares the next network for reading with the Network method. It
-// returns true if there is another network to be processed and false if there
-// are no more networks or if there is an error.
-func (n *Networks) Next() bool {
- for len(n.nodes) > 0 {
- node := n.nodes[len(n.nodes)-1]
- n.nodes = n.nodes[:len(n.nodes)-1]
-
- for {
- if node.pointer < n.reader.Metadata.NodeCount {
- ipRight := make(net.IP, len(node.ip))
- copy(ipRight, node.ip)
- if len(ipRight) <= int(node.bit>>3) {
- n.err = newInvalidDatabaseError(
- "invalid search tree at %v/%v", ipRight, node.bit)
- return false
- }
- ipRight[node.bit>>3] |= 1 << uint(7-(node.bit%8))
-
- rightPointer, err := n.reader.readNode(node.pointer, 1)
- if err != nil {
- n.err = err
- return false
- }
-
- node.bit++
- n.nodes = append(n.nodes, netNode{
- pointer: rightPointer,
- ip: ipRight,
- bit: node.bit,
- })
-
- node.pointer, err = n.reader.readNode(node.pointer, 0)
- if err != nil {
- n.err = err
- return false
- }
-
- } else if node.pointer > n.reader.Metadata.NodeCount {
- n.lastNode = node
- return true
- } else {
- break
- }
- }
- }
-
- return false
-}
-
-// Network returns the current network or an error if there is a problem
-// decoding the data for the network. It takes a pointer to a result value to
-// decode the network's data into.
-func (n *Networks) Network(result interface{}) (*net.IPNet, error) {
- if err := n.reader.retrieveData(n.lastNode.pointer, result); err != nil {
- return nil, err
- }
-
- return &net.IPNet{
- IP: n.lastNode.ip,
- Mask: net.CIDRMask(int(n.lastNode.bit), len(n.lastNode.ip)*8),
- }, nil
-}
-
-// Err returns an error, if any, that was encountered during iteration.
-func (n *Networks) Err() error {
- return n.err
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/verifier.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/verifier.go
deleted file mode 100644
index 8c109c45..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/oschwald/maxminddb-golang/verifier.go
+++ /dev/null
@@ -1,185 +0,0 @@
-package maxminddb
-
-import "reflect"
-
-type verifier struct {
- reader *Reader
-}
-
-// Verify checks that the database is valid. It validates the search tree,
-// the data section, and the metadata section. This verifier is stricter than
-// the specification and may return errors on databases that are readable.
-func (r *Reader) Verify() error {
- v := verifier{r}
- if err := v.verifyMetadata(); err != nil {
- return err
- }
-
- return v.verifyDatabase()
-}
-
-func (v *verifier) verifyMetadata() error {
- metadata := v.reader.Metadata
-
- if metadata.BinaryFormatMajorVersion != 2 {
- return testError(
- "binary_format_major_version",
- 2,
- metadata.BinaryFormatMajorVersion,
- )
- }
-
- if metadata.BinaryFormatMinorVersion != 0 {
- return testError(
- "binary_format_minor_version",
- 0,
- metadata.BinaryFormatMinorVersion,
- )
- }
-
- if metadata.DatabaseType == "" {
- return testError(
- "database_type",
- "non-empty string",
- metadata.DatabaseType,
- )
- }
-
- if len(metadata.Description) == 0 {
- return testError(
- "description",
- "non-empty slice",
- metadata.Description,
- )
- }
-
- if metadata.IPVersion != 4 && metadata.IPVersion != 6 {
- return testError(
- "ip_version",
- "4 or 6",
- metadata.IPVersion,
- )
- }
-
- if metadata.RecordSize != 24 &&
- metadata.RecordSize != 28 &&
- metadata.RecordSize != 32 {
- return testError(
- "record_size",
- "24, 28, or 32",
- metadata.RecordSize,
- )
- }
-
- if metadata.NodeCount == 0 {
- return testError(
- "node_count",
- "positive integer",
- metadata.NodeCount,
- )
- }
- return nil
-}
-
-func (v *verifier) verifyDatabase() error {
- offsets, err := v.verifySearchTree()
- if err != nil {
- return err
- }
-
- if err := v.verifyDataSectionSeparator(); err != nil {
- return err
- }
-
- return v.verifyDataSection(offsets)
-}
-
-func (v *verifier) verifySearchTree() (map[uint]bool, error) {
- offsets := make(map[uint]bool)
-
- it := v.reader.Networks()
- for it.Next() {
- offset, err := v.reader.resolveDataPointer(it.lastNode.pointer)
- if err != nil {
- return nil, err
- }
- offsets[offset] = true
- }
- if err := it.Err(); err != nil {
- return nil, err
- }
- return offsets, nil
-}
-
-func (v *verifier) verifyDataSectionSeparator() error {
- separatorStart := v.reader.Metadata.NodeCount * v.reader.Metadata.RecordSize / 4
-
- separator := v.reader.buffer[separatorStart : separatorStart+dataSectionSeparatorSize]
-
- for _, b := range separator {
- if b != 0 {
- return newInvalidDatabaseError("unexpected byte in data separator: %v", separator)
- }
- }
- return nil
-}
-
-func (v *verifier) verifyDataSection(offsets map[uint]bool) error {
- pointerCount := len(offsets)
-
- decoder := v.reader.decoder
-
- var offset uint
- bufferLen := uint(len(decoder.buffer))
- for offset < bufferLen {
- var data interface{}
- rv := reflect.ValueOf(&data)
- newOffset, err := decoder.decode(offset, rv)
- if err != nil {
- return newInvalidDatabaseError("received decoding error (%v) at offset of %v", err, offset)
- }
- if newOffset <= offset {
- return newInvalidDatabaseError("data section offset unexpectedly went from %v to %v", offset, newOffset)
- }
-
- pointer := offset
-
- if _, ok := offsets[pointer]; ok {
- delete(offsets, pointer)
- } else {
- return newInvalidDatabaseError("found data (%v) at %v that the search tree does not point to", data, pointer)
- }
-
- offset = newOffset
- }
-
- if offset != bufferLen {
- return newInvalidDatabaseError(
- "unexpected data at the end of the data section (last offset: %v, end: %v)",
- offset,
- bufferLen,
- )
- }
-
- if len(offsets) != 0 {
- return newInvalidDatabaseError(
- "found %v pointers (of %v) in the search tree that we did not see in the data section",
- len(offsets),
- pointerCount,
- )
- }
- return nil
-}
-
-func testError(
- field string,
- expected interface{},
- actual interface{},
-) error {
- return newInvalidDatabaseError(
- "%v - Expected: %v Actual: %v",
- field,
- expected,
- actual,
- )
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/internal.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/internal.go
deleted file mode 100644
index 3948b0e8..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/internal.go
+++ /dev/null
@@ -1,140 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-package dialer
-
-import (
- "net"
- "net/http"
- "net/url"
- "os"
- "strings"
- "time"
-
- "golang.org/x/net/proxy"
-
- "github.com/syncthing/syncthing/lib/logger"
- "github.com/syncthing/syncthing/lib/osutil"
-)
-
-var (
- l = logger.DefaultLogger.NewFacility("dialer", "Dialing connections")
- proxyDialer = getDialer(proxy.Direct)
- usingProxy = proxyDialer != proxy.Direct
-)
-
-type dialFunc func(network, addr string) (net.Conn, error)
-
-func init() {
- l.SetDebug("dialer", strings.Contains(os.Getenv("STTRACE"), "dialer") || os.Getenv("STTRACE") == "all")
- if usingProxy {
- http.DefaultTransport = &http.Transport{
- Dial: Dial,
- Proxy: http.ProxyFromEnvironment,
- TLSHandshakeTimeout: 10 * time.Second,
- }
-
- // Defer this, so that logging gets setup.
- go func() {
- time.Sleep(500 * time.Millisecond)
- l.Infoln("Proxy settings detected")
- }()
- } else {
- go func() {
- time.Sleep(500 * time.Millisecond)
- l.Debugln("Dialer logging disabled, as no proxy was detected")
- }()
- }
-}
-
-func dialWithFallback(proxyDialFunc dialFunc, fallbackDialFunc dialFunc, network, addr string) (net.Conn, error) {
- conn, err := proxyDialFunc(network, addr)
- if err == nil {
- l.Debugf("Dialing %s address %s via proxy - success, %s -> %s", network, addr, conn.LocalAddr(), conn.RemoteAddr())
- if tcpconn, ok := conn.(*net.TCPConn); ok {
- osutil.SetTCPOptions(tcpconn)
- }
- return dialerConn{
- conn, newDialerAddr(network, addr),
- }, nil
- }
- l.Debugf("Dialing %s address %s via proxy - error %s", network, addr, err)
-
- conn, err = fallbackDialFunc(network, addr)
- if err == nil {
- l.Debugf("Dialing %s address %s via fallback - success, %s -> %s", network, addr, conn.LocalAddr(), conn.RemoteAddr())
- if tcpconn, ok := conn.(*net.TCPConn); ok {
- osutil.SetTCPOptions(tcpconn)
- }
- } else {
- l.Debugf("Dialing %s address %s via fallback - error %s", network, addr, err)
- }
- return conn, err
-}
-
-// This is a rip off of proxy.FromEnvironment with a custom forward dialer
-func getDialer(forward proxy.Dialer) proxy.Dialer {
- allProxy := os.Getenv("all_proxy")
- if len(allProxy) == 0 {
- return forward
- }
-
- proxyURL, err := url.Parse(allProxy)
- if err != nil {
- return forward
- }
- prxy, err := proxy.FromURL(proxyURL, forward)
- if err != nil {
- return forward
- }
-
- noProxy := os.Getenv("no_proxy")
- if len(noProxy) == 0 {
- return prxy
- }
-
- perHost := proxy.NewPerHost(prxy, forward)
- perHost.AddFromString(noProxy)
- return perHost
-}
-
-type timeoutDirectDialer struct {
- timeout time.Duration
-}
-
-func (d *timeoutDirectDialer) Dial(network, addr string) (net.Conn, error) {
- return net.DialTimeout(network, addr, d.timeout)
-}
-
-type dialerConn struct {
- net.Conn
- addr net.Addr
-}
-
-func (c dialerConn) RemoteAddr() net.Addr {
- return c.addr
-}
-
-func newDialerAddr(network, addr string) net.Addr {
- netaddr, err := net.ResolveIPAddr(network, addr)
- if err == nil {
- return netaddr
- }
- return fallbackAddr{network, addr}
-}
-
-type fallbackAddr struct {
- network string
- addr string
-}
-
-func (a fallbackAddr) Network() string {
- return a.network
-}
-
-func (a fallbackAddr) String() string {
- return a.addr
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/public.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/public.go
deleted file mode 100644
index 4bf17c5b..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/dialer/public.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-package dialer
-
-import (
- "net"
- "time"
-)
-
-// Dial tries dialing via proxy if a proxy is configured, and falls back to
-// a direct connection if no proxy is defined, or connecting via proxy fails.
-func Dial(network, addr string) (net.Conn, error) {
- if usingProxy {
- return dialWithFallback(proxyDialer.Dial, net.Dial, network, addr)
- }
- return net.Dial(network, addr)
-}
-
-// DialTimeout tries dialing via proxy with a timeout if a proxy is configured,
-// and falls back to a direct connection if no proxy is defined, or connecting
-// via proxy fails. The timeout can potentially be applied twice, once trying
-// to connect via the proxy connection, and second time trying to connect
-// directly.
-func DialTimeout(network, addr string, timeout time.Duration) (net.Conn, error) {
- if usingProxy {
- // Because the proxy package is poorly structured, we have to
- // construct a struct that matches proxy.Dialer but has a timeout
- // and reconstrcut the proxy dialer using that, in order to be able to
- // set a timeout.
- dd := &timeoutDirectDialer{
- timeout: timeout,
- }
- // Check if the dialer we are getting is not timeoutDirectDialer we just
- // created. It could happen that usingProxy is true, but getDialer
- // returns timeoutDirectDialer due to env vars changing.
- if timeoutProxyDialer := getDialer(dd); timeoutProxyDialer != dd {
- directDialFunc := func(inetwork, iaddr string) (net.Conn, error) {
- return net.DialTimeout(inetwork, iaddr, timeout)
- }
- return dialWithFallback(timeoutProxyDialer.Dial, directDialFunc, network, addr)
- }
- }
- return net.DialTimeout(network, addr, timeout)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/LICENSE
deleted file mode 100644
index fa5b4e20..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (C) 2013 Jakob Borg
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/logger.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/logger.go
deleted file mode 100644
index 5b59a598..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/logger/logger.go
+++ /dev/null
@@ -1,385 +0,0 @@
-// Copyright (C) 2014 Jakob Borg. All rights reserved. Use of this source code
-// is governed by an MIT-style license that can be found in the LICENSE file.
-
-// Package logger implements a standardized logger with callback functionality
-package logger
-
-import (
- "fmt"
- "io/ioutil"
- "log"
- "os"
- "strings"
- "sync"
- "time"
-)
-
-// This package uses stdlib sync as it may be used to debug syncthing/lib/sync
-// and that would cause an implosion of the universe.
-
-type LogLevel int
-
-const (
- LevelDebug LogLevel = iota
- LevelVerbose
- LevelInfo
- LevelOK
- LevelWarn
- LevelFatal
- NumLevels
-)
-
-// A MessageHandler is called with the log level and message text.
-type MessageHandler func(l LogLevel, msg string)
-
-type Logger interface {
- AddHandler(level LogLevel, h MessageHandler)
- SetFlags(flag int)
- SetPrefix(prefix string)
- Debugln(vals ...interface{})
- Debugf(format string, vals ...interface{})
- Verboseln(vals ...interface{})
- Verbosef(format string, vals ...interface{})
- Infoln(vals ...interface{})
- Infof(format string, vals ...interface{})
- Okln(vals ...interface{})
- Okf(format string, vals ...interface{})
- Warnln(vals ...interface{})
- Warnf(format string, vals ...interface{})
- Fatalln(vals ...interface{})
- Fatalf(format string, vals ...interface{})
- ShouldDebug(facility string) bool
- SetDebug(facility string, enabled bool)
- Facilities() map[string]string
- FacilityDebugging() []string
- NewFacility(facility, description string) Logger
-}
-
-type logger struct {
- logger *log.Logger
- handlers [NumLevels][]MessageHandler
- facilities map[string]string // facility name => description
- debug map[string]bool // facility name => debugging enabled
- mut sync.Mutex
-}
-
-// DefaultLogger logs to standard output with a time prefix.
-var DefaultLogger = New()
-
-func New() Logger {
- if os.Getenv("LOGGER_DISCARD") != "" {
- // Hack to completely disable logging, for example when running benchmarks.
- return &logger{
- logger: log.New(ioutil.Discard, "", 0),
- }
- }
-
- return &logger{
- logger: log.New(os.Stdout, "", log.Ltime),
- }
-}
-
-// AddHandler registers a new MessageHandler to receive messages with the
-// specified log level or above.
-func (l *logger) AddHandler(level LogLevel, h MessageHandler) {
- l.mut.Lock()
- defer l.mut.Unlock()
- l.handlers[level] = append(l.handlers[level], h)
-}
-
-// See log.SetFlags
-func (l *logger) SetFlags(flag int) {
- l.logger.SetFlags(flag)
-}
-
-// See log.SetPrefix
-func (l *logger) SetPrefix(prefix string) {
- l.logger.SetPrefix(prefix)
-}
-
-func (l *logger) callHandlers(level LogLevel, s string) {
- for ll := LevelDebug; ll <= level; ll++ {
- for _, h := range l.handlers[ll] {
- h(level, strings.TrimSpace(s))
- }
- }
-}
-
-// Debugln logs a line with a DEBUG prefix.
-func (l *logger) Debugln(vals ...interface{}) {
- l.debugln(3, vals)
-}
-func (l *logger) debugln(level int, vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintln(vals...)
- l.logger.Output(level, "DEBUG: "+s)
- l.callHandlers(LevelDebug, s)
-}
-
-// Debugf logs a formatted line with a DEBUG prefix.
-func (l *logger) Debugf(format string, vals ...interface{}) {
- l.debugf(3, format, vals...)
-}
-func (l *logger) debugf(level int, format string, vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintf(format, vals...)
- l.logger.Output(level, "DEBUG: "+s)
- l.callHandlers(LevelDebug, s)
-}
-
-// Infoln logs a line with a VERBOSE prefix.
-func (l *logger) Verboseln(vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintln(vals...)
- l.logger.Output(2, "VERBOSE: "+s)
- l.callHandlers(LevelVerbose, s)
-}
-
-// Infof logs a formatted line with a VERBOSE prefix.
-func (l *logger) Verbosef(format string, vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintf(format, vals...)
- l.logger.Output(2, "VERBOSE: "+s)
- l.callHandlers(LevelVerbose, s)
-}
-
-// Infoln logs a line with an INFO prefix.
-func (l *logger) Infoln(vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintln(vals...)
- l.logger.Output(2, "INFO: "+s)
- l.callHandlers(LevelInfo, s)
-}
-
-// Infof logs a formatted line with an INFO prefix.
-func (l *logger) Infof(format string, vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintf(format, vals...)
- l.logger.Output(2, "INFO: "+s)
- l.callHandlers(LevelInfo, s)
-}
-
-// Okln logs a line with an OK prefix.
-func (l *logger) Okln(vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintln(vals...)
- l.logger.Output(2, "OK: "+s)
- l.callHandlers(LevelOK, s)
-}
-
-// Okf logs a formatted line with an OK prefix.
-func (l *logger) Okf(format string, vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintf(format, vals...)
- l.logger.Output(2, "OK: "+s)
- l.callHandlers(LevelOK, s)
-}
-
-// Warnln logs a formatted line with a WARNING prefix.
-func (l *logger) Warnln(vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintln(vals...)
- l.logger.Output(2, "WARNING: "+s)
- l.callHandlers(LevelWarn, s)
-}
-
-// Warnf logs a formatted line with a WARNING prefix.
-func (l *logger) Warnf(format string, vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintf(format, vals...)
- l.logger.Output(2, "WARNING: "+s)
- l.callHandlers(LevelWarn, s)
-}
-
-// Fatalln logs a line with a FATAL prefix and exits the process with exit
-// code 1.
-func (l *logger) Fatalln(vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintln(vals...)
- l.logger.Output(2, "FATAL: "+s)
- l.callHandlers(LevelFatal, s)
- os.Exit(1)
-}
-
-// Fatalf logs a formatted line with a FATAL prefix and exits the process with
-// exit code 1.
-func (l *logger) Fatalf(format string, vals ...interface{}) {
- l.mut.Lock()
- defer l.mut.Unlock()
- s := fmt.Sprintf(format, vals...)
- l.logger.Output(2, "FATAL: "+s)
- l.callHandlers(LevelFatal, s)
- os.Exit(1)
-}
-
-// ShouldDebug returns true if the given facility has debugging enabled.
-func (l *logger) ShouldDebug(facility string) bool {
- l.mut.Lock()
- res := l.debug[facility]
- l.mut.Unlock()
- return res
-}
-
-// SetDebug enabled or disables debugging for the given facility name.
-func (l *logger) SetDebug(facility string, enabled bool) {
- l.mut.Lock()
- l.debug[facility] = enabled
- l.mut.Unlock()
-}
-
-// FacilityDebugging returns the set of facilities that have debugging
-// enabled.
-func (l *logger) FacilityDebugging() []string {
- var enabled []string
- l.mut.Lock()
- for facility, isEnabled := range l.debug {
- if isEnabled {
- enabled = append(enabled, facility)
- }
- }
- l.mut.Unlock()
- return enabled
-}
-
-// Facilities returns the currently known set of facilities and their
-// descriptions.
-func (l *logger) Facilities() map[string]string {
- l.mut.Lock()
- res := make(map[string]string, len(l.facilities))
- for facility, descr := range l.facilities {
- res[facility] = descr
- }
- l.mut.Unlock()
- return res
-}
-
-// NewFacility returns a new logger bound to the named facility.
-func (l *logger) NewFacility(facility, description string) Logger {
- l.mut.Lock()
- if l.facilities == nil {
- l.facilities = make(map[string]string)
- }
- if description != "" {
- l.facilities[facility] = description
- }
-
- if l.debug == nil {
- l.debug = make(map[string]bool)
- }
- l.debug[facility] = false
- l.mut.Unlock()
-
- return &facilityLogger{
- logger: l,
- facility: facility,
- }
-}
-
-// A facilityLogger is a regular logger but bound to a facility name. The
-// Debugln and Debugf methods are no-ops unless debugging has been enabled for
-// this facility on the parent logger.
-type facilityLogger struct {
- *logger
- facility string
-}
-
-// Debugln logs a line with a DEBUG prefix.
-func (l *facilityLogger) Debugln(vals ...interface{}) {
- if !l.ShouldDebug(l.facility) {
- return
- }
- l.logger.debugln(3, vals...)
-}
-
-// Debugf logs a formatted line with a DEBUG prefix.
-func (l *facilityLogger) Debugf(format string, vals ...interface{}) {
- if !l.ShouldDebug(l.facility) {
- return
- }
- l.logger.debugf(3, format, vals...)
-}
-
-// A Recorder keeps a size limited record of log events.
-type Recorder struct {
- lines []Line
- initial int
- mut sync.Mutex
-}
-
-// A Line represents a single log entry.
-type Line struct {
- When time.Time `json:"when"`
- Message string `json:"message"`
-}
-
-func NewRecorder(l Logger, level LogLevel, size, initial int) *Recorder {
- r := &Recorder{
- lines: make([]Line, 0, size),
- initial: initial,
- }
- l.AddHandler(level, r.append)
- return r
-}
-
-func (r *Recorder) Since(t time.Time) []Line {
- r.mut.Lock()
- defer r.mut.Unlock()
-
- res := r.lines
- for i := 0; i < len(res) && res[i].When.Before(t); i++ {
- // nothing, just incrementing i
- }
- if len(res) == 0 {
- return nil
- }
-
- // We must copy the result as r.lines can be mutated as soon as the lock
- // is released.
- cp := make([]Line, len(res))
- copy(cp, res)
- return cp
-}
-
-func (r *Recorder) Clear() {
- r.mut.Lock()
- r.lines = r.lines[:0]
- r.mut.Unlock()
-}
-
-func (r *Recorder) append(l LogLevel, msg string) {
- line := Line{
- When: time.Now(),
- Message: msg,
- }
-
- r.mut.Lock()
- defer r.mut.Unlock()
-
- if len(r.lines) == cap(r.lines) {
- if r.initial > 0 {
- // Shift all lines one step to the left, keeping the "initial" first intact.
- copy(r.lines[r.initial+1:], r.lines[r.initial+2:])
- } else {
- copy(r.lines, r.lines[1:])
- }
- // Add the new one at the end
- r.lines[len(r.lines)-1] = line
- return
- }
-
- r.lines = append(r.lines, line)
- if len(r.lines) == r.initial {
- r.lines = append(r.lines, Line{time.Now(), "..."})
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/atomic.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/atomic.go
deleted file mode 100644
index 736d2f86..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/atomic.go
+++ /dev/null
@@ -1,104 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-package osutil
-
-import (
- "errors"
- "io/ioutil"
- "os"
- "path/filepath"
- "runtime"
-)
-
-var (
- ErrClosed = errors.New("write to closed writer")
- TempPrefix = ".syncthing.tmp."
-)
-
-// An AtomicWriter is an *os.File that writes to a temporary file in the same
-// directory as the final path. On successfull Close the file is renamed to
-// it's final path. Any error on Write or during Close is accumulated and
-// returned on Close, so a lazy user can ignore errors until Close.
-type AtomicWriter struct {
- path string
- next *os.File
- err error
-}
-
-// CreateAtomic is like os.Create with a FileMode, except a temporary file
-// name is used instead of the given name.
-func CreateAtomic(path string, mode os.FileMode) (*AtomicWriter, error) {
- fd, err := ioutil.TempFile(filepath.Dir(path), TempPrefix)
- if err != nil {
- return nil, err
- }
-
- // chmod fails on Android so don't even try
- if runtime.GOOS != "android" {
- if err := os.Chmod(fd.Name(), mode); err != nil {
- fd.Close()
- os.Remove(fd.Name())
- return nil, err
- }
- }
-
- w := &AtomicWriter{
- path: path,
- next: fd,
- }
-
- return w, nil
-}
-
-// Write is like io.Writer, but is a no-op on an already failed AtomicWriter.
-func (w *AtomicWriter) Write(bs []byte) (int, error) {
- if w.err != nil {
- return 0, w.err
- }
- n, err := w.next.Write(bs)
- if err != nil {
- w.err = err
- w.next.Close()
- }
- return n, err
-}
-
-// Close closes the temporary file and renames it to the final path. It is
-// invalid to call Write() or Close() after Close().
-func (w *AtomicWriter) Close() error {
- if w.err != nil {
- return w.err
- }
-
- // Try to not leave temp file around, but ignore error.
- defer os.Remove(w.next.Name())
-
- if err := w.next.Close(); err != nil {
- w.err = err
- return err
- }
-
- // Remove the destination file, on Windows only. If it fails, and not due
- // to the file not existing, we won't be able to complete the rename
- // either. Return this error because it may be more informative. On non-
- // Windows we want the atomic rename behavior so we don't attempt remove.
- if runtime.GOOS == "windows" {
- if err := os.Remove(w.path); err != nil && !os.IsNotExist(err) {
- return err
- }
- }
-
- if err := os.Rename(w.next.Name(), w.path); err != nil {
- w.err = err
- return err
- }
-
- // Set w.err to return appropriately for any future operations.
- w.err = ErrClosed
-
- return nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_darwin.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_darwin.go
deleted file mode 100644
index 10fa17f1..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_darwin.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2014 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-package osutil
-
-import "golang.org/x/text/unicode/norm"
-
-func NormalizedFilename(s string) string {
- return norm.NFC.String(s)
-}
-
-func NativeFilename(s string) string {
- return norm.NFD.String(s)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_unix.go
deleted file mode 100644
index 2fbbaa26..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_unix.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2014 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build !windows,!darwin
-
-package osutil
-
-import "golang.org/x/text/unicode/norm"
-
-func NormalizedFilename(s string) string {
- return norm.NFC.String(s)
-}
-
-func NativeFilename(s string) string {
- return s
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_windows.go
deleted file mode 100644
index 6bb9e333..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/filenames_windows.go
+++ /dev/null
@@ -1,21 +0,0 @@
-// Copyright (C) 2014 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-package osutil
-
-import (
- "path/filepath"
-
- "golang.org/x/text/unicode/norm"
-)
-
-func NormalizedFilename(s string) string {
- return norm.NFC.String(filepath.ToSlash(s))
-}
-
-func NativeFilename(s string) string {
- return filepath.FromSlash(s)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_unix.go
deleted file mode 100644
index 7270a269..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_unix.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build !windows
-
-package osutil
-
-import (
- "path/filepath"
-)
-
-func Glob(pattern string) (matches []string, err error) {
- return filepath.Glob(pattern)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_windows.go
deleted file mode 100644
index afb017c7..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/glob_windows.go
+++ /dev/null
@@ -1,93 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build windows
-
-package osutil
-
-import (
- "os"
- "path/filepath"
- "sort"
- "strings"
-)
-
-// Glob implements filepath.Glob, but works with Windows long path prefixes.
-// Deals with https://github.com/golang/go/issues/10577
-func Glob(pattern string) (matches []string, err error) {
- if !hasMeta(pattern) {
- if _, err = os.Lstat(pattern); err != nil {
- return nil, nil
- }
- return []string{pattern}, nil
- }
-
- dir, file := filepath.Split(pattern)
- switch dir {
- case "":
- dir = "."
- case string(filepath.Separator):
- // nothing
- default:
- dir = dir[0 : len(dir)-1] // chop off trailing separator
- }
-
- if !hasMeta(dir) {
- return glob(dir, file, nil)
- }
-
- var m []string
- m, err = Glob(dir)
- if err != nil {
- return
- }
- for _, d := range m {
- matches, err = glob(d, file, matches)
- if err != nil {
- return
- }
- }
- return
-}
-
-func hasMeta(path string) bool {
- // Strip off Windows long path prefix if it exists.
- if strings.HasPrefix(path, "\\\\?\\") {
- path = path[4:]
- }
- // TODO(niemeyer): Should other magic characters be added here?
- return strings.IndexAny(path, "*?[") >= 0
-}
-
-func glob(dir, pattern string, matches []string) (m []string, e error) {
- m = matches
- fi, err := os.Stat(dir)
- if err != nil {
- return
- }
- if !fi.IsDir() {
- return
- }
- d, err := os.Open(dir)
- if err != nil {
- return
- }
- defer d.Close()
-
- names, _ := d.Readdirnames(-1)
- sort.Strings(names)
-
- for _, n := range names {
- matched, err := filepath.Match(pattern, n)
- if err != nil {
- return m, err
- }
- if matched {
- m = append(m, filepath.Join(dir, n))
- }
- }
- return
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_unix.go
deleted file mode 100644
index b0d7ee47..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_unix.go
+++ /dev/null
@@ -1,19 +0,0 @@
-// Copyright (C) 2014 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build !windows
-
-package osutil
-
-func HideFile(path string) error {
- return nil
-}
-
-func ShowFile(path string) error {
- return nil
-}
-
-func HideConsole() {}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_windows.go
deleted file mode 100644
index 45ce48b8..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/hidden_windows.go
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (C) 2014 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build windows
-
-package osutil
-
-import "syscall"
-
-func HideFile(path string) error {
- p, err := syscall.UTF16PtrFromString(path)
- if err != nil {
- return err
- }
-
- attrs, err := syscall.GetFileAttributes(p)
- if err != nil {
- return err
- }
-
- attrs |= syscall.FILE_ATTRIBUTE_HIDDEN
- return syscall.SetFileAttributes(p, attrs)
-}
-
-func ShowFile(path string) error {
- p, err := syscall.UTF16PtrFromString(path)
- if err != nil {
- return err
- }
-
- attrs, err := syscall.GetFileAttributes(p)
- if err != nil {
- return err
- }
-
- attrs &^= syscall.FILE_ATTRIBUTE_HIDDEN
- return syscall.SetFileAttributes(p, attrs)
-}
-
-func HideConsole() {
- getConsoleWindow := syscall.NewLazyDLL("kernel32.dll").NewProc("GetConsoleWindow")
- showWindow := syscall.NewLazyDLL("user32.dll").NewProc("ShowWindow")
- if getConsoleWindow.Find() == nil && showWindow.Find() == nil {
- hwnd, _, _ := getConsoleWindow.Call()
- if hwnd != 0 {
- showWindow.Call(hwnd, 0)
- }
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_unix.go
deleted file mode 100644
index 0f9881ea..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_unix.go
+++ /dev/null
@@ -1,30 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build !windows
-
-package osutil
-
-import (
- "net"
-)
-
-func GetLans() ([]*net.IPNet, error) {
- addrs, err := net.InterfaceAddrs()
- if err != nil {
- return nil, err
- }
-
- nets := make([]*net.IPNet, 0, len(addrs))
-
- for _, addr := range addrs {
- net, ok := addr.(*net.IPNet)
- if ok {
- nets = append(nets, net)
- }
- }
- return nets, nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_windows.go
deleted file mode 100644
index e02c46b9..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lan_windows.go
+++ /dev/null
@@ -1,83 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build windows
-
-package osutil
-
-import (
- "net"
- "os"
- "strings"
- "syscall"
- "unsafe"
-)
-
-// Modified version of:
-// http://stackoverflow.com/questions/23529663/how-to-get-all-addresses-and-masks-from-local-interfaces-in-go
-// v4 only!
-
-func getAdapterList() (*syscall.IpAdapterInfo, error) {
- b := make([]byte, 10240)
- l := uint32(len(b))
- a := (*syscall.IpAdapterInfo)(unsafe.Pointer(&b[0]))
- // TODO(mikio): GetAdaptersInfo returns IP_ADAPTER_INFO that
- // contains IPv4 address list only. We should use another API
- // for fetching IPv6 stuff from the kernel.
- err := syscall.GetAdaptersInfo(a, &l)
- if err == syscall.ERROR_BUFFER_OVERFLOW {
- b = make([]byte, l)
- a = (*syscall.IpAdapterInfo)(unsafe.Pointer(&b[0]))
- err = syscall.GetAdaptersInfo(a, &l)
- }
- if err != nil {
- return nil, os.NewSyscallError("GetAdaptersInfo", err)
- }
- return a, nil
-}
-
-func GetLans() ([]*net.IPNet, error) {
- ifaces, err := net.Interfaces()
- if err != nil {
- return nil, err
- }
-
- nets := make([]*net.IPNet, 0, len(ifaces))
-
- aList, err := getAdapterList()
- if err != nil {
- return nil, err
- }
-
- for _, ifi := range ifaces {
- for ai := aList; ai != nil; ai = ai.Next {
- index := ai.Index
-
- if ifi.Index == int(index) {
- ipl := &ai.IpAddressList
- for ; ipl != nil; ipl = ipl.Next {
- ipStr := strings.Trim(string(ipl.IpAddress.String[:]), "\x00")
- maskStr := strings.Trim(string(ipl.IpMask.String[:]), "\x00")
- ip := net.ParseIP(ipStr)
- maskip := net.ParseIP(maskStr)
- if ip.IsUnspecified() || maskip.IsUnspecified() {
- continue
- }
- nets = append(nets, &net.IPNet{
- IP: ip,
- Mask: net.IPv4Mask(
- maskip[net.IPv6len-net.IPv4len],
- maskip[net.IPv6len-net.IPv4len+1],
- maskip[net.IPv6len-net.IPv4len+2],
- maskip[net.IPv6len-net.IPv4len+3],
- ),
- })
- }
- }
- }
- }
- return nets, err
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_broken.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_broken.go
deleted file mode 100644
index 11a20b1c..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_broken.go
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build linux android
-
-package osutil
-
-import (
- "os"
- "syscall"
- "time"
-)
-
-// Lstat is like os.Lstat, except lobotomized for Android. See
-// https://forum.syncthing.net/t/2395
-func Lstat(name string) (fi os.FileInfo, err error) {
- for i := 0; i < 10; i++ { // We have to draw the line somewhere
- fi, err = os.Lstat(name)
- if err, ok := err.(*os.PathError); ok && err.Err == syscall.EINTR {
- time.Sleep(time.Duration(i+1) * time.Millisecond)
- continue
- }
- return
- }
- return
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_ok.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_ok.go
deleted file mode 100644
index 770e18f5..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/lstat_ok.go
+++ /dev/null
@@ -1,15 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build !linux,!android
-
-package osutil
-
-import "os"
-
-func Lstat(name string) (fi os.FileInfo, err error) {
- return os.Lstat(name)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall.go
deleted file mode 100644
index cba93d05..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build !windows
-
-package osutil
-
-import (
- "os"
-)
-
-func MkdirAll(path string, perm os.FileMode) error {
- return os.MkdirAll(path, perm)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall_windows.go
deleted file mode 100644
index 76263277..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/mkdirall_windows.go
+++ /dev/null
@@ -1,65 +0,0 @@
-// Copyright 2009 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.
-
-// Modified by Zillode to fix https://github.com/syncthing/syncthing/issues/1822
-// Sync with https://github.com/golang/go/blob/master/src/os/path.go
-// See https://github.com/golang/go/issues/10900
-
-package osutil
-
-import (
- "os"
- "path/filepath"
- "syscall"
-)
-
-// MkdirAll creates a directory named path, along with any necessary parents,
-// and returns nil, or else returns an error.
-// The permission bits perm are used for all directories that MkdirAll creates.
-// If path is already a directory, MkdirAll does nothing and returns nil.
-func MkdirAll(path string, perm os.FileMode) error {
- // Fast path: if we can tell whether path is a directory or file, stop with success or error.
- dir, err := os.Stat(path)
- if err == nil {
- if dir.IsDir() {
- return nil
- }
- return &os.PathError{"mkdir", path, syscall.ENOTDIR}
- }
-
- // Slow path: make sure parent exists and then call Mkdir for path.
- i := len(path)
- for i > 0 && os.IsPathSeparator(path[i-1]) { // Skip trailing path separator.
- i--
- }
-
- j := i
- for j > 0 && !os.IsPathSeparator(path[j-1]) { // Scan backward over element.
- j--
- }
-
- if j > 1 {
- // Create parent
- parent := path[0 : j-1]
- if parent != filepath.VolumeName(parent) {
- err = MkdirAll(parent, perm)
- if err != nil {
- return err
- }
- }
- }
-
- // Parent now exists; invoke Mkdir and use its result.
- err = os.Mkdir(path, perm)
- if err != nil {
- // Handle arguments like "foo/." by
- // double-checking that directory doesn't exist.
- dir, err1 := os.Lstat(path)
- if err1 == nil && dir.IsDir() {
- return nil
- }
- return err
- }
- return nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/osutil.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/osutil.go
deleted file mode 100644
index f4e15885..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/osutil.go
+++ /dev/null
@@ -1,243 +0,0 @@
-// Copyright (C) 2014 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// Package osutil implements utilities for native OS support.
-package osutil
-
-import (
- "errors"
- "fmt"
- "io"
- "net"
- "os"
- "path/filepath"
- "runtime"
- "strings"
- "time"
-
- "github.com/calmh/du"
- "github.com/syncthing/syncthing/lib/sync"
-)
-
-var ErrNoHome = errors.New("No home directory found - set $HOME (or the platform equivalent).")
-
-// Try to keep this entire operation atomic-like. We shouldn't be doing this
-// often enough that there is any contention on this lock.
-var renameLock = sync.NewMutex()
-
-// TryRename renames a file, leaving source file intact in case of failure.
-// Tries hard to succeed on various systems by temporarily tweaking directory
-// permissions and removing the destination file when necessary.
-func TryRename(from, to string) error {
- renameLock.Lock()
- defer renameLock.Unlock()
-
- return withPreparedTarget(from, to, func() error {
- return os.Rename(from, to)
- })
-}
-
-// Rename moves a temporary file to it's final place.
-// Will make sure to delete the from file if the operation fails, so use only
-// for situations like committing a temp file to it's final location.
-// Tries hard to succeed on various systems by temporarily tweaking directory
-// permissions and removing the destination file when necessary.
-func Rename(from, to string) error {
- // Don't leave a dangling temp file in case of rename error
- if !(runtime.GOOS == "windows" && strings.EqualFold(from, to)) {
- defer os.Remove(from)
- }
- return TryRename(from, to)
-}
-
-// Copy copies the file content from source to destination.
-// Tries hard to succeed on various systems by temporarily tweaking directory
-// permissions and removing the destination file when necessary.
-func Copy(from, to string) (err error) {
- return withPreparedTarget(from, to, func() error {
- return copyFileContents(from, to)
- })
-}
-
-// InWritableDir calls fn(path), while making sure that the directory
-// containing `path` is writable for the duration of the call.
-func InWritableDir(fn func(string) error, path string) error {
- dir := filepath.Dir(path)
- info, err := os.Stat(dir)
- if err != nil {
- return err
- }
- if !info.IsDir() {
- return errors.New("Not a directory: " + path)
- }
- if info.Mode()&0200 == 0 {
- // A non-writeable directory (for this user; we assume that's the
- // relevant part). Temporarily change the mode so we can delete the
- // file or directory inside it.
- err = os.Chmod(dir, 0755)
- if err == nil {
- defer func() {
- err = os.Chmod(dir, info.Mode())
- if err != nil {
- // We managed to change the permission bits like a
- // millisecond ago, so it'd be bizarre if we couldn't
- // change it back.
- panic(err)
- }
- }()
- }
- }
-
- return fn(path)
-}
-
-// Remove removes the given path. On Windows, removes the read-only attribute
-// from the target prior to deletion.
-func Remove(path string) error {
- if runtime.GOOS == "windows" {
- info, err := os.Stat(path)
- if err != nil {
- return err
- }
- if info.Mode()&0200 == 0 {
- os.Chmod(path, 0700)
- }
- }
- return os.Remove(path)
-}
-
-func ExpandTilde(path string) (string, error) {
- if path == "~" {
- return getHomeDir()
- }
-
- path = filepath.FromSlash(path)
- if !strings.HasPrefix(path, fmt.Sprintf("~%c", os.PathSeparator)) {
- return path, nil
- }
-
- home, err := getHomeDir()
- if err != nil {
- return "", err
- }
- return filepath.Join(home, path[2:]), nil
-}
-
-func getHomeDir() (string, error) {
- var home string
-
- switch runtime.GOOS {
- case "windows":
- home = filepath.Join(os.Getenv("HomeDrive"), os.Getenv("HomePath"))
- if home == "" {
- home = os.Getenv("UserProfile")
- }
- default:
- home = os.Getenv("HOME")
- }
-
- if home == "" {
- return "", ErrNoHome
- }
-
- return home, nil
-}
-
-// Tries hard to succeed on various systems by temporarily tweaking directory
-// permissions and removing the destination file when necessary.
-func withPreparedTarget(from, to string, f func() error) error {
- // Make sure the destination directory is writeable
- toDir := filepath.Dir(to)
- if info, err := os.Stat(toDir); err == nil && info.IsDir() && info.Mode()&0200 == 0 {
- os.Chmod(toDir, 0755)
- defer os.Chmod(toDir, info.Mode())
- }
-
- // On Windows, make sure the destination file is writeable (or we can't delete it)
- if runtime.GOOS == "windows" {
- os.Chmod(to, 0666)
- if !strings.EqualFold(from, to) {
- err := os.Remove(to)
- if err != nil && !os.IsNotExist(err) {
- return err
- }
- }
- }
- return f()
-}
-
-// copyFileContents copies the contents of the file named src to the file named
-// by dst. The file will be created if it does not already exist. If the
-// destination file exists, all it's contents will be replaced by the contents
-// of the source file.
-func copyFileContents(src, dst string) (err error) {
- in, err := os.Open(src)
- if err != nil {
- return
- }
- defer in.Close()
- out, err := os.Create(dst)
- if err != nil {
- return
- }
- defer func() {
- cerr := out.Close()
- if err == nil {
- err = cerr
- }
- }()
- if _, err = io.Copy(out, in); err != nil {
- return
- }
- err = out.Sync()
- return
-}
-
-var execExts map[string]bool
-
-func init() {
- // PATHEXT contains a list of executable file extensions, on Windows
- pathext := filepath.SplitList(os.Getenv("PATHEXT"))
- // We want the extensions in execExts to be lower case
- execExts = make(map[string]bool, len(pathext))
- for _, ext := range pathext {
- execExts[strings.ToLower(ext)] = true
- }
-}
-
-// IsWindowsExecutable returns true if the given path has an extension that is
-// in the list of executable extensions.
-func IsWindowsExecutable(path string) bool {
- return execExts[strings.ToLower(filepath.Ext(path))]
-}
-
-func DiskFreeBytes(path string) (free int64, err error) {
- u, err := du.Get(path)
- return u.FreeBytes, err
-}
-
-func DiskFreePercentage(path string) (freePct float64, err error) {
- u, err := du.Get(path)
- return (float64(u.FreeBytes) / float64(u.TotalBytes)) * 100, err
-}
-
-// SetTCPOptions sets syncthings default TCP options on a TCP connection
-func SetTCPOptions(conn *net.TCPConn) error {
- var err error
- if err = conn.SetLinger(0); err != nil {
- return err
- }
- if err = conn.SetNoDelay(false); err != nil {
- return err
- }
- if err = conn.SetKeepAlivePeriod(60 * time.Second); err != nil {
- return err
- }
- if err = conn.SetKeepAlive(true); err != nil {
- return err
- }
- return nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/ping.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/ping.go
deleted file mode 100644
index 743da5f7..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/ping.go
+++ /dev/null
@@ -1,39 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-package osutil
-
-import (
- "net"
- "net/url"
- "time"
-)
-
-// TCPPing returns the duration required to establish a TCP connection
-// to the given host. ICMP packets require root priviledges, hence why we use
-// tcp.
-func TCPPing(address string) (time.Duration, error) {
- dialer := net.Dialer{
- Deadline: time.Now().Add(time.Second),
- }
- start := time.Now()
- conn, err := dialer.Dial("tcp", address)
- if conn != nil {
- conn.Close()
- }
- return time.Since(start), err
-}
-
-// GetLatencyForURL parses the given URL, tries opening a TCP connection to it
-// and returns the time it took to establish the connection.
-func GetLatencyForURL(addr string) (time.Duration, error) {
- uri, err := url.Parse(addr)
- if err != nil {
- return 0, err
- }
-
- return TCPPing(uri.Host)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/replacingwriter.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/replacingwriter.go
deleted file mode 100644
index af47b140..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/replacingwriter.go
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright (C) 2014 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-package osutil
-
-import (
- "bytes"
- "io"
-)
-
-type ReplacingWriter struct {
- Writer io.Writer
- From byte
- To []byte
-}
-
-func (w ReplacingWriter) Write(bs []byte) (int, error) {
- var n, written int
- var err error
-
- newlineIdx := bytes.IndexByte(bs, w.From)
- for newlineIdx >= 0 {
- n, err = w.Writer.Write(bs[:newlineIdx])
- written += n
- if err != nil {
- break
- }
- if len(w.To) > 0 {
- n, err := w.Writer.Write(w.To)
- if n == len(w.To) {
- written++
- }
- if err != nil {
- break
- }
- }
- bs = bs[newlineIdx+1:]
- newlineIdx = bytes.IndexByte(bs, w.From)
- }
-
- n, err = w.Writer.Write(bs)
- written += n
-
- return written, err
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_unix.go
deleted file mode 100644
index 85147a8c..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_unix.go
+++ /dev/null
@@ -1,47 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build !windows
-
-package osutil
-
-import "syscall"
-
-// MaximizeOpenFileLimit tries to set the resoure limit RLIMIT_NOFILE (number
-// of open file descriptors) to the max (hard limit), if the current (soft
-// limit) is below the max. Returns the new (though possibly unchanged) limit,
-// or an error if it was could not be changed.
-func MaximizeOpenFileLimit() (int, error) {
- // Get the current limit on number of open files.
- var lim syscall.Rlimit
- if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &lim); err != nil {
- return 0, err
- }
-
- // If we're already at max, there's no need to try to raise the limit.
- if lim.Cur >= lim.Max {
- return int(lim.Cur), nil
- }
-
- // Try to increase the limit to the max.
- oldLimit := lim.Cur
- lim.Cur = lim.Max
- if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &lim); err != nil {
- return int(oldLimit), err
- }
-
- // If the set succeeded, perform a new get to see what happened. We might
- // have gotten a value lower than the one in lim.Max, if lim.Max was
- // something that indiciated "unlimited" (i.e. intmax).
- if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &lim); err != nil {
- // We don't really know the correct value here since Getrlimit
- // mysteriously failed after working once... Shouldn't ever happen, I
- // think.
- return 0, err
- }
-
- return int(lim.Cur), nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_windows.go
deleted file mode 100644
index df1c78c5..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/osutil/rlimit_windows.go
+++ /dev/null
@@ -1,17 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-// +build windows
-
-package osutil
-
-import (
- "errors"
-)
-
-func MaximizeOpenFileLimit() (int, error) {
- return 0, errors.New("not relevant on Windows")
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/AUTHORS b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/AUTHORS
deleted file mode 100644
index d84404ee..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/AUTHORS
+++ /dev/null
@@ -1,4 +0,0 @@
-# This is the official list of Protocol Authors for copyright purposes.
-
-Audrius Butkevicius
-Jakob Borg
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/CONTRIBUTING.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/CONTRIBUTING.md
deleted file mode 100644
index 67e6a9c7..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/CONTRIBUTING.md
+++ /dev/null
@@ -1,76 +0,0 @@
-## Reporting Bugs
-
-Please file bugs in the [Github Issue
-Tracker](https://github.com/syncthing/protocol/issues).
-
-## Contributing Code
-
-Every contribution is welcome. Following the points below will make this
-a smoother process.
-
-Individuals making significant and valuable contributions are given
-commit-access to the project. If you make a significant contribution and
-are not considered for commit-access, please contact any of the
-Syncthing core team members.
-
-All nontrivial contributions should go through the pull request
-mechanism for internal review. Determining what is "nontrivial" is left
-at the discretion of the contributor.
-
-### Authorship
-
-All code authors are listed in the AUTHORS file. Commits must be made
-with the same name and email as listed in the AUTHORS file. To
-accomplish this, ensure that your git configuration is set correctly
-prior to making your first commit;
-
- $ git config --global user.name "Jane Doe"
- $ git config --global user.email janedoe@example.com
-
-You must be reachable on the given email address. If you do not wish to
-use your real name for whatever reason, using a nickname or pseudonym is
-perfectly acceptable.
-
-## Coding Style
-
-- Follow the conventions laid out in [Effective Go](https://golang.org/doc/effective_go.html)
- as much as makes sense.
-
-- All text files use Unix line endings.
-
-- Each commit should be `go fmt` clean.
-
-- The commit message subject should be a single short sentence
- describing the change, starting with a capital letter.
-
-- Commits that resolve an existing issue must include the issue number
- as `(fixes #123)` at the end of the commit message subject.
-
-- Imports are grouped per `goimports` standard; that is, standard
- library first, then third party libraries after a blank line.
-
-- A contribution solving a single issue or introducing a single new
- feature should probably be a single commit based on the current
- `master` branch. You may be asked to "rebase" or "squash" your pull
- request to make sure this is the case, especially if there have been
- amendments during review.
-
-## Licensing
-
-All contributions are made under the same MIT license as the rest of the
-project, except documentation, user interface text and translation
-strings which are licensed under the Creative Commons Attribution 4.0
-International License. You retain the copyright to code you have
-written.
-
-When accepting your first contribution, the maintainer of the project
-will ensure that you are added to the AUTHORS file. You are welcome to
-add yourself as a separate commit in your first pull request.
-
-## Tests
-
-Yes please!
-
-## License
-
-MIT
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/LICENSE b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/LICENSE
deleted file mode 100644
index 6f6960a7..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/LICENSE
+++ /dev/null
@@ -1,19 +0,0 @@
-Copyright (C) 2014-2015 The Protocol Authors
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-- The above copyright notice and this permission notice shall be included in
- all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/README.md b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/README.md
deleted file mode 100644
index bcba44b4..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/README.md
+++ /dev/null
@@ -1,13 +0,0 @@
-The BEPv1 Protocol
-==================
-
-[](http://build.syncthing.net/job/protocol/lastBuild/)
-[](http://godoc.org/github.com/syncthing/protocol)
-[](http://opensource.org/licenses/MIT)
-
-This is the protocol implementation used by Syncthing.
-
-License
-=======
-
-MIT
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/compression.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/compression.go
deleted file mode 100644
index 9e17213b..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/compression.go
+++ /dev/null
@@ -1,53 +0,0 @@
-// Copyright (C) 2015 The Protocol Authors.
-
-package protocol
-
-import "fmt"
-
-type Compression int
-
-const (
- CompressMetadata Compression = iota // zero value is the default, default should be "metadata"
- CompressNever
- CompressAlways
-
- compressionThreshold = 128 // don't bother compressing messages smaller than this many bytes
-)
-
-var compressionMarshal = map[Compression]string{
- CompressNever: "never",
- CompressMetadata: "metadata",
- CompressAlways: "always",
-}
-
-var compressionUnmarshal = map[string]Compression{
- // Legacy
- "false": CompressNever,
- "true": CompressMetadata,
-
- // Current
- "never": CompressNever,
- "metadata": CompressMetadata,
- "always": CompressAlways,
-}
-
-func (c Compression) String() string {
- s, ok := compressionMarshal[c]
- if !ok {
- return fmt.Sprintf("unknown:%d", c)
- }
- return s
-}
-
-func (c Compression) GoString() string {
- return fmt.Sprintf("%q", c.String())
-}
-
-func (c Compression) MarshalText() ([]byte, error) {
- return []byte(compressionMarshal[c]), nil
-}
-
-func (c *Compression) UnmarshalText(bs []byte) error {
- *c = compressionUnmarshal[string(bs)]
- return nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/counting.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/counting.go
deleted file mode 100644
index d441ed31..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/counting.go
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-package protocol
-
-import (
- "io"
- "sync/atomic"
- "time"
-)
-
-type countingReader struct {
- io.Reader
- tot int64 // bytes
- last int64 // unix nanos
-}
-
-var (
- totalIncoming int64
- totalOutgoing int64
-)
-
-func (c *countingReader) Read(bs []byte) (int, error) {
- n, err := c.Reader.Read(bs)
- atomic.AddInt64(&c.tot, int64(n))
- atomic.AddInt64(&totalIncoming, int64(n))
- atomic.StoreInt64(&c.last, time.Now().UnixNano())
- return n, err
-}
-
-func (c *countingReader) Tot() int64 {
- return atomic.LoadInt64(&c.tot)
-}
-
-func (c *countingReader) Last() time.Time {
- return time.Unix(0, atomic.LoadInt64(&c.last))
-}
-
-type countingWriter struct {
- io.Writer
- tot int64 // bytes
- last int64 // unix nanos
-}
-
-func (c *countingWriter) Write(bs []byte) (int, error) {
- n, err := c.Writer.Write(bs)
- atomic.AddInt64(&c.tot, int64(n))
- atomic.AddInt64(&totalOutgoing, int64(n))
- atomic.StoreInt64(&c.last, time.Now().UnixNano())
- return n, err
-}
-
-func (c *countingWriter) Tot() int64 {
- return atomic.LoadInt64(&c.tot)
-}
-
-func (c *countingWriter) Last() time.Time {
- return time.Unix(0, atomic.LoadInt64(&c.last))
-}
-
-func TotalInOut() (int64, int64) {
- return atomic.LoadInt64(&totalIncoming), atomic.LoadInt64(&totalOutgoing)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/debug.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/debug.go
deleted file mode 100644
index 717445f7..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/debug.go
+++ /dev/null
@@ -1,22 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-package protocol
-
-import (
- "os"
- "strings"
-
- "github.com/syncthing/syncthing/lib/logger"
-)
-
-var (
- l = logger.DefaultLogger.NewFacility("protocol", "The BEP protocol")
-)
-
-func init() {
- l.SetDebug("protocol", strings.Contains(os.Getenv("STTRACE"), "protocol") || os.Getenv("STTRACE") == "all")
-}
-
-func shouldDebug() bool {
- return l.ShouldDebug("protocol")
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/deviceid.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/deviceid.go
deleted file mode 100644
index 2e0334a6..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/deviceid.go
+++ /dev/null
@@ -1,163 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-package protocol
-
-import (
- "bytes"
- "crypto/sha256"
- "encoding/base32"
- "encoding/binary"
- "errors"
- "fmt"
- "regexp"
- "strings"
-
- "github.com/calmh/luhn"
-)
-
-type DeviceID [32]byte
-
-var LocalDeviceID = DeviceID{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}
-
-// NewDeviceID generates a new device ID from the raw bytes of a certificate
-func NewDeviceID(rawCert []byte) DeviceID {
- var n DeviceID
- hf := sha256.New()
- hf.Write(rawCert)
- hf.Sum(n[:0])
- return n
-}
-
-func DeviceIDFromString(s string) (DeviceID, error) {
- var n DeviceID
- err := n.UnmarshalText([]byte(s))
- return n, err
-}
-
-func DeviceIDFromBytes(bs []byte) DeviceID {
- var n DeviceID
- if len(bs) != len(n) {
- panic("incorrect length of byte slice representing device ID")
- }
- copy(n[:], bs)
- return n
-}
-
-// String returns the canonical string representation of the device ID
-func (n DeviceID) String() string {
- id := base32.StdEncoding.EncodeToString(n[:])
- id = strings.Trim(id, "=")
- id, err := luhnify(id)
- if err != nil {
- // Should never happen
- panic(err)
- }
- id = chunkify(id)
- return id
-}
-
-func (n DeviceID) GoString() string {
- return n.String()
-}
-
-func (n DeviceID) Compare(other DeviceID) int {
- return bytes.Compare(n[:], other[:])
-}
-
-func (n DeviceID) Equals(other DeviceID) bool {
- return bytes.Compare(n[:], other[:]) == 0
-}
-
-// Short returns an integer representing bits 0-63 of the device ID.
-func (n DeviceID) Short() uint64 {
- return binary.BigEndian.Uint64(n[:])
-}
-
-func (n *DeviceID) MarshalText() ([]byte, error) {
- return []byte(n.String()), nil
-}
-
-func (n *DeviceID) UnmarshalText(bs []byte) error {
- id := string(bs)
- id = strings.Trim(id, "=")
- id = strings.ToUpper(id)
- id = untypeoify(id)
- id = unchunkify(id)
-
- var err error
- switch len(id) {
- case 56:
- // New style, with check digits
- id, err = unluhnify(id)
- if err != nil {
- return err
- }
- fallthrough
- case 52:
- // Old style, no check digits
- dec, err := base32.StdEncoding.DecodeString(id + "====")
- if err != nil {
- return err
- }
- copy(n[:], dec)
- return nil
- default:
- return errors.New("device ID invalid: incorrect length")
- }
-}
-
-func luhnify(s string) (string, error) {
- if len(s) != 52 {
- panic("unsupported string length")
- }
-
- res := make([]string, 0, 4)
- for i := 0; i < 4; i++ {
- p := s[i*13 : (i+1)*13]
- l, err := luhn.Base32.Generate(p)
- if err != nil {
- return "", err
- }
- res = append(res, fmt.Sprintf("%s%c", p, l))
- }
- return res[0] + res[1] + res[2] + res[3], nil
-}
-
-func unluhnify(s string) (string, error) {
- if len(s) != 56 {
- return "", fmt.Errorf("unsupported string length %d", len(s))
- }
-
- res := make([]string, 0, 4)
- for i := 0; i < 4; i++ {
- p := s[i*14 : (i+1)*14-1]
- l, err := luhn.Base32.Generate(p)
- if err != nil {
- return "", err
- }
- if g := fmt.Sprintf("%s%c", p, l); g != s[i*14:(i+1)*14] {
- return "", errors.New("check digit incorrect")
- }
- res = append(res, p)
- }
- return res[0] + res[1] + res[2] + res[3], nil
-}
-
-func chunkify(s string) string {
- s = regexp.MustCompile("(.{7})").ReplaceAllString(s, "$1-")
- s = strings.Trim(s, "-")
- return s
-}
-
-func unchunkify(s string) string {
- s = strings.Replace(s, "-", "", -1)
- s = strings.Replace(s, " ", "", -1)
- return s
-}
-
-func untypeoify(s string) string {
- s = strings.Replace(s, "0", "O", -1)
- s = strings.Replace(s, "1", "I", -1)
- s = strings.Replace(s, "8", "B", -1)
- return s
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/doc.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/doc.go
deleted file mode 100644
index 2c6ea8ef..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/doc.go
+++ /dev/null
@@ -1,4 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-// Package protocol implements the Block Exchange Protocol.
-package protocol
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/errors.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/errors.go
deleted file mode 100644
index 62df8acc..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/errors.go
+++ /dev/null
@@ -1,51 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-package protocol
-
-import (
- "errors"
-)
-
-const (
- ecNoError int32 = iota
- ecGeneric
- ecNoSuchFile
- ecInvalid
-)
-
-var (
- ErrNoError error
- ErrGeneric = errors.New("generic error")
- ErrNoSuchFile = errors.New("no such file")
- ErrInvalid = errors.New("file is invalid")
-)
-
-var lookupError = map[int32]error{
- ecNoError: ErrNoError,
- ecGeneric: ErrGeneric,
- ecNoSuchFile: ErrNoSuchFile,
- ecInvalid: ErrInvalid,
-}
-
-var lookupCode = map[error]int32{
- ErrNoError: ecNoError,
- ErrGeneric: ecGeneric,
- ErrNoSuchFile: ecNoSuchFile,
- ErrInvalid: ecInvalid,
-}
-
-func codeToError(errcode int32) error {
- err, ok := lookupError[errcode]
- if !ok {
- return ErrGeneric
- }
- return err
-}
-
-func errorToCode(err error) int32 {
- code, ok := lookupCode[err]
- if !ok {
- return ecGeneric
- }
- return code
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/fuzz.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/fuzz.go
deleted file mode 100644
index 9b82abe7..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/fuzz.go
+++ /dev/null
@@ -1,70 +0,0 @@
-// Copyright (C) 2015 The Protocol Authors.
-
-// +build gofuzz
-
-package protocol
-
-import (
- "bytes"
- "encoding/binary"
- "encoding/hex"
- "fmt"
- "reflect"
- "sync"
-)
-
-func Fuzz(data []byte) int {
- // Regenerate the length, or we'll most commonly exit quickly due to an
- // unexpected eof which is unintestering.
- if len(data) > 8 {
- binary.BigEndian.PutUint32(data[4:], uint32(len(data))-8)
- }
-
- // Setup a rawConnection we'll use to parse the message.
- c := rawConnection{
- cr: &countingReader{Reader: bytes.NewReader(data)},
- closed: make(chan struct{}),
- pool: sync.Pool{
- New: func() interface{} {
- return make([]byte, BlockSize)
- },
- },
- }
-
- // Attempt to parse the message.
- hdr, msg, err := c.readMessage()
- if err != nil {
- return 0
- }
-
- // If parsing worked, attempt to encode it again.
- newBs, err := msg.AppendXDR(nil)
- if err != nil {
- panic("not encodable")
- }
-
- // Create an appriate header for the re-encoding.
- newMsg := make([]byte, 8)
- binary.BigEndian.PutUint32(newMsg, encodeHeader(hdr))
- binary.BigEndian.PutUint32(newMsg[4:], uint32(len(newBs)))
- newMsg = append(newMsg, newBs...)
-
- // Use the rawConnection to parse the re-encoding.
- c.cr = &countingReader{Reader: bytes.NewReader(newMsg)}
- hdr2, msg2, err := c.readMessage()
- if err != nil {
- fmt.Println("Initial:\n" + hex.Dump(data))
- fmt.Println("New:\n" + hex.Dump(newMsg))
- panic("not parseable after re-encode: " + err.Error())
- }
-
- // Make sure the data is the same as it was before.
- if hdr != hdr2 {
- panic("headers differ")
- }
- if !reflect.DeepEqual(msg, msg2) {
- panic("contents differ")
- }
-
- return 1
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/header.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/header.go
deleted file mode 100644
index 846ee48c..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/header.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-package protocol
-
-import "github.com/calmh/xdr"
-
-type header struct {
- version int
- msgID int
- msgType int
- compression bool
-}
-
-func (h header) encodeXDR(xw *xdr.Writer) (int, error) {
- u := encodeHeader(h)
- return xw.WriteUint32(u)
-}
-
-func (h *header) decodeXDR(xr *xdr.Reader) error {
- u := xr.ReadUint32()
- *h = decodeHeader(u)
- return xr.Error()
-}
-
-func encodeHeader(h header) uint32 {
- var isComp uint32
- if h.compression {
- isComp = 1 << 0 // the zeroth bit is the compression bit
- }
- return uint32(h.version&0xf)<<28 +
- uint32(h.msgID&0xfff)<<16 +
- uint32(h.msgType&0xff)<<8 +
- isComp
-}
-
-func decodeHeader(u uint32) header {
- return header{
- version: int(u>>28) & 0xf,
- msgID: int(u>>16) & 0xfff,
- msgType: int(u>>8) & 0xff,
- compression: u&1 == 1,
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message.go
deleted file mode 100644
index f6ef33f6..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message.go
+++ /dev/null
@@ -1,172 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-//go:generate -command genxdr go run ../../Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go
-//go:generate genxdr -o message_xdr.go message.go
-
-package protocol
-
-import (
- "bytes"
- "crypto/sha256"
- "fmt"
-)
-
-var sha256OfEmptyBlock = sha256.Sum256(make([]byte, BlockSize))
-
-type IndexMessage struct {
- Folder string // max:256
- Files []FileInfo // max:1000000
- Flags uint32
- Options []Option // max:64
-}
-
-type FileInfo struct {
- Name string // max:8192
- Flags uint32
- Modified int64
- Version Vector
- LocalVersion int64
- CachedSize int64 // noencode (cache only)
- Blocks []BlockInfo // max:1000000
-}
-
-func (f FileInfo) String() string {
- return fmt.Sprintf("File{Name:%q, Flags:0%o, Modified:%d, Version:%v, Size:%d, Blocks:%v}",
- f.Name, f.Flags, f.Modified, f.Version, f.Size(), f.Blocks)
-}
-
-func (f FileInfo) Size() (bytes int64) {
- if f.IsDeleted() || f.IsDirectory() {
- return 128
- }
- if f.CachedSize > 0 {
- return f.CachedSize
- }
- for _, b := range f.Blocks {
- bytes += int64(b.Size)
- }
- f.CachedSize = bytes
- return
-}
-
-func (f FileInfo) IsDeleted() bool {
- return f.Flags&FlagDeleted != 0
-}
-
-func (f FileInfo) IsInvalid() bool {
- return f.Flags&FlagInvalid != 0
-}
-
-func (f FileInfo) IsDirectory() bool {
- return f.Flags&FlagDirectory != 0
-}
-
-func (f FileInfo) IsSymlink() bool {
- return f.Flags&FlagSymlink != 0
-}
-
-func (f FileInfo) HasPermissionBits() bool {
- return f.Flags&FlagNoPermBits == 0
-}
-
-// WinsConflict returns true if "f" is the one to choose when it is in
-// conflict with "other".
-func (f FileInfo) WinsConflict(other FileInfo) bool {
- // If a modification is in conflict with a delete, we pick the
- // modification.
- if !f.IsDeleted() && other.IsDeleted() {
- return true
- }
- if f.IsDeleted() && !other.IsDeleted() {
- return false
- }
-
- // The one with the newer modification time wins.
- if f.Modified > other.Modified {
- return true
- }
- if f.Modified < other.Modified {
- return false
- }
-
- // The modification times were equal. Use the device ID in the version
- // vector as tie breaker.
- return f.Version.Compare(other.Version) == ConcurrentGreater
-}
-
-type BlockInfo struct {
- Offset int64 // noencode (cache only)
- Size int32
- Hash []byte // max:64
-}
-
-func (b BlockInfo) String() string {
- return fmt.Sprintf("Block{%d/%d/%x}", b.Offset, b.Size, b.Hash)
-}
-
-// IsEmpty returns true if the block is a full block of zeroes.
-func (b BlockInfo) IsEmpty() bool {
- return b.Size == BlockSize && bytes.Equal(b.Hash, sha256OfEmptyBlock[:])
-}
-
-type RequestMessage struct {
- Folder string // max:256
- Name string // max:8192
- Offset int64
- Size int32
- Hash []byte // max:64
- Flags uint32
- Options []Option // max:64
-}
-
-type ResponseMessage struct {
- Data []byte
- Code int32
-}
-
-type ClusterConfigMessage struct {
- DeviceName string // max:64
- ClientName string // max:64
- ClientVersion string // max:64
- Folders []Folder // max:1000000
- Options []Option // max:64
-}
-
-func (o *ClusterConfigMessage) GetOption(key string) string {
- for _, option := range o.Options {
- if option.Key == key {
- return option.Value
- }
- }
- return ""
-}
-
-type Folder struct {
- ID string // max:256
- Devices []Device // max:1000000
- Flags uint32
- Options []Option // max:64
-}
-
-type Device struct {
- ID []byte // max:32
- Name string // max:64
- Addresses []string // max:64,2083
- Compression uint32
- CertName string // max:64
- MaxLocalVersion int64
- Flags uint32
- Options []Option // max:64
-}
-
-type Option struct {
- Key string // max:64
- Value string // max:1024
-}
-
-type CloseMessage struct {
- Reason string // max:1024
- Code int32
-}
-
-type EmptyMessage struct{}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message_xdr.go
deleted file mode 100644
index e2ea7ca6..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/message_xdr.go
+++ /dev/null
@@ -1,1193 +0,0 @@
-// ************************************************************
-// This file is automatically generated by genxdr. Do not edit.
-// ************************************************************
-
-package protocol
-
-import (
- "bytes"
- "io"
-
- "github.com/calmh/xdr"
-)
-
-/*
-
-IndexMessage Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Folder |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Folder (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Number of Files |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Zero or more FileInfo Structures \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Flags |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Number of Options |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Zero or more Option Structures \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct IndexMessage {
- string Folder<256>;
- FileInfo Files<1000000>;
- unsigned int Flags;
- Option Options<64>;
-}
-
-*/
-
-func (o IndexMessage) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o IndexMessage) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o IndexMessage) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o IndexMessage) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o IndexMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.Folder); l > 256 {
- return xw.Tot(), xdr.ElementSizeExceeded("Folder", l, 256)
- }
- xw.WriteString(o.Folder)
- if l := len(o.Files); l > 1000000 {
- return xw.Tot(), xdr.ElementSizeExceeded("Files", l, 1000000)
- }
- xw.WriteUint32(uint32(len(o.Files)))
- for i := range o.Files {
- _, err := o.Files[i].EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- }
- xw.WriteUint32(o.Flags)
- if l := len(o.Options); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("Options", l, 64)
- }
- xw.WriteUint32(uint32(len(o.Options)))
- for i := range o.Options {
- _, err := o.Options[i].EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- }
- return xw.Tot(), xw.Error()
-}
-
-func (o *IndexMessage) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *IndexMessage) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *IndexMessage) DecodeXDRFrom(xr *xdr.Reader) error {
- o.Folder = xr.ReadStringMax(256)
- _FilesSize := int(xr.ReadUint32())
- if _FilesSize < 0 {
- return xdr.ElementSizeExceeded("Files", _FilesSize, 1000000)
- }
- if _FilesSize > 1000000 {
- return xdr.ElementSizeExceeded("Files", _FilesSize, 1000000)
- }
- o.Files = make([]FileInfo, _FilesSize)
- for i := range o.Files {
- (&o.Files[i]).DecodeXDRFrom(xr)
- }
- o.Flags = xr.ReadUint32()
- _OptionsSize := int(xr.ReadUint32())
- if _OptionsSize < 0 {
- return xdr.ElementSizeExceeded("Options", _OptionsSize, 64)
- }
- if _OptionsSize > 64 {
- return xdr.ElementSizeExceeded("Options", _OptionsSize, 64)
- }
- o.Options = make([]Option, _OptionsSize)
- for i := range o.Options {
- (&o.Options[i]).DecodeXDRFrom(xr)
- }
- return xr.Error()
-}
-
-/*
-
-FileInfo Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Name |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Name (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Flags |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| |
-+ Modified (64 bits) +
-| |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Vector Structure \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| |
-+ Local Version (64 bits) +
-| |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Number of Blocks |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Zero or more BlockInfo Structures \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct FileInfo {
- string Name<8192>;
- unsigned int Flags;
- hyper Modified;
- Vector Version;
- hyper LocalVersion;
- BlockInfo Blocks<1000000>;
-}
-
-*/
-
-func (o FileInfo) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o FileInfo) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o FileInfo) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o FileInfo) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o FileInfo) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.Name); l > 8192 {
- return xw.Tot(), xdr.ElementSizeExceeded("Name", l, 8192)
- }
- xw.WriteString(o.Name)
- xw.WriteUint32(o.Flags)
- xw.WriteUint64(uint64(o.Modified))
- _, err := o.Version.EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- xw.WriteUint64(uint64(o.LocalVersion))
- if l := len(o.Blocks); l > 1000000 {
- return xw.Tot(), xdr.ElementSizeExceeded("Blocks", l, 1000000)
- }
- xw.WriteUint32(uint32(len(o.Blocks)))
- for i := range o.Blocks {
- _, err := o.Blocks[i].EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- }
- return xw.Tot(), xw.Error()
-}
-
-func (o *FileInfo) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *FileInfo) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *FileInfo) DecodeXDRFrom(xr *xdr.Reader) error {
- o.Name = xr.ReadStringMax(8192)
- o.Flags = xr.ReadUint32()
- o.Modified = int64(xr.ReadUint64())
- (&o.Version).DecodeXDRFrom(xr)
- o.LocalVersion = int64(xr.ReadUint64())
- _BlocksSize := int(xr.ReadUint32())
- if _BlocksSize < 0 {
- return xdr.ElementSizeExceeded("Blocks", _BlocksSize, 1000000)
- }
- if _BlocksSize > 1000000 {
- return xdr.ElementSizeExceeded("Blocks", _BlocksSize, 1000000)
- }
- o.Blocks = make([]BlockInfo, _BlocksSize)
- for i := range o.Blocks {
- (&o.Blocks[i]).DecodeXDRFrom(xr)
- }
- return xr.Error()
-}
-
-/*
-
-BlockInfo Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Size |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Hash |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Hash (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct BlockInfo {
- int Size;
- opaque Hash<64>;
-}
-
-*/
-
-func (o BlockInfo) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o BlockInfo) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o BlockInfo) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o BlockInfo) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o BlockInfo) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- xw.WriteUint32(uint32(o.Size))
- if l := len(o.Hash); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("Hash", l, 64)
- }
- xw.WriteBytes(o.Hash)
- return xw.Tot(), xw.Error()
-}
-
-func (o *BlockInfo) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *BlockInfo) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *BlockInfo) DecodeXDRFrom(xr *xdr.Reader) error {
- o.Size = int32(xr.ReadUint32())
- o.Hash = xr.ReadBytesMax(64)
- return xr.Error()
-}
-
-/*
-
-RequestMessage Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Folder |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Folder (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Name |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Name (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| |
-+ Offset (64 bits) +
-| |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Size |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Hash |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Hash (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Flags |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Number of Options |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Zero or more Option Structures \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct RequestMessage {
- string Folder<256>;
- string Name<8192>;
- hyper Offset;
- int Size;
- opaque Hash<64>;
- unsigned int Flags;
- Option Options<64>;
-}
-
-*/
-
-func (o RequestMessage) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o RequestMessage) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o RequestMessage) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o RequestMessage) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o RequestMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.Folder); l > 256 {
- return xw.Tot(), xdr.ElementSizeExceeded("Folder", l, 256)
- }
- xw.WriteString(o.Folder)
- if l := len(o.Name); l > 8192 {
- return xw.Tot(), xdr.ElementSizeExceeded("Name", l, 8192)
- }
- xw.WriteString(o.Name)
- xw.WriteUint64(uint64(o.Offset))
- xw.WriteUint32(uint32(o.Size))
- if l := len(o.Hash); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("Hash", l, 64)
- }
- xw.WriteBytes(o.Hash)
- xw.WriteUint32(o.Flags)
- if l := len(o.Options); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("Options", l, 64)
- }
- xw.WriteUint32(uint32(len(o.Options)))
- for i := range o.Options {
- _, err := o.Options[i].EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- }
- return xw.Tot(), xw.Error()
-}
-
-func (o *RequestMessage) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *RequestMessage) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *RequestMessage) DecodeXDRFrom(xr *xdr.Reader) error {
- o.Folder = xr.ReadStringMax(256)
- o.Name = xr.ReadStringMax(8192)
- o.Offset = int64(xr.ReadUint64())
- o.Size = int32(xr.ReadUint32())
- o.Hash = xr.ReadBytesMax(64)
- o.Flags = xr.ReadUint32()
- _OptionsSize := int(xr.ReadUint32())
- if _OptionsSize < 0 {
- return xdr.ElementSizeExceeded("Options", _OptionsSize, 64)
- }
- if _OptionsSize > 64 {
- return xdr.ElementSizeExceeded("Options", _OptionsSize, 64)
- }
- o.Options = make([]Option, _OptionsSize)
- for i := range o.Options {
- (&o.Options[i]).DecodeXDRFrom(xr)
- }
- return xr.Error()
-}
-
-/*
-
-ResponseMessage Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Data |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Data (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Code |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct ResponseMessage {
- opaque Data<>;
- int Code;
-}
-
-*/
-
-func (o ResponseMessage) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o ResponseMessage) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o ResponseMessage) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o ResponseMessage) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o ResponseMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- xw.WriteBytes(o.Data)
- xw.WriteUint32(uint32(o.Code))
- return xw.Tot(), xw.Error()
-}
-
-func (o *ResponseMessage) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *ResponseMessage) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *ResponseMessage) DecodeXDRFrom(xr *xdr.Reader) error {
- o.Data = xr.ReadBytes()
- o.Code = int32(xr.ReadUint32())
- return xr.Error()
-}
-
-/*
-
-ClusterConfigMessage Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Device Name |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Device Name (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Client Name |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Client Name (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Client Version |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Client Version (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Number of Folders |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Zero or more Folder Structures \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Number of Options |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Zero or more Option Structures \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct ClusterConfigMessage {
- string DeviceName<64>;
- string ClientName<64>;
- string ClientVersion<64>;
- Folder Folders<1000000>;
- Option Options<64>;
-}
-
-*/
-
-func (o ClusterConfigMessage) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o ClusterConfigMessage) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o ClusterConfigMessage) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o ClusterConfigMessage) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o ClusterConfigMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.DeviceName); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("DeviceName", l, 64)
- }
- xw.WriteString(o.DeviceName)
- if l := len(o.ClientName); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("ClientName", l, 64)
- }
- xw.WriteString(o.ClientName)
- if l := len(o.ClientVersion); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("ClientVersion", l, 64)
- }
- xw.WriteString(o.ClientVersion)
- if l := len(o.Folders); l > 1000000 {
- return xw.Tot(), xdr.ElementSizeExceeded("Folders", l, 1000000)
- }
- xw.WriteUint32(uint32(len(o.Folders)))
- for i := range o.Folders {
- _, err := o.Folders[i].EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- }
- if l := len(o.Options); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("Options", l, 64)
- }
- xw.WriteUint32(uint32(len(o.Options)))
- for i := range o.Options {
- _, err := o.Options[i].EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- }
- return xw.Tot(), xw.Error()
-}
-
-func (o *ClusterConfigMessage) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *ClusterConfigMessage) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *ClusterConfigMessage) DecodeXDRFrom(xr *xdr.Reader) error {
- o.DeviceName = xr.ReadStringMax(64)
- o.ClientName = xr.ReadStringMax(64)
- o.ClientVersion = xr.ReadStringMax(64)
- _FoldersSize := int(xr.ReadUint32())
- if _FoldersSize < 0 {
- return xdr.ElementSizeExceeded("Folders", _FoldersSize, 1000000)
- }
- if _FoldersSize > 1000000 {
- return xdr.ElementSizeExceeded("Folders", _FoldersSize, 1000000)
- }
- o.Folders = make([]Folder, _FoldersSize)
- for i := range o.Folders {
- (&o.Folders[i]).DecodeXDRFrom(xr)
- }
- _OptionsSize := int(xr.ReadUint32())
- if _OptionsSize < 0 {
- return xdr.ElementSizeExceeded("Options", _OptionsSize, 64)
- }
- if _OptionsSize > 64 {
- return xdr.ElementSizeExceeded("Options", _OptionsSize, 64)
- }
- o.Options = make([]Option, _OptionsSize)
- for i := range o.Options {
- (&o.Options[i]).DecodeXDRFrom(xr)
- }
- return xr.Error()
-}
-
-/*
-
-Folder Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of ID |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ ID (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Number of Devices |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Zero or more Device Structures \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Flags |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Number of Options |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Zero or more Option Structures \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct Folder {
- string ID<256>;
- Device Devices<1000000>;
- unsigned int Flags;
- Option Options<64>;
-}
-
-*/
-
-func (o Folder) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o Folder) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o Folder) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o Folder) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o Folder) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.ID); l > 256 {
- return xw.Tot(), xdr.ElementSizeExceeded("ID", l, 256)
- }
- xw.WriteString(o.ID)
- if l := len(o.Devices); l > 1000000 {
- return xw.Tot(), xdr.ElementSizeExceeded("Devices", l, 1000000)
- }
- xw.WriteUint32(uint32(len(o.Devices)))
- for i := range o.Devices {
- _, err := o.Devices[i].EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- }
- xw.WriteUint32(o.Flags)
- if l := len(o.Options); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("Options", l, 64)
- }
- xw.WriteUint32(uint32(len(o.Options)))
- for i := range o.Options {
- _, err := o.Options[i].EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- }
- return xw.Tot(), xw.Error()
-}
-
-func (o *Folder) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *Folder) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *Folder) DecodeXDRFrom(xr *xdr.Reader) error {
- o.ID = xr.ReadStringMax(256)
- _DevicesSize := int(xr.ReadUint32())
- if _DevicesSize < 0 {
- return xdr.ElementSizeExceeded("Devices", _DevicesSize, 1000000)
- }
- if _DevicesSize > 1000000 {
- return xdr.ElementSizeExceeded("Devices", _DevicesSize, 1000000)
- }
- o.Devices = make([]Device, _DevicesSize)
- for i := range o.Devices {
- (&o.Devices[i]).DecodeXDRFrom(xr)
- }
- o.Flags = xr.ReadUint32()
- _OptionsSize := int(xr.ReadUint32())
- if _OptionsSize < 0 {
- return xdr.ElementSizeExceeded("Options", _OptionsSize, 64)
- }
- if _OptionsSize > 64 {
- return xdr.ElementSizeExceeded("Options", _OptionsSize, 64)
- }
- o.Options = make([]Option, _OptionsSize)
- for i := range o.Options {
- (&o.Options[i]).DecodeXDRFrom(xr)
- }
- return xr.Error()
-}
-
-/*
-
-Device Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of ID |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ ID (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Name |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Name (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Number of Addresses |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Addresses |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Addresses (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Compression |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Cert Name |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Cert Name (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| |
-+ Max Local Version (64 bits) +
-| |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Flags |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Number of Options |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Zero or more Option Structures \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct Device {
- opaque ID<32>;
- string Name<64>;
- string Addresses<64>;
- unsigned int Compression;
- string CertName<64>;
- hyper MaxLocalVersion;
- unsigned int Flags;
- Option Options<64>;
-}
-
-*/
-
-func (o Device) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o Device) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o Device) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o Device) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o Device) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.ID); l > 32 {
- return xw.Tot(), xdr.ElementSizeExceeded("ID", l, 32)
- }
- xw.WriteBytes(o.ID)
- if l := len(o.Name); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("Name", l, 64)
- }
- xw.WriteString(o.Name)
- if l := len(o.Addresses); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("Addresses", l, 64)
- }
- xw.WriteUint32(uint32(len(o.Addresses)))
- for i := range o.Addresses {
- xw.WriteString(o.Addresses[i])
- }
- xw.WriteUint32(o.Compression)
- if l := len(o.CertName); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("CertName", l, 64)
- }
- xw.WriteString(o.CertName)
- xw.WriteUint64(uint64(o.MaxLocalVersion))
- xw.WriteUint32(o.Flags)
- if l := len(o.Options); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("Options", l, 64)
- }
- xw.WriteUint32(uint32(len(o.Options)))
- for i := range o.Options {
- _, err := o.Options[i].EncodeXDRInto(xw)
- if err != nil {
- return xw.Tot(), err
- }
- }
- return xw.Tot(), xw.Error()
-}
-
-func (o *Device) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *Device) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *Device) DecodeXDRFrom(xr *xdr.Reader) error {
- o.ID = xr.ReadBytesMax(32)
- o.Name = xr.ReadStringMax(64)
- _AddressesSize := int(xr.ReadUint32())
- if _AddressesSize < 0 {
- return xdr.ElementSizeExceeded("Addresses", _AddressesSize, 64)
- }
- if _AddressesSize > 64 {
- return xdr.ElementSizeExceeded("Addresses", _AddressesSize, 64)
- }
- o.Addresses = make([]string, _AddressesSize)
- for i := range o.Addresses {
- o.Addresses[i] = xr.ReadStringMax(2083)
- }
- o.Compression = xr.ReadUint32()
- o.CertName = xr.ReadStringMax(64)
- o.MaxLocalVersion = int64(xr.ReadUint64())
- o.Flags = xr.ReadUint32()
- _OptionsSize := int(xr.ReadUint32())
- if _OptionsSize < 0 {
- return xdr.ElementSizeExceeded("Options", _OptionsSize, 64)
- }
- if _OptionsSize > 64 {
- return xdr.ElementSizeExceeded("Options", _OptionsSize, 64)
- }
- o.Options = make([]Option, _OptionsSize)
- for i := range o.Options {
- (&o.Options[i]).DecodeXDRFrom(xr)
- }
- return xr.Error()
-}
-
-/*
-
-Option Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Key |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Key (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Value |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Value (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct Option {
- string Key<64>;
- string Value<1024>;
-}
-
-*/
-
-func (o Option) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o Option) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o Option) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o Option) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o Option) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.Key); l > 64 {
- return xw.Tot(), xdr.ElementSizeExceeded("Key", l, 64)
- }
- xw.WriteString(o.Key)
- if l := len(o.Value); l > 1024 {
- return xw.Tot(), xdr.ElementSizeExceeded("Value", l, 1024)
- }
- xw.WriteString(o.Value)
- return xw.Tot(), xw.Error()
-}
-
-func (o *Option) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *Option) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *Option) DecodeXDRFrom(xr *xdr.Reader) error {
- o.Key = xr.ReadStringMax(64)
- o.Value = xr.ReadStringMax(1024)
- return xr.Error()
-}
-
-/*
-
-CloseMessage Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Reason |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Reason (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Code |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct CloseMessage {
- string Reason<1024>;
- int Code;
-}
-
-*/
-
-func (o CloseMessage) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o CloseMessage) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o CloseMessage) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o CloseMessage) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o CloseMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.Reason); l > 1024 {
- return xw.Tot(), xdr.ElementSizeExceeded("Reason", l, 1024)
- }
- xw.WriteString(o.Reason)
- xw.WriteUint32(uint32(o.Code))
- return xw.Tot(), xw.Error()
-}
-
-func (o *CloseMessage) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *CloseMessage) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *CloseMessage) DecodeXDRFrom(xr *xdr.Reader) error {
- o.Reason = xr.ReadStringMax(1024)
- o.Code = int32(xr.ReadUint32())
- return xr.Error()
-}
-
-/*
-
-EmptyMessage Structure:
-(contains no fields)
-
-
-struct EmptyMessage {
-}
-
-*/
-
-func (o EmptyMessage) EncodeXDR(w io.Writer) (int, error) {
- return 0, nil
-}
-
-func (o EmptyMessage) MarshalXDR() ([]byte, error) {
- return nil, nil
-}
-
-func (o EmptyMessage) MustMarshalXDR() []byte {
- return nil
-}
-
-func (o EmptyMessage) AppendXDR(bs []byte) ([]byte, error) {
- return bs, nil
-}
-
-func (o EmptyMessage) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- return xw.Tot(), xw.Error()
-}
-
-func (o *EmptyMessage) DecodeXDR(r io.Reader) error {
- return nil
-}
-
-func (o *EmptyMessage) UnmarshalXDR(bs []byte) error {
- return nil
-}
-
-func (o *EmptyMessage) DecodeXDRFrom(xr *xdr.Reader) error {
- return xr.Error()
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_darwin.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_darwin.go
deleted file mode 100644
index eb755a6e..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_darwin.go
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-// +build darwin
-
-package protocol
-
-// Darwin uses NFD normalization
-
-import "golang.org/x/text/unicode/norm"
-
-type nativeModel struct {
- next Model
-}
-
-func (m nativeModel) Index(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) {
- for i := range files {
- files[i].Name = norm.NFD.String(files[i].Name)
- }
- m.next.Index(deviceID, folder, files, flags, options)
-}
-
-func (m nativeModel) IndexUpdate(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) {
- for i := range files {
- files[i].Name = norm.NFD.String(files[i].Name)
- }
- m.next.IndexUpdate(deviceID, folder, files, flags, options)
-}
-
-func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, hash []byte, flags uint32, options []Option, buf []byte) error {
- name = norm.NFD.String(name)
- return m.next.Request(deviceID, folder, name, offset, hash, flags, options, buf)
-}
-
-func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) {
- m.next.ClusterConfig(deviceID, config)
-}
-
-func (m nativeModel) Close(deviceID DeviceID, err error) {
- m.next.Close(deviceID, err)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_unix.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_unix.go
deleted file mode 100644
index 0611865e..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_unix.go
+++ /dev/null
@@ -1,31 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-// +build !windows,!darwin
-
-package protocol
-
-// Normal Unixes uses NFC and slashes, which is the wire format.
-
-type nativeModel struct {
- next Model
-}
-
-func (m nativeModel) Index(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) {
- m.next.Index(deviceID, folder, files, flags, options)
-}
-
-func (m nativeModel) IndexUpdate(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) {
- m.next.IndexUpdate(deviceID, folder, files, flags, options)
-}
-
-func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, hash []byte, flags uint32, options []Option, buf []byte) error {
- return m.next.Request(deviceID, folder, name, offset, hash, flags, options, buf)
-}
-
-func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) {
- m.next.ClusterConfig(deviceID, config)
-}
-
-func (m nativeModel) Close(deviceID DeviceID, err error) {
- m.next.Close(deviceID, err)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_windows.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_windows.go
deleted file mode 100644
index 36a1d274..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/nativemodel_windows.go
+++ /dev/null
@@ -1,63 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-// +build windows
-
-package protocol
-
-// Windows uses backslashes as file separator and disallows a bunch of
-// characters in the filename
-
-import (
- "path/filepath"
- "strings"
-)
-
-var disallowedCharacters = string([]rune{
- '<', '>', ':', '"', '|', '?', '*',
- 0, 1, 2, 3, 4, 5, 6, 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,
-})
-
-type nativeModel struct {
- next Model
-}
-
-func (m nativeModel) Index(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) {
- fixupFiles(folder, files)
- m.next.Index(deviceID, folder, files, flags, options)
-}
-
-func (m nativeModel) IndexUpdate(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option) {
- fixupFiles(folder, files)
- m.next.IndexUpdate(deviceID, folder, files, flags, options)
-}
-
-func (m nativeModel) Request(deviceID DeviceID, folder string, name string, offset int64, hash []byte, flags uint32, options []Option, buf []byte) error {
- name = filepath.FromSlash(name)
- return m.next.Request(deviceID, folder, name, offset, hash, flags, options, buf)
-}
-
-func (m nativeModel) ClusterConfig(deviceID DeviceID, config ClusterConfigMessage) {
- m.next.ClusterConfig(deviceID, config)
-}
-
-func (m nativeModel) Close(deviceID DeviceID, err error) {
- m.next.Close(deviceID, err)
-}
-
-func fixupFiles(folder string, files []FileInfo) {
- for i, f := range files {
- if strings.ContainsAny(f.Name, disallowedCharacters) {
- if f.IsDeleted() {
- // Don't complain if the file is marked as deleted, since it
- // can't possibly exist here anyway.
- continue
- }
- files[i].Flags |= FlagInvalid
- l.Warnf("File name %q (folder %q) contains invalid characters; marked as invalid.", f.Name, folder)
- }
- files[i].Name = filepath.FromSlash(files[i].Name)
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/protocol.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/protocol.go
deleted file mode 100644
index 1b89ee09..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/protocol.go
+++ /dev/null
@@ -1,765 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-package protocol
-
-import (
- "encoding/binary"
- "encoding/hex"
- "errors"
- "fmt"
- "io"
- "sync"
- "time"
-
- lz4 "github.com/bkaradzic/go-lz4"
-)
-
-const (
- // BlockSize is the standard ata block size (128 KiB)
- BlockSize = 128 << 10
-
- // MaxMessageLen is the largest message size allowed on the wire. (64 MiB)
- MaxMessageLen = 64 << 20
-)
-
-const (
- messageTypeClusterConfig = 0
- messageTypeIndex = 1
- messageTypeRequest = 2
- messageTypeResponse = 3
- messageTypePing = 4
- messageTypeIndexUpdate = 6
- messageTypeClose = 7
-)
-
-const (
- stateInitial = iota
- stateReady
-)
-
-// FileInfo flags
-const (
- FlagDeleted uint32 = 1 << 12
- FlagInvalid = 1 << 13
- FlagDirectory = 1 << 14
- FlagNoPermBits = 1 << 15
- FlagSymlink = 1 << 16
- FlagSymlinkMissingTarget = 1 << 17
-
- FlagsAll = (1 << 18) - 1
-
- SymlinkTypeMask = FlagDirectory | FlagSymlinkMissingTarget
-)
-
-// IndexMessage message flags (for IndexUpdate)
-const (
- FlagIndexTemporary uint32 = 1 << iota
-)
-
-// Request message flags
-const (
- FlagRequestTemporary uint32 = 1 << iota
-)
-
-// ClusterConfigMessage.Folders flags
-const (
- FlagFolderReadOnly uint32 = 1 << 0
- FlagFolderIgnorePerms = 1 << 1
- FlagFolderIgnoreDelete = 1 << 2
-)
-
-// ClusterConfigMessage.Folders.Devices flags
-const (
- FlagShareTrusted uint32 = 1 << 0
- FlagShareReadOnly = 1 << 1
- FlagIntroducer = 1 << 2
- FlagShareBits = 0x000000ff
-)
-
-var (
- ErrClosed = errors.New("connection closed")
- ErrTimeout = errors.New("read timeout")
-)
-
-// Specific variants of empty messages...
-type pingMessage struct{ EmptyMessage }
-
-type Model interface {
- // An index was received from the peer device
- Index(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option)
- // An index update was received from the peer device
- IndexUpdate(deviceID DeviceID, folder string, files []FileInfo, flags uint32, options []Option)
- // A request was made by the peer device
- Request(deviceID DeviceID, folder string, name string, offset int64, hash []byte, flags uint32, options []Option, buf []byte) error
- // A cluster configuration message was received
- ClusterConfig(deviceID DeviceID, config ClusterConfigMessage)
- // The peer device closed the connection
- Close(deviceID DeviceID, err error)
-}
-
-type Connection interface {
- Start()
- ID() DeviceID
- Name() string
- Index(folder string, files []FileInfo, flags uint32, options []Option) error
- IndexUpdate(folder string, files []FileInfo, flags uint32, options []Option) error
- Request(folder string, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error)
- ClusterConfig(config ClusterConfigMessage)
- Statistics() Statistics
-}
-
-type rawConnection struct {
- id DeviceID
- name string
- receiver Model
-
- cr *countingReader
- cw *countingWriter
-
- awaiting [4096]chan asyncResult
- awaitingMut sync.Mutex
-
- idxMut sync.Mutex // ensures serialization of Index calls
-
- nextID chan int
- outbox chan hdrMsg
- closed chan struct{}
- once sync.Once
- pool sync.Pool
- compression Compression
-
- rdbuf0 []byte // used & reused by readMessage
- rdbuf1 []byte // used & reused by readMessage
-}
-
-type asyncResult struct {
- val []byte
- err error
-}
-
-type hdrMsg struct {
- hdr header
- msg encodable
- done chan struct{}
-}
-
-type encodable interface {
- AppendXDR([]byte) ([]byte, error)
-}
-
-type isEofer interface {
- IsEOF() bool
-}
-
-const (
- // PingSendInterval is how often we make sure to send a message, by
- // triggering pings if necessary.
- PingSendInterval = 90 * time.Second
- // ReceiveTimeout is the longest we'll wait for a message from the other
- // side before closing the connection.
- ReceiveTimeout = 300 * time.Second
-)
-
-func NewConnection(deviceID DeviceID, reader io.Reader, writer io.Writer, receiver Model, name string, compress Compression) Connection {
- cr := &countingReader{Reader: reader}
- cw := &countingWriter{Writer: writer}
-
- c := rawConnection{
- id: deviceID,
- name: name,
- receiver: nativeModel{receiver},
- cr: cr,
- cw: cw,
- outbox: make(chan hdrMsg),
- nextID: make(chan int),
- closed: make(chan struct{}),
- pool: sync.Pool{
- New: func() interface{} {
- return make([]byte, BlockSize)
- },
- },
- compression: compress,
- }
-
- return wireFormatConnection{&c}
-}
-
-// Start creates the goroutines for sending and receiving of messages. It must
-// be called exactly once after creating a connection.
-func (c *rawConnection) Start() {
- go c.readerLoop()
- go c.writerLoop()
- go c.pingSender()
- go c.pingReceiver()
- go c.idGenerator()
-}
-
-func (c *rawConnection) ID() DeviceID {
- return c.id
-}
-
-func (c *rawConnection) Name() string {
- return c.name
-}
-
-// Index writes the list of file information to the connected peer device
-func (c *rawConnection) Index(folder string, idx []FileInfo, flags uint32, options []Option) error {
- select {
- case <-c.closed:
- return ErrClosed
- default:
- }
- c.idxMut.Lock()
- c.send(-1, messageTypeIndex, IndexMessage{
- Folder: folder,
- Files: idx,
- Flags: flags,
- Options: options,
- }, nil)
- c.idxMut.Unlock()
- return nil
-}
-
-// IndexUpdate writes the list of file information to the connected peer device as an update
-func (c *rawConnection) IndexUpdate(folder string, idx []FileInfo, flags uint32, options []Option) error {
- select {
- case <-c.closed:
- return ErrClosed
- default:
- }
- c.idxMut.Lock()
- c.send(-1, messageTypeIndexUpdate, IndexMessage{
- Folder: folder,
- Files: idx,
- Flags: flags,
- Options: options,
- }, nil)
- c.idxMut.Unlock()
- return nil
-}
-
-// Request returns the bytes for the specified block after fetching them from the connected peer.
-func (c *rawConnection) Request(folder string, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) {
- var id int
- select {
- case id = <-c.nextID:
- case <-c.closed:
- return nil, ErrClosed
- }
-
- c.awaitingMut.Lock()
- if ch := c.awaiting[id]; ch != nil {
- panic("id taken")
- }
- rc := make(chan asyncResult, 1)
- c.awaiting[id] = rc
- c.awaitingMut.Unlock()
-
- ok := c.send(id, messageTypeRequest, RequestMessage{
- Folder: folder,
- Name: name,
- Offset: offset,
- Size: int32(size),
- Hash: hash,
- Flags: flags,
- Options: options,
- }, nil)
- if !ok {
- return nil, ErrClosed
- }
-
- res, ok := <-rc
- if !ok {
- return nil, ErrClosed
- }
- return res.val, res.err
-}
-
-// ClusterConfig send the cluster configuration message to the peer and returns any error
-func (c *rawConnection) ClusterConfig(config ClusterConfigMessage) {
- c.send(-1, messageTypeClusterConfig, config, nil)
-}
-
-func (c *rawConnection) ping() bool {
- var id int
- select {
- case id = <-c.nextID:
- case <-c.closed:
- return false
- }
-
- return c.send(id, messageTypePing, nil, nil)
-}
-
-func (c *rawConnection) readerLoop() (err error) {
- defer func() {
- c.close(err)
- }()
-
- state := stateInitial
- for {
- select {
- case <-c.closed:
- return ErrClosed
- default:
- }
-
- hdr, msg, err := c.readMessage()
- if err != nil {
- return err
- }
-
- switch msg := msg.(type) {
- case ClusterConfigMessage:
- if state != stateInitial {
- return fmt.Errorf("protocol error: cluster config message in state %d", state)
- }
- go c.receiver.ClusterConfig(c.id, msg)
- state = stateReady
-
- case IndexMessage:
- switch hdr.msgType {
- case messageTypeIndex:
- if state != stateReady {
- return fmt.Errorf("protocol error: index message in state %d", state)
- }
- c.handleIndex(msg)
- state = stateReady
-
- case messageTypeIndexUpdate:
- if state != stateReady {
- return fmt.Errorf("protocol error: index update message in state %d", state)
- }
- c.handleIndexUpdate(msg)
- state = stateReady
- }
-
- case RequestMessage:
- if state != stateReady {
- return fmt.Errorf("protocol error: request message in state %d", state)
- }
- // Requests are handled asynchronously
- go c.handleRequest(hdr.msgID, msg)
-
- case ResponseMessage:
- if state != stateReady {
- return fmt.Errorf("protocol error: response message in state %d", state)
- }
- c.handleResponse(hdr.msgID, msg)
-
- case pingMessage:
- if state != stateReady {
- return fmt.Errorf("protocol error: ping message in state %d", state)
- }
- // Nothing
-
- case CloseMessage:
- return errors.New(msg.Reason)
-
- default:
- return fmt.Errorf("protocol error: %s: unknown message type %#x", c.id, hdr.msgType)
- }
- }
-}
-
-func (c *rawConnection) readMessage() (hdr header, msg encodable, err error) {
- if cap(c.rdbuf0) < 8 {
- c.rdbuf0 = make([]byte, 8)
- } else {
- c.rdbuf0 = c.rdbuf0[:8]
- }
- _, err = io.ReadFull(c.cr, c.rdbuf0)
- if err != nil {
- return
- }
-
- hdr = decodeHeader(binary.BigEndian.Uint32(c.rdbuf0[0:4]))
- msglen := int(binary.BigEndian.Uint32(c.rdbuf0[4:8]))
-
- l.Debugf("read header %v (msglen=%d)", hdr, msglen)
-
- if msglen > MaxMessageLen {
- err = fmt.Errorf("message length %d exceeds maximum %d", msglen, MaxMessageLen)
- return
- }
-
- if hdr.version != 0 {
- err = fmt.Errorf("unknown protocol version 0x%x", hdr.version)
- return
- }
-
- if cap(c.rdbuf0) < msglen {
- c.rdbuf0 = make([]byte, msglen)
- } else {
- c.rdbuf0 = c.rdbuf0[:msglen]
- }
- _, err = io.ReadFull(c.cr, c.rdbuf0)
- if err != nil {
- return
- }
-
- l.Debugf("read %d bytes", len(c.rdbuf0))
-
- msgBuf := c.rdbuf0
- if hdr.compression && msglen > 0 {
- c.rdbuf1 = c.rdbuf1[:cap(c.rdbuf1)]
- c.rdbuf1, err = lz4.Decode(c.rdbuf1, c.rdbuf0)
- if err != nil {
- return
- }
- msgBuf = c.rdbuf1
- l.Debugf("decompressed to %d bytes", len(msgBuf))
- }
-
- if shouldDebug() {
- if len(msgBuf) > 1024 {
- l.Debugf("message data:\n%s", hex.Dump(msgBuf[:1024]))
- } else {
- l.Debugf("message data:\n%s", hex.Dump(msgBuf))
- }
- }
-
- // We check each returned error for the XDRError.IsEOF() method.
- // IsEOF()==true here means that the message contained fewer fields than
- // expected. It does not signify an EOF on the socket, because we've
- // successfully read a size value and that many bytes already. New fields
- // we expected but the other peer didn't send should be interpreted as
- // zero/nil, and if that's not valid we'll verify it somewhere else.
-
- switch hdr.msgType {
- case messageTypeIndex, messageTypeIndexUpdate:
- var idx IndexMessage
- err = idx.UnmarshalXDR(msgBuf)
- if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
- err = nil
- }
- msg = idx
-
- case messageTypeRequest:
- var req RequestMessage
- err = req.UnmarshalXDR(msgBuf)
- if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
- err = nil
- }
- msg = req
-
- case messageTypeResponse:
- var resp ResponseMessage
- err = resp.UnmarshalXDR(msgBuf)
- if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
- err = nil
- }
- msg = resp
-
- case messageTypePing:
- msg = pingMessage{}
-
- case messageTypeClusterConfig:
- var cc ClusterConfigMessage
- err = cc.UnmarshalXDR(msgBuf)
- if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
- err = nil
- }
- msg = cc
-
- case messageTypeClose:
- var cm CloseMessage
- err = cm.UnmarshalXDR(msgBuf)
- if xdrErr, ok := err.(isEofer); ok && xdrErr.IsEOF() {
- err = nil
- }
- msg = cm
-
- default:
- err = fmt.Errorf("protocol error: %s: unknown message type %#x", c.id, hdr.msgType)
- }
-
- return
-}
-
-func (c *rawConnection) handleIndex(im IndexMessage) {
- l.Debugf("Index(%v, %v, %d file, flags %x, opts: %s)", c.id, im.Folder, len(im.Files), im.Flags, im.Options)
- c.receiver.Index(c.id, im.Folder, filterIndexMessageFiles(im.Files), im.Flags, im.Options)
-}
-
-func (c *rawConnection) handleIndexUpdate(im IndexMessage) {
- l.Debugf("queueing IndexUpdate(%v, %v, %d files, flags %x, opts: %s)", c.id, im.Folder, len(im.Files), im.Flags, im.Options)
- c.receiver.IndexUpdate(c.id, im.Folder, filterIndexMessageFiles(im.Files), im.Flags, im.Options)
-}
-
-func filterIndexMessageFiles(fs []FileInfo) []FileInfo {
- var out []FileInfo
- for i, f := range fs {
- switch f.Name {
- case "", ".", "..", "/": // A few obviously invalid filenames
- l.Infof("Dropping invalid filename %q from incoming index", f.Name)
- if out == nil {
- // Most incoming updates won't contain anything invalid, so we
- // delay the allocation and copy to output slice until we
- // really need to do it, then copy all the so var valid files
- // to it.
- out = make([]FileInfo, i, len(fs)-1)
- copy(out, fs)
- }
- default:
- if out != nil {
- out = append(out, f)
- }
- }
- }
- if out != nil {
- return out
- }
- return fs
-}
-
-func (c *rawConnection) handleRequest(msgID int, req RequestMessage) {
- size := int(req.Size)
- usePool := size <= BlockSize
-
- var buf []byte
- var done chan struct{}
-
- if usePool {
- buf = c.pool.Get().([]byte)[:size]
- done = make(chan struct{})
- } else {
- buf = make([]byte, size)
- }
-
- err := c.receiver.Request(c.id, req.Folder, req.Name, int64(req.Offset), req.Hash, req.Flags, req.Options, buf)
- if err != nil {
- c.send(msgID, messageTypeResponse, ResponseMessage{
- Data: nil,
- Code: errorToCode(err),
- }, done)
- } else {
- c.send(msgID, messageTypeResponse, ResponseMessage{
- Data: buf,
- Code: errorToCode(err),
- }, done)
- }
-
- if usePool {
- <-done
- c.pool.Put(buf)
- }
-}
-
-func (c *rawConnection) handleResponse(msgID int, resp ResponseMessage) {
- c.awaitingMut.Lock()
- if rc := c.awaiting[msgID]; rc != nil {
- c.awaiting[msgID] = nil
- rc <- asyncResult{resp.Data, codeToError(resp.Code)}
- close(rc)
- }
- c.awaitingMut.Unlock()
-}
-
-func (c *rawConnection) handlePong(msgID int) {
- c.awaitingMut.Lock()
- if rc := c.awaiting[msgID]; rc != nil {
- c.awaiting[msgID] = nil
- rc <- asyncResult{}
- close(rc)
- }
- c.awaitingMut.Unlock()
-}
-
-func (c *rawConnection) send(msgID int, msgType int, msg encodable, done chan struct{}) bool {
- if msgID < 0 {
- select {
- case id := <-c.nextID:
- msgID = id
- case <-c.closed:
- return false
- }
- }
-
- hdr := header{
- version: 0,
- msgID: msgID,
- msgType: msgType,
- }
-
- select {
- case c.outbox <- hdrMsg{hdr, msg, done}:
- return true
- case <-c.closed:
- return false
- }
-}
-
-func (c *rawConnection) writerLoop() {
- var msgBuf = make([]byte, 8) // buffer for wire format message, kept and reused
- var uncBuf []byte // buffer for uncompressed message, kept and reused
- for {
- var tempBuf []byte
- var err error
-
- select {
- case hm := <-c.outbox:
- if hm.msg != nil {
- // Uncompressed message in uncBuf
- uncBuf, err = hm.msg.AppendXDR(uncBuf[:0])
- if hm.done != nil {
- close(hm.done)
- }
- if err != nil {
- c.close(err)
- return
- }
-
- compress := false
- switch c.compression {
- case CompressAlways:
- compress = true
- case CompressMetadata:
- compress = hm.hdr.msgType != messageTypeResponse
- }
-
- if compress && len(uncBuf) >= compressionThreshold {
- // Use compression for large messages
- hm.hdr.compression = true
-
- // Make sure we have enough space for the compressed message plus header in msgBug
- msgBuf = msgBuf[:cap(msgBuf)]
- if maxLen := lz4.CompressBound(len(uncBuf)) + 8; maxLen > len(msgBuf) {
- msgBuf = make([]byte, maxLen)
- }
-
- // Compressed is written to msgBuf, we keep tb for the length only
- tempBuf, err = lz4.Encode(msgBuf[8:], uncBuf)
- binary.BigEndian.PutUint32(msgBuf[4:8], uint32(len(tempBuf)))
- msgBuf = msgBuf[0 : len(tempBuf)+8]
-
- l.Debugf("write compressed message; %v (len=%d)", hm.hdr, len(tempBuf))
- } else {
- // No point in compressing very short messages
- hm.hdr.compression = false
-
- msgBuf = msgBuf[:cap(msgBuf)]
- if l := len(uncBuf) + 8; l > len(msgBuf) {
- msgBuf = make([]byte, l)
- }
-
- binary.BigEndian.PutUint32(msgBuf[4:8], uint32(len(uncBuf)))
- msgBuf = msgBuf[0 : len(uncBuf)+8]
- copy(msgBuf[8:], uncBuf)
-
- l.Debugf("write uncompressed message; %v (len=%d)", hm.hdr, len(uncBuf))
- }
- } else {
- l.Debugf("write empty message; %v", hm.hdr)
- binary.BigEndian.PutUint32(msgBuf[4:8], 0)
- msgBuf = msgBuf[:8]
- }
-
- binary.BigEndian.PutUint32(msgBuf[0:4], encodeHeader(hm.hdr))
-
- if err == nil {
- var n int
- n, err = c.cw.Write(msgBuf)
- l.Debugf("wrote %d bytes on the wire", n)
- }
- if err != nil {
- c.close(err)
- return
- }
- case <-c.closed:
- return
- }
- }
-}
-
-func (c *rawConnection) close(err error) {
- c.once.Do(func() {
- close(c.closed)
-
- c.awaitingMut.Lock()
- for i, ch := range c.awaiting {
- if ch != nil {
- close(ch)
- c.awaiting[i] = nil
- }
- }
- c.awaitingMut.Unlock()
-
- go c.receiver.Close(c.id, err)
- })
-}
-
-func (c *rawConnection) idGenerator() {
- nextID := 0
- for {
- nextID = (nextID + 1) & 0xfff
- select {
- case c.nextID <- nextID:
- case <-c.closed:
- return
- }
- }
-}
-
-// The pingSender makes sure that we've sent a message within the last
-// PingSendInterval. If we already have something sent in the last
-// PingSendInterval/2, we do nothing. Otherwise we send a ping message. This
-// results in an effecting ping interval of somewhere between
-// PingSendInterval/2 and PingSendInterval.
-func (c *rawConnection) pingSender() {
- ticker := time.Tick(PingSendInterval / 2)
-
- for {
- select {
- case <-ticker:
- d := time.Since(c.cw.Last())
- if d < PingSendInterval/2 {
- l.Debugln(c.id, "ping skipped after wr", d)
- continue
- }
-
- l.Debugln(c.id, "ping -> after", d)
- c.ping()
-
- case <-c.closed:
- return
- }
- }
-}
-
-// The pingReciever checks that we've received a message (any message will do,
-// but we expect pings in the absence of other messages) within the last
-// ReceiveTimeout. If not, we close the connection with an ErrTimeout.
-func (c *rawConnection) pingReceiver() {
- ticker := time.Tick(ReceiveTimeout / 2)
-
- for {
- select {
- case <-ticker:
- d := time.Since(c.cr.Last())
- if d > ReceiveTimeout {
- l.Debugln(c.id, "ping timeout", d)
- c.close(ErrTimeout)
- }
-
- l.Debugln(c.id, "last read within", d)
-
- case <-c.closed:
- return
- }
- }
-}
-
-type Statistics struct {
- At time.Time
- InBytesTotal int64
- OutBytesTotal int64
-}
-
-func (c *rawConnection) Statistics() Statistics {
- return Statistics{
- At: time.Now(),
- InBytesTotal: c.cr.Tot(),
- OutBytesTotal: c.cw.Tot(),
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector.go
deleted file mode 100644
index 6c17ac64..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector.go
+++ /dev/null
@@ -1,115 +0,0 @@
-// Copyright (C) 2015 The Protocol Authors.
-
-package protocol
-
-// The Vector type represents a version vector. The zero value is a usable
-// version vector. The vector has slice semantics and some operations on it
-// are "append-like" in that they may return the same vector modified, or v
-// new allocated Vector with the modified contents.
-type Vector []Counter
-
-// Counter represents a single counter in the version vector.
-type Counter struct {
- ID uint64
- Value uint64
-}
-
-// Update returns a Vector with the index for the specific ID incremented by
-// one. If it is possible, the vector v is updated and returned. If it is not,
-// a copy will be created, updated and returned.
-func (v Vector) Update(ID uint64) Vector {
- for i := range v {
- if v[i].ID == ID {
- // Update an existing index
- v[i].Value++
- return v
- } else if v[i].ID > ID {
- // Insert a new index
- nv := make(Vector, len(v)+1)
- copy(nv, v[:i])
- nv[i].ID = ID
- nv[i].Value = 1
- copy(nv[i+1:], v[i:])
- return nv
- }
- }
- // Append a new index
- return append(v, Counter{ID, 1})
-}
-
-// Merge returns the vector containing the maximum indexes from v and b. If it
-// is possible, the vector v is updated and returned. If it is not, a copy
-// will be created, updated and returned.
-func (v Vector) Merge(b Vector) Vector {
- var vi, bi int
- for bi < len(b) {
- if vi == len(v) {
- // We've reach the end of v, all that remains are appends
- return append(v, b[bi:]...)
- }
-
- if v[vi].ID > b[bi].ID {
- // The index from b should be inserted here
- n := make(Vector, len(v)+1)
- copy(n, v[:vi])
- n[vi] = b[bi]
- copy(n[vi+1:], v[vi:])
- v = n
- }
-
- if v[vi].ID == b[bi].ID {
- if val := b[bi].Value; val > v[vi].Value {
- v[vi].Value = val
- }
- }
-
- if bi < len(b) && v[vi].ID == b[bi].ID {
- bi++
- }
- vi++
- }
-
- return v
-}
-
-// Copy returns an identical vector that is not shared with v.
-func (v Vector) Copy() Vector {
- nv := make(Vector, len(v))
- copy(nv, v)
- return nv
-}
-
-// Equal returns true when the two vectors are equivalent.
-func (v Vector) Equal(b Vector) bool {
- return v.Compare(b) == Equal
-}
-
-// LesserEqual returns true when the two vectors are equivalent or v is Lesser
-// than b.
-func (v Vector) LesserEqual(b Vector) bool {
- comp := v.Compare(b)
- return comp == Lesser || comp == Equal
-}
-
-// GreaterEqual returns true when the two vectors are equivalent or v is Greater
-// than b.
-func (v Vector) GreaterEqual(b Vector) bool {
- comp := v.Compare(b)
- return comp == Greater || comp == Equal
-}
-
-// Concurrent returns true when the two vectors are concrurrent.
-func (v Vector) Concurrent(b Vector) bool {
- comp := v.Compare(b)
- return comp == ConcurrentGreater || comp == ConcurrentLesser
-}
-
-// Counter returns the current value of the given counter ID.
-func (v Vector) Counter(id uint64) uint64 {
- for _, c := range v {
- if c.ID == id {
- return c.Value
- }
- }
- return 0
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_compare.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_compare.go
deleted file mode 100644
index 9735ec9d..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_compare.go
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (C) 2015 The Protocol Authors.
-
-package protocol
-
-// Ordering represents the relationship between two Vectors.
-type Ordering int
-
-const (
- Equal Ordering = iota
- Greater
- Lesser
- ConcurrentLesser
- ConcurrentGreater
-)
-
-// There's really no such thing as "concurrent lesser" and "concurrent
-// greater" in version vectors, just "concurrent". But it's useful to be able
-// to get a strict ordering between versions for stable sorts and so on, so we
-// return both variants. The convenience method Concurrent() can be used to
-// check for either case.
-
-// Compare returns the Ordering that describes a's relation to b.
-func (a Vector) Compare(b Vector) Ordering {
- var ai, bi int // index into a and b
- var av, bv Counter // value at current index
-
- result := Equal
-
- for ai < len(a) || bi < len(b) {
- var aMissing, bMissing bool
-
- if ai < len(a) {
- av = a[ai]
- } else {
- av = Counter{}
- aMissing = true
- }
-
- if bi < len(b) {
- bv = b[bi]
- } else {
- bv = Counter{}
- bMissing = true
- }
-
- switch {
- case av.ID == bv.ID:
- // We have a counter value for each side
- if av.Value > bv.Value {
- if result == Lesser {
- return ConcurrentLesser
- }
- result = Greater
- } else if av.Value < bv.Value {
- if result == Greater {
- return ConcurrentGreater
- }
- result = Lesser
- }
-
- case !aMissing && av.ID < bv.ID || bMissing:
- // Value is missing on the b side
- if av.Value > 0 {
- if result == Lesser {
- return ConcurrentLesser
- }
- result = Greater
- }
-
- case !bMissing && bv.ID < av.ID || aMissing:
- // Value is missing on the a side
- if bv.Value > 0 {
- if result == Greater {
- return ConcurrentGreater
- }
- result = Lesser
- }
- }
-
- if ai < len(a) && (av.ID <= bv.ID || bMissing) {
- ai++
- }
- if bi < len(b) && (bv.ID <= av.ID || aMissing) {
- bi++
- }
- }
-
- return result
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_xdr.go
deleted file mode 100644
index 01efa7e4..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/vector_xdr.go
+++ /dev/null
@@ -1,43 +0,0 @@
-// Copyright (C) 2015 The Protocol Authors.
-
-package protocol
-
-import "github.com/calmh/xdr"
-
-// This stuff is hacked up manually because genxdr doesn't support 'type
-// Vector []Counter' declarations and it was tricky when I tried to add it...
-
-type xdrWriter interface {
- WriteUint32(uint32) (int, error)
- WriteUint64(uint64) (int, error)
-}
-type xdrReader interface {
- ReadUint32() uint32
- ReadUint64() uint64
-}
-
-// EncodeXDRInto encodes the vector as an XDR object into the given XDR
-// encoder.
-func (v Vector) EncodeXDRInto(w xdrWriter) (int, error) {
- w.WriteUint32(uint32(len(v)))
- for i := range v {
- w.WriteUint64(v[i].ID)
- w.WriteUint64(v[i].Value)
- }
- return 4 + 16*len(v), nil
-}
-
-// DecodeXDRFrom decodes the XDR objects from the given reader into itself.
-func (v *Vector) DecodeXDRFrom(r xdrReader) error {
- l := int(r.ReadUint32())
- if l > 1e6 {
- return xdr.ElementSizeExceeded("number of counters", l, 1e6)
- }
- n := make(Vector, l)
- for i := range n {
- n[i].ID = r.ReadUint64()
- n[i].Value = r.ReadUint64()
- }
- *v = n
- return nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/wireformat.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/wireformat.go
deleted file mode 100644
index 66b02ed6..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/protocol/wireformat.go
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2014 The Protocol Authors.
-
-package protocol
-
-import (
- "path/filepath"
-
- "golang.org/x/text/unicode/norm"
-)
-
-type wireFormatConnection struct {
- next Connection
-}
-
-func (c wireFormatConnection) Start() {
- c.next.Start()
-}
-
-func (c wireFormatConnection) ID() DeviceID {
- return c.next.ID()
-}
-
-func (c wireFormatConnection) Name() string {
- return c.next.Name()
-}
-
-func (c wireFormatConnection) Index(folder string, fs []FileInfo, flags uint32, options []Option) error {
- var myFs = make([]FileInfo, len(fs))
- copy(myFs, fs)
-
- for i := range fs {
- myFs[i].Name = norm.NFC.String(filepath.ToSlash(myFs[i].Name))
- }
-
- return c.next.Index(folder, myFs, flags, options)
-}
-
-func (c wireFormatConnection) IndexUpdate(folder string, fs []FileInfo, flags uint32, options []Option) error {
- var myFs = make([]FileInfo, len(fs))
- copy(myFs, fs)
-
- for i := range fs {
- myFs[i].Name = norm.NFC.String(filepath.ToSlash(myFs[i].Name))
- }
-
- return c.next.IndexUpdate(folder, myFs, flags, options)
-}
-
-func (c wireFormatConnection) Request(folder, name string, offset int64, size int, hash []byte, flags uint32, options []Option) ([]byte, error) {
- name = norm.NFC.String(filepath.ToSlash(name))
- return c.next.Request(folder, name, offset, size, hash, flags, options)
-}
-
-func (c wireFormatConnection) ClusterConfig(config ClusterConfigMessage) {
- c.next.ClusterConfig(config)
-}
-
-func (c wireFormatConnection) Statistics() Statistics {
- return c.next.Statistics()
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/client.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/client.go
deleted file mode 100644
index 992218ed..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/client.go
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file).
-
-package client
-
-import (
- "crypto/tls"
- "fmt"
- "net/url"
- "time"
-
- "github.com/syncthing/syncthing/lib/relay/protocol"
-)
-
-type relayClientFactory func(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) RelayClient
-
-var (
- supportedSchemes = map[string]relayClientFactory{
- "relay": newStaticClient,
- "dynamic+http": newDynamicClient,
- "dynamic+https": newDynamicClient,
- }
-)
-
-type RelayClient interface {
- Serve()
- Stop()
- StatusOK() bool
- Latency() time.Duration
- String() string
- Invitations() chan protocol.SessionInvitation
- URI() *url.URL
-}
-
-func NewClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) (RelayClient, error) {
- factory, ok := supportedSchemes[uri.Scheme]
- if !ok {
- return nil, fmt.Errorf("Unsupported scheme: %s", uri.Scheme)
- }
-
- return factory(uri, certs, invitations, timeout), nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/debug.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/debug.go
deleted file mode 100644
index 814810ba..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/debug.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file).
-
-package client
-
-import (
- "os"
- "strings"
-
- "github.com/syncthing/syncthing/lib/logger"
-)
-
-var (
- l = logger.DefaultLogger.NewFacility("relay", "")
-)
-
-func init() {
- l.SetDebug("relay", strings.Contains(os.Getenv("STTRACE"), "relay") || os.Getenv("STTRACE") == "all")
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/dynamic.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/dynamic.go
deleted file mode 100644
index 13017793..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/dynamic.go
+++ /dev/null
@@ -1,222 +0,0 @@
-// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file).
-
-package client
-
-import (
- "crypto/tls"
- "encoding/json"
- "fmt"
- "math/rand"
- "net/http"
- "net/url"
- "sort"
- "time"
-
- "github.com/syncthing/syncthing/lib/osutil"
- "github.com/syncthing/syncthing/lib/relay/protocol"
- "github.com/syncthing/syncthing/lib/sync"
-)
-
-type dynamicClient struct {
- pooladdr *url.URL
- certs []tls.Certificate
- invitations chan protocol.SessionInvitation
- closeInvitationsOnFinish bool
- timeout time.Duration
-
- mut sync.RWMutex
- client RelayClient
- stop chan struct{}
-}
-
-func newDynamicClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) RelayClient {
- closeInvitationsOnFinish := false
- if invitations == nil {
- closeInvitationsOnFinish = true
- invitations = make(chan protocol.SessionInvitation)
- }
- return &dynamicClient{
- pooladdr: uri,
- certs: certs,
- invitations: invitations,
- closeInvitationsOnFinish: closeInvitationsOnFinish,
- timeout: timeout,
-
- mut: sync.NewRWMutex(),
- }
-}
-
-func (c *dynamicClient) Serve() {
- c.mut.Lock()
- c.stop = make(chan struct{})
- c.mut.Unlock()
-
- uri := *c.pooladdr
-
- // Trim off the `dynamic+` prefix
- uri.Scheme = uri.Scheme[8:]
-
- l.Debugln(c, "looking up dynamic relays")
-
- data, err := http.Get(uri.String())
- if err != nil {
- l.Debugln(c, "failed to lookup dynamic relays", err)
- return
- }
-
- var ann dynamicAnnouncement
- err = json.NewDecoder(data.Body).Decode(&ann)
- data.Body.Close()
- if err != nil {
- l.Debugln(c, "failed to lookup dynamic relays", err)
- return
- }
-
- defer c.cleanup()
-
- var addrs []string
- for _, relayAnn := range ann.Relays {
- ruri, err := url.Parse(relayAnn.URL)
- if err != nil {
- l.Debugln(c, "failed to parse dynamic relay address", relayAnn.URL, err)
- continue
- }
- l.Debugln(c, "found", ruri)
- addrs = append(addrs, ruri.String())
- }
-
- for _, addr := range relayAddressesOrder(addrs) {
- select {
- case <-c.stop:
- l.Debugln(c, "stopping")
- return
- default:
- ruri, err := url.Parse(addr)
- if err != nil {
- l.Debugln(c, "skipping relay", addr, err)
- continue
- }
- client, err := NewClient(ruri, c.certs, c.invitations, c.timeout)
- if err != nil {
- continue
- }
- c.mut.Lock()
- c.client = client
- c.mut.Unlock()
-
- c.client.Serve()
-
- c.mut.Lock()
- c.client = nil
- c.mut.Unlock()
- }
- }
- l.Debugln(c, "could not find a connectable relay")
-}
-
-func (c *dynamicClient) Stop() {
- c.mut.RLock()
- defer c.mut.RUnlock()
- close(c.stop)
- if c.client == nil {
- return
- }
- c.client.Stop()
-}
-
-func (c *dynamicClient) StatusOK() bool {
- c.mut.RLock()
- defer c.mut.RUnlock()
- if c.client == nil {
- return false
- }
- return c.client.StatusOK()
-}
-
-func (c *dynamicClient) Latency() time.Duration {
- c.mut.RLock()
- defer c.mut.RUnlock()
- if c.client == nil {
- return time.Hour
- }
- return c.client.Latency()
-}
-
-func (c *dynamicClient) String() string {
- return fmt.Sprintf("DynamicClient:%p:%s@%s", c, c.URI(), c.pooladdr)
-}
-
-func (c *dynamicClient) URI() *url.URL {
- c.mut.RLock()
- defer c.mut.RUnlock()
- if c.client == nil {
- return c.pooladdr
- }
- return c.client.URI()
-}
-
-func (c *dynamicClient) Invitations() chan protocol.SessionInvitation {
- c.mut.RLock()
- inv := c.invitations
- c.mut.RUnlock()
- return inv
-}
-
-func (c *dynamicClient) cleanup() {
- c.mut.Lock()
- if c.closeInvitationsOnFinish {
- close(c.invitations)
- c.invitations = make(chan protocol.SessionInvitation)
- }
- c.mut.Unlock()
-}
-
-// This is the announcement recieved from the relay server;
-// {"relays": [{"url": "relay://10.20.30.40:5060"}, ...]}
-type dynamicAnnouncement struct {
- Relays []struct {
- URL string
- }
-}
-
-// relayAddressesOrder checks the latency to each relay, rounds latency down to
-// the closest 50ms, and puts them in buckets of 50ms latency ranges. Then
-// shuffles each bucket, and returns all addresses starting with the ones from
-// the lowest latency bucket, ending with the highest latency buceket.
-func relayAddressesOrder(input []string) []string {
- buckets := make(map[int][]string)
-
- for _, relay := range input {
- latency, err := osutil.GetLatencyForURL(relay)
- if err != nil {
- latency = time.Hour
- }
-
- id := int(latency/time.Millisecond) / 50
-
- buckets[id] = append(buckets[id], relay)
- }
-
- var ids []int
- for id, bucket := range buckets {
- shuffle(bucket)
- ids = append(ids, id)
- }
-
- sort.Ints(ids)
-
- addresses := make([]string, len(input))
-
- for _, id := range ids {
- addresses = append(addresses, buckets[id]...)
- }
-
- return addresses
-}
-
-func shuffle(slice []string) {
- for i := len(slice) - 1; i > 0; i-- {
- j := rand.Intn(i + 1)
- slice[i], slice[j] = slice[j], slice[i]
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/methods.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/methods.go
deleted file mode 100644
index 3376e1d2..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/methods.go
+++ /dev/null
@@ -1,146 +0,0 @@
-// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file).
-
-package client
-
-import (
- "crypto/tls"
- "fmt"
- "net"
- "net/url"
- "strconv"
- "strings"
- "time"
-
- "github.com/syncthing/syncthing/lib/dialer"
- syncthingprotocol "github.com/syncthing/syncthing/lib/protocol"
- "github.com/syncthing/syncthing/lib/relay/protocol"
-)
-
-func GetInvitationFromRelay(uri *url.URL, id syncthingprotocol.DeviceID, certs []tls.Certificate, timeout time.Duration) (protocol.SessionInvitation, error) {
- if uri.Scheme != "relay" {
- return protocol.SessionInvitation{}, fmt.Errorf("Unsupported relay scheme: %v", uri.Scheme)
- }
-
- rconn, err := dialer.DialTimeout("tcp", uri.Host, timeout)
- if err != nil {
- return protocol.SessionInvitation{}, err
- }
-
- conn := tls.Client(rconn, configForCerts(certs))
- conn.SetDeadline(time.Now().Add(timeout))
-
- if err := performHandshakeAndValidation(conn, uri); err != nil {
- return protocol.SessionInvitation{}, err
- }
-
- defer conn.Close()
-
- request := protocol.ConnectRequest{
- ID: id[:],
- }
-
- if err := protocol.WriteMessage(conn, request); err != nil {
- return protocol.SessionInvitation{}, err
- }
-
- message, err := protocol.ReadMessage(conn)
- if err != nil {
- return protocol.SessionInvitation{}, err
- }
-
- switch msg := message.(type) {
- case protocol.Response:
- return protocol.SessionInvitation{}, fmt.Errorf("Incorrect response code %d: %s", msg.Code, msg.Message)
- case protocol.SessionInvitation:
- l.Debugln("Received invitation", msg, "via", conn.LocalAddr())
- ip := net.IP(msg.Address)
- if len(ip) == 0 || ip.IsUnspecified() {
- msg.Address = conn.RemoteAddr().(*net.TCPAddr).IP[:]
- }
- return msg, nil
- default:
- return protocol.SessionInvitation{}, fmt.Errorf("protocol error: unexpected message %v", msg)
- }
-}
-
-func JoinSession(invitation protocol.SessionInvitation) (net.Conn, error) {
- addr := net.JoinHostPort(net.IP(invitation.Address).String(), strconv.Itoa(int(invitation.Port)))
-
- conn, err := dialer.Dial("tcp", addr)
- if err != nil {
- return nil, err
- }
-
- request := protocol.JoinSessionRequest{
- Key: invitation.Key,
- }
-
- conn.SetDeadline(time.Now().Add(10 * time.Second))
- err = protocol.WriteMessage(conn, request)
- if err != nil {
- return nil, err
- }
-
- message, err := protocol.ReadMessage(conn)
- if err != nil {
- return nil, err
- }
-
- conn.SetDeadline(time.Time{})
-
- switch msg := message.(type) {
- case protocol.Response:
- if msg.Code != 0 {
- return nil, fmt.Errorf("Incorrect response code %d: %s", msg.Code, msg.Message)
- }
- return conn, nil
- default:
- return nil, fmt.Errorf("protocol error: expecting response got %v", msg)
- }
-}
-
-func TestRelay(uri *url.URL, certs []tls.Certificate, sleep, timeout time.Duration, times int) bool {
- id := syncthingprotocol.NewDeviceID(certs[0].Certificate[0])
- invs := make(chan protocol.SessionInvitation, 1)
- c, err := NewClient(uri, certs, invs, timeout)
- if err != nil {
- close(invs)
- return false
- }
- go c.Serve()
- defer func() {
- c.Stop()
- close(invs)
- }()
-
- for i := 0; i < times; i++ {
- _, err := GetInvitationFromRelay(uri, id, certs, timeout)
- if err == nil {
- return true
- }
- if !strings.Contains(err.Error(), "Incorrect response code") {
- return false
- }
- time.Sleep(sleep)
- }
- return false
-}
-
-func configForCerts(certs []tls.Certificate) *tls.Config {
- return &tls.Config{
- Certificates: certs,
- NextProtos: []string{protocol.ProtocolName},
- ClientAuth: tls.RequestClientCert,
- SessionTicketsDisabled: true,
- InsecureSkipVerify: true,
- MinVersion: tls.VersionTLS12,
- CipherSuites: []uint16{
- tls.TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
- tls.TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,
- tls.TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
- tls.TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,
- tls.TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,
- tls.TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,
- },
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/static.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/static.go
deleted file mode 100644
index f929530f..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/client/static.go
+++ /dev/null
@@ -1,298 +0,0 @@
-// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file).
-
-package client
-
-import (
- "crypto/tls"
- "fmt"
- "net"
- "net/url"
- "time"
-
- "github.com/syncthing/syncthing/lib/dialer"
- syncthingprotocol "github.com/syncthing/syncthing/lib/protocol"
- "github.com/syncthing/syncthing/lib/relay/protocol"
- "github.com/syncthing/syncthing/lib/sync"
-)
-
-type staticClient struct {
- uri *url.URL
- invitations chan protocol.SessionInvitation
-
- closeInvitationsOnFinish bool
-
- config *tls.Config
-
- messageTimeout time.Duration
- connectTimeout time.Duration
-
- stop chan struct{}
- stopped chan struct{}
-
- conn *tls.Conn
-
- mut sync.RWMutex
- connected bool
- latency time.Duration
-}
-
-func newStaticClient(uri *url.URL, certs []tls.Certificate, invitations chan protocol.SessionInvitation, timeout time.Duration) RelayClient {
- closeInvitationsOnFinish := false
- if invitations == nil {
- closeInvitationsOnFinish = true
- invitations = make(chan protocol.SessionInvitation)
- }
-
- return &staticClient{
- uri: uri,
- invitations: invitations,
-
- closeInvitationsOnFinish: closeInvitationsOnFinish,
-
- config: configForCerts(certs),
-
- messageTimeout: time.Minute * 2,
- connectTimeout: timeout,
-
- stop: make(chan struct{}),
- stopped: make(chan struct{}),
-
- mut: sync.NewRWMutex(),
- connected: false,
- }
-}
-
-func (c *staticClient) Serve() {
- c.stop = make(chan struct{})
- c.stopped = make(chan struct{})
- defer close(c.stopped)
-
- if err := c.connect(); err != nil {
- l.Debugln("Relay connect:", err)
- return
- }
-
- l.Debugln(c, "connected", c.conn.RemoteAddr())
-
- if err := c.join(); err != nil {
- c.conn.Close()
- l.Infoln("Relay join:", err)
- return
- }
-
- if err := c.conn.SetDeadline(time.Time{}); err != nil {
- c.conn.Close()
- l.Infoln("Relay set deadline:", err)
- return
- }
-
- l.Debugln(c, "joined", c.conn.RemoteAddr(), "via", c.conn.LocalAddr())
-
- defer c.cleanup()
- c.mut.Lock()
- c.connected = true
- c.mut.Unlock()
-
- messages := make(chan interface{})
- errors := make(chan error, 1)
-
- go messageReader(c.conn, messages, errors)
-
- timeout := time.NewTimer(c.messageTimeout)
-
- for {
- select {
- case message := <-messages:
- timeout.Reset(c.messageTimeout)
- l.Debugf("%s received message %T", c, message)
-
- switch msg := message.(type) {
- case protocol.Ping:
- if err := protocol.WriteMessage(c.conn, protocol.Pong{}); err != nil {
- l.Infoln("Relay write:", err)
- return
-
- }
- l.Debugln(c, "sent pong")
-
- case protocol.SessionInvitation:
- ip := net.IP(msg.Address)
- if len(ip) == 0 || ip.IsUnspecified() {
- msg.Address = c.conn.RemoteAddr().(*net.TCPAddr).IP[:]
- }
- c.invitations <- msg
-
- case protocol.RelayFull:
- l.Infoln("Disconnected from relay due to it becoming full.")
- return
-
- default:
- l.Infoln("Relay: protocol error: unexpected message %v", msg)
- return
- }
-
- case <-c.stop:
- l.Debugln(c, "stopping")
- return
-
- case err := <-errors:
- l.Infoln("Relay received:", err)
- return
-
- case <-timeout.C:
- l.Debugln(c, "timed out")
- return
- }
- }
-}
-
-func (c *staticClient) Stop() {
- if c.stop == nil {
- return
- }
-
- close(c.stop)
- <-c.stopped
-}
-
-func (c *staticClient) StatusOK() bool {
- c.mut.RLock()
- con := c.connected
- c.mut.RUnlock()
- return con
-}
-
-func (c *staticClient) Latency() time.Duration {
- c.mut.RLock()
- lat := c.latency
- c.mut.RUnlock()
- return lat
-}
-
-func (c *staticClient) String() string {
- return fmt.Sprintf("StaticClient:%p@%s", c, c.URI())
-}
-
-func (c *staticClient) URI() *url.URL {
- return c.uri
-}
-
-func (c *staticClient) Invitations() chan protocol.SessionInvitation {
- c.mut.RLock()
- inv := c.invitations
- c.mut.RUnlock()
- return inv
-}
-
-func (c *staticClient) connect() error {
- if c.uri.Scheme != "relay" {
- return fmt.Errorf("Unsupported relay schema: %v", c.uri.Scheme)
- }
-
- t0 := time.Now()
- tcpConn, err := dialer.DialTimeout("tcp", c.uri.Host, c.connectTimeout)
- if err != nil {
- return err
- }
-
- c.mut.Lock()
- c.latency = time.Since(t0)
- c.mut.Unlock()
-
- conn := tls.Client(tcpConn, c.config)
-
- if err := conn.SetDeadline(time.Now().Add(c.connectTimeout)); err != nil {
- conn.Close()
- return err
- }
-
- if err := performHandshakeAndValidation(conn, c.uri); err != nil {
- conn.Close()
- return err
- }
-
- c.conn = conn
- return nil
-}
-
-func (c *staticClient) cleanup() {
- l.Debugln(c, "cleaning up")
- c.mut.Lock()
- if c.closeInvitationsOnFinish {
- close(c.invitations)
- c.invitations = make(chan protocol.SessionInvitation)
- }
- c.connected = false
- c.mut.Unlock()
-
- c.conn.Close()
-}
-
-func (c *staticClient) join() error {
- if err := protocol.WriteMessage(c.conn, protocol.JoinRelayRequest{}); err != nil {
- return err
- }
-
- message, err := protocol.ReadMessage(c.conn)
- if err != nil {
- return err
- }
-
- switch msg := message.(type) {
- case protocol.Response:
- if msg.Code != 0 {
- return fmt.Errorf("Incorrect response code %d: %s", msg.Code, msg.Message)
- }
-
- case protocol.RelayFull:
- return fmt.Errorf("relay full")
-
- default:
- return fmt.Errorf("protocol error: expecting response got %v", msg)
- }
-
- return nil
-}
-
-func performHandshakeAndValidation(conn *tls.Conn, uri *url.URL) error {
- if err := conn.Handshake(); err != nil {
- return err
- }
-
- cs := conn.ConnectionState()
- if !cs.NegotiatedProtocolIsMutual || cs.NegotiatedProtocol != protocol.ProtocolName {
- return fmt.Errorf("protocol negotiation error")
- }
-
- q := uri.Query()
- relayIDs := q.Get("id")
- if relayIDs != "" {
- relayID, err := syncthingprotocol.DeviceIDFromString(relayIDs)
- if err != nil {
- return fmt.Errorf("relay address contains invalid verification id: %s", err)
- }
-
- certs := cs.PeerCertificates
- if cl := len(certs); cl != 1 {
- return fmt.Errorf("unexpected certificate count: %d", cl)
- }
-
- remoteID := syncthingprotocol.NewDeviceID(certs[0].Raw)
- if remoteID != relayID {
- return fmt.Errorf("relay id does not match. Expected %v got %v", relayID, remoteID)
- }
- }
-
- return nil
-}
-
-func messageReader(conn net.Conn, messages chan<- interface{}, errors chan<- error) {
- for {
- msg, err := protocol.ReadMessage(conn)
- if err != nil {
- errors <- err
- return
- }
- messages <- msg
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets.go
deleted file mode 100644
index fca3598a..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets.go
+++ /dev/null
@@ -1,68 +0,0 @@
-// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file).
-
-//go:generate -command genxdr go run ../../../Godeps/_workspace/src/github.com/calmh/xdr/cmd/genxdr/main.go
-//go:generate genxdr -o packets_xdr.go packets.go
-
-package protocol
-
-import (
- "fmt"
- "net"
-
- syncthingprotocol "github.com/syncthing/syncthing/lib/protocol"
-)
-
-const (
- messageTypePing int32 = iota
- messageTypePong
- messageTypeJoinRelayRequest
- messageTypeJoinSessionRequest
- messageTypeResponse
- messageTypeConnectRequest
- messageTypeSessionInvitation
- messageTypeRelayFull
-)
-
-type header struct {
- magic uint32
- messageType int32
- messageLength int32
-}
-
-type Ping struct{}
-type Pong struct{}
-type JoinRelayRequest struct{}
-type RelayFull struct{}
-
-type JoinSessionRequest struct {
- Key []byte // max:32
-}
-
-type Response struct {
- Code int32
- Message string
-}
-
-type ConnectRequest struct {
- ID []byte // max:32
-}
-
-type SessionInvitation struct {
- From []byte // max:32
- Key []byte // max:32
- Address []byte // max:32
- Port uint16
- ServerSocket bool
-}
-
-func (i SessionInvitation) String() string {
- return fmt.Sprintf("%s@%s", syncthingprotocol.DeviceIDFromBytes(i.From), i.AddressString())
-}
-
-func (i SessionInvitation) GoString() string {
- return i.String()
-}
-
-func (i SessionInvitation) AddressString() string {
- return fmt.Sprintf("%s:%d", net.IP(i.Address), i.Port)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets_xdr.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets_xdr.go
deleted file mode 100644
index 9eef6c0f..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/packets_xdr.go
+++ /dev/null
@@ -1,568 +0,0 @@
-// ************************************************************
-// This file is automatically generated by genxdr. Do not edit.
-// ************************************************************
-
-package protocol
-
-import (
- "bytes"
- "io"
-
- "github.com/calmh/xdr"
-)
-
-/*
-
-header Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| magic |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| message Type |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| message Length |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct header {
- unsigned int magic;
- int messageType;
- int messageLength;
-}
-
-*/
-
-func (o header) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o header) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o header) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o header) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o header) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- xw.WriteUint32(o.magic)
- xw.WriteUint32(uint32(o.messageType))
- xw.WriteUint32(uint32(o.messageLength))
- return xw.Tot(), xw.Error()
-}
-
-func (o *header) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *header) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *header) DecodeXDRFrom(xr *xdr.Reader) error {
- o.magic = xr.ReadUint32()
- o.messageType = int32(xr.ReadUint32())
- o.messageLength = int32(xr.ReadUint32())
- return xr.Error()
-}
-
-/*
-
-Ping Structure:
-(contains no fields)
-
-
-struct Ping {
-}
-
-*/
-
-func (o Ping) EncodeXDR(w io.Writer) (int, error) {
- return 0, nil
-}
-
-func (o Ping) MarshalXDR() ([]byte, error) {
- return nil, nil
-}
-
-func (o Ping) MustMarshalXDR() []byte {
- return nil
-}
-
-func (o Ping) AppendXDR(bs []byte) ([]byte, error) {
- return bs, nil
-}
-
-func (o Ping) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- return xw.Tot(), xw.Error()
-}
-
-func (o *Ping) DecodeXDR(r io.Reader) error {
- return nil
-}
-
-func (o *Ping) UnmarshalXDR(bs []byte) error {
- return nil
-}
-
-func (o *Ping) DecodeXDRFrom(xr *xdr.Reader) error {
- return xr.Error()
-}
-
-/*
-
-Pong Structure:
-(contains no fields)
-
-
-struct Pong {
-}
-
-*/
-
-func (o Pong) EncodeXDR(w io.Writer) (int, error) {
- return 0, nil
-}
-
-func (o Pong) MarshalXDR() ([]byte, error) {
- return nil, nil
-}
-
-func (o Pong) MustMarshalXDR() []byte {
- return nil
-}
-
-func (o Pong) AppendXDR(bs []byte) ([]byte, error) {
- return bs, nil
-}
-
-func (o Pong) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- return xw.Tot(), xw.Error()
-}
-
-func (o *Pong) DecodeXDR(r io.Reader) error {
- return nil
-}
-
-func (o *Pong) UnmarshalXDR(bs []byte) error {
- return nil
-}
-
-func (o *Pong) DecodeXDRFrom(xr *xdr.Reader) error {
- return xr.Error()
-}
-
-/*
-
-JoinRelayRequest Structure:
-(contains no fields)
-
-
-struct JoinRelayRequest {
-}
-
-*/
-
-func (o JoinRelayRequest) EncodeXDR(w io.Writer) (int, error) {
- return 0, nil
-}
-
-func (o JoinRelayRequest) MarshalXDR() ([]byte, error) {
- return nil, nil
-}
-
-func (o JoinRelayRequest) MustMarshalXDR() []byte {
- return nil
-}
-
-func (o JoinRelayRequest) AppendXDR(bs []byte) ([]byte, error) {
- return bs, nil
-}
-
-func (o JoinRelayRequest) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- return xw.Tot(), xw.Error()
-}
-
-func (o *JoinRelayRequest) DecodeXDR(r io.Reader) error {
- return nil
-}
-
-func (o *JoinRelayRequest) UnmarshalXDR(bs []byte) error {
- return nil
-}
-
-func (o *JoinRelayRequest) DecodeXDRFrom(xr *xdr.Reader) error {
- return xr.Error()
-}
-
-/*
-
-RelayFull Structure:
-(contains no fields)
-
-
-struct RelayFull {
-}
-
-*/
-
-func (o RelayFull) EncodeXDR(w io.Writer) (int, error) {
- return 0, nil
-}
-
-func (o RelayFull) MarshalXDR() ([]byte, error) {
- return nil, nil
-}
-
-func (o RelayFull) MustMarshalXDR() []byte {
- return nil
-}
-
-func (o RelayFull) AppendXDR(bs []byte) ([]byte, error) {
- return bs, nil
-}
-
-func (o RelayFull) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- return xw.Tot(), xw.Error()
-}
-
-func (o *RelayFull) DecodeXDR(r io.Reader) error {
- return nil
-}
-
-func (o *RelayFull) UnmarshalXDR(bs []byte) error {
- return nil
-}
-
-func (o *RelayFull) DecodeXDRFrom(xr *xdr.Reader) error {
- return xr.Error()
-}
-
-/*
-
-JoinSessionRequest Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Key |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Key (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct JoinSessionRequest {
- opaque Key<32>;
-}
-
-*/
-
-func (o JoinSessionRequest) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o JoinSessionRequest) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o JoinSessionRequest) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o JoinSessionRequest) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o JoinSessionRequest) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.Key); l > 32 {
- return xw.Tot(), xdr.ElementSizeExceeded("Key", l, 32)
- }
- xw.WriteBytes(o.Key)
- return xw.Tot(), xw.Error()
-}
-
-func (o *JoinSessionRequest) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *JoinSessionRequest) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *JoinSessionRequest) DecodeXDRFrom(xr *xdr.Reader) error {
- o.Key = xr.ReadBytesMax(32)
- return xr.Error()
-}
-
-/*
-
-Response Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Code |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Message |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Message (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct Response {
- int Code;
- string Message<>;
-}
-
-*/
-
-func (o Response) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o Response) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o Response) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o Response) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o Response) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- xw.WriteUint32(uint32(o.Code))
- xw.WriteString(o.Message)
- return xw.Tot(), xw.Error()
-}
-
-func (o *Response) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *Response) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *Response) DecodeXDRFrom(xr *xdr.Reader) error {
- o.Code = int32(xr.ReadUint32())
- o.Message = xr.ReadString()
- return xr.Error()
-}
-
-/*
-
-ConnectRequest Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of ID |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ ID (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct ConnectRequest {
- opaque ID<32>;
-}
-
-*/
-
-func (o ConnectRequest) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o ConnectRequest) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o ConnectRequest) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o ConnectRequest) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o ConnectRequest) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.ID); l > 32 {
- return xw.Tot(), xdr.ElementSizeExceeded("ID", l, 32)
- }
- xw.WriteBytes(o.ID)
- return xw.Tot(), xw.Error()
-}
-
-func (o *ConnectRequest) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *ConnectRequest) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *ConnectRequest) DecodeXDRFrom(xr *xdr.Reader) error {
- o.ID = xr.ReadBytesMax(32)
- return xr.Error()
-}
-
-/*
-
-SessionInvitation Structure:
-
- 0 1 2 3
- 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of From |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ From (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Key |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Key (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Length of Address |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-/ /
-\ Address (variable length) \
-/ /
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| 0x0000 | Port |
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-| Server Socket (V=0 or 1) |V|
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-
-
-struct SessionInvitation {
- opaque From<32>;
- opaque Key<32>;
- opaque Address<32>;
- unsigned int Port;
- bool ServerSocket;
-}
-
-*/
-
-func (o SessionInvitation) EncodeXDR(w io.Writer) (int, error) {
- var xw = xdr.NewWriter(w)
- return o.EncodeXDRInto(xw)
-}
-
-func (o SessionInvitation) MarshalXDR() ([]byte, error) {
- return o.AppendXDR(make([]byte, 0, 128))
-}
-
-func (o SessionInvitation) MustMarshalXDR() []byte {
- bs, err := o.MarshalXDR()
- if err != nil {
- panic(err)
- }
- return bs
-}
-
-func (o SessionInvitation) AppendXDR(bs []byte) ([]byte, error) {
- var aw = xdr.AppendWriter(bs)
- var xw = xdr.NewWriter(&aw)
- _, err := o.EncodeXDRInto(xw)
- return []byte(aw), err
-}
-
-func (o SessionInvitation) EncodeXDRInto(xw *xdr.Writer) (int, error) {
- if l := len(o.From); l > 32 {
- return xw.Tot(), xdr.ElementSizeExceeded("From", l, 32)
- }
- xw.WriteBytes(o.From)
- if l := len(o.Key); l > 32 {
- return xw.Tot(), xdr.ElementSizeExceeded("Key", l, 32)
- }
- xw.WriteBytes(o.Key)
- if l := len(o.Address); l > 32 {
- return xw.Tot(), xdr.ElementSizeExceeded("Address", l, 32)
- }
- xw.WriteBytes(o.Address)
- xw.WriteUint16(o.Port)
- xw.WriteBool(o.ServerSocket)
- return xw.Tot(), xw.Error()
-}
-
-func (o *SessionInvitation) DecodeXDR(r io.Reader) error {
- xr := xdr.NewReader(r)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *SessionInvitation) UnmarshalXDR(bs []byte) error {
- var br = bytes.NewReader(bs)
- var xr = xdr.NewReader(br)
- return o.DecodeXDRFrom(xr)
-}
-
-func (o *SessionInvitation) DecodeXDRFrom(xr *xdr.Reader) error {
- o.From = xr.ReadBytesMax(32)
- o.Key = xr.ReadBytesMax(32)
- o.Address = xr.ReadBytesMax(32)
- o.Port = xr.ReadUint16()
- o.ServerSocket = xr.ReadBool()
- return xr.Error()
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/protocol.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/protocol.go
deleted file mode 100644
index dad76d94..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/relay/protocol/protocol.go
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright (C) 2015 Audrius Butkevicius and Contributors (see the CONTRIBUTORS file).
-
-package protocol
-
-import (
- "fmt"
- "io"
-)
-
-const (
- magic = 0x9E79BC40
- ProtocolName = "bep-relay"
-)
-
-var (
- ResponseSuccess = Response{0, "success"}
- ResponseNotFound = Response{1, "not found"}
- ResponseAlreadyConnected = Response{2, "already connected"}
- ResponseInternalError = Response{99, "internal error"}
- ResponseUnexpectedMessage = Response{100, "unexpected message"}
-)
-
-func WriteMessage(w io.Writer, message interface{}) error {
- header := header{
- magic: magic,
- }
-
- var payload []byte
- var err error
-
- switch msg := message.(type) {
- case Ping:
- payload, err = msg.MarshalXDR()
- header.messageType = messageTypePing
- case Pong:
- payload, err = msg.MarshalXDR()
- header.messageType = messageTypePong
- case JoinRelayRequest:
- payload, err = msg.MarshalXDR()
- header.messageType = messageTypeJoinRelayRequest
- case JoinSessionRequest:
- payload, err = msg.MarshalXDR()
- header.messageType = messageTypeJoinSessionRequest
- case Response:
- payload, err = msg.MarshalXDR()
- header.messageType = messageTypeResponse
- case ConnectRequest:
- payload, err = msg.MarshalXDR()
- header.messageType = messageTypeConnectRequest
- case SessionInvitation:
- payload, err = msg.MarshalXDR()
- header.messageType = messageTypeSessionInvitation
- case RelayFull:
- payload, err = msg.MarshalXDR()
- header.messageType = messageTypeRelayFull
- default:
- err = fmt.Errorf("Unknown message type")
- }
-
- if err != nil {
- return err
- }
-
- header.messageLength = int32(len(payload))
-
- headerpayload, err := header.MarshalXDR()
- if err != nil {
- return err
- }
-
- _, err = w.Write(append(headerpayload, payload...))
- return err
-}
-
-func ReadMessage(r io.Reader) (interface{}, error) {
- var header header
- if err := header.DecodeXDR(r); err != nil {
- return nil, err
- }
-
- if header.magic != magic {
- return nil, fmt.Errorf("magic mismatch")
- }
-
- switch header.messageType {
- case messageTypePing:
- var msg Ping
- err := msg.DecodeXDR(r)
- return msg, err
- case messageTypePong:
- var msg Pong
- err := msg.DecodeXDR(r)
- return msg, err
- case messageTypeJoinRelayRequest:
- var msg JoinRelayRequest
- err := msg.DecodeXDR(r)
- return msg, err
- case messageTypeJoinSessionRequest:
- var msg JoinSessionRequest
- err := msg.DecodeXDR(r)
- return msg, err
- case messageTypeResponse:
- var msg Response
- err := msg.DecodeXDR(r)
- return msg, err
- case messageTypeConnectRequest:
- var msg ConnectRequest
- err := msg.DecodeXDR(r)
- return msg, err
- case messageTypeSessionInvitation:
- var msg SessionInvitation
- err := msg.DecodeXDR(r)
- return msg, err
- case messageTypeRelayFull:
- var msg RelayFull
- err := msg.DecodeXDR(r)
- return msg, err
- }
-
- return nil, fmt.Errorf("Unknown message type")
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/debug.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/debug.go
deleted file mode 100644
index 678a717e..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/debug.go
+++ /dev/null
@@ -1,35 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-package sync
-
-import (
- "os"
- "strconv"
- "strings"
- "time"
-
- "github.com/syncthing/syncthing/lib/logger"
-)
-
-var (
- threshold = time.Duration(100 * time.Millisecond)
- l = logger.DefaultLogger.NewFacility("sync", "Mutexes")
-
- // We make an exception in this package and have an actual "if debug { ...
- // }" variable, as it may be rather performance critical and does
- // nonstandard things (from a debug logging PoV).
- debug = strings.Contains(os.Getenv("STTRACE"), "sync") || os.Getenv("STTRACE") == "all"
-)
-
-func init() {
- l.SetDebug("sync", strings.Contains(os.Getenv("STTRACE"), "sync") || os.Getenv("STTRACE") == "all")
-
- if n, err := strconv.Atoi(os.Getenv("STLOCKTHRESHOLD")); err == nil {
- threshold = time.Duration(n) * time.Millisecond
- }
- l.Debugf("Enabling lock logging at %v threshold", threshold)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/sync.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/sync.go
deleted file mode 100644
index aeb0e30f..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/sync/sync.go
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (C) 2015 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-package sync
-
-import (
- "fmt"
- "path/filepath"
- "runtime"
- "strings"
- "sync"
- "sync/atomic"
- "time"
-)
-
-type Mutex interface {
- Lock()
- Unlock()
-}
-
-type RWMutex interface {
- Mutex
- RLock()
- RUnlock()
-}
-
-type WaitGroup interface {
- Add(int)
- Done()
- Wait()
-}
-
-func NewMutex() Mutex {
- if debug {
- return &loggedMutex{}
- }
- return &sync.Mutex{}
-}
-
-func NewRWMutex() RWMutex {
- if debug {
- return &loggedRWMutex{
- unlockers: make([]string, 0),
- }
- }
- return &sync.RWMutex{}
-}
-
-func NewWaitGroup() WaitGroup {
- if debug {
- return &loggedWaitGroup{}
- }
- return &sync.WaitGroup{}
-}
-
-type loggedMutex struct {
- sync.Mutex
- start time.Time
- lockedAt string
-}
-
-func (m *loggedMutex) Lock() {
- m.Mutex.Lock()
- m.start = time.Now()
- m.lockedAt = getCaller()
-}
-
-func (m *loggedMutex) Unlock() {
- duration := time.Now().Sub(m.start)
- if duration >= threshold {
- l.Debugf("Mutex held for %v. Locked at %s unlocked at %s", duration, m.lockedAt, getCaller())
- }
- m.Mutex.Unlock()
-}
-
-type loggedRWMutex struct {
- sync.RWMutex
- start time.Time
- lockedAt string
-
- logUnlockers uint32
-
- unlockers []string
- unlockersMut sync.Mutex
-}
-
-func (m *loggedRWMutex) Lock() {
- start := time.Now()
-
- atomic.StoreUint32(&m.logUnlockers, 1)
- m.RWMutex.Lock()
- m.logUnlockers = 0
-
- m.start = time.Now()
- duration := m.start.Sub(start)
-
- m.lockedAt = getCaller()
- if duration > threshold {
- l.Debugf("RWMutex took %v to lock. Locked at %s. RUnlockers while locking: %s", duration, m.lockedAt, strings.Join(m.unlockers, ", "))
- }
- m.unlockers = m.unlockers[0:]
-}
-
-func (m *loggedRWMutex) Unlock() {
- duration := time.Now().Sub(m.start)
- if duration >= threshold {
- l.Debugf("RWMutex held for %v. Locked at %s: unlocked at %s", duration, m.lockedAt, getCaller())
- }
- m.RWMutex.Unlock()
-}
-
-func (m *loggedRWMutex) RUnlock() {
- if atomic.LoadUint32(&m.logUnlockers) == 1 {
- m.unlockersMut.Lock()
- m.unlockers = append(m.unlockers, getCaller())
- m.unlockersMut.Unlock()
- }
- m.RWMutex.RUnlock()
-}
-
-type loggedWaitGroup struct {
- sync.WaitGroup
-}
-
-func (wg *loggedWaitGroup) Wait() {
- start := time.Now()
- wg.WaitGroup.Wait()
- duration := time.Now().Sub(start)
- if duration >= threshold {
- l.Debugf("WaitGroup took %v at %s", duration, getCaller())
- }
-}
-
-func getCaller() string {
- _, file, line, _ := runtime.Caller(2)
- file = filepath.Join(filepath.Base(filepath.Dir(file)), filepath.Base(file))
- return fmt.Sprintf("%s:%d", file, line)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/tlsutil/tlsutil.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/tlsutil/tlsutil.go
deleted file mode 100644
index 298b8356..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/github.com/syncthing/syncthing/lib/tlsutil/tlsutil.go
+++ /dev/null
@@ -1,180 +0,0 @@
-// Copyright (C) 2014 The Syncthing Authors.
-//
-// This Source Code Form is subject to the terms of the Mozilla Public
-// License, v. 2.0. If a copy of the MPL was not distributed with this file,
-// You can obtain one at http://mozilla.org/MPL/2.0/.
-
-package tlsutil
-
-import (
- "bufio"
- "crypto/ecdsa"
- "crypto/elliptic"
- "crypto/rand"
- "crypto/rsa"
- "crypto/tls"
- "crypto/x509"
- "crypto/x509/pkix"
- "encoding/pem"
- "fmt"
- "io"
- "math/big"
- mr "math/rand"
- "net"
- "os"
- "time"
-)
-
-var (
- ErrIdentificationFailed = fmt.Errorf("failed to identify socket type")
-)
-
-// NewCertificate generates and returns a new TLS certificate. If tlsRSABits
-// is greater than zero we generate an RSA certificate with the specified
-// number of bits. Otherwise we create a 384 bit ECDSA certificate.
-func NewCertificate(certFile, keyFile, tlsDefaultCommonName string, tlsRSABits int) (tls.Certificate, error) {
- var priv interface{}
- var err error
- if tlsRSABits > 0 {
- priv, err = rsa.GenerateKey(rand.Reader, tlsRSABits)
- } else {
- priv, err = ecdsa.GenerateKey(elliptic.P384(), rand.Reader)
- }
- if err != nil {
- return tls.Certificate{}, fmt.Errorf("generate key: %s", err)
- }
-
- notBefore := time.Now()
- notAfter := time.Date(2049, 12, 31, 23, 59, 59, 0, time.UTC)
-
- template := x509.Certificate{
- SerialNumber: new(big.Int).SetInt64(mr.Int63()),
- Subject: pkix.Name{
- CommonName: tlsDefaultCommonName,
- },
- NotBefore: notBefore,
- NotAfter: notAfter,
-
- KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature,
- ExtKeyUsage: []x509.ExtKeyUsage{x509.ExtKeyUsageServerAuth, x509.ExtKeyUsageClientAuth},
- BasicConstraintsValid: true,
- }
-
- derBytes, err := x509.CreateCertificate(rand.Reader, &template, &template, publicKey(priv), priv)
- if err != nil {
- return tls.Certificate{}, fmt.Errorf("create cert: %s", err)
- }
-
- certOut, err := os.Create(certFile)
- if err != nil {
- return tls.Certificate{}, fmt.Errorf("save cert: %s", err)
- }
- err = pem.Encode(certOut, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes})
- if err != nil {
- return tls.Certificate{}, fmt.Errorf("save cert: %s", err)
- }
- err = certOut.Close()
- if err != nil {
- return tls.Certificate{}, fmt.Errorf("save cert: %s", err)
- }
-
- keyOut, err := os.OpenFile(keyFile, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0600)
- if err != nil {
- return tls.Certificate{}, fmt.Errorf("save key: %s", err)
- }
-
- block, err := pemBlockForKey(priv)
- if err != nil {
- return tls.Certificate{}, fmt.Errorf("save key: %s", err)
- }
-
- err = pem.Encode(keyOut, block)
- if err != nil {
- return tls.Certificate{}, fmt.Errorf("save key: %s", err)
- }
- err = keyOut.Close()
- if err != nil {
- return tls.Certificate{}, fmt.Errorf("save key: %s", err)
- }
-
- return tls.LoadX509KeyPair(certFile, keyFile)
-}
-
-type DowngradingListener struct {
- net.Listener
- TLSConfig *tls.Config
-}
-
-func (l *DowngradingListener) Accept() (net.Conn, error) {
- conn, isTLS, err := l.AcceptNoWrapTLS()
-
- // We failed to identify the socket type, pretend that everything is fine,
- // and pass it to the underlying handler, and let them deal with it.
- if err == ErrIdentificationFailed {
- return conn, nil
- }
-
- if err != nil {
- return conn, err
- }
-
- if isTLS {
- return tls.Server(conn, l.TLSConfig), nil
- }
- return conn, nil
-}
-
-func (l *DowngradingListener) AcceptNoWrapTLS() (net.Conn, bool, error) {
- conn, err := l.Listener.Accept()
- if err != nil {
- return nil, false, err
- }
-
- br := bufio.NewReader(conn)
- conn.SetReadDeadline(time.Now().Add(1 * time.Second))
- bs, err := br.Peek(1)
- conn.SetReadDeadline(time.Time{})
- if err != nil {
- // We hit a read error here, but the Accept() call succeeded so we must not return an error.
- // We return the connection as is with a special error which handles this
- // special case in Accept().
- return conn, false, ErrIdentificationFailed
- }
-
- return &UnionedConnection{br, conn}, bs[0] == 0x16, nil
-}
-
-type UnionedConnection struct {
- io.Reader
- net.Conn
-}
-
-func (c *UnionedConnection) Read(b []byte) (n int, err error) {
- return c.Reader.Read(b)
-}
-
-func publicKey(priv interface{}) interface{} {
- switch k := priv.(type) {
- case *rsa.PrivateKey:
- return &k.PublicKey
- case *ecdsa.PrivateKey:
- return &k.PublicKey
- default:
- return nil
- }
-}
-
-func pemBlockForKey(priv interface{}) (*pem.Block, error) {
- switch k := priv.(type) {
- case *rsa.PrivateKey:
- return &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(k)}, nil
- case *ecdsa.PrivateKey:
- b, err := x509.MarshalECPrivateKey(k)
- if err != nil {
- return nil, err
- }
- return &pem.Block{Type: "EC PRIVATE KEY", Bytes: b}, nil
- default:
- return nil, fmt.Errorf("unknown key type")
- }
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/direct.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/direct.go
deleted file mode 100644
index 4c5ad88b..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/direct.go
+++ /dev/null
@@ -1,18 +0,0 @@
-// 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 proxy
-
-import (
- "net"
-)
-
-type direct struct{}
-
-// Direct is a direct proxy: one that makes network connections directly.
-var Direct = direct{}
-
-func (direct) Dial(network, addr string) (net.Conn, error) {
- return net.Dial(network, addr)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/per_host.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/per_host.go
deleted file mode 100644
index f540b196..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/per_host.go
+++ /dev/null
@@ -1,140 +0,0 @@
-// 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 proxy
-
-import (
- "net"
- "strings"
-)
-
-// A PerHost directs connections to a default Dialer unless the hostname
-// requested matches one of a number of exceptions.
-type PerHost struct {
- def, bypass Dialer
-
- bypassNetworks []*net.IPNet
- bypassIPs []net.IP
- bypassZones []string
- bypassHosts []string
-}
-
-// NewPerHost returns a PerHost Dialer that directs connections to either
-// defaultDialer or bypass, depending on whether the connection matches one of
-// the configured rules.
-func NewPerHost(defaultDialer, bypass Dialer) *PerHost {
- return &PerHost{
- def: defaultDialer,
- bypass: bypass,
- }
-}
-
-// Dial connects to the address addr on the given network through either
-// defaultDialer or bypass.
-func (p *PerHost) Dial(network, addr string) (c net.Conn, err error) {
- host, _, err := net.SplitHostPort(addr)
- if err != nil {
- return nil, err
- }
-
- return p.dialerForRequest(host).Dial(network, addr)
-}
-
-func (p *PerHost) dialerForRequest(host string) Dialer {
- if ip := net.ParseIP(host); ip != nil {
- for _, net := range p.bypassNetworks {
- if net.Contains(ip) {
- return p.bypass
- }
- }
- for _, bypassIP := range p.bypassIPs {
- if bypassIP.Equal(ip) {
- return p.bypass
- }
- }
- return p.def
- }
-
- for _, zone := range p.bypassZones {
- if strings.HasSuffix(host, zone) {
- return p.bypass
- }
- if host == zone[1:] {
- // For a zone "example.com", we match "example.com"
- // too.
- return p.bypass
- }
- }
- for _, bypassHost := range p.bypassHosts {
- if bypassHost == host {
- return p.bypass
- }
- }
- return p.def
-}
-
-// AddFromString parses a string that contains comma-separated values
-// specifying hosts that should use the bypass proxy. Each value is either an
-// IP address, a CIDR range, a zone (*.example.com) or a hostname
-// (localhost). A best effort is made to parse the string and errors are
-// ignored.
-func (p *PerHost) AddFromString(s string) {
- hosts := strings.Split(s, ",")
- for _, host := range hosts {
- host = strings.TrimSpace(host)
- if len(host) == 0 {
- continue
- }
- if strings.Contains(host, "/") {
- // We assume that it's a CIDR address like 127.0.0.0/8
- if _, net, err := net.ParseCIDR(host); err == nil {
- p.AddNetwork(net)
- }
- continue
- }
- if ip := net.ParseIP(host); ip != nil {
- p.AddIP(ip)
- continue
- }
- if strings.HasPrefix(host, "*.") {
- p.AddZone(host[1:])
- continue
- }
- p.AddHost(host)
- }
-}
-
-// AddIP specifies an IP address that will use the bypass proxy. Note that
-// this will only take effect if a literal IP address is dialed. A connection
-// to a named host will never match an IP.
-func (p *PerHost) AddIP(ip net.IP) {
- p.bypassIPs = append(p.bypassIPs, ip)
-}
-
-// AddNetwork specifies an IP range that will use the bypass proxy. Note that
-// this will only take effect if a literal IP address is dialed. A connection
-// to a named host will never match.
-func (p *PerHost) AddNetwork(net *net.IPNet) {
- p.bypassNetworks = append(p.bypassNetworks, net)
-}
-
-// AddZone specifies a DNS suffix that will use the bypass proxy. A zone of
-// "example.com" matches "example.com" and all of its subdomains.
-func (p *PerHost) AddZone(zone string) {
- if strings.HasSuffix(zone, ".") {
- zone = zone[:len(zone)-1]
- }
- if !strings.HasPrefix(zone, ".") {
- zone = "." + zone
- }
- p.bypassZones = append(p.bypassZones, zone)
-}
-
-// AddHost specifies a hostname that will use the bypass proxy.
-func (p *PerHost) AddHost(host string) {
- if strings.HasSuffix(host, ".") {
- host = host[:len(host)-1]
- }
- p.bypassHosts = append(p.bypassHosts, host)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/proxy.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/proxy.go
deleted file mode 100644
index 8ccb0c5f..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/proxy.go
+++ /dev/null
@@ -1,94 +0,0 @@
-// 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 proxy provides support for a variety of protocols to proxy network
-// data.
-package proxy
-
-import (
- "errors"
- "net"
- "net/url"
- "os"
-)
-
-// A Dialer is a means to establish a connection.
-type Dialer interface {
- // Dial connects to the given address via the proxy.
- Dial(network, addr string) (c net.Conn, err error)
-}
-
-// Auth contains authentication parameters that specific Dialers may require.
-type Auth struct {
- User, Password string
-}
-
-// FromEnvironment returns the dialer specified by the proxy related variables in
-// the environment.
-func FromEnvironment() Dialer {
- allProxy := os.Getenv("all_proxy")
- if len(allProxy) == 0 {
- return Direct
- }
-
- proxyURL, err := url.Parse(allProxy)
- if err != nil {
- return Direct
- }
- proxy, err := FromURL(proxyURL, Direct)
- if err != nil {
- return Direct
- }
-
- noProxy := os.Getenv("no_proxy")
- if len(noProxy) == 0 {
- return proxy
- }
-
- perHost := NewPerHost(proxy, Direct)
- perHost.AddFromString(noProxy)
- return perHost
-}
-
-// proxySchemes is a map from URL schemes to a function that creates a Dialer
-// from a URL with such a scheme.
-var proxySchemes map[string]func(*url.URL, Dialer) (Dialer, error)
-
-// RegisterDialerType takes a URL scheme and a function to generate Dialers from
-// a URL with that scheme and a forwarding Dialer. Registered schemes are used
-// by FromURL.
-func RegisterDialerType(scheme string, f func(*url.URL, Dialer) (Dialer, error)) {
- if proxySchemes == nil {
- proxySchemes = make(map[string]func(*url.URL, Dialer) (Dialer, error))
- }
- proxySchemes[scheme] = f
-}
-
-// FromURL returns a Dialer given a URL specification and an underlying
-// Dialer for it to make network requests.
-func FromURL(u *url.URL, forward Dialer) (Dialer, error) {
- var auth *Auth
- if u.User != nil {
- auth = new(Auth)
- auth.User = u.User.Username()
- if p, ok := u.User.Password(); ok {
- auth.Password = p
- }
- }
-
- switch u.Scheme {
- case "socks5":
- return SOCKS5("tcp", u.Host, auth, forward)
- }
-
- // If the scheme doesn't match any of the built-in schemes, see if it
- // was registered by another package.
- if proxySchemes != nil {
- if f, ok := proxySchemes[u.Scheme]; ok {
- return f(u, forward)
- }
- }
-
- return nil, errors.New("proxy: unknown scheme: " + u.Scheme)
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/socks5.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/socks5.go
deleted file mode 100644
index 9b962823..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/net/proxy/socks5.go
+++ /dev/null
@@ -1,210 +0,0 @@
-// 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 proxy
-
-import (
- "errors"
- "io"
- "net"
- "strconv"
-)
-
-// SOCKS5 returns a Dialer that makes SOCKSv5 connections to the given address
-// with an optional username and password. See RFC 1928.
-func SOCKS5(network, addr string, auth *Auth, forward Dialer) (Dialer, error) {
- s := &socks5{
- network: network,
- addr: addr,
- forward: forward,
- }
- if auth != nil {
- s.user = auth.User
- s.password = auth.Password
- }
-
- return s, nil
-}
-
-type socks5 struct {
- user, password string
- network, addr string
- forward Dialer
-}
-
-const socks5Version = 5
-
-const (
- socks5AuthNone = 0
- socks5AuthPassword = 2
-)
-
-const socks5Connect = 1
-
-const (
- socks5IP4 = 1
- socks5Domain = 3
- socks5IP6 = 4
-)
-
-var socks5Errors = []string{
- "",
- "general failure",
- "connection forbidden",
- "network unreachable",
- "host unreachable",
- "connection refused",
- "TTL expired",
- "command not supported",
- "address type not supported",
-}
-
-// Dial connects to the address addr on the network net via the SOCKS5 proxy.
-func (s *socks5) Dial(network, addr string) (net.Conn, error) {
- switch network {
- case "tcp", "tcp6", "tcp4":
- default:
- return nil, errors.New("proxy: no support for SOCKS5 proxy connections of type " + network)
- }
-
- conn, err := s.forward.Dial(s.network, s.addr)
- if err != nil {
- return nil, err
- }
- closeConn := &conn
- defer func() {
- if closeConn != nil {
- (*closeConn).Close()
- }
- }()
-
- host, portStr, err := net.SplitHostPort(addr)
- if err != nil {
- return nil, err
- }
-
- port, err := strconv.Atoi(portStr)
- if err != nil {
- return nil, errors.New("proxy: failed to parse port number: " + portStr)
- }
- if port < 1 || port > 0xffff {
- return nil, errors.New("proxy: port number out of range: " + portStr)
- }
-
- // the size here is just an estimate
- buf := make([]byte, 0, 6+len(host))
-
- buf = append(buf, socks5Version)
- if len(s.user) > 0 && len(s.user) < 256 && len(s.password) < 256 {
- buf = append(buf, 2 /* num auth methods */, socks5AuthNone, socks5AuthPassword)
- } else {
- buf = append(buf, 1 /* num auth methods */, socks5AuthNone)
- }
-
- if _, err := conn.Write(buf); err != nil {
- return nil, errors.New("proxy: failed to write greeting to SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- if _, err := io.ReadFull(conn, buf[:2]); err != nil {
- return nil, errors.New("proxy: failed to read greeting from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
- if buf[0] != 5 {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " has unexpected version " + strconv.Itoa(int(buf[0])))
- }
- if buf[1] == 0xff {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " requires authentication")
- }
-
- if buf[1] == socks5AuthPassword {
- buf = buf[:0]
- buf = append(buf, 1 /* password protocol version */)
- buf = append(buf, uint8(len(s.user)))
- buf = append(buf, s.user...)
- buf = append(buf, uint8(len(s.password)))
- buf = append(buf, s.password...)
-
- if _, err := conn.Write(buf); err != nil {
- return nil, errors.New("proxy: failed to write authentication request to SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- if _, err := io.ReadFull(conn, buf[:2]); err != nil {
- return nil, errors.New("proxy: failed to read authentication reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- if buf[1] != 0 {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " rejected username/password")
- }
- }
-
- buf = buf[:0]
- buf = append(buf, socks5Version, socks5Connect, 0 /* reserved */)
-
- if ip := net.ParseIP(host); ip != nil {
- if ip4 := ip.To4(); ip4 != nil {
- buf = append(buf, socks5IP4)
- ip = ip4
- } else {
- buf = append(buf, socks5IP6)
- }
- buf = append(buf, ip...)
- } else {
- if len(host) > 255 {
- return nil, errors.New("proxy: destination hostname too long: " + host)
- }
- buf = append(buf, socks5Domain)
- buf = append(buf, byte(len(host)))
- buf = append(buf, host...)
- }
- buf = append(buf, byte(port>>8), byte(port))
-
- if _, err := conn.Write(buf); err != nil {
- return nil, errors.New("proxy: failed to write connect request to SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- if _, err := io.ReadFull(conn, buf[:4]); err != nil {
- return nil, errors.New("proxy: failed to read connect reply from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- failure := "unknown error"
- if int(buf[1]) < len(socks5Errors) {
- failure = socks5Errors[buf[1]]
- }
-
- if len(failure) > 0 {
- return nil, errors.New("proxy: SOCKS5 proxy at " + s.addr + " failed to connect: " + failure)
- }
-
- bytesToDiscard := 0
- switch buf[3] {
- case socks5IP4:
- bytesToDiscard = net.IPv4len
- case socks5IP6:
- bytesToDiscard = net.IPv6len
- case socks5Domain:
- _, err := io.ReadFull(conn, buf[:1])
- if err != nil {
- return nil, errors.New("proxy: failed to read domain length from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
- bytesToDiscard = int(buf[0])
- default:
- return nil, errors.New("proxy: got unknown address type " + strconv.Itoa(int(buf[3])) + " from SOCKS5 proxy at " + s.addr)
- }
-
- if cap(buf) < bytesToDiscard {
- buf = make([]byte, bytesToDiscard)
- } else {
- buf = buf[:bytesToDiscard]
- }
- if _, err := io.ReadFull(conn, buf); err != nil {
- return nil, errors.New("proxy: failed to read address from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- // Also need to discard the port number
- if _, err := io.ReadFull(conn, buf[:2]); err != nil {
- return nil, errors.New("proxy: failed to read port from SOCKS5 proxy at " + s.addr + ": " + err.Error())
- }
-
- closeConn = nil
- return conn, nil
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/transform/transform.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/transform/transform.go
deleted file mode 100644
index 157ee789..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/transform/transform.go
+++ /dev/null
@@ -1,616 +0,0 @@
-// 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 (
- "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")
-
- // 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()
-}
-
-// 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 && 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
- }
- } else {
- n += nSrc
- }
- switch {
- case err == ErrShortDst && (nDst > 0 || nSrc > 0):
- case err == ErrShortSrc && 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
- return n, nil
- case err == nil && w.n > 0:
- return n, errInconsistentByteCount
- default:
- return n, err
- }
- }
-}
-
-// Close implements the io.Closer interface.
-func (w *Writer) Close() error {
- for src := w.src[:w.n]; len(src) > 0; {
- nDst, nSrc, err := w.t.Transform(w.dst, src, true)
- if nDst == 0 {
- return err
- }
- if _, werr := w.w.Write(w.dst[:nDst]); werr != nil {
- return werr
- }
- if err != ErrShortDst {
- return err
- }
- src = src[nSrc:]
- }
- return nil
-}
-
-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
-}
-
-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 Transformer that copies src to dst.
- Nop Transformer = 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
- }
-}
-
-// 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
-}
-
-// RemoveFunc returns a Transformer that removes from the input all runes r for
-// which f(r) is true. Illegal bytes in the input are replaced by RuneError.
-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 <= 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) {
- if s == "" {
- return "", 0, nil
- }
-
- t.Reset()
-
- // 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]
-
- // Avoid allocation if the transformed string is identical to the original.
- // After this loop, pDst will point to the furthest point in s for which it
- // could be detected that t gives equal results, src[:nSrc] will
- // indicated the last processed chunk of s for which the output is not equal
- // and dst[:nDst] will be the transform of this chunk.
- var nDst, nSrc int
- pDst := 0 // Used as index in both src and dst in this loop.
- for {
- n := copy(src, s[pDst:])
- nDst, nSrc, err = t.Transform(dst, src[:n], pDst+n == len(s))
-
- // Note 1: we will not enter the loop with pDst == len(s) and we will
- // not end the loop with it either. So if nSrc is 0, this means there is
- // some kind of error from which we cannot recover given the current
- // buffer sizes. We will give up in this case.
- // Note 2: it is not entirely correct to simply do a bytes.Equal as
- // a Transformer may buffer internally. It will work in most cases,
- // though, and no harm is done if it doesn't work.
- // TODO: let transformers implement an optional Spanner interface, akin
- // to norm's QuickSpan. This would even allow us to avoid any allocation.
- if nSrc == 0 || !bytes.Equal(dst[:nDst], src[:nSrc]) {
- break
- }
-
- if pDst += nDst; pDst == len(s) {
- return s, pDst, nil
- }
- }
-
- // Move the bytes seen so far to dst.
- pSrc := pDst + nSrc
- if pDst+nDst <= initialBufSize {
- copy(dst[pDst:], dst[:nDst])
- } else {
- b := make([]byte, len(s)+nDst-nSrc)
- copy(b[pDst:], dst[:nDst])
- dst = b
- }
- copy(dst, s[:pDst])
- pDst += nDst
-
- if err != nil && err != ErrShortDst && err != ErrShortSrc {
- return string(dst[:pDst]), pSrc, err
- }
-
- // Complete the string with the remainder.
- for {
- n := copy(src, s[pSrc:])
- nDst, nSrc, err = t.Transform(dst[pDst:], src[:n], pSrc+n == len(s))
- pDst += nDst
- pSrc += nSrc
-
- switch err {
- case nil:
- if pSrc == len(s) {
- return string(dst[:pDst]), pSrc, nil
- }
- case ErrShortDst:
- // Do not grow as long as we can make progress. This may avoid
- // excessive allocations.
- if nDst == 0 {
- dst = grow(dst, pDst)
- }
- case ErrShortSrc:
- if nSrc == 0 {
- src = grow(src, 0)
- }
- default:
- 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) {
- t.Reset()
- dst := make([]byte, len(b))
- pDst, pSrc := 0, 0
- for {
- nDst, nSrc, err := t.Transform(dst[pDst:], b[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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/composition.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/composition.go
deleted file mode 100644
index d17b278a..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/composition.go
+++ /dev/null
@@ -1,514 +0,0 @@
-// 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
-
-// mkStreamSafe is a shorthand for declaring a streamSafe var and calling
-// first on it.
-func mkStreamSafe(p Properties) streamSafe {
- return streamSafe(p.nTrailingNonStarters())
-}
-
-// first inserts the first rune of a segment.
-func (ss *streamSafe) first(p Properties) {
- if *ss != 0 {
- panic("!= 0")
- }
- *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 = 0
- 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
- rb.ss = 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)
- 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/forminfo.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/forminfo.go
deleted file mode 100644
index 15a67c65..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/forminfo.go
+++ /dev/null
@@ -1,256 +0,0 @@
-// 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_QD 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:
-// * [ []]
-// 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
-
-func init() {
- formTable = make([]*formInfo, 4)
-
- for i := range formTable {
- f := &formInfo{}
- formTable[i] = f
- f.form = Form(i)
- if Form(i) == NFKD || Form(i) == NFKC {
- f.compatibility = true
- f.info = lookupInfoNFKC
- } else {
- f.info = lookupInfoNFC
- }
- f.nextMain = nextDecomposed
- if Form(i) == NFC || Form(i) == NFKC {
- f.nextMain = nextComposed
- f.composing = true
- }
- }
-}
-
-// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/input.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/input.go
deleted file mode 100644
index 045d4ccc..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/input.go
+++ /dev/null
@@ -1,105 +0,0 @@
-// 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) {
- if in.bytes == nil {
- if !isHangulString(in.str[p:]) {
- return 0
- }
- r, _ = utf8.DecodeRuneInString(in.str[p:])
- } else {
- if !isHangul(in.bytes[p:]) {
- return 0
- }
- r, _ = utf8.DecodeRune(in.bytes[p:])
- }
- return r
-}
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/iter.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/iter.go
deleted file mode 100644
index 0a42a72d..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/iter.go
+++ /dev/null
@@ -1,450 +0,0 @@
-// 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)
-}
-
-// 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)
-}
-
-// 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 UTF8 rune.
-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)
- 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.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.ss.first(info)
- i.rb.insertUnsafe(input{bytes: d}, j, info)
- i.multiSeg = d[j+int(info.size):]
- return seg
- }
- i.rb.ss.next(info)
- 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
- ss := mkStreamSafe(i.info)
- for {
- if sz := int(i.info.size); sz <= 1 {
- 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)
- 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 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 := 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 {
- if s := i.rb.ss.next(i.info); s == ssOverflow {
- i.next = nextCGJDecompose
- break
- }
- 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
- }
- }
- // 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
- 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
- ss := mkStreamSafe(i.info)
- 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.next = i.asciiF
- break
- }
- i.info = i.rb.f.info(i.rb.src, i.p)
- if v := 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:
- i.p = startp
- i.info = i.rb.f.info(i.rb.src, i.p)
- 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/maketables.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/maketables.go
deleted file mode 100644
index 07bdff6b..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/maketables.go
+++ /dev/null
@@ -1,978 +0,0 @@
-// 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()
- if *test {
- testDerived()
- printTestdata()
- } else {
- 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;;Lo;0;L;;;;;N;;;;;
-// 4DB5;;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
- 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 {
- 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; 3099;;;;N;;;;;
- // U+FF9F HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK;Lm;0;L; 309A;;;;N;;;;;
- // U+3133 HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 11AA;;;;N;HANGUL LETTER GIYEOG SIOS;;;;
- // U+318E HANGUL LETTER ARAEAE;Lo;0;L; 11A1;;;;N;HANGUL LETTER ALAE AE;;;;
- // U+FFA3 HALFWIDTH HANGUL LETTER KIYEOK-SIOS;Lo;0;L; 3133;;;;N;HALFWIDTH HANGUL LETTER GIYEOG SIOS;;;;
- // U+FFDC HALFWIDTH HANGUL LETTER I;Lo;0;L; 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/normalize.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/normalize.go
deleted file mode 100644
index bcf8450d..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/normalize.go
+++ /dev/null
@@ -1,527 +0,0 @@
-// 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.
-
-//go:generate go run maketables.go triegen.go
-//go:generate go run maketables.go triegen.go -test
-
-// Package norm contains types and functions for normalizing Unicode strings.
-package norm
-
-import "unicode/utf8"
-
-// 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
-}
-
-// 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:
- ss.first(info)
- 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 b[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.
- // TODO: consider adding NextBoundary
- 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))
-}
-
-// 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 rb.nrune > 0 {
- if s := rb.ss.next(info); s == ssStarter {
- goto end
- } else if s == ssOverflow {
- rb.insertCGJ()
- goto end
- }
- } else {
- rb.ss.first(info)
- }
- 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/readwriter.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/readwriter.go
deleted file mode 100644
index 4fa0e04b..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/readwriter.go
+++ /dev/null
@@ -1,126 +0,0 @@
-// 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
- }
- }
- }
- panic("should not reach here")
-}
-
-// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/tables.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/tables.go
deleted file mode 100644
index 22508818..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/tables.go
+++ /dev/null
@@ -1,7587 +0,0 @@
-// This file was generated by go generate; DO NOT EDIT
-
-package norm
-
-const (
- // Version is the Unicode edition from which the tables are derived.
- Version = "8.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 = 0x1869
- firstCCC = 0x2C9A
- endMulti = 0x2F5C
- firstLeadingCCC = 0x4A40
- firstCCCZeroExcept = 0x4A56
- firstStarterWithNLead = 0x4A7D
- lastDecomp = 0x4A7F
- maxDecomp = 0x8000
-)
-
-// decomps: 19071 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, 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, 0xE9, 0x8D, 0x8A, 0x43,
- // Bytes 1480 - 14bf
- 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, 0xE9, 0x9A, 0xA3, 0x43,
- // Bytes 14c0 - 14ff
- 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, 0xE9, 0x9D, 0x9E, 0x43,
- // Bytes 1500 - 153f
- 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, 0xE9, 0xA2, 0xA8, 0x43,
- // Bytes 1540 - 157f
- 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, 0xE9, 0xAA, 0xA8, 0x43,
- // Bytes 1580 - 15bf
- 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, 0xE9, 0xB7, 0xBA, 0x43,
- // Bytes 15c0 - 15ff
- 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, 0xE9, 0xBC, 0x8E, 0x43,
- // Bytes 1600 - 163f
- 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, 0xEA, 0xAC, 0xB7, 0x43,
- // Bytes 1640 - 167f
- 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, 0xA1, 0x9B, 0xAA, 0x44,
- // Bytes 1680 - 16bf
- 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, 0xF0, 0xA2, 0xAF, 0xB1,
- // Bytes 16c0 - 16ff
- 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, 0x44, 0xF0, 0xA3, 0xB2,
- // Bytes 1700 - 173f
- 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, 0x92, 0x44, 0xF0, 0xA4,
- // Bytes 1740 - 177f
- 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, 0xA5, 0xBC, 0x44, 0xF0,
- // Bytes 1780 - 17bf
- 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, 0xA6, 0x96, 0xA8, 0x44,
- // Bytes 17c0 - 17ff
- 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, 0xF0, 0xA7, 0xA5, 0xA6,
- // Bytes 1800 - 183f
- 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, 0x44, 0xF0, 0xA9, 0x92,
- // Bytes 1840 - 187f
- 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, 0x31, 0x2E, 0x42, 0x31,
- // Bytes 1880 - 18bf
- 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, 0x38, 0x42, 0x32, 0x39,
- // Bytes 18c0 - 18ff
- 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, 0x42, 0x34, 0x36, 0x42,
- // Bytes 1900 - 193f
- 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, 0x44, 0x4A, 0x42, 0x44,
- // Bytes 1940 - 197f
- 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, 0x44, 0x42, 0x4D, 0x56,
- // Bytes 1980 - 19bf
- 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, 0x42, 0x63, 0x6D, 0x42,
- // Bytes 19c0 - 19ff
- 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, 0x6B, 0x6C, 0x42, 0x6B,
- // Bytes 1a00 - 1a3f
- 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, 0x6A, 0x42, 0x6E, 0x6D,
- // Bytes 1a40 - 1a7f
- 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, 0x43, 0x28, 0x37, 0x29,
- // Bytes 1a80 - 1abf
- 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, 0x43, 0x28, 0x4E, 0x29,
- // Bytes 1ac0 - 1aff
- 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, 0x43, 0x28, 0x64, 0x29,
- // Bytes 1b00 - 1b3f
- 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, 0x43, 0x28, 0x74, 0x29,
- // Bytes 1b40 - 1b7f
- 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, 0x43, 0x31, 0x38, 0x2E,
- // Bytes 1b80 - 1bbf
- 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, 0x43, 0x50, 0x50, 0x56,
- // Bytes 1bc0 - 1bff
- 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, 0x43, 0x64, 0x6D, 0x33,
- // Bytes 1c00 - 1c3f
- 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, 0x43, 0x6D, 0x6D, 0x33,
- // Bytes 1c40 - 1c7f
- 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, 0x44, 0x28, 0x31, 0x30,
- // Bytes 1c80 - 1cbf
- 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, 0x84, 0x44, 0x31, 0xE6,
- // Bytes 1cc0 - 1cff
- 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, 0x97, 0xA5, 0x44, 0x35,
- // Bytes 1d00 - 1d3f
- 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, 0xE6, 0x9C, 0x88, 0x44,
- // Bytes 1d40 - 1d7f
- 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, 0xD7, 0x90, 0xD7, 0x9C,
- // Bytes 1d80 - 1dbf
- 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, 0x44, 0xD8, 0xAA, 0xD8,
- // Bytes 1dc0 - 1dff
- 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, 0x85, 0x44, 0xD8, 0xAB,
- // Bytes 1e00 - 1e3f
- 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, 0xD8, 0xAC, 0x44, 0xD8,
- // Bytes 1e40 - 1e7f
- 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, 0xB4, 0xD8, 0xAC, 0x44,
- // Bytes 1e80 - 1ebf
- 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, 0xD8, 0xB5, 0xD9, 0x8A,
- // Bytes 1ec0 - 1eff
- 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, 0x44, 0xD8, 0xB9, 0xD8,
- // Bytes 1f00 - 1f3f
- 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, 0x89, 0x44, 0xD9, 0x81,
- // Bytes 1f40 - 1f7f
- 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, 0xD9, 0x8A, 0x44, 0xD9,
- // Bytes 1f80 - 1fbf
- 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, 0x85, 0xD9, 0x85, 0x44,
- // Bytes 1fc0 - 1fff
- 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, 0xD9, 0x87, 0xD8, 0xAC,
- // Bytes 2000 - 203f
- 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, 0x44, 0xD9, 0x8A, 0xD9,
- // Bytes 2040 - 207f
- 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, 0xE1, 0x84, 0x8B, 0x29,
- // Bytes 2080 - 20bf
- 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, 0x45, 0x28, 0xE4, 0xBA,
- // Bytes 20c0 - 20ff
- 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, 0x8D, 0x29, 0x45, 0x28,
- // Bytes 2100 - 213f
- 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, 0xE7, 0x81, 0xAB, 0x29,
- // Bytes 2140 - 217f
- 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, 0x45, 0x30, 0xE2, 0x81,
- // Bytes 2180 - 21bf
- 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, 0x97, 0xA5, 0x45, 0x31,
- // Bytes 21c0 - 21ff
- 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, 0x38, 0xE7, 0x82, 0xB9,
- // Bytes 2200 - 223f
- 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, 0x45, 0x32, 0x30, 0xE6,
- // Bytes 2240 - 227f
- 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, 0x97, 0xA5, 0x45, 0x32,
- // Bytes 2280 - 22bf
- 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, 0xE2, 0x81, 0x84, 0x38,
- // Bytes 22c0 - 22ff
- 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, 0x95, 0x73, 0x32, 0x46,
- // Bytes 2300 - 233f
- 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, 0xD9, 0x89, 0x46, 0xD8,
- // Bytes 2340 - 237f
- 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, 0xAD, 0x46, 0xD8, 0xAC,
- // Bytes 2380 - 23bf
- 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, 0x46, 0xD8, 0xB3, 0xD8,
- // Bytes 23c0 - 23ff
- 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, 0xD8, 0xB5, 0xD8, 0xAD,
- // Bytes 2400 - 243f
- 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, 0xB7, 0xD9, 0x85, 0xD9,
- // Bytes 2440 - 247f
- 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, 0xD8, 0xAE, 0xD9, 0x85,
- // Bytes 2480 - 24bf
- 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, 0xAC, 0xD9, 0x85, 0x46,
- // Bytes 24c0 - 24ff
- 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, 0xD8, 0xAE, 0x46, 0xD9,
- // Bytes 2500 - 253f
- 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, 0x8A, 0x46, 0xD9, 0x86,
- // Bytes 2540 - 257f
- 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, 0x46, 0xD9, 0x87, 0xD9,
- // Bytes 2580 - 25bf
- 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, 0xD9, 0x8A, 0xD9, 0x94,
- // Bytes 25c0 - 25ff
- 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, 0x8A, 0xD9, 0x94, 0xDB,
- // Bytes 2600 - 263f
- 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, 0x80, 0xE0, 0xBE, 0xB5,
- // Bytes 2640 - 267f
- 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, 0xE0, 0xBE, 0xB7, 0x46,
- // Bytes 2680 - 26bf
- 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, 0x83, 0xAD, 0x46, 0xE3,
- // Bytes 26c0 - 26ff
- 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, 0xA3, 0x46, 0xE5, 0xB9,
- // Bytes 2700 - 273f
- 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, 0x29, 0x48, 0x28, 0xE1,
- // Bytes 2740 - 277f
- 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, 0x48, 0x28, 0xE1, 0x84,
- // Bytes 2780 - 27bf
- 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, 0xD8, 0xA7, 0xD9, 0x84,
- // Bytes 27c0 - 27ff
- 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, 0x80, 0xB2, 0xE2, 0x80,
- // Bytes 2800 - 283f
- 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, 0x9D, 0xE3, 0x80, 0x95,
- // Bytes 2840 - 287f
- 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, 0x49, 0xE3, 0x82, 0xA2,
- // Bytes 2880 - 28bf
- 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, 0xE3, 0x83, 0xBC, 0xE3,
- // Bytes 28c0 - 28ff
- 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, 0x83, 0x88, 0x49, 0xE3,
- // Bytes 2900 - 293f
- 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, 0x83, 0x9B, 0xE3, 0x83,
- // Bytes 2940 - 297f
- 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, 0xA2, 0xE3, 0x83, 0xB3,
- // Bytes 2980 - 29bf
- 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, 0x83, 0xBC, 0x4C, 0xE3,
- // Bytes 29c0 - 29ff
- 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, 0xE3, 0x83, 0xBC, 0x4C,
- // Bytes 2a00 - 2a3f
- 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, 0xBC, 0xE3, 0x82, 0xB9,
- // Bytes 2a40 - 2a7f
- 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, 0x83, 0x8B, 0xE3, 0x83,
- // Bytes 2a80 - 2abf
- 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, 0xE3, 0x83, 0x88, 0xE3,
- // Bytes 2ac0 - 2aff
- 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, 0x84, 0x20, 0xD8, 0xAC,
- // Bytes 2b00 - 2b3f
- 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, 0xE3, 0x83, 0xB3, 0xE3,
- // Bytes 2b40 - 2b7f
- 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, 0xE3, 0x83, 0xB3, 0xE3,
- // Bytes 2b80 - 2bbf
- 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, 0x82, 0xAD, 0xE3, 0x82,
- // Bytes 2bc0 - 2bff
- 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, 0xA9, 0xE3, 0x83, 0xA0,
- // Bytes 2c00 - 2c3f
- 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, 0xE3, 0x83, 0xAB, 0x52,
- // Bytes 2c40 - 2c7f
- 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, 0x84, 0xD9, 0x89, 0x20,
- // Bytes 2c80 - 2cbf
- 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, 0xAD, 0x87, 0xE0, 0xAD,
- // Bytes 2cc0 - 2cff
- 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, 0xB5, 0x86, 0xE0, 0xB4,
- // Bytes 2d00 - 2d3f
- 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, 0xAC, 0x8B, 0xE1, 0xAC,
- // Bytes 2d40 - 2d7f
- 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, 0x91, 0x84, 0xB1, 0xF0,
- // Bytes 2d80 - 2dbf
- 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, 0x91, 0x92, 0xBD, 0x01,
- // Bytes 2dc0 - 2dff
- 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, 0x46, 0xD9, 0x84, 0xD8,
- // Bytes 2e00 - 2e3f
- 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, 0x46, 0xE1, 0x84, 0x87,
- // Bytes 2e40 - 2e7f
- 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, 0x46, 0xE1, 0x84, 0x91,
- // Bytes 2e80 - 2ebf
- 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, 0x9B, 0xE3, 0x82, 0x9A,
- // Bytes 2ec0 - 2eff
- 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, 0x82, 0xAF, 0xE3, 0x82,
- // Bytes 2f00 - 2f3f
- 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, 0xE3, 0x82, 0xA1, 0xE3,
- // Bytes 2f40 - 2f7f
- 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, 0xCC, 0x84, 0xC9, 0x03,
- // Bytes 2f80 - 2fbf
- 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, 0x43, 0xCC, 0x8C, 0xC9,
- // Bytes 2fc0 - 2fff
- 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, 0x03, 0x45, 0xCC, 0x89,
- // Bytes 3000 - 303f
- 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, 0xC9, 0x03, 0x47, 0xCC,
- // Bytes 3040 - 307f
- 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, 0x83, 0xC9, 0x03, 0x49,
- // Bytes 3080 - 30bf
- 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, 0xCC, 0x8C, 0xC9, 0x03,
- // Bytes 30c0 - 30ff
- 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, 0x4E, 0xCC, 0x81, 0xC9,
- // Bytes 3100 - 313f
- 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, 0x03, 0x4F, 0xCC, 0x8C,
- // Bytes 3140 - 317f
- 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, 0xC9, 0x03, 0x53, 0xCC,
- // Bytes 3180 - 31bf
- 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, 0x82, 0xC9, 0x03, 0x55,
- // Bytes 31c0 - 31ff
- 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, 0xCC, 0x83, 0xC9, 0x03,
- // Bytes 3200 - 323f
- 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, 0x59, 0xCC, 0x83, 0xC9,
- // Bytes 3240 - 327f
- 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, 0x03, 0x61, 0xCC, 0x81,
- // Bytes 3280 - 32bf
- 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, 0xC9, 0x03, 0x63, 0xCC,
- // Bytes 32c0 - 32ff
- 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, 0x86, 0xC9, 0x03, 0x65,
- // Bytes 3300 - 333f
- 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, 0xCC, 0x84, 0xC9, 0x03,
- // Bytes 3340 - 337f
- 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, 0x69, 0xCC, 0x80, 0xC9,
- // Bytes 3380 - 33bf
- 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, 0x03, 0x6A, 0xCC, 0x82,
- // Bytes 33c0 - 33ff
- 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, 0xC9, 0x03, 0x6D, 0xCC,
- // Bytes 3400 - 343f
- 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, 0x81, 0xC9, 0x03, 0x6F,
- // Bytes 3440 - 347f
- 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, 0xCC, 0x91, 0xC9, 0x03,
- // Bytes 3480 - 34bf
- 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, 0x74, 0xCC, 0xAD, 0xB5,
- // Bytes 34c0 - 34ff
- 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, 0x03, 0x75, 0xCC, 0xA4,
- // Bytes 3500 - 353f
- 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, 0xB5, 0x03, 0x78, 0xCC,
- // Bytes 3540 - 357f
- 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, 0x81, 0xC9, 0x03, 0x7A,
- // Bytes 3580 - 35bf
- 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, 0xC3, 0xA6, 0xCC, 0x81,
- // Bytes 35c0 - 35ff
- 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, 0xD9, 0x04, 0xCE, 0x95,
- // Bytes 3600 - 363f
- 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, 0xCC, 0x80, 0xC9, 0x04,
- // Bytes 3640 - 367f
- 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, 0xCE, 0xB1, 0xCC, 0x84,
- // Bytes 3680 - 36bf
- 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, 0xC9, 0x04, 0xCE, 0xBF,
- // Bytes 36c0 - 36ff
- 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, 0xCC, 0x81, 0xC9, 0x04,
- // Bytes 3700 - 373f
- 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, 0xD0, 0x97, 0xCC, 0x88,
- // Bytes 3740 - 377f
- 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, 0xC9, 0x04, 0xD0, 0xA7,
- // Bytes 3780 - 37bf
- 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, 0xCC, 0x88, 0xC9, 0x04,
- // Bytes 37c0 - 37ff
- 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, 0xD1, 0x83, 0xCC, 0x8B,
- // Bytes 3800 - 383f
- 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, 0xC9, 0x04, 0xD8, 0xA7,
- // Bytes 3840 - 387f
- 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, 0x41, 0xCC, 0x82, 0xCC,
- // Bytes 3880 - 38bf
- 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, 0xCC, 0xA3, 0xCC, 0x82,
- // Bytes 38c0 - 38ff
- 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, 0xA3, 0xCC, 0x82, 0xCA,
- // Bytes 3900 - 393f
- 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, 0xCC, 0x84, 0xCA, 0x05,
- // Bytes 3940 - 397f
- 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, 0x89, 0xCA, 0x05, 0x4F,
- // Bytes 3980 - 39bf
- 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, 0xCA, 0x05, 0x55, 0xCC,
- // Bytes 39c0 - 39ff
- 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, 0x05, 0x61, 0xCC, 0x82,
- // Bytes 3a00 - 3a3f
- 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, 0x61, 0xCC, 0x88, 0xCC,
- // Bytes 3a40 - 3a7f
- 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, 0xCC, 0x84, 0xCC, 0x80,
- // Bytes 3a80 - 3abf
- 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, 0x82, 0xCC, 0x89, 0xCA,
- // Bytes 3ac0 - 3aff
- 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, 0xCC, 0x81, 0xCA, 0x05,
- // Bytes 3b00 - 3b3f
- 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, 0x87, 0xCA, 0x05, 0x75,
- // Bytes 3b40 - 3b7f
- 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, 0xCA, 0x05, 0x75, 0xCC,
- // Bytes 3b80 - 3bbf
- 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, 0x05, 0xE2, 0x86, 0x92,
- // Bytes 3bc0 - 3bff
- 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, 0xE2, 0x88, 0xA5, 0xCC,
- // Bytes 3c00 - 3c3f
- 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, 0x89, 0xB2, 0xCC, 0xB8,
- // Bytes 3c40 - 3c7f
- 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, 0x83, 0xCC, 0xB8, 0x05,
- // Bytes 3c80 - 3cbf
- 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, 0xCC, 0xB8, 0x05, 0x05,
- // Bytes 3cc0 - 3cff
- 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, 0x06, 0xCE, 0x95, 0xCC,
- // Bytes 3d00 - 3d3f
- 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, 0x06, 0xCE, 0x99, 0xCC,
- // Bytes 3d40 - 3d7f
- 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, 0x06, 0xCE, 0xA9, 0xCC,
- // Bytes 3d80 - 3dbf
- 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, 0x06, 0xCE, 0xB5, 0xCC,
- // Bytes 3dc0 - 3dff
- 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, 0x06, 0xCE, 0xB9, 0xCC,
- // Bytes 3e00 - 3e3f
- 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, 0x06, 0xCE, 0xB9, 0xCC,
- // Bytes 3e40 - 3e7f
- 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, 0x06, 0xCF, 0x85, 0xCC,
- // Bytes 3e80 - 3ebf
- 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, 0x06, 0xCF, 0x89, 0xCC,
- // Bytes 3ec0 - 3eff
- 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, 0x06, 0xE3, 0x81, 0x86,
- // Bytes 3f00 - 3f3f
- 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, 0x06, 0xE3, 0x81, 0x99,
- // Bytes 3f40 - 3f7f
- 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, 0x06, 0xE3, 0x81, 0xAF,
- // Bytes 3f80 - 3fbf
- 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, 0x06, 0xE3, 0x81, 0xBB,
- // Bytes 3fc0 - 3fff
- 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, 0x06, 0xE3, 0x82, 0xB3,
- // Bytes 4000 - 403f
- 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, 0x06, 0xE3, 0x83, 0x84,
- // Bytes 4040 - 407f
- 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, 0x06, 0xE3, 0x83, 0x95,
- // Bytes 4080 - 40bf
- 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, 0x06, 0xE3, 0x83, 0xB2,
- // Bytes 40c0 - 40ff
- 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, 0x85, 0xDB, 0x08, 0xCE,
- // Bytes 4100 - 413f
- 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, 0x97, 0xCC, 0x94, 0xCD,
- // Bytes 4140 - 417f
- 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, 0x82, 0xCD, 0x85, 0xDB,
- // Bytes 4180 - 41bf
- 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, 0x08, 0xCE, 0xB7, 0xCC,
- // Bytes 41c0 - 41ff
- 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, 0x93, 0xCC, 0x80, 0xCD,
- // Bytes 4200 - 423f
- 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, 0xBA, 0x09, 0x08, 0xF0,
- // Bytes 4240 - 427f
- 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, 0x8A, 0xC9, 0x43, 0x20,
- // Bytes 4280 - 42bf
- 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, 0xD9, 0x8F, 0x69, 0x43,
- // Bytes 42c0 - 42ff
- 0x20, 0xD9, 0x90, 0x6D, 0x43, 0x20, 0xD9, 0x91,
- 0x71, 0x43, 0x20, 0xD9, 0x92, 0x75, 0x43, 0x41,
- 0xCC, 0x8A, 0xC9, 0x43, 0x73, 0xCC, 0x87, 0xC9,
- 0x43, 0xE1, 0x85, 0xA1, 0x01, 0x43, 0xE1, 0x85,
- 0xA2, 0x01, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x43,
- 0xE1, 0x85, 0xA4, 0x01, 0x43, 0xE1, 0x85, 0xA5,
- 0x01, 0x43, 0xE1, 0x85, 0xA6, 0x01, 0x43, 0xE1,
- 0x85, 0xA7, 0x01, 0x43, 0xE1, 0x85, 0xA8, 0x01,
- // Bytes 4300 - 433f
- 0x43, 0xE1, 0x85, 0xA9, 0x01, 0x43, 0xE1, 0x85,
- 0xAA, 0x01, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x43,
- 0xE1, 0x85, 0xAC, 0x01, 0x43, 0xE1, 0x85, 0xAD,
- 0x01, 0x43, 0xE1, 0x85, 0xAE, 0x01, 0x43, 0xE1,
- 0x85, 0xAF, 0x01, 0x43, 0xE1, 0x85, 0xB0, 0x01,
- 0x43, 0xE1, 0x85, 0xB1, 0x01, 0x43, 0xE1, 0x85,
- 0xB2, 0x01, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x43,
- 0xE1, 0x85, 0xB4, 0x01, 0x43, 0xE1, 0x85, 0xB5,
- // Bytes 4340 - 437f
- 0x01, 0x43, 0xE1, 0x86, 0xAA, 0x01, 0x43, 0xE1,
- 0x86, 0xAC, 0x01, 0x43, 0xE1, 0x86, 0xAD, 0x01,
- 0x43, 0xE1, 0x86, 0xB0, 0x01, 0x43, 0xE1, 0x86,
- 0xB1, 0x01, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x43,
- 0xE1, 0x86, 0xB3, 0x01, 0x43, 0xE1, 0x86, 0xB4,
- 0x01, 0x43, 0xE1, 0x86, 0xB5, 0x01, 0x44, 0x20,
- 0xE3, 0x82, 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82,
- 0x9A, 0x0D, 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA,
- // Bytes 4380 - 43bf
- 0x44, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE,
- 0x95, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC,
- 0x81, 0xC9, 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,
- // Bytes 43c0 - 43ff
- 0x81, 0xC9, 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9,
- 0x44, 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF,
- 0x85, 0xCC, 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,
- // Bytes 4400 - 443f
- 0x93, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6,
- 0xBC, 0x41, 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39,
- 0x44, 0xD7, 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,
- // Bytes 4440 - 447f
- 0x44, 0xD7, 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7,
- 0x9E, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6,
- 0xBC, 0x41, 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,
- // Bytes 4480 - 44bf
- 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D,
- 0x44, 0xD7, 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7,
- 0xAA, 0xD6, 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,
- // Bytes 44c0 - 44ff
- 0x80, 0xD9, 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9,
- 0x8E, 0x65, 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69,
- 0x44, 0xD9, 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,
- // Bytes 4500 - 453f
- 0x44, 0xDB, 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20,
- 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC,
- 0x88, 0xCC, 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,
- // Bytes 4540 - 457f
- 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9,
- 0x8C, 0xD9, 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D,
- 0xD9, 0x91, 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,
- // Bytes 4580 - 45bf
- 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7,
- 0xA9, 0xD6, 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7,
- 0xA9, 0xD6, 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,
- // Bytes 45c0 - 45ff
- 0xA4, 0x97, 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0,
- 0xA4, 0x9C, 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0,
- 0xA4, 0xA1, 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,
- // Bytes 4600 - 463f
- 0xA6, 0xAF, 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0,
- 0xA8, 0x96, 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0,
- 0xA8, 0x97, 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,
- // Bytes 4640 - 467f
- 0xAC, 0xA2, 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0,
- 0xBE, 0xB2, 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0,
- 0xBE, 0xB3, 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,
- // Bytes 4680 - 46bf
- 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0,
- 0xBE, 0xB2, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80,
- 0x9E, 0x49, 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,
- // Bytes 46c0 - 46ff
- 0xA5, 0xF0, 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0,
- 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
- 0x9D, 0x85, 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,
- // Bytes 4700 - 473f
- 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0,
- 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86,
- 0xBA, 0xF0, 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,
- // Bytes 4740 - 477f
- 0x82, 0xC9, 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83,
- 0x45, 0xCC, 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7,
- 0xA5, 0x83, 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,
- // Bytes 4780 - 47bf
- 0xCC, 0xA8, 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5,
- 0x83, 0x53, 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC,
- 0x8C, 0xC9, 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,
- // Bytes 47c0 - 47ff
- 0x61, 0xCC, 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3,
- 0xB5, 0x83, 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65,
- 0xCC, 0x82, 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,
- // Bytes 4800 - 483f
- 0x83, 0x6F, 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC,
- 0x9B, 0xAD, 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83,
- 0x6F, 0xCC, 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,
- // Bytes 4840 - 487f
- 0x93, 0xC9, 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9,
- 0x84, 0xCE, 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE,
- 0x95, 0xCC, 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,
- // Bytes 4880 - 48bf
- 0xA9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC,
- 0x94, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9,
- 0x84, 0xCE, 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,
- // Bytes 48c0 - 48ff
- 0x84, 0xCE, 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE,
- 0xB7, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD,
- 0x82, 0xC9, 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,
- // Bytes 4900 - 493f
- 0x94, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9,
- 0x84, 0xCF, 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF,
- 0x89, 0xCC, 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,
- // Bytes 4940 - 497f
- 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
- 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
- 0x86, 0xCE, 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,
- // Bytes 4980 - 49bf
- 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA,
- 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA,
- 0x86, 0xCE, 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,
- // Bytes 49c0 - 49ff
- 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA,
- 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA,
- 0x86, 0xCE, 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,
- // Bytes 4a00 - 4a3f
- 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA,
- 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA,
- 0x86, 0xCF, 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,
- // Bytes 4a40 - 4a7f
- 0x42, 0xCC, 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81,
- 0xC9, 0x32, 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x44,
- 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32, 0x43, 0xE3,
- 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3, 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 < 0xC0:
- 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 < 0xC0:
- 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: 10270 bytes (10.03 KiB). Checksum: d7e415c88f2e510a.
-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: 0x2f6b, 0xc1: 0x2f70, 0xc2: 0x471a, 0xc3: 0x2f75, 0xc4: 0x4729, 0xc5: 0x472e,
- 0xc6: 0xa000, 0xc7: 0x4738, 0xc8: 0x2fde, 0xc9: 0x2fe3, 0xca: 0x473d, 0xcb: 0x2ff7,
- 0xcc: 0x306a, 0xcd: 0x306f, 0xce: 0x3074, 0xcf: 0x4751, 0xd1: 0x3100,
- 0xd2: 0x3123, 0xd3: 0x3128, 0xd4: 0x475b, 0xd5: 0x4760, 0xd6: 0x476f,
- 0xd8: 0xa000, 0xd9: 0x31af, 0xda: 0x31b4, 0xdb: 0x31b9, 0xdc: 0x47a1, 0xdd: 0x3231,
- 0xe0: 0x3277, 0xe1: 0x327c, 0xe2: 0x47ab, 0xe3: 0x3281,
- 0xe4: 0x47ba, 0xe5: 0x47bf, 0xe6: 0xa000, 0xe7: 0x47c9, 0xe8: 0x32ea, 0xe9: 0x32ef,
- 0xea: 0x47ce, 0xeb: 0x3303, 0xec: 0x337b, 0xed: 0x3380, 0xee: 0x3385, 0xef: 0x47e2,
- 0xf1: 0x3411, 0xf2: 0x3434, 0xf3: 0x3439, 0xf4: 0x47ec, 0xf5: 0x47f1,
- 0xf6: 0x4800, 0xf8: 0xa000, 0xf9: 0x34c5, 0xfa: 0x34ca, 0xfb: 0x34cf,
- 0xfc: 0x4832, 0xfd: 0x354c, 0xff: 0x3565,
- // Block 0x4, offset 0x100
- 0x100: 0x2f7a, 0x101: 0x3286, 0x102: 0x471f, 0x103: 0x47b0, 0x104: 0x2f98, 0x105: 0x32a4,
- 0x106: 0x2fac, 0x107: 0x32b8, 0x108: 0x2fb1, 0x109: 0x32bd, 0x10a: 0x2fb6, 0x10b: 0x32c2,
- 0x10c: 0x2fbb, 0x10d: 0x32c7, 0x10e: 0x2fc5, 0x10f: 0x32d1,
- 0x112: 0x4742, 0x113: 0x47d3, 0x114: 0x2fed, 0x115: 0x32f9, 0x116: 0x2ff2, 0x117: 0x32fe,
- 0x118: 0x3010, 0x119: 0x331c, 0x11a: 0x3001, 0x11b: 0x330d, 0x11c: 0x3029, 0x11d: 0x3335,
- 0x11e: 0x3033, 0x11f: 0x333f, 0x120: 0x3038, 0x121: 0x3344, 0x122: 0x3042, 0x123: 0x334e,
- 0x124: 0x3047, 0x125: 0x3353, 0x128: 0x3079, 0x129: 0x338a,
- 0x12a: 0x307e, 0x12b: 0x338f, 0x12c: 0x3083, 0x12d: 0x3394, 0x12e: 0x30a6, 0x12f: 0x33b2,
- 0x130: 0x3088, 0x134: 0x30b0, 0x135: 0x33bc,
- 0x136: 0x30c4, 0x137: 0x33d5, 0x139: 0x30ce, 0x13a: 0x33df, 0x13b: 0x30d8,
- 0x13c: 0x33e9, 0x13d: 0x30d3, 0x13e: 0x33e4,
- // Block 0x5, offset 0x140
- 0x143: 0x30fb, 0x144: 0x340c, 0x145: 0x3114,
- 0x146: 0x3425, 0x147: 0x310a, 0x148: 0x341b,
- 0x14c: 0x4765, 0x14d: 0x47f6, 0x14e: 0x312d, 0x14f: 0x343e, 0x150: 0x3137, 0x151: 0x3448,
- 0x154: 0x3155, 0x155: 0x3466, 0x156: 0x316e, 0x157: 0x347f,
- 0x158: 0x315f, 0x159: 0x3470, 0x15a: 0x4788, 0x15b: 0x4819, 0x15c: 0x3178, 0x15d: 0x3489,
- 0x15e: 0x3187, 0x15f: 0x3498, 0x160: 0x478d, 0x161: 0x481e, 0x162: 0x31a0, 0x163: 0x34b6,
- 0x164: 0x3191, 0x165: 0x34a7, 0x168: 0x4797, 0x169: 0x4828,
- 0x16a: 0x479c, 0x16b: 0x482d, 0x16c: 0x31be, 0x16d: 0x34d4, 0x16e: 0x31c8, 0x16f: 0x34de,
- 0x170: 0x31cd, 0x171: 0x34e3, 0x172: 0x31eb, 0x173: 0x3501, 0x174: 0x320e, 0x175: 0x3524,
- 0x176: 0x3236, 0x177: 0x3551, 0x178: 0x324a, 0x179: 0x3259, 0x17a: 0x3579, 0x17b: 0x3263,
- 0x17c: 0x3583, 0x17d: 0x3268, 0x17e: 0x3588, 0x17f: 0xa000,
- // Block 0x6, offset 0x180
- 0x184: 0x8100, 0x185: 0x8100,
- 0x186: 0x8100,
- 0x18d: 0x2f84, 0x18e: 0x3290, 0x18f: 0x3092, 0x190: 0x339e, 0x191: 0x313c,
- 0x192: 0x344d, 0x193: 0x31d2, 0x194: 0x34e8, 0x195: 0x39cb, 0x196: 0x3b5a, 0x197: 0x39c4,
- 0x198: 0x3b53, 0x199: 0x39d2, 0x19a: 0x3b61, 0x19b: 0x39bd, 0x19c: 0x3b4c,
- 0x19e: 0x38ac, 0x19f: 0x3a3b, 0x1a0: 0x38a5, 0x1a1: 0x3a34, 0x1a2: 0x35af, 0x1a3: 0x35c1,
- 0x1a6: 0x303d, 0x1a7: 0x3349, 0x1a8: 0x30ba, 0x1a9: 0x33cb,
- 0x1aa: 0x477e, 0x1ab: 0x480f, 0x1ac: 0x398c, 0x1ad: 0x3b1b, 0x1ae: 0x35d3, 0x1af: 0x35d9,
- 0x1b0: 0x33c1, 0x1b4: 0x3024, 0x1b5: 0x3330,
- 0x1b8: 0x30f6, 0x1b9: 0x3407, 0x1ba: 0x38b3, 0x1bb: 0x3a42,
- 0x1bc: 0x35a9, 0x1bd: 0x35bb, 0x1be: 0x35b5, 0x1bf: 0x35c7,
- // Block 0x7, offset 0x1c0
- 0x1c0: 0x2f89, 0x1c1: 0x3295, 0x1c2: 0x2f8e, 0x1c3: 0x329a, 0x1c4: 0x3006, 0x1c5: 0x3312,
- 0x1c6: 0x300b, 0x1c7: 0x3317, 0x1c8: 0x3097, 0x1c9: 0x33a3, 0x1ca: 0x309c, 0x1cb: 0x33a8,
- 0x1cc: 0x3141, 0x1cd: 0x3452, 0x1ce: 0x3146, 0x1cf: 0x3457, 0x1d0: 0x3164, 0x1d1: 0x3475,
- 0x1d2: 0x3169, 0x1d3: 0x347a, 0x1d4: 0x31d7, 0x1d5: 0x34ed, 0x1d6: 0x31dc, 0x1d7: 0x34f2,
- 0x1d8: 0x3182, 0x1d9: 0x3493, 0x1da: 0x319b, 0x1db: 0x34b1,
- 0x1de: 0x3056, 0x1df: 0x3362,
- 0x1e6: 0x4724, 0x1e7: 0x47b5, 0x1e8: 0x474c, 0x1e9: 0x47dd,
- 0x1ea: 0x395b, 0x1eb: 0x3aea, 0x1ec: 0x3938, 0x1ed: 0x3ac7, 0x1ee: 0x476a, 0x1ef: 0x47fb,
- 0x1f0: 0x3954, 0x1f1: 0x3ae3, 0x1f2: 0x3240, 0x1f3: 0x355b,
- // 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: 0x4a40, 0x241: 0x4a45, 0x242: 0x9932, 0x243: 0x4a4a, 0x244: 0x4a4f, 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: 0x359d,
- 0x286: 0x35e5, 0x287: 0x00ce, 0x288: 0x3603, 0x289: 0x360f, 0x28a: 0x3621,
- 0x28c: 0x363f, 0x28e: 0x3651, 0x28f: 0x366f, 0x290: 0x3e04, 0x291: 0xa000,
- 0x295: 0xa000, 0x297: 0xa000,
- 0x299: 0xa000,
- 0x29f: 0xa000, 0x2a1: 0xa000,
- 0x2a5: 0xa000, 0x2a9: 0xa000,
- 0x2aa: 0x3633, 0x2ab: 0x3663, 0x2ac: 0x4890, 0x2ad: 0x3693, 0x2ae: 0x48ba, 0x2af: 0x36a5,
- 0x2b0: 0x3e6c, 0x2b1: 0xa000, 0x2b5: 0xa000,
- 0x2b7: 0xa000, 0x2b9: 0xa000,
- 0x2bf: 0xa000,
- // Block 0xb, offset 0x2c0
- 0x2c0: 0x371d, 0x2c1: 0x3729, 0x2c3: 0x3717,
- 0x2c6: 0xa000, 0x2c7: 0x3705,
- 0x2cc: 0x3759, 0x2cd: 0x3741, 0x2ce: 0x376b, 0x2d0: 0xa000,
- 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000,
- 0x2d8: 0xa000, 0x2d9: 0x374d, 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: 0x37d1, 0x2fa: 0xa000,
- 0x2fe: 0xa000,
- // Block 0xc, offset 0x300
- 0x301: 0x372f, 0x302: 0x37b3,
- 0x310: 0x370b, 0x311: 0x378f,
- 0x312: 0x3711, 0x313: 0x3795, 0x316: 0x3723, 0x317: 0x37a7,
- 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3825, 0x31b: 0x382b, 0x31c: 0x3735, 0x31d: 0x37b9,
- 0x31e: 0x373b, 0x31f: 0x37bf, 0x322: 0x3747, 0x323: 0x37cb,
- 0x324: 0x3753, 0x325: 0x37d7, 0x326: 0x375f, 0x327: 0x37e3, 0x328: 0xa000, 0x329: 0xa000,
- 0x32a: 0x3831, 0x32b: 0x3837, 0x32c: 0x3789, 0x32d: 0x380d, 0x32e: 0x3765, 0x32f: 0x37e9,
- 0x330: 0x3771, 0x331: 0x37f5, 0x332: 0x3777, 0x333: 0x37fb, 0x334: 0x377d, 0x335: 0x3801,
- 0x338: 0x3783, 0x339: 0x3807,
- // 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: 0x2d22, 0x3c7: 0xa000, 0x3c8: 0x2d2a, 0x3c9: 0xa000, 0x3ca: 0x2d32, 0x3cb: 0xa000,
- 0x3cc: 0x2d3a, 0x3cd: 0xa000, 0x3ce: 0x2d42, 0x3d1: 0xa000,
- 0x3d2: 0x2d4a,
- 0x3f4: 0x8102, 0x3f5: 0x9900,
- 0x3fa: 0xa000, 0x3fb: 0x2d52,
- 0x3fc: 0xa000, 0x3fd: 0x2d5a, 0x3fe: 0xa000, 0x3ff: 0xa000,
- // Block 0x10, offset 0x400
- 0x400: 0x2f93, 0x401: 0x329f, 0x402: 0x2f9d, 0x403: 0x32a9, 0x404: 0x2fa2, 0x405: 0x32ae,
- 0x406: 0x2fa7, 0x407: 0x32b3, 0x408: 0x38c8, 0x409: 0x3a57, 0x40a: 0x2fc0, 0x40b: 0x32cc,
- 0x40c: 0x2fca, 0x40d: 0x32d6, 0x40e: 0x2fd9, 0x40f: 0x32e5, 0x410: 0x2fcf, 0x411: 0x32db,
- 0x412: 0x2fd4, 0x413: 0x32e0, 0x414: 0x38eb, 0x415: 0x3a7a, 0x416: 0x38f2, 0x417: 0x3a81,
- 0x418: 0x3015, 0x419: 0x3321, 0x41a: 0x301a, 0x41b: 0x3326, 0x41c: 0x3900, 0x41d: 0x3a8f,
- 0x41e: 0x301f, 0x41f: 0x332b, 0x420: 0x302e, 0x421: 0x333a, 0x422: 0x304c, 0x423: 0x3358,
- 0x424: 0x305b, 0x425: 0x3367, 0x426: 0x3051, 0x427: 0x335d, 0x428: 0x3060, 0x429: 0x336c,
- 0x42a: 0x3065, 0x42b: 0x3371, 0x42c: 0x30ab, 0x42d: 0x33b7, 0x42e: 0x3907, 0x42f: 0x3a96,
- 0x430: 0x30b5, 0x431: 0x33c6, 0x432: 0x30bf, 0x433: 0x33d0, 0x434: 0x30c9, 0x435: 0x33da,
- 0x436: 0x4756, 0x437: 0x47e7, 0x438: 0x390e, 0x439: 0x3a9d, 0x43a: 0x30e2, 0x43b: 0x33f3,
- 0x43c: 0x30dd, 0x43d: 0x33ee, 0x43e: 0x30e7, 0x43f: 0x33f8,
- // Block 0x11, offset 0x440
- 0x440: 0x30ec, 0x441: 0x33fd, 0x442: 0x30f1, 0x443: 0x3402, 0x444: 0x3105, 0x445: 0x3416,
- 0x446: 0x310f, 0x447: 0x3420, 0x448: 0x311e, 0x449: 0x342f, 0x44a: 0x3119, 0x44b: 0x342a,
- 0x44c: 0x3931, 0x44d: 0x3ac0, 0x44e: 0x393f, 0x44f: 0x3ace, 0x450: 0x3946, 0x451: 0x3ad5,
- 0x452: 0x394d, 0x453: 0x3adc, 0x454: 0x314b, 0x455: 0x345c, 0x456: 0x3150, 0x457: 0x3461,
- 0x458: 0x315a, 0x459: 0x346b, 0x45a: 0x4783, 0x45b: 0x4814, 0x45c: 0x3993, 0x45d: 0x3b22,
- 0x45e: 0x3173, 0x45f: 0x3484, 0x460: 0x317d, 0x461: 0x348e, 0x462: 0x4792, 0x463: 0x4823,
- 0x464: 0x399a, 0x465: 0x3b29, 0x466: 0x39a1, 0x467: 0x3b30, 0x468: 0x39a8, 0x469: 0x3b37,
- 0x46a: 0x318c, 0x46b: 0x349d, 0x46c: 0x3196, 0x46d: 0x34ac, 0x46e: 0x31aa, 0x46f: 0x34c0,
- 0x470: 0x31a5, 0x471: 0x34bb, 0x472: 0x31e6, 0x473: 0x34fc, 0x474: 0x31f5, 0x475: 0x350b,
- 0x476: 0x31f0, 0x477: 0x3506, 0x478: 0x39af, 0x479: 0x3b3e, 0x47a: 0x39b6, 0x47b: 0x3b45,
- 0x47c: 0x31fa, 0x47d: 0x3510, 0x47e: 0x31ff, 0x47f: 0x3515,
- // Block 0x12, offset 0x480
- 0x480: 0x3204, 0x481: 0x351a, 0x482: 0x3209, 0x483: 0x351f, 0x484: 0x3218, 0x485: 0x352e,
- 0x486: 0x3213, 0x487: 0x3529, 0x488: 0x321d, 0x489: 0x3538, 0x48a: 0x3222, 0x48b: 0x353d,
- 0x48c: 0x3227, 0x48d: 0x3542, 0x48e: 0x3245, 0x48f: 0x3560, 0x490: 0x325e, 0x491: 0x357e,
- 0x492: 0x326d, 0x493: 0x358d, 0x494: 0x3272, 0x495: 0x3592, 0x496: 0x3376, 0x497: 0x34a2,
- 0x498: 0x3533, 0x499: 0x356f, 0x49b: 0x35cd,
- 0x4a0: 0x4733, 0x4a1: 0x47c4, 0x4a2: 0x2f7f, 0x4a3: 0x328b,
- 0x4a4: 0x3874, 0x4a5: 0x3a03, 0x4a6: 0x386d, 0x4a7: 0x39fc, 0x4a8: 0x3882, 0x4a9: 0x3a11,
- 0x4aa: 0x387b, 0x4ab: 0x3a0a, 0x4ac: 0x38ba, 0x4ad: 0x3a49, 0x4ae: 0x3890, 0x4af: 0x3a1f,
- 0x4b0: 0x3889, 0x4b1: 0x3a18, 0x4b2: 0x389e, 0x4b3: 0x3a2d, 0x4b4: 0x3897, 0x4b5: 0x3a26,
- 0x4b6: 0x38c1, 0x4b7: 0x3a50, 0x4b8: 0x4747, 0x4b9: 0x47d8, 0x4ba: 0x2ffc, 0x4bb: 0x3308,
- 0x4bc: 0x2fe8, 0x4bd: 0x32f4, 0x4be: 0x38d6, 0x4bf: 0x3a65,
- // Block 0x13, offset 0x4c0
- 0x4c0: 0x38cf, 0x4c1: 0x3a5e, 0x4c2: 0x38e4, 0x4c3: 0x3a73, 0x4c4: 0x38dd, 0x4c5: 0x3a6c,
- 0x4c6: 0x38f9, 0x4c7: 0x3a88, 0x4c8: 0x308d, 0x4c9: 0x3399, 0x4ca: 0x30a1, 0x4cb: 0x33ad,
- 0x4cc: 0x4779, 0x4cd: 0x480a, 0x4ce: 0x3132, 0x4cf: 0x3443, 0x4d0: 0x391c, 0x4d1: 0x3aab,
- 0x4d2: 0x3915, 0x4d3: 0x3aa4, 0x4d4: 0x392a, 0x4d5: 0x3ab9, 0x4d6: 0x3923, 0x4d7: 0x3ab2,
- 0x4d8: 0x3985, 0x4d9: 0x3b14, 0x4da: 0x3969, 0x4db: 0x3af8, 0x4dc: 0x3962, 0x4dd: 0x3af1,
- 0x4de: 0x3977, 0x4df: 0x3b06, 0x4e0: 0x3970, 0x4e1: 0x3aff, 0x4e2: 0x397e, 0x4e3: 0x3b0d,
- 0x4e4: 0x31e1, 0x4e5: 0x34f7, 0x4e6: 0x31c3, 0x4e7: 0x34d9, 0x4e8: 0x39e0, 0x4e9: 0x3b6f,
- 0x4ea: 0x39d9, 0x4eb: 0x3b68, 0x4ec: 0x39ee, 0x4ed: 0x3b7d, 0x4ee: 0x39e7, 0x4ef: 0x3b76,
- 0x4f0: 0x39f5, 0x4f1: 0x3b84, 0x4f2: 0x322c, 0x4f3: 0x3547, 0x4f4: 0x3254, 0x4f5: 0x3574,
- 0x4f6: 0x324f, 0x4f7: 0x356a, 0x4f8: 0x323b, 0x4f9: 0x3556,
- // Block 0x14, offset 0x500
- 0x500: 0x4896, 0x501: 0x489c, 0x502: 0x49b0, 0x503: 0x49c8, 0x504: 0x49b8, 0x505: 0x49d0,
- 0x506: 0x49c0, 0x507: 0x49d8, 0x508: 0x483c, 0x509: 0x4842, 0x50a: 0x4920, 0x50b: 0x4938,
- 0x50c: 0x4928, 0x50d: 0x4940, 0x50e: 0x4930, 0x50f: 0x4948, 0x510: 0x48a8, 0x511: 0x48ae,
- 0x512: 0x3db4, 0x513: 0x3dc4, 0x514: 0x3dbc, 0x515: 0x3dcc,
- 0x518: 0x4848, 0x519: 0x484e, 0x51a: 0x3ce4, 0x51b: 0x3cf4, 0x51c: 0x3cec, 0x51d: 0x3cfc,
- 0x520: 0x48c0, 0x521: 0x48c6, 0x522: 0x49e0, 0x523: 0x49f8,
- 0x524: 0x49e8, 0x525: 0x4a00, 0x526: 0x49f0, 0x527: 0x4a08, 0x528: 0x4854, 0x529: 0x485a,
- 0x52a: 0x4950, 0x52b: 0x4968, 0x52c: 0x4958, 0x52d: 0x4970, 0x52e: 0x4960, 0x52f: 0x4978,
- 0x530: 0x48d8, 0x531: 0x48de, 0x532: 0x3e14, 0x533: 0x3e2c, 0x534: 0x3e1c, 0x535: 0x3e34,
- 0x536: 0x3e24, 0x537: 0x3e3c, 0x538: 0x4860, 0x539: 0x4866, 0x53a: 0x3d14, 0x53b: 0x3d2c,
- 0x53c: 0x3d1c, 0x53d: 0x3d34, 0x53e: 0x3d24, 0x53f: 0x3d3c,
- // Block 0x15, offset 0x540
- 0x540: 0x48e4, 0x541: 0x48ea, 0x542: 0x3e44, 0x543: 0x3e54, 0x544: 0x3e4c, 0x545: 0x3e5c,
- 0x548: 0x486c, 0x549: 0x4872, 0x54a: 0x3d44, 0x54b: 0x3d54,
- 0x54c: 0x3d4c, 0x54d: 0x3d5c, 0x550: 0x48f6, 0x551: 0x48fc,
- 0x552: 0x3e7c, 0x553: 0x3e94, 0x554: 0x3e84, 0x555: 0x3e9c, 0x556: 0x3e8c, 0x557: 0x3ea4,
- 0x559: 0x4878, 0x55b: 0x3d64, 0x55d: 0x3d6c,
- 0x55f: 0x3d74, 0x560: 0x490e, 0x561: 0x4914, 0x562: 0x4a10, 0x563: 0x4a28,
- 0x564: 0x4a18, 0x565: 0x4a30, 0x566: 0x4a20, 0x567: 0x4a38, 0x568: 0x487e, 0x569: 0x4884,
- 0x56a: 0x4980, 0x56b: 0x4998, 0x56c: 0x4988, 0x56d: 0x49a0, 0x56e: 0x4990, 0x56f: 0x49a8,
- 0x570: 0x488a, 0x571: 0x43b0, 0x572: 0x368d, 0x573: 0x43b6, 0x574: 0x48b4, 0x575: 0x43bc,
- 0x576: 0x369f, 0x577: 0x43c2, 0x578: 0x36bd, 0x579: 0x43c8, 0x57a: 0x36d5, 0x57b: 0x43ce,
- 0x57c: 0x4902, 0x57d: 0x43d4,
- // Block 0x16, offset 0x580
- 0x580: 0x3d9c, 0x581: 0x3da4, 0x582: 0x4180, 0x583: 0x419e, 0x584: 0x418a, 0x585: 0x41a8,
- 0x586: 0x4194, 0x587: 0x41b2, 0x588: 0x3cd4, 0x589: 0x3cdc, 0x58a: 0x40cc, 0x58b: 0x40ea,
- 0x58c: 0x40d6, 0x58d: 0x40f4, 0x58e: 0x40e0, 0x58f: 0x40fe, 0x590: 0x3de4, 0x591: 0x3dec,
- 0x592: 0x41bc, 0x593: 0x41da, 0x594: 0x41c6, 0x595: 0x41e4, 0x596: 0x41d0, 0x597: 0x41ee,
- 0x598: 0x3d04, 0x599: 0x3d0c, 0x59a: 0x4108, 0x59b: 0x4126, 0x59c: 0x4112, 0x59d: 0x4130,
- 0x59e: 0x411c, 0x59f: 0x413a, 0x5a0: 0x3ebc, 0x5a1: 0x3ec4, 0x5a2: 0x41f8, 0x5a3: 0x4216,
- 0x5a4: 0x4202, 0x5a5: 0x4220, 0x5a6: 0x420c, 0x5a7: 0x422a, 0x5a8: 0x3d7c, 0x5a9: 0x3d84,
- 0x5aa: 0x4144, 0x5ab: 0x4162, 0x5ac: 0x414e, 0x5ad: 0x416c, 0x5ae: 0x4158, 0x5af: 0x4176,
- 0x5b0: 0x3681, 0x5b1: 0x367b, 0x5b2: 0x3d8c, 0x5b3: 0x3687, 0x5b4: 0x3d94,
- 0x5b6: 0x48a2, 0x5b7: 0x3dac, 0x5b8: 0x35f1, 0x5b9: 0x35eb, 0x5ba: 0x35df, 0x5bb: 0x4380,
- 0x5bc: 0x35f7, 0x5bd: 0x8100, 0x5be: 0x01d3, 0x5bf: 0xa100,
- // Block 0x17, offset 0x5c0
- 0x5c0: 0x8100, 0x5c1: 0x35a3, 0x5c2: 0x3dd4, 0x5c3: 0x3699, 0x5c4: 0x3ddc,
- 0x5c6: 0x48cc, 0x5c7: 0x3df4, 0x5c8: 0x35fd, 0x5c9: 0x4386, 0x5ca: 0x3609, 0x5cb: 0x438c,
- 0x5cc: 0x3615, 0x5cd: 0x3b8b, 0x5ce: 0x3b92, 0x5cf: 0x3b99, 0x5d0: 0x36b1, 0x5d1: 0x36ab,
- 0x5d2: 0x3dfc, 0x5d3: 0x4576, 0x5d6: 0x36b7, 0x5d7: 0x3e0c,
- 0x5d8: 0x362d, 0x5d9: 0x3627, 0x5da: 0x361b, 0x5db: 0x4392, 0x5dd: 0x3ba0,
- 0x5de: 0x3ba7, 0x5df: 0x3bae, 0x5e0: 0x36e7, 0x5e1: 0x36e1, 0x5e2: 0x3e64, 0x5e3: 0x457e,
- 0x5e4: 0x36c9, 0x5e5: 0x36cf, 0x5e6: 0x36ed, 0x5e7: 0x3e74, 0x5e8: 0x365d, 0x5e9: 0x3657,
- 0x5ea: 0x364b, 0x5eb: 0x439e, 0x5ec: 0x3645, 0x5ed: 0x3597, 0x5ee: 0x437a, 0x5ef: 0x0081,
- 0x5f2: 0x3eac, 0x5f3: 0x36f3, 0x5f4: 0x3eb4,
- 0x5f6: 0x491a, 0x5f7: 0x3ecc, 0x5f8: 0x3639, 0x5f9: 0x4398, 0x5fa: 0x3669, 0x5fb: 0x43aa,
- 0x5fc: 0x3675, 0x5fd: 0x4252, 0x5fe: 0xa100,
- // Block 0x18, offset 0x600
- 0x601: 0x3c02, 0x603: 0xa000, 0x604: 0x3c09, 0x605: 0xa000,
- 0x607: 0x3c10, 0x608: 0xa000, 0x609: 0x3c17,
- 0x60d: 0xa000,
- 0x620: 0x2f61, 0x621: 0xa000, 0x622: 0x3c25,
- 0x624: 0xa000, 0x625: 0xa000,
- 0x62d: 0x3c1e, 0x62e: 0x2f5c, 0x62f: 0x2f66,
- 0x630: 0x3c2c, 0x631: 0x3c33, 0x632: 0xa000, 0x633: 0xa000, 0x634: 0x3c3a, 0x635: 0x3c41,
- 0x636: 0xa000, 0x637: 0xa000, 0x638: 0x3c48, 0x639: 0x3c4f, 0x63a: 0xa000, 0x63b: 0xa000,
- 0x63c: 0xa000, 0x63d: 0xa000,
- // Block 0x19, offset 0x640
- 0x640: 0x3c56, 0x641: 0x3c5d, 0x642: 0xa000, 0x643: 0xa000, 0x644: 0x3c72, 0x645: 0x3c79,
- 0x646: 0xa000, 0x647: 0xa000, 0x648: 0x3c80, 0x649: 0x3c87,
- 0x651: 0xa000,
- 0x652: 0xa000,
- 0x662: 0xa000,
- 0x668: 0xa000, 0x669: 0xa000,
- 0x66b: 0xa000, 0x66c: 0x3c9c, 0x66d: 0x3ca3, 0x66e: 0x3caa, 0x66f: 0x3cb1,
- 0x672: 0xa000, 0x673: 0xa000, 0x674: 0xa000, 0x675: 0xa000,
- // Block 0x1a, offset 0x680
- 0x686: 0xa000, 0x68b: 0xa000,
- 0x68c: 0x3f04, 0x68d: 0xa000, 0x68e: 0x3f0c, 0x68f: 0xa000, 0x690: 0x3f14, 0x691: 0xa000,
- 0x692: 0x3f1c, 0x693: 0xa000, 0x694: 0x3f24, 0x695: 0xa000, 0x696: 0x3f2c, 0x697: 0xa000,
- 0x698: 0x3f34, 0x699: 0xa000, 0x69a: 0x3f3c, 0x69b: 0xa000, 0x69c: 0x3f44, 0x69d: 0xa000,
- 0x69e: 0x3f4c, 0x69f: 0xa000, 0x6a0: 0x3f54, 0x6a1: 0xa000, 0x6a2: 0x3f5c,
- 0x6a4: 0xa000, 0x6a5: 0x3f64, 0x6a6: 0xa000, 0x6a7: 0x3f6c, 0x6a8: 0xa000, 0x6a9: 0x3f74,
- 0x6af: 0xa000,
- 0x6b0: 0x3f7c, 0x6b1: 0x3f84, 0x6b2: 0xa000, 0x6b3: 0x3f8c, 0x6b4: 0x3f94, 0x6b5: 0xa000,
- 0x6b6: 0x3f9c, 0x6b7: 0x3fa4, 0x6b8: 0xa000, 0x6b9: 0x3fac, 0x6ba: 0x3fb4, 0x6bb: 0xa000,
- 0x6bc: 0x3fbc, 0x6bd: 0x3fc4,
- // Block 0x1b, offset 0x6c0
- 0x6d4: 0x3efc,
- 0x6d9: 0x9903, 0x6da: 0x9903, 0x6db: 0x8100, 0x6dc: 0x8100, 0x6dd: 0xa000,
- 0x6de: 0x3fcc,
- 0x6e6: 0xa000,
- 0x6eb: 0xa000, 0x6ec: 0x3fdc, 0x6ed: 0xa000, 0x6ee: 0x3fe4, 0x6ef: 0xa000,
- 0x6f0: 0x3fec, 0x6f1: 0xa000, 0x6f2: 0x3ff4, 0x6f3: 0xa000, 0x6f4: 0x3ffc, 0x6f5: 0xa000,
- 0x6f6: 0x4004, 0x6f7: 0xa000, 0x6f8: 0x400c, 0x6f9: 0xa000, 0x6fa: 0x4014, 0x6fb: 0xa000,
- 0x6fc: 0x401c, 0x6fd: 0xa000, 0x6fe: 0x4024, 0x6ff: 0xa000,
- // Block 0x1c, offset 0x700
- 0x700: 0x402c, 0x701: 0xa000, 0x702: 0x4034, 0x704: 0xa000, 0x705: 0x403c,
- 0x706: 0xa000, 0x707: 0x4044, 0x708: 0xa000, 0x709: 0x404c,
- 0x70f: 0xa000, 0x710: 0x4054, 0x711: 0x405c,
- 0x712: 0xa000, 0x713: 0x4064, 0x714: 0x406c, 0x715: 0xa000, 0x716: 0x4074, 0x717: 0x407c,
- 0x718: 0xa000, 0x719: 0x4084, 0x71a: 0x408c, 0x71b: 0xa000, 0x71c: 0x4094, 0x71d: 0x409c,
- 0x72f: 0xa000,
- 0x730: 0xa000, 0x731: 0xa000, 0x732: 0xa000, 0x734: 0x3fd4,
- 0x737: 0x40a4, 0x738: 0x40ac, 0x739: 0x40b4, 0x73a: 0x40bc,
- 0x73d: 0xa000, 0x73e: 0x40c4,
- // Block 0x1d, offset 0x740
- 0x740: 0x1377, 0x741: 0x0cfb, 0x742: 0x13d3, 0x743: 0x139f, 0x744: 0x0e57, 0x745: 0x06eb,
- 0x746: 0x08df, 0x747: 0x1627, 0x748: 0x1627, 0x749: 0x0a0b, 0x74a: 0x145b, 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: 0x1443, 0x75a: 0x156f, 0x75b: 0x070f, 0x75c: 0x08b3, 0x75d: 0x0d87,
- 0x75e: 0x0ecf, 0x75f: 0x1293, 0x760: 0x15bf, 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: 0x14eb, 0x779: 0x159f, 0x77a: 0x15bb, 0x77b: 0x102b,
- 0x77c: 0x106b, 0x77d: 0x1123, 0x77e: 0x1243, 0x77f: 0x1477,
- // Block 0x1e, offset 0x780
- 0x780: 0x15c7, 0x781: 0x134b, 0x782: 0x09c7, 0x783: 0x0b3b, 0x784: 0x10db, 0x785: 0x119b,
- 0x786: 0x0eff, 0x787: 0x1033, 0x788: 0x1397, 0x789: 0x14e3, 0x78a: 0x09c3, 0x78b: 0x0a8f,
- 0x78c: 0x0d77, 0x78d: 0x0e2b, 0x78e: 0x0e5f, 0x78f: 0x1113, 0x790: 0x113b, 0x791: 0x14a3,
- 0x792: 0x084f, 0x793: 0x11a7, 0x794: 0x07f3, 0x795: 0x07ef, 0x796: 0x1097, 0x797: 0x1127,
- 0x798: 0x125b, 0x799: 0x14ab, 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: 0x1457, 0x7bf: 0x085b,
- // Block 0x1f, offset 0x7c0
- 0x7c0: 0x090f, 0x7c1: 0x0a17, 0x7c2: 0x0b2f, 0x7c3: 0x0cbf, 0x7c4: 0x0e7b, 0x7c5: 0x103f,
- 0x7c6: 0x1493, 0x7c7: 0x1577, 0x7c8: 0x15cb, 0x7c9: 0x15e3, 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: 0x147b, 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: 0x145f, 0x7f2: 0x14df, 0x7f3: 0x14ef, 0x7f4: 0x152b, 0x7f5: 0x0753,
- 0x7f6: 0x107f, 0x7f7: 0x144b, 0x7f8: 0x14c7, 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: 0x161f, 0x805: 0x0ce3,
- 0x806: 0x149f, 0x807: 0x0833, 0x808: 0x0d2f, 0x809: 0x0d3b, 0x80a: 0x0e0f, 0x80b: 0x0e47,
- 0x80c: 0x0f4b, 0x80d: 0x0fa7, 0x80e: 0x1027, 0x80f: 0x110b, 0x810: 0x1537, 0x811: 0x07af,
- 0x812: 0x0c03, 0x813: 0x14af, 0x814: 0x0767, 0x815: 0x0aab, 0x816: 0x0e2f, 0x817: 0x13df,
- 0x818: 0x0b67, 0x819: 0x0bb7, 0x81a: 0x0d43, 0x81b: 0x0f2f, 0x81c: 0x14b7, 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: 0x1453,
- 0x82a: 0x14d3, 0x82b: 0x0883, 0x82c: 0x0e4b, 0x82d: 0x0903, 0x82e: 0x0ec7, 0x82f: 0x0f6b,
- 0x830: 0x1287, 0x831: 0x14bb, 0x832: 0x15a7, 0x833: 0x15cf, 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: 0x14a7, 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: 0x14f7, 0x85d: 0x10eb,
- 0x85e: 0x116f, 0x860: 0x128f, 0x862: 0x1353,
- 0x865: 0x1407, 0x866: 0x1433,
- 0x86a: 0x154b, 0x86b: 0x154f, 0x86c: 0x1553, 0x86d: 0x15b7, 0x86e: 0x142b, 0x86f: 0x14c3,
- 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: 0x14d7, 0x8a9: 0x151b,
- 0x8aa: 0x1533, 0x8ab: 0x0b9b, 0x8ac: 0x171a, 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: 0x1447, 0x905: 0x1467,
- 0x906: 0x14b3, 0x907: 0x14d7, 0x908: 0x14f7, 0x909: 0x150b, 0x90a: 0x151b, 0x90b: 0x1527,
- 0x90c: 0x1533, 0x90d: 0x1587, 0x90e: 0x1627, 0x90f: 0x16b1, 0x910: 0x16ac, 0x911: 0x16de,
- 0x912: 0x0607, 0x913: 0x062f, 0x914: 0x0633, 0x915: 0x1760, 0x916: 0x178d, 0x917: 0x1805,
- 0x918: 0x1613, 0x919: 0x1623,
- // Block 0x25, offset 0x940
- 0x940: 0x06fb, 0x941: 0x06f3, 0x942: 0x0703, 0x943: 0x1643, 0x944: 0x0747, 0x945: 0x0757,
- 0x946: 0x075b, 0x947: 0x0763, 0x948: 0x076b, 0x949: 0x076f, 0x94a: 0x077b, 0x94b: 0x0773,
- 0x94c: 0x05b3, 0x94d: 0x1657, 0x94e: 0x078f, 0x94f: 0x0793, 0x950: 0x0797, 0x951: 0x07b3,
- 0x952: 0x1648, 0x953: 0x05b7, 0x954: 0x079f, 0x955: 0x07bf, 0x956: 0x1652, 0x957: 0x07cf,
- 0x958: 0x07d7, 0x959: 0x0737, 0x95a: 0x07df, 0x95b: 0x07e3, 0x95c: 0x182d, 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: 0x1666, 0x975: 0x0e93,
- 0x976: 0x08cf, 0x977: 0x08d7, 0x978: 0x166b, 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: 0x1670, 0x99a: 0x09d7, 0x99b: 0x09db, 0x99c: 0x09e3, 0x99d: 0x09ef,
- 0x99e: 0x09f7, 0x99f: 0x0a13, 0x9a0: 0x1675, 0x9a1: 0x167a, 0x9a2: 0x0a1f, 0x9a3: 0x0a23,
- 0x9a4: 0x0a27, 0x9a5: 0x0a1b, 0x9a6: 0x0a2f, 0x9a7: 0x05c7, 0x9a8: 0x05cb, 0x9a9: 0x0a37,
- 0x9aa: 0x0a3f, 0x9ab: 0x0a3f, 0x9ac: 0x167f, 0x9ad: 0x0a5b, 0x9ae: 0x0a5f, 0x9af: 0x0a63,
- 0x9b0: 0x0a6b, 0x9b1: 0x1684, 0x9b2: 0x0a73, 0x9b3: 0x0a77, 0x9b4: 0x0b4f, 0x9b5: 0x0a7f,
- 0x9b6: 0x05cf, 0x9b7: 0x0a8b, 0x9b8: 0x0a9b, 0x9b9: 0x0aa7, 0x9ba: 0x0aa3, 0x9bb: 0x168e,
- 0x9bc: 0x0aaf, 0x9bd: 0x1693, 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: 0x1698, 0x9ca: 0x05db, 0x9cb: 0x0b0f,
- 0x9cc: 0x0b13, 0x9cd: 0x0b17, 0x9ce: 0x0b1f, 0x9cf: 0x185f, 0x9d0: 0x0b37, 0x9d1: 0x16a2,
- 0x9d2: 0x16a2, 0x9d3: 0x11d7, 0x9d4: 0x0b47, 0x9d5: 0x0b47, 0x9d6: 0x05df, 0x9d7: 0x16c5,
- 0x9d8: 0x1797, 0x9d9: 0x0b57, 0x9da: 0x0b5f, 0x9db: 0x05e3, 0x9dc: 0x0b73, 0x9dd: 0x0b83,
- 0x9de: 0x0b87, 0x9df: 0x0b8f, 0x9e0: 0x0b9f, 0x9e1: 0x05eb, 0x9e2: 0x05e7, 0x9e3: 0x0ba3,
- 0x9e4: 0x16a7, 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: 0x16b6, 0x9f9: 0x0c3f, 0x9fa: 0x0c33, 0x9fb: 0x0c4b,
- 0x9fc: 0x0c53, 0x9fd: 0x0c67, 0x9fe: 0x16bb, 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: 0x16c0, 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: 0x16d9,
- 0xa1e: 0x0603, 0xa1f: 0x0d3f, 0xa20: 0x0d33, 0xa21: 0x0d4f, 0xa22: 0x0d57, 0xa23: 0x16e3,
- 0xa24: 0x0d5b, 0xa25: 0x0d47, 0xa26: 0x0d63, 0xa27: 0x0607, 0xa28: 0x0d67, 0xa29: 0x0d6b,
- 0xa2a: 0x0d6f, 0xa2b: 0x0d7b, 0xa2c: 0x16e8, 0xa2d: 0x0d83, 0xa2e: 0x060b, 0xa2f: 0x0d8f,
- 0xa30: 0x16ed, 0xa31: 0x0d93, 0xa32: 0x060f, 0xa33: 0x0d9f, 0xa34: 0x0dab, 0xa35: 0x0db7,
- 0xa36: 0x0dbb, 0xa37: 0x16f2, 0xa38: 0x1689, 0xa39: 0x16f7, 0xa3a: 0x0ddb, 0xa3b: 0x16fc,
- 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: 0x1701, 0xa47: 0x0e07, 0xa48: 0x0e3b, 0xa49: 0x0e3f, 0xa4a: 0x0613, 0xa4b: 0x0e53,
- 0xa4c: 0x0e4f, 0xa4d: 0x1706, 0xa4e: 0x0e33, 0xa4f: 0x0e6f, 0xa50: 0x170b, 0xa51: 0x1710,
- 0xa52: 0x0e73, 0xa53: 0x0e87, 0xa54: 0x0e83, 0xa55: 0x0e7f, 0xa56: 0x0617, 0xa57: 0x0e8b,
- 0xa58: 0x0e9b, 0xa59: 0x0e97, 0xa5a: 0x0ea3, 0xa5b: 0x164d, 0xa5c: 0x0eb3, 0xa5d: 0x1715,
- 0xa5e: 0x0ebf, 0xa5f: 0x171f, 0xa60: 0x0ed3, 0xa61: 0x0edf, 0xa62: 0x0ef3, 0xa63: 0x1724,
- 0xa64: 0x0f07, 0xa65: 0x0f0b, 0xa66: 0x1729, 0xa67: 0x172e, 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: 0x1733,
- 0xa76: 0x0fa3, 0xa77: 0x1738, 0xa78: 0x0faf, 0xa79: 0x169d, 0xa7a: 0x0fbf, 0xa7b: 0x173d,
- 0xa7c: 0x1742, 0xa7d: 0x1747, 0xa7e: 0x0627, 0xa7f: 0x062b,
- // Block 0x2a, offset 0xa80
- 0xa80: 0x0ff7, 0xa81: 0x1751, 0xa82: 0x174c, 0xa83: 0x1756, 0xa84: 0x175b, 0xa85: 0x0fff,
- 0xa86: 0x1003, 0xa87: 0x1003, 0xa88: 0x100b, 0xa89: 0x0633, 0xa8a: 0x100f, 0xa8b: 0x0637,
- 0xa8c: 0x063b, 0xa8d: 0x1765, 0xa8e: 0x1023, 0xa8f: 0x102b, 0xa90: 0x1037, 0xa91: 0x063f,
- 0xa92: 0x176a, 0xa93: 0x105b, 0xa94: 0x176f, 0xa95: 0x1774, 0xa96: 0x107b, 0xa97: 0x1093,
- 0xa98: 0x0643, 0xa99: 0x109b, 0xa9a: 0x109f, 0xa9b: 0x10a3, 0xa9c: 0x1779, 0xa9d: 0x177e,
- 0xa9e: 0x177e, 0xa9f: 0x10bb, 0xaa0: 0x0647, 0xaa1: 0x1783, 0xaa2: 0x10cf, 0xaa3: 0x10d3,
- 0xaa4: 0x064b, 0xaa5: 0x1788, 0xaa6: 0x10ef, 0xaa7: 0x064f, 0xaa8: 0x10ff, 0xaa9: 0x10f7,
- 0xaaa: 0x1107, 0xaab: 0x1792, 0xaac: 0x111f, 0xaad: 0x0653, 0xaae: 0x112b, 0xaaf: 0x1133,
- 0xab0: 0x1143, 0xab1: 0x0657, 0xab2: 0x179c, 0xab3: 0x17a1, 0xab4: 0x065b, 0xab5: 0x17a6,
- 0xab6: 0x115b, 0xab7: 0x17ab, 0xab8: 0x1167, 0xab9: 0x1173, 0xaba: 0x117b, 0xabb: 0x17b0,
- 0xabc: 0x17b5, 0xabd: 0x118f, 0xabe: 0x17ba, 0xabf: 0x1197,
- // Block 0x2b, offset 0xac0
- 0xac0: 0x16ca, 0xac1: 0x065f, 0xac2: 0x11af, 0xac3: 0x11b3, 0xac4: 0x0667, 0xac5: 0x11b7,
- 0xac6: 0x0a33, 0xac7: 0x17bf, 0xac8: 0x17c4, 0xac9: 0x16cf, 0xaca: 0x16d4, 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: 0x17c9,
- 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: 0x17ce, 0xae5: 0x17d8, 0xae6: 0x17d3, 0xae7: 0x066f, 0xae8: 0x126f, 0xae9: 0x1273,
- 0xaea: 0x127b, 0xaeb: 0x17ec, 0xaec: 0x127f, 0xaed: 0x17dd, 0xaee: 0x0673, 0xaef: 0x0677,
- 0xaf0: 0x17e2, 0xaf1: 0x17e7, 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: 0x17f1,
- 0xb06: 0x12fb, 0xb07: 0x12ff, 0xb08: 0x0687, 0xb09: 0x130b, 0xb0a: 0x05bb, 0xb0b: 0x17f6,
- 0xb0c: 0x17fb, 0xb0d: 0x068b, 0xb0e: 0x068f, 0xb0f: 0x1337, 0xb10: 0x134f, 0xb11: 0x136b,
- 0xb12: 0x137b, 0xb13: 0x1800, 0xb14: 0x138f, 0xb15: 0x1393, 0xb16: 0x13ab, 0xb17: 0x13b7,
- 0xb18: 0x180a, 0xb19: 0x165c, 0xb1a: 0x13c3, 0xb1b: 0x13bf, 0xb1c: 0x13cb, 0xb1d: 0x1661,
- 0xb1e: 0x13d7, 0xb1f: 0x13e3, 0xb20: 0x180f, 0xb21: 0x1814, 0xb22: 0x1423, 0xb23: 0x142f,
- 0xb24: 0x1437, 0xb25: 0x1819, 0xb26: 0x143b, 0xb27: 0x1463, 0xb28: 0x146f, 0xb29: 0x1473,
- 0xb2a: 0x146b, 0xb2b: 0x147f, 0xb2c: 0x1483, 0xb2d: 0x181e, 0xb2e: 0x148f, 0xb2f: 0x0693,
- 0xb30: 0x1497, 0xb31: 0x1823, 0xb32: 0x0697, 0xb33: 0x14cf, 0xb34: 0x0ac3, 0xb35: 0x14e7,
- 0xb36: 0x1828, 0xb37: 0x1832, 0xb38: 0x069b, 0xb39: 0x069f, 0xb3a: 0x150f, 0xb3b: 0x1837,
- 0xb3c: 0x06a3, 0xb3d: 0x183c, 0xb3e: 0x1527, 0xb3f: 0x1527,
- // Block 0x2d, offset 0xb40
- 0xb40: 0x152f, 0xb41: 0x1841, 0xb42: 0x1547, 0xb43: 0x06a7, 0xb44: 0x1557, 0xb45: 0x1563,
- 0xb46: 0x156b, 0xb47: 0x1573, 0xb48: 0x06ab, 0xb49: 0x1846, 0xb4a: 0x1587, 0xb4b: 0x15a3,
- 0xb4c: 0x15af, 0xb4d: 0x06af, 0xb4e: 0x06b3, 0xb4f: 0x15b3, 0xb50: 0x184b, 0xb51: 0x06b7,
- 0xb52: 0x1850, 0xb53: 0x1855, 0xb54: 0x185a, 0xb55: 0x15d7, 0xb56: 0x06bb, 0xb57: 0x15eb,
- 0xb58: 0x15f3, 0xb59: 0x15f7, 0xb5a: 0x15ff, 0xb5b: 0x1607, 0xb5c: 0x160f, 0xb5d: 0x1864,
-}
-
-// 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,
- 0x392: 0xa8, 0x393: 0xa9, 0x396: 0xaa, 0x397: 0xab,
- 0x398: 0x73, 0x39a: 0xac, 0x39c: 0xad,
- // Block 0xf, offset 0x3c0
- 0x3eb: 0xae, 0x3ec: 0xaf,
- // Block 0x10, offset 0x400
- 0x432: 0xb0,
- // Block 0x11, offset 0x440
- 0x445: 0xb1, 0x446: 0xb2, 0x447: 0xb3,
- 0x449: 0xb4,
- // Block 0x12, offset 0x480
- 0x4a3: 0xb5,
- // Block 0x13, offset 0x4c0
- 0x4c8: 0xb6,
- // 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: 139 entries, 278 bytes
-var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x79, 0x81, 0x88, 0x8b, 0x92, 0x96, 0x9a, 0x9c, 0x9e, 0xa7, 0xab, 0xb2, 0xb7, 0xba, 0xc4, 0xc6, 0xcd, 0xd5, 0xd8, 0xda, 0xdc, 0xde, 0xe3, 0xf4, 0x100, 0x102, 0x108, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x117, 0x11a, 0x11c, 0x11f, 0x122, 0x126, 0x12b, 0x134, 0x136, 0x139, 0x13b, 0x146, 0x155, 0x159, 0x167, 0x16a, 0x170, 0x176, 0x181, 0x185, 0x187, 0x189, 0x18b, 0x18d, 0x18f, 0x195, 0x199, 0x19b, 0x19d, 0x1a5, 0x1a9, 0x1ac, 0x1ae, 0x1b0, 0x1b2, 0x1b5, 0x1b7, 0x1b9, 0x1bb, 0x1bd, 0x1c3, 0x1c6, 0x1c8, 0x1cf, 0x1d5, 0x1db, 0x1e3, 0x1e9, 0x1ef, 0x1f5, 0x1f9, 0x207, 0x210, 0x213, 0x216, 0x218, 0x21b, 0x21d, 0x221, 0x226, 0x228, 0x22a, 0x22f, 0x235, 0x237, 0x239, 0x23b, 0x241, 0x244, 0x247, 0x24f, 0x256, 0x259, 0x25c, 0x25e, 0x266, 0x26d, 0x270, 0x276, 0x278, 0x27b, 0x27d, 0x27f, 0x281, 0x283, 0x290, 0x29a, 0x29c, 0x29e, 0x2a0}
-
-// nfcSparseValues: 674 entries, 2696 bytes
-var nfcSparseValues = [674]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: 0x4774, lo: 0xa0, hi: 0xa1},
- {value: 0x47a6, 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: 0x48d2, lo: 0x8a, hi: 0x8a},
- {value: 0x48f0, lo: 0x8b, hi: 0x8b},
- {value: 0x36c3, lo: 0x8c, hi: 0x8c},
- {value: 0x36db, lo: 0x8d, hi: 0x8d},
- {value: 0x4908, lo: 0x8e, hi: 0x8e},
- {value: 0xa000, lo: 0x92, hi: 0x92},
- {value: 0x36f9, 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: 0x37a1, lo: 0x90, hi: 0x90},
- {value: 0x37ad, lo: 0x91, hi: 0x91},
- {value: 0x379b, lo: 0x93, hi: 0x93},
- {value: 0xa000, lo: 0x96, hi: 0x96},
- {value: 0x3813, lo: 0x97, hi: 0x97},
- {value: 0x37dd, lo: 0x9c, hi: 0x9c},
- {value: 0x37c5, lo: 0x9d, hi: 0x9d},
- {value: 0x37ef, lo: 0x9e, hi: 0x9e},
- {value: 0xa000, lo: 0xb4, hi: 0xb5},
- {value: 0x3819, lo: 0xb6, hi: 0xb6},
- {value: 0x381f, 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: 0x383d, lo: 0xa2, hi: 0xa2},
- {value: 0x3843, lo: 0xa3, hi: 0xa3},
- {value: 0x384f, lo: 0xa4, hi: 0xa4},
- {value: 0x3849, lo: 0xa5, hi: 0xa5},
- {value: 0x3855, lo: 0xa6, hi: 0xa6},
- {value: 0xa000, lo: 0xa7, hi: 0xa7},
- // Block 0x9, offset 0x3a
- {value: 0x0000, lo: 0x0e},
- {value: 0x3867, lo: 0x80, hi: 0x80},
- {value: 0xa000, lo: 0x81, hi: 0x81},
- {value: 0x385b, lo: 0x82, hi: 0x82},
- {value: 0xa000, lo: 0x92, hi: 0x92},
- {value: 0x3861, 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: 0x0f},
- {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 0x79
- {value: 0x0000, lo: 0x07},
- {value: 0xa000, lo: 0xa8, hi: 0xa8},
- {value: 0x3ed4, lo: 0xa9, hi: 0xa9},
- {value: 0xa000, lo: 0xb0, hi: 0xb0},
- {value: 0x3edc, lo: 0xb1, hi: 0xb1},
- {value: 0xa000, lo: 0xb3, hi: 0xb3},
- {value: 0x3ee4, lo: 0xb4, hi: 0xb4},
- {value: 0x9902, lo: 0xbc, hi: 0xbc},
- // Block 0x11, offset 0x81
- {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: 0x45ae, lo: 0x98, hi: 0x9f},
- // Block 0x12, offset 0x88
- {value: 0x0000, lo: 0x02},
- {value: 0x8102, lo: 0xbc, hi: 0xbc},
- {value: 0x9900, lo: 0xbe, hi: 0xbe},
- // Block 0x13, offset 0x8b
- {value: 0x0008, lo: 0x06},
- {value: 0xa000, lo: 0x87, hi: 0x87},
- {value: 0x2c9a, lo: 0x8b, hi: 0x8c},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x9900, lo: 0x97, hi: 0x97},
- {value: 0x45ee, lo: 0x9c, hi: 0x9d},
- {value: 0x45fe, lo: 0x9f, hi: 0x9f},
- // Block 0x14, offset 0x92
- {value: 0x0000, lo: 0x03},
- {value: 0x4626, lo: 0xb3, hi: 0xb3},
- {value: 0x462e, lo: 0xb6, hi: 0xb6},
- {value: 0x8102, lo: 0xbc, hi: 0xbc},
- // Block 0x15, offset 0x96
- {value: 0x0008, lo: 0x03},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x4606, lo: 0x99, hi: 0x9b},
- {value: 0x461e, lo: 0x9e, hi: 0x9e},
- // Block 0x16, offset 0x9a
- {value: 0x0000, lo: 0x01},
- {value: 0x8102, lo: 0xbc, hi: 0xbc},
- // Block 0x17, offset 0x9c
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- // Block 0x18, offset 0x9e
- {value: 0x0000, lo: 0x08},
- {value: 0xa000, lo: 0x87, hi: 0x87},
- {value: 0x2cb2, lo: 0x88, hi: 0x88},
- {value: 0x2caa, lo: 0x8b, hi: 0x8b},
- {value: 0x2cba, lo: 0x8c, hi: 0x8c},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x9900, lo: 0x96, hi: 0x97},
- {value: 0x4636, lo: 0x9c, hi: 0x9c},
- {value: 0x463e, lo: 0x9d, hi: 0x9d},
- // Block 0x19, offset 0xa7
- {value: 0x0000, lo: 0x03},
- {value: 0xa000, lo: 0x92, hi: 0x92},
- {value: 0x2cc2, lo: 0x94, hi: 0x94},
- {value: 0x9900, lo: 0xbe, hi: 0xbe},
- // Block 0x1a, offset 0xab
- {value: 0x0000, lo: 0x06},
- {value: 0xa000, lo: 0x86, hi: 0x87},
- {value: 0x2cca, lo: 0x8a, hi: 0x8a},
- {value: 0x2cda, lo: 0x8b, hi: 0x8b},
- {value: 0x2cd2, lo: 0x8c, hi: 0x8c},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x9900, lo: 0x97, hi: 0x97},
- // Block 0x1b, offset 0xb2
- {value: 0x1801, lo: 0x04},
- {value: 0xa000, lo: 0x86, hi: 0x86},
- {value: 0x3eec, lo: 0x88, hi: 0x88},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x8120, lo: 0x95, hi: 0x96},
- // Block 0x1c, offset 0xb7
- {value: 0x0000, lo: 0x02},
- {value: 0x8102, lo: 0xbc, hi: 0xbc},
- {value: 0xa000, lo: 0xbf, hi: 0xbf},
- // Block 0x1d, offset 0xba
- {value: 0x0000, lo: 0x09},
- {value: 0x2ce2, lo: 0x80, hi: 0x80},
- {value: 0x9900, lo: 0x82, hi: 0x82},
- {value: 0xa000, lo: 0x86, hi: 0x86},
- {value: 0x2cea, lo: 0x87, hi: 0x87},
- {value: 0x2cf2, lo: 0x88, hi: 0x88},
- {value: 0x2f4c, lo: 0x8a, hi: 0x8a},
- {value: 0x2dd4, lo: 0x8b, hi: 0x8b},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x9900, lo: 0x95, hi: 0x96},
- // Block 0x1e, offset 0xc4
- {value: 0x0000, lo: 0x01},
- {value: 0x9900, lo: 0xbe, hi: 0xbe},
- // Block 0x1f, offset 0xc6
- {value: 0x0000, lo: 0x06},
- {value: 0xa000, lo: 0x86, hi: 0x87},
- {value: 0x2cfa, lo: 0x8a, hi: 0x8a},
- {value: 0x2d0a, lo: 0x8b, hi: 0x8b},
- {value: 0x2d02, lo: 0x8c, hi: 0x8c},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x9900, lo: 0x97, hi: 0x97},
- // Block 0x20, offset 0xcd
- {value: 0x6bee, lo: 0x07},
- {value: 0x9904, lo: 0x8a, hi: 0x8a},
- {value: 0x9900, lo: 0x8f, hi: 0x8f},
- {value: 0xa000, lo: 0x99, hi: 0x99},
- {value: 0x3ef4, lo: 0x9a, hi: 0x9a},
- {value: 0x2f54, lo: 0x9c, hi: 0x9c},
- {value: 0x2ddf, lo: 0x9d, hi: 0x9d},
- {value: 0x2d12, lo: 0x9e, hi: 0x9f},
- // Block 0x21, offset 0xd5
- {value: 0x0000, lo: 0x02},
- {value: 0x8122, lo: 0xb8, hi: 0xb9},
- {value: 0x8104, lo: 0xba, hi: 0xba},
- // Block 0x22, offset 0xd8
- {value: 0x0000, lo: 0x01},
- {value: 0x8123, lo: 0x88, hi: 0x8b},
- // Block 0x23, offset 0xda
- {value: 0x0000, lo: 0x01},
- {value: 0x8124, lo: 0xb8, hi: 0xb9},
- // Block 0x24, offset 0xdc
- {value: 0x0000, lo: 0x01},
- {value: 0x8125, lo: 0x88, hi: 0x8b},
- // Block 0x25, offset 0xde
- {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 0xe3
- {value: 0x0000, lo: 0x10},
- {value: 0x2640, lo: 0x83, hi: 0x83},
- {value: 0x2647, lo: 0x8d, hi: 0x8d},
- {value: 0x264e, lo: 0x92, hi: 0x92},
- {value: 0x2655, lo: 0x97, hi: 0x97},
- {value: 0x265c, lo: 0x9c, hi: 0x9c},
- {value: 0x2639, lo: 0xa9, hi: 0xa9},
- {value: 0x8126, lo: 0xb1, hi: 0xb1},
- {value: 0x8127, lo: 0xb2, hi: 0xb2},
- {value: 0x4a62, lo: 0xb3, hi: 0xb3},
- {value: 0x8128, lo: 0xb4, hi: 0xb4},
- {value: 0x4a6b, lo: 0xb5, hi: 0xb5},
- {value: 0x4646, lo: 0xb6, hi: 0xb6},
- {value: 0x8200, lo: 0xb7, hi: 0xb7},
- {value: 0x464e, lo: 0xb8, hi: 0xb8},
- {value: 0x8200, lo: 0xb9, hi: 0xb9},
- {value: 0x8127, lo: 0xba, hi: 0xbd},
- // Block 0x27, offset 0xf4
- {value: 0x0000, lo: 0x0b},
- {value: 0x8127, lo: 0x80, hi: 0x80},
- {value: 0x4a74, lo: 0x81, hi: 0x81},
- {value: 0x8132, lo: 0x82, hi: 0x83},
- {value: 0x8104, lo: 0x84, hi: 0x84},
- {value: 0x8132, lo: 0x86, hi: 0x87},
- {value: 0x266a, lo: 0x93, hi: 0x93},
- {value: 0x2671, lo: 0x9d, hi: 0x9d},
- {value: 0x2678, lo: 0xa2, hi: 0xa2},
- {value: 0x267f, lo: 0xa7, hi: 0xa7},
- {value: 0x2686, lo: 0xac, hi: 0xac},
- {value: 0x2663, lo: 0xb9, hi: 0xb9},
- // Block 0x28, offset 0x100
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0x86, hi: 0x86},
- // Block 0x29, offset 0x102
- {value: 0x0000, lo: 0x05},
- {value: 0xa000, lo: 0xa5, hi: 0xa5},
- {value: 0x2d1a, 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 0x108
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0x8d, hi: 0x8d},
- // Block 0x2b, offset 0x10a
- {value: 0x0000, lo: 0x01},
- {value: 0xa000, lo: 0x80, hi: 0x92},
- // Block 0x2c, offset 0x10c
- {value: 0x0000, lo: 0x01},
- {value: 0xb900, lo: 0xa1, hi: 0xb5},
- // Block 0x2d, offset 0x10e
- {value: 0x0000, lo: 0x01},
- {value: 0x9900, lo: 0xa8, hi: 0xbf},
- // Block 0x2e, offset 0x110
- {value: 0x0000, lo: 0x01},
- {value: 0x9900, lo: 0x80, hi: 0x82},
- // Block 0x2f, offset 0x112
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0x9d, hi: 0x9f},
- // Block 0x30, offset 0x114
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x94, hi: 0x94},
- {value: 0x8104, lo: 0xb4, hi: 0xb4},
- // Block 0x31, offset 0x117
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x92, hi: 0x92},
- {value: 0x8132, lo: 0x9d, hi: 0x9d},
- // Block 0x32, offset 0x11a
- {value: 0x0000, lo: 0x01},
- {value: 0x8131, lo: 0xa9, hi: 0xa9},
- // Block 0x33, offset 0x11c
- {value: 0x0004, lo: 0x02},
- {value: 0x812e, lo: 0xb9, hi: 0xba},
- {value: 0x812d, lo: 0xbb, hi: 0xbb},
- // Block 0x34, offset 0x11f
- {value: 0x0000, lo: 0x02},
- {value: 0x8132, lo: 0x97, hi: 0x97},
- {value: 0x812d, lo: 0x98, hi: 0x98},
- // Block 0x35, offset 0x122
- {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 0x126
- {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 0x12b
- {value: 0x0000, lo: 0x08},
- {value: 0x2d62, lo: 0x80, hi: 0x80},
- {value: 0x2d6a, lo: 0x81, hi: 0x81},
- {value: 0xa000, lo: 0x82, hi: 0x82},
- {value: 0x2d72, 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 0x134
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0xaa, hi: 0xab},
- // Block 0x39, offset 0x136
- {value: 0x0000, lo: 0x02},
- {value: 0x8102, lo: 0xa6, hi: 0xa6},
- {value: 0x8104, lo: 0xb2, hi: 0xb3},
- // Block 0x3a, offset 0x139
- {value: 0x0000, lo: 0x01},
- {value: 0x8102, lo: 0xb7, hi: 0xb7},
- // Block 0x3b, offset 0x13b
- {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 0x146
- {value: 0x0000, lo: 0x0e},
- {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: 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 0x155
- {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 0x159
- {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 0x167
- {value: 0x4277, lo: 0x02},
- {value: 0x01b8, lo: 0xa6, hi: 0xa6},
- {value: 0x0057, lo: 0xaa, hi: 0xab},
- // Block 0x40, offset 0x16a
- {value: 0x0007, lo: 0x05},
- {value: 0xa000, lo: 0x90, hi: 0x90},
- {value: 0xa000, lo: 0x92, hi: 0x92},
- {value: 0xa000, lo: 0x94, hi: 0x94},
- {value: 0x3bb5, lo: 0x9a, hi: 0x9b},
- {value: 0x3bc3, lo: 0xae, hi: 0xae},
- // Block 0x41, offset 0x170
- {value: 0x000e, lo: 0x05},
- {value: 0x3bca, lo: 0x8d, hi: 0x8e},
- {value: 0x3bd1, 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 0x176
- {value: 0x640c, lo: 0x0a},
- {value: 0xa000, lo: 0x83, hi: 0x83},
- {value: 0x3bdf, lo: 0x84, hi: 0x84},
- {value: 0xa000, lo: 0x88, hi: 0x88},
- {value: 0x3be6, lo: 0x89, hi: 0x89},
- {value: 0xa000, lo: 0x8b, hi: 0x8b},
- {value: 0x3bed, lo: 0x8c, hi: 0x8c},
- {value: 0xa000, lo: 0xa3, hi: 0xa3},
- {value: 0x3bf4, lo: 0xa4, hi: 0xa5},
- {value: 0x3bfb, lo: 0xa6, hi: 0xa6},
- {value: 0xa000, lo: 0xbc, hi: 0xbc},
- // Block 0x43, offset 0x181
- {value: 0x0007, lo: 0x03},
- {value: 0x3c64, lo: 0xa0, hi: 0xa1},
- {value: 0x3c8e, lo: 0xa2, hi: 0xa3},
- {value: 0x3cb8, lo: 0xaa, hi: 0xad},
- // Block 0x44, offset 0x185
- {value: 0x0004, lo: 0x01},
- {value: 0x048b, lo: 0xa9, hi: 0xaa},
- // Block 0x45, offset 0x187
- {value: 0x0000, lo: 0x01},
- {value: 0x456f, lo: 0x9c, hi: 0x9c},
- // Block 0x46, offset 0x189
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0xaf, hi: 0xb1},
- // Block 0x47, offset 0x18b
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0xbf, hi: 0xbf},
- // Block 0x48, offset 0x18d
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0xa0, hi: 0xbf},
- // Block 0x49, offset 0x18f
- {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 0x195
- {value: 0x0000, lo: 0x03},
- {value: 0x4a7d, lo: 0xb3, hi: 0xb3},
- {value: 0x4a7d, lo: 0xb5, hi: 0xb6},
- {value: 0x4a7d, lo: 0xba, hi: 0xbf},
- // Block 0x4b, offset 0x199
- {value: 0x0000, lo: 0x01},
- {value: 0x4a7d, lo: 0x8f, hi: 0xa3},
- // Block 0x4c, offset 0x19b
- {value: 0x0000, lo: 0x01},
- {value: 0x8100, lo: 0xae, hi: 0xbe},
- // Block 0x4d, offset 0x19d
- {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 0x1a5
- {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 0x1a9
- {value: 0x0000, lo: 0x02},
- {value: 0x8132, lo: 0xaf, hi: 0xaf},
- {value: 0x8132, lo: 0xb4, hi: 0xbd},
- // Block 0x50, offset 0x1ac
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0x9e, hi: 0x9f},
- // Block 0x51, offset 0x1ae
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0xb0, hi: 0xb1},
- // Block 0x52, offset 0x1b0
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0x86, hi: 0x86},
- // Block 0x53, offset 0x1b2
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x84, hi: 0x84},
- {value: 0x8132, lo: 0xa0, hi: 0xb1},
- // Block 0x54, offset 0x1b5
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0xab, hi: 0xad},
- // Block 0x55, offset 0x1b7
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0x93, hi: 0x93},
- // Block 0x56, offset 0x1b9
- {value: 0x0000, lo: 0x01},
- {value: 0x8102, lo: 0xb3, hi: 0xb3},
- // Block 0x57, offset 0x1bb
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0x80, hi: 0x80},
- // Block 0x58, offset 0x1bd
- {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 0x1c3
- {value: 0x0000, lo: 0x02},
- {value: 0x8132, lo: 0x81, hi: 0x81},
- {value: 0x8104, lo: 0xb6, hi: 0xb6},
- // Block 0x5a, offset 0x1c6
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0xad, hi: 0xad},
- // Block 0x5b, offset 0x1c8
- {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 0x1cf
- {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 0x1d5
- {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 0x1db
- {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 0x1e3
- {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 0x1e9
- {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 0x1ef
- {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 0x1f5
- {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 0x1f9
- {value: 0x0006, lo: 0x0d},
- {value: 0x4422, lo: 0x9d, hi: 0x9d},
- {value: 0x8115, lo: 0x9e, hi: 0x9e},
- {value: 0x4494, lo: 0x9f, hi: 0x9f},
- {value: 0x4482, lo: 0xaa, hi: 0xab},
- {value: 0x4586, lo: 0xac, hi: 0xac},
- {value: 0x458e, lo: 0xad, hi: 0xad},
- {value: 0x43da, lo: 0xae, hi: 0xb1},
- {value: 0x43f8, lo: 0xb2, hi: 0xb4},
- {value: 0x4410, lo: 0xb5, hi: 0xb6},
- {value: 0x441c, lo: 0xb8, hi: 0xb8},
- {value: 0x4428, lo: 0xb9, hi: 0xbb},
- {value: 0x4440, lo: 0xbc, hi: 0xbc},
- {value: 0x4446, lo: 0xbe, hi: 0xbe},
- // Block 0x64, offset 0x207
- {value: 0x0006, lo: 0x08},
- {value: 0x444c, lo: 0x80, hi: 0x81},
- {value: 0x4458, lo: 0x83, hi: 0x84},
- {value: 0x446a, lo: 0x86, hi: 0x89},
- {value: 0x448e, lo: 0x8a, hi: 0x8a},
- {value: 0x440a, lo: 0x8b, hi: 0x8b},
- {value: 0x43f2, lo: 0x8c, hi: 0x8c},
- {value: 0x443a, lo: 0x8d, hi: 0x8d},
- {value: 0x4464, lo: 0x8e, hi: 0x8e},
- // Block 0x65, offset 0x210
- {value: 0x0000, lo: 0x02},
- {value: 0x8100, lo: 0xa4, hi: 0xa5},
- {value: 0x8100, lo: 0xb0, hi: 0xb1},
- // Block 0x66, offset 0x213
- {value: 0x0000, lo: 0x02},
- {value: 0x8100, lo: 0x9b, hi: 0x9d},
- {value: 0x8200, lo: 0x9e, hi: 0xa3},
- // Block 0x67, offset 0x216
- {value: 0x0000, lo: 0x01},
- {value: 0x8100, lo: 0x90, hi: 0x90},
- // Block 0x68, offset 0x218
- {value: 0x0000, lo: 0x02},
- {value: 0x8100, lo: 0x99, hi: 0x99},
- {value: 0x8200, lo: 0xb2, hi: 0xb4},
- // Block 0x69, offset 0x21b
- {value: 0x0000, lo: 0x01},
- {value: 0x8100, lo: 0xbc, hi: 0xbd},
- // Block 0x6a, offset 0x21d
- {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 0x221
- {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 0x226
- {value: 0x0000, lo: 0x01},
- {value: 0x8100, lo: 0x81, hi: 0x8c},
- // Block 0x6d, offset 0x228
- {value: 0x0000, lo: 0x01},
- {value: 0x8100, lo: 0xb5, hi: 0xba},
- // Block 0x6e, offset 0x22a
- {value: 0x0000, lo: 0x04},
- {value: 0x4a7d, lo: 0x9e, hi: 0x9f},
- {value: 0x4a7d, lo: 0xa3, hi: 0xa3},
- {value: 0x4a7d, lo: 0xa5, hi: 0xa6},
- {value: 0x4a7d, lo: 0xaa, hi: 0xaf},
- // Block 0x6f, offset 0x22f
- {value: 0x0000, lo: 0x05},
- {value: 0x4a7d, lo: 0x82, hi: 0x87},
- {value: 0x4a7d, lo: 0x8a, hi: 0x8f},
- {value: 0x4a7d, lo: 0x92, hi: 0x97},
- {value: 0x4a7d, lo: 0x9a, hi: 0x9c},
- {value: 0x8100, lo: 0xa3, hi: 0xa3},
- // Block 0x70, offset 0x235
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0xbd, hi: 0xbd},
- // Block 0x71, offset 0x237
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0xa0, hi: 0xa0},
- // Block 0x72, offset 0x239
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0xb6, hi: 0xba},
- // Block 0x73, offset 0x23b
- {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 0x241
- {value: 0x0000, lo: 0x02},
- {value: 0x8132, lo: 0xa5, hi: 0xa5},
- {value: 0x812d, lo: 0xa6, hi: 0xa6},
- // Block 0x75, offset 0x244
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x86, hi: 0x86},
- {value: 0x8104, lo: 0xbf, hi: 0xbf},
- // Block 0x76, offset 0x247
- {value: 0x17fe, lo: 0x07},
- {value: 0xa000, lo: 0x99, hi: 0x99},
- {value: 0x4234, lo: 0x9a, hi: 0x9a},
- {value: 0xa000, lo: 0x9b, hi: 0x9b},
- {value: 0x423e, lo: 0x9c, hi: 0x9c},
- {value: 0xa000, lo: 0xa5, hi: 0xa5},
- {value: 0x4248, lo: 0xab, hi: 0xab},
- {value: 0x8104, lo: 0xb9, hi: 0xba},
- // Block 0x77, offset 0x24f
- {value: 0x0000, lo: 0x06},
- {value: 0x8132, lo: 0x80, hi: 0x82},
- {value: 0x9900, lo: 0xa7, hi: 0xa7},
- {value: 0x2d7a, lo: 0xae, hi: 0xae},
- {value: 0x2d84, lo: 0xaf, hi: 0xaf},
- {value: 0xa000, lo: 0xb1, hi: 0xb2},
- {value: 0x8104, lo: 0xb3, hi: 0xb4},
- // Block 0x78, offset 0x256
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x80, hi: 0x80},
- {value: 0x8102, lo: 0x8a, hi: 0x8a},
- // Block 0x79, offset 0x259
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0xb5, hi: 0xb5},
- {value: 0x8102, lo: 0xb6, hi: 0xb6},
- // Block 0x7a, offset 0x25c
- {value: 0x0002, lo: 0x01},
- {value: 0x8102, lo: 0xa9, hi: 0xaa},
- // Block 0x7b, offset 0x25e
- {value: 0x0000, lo: 0x07},
- {value: 0xa000, lo: 0x87, hi: 0x87},
- {value: 0x2d8e, lo: 0x8b, hi: 0x8b},
- {value: 0x2d98, 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 0x266
- {value: 0x6b5e, lo: 0x06},
- {value: 0x9900, lo: 0xb0, hi: 0xb0},
- {value: 0xa000, lo: 0xb9, hi: 0xb9},
- {value: 0x9900, lo: 0xba, hi: 0xba},
- {value: 0x2dac, lo: 0xbb, hi: 0xbb},
- {value: 0x2da2, lo: 0xbc, hi: 0xbd},
- {value: 0x2db6, lo: 0xbe, hi: 0xbe},
- // Block 0x7d, offset 0x26d
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x82, hi: 0x82},
- {value: 0x8102, lo: 0x83, hi: 0x83},
- // Block 0x7e, offset 0x270
- {value: 0x0000, lo: 0x05},
- {value: 0x9900, lo: 0xaf, hi: 0xaf},
- {value: 0xa000, lo: 0xb8, hi: 0xb9},
- {value: 0x2dc0, lo: 0xba, hi: 0xba},
- {value: 0x2dca, lo: 0xbb, hi: 0xbb},
- {value: 0x8104, lo: 0xbf, hi: 0xbf},
- // Block 0x7f, offset 0x276
- {value: 0x0000, lo: 0x01},
- {value: 0x8102, lo: 0x80, hi: 0x80},
- // Block 0x80, offset 0x278
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0xb6, hi: 0xb6},
- {value: 0x8102, lo: 0xb7, hi: 0xb7},
- // Block 0x81, offset 0x27b
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0xab, hi: 0xab},
- // Block 0x82, offset 0x27d
- {value: 0x0000, lo: 0x01},
- {value: 0x8101, lo: 0xb0, hi: 0xb4},
- // Block 0x83, offset 0x27f
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0xb0, hi: 0xb6},
- // Block 0x84, offset 0x281
- {value: 0x0000, lo: 0x01},
- {value: 0x8101, lo: 0x9e, hi: 0x9e},
- // Block 0x85, offset 0x283
- {value: 0x0000, lo: 0x0c},
- {value: 0x465e, lo: 0x9e, hi: 0x9e},
- {value: 0x4668, lo: 0x9f, hi: 0x9f},
- {value: 0x469c, lo: 0xa0, hi: 0xa0},
- {value: 0x46aa, lo: 0xa1, hi: 0xa1},
- {value: 0x46b8, lo: 0xa2, hi: 0xa2},
- {value: 0x46c6, lo: 0xa3, hi: 0xa3},
- {value: 0x46d4, 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 0x86, offset 0x290
- {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: 0x4672, lo: 0xbb, hi: 0xbb},
- {value: 0x467c, lo: 0xbc, hi: 0xbc},
- {value: 0x46e2, lo: 0xbd, hi: 0xbd},
- {value: 0x46fe, lo: 0xbe, hi: 0xbe},
- {value: 0x46f0, lo: 0xbf, hi: 0xbf},
- // Block 0x87, offset 0x29a
- {value: 0x0000, lo: 0x01},
- {value: 0x470c, lo: 0x80, hi: 0x80},
- // Block 0x88, offset 0x29c
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0x82, hi: 0x84},
- // Block 0x89, offset 0x29e
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0x90, hi: 0x96},
- // Block 0x8a, offset 0x2a0
- {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 < 0xC0:
- 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 < 0xC0:
- 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: 16932 bytes (16.54 KiB). Checksum: 30d032c1800b8f3e.
-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: 0x2f6b, 0xc1: 0x2f70, 0xc2: 0x471a, 0xc3: 0x2f75, 0xc4: 0x4729, 0xc5: 0x472e,
- 0xc6: 0xa000, 0xc7: 0x4738, 0xc8: 0x2fde, 0xc9: 0x2fe3, 0xca: 0x473d, 0xcb: 0x2ff7,
- 0xcc: 0x306a, 0xcd: 0x306f, 0xce: 0x3074, 0xcf: 0x4751, 0xd1: 0x3100,
- 0xd2: 0x3123, 0xd3: 0x3128, 0xd4: 0x475b, 0xd5: 0x4760, 0xd6: 0x476f,
- 0xd8: 0xa000, 0xd9: 0x31af, 0xda: 0x31b4, 0xdb: 0x31b9, 0xdc: 0x47a1, 0xdd: 0x3231,
- 0xe0: 0x3277, 0xe1: 0x327c, 0xe2: 0x47ab, 0xe3: 0x3281,
- 0xe4: 0x47ba, 0xe5: 0x47bf, 0xe6: 0xa000, 0xe7: 0x47c9, 0xe8: 0x32ea, 0xe9: 0x32ef,
- 0xea: 0x47ce, 0xeb: 0x3303, 0xec: 0x337b, 0xed: 0x3380, 0xee: 0x3385, 0xef: 0x47e2,
- 0xf1: 0x3411, 0xf2: 0x3434, 0xf3: 0x3439, 0xf4: 0x47ec, 0xf5: 0x47f1,
- 0xf6: 0x4800, 0xf8: 0xa000, 0xf9: 0x34c5, 0xfa: 0x34ca, 0xfb: 0x34cf,
- 0xfc: 0x4832, 0xfd: 0x354c, 0xff: 0x3565,
- // Block 0x4, offset 0x100
- 0x100: 0x2f7a, 0x101: 0x3286, 0x102: 0x471f, 0x103: 0x47b0, 0x104: 0x2f98, 0x105: 0x32a4,
- 0x106: 0x2fac, 0x107: 0x32b8, 0x108: 0x2fb1, 0x109: 0x32bd, 0x10a: 0x2fb6, 0x10b: 0x32c2,
- 0x10c: 0x2fbb, 0x10d: 0x32c7, 0x10e: 0x2fc5, 0x10f: 0x32d1,
- 0x112: 0x4742, 0x113: 0x47d3, 0x114: 0x2fed, 0x115: 0x32f9, 0x116: 0x2ff2, 0x117: 0x32fe,
- 0x118: 0x3010, 0x119: 0x331c, 0x11a: 0x3001, 0x11b: 0x330d, 0x11c: 0x3029, 0x11d: 0x3335,
- 0x11e: 0x3033, 0x11f: 0x333f, 0x120: 0x3038, 0x121: 0x3344, 0x122: 0x3042, 0x123: 0x334e,
- 0x124: 0x3047, 0x125: 0x3353, 0x128: 0x3079, 0x129: 0x338a,
- 0x12a: 0x307e, 0x12b: 0x338f, 0x12c: 0x3083, 0x12d: 0x3394, 0x12e: 0x30a6, 0x12f: 0x33b2,
- 0x130: 0x3088, 0x132: 0x1959, 0x133: 0x19e3, 0x134: 0x30b0, 0x135: 0x33bc,
- 0x136: 0x30c4, 0x137: 0x33d5, 0x139: 0x30ce, 0x13a: 0x33df, 0x13b: 0x30d8,
- 0x13c: 0x33e9, 0x13d: 0x30d3, 0x13e: 0x33e4, 0x13f: 0x1ba8,
- // Block 0x5, offset 0x140
- 0x140: 0x1c30, 0x143: 0x30fb, 0x144: 0x340c, 0x145: 0x3114,
- 0x146: 0x3425, 0x147: 0x310a, 0x148: 0x341b, 0x149: 0x1c58,
- 0x14c: 0x4765, 0x14d: 0x47f6, 0x14e: 0x312d, 0x14f: 0x343e, 0x150: 0x3137, 0x151: 0x3448,
- 0x154: 0x3155, 0x155: 0x3466, 0x156: 0x316e, 0x157: 0x347f,
- 0x158: 0x315f, 0x159: 0x3470, 0x15a: 0x4788, 0x15b: 0x4819, 0x15c: 0x3178, 0x15d: 0x3489,
- 0x15e: 0x3187, 0x15f: 0x3498, 0x160: 0x478d, 0x161: 0x481e, 0x162: 0x31a0, 0x163: 0x34b6,
- 0x164: 0x3191, 0x165: 0x34a7, 0x168: 0x4797, 0x169: 0x4828,
- 0x16a: 0x479c, 0x16b: 0x482d, 0x16c: 0x31be, 0x16d: 0x34d4, 0x16e: 0x31c8, 0x16f: 0x34de,
- 0x170: 0x31cd, 0x171: 0x34e3, 0x172: 0x31eb, 0x173: 0x3501, 0x174: 0x320e, 0x175: 0x3524,
- 0x176: 0x3236, 0x177: 0x3551, 0x178: 0x324a, 0x179: 0x3259, 0x17a: 0x3579, 0x17b: 0x3263,
- 0x17c: 0x3583, 0x17d: 0x3268, 0x17e: 0x3588, 0x17f: 0x00a7,
- // Block 0x6, offset 0x180
- 0x184: 0x2dea, 0x185: 0x2df0,
- 0x186: 0x2df6, 0x187: 0x196e, 0x188: 0x1971, 0x189: 0x1a04, 0x18a: 0x1983, 0x18b: 0x1986,
- 0x18c: 0x1a3a, 0x18d: 0x2f84, 0x18e: 0x3290, 0x18f: 0x3092, 0x190: 0x339e, 0x191: 0x313c,
- 0x192: 0x344d, 0x193: 0x31d2, 0x194: 0x34e8, 0x195: 0x39cb, 0x196: 0x3b5a, 0x197: 0x39c4,
- 0x198: 0x3b53, 0x199: 0x39d2, 0x19a: 0x3b61, 0x19b: 0x39bd, 0x19c: 0x3b4c,
- 0x19e: 0x38ac, 0x19f: 0x3a3b, 0x1a0: 0x38a5, 0x1a1: 0x3a34, 0x1a2: 0x35af, 0x1a3: 0x35c1,
- 0x1a6: 0x303d, 0x1a7: 0x3349, 0x1a8: 0x30ba, 0x1a9: 0x33cb,
- 0x1aa: 0x477e, 0x1ab: 0x480f, 0x1ac: 0x398c, 0x1ad: 0x3b1b, 0x1ae: 0x35d3, 0x1af: 0x35d9,
- 0x1b0: 0x33c1, 0x1b1: 0x193e, 0x1b2: 0x1941, 0x1b3: 0x19cb, 0x1b4: 0x3024, 0x1b5: 0x3330,
- 0x1b8: 0x30f6, 0x1b9: 0x3407, 0x1ba: 0x38b3, 0x1bb: 0x3a42,
- 0x1bc: 0x35a9, 0x1bd: 0x35bb, 0x1be: 0x35b5, 0x1bf: 0x35c7,
- // Block 0x7, offset 0x1c0
- 0x1c0: 0x2f89, 0x1c1: 0x3295, 0x1c2: 0x2f8e, 0x1c3: 0x329a, 0x1c4: 0x3006, 0x1c5: 0x3312,
- 0x1c6: 0x300b, 0x1c7: 0x3317, 0x1c8: 0x3097, 0x1c9: 0x33a3, 0x1ca: 0x309c, 0x1cb: 0x33a8,
- 0x1cc: 0x3141, 0x1cd: 0x3452, 0x1ce: 0x3146, 0x1cf: 0x3457, 0x1d0: 0x3164, 0x1d1: 0x3475,
- 0x1d2: 0x3169, 0x1d3: 0x347a, 0x1d4: 0x31d7, 0x1d5: 0x34ed, 0x1d6: 0x31dc, 0x1d7: 0x34f2,
- 0x1d8: 0x3182, 0x1d9: 0x3493, 0x1da: 0x319b, 0x1db: 0x34b1,
- 0x1de: 0x3056, 0x1df: 0x3362,
- 0x1e6: 0x4724, 0x1e7: 0x47b5, 0x1e8: 0x474c, 0x1e9: 0x47dd,
- 0x1ea: 0x395b, 0x1eb: 0x3aea, 0x1ec: 0x3938, 0x1ed: 0x3ac7, 0x1ee: 0x476a, 0x1ef: 0x47fb,
- 0x1f0: 0x3954, 0x1f1: 0x3ae3, 0x1f2: 0x3240, 0x1f3: 0x355b,
- // 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: 0x4a40, 0x241: 0x4a45, 0x242: 0x9932, 0x243: 0x4a4a, 0x244: 0x4a4f, 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: 0x42a1,
- 0x27e: 0x0037,
- // Block 0xa, offset 0x280
- 0x284: 0x4256, 0x285: 0x450d,
- 0x286: 0x35e5, 0x287: 0x00ce, 0x288: 0x3603, 0x289: 0x360f, 0x28a: 0x3621,
- 0x28c: 0x363f, 0x28e: 0x3651, 0x28f: 0x366f, 0x290: 0x3e04, 0x291: 0xa000,
- 0x295: 0xa000, 0x297: 0xa000,
- 0x299: 0xa000,
- 0x29f: 0xa000, 0x2a1: 0xa000,
- 0x2a5: 0xa000, 0x2a9: 0xa000,
- 0x2aa: 0x3633, 0x2ab: 0x3663, 0x2ac: 0x4890, 0x2ad: 0x3693, 0x2ae: 0x48ba, 0x2af: 0x36a5,
- 0x2b0: 0x3e6c, 0x2b1: 0xa000, 0x2b5: 0xa000,
- 0x2b7: 0xa000, 0x2b9: 0xa000,
- 0x2bf: 0xa000,
- // Block 0xb, offset 0x2c0
- 0x2c1: 0xa000, 0x2c5: 0xa000,
- 0x2c9: 0xa000, 0x2ca: 0x48d2, 0x2cb: 0x48f0,
- 0x2cc: 0x36c3, 0x2cd: 0x36db, 0x2ce: 0x4908, 0x2d0: 0x01be, 0x2d1: 0x01d0,
- 0x2d2: 0x01ac, 0x2d3: 0x439e, 0x2d4: 0x43a4, 0x2d5: 0x01fa, 0x2d6: 0x01e8,
- 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7,
- 0x2f9: 0x01a6,
- // Block 0xc, offset 0x300
- 0x300: 0x371d, 0x301: 0x3729, 0x303: 0x3717,
- 0x306: 0xa000, 0x307: 0x3705,
- 0x30c: 0x3759, 0x30d: 0x3741, 0x30e: 0x376b, 0x310: 0xa000,
- 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000,
- 0x318: 0xa000, 0x319: 0x374d, 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: 0x37d1, 0x33a: 0xa000,
- 0x33e: 0xa000,
- // Block 0xd, offset 0x340
- 0x341: 0x372f, 0x342: 0x37b3,
- 0x350: 0x370b, 0x351: 0x378f,
- 0x352: 0x3711, 0x353: 0x3795, 0x356: 0x3723, 0x357: 0x37a7,
- 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3825, 0x35b: 0x382b, 0x35c: 0x3735, 0x35d: 0x37b9,
- 0x35e: 0x373b, 0x35f: 0x37bf, 0x362: 0x3747, 0x363: 0x37cb,
- 0x364: 0x3753, 0x365: 0x37d7, 0x366: 0x375f, 0x367: 0x37e3, 0x368: 0xa000, 0x369: 0xa000,
- 0x36a: 0x3831, 0x36b: 0x3837, 0x36c: 0x3789, 0x36d: 0x380d, 0x36e: 0x3765, 0x36f: 0x37e9,
- 0x370: 0x3771, 0x371: 0x37f5, 0x372: 0x3777, 0x373: 0x37fb, 0x374: 0x377d, 0x375: 0x3801,
- 0x378: 0x3783, 0x379: 0x3807,
- // Block 0xe, offset 0x380
- 0x387: 0x1d5d,
- 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: 0x1d80,
- 0x3f6: 0x200f, 0x3f7: 0x204b, 0x3f8: 0x2046,
- // Block 0x10, offset 0x400
- 0x405: 0xa000,
- 0x406: 0x2d22, 0x407: 0xa000, 0x408: 0x2d2a, 0x409: 0xa000, 0x40a: 0x2d32, 0x40b: 0xa000,
- 0x40c: 0x2d3a, 0x40d: 0xa000, 0x40e: 0x2d42, 0x411: 0xa000,
- 0x412: 0x2d4a,
- 0x434: 0x8102, 0x435: 0x9900,
- 0x43a: 0xa000, 0x43b: 0x2d52,
- 0x43c: 0xa000, 0x43d: 0x2d5a, 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: 0x2f93, 0x4c1: 0x329f, 0x4c2: 0x2f9d, 0x4c3: 0x32a9, 0x4c4: 0x2fa2, 0x4c5: 0x32ae,
- 0x4c6: 0x2fa7, 0x4c7: 0x32b3, 0x4c8: 0x38c8, 0x4c9: 0x3a57, 0x4ca: 0x2fc0, 0x4cb: 0x32cc,
- 0x4cc: 0x2fca, 0x4cd: 0x32d6, 0x4ce: 0x2fd9, 0x4cf: 0x32e5, 0x4d0: 0x2fcf, 0x4d1: 0x32db,
- 0x4d2: 0x2fd4, 0x4d3: 0x32e0, 0x4d4: 0x38eb, 0x4d5: 0x3a7a, 0x4d6: 0x38f2, 0x4d7: 0x3a81,
- 0x4d8: 0x3015, 0x4d9: 0x3321, 0x4da: 0x301a, 0x4db: 0x3326, 0x4dc: 0x3900, 0x4dd: 0x3a8f,
- 0x4de: 0x301f, 0x4df: 0x332b, 0x4e0: 0x302e, 0x4e1: 0x333a, 0x4e2: 0x304c, 0x4e3: 0x3358,
- 0x4e4: 0x305b, 0x4e5: 0x3367, 0x4e6: 0x3051, 0x4e7: 0x335d, 0x4e8: 0x3060, 0x4e9: 0x336c,
- 0x4ea: 0x3065, 0x4eb: 0x3371, 0x4ec: 0x30ab, 0x4ed: 0x33b7, 0x4ee: 0x3907, 0x4ef: 0x3a96,
- 0x4f0: 0x30b5, 0x4f1: 0x33c6, 0x4f2: 0x30bf, 0x4f3: 0x33d0, 0x4f4: 0x30c9, 0x4f5: 0x33da,
- 0x4f6: 0x4756, 0x4f7: 0x47e7, 0x4f8: 0x390e, 0x4f9: 0x3a9d, 0x4fa: 0x30e2, 0x4fb: 0x33f3,
- 0x4fc: 0x30dd, 0x4fd: 0x33ee, 0x4fe: 0x30e7, 0x4ff: 0x33f8,
- // Block 0x14, offset 0x500
- 0x500: 0x30ec, 0x501: 0x33fd, 0x502: 0x30f1, 0x503: 0x3402, 0x504: 0x3105, 0x505: 0x3416,
- 0x506: 0x310f, 0x507: 0x3420, 0x508: 0x311e, 0x509: 0x342f, 0x50a: 0x3119, 0x50b: 0x342a,
- 0x50c: 0x3931, 0x50d: 0x3ac0, 0x50e: 0x393f, 0x50f: 0x3ace, 0x510: 0x3946, 0x511: 0x3ad5,
- 0x512: 0x394d, 0x513: 0x3adc, 0x514: 0x314b, 0x515: 0x345c, 0x516: 0x3150, 0x517: 0x3461,
- 0x518: 0x315a, 0x519: 0x346b, 0x51a: 0x4783, 0x51b: 0x4814, 0x51c: 0x3993, 0x51d: 0x3b22,
- 0x51e: 0x3173, 0x51f: 0x3484, 0x520: 0x317d, 0x521: 0x348e, 0x522: 0x4792, 0x523: 0x4823,
- 0x524: 0x399a, 0x525: 0x3b29, 0x526: 0x39a1, 0x527: 0x3b30, 0x528: 0x39a8, 0x529: 0x3b37,
- 0x52a: 0x318c, 0x52b: 0x349d, 0x52c: 0x3196, 0x52d: 0x34ac, 0x52e: 0x31aa, 0x52f: 0x34c0,
- 0x530: 0x31a5, 0x531: 0x34bb, 0x532: 0x31e6, 0x533: 0x34fc, 0x534: 0x31f5, 0x535: 0x350b,
- 0x536: 0x31f0, 0x537: 0x3506, 0x538: 0x39af, 0x539: 0x3b3e, 0x53a: 0x39b6, 0x53b: 0x3b45,
- 0x53c: 0x31fa, 0x53d: 0x3510, 0x53e: 0x31ff, 0x53f: 0x3515,
- // Block 0x15, offset 0x540
- 0x540: 0x3204, 0x541: 0x351a, 0x542: 0x3209, 0x543: 0x351f, 0x544: 0x3218, 0x545: 0x352e,
- 0x546: 0x3213, 0x547: 0x3529, 0x548: 0x321d, 0x549: 0x3538, 0x54a: 0x3222, 0x54b: 0x353d,
- 0x54c: 0x3227, 0x54d: 0x3542, 0x54e: 0x3245, 0x54f: 0x3560, 0x550: 0x325e, 0x551: 0x357e,
- 0x552: 0x326d, 0x553: 0x358d, 0x554: 0x3272, 0x555: 0x3592, 0x556: 0x3376, 0x557: 0x34a2,
- 0x558: 0x3533, 0x559: 0x356f, 0x55a: 0x1bdc, 0x55b: 0x42d3,
- 0x560: 0x4733, 0x561: 0x47c4, 0x562: 0x2f7f, 0x563: 0x328b,
- 0x564: 0x3874, 0x565: 0x3a03, 0x566: 0x386d, 0x567: 0x39fc, 0x568: 0x3882, 0x569: 0x3a11,
- 0x56a: 0x387b, 0x56b: 0x3a0a, 0x56c: 0x38ba, 0x56d: 0x3a49, 0x56e: 0x3890, 0x56f: 0x3a1f,
- 0x570: 0x3889, 0x571: 0x3a18, 0x572: 0x389e, 0x573: 0x3a2d, 0x574: 0x3897, 0x575: 0x3a26,
- 0x576: 0x38c1, 0x577: 0x3a50, 0x578: 0x4747, 0x579: 0x47d8, 0x57a: 0x2ffc, 0x57b: 0x3308,
- 0x57c: 0x2fe8, 0x57d: 0x32f4, 0x57e: 0x38d6, 0x57f: 0x3a65,
- // Block 0x16, offset 0x580
- 0x580: 0x38cf, 0x581: 0x3a5e, 0x582: 0x38e4, 0x583: 0x3a73, 0x584: 0x38dd, 0x585: 0x3a6c,
- 0x586: 0x38f9, 0x587: 0x3a88, 0x588: 0x308d, 0x589: 0x3399, 0x58a: 0x30a1, 0x58b: 0x33ad,
- 0x58c: 0x4779, 0x58d: 0x480a, 0x58e: 0x3132, 0x58f: 0x3443, 0x590: 0x391c, 0x591: 0x3aab,
- 0x592: 0x3915, 0x593: 0x3aa4, 0x594: 0x392a, 0x595: 0x3ab9, 0x596: 0x3923, 0x597: 0x3ab2,
- 0x598: 0x3985, 0x599: 0x3b14, 0x59a: 0x3969, 0x59b: 0x3af8, 0x59c: 0x3962, 0x59d: 0x3af1,
- 0x59e: 0x3977, 0x59f: 0x3b06, 0x5a0: 0x3970, 0x5a1: 0x3aff, 0x5a2: 0x397e, 0x5a3: 0x3b0d,
- 0x5a4: 0x31e1, 0x5a5: 0x34f7, 0x5a6: 0x31c3, 0x5a7: 0x34d9, 0x5a8: 0x39e0, 0x5a9: 0x3b6f,
- 0x5aa: 0x39d9, 0x5ab: 0x3b68, 0x5ac: 0x39ee, 0x5ad: 0x3b7d, 0x5ae: 0x39e7, 0x5af: 0x3b76,
- 0x5b0: 0x39f5, 0x5b1: 0x3b84, 0x5b2: 0x322c, 0x5b3: 0x3547, 0x5b4: 0x3254, 0x5b5: 0x3574,
- 0x5b6: 0x324f, 0x5b7: 0x356a, 0x5b8: 0x323b, 0x5b9: 0x3556,
- // Block 0x17, offset 0x5c0
- 0x5c0: 0x4896, 0x5c1: 0x489c, 0x5c2: 0x49b0, 0x5c3: 0x49c8, 0x5c4: 0x49b8, 0x5c5: 0x49d0,
- 0x5c6: 0x49c0, 0x5c7: 0x49d8, 0x5c8: 0x483c, 0x5c9: 0x4842, 0x5ca: 0x4920, 0x5cb: 0x4938,
- 0x5cc: 0x4928, 0x5cd: 0x4940, 0x5ce: 0x4930, 0x5cf: 0x4948, 0x5d0: 0x48a8, 0x5d1: 0x48ae,
- 0x5d2: 0x3db4, 0x5d3: 0x3dc4, 0x5d4: 0x3dbc, 0x5d5: 0x3dcc,
- 0x5d8: 0x4848, 0x5d9: 0x484e, 0x5da: 0x3ce4, 0x5db: 0x3cf4, 0x5dc: 0x3cec, 0x5dd: 0x3cfc,
- 0x5e0: 0x48c0, 0x5e1: 0x48c6, 0x5e2: 0x49e0, 0x5e3: 0x49f8,
- 0x5e4: 0x49e8, 0x5e5: 0x4a00, 0x5e6: 0x49f0, 0x5e7: 0x4a08, 0x5e8: 0x4854, 0x5e9: 0x485a,
- 0x5ea: 0x4950, 0x5eb: 0x4968, 0x5ec: 0x4958, 0x5ed: 0x4970, 0x5ee: 0x4960, 0x5ef: 0x4978,
- 0x5f0: 0x48d8, 0x5f1: 0x48de, 0x5f2: 0x3e14, 0x5f3: 0x3e2c, 0x5f4: 0x3e1c, 0x5f5: 0x3e34,
- 0x5f6: 0x3e24, 0x5f7: 0x3e3c, 0x5f8: 0x4860, 0x5f9: 0x4866, 0x5fa: 0x3d14, 0x5fb: 0x3d2c,
- 0x5fc: 0x3d1c, 0x5fd: 0x3d34, 0x5fe: 0x3d24, 0x5ff: 0x3d3c,
- // Block 0x18, offset 0x600
- 0x600: 0x48e4, 0x601: 0x48ea, 0x602: 0x3e44, 0x603: 0x3e54, 0x604: 0x3e4c, 0x605: 0x3e5c,
- 0x608: 0x486c, 0x609: 0x4872, 0x60a: 0x3d44, 0x60b: 0x3d54,
- 0x60c: 0x3d4c, 0x60d: 0x3d5c, 0x610: 0x48f6, 0x611: 0x48fc,
- 0x612: 0x3e7c, 0x613: 0x3e94, 0x614: 0x3e84, 0x615: 0x3e9c, 0x616: 0x3e8c, 0x617: 0x3ea4,
- 0x619: 0x4878, 0x61b: 0x3d64, 0x61d: 0x3d6c,
- 0x61f: 0x3d74, 0x620: 0x490e, 0x621: 0x4914, 0x622: 0x4a10, 0x623: 0x4a28,
- 0x624: 0x4a18, 0x625: 0x4a30, 0x626: 0x4a20, 0x627: 0x4a38, 0x628: 0x487e, 0x629: 0x4884,
- 0x62a: 0x4980, 0x62b: 0x4998, 0x62c: 0x4988, 0x62d: 0x49a0, 0x62e: 0x4990, 0x62f: 0x49a8,
- 0x630: 0x488a, 0x631: 0x43b0, 0x632: 0x368d, 0x633: 0x43b6, 0x634: 0x48b4, 0x635: 0x43bc,
- 0x636: 0x369f, 0x637: 0x43c2, 0x638: 0x36bd, 0x639: 0x43c8, 0x63a: 0x36d5, 0x63b: 0x43ce,
- 0x63c: 0x4902, 0x63d: 0x43d4,
- // Block 0x19, offset 0x640
- 0x640: 0x3d9c, 0x641: 0x3da4, 0x642: 0x4180, 0x643: 0x419e, 0x644: 0x418a, 0x645: 0x41a8,
- 0x646: 0x4194, 0x647: 0x41b2, 0x648: 0x3cd4, 0x649: 0x3cdc, 0x64a: 0x40cc, 0x64b: 0x40ea,
- 0x64c: 0x40d6, 0x64d: 0x40f4, 0x64e: 0x40e0, 0x64f: 0x40fe, 0x650: 0x3de4, 0x651: 0x3dec,
- 0x652: 0x41bc, 0x653: 0x41da, 0x654: 0x41c6, 0x655: 0x41e4, 0x656: 0x41d0, 0x657: 0x41ee,
- 0x658: 0x3d04, 0x659: 0x3d0c, 0x65a: 0x4108, 0x65b: 0x4126, 0x65c: 0x4112, 0x65d: 0x4130,
- 0x65e: 0x411c, 0x65f: 0x413a, 0x660: 0x3ebc, 0x661: 0x3ec4, 0x662: 0x41f8, 0x663: 0x4216,
- 0x664: 0x4202, 0x665: 0x4220, 0x666: 0x420c, 0x667: 0x422a, 0x668: 0x3d7c, 0x669: 0x3d84,
- 0x66a: 0x4144, 0x66b: 0x4162, 0x66c: 0x414e, 0x66d: 0x416c, 0x66e: 0x4158, 0x66f: 0x4176,
- 0x670: 0x3681, 0x671: 0x367b, 0x672: 0x3d8c, 0x673: 0x3687, 0x674: 0x3d94,
- 0x676: 0x48a2, 0x677: 0x3dac, 0x678: 0x35f1, 0x679: 0x35eb, 0x67a: 0x35df, 0x67b: 0x4380,
- 0x67c: 0x35f7, 0x67d: 0x4283, 0x67e: 0x01d3, 0x67f: 0x4283,
- // Block 0x1a, offset 0x680
- 0x680: 0x429c, 0x681: 0x4514, 0x682: 0x3dd4, 0x683: 0x3699, 0x684: 0x3ddc,
- 0x686: 0x48cc, 0x687: 0x3df4, 0x688: 0x35fd, 0x689: 0x4386, 0x68a: 0x3609, 0x68b: 0x438c,
- 0x68c: 0x3615, 0x68d: 0x451b, 0x68e: 0x4522, 0x68f: 0x4529, 0x690: 0x36b1, 0x691: 0x36ab,
- 0x692: 0x3dfc, 0x693: 0x4576, 0x696: 0x36b7, 0x697: 0x3e0c,
- 0x698: 0x362d, 0x699: 0x3627, 0x69a: 0x361b, 0x69b: 0x4392, 0x69d: 0x4530,
- 0x69e: 0x4537, 0x69f: 0x453e, 0x6a0: 0x36e7, 0x6a1: 0x36e1, 0x6a2: 0x3e64, 0x6a3: 0x457e,
- 0x6a4: 0x36c9, 0x6a5: 0x36cf, 0x6a6: 0x36ed, 0x6a7: 0x3e74, 0x6a8: 0x365d, 0x6a9: 0x3657,
- 0x6aa: 0x364b, 0x6ab: 0x439e, 0x6ac: 0x3645, 0x6ad: 0x4506, 0x6ae: 0x450d, 0x6af: 0x0081,
- 0x6b2: 0x3eac, 0x6b3: 0x36f3, 0x6b4: 0x3eb4,
- 0x6b6: 0x491a, 0x6b7: 0x3ecc, 0x6b8: 0x3639, 0x6b9: 0x4398, 0x6ba: 0x3669, 0x6bb: 0x43aa,
- 0x6bc: 0x3675, 0x6bd: 0x4256, 0x6be: 0x4288,
- // Block 0x1b, offset 0x6c0
- 0x6c0: 0x1bd4, 0x6c1: 0x1bd8, 0x6c2: 0x0047, 0x6c3: 0x1c50, 0x6c5: 0x1be4,
- 0x6c6: 0x1be8, 0x6c7: 0x00e9, 0x6c9: 0x1c54, 0x6ca: 0x008f, 0x6cb: 0x0051,
- 0x6cc: 0x0051, 0x6cd: 0x0051, 0x6ce: 0x0091, 0x6cf: 0x00da, 0x6d0: 0x0053, 0x6d1: 0x0053,
- 0x6d2: 0x0059, 0x6d3: 0x0099, 0x6d5: 0x005d, 0x6d6: 0x1989,
- 0x6d9: 0x0061, 0x6da: 0x0063, 0x6db: 0x0065, 0x6dc: 0x0065, 0x6dd: 0x0065,
- 0x6e0: 0x199b, 0x6e1: 0x1bc4, 0x6e2: 0x19a4,
- 0x6e4: 0x0075, 0x6e6: 0x01b8, 0x6e8: 0x0075,
- 0x6ea: 0x0057, 0x6eb: 0x42ce, 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: 0x1b94,
- 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: 0x222a, 0x711: 0x2236,
- 0x712: 0x22ea, 0x713: 0x2212, 0x714: 0x2296, 0x715: 0x221e, 0x716: 0x229c, 0x717: 0x22b4,
- 0x718: 0x22c0, 0x719: 0x2224, 0x71a: 0x22c6, 0x71b: 0x2230, 0x71c: 0x22ba, 0x71d: 0x22cc,
- 0x71e: 0x22d2, 0x71f: 0x1cb8, 0x720: 0x0053, 0x721: 0x1956, 0x722: 0x1ba0, 0x723: 0x195f,
- 0x724: 0x006d, 0x725: 0x19a7, 0x726: 0x1bcc, 0x727: 0x1d44, 0x728: 0x1962, 0x729: 0x0071,
- 0x72a: 0x19b3, 0x72b: 0x1bd0, 0x72c: 0x0059, 0x72d: 0x0047, 0x72e: 0x0049, 0x72f: 0x005b,
- 0x730: 0x0093, 0x731: 0x19e0, 0x732: 0x1c14, 0x733: 0x19e9, 0x734: 0x00ad, 0x735: 0x1a5e,
- 0x736: 0x1c48, 0x737: 0x1d58, 0x738: 0x19ec, 0x739: 0x00b1, 0x73a: 0x1a61, 0x73b: 0x1c4c,
- 0x73c: 0x0099, 0x73d: 0x0087, 0x73e: 0x0089, 0x73f: 0x009b,
- // Block 0x1d, offset 0x740
- 0x741: 0x3c02, 0x743: 0xa000, 0x744: 0x3c09, 0x745: 0xa000,
- 0x747: 0x3c10, 0x748: 0xa000, 0x749: 0x3c17,
- 0x74d: 0xa000,
- 0x760: 0x2f61, 0x761: 0xa000, 0x762: 0x3c25,
- 0x764: 0xa000, 0x765: 0xa000,
- 0x76d: 0x3c1e, 0x76e: 0x2f5c, 0x76f: 0x2f66,
- 0x770: 0x3c2c, 0x771: 0x3c33, 0x772: 0xa000, 0x773: 0xa000, 0x774: 0x3c3a, 0x775: 0x3c41,
- 0x776: 0xa000, 0x777: 0xa000, 0x778: 0x3c48, 0x779: 0x3c4f, 0x77a: 0xa000, 0x77b: 0xa000,
- 0x77c: 0xa000, 0x77d: 0xa000,
- // Block 0x1e, offset 0x780
- 0x780: 0x3c56, 0x781: 0x3c5d, 0x782: 0xa000, 0x783: 0xa000, 0x784: 0x3c72, 0x785: 0x3c79,
- 0x786: 0xa000, 0x787: 0xa000, 0x788: 0x3c80, 0x789: 0x3c87,
- 0x791: 0xa000,
- 0x792: 0xa000,
- 0x7a2: 0xa000,
- 0x7a8: 0xa000, 0x7a9: 0xa000,
- 0x7ab: 0xa000, 0x7ac: 0x3c9c, 0x7ad: 0x3ca3, 0x7ae: 0x3caa, 0x7af: 0x3cb1,
- 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: 0x187e,
- 0x7ea: 0x1881, 0x7eb: 0x1884, 0x7ec: 0x1887, 0x7ed: 0x188a, 0x7ee: 0x188d, 0x7ef: 0x1890,
- 0x7f0: 0x1893, 0x7f1: 0x1896, 0x7f2: 0x1899, 0x7f3: 0x18a2, 0x7f4: 0x1a64, 0x7f5: 0x1a68,
- 0x7f6: 0x1a6c, 0x7f7: 0x1a70, 0x7f8: 0x1a74, 0x7f9: 0x1a78, 0x7fa: 0x1a7c, 0x7fb: 0x1a80,
- 0x7fc: 0x1a84, 0x7fd: 0x1c7c, 0x7fe: 0x1c81, 0x7ff: 0x1c86,
- // Block 0x20, offset 0x800
- 0x800: 0x1c8b, 0x801: 0x1c90, 0x802: 0x1c95, 0x803: 0x1c9a, 0x804: 0x1c9f, 0x805: 0x1ca4,
- 0x806: 0x1ca9, 0x807: 0x1cae, 0x808: 0x187b, 0x809: 0x189f, 0x80a: 0x18c3, 0x80b: 0x18e7,
- 0x80c: 0x190b, 0x80d: 0x1914, 0x80e: 0x191a, 0x80f: 0x1920, 0x810: 0x1926, 0x811: 0x1b5c,
- 0x812: 0x1b60, 0x813: 0x1b64, 0x814: 0x1b68, 0x815: 0x1b6c, 0x816: 0x1b70, 0x817: 0x1b74,
- 0x818: 0x1b78, 0x819: 0x1b7c, 0x81a: 0x1b80, 0x81b: 0x1b84, 0x81c: 0x1af0, 0x81d: 0x1af4,
- 0x81e: 0x1af8, 0x81f: 0x1afc, 0x820: 0x1b00, 0x821: 0x1b04, 0x822: 0x1b08, 0x823: 0x1b0c,
- 0x824: 0x1b10, 0x825: 0x1b14, 0x826: 0x1b18, 0x827: 0x1b1c, 0x828: 0x1b20, 0x829: 0x1b24,
- 0x82a: 0x1b28, 0x82b: 0x1b2c, 0x82c: 0x1b30, 0x82d: 0x1b34, 0x82e: 0x1b38, 0x82f: 0x1b3c,
- 0x830: 0x1b40, 0x831: 0x1b44, 0x832: 0x1b48, 0x833: 0x1b4c, 0x834: 0x1b50, 0x835: 0x1b54,
- 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: 0x144f, 0x8e5: 0x1453, 0x8e6: 0x145b, 0x8e7: 0x1487, 0x8e8: 0x148b, 0x8e9: 0x149b,
- 0x8ea: 0x14bf, 0x8eb: 0x14cb, 0x8ec: 0x14db, 0x8ed: 0x14f3, 0x8ee: 0x14fb, 0x8ef: 0x14ff,
- 0x8f0: 0x1503, 0x8f1: 0x1507, 0x8f2: 0x1513, 0x8f3: 0x1517, 0x8f4: 0x151f, 0x8f5: 0x153b,
- 0x8f6: 0x153f, 0x8f7: 0x1543, 0x8f8: 0x155b, 0x8f9: 0x155f, 0x8fa: 0x1567, 0x8fb: 0x157b,
- 0x8fc: 0x157f, 0x8fd: 0x1583, 0x8fe: 0x158b, 0x8ff: 0x158f,
- // Block 0x24, offset 0x900
- 0x906: 0xa000, 0x90b: 0xa000,
- 0x90c: 0x3f04, 0x90d: 0xa000, 0x90e: 0x3f0c, 0x90f: 0xa000, 0x910: 0x3f14, 0x911: 0xa000,
- 0x912: 0x3f1c, 0x913: 0xa000, 0x914: 0x3f24, 0x915: 0xa000, 0x916: 0x3f2c, 0x917: 0xa000,
- 0x918: 0x3f34, 0x919: 0xa000, 0x91a: 0x3f3c, 0x91b: 0xa000, 0x91c: 0x3f44, 0x91d: 0xa000,
- 0x91e: 0x3f4c, 0x91f: 0xa000, 0x920: 0x3f54, 0x921: 0xa000, 0x922: 0x3f5c,
- 0x924: 0xa000, 0x925: 0x3f64, 0x926: 0xa000, 0x927: 0x3f6c, 0x928: 0xa000, 0x929: 0x3f74,
- 0x92f: 0xa000,
- 0x930: 0x3f7c, 0x931: 0x3f84, 0x932: 0xa000, 0x933: 0x3f8c, 0x934: 0x3f94, 0x935: 0xa000,
- 0x936: 0x3f9c, 0x937: 0x3fa4, 0x938: 0xa000, 0x939: 0x3fac, 0x93a: 0x3fb4, 0x93b: 0xa000,
- 0x93c: 0x3fbc, 0x93d: 0x3fc4,
- // Block 0x25, offset 0x940
- 0x954: 0x3efc,
- 0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x436e, 0x95c: 0x4374, 0x95d: 0xa000,
- 0x95e: 0x3fcc, 0x95f: 0x26b0,
- 0x966: 0xa000,
- 0x96b: 0xa000, 0x96c: 0x3fdc, 0x96d: 0xa000, 0x96e: 0x3fe4, 0x96f: 0xa000,
- 0x970: 0x3fec, 0x971: 0xa000, 0x972: 0x3ff4, 0x973: 0xa000, 0x974: 0x3ffc, 0x975: 0xa000,
- 0x976: 0x4004, 0x977: 0xa000, 0x978: 0x400c, 0x979: 0xa000, 0x97a: 0x4014, 0x97b: 0xa000,
- 0x97c: 0x401c, 0x97d: 0xa000, 0x97e: 0x4024, 0x97f: 0xa000,
- // Block 0x26, offset 0x980
- 0x980: 0x402c, 0x981: 0xa000, 0x982: 0x4034, 0x984: 0xa000, 0x985: 0x403c,
- 0x986: 0xa000, 0x987: 0x4044, 0x988: 0xa000, 0x989: 0x404c,
- 0x98f: 0xa000, 0x990: 0x4054, 0x991: 0x405c,
- 0x992: 0xa000, 0x993: 0x4064, 0x994: 0x406c, 0x995: 0xa000, 0x996: 0x4074, 0x997: 0x407c,
- 0x998: 0xa000, 0x999: 0x4084, 0x99a: 0x408c, 0x99b: 0xa000, 0x99c: 0x4094, 0x99d: 0x409c,
- 0x9af: 0xa000,
- 0x9b0: 0xa000, 0x9b1: 0xa000, 0x9b2: 0xa000, 0x9b4: 0x3fd4,
- 0x9b7: 0x40a4, 0x9b8: 0x40ac, 0x9b9: 0x40b4, 0x9ba: 0x40bc,
- 0x9bd: 0xa000, 0x9be: 0x40c4, 0x9bf: 0x26c5,
- // 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: 0x42d8, 0x9d0: 0x42dd, 0x9d1: 0x42e2,
- 0x9d2: 0x42e7, 0x9d3: 0x42ec, 0x9d4: 0x42f1, 0x9d5: 0x42f6, 0x9d6: 0x42fb, 0x9d7: 0x4300,
- 0x9d8: 0x4305, 0x9d9: 0x430a, 0x9da: 0x430f, 0x9db: 0x4314, 0x9dc: 0x4319, 0x9dd: 0x431e,
- 0x9de: 0x4323, 0x9df: 0x4328, 0x9e0: 0x432d, 0x9e1: 0x4332, 0x9e2: 0x4337, 0x9e3: 0x433c,
- 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: 0x2050, 0xa41: 0x2056, 0xa42: 0x205c, 0xa43: 0x2062, 0xa44: 0x2068, 0xa45: 0x206e,
- 0xa46: 0x2074, 0xa47: 0x207a, 0xa48: 0x2080, 0xa49: 0x2086, 0xa4a: 0x208c, 0xa4b: 0x2092,
- 0xa4c: 0x2098, 0xa4d: 0x209e, 0xa4e: 0x2722, 0xa4f: 0x272b, 0xa50: 0x2734, 0xa51: 0x273d,
- 0xa52: 0x2746, 0xa53: 0x274f, 0xa54: 0x2758, 0xa55: 0x2761, 0xa56: 0x276a, 0xa57: 0x277c,
- 0xa58: 0x2785, 0xa59: 0x278e, 0xa5a: 0x2797, 0xa5b: 0x27a0, 0xa5c: 0x2773, 0xa5d: 0x2ba8,
- 0xa5e: 0x2ae9, 0xa60: 0x20a4, 0xa61: 0x20bc, 0xa62: 0x20b0, 0xa63: 0x2104,
- 0xa64: 0x20c2, 0xa65: 0x20e0, 0xa66: 0x20aa, 0xa67: 0x20da, 0xa68: 0x20b6, 0xa69: 0x20ec,
- 0xa6a: 0x211c, 0xa6b: 0x213a, 0xa6c: 0x2134, 0xa6d: 0x2128, 0xa6e: 0x2176, 0xa6f: 0x210a,
- 0xa70: 0x2116, 0xa71: 0x212e, 0xa72: 0x2122, 0xa73: 0x214c, 0xa74: 0x20f8, 0xa75: 0x2140,
- 0xa76: 0x216a, 0xa77: 0x2152, 0xa78: 0x20e6, 0xa79: 0x20c8, 0xa7a: 0x20fe, 0xa7b: 0x2110,
- 0xa7c: 0x2146, 0xa7d: 0x20ce, 0xa7e: 0x2170, 0xa7f: 0x20f2,
- // Block 0x2a, offset 0xa80
- 0xa80: 0x2158, 0xa81: 0x20d4, 0xa82: 0x215e, 0xa83: 0x2164, 0xa84: 0x092f, 0xa85: 0x0b03,
- 0xa86: 0x0ca7, 0xa87: 0x10c7,
- 0xa90: 0x1bc0, 0xa91: 0x18a5,
- 0xa92: 0x18a8, 0xa93: 0x18ab, 0xa94: 0x18ae, 0xa95: 0x18b1, 0xa96: 0x18b4, 0xa97: 0x18b7,
- 0xa98: 0x18ba, 0xa99: 0x18bd, 0xa9a: 0x18c6, 0xa9b: 0x18c9, 0xa9c: 0x18cc, 0xa9d: 0x18cf,
- 0xa9e: 0x18d2, 0xa9f: 0x18d5, 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: 0x2e14, 0xaaf: 0x2e1c,
- 0xab0: 0x2e24, 0xab1: 0x2e2c, 0xab2: 0x2e34, 0xab3: 0x2e3c, 0xab4: 0x2e44, 0xab5: 0x2e4c,
- 0xab6: 0x2e5c, 0xab7: 0x2e64, 0xab8: 0x2e6c, 0xab9: 0x2e74, 0xaba: 0x2e7c, 0xabb: 0x2e84,
- 0xabc: 0x2ecf, 0xabd: 0x2e97, 0xabe: 0x2e54,
- // 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: 0x145b, 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: 0x1523, 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: 0x18d8, 0xaf2: 0x18db, 0xaf3: 0x18de, 0xaf4: 0x18e1, 0xaf5: 0x18ea,
- 0xaf6: 0x18ed, 0xaf7: 0x18f0, 0xaf8: 0x18f3, 0xaf9: 0x18f6, 0xafa: 0x18f9, 0xafb: 0x18fc,
- 0xafc: 0x18ff, 0xafd: 0x1902, 0xafe: 0x1905, 0xaff: 0x190e,
- // Block 0x2c, offset 0xb00
- 0xb00: 0x1cc2, 0xb01: 0x1cd1, 0xb02: 0x1ce0, 0xb03: 0x1cef, 0xb04: 0x1cfe, 0xb05: 0x1d0d,
- 0xb06: 0x1d1c, 0xb07: 0x1d2b, 0xb08: 0x1d3a, 0xb09: 0x2188, 0xb0a: 0x219a, 0xb0b: 0x21ac,
- 0xb0c: 0x1950, 0xb0d: 0x1c00, 0xb0e: 0x19ce, 0xb0f: 0x1ba4, 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: 0x2b08, 0xb41: 0x29a4, 0xb42: 0x2b18, 0xb43: 0x287c, 0xb44: 0x2ee0, 0xb45: 0x2886,
- 0xb46: 0x2890, 0xb47: 0x2f24, 0xb48: 0x29b1, 0xb49: 0x289a, 0xb4a: 0x28a4, 0xb4b: 0x28ae,
- 0xb4c: 0x29d8, 0xb4d: 0x29e5, 0xb4e: 0x29be, 0xb4f: 0x29cb, 0xb50: 0x2ea5, 0xb51: 0x29f2,
- 0xb52: 0x29ff, 0xb53: 0x2bba, 0xb54: 0x26b7, 0xb55: 0x2bcd, 0xb56: 0x2be0, 0xb57: 0x2b28,
- 0xb58: 0x2a0c, 0xb59: 0x2bf3, 0xb5a: 0x2c06, 0xb5b: 0x2a19, 0xb5c: 0x28b8, 0xb5d: 0x28c2,
- 0xb5e: 0x2eb3, 0xb5f: 0x2a26, 0xb60: 0x2b38, 0xb61: 0x2ef1, 0xb62: 0x28cc, 0xb63: 0x28d6,
- 0xb64: 0x2a33, 0xb65: 0x28e0, 0xb66: 0x28ea, 0xb67: 0x26cc, 0xb68: 0x26d3, 0xb69: 0x28f4,
- 0xb6a: 0x28fe, 0xb6b: 0x2c19, 0xb6c: 0x2a40, 0xb6d: 0x2b48, 0xb6e: 0x2c2c, 0xb6f: 0x2a4d,
- 0xb70: 0x2912, 0xb71: 0x2908, 0xb72: 0x2f38, 0xb73: 0x2a5a, 0xb74: 0x2c3f, 0xb75: 0x291c,
- 0xb76: 0x2b58, 0xb77: 0x2926, 0xb78: 0x2a74, 0xb79: 0x2930, 0xb7a: 0x2a81, 0xb7b: 0x2f02,
- 0xb7c: 0x2a67, 0xb7d: 0x2b68, 0xb7e: 0x2a8e, 0xb7f: 0x26da,
- // Block 0x2e, offset 0xb80
- 0xb80: 0x2f13, 0xb81: 0x293a, 0xb82: 0x2944, 0xb83: 0x2a9b, 0xb84: 0x294e, 0xb85: 0x2958,
- 0xb86: 0x2962, 0xb87: 0x2b78, 0xb88: 0x2aa8, 0xb89: 0x26e1, 0xb8a: 0x2c52, 0xb8b: 0x2e8c,
- 0xb8c: 0x2b88, 0xb8d: 0x2ab5, 0xb8e: 0x2ec1, 0xb8f: 0x296c, 0xb90: 0x2976, 0xb91: 0x2ac2,
- 0xb92: 0x26e8, 0xb93: 0x2acf, 0xb94: 0x2b98, 0xb95: 0x26ef, 0xb96: 0x2c65, 0xb97: 0x2980,
- 0xb98: 0x1cb3, 0xb99: 0x1cc7, 0xb9a: 0x1cd6, 0xb9b: 0x1ce5, 0xb9c: 0x1cf4, 0xb9d: 0x1d03,
- 0xb9e: 0x1d12, 0xb9f: 0x1d21, 0xba0: 0x1d30, 0xba1: 0x1d3f, 0xba2: 0x218e, 0xba3: 0x21a0,
- 0xba4: 0x21b2, 0xba5: 0x21be, 0xba6: 0x21ca, 0xba7: 0x21d6, 0xba8: 0x21e2, 0xba9: 0x21ee,
- 0xbaa: 0x21fa, 0xbab: 0x2206, 0xbac: 0x2242, 0xbad: 0x224e, 0xbae: 0x225a, 0xbaf: 0x2266,
- 0xbb0: 0x2272, 0xbb1: 0x1c10, 0xbb2: 0x19c2, 0xbb3: 0x1932, 0xbb4: 0x1be0, 0xbb5: 0x1a43,
- 0xbb6: 0x1a52, 0xbb7: 0x19c8, 0xbb8: 0x1bf8, 0xbb9: 0x1bfc, 0xbba: 0x195c, 0xbbb: 0x26fd,
- 0xbbc: 0x270b, 0xbbd: 0x26f6, 0xbbe: 0x2704, 0xbbf: 0x2adc,
- // Block 0x2f, offset 0xbc0
- 0xbc0: 0x1a46, 0xbc1: 0x1a2e, 0xbc2: 0x1c5c, 0xbc3: 0x1a16, 0xbc4: 0x19ef, 0xbc5: 0x1965,
- 0xbc6: 0x1974, 0xbc7: 0x1944, 0xbc8: 0x1bec, 0xbc9: 0x1d4e, 0xbca: 0x1a49, 0xbcb: 0x1a31,
- 0xbcc: 0x1c60, 0xbcd: 0x1c6c, 0xbce: 0x1a22, 0xbcf: 0x19f8, 0xbd0: 0x1953, 0xbd1: 0x1c18,
- 0xbd2: 0x1bac, 0xbd3: 0x1b98, 0xbd4: 0x1bc8, 0xbd5: 0x1c70, 0xbd6: 0x1a25, 0xbd7: 0x19c5,
- 0xbd8: 0x19fb, 0xbd9: 0x19da, 0xbda: 0x1a3d, 0xbdb: 0x1c74, 0xbdc: 0x1a28, 0xbdd: 0x19bc,
- 0xbde: 0x19fe, 0xbdf: 0x1c38, 0xbe0: 0x1bf0, 0xbe1: 0x1a10, 0xbe2: 0x1c20, 0xbe3: 0x1c3c,
- 0xbe4: 0x1bf4, 0xbe5: 0x1a13, 0xbe6: 0x1c24, 0xbe7: 0x22e4, 0xbe8: 0x22f8, 0xbe9: 0x1992,
- 0xbea: 0x1c1c, 0xbeb: 0x1bb0, 0xbec: 0x1b9c, 0xbed: 0x1c44, 0xbee: 0x2712, 0xbef: 0x27a9,
- 0xbf0: 0x1a55, 0xbf1: 0x1a40, 0xbf2: 0x1c78, 0xbf3: 0x1a2b, 0xbf4: 0x1a4c, 0xbf5: 0x1a34,
- 0xbf6: 0x1c64, 0xbf7: 0x1a19, 0xbf8: 0x19f2, 0xbf9: 0x197d, 0xbfa: 0x1a4f, 0xbfb: 0x1a37,
- 0xbfc: 0x1c68, 0xbfd: 0x1a1c, 0xbfe: 0x19f5, 0xbff: 0x1980,
- // Block 0x30, offset 0xc00
- 0xc00: 0x1c28, 0xc01: 0x1bb4, 0xc02: 0x1d49, 0xc03: 0x1935, 0xc04: 0x19b6, 0xc05: 0x19b9,
- 0xc06: 0x22f1, 0xc07: 0x1b90, 0xc08: 0x19bf, 0xc09: 0x1947, 0xc0a: 0x19dd, 0xc0b: 0x194a,
- 0xc0c: 0x19e6, 0xc0d: 0x1968, 0xc0e: 0x196b, 0xc0f: 0x1a01, 0xc10: 0x1a07, 0xc11: 0x1a0a,
- 0xc12: 0x1c2c, 0xc13: 0x1a0d, 0xc14: 0x1a1f, 0xc15: 0x1c34, 0xc16: 0x1c40, 0xc17: 0x198c,
- 0xc18: 0x1d53, 0xc19: 0x1bb8, 0xc1a: 0x198f, 0xc1b: 0x1a58, 0xc1c: 0x19a1, 0xc1d: 0x19b0,
- 0xc1e: 0x22de, 0xc1f: 0x22d8, 0xc20: 0x1cbd, 0xc21: 0x1ccc, 0xc22: 0x1cdb, 0xc23: 0x1cea,
- 0xc24: 0x1cf9, 0xc25: 0x1d08, 0xc26: 0x1d17, 0xc27: 0x1d26, 0xc28: 0x1d35, 0xc29: 0x2182,
- 0xc2a: 0x2194, 0xc2b: 0x21a6, 0xc2c: 0x21b8, 0xc2d: 0x21c4, 0xc2e: 0x21d0, 0xc2f: 0x21dc,
- 0xc30: 0x21e8, 0xc31: 0x21f4, 0xc32: 0x2200, 0xc33: 0x223c, 0xc34: 0x2248, 0xc35: 0x2254,
- 0xc36: 0x2260, 0xc37: 0x226c, 0xc38: 0x2278, 0xc39: 0x227e, 0xc3a: 0x2284, 0xc3b: 0x228a,
- 0xc3c: 0x2290, 0xc3d: 0x22a2, 0xc3e: 0x22a8, 0xc3f: 0x1c0c,
- // Block 0x31, offset 0xc40
- 0xc40: 0x1377, 0xc41: 0x0cfb, 0xc42: 0x13d3, 0xc43: 0x139f, 0xc44: 0x0e57, 0xc45: 0x06eb,
- 0xc46: 0x08df, 0xc47: 0x1627, 0xc48: 0x1627, 0xc49: 0x0a0b, 0xc4a: 0x145b, 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: 0x1443, 0xc5a: 0x156f, 0xc5b: 0x070f, 0xc5c: 0x08b3, 0xc5d: 0x0d87,
- 0xc5e: 0x0ecf, 0xc5f: 0x1293, 0xc60: 0x15bf, 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: 0x14eb, 0xc79: 0x159f, 0xc7a: 0x15bb, 0xc7b: 0x102b,
- 0xc7c: 0x106b, 0xc7d: 0x1123, 0xc7e: 0x1243, 0xc7f: 0x1477,
- // Block 0x32, offset 0xc80
- 0xc80: 0x15c7, 0xc81: 0x134b, 0xc82: 0x09c7, 0xc83: 0x0b3b, 0xc84: 0x10db, 0xc85: 0x119b,
- 0xc86: 0x0eff, 0xc87: 0x1033, 0xc88: 0x1397, 0xc89: 0x14e3, 0xc8a: 0x09c3, 0xc8b: 0x0a8f,
- 0xc8c: 0x0d77, 0xc8d: 0x0e2b, 0xc8e: 0x0e5f, 0xc8f: 0x1113, 0xc90: 0x113b, 0xc91: 0x14a3,
- 0xc92: 0x084f, 0xc93: 0x11a7, 0xc94: 0x07f3, 0xc95: 0x07ef, 0xc96: 0x1097, 0xc97: 0x1127,
- 0xc98: 0x125b, 0xc99: 0x14ab, 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: 0x1457, 0xcbf: 0x085b,
- // Block 0x33, offset 0xcc0
- 0xcc0: 0x090f, 0xcc1: 0x0a17, 0xcc2: 0x0b2f, 0xcc3: 0x0cbf, 0xcc4: 0x0e7b, 0xcc5: 0x103f,
- 0xcc6: 0x1493, 0xcc7: 0x1577, 0xcc8: 0x15cb, 0xcc9: 0x15e3, 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: 0x147b, 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: 0x145f, 0xcf2: 0x14df, 0xcf3: 0x14ef, 0xcf4: 0x152b, 0xcf5: 0x0753,
- 0xcf6: 0x107f, 0xcf7: 0x144b, 0xcf8: 0x14c7, 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: 0x161f, 0xd05: 0x0ce3,
- 0xd06: 0x149f, 0xd07: 0x0833, 0xd08: 0x0d2f, 0xd09: 0x0d3b, 0xd0a: 0x0e0f, 0xd0b: 0x0e47,
- 0xd0c: 0x0f4b, 0xd0d: 0x0fa7, 0xd0e: 0x1027, 0xd0f: 0x110b, 0xd10: 0x1537, 0xd11: 0x07af,
- 0xd12: 0x0c03, 0xd13: 0x14af, 0xd14: 0x0767, 0xd15: 0x0aab, 0xd16: 0x0e2f, 0xd17: 0x13df,
- 0xd18: 0x0b67, 0xd19: 0x0bb7, 0xd1a: 0x0d43, 0xd1b: 0x0f2f, 0xd1c: 0x14b7, 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: 0x1453,
- 0xd2a: 0x14d3, 0xd2b: 0x0883, 0xd2c: 0x0e4b, 0xd2d: 0x0903, 0xd2e: 0x0ec7, 0xd2f: 0x0f6b,
- 0xd30: 0x1287, 0xd31: 0x14bb, 0xd32: 0x15a7, 0xd33: 0x15cf, 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: 0x14a7, 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: 0x14f7, 0xd5d: 0x10eb,
- 0xd5e: 0x116f, 0xd60: 0x128f, 0xd62: 0x1353,
- 0xd65: 0x1407, 0xd66: 0x1433,
- 0xd6a: 0x154b, 0xd6b: 0x154f, 0xd6c: 0x1553, 0xd6d: 0x15b7, 0xd6e: 0x142b, 0xd6f: 0x14c3,
- 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: 0x14d7, 0xda9: 0x151b,
- 0xdaa: 0x1533, 0xdab: 0x0b9b, 0xdac: 0x171a, 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: 0x1447, 0xe05: 0x1467,
- 0xe06: 0x14b3, 0xe07: 0x14d7, 0xe08: 0x14f7, 0xe09: 0x150b, 0xe0a: 0x151b, 0xe0b: 0x1527,
- 0xe0c: 0x1533, 0xe0d: 0x1587, 0xe0e: 0x1627, 0xe0f: 0x16b1, 0xe10: 0x16ac, 0xe11: 0x16de,
- 0xe12: 0x0607, 0xe13: 0x062f, 0xe14: 0x0633, 0xe15: 0x1760, 0xe16: 0x178d, 0xe17: 0x1805,
- 0xe18: 0x1613, 0xe19: 0x1623,
- // Block 0x39, offset 0xe40
- 0xe40: 0x19d1, 0xe41: 0x19d4, 0xe42: 0x19d7, 0xe43: 0x1c04, 0xe44: 0x1c08, 0xe45: 0x1a5b,
- 0xe46: 0x1a5b,
- 0xe53: 0x1d71, 0xe54: 0x1d62, 0xe55: 0x1d67, 0xe56: 0x1d76, 0xe57: 0x1d6c,
- 0xe5d: 0x4422,
- 0xe5e: 0x8115, 0xe5f: 0x4494, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221,
- 0xe64: 0x0224, 0xe65: 0x0227, 0xe66: 0x022a, 0xe67: 0x0230, 0xe68: 0x0233, 0xe69: 0x0017,
- 0xe6a: 0x4482, 0xe6b: 0x4488, 0xe6c: 0x4586, 0xe6d: 0x458e, 0xe6e: 0x43da, 0xe6f: 0x43e0,
- 0xe70: 0x43e6, 0xe71: 0x43ec, 0xe72: 0x43f8, 0xe73: 0x43fe, 0xe74: 0x4404, 0xe75: 0x4410,
- 0xe76: 0x4416, 0xe78: 0x441c, 0xe79: 0x4428, 0xe7a: 0x442e, 0xe7b: 0x4434,
- 0xe7c: 0x4440, 0xe7e: 0x4446,
- // Block 0x3a, offset 0xe80
- 0xe80: 0x444c, 0xe81: 0x4452, 0xe83: 0x4458, 0xe84: 0x445e,
- 0xe86: 0x446a, 0xe87: 0x4470, 0xe88: 0x4476, 0xe89: 0x447c, 0xe8a: 0x448e, 0xe8b: 0x440a,
- 0xe8c: 0x43f2, 0xe8d: 0x443a, 0xe8e: 0x4464, 0xe8f: 0x1d7b, 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: 0x4500, 0xee5: 0x4500, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed,
- 0xeea: 0x02ea, 0xeeb: 0x02ea, 0xeec: 0x02ea, 0xeed: 0x02ea, 0xeee: 0x0308, 0xeef: 0x0308,
- 0xef0: 0x44fa, 0xef1: 0x44fa,
- // 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: 0x204b,
- 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: 0x25a6, 0xf2b: 0x25a6, 0xf2c: 0x2616, 0xf2d: 0x2616, 0xf2e: 0x25e5, 0xf2f: 0x25e5,
- 0xf30: 0x2601, 0xf31: 0x2601, 0xf32: 0x25fa, 0xf33: 0x25fa, 0xf34: 0x2608, 0xf35: 0x2608,
- 0xf36: 0x260f, 0xf37: 0x260f, 0xf38: 0x260f, 0xf39: 0x25ec, 0xf3a: 0x25ec, 0xf3b: 0x25ec,
- 0xf3c: 0x0302, 0xf3d: 0x0302, 0xf3e: 0x0302, 0xf3f: 0x0302,
- // Block 0x3d, offset 0xf40
- 0xf40: 0x25ad, 0xf41: 0x25b4, 0xf42: 0x25d0, 0xf43: 0x25ec, 0xf44: 0x25f3, 0xf45: 0x1d85,
- 0xf46: 0x1d8a, 0xf47: 0x1d8f, 0xf48: 0x1d9e, 0xf49: 0x1dad, 0xf4a: 0x1db2, 0xf4b: 0x1db7,
- 0xf4c: 0x1dbc, 0xf4d: 0x1dc1, 0xf4e: 0x1dd0, 0xf4f: 0x1ddf, 0xf50: 0x1de4, 0xf51: 0x1de9,
- 0xf52: 0x1df8, 0xf53: 0x1e07, 0xf54: 0x1e0c, 0xf55: 0x1e11, 0xf56: 0x1e16, 0xf57: 0x1e25,
- 0xf58: 0x1e2a, 0xf59: 0x1e39, 0xf5a: 0x1e3e, 0xf5b: 0x1e43, 0xf5c: 0x1e52, 0xf5d: 0x1e57,
- 0xf5e: 0x1e5c, 0xf5f: 0x1e66, 0xf60: 0x1ea2, 0xf61: 0x1eb1, 0xf62: 0x1ec0, 0xf63: 0x1ec5,
- 0xf64: 0x1eca, 0xf65: 0x1ed4, 0xf66: 0x1ee3, 0xf67: 0x1ee8, 0xf68: 0x1ef7, 0xf69: 0x1efc,
- 0xf6a: 0x1f01, 0xf6b: 0x1f10, 0xf6c: 0x1f15, 0xf6d: 0x1f24, 0xf6e: 0x1f29, 0xf6f: 0x1f2e,
- 0xf70: 0x1f33, 0xf71: 0x1f38, 0xf72: 0x1f3d, 0xf73: 0x1f42, 0xf74: 0x1f47, 0xf75: 0x1f4c,
- 0xf76: 0x1f51, 0xf77: 0x1f56, 0xf78: 0x1f5b, 0xf79: 0x1f60, 0xf7a: 0x1f65, 0xf7b: 0x1f6a,
- 0xf7c: 0x1f6f, 0xf7d: 0x1f74, 0xf7e: 0x1f79, 0xf7f: 0x1f83,
- // Block 0x3e, offset 0xf80
- 0xf80: 0x1f88, 0xf81: 0x1f8d, 0xf82: 0x1f92, 0xf83: 0x1f9c, 0xf84: 0x1fa1, 0xf85: 0x1fab,
- 0xf86: 0x1fb0, 0xf87: 0x1fb5, 0xf88: 0x1fba, 0xf89: 0x1fbf, 0xf8a: 0x1fc4, 0xf8b: 0x1fc9,
- 0xf8c: 0x1fce, 0xf8d: 0x1fd3, 0xf8e: 0x1fe2, 0xf8f: 0x1ff1, 0xf90: 0x1ff6, 0xf91: 0x1ffb,
- 0xf92: 0x2000, 0xf93: 0x2005, 0xf94: 0x200a, 0xf95: 0x2014, 0xf96: 0x2019, 0xf97: 0x201e,
- 0xf98: 0x202d, 0xf99: 0x203c, 0xf9a: 0x2041, 0xf9b: 0x44b2, 0xf9c: 0x44b8, 0xf9d: 0x44ee,
- 0xf9e: 0x4545, 0xf9f: 0x454c, 0xfa0: 0x4553, 0xfa1: 0x455a, 0xfa2: 0x4561, 0xfa3: 0x4568,
- 0xfa4: 0x25c2, 0xfa5: 0x25c9, 0xfa6: 0x25d0, 0xfa7: 0x25d7, 0xfa8: 0x25ec, 0xfa9: 0x25f3,
- 0xfaa: 0x1d94, 0xfab: 0x1d99, 0xfac: 0x1d9e, 0xfad: 0x1da3, 0xfae: 0x1dad, 0xfaf: 0x1db2,
- 0xfb0: 0x1dc6, 0xfb1: 0x1dcb, 0xfb2: 0x1dd0, 0xfb3: 0x1dd5, 0xfb4: 0x1ddf, 0xfb5: 0x1de4,
- 0xfb6: 0x1dee, 0xfb7: 0x1df3, 0xfb8: 0x1df8, 0xfb9: 0x1dfd, 0xfba: 0x1e07, 0xfbb: 0x1e0c,
- 0xfbc: 0x1f38, 0xfbd: 0x1f3d, 0xfbe: 0x1f4c, 0xfbf: 0x1f51,
- // Block 0x3f, offset 0xfc0
- 0xfc0: 0x1f56, 0xfc1: 0x1f6a, 0xfc2: 0x1f6f, 0xfc3: 0x1f74, 0xfc4: 0x1f79, 0xfc5: 0x1f92,
- 0xfc6: 0x1f9c, 0xfc7: 0x1fa1, 0xfc8: 0x1fa6, 0xfc9: 0x1fba, 0xfca: 0x1fd8, 0xfcb: 0x1fdd,
- 0xfcc: 0x1fe2, 0xfcd: 0x1fe7, 0xfce: 0x1ff1, 0xfcf: 0x1ff6, 0xfd0: 0x44ee, 0xfd1: 0x2023,
- 0xfd2: 0x2028, 0xfd3: 0x202d, 0xfd4: 0x2032, 0xfd5: 0x203c, 0xfd6: 0x2041, 0xfd7: 0x25ad,
- 0xfd8: 0x25b4, 0xfd9: 0x25bb, 0xfda: 0x25d0, 0xfdb: 0x25de, 0xfdc: 0x1d85, 0xfdd: 0x1d8a,
- 0xfde: 0x1d8f, 0xfdf: 0x1d9e, 0xfe0: 0x1da8, 0xfe1: 0x1db7, 0xfe2: 0x1dbc, 0xfe3: 0x1dc1,
- 0xfe4: 0x1dd0, 0xfe5: 0x1dda, 0xfe6: 0x1df8, 0xfe7: 0x1e11, 0xfe8: 0x1e16, 0xfe9: 0x1e25,
- 0xfea: 0x1e2a, 0xfeb: 0x1e39, 0xfec: 0x1e43, 0xfed: 0x1e52, 0xfee: 0x1e57, 0xfef: 0x1e5c,
- 0xff0: 0x1e66, 0xff1: 0x1ea2, 0xff2: 0x1ea7, 0xff3: 0x1eb1, 0xff4: 0x1ec0, 0xff5: 0x1ec5,
- 0xff6: 0x1eca, 0xff7: 0x1ed4, 0xff8: 0x1ee3, 0xff9: 0x1ef7, 0xffa: 0x1efc, 0xffb: 0x1f01,
- 0xffc: 0x1f10, 0xffd: 0x1f15, 0xffe: 0x1f24, 0xfff: 0x1f29,
- // Block 0x40, offset 0x1000
- 0x1000: 0x1f2e, 0x1001: 0x1f33, 0x1002: 0x1f42, 0x1003: 0x1f47, 0x1004: 0x1f5b, 0x1005: 0x1f60,
- 0x1006: 0x1f65, 0x1007: 0x1f6a, 0x1008: 0x1f6f, 0x1009: 0x1f83, 0x100a: 0x1f88, 0x100b: 0x1f8d,
- 0x100c: 0x1f92, 0x100d: 0x1f97, 0x100e: 0x1fab, 0x100f: 0x1fb0, 0x1010: 0x1fb5, 0x1011: 0x1fba,
- 0x1012: 0x1fc9, 0x1013: 0x1fce, 0x1014: 0x1fd3, 0x1015: 0x1fe2, 0x1016: 0x1fec, 0x1017: 0x1ffb,
- 0x1018: 0x2000, 0x1019: 0x44e2, 0x101a: 0x2014, 0x101b: 0x2019, 0x101c: 0x201e, 0x101d: 0x202d,
- 0x101e: 0x2037, 0x101f: 0x25d0, 0x1020: 0x25de, 0x1021: 0x1d9e, 0x1022: 0x1da8, 0x1023: 0x1dd0,
- 0x1024: 0x1dda, 0x1025: 0x1df8, 0x1026: 0x1e02, 0x1027: 0x1e66, 0x1028: 0x1e6b, 0x1029: 0x1e8e,
- 0x102a: 0x1e93, 0x102b: 0x1f6a, 0x102c: 0x1f6f, 0x102d: 0x1f92, 0x102e: 0x1fe2, 0x102f: 0x1fec,
- 0x1030: 0x202d, 0x1031: 0x2037, 0x1032: 0x4596, 0x1033: 0x459e, 0x1034: 0x45a6, 0x1035: 0x1eed,
- 0x1036: 0x1ef2, 0x1037: 0x1f06, 0x1038: 0x1f0b, 0x1039: 0x1f1a, 0x103a: 0x1f1f, 0x103b: 0x1e70,
- 0x103c: 0x1e75, 0x103d: 0x1e98, 0x103e: 0x1e9d, 0x103f: 0x1e2f,
- // Block 0x41, offset 0x1040
- 0x1040: 0x1e34, 0x1041: 0x1e1b, 0x1042: 0x1e20, 0x1043: 0x1e48, 0x1044: 0x1e4d, 0x1045: 0x1eb6,
- 0x1046: 0x1ebb, 0x1047: 0x1ed9, 0x1048: 0x1ede, 0x1049: 0x1e7a, 0x104a: 0x1e7f, 0x104b: 0x1e84,
- 0x104c: 0x1e8e, 0x104d: 0x1e89, 0x104e: 0x1e61, 0x104f: 0x1eac, 0x1050: 0x1ecf, 0x1051: 0x1eed,
- 0x1052: 0x1ef2, 0x1053: 0x1f06, 0x1054: 0x1f0b, 0x1055: 0x1f1a, 0x1056: 0x1f1f, 0x1057: 0x1e70,
- 0x1058: 0x1e75, 0x1059: 0x1e98, 0x105a: 0x1e9d, 0x105b: 0x1e2f, 0x105c: 0x1e34, 0x105d: 0x1e1b,
- 0x105e: 0x1e20, 0x105f: 0x1e48, 0x1060: 0x1e4d, 0x1061: 0x1eb6, 0x1062: 0x1ebb, 0x1063: 0x1ed9,
- 0x1064: 0x1ede, 0x1065: 0x1e7a, 0x1066: 0x1e7f, 0x1067: 0x1e84, 0x1068: 0x1e8e, 0x1069: 0x1e89,
- 0x106a: 0x1e61, 0x106b: 0x1eac, 0x106c: 0x1ecf, 0x106d: 0x1e7a, 0x106e: 0x1e7f, 0x106f: 0x1e84,
- 0x1070: 0x1e8e, 0x1071: 0x1e6b, 0x1072: 0x1e93, 0x1073: 0x1ee8, 0x1074: 0x1e52, 0x1075: 0x1e57,
- 0x1076: 0x1e5c, 0x1077: 0x1e7a, 0x1078: 0x1e7f, 0x1079: 0x1e84, 0x107a: 0x1ee8, 0x107b: 0x1ef7,
- 0x107c: 0x449a, 0x107d: 0x449a,
- // Block 0x42, offset 0x1080
- 0x1090: 0x230d, 0x1091: 0x2322,
- 0x1092: 0x2322, 0x1093: 0x2329, 0x1094: 0x2330, 0x1095: 0x2345, 0x1096: 0x234c, 0x1097: 0x2353,
- 0x1098: 0x2376, 0x1099: 0x2376, 0x109a: 0x2399, 0x109b: 0x2392, 0x109c: 0x23ae, 0x109d: 0x23a0,
- 0x109e: 0x23a7, 0x109f: 0x23ca, 0x10a0: 0x23ca, 0x10a1: 0x23c3, 0x10a2: 0x23d1, 0x10a3: 0x23d1,
- 0x10a4: 0x23fb, 0x10a5: 0x23fb, 0x10a6: 0x2417, 0x10a7: 0x23df, 0x10a8: 0x23df, 0x10a9: 0x23d8,
- 0x10aa: 0x23ed, 0x10ab: 0x23ed, 0x10ac: 0x23f4, 0x10ad: 0x23f4, 0x10ae: 0x241e, 0x10af: 0x242c,
- 0x10b0: 0x242c, 0x10b1: 0x2433, 0x10b2: 0x2433, 0x10b3: 0x243a, 0x10b4: 0x2441, 0x10b5: 0x2448,
- 0x10b6: 0x244f, 0x10b7: 0x244f, 0x10b8: 0x2456, 0x10b9: 0x2464, 0x10ba: 0x2472, 0x10bb: 0x246b,
- 0x10bc: 0x2479, 0x10bd: 0x2479, 0x10be: 0x248e, 0x10bf: 0x2495,
- // Block 0x43, offset 0x10c0
- 0x10c0: 0x24c6, 0x10c1: 0x24d4, 0x10c2: 0x24cd, 0x10c3: 0x24b1, 0x10c4: 0x24b1, 0x10c5: 0x24db,
- 0x10c6: 0x24db, 0x10c7: 0x24e2, 0x10c8: 0x24e2, 0x10c9: 0x250c, 0x10ca: 0x2513, 0x10cb: 0x251a,
- 0x10cc: 0x24f0, 0x10cd: 0x24fe, 0x10ce: 0x2521, 0x10cf: 0x2528,
- 0x10d2: 0x24f7, 0x10d3: 0x257c, 0x10d4: 0x2583, 0x10d5: 0x2559, 0x10d6: 0x2560, 0x10d7: 0x2544,
- 0x10d8: 0x2544, 0x10d9: 0x254b, 0x10da: 0x2575, 0x10db: 0x256e, 0x10dc: 0x2598, 0x10dd: 0x2598,
- 0x10de: 0x2306, 0x10df: 0x231b, 0x10e0: 0x2314, 0x10e1: 0x233e, 0x10e2: 0x2337, 0x10e3: 0x2361,
- 0x10e4: 0x235a, 0x10e5: 0x2384, 0x10e6: 0x2368, 0x10e7: 0x237d, 0x10e8: 0x23b5, 0x10e9: 0x2402,
- 0x10ea: 0x23e6, 0x10eb: 0x2425, 0x10ec: 0x24bf, 0x10ed: 0x24e9, 0x10ee: 0x2591, 0x10ef: 0x258a,
- 0x10f0: 0x259f, 0x10f1: 0x2536, 0x10f2: 0x249c, 0x10f3: 0x2567, 0x10f4: 0x248e, 0x10f5: 0x24c6,
- 0x10f6: 0x245d, 0x10f7: 0x24aa, 0x10f8: 0x253d, 0x10f9: 0x252f, 0x10fa: 0x24b8, 0x10fb: 0x24a3,
- 0x10fc: 0x24b8, 0x10fd: 0x253d, 0x10fe: 0x236f, 0x10ff: 0x238b,
- // Block 0x44, offset 0x1100
- 0x1100: 0x2505, 0x1101: 0x2480, 0x1102: 0x22ff, 0x1103: 0x24a3, 0x1104: 0x2448, 0x1105: 0x2417,
- 0x1106: 0x23bc, 0x1107: 0x2552,
- 0x1130: 0x2410, 0x1131: 0x2487, 0x1132: 0x27bb, 0x1133: 0x27b2, 0x1134: 0x27e8, 0x1135: 0x27d6,
- 0x1136: 0x27c4, 0x1137: 0x27df, 0x1138: 0x27f1, 0x1139: 0x2409, 0x113a: 0x2c78, 0x113b: 0x2af8,
- 0x113c: 0x27cd,
- // Block 0x45, offset 0x1140
- 0x1150: 0x0019, 0x1151: 0x0483,
- 0x1152: 0x0487, 0x1153: 0x0035, 0x1154: 0x0037, 0x1155: 0x0003, 0x1156: 0x003f, 0x1157: 0x04bf,
- 0x1158: 0x04c3, 0x1159: 0x1b58,
- 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: 0x186f, 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: 0x4265, 0x118a: 0x4265, 0x118b: 0x4265,
- 0x118c: 0x4265, 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: 0x42a6, 0x11b1: 0x44be, 0x11b2: 0x42ab, 0x11b4: 0x42b0,
- 0x11b6: 0x42b5, 0x11b7: 0x44c4, 0x11b8: 0x42ba, 0x11b9: 0x44ca, 0x11ba: 0x42bf, 0x11bb: 0x44d0,
- 0x11bc: 0x42c4, 0x11bd: 0x44d6, 0x11be: 0x42c9, 0x11bf: 0x44dc,
- // Block 0x47, offset 0x11c0
- 0x11c0: 0x0236, 0x11c1: 0x44a0, 0x11c2: 0x44a0, 0x11c3: 0x44a6, 0x11c4: 0x44a6, 0x11c5: 0x44e8,
- 0x11c6: 0x44e8, 0x11c7: 0x44ac, 0x11c8: 0x44ac, 0x11c9: 0x44f4, 0x11ca: 0x44f4, 0x11cb: 0x44f4,
- 0x11cc: 0x44f4, 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: 0x2dfc,
- 0x1236: 0x2dfc, 0x1237: 0x2e04, 0x1238: 0x2e04, 0x1239: 0x2e0c, 0x123a: 0x2e0c, 0x123b: 0x1f7e,
- 0x123c: 0x1f7e,
- // 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: 0x4a56, 0x129f: 0x4a5c, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4341,
- 0x12a4: 0x031b, 0x12a5: 0x4346, 0x12a6: 0x434b, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327,
- 0x12aa: 0x4350, 0x12ab: 0x4355, 0x12ac: 0x435a, 0x12ad: 0x435f, 0x12ae: 0x4364, 0x12af: 0x4369,
- 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: 0x42d8, 0x12c3: 0x42dd, 0x12c4: 0x42e2, 0x12c5: 0x42e7,
- 0x12c6: 0x42ec, 0x12c7: 0x42f1, 0x12ca: 0x42f6, 0x12cb: 0x42fb,
- 0x12cc: 0x4300, 0x12cd: 0x4305, 0x12ce: 0x430a, 0x12cf: 0x430f,
- 0x12d2: 0x4314, 0x12d3: 0x4319, 0x12d4: 0x431e, 0x12d5: 0x4323, 0x12d6: 0x4328, 0x12d7: 0x432d,
- 0x12da: 0x4332, 0x12db: 0x4337, 0x12dc: 0x433c,
- 0x12e0: 0x00bf, 0x12e1: 0x00c2, 0x12e2: 0x00cb, 0x12e3: 0x4260,
- 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: 0x1875, 0x1441: 0x1872, 0x1442: 0x1878, 0x1443: 0x189c, 0x1444: 0x18c0, 0x1445: 0x18e4,
- 0x1446: 0x1908, 0x1447: 0x1911, 0x1448: 0x1917, 0x1449: 0x191d, 0x144a: 0x1923,
- 0x1450: 0x1a88, 0x1451: 0x1a8c,
- 0x1452: 0x1a90, 0x1453: 0x1a94, 0x1454: 0x1a98, 0x1455: 0x1a9c, 0x1456: 0x1aa0, 0x1457: 0x1aa4,
- 0x1458: 0x1aa8, 0x1459: 0x1aac, 0x145a: 0x1ab0, 0x145b: 0x1ab4, 0x145c: 0x1ab8, 0x145d: 0x1abc,
- 0x145e: 0x1ac0, 0x145f: 0x1ac4, 0x1460: 0x1ac8, 0x1461: 0x1acc, 0x1462: 0x1ad0, 0x1463: 0x1ad4,
- 0x1464: 0x1ad8, 0x1465: 0x1adc, 0x1466: 0x1ae0, 0x1467: 0x1ae4, 0x1468: 0x1ae8, 0x1469: 0x1aec,
- 0x146a: 0x271a, 0x146b: 0x0047, 0x146c: 0x0065, 0x146d: 0x1938, 0x146e: 0x19ad,
- 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: 0x26a9, 0x1481: 0x26be, 0x1482: 0x0503,
- 0x1490: 0x0c0f, 0x1491: 0x0a47,
- 0x1492: 0x08d3, 0x1493: 0x4656, 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,
- // Block 0x53, offset 0x14c0
- 0x14c0: 0x06fb, 0x14c1: 0x06f3, 0x14c2: 0x0703, 0x14c3: 0x1643, 0x14c4: 0x0747, 0x14c5: 0x0757,
- 0x14c6: 0x075b, 0x14c7: 0x0763, 0x14c8: 0x076b, 0x14c9: 0x076f, 0x14ca: 0x077b, 0x14cb: 0x0773,
- 0x14cc: 0x05b3, 0x14cd: 0x1657, 0x14ce: 0x078f, 0x14cf: 0x0793, 0x14d0: 0x0797, 0x14d1: 0x07b3,
- 0x14d2: 0x1648, 0x14d3: 0x05b7, 0x14d4: 0x079f, 0x14d5: 0x07bf, 0x14d6: 0x1652, 0x14d7: 0x07cf,
- 0x14d8: 0x07d7, 0x14d9: 0x0737, 0x14da: 0x07df, 0x14db: 0x07e3, 0x14dc: 0x182d, 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: 0x1666, 0x14f5: 0x0e93,
- 0x14f6: 0x08cf, 0x14f7: 0x08d7, 0x14f8: 0x166b, 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: 0x1670, 0x151a: 0x09d7, 0x151b: 0x09db, 0x151c: 0x09e3, 0x151d: 0x09ef,
- 0x151e: 0x09f7, 0x151f: 0x0a13, 0x1520: 0x1675, 0x1521: 0x167a, 0x1522: 0x0a1f, 0x1523: 0x0a23,
- 0x1524: 0x0a27, 0x1525: 0x0a1b, 0x1526: 0x0a2f, 0x1527: 0x05c7, 0x1528: 0x05cb, 0x1529: 0x0a37,
- 0x152a: 0x0a3f, 0x152b: 0x0a3f, 0x152c: 0x167f, 0x152d: 0x0a5b, 0x152e: 0x0a5f, 0x152f: 0x0a63,
- 0x1530: 0x0a6b, 0x1531: 0x1684, 0x1532: 0x0a73, 0x1533: 0x0a77, 0x1534: 0x0b4f, 0x1535: 0x0a7f,
- 0x1536: 0x05cf, 0x1537: 0x0a8b, 0x1538: 0x0a9b, 0x1539: 0x0aa7, 0x153a: 0x0aa3, 0x153b: 0x168e,
- 0x153c: 0x0aaf, 0x153d: 0x1693, 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: 0x1698, 0x154a: 0x05db, 0x154b: 0x0b0f,
- 0x154c: 0x0b13, 0x154d: 0x0b17, 0x154e: 0x0b1f, 0x154f: 0x185f, 0x1550: 0x0b37, 0x1551: 0x16a2,
- 0x1552: 0x16a2, 0x1553: 0x11d7, 0x1554: 0x0b47, 0x1555: 0x0b47, 0x1556: 0x05df, 0x1557: 0x16c5,
- 0x1558: 0x1797, 0x1559: 0x0b57, 0x155a: 0x0b5f, 0x155b: 0x05e3, 0x155c: 0x0b73, 0x155d: 0x0b83,
- 0x155e: 0x0b87, 0x155f: 0x0b8f, 0x1560: 0x0b9f, 0x1561: 0x05eb, 0x1562: 0x05e7, 0x1563: 0x0ba3,
- 0x1564: 0x16a7, 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: 0x16b6, 0x1579: 0x0c3f, 0x157a: 0x0c33, 0x157b: 0x0c4b,
- 0x157c: 0x0c53, 0x157d: 0x0c67, 0x157e: 0x16bb, 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: 0x16c0, 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: 0x16d9,
- 0x159e: 0x0603, 0x159f: 0x0d3f, 0x15a0: 0x0d33, 0x15a1: 0x0d4f, 0x15a2: 0x0d57, 0x15a3: 0x16e3,
- 0x15a4: 0x0d5b, 0x15a5: 0x0d47, 0x15a6: 0x0d63, 0x15a7: 0x0607, 0x15a8: 0x0d67, 0x15a9: 0x0d6b,
- 0x15aa: 0x0d6f, 0x15ab: 0x0d7b, 0x15ac: 0x16e8, 0x15ad: 0x0d83, 0x15ae: 0x060b, 0x15af: 0x0d8f,
- 0x15b0: 0x16ed, 0x15b1: 0x0d93, 0x15b2: 0x060f, 0x15b3: 0x0d9f, 0x15b4: 0x0dab, 0x15b5: 0x0db7,
- 0x15b6: 0x0dbb, 0x15b7: 0x16f2, 0x15b8: 0x1689, 0x15b9: 0x16f7, 0x15ba: 0x0ddb, 0x15bb: 0x16fc,
- 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: 0x1701, 0x15c7: 0x0e07, 0x15c8: 0x0e3b, 0x15c9: 0x0e3f, 0x15ca: 0x0613, 0x15cb: 0x0e53,
- 0x15cc: 0x0e4f, 0x15cd: 0x1706, 0x15ce: 0x0e33, 0x15cf: 0x0e6f, 0x15d0: 0x170b, 0x15d1: 0x1710,
- 0x15d2: 0x0e73, 0x15d3: 0x0e87, 0x15d4: 0x0e83, 0x15d5: 0x0e7f, 0x15d6: 0x0617, 0x15d7: 0x0e8b,
- 0x15d8: 0x0e9b, 0x15d9: 0x0e97, 0x15da: 0x0ea3, 0x15db: 0x164d, 0x15dc: 0x0eb3, 0x15dd: 0x1715,
- 0x15de: 0x0ebf, 0x15df: 0x171f, 0x15e0: 0x0ed3, 0x15e1: 0x0edf, 0x15e2: 0x0ef3, 0x15e3: 0x1724,
- 0x15e4: 0x0f07, 0x15e5: 0x0f0b, 0x15e6: 0x1729, 0x15e7: 0x172e, 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: 0x1733,
- 0x15f6: 0x0fa3, 0x15f7: 0x1738, 0x15f8: 0x0faf, 0x15f9: 0x169d, 0x15fa: 0x0fbf, 0x15fb: 0x173d,
- 0x15fc: 0x1742, 0x15fd: 0x1747, 0x15fe: 0x0627, 0x15ff: 0x062b,
- // Block 0x58, offset 0x1600
- 0x1600: 0x0ff7, 0x1601: 0x1751, 0x1602: 0x174c, 0x1603: 0x1756, 0x1604: 0x175b, 0x1605: 0x0fff,
- 0x1606: 0x1003, 0x1607: 0x1003, 0x1608: 0x100b, 0x1609: 0x0633, 0x160a: 0x100f, 0x160b: 0x0637,
- 0x160c: 0x063b, 0x160d: 0x1765, 0x160e: 0x1023, 0x160f: 0x102b, 0x1610: 0x1037, 0x1611: 0x063f,
- 0x1612: 0x176a, 0x1613: 0x105b, 0x1614: 0x176f, 0x1615: 0x1774, 0x1616: 0x107b, 0x1617: 0x1093,
- 0x1618: 0x0643, 0x1619: 0x109b, 0x161a: 0x109f, 0x161b: 0x10a3, 0x161c: 0x1779, 0x161d: 0x177e,
- 0x161e: 0x177e, 0x161f: 0x10bb, 0x1620: 0x0647, 0x1621: 0x1783, 0x1622: 0x10cf, 0x1623: 0x10d3,
- 0x1624: 0x064b, 0x1625: 0x1788, 0x1626: 0x10ef, 0x1627: 0x064f, 0x1628: 0x10ff, 0x1629: 0x10f7,
- 0x162a: 0x1107, 0x162b: 0x1792, 0x162c: 0x111f, 0x162d: 0x0653, 0x162e: 0x112b, 0x162f: 0x1133,
- 0x1630: 0x1143, 0x1631: 0x0657, 0x1632: 0x179c, 0x1633: 0x17a1, 0x1634: 0x065b, 0x1635: 0x17a6,
- 0x1636: 0x115b, 0x1637: 0x17ab, 0x1638: 0x1167, 0x1639: 0x1173, 0x163a: 0x117b, 0x163b: 0x17b0,
- 0x163c: 0x17b5, 0x163d: 0x118f, 0x163e: 0x17ba, 0x163f: 0x1197,
- // Block 0x59, offset 0x1640
- 0x1640: 0x16ca, 0x1641: 0x065f, 0x1642: 0x11af, 0x1643: 0x11b3, 0x1644: 0x0667, 0x1645: 0x11b7,
- 0x1646: 0x0a33, 0x1647: 0x17bf, 0x1648: 0x17c4, 0x1649: 0x16cf, 0x164a: 0x16d4, 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: 0x17c9,
- 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: 0x17ce, 0x1665: 0x17d8, 0x1666: 0x17d3, 0x1667: 0x066f, 0x1668: 0x126f, 0x1669: 0x1273,
- 0x166a: 0x127b, 0x166b: 0x17ec, 0x166c: 0x127f, 0x166d: 0x17dd, 0x166e: 0x0673, 0x166f: 0x0677,
- 0x1670: 0x17e2, 0x1671: 0x17e7, 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: 0x17f1,
- 0x1686: 0x12fb, 0x1687: 0x12ff, 0x1688: 0x0687, 0x1689: 0x130b, 0x168a: 0x05bb, 0x168b: 0x17f6,
- 0x168c: 0x17fb, 0x168d: 0x068b, 0x168e: 0x068f, 0x168f: 0x1337, 0x1690: 0x134f, 0x1691: 0x136b,
- 0x1692: 0x137b, 0x1693: 0x1800, 0x1694: 0x138f, 0x1695: 0x1393, 0x1696: 0x13ab, 0x1697: 0x13b7,
- 0x1698: 0x180a, 0x1699: 0x165c, 0x169a: 0x13c3, 0x169b: 0x13bf, 0x169c: 0x13cb, 0x169d: 0x1661,
- 0x169e: 0x13d7, 0x169f: 0x13e3, 0x16a0: 0x180f, 0x16a1: 0x1814, 0x16a2: 0x1423, 0x16a3: 0x142f,
- 0x16a4: 0x1437, 0x16a5: 0x1819, 0x16a6: 0x143b, 0x16a7: 0x1463, 0x16a8: 0x146f, 0x16a9: 0x1473,
- 0x16aa: 0x146b, 0x16ab: 0x147f, 0x16ac: 0x1483, 0x16ad: 0x181e, 0x16ae: 0x148f, 0x16af: 0x0693,
- 0x16b0: 0x1497, 0x16b1: 0x1823, 0x16b2: 0x0697, 0x16b3: 0x14cf, 0x16b4: 0x0ac3, 0x16b5: 0x14e7,
- 0x16b6: 0x1828, 0x16b7: 0x1832, 0x16b8: 0x069b, 0x16b9: 0x069f, 0x16ba: 0x150f, 0x16bb: 0x1837,
- 0x16bc: 0x06a3, 0x16bd: 0x183c, 0x16be: 0x1527, 0x16bf: 0x1527,
- // Block 0x5b, offset 0x16c0
- 0x16c0: 0x152f, 0x16c1: 0x1841, 0x16c2: 0x1547, 0x16c3: 0x06a7, 0x16c4: 0x1557, 0x16c5: 0x1563,
- 0x16c6: 0x156b, 0x16c7: 0x1573, 0x16c8: 0x06ab, 0x16c9: 0x1846, 0x16ca: 0x1587, 0x16cb: 0x15a3,
- 0x16cc: 0x15af, 0x16cd: 0x06af, 0x16ce: 0x06b3, 0x16cf: 0x15b3, 0x16d0: 0x184b, 0x16d1: 0x06b7,
- 0x16d2: 0x1850, 0x16d3: 0x1855, 0x16d4: 0x185a, 0x16d5: 0x15d7, 0x16d6: 0x06bb, 0x16d7: 0x15eb,
- 0x16d8: 0x15f3, 0x16d9: 0x15f7, 0x16da: 0x15ff, 0x16db: 0x1607, 0x16dc: 0x160f, 0x16dd: 0x1864,
-}
-
-// 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,
- 0x392: 0xd2, 0x393: 0xd3, 0x396: 0xd4, 0x397: 0xd5,
- 0x398: 0xd6, 0x39a: 0xd7, 0x39c: 0xd8,
- // Block 0xf, offset 0x3c0
- 0x3eb: 0xd9, 0x3ec: 0xda,
- // Block 0x10, offset 0x400
- 0x432: 0xdb,
- // Block 0x11, offset 0x440
- 0x445: 0xdc, 0x446: 0xdd, 0x447: 0xde,
- 0x449: 0xdf,
- 0x450: 0xe0, 0x451: 0xe1, 0x452: 0xe2, 0x453: 0xe3, 0x454: 0xe4, 0x455: 0xe5, 0x456: 0xe6, 0x457: 0xe7,
- 0x458: 0xe8, 0x459: 0xe9, 0x45a: 0x4a, 0x45b: 0xea, 0x45c: 0xeb, 0x45d: 0xec, 0x45e: 0xed, 0x45f: 0x4b,
- // Block 0x12, offset 0x480
- 0x4a3: 0xee,
- 0x4b8: 0x4c, 0x4b9: 0x4d, 0x4ba: 0x4e,
- // Block 0x13, offset 0x4c0
- 0x4c4: 0x4f, 0x4c5: 0xef, 0x4c6: 0xf0,
- 0x4c8: 0x50, 0x4c9: 0xf1,
- // 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: 152 entries, 304 bytes
-var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x86, 0x8e, 0x95, 0x98, 0x9f, 0xa3, 0xa7, 0xa9, 0xab, 0xb4, 0xb8, 0xbf, 0xc4, 0xc7, 0xd1, 0xd3, 0xda, 0xe2, 0xe6, 0xe8, 0xeb, 0xef, 0xf5, 0x106, 0x112, 0x114, 0x11a, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12b, 0x12e, 0x130, 0x133, 0x136, 0x13a, 0x13f, 0x148, 0x14a, 0x14d, 0x14f, 0x15a, 0x165, 0x174, 0x182, 0x190, 0x1a0, 0x1ae, 0x1b5, 0x1bb, 0x1ca, 0x1ce, 0x1d0, 0x1d4, 0x1d6, 0x1d9, 0x1db, 0x1de, 0x1e0, 0x1e3, 0x1e5, 0x1e7, 0x1e9, 0x1f5, 0x1ff, 0x209, 0x20c, 0x210, 0x212, 0x214, 0x216, 0x218, 0x21b, 0x21d, 0x21f, 0x221, 0x223, 0x229, 0x22c, 0x230, 0x232, 0x239, 0x23f, 0x245, 0x24d, 0x253, 0x259, 0x25f, 0x263, 0x265, 0x267, 0x269, 0x26b, 0x271, 0x274, 0x277, 0x27f, 0x286, 0x289, 0x28c, 0x28e, 0x296, 0x29d, 0x2a0, 0x2a6, 0x2a8, 0x2aa, 0x2ad, 0x2af, 0x2b1, 0x2b3, 0x2b5, 0x2c2, 0x2cc, 0x2ce, 0x2d0, 0x2d4, 0x2d9, 0x2e5, 0x2ea, 0x2f3, 0x2f9, 0x2fe, 0x302, 0x307, 0x30b, 0x31b, 0x329, 0x337, 0x345, 0x347, 0x351, 0x353}
-
-// nfkcSparseValues: 861 entries, 3444 bytes
-var nfkcSparseValues = [861]valueRange{
- // Block 0x0, offset 0x0
- {value: 0x0002, lo: 0x0d},
- {value: 0x0001, lo: 0xa0, hi: 0xa0},
- {value: 0x4274, lo: 0xa8, hi: 0xa8},
- {value: 0x0083, lo: 0xaa, hi: 0xaa},
- {value: 0x4260, lo: 0xaf, hi: 0xaf},
- {value: 0x0025, lo: 0xb2, hi: 0xb3},
- {value: 0x4256, lo: 0xb4, hi: 0xb4},
- {value: 0x01dc, lo: 0xb5, hi: 0xb5},
- {value: 0x428d, lo: 0xb8, hi: 0xb8},
- {value: 0x0023, lo: 0xb9, hi: 0xb9},
- {value: 0x009f, lo: 0xba, hi: 0xba},
- {value: 0x2218, lo: 0xbc, hi: 0xbc},
- {value: 0x220c, lo: 0xbd, hi: 0xbd},
- {value: 0x22ae, lo: 0xbe, hi: 0xbe},
- // Block 0x1, offset 0xe
- {value: 0x0091, lo: 0x03},
- {value: 0x4774, lo: 0xa0, hi: 0xa1},
- {value: 0x47a6, 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: 0x426a, lo: 0x98, hi: 0x98},
- {value: 0x426f, lo: 0x99, hi: 0x9a},
- {value: 0x4292, lo: 0x9b, hi: 0x9b},
- {value: 0x425b, lo: 0x9c, hi: 0x9c},
- {value: 0x427e, 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: 0x37a1, lo: 0x90, hi: 0x90},
- {value: 0x37ad, lo: 0x91, hi: 0x91},
- {value: 0x379b, lo: 0x93, hi: 0x93},
- {value: 0xa000, lo: 0x96, hi: 0x96},
- {value: 0x3813, lo: 0x97, hi: 0x97},
- {value: 0x37dd, lo: 0x9c, hi: 0x9c},
- {value: 0x37c5, lo: 0x9d, hi: 0x9d},
- {value: 0x37ef, lo: 0x9e, hi: 0x9e},
- {value: 0xa000, lo: 0xb4, hi: 0xb5},
- {value: 0x3819, lo: 0xb6, hi: 0xb6},
- {value: 0x381f, 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: 0x383d, lo: 0xa2, hi: 0xa2},
- {value: 0x3843, lo: 0xa3, hi: 0xa3},
- {value: 0x384f, lo: 0xa4, hi: 0xa4},
- {value: 0x3849, lo: 0xa5, hi: 0xa5},
- {value: 0x3855, lo: 0xa6, hi: 0xa6},
- {value: 0xa000, lo: 0xa7, hi: 0xa7},
- // Block 0x8, offset 0x47
- {value: 0x0000, lo: 0x0e},
- {value: 0x3867, lo: 0x80, hi: 0x80},
- {value: 0xa000, lo: 0x81, hi: 0x81},
- {value: 0x385b, lo: 0x82, hi: 0x82},
- {value: 0xa000, lo: 0x92, hi: 0x92},
- {value: 0x3861, 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: 0x0f},
- {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 0x86
- {value: 0x0000, lo: 0x07},
- {value: 0xa000, lo: 0xa8, hi: 0xa8},
- {value: 0x3ed4, lo: 0xa9, hi: 0xa9},
- {value: 0xa000, lo: 0xb0, hi: 0xb0},
- {value: 0x3edc, lo: 0xb1, hi: 0xb1},
- {value: 0xa000, lo: 0xb3, hi: 0xb3},
- {value: 0x3ee4, lo: 0xb4, hi: 0xb4},
- {value: 0x9902, lo: 0xbc, hi: 0xbc},
- // Block 0x10, offset 0x8e
- {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: 0x45ae, lo: 0x98, hi: 0x9f},
- // Block 0x11, offset 0x95
- {value: 0x0000, lo: 0x02},
- {value: 0x8102, lo: 0xbc, hi: 0xbc},
- {value: 0x9900, lo: 0xbe, hi: 0xbe},
- // Block 0x12, offset 0x98
- {value: 0x0008, lo: 0x06},
- {value: 0xa000, lo: 0x87, hi: 0x87},
- {value: 0x2c9a, lo: 0x8b, hi: 0x8c},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x9900, lo: 0x97, hi: 0x97},
- {value: 0x45ee, lo: 0x9c, hi: 0x9d},
- {value: 0x45fe, lo: 0x9f, hi: 0x9f},
- // Block 0x13, offset 0x9f
- {value: 0x0000, lo: 0x03},
- {value: 0x4626, lo: 0xb3, hi: 0xb3},
- {value: 0x462e, lo: 0xb6, hi: 0xb6},
- {value: 0x8102, lo: 0xbc, hi: 0xbc},
- // Block 0x14, offset 0xa3
- {value: 0x0008, lo: 0x03},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x4606, lo: 0x99, hi: 0x9b},
- {value: 0x461e, lo: 0x9e, hi: 0x9e},
- // Block 0x15, offset 0xa7
- {value: 0x0000, lo: 0x01},
- {value: 0x8102, lo: 0xbc, hi: 0xbc},
- // Block 0x16, offset 0xa9
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- // Block 0x17, offset 0xab
- {value: 0x0000, lo: 0x08},
- {value: 0xa000, lo: 0x87, hi: 0x87},
- {value: 0x2cb2, lo: 0x88, hi: 0x88},
- {value: 0x2caa, lo: 0x8b, hi: 0x8b},
- {value: 0x2cba, lo: 0x8c, hi: 0x8c},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x9900, lo: 0x96, hi: 0x97},
- {value: 0x4636, lo: 0x9c, hi: 0x9c},
- {value: 0x463e, lo: 0x9d, hi: 0x9d},
- // Block 0x18, offset 0xb4
- {value: 0x0000, lo: 0x03},
- {value: 0xa000, lo: 0x92, hi: 0x92},
- {value: 0x2cc2, lo: 0x94, hi: 0x94},
- {value: 0x9900, lo: 0xbe, hi: 0xbe},
- // Block 0x19, offset 0xb8
- {value: 0x0000, lo: 0x06},
- {value: 0xa000, lo: 0x86, hi: 0x87},
- {value: 0x2cca, lo: 0x8a, hi: 0x8a},
- {value: 0x2cda, lo: 0x8b, hi: 0x8b},
- {value: 0x2cd2, lo: 0x8c, hi: 0x8c},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x9900, lo: 0x97, hi: 0x97},
- // Block 0x1a, offset 0xbf
- {value: 0x1801, lo: 0x04},
- {value: 0xa000, lo: 0x86, hi: 0x86},
- {value: 0x3eec, lo: 0x88, hi: 0x88},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x8120, lo: 0x95, hi: 0x96},
- // Block 0x1b, offset 0xc4
- {value: 0x0000, lo: 0x02},
- {value: 0x8102, lo: 0xbc, hi: 0xbc},
- {value: 0xa000, lo: 0xbf, hi: 0xbf},
- // Block 0x1c, offset 0xc7
- {value: 0x0000, lo: 0x09},
- {value: 0x2ce2, lo: 0x80, hi: 0x80},
- {value: 0x9900, lo: 0x82, hi: 0x82},
- {value: 0xa000, lo: 0x86, hi: 0x86},
- {value: 0x2cea, lo: 0x87, hi: 0x87},
- {value: 0x2cf2, lo: 0x88, hi: 0x88},
- {value: 0x2f4c, lo: 0x8a, hi: 0x8a},
- {value: 0x2dd4, lo: 0x8b, hi: 0x8b},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x9900, lo: 0x95, hi: 0x96},
- // Block 0x1d, offset 0xd1
- {value: 0x0000, lo: 0x01},
- {value: 0x9900, lo: 0xbe, hi: 0xbe},
- // Block 0x1e, offset 0xd3
- {value: 0x0000, lo: 0x06},
- {value: 0xa000, lo: 0x86, hi: 0x87},
- {value: 0x2cfa, lo: 0x8a, hi: 0x8a},
- {value: 0x2d0a, lo: 0x8b, hi: 0x8b},
- {value: 0x2d02, lo: 0x8c, hi: 0x8c},
- {value: 0x8104, lo: 0x8d, hi: 0x8d},
- {value: 0x9900, lo: 0x97, hi: 0x97},
- // Block 0x1f, offset 0xda
- {value: 0x6bee, lo: 0x07},
- {value: 0x9904, lo: 0x8a, hi: 0x8a},
- {value: 0x9900, lo: 0x8f, hi: 0x8f},
- {value: 0xa000, lo: 0x99, hi: 0x99},
- {value: 0x3ef4, lo: 0x9a, hi: 0x9a},
- {value: 0x2f54, lo: 0x9c, hi: 0x9c},
- {value: 0x2ddf, lo: 0x9d, hi: 0x9d},
- {value: 0x2d12, lo: 0x9e, hi: 0x9f},
- // Block 0x20, offset 0xe2
- {value: 0x0000, lo: 0x03},
- {value: 0x261d, lo: 0xb3, hi: 0xb3},
- {value: 0x8122, lo: 0xb8, hi: 0xb9},
- {value: 0x8104, lo: 0xba, hi: 0xba},
- // Block 0x21, offset 0xe6
- {value: 0x0000, lo: 0x01},
- {value: 0x8123, lo: 0x88, hi: 0x8b},
- // Block 0x22, offset 0xe8
- {value: 0x0000, lo: 0x02},
- {value: 0x2632, lo: 0xb3, hi: 0xb3},
- {value: 0x8124, lo: 0xb8, hi: 0xb9},
- // Block 0x23, offset 0xeb
- {value: 0x0000, lo: 0x03},
- {value: 0x8125, lo: 0x88, hi: 0x8b},
- {value: 0x2624, lo: 0x9c, hi: 0x9c},
- {value: 0x262b, lo: 0x9d, hi: 0x9d},
- // Block 0x24, offset 0xef
- {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 0xf5
- {value: 0x0000, lo: 0x10},
- {value: 0x2640, lo: 0x83, hi: 0x83},
- {value: 0x2647, lo: 0x8d, hi: 0x8d},
- {value: 0x264e, lo: 0x92, hi: 0x92},
- {value: 0x2655, lo: 0x97, hi: 0x97},
- {value: 0x265c, lo: 0x9c, hi: 0x9c},
- {value: 0x2639, lo: 0xa9, hi: 0xa9},
- {value: 0x8126, lo: 0xb1, hi: 0xb1},
- {value: 0x8127, lo: 0xb2, hi: 0xb2},
- {value: 0x4a62, lo: 0xb3, hi: 0xb3},
- {value: 0x8128, lo: 0xb4, hi: 0xb4},
- {value: 0x4a6b, lo: 0xb5, hi: 0xb5},
- {value: 0x4646, lo: 0xb6, hi: 0xb6},
- {value: 0x4686, lo: 0xb7, hi: 0xb7},
- {value: 0x464e, lo: 0xb8, hi: 0xb8},
- {value: 0x4691, lo: 0xb9, hi: 0xb9},
- {value: 0x8127, lo: 0xba, hi: 0xbd},
- // Block 0x26, offset 0x106
- {value: 0x0000, lo: 0x0b},
- {value: 0x8127, lo: 0x80, hi: 0x80},
- {value: 0x4a74, lo: 0x81, hi: 0x81},
- {value: 0x8132, lo: 0x82, hi: 0x83},
- {value: 0x8104, lo: 0x84, hi: 0x84},
- {value: 0x8132, lo: 0x86, hi: 0x87},
- {value: 0x266a, lo: 0x93, hi: 0x93},
- {value: 0x2671, lo: 0x9d, hi: 0x9d},
- {value: 0x2678, lo: 0xa2, hi: 0xa2},
- {value: 0x267f, lo: 0xa7, hi: 0xa7},
- {value: 0x2686, lo: 0xac, hi: 0xac},
- {value: 0x2663, lo: 0xb9, hi: 0xb9},
- // Block 0x27, offset 0x112
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0x86, hi: 0x86},
- // Block 0x28, offset 0x114
- {value: 0x0000, lo: 0x05},
- {value: 0xa000, lo: 0xa5, hi: 0xa5},
- {value: 0x2d1a, 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 0x11a
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0x8d, hi: 0x8d},
- // Block 0x2a, offset 0x11c
- {value: 0x0000, lo: 0x01},
- {value: 0x030f, lo: 0xbc, hi: 0xbc},
- // Block 0x2b, offset 0x11e
- {value: 0x0000, lo: 0x01},
- {value: 0xa000, lo: 0x80, hi: 0x92},
- // Block 0x2c, offset 0x120
- {value: 0x0000, lo: 0x01},
- {value: 0xb900, lo: 0xa1, hi: 0xb5},
- // Block 0x2d, offset 0x122
- {value: 0x0000, lo: 0x01},
- {value: 0x9900, lo: 0xa8, hi: 0xbf},
- // Block 0x2e, offset 0x124
- {value: 0x0000, lo: 0x01},
- {value: 0x9900, lo: 0x80, hi: 0x82},
- // Block 0x2f, offset 0x126
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0x9d, hi: 0x9f},
- // Block 0x30, offset 0x128
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x94, hi: 0x94},
- {value: 0x8104, lo: 0xb4, hi: 0xb4},
- // Block 0x31, offset 0x12b
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x92, hi: 0x92},
- {value: 0x8132, lo: 0x9d, hi: 0x9d},
- // Block 0x32, offset 0x12e
- {value: 0x0000, lo: 0x01},
- {value: 0x8131, lo: 0xa9, hi: 0xa9},
- // Block 0x33, offset 0x130
- {value: 0x0004, lo: 0x02},
- {value: 0x812e, lo: 0xb9, hi: 0xba},
- {value: 0x812d, lo: 0xbb, hi: 0xbb},
- // Block 0x34, offset 0x133
- {value: 0x0000, lo: 0x02},
- {value: 0x8132, lo: 0x97, hi: 0x97},
- {value: 0x812d, lo: 0x98, hi: 0x98},
- // Block 0x35, offset 0x136
- {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 0x13a
- {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 0x13f
- {value: 0x0000, lo: 0x08},
- {value: 0x2d62, lo: 0x80, hi: 0x80},
- {value: 0x2d6a, lo: 0x81, hi: 0x81},
- {value: 0xa000, lo: 0x82, hi: 0x82},
- {value: 0x2d72, 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 0x148
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0xaa, hi: 0xab},
- // Block 0x39, offset 0x14a
- {value: 0x0000, lo: 0x02},
- {value: 0x8102, lo: 0xa6, hi: 0xa6},
- {value: 0x8104, lo: 0xb2, hi: 0xb3},
- // Block 0x3a, offset 0x14d
- {value: 0x0000, lo: 0x01},
- {value: 0x8102, lo: 0xb7, hi: 0xb7},
- // Block 0x3b, offset 0x14f
- {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 0x15a
- {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 0x165
- {value: 0x0000, lo: 0x0e},
- {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: 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 0x174
- {value: 0x0000, lo: 0x0d},
- {value: 0x0001, lo: 0x80, hi: 0x8a},
- {value: 0x043b, lo: 0x91, hi: 0x91},
- {value: 0x4297, lo: 0x97, hi: 0x97},
- {value: 0x001d, lo: 0xa4, hi: 0xa4},
- {value: 0x186f, lo: 0xa5, hi: 0xa5},
- {value: 0x1b58, lo: 0xa6, hi: 0xa6},
- {value: 0x0001, lo: 0xaf, hi: 0xaf},
- {value: 0x268d, lo: 0xb3, hi: 0xb3},
- {value: 0x27fa, lo: 0xb4, hi: 0xb4},
- {value: 0x2694, lo: 0xb6, hi: 0xb6},
- {value: 0x2804, lo: 0xb7, hi: 0xb7},
- {value: 0x1869, lo: 0xbc, hi: 0xbc},
- {value: 0x4265, lo: 0xbe, hi: 0xbe},
- // Block 0x3f, offset 0x182
- {value: 0x0002, lo: 0x0d},
- {value: 0x192f, lo: 0x87, hi: 0x87},
- {value: 0x192c, lo: 0x88, hi: 0x88},
- {value: 0x186c, lo: 0x89, hi: 0x89},
- {value: 0x298a, 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 0x190
- {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: 0x1995, lo: 0xa8, hi: 0xa8},
- // Block 0x41, offset 0x1a0
- {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 0x1ae
- {value: 0x0007, lo: 0x06},
- {value: 0x217c, lo: 0x89, hi: 0x89},
- {value: 0xa000, lo: 0x90, hi: 0x90},
- {value: 0xa000, lo: 0x92, hi: 0x92},
- {value: 0xa000, lo: 0x94, hi: 0x94},
- {value: 0x3bb5, lo: 0x9a, hi: 0x9b},
- {value: 0x3bc3, lo: 0xae, hi: 0xae},
- // Block 0x43, offset 0x1b5
- {value: 0x000e, lo: 0x05},
- {value: 0x3bca, lo: 0x8d, hi: 0x8e},
- {value: 0x3bd1, 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 0x1bb
- {value: 0x0173, lo: 0x0e},
- {value: 0xa000, lo: 0x83, hi: 0x83},
- {value: 0x3bdf, lo: 0x84, hi: 0x84},
- {value: 0xa000, lo: 0x88, hi: 0x88},
- {value: 0x3be6, lo: 0x89, hi: 0x89},
- {value: 0xa000, lo: 0x8b, hi: 0x8b},
- {value: 0x3bed, lo: 0x8c, hi: 0x8c},
- {value: 0xa000, lo: 0xa3, hi: 0xa3},
- {value: 0x3bf4, lo: 0xa4, hi: 0xa4},
- {value: 0xa000, lo: 0xa5, hi: 0xa5},
- {value: 0x3bfb, lo: 0xa6, hi: 0xa6},
- {value: 0x269b, lo: 0xac, hi: 0xad},
- {value: 0x26a2, lo: 0xaf, hi: 0xaf},
- {value: 0x2818, lo: 0xb0, hi: 0xb0},
- {value: 0xa000, lo: 0xbc, hi: 0xbc},
- // Block 0x45, offset 0x1ca
- {value: 0x0007, lo: 0x03},
- {value: 0x3c64, lo: 0xa0, hi: 0xa1},
- {value: 0x3c8e, lo: 0xa2, hi: 0xa3},
- {value: 0x3cb8, lo: 0xaa, hi: 0xad},
- // Block 0x46, offset 0x1ce
- {value: 0x0004, lo: 0x01},
- {value: 0x048b, lo: 0xa9, hi: 0xaa},
- // Block 0x47, offset 0x1d0
- {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 0x1d4
- {value: 0x0000, lo: 0x01},
- {value: 0x2997, lo: 0x8c, hi: 0x8c},
- // Block 0x49, offset 0x1d6
- {value: 0x0263, lo: 0x02},
- {value: 0x1b88, lo: 0xb4, hi: 0xb4},
- {value: 0x1929, lo: 0xb5, hi: 0xb6},
- // Block 0x4a, offset 0x1d9
- {value: 0x0000, lo: 0x01},
- {value: 0x456f, lo: 0x9c, hi: 0x9c},
- // Block 0x4b, offset 0x1db
- {value: 0x0000, lo: 0x02},
- {value: 0x0095, lo: 0xbc, hi: 0xbc},
- {value: 0x006d, lo: 0xbd, hi: 0xbd},
- // Block 0x4c, offset 0x1de
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0xaf, hi: 0xb1},
- // Block 0x4d, offset 0x1e0
- {value: 0x0000, lo: 0x02},
- {value: 0x047f, lo: 0xaf, hi: 0xaf},
- {value: 0x8104, lo: 0xbf, hi: 0xbf},
- // Block 0x4e, offset 0x1e3
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0xa0, hi: 0xbf},
- // Block 0x4f, offset 0x1e5
- {value: 0x0000, lo: 0x01},
- {value: 0x0dc3, lo: 0x9f, hi: 0x9f},
- // Block 0x50, offset 0x1e7
- {value: 0x0000, lo: 0x01},
- {value: 0x162b, lo: 0xb3, hi: 0xb3},
- // Block 0x51, offset 0x1e9
- {value: 0x0004, lo: 0x0b},
- {value: 0x1593, lo: 0x80, hi: 0x82},
- {value: 0x15ab, lo: 0x83, hi: 0x83},
- {value: 0x15c3, lo: 0x84, hi: 0x85},
- {value: 0x15d3, lo: 0x86, hi: 0x89},
- {value: 0x15e7, lo: 0x8a, hi: 0x8c},
- {value: 0x15fb, lo: 0x8d, hi: 0x8d},
- {value: 0x1603, lo: 0x8e, hi: 0x8e},
- {value: 0x160b, lo: 0x8f, hi: 0x90},
- {value: 0x1617, lo: 0x91, hi: 0x93},
- {value: 0x1627, lo: 0x94, hi: 0x94},
- {value: 0x162f, lo: 0x95, hi: 0x95},
- // Block 0x52, offset 0x1f5
- {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 0x1ff
- {value: 0x0005, lo: 0x09},
- {value: 0x0313, lo: 0xb1, hi: 0xb1},
- {value: 0x0317, lo: 0xb2, hi: 0xb2},
- {value: 0x4341, lo: 0xb3, hi: 0xb3},
- {value: 0x031b, lo: 0xb4, hi: 0xb4},
- {value: 0x4346, lo: 0xb5, hi: 0xb6},
- {value: 0x031f, lo: 0xb7, hi: 0xb7},
- {value: 0x0323, lo: 0xb8, hi: 0xb8},
- {value: 0x0327, lo: 0xb9, hi: 0xb9},
- {value: 0x4350, lo: 0xba, hi: 0xbf},
- // Block 0x54, offset 0x209
- {value: 0x0000, lo: 0x02},
- {value: 0x8132, lo: 0xaf, hi: 0xaf},
- {value: 0x8132, lo: 0xb4, hi: 0xbd},
- // Block 0x55, offset 0x20c
- {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 0x210
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0xb0, hi: 0xb1},
- // Block 0x57, offset 0x212
- {value: 0x0000, lo: 0x01},
- {value: 0x1637, lo: 0xb0, hi: 0xb0},
- // Block 0x58, offset 0x214
- {value: 0x000c, lo: 0x01},
- {value: 0x00d7, lo: 0xb8, hi: 0xb9},
- // Block 0x59, offset 0x216
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0x86, hi: 0x86},
- // Block 0x5a, offset 0x218
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x84, hi: 0x84},
- {value: 0x8132, lo: 0xa0, hi: 0xb1},
- // Block 0x5b, offset 0x21b
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0xab, hi: 0xad},
- // Block 0x5c, offset 0x21d
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0x93, hi: 0x93},
- // Block 0x5d, offset 0x21f
- {value: 0x0000, lo: 0x01},
- {value: 0x8102, lo: 0xb3, hi: 0xb3},
- // Block 0x5e, offset 0x221
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0x80, hi: 0x80},
- // Block 0x5f, offset 0x223
- {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 0x229
- {value: 0x0000, lo: 0x02},
- {value: 0x8132, lo: 0x81, hi: 0x81},
- {value: 0x8104, lo: 0xb6, hi: 0xb6},
- // Block 0x61, offset 0x22c
- {value: 0x0008, lo: 0x03},
- {value: 0x1633, lo: 0x9c, hi: 0x9d},
- {value: 0x0125, lo: 0x9e, hi: 0x9e},
- {value: 0x163f, lo: 0x9f, hi: 0x9f},
- // Block 0x62, offset 0x230
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0xad, hi: 0xad},
- // Block 0x63, offset 0x232
- {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 0x239
- {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 0x23f
- {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 0x245
- {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 0x24d
- {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 0x253
- {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 0x259
- {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 0x25f
- {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 0x263
- {value: 0x0002, lo: 0x01},
- {value: 0x0003, lo: 0x81, hi: 0xbf},
- // Block 0x6c, offset 0x265
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0xbd, hi: 0xbd},
- // Block 0x6d, offset 0x267
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0xa0, hi: 0xa0},
- // Block 0x6e, offset 0x269
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0xb6, hi: 0xba},
- // Block 0x6f, offset 0x26b
- {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 0x271
- {value: 0x0000, lo: 0x02},
- {value: 0x8132, lo: 0xa5, hi: 0xa5},
- {value: 0x812d, lo: 0xa6, hi: 0xa6},
- // Block 0x71, offset 0x274
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x86, hi: 0x86},
- {value: 0x8104, lo: 0xbf, hi: 0xbf},
- // Block 0x72, offset 0x277
- {value: 0x17fe, lo: 0x07},
- {value: 0xa000, lo: 0x99, hi: 0x99},
- {value: 0x4234, lo: 0x9a, hi: 0x9a},
- {value: 0xa000, lo: 0x9b, hi: 0x9b},
- {value: 0x423e, lo: 0x9c, hi: 0x9c},
- {value: 0xa000, lo: 0xa5, hi: 0xa5},
- {value: 0x4248, lo: 0xab, hi: 0xab},
- {value: 0x8104, lo: 0xb9, hi: 0xba},
- // Block 0x73, offset 0x27f
- {value: 0x0000, lo: 0x06},
- {value: 0x8132, lo: 0x80, hi: 0x82},
- {value: 0x9900, lo: 0xa7, hi: 0xa7},
- {value: 0x2d7a, lo: 0xae, hi: 0xae},
- {value: 0x2d84, lo: 0xaf, hi: 0xaf},
- {value: 0xa000, lo: 0xb1, hi: 0xb2},
- {value: 0x8104, lo: 0xb3, hi: 0xb4},
- // Block 0x74, offset 0x286
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x80, hi: 0x80},
- {value: 0x8102, lo: 0x8a, hi: 0x8a},
- // Block 0x75, offset 0x289
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0xb5, hi: 0xb5},
- {value: 0x8102, lo: 0xb6, hi: 0xb6},
- // Block 0x76, offset 0x28c
- {value: 0x0002, lo: 0x01},
- {value: 0x8102, lo: 0xa9, hi: 0xaa},
- // Block 0x77, offset 0x28e
- {value: 0x0000, lo: 0x07},
- {value: 0xa000, lo: 0x87, hi: 0x87},
- {value: 0x2d8e, lo: 0x8b, hi: 0x8b},
- {value: 0x2d98, 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 0x296
- {value: 0x6b5e, lo: 0x06},
- {value: 0x9900, lo: 0xb0, hi: 0xb0},
- {value: 0xa000, lo: 0xb9, hi: 0xb9},
- {value: 0x9900, lo: 0xba, hi: 0xba},
- {value: 0x2dac, lo: 0xbb, hi: 0xbb},
- {value: 0x2da2, lo: 0xbc, hi: 0xbd},
- {value: 0x2db6, lo: 0xbe, hi: 0xbe},
- // Block 0x79, offset 0x29d
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0x82, hi: 0x82},
- {value: 0x8102, lo: 0x83, hi: 0x83},
- // Block 0x7a, offset 0x2a0
- {value: 0x0000, lo: 0x05},
- {value: 0x9900, lo: 0xaf, hi: 0xaf},
- {value: 0xa000, lo: 0xb8, hi: 0xb9},
- {value: 0x2dc0, lo: 0xba, hi: 0xba},
- {value: 0x2dca, lo: 0xbb, hi: 0xbb},
- {value: 0x8104, lo: 0xbf, hi: 0xbf},
- // Block 0x7b, offset 0x2a6
- {value: 0x0000, lo: 0x01},
- {value: 0x8102, lo: 0x80, hi: 0x80},
- // Block 0x7c, offset 0x2a8
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0xbf, hi: 0xbf},
- // Block 0x7d, offset 0x2aa
- {value: 0x0000, lo: 0x02},
- {value: 0x8104, lo: 0xb6, hi: 0xb6},
- {value: 0x8102, lo: 0xb7, hi: 0xb7},
- // Block 0x7e, offset 0x2ad
- {value: 0x0000, lo: 0x01},
- {value: 0x8104, lo: 0xab, hi: 0xab},
- // Block 0x7f, offset 0x2af
- {value: 0x0000, lo: 0x01},
- {value: 0x8101, lo: 0xb0, hi: 0xb4},
- // Block 0x80, offset 0x2b1
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0xb0, hi: 0xb6},
- // Block 0x81, offset 0x2b3
- {value: 0x0000, lo: 0x01},
- {value: 0x8101, lo: 0x9e, hi: 0x9e},
- // Block 0x82, offset 0x2b5
- {value: 0x0000, lo: 0x0c},
- {value: 0x465e, lo: 0x9e, hi: 0x9e},
- {value: 0x4668, lo: 0x9f, hi: 0x9f},
- {value: 0x469c, lo: 0xa0, hi: 0xa0},
- {value: 0x46aa, lo: 0xa1, hi: 0xa1},
- {value: 0x46b8, lo: 0xa2, hi: 0xa2},
- {value: 0x46c6, lo: 0xa3, hi: 0xa3},
- {value: 0x46d4, 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 0x83, offset 0x2c2
- {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: 0x4672, lo: 0xbb, hi: 0xbb},
- {value: 0x467c, lo: 0xbc, hi: 0xbc},
- {value: 0x46e2, lo: 0xbd, hi: 0xbd},
- {value: 0x46fe, lo: 0xbe, hi: 0xbe},
- {value: 0x46f0, lo: 0xbf, hi: 0xbf},
- // Block 0x84, offset 0x2cc
- {value: 0x0000, lo: 0x01},
- {value: 0x470c, lo: 0x80, hi: 0x80},
- // Block 0x85, offset 0x2ce
- {value: 0x0000, lo: 0x01},
- {value: 0x8132, lo: 0x82, hi: 0x84},
- // Block 0x86, offset 0x2d0
- {value: 0x0002, lo: 0x03},
- {value: 0x0043, lo: 0x80, hi: 0x99},
- {value: 0x0083, lo: 0x9a, hi: 0xb3},
- {value: 0x0043, lo: 0xb4, hi: 0xbf},
- // Block 0x87, offset 0x2d4
- {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 0x88, offset 0x2d9
- {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 0x89, offset 0x2e5
- {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 0x8a, offset 0x2ea
- {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 0x8b, offset 0x2f3
- {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 0x8c, offset 0x2f9
- {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 0x8d, offset 0x2fe
- {value: 0x0002, lo: 0x03},
- {value: 0x008f, lo: 0x80, hi: 0x93},
- {value: 0x0043, lo: 0x94, hi: 0xad},
- {value: 0x0083, lo: 0xae, hi: 0xbf},
- // Block 0x8e, offset 0x302
- {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 0x8f, offset 0x307
- {value: 0x0002, lo: 0x03},
- {value: 0x004b, lo: 0x80, hi: 0x95},
- {value: 0x0083, lo: 0x96, hi: 0xaf},
- {value: 0x0043, lo: 0xb0, hi: 0xbf},
- // Block 0x90, offset 0x30b
- {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 0x91, offset 0x31b
- {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 0x92, offset 0x329
- {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 0x93, offset 0x337
- {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 0x94, offset 0x345
- {value: 0x0000, lo: 0x01},
- {value: 0x812d, lo: 0x90, hi: 0x96},
- // Block 0x95, offset 0x347
- {value: 0x0002, lo: 0x09},
- {value: 0x0063, lo: 0x80, hi: 0x89},
- {value: 0x194d, lo: 0x8a, hi: 0x8a},
- {value: 0x197d, lo: 0x8b, hi: 0x8b},
- {value: 0x1998, lo: 0x8c, hi: 0x8c},
- {value: 0x199e, lo: 0x8d, hi: 0x8d},
- {value: 0x1bbc, lo: 0x8e, hi: 0x8e},
- {value: 0x19aa, lo: 0x8f, hi: 0x8f},
- {value: 0x1977, lo: 0xaa, hi: 0xaa},
- {value: 0x197a, lo: 0xab, hi: 0xab},
- // Block 0x96, offset 0x351
- {value: 0x0000, lo: 0x01},
- {value: 0x193b, lo: 0x90, hi: 0x90},
- // Block 0x97, offset 0x353
- {value: 0x0028, lo: 0x09},
- {value: 0x285e, lo: 0x80, hi: 0x80},
- {value: 0x2822, lo: 0x81, hi: 0x81},
- {value: 0x282c, lo: 0x82, hi: 0x82},
- {value: 0x2840, lo: 0x83, hi: 0x84},
- {value: 0x284a, lo: 0x85, hi: 0x86},
- {value: 0x2836, lo: 0x87, hi: 0x87},
- {value: 0x2854, 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 (53848 bytes)
diff --git a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/transform.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/transform.go
deleted file mode 100644
index 8589067c..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/transform.go
+++ /dev/null
@@ -1,88 +0,0 @@
-// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/trie.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/trie.go
deleted file mode 100644
index 423386bf..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/trie.go
+++ /dev/null
@@ -1,54 +0,0 @@
-// 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/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/triegen.go b/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/triegen.go
deleted file mode 100644
index 45d71190..00000000
--- a/cmd/strelaypoolsrv/Godeps/_workspace/src/golang.org/x/text/unicode/norm/triegen.go
+++ /dev/null
@@ -1,117 +0,0 @@
-// 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
-}