diff --git a/go.mod b/go.mod
index dc22a78d..d6f5a0dc 100644
--- a/go.mod
+++ b/go.mod
@@ -1,10 +1,11 @@
 module github.com/splunk/terraform-provider-splunk
 
-go 1.17
+go 1.18
 
 require (
 	github.com/google/go-querystring v1.0.0
 	github.com/hashicorp/terraform-plugin-sdk v1.15.0
+	github.com/splunk/go-splunk-client v0.0.1
 )
 
 require (
diff --git a/go.sum b/go.sum
index 246aa41d..c71d92bb 100644
--- a/go.sum
+++ b/go.sum
@@ -179,6 +179,8 @@ github.com/spf13/afero v1.2.2 h1:5jhuqJyZCZf2JRofRvN/nIFgIWNzPa3/Vz8mYylgbWc=
 github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk=
 github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
 github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
+github.com/splunk/go-splunk-client v0.0.1 h1:f4VW1vKqpTUCd13fYQ5/vdohZliolHAEIKfcVOgajdw=
+github.com/splunk/go-splunk-client v0.0.1/go.mod h1:PBd+U0yLaO2WQTV2uOkvSKRA9tIQA8f7gikMIPCXEDw=
 github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
 github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
@@ -248,10 +250,8 @@ golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7w
 golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da h1:b3NXsE2LusjYGGjL5bxEVZZORm/YEFFrWFjR8eFrw/c=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
diff --git a/vendor/github.com/splunk/go-splunk-client/LICENSE b/vendor/github.com/splunk/go-splunk-client/LICENSE
new file mode 100644
index 00000000..3152df83
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/LICENSE
@@ -0,0 +1,202 @@
+
+                              Apache License
+                        Version 2.0, January 2004
+                     http://www.apache.org/licenses/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+   "License" shall mean the terms and conditions for use, reproduction,
+   and distribution as defined by Sections 1 through 9 of this document.
+
+   "Licensor" shall mean the copyright owner or entity authorized by
+   the copyright owner that is granting the License.
+
+   "Legal Entity" shall mean the union of the acting entity and all
+   other entities that control, are controlled by, or are under common
+   control with that entity. For the purposes of this definition,
+   "control" means (i) the power, direct or indirect, to cause the
+   direction or management of such entity, whether by contract or
+   otherwise, or (ii) ownership of fifty percent (50%) or more of the
+   outstanding shares, or (iii) beneficial ownership of such entity.
+
+   "You" (or "Your") shall mean an individual or Legal Entity
+   exercising permissions granted by this License.
+
+   "Source" form shall mean the preferred form for making modifications,
+   including but not limited to software source code, documentation
+   source, and configuration files.
+
+   "Object" form shall mean any form resulting from mechanical
+   transformation or translation of a Source form, including but
+   not limited to compiled object code, generated documentation,
+   and conversions to other media types.
+
+   "Work" shall mean the work of authorship, whether in Source or
+   Object form, made available under the License, as indicated by a
+   copyright notice that is included in or attached to the work
+   (an example is provided in the Appendix below).
+
+   "Derivative Works" shall mean any work, whether in Source or Object
+   form, that is based on (or derived from) the Work and for which the
+   editorial revisions, annotations, elaborations, or other modifications
+   represent, as a whole, an original work of authorship. For the purposes
+   of this License, Derivative Works shall not include works that remain
+   separable from, or merely link (or bind by name) to the interfaces of,
+   the Work and Derivative Works thereof.
+
+   "Contribution" shall mean any work of authorship, including
+   the original version of the Work and any modifications or additions
+   to that Work or Derivative Works thereof, that is intentionally
+   submitted to Licensor for inclusion in the Work by the copyright owner
+   or by an individual or Legal Entity authorized to submit on behalf of
+   the copyright owner. For the purposes of this definition, "submitted"
+   means any form of electronic, verbal, or written communication sent
+   to the Licensor or its representatives, including but not limited to
+   communication on electronic mailing lists, source code control systems,
+   and issue tracking systems that are managed by, or on behalf of, the
+   Licensor for the purpose of discussing and improving the Work, but
+   excluding communication that is conspicuously marked or otherwise
+   designated in writing by the copyright owner as "Not a Contribution."
+
+   "Contributor" shall mean Licensor and any individual or Legal Entity
+   on behalf of whom a Contribution has been received by Licensor and
+   subsequently incorporated within the Work.
+
+2. Grant of Copyright License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   copyright license to reproduce, prepare Derivative Works of,
+   publicly display, publicly perform, sublicense, and distribute the
+   Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of
+   this License, each Contributor hereby grants to You a perpetual,
+   worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+   (except as stated in this section) patent license to make, have made,
+   use, offer to sell, sell, import, and otherwise transfer the Work,
+   where such license applies only to those patent claims licensable
+   by such Contributor that are necessarily infringed by their
+   Contribution(s) alone or by combination of their Contribution(s)
+   with the Work to which such Contribution(s) was submitted. If You
+   institute patent litigation against any entity (including a
+   cross-claim or counterclaim in a lawsuit) alleging that the Work
+   or a Contribution incorporated within the Work constitutes direct
+   or contributory patent infringement, then any patent licenses
+   granted to You under this License for that Work shall terminate
+   as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the
+   Work or Derivative Works thereof in any medium, with or without
+   modifications, and in Source or Object form, provided that You
+   meet the following conditions:
+
+   (a) You must give any other recipients of the Work or
+         Derivative Works a copy of this License; and
+
+   (b) You must cause any modified files to carry prominent notices
+         stating that You changed the files; and
+
+   (c) You must retain, in the Source form of any Derivative Works
+         that You distribute, all copyright, patent, trademark, and
+         attribution notices from the Source form of the Work,
+         excluding those notices that do not pertain to any part of
+         the Derivative Works; and
+
+   (d) If the Work includes a "NOTICE" text file as part of its
+         distribution, then any Derivative Works that You distribute must
+         include a readable copy of the attribution notices contained
+         within such NOTICE file, excluding those notices that do not
+         pertain to any part of the Derivative Works, in at least one
+         of the following places: within a NOTICE text file distributed
+         as part of the Derivative Works; within the Source form or
+         documentation, if provided along with the Derivative Works; or,
+         within a display generated by the Derivative Works, if and
+         wherever such third-party notices normally appear. The contents
+         of the NOTICE file are for informational purposes only and
+         do not modify the License. You may add Your own attribution
+         notices within Derivative Works that You distribute, alongside
+         or as an addendum to the NOTICE text from the Work, provided
+         that such additional attribution notices cannot be construed
+         as modifying the License.
+
+   You may add Your own copyright statement to Your modifications and
+   may provide additional or different license terms and conditions
+   for use, reproduction, or distribution of Your modifications, or
+   for any such Derivative Works as a whole, provided Your use,
+   reproduction, and distribution of the Work otherwise complies with
+   the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+   any Contribution intentionally submitted for inclusion in the Work
+   by You to the Licensor shall be under the terms and conditions of
+   this License, without any additional terms or conditions.
+   Notwithstanding the above, nothing herein shall supersede or modify
+   the terms of any separate license agreement you may have executed
+   with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade
+   names, trademarks, service marks, or product names of the Licensor,
+   except as required for reasonable and customary use in describing the
+   origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+   agreed to in writing, Licensor provides the Work (and each
+   Contributor provides its Contributions) on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+   implied, including, without limitation, any warranties or conditions
+   of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+   PARTICULAR PURPOSE. You are solely responsible for determining the
+   appropriateness of using or redistributing the Work and assume any
+   risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+   whether in tort (including negligence), contract, or otherwise,
+   unless required by applicable law (such as deliberate and grossly
+   negligent acts) or agreed to in writing, shall any Contributor be
+   liable to You for damages, including any direct, indirect, special,
+   incidental, or consequential damages of any character arising as a
+   result of this License or out of the use or inability to use the
+   Work (including but not limited to damages for loss of goodwill,
+   work stoppage, computer failure or malfunction, or any and all
+   other commercial damages or losses), even if such Contributor
+   has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+   the Work or Derivative Works thereof, You may choose to offer,
+   and charge a fee for, acceptance of support, warranty, indemnity,
+   or other liability obligations and/or rights consistent with this
+   License. However, in accepting such obligations, You may act only
+   on Your own behalf and on Your sole responsibility, not on behalf
+   of any other Contributor, and only if You agree to indemnify,
+   defend, and hold each Contributor harmless for any liability
+   incurred by, or claims asserted against, such Contributor by reason
+   of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Apache License to your work.
+
+   To apply the Apache License to your work, attach the following
+   boilerplate notice, with the fields enclosed by brackets "[]"
+   replaced with your own identifying information. (Don't include
+   the brackets!)  The text should be enclosed in the appropriate
+   comment syntax for the file format. We also recommend that a
+   file or class name and description of purpose be included on the
+   same "printed page" as the copyright notice for easier
+   identification within third-party archives.
+
+Copyright [yyyy] [name of copyright owner]
+
+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.
diff --git a/vendor/github.com/splunk/go-splunk-client/NOTICE b/vendor/github.com/splunk/go-splunk-client/NOTICE
new file mode 100644
index 00000000..d9060285
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/NOTICE
@@ -0,0 +1,81 @@
+Go SDK for Splunk
+Copyright 2022 Splunk, 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.
+
+
+======================== Go Language Library ==========================
+This product bundles the Go Language library, which is available under
+a "3-clause BSD" license, hosted at https://cs.opensource.google/go/x/text.
+
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+======================== Go Networking Library ========================
+
+This product bundles the Go Networking library, which is available under
+a "3-clause BSD" license, hosted at https://cs.opensource.google/go/x/net.
+
+Copyright (c) 2009 The Go Authors. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+   * Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+   * Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following disclaimer
+in the documentation and/or other materials provided with the
+distribution.
+   * Neither the name of Google Inc. nor the names of its
+contributors may be used to endorse or promote products derived from
+this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/attributes/attributes.go b/vendor/github.com/splunk/go-splunk-client/pkg/attributes/attributes.go
new file mode 100644
index 00000000..6495f65a
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/attributes/attributes.go
@@ -0,0 +1,96 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 attributes provides types that can represent explicitly set values,
+// including the zero values of their stored types, to enable HTTP requests to
+// account for all intended parameter values.
+package attributes
+
+import (
+	"encoding/json"
+	"fmt"
+	"strconv"
+)
+
+// Storable defines the types storable by ExplicitValue.
+type Storable interface {
+	bool | int | string
+}
+
+// Explicit is permits storing a value such that it can be explicitly empty/zero.
+type Explicit[T Storable] struct {
+	set   bool
+	value T
+}
+
+// GetURLValue implements custom encoding of its url.Values value.
+func (e Explicit[T]) GetURLValue() interface{} {
+	return e.value
+}
+
+// Set explicitly sets the value.
+func (e *Explicit[T]) Set(value T) {
+	e.set = true
+	e.value = value
+}
+
+// NewExplicit returns a new Explicit with its value explicitly set.
+func NewExplicit[T Storable](value T) (newExplicitValue Explicit[T]) {
+	newExplicitValue.Set(value)
+
+	return
+}
+
+// UnmarshalJSON implements custom JSON unmarshaling. The unmarshaled is explicitly set.
+func (e *Explicit[T]) UnmarshalJSON(data []byte) error {
+	var newValue T
+
+	if err := json.Unmarshal(data, &newValue); err != nil {
+		return err
+	}
+
+	e.Set(newValue)
+
+	return nil
+}
+
+// Bool returns a value indicating the boolean representation of the stored value, and
+// another boolean that will be true only if the value was explicitly set, and it can
+// be parsed by strconv.ParseBool without error.
+func (e Explicit[T]) Bool() (value bool, ok bool) {
+	if !e.set {
+		return
+	}
+
+	strValue := fmt.Sprint(e.value)
+	value, err := strconv.ParseBool(strValue)
+	ok = err == nil
+
+	return
+}
+
+// Value returns the stored value.
+func (e Explicit[T]) Value() T {
+	return e.value
+}
+
+// ValueOk returns the stored value and a boolean indicating if it was explicitly set.
+func (e Explicit[T]) ValueOk() (T, bool) {
+	return e.value, e.set
+}
+
+// String returns the defualt string representation of the stored value.
+func (e Explicit[T]) String() string {
+	return fmt.Sprint(e.value)
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/attributes/named_parameters.go b/vendor/github.com/splunk/go-splunk-client/pkg/attributes/named_parameters.go
new file mode 100644
index 00000000..08556847
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/attributes/named_parameters.go
@@ -0,0 +1,111 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 attributes
+
+import (
+	"encoding/json"
+	"fmt"
+	"reflect"
+)
+
+// NamedParameters represent a set of Parameters that are associated with an overall Name.
+type NamedParameters struct {
+	// Name is the overall name of this set of Parameters. It is likely the leftmost segment
+	// of a dotted parameter name, such as "actions" for "actions.email".
+	Name string `values:"-"`
+
+	// Status is the string representation of a NamedParameters' status. This is typically
+	// true/false or 0/1, and is the value associated directly with the name segment, such as
+	// email=true.
+	Status Explicit[string] `values:",omitzero,anonymize"`
+
+	Parameters Parameters `values:",omitzero,anonymize"`
+}
+
+// GetURLKey implements custom key encoding for url.Values.
+func (params NamedParameters) GetURLKey(parentKey string, childKey string) (string, error) {
+	if params.Name == "" {
+		return "", fmt.Errorf("attributes: unable to determine url.Values key for empty NamedParameters.Name")
+	}
+
+	return fmt.Sprintf("%s.%s", parentKey, params.Name), nil
+}
+
+// NamedParametersCollection is a collection of NamedParameters.
+type NamedParametersCollection []NamedParameters
+
+// EnabledNames returns a list of Names of the member NamedParameters that have a true Status value.
+func (collection NamedParametersCollection) EnabledNames() []string {
+	var enabled []string
+
+	for _, params := range collection {
+		if isEnabled, ok := params.Status.Bool(); ok && isEnabled {
+			enabled = append(enabled, params.Name)
+		}
+	}
+
+	return enabled
+}
+
+// UnmarshalJSONForNamedParametersCollections unmarshals JSON data into the given dest interface. dest must be
+// a pointer to a struct, and any struct fields with the "named_parameters_collection" tag must be of the
+// NamedParametersCollection type.
+//
+// This method exists to enable unmarshaling of the same level of a JSON document to a struct and also
+// to NamedParametersCollection fields of the same struct.
+func UnmarshalJSONForNamedParametersCollections(data []byte, dest interface{}) error {
+	destVPtr := reflect.ValueOf(dest)
+	if destVPtr.Kind() != reflect.Ptr {
+		return fmt.Errorf("attempted UnmarshalJSONForNamedParametersCollection on non-pointer type: %T", dest)
+	}
+
+	destV := destVPtr.Elem()
+	destT := destV.Type()
+
+	if destT.Kind() != reflect.Struct {
+		return fmt.Errorf("attempted UnmarshalJSONForNamedParametersCollection on non-struct type: %T", dest)
+	}
+
+	for i := 0; i < destT.NumField(); i++ {
+		fieldF := destT.Field(i)
+		if !fieldF.IsExported() {
+			continue
+		}
+
+		fieldTag := fieldF.Tag.Get("named_parameters_collection")
+		if fieldTag == "" {
+			continue
+		}
+
+		var collection NamedParametersCollection
+		if fieldF.Type != reflect.TypeOf(collection) {
+			return fmt.Errorf("attempted UnmarshalJSONForNamedParametersCollection on non-NamedParametersCollection type %T for field %s", destV.Field(i).Interface(), fieldF.Name)
+		}
+
+		var allParams Parameters
+		if err := json.Unmarshal(data, &allParams); err != nil {
+			return err
+		}
+
+		newParams := allParams.withDottedName(fieldTag)
+
+		newCollection := newParams.namedParametersCollection()
+		newCollectionV := reflect.ValueOf(newCollection)
+
+		destV.Field(i).Set(newCollectionV)
+	}
+
+	return nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/attributes/parameters.go b/vendor/github.com/splunk/go-splunk-client/pkg/attributes/parameters.go
new file mode 100644
index 00000000..13599ae2
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/attributes/parameters.go
@@ -0,0 +1,210 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 attributes
+
+import (
+	"encoding/json"
+	"fmt"
+	"net/url"
+	"reflect"
+	"sort"
+	"strings"
+)
+
+// dottedParameterNameParts parses a dotted parameter name and returns the first segment as name,
+// and the remaining segments as paramName. If there are not multiple segments, name will be empty.
+//
+// For example:
+//
+//   dottedParameterNameParts("name")
+//   # ("name", "")
+//
+//   dottedParameterNameParts("actions.email.to")
+//   # ("actions", "email.to")
+func dottedParameterNameParts(fullFieldName string) (name string, paramName string) {
+	parts := strings.Split(fullFieldName, ".")
+
+	return parts[0], strings.Join(parts[1:], ".")
+}
+
+// Parameters is a map of parameter names to string values.
+type Parameters map[string]string
+
+// withDottedName returns a new Parameters object containing the nested parameters
+// for the given name. The new Parameters name field will have this name prefix removed.
+//
+// For example:
+//
+//   Parameters{"action.email": "true", "action.email.to": "whoever@example.com"}.withDottedName("action")
+//   # Parameters{"email": "true", "email.to": "whoever@example.com"}
+func (p Parameters) withDottedName(name string) Parameters {
+	var newParameters Parameters
+
+	for key, value := range p {
+		fieldName, fieldParamName := dottedParameterNameParts(key)
+
+		if fieldName == name && fieldParamName != "" {
+			if newParameters == nil {
+				newParameters = Parameters{}
+			}
+
+			newParameters[fieldParamName] = value
+		}
+	}
+
+	return newParameters
+}
+
+// namedParametersWithDottedName returns a NamedParameters with the given name and Status and Parameter values
+// as calculated from the input Parameters.
+//
+//   Parameters{"email":"true","email.to":"whoever@example.com"}.namedParametersWithDottedName("email")
+//   # NamedParameters{Name: "email", Status: "true", Parameters{"to": "whoever@example.com"}}
+func (p Parameters) namedParametersWithDottedName(name string) NamedParameters {
+	newParams := NamedParameters{
+		Name:       name,
+		Parameters: p.withDottedName(name),
+	}
+
+	// Status only set explicitly if there was a <name> key is present in Parameters
+	if statusValue, ok := p[name]; ok {
+		newParams.Status = NewExplicit(statusValue)
+	}
+
+	return newParams
+}
+
+// dottedNames returns the list of top-level names of fields in Parameters.
+func (p Parameters) dottedNames() []string {
+	foundNamesMap := map[string]bool{}
+	var foundNames []string
+
+	for key := range p {
+		fieldName, _ := dottedParameterNameParts(key)
+
+		if _, ok := foundNamesMap[fieldName]; !ok {
+			foundNames = append(foundNames, fieldName)
+		}
+		foundNamesMap[fieldName] = true
+	}
+
+	sort.Strings(foundNames)
+
+	return foundNames
+}
+
+// namedParametersCollection returns a NamedParametersCollection containing a NamedParameters object
+// for each top-level name of Parameters.
+func (p Parameters) namedParametersCollection() NamedParametersCollection {
+	names := p.dottedNames()
+	var newCollection NamedParametersCollection
+
+	for _, name := range names {
+		newCollection = append(newCollection, p.namedParametersWithDottedName(name))
+	}
+
+	return newCollection
+}
+
+// UnmarshalJSON implements custom JSON unmarshaling which assumes the content being unmarshaled is a simple map of strings
+// to a single value (string, bool, float, int). It returns an error if a value other than these types is encountered.
+func (p *Parameters) UnmarshalJSON(data []byte) error {
+	interfaceMap := map[string]interface{}{}
+	if err := json.Unmarshal(data, &interfaceMap); err != nil {
+		return err
+	}
+
+	newP := Parameters{}
+	for key, value := range interfaceMap {
+		valueV := reflect.ValueOf(value)
+		if !valueV.IsValid() {
+			// invalid reflect.Value indicates a nil value, which we can safely ignore
+			continue
+		}
+
+		switch valueV.Kind() {
+		default:
+			return fmt.Errorf("unable to unmarshal unhandled type %T into Parameters for key %s", value, key)
+		case reflect.String, reflect.Bool, reflect.Float32, reflect.Float64, reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
+			newP[key] = fmt.Sprintf("%v", value)
+		}
+	}
+
+	if len(newP) == 0 {
+		return nil
+	}
+
+	*p = newP
+
+	return nil
+}
+
+// SetURLValues implements custom encoding into url.Values.
+func (p Parameters) SetURLValues(key string, v *url.Values) error {
+	for paramKey, paramValue := range p {
+		valueKey := strings.Join([]string{key, paramKey}, ".")
+
+		v.Set(valueKey, paramValue)
+	}
+
+	return nil
+}
+
+// UnmarshalJSONForParameters unmarshals JSON data into the given dest interface. dest must be a pointer
+// to a struct, and any struct fields with the "parameters" tag must be of the Parameters type.
+//
+// This method exists to enable unmarshaling of the same level of a JSON document to a struct and also
+// to Parameters fields of the same struct.
+func UnmarshalJSONForParameters(data []byte, dest interface{}) error {
+	destVPtr := reflect.ValueOf(dest)
+	if destVPtr.Kind() != reflect.Ptr {
+		return fmt.Errorf("attempted UnmarshalJSONForParameters on non-pointer type: %T", dest)
+	}
+
+	destV := destVPtr.Elem()
+	destT := destV.Type()
+
+	if destT.Kind() != reflect.Struct {
+		return fmt.Errorf("attempted UnmarshalJSONForParameters on non-struct type: %T", dest)
+	}
+
+	for i := 0; i < destT.NumField(); i++ {
+		fieldF := destT.Field(i)
+		if !fieldF.IsExported() {
+			continue
+		}
+
+		fieldTag := fieldF.Tag.Get("parameters")
+		if fieldTag == "" {
+			continue
+		}
+
+		allParams := make(Parameters)
+		if fieldF.Type != reflect.TypeOf(allParams) {
+			return fmt.Errorf("attempted UnmarshalJSONForParameters on non-Parameters type %T for field %s", destV.Field(i).Interface(), fieldF.Name)
+		}
+
+		if err := json.Unmarshal(data, &allParams); err != nil {
+			return err
+		}
+
+		newParams := allParams.withDottedName(fieldTag)
+		newParamsV := reflect.ValueOf(newParams)
+
+		destV.Field(i).Set(newParamsV)
+	}
+
+	return nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/authenticator_test_cases.go b/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/authenticator_test_cases.go
new file mode 100644
index 00000000..c19b6412
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/authenticator_test_cases.go
@@ -0,0 +1,57 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 authenticators
+
+import (
+	"net/http"
+	"testing"
+
+	"github.com/splunk/go-splunk-client/pkg/client"
+	"github.com/splunk/go-splunk-client/pkg/internal/checks"
+)
+
+// AuthenticatorTestCase defines a test against a specific Authenticator and Client.
+type AuthenticatorTestCase struct {
+	name               string
+	inputAuthenticator client.Authenticator
+	inputClient        *client.Client
+	wantError          bool
+	requestCheck       checks.CheckRequestFunc
+}
+
+// test performs a AuthenticatorTestCase's defined test.
+func (test AuthenticatorTestCase) test(t *testing.T) {
+	r := &http.Request{}
+	err := test.inputAuthenticator.AuthenticateRequest(test.inputClient, r)
+	gotError := err != nil
+
+	if gotError != test.wantError {
+		t.Errorf("%s AuthenticateRequest returned error? %v", test.name, gotError)
+	}
+
+	if test.requestCheck != nil {
+		test.requestCheck(r, t)
+	}
+}
+
+// AuthenticatorTestCases is a list of AuthenticatorTestCase instances.
+type AuthenticatorTestCases []AuthenticatorTestCase
+
+// test performs the test for each of its AuthenticatorTestCase items.
+func (tests AuthenticatorTestCases) test(t *testing.T) {
+	for _, test := range tests {
+		test.test(t)
+	}
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/authenticators.go b/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/authenticators.go
new file mode 100644
index 00000000..cbe205cb
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/authenticators.go
@@ -0,0 +1,17 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 authenticators provides types that authenticate to the Splunk REST API
+// and satisfy the client.Authenticator interface.
+package authenticators
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/password.go b/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/password.go
new file mode 100644
index 00000000..a488c91e
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/password.go
@@ -0,0 +1,94 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 authenticators
+
+import (
+	"net/http"
+	"sync"
+
+	"github.com/splunk/go-splunk-client/pkg/client"
+)
+
+// Password defines password authentication to Splunk.
+type Password struct {
+	Username string `values:"username"`
+	Password string `values:"password"`
+
+	// UseBasicAuth can be set to true if Basic Authentication should always be used,
+	// which causes Username/Password to be passed with each authenticated request.
+	UseBasicAuth bool `values:"-"`
+
+	// SessionKey holds the SessionKey after initial authentication occurs. Unless
+	// UseBasicAuth is set to true, this SessionKey will be used to authenticate requests.
+	SessionKey `url:"-"`
+
+	// mu is used to enable locking to prevent race conditions when checking for and obtaining
+	// a SessionKey.
+	mu sync.Mutex
+
+	// empty Namespace used to satisfy service.ServicePathGetter
+	_ client.Namespace `service:"auth/login"`
+}
+
+// loginResponse represents the response returned from auth/login.
+type loginResponse struct {
+	SessionKey
+}
+
+// authenticate performs the authentication request and handles the response, storing the SessionKey
+// if successful.
+func (p *Password) authenticate(c *client.Client) error {
+	lR := loginResponse{}
+
+	if err := c.RequestAndHandle(
+		client.ComposeRequestBuilder(
+			client.BuildRequestMethod(http.MethodPost),
+			client.BuildRequestServiceURL(c, p),
+			client.BuildRequestBodyValues(p),
+		),
+		client.ComposeResponseHandler(
+			client.HandleResponseCode(http.StatusUnauthorized, client.HandleResponseXMLMessagesCustomError(client.ErrorUnauthorized)),
+			client.HandleResponseRequireCode(http.StatusOK, client.HandleResponseXMLMessagesError()),
+			client.HandleResponseXML(&lR),
+		),
+	); err != nil {
+		return err
+	}
+
+	p.SessionKey = lR.SessionKey
+
+	return nil
+}
+
+// authenticateOnce calls authenticate only if currently unauthenticated.
+func (p *Password) authenticateOnce(c *client.Client) error {
+	p.mu.Lock()
+	defer p.mu.Unlock()
+
+	if !p.authenticated() {
+		return p.authenticate(c)
+	}
+
+	return nil
+}
+
+// AuthenticateRequest adds authentication to an http.Request.
+func (p *Password) AuthenticateRequest(c *client.Client, r *http.Request) error {
+	if err := p.authenticateOnce(c); err != nil {
+		return err
+	}
+
+	return p.SessionKey.AuthenticateRequest(c, r)
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/session_key.go b/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/session_key.go
new file mode 100644
index 00000000..3f55b854
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/session_key.go
@@ -0,0 +1,48 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 authenticators
+
+import (
+	"fmt"
+	"net/http"
+
+	"github.com/splunk/go-splunk-client/pkg/client"
+)
+
+// SessionKey provides authentication to Splunk via a session key.
+type SessionKey struct {
+	// SessionKey is the session key that will be used to authenticate to Splunk.
+	SessionKey string `xml:"sessionKey"`
+}
+
+// authenticated returns true if SessionKey is not empty.
+func (s SessionKey) authenticated() bool {
+	return s.SessionKey != ""
+}
+
+// AuthenticateRequest adds the SessionKey to the http.Request's Header.
+func (s SessionKey) AuthenticateRequest(c *client.Client, r *http.Request) error {
+	if !s.authenticated() {
+		return fmt.Errorf("attempted to authenticate request with empty SessionKey")
+	}
+
+	if r.Header == nil {
+		r.Header = http.Header{}
+	}
+
+	r.Header.Add("Authorization", fmt.Sprintf("Splunk %s", s.SessionKey))
+
+	return nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/token.go b/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/token.go
new file mode 100644
index 00000000..f3ff7c90
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/authenticators/token.go
@@ -0,0 +1,43 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 authenticators
+
+import (
+	"fmt"
+	"net/http"
+
+	"github.com/splunk/go-splunk-client/pkg/client"
+)
+
+// Token provides authentication to Splunk via a bearer token.
+type Token struct {
+	// Token is the token that will be used to authenticate to Splunk.
+	Token string
+}
+
+// AuthenticateRequest adds the Token to the http.Request's Header.
+func (t Token) AuthenticateRequest(c *client.Client, r *http.Request) error {
+	if t.Token == "" {
+		return fmt.Errorf("attempted to authenticate request with empty Token")
+	}
+
+	if r.Header == nil {
+		r.Header = http.Header{}
+	}
+
+	r.Header.Add("Authorization", fmt.Sprintf("Bearer %s", t.Token))
+
+	return nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/client/acl.go b/vendor/github.com/splunk/go-splunk-client/pkg/client/acl.go
new file mode 100644
index 00000000..4561cd12
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/client/acl.go
@@ -0,0 +1,63 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 client
+
+import (
+	"encoding/json"
+
+	"github.com/splunk/go-splunk-client/pkg/attributes"
+)
+
+// Sharing represents the level of sharing of a Splunk object.
+type Sharing string
+
+const (
+	SharingUndefined Sharing = ""
+	SharingGlobal    Sharing = "global"
+	SharingUser      Sharing = "user"
+	SharingApp       Sharing = "app"
+)
+
+// validate returns an error if Sharing is a value other than the predefined Sharing constants.
+func (sharing Sharing) validate() error {
+	switch sharing {
+	default:
+		return wrapError(ErrorSharing, nil, "client: invalid Sharing value %q", sharing)
+	case SharingUndefined, SharingGlobal, SharingUser, SharingApp:
+		return nil
+	}
+}
+
+// MarshalJSON implements custom marshaling.
+func (sharing Sharing) MarshalJSON() ([]byte, error) {
+	if err := sharing.validate(); err != nil {
+		return nil, err
+	}
+
+	return json.Marshal(string(sharing))
+}
+
+// Permissions represents the read/write permissions of a Splunk object.
+type Permissions struct {
+	Read  []string `json:"read"  values:"read,omitzero,fillempty"`
+	Write []string `json:"write" values:"write,omitzero,fillempty"`
+}
+
+// ACL represents the ACL of a Splunk object.
+type ACL struct {
+	Permissions Permissions                 `json:"perms"   values:"perms"`
+	Owner       attributes.Explicit[string] `json:"owner"   values:"owner,omitzero"`
+	Sharing     Sharing                     `json:"sharing" values:"sharing,omitzero"`
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/client/authenticator.go b/vendor/github.com/splunk/go-splunk-client/pkg/client/authenticator.go
new file mode 100644
index 00000000..d6e2e484
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/client/authenticator.go
@@ -0,0 +1,22 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 client
+
+import "net/http"
+
+// Authenticators are capable of adding authentication to requests.
+type Authenticator interface {
+	AuthenticateRequest(*Client, *http.Request) error
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/client/build_request.go b/vendor/github.com/splunk/go-splunk-client/pkg/client/build_request.go
new file mode 100644
index 00000000..af63ee19
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/client/build_request.go
@@ -0,0 +1,186 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 client
+
+import (
+	"io"
+	"net/http"
+	"net/url"
+	"strings"
+
+	"github.com/splunk/go-splunk-client/pkg/selective"
+	"github.com/splunk/go-splunk-client/pkg/service"
+	"github.com/splunk/go-splunk-client/pkg/values"
+)
+
+// defaultStatusCodes set the expected StatusCodes for most CRUD operations. If
+// a given type doesn't override them, responses will be checked against these
+// codes.
+var defaultStatusCodes = service.StatusCodes{
+	Created:  http.StatusCreated,
+	Read:     http.StatusOK,
+	Updated:  http.StatusOK,
+	Deleted:  http.StatusOK,
+	NotFound: http.StatusNotFound,
+}
+
+// RequestBuilder defines a function that performs an operation on an http.Request.
+type RequestBuilder func(*http.Request) error
+
+// ComposeRequestBuilder creates a new RequestBuilder that performs each RequestBuilder
+// provided as an argument, returning the first error encountered, if any.
+func ComposeRequestBuilder(builders ...RequestBuilder) RequestBuilder {
+	return func(r *http.Request) error {
+		for _, builder := range builders {
+			if err := builder(r); err != nil {
+				return err
+			}
+		}
+
+		return nil
+	}
+}
+
+// buildRequest creates a new http.Request and applies the provided RequestBuilder.
+func buildRequest(builder RequestBuilder) (*http.Request, error) {
+	r := &http.Request{}
+
+	if err := builder(r); err != nil {
+		return nil, err
+	}
+
+	return r, nil
+}
+
+// BuildRequestMethod returns a RequestBuilder that sets the given method.
+func BuildRequestMethod(method string) RequestBuilder {
+	return func(r *http.Request) error {
+		r.Method = method
+
+		return nil
+	}
+}
+
+// BuildRequestServiceURL returns a RequestBuilder that sets the URL to the ServiceURL
+// for a given Service.
+func BuildRequestServiceURL(c *Client, service interface{}) RequestBuilder {
+	return func(r *http.Request) error {
+		u, err := c.ServiceURL(service)
+		if err != nil {
+			return err
+		}
+
+		r.URL = u
+
+		return nil
+	}
+}
+
+// BuildRequestBodyValues returns a RequestBuilder that sets the Body to the encoded url.Values for
+// a given interface.
+func BuildRequestBodyValues(i interface{}) RequestBuilder {
+	return func(r *http.Request) error {
+		v, err := values.Encode(i)
+		if err != nil {
+			return wrapError(ErrorValues, err, err.Error())
+		}
+
+		r.Body = io.NopCloser(strings.NewReader(v.Encode()))
+
+		return nil
+	}
+}
+
+// BuildRequestOutputModeJSON returns a RequestBuilder that sets the URL's RawQuery to output_mode=json.
+// It checks that the URL is already set, so it must be applied after setting the URL. It overwrites
+// any existing RawQuery Values.
+func BuildRequestOutputModeJSON() RequestBuilder {
+	return func(r *http.Request) error {
+		if r.URL == nil {
+			return wrapError(ErrorNilValue, nil, "unable to set output mode on nil URL")
+		}
+
+		if r.URL.RawQuery != "" {
+			return wrapError(ErrorOverwriteValue, nil, "attempted to set output_mode after RawQuery already set")
+		}
+
+		r.URL.RawQuery = url.Values{
+			"output_mode": []string{"json"},
+		}.Encode()
+
+		return nil
+	}
+}
+
+// BuildRequestBodyValuesSelective returns a RequestBuilder that sets the Body to the encoded url.Values
+// for a given interface and selective tag.
+func BuildRequestBodyValuesSelective(c interface{}, tag string) RequestBuilder {
+	return func(r *http.Request) error {
+		selected, err := selective.Encode(c, tag)
+		if err != nil {
+			return err
+		}
+
+		return BuildRequestBodyValues(selected)(r)
+	}
+}
+
+// BuildRequestCollectionURL returns a RequestBuilder that sets the URL to the EntryURL
+// for a given Entry.
+func BuildRequestEntryURL(c *Client, entry interface{}) RequestBuilder {
+	return func(r *http.Request) error {
+		u, err := c.EntryURL(entry)
+		if err != nil {
+			return err
+		}
+
+		r.URL = u
+
+		return nil
+	}
+}
+
+// BuildRequestEntryACLURL returns a RequestBuilder that sets the URL to the ACL URL
+// for a given Entry.
+func BuildRequestEntryACLURL(c *Client, entry interface{}, acl ACL) RequestBuilder {
+	return func(r *http.Request) error {
+		u, err := c.EntryACLURL(entry)
+		if err != nil {
+			return err
+		}
+
+		r.URL = u
+
+		return nil
+	}
+}
+
+// BuildRequestAuthenticate returns a RequestBuilder that authenticates a request for a given Client.
+func BuildRequestAuthenticate(c *Client) RequestBuilder {
+	return func(r *http.Request) error {
+		return c.Authenticator.AuthenticateRequest(c, r)
+	}
+}
+
+// BuildRequestGetServiceStatusCodes updates codes for the given entry. It returns a RequestBuilder
+// that returns the error (if any) returned by service.ServiceStatusCodes.
+func BuildRequestGetServiceStatusCodes(entry interface{}, codes *service.StatusCodes) RequestBuilder {
+	newCodes, err := service.ServiceStatusCodes(entry, defaultStatusCodes)
+	*codes = newCodes
+
+	return func(r *http.Request) error {
+		return err
+	}
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/client/client.go b/vendor/github.com/splunk/go-splunk-client/pkg/client/client.go
new file mode 100644
index 00000000..b259eb41
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/client/client.go
@@ -0,0 +1,332 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 client implements a client to the Splunk REST API.
+package client
+
+import (
+	"crypto/tls"
+	"net/http"
+	"net/http/cookiejar"
+	"net/url"
+	"reflect"
+	"sync"
+	"time"
+
+	"github.com/splunk/go-splunk-client/pkg/deepset"
+	"github.com/splunk/go-splunk-client/pkg/internal/paths"
+	"github.com/splunk/go-splunk-client/pkg/service"
+	"golang.org/x/net/publicsuffix"
+)
+
+const (
+	defaultTimeout = time.Minute * 5
+)
+
+// Client defines connectivity and authentication to a Splunk REST API.
+type Client struct {
+	// URL is the URL to the Splunk REST API. It should include the scheme and port number.
+	//
+	// Example:
+	//   https://localhost:8089
+	URL string
+
+	// Authenticator defines which authentication method and credentials to use.
+	//
+	// Example:
+	//   authenticators.Password{Username: "admin", Password: "changeme"}
+	Authenticator
+
+	// Set TLSInsecureSkipVerify to true to skip TLS verification.
+	TLSInsecureSkipVerify bool
+
+	// Timeout configures the timeout of requests. If unspecified, defaults to 5 minutes.
+	Timeout time.Duration
+
+	httpClient *http.Client
+	mu         sync.Mutex
+}
+
+// urlForPath returns a url.URL for path, relative to Client's URL.
+func (c *Client) urlForPath(path ...string) (*url.URL, error) {
+	if c.URL == "" {
+		return nil, wrapError(ErrorMissingURL, nil, "Client has empty URL")
+	}
+
+	combinedPath := paths.Join(path...)
+
+	u := paths.Join(c.URL, combinedPath)
+
+	return url.Parse(u)
+}
+
+// ServiceURL returns a url.URL for a Service, relative to the Client's URL.
+func (c *Client) ServiceURL(s interface{}) (*url.URL, error) {
+	servicePath, err := service.ServicePath(s)
+	if err != nil {
+		return nil, err
+	}
+
+	return c.urlForPath(servicePath)
+}
+
+// EntryURL returns a url.URL for an Entry, relative to the Client's URL.
+func (c *Client) EntryURL(e interface{}) (*url.URL, error) {
+	entryPath, err := service.EntryPath(e)
+	if err != nil {
+		return nil, err
+	}
+
+	return c.urlForPath(entryPath)
+}
+
+func (c *Client) EntryACLURL(e interface{}) (*url.URL, error) {
+	entryPath, err := service.EntryPath(e)
+	if err != nil {
+		return nil, err
+	}
+
+	return c.urlForPath(entryPath, "acl")
+}
+
+// httpClientPrep prepares the Client's http.Client.
+func (c *Client) httpClientPrep() error {
+	c.mu.Lock()
+	defer c.mu.Unlock()
+
+	if c.httpClient == nil {
+		jar, err := cookiejar.New(&cookiejar.Options{PublicSuffixList: publicsuffix.List})
+		if err != nil {
+			return wrapError(ErrorHTTPClient, err, "unable to create new cookiejar: %s", err)
+		}
+
+		timeout := c.Timeout
+		if timeout == 0 {
+			timeout = defaultTimeout
+		}
+
+		c.httpClient = &http.Client{
+			Timeout: timeout,
+			Transport: &http.Transport{
+				Proxy: http.ProxyFromEnvironment,
+				TLSClientConfig: &tls.Config{
+					InsecureSkipVerify: c.TLSInsecureSkipVerify,
+				},
+			},
+			Jar: jar,
+		}
+	}
+
+	return nil
+}
+
+// do performs a given http.Request via the Client's http.Client.
+func (c *Client) do(r *http.Request) (*http.Response, error) {
+	if err := c.httpClientPrep(); err != nil {
+		return nil, err
+	}
+
+	resp, err := c.httpClient.Do(r)
+	if err != nil {
+		return nil, wrapError(ErrorHTTPClient, err, "error encountered performing request: %s", err)
+	}
+
+	return resp, nil
+}
+
+// RequestAndHandle creates a new http.Request from the given RequestBuilder, performs the
+// request, and handles the http.Response with the given ResponseHandler.
+func (c *Client) RequestAndHandle(builder RequestBuilder, handler ResponseHandler) error {
+	req, err := buildRequest(builder)
+	if err != nil {
+		return err
+	}
+
+	resp, err := c.do(req)
+	if err != nil {
+		return err
+	}
+	defer resp.Body.Close()
+
+	return handler(resp)
+}
+
+// Create performs a Create action for the given Entry.
+func (client *Client) Create(entry interface{}) error {
+	var codes service.StatusCodes
+
+	return client.RequestAndHandle(
+		ComposeRequestBuilder(
+			BuildRequestGetServiceStatusCodes(entry, &codes),
+			BuildRequestMethod(http.MethodPost),
+			BuildRequestServiceURL(client, entry),
+			BuildRequestOutputModeJSON(),
+			BuildRequestBodyValuesSelective(entry, "create"),
+			BuildRequestAuthenticate(client),
+		),
+		ComposeResponseHandler(
+			HandleResponseRequireCode(codes.Created, HandleResponseJSONMessagesError()),
+		),
+	)
+}
+
+// Read performs a Read action for the given Entry. It modifies entry in-place,
+// so entry must be a pointer.
+func (client *Client) Read(entry interface{}) error {
+	var codes service.StatusCodes
+
+	return client.RequestAndHandle(
+		ComposeRequestBuilder(
+			BuildRequestGetServiceStatusCodes(entry, &codes),
+			BuildRequestMethod(http.MethodGet),
+			BuildRequestEntryURL(client, entry),
+			BuildRequestOutputModeJSON(),
+			BuildRequestAuthenticate(client),
+		),
+		ComposeResponseHandler(
+			HandleResponseCode(codes.NotFound, HandleResponseJSONMessagesCustomError(ErrorNotFound)),
+			HandleResponseRequireCode(codes.Read, HandleResponseJSONMessagesError()),
+			HandleResponseEntry(entry),
+		),
+	)
+}
+
+// Update performs an Update action for the given Entry.
+func (client *Client) Update(entry interface{}) error {
+	var codes service.StatusCodes
+
+	return client.RequestAndHandle(
+		ComposeRequestBuilder(
+			BuildRequestGetServiceStatusCodes(entry, &codes),
+			BuildRequestMethod(http.MethodPost),
+			BuildRequestEntryURL(client, entry),
+			BuildRequestOutputModeJSON(),
+			BuildRequestBodyValuesSelective(entry, "update"),
+			BuildRequestAuthenticate(client),
+		),
+		ComposeResponseHandler(
+			HandleResponseRequireCode(codes.Updated, HandleResponseJSONMessagesError()),
+		),
+	)
+}
+
+// Delete performs a Delete action for the given Entry.
+func (client *Client) Delete(entry interface{}) error {
+	var codes service.StatusCodes
+
+	return client.RequestAndHandle(
+		ComposeRequestBuilder(
+			BuildRequestGetServiceStatusCodes(entry, &codes),
+			BuildRequestMethod(http.MethodDelete),
+			BuildRequestEntryURL(client, entry),
+			BuildRequestOutputModeJSON(),
+			BuildRequestAuthenticate(client),
+		),
+		ComposeResponseHandler(
+			HandleResponseRequireCode(codes.Deleted, HandleResponseJSONMessagesError()),
+		),
+	)
+}
+
+func (client *Client) listModified(entries interface{}, modifier interface{}) error {
+	entriesPtrV := reflect.ValueOf(entries)
+	if entriesPtrV.Kind() != reflect.Ptr {
+		return wrapError(ErrorPtr, nil, "client: List attempted on on-pointer value")
+	}
+
+	entriesV := reflect.Indirect(entriesPtrV)
+	if entriesV.Kind() != reflect.Slice {
+		return wrapError(ErrorSlice, nil, "client: List attempted on non-slice value")
+	}
+	entryT := entriesV.Type().Elem()
+	entryI := reflect.New(entryT).Interface()
+
+	if modifier != nil {
+		if err := deepset.Set(entryI, modifier); err != nil {
+			return err
+		}
+	}
+
+	return client.RequestAndHandle(
+		ComposeRequestBuilder(
+			BuildRequestMethod(http.MethodGet),
+			BuildRequestEntryURL(client, entryI),
+			BuildRequestOutputModeJSON(),
+			BuildRequestAuthenticate(client),
+		),
+		ComposeResponseHandler(
+			HandleResponseRequireCode(http.StatusOK, HandleResponseJSONMessagesError()),
+			HandleResponseEntries(entries),
+		),
+	)
+}
+
+// ListNamespace populates entries in place for a Namespace.
+func (client *Client) ListNamespace(entries interface{}, ns Namespace) error {
+	return client.listModified(entries, ns)
+}
+
+// ListNamespace populates entries in place for an ID.
+func (client *Client) ListID(entries interface{}, id ID) error {
+	return client.listModified(entries, id)
+}
+
+// ListNamespace populates entries in place without any ID or Namespace context.
+func (client *Client) List(entries interface{}) error {
+	return client.listModified(entries, nil)
+}
+
+// ReadACL performs a ReadACL action for the given Entry. It modifies acl in-place,
+// so acl must be a pointer.
+func (client *Client) ReadACL(entry interface{}, acl *ACL) error {
+	var aclResponse struct {
+		ACL ACL `json:"acl"`
+	}
+
+	if err := client.RequestAndHandle(
+		ComposeRequestBuilder(
+			BuildRequestMethod(http.MethodGet),
+			BuildRequestEntryACLURL(client, entry, *acl),
+			BuildRequestOutputModeJSON(),
+			BuildRequestAuthenticate(client),
+		),
+		ComposeResponseHandler(
+			HandleResponseCode(http.StatusNotFound, HandleResponseJSONMessagesCustomError(ErrorNotFound)),
+			HandleResponseRequireCode(http.StatusOK, HandleResponseJSONMessagesError()),
+			HandleResponseEntry(&aclResponse),
+		),
+	); err != nil {
+		return err
+	}
+
+	*acl = aclResponse.ACL
+
+	return nil
+}
+
+// UpdateACL performs an UpdateACL action for the given Entry.
+func (client *Client) UpdateACL(entry interface{}, acl ACL) error {
+	return client.RequestAndHandle(
+		ComposeRequestBuilder(
+			BuildRequestMethod(http.MethodPost),
+			BuildRequestEntryACLURL(client, entry, acl),
+			BuildRequestBodyValues(acl),
+			BuildRequestOutputModeJSON(),
+			BuildRequestAuthenticate(client),
+		),
+		ComposeResponseHandler(
+			HandleResponseRequireCode(http.StatusOK, HandleResponseJSONMessagesError()),
+		),
+	)
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/client/conf_id.go b/vendor/github.com/splunk/go-splunk-client/pkg/client/conf_id.go
new file mode 100644
index 00000000..abdebbdc
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/client/conf_id.go
@@ -0,0 +1,128 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 client
+
+import (
+	"encoding/json"
+	"fmt"
+	"net/url"
+	"regexp"
+
+	"github.com/splunk/go-splunk-client/pkg/internal/paths"
+)
+
+// ConfID represents the ID of configs/conf-<file> resources.
+type ConfID struct {
+	Namespace Namespace
+
+	File   string
+	Stanza string
+}
+
+// parseConfID returns a new ConfsID by parsing the ID URL string.
+func parseConfID(idURL string) (ConfID, error) {
+	newNS, remnants, err := parseNamespace(idURL)
+	if err != nil {
+		return ConfID{}, err
+	}
+
+	if len(remnants) < 2 {
+		return ConfID{}, wrapError(ErrorID, nil, "client: parseNamespace didn't return remnants for ConfID.File and ConfID.Stanza")
+	}
+
+	fileRemnant := remnants[len(remnants)-2]
+	stanzaRemnant := remnants[len(remnants)-1]
+
+	r := regexp.MustCompile("^conf-(.+)$")
+	// remnants[0]
+	foundFileStrings := r.FindStringSubmatch(fileRemnant)
+	if foundFileStrings == nil {
+		return ConfID{}, wrapError(ErrorID, nil, "client: unable to parse %q for ConfID.File", fileRemnant)
+	}
+	// [0] is the full match, [1] is the first capture group
+	foundFile := foundFileStrings[1]
+
+	return ConfID{
+		Namespace: newNS,
+		File:      foundFile,
+		Stanza:    stanzaRemnant,
+	}, nil
+}
+
+// Parse sets the ID's value to match what is parsed from the given ID URL.
+func (confID *ConfID) Parse(idURL string) error {
+	newConfID, err := parseConfID(idURL)
+	if err != nil {
+		return err
+	}
+
+	*confID = newConfID
+
+	return nil
+}
+
+// GetServicePath implements custom GetServicePath encoding.
+func (confID ConfID) GetServicePath(path string) (string, error) {
+	if confID.File == "" {
+		return "", wrapError(ErrorID, nil, "client: attempted ConfID.GetServicePath() with empty File")
+	}
+
+	nsServicePath, err := confID.Namespace.GetServicePath(path)
+	if err != nil {
+		return "", err
+	}
+
+	return paths.Join(
+		nsServicePath,
+		fmt.Sprintf("conf-%s", confID.File),
+	), nil
+}
+
+// GetEntryPath implements custom GetEntryPath encoding.
+func (confID ConfID) GetEntryPath(path string) (string, error) {
+	servicePath, err := confID.GetServicePath(path)
+	if err != nil {
+		return "", err
+	}
+
+	return paths.Join(servicePath, url.PathEscape(confID.Stanza)), nil
+}
+
+// UnmarshalJSON implements custom JSON unmarshaling for ConfID.
+func (confID *ConfID) UnmarshalJSON(data []byte) error {
+	idString := ""
+	if err := json.Unmarshal(data, &idString); err != nil {
+		return wrapError(ErrorID, err, "client: unable to unmarshal %q as string", data)
+	}
+
+	if err := confID.Parse(idString); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// SetURLValues implements custom url.Query encoding of ConfID. It adds a field "name" for the ConfID's
+// Stanza. If the Title value is empty, it returns an error, as there are no scenarios where a ConfID
+// object is expected to be POSTed with an empty Stanza.
+func (confID ConfID) SetURLValues(key string, v *url.Values) error {
+	if confID.Stanza == "" {
+		return wrapError(ErrorID, nil, "client: attempted SetURLValues on ConfID with empty Stanza")
+	}
+
+	v.Add("name", confID.Stanza)
+
+	return nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/client/error.go b/vendor/github.com/splunk/go-splunk-client/pkg/client/error.go
new file mode 100644
index 00000000..668436a5
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/client/error.go
@@ -0,0 +1,116 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 client
+
+import (
+	"fmt"
+	"runtime/debug"
+)
+
+// ErrorCode identifies the type of error that was encountered.
+type ErrorCode int
+
+const (
+	// ErrorUndefined is the zero-value, indicating that the error type
+	// has not been defined.
+	ErrorUndefined ErrorCode = iota
+
+	// ErrorNamespace indicates an error with the Namespace.
+	ErrorNamespace
+
+	// ErrorEndpoint indicates an error with the Endpoint configuration.
+	ErrorEndpoint
+
+	// ErrorValues indicates an error was encountered while trying to encode
+	// to url.Values.
+	ErrorValues
+
+	// ErrorNilValue indicates an attempt to perform an action against a nil value,
+	// such as attempting to set RawQuery on http.Request with a nil URL.
+	ErrorNilValue
+
+	// ErrorOverwriteValue indicates an attempt to overwrite an existing value,
+	// such as attempting to set RawQuery multiple times on a URL.
+	ErrorOverwriteValue
+
+	// ErrorMissingTitle indicates an operation that required a non-empty Title was
+	// attempted with an empty Title.
+	ErrorMissingTitle
+
+	// ErrorMissingURL indicates the Client's URL value is missing.
+	ErrorMissingURL
+
+	// ErrorHTTPClient indicates an error related to the http.Client was encountered.
+	ErrorHTTPClient
+
+	// ErrorResponseBody indicates an error encountered while trying to parse the Body
+	// from an http.Response.
+	ErrorResponseBody
+
+	// ErrorSplunkMessage indicates the Splunk REST API returned an error message.
+	ErrorSplunkMessage
+
+	// ErrorUnauthorized indicates a request was unauthorized.
+	ErrorUnauthorized
+
+	// ErrorNotFound indicates an attempt was made against an object that count not be found.
+	ErrorNotFound
+
+	// ErrorPtr indicates an operation requiring a pointer was passed a non-pointer.
+	ErrorPtr
+
+	// ErrorSlice indicates an operation requiring a slice was passed a non-slice, or a slice
+	// of the wrong type.
+	ErrorSlice
+
+	// ErrorID indicates an error was encountered related to an object's ID.
+	ErrorID
+
+	// ErrorSharing indicates an error was encountered related to a Sharing value.
+	ErrorSharing
+)
+
+// Error represents an encountered error. It adheres to the "error" interface,
+// so will be returned as a standard error.
+//
+// Returned errors can be handled as this Error type:
+//
+//   if err := c.RequestAndHandle(...); err != nil {
+// 	  if clientErr, ok := err.(client.Error) {
+// 		  // check clientErr.Code to determine appropriate action
+// 	  }
+//   }
+type Error struct {
+	Code       ErrorCode
+	Message    string
+	Wrapped    error
+	StackTrace string
+}
+
+// Wrap returns a new Error with the given code, error, and message. The error value
+// may be nil if this is a new error.
+func wrapError(code ErrorCode, err error, messagef string, messageArgs ...interface{}) Error {
+	return Error{
+		Code:       code,
+		Message:    fmt.Sprintf(messagef, messageArgs...),
+		Wrapped:    err,
+		StackTrace: string(debug.Stack()),
+	}
+}
+
+// Error returns the Error's message.
+func (err Error) Error() string {
+	return err.Message
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/client/handle_response.go b/vendor/github.com/splunk/go-splunk-client/pkg/client/handle_response.go
new file mode 100644
index 00000000..a65c150f
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/client/handle_response.go
@@ -0,0 +1,205 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 client
+
+import (
+	"encoding/json"
+	"encoding/xml"
+	"net/http"
+	"reflect"
+
+	"github.com/splunk/go-splunk-client/pkg/messages"
+)
+
+// ResponseHandler defines a function that performs an action on an http.Response.
+type ResponseHandler func(*http.Response) error
+
+// ComposeResponseHandler creates a new ResponseHandler that runs each ResponseHandler
+// provided as an argument.
+func ComposeResponseHandler(handlers ...ResponseHandler) ResponseHandler {
+	return func(r *http.Response) error {
+		for _, handler := range handlers {
+			if err := handler(r); err != nil {
+				return err
+			}
+		}
+
+		return nil
+	}
+}
+
+// HandleResponseXML returns a ResponseHandler that decodes an http.Response's Body
+// as XML to the given interface.
+func HandleResponseXML(i interface{}) ResponseHandler {
+	return func(r *http.Response) error {
+		if err := xml.NewDecoder(r.Body).Decode(i); err != nil {
+			return wrapError(ErrorResponseBody, err, "unable to decode response XML: %s", err)
+		}
+
+		return nil
+	}
+}
+
+// HandleResponseXMLMessagesCustomError returns a ResponseHandler that decode's an http.Response's
+// Body as an XML document of Messages and returns the Messages as an error with the given ErrorCode.
+func HandleResponseXMLMessagesCustomError(code ErrorCode) ResponseHandler {
+	return func(r *http.Response) error {
+		response := struct {
+			Messages messages.Messages
+		}{}
+
+		if err := HandleResponseXML(&response)(r); err != nil {
+			return err
+		}
+
+		return wrapError(code, nil, "response contained message: %s", response.Messages.String())
+	}
+}
+
+// HandleResponseXMLMessagesError returns a ResponseHandler that decodes an http.Response's Body
+// as an XML document of Messages and returns the Messages as an error.
+func HandleResponseXMLMessagesError() ResponseHandler {
+	return func(r *http.Response) error {
+		return HandleResponseXMLMessagesCustomError(ErrorSplunkMessage)(r)
+	}
+}
+
+// HandleResponseJSON returns a ResponseHandler that decodes an http.Response's Body
+// as JSON to the given interface.
+func HandleResponseJSON(i interface{}) ResponseHandler {
+	return func(r *http.Response) error {
+		if err := json.NewDecoder(r.Body).Decode(i); err != nil {
+			return wrapError(ErrorResponseBody, err, "unable to decode response JSON: %s", err)
+		}
+
+		return nil
+	}
+}
+
+// HandleResponseJSONMessagesCustomError returns a ResponseHandler that decodes an http.Response's
+// Body as JSON document of Messages and returns the Messages as an error with the given ErrorCode.
+func HandleResponseJSONMessagesCustomError(code ErrorCode) ResponseHandler {
+	return func(r *http.Response) error {
+		msg := messages.Messages{}
+		if err := HandleResponseJSON(&msg)(r); err != nil {
+			return err
+		}
+
+		return wrapError(code, nil, "response contained message: %s", msg.String())
+	}
+}
+
+// HandleResponseJSONMessagesError returns a ResponseHandler that decode's an http.Response's Body
+// as a JSON document of Messages and returns the Messages as an error with the Code ErrorSplunkMessage.
+func HandleResponseJSONMessagesError() ResponseHandler {
+	return func(r *http.Response) error {
+		return HandleResponseJSONMessagesCustomError(ErrorSplunkMessage)(r)
+	}
+}
+
+// HandleResponseCode returns a ResponseHandler that calls errorResponseHandler if an http.Response's
+// StatusCode is equal to the provided code.
+func HandleResponseCode(code int, errorResponseHandler ResponseHandler) ResponseHandler {
+	return func(r *http.Response) error {
+		if r.StatusCode != code {
+			return nil
+		}
+
+		return errorResponseHandler(r)
+	}
+}
+
+// HandleResponseRequireCode returns a ResponseHandler that checks for a given StatusCode. If
+// the http.Response has a different StatusCode, the provided ResponseHandler will be called
+// to return the appopriate error message.
+func HandleResponseRequireCode(code int, errorResponseHandler ResponseHandler) ResponseHandler {
+	return func(r *http.Response) error {
+		if r.StatusCode == code {
+			return nil
+		}
+
+		return errorResponseHandler(r)
+	}
+}
+
+// HandleResponseEntries returns a ResponseHandler that parses the http.Response Body
+// into the list of Entry reference provided.
+func HandleResponseEntries(entries interface{}) ResponseHandler {
+	return func(r *http.Response) error {
+		entriesPtrV := reflect.ValueOf(entries)
+		if entriesPtrV.Kind() != reflect.Ptr {
+			return wrapError(ErrorPtr, nil, "attempted to read entries to non-pointer")
+		}
+
+		entriesV := reflect.Indirect(entriesPtrV)
+		if entriesV.Kind() != reflect.Slice {
+			return wrapError(ErrorSlice, nil, "attempted to read entries to non-slice")
+		}
+
+		responseT := reflect.StructOf([]reflect.StructField{
+			{
+				Name: "Entry",
+				Type: entriesV.Type(),
+			},
+		})
+
+		entriesResponsePtrV := reflect.New(responseT)
+		entriesResponsePtrI := entriesResponsePtrV.Interface()
+
+		d := json.NewDecoder(r.Body)
+		if err := d.Decode(entriesResponsePtrI); err != nil {
+			return wrapError(ErrorResponseBody, err, "unable to decode JSON: %s", err)
+		}
+
+		entriesResponseV := reflect.Indirect(entriesResponsePtrV)
+		responseEntriesFieldV := entriesResponseV.FieldByName("Entry")
+
+		entriesV.Set(responseEntriesFieldV)
+
+		return nil
+	}
+}
+
+// HandleResponseEntry returns a responseHaResponseHandlerndler that parses the http.Response Body
+// into the given Entry.
+func HandleResponseEntry(entry interface{}) ResponseHandler {
+	return func(r *http.Response) error {
+		entryPtrV := reflect.ValueOf(entry)
+		if entryPtrV.Kind() != reflect.Ptr {
+			return wrapError(ErrorPtr, nil, "attempted to read entry to non-pointer")
+		}
+
+		entryV := reflect.Indirect(entryPtrV)
+		entryT := entryV.Type()
+
+		entriesT := reflect.SliceOf(entryT)
+		entriesPtrV := reflect.New(entriesT)
+		entriesPtrI := entriesPtrV.Interface()
+
+		if err := HandleResponseEntries(entriesPtrI)(r); err != nil {
+			return err
+		}
+
+		entriesV := reflect.Indirect(entriesPtrV)
+
+		if entriesV.Len() != 1 {
+			return wrapError(ErrorResponseBody, nil, "expected exactly 1 entry, got %d", entriesV.Len())
+		}
+
+		entryV.Set(entriesV.Index(0))
+
+		return nil
+	}
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/client/id.go b/vendor/github.com/splunk/go-splunk-client/pkg/client/id.go
new file mode 100644
index 00000000..ba23a000
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/client/id.go
@@ -0,0 +1,127 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 client
+
+import (
+	"encoding/json"
+	"net/url"
+
+	"github.com/splunk/go-splunk-client/pkg/internal/paths"
+)
+
+// ID represents a Splunk object ID URL for a specific object.
+type ID struct {
+	Namespace Namespace
+
+	// Title is the ID's title component. It is the name of the Splunk object.
+	Title string
+
+	// url is the ID in URL format. It is set by parseID (which is used by Parse and UnmarshalJSON)
+	// to give confidence that it is correct and reliable.
+	url string
+}
+
+// ParseID returns a new ID by parsing the ID URL string.
+func ParseID(idURL string) (ID, error) {
+	newNS, remnants, err := parseNamespace(idURL)
+	if err != nil {
+		return ID{}, err
+	}
+
+	if len(remnants) < 1 {
+		return ID{}, wrapError(ErrorID, nil, "client: parseNamespace didn't return a remnant for ID.Title")
+	}
+
+	return ID{
+		Namespace: newNS,
+		Title:     remnants[len(remnants)-1],
+		url:       idURL,
+	}, nil
+}
+
+// Parse sets the ID's value to match what is parsed from the given ID URL.
+func (id *ID) Parse(idURL string) error {
+	newID, err := ParseID(idURL)
+	if err != nil {
+		return err
+	}
+
+	*id = newID
+
+	return nil
+}
+
+// URL returns the URL for ID. An error is returned if URL() is run on ID that has no set URL, or if the
+// stored URL doesn't match the ID's fields.
+func (id ID) URL() (string, error) {
+	if id.url == "" {
+		return "", wrapError(ErrorID, nil, "client: ID has unset URL")
+	}
+
+	idFromURL, err := ParseID(id.url)
+	if err != nil {
+		return "", wrapError(ErrorID, err, "client: unable to re-parse ID's stored URL: %s", err)
+	}
+
+	if idFromURL != id {
+		return "", wrapError(ErrorID, nil, "client: ID doesn't match stored URL")
+	}
+
+	return id.url, nil
+}
+
+// GetServicePath implements custom GetServicePath encoding. It returns its Namespace's
+// service path.
+func (id ID) GetServicePath(path string) (string, error) {
+	return id.Namespace.GetServicePath(path)
+}
+
+// GetEntryPath implements custom GetEntryPath encoding. It returns the url-encoded
+// value of the ID's Title with the service path preceding it.
+func (id ID) GetEntryPath(path string) (string, error) {
+	servicePath, err := id.GetServicePath(path)
+	if err != nil {
+		return "", err
+	}
+
+	return paths.Join(servicePath, url.PathEscape(id.Title)), nil
+}
+
+// UnmarshalJSON implements custom JSON unmarshaling for IDFields.
+func (id *ID) UnmarshalJSON(data []byte) error {
+	idString := ""
+	if err := json.Unmarshal(data, &idString); err != nil {
+		return wrapError(ErrorID, err, "client: unable to unmarshal %q as string", data)
+	}
+
+	if err := id.Parse(idString); err != nil {
+		return err
+	}
+
+	return nil
+}
+
+// SetURLValues implements custom url.Query encoding of ID. It adds a field "name" for the ID's
+// Title. If the Title value is empty, it returns an error, as there are no scenarios where an ID
+// object is expected to be POSTed with an empty Title.
+func (id ID) SetURLValues(key string, v *url.Values) error {
+	if id.Title == "" {
+		return wrapError(ErrorID, nil, "client: attempted SetURLValues on ID with empty Title")
+	}
+
+	v.Add("name", id.Title)
+
+	return nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/client/namespace.go b/vendor/github.com/splunk/go-splunk-client/pkg/client/namespace.go
new file mode 100644
index 00000000..5df42bad
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/client/namespace.go
@@ -0,0 +1,111 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 client
+
+import (
+	"strings"
+
+	"github.com/splunk/go-splunk-client/pkg/internal/paths"
+)
+
+// Namespace is a Splunk object's namespace, consisting of a User and App. It is valid only if both User
+// and App are set, or both are unset.
+type Namespace struct {
+	User string
+	App  string
+}
+
+// namespacePath returns the namespace path. If the resulting path is invalid, it will be returned
+// along with an error.
+func (ns Namespace) namespacePath() (string, error) {
+	var path string
+
+	// absence of both user/app indicates global context
+	if (ns.User == "") && (ns.App == "") {
+		path = "services"
+	} else {
+		path = paths.Join("servicesNS", ns.User, ns.App)
+	}
+
+	return path, ns.validate()
+}
+
+// GetServicePath implements custom GetServicePath encoding. It returns the given
+// path back, which has the effect of using the ID field's struct tag as
+// its GetServicePath.
+func (ns Namespace) GetServicePath(path string) (string, error) {
+	nsPath, err := ns.namespacePath()
+	if err != nil {
+		return "", err
+	}
+
+	return paths.Join(nsPath, path), nil
+}
+
+// parseNamespace parses a string ID into a Namespace object.
+func parseNamespace(id string) (Namespace, []string, error) {
+	// start with a clean IDFields
+	newNS := Namespace{}
+
+	// an empty id is a "clean slate", with no namespace info (user/app), endpoint, or title
+	if id == "" {
+		return newNS, nil, nil
+	}
+
+	reverseStrings := func(input []string) []string {
+		output := make([]string, 0, len(input))
+
+		for i := len(input) - 1; i >= 0; i-- {
+			output = append(output, input[i])
+		}
+
+		return output
+	}
+
+	// we work backwards in the id path segments to find the namespace, so reverse idPartStrings
+	idPartStrings := strings.Split(id, "/")
+	idPartStrings = reverseStrings(idPartStrings)
+
+	for i, idPartString := range idPartStrings {
+		// if we've made it to the "services" segment we have an empty Namespace
+		if idPartString == "services" {
+			return newNS, reverseStrings(idPartStrings[0:i]), nil
+		}
+
+		if idPartString == "servicesNS" {
+			// if we've made it to the "servicesNS" segment we have a user/app namespace
+
+			if i < 2 {
+				return Namespace{}, nil, wrapError(ErrorID, nil, "unable to parse ID, servicesNS found without user/app: %s", id)
+			}
+
+			newNS.User = idPartStrings[i-1]
+			newNS.App = idPartStrings[i-2]
+
+			return newNS, reverseStrings(idPartStrings[0 : i-2]), nil
+		}
+	}
+
+	return Namespace{}, nil, wrapError(ErrorID, nil, "client: unable to parse Namespace, missing services or servicesNS: %s", id)
+}
+
+// validate returns an error if the Namespace is invalid.
+func (ns Namespace) validate() error {
+	if (ns.User == "") != (ns.App == "") {
+		return wrapError(ErrorNamespace, nil, "client: invalid Namespace, user and app must both be empty or non-empty")
+	}
+
+	return nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/client/title.go b/vendor/github.com/splunk/go-splunk-client/pkg/client/title.go
new file mode 100644
index 00000000..528f07fe
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/client/title.go
@@ -0,0 +1,21 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 client
+
+// Titler defines methods that a type must implement to be a titled object.
+type Titler interface {
+	// Title returns the string representation of the object's Title.
+	Title() string
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/deepset/deepset.go b/vendor/github.com/splunk/go-splunk-client/pkg/deepset/deepset.go
new file mode 100644
index 00000000..5414bf73
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/deepset/deepset.go
@@ -0,0 +1,17 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 deepset provides functionality to set a value of a given type on
+// a value of any time that is or contains a value of the same type.
+package deepset
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/deepset/set.go b/vendor/github.com/splunk/go-splunk-client/pkg/deepset/set.go
new file mode 100644
index 00000000..01262861
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/deepset/set.go
@@ -0,0 +1,117 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 deepset provides functionality to set the an input object's value directly,
+// or set it on one of the object's struct fields, based on the type of the value being
+// set.
+package deepset
+
+import (
+	"fmt"
+	"reflect"
+)
+
+// Set attempts to set the given value on dest.
+//
+// If dest and value are of the same underlying type, dest will be set directly.
+//
+// If dest is a struct, and exactly one of its fields are of the same underlying type as value, that field will be set to value.
+//
+// Any dest field that is a struct will be followed recursively.
+//
+// If multiple struct fields at any given level match the value type, an error is returned.
+func Set(dest interface{}, value interface{}) error {
+	destV := reflect.ValueOf(dest)
+
+	for destV.Kind() == reflect.Ptr {
+		destV = destV.Elem()
+	}
+
+	valueV := reflect.ValueOf(value)
+
+	if !(destV.IsValid() && valueV.IsValid()) {
+		return fmt.Errorf("deepset: dest (%T) or input (%T) invalid", dest, value)
+	}
+
+	if destV.Type() == valueV.Type() {
+		if !destV.CanSet() {
+			return fmt.Errorf("deepset: dest type (%T) is not settable", dest)
+		}
+
+		destV.Set(valueV)
+		return nil
+	}
+
+	if destV.Kind() == reflect.Struct {
+		setFieldV, err := structSetFieldValue(destV, valueV)
+		if err != nil {
+			return err
+		}
+
+		if setFieldV.CanSet() {
+			setFieldV.Set(valueV)
+			return nil
+		}
+	}
+
+	return fmt.Errorf("deepset: unable to set value (%T) on dest (%T)", value, dest)
+}
+
+func structSetFieldValue(destV reflect.Value, valueV reflect.Value) (reflect.Value, error) {
+	var foundSetFieldV reflect.Value
+
+	fieldsV := make([]reflect.Value, 0, destV.NumField())
+
+	for i := 0; i < destV.NumField(); i++ {
+		fieldV := destV.Field(i)
+		if !fieldV.CanSet() {
+			continue
+		}
+
+		fieldsV = append(fieldsV, fieldV)
+	}
+
+	for _, fieldV := range fieldsV {
+		if fieldV.Type() == valueV.Type() {
+			if foundSetFieldV.IsValid() {
+				return reflect.Value{}, fmt.Errorf("deepset: dest type (%T) has multiple fields of value type (%T)", destV, valueV)
+			}
+
+			foundSetFieldV = fieldV
+		}
+	}
+
+	if foundSetFieldV.IsValid() {
+		return foundSetFieldV, nil
+	}
+
+	for _, fieldV := range fieldsV {
+		if fieldV.Kind() == reflect.Struct {
+			foundEmbeddedSetFieldV, err := structSetFieldValue(fieldV, valueV)
+			// error will be returned if the embedded struct is ambiguous
+			if err != nil {
+				return reflect.Value{}, err
+			}
+
+			// check if *this* struct is ambiguous
+			if foundSetFieldV.IsValid() {
+				return reflect.Value{}, fmt.Errorf("deepset: dest type (%T) has multiple fields of value type (%T)", destV, valueV)
+			}
+
+			foundSetFieldV = foundEmbeddedSetFieldV
+		}
+	}
+
+	return foundSetFieldV, nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/entry/entry.go b/vendor/github.com/splunk/go-splunk-client/pkg/entry/entry.go
new file mode 100644
index 00000000..65e1276d
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/entry/entry.go
@@ -0,0 +1,17 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 entry provides types that manage remote content via the Splunk REST
+// API.
+package entry
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/entry/index.go b/vendor/github.com/splunk/go-splunk-client/pkg/entry/index.go
new file mode 100644
index 00000000..4c091d2e
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/entry/index.go
@@ -0,0 +1,68 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 entry
+
+import (
+	"github.com/splunk/go-splunk-client/pkg/attributes"
+	"github.com/splunk/go-splunk-client/pkg/client"
+)
+
+// IndexContent is the content for an Index.
+type IndexContent struct {
+	BlockSignSize                 attributes.Explicit[int]    `json:"blockSignSize"                 values:"blockSignSize,omitzero"`
+	BucketRebuildMemoryHint       attributes.Explicit[int]    `json:"bucketRebuildMemoryHint"       values:"bucketRebuildMemoryHint,omitzero"`
+	ColdPath                      attributes.Explicit[string] `json:"coldPath"                      values:"coldPath,omitzero"                      selective:"create"`
+	ColdToFrozenDir               attributes.Explicit[string] `json:"coldToFrozenDir"               values:"coldToFrozenDir,omitzero"`
+	ColdToFrozenScript            attributes.Explicit[string] `json:"coldToFrozenScript"            values:"coldToFrozenScript,omitzero"`
+	CompressRawdata               attributes.Explicit[bool]   `json:"compressRawdata"               values:"compressRawdata,omitzero"`
+	DataType                      attributes.Explicit[string] `json:"datatype"                      values:"datatype,omitzero"                      selective:"create"`
+	Disabled                      attributes.Explicit[bool]   `json:"disabled"                      values:"disabled,omitzero"                      selective:"read"`
+	EnableOnlineBucketRepair      attributes.Explicit[bool]   `json:"enableOnlineBucketRepair"      values:"enableOnlineBucketRepair,omitzero"`
+	FrozenTimePeriodInSecs        attributes.Explicit[int]    `json:"frozenTimePeriodInSecs"        values:"frozenTimePeriodInSecs,omitzero"`
+	HomePath                      attributes.Explicit[string] `json:"homePath"                      values:"homePath,omitzero"                      selective:"create"`
+	MaxBloomBackfillBucketAge     attributes.Explicit[string] `json:"maxBloomBackfillBucketAge"     values:"maxBloomBackfillBucketAge,omitzero"`
+	MaxConcurrentOptimizes        attributes.Explicit[int]    `json:"maxConcurrentOptimizes"        values:"maxConcurrentOptimizes,omitzero"`
+	MaxDataSize                   attributes.Explicit[string] `json:"maxDataSize"                   values:"maxDataSize,omitzero"`
+	MaxHotBuckets                 attributes.Explicit[string] `json:"maxHotBuckets"                 values:"maxHotBuckets,omitzero"`
+	MaxHotIdleSecs                attributes.Explicit[int]    `json:"maxHotIdleSecs"                values:"maxHotIdleSecs,omitzero"`
+	MaxHotSpanSecs                attributes.Explicit[int]    `json:"maxHotSpanSecs"                values:"maxHotSpanSecs,omitzero"`
+	MaxMemMB                      attributes.Explicit[int]    `json:"maxMemMB"                      values:"maxMemMB,omitzero"`
+	MaxMetaEntries                attributes.Explicit[int]    `json:"maxMetaEntries"                values:"maxMetaEntries,omitzero"`
+	MaxTimeUnreplicatedNoAcks     attributes.Explicit[int]    `json:"maxTimeUnreplicatedNoAcks"     values:"maxTimeUnreplicatedNoAcks,omitzero"`
+	MaxTimeUnreplicatedWithAcks   attributes.Explicit[int]    `json:"maxTimeUnreplicatedWithAcks"   values:"maxTimeUnreplicatedWithAcks,omitzero"`
+	MaxTotalDataSizeMB            attributes.Explicit[int]    `json:"maxTotalDataSizeMB"            values:"maxTotalDataSizeMB,omitzero"`
+	MaxWarmDBCount                attributes.Explicit[int]    `json:"maxWarmDBCount"                values:"maxWarmDBCount,omitzero"`
+	MinRawFileSyncSecs            attributes.Explicit[string] `json:"minRawFileSyncSecs"            values:"minRawFileSyncSecs,omitzero"`
+	MinStreamGroupQueueSize       attributes.Explicit[int]    `json:"minStreamGroupQueueSize"       values:"minStreamGroupQueueSize,omitzero"`
+	PartialServiceMetaPeriod      attributes.Explicit[int]    `json:"partialServiceMetaPeriod"      values:"partialServiceMetaPeriod,omitzero"`
+	ProcessTrackerServiceInterval attributes.Explicit[int]    `json:"processTrackerServiceInterval" values:"processTrackerServiceInterval,omitzero"`
+	QuarantineFutureSecs          attributes.Explicit[int]    `json:"quarantineFutureSecs"          values:"quarantineFutureSecs,omitzero"`
+	QuarantinePastSecs            attributes.Explicit[int]    `json:"quarantinePastSecs"            values:"quarantinePastSecs,omitzero"`
+	RawChunkSizeBytes             attributes.Explicit[int]    `json:"rawChunkSizeBytes"             values:"rawChunkSizeBytes,omitzero"`
+	RepFactor                     attributes.Explicit[int]    `json:"repFactor"                     values:"repFactor,omitzero"`
+	RotatePeriodInSecs            attributes.Explicit[int]    `json:"rotatePeriodInSecs"            values:"rotatePeriodInSecs,omitzero"`
+	ServiceMetaPeriod             attributes.Explicit[int]    `json:"serviceMetaPeriod"             values:"serviceMetaPeriod,omitzero"`
+	SyncMeta                      attributes.Explicit[bool]   `json:"syncMeta"                      values:"syncMeta,omitzero"`
+	ThawedPath                    attributes.Explicit[string] `json:"thawedPath"                    values:"thawedPath,omitzero"                    selective:"create"`
+	ThrottleCheckPeriod           attributes.Explicit[int]    `json:"throttleCheckPeriod"           values:"throttleCheckPeriod,omitzero"`
+	TstatsHomePath                attributes.Explicit[string] `json:"tstatsHomePath"                values:"tstatsHomePath,omitzero"                selective:"create"`
+	WarmToColdScript              attributes.Explicit[string] `json:"warmToColdScript"              values:"warmToColdScript,omitzero"`
+}
+
+// Index is a Splunk Index.
+type Index struct {
+	ID      client.ID    `selective:"create" service:"data/indexes"`
+	Content IndexContent `json:"content" values:",anonymize"`
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/entry/role.go b/vendor/github.com/splunk/go-splunk-client/pkg/entry/role.go
new file mode 100644
index 00000000..64b1bdb9
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/entry/role.go
@@ -0,0 +1,54 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 entry
+
+import (
+	"github.com/splunk/go-splunk-client/pkg/attributes"
+	"github.com/splunk/go-splunk-client/pkg/client"
+)
+
+// RoleContent defines the Content for a Role.
+type RoleContent struct {
+	Capabilities              []string                    `json:"capabilities"              values:"capabilities,omitzero,fillempty"`
+	CumulativeRTSrchJobsQuota attributes.Explicit[int]    `json:"cumulativeRTSrchJobsQuota" values:"cumulativeRTSrchJobsQuota,omitzero"`
+	CumulativeSrchJobsQuota   attributes.Explicit[int]    `json:"cumulativeSrchJobsQuota"   values:"cumulativeSrchJobsQuota,omitzero"`
+	DefaultApp                attributes.Explicit[string] `json:"defaultApp"                values:"defaultApp,omitzero"`
+	RtSrchJobsQuota           attributes.Explicit[int]    `json:"rtSrchJobsQuota"           values:"rtSrchJobsQuota,omitzero"`
+	SrchDiskQuota             attributes.Explicit[int]    `json:"srchDiskQuota"             values:"srchDiskQuota,omitzero"`
+	SrchFilter                attributes.Explicit[string] `json:"srchFilter"                values:"srchFilter,omitzero"`
+	SrchIndexesAllowed        []string                    `json:"srchIndexesAllowed"        values:"srchIndexesAllowed,omitzero,fillempty"`
+	SrchIndexesDefault        []string                    `json:"srchIndexesDefault"        values:"srchIndexesDefault,omitzero,fillempty"`
+	SrchJobsQuota             attributes.Explicit[int]    `json:"srchJobsQuota"             values:"srchJobsQuota,omitzero"`
+	SrchTimeWin               attributes.Explicit[int]    `json:"srchTimeWin"               values:"srchTimeWin,omitzero"`
+
+	// Read-only fields are populated by results returned by the Splunk API, but
+	// are not settable by Create or Update operations.
+	ImportedCapabilities       []string                    `json:"imported_capabilities"       values:"-"`
+	ImportedRoles              []string                    `json:"imported_roles"              values:"-"`
+	ImportedRtSrchJobsQuota    attributes.Explicit[int]    `json:"imported_rtSrchJobsQuota"    values:"-"`
+	ImportedRtSrchJObsQuota    attributes.Explicit[int]    `json:"imported_rtSrchJObsQuota"    values:"-"`
+	ImportedSrchDiskQuota      attributes.Explicit[int]    `json:"imported_srchDiskQuota"      values:"-"`
+	ImportedSrchFilter         attributes.Explicit[string] `json:"imported_srchFilter"         values:"-"`
+	ImportedSrchIndexesAllowed []string                    `json:"imported_srchIndexesAllowed" values:"-"`
+	ImportedSrchIndexesDefault []string                    `json:"imported_srchIndexesDefault" values:"-"`
+	ImportedSrchJobsQuota      attributes.Explicit[int]    `json:"imported_srchJobsQuota"      values:"-"`
+	ImportedSrchTimeWin        attributes.Explicit[int]    `json:"imported_srchTimeWin"        values:"-"`
+}
+
+// Role defines a Splunk role.
+type Role struct {
+	ID      client.ID   `selective:"create" service:"authorization/roles"`
+	Content RoleContent `json:"content" values:",anonymize"`
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/entry/saml_group.go b/vendor/github.com/splunk/go-splunk-client/pkg/entry/saml_group.go
new file mode 100644
index 00000000..24713978
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/entry/saml_group.go
@@ -0,0 +1,33 @@
+//
+// 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
+//
+//      https://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 entry
+
+import (
+	"github.com/splunk/go-splunk-client/pkg/client"
+	"github.com/splunk/go-splunk-client/pkg/service"
+)
+
+// SAMLGroupContent defines the content for a SAMLGroup.
+type SAMLGroupContent struct {
+	Roles []string `json:"roles" values:"roles,omitzero,fillempty"`
+}
+
+// SAMLGroup defines a SAML group mapping.
+type SAMLGroup struct {
+	ID      client.ID        `selective:"create" service:"admin/SAML-groups"`
+	Content SAMLGroupContent `json:"content" values:",anonymize"`
+
+	// This endpoint returns a 400 if unable to find the given SAML Group.
+	_ service.StatusCodes `service:"NotFound=400"`
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/entry/savedsearch.go b/vendor/github.com/splunk/go-splunk-client/pkg/entry/savedsearch.go
new file mode 100644
index 00000000..9ebf72d4
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/entry/savedsearch.go
@@ -0,0 +1,120 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 entry
+
+import (
+	"net/url"
+
+	"github.com/splunk/go-splunk-client/pkg/attributes"
+	"github.com/splunk/go-splunk-client/pkg/client"
+)
+
+// SavedSearchContent defines the content of a Savedsearch object.
+type SavedSearchContent struct {
+	Actions                           attributes.NamedParametersCollection `json:"-"                                     values:"action,omitzero"                                named_parameters_collection:"action"`
+	AlertDigestMode                   attributes.Explicit[bool]            `json:"alert.digest_mode"                     values:"alert.digest_mode,omitzero"`
+	AlertExpires                      attributes.Explicit[string]          `json:"alert.expires"                         values:"alert.expires,omitzero"`
+	AlertSeverity                     attributes.Explicit[string]          `json:"alert.severity"                        values:"alert.severity,omitzero"`
+	AlertSuppress                     attributes.Explicit[bool]            `json:"alert.suppress"                        values:"alert.suppress,omitzero"`
+	AlertSuppressFields               attributes.Explicit[string]          `json:"alert.suppress.fields"                 values:"alert.suppress.fields,omitzero"`
+	AlertSuppressGroupName            attributes.Explicit[string]          `json:"alert.suppress.group_name"             values:"alert.suppress.group_name,omitzero"`
+	AlertSuppressPeriod               attributes.Explicit[int]             `json:"alert.suppress.period"                 values:"alert.suppress.period,omitzero"`
+	AlertTrack                        attributes.Explicit[string]          `json:"alert.track"                           values:"alert.track,omitzero"`
+	AlertComparator                   attributes.Explicit[string]          `json:"alert_comparator"                      values:"alert_comparator,omitzero"`
+	AlertCondition                    attributes.Explicit[string]          `json:"alert_condition"                       values:"alert_condition,omitzero"`
+	AlertThreshold                    attributes.Explicit[int]             `json:"alert_threshold"                       values:"alert_threshold,omitzero"`
+	AlertType                         attributes.Explicit[string]          `json:"alert_type"                            values:"alert_type,omitzero"`
+	AllowSkew                         attributes.Explicit[string]          `json:"allow_skew"                            values:"allow_skew,omitzero"`
+	AutoSummarize                     attributes.Explicit[bool]            `json:"auto_summarize"                        values:"auto_summarize,omitzero"`
+	AutoSummarizeCommand              attributes.Explicit[string]          `json:"auto_summarize.command"                values:"auto_summarize.command,omitzero"`
+	AutoSummarizeCronSchedule         attributes.Explicit[string]          `json:"auto_summarize.cron_schedule"          values:"auto_summarize.cron_schedule,omitzero"`
+	AutoSummarizeDispatchEarliestTime attributes.Explicit[string]          `json:"auto_summarize.dispatch.earliest_time" values:"auto_summarize.dispatch.earliest_time,omitzero"`
+	AutoSummarizeDispatchLatestTime   attributes.Explicit[string]          `json:"auto_summarize.dispatch.latest_time"   values:"auto_summarize.dispatch.latest_time,omitzero"`
+	AutoSummarizeDispatchTimeFormat   attributes.Explicit[string]          `json:"auto_summarize.dispatch.time_format"   values:"auto_summarize.dispatch.time_format,omitzero"`
+	AutoSummarizeDispatchTtl          attributes.Explicit[string]          `json:"auto_summarize.dispatch.ttl"           values:"auto_summarize.dispatch.ttl,omitzero"`
+	AutoSummarizeMaxConcurrent        attributes.Explicit[int]             `json:"auto_summarize.max_concurrent"         values:"auto_summarize.max_concurrent,omitzero"`
+	AutoSummarizeMaxDisabledBuckets   attributes.Explicit[int]             `json:"auto_summarize.max_disabled_buckets"   values:"auto_summarize.max_disabled_buckets,omitzero"`
+	AutoSummarizeMaxSummaryRatio      attributes.Explicit[int]             `json:"auto_summarize.max_summary_ratio"      values:"auto_summarize.max_summary_ratio,omitzero"`
+	AutoSummarizeMaxSummarySize       attributes.Explicit[int]             `json:"auto_summarize.max_summary_size"       values:"auto_summarize.max_summary_size,omitzero"`
+	AutoSummarizeMaxTime              attributes.Explicit[int]             `json:"auto_summarize.max_time"               values:"auto_summarize.max_time,omitzero"`
+	AutoSummarizeSuspendPeriod        attributes.Explicit[string]          `json:"auto_summarize.suspend_period"         values:"auto_summarize.suspend_period,omitzero"`
+	AutoSummarizeTimespan             attributes.Explicit[string]          `json:"auto_summarize.timespan"               values:"auto_summarize.timespan,omitzero"`
+	CronSchedule                      attributes.Explicit[string]          `json:"cron_schedule"                         values:"cron_schedule,omitzero"`
+	Description                       attributes.Explicit[string]          `json:"description"                           values:"description,omitzero"`
+	Disabled                          attributes.Explicit[bool]            `json:"disabled"                              values:"disabled,omitzero"`
+	Dispatch                          attributes.NamedParametersCollection `json:"-"                                     values:"dispatch,omitzero"                              named_parameters_collection:"dispatch" `
+	DispatchAs                        attributes.Explicit[string]          `json:"dispatchAs"                            values:"dispatchAs,omitzero"`
+	Displayview                       attributes.Explicit[string]          `json:"displayview"                           values:"displayview,omitzero"`
+	DurableBackfillType               attributes.Explicit[string]          `json:"durable.backfill_type"                 values:"durable.backfill_type,omitzero"`
+	DurableLagTime                    attributes.Explicit[int]             `json:"durable.lag_time"                      values:"durable.lag_time,omitzero"`
+	DurableMaxBackfillIntervals       attributes.Explicit[int]             `json:"durable.max_backfill_intervals"        values:"durable.max_backfill_intervals,omitzero"`
+	DurableTrackTimeType              attributes.Explicit[string]          `json:"durable.track_time_type"               values:"durable.track_time_type,omitzero"`
+	IsScheduled                       attributes.Explicit[bool]            `json:"is_scheduled"                          values:"is_scheduled,omitzero"`
+	IsVisible                         attributes.Explicit[bool]            `json:"is_visible"                            values:"is_visible,omitzero"`
+	MaxConcurrent                     attributes.Explicit[int]             `json:"max_concurrent"                        values:"max_concurrent,omitzero"`
+	Name                              attributes.Explicit[string]          `json:"name"                                  values:"name,omitzero"`
+	NextScheduledTime                 attributes.Explicit[string]          `json:"next_scheduled_time"                   values:"next_scheduled_time,omitzero"`
+	QualifiedSearch                   attributes.Explicit[string]          `json:"qualifiedSearch"                       values:"qualifiedSearch,omitzero"`
+	RealtimeSchedule                  attributes.Explicit[bool]            `json:"realtime_schedule"                     values:"realtime_schedule,omitzero"`
+	RequestUiDispatchApp              attributes.Explicit[string]          `json:"request.ui_dispatch_app"               values:"request.ui_dispatch_app,omitzero"`
+	RequestUiDispatchView             attributes.Explicit[string]          `json:"request.ui_dispatch_view"              values:"request.ui_dispatch_view,omitzero"`
+	RestartOnSearchpeerAdd            attributes.Explicit[bool]            `json:"restart_on_searchpeer_add"             values:"restart_on_searchpeer_add,omitzero"`
+	RunNTimes                         attributes.Explicit[int]             `json:"run_n_times"                           values:"run_n_times,omitzero"`
+	RunOnStartup                      attributes.Explicit[bool]            `json:"run_on_startup"                        values:"run_on_startup,omitzero"`
+	SchedulePriority                  attributes.Explicit[string]          `json:"schedule_priority"                     values:"schedule_priority,omitzero"`
+	ScheduleWindow                    attributes.Explicit[string]          `json:"schedule_window"                       values:"schedule_window,omitzero"`
+	Search                            attributes.Explicit[string]          `json:"search"                                values:"search,omitzero"`
+	Vsid                              attributes.Explicit[string]          `json:"vsid"                                  values:"vsid"`
+	WorkloadPool                      attributes.Explicit[string]          `json:"workload_pool"                         values:"workload_pool"`
+}
+
+// AddURLValues implements custom additional encoding to url.Values.
+func (content SavedSearchContent) AddURLValues(key string, v *url.Values) error {
+	// The Splunk REST API returns savedsearch action status like "action.email=1", but doesn't honor that format
+	// for setting the action statuses. To set an action status, you must pass "actions=action1,action2" formatted
+	// values. Here we iterate through the enabled actions and add a url.Values entry for all enabled actions.
+	//
+	// If Actions is empty (not nil), we "clear" the enabled actions list by setting a single empty value for "actions".
+
+	if content.Actions != nil && len(content.Actions) == 0 {
+		v.Add("actions", "")
+	}
+
+	for _, enabledActionName := range content.Actions.EnabledNames() {
+		v.Add("actions", enabledActionName)
+	}
+
+	return nil
+}
+
+// UnmarshalJSON implements custom JSON unmarshaling.
+func (content *SavedSearchContent) UnmarshalJSON(data []byte) error {
+	type contentAlias SavedSearchContent
+	var newAliasedContent contentAlias
+
+	if err := attributes.UnmarshalJSONForNamedParametersCollections(data, &newAliasedContent); err != nil {
+		return err
+	}
+
+	*content = SavedSearchContent(newAliasedContent)
+
+	return nil
+}
+
+// SavedSearch defines a Splunk savedsearch.
+type SavedSearch struct {
+	ID      client.ID          `service:"saved/searches" selective:"create"`
+	Content SavedSearchContent `json:"content" values:",anonymize"`
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/entry/stanza.go b/vendor/github.com/splunk/go-splunk-client/pkg/entry/stanza.go
new file mode 100644
index 00000000..f81b7bf5
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/entry/stanza.go
@@ -0,0 +1,83 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 entry
+
+import (
+	"encoding/json"
+	"fmt"
+	"regexp"
+
+	"github.com/splunk/go-splunk-client/pkg/attributes"
+	"github.com/splunk/go-splunk-client/pkg/client"
+)
+
+// StanzaContent defines the content for a Stanza.
+type StanzaContent struct {
+	Disabled attributes.Explicit[bool] `json:"disabled" values:"disabled,omitzero"`
+	Values   map[string]string         `json:"-"        values:",anonymize"`
+}
+
+// Stanza is a Splunk configs/conf-<file> stanza.
+type Stanza struct {
+	ID      client.ConfID `selective:"create" service:"configs"`
+	Content StanzaContent `json:"content"     values:",anonymize"`
+}
+
+// UnmarshalJSON implements custom JSON unmarshaling.
+func (content *StanzaContent) UnmarshalJSON(data []byte) error {
+	type aliasType StanzaContent
+	var aliasValue aliasType
+
+	if err := json.Unmarshal(data, &aliasValue); err != nil {
+		return err
+	}
+
+	*content = StanzaContent(aliasValue)
+
+	var allValues map[string]interface{}
+	if err := json.Unmarshal(data, &allValues); err != nil {
+		return err
+	}
+
+	eaiR := regexp.MustCompile("^eai:")
+
+	for key, value := range allValues {
+		if eaiR.MatchString(key) {
+			continue
+		}
+
+		if key == "disabled" {
+			if valueBool, ok := value.(bool); ok {
+				content.Disabled = attributes.NewExplicit(valueBool)
+				continue
+			} else {
+				return fmt.Errorf("entry: unable to decode StanzaContent, disabled value %#v, expected bool", value)
+			}
+		}
+
+		if valueString, ok := value.(string); ok {
+			if content.Values == nil {
+				content.Values = map[string]string{}
+			}
+
+			content.Values[key] = valueString
+			continue
+		} else {
+			return fmt.Errorf("entry: unexpected non-string type in StanzaContent: %#v", value)
+		}
+	}
+
+	return nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/entry/user.go b/vendor/github.com/splunk/go-splunk-client/pkg/entry/user.go
new file mode 100644
index 00000000..93eb4d9b
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/entry/user.go
@@ -0,0 +1,44 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 entry
+
+import (
+	"github.com/splunk/go-splunk-client/pkg/attributes"
+	"github.com/splunk/go-splunk-client/pkg/client"
+)
+
+// UserContent defines the content of a User object.
+type UserContent struct {
+	// Read/Write
+	DefaultApp            attributes.Explicit[string] `values:"defaultApp,omitzero"`
+	Email                 attributes.Explicit[string] `values:"email,omitzero"`
+	ForceChangePass       attributes.Explicit[bool]   `values:"force-change-pass,omitzero"`
+	Password              attributes.Explicit[string] `values:"password,omitzero"`
+	RealName              attributes.Explicit[string] `values:"realname,omitzero"`
+	RestartBackgroundJobs attributes.Explicit[bool]   `values:"restart_background_jobs,omitzero"`
+	Roles                 []string                    `values:"roles,omitzero,fillempty"`
+	TZ                    attributes.Explicit[string] `values:"tz,omitzero"`
+
+	// Read-only fields are populated by results returned by the Splunk API, but
+	// are not settable by Create or Update operations.
+	Capabilities []string                    `values:"-"`
+	Type         attributes.Explicit[string] `values:"-"`
+}
+
+// User defines a Splunk user.
+type User struct {
+	ID      client.ID   `selective:"create" service:"authentication/users"`
+	Content UserContent `json:"content" values:",anonymize"`
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/internal/checks/requests.go b/vendor/github.com/splunk/go-splunk-client/pkg/internal/checks/requests.go
new file mode 100644
index 00000000..7865497a
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/internal/checks/requests.go
@@ -0,0 +1,116 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 checks
+
+import (
+	"bytes"
+	"io"
+	"net/http"
+	"net/url"
+	"reflect"
+	"testing"
+)
+
+// CheckRequestFunc functions perform a check against an http.Request.
+type CheckRequestFunc func(*http.Request, *testing.T)
+
+// ComposeCheckRequestFunc returns a new CheckRequestFunc from an arbitrary number of other
+// CheckRequestFunc functions.
+func ComposeCheckRequestFunc(checks ...CheckRequestFunc) CheckRequestFunc {
+	return func(r *http.Request, t *testing.T) {
+		for _, check := range checks {
+			check(r, t)
+		}
+	}
+}
+
+// CheckRequestHeaderKeyValue checks that an http.Request's header has a given value for
+// a given key.
+func CheckRequestHeaderKeyValue(key string, value ...string) CheckRequestFunc {
+	return func(r *http.Request, t *testing.T) {
+		if r.Header == nil {
+			t.Errorf("CheckRequestHeaderKeyValue: Header not set")
+			return
+		}
+
+		got, ok := r.Header[key]
+		if !ok {
+			t.Errorf("CheckRequestHeaderKeyValue: Key %s not set", key)
+			return
+		}
+
+		if !reflect.DeepEqual(got, value) {
+			t.Errorf("CheckRequestHeaderKeyValue: Key %s = %#v, want %#v", key, got, value)
+			return
+		}
+	}
+}
+
+// CheckRequestMethod checks that a requests method matches the given method.
+func CheckRequestMethod(method string) CheckRequestFunc {
+	return func(r *http.Request, t *testing.T) {
+		if r.Method != method {
+			t.Errorf("CheckRequestMethod: got %s, want %s", r.Method, method)
+		}
+	}
+}
+
+// CheckRequestURL checks that a request's URL matches the given URL.
+func CheckRequestURL(url string) CheckRequestFunc {
+	return func(r *http.Request, t *testing.T) {
+		gotURL := r.URL.String()
+
+		if gotURL != url {
+			t.Errorf("CheckRequestURL: got\n%s, want\n%s", gotURL, url)
+		}
+	}
+}
+
+// CheckRequestBodyValue checks that a requests URL-encoded body has the given
+// key and value.
+func CheckRequestBodyValue(key string, value ...string) CheckRequestFunc {
+	return func(r *http.Request, t *testing.T) {
+		if r.Body == nil {
+			t.Errorf("CheckRequestBodyValue: Body is nil")
+		}
+
+		data, err := io.ReadAll(r.Body)
+		if err != nil {
+			t.Errorf("CheckRequestBodyValue: unable to read body: %s", err)
+			return
+		}
+
+		// because reading is a one-time deal, we need to put back the data we
+		// read from r.Body
+		r.Body = io.NopCloser(bytes.NewReader(data))
+
+		v, err := url.ParseQuery(string(data))
+		if err != nil {
+			t.Errorf("CheckRequestBodyValue: unable to parse query: %s", err)
+			return
+		}
+
+		got, ok := v[key]
+		if !ok {
+			t.Errorf("CheckRequestBodyValue: key %s not present", key)
+			return
+		}
+
+		if !reflect.DeepEqual(got, value) {
+			t.Errorf("CheckRequestBodyValue: key %s got %v, want %v", key, got, value)
+			return
+		}
+	}
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/internal/checks/unmarshal_json_test_cases.go b/vendor/github.com/splunk/go-splunk-client/pkg/internal/checks/unmarshal_json_test_cases.go
new file mode 100644
index 00000000..823dddc3
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/internal/checks/unmarshal_json_test_cases.go
@@ -0,0 +1,67 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 checks
+
+import (
+	"encoding/json"
+	"reflect"
+	"testing"
+)
+
+// JSONUnmarshalTestCase defines a test case for json.Unmarshal.
+type JSONUnmarshalTestCase struct {
+	Name        string
+	InputString string
+	Want        interface{}
+	WantError   bool
+}
+
+// Test runs the Test case.
+func (test JSONUnmarshalTestCase) Test(t *testing.T) {
+	// create a new pointer to a zero value of test.want
+	gotT := reflect.TypeOf(test.Want)
+	if gotT == nil {
+		t.Fatalf("%s attempted with nil want type", test.Name)
+	}
+	gotV := reflect.New(gotT)
+	gotP := gotV.Interface()
+
+	// create a new pointer to a the same type as test.want,
+	// and set its data to match test.want
+	wantT := reflect.TypeOf(test.Want)
+	wantV := reflect.New(wantT)
+	wantV.Elem().Set(reflect.ValueOf(test.Want))
+	wantP := wantV.Interface()
+
+	err := json.Unmarshal([]byte(test.InputString), gotP)
+	gotError := err != nil
+	if gotError != test.WantError {
+		t.Fatalf("%s json.Unmarshal returned error? %v (%s)", test.Name, gotError, err)
+	}
+
+	if !reflect.DeepEqual(gotP, wantP) {
+		t.Errorf("%s json.Unmarshal got\n%#v, want\n%#v", test.Name, gotP, wantP)
+	}
+}
+
+// JSONUnmarshalTestCases is a collection of JSONUnmarshalTestCases tests.
+type JSONUnmarshalTestCases []JSONUnmarshalTestCase
+
+// Test runs the Test defined for each item in the collection.
+func (tests JSONUnmarshalTestCases) Test(t *testing.T) {
+	for _, test := range tests {
+		test.Test(t)
+	}
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/internal/checks/url_values_test_cases.go b/vendor/github.com/splunk/go-splunk-client/pkg/internal/checks/url_values_test_cases.go
new file mode 100644
index 00000000..5a817752
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/internal/checks/url_values_test_cases.go
@@ -0,0 +1,55 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 checks
+
+import (
+	"net/url"
+	"reflect"
+	"testing"
+
+	"github.com/splunk/go-splunk-client/pkg/values"
+)
+
+// QueryValuesTestCase defines a test case for query.Values.
+type QueryValuesTestCase struct {
+	Name      string
+	Input     interface{}
+	Want      url.Values
+	WantError bool
+}
+
+// Test runs the Test.
+func (test QueryValuesTestCase) Test(t *testing.T) {
+	got, err := values.Encode(test.Input)
+	gotError := err != nil
+
+	if gotError != test.WantError {
+		t.Errorf("%s values.Encode returned error? %v: %s", test.Name, gotError, err)
+	}
+
+	if !reflect.DeepEqual(got, test.Want) {
+		t.Errorf("%s values.Encode got\n%#v, want\n%#v", test.Name, got, test.Want)
+	}
+}
+
+// QueryValuesTestCases is a collection of queryValuesTestCase tests.
+type QueryValuesTestCases []QueryValuesTestCase
+
+// Test runs the Test defined for each item in the collection.
+func (tests QueryValuesTestCases) Test(t *testing.T) {
+	for _, test := range tests {
+		test.Test(t)
+	}
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/internal/paths/join.go b/vendor/github.com/splunk/go-splunk-client/pkg/internal/paths/join.go
new file mode 100644
index 00000000..044998d0
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/internal/paths/join.go
@@ -0,0 +1,31 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 paths
+
+import "strings"
+
+// Join returns a string crafted by trimming leading and trailing slashes
+// from the input paths and joining them with slashes. Empty paths are retained,
+// because each passed path is expected to be a component to be passed to the API,
+// which shouldn't be removed just because they are empty.
+func Join(path ...string) string {
+	parts := make([]string, len(path))
+
+	for i, part := range path {
+		parts[i] = strings.Trim(part, "/")
+	}
+
+	return strings.Join(parts, "/")
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/messages/message.go b/vendor/github.com/splunk/go-splunk-client/pkg/messages/message.go
new file mode 100644
index 00000000..1cd82949
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/messages/message.go
@@ -0,0 +1,30 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 messages
+
+import "fmt"
+
+// Message represents the <msg> element of a <messages> entry.
+type Message struct {
+	Value string `json:"text" xml:",chardata"`
+	Code  string `json:"type" xml:"code,attr"`
+}
+
+// String returns the string representation of a message. It will be in the form:
+//
+//   Code: Value
+func (m Message) String() string {
+	return fmt.Sprintf("%s: %s", m.Code, m.Value)
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/messages/messages.go b/vendor/github.com/splunk/go-splunk-client/pkg/messages/messages.go
new file mode 100644
index 00000000..67e2fb17
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/messages/messages.go
@@ -0,0 +1,38 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 messages provides the Messages and Message type to represent messages
+// returned by the Splunk REST API.
+package messages
+
+import (
+	"strings"
+)
+
+// Messages represents the <messages> element of a <response> entry.
+type Messages struct {
+	XMLName string    `xml:"messages"`
+	Items   []Message `json:"messages" xml:"msg"`
+}
+
+// String returns the string representation of Messages. If multiple Message items are
+// present, they will be comma-separated.
+func (m Messages) String() string {
+	itemStrings := make([]string, len(m.Items))
+	for i := 0; i < len(m.Items); i++ {
+		itemStrings[i] = m.Items[i].String()
+	}
+
+	return strings.Join(itemStrings, ",")
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/messages/xml_unmarshaler_test_cases.go b/vendor/github.com/splunk/go-splunk-client/pkg/messages/xml_unmarshaler_test_cases.go
new file mode 100644
index 00000000..a1ff43cd
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/messages/xml_unmarshaler_test_cases.go
@@ -0,0 +1,53 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 messages
+
+import (
+	"encoding/xml"
+	"reflect"
+	"testing"
+)
+
+// xmlUnmarshalerTestCase represents an individual test case for unmarshaling from XML.
+type xmlUnmarshalerTestCase struct {
+	input            string
+	gotInterfacePtr  interface{}
+	wantInterfacePtr interface{}
+	wantError        bool
+}
+
+// test performs the test for a xmlUnmarshalerTestCase definition.
+func (test xmlUnmarshalerTestCase) test(t *testing.T) {
+	err := xml.Unmarshal([]byte(test.input), test.gotInterfacePtr)
+	gotError := err != nil
+
+	if gotError != test.wantError {
+		t.Errorf("xml.Unmarshal(%q) returned error? %v (%s)", test.input, gotError, err)
+	}
+
+	if !reflect.DeepEqual(test.gotInterfacePtr, test.wantInterfacePtr) {
+		t.Errorf("xml.Unmarshal(%q) got\n%#v, want\n%#v", test.input, test.gotInterfacePtr, test.wantInterfacePtr)
+	}
+}
+
+// xmlUnmarshalerTestCases is a slice of xmlUnmarshalerTestCase objects.
+type xmlUnmarshalerTestCases []xmlUnmarshalerTestCase
+
+// test performs each xmlUnmarshalerTestCase in xmlUnmarshalerTestCases.
+func (tests xmlUnmarshalerTestCases) test(t *testing.T) {
+	for _, test := range tests {
+		test.test(t)
+	}
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/selective/selective.go b/vendor/github.com/splunk/go-splunk-client/pkg/selective/selective.go
new file mode 100644
index 00000000..cb0a4d2a
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/selective/selective.go
@@ -0,0 +1,117 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 selective provides functionality to translate one struct type into another
+// by selectively including fields with matching field tags.
+package selective
+
+import (
+	"fmt"
+	"reflect"
+	"strings"
+)
+
+// hasTagValue returns true if an individual tag value is present in the comma-separated
+// tag value. An empty csvTag indicates the field should not be filtered, and wantTag
+// should be assumed to be valid for the field, thus an empty csvTag always returns true.
+func hasTagValue(csvTag string, wantTag string) bool {
+	if csvTag == "" {
+		return true
+	}
+
+	parts := strings.Split(csvTag, ",")
+	for _, part := range parts {
+		if part == wantTag {
+			return true
+		}
+	}
+
+	return false
+}
+
+// Encode returns a value for an input struct value calculated by:
+//
+// • If no fields non-empty "selective" tag values, the input is returned directly, retaining
+// unexported fields and methods.
+//
+// • Any field with a non-empty "selective" tag value is retained only if its tag contains
+// the tag provided to Encode.
+//
+// • Struct field values are calculated by calling this function on the input field's value
+// with the same tag.
+//
+// Returned values with changes (structs that contain at least one field with a non-empty
+// "selective" tag) will lose unexported fields and methods. This is due to reflection being
+// unable to retain them.
+func Encode(i interface{}, tag string) (interface{}, error) {
+	iV := reflect.ValueOf(i)
+
+	// dereference as many times as needed
+	for iV.Kind() == reflect.Ptr {
+		iV = iV.Elem()
+	}
+
+	if iV.Kind() != reflect.Struct {
+		return nil, fmt.Errorf("selective: attempted Encode on non-struct type (%T)", i)
+	}
+
+	var newStructFields []reflect.StructField
+	var newStructValues []reflect.Value
+
+	iT := iV.Type()
+	hadTags := false
+	for i := 0; i < iT.NumField(); i++ {
+		field := iT.Field(i)
+		if !field.IsExported() {
+			continue
+		}
+
+		foundTag := field.Tag.Get("selective")
+		if foundTag != "" {
+			hadTags = true
+		}
+
+		if !hasTagValue(foundTag, tag) {
+			continue
+		}
+
+		if field.Type.Kind() != reflect.Struct {
+			newStructFields = append(newStructFields, field)
+			newStructValues = append(newStructValues, iV.Field(i))
+		} else {
+			embeddedStruct, err := Encode(iV.Field(i).Interface(), tag)
+			if err != nil {
+				return nil, err
+			}
+
+			field.Type = reflect.TypeOf(embeddedStruct)
+			newStructFields = append(newStructFields, field)
+			newStructValues = append(newStructValues, reflect.ValueOf(embeddedStruct))
+		}
+	}
+
+	if !hadTags {
+		return i, nil
+	}
+
+	newStructT := reflect.StructOf(newStructFields)
+	newStructVPtr := reflect.New(newStructT)
+	newStructV := newStructVPtr.Elem()
+	for i, newStructValue := range newStructValues {
+		newStructV.Field(i).Set(newStructValue)
+	}
+	newStructI := newStructV.Interface()
+
+	return newStructI, nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/service/service.go b/vendor/github.com/splunk/go-splunk-client/pkg/service/service.go
new file mode 100644
index 00000000..04a08a7a
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/service/service.go
@@ -0,0 +1,165 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 service provides functionality to determine the service and
+// entry paths for a struct.
+package service
+
+import (
+	"fmt"
+	"reflect"
+)
+
+// ServicePathGetter is the interface for types that implement GetServicePath.
+type ServicePathGetter interface {
+	// GetServicePath returns the object's service path based on the provided value.
+	GetServicePath(string) (string, error)
+}
+
+// EntryPathGetter is the interfacae for types that implement GetEntryPath.
+type EntryPathGetter interface {
+	// GetEntryPath returns the object's entry path based on the provided value.
+	GetEntryPath(string) (string, error)
+}
+
+// ServicePath returns the relative service path for an object.
+//
+// The path will be the first of these that are present:
+//
+// • The value returned by the struct's GetServicePath method, if the struct is a service.ServicePathGetter.
+//
+// • The value returned by an exported field's GetServicePath method, if the struct is a service.ServicePathGetter.
+// The field's "service" tag will be passed to its GetServicePath method..
+func ServicePath(i interface{}) (string, error) {
+	if path, err := structOrFieldPath(i, fieldServicePath); path != "" || err != nil {
+		return path, err
+	}
+
+	return "", fmt.Errorf("service: unable to determine ServicePath for type %T", i)
+}
+
+// EntryPath returns the relative entry path for an object.
+//
+// The path will be the first of these that are present:
+//
+// • The value returned by the struct's EntryPath method, if implemented.
+//
+// • The value returned by an exported service.EntryPathGetter member field's EntryPath
+// method, which will be passed that field's "service" tag value.
+func EntryPath(i interface{}) (string, error) {
+	if path, err := structOrFieldPath(i, fieldEntryPath); path != "" || err != nil {
+		return path, err
+	}
+
+	return "", fmt.Errorf("service: unable to determine EntryPath")
+}
+
+// structOrFieldPath returns the path for a given struct. The path is determined as the first of:
+//
+// • the result of calling pathFunc directly for the input struct (does the struct implement pathFunc's required interface?) and an empty tag value
+//
+// • the result of caling getPathFromStructFields for the input struct
+//
+// If no error is encountered, no path was determined, an empty path and nil error will be returned.
+func structOrFieldPath(i interface{}, f pathFunc) (string, error) {
+	iV := reflect.ValueOf(i)
+
+	if !iV.IsValid() {
+		return "", fmt.Errorf("service: attempted operation on invalid value")
+	}
+
+	if path, err := f(iV, ""); path != "" || err != nil {
+		return path, err
+	}
+
+	if path, err := getPathFromStructFields(iV, f); path != "" || err != nil {
+		return path, err
+	}
+
+	return "", nil
+}
+
+// getPathFromStructFields returns the path for a given struct's fields. The path is determined by iterating
+// through each of the struct's exported fields and running the given pathFunc for them with the field's
+// "service" struct tag. If multiple fields return a non-empty value for the pathFunc, an error will be returned,
+// as this is an ambiguous configuration.
+func getPathFromStructFields(v reflect.Value, f pathFunc) (string, error) {
+	derefV := derefValue(v)
+
+	if derefV.Kind() != reflect.Struct {
+		return "", fmt.Errorf("service: attempted ServicePath of non-struct type %T", derefV.Type().Name())
+	}
+
+	var servicePathGetterPath string
+
+	for i := 0; i < derefV.Type().NumField(); i++ {
+		field := derefV.Type().Field(i)
+
+		var fieldV reflect.Value
+
+		if !field.IsExported() {
+			// unexported fields are treated like their type's zero value
+			fieldV = reflect.New(field.Type).Elem()
+		} else {
+			fieldV = derefV.Field(i)
+		}
+
+		fieldTag := field.Tag.Get("service")
+
+		gotPath, err := f(fieldV, fieldTag)
+		if err != nil {
+			return "", err
+		}
+
+		if gotPath != "" {
+			if servicePathGetterPath != "" {
+				return "", fmt.Errorf("service: multiple ServicePathGetter fields found in type %T", i)
+			}
+
+			servicePathGetterPath = gotPath
+		}
+	}
+
+	return servicePathGetterPath, nil
+}
+
+// pathFunc describes a function that returns a path for a reflect.Value and tag value.
+type pathFunc func(reflect.Value, string) (string, error)
+
+// fieldServicePath is a pathFunc that returns the path for a ServicePathGetter.
+var fieldServicePath pathFunc = func(fieldV reflect.Value, fieldTag string) (string, error) {
+	if fieldPathGetter, ok := fieldV.Interface().(ServicePathGetter); ok {
+		return fieldPathGetter.GetServicePath(fieldTag)
+	}
+
+	return "", nil
+}
+
+// fieldEntryPath is a pathFunc that returns the path for an EntryPathGetter.
+var fieldEntryPath pathFunc = func(fieldV reflect.Value, fieldTag string) (string, error) {
+	if entryPathGetter, ok := fieldV.Interface().(EntryPathGetter); ok {
+		return entryPathGetter.GetEntryPath(fieldTag)
+	}
+
+	return "", nil
+}
+
+// derefValue returns a new reflect.Value by dereferencing v.
+func derefValue(v reflect.Value) reflect.Value {
+	for v.Kind() == reflect.Ptr {
+		v = v.Elem()
+	}
+
+	return v
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/service/service_status_codes.go b/vendor/github.com/splunk/go-splunk-client/pkg/service/service_status_codes.go
new file mode 100644
index 00000000..ef71a994
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/service/service_status_codes.go
@@ -0,0 +1,80 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 service
+
+import (
+	"fmt"
+	"reflect"
+)
+
+// TagDefaultsStatusCoder is the interface for types that return a StatusCodes object from a service
+// tag configuration and default StatusCodes value.
+type TagDefaultsStatusCoder interface {
+	WithTagDefaults(string, StatusCodes) (StatusCodes, error)
+}
+
+// ServiceStatusCodes returns the StatusCodes configuration for the given input struct.
+func ServiceStatusCodes(input interface{}, defaults StatusCodes) (StatusCodes, error) {
+	var defaultsCoder TagDefaultsStatusCoder
+	var serviceTag string
+
+	if coder, ok := input.(TagDefaultsStatusCoder); ok {
+		defaultsCoder = coder
+	}
+
+	if defaultsCoder == nil {
+		inputV := reflect.ValueOf(input)
+
+		for inputV.Kind() == reflect.Ptr {
+			inputV = inputV.Elem()
+		}
+
+		inputT := inputV.Type()
+		if inputV.Kind() != reflect.Struct {
+			return StatusCodes{}, fmt.Errorf("service: ServiceStatusCodes attempted on non-struct type %T", input)
+		}
+
+		for i := 0; i < inputV.NumField(); i++ {
+			fieldV := inputV.Field(i)
+			field := inputT.Field(i)
+			fieldT := field.Type
+			if !field.IsExported() {
+				// unexported fields are treated like the zero values of their type
+				fieldV = reflect.New(fieldT).Elem()
+			}
+
+			if coder, ok := fieldV.Interface().(TagDefaultsStatusCoder); ok {
+				if defaultsCoder != nil {
+					return StatusCodes{}, fmt.Errorf("service: ServiceStatusCodes attempted on struct type %T with multiple DefaultsStatusCoder fields", input)
+				}
+
+				defaultsCoder = coder
+				serviceTag = inputV.Type().Field(i).Tag.Get("service")
+			}
+		}
+	}
+
+	newCodes := defaults
+	if defaultsCoder != nil {
+		withTagDefaults, err := defaultsCoder.WithTagDefaults(serviceTag, defaults)
+		if err != nil {
+			return StatusCodes{}, err
+		}
+
+		newCodes = withTagDefaults
+	}
+
+	return newCodes, nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/service/status_codes.go b/vendor/github.com/splunk/go-splunk-client/pkg/service/status_codes.go
new file mode 100644
index 00000000..093fe0fe
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/service/status_codes.go
@@ -0,0 +1,107 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 service
+
+import (
+	"fmt"
+	"reflect"
+	"strconv"
+	"strings"
+)
+
+// StatusCodes define the expected status code returned for a given operation.
+type StatusCodes struct {
+	Created  int
+	Read     int
+	Updated  int
+	Deleted  int
+	NotFound int
+}
+
+// WithDefaults returns a new StatusCodes with values from defaults applied for any
+// field with the zero value.
+func (codes StatusCodes) WithDefaults(defaults StatusCodes) StatusCodes {
+	// for codesV to be settable, it needs to come from a pointer
+	// codes wasn't passed as a pointer, so this still only permits changing the local copy of codes
+	codesV := reflect.ValueOf(&codes).Elem()
+
+	defaultsV := reflect.ValueOf(defaults)
+
+	for i := 0; i < codesV.NumField(); i++ {
+		field := codesV.Field(i)
+		if !field.CanSet() || field.Kind() != reflect.Int {
+			continue
+		}
+
+		if field.IsZero() {
+			field.Set(defaultsV.Field(i))
+		}
+	}
+
+	return codes
+}
+
+// withTagDefaults returns a new StatusCodes with values from the tag's configuration
+// applied for any field with the zero value.
+func (codes StatusCodes) withTagDefaults(tag string) (StatusCodes, error) {
+	if tag == "" {
+		return codes, nil
+	}
+
+	actions := strings.Split(tag, ",")
+
+	tagDefaultCodes := StatusCodes{}
+	// for codesV to be settable, it needs to come from a pointer
+	codesV := reflect.ValueOf(&tagDefaultCodes).Elem()
+
+	for _, action := range actions {
+		actionParts := strings.Split(action, "=")
+		if len(actionParts) != 2 {
+			return StatusCodes{}, fmt.Errorf("service: unable to parse action code: %q", action)
+		}
+
+		actionName := actionParts[0]
+		actionCode, err := strconv.ParseInt(actionParts[1], 10, 0)
+		if err != nil {
+			return StatusCodes{}, fmt.Errorf("service: unable to parse status code for action: %q: %s", action, err)
+		}
+
+		actionField := codesV.FieldByName(actionName)
+		if !actionField.IsValid() {
+			return StatusCodes{}, fmt.Errorf("service: unknown action name: %s", actionName)
+		}
+
+		if actionField.Kind() != reflect.Int {
+			return StatusCodes{}, fmt.Errorf("service: field not int: %s", actionName)
+		}
+
+		if !actionField.CanSet() {
+			return StatusCodes{}, fmt.Errorf("service: unable to set field: %s", actionName)
+		}
+		actionField.SetInt(actionCode)
+	}
+
+	return codes.WithDefaults(tagDefaultCodes), nil
+}
+
+// WithTagDefaults returns a new StatusCodes by applying the given tag and defaults.
+func (codes StatusCodes) WithTagDefaults(tag string, defaults StatusCodes) (StatusCodes, error) {
+	codes, err := codes.withTagDefaults(tag)
+	if err != nil {
+		return StatusCodes{}, err
+	}
+
+	return codes.WithDefaults(defaults), nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/values/encode.go b/vendor/github.com/splunk/go-splunk-client/pkg/values/encode.go
new file mode 100644
index 00000000..0d94e2f5
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/values/encode.go
@@ -0,0 +1,230 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 values implements encoding objects into url.Values.
+package values
+
+import (
+	"fmt"
+	"net/url"
+	"reflect"
+)
+
+// Encode returns url.Values for a given input interface.
+//
+// A struct field's key defaults to the name of the field. Nested values default
+// to having their key as a dotted suffix to the parent object's key. An empty parent
+// key results in the child key being used directly. The parent key for the original
+// value passed to Encode is an empty string.
+//
+// Anonymous struct fields also start with an empty parent key.
+//
+// Struct tags can be used to customize the encoding behavior of specific fields.
+// Tags are formatted as "<key>,<option>...". If <key> is left empty the default
+// key value will be used, which is the name of the field. The field is not encoded
+// if the full value of the tag is "-".
+//
+// The name of the encoded value may also be determined by having it adhere to the
+// values.KeyEncoder interface, of which the GetURLKey method accepts a parent and
+// child key and returns a customized key.
+//
+// Option flags can be included as comma-separated values after <key>. Supported
+// options are:
+//
+// • omitzero - Omit the field if it is the zero value for its type. Note that
+// the zero value for a slice is nil. An empty slice is not treated as a nil slice.
+//
+// • fillempty - Populate empty slices (including nil) with a single value. The assigned
+// value will be the zero type for the slice element. If both fillempty and omitzero flags
+// are given, omitzero has precedence. This permits empty and nil slices to behave differently,
+// as configured.
+//
+// • anonymize - Treat the field as if it were anonymous. This gives it an empty
+// parent key.
+//
+// An error is returned if a value's key is an empty string at any level
+// of encoding.
+func Encode(i interface{}) (url.Values, error) {
+	inputV := reflect.ValueOf(i)
+
+	if !inputV.IsValid() {
+		return nil, fmt.Errorf("values: attempted Encode() on invalid (likely nil) type %T", i)
+	}
+
+	newValues := url.Values{}
+
+	if err := encodeValue("", &newValues, inputV); err != nil {
+		return nil, err
+	}
+
+	return newValues, nil
+}
+
+// encodeStructValue adds the given input struct to url.Values for a given key.
+func encodeStructValue(key string, inputV reflect.Value, values *url.Values) error {
+	inputT := inputV.Type()
+	for i := 0; i < inputV.NumField(); i++ {
+		field := inputT.Field(i)
+
+		if !field.IsExported() {
+			continue
+		}
+
+		fieldV := inputV.Field(i)
+
+		fieldName := field.Name
+
+		fieldTag := field.Tag.Get("values")
+		if fieldTag == "-" {
+			continue
+		}
+
+		fieldOptions, err := parseTagConfig(fieldTag)
+		if err != nil {
+			return err
+		}
+
+		// override if tag specified name
+		if fieldOptions.Name != "" {
+			fieldName = fieldOptions.Name
+		}
+
+		// clear anonymous-like fields
+		if field.Anonymous || fieldOptions.Anonymize {
+			fieldName = ""
+		}
+
+		fieldName, err = computedKey(inputV, key, fieldName)
+		if err != nil {
+			return err
+		}
+
+		// skip empty values if configured to do so
+		if fieldOptions.Omitzero && fieldV.IsZero() {
+			continue
+		}
+
+		// fill empty slices with a single zero value if configured to do so
+		if fieldV.Kind() == reflect.Slice && fieldV.Len() == 0 && fieldOptions.Fillempty {
+			nestedKey, err := computedKey(fieldV, fieldName, 0)
+			if err != nil {
+				return err
+			}
+
+			iV := reflect.New(fieldV.Type().Elem()).Elem()
+			if err := encodeValue(nestedKey, values, iV); err != nil {
+				return err
+			}
+		}
+
+		if err := encodeValue(fieldName, values, fieldV); err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+// encodeValue adds the given reflect.Value to url.Values for a given key and tagConfig.
+func encodeValue(key string, values *url.Values, value reflect.Value) error {
+	// use full custom encoding if implemented
+	if valuesEncoder, ok := value.Interface().(URLValuesSetter); ok {
+		return valuesEncoder.SetURLValues(key, values)
+	}
+
+	// use value-only custom encoding if implemented
+	if valueGetter, ok := value.Interface().(URLValueGetter); ok {
+		return encodeValue(key, values, reflect.ValueOf(valueGetter.GetURLValue()))
+	}
+
+	// fully dereference if needed
+	for value.Kind() == reflect.Ptr {
+		value = value.Elem()
+	}
+
+	switch value.Kind() {
+	default:
+		// refuse to encode to an empty key.
+		// note this is done only where this function adds to url.Values, as custom encoding should be
+		// trusted to choose the proper key, even if it was empty here.
+		if key == "" {
+			return fmt.Errorf("values: attempted to encode empty key for value %#v", value.Interface())
+		}
+
+		values.Add(key, fmt.Sprint(value.Interface()))
+
+	case reflect.Slice, reflect.Array:
+		for i := 0; i < value.Len(); i++ {
+			nestedKey, err := computedKey(value, key, i)
+			if err != nil {
+				return err
+			}
+
+			iV := value.Index(i)
+			if err := encodeValue(nestedKey, values, iV); err != nil {
+				return err
+			}
+		}
+
+	case reflect.Map:
+		for _, keyV := range value.MapKeys() {
+			nestedKey, err := computedKey(value, key, keyV.Interface())
+			if err != nil {
+				return err
+			}
+
+			nestedValue := value.MapIndex(keyV)
+			if err := encodeValue(nestedKey, values, nestedValue); err != nil {
+				return err
+			}
+		}
+
+	case reflect.Struct:
+		if err := encodeStructValue(key, value, values); err != nil {
+			return err
+		}
+
+	}
+
+	// use additional custom encoding if implemented
+	if valuesAdder, ok := value.Interface().(URLValuesAdder); ok {
+		return valuesAdder.AddURLValues(key, values)
+	}
+
+	return nil
+}
+
+// computedKey returns the key that should be used for the url.Values value. childKeyInterface
+// is an interface because it may be a map key, which isn't guaranteed to be a string. If the
+// input value doesn't implement the values.GetURLKey interface, the returned key will be
+// <parentKey>.<childKey>, or just <childKey> if <parentKey> is empty.
+func computedKey(value reflect.Value, parentKey string, childKeyInterface interface{}) (string, error) {
+	childKey := fmt.Sprint(childKeyInterface)
+
+	if keyEncoder, ok := value.Interface().(URLKeyGetter); ok {
+		return keyEncoder.GetURLKey(parentKey, childKey)
+	}
+
+	// unless overridden by KeyEncoder (above), slices and arrays use the parent key directly
+	if value.Kind() == reflect.Slice || value.Kind() == reflect.Array {
+		return parentKey, nil
+	}
+
+	// an empty parentKey indicates this is a top-level key, so the childKey should be returned directly
+	if parentKey == "" {
+		return childKey, nil
+	}
+
+	return fmt.Sprintf("%s.%s", parentKey, childKey), nil
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/values/encoder.go b/vendor/github.com/splunk/go-splunk-client/pkg/values/encoder.go
new file mode 100644
index 00000000..81da9fba
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/values/encoder.go
@@ -0,0 +1,43 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 values
+
+import "net/url"
+
+// URLValuesSetter is the interface for types that implement custom encoding to url.Values
+// for a given key.
+type URLValuesSetter interface {
+	SetURLValues(string, *url.Values) error
+}
+
+// URLValuesAdder is the interface for types that implement custom encoding to url.Values
+// for a given key in addition to default encoding. AddURLValues will be called in addition
+// to the default encoding methods. It is not called if the encoded type is a URLValuesSetter
+// or URLValueGetter.
+type URLValuesAdder interface {
+	AddURLValues(string, *url.Values) error
+}
+
+// URLKeyGetter is the interface for types that implement custom key calculation prior
+// to encoding to url.Values.
+type URLKeyGetter interface {
+	GetURLKey(parentKey string, childKeystring string) (string, error)
+}
+
+// URLValueGetter is the interface for types that implement custom value calculation
+// prior to encoding to url.Values.
+type URLValueGetter interface {
+	GetURLValue() interface{}
+}
diff --git a/vendor/github.com/splunk/go-splunk-client/pkg/values/tag_config.go b/vendor/github.com/splunk/go-splunk-client/pkg/values/tag_config.go
new file mode 100644
index 00000000..28cea1b9
--- /dev/null
+++ b/vendor/github.com/splunk/go-splunk-client/pkg/values/tag_config.go
@@ -0,0 +1,75 @@
+// Copyright 2022 Splunk, 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
+//
+//      https://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 values
+
+import (
+	"fmt"
+	"reflect"
+	"strings"
+
+	"golang.org/x/text/cases"
+	"golang.org/x/text/language"
+)
+
+// tagConfig represents a struct tag's intended configuration.
+type tagConfig struct {
+	// fields are exported (though type is not) so they can be set via reflection
+	Name      string
+	Omitzero  bool
+	Fillempty bool
+	Anonymize bool
+}
+
+// parseTagConfig returns a new tagConfig by parsing a tag string.
+func parseTagConfig(tag string) (tagConfig, error) {
+	newConfig := tagConfig{}
+
+	if tag == "" {
+		return newConfig, nil
+	}
+
+	tagParts := strings.Split(tag, ",")
+
+	newConfig.Name = tagParts[0]
+	flags := tagParts[1:]
+
+	// for newOptsV to be settable, it needs to be created from a pointer
+	newOptsV := reflect.ValueOf(&newConfig).Elem()
+
+	for _, flag := range flags {
+		// a flag may be an empty string, specifically to permit `values:"-,"` to be used to
+		// name a key "-" without omitting the field
+		if flag == "" {
+			continue
+		}
+
+		// capitalize the first letter of the flag so it can match a settable (exported) field
+		flagFieldName := cases.Title(language.English).String(flag)
+
+		flagField := newOptsV.FieldByName(flagFieldName)
+		if !flagField.IsValid() && flagField.Kind() == reflect.Bool {
+			return tagConfig{}, fmt.Errorf("values: unknown flag: %s", flag)
+		}
+
+		if !flagField.CanSet() {
+			return tagConfig{}, fmt.Errorf("values: unexpected error, unable to set option field %s", flagFieldName)
+		}
+
+		// checked to be Bool above, so this should be safe
+		flagField.SetBool(true)
+	}
+
+	return newConfig, nil
+}
diff --git a/vendor/golang.org/x/net/publicsuffix/list.go b/vendor/golang.org/x/net/publicsuffix/list.go
new file mode 100644
index 00000000..200617ea
--- /dev/null
+++ b/vendor/golang.org/x/net/publicsuffix/list.go
@@ -0,0 +1,181 @@
+// Copyright 2012 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run gen.go
+
+// Package publicsuffix provides a public suffix list based on data from
+// https://publicsuffix.org/
+//
+// A public suffix is one under which Internet users can directly register
+// names. It is related to, but different from, a TLD (top level domain).
+//
+// "com" is a TLD (top level domain). Top level means it has no dots.
+//
+// "com" is also a public suffix. Amazon and Google have registered different
+// siblings under that domain: "amazon.com" and "google.com".
+//
+// "au" is another TLD, again because it has no dots. But it's not "amazon.au".
+// Instead, it's "amazon.com.au".
+//
+// "com.au" isn't an actual TLD, because it's not at the top level (it has
+// dots). But it is an eTLD (effective TLD), because that's the branching point
+// for domain name registrars.
+//
+// Another name for "an eTLD" is "a public suffix". Often, what's more of
+// interest is the eTLD+1, or one more label than the public suffix. For
+// example, browsers partition read/write access to HTTP cookies according to
+// the eTLD+1. Web pages served from "amazon.com.au" can't read cookies from
+// "google.com.au", but web pages served from "maps.google.com" can share
+// cookies from "www.google.com", so you don't have to sign into Google Maps
+// separately from signing into Google Web Search. Note that all four of those
+// domains have 3 labels and 2 dots. The first two domains are each an eTLD+1,
+// the last two are not (but share the same eTLD+1: "google.com").
+//
+// All of these domains have the same eTLD+1:
+//  - "www.books.amazon.co.uk"
+//  - "books.amazon.co.uk"
+//  - "amazon.co.uk"
+// Specifically, the eTLD+1 is "amazon.co.uk", because the eTLD is "co.uk".
+//
+// There is no closed form algorithm to calculate the eTLD of a domain.
+// Instead, the calculation is data driven. This package provides a
+// pre-compiled snapshot of Mozilla's PSL (Public Suffix List) data at
+// https://publicsuffix.org/
+package publicsuffix // import "golang.org/x/net/publicsuffix"
+
+// TODO: specify case sensitivity and leading/trailing dot behavior for
+// func PublicSuffix and func EffectiveTLDPlusOne.
+
+import (
+	"fmt"
+	"net/http/cookiejar"
+	"strings"
+)
+
+// List implements the cookiejar.PublicSuffixList interface by calling the
+// PublicSuffix function.
+var List cookiejar.PublicSuffixList = list{}
+
+type list struct{}
+
+func (list) PublicSuffix(domain string) string {
+	ps, _ := PublicSuffix(domain)
+	return ps
+}
+
+func (list) String() string {
+	return version
+}
+
+// PublicSuffix returns the public suffix of the domain using a copy of the
+// publicsuffix.org database compiled into the library.
+//
+// icann is whether the public suffix is managed by the Internet Corporation
+// for Assigned Names and Numbers. If not, the public suffix is either a
+// privately managed domain (and in practice, not a top level domain) or an
+// unmanaged top level domain (and not explicitly mentioned in the
+// publicsuffix.org list). For example, "foo.org" and "foo.co.uk" are ICANN
+// domains, "foo.dyndns.org" and "foo.blogspot.co.uk" are private domains and
+// "cromulent" is an unmanaged top level domain.
+//
+// Use cases for distinguishing ICANN domains like "foo.com" from private
+// domains like "foo.appspot.com" can be found at
+// https://wiki.mozilla.org/Public_Suffix_List/Use_Cases
+func PublicSuffix(domain string) (publicSuffix string, icann bool) {
+	lo, hi := uint32(0), uint32(numTLD)
+	s, suffix, icannNode, wildcard := domain, len(domain), false, false
+loop:
+	for {
+		dot := strings.LastIndex(s, ".")
+		if wildcard {
+			icann = icannNode
+			suffix = 1 + dot
+		}
+		if lo == hi {
+			break
+		}
+		f := find(s[1+dot:], lo, hi)
+		if f == notFound {
+			break
+		}
+
+		u := nodes[f] >> (nodesBitsTextOffset + nodesBitsTextLength)
+		icannNode = u&(1<<nodesBitsICANN-1) != 0
+		u >>= nodesBitsICANN
+		u = children[u&(1<<nodesBitsChildren-1)]
+		lo = u & (1<<childrenBitsLo - 1)
+		u >>= childrenBitsLo
+		hi = u & (1<<childrenBitsHi - 1)
+		u >>= childrenBitsHi
+		switch u & (1<<childrenBitsNodeType - 1) {
+		case nodeTypeNormal:
+			suffix = 1 + dot
+		case nodeTypeException:
+			suffix = 1 + len(s)
+			break loop
+		}
+		u >>= childrenBitsNodeType
+		wildcard = u&(1<<childrenBitsWildcard-1) != 0
+		if !wildcard {
+			icann = icannNode
+		}
+
+		if dot == -1 {
+			break
+		}
+		s = s[:dot]
+	}
+	if suffix == len(domain) {
+		// If no rules match, the prevailing rule is "*".
+		return domain[1+strings.LastIndex(domain, "."):], icann
+	}
+	return domain[suffix:], icann
+}
+
+const notFound uint32 = 1<<32 - 1
+
+// find returns the index of the node in the range [lo, hi) whose label equals
+// label, or notFound if there is no such node. The range is assumed to be in
+// strictly increasing node label order.
+func find(label string, lo, hi uint32) uint32 {
+	for lo < hi {
+		mid := lo + (hi-lo)/2
+		s := nodeLabel(mid)
+		if s < label {
+			lo = mid + 1
+		} else if s == label {
+			return mid
+		} else {
+			hi = mid
+		}
+	}
+	return notFound
+}
+
+// nodeLabel returns the label for the i'th node.
+func nodeLabel(i uint32) string {
+	x := nodes[i]
+	length := x & (1<<nodesBitsTextLength - 1)
+	x >>= nodesBitsTextLength
+	offset := x & (1<<nodesBitsTextOffset - 1)
+	return text[offset : offset+length]
+}
+
+// EffectiveTLDPlusOne returns the effective top level domain plus one more
+// label. For example, the eTLD+1 for "foo.bar.golang.org" is "golang.org".
+func EffectiveTLDPlusOne(domain string) (string, error) {
+	if strings.HasPrefix(domain, ".") || strings.HasSuffix(domain, ".") || strings.Contains(domain, "..") {
+		return "", fmt.Errorf("publicsuffix: empty label in domain %q", domain)
+	}
+
+	suffix, _ := PublicSuffix(domain)
+	if len(domain) <= len(suffix) {
+		return "", fmt.Errorf("publicsuffix: cannot derive eTLD+1 for domain %q", domain)
+	}
+	i := len(domain) - len(suffix) - 1
+	if domain[i] != '.' {
+		return "", fmt.Errorf("publicsuffix: invalid public suffix %q for domain %q", suffix, domain)
+	}
+	return domain[1+strings.LastIndex(domain[:i], "."):], nil
+}
diff --git a/vendor/golang.org/x/net/publicsuffix/table.go b/vendor/golang.org/x/net/publicsuffix/table.go
new file mode 100644
index 00000000..fd3c3ca4
--- /dev/null
+++ b/vendor/golang.org/x/net/publicsuffix/table.go
@@ -0,0 +1,10583 @@
+// generated by go run gen.go; DO NOT EDIT
+
+package publicsuffix
+
+const version = "publicsuffix.org's public_suffix_list.dat, git revision 3c213aab32b3c014f171b1673d4ce9b5cd72bf1c (2021-11-26T23:05:53Z)"
+
+const (
+	nodesBitsChildren   = 10
+	nodesBitsICANN      = 1
+	nodesBitsTextOffset = 15
+	nodesBitsTextLength = 6
+
+	childrenBitsWildcard = 1
+	childrenBitsNodeType = 2
+	childrenBitsHi       = 14
+	childrenBitsLo       = 14
+)
+
+const (
+	nodeTypeNormal     = 0
+	nodeTypeException  = 1
+	nodeTypeParentOnly = 2
+)
+
+// numTLD is the number of top level domains.
+const numTLD = 1504
+
+// Text is the combined text of all labels.
+const text = "9guacuiababia-goracleaningroks-theatree164-balsfjordd-dnshome-we" +
+	"bservercellikes-piedmonticellocalzoneastasiaetnaamesjevuemielnod" +
+	"umcpeastcoastaldefenceastus2038birdartcenterprisecloudaccesscamb" +
+	"ridgeiseiroumuenchenishiazaindielddanuorrindigenamsosnowiecherni" +
+	"vtsiciliabirkenesoddtangenovaragusarts3-website-eu-west-1birthpl" +
+	"acebitbucketrzynishigovtatsunocelotenkawabjarkoyoshiokanumazuryu" +
+	"kindowapblogsiteleafamilycompany-2bjerkreimbaltimore-og-romsdalp" +
+	"ha-myqnapcloud66bjugnieznorddalombardynalias3-website-sa-east-1b" +
+	"lackfridayukuhashimoichinosekigaharabloombergbauernishiharabloxc" +
+	"ms3-website-us-east-1bluebitemasekd1bmoattachments3-website-us-w" +
+	"est-1bms3-website-us-west-2bmweeklylotteryurihonjournalistjohnis" +
+	"hiizunazukindustriabnrwegroweibolognagareyamakeupowiathletajimag" +
+	"eandsoundandvision-riopretochigiftsalangenishikatakatsukindustri" +
+	"esteamfamberkeleyusuharabomloabaths-heilbronnoysundivttasvuotnak" +
+	"aniikawatanagurabondigitaloceanspacesalon-1bonnishikatsuragit-re" +
+	"posts-and-telecommunicationsaltdalomzaporizhzhegurinfinitinsureg" +
+	"ruhostingloboavistanbulsan-sudtirolondonetskaratsuginamikatagami" +
+	"hokkaidovre-eikerbookinghostedpictetnedalondrinamsskoganeintelli" +
+	"gencebookonlinewjerseyusuisservegame-serverboomlajollamericanexp" +
+	"ressexyuufcfanishikawazukamisatokaizukameyamatotakadaboschaeffle" +
+	"rdalorenskoglogoweirbostik-serveronagasakikuchikuseihicampobasso" +
+	"ciatest-iservecounterstrikebostonakijinsekikogentappsselfiparach" +
+	"utingloppenzaolbia-tempio-olbiatempioolbialystokkeliwebhostinglu" +
+	"gsjcbnpparibashkiriabotanicalgardeno-stagingmbhartipschlesisches" +
+	"aludiyuzawabotanicgardenishimerabotanychernovtsyncloudrangedalot" +
+	"tokorozawabouncemerckmsdnipropetrovskjervoyageometre-experts-com" +
+	"ptablesalvadordalibabalena-devicesalzburgminakamichiharabounty-f" +
+	"ullensakerrypropertiesamegawaboutiquebecommerce-shopitsitemp-dns" +
+	"watch-and-clockerboutireserve-onlinewmexicodyn-o-saurlandesamnan" +
+	"gerbozen-sudtirolouvreisenishinomiyashironocparaglidingmodelling" +
+	"mxboxfordelmenhorstalbansampaleoddabozen-suedtirolpusercontentat" +
+	"toolforgerockartuzybplaceducatorprojectaxihuanishinoomotegohtawa" +
+	"ramotoineppubtlsamsclubartowellbeingzonebrandywinevalleybrasilia" +
+	"bresciabrindisibenikikugawashtenawdevcdnaccessobetsuitagajobserv" +
+	"ableusercontentcmeloyalistoragebristoloseyouriparisor-fronishino" +
+	"shimatsumotofukebritishcolumbialowiezaganquannefrankfurtcp4broad" +
+	"castlebtimnetzlgretakaharussiabroadwaybroke-itvedestrandray-dnst" +
+	"racebrokerbrothermesaverdealerbrowsersafetymarketsamsungrimstadr" +
+	"ayddns5ybrumunddalublindesnesandnessjoenishiokoppegardraydnsupda" +
+	"terbrunelastxenishitosashimizunaminamibosognebrusselsandoybruxel" +
+	"lesandvikcoromantovalle-daostavangerbryanskodjedugit-pagespeedmo" +
+	"bilizeroticagliaricoharuhrbrynewportgorybuskerudrobaknoluoktachi" +
+	"kawafflecellclstagehirnishiwakinterhostsolutionsanfranciscofreak" +
+	"unekobayashikaoirmembersangomniweatherchannelucaniabuzentsujiieb" +
+	"uzzwesteuropenairbusantiquest-a-la-maisondre-landroidrrbwestfale" +
+	"nissandiegomurabzhitomirbzzcoloradoplateaudiopsysantacruzsantafe" +
+	"djeffersoncolumbusheycommunecommunity-prochowicecomobaranzancomp" +
+	"aremarkerryhotelsantamariakecomsecaaskoyabearalvahkievennodesaba" +
+	"erobaticketsantoandreamhostersanukintuitjxjavaldaostathellevange" +
+	"rcondoshichinohealth-carereformemergencyahabaghdadultkmaxxn--0tr" +
+	"q7p7nnconferenceconstructionconsuladogadollsaobernardoconsultant" +
+	"hropologyconsultingrossetouchihayaakasakawaharacontactksatxn--11" +
+	"b4c3dyndns-blogdnsaogoncarriercontagematsubaraumalatvuopmicrosof" +
+	"tbankasaokamikoaniihamatamakawajimaritimodumemorialcontemporarya" +
+	"rteducationalchikugodonnagatorogersvp4contractorskenconventuresh" +
+	"inodearthruherecipescaracalvinklein-berlindaskvollcookingchannel" +
+	"sdvrdnsdojoetsuwanouchikujogaszkolancashireclaimsaotomeiwamashik" +
+	"okuchuocoolcooperativano-frankivskygearapparochernigovernmentlon" +
+	"-2copenhagencyclopedichitosetoeidsvollucernecoproductionsapporoc" +
+	"orporationcorsicahcesuoloansardegnaroycorvettempurlcosenzakopane" +
+	"lblagrarchaeologyeongbuk0cosidnsfor-better-thanawatchandclockash" +
+	"ibatakasakiwakunigamilanotairestaurantmparsardiniacostumedicalta" +
+	"nissettaipeigersundyndns-freeboxosascoli-picenordlandyndns-homed" +
+	"nsarlcouchpotatofriesarpsborgroundhandlingroznycoukashiharacounc" +
+	"ilcouponsarufutsunomiyawakasaikaitabashijonawatecozoravennaharim" +
+	"alborkashiwaracqcxn--12c1fe0bradescotlandyndns-ipartinuyamashina" +
+	"tsukigatakaokalmykiacranbrookuwanalyticsxn--12cfi8ixb8lcrdyndns-" +
+	"mailcreditcardyndns-office-on-the-webercreditunioncremonashgabad" +
+	"addjaguarqhachinohedmarkashiwazakiwielunnercrewfarsundyndns-pics" +
+	"asayamatta-varjjatoyosatoyokawacricketoyotapartsasebofagemologic" +
+	"allynxn--12co0c3b4evalled-aostakinouecrimeast-kazakhstanangercro" +
+	"tonecrownipartycrsaskatchewancruisesassarinvestmentsaudacuisinel" +
+	"lancasterculturalcentertainmentoyotomiyazakinzais-a-candidatecun" +
+	"eocupcakecuritibackyardsauheradyndns-remotewdyndns-serverdalcurv" +
+	"alledaostakkokonoecymruovatmallorcafederation-webpaashorokanaiec" +
+	"yonabarumemsettlersavannahgacyouthachiojiyaitakahashimamakisosak" +
+	"itagawaferraraferrarivneferrerotikagoshimalopolskanlandyndns-wik" +
+	"irafetsundyndns-workshoparenakanojohanamakinoharafgujoinvilleitu" +
+	"ngsenfhvalerfidoomdnsiskinkyotobetsulikescandyn53fieldyndns1figu" +
+	"eresinstagingulenfilateliafilegear-audnedalnfilegear-dealstahaug" +
+	"esunderseaportsinfolionetworkangerfilegear-gbizfilegear-iefilege" +
+	"ar-jpmorganfilegear-sg-1filminamifuranofinalfinancefineartschule" +
+	"finlandynnsaveincloudyndns-webhareidsbergentingrpasadenarashinof" +
+	"innoyfirebaseappassenger-associationfirenetoyourafirenzefireston" +
+	"efirewebhopocznordreisa-hockeynutazurestaticappspaceusercontento" +
+	"ystre-slidrettozawafirmdalegoldpoint2thisamitsukefishingolffansc" +
+	"hulserverfitjarvodkagaminogiessennanjobojis-a-catererfitnessettl" +
+	"ementozsdeloittenrissagaeroclubmedecincinnativeamericanantiquest" +
+	"-mon-blogueurodirumaceratabitorderimo-siemenscaledekaascolipicen" +
+	"oboribetsuckschwarzgwangjuifminamiiserniafjalerfldrvallee-aoster" +
+	"oyflekkefjordynservebbsaves-the-whalessandria-trani-barletta-and" +
+	"riatranibarlettaandriaflesbergunmaniwakurateflickragerokunohealt" +
+	"hcareerschweizflirfloginlinefloraflorencefloridatsunangojomedici" +
+	"nakaiwamizawatchesciencecentersciencehistoryfloripaderbornfloris" +
+	"tanohataitogliattis-a-celticsfanfloromskoguovdageaidnulvikasukab" +
+	"edzin-addrammenuorochesterflowerscientistordalfltrani-andria-bar" +
+	"letta-trani-andriaflynnhosting-clusterfndynulmetacentrumeteorapp" +
+	"assagensavonarusawafnwkasumigaurayasudafoodnetworkdalfor-ourfor-" +
+	"somedio-campidano-mediocampidanomediofor-theaterforexrothachirog" +
+	"atakahatakaishimogosenforgotdnscjohnsonforli-cesena-forlicesenaf" +
+	"orlillehammerfeste-ipatriaforsaleikangerforsandasuoloftraniandri" +
+	"abarlettatraniandriafortalfortexascrapper-sitefortmissoulanciafo" +
+	"rtworthadanorfolkebibleluxembourgushikamifuranore-og-uvdalfosnes" +
+	"crappingwiddleksvikasuyanaizuerichardlillyfotranoyfoxafozfranami" +
+	"zuhobby-sitextileirfjordynv6francaiseharafranziskanerimaringatla" +
+	"ntaiwanairforcechireadthedocscbgxn--1ctwolominamataobaomoriguchi" +
+	"haraffleentry-snowplowiczeladzfredrikstadtvscrysecuritytacticser" +
+	"vehalflifeinsurancefreeddnsfreebox-oservehttpbin-butterfreedeskt" +
+	"oppdalfreemasonryfreemyiphosteurovisionfreesitefreetlservehumour" +
+	"freiburgfreseniuscultureggio-calabriafribourgfriuli-v-giuliafriu" +
+	"li-ve-giuliafriuli-vegiuliafriuli-venezia-giuliafriuli-veneziagi" +
+	"uliafriuli-vgiuliafriuliv-giuliafriulive-giuliafriulivegiuliafri" +
+	"ulivenezia-giuliafriuliveneziagiuliafriulivgiuliafrlfroganservei" +
+	"rchonanbulsan-suedtirolukowestus2frognfrolandynvpnpluscountryest" +
+	"ateofdelawarecreationfrom-akrehamnfrom-alfrom-arfrom-azimuthatog" +
+	"ayabukihokumakogenglandyroyrvikingruenoharafrom-capetownnews-sta" +
+	"gingfrom-coffeedbackplaneappaviancargodaddyn-vpndnserveminecraft" +
+	"ranslatefrom-ctransportefrom-dchoseikarugamvikariyaltakasagotsuk" +
+	"isofukushimangyshlakasamatsudopaasnesoddenmarkhangelskjakdneprop" +
+	"etrovskiervaapsteiermarkarlsoyfrom-deatnuniversityfrom-flanderse" +
+	"rvemp3from-gaulardalfrom-hichisodegaurafrom-iafrom-idfrom-ilfrom" +
+	"-in-brbar0from-kservep2pfizerfrom-kyowariasahikawafrom-langevagr" +
+	"igentomologyeonggiehtavuoatnabudapest-a-la-masion-rancherkasydne" +
+	"yfrom-malselvendrellfrom-mdfrom-medizinhistorischeservepicserveq" +
+	"uakefrom-midsundfrom-mnfrom-modalenfrom-mservesarcasmatartanddes" +
+	"ignfrom-mtnfrom-nchoshibuyachtsanjotelulubindaluroyfrom-ndfrom-n" +
+	"efrom-nhktransurlfrom-njservicesevastopolefrom-nminamiizukaminok" +
+	"awanishiaizubangefrom-nvallee-d-aosteigenfrom-nynysagamiharafrom" +
+	"-ohdattorelayfrom-oketogonohejis-a-chefastly-terrariuminamiechiz" +
+	"enfrom-orfrom-padoval-daostavalleyfrom-pratogurafrom-ris-a-conse" +
+	"rvativegasevenassisicilyfrom-schoenbrunnfrom-sdscloudfrom-tnfrom" +
+	"-txn--1lqs03nfrom-utsiracusaikirovogradoyfrom-vald-aostarostwodz" +
+	"islawhalingfrom-vtrapaniizafrom-wafrom-wiardwebspacefrom-wvallee" +
+	"aosteinkjerusalembroideryfrom-wyfrosinonefrostaplesewhoswholding" +
+	"small-webredirectmeeresistancefroyahooguyfruskydivingfstcgroupgf" +
+	"oggiafujiiderafujikawaguchikonefujiminokamoenairguardiannakadoma" +
+	"rineat-urlfujinomiyadattowebcampinashikiminohostfoldnavyfujiokay" +
+	"amalvikaszubyfujisatoshonairlinebraskaunicommbankatowicefujisawa" +
+	"fujishiroishidakabiratoridebianfujitsurugashimamurogawafujiyoshi" +
+	"davvenjargap-northeast-3fukayabeatsharis-a-cpadualstackatsushika" +
+	"beebyteapplinzis-a-cubicle-slavellinodeobjectsharpharmacienshawa" +
+	"iijimarburgfukuchiyamadavvesiidappnodebalancertificationfukudomi" +
+	"gawafukuis-a-democratravelchannelfukumitsubishigakiryuohkurafuku" +
+	"okazakisarazure-mobileirvikatsuyamarriottravelersinsurancefukuro" +
+	"ishikarikaturindalfukusakishiwadazaifudaigokaseljordfukuyamagata" +
+	"jimifunefunabashiriuchinadafunagatajiris-a-designerfunahashikami" +
+	"amakusatsumasendaisenergyfundaciofunkfeuerfuoiskujukuriyamandalf" +
+	"uosskoczowienfurnitureggio-emilia-romagnakasatsunairportland-4-s" +
+	"alernogatabusebastopologyeongnamegawafaicloudinedre-eikerfurubir" +
+	"afurudonostiaafurukawairtelebitbridgestoneen-rootaruis-a-doctorf" +
+	"usoftwarezzoologyfussaintlouis-a-anarchistoireggiocalabriafutaba" +
+	"yamaguchinomihachimanagementrdfutboldlygoingnowhere-for-morenaka" +
+	"tombetsumitakagiizefuttsurugimperiafuturecmshellaspeziafuturehos" +
+	"tingfuturemailingfvghangglidinghangoutsystemscloudsitehannanmoku" +
+	"izumodenakayamansionshimojis-a-greenhannorthwesternmutualhanyuze" +
+	"nhapmircloudletshimokawahappounjargaharstadharvestcelebrationhas" +
+	"amanxn--1lqs71dhasaminami-alpshimokitayamattelekommunikationhash" +
+	"banghasudahasura-appharmacyshimonitayanagitapphdfcbankazohasvika" +
+	"zteleportlligatrendhostinghatoyamazakitahiroshimaoris-a-gurunusu" +
+	"alpersonhatsukaichikaiseiyoichippubetsubetsugarunzenhattfjelldal" +
+	"hayashimamotobungotakadagestangeorgeorgiahazuminobusellfylkesbib" +
+	"lackbaudcdn-edgestackhero-networkinggroupliguriahelsinkitakamiiz" +
+	"umisanofidelitysvardontexistmein-iservebeero-stagehembygdsforbun" +
+	"dhemneshimonosekikawahemsedalhepforgeblockshimosuwalkis-a-hard-w" +
+	"orkershimotsukeheroyhgtvalleedaostehidorahigashiagatsumagoianiah" +
+	"igashichichibunkyonanaoshimakanegasakilatironrenderhigashihirosh" +
+	"imanehigashiizumozakitakatakamoriokakudamatsuehigashikagawahigas" +
+	"hikagurasoedahigashikawakitaaikitakyushuaiahigashikurumeetrentin" +
+	"-sud-tirolhigashimatsushimapartmentshimotsumayfirstockholmestran" +
+	"dhigashimatsuyamakitaakitadaitoigawahigashimurayamamotorcycleshi" +
+	"nichinanhigashinarusells-for-lesshinjournalismailillesandefjordh" +
+	"igashinehigashiomitamamurausukitamihamadahigashiosakasayamanakak" +
+	"ogawahigashishirakawamatakanabeautysfjordhigashisumiyoshikawamin" +
+	"amiaikitamotosumy-gatewayhigashitsunortonhigashiurawa-mazowszexn" +
+	"etlifyis-a-hunterhigashiyamatokoriyamanashifteditorxn--1qqw23ahi" +
+	"gashiyodogawahigashiyoshinogaris-a-knightpointtohoboleslawiecono" +
+	"miastalowa-wolawawsmpplanetariuminamimakis-a-landscaperugiahirai" +
+	"zumisatohnoshoooshikamaishimodatehirakatashinagawahiranairtraffi" +
+	"cplexus-1hirarahiratsukaerusrcfastlylbananarepublic66hirayaizuwa" +
+	"kamatsubushikusakadogawahistorichouseshinjukumamotoyamasfjordenh" +
+	"itachiomiyagildeskaliszhitachiotagophiladelphiaareadmyblogsytehi" +
+	"traeumtgeradell-ogliastraderhjartdalhjelmelandholeckochikushinon" +
+	"senasakuchinotsuchiurakawaholidayhomegoodshinkamigototalhomeiphi" +
+	"latelyhomelinkyard-cloudjiffyresdalhomelinuxn--2m4a15ehomeoffice" +
+	"homesecuritymacaparecidahomesecuritypchoyodobashichikashukujitaw" +
+	"araholtalenissayokkaichiropractichirurgiens-dentistes-en-franceh" +
+	"omesenseeringhomesklepphilipsynology-diskstationhomeunixn--2scrj" +
+	"9christiansburgripehondahongotembaixadahonjyoitakanezawahorninda" +
+	"lhorsells-for-ustkanmakitaurahortendofinternet-dnshinshinotsurge" +
+	"onshalloffamelbournehospitalhoteleshinshirohotelwithflightshinto" +
+	"kushimahotmailhoyangerhoylandetroitskazunoticiashintomikasaharah" +
+	"umanitieshinyoshitomiokamishihoronobeauxartsandcraftshiojirishir" +
+	"ifujiedahurdalhurumajis-a-lawyerhyllestadhyogoris-a-liberalhyuga" +
+	"warahyundaiwafuneis-uberleetrentin-suedtirolis-very-badajozis-a-" +
+	"nursells-itrentin-sudtirolis-very-evillageis-very-goodyearis-ver" +
+	"y-niceis-very-sweetpepperis-with-thebandownloadisleofmanaustdalj" +
+	"env-arubajddarchitecturealtorlandjeonnamerikawauejetztrentino-a-" +
+	"adigejevnakershusdecorativeartshitaramajewelryjewishartgalleryjf" +
+	"kharkivanylvenneslaskerrylogisticshizukuishimofusakakinokiajgora" +
+	"jlljls-sto1jls-sto2jls-sto3jmphoenixn--30rr7yjnjaworznoshiroomgj" +
+	"oyentrentino-aadigejoyokaichibalashovhadselburgjpnjprshizuokamit" +
+	"suejurkoshimizumakiyosatokamachintaifun-dnsaliashoujis-a-persona" +
+	"ltrainerkoshunantankhmelnitskiyamarshallstatebankharkovaokosugek" +
+	"otohiradomainstitutekotourakouhokutamakiyosemitekounosupabasells" +
+	"yourhomeftphotographysiokouyamarylandkouzushimarylhurstjordalsha" +
+	"lsenkozagawakozakiyosunndalkozowiiheyakagekpnkppspbar2krasnikaho" +
+	"kutokashikizunokunimilitarykrasnodarkredstonekrelliankristiansan" +
+	"dcatshowakristiansundkrodsheradkrokstadelvalle-aostatic-accessho" +
+	"wtimeldalkryminamioguni5kumanotteroykumatorinovecoregontrailroad" +
+	"kumejimashikekumenantokonamegatakashimashikis-a-photographerokus" +
+	"sldkunisakis-a-playershiftcryptonomichigangwonkunitachiarailwayk" +
+	"unitomigusukukis-a-republicancerresearchaeologicaliforniakunnepp" +
+	"uboliviajessheimpertrixcdn77-secureggioemiliaromagnaklodzkodaira" +
+	"kunstsammlungkunstunddesignkuokgrouphxn--3bst00minamisanrikubets" +
+	"upplykurehabmerkurgankurobeepilepsykkylvenicekurogimimatakasugai" +
+	"s-a-rockstarachowicekuroisogndalkuromatsunais-a-socialistdlibest" +
+	"adkurotakikawasakis-a-soxfankushirogawakustanais-a-studentalkusu" +
+	"pplieshwildlifestylekutchanelkutnow-dnsienarutomobelementoraykuz" +
+	"umakis-a-teacherkassyno-dshirakofuefukihabororoshiranukamisunaga" +
+	"wakvafjordkvalsundkvamlidlugolekafjordvagsoygardendoftheinternet" +
+	"flixilovecollegefantasyleaguernseykvanangenkvinesdalkvinnheradkv" +
+	"iteseidatingkvitsoykwpspdnsigdalkzmisasaguris-an-accountantshira" +
+	"ois-a-linux-usershioyandexcloudmisawamisconfusedmishimassa-carra" +
+	"ra-massacarraramassabusinessebykleclerchromediatechnologymissile" +
+	"zajskhmelnytskyivaporcloudmisugitokuyamassivegridmitakeharamitou" +
+	"rismilemitoyoakemiuramiyazurecontainerdpolicemiyotamanomjondalen" +
+	"mlbfanmontrealestatefarmequipmentrentino-s-tirolmonza-brianzappo" +
+	"siiitesilkhplaystation-cloudyclustermonza-e-della-brianzaptokyot" +
+	"angouvichungnamdalseidfjordurbanamexhibitionissedalutskarmoymonz" +
+	"abrianzaramonzaebrianzamonzaedellabrianzamoonscaleforcemordoviam" +
+	"oriyamasudamoriyoshiminamiashigaramormonstermoroyamatsumaebashik" +
+	"shacknetrentino-stirolmortgagemoscowilliamhillmoseushistorymosjo" +
+	"enmoskenesimple-urlmossirdalmosviklabudhabikinokawabarthaebaruer" +
+	"icssongdalenviknakatsugawamoteginowaniigatakahamangooglecodespot" +
+	"rentino-sud-tirolmoviemovimientolgamozilla-iotrentino-sudtirolmt" +
+	"ranbymuginozawaonsensiositemuikaminoyamaxunispacemukoebenhavnmul" +
+	"houseminemunakatanemuncienciamuosattemupiemontemurmanskmpspawnex" +
+	"tdirectrentino-alto-adigemurotorcraftrentino-sued-tirolmusashino" +
+	"haramuseetrentino-suedtirolmuseumverenigingmusicarbonia-iglesias" +
+	"-carboniaiglesiascarboniamutsuzawamy-vigorlicemy-wanggoupilemyac" +
+	"tivedirectorymyasustor-elvdalmycdmycloudnslupsknx-serversicherun" +
+	"gmydattolocalhistorymyddnsgeekgalaxymydissentrentinoa-adigemydob" +
+	"isshikis-an-actormydroboehringerikemydslzmyeffectrentinoaadigemy" +
+	"fastblogermyfirewallonieruchomoscienceandindustrynmyforuminamita" +
+	"nemyfritzmyftpaccessmolaquilansmushcdn77-sslingmyhome-servermyji" +
+	"nomykolaivarggatrentinoalto-adigemymailermymediapchurchaseljeeps" +
+	"ondriodejaneirodoymyokohamamatsudamypepilotsnoasakataketomisatos" +
+	"himatsuzakis-an-actresshiraokamitondabayashiogamagoriziamypetsok" +
+	"ndalmyphotoshibalatinoopencraftrainingmypicturesolarssonmypsxn--" +
+	"3ds443gmysecuritycamerakermyshopblocksolognemyshopifymyspreadsho" +
+	"ppingmythic-beastsolundbeckomaganemytis-a-bookkeeperspectakarazu" +
+	"kaluganskomakiyokawaramytuleap-partnersomamyvncircustomer-ocimdb" +
+	"amblebesbyeniwaizumiotsukumiyamazonawsglobalacceleratorahimeshim" +
+	"abaridagawakuyachimataijibmdevelopmentashkentatamotorsitestingla" +
+	"dedyn-berlincolnavigationavoizumizakiitatebayashiibahccavuotnaga" +
+	"rag-cloud-charitydalipaywhirlimitedgcanonoichinomiyakebinagisoch" +
+	"ildrensgardenavuotnapleskns3-eu-west-2mywirepaircraftingvollolip" +
+	"opimientakayamatsuuraplatter-appinbarcelonagawalbrzycharternopil" +
+	"awalesundiscountysnes3-eu-west-3utilities-1platterpinkomatsushim" +
+	"arugame-hostyhostingplazaplcube-serverplumbingoplurinacionalpodh" +
+	"alepodlasiellaktyubinskiptveterinairealmpmnpodzonepohlpoivronpok" +
+	"erpokrovskommunalforbundpoliticarrdpolitiendapolkowicepoltavalle" +
+	"-d-aostaticsopotrentinos-tirolpomorzeszowinbarclaycards3-externa" +
+	"l-1ponpesaro-urbino-pesarourbinopesaromasvuotnaritakoelnponypord" +
+	"enonepornporsangerporsangugeporsgrunnanyokoshibahikariwanumataka" +
+	"zakis-an-artistgstagepoznanpraxis-a-bruinsfanprdpreservationpres" +
+	"idioprgmrprimetelemarkommuneprincipeprivatizehealthinsuranceprof" +
+	"esionalprogressivestnesor-odalpromombetsupportrentinostirolprope" +
+	"rtyprotectionprotonetrentinosud-tirolprudentialpruszkowindmillpr" +
+	"vcyberlevagangaviikanonjis-an-engineeringprzeworskogpugliapulawy" +
+	"pupioneerpvhagebostadpvtrentinosudtirolpwcistrondheimmobilieniss" +
+	"hingucciprianidurhamburgriwataraidynathomebuiltwithdarkarpaczest" +
+	"-le-patroniyodogawapythonanywherepbodynamic-dnsor-varangerpzqldq" +
+	"otoyohashimotoolsorfoldqponiatowadaqslgbtrentinosued-tirolqualif" +
+	"ioappippueblockbusterniiminamiawajikis-an-anarchistoricalsociety" +
+	"quickconnectrentinosuedtirolquicksytesorocabalestrandabergamoare" +
+	"keymachineustargardquipelementsorreisahayakawakamiichikawamisato" +
+	"ttoris-an-entertainerswedenswidnicartoonartdecologiaswidnikkokam" +
+	"iminersouthcarolinarvikomonotogawaswiebodzin-dslattuminanoswinou" +
+	"jscienceandhistoryswissmarterthanyoutwentesynology-dsouthwest1-u" +
+	"slivinghistorytularvikongsbergtunesowatunkongsvingerturystykaney" +
+	"amazoetuscanytushuissier-justicetuvalleaostaverntuxfamilytwmailv" +
+	"ibo-valentiavibovalentiavideovillaspectruminamiyamashirokawanabe" +
+	"laudibleasingvinnicasacamdvrcampinagrandebuilderschmidtre-gaulda" +
+	"lvinnytsiavipsinaappittsburghofficialvirginiavirtual-userveexcha" +
+	"ngevirtualcloudvirtualservervirtualuserveftpiwatevirtuelvisakuho" +
+	"kksundviterboknowsitallvivolkenkundenvixn--3hcrj9civilaviationth" +
+	"ewifiatlassian-dev-myqnapcloudcontrolledogawarabikomaezakirunoip" +
+	"irangalsaceomutashinainternationalfirearmsannanvlaanderennesoyvl" +
+	"adikavkazimierz-dolnyvladimirvlogintoyonezawavmincomcastresindev" +
+	"icenzaporizhzhiavologdanskoninjambylvolvolkswagentspeedpartnervo" +
+	"lyngdalvoorlopervossevangenvotevotingvotoyonovps-hostrowiecivili" +
+	"sationwithgoogleapiszwithyoutuberspacekitagatamayufuettertdasnet" +
+	"zwiwatsukiyonosegawawixsitewloclawekonsulatrobeeldengeluidvarese" +
+	"rvdwmcloudwmflabspydebergwoodsideltairavpagexlworse-thandawowind" +
+	"owskrakowinnersphinxn--3e0b707ewpdevcloudwpenginepoweredwphosted" +
+	"mailwpmucdnpixolinodeusercontentrentinoaltoadigewpmudeveloperaun" +
+	"iterois-foundationwritesthisblogwroclawiospjelkavikomorotsukagaw" +
+	"awtcirclerkstagets-itrentoyonakagyokutoyakolobrzegersundwtfastvp" +
+	"s-serverisignwuozuwzmiuwajimaxn--45q11civilwarmiasadoesntexistei" +
+	"ngeekaruizawaxn--4gbriminingxn--4it168dxn--4it797kooris-a-painte" +
+	"ractivestfoldxn--4pvxs4allxn--54b7fta0cclanbibaidarmeniaxn--55qw" +
+	"42gxn--55qx5dxn--5js045dxn--5rtp49cldmailuxuryxn--5rtq34kopervik" +
+	"hersonxn--5su34j936bgsgxn--5tzm5gxn--6btw5axn--6frz82gxn--6orx2r" +
+	"xn--6qq986b3xlxn--7t0a264cleverappstmnxn--80aaa0cvacationsrhtren" +
+	"tinsud-tirolxn--80adxhksrlxn--80ao21axn--80aqecdr1axn--80asehdba" +
+	"refootballooninglassassinationalheritagebinordre-landiscourses3-" +
+	"sa-east-1xn--80aswgxn--80augustowitdkonskowolayangrouphonefossho" +
+	"pwarendalenugxn--8ltr62koryokamikawanehonbetsurutaharaxn--8pvr4u" +
+	"xn--8y0a063axn--90a1affinitylotterybnikeisenbahnxn--90a3academia" +
+	"micable-modemoneyxn--90aeroportalaheadjudaicadaquesrvaroyxn--90a" +
+	"ishobarakawagoexn--90amcdirxn--90azhytomyravendbargainstances3-u" +
+	"s-east-2xn--9dbhblg6dietrevisojamisonxn--9dbq2axn--9et52uxn--9kr" +
+	"t00axn--andy-iraxn--aroport-byaotsurnadalxn--asky-iraxn--aurskog" +
+	"-hland-jnbarreauctioncilla-speziauthgear-stagingjesdalimanowarud" +
+	"aurskog-holandinggfarmerseineatonsbergitpagefrontappalmspringsak" +
+	"erevistarnbergivestbytemark12xn--avery-yuasakuragawaxn--b-5gaxn-" +
+	"-b4w605ferdxn--balsan-sdtirol-nsbstorebaselectrentinsudtirolxn--" +
+	"bck1b9a5dre4clicketcloudcontrolapparmatsushigexn--bdddj-mrabdxn-" +
+	"-bearalvhki-y4axn--berlevg-jxaxn--bhcavuotna-s4axn--bhccavuotna-" +
+	"k7axn--bidr-5nachikatsuuraxn--bievt-0qa2xn--bjarky-fyasakaiminat" +
+	"oyookanazawaxn--bjddar-ptargetmyipizzaxn--blt-elabourxn--bmlo-gr" +
+	"aingerxn--bod-2natalxn--bozen-sdtirol-2obanazawaxn--brnny-wuacad" +
+	"emy-firewall-gatewayxn--brnnysund-m8accident-investigation-aptib" +
+	"leadpagesquare7xn--brum-voagatritonxn--btsfjord-9zaxn--bulsan-sd" +
+	"tirol-nsbarrel-of-knowledgeappleborkaragandauthgearappspacehoste" +
+	"d-by-previderhclouddnslivegarsheiheijibigawaustevoll-o-g-i-n4t3l" +
+	"3p0rtarnobrzegyptianatuurwetenschappenginebetsuikirkenes3-ap-sou" +
+	"th-1xn--c1avgxn--c2br7gxn--c3s14miniserverxn--cck2b3barrell-of-k" +
+	"nowledgecomputerhistoryofscience-fictionfabricafjs3-us-gov-west-" +
+	"1xn--cckwcxetdxn--cesena-forl-mcbremangerxn--cesenaforl-i8axn--c" +
+	"g4bkis-gonexn--ciqpnxn--clchc0ea0b2g2a9gcdxn--comunicaes-v6a2oxn" +
+	"--correios-e-telecomunicaes-ghc29axn--czr694barsycenterprisesaki" +
+	"joburgleezebizenakanotoddenayorovnobirauthordalanddnss3-ap-south" +
+	"east-2xn--czrs0troandinosaureplantationxn--czru2dxn--czrw28barsy" +
+	"onlinewhampshirebungoonord-frontierxn--d1acj3basicserversaillesj" +
+	"abbottatarantours3-us-west-1xn--d1alfaromeoxn--d1atrogstadxn--d5" +
+	"qv7z876clickrisinglesannohelplfinancialuzernxn--davvenjrga-y4axn" +
+	"--djrs72d6uyxn--djty4kosaigawaxn--dnna-grajewolterskluwerxn--drb" +
+	"ak-wuaxn--dyry-iraxn--e1a4clinichitachinakagawassamukawatarikuze" +
+	"ntakatainaioiraseating-organicbcn-north-1xn--eckvdtc9dxn--efvn9s" +
+	"torfjordxn--efvy88haibarakitahatakamatsukawaxn--ehqz56nxn--elqq1" +
+	"6hair-surveillancexn--eveni-0qa01gaxn--f6qx53axn--fct429kosakaer" +
+	"odromegallupaasdaburxn--fhbeiarnxn--finny-yuaxn--fiq228c5hstorjc" +
+	"loud-ver-jpchristmasakinderoyxn--fiq64basilicataniautomotiveland" +
+	"ds3-ca-central-1xn--fiqs8stpetersburgxn--fiqz9streamscompute-1xn" +
+	"--fjord-lraxn--fjq720axn--fl-ziaxn--flor-jraxn--flw351exn--forl-" +
+	"cesena-fcbsstudioxn--forlcesena-c8axn--fpcrj9c3dxn--frde-grandra" +
+	"pidstudynamisches-dnsortlandxn--frna-woaraisaijosoyrovigotpanthe" +
+	"onsitexn--frya-hraxn--fzc2c9e2cliniquedapliernewyorkshirecifedex" +
+	"eterxn--fzys8d69uvgmailxn--g2xx48clintonoshoesanokarumaifarmstea" +
+	"dyndns-at-homedepotenzamamidorittogakushimotoganexn--gckr3f0faus" +
+	"kedsmokorsetagayaseralingenoamishirasatogitsumidatlantichofunato" +
+	"riginstantcloudfrontdoorxn--gecrj9clothingdustdatadetectjmaxxxer" +
+	"oxfinityxn--ggaviika-8ya47hakatanorth-kazakhstanxn--gildeskl-g0a" +
+	"xn--givuotna-8yasugitlaborxn--gjvik-wuaxn--gk3at1exn--gls-elacai" +
+	"xaxn--gmq050is-into-animegurownproviderxn--gmqw5axn--gnstigbeste" +
+	"llen-zvbrplsbxn--3pxu8konyvelohmusashimurayamarumorimachidaxn--g" +
+	"nstigliefern-wobihirosakikamijimatsunowtvestre-totennishiawakura" +
+	"xn--h-2failxn--h1aeghakodatexn--h1ahnxn--h1alizxn--h2breg3evenes" +
+	"tuff-4-salexn--h2brj9c8cn-northwest-1xn--h3cuzk1diherokuappkomfo" +
+	"rbar1xn--hbmer-xqaxn--hcesuolo-7ya35basketballfinanzjampalacehim" +
+	"ejiiyamanouchikuhokuryugasakitanakagusukumodernfshostrodawarauto" +
+	"scanadaeguambulancentralus-2xn--hery-iraxn--hgebostad-g3axn--hkk" +
+	"inen-5waxn--hmmrfeasta-s4accident-prevention-k3stufftoread-books" +
+	"nesoruminamiuonumasoyxn--hnefoss-q1axn--hobl-iraxn--holtlen-hxax" +
+	"n--hpmir-xqaxn--hxt814exn--hyanger-q1axn--hylandet-54axn--i1b6b1" +
+	"a6a2exn--imr513nxn--indery-fyasuokannamiharuxn--io0a7is-into-car" +
+	"shiratakahagithubpreviewsaitamatsukuris-a-llamarcheapigeelvinckd" +
+	"diamondshirahamatonbetsurgeryxn--j1adplantsomnarviikamiokameokam" +
+	"akurazakitashiobaraxn--j1aefbsbxn--1ck2e1banzaicloudappspotagerx" +
+	"n--j1ael8batochiokinoshimaintenancempresashibetsukuin-vpncasadel" +
+	"amonedancemrxn--j1amhakonexn--j6w193gxn--jlq480n2rgxn--jlq61u9w7" +
+	"batsfjordiscoveryokoteu-1xn--jlster-byatominamidaitomanchesterxn" +
+	"--jrpeland-54axn--jvr189minisitexn--k7yn95exn--karmy-yuaxn--kbrq" +
+	"7oxn--kcrx77d1x4axn--kfjord-iuaxn--klbu-woaxn--klt787dxn--kltp7d" +
+	"xn--kltx9axn--klty5xn--41axn--koluokta-7ya57hakubahcavuotnagaivu" +
+	"otnagaokakyotambabydgoszczecinemagnethnologyxn--kprw13dxn--kpry5" +
+	"7dxn--kput3is-into-cartoonshishikuis-a-musicianxn--krager-gyatsu" +
+	"kanoyakumoldellogliastradingxn--kranghke-b0axn--krdsherad-m8axn-" +
+	"-krehamn-dxaxn--krjohka-hwab49jdevcloudfunctionshisohugheshisuif" +
+	"uelveruminamiminowaxn--ksnes-uuaxn--kvfjord-nxaxn--kvitsy-fyatsu" +
+	"shiroxn--kvnangen-k0axn--l-1fairwindstuttgartrentinsued-tirolxn-" +
+	"-l1accentureklamborghinikolaeventsurreyxn--laheadju-7yawaraxn--l" +
+	"angevg-jxaxn--lcvr32dxn--ldingen-q1axn--leagaviika-52bauhauspost" +
+	"man-echocolatelevisionflashdrivefsncfdishakotanhlfanhsbcasertail" +
+	"scalecznagasukeu-2xn--lesund-huaxn--lgbbat1ad8jdfaststacksaxoxn-" +
+	"-lgrd-poacctromsakegawaxn--lhppi-xqaxn--linds-pramericanartromso" +
+	"kamogawaxn--lns-qlavagiskexn--loabt-0qaxn--lrdal-sraxn--lrenskog" +
+	"-54axn--lt-liacngroks-thisayamanobeokakegawaxn--lten-granexn--lu" +
+	"ry-iraxn--m3ch0j3axn--mely-iraxn--merker-kuaxn--mgb2ddesusakis-b" +
+	"ytomaritimekeepingxn--mgb9awbfbx-oslodingenxn--mgba3a3ejtrusteex" +
+	"n--mgba3a4f16axn--mgba3a4fra1-deportevaksdalxn--mgba7c0bbn0axn--" +
+	"mgbaakc7dvfbxostrowwlkpmguidefinimamateramochizukindlegallocus-4" +
+	"xn--mgbaam7a8hakuis-a-financialadvisor-aurdalxn--mgbab2bdxn--mgb" +
+	"ah1a3hjkrdxn--mgbai9a5eva00bellunord-odalvdalaskanittedallasalle" +
+	"angaviikadenagahamaroyerxn--mgbai9azgqp6jejuniperxn--mgbayh7gpal" +
+	"ermomahachijolsterxn--mgbbh1a71exn--mgbc0a9azcgxn--mgbca7dzdoxn-" +
+	"-mgbcpq6gpa1axn--mgberp4a5d4a87gxn--mgberp4a5d4arxn--mgbgu82axn-" +
+	"-mgbi4ecexposedxn--mgbpl2fhskypexn--mgbqly7c0a67fbcnpyatigorskol" +
+	"efrakkestadyndns-at-workisboringrondarxn--mgbqly7cvafr-1xn--mgbt" +
+	"3dhdxn--mgbtf8flapymntrvestre-slidretrosnubarclays3-fips-us-gov-" +
+	"west-1xn--mgbtx2beneventodayokozeu-3xn--mgbx4cd0abbvieeexn--mix0" +
+	"82fedorainfraclouderaxn--mix891fedorapeoplegnicapebretonamicroli" +
+	"ghtinguitarschokokekschokoladenxn--mjndalen-64axn--mk0axin-the-b" +
+	"andais-into-gamessinazawaxn--mk1bu44cnsantabarbaraxn--mkru45is-l" +
+	"eetrentin-sued-tirolxn--mlatvuopmi-s4axn--mli-tlavangenxn--mlsel" +
+	"v-iuaxn--moreke-juaxn--mori-qsakurais-lostre-toteneis-a-nascarfa" +
+	"nxn--mosjen-eyawatahamaxn--mot-tlazioxn--mre-og-romsdal-qqbusera" +
+	"nishiaritakurashikis-not-certifiedxn--msy-ula0hakusanagochijiwad" +
+	"egreexn--mtta-vrjjat-k7aflakstadaokagakicks-assnasaarlandxn--muo" +
+	"st-0qaxn--mxtq1minnesotaketakatoris-a-techietis-a-libertarianxn-" +
+	"-ngbc5azdxn--ngbe9e0axn--ngbrxn--42c2d9axn--nit225koseis-a-patsf" +
+	"anxn--nmesjevuemie-tcbalsan-sudtirollagdenesnaaseinet-freaksuson" +
+	"oxn--nnx388axn--nodessakyotanabellevuelosangelesuzakanagawaxn--n" +
+	"qv7fs00emaxn--nry-yla5gxn--ntso0iqx3axn--ntsq17gxn--nttery-byaes" +
+	"eoullensvanguardxn--nvuotna-hwaxn--nyqy26axn--o1achernihivgubsuz" +
+	"ukananiikappudoxn--o3cw4haldenxn--o3cyx2axn--od0algxn--od0aq3ben" +
+	"tleyolasiteu-4lima-cityeatselinogradimo-i-rana4u2-localhostrolek" +
+	"aniepce12hpalmaserati234xn--ogbpf8flatangerxn--oppegrd-ixaxn--os" +
+	"tery-fyaxn--osyro-wuaxn--otu796dxn--p1acfedoraprojectoyotsukaido" +
+	"xn--p1ais-savedxn--pgbs0dhlx3xn--porsgu-sta26feiraquarelleaseekl" +
+	"ogescholarshipschoolsztynsettsurfashionxn--pssu33lxn--pssy2uxn--" +
+	"q7ce6axn--q9jyb4cntjomelhusgardenxn--qcka1pmckinseyxn--qqqt11min" +
+	"tereitrentino-altoadigexn--qxa6axn--qxamsterdamnserverbaniaxn--r" +
+	"ady-iraxn--rdal-poaxn--rde-ulaxn--rdy-0nabaris-slickfh-muensterx" +
+	"n--rennesy-v1axn--rhkkervju-01afermockasserverrankoshigayamein-v" +
+	"igorgexn--rholt-mragowoltlab-democraciaxn--rhqv96gxn--rht27zxn--" +
+	"rht3dxn--rht61exn--risa-5naturalhistorymuseumcenterxn--risr-irax" +
+	"n--rland-uuaxn--rlingen-mxaxn--rmskog-byaxn--rny31halsaitohmanno" +
+	"rthflankaufentigerxn--rovu88beppublishproxyombolzano-altoadigeol" +
+	"ogyomitanobninskarasjohkamikitayamatsurincheonikonanporobserverx" +
+	"n--rros-granvindafjordxn--rskog-uuaxn--rst-0naturalsciencesnatur" +
+	"ellesuzukis-certifiedxn--rsta-framercanvasvalbardunloppacificita" +
+	"deliveryggeexn--rvc1e0am3exn--ryken-vuaxn--ryrvik-byaxn--s-1fait" +
+	"hammarfeastafricapitalonewspaperxn--s9brj9collectionxn--sandness" +
+	"jen-ogbeskidyn-ip24xn--sandy-yuaxn--sdtirol-n2axn--seral-lraxn--" +
+	"ses554gxn--sgne-graphoxn--45br5cylxn--skierv-utazasvcitichiryuky" +
+	"uragifuchungbukharahkkeravjuegoshikimobetsuldaluccaravantaarparl" +
+	"iamentjeldsundrudupontariobranconavstackareliancexn--skjervy-v1a" +
+	"xn--skjk-soaxn--sknit-yqaxn--sknland-fxaxn--slat-5naturbruksgymn" +
+	"xn--slt-elabcieszynh-serveblogspotaribeiraogakibichuoxn--smla-hr" +
+	"axn--smna-gratangentlentapisa-geekosherbrookegawaxn--snase-nraxn" +
+	"--sndre-land-0cbestbuyshouses3-us-west-2xn--snes-poaxn--snsa-roa" +
+	"xn--sr-aurdal-l8axn--sr-fron-q1axn--sr-odal-q1axn--sr-varanger-g" +
+	"gbetainaboxfusejnyanagawalmartateshinanomachimkentateyamaveroyke" +
+	"nebakkeshibechambagriculturealtychyattorneyagawakepnombrendlynge" +
+	"nflfanpachigasakids3-eu-central-1xn--srfold-byaxn--srreisa-q1axn" +
+	"--srum-gratis-a-bulls-fanxn--stfold-9xaxn--stjrdal-s1axn--stjrda" +
+	"lshalsen-sqbhzcasinordeste-idcateringebuildinglitcheltenham-radi" +
+	"o-opensocialimolisembokuleuvenetokigawavocatanzaroweddingjovikan" +
+	"zakitchenaval-d-aosta-valleyboltarumizusawaustinnaumburgivingjem" +
+	"nes3-ap-southeast-1xn--stre-toten-zcbieidskoguchikuzenvironmenta" +
+	"lconservationionjukudoyamaizurugbyglandroverhallaakesvuemielecce" +
+	"vje-og-hornnes3-website-ap-northeast-1xn--t60b56axn--tckwebthing" +
+	"sveioxn--tiq49xqyjelasticbeanstalkhakassiaxn--tjme-hraxn--tn0agr" +
+	"ocerydxn--tnsberg-q1axn--tor131oxn--trany-yuaxn--trentin-sd-tiro" +
+	"l-rzbielawaltervistaikikonaikawachinaganoharamcoachampionshiphop" +
+	"tobamadridnbloggerxn--trentin-sdtirol-7vbiellahppiacenzachpomors" +
+	"kieninohekinannestadiskussionsbereichattanooganordkappgafaninomi" +
+	"yakonojorpelandisrechtranakamagayahikobeardubaiduckdnsnillfjordi" +
+	"tchyouripanamatsusakahoginankokubunjindianapolis-a-bloggerxn--tr" +
+	"entino-sd-tirol-c3bieszczadygeyachiyodaejeonbukcoalwaysdatabaseb" +
+	"allangenkainanaejrietisalatinabeno-ipifony-1xn--trentino-sdtirol" +
+	"-szbievat-band-campaniavoues3-eu-west-1xn--trentinosd-tirol-rzbi" +
+	"fukagawashingtondclk3xn--trentinosdtirol-7vbigv-infolldalivornow" +
+	"ruzhgorodeoceanographics3-website-ap-southeast-1xn--trentinsd-ti" +
+	"rol-6vbihorologyonagoyaxarnetbankaracoldwarszawaustraliamusement" +
+	"dllpages3-ap-northeast-2ix4432-balsan-suedtirolkuszczytnord-aurd" +
+	"alp16-b-datacentermezproxyzgorabruzzoologicalabamagasakishimabar" +
+	"aogashimadachicagoboats3-ap-northeast-1kappchizip611xn--trentins" +
+	"dtirol-nsbikedaemonmoutheworkpccwedeployonagunicloudivtasvuodnak" +
+	"amurataishinomakinkobierzycextraspace-to-rentalstomakomaibarazur" +
+	"ewebsiteshikagamiishibukawakkanaibetsubamericanfamilydsmynasushi" +
+	"obarackmazeplayokosukanraustrheimatunduhrennebugattiffanyaarbort" +
+	"eaches-yogasawaracingjerdrumcprequalifymeinforumzgorzeleccogjers" +
+	"tadotsuruokakamigaharaukraanghkembuchikumagayagawakayamagentosit" +
+	"ecnologiajudygarlanddnskingdyniamunemurorangecloudplatform0emmaf" +
+	"ann-arboretumbriamallamaceiobbcg120001wwwbq-abogadobeaemcloud-fr" +
+	"1337xn--trgstad-r1axn--trna-woaxn--troms-zuaxn--tysvr-vraxn--uc0" +
+	"atvestvagoyxn--uc0ay4axn--uist22hamurakamigoris-a-geekautokeinot" +
+	"iceablewismillerxn--uisz3gxn--unjrga-rtargithubusercontentryclou" +
+	"dflareportrentinsuedtirolxn--unup4yxn--uuwu58axn--vads-jraxn--va" +
+	"lle-aoste-ebbtrysiljanxn--valle-d-aoste-ehbodoes-itcouldbeworldx" +
+	"n--valleaoste-e7axn--valledaoste-ebbvadsoccertmgrazerbaijan-maye" +
+	"ngerdalcesvelvikomvuxn--32vp30hagakhanamigawaxn--vard-jraxn--veg" +
+	"rshei-c0axn--vermgensberater-ctbitsvizzeraxn--vermgensberatung-p" +
+	"wblogoiplatformshangrilanxessooxn--vestvgy-ixa6oxn--vg-yiabkhazi" +
+	"axn--vgan-qoaxn--vgsy-qoa0jelenia-goraxn--vgu402colognexus-3xn--" +
+	"vhquvevelstadxn--vler-qoaxn--vre-eiker-k8axn--vrggt-xqadxn--vry-" +
+	"yla5gxn--vuq861bilbaokinawashirosatobishimagazineues3-website-ap" +
+	"-southeast-2xn--w4r85el8fhu5dnraxn--w4rs40lxn--wcvs22dxn--wgbh1c" +
+	"olonialwilliamsburgrongausdalvivanovoldaxn--wgbl6axn--xhq521bill" +
+	"ustrationredumbrellair-traffic-controlleyoriikarasjokarasuyamarn" +
+	"ardalombardiadembetsukubankaratexn--xkc2al3hye2axn--xkc2dl3a5ee0" +
+	"handsonyxn--y9a3aquariumisakis-a-therapistoiaxn--yer-znaturhisto" +
+	"rischesvn-reposoundcastronomy-routerxn--yfro4i67oxn--ygarden-p1a" +
+	"xn--ygbi2ammxn--45brj9civilizationxn--ystre-slidre-ujbioceanogra" +
+	"phiquexn--zbx025dxn--zf0ao64axn--zf0avxlxn--zfr164bipanasonicath" +
+	"olicaxiaskimitsubatamibudejjuedischesapeakebayernirasakindianmar" +
+	"ketingliwicexnbayxz"
+
+// nodes is the list of nodes. Each node is represented as a uint32, which
+// encodes the node's children, wildcard bit and node type (as an index into
+// the children array), ICANN bit and text.
+//
+// If the table was generated with the -comments flag, there is a //-comment
+// after each node's data. In it is the nodes-array indexes of the children,
+// formatted as (n0x1234-n0x1256), with * denoting the wildcard bit. The
+// nodeType is printed as + for normal, ! for exception, and o for parent-only
+// nodes that have children but don't match a domain label in their own right.
+// An I denotes an ICANN domain.
+//
+// The layout within the uint32, from MSB to LSB, is:
+//	[ 0 bits] unused
+//	[10 bits] children index
+//	[ 1 bits] ICANN bit
+//	[15 bits] text index
+//	[ 6 bits] text length
+var nodes = [...]uint32{
+	0x330b03,
+	0x3b6e44,
+	0x2e8c86,
+	0x350003,
+	0x350006,
+	0x392c06,
+	0x3b9283,
+	0x21a084,
+	0x3deb07,
+	0x2e88c8,
+	0x1a000c2,
+	0x1f42f07,
+	0x37f0c9,
+	0x2ddc4a,
+	0x2ddc4b,
+	0x233b83,
+	0x236ac5,
+	0x2213c82,
+	0x3d6204,
+	0x2c8983,
+	0x231c05,
+	0x2601ac2,
+	0x367443,
+	0x2a2ffc4,
+	0x201ac5,
+	0x2e06482,
+	0x20648e,
+	0x25b543,
+	0x3b32c6,
+	0x3204782,
+	0x3e57c7,
+	0x23a206,
+	0x3603682,
+	0x2909c3,
+	0x22c386,
+	0x2691c8,
+	0x295546,
+	0x276dc4,
+	0x3a00b02,
+	0x350889,
+	0x21a3c7,
+	0x2ff486,
+	0x369ac9,
+	0x2ca948,
+	0x246004,
+	0x320146,
+	0x3d8b46,
+	0x3e01c02,
+	0x2fc746,
+	0x212d4f,
+	0x3d99ce,
+	0x2e4804,
+	0x20d105,
+	0x335fc5,
+	0x3a8989,
+	0x2427c9,
+	0x22cb87,
+	0x2239c6,
+	0x22edc3,
+	0x4216302,
+	0x216303,
+	0x2a868a,
+	0x4615c43,
+	0x3456c5,
+	0x2f45c2,
+	0x3a5c49,
+	0x4e028c2,
+	0x208844,
+	0x3c9a86,
+	0x2968c5,
+	0x376c04,
+	0x570fdc4,
+	0x2028c3,
+	0x235fc4,
+	0x5a01942,
+	0x357344,
+	0x5e01a04,
+	0x214f0a,
+	0x6200882,
+	0x20bd07,
+	0x3be8c8,
+	0x7a08b82,
+	0x33a387,
+	0x22da04,
+	0x31b047,
+	0x22da05,
+	0x380e47,
+	0x34d986,
+	0x358c84,
+	0x36af05,
+	0x274707,
+	0x9205982,
+	0x2b0403,
+	0x961f9c2,
+	0x3d3583,
+	0x9a03602,
+	0x254845,
+	0x9e00202,
+	0x3793c4,
+	0x3ccb05,
+	0x2e4747,
+	0x2b294e,
+	0x2c3904,
+	0x235044,
+	0x207843,
+	0x301889,
+	0x306acb,
+	0x391a88,
+	0x331f88,
+	0x337bc8,
+	0x3ceec8,
+	0xa36990a,
+	0x380d47,
+	0x3f3ac6,
+	0xa65a502,
+	0x3de703,
+	0x3e32c3,
+	0x3e4884,
+	0x3de743,
+	0x354783,
+	0x173ec82,
+	0xaa08a42,
+	0x28b785,
+	0x2ac746,
+	0x2a29c4,
+	0x3a1f47,
+	0x237906,
+	0x2d7f04,
+	0x3bb3c7,
+	0x221bc3,
+	0xb6e2082,
+	0xba69782,
+	0xbe16d82,
+	0x217b46,
+	0xc200282,
+	0x266485,
+	0x3401c3,
+	0x3d7244,
+	0x303a84,
+	0x303a85,
+	0x3f1d43,
+	0xc650b03,
+	0xca05a42,
+	0x207fc5,
+	0x207fcb,
+	0x31228b,
+	0x206204,
+	0x208909,
+	0x209544,
+	0xce09902,
+	0x20a143,
+	0x20a6c3,
+	0xd20b4c2,
+	0x21710a,
+	0xd60b782,
+	0x3d6485,
+	0x2f258a,
+	0x245cc4,
+	0x20d603,
+	0x20e404,
+	0x211443,
+	0x211444,
+	0x211447,
+	0x213d45,
+	0x214506,
+	0x2156c6,
+	0x217503,
+	0x21b748,
+	0x21e083,
+	0xda02fc2,
+	0x241708,
+	0x2957cb,
+	0x224788,
+	0x225106,
+	0x225287,
+	0x227b48,
+	0xf201002,
+	0xf620302,
+	0x27a748,
+	0x3dab47,
+	0x31ba45,
+	0xfb1ba48,
+	0xfedf508,
+	0x27d5c3,
+	0x22bfc4,
+	0x392c82,
+	0x1022cdc2,
+	0x10668142,
+	0x10e2d3c2,
+	0x22d3c3,
+	0x11201782,
+	0x313a43,
+	0x24a844,
+	0x201783,
+	0x245fc4,
+	0x23760b,
+	0x202f03,
+	0x2f9446,
+	0x214d84,
+	0x2d368e,
+	0x2ff905,
+	0x273c08,
+	0x3b33c7,
+	0x3b33ca,
+	0x231543,
+	0x3b6c47,
+	0x306c85,
+	0x231544,
+	0x25c046,
+	0x25c047,
+	0x36ff44,
+	0x1171b484,
+	0x381dc4,
+	0x238904,
+	0x3c1386,
+	0x20f543,
+	0x3c1748,
+	0x3f2f08,
+	0x29dc43,
+	0x2170c3,
+	0x34a7c4,
+	0x35b203,
+	0x11e02dc2,
+	0x12621942,
+	0x202986,
+	0x320243,
+	0x23a9c4,
+	0x12a13282,
+	0x213283,
+	0x3818c3,
+	0x218442,
+	0x12e03402,
+	0x2d95c6,
+	0x22b987,
+	0x2ff287,
+	0x2f5d45,
+	0x3cb8c4,
+	0x370c05,
+	0x2c9747,
+	0x3582c9,
+	0x2df986,
+	0x2f5c46,
+	0x13e04102,
+	0x30f188,
+	0x32a0c6,
+	0x22ad85,
+	0x3b1f07,
+	0x3b5d04,
+	0x3b5d05,
+	0x3a24c4,
+	0x3a24c8,
+	0x14205202,
+	0x14600482,
+	0x238ac6,
+	0x200488,
+	0x33e305,
+	0x353686,
+	0x35d788,
+	0x361888,
+	0x14a02c45,
+	0x176204c4,
+	0x2576c7,
+	0x17a08fc2,
+	0x17f547c2,
+	0x19202202,
+	0x3c9b85,
+	0x19ee9e05,
+	0x274246,
+	0x2dc247,
+	0x3e8c07,
+	0x1a206643,
+	0x321c47,
+	0x289a48,
+	0x2822e709,
+	0x206647,
+	0x22ef07,
+	0x349208,
+	0x22f706,
+	0x231046,
+	0x23240c,
+	0x23324a,
+	0x233bc7,
+	0x23698b,
+	0x237c87,
+	0x237c8e,
+	0x286391c4,
+	0x2392c4,
+	0x23b287,
+	0x271d87,
+	0x240086,
+	0x240087,
+	0x332dc7,
+	0x21dac3,
+	0x28a2dd42,
+	0x243106,
+	0x24310a,
+	0x2439cb,
+	0x2457c7,
+	0x247105,
+	0x2473c3,
+	0x247746,
+	0x247747,
+	0x2696c3,
+	0x28e00102,
+	0x247e0a,
+	0x29330c02,
+	0x297a1542,
+	0x29a41402,
+	0x29e31982,
+	0x24a485,
+	0x24b704,
+	0x2aa54302,
+	0x3573c5,
+	0x231bc3,
+	0x374145,
+	0x361b84,
+	0x226f84,
+	0x2dd186,
+	0x25cb86,
+	0x2081c3,
+	0x3d1404,
+	0x358fc3,
+	0x2ba023c2,
+	0x225604,
+	0x225606,
+	0x24fd45,
+	0x399fc6,
+	0x3b2008,
+	0x21de44,
+	0x257208,
+	0x3267c5,
+	0x28e348,
+	0x2d8d86,
+	0x2b9b07,
+	0x27cf44,
+	0x2d67cf46,
+	0x2da1a6c3,
+	0x3a5603,
+	0x371008,
+	0x338504,
+	0x2de0e4c7,
+	0x2862c6,
+	0x2f0109,
+	0x302208,
+	0x375208,
+	0x381944,
+	0x2180c3,
+	0x228b02,
+	0x2e656442,
+	0x2ea014c2,
+	0x328243,
+	0x2ee060c2,
+	0x269644,
+	0x295e46,
+	0x2328c3,
+	0x2cb1c7,
+	0x3dc083,
+	0x2c39c8,
+	0x3816c5,
+	0x26aa03,
+	0x3cca85,
+	0x3ccbc4,
+	0x3b1c06,
+	0x3b7406,
+	0x2e4686,
+	0x2db944,
+	0x238043,
+	0x2f25f042,
+	0x2f637105,
+	0x200843,
+	0x2fe02c02,
+	0x20f343,
+	0x258c05,
+	0x3021f603,
+	0x30a36089,
+	0x30e00942,
+	0x3160b5c2,
+	0x299245,
+	0x2193c6,
+	0x2924c6,
+	0x30d788,
+	0x30d78b,
+	0x34cc8b,
+	0x2f5f45,
+	0x2e2609,
+	0x1601082,
+	0x2e8f88,
+	0x203f04,
+	0x31e01342,
+	0x3441c3,
+	0x32671f46,
+	0x32a01b02,
+	0x3cf4c8,
+	0x32e04c02,
+	0x26c74a,
+	0x336220c3,
+	0x33f7f706,
+	0x31cec8,
+	0x219d46,
+	0x38f207,
+	0x212f47,
+	0x3d86ca,
+	0x245d44,
+	0x3671c4,
+	0x37e709,
+	0x343b2f05,
+	0x2064c6,
+	0x2132c3,
+	0x255ec4,
+	0x346e2504,
+	0x33b487,
+	0x34ba6807,
+	0x280984,
+	0x35dec5,
+	0x274308,
+	0x24c387,
+	0x24c607,
+	0x34e0fd02,
+	0x31f0c4,
+	0x2a21c8,
+	0x24e304,
+	0x251604,
+	0x2519c5,
+	0x251b07,
+	0x35b51789,
+	0x253144,
+	0x253e09,
+	0x2554c8,
+	0x255c44,
+	0x255c47,
+	0x256243,
+	0x256d47,
+	0x35e00bc2,
+	0x16c5fc2,
+	0x25bb06,
+	0x2bdd07,
+	0x25c384,
+	0x25de87,
+	0x25f687,
+	0x260483,
+	0x362596c2,
+	0x21e142,
+	0x2619c3,
+	0x2619c4,
+	0x2619cb,
+	0x332088,
+	0x21e144,
+	0x262c05,
+	0x264687,
+	0x2f3d05,
+	0x32920a,
+	0x267c83,
+	0x36608102,
+	0x23e644,
+	0x26d209,
+	0x270c43,
+	0x270d07,
+	0x3613c9,
+	0x34f6c8,
+	0x264d43,
+	0x28a7c7,
+	0x291103,
+	0x292644,
+	0x293349,
+	0x297786,
+	0x2ae103,
+	0x208782,
+	0x2c5dc3,
+	0x2c5dc7,
+	0x389d85,
+	0x357186,
+	0x212804,
+	0x395305,
+	0x28b243,
+	0x217746,
+	0x272fc3,
+	0x208b02,
+	0x250ac4,
+	0x36a34382,
+	0x36e34383,
+	0x372030c2,
+	0x20bfc3,
+	0x215b44,
+	0x252a07,
+	0x2a0786,
+	0x26d1c2,
+	0x3766d602,
+	0x3b2204,
+	0x37e115c2,
+	0x3820c782,
+	0x20c784,
+	0x20c785,
+	0x33c345,
+	0x3c3dc6,
+	0x38610202,
+	0x2fdf45,
+	0x3323c5,
+	0x2e9d43,
+	0x2fc986,
+	0x210205,
+	0x217ac2,
+	0x35e485,
+	0x217ac4,
+	0x21dd83,
+	0x21dfc3,
+	0x38a074c2,
+	0x274907,
+	0x2556c4,
+	0x2556c9,
+	0x255dc4,
+	0x2b6943,
+	0x2c2c88,
+	0x38ee9c84,
+	0x2e9c86,
+	0x2b4843,
+	0x263643,
+	0x205503,
+	0x393034c2,
+	0x38c902,
+	0x39600642,
+	0x341f88,
+	0x3d2408,
+	0x3c01c6,
+	0x29a7c5,
+	0x2bb385,
+	0x3c7f87,
+	0x39a86e45,
+	0x2062c2,
+	0x39ea4542,
+	0x3a200042,
+	0x287c08,
+	0x30f0c5,
+	0x308604,
+	0x389605,
+	0x394147,
+	0x29ee04,
+	0x2594c2,
+	0x3a6331c2,
+	0x356044,
+	0x30f447,
+	0x2997c7,
+	0x380e04,
+	0x3e3a43,
+	0x29db84,
+	0x29db88,
+	0x3aa31386,
+	0x25beca,
+	0x351644,
+	0x2a1c08,
+	0x2372c4,
+	0x225386,
+	0x2a4504,
+	0x3c9e86,
+	0x255989,
+	0x2b3fc7,
+	0x3a0dc3,
+	0x3ae17382,
+	0x27e1c3,
+	0x209b02,
+	0x3b20af02,
+	0x254606,
+	0x285e48,
+	0x2b6687,
+	0x35f289,
+	0x2b6849,
+	0x2b8005,
+	0x2b9fc9,
+	0x2bb4c5,
+	0x2bc045,
+	0x2bd508,
+	0x3b610084,
+	0x3ba10087,
+	0x22f2c3,
+	0x2bd707,
+	0x22f2c6,
+	0x2be1c7,
+	0x2b3805,
+	0x22ea83,
+	0x3be29602,
+	0x381d04,
+	0x3c21fec2,
+	0x3c615fc2,
+	0x37cd06,
+	0x3be845,
+	0x2c1107,
+	0x2fd603,
+	0x354704,
+	0x201603,
+	0x3be503,
+	0x3ca03042,
+	0x3d601442,
+	0x392d04,
+	0x259683,
+	0x30d445,
+	0x3da04142,
+	0x3e206a42,
+	0x389806,
+	0x2fbf04,
+	0x30ecc4,
+	0x30ecca,
+	0x3ea005c2,
+	0x252383,
+	0x20ce0a,
+	0x20fc88,
+	0x3ee503c4,
+	0x2005c3,
+	0x237703,
+	0x2cb2c9,
+	0x26b289,
+	0x20fe46,
+	0x3f211e43,
+	0x32054d,
+	0x230886,
+	0x247a4b,
+	0x3f605cc2,
+	0x31ff88,
+	0x4421b842,
+	0x44602802,
+	0x2bfe45,
+	0x44a02b82,
+	0x2aaac7,
+	0x20adc3,
+	0x2103c8,
+	0x44e04b02,
+	0x2bc5c4,
+	0x224b03,
+	0x2440c6,
+	0x230a84,
+	0x217083,
+	0x46201d02,
+	0x2f5ec4,
+	0x2c4c45,
+	0x2c59c7,
+	0x288e83,
+	0x2c7003,
+	0x16c76c2,
+	0x2c76c3,
+	0x2c7b43,
+	0x46600c02,
+	0x221e44,
+	0x34d006,
+	0x27d843,
+	0x2c7fc3,
+	0x46a510c2,
+	0x2510c8,
+	0x2c8c84,
+	0x3b6686,
+	0x38ca87,
+	0x3ae1c6,
+	0x370f84,
+	0x54e01302,
+	0x22f18b,
+	0x2c650e,
+	0x21b1cf,
+	0x3a9cc3,
+	0x556d5782,
+	0x1646c82,
+	0x55a06002,
+	0x242443,
+	0x3bf3c4,
+	0x288983,
+	0x358546,
+	0x389c06,
+	0x3c3087,
+	0x244804,
+	0x55e19502,
+	0x56229d02,
+	0x307cc5,
+	0x302d47,
+	0x3ba846,
+	0x566744c2,
+	0x389544,
+	0x2cda83,
+	0x56a06982,
+	0x56f7bc03,
+	0x2ce904,
+	0x2d56c9,
+	0x572dd4c2,
+	0x57639842,
+	0x24e685,
+	0x57add802,
+	0x58204fc2,
+	0x363ec7,
+	0x37f34b,
+	0x212d05,
+	0x248009,
+	0x265e06,
+	0x5861cd44,
+	0x3c58c9,
+	0x3e7587,
+	0x38be47,
+	0x22d903,
+	0x2f8406,
+	0x325a07,
+	0x2721c3,
+	0x2c0686,
+	0x58e0d9c2,
+	0x5922a2c2,
+	0x3b7203,
+	0x3a5e05,
+	0x2df807,
+	0x38ffc6,
+	0x389d05,
+	0x255644,
+	0x2b2085,
+	0x311944,
+	0x59601282,
+	0x2db584,
+	0x26b184,
+	0x26b18d,
+	0x2d92c9,
+	0x393f88,
+	0x201284,
+	0x267945,
+	0x2ff707,
+	0x3c22c4,
+	0x2fe247,
+	0x226505,
+	0x59ab7284,
+	0x2ba645,
+	0x59e6f904,
+	0x318046,
+	0x2dc045,
+	0x5a2663c2,
+	0x22a283,
+	0x30cf03,
+	0x23b5c4,
+	0x23b5c5,
+	0x21c2c6,
+	0x389e45,
+	0x264cc4,
+	0x5a700ec3,
+	0x5aa10886,
+	0x20a8c5,
+	0x218f45,
+	0x2dc144,
+	0x3516c3,
+	0x3516cc,
+	0x5aec5ac2,
+	0x5b200b42,
+	0x5b606b42,
+	0x20f743,
+	0x20f744,
+	0x5ba09582,
+	0x2fa4c8,
+	0x2665c4,
+	0x32ea06,
+	0x5be1a202,
+	0x5c2065c2,
+	0x5c605e42,
+	0x29d5c5,
+	0x3ca106,
+	0x35ed44,
+	0x22c8c6,
+	0x20bac6,
+	0x228343,
+	0x5ca9748a,
+	0x2e9bc5,
+	0x2a8643,
+	0x225ac6,
+	0x5cff3f49,
+	0x225ac7,
+	0x28f848,
+	0x2ca809,
+	0x3a3348,
+	0x29ca06,
+	0x206a83,
+	0x5d202042,
+	0x3a7ac8,
+	0x5d64e442,
+	0x5da00ec2,
+	0x23ddc3,
+	0x2dfa85,
+	0x2a7d84,
+	0x2bd2c9,
+	0x231784,
+	0x235ac8,
+	0x5e209b43,
+	0x5e65f304,
+	0x219408,
+	0x5eac7f42,
+	0x230582,
+	0x335f45,
+	0x234e09,
+	0x206543,
+	0x32c584,
+	0x3a7f44,
+	0x255a83,
+	0x28e94a,
+	0x5ef94cc2,
+	0x5f20d682,
+	0x2e2003,
+	0x396ec3,
+	0x160f402,
+	0x3b3083,
+	0x5f61cf02,
+	0x5fa01502,
+	0x5fe28f84,
+	0x28f406,
+	0x27c704,
+	0x287a43,
+	0x208483,
+	0x6030b843,
+	0x243d46,
+	0x336305,
+	0x2e6947,
+	0x2e6886,
+	0x2e7588,
+	0x2e7786,
+	0x220084,
+	0x2a9ccb,
+	0x2ea443,
+	0x2ea445,
+	0x606066c2,
+	0x3641c2,
+	0x60a4a502,
+	0x60e03c42,
+	0x206e83,
+	0x6127d202,
+	0x27d203,
+	0x2eaf83,
+	0x61a03302,
+	0x61eee6c6,
+	0x2eeac5,
+	0x29acc6,
+	0x62275a82,
+	0x6260a702,
+	0x62a1e002,
+	0x62e070c2,
+	0x6320f8c2,
+	0x63601b82,
+	0x24b083,
+	0x3d3446,
+	0x63a94744,
+	0x3ac646,
+	0x288d04,
+	0x301843,
+	0x646024c2,
+	0x2018c2,
+	0x22e683,
+	0x64a109c3,
+	0x3d3687,
+	0x2dbf47,
+	0x6aa50587,
+	0x314207,
+	0x212343,
+	0x6ae73e04,
+	0x2ecf44,
+	0x2ecf4a,
+	0x3e8d45,
+	0x6b20fcc2,
+	0x25de43,
+	0x6b600602,
+	0x22b643,
+	0x27e183,
+	0x6be00582,
+	0x2899c4,
+	0x335904,
+	0x3afb45,
+	0x3226c5,
+	0x22d006,
+	0x2b9286,
+	0x6c212282,
+	0x6c601f42,
+	0x2c6d85,
+	0x29a9d2,
+	0x2ad8c6,
+	0x203d43,
+	0x3d1f46,
+	0x366905,
+	0x1617142,
+	0x74a0b502,
+	0x3baec3,
+	0x20b503,
+	0x2afb03,
+	0x74e03902,
+	0x218903,
+	0x75216282,
+	0x228fc3,
+	0x3afdc8,
+	0x243503,
+	0x243506,
+	0x3ea507,
+	0x333ac6,
+	0x333acb,
+	0x288c47,
+	0x300e44,
+	0x75a00e82,
+	0x3570c5,
+	0x75e01883,
+	0x23c483,
+	0x3c52c5,
+	0x212243,
+	0x76612246,
+	0x2b1343,
+	0x22c284,
+	0x2003c6,
+	0x3dd9c6,
+	0x76a1f143,
+	0x3545c7,
+	0x360fc7,
+	0x2abc05,
+	0x329dc6,
+	0x20a903,
+	0x796c88c3,
+	0x79a06702,
+	0x79e28d44,
+	0x3f2d09,
+	0x222b85,
+	0x23d9c4,
+	0x2fb7c8,
+	0x245ac5,
+	0x7a247285,
+	0x260fc9,
+	0x2ff543,
+	0x3d7744,
+	0x7a6020c2,
+	0x219743,
+	0x7aa795c2,
+	0x2795c6,
+	0x1686f42,
+	0x7ae06fc2,
+	0x29d4c8,
+	0x29db43,
+	0x2ba587,
+	0x333d45,
+	0x2cc285,
+	0x2cc28b,
+	0x2f8186,
+	0x2cc486,
+	0x244f04,
+	0x211786,
+	0x7b2f8a08,
+	0x2622c3,
+	0x267103,
+	0x267104,
+	0x302c84,
+	0x30e087,
+	0x341845,
+	0x7b768e82,
+	0x7ba04f82,
+	0x7c204f85,
+	0x2d23c4,
+	0x2e32cb,
+	0x303988,
+	0x271c84,
+	0x7c634dc2,
+	0x7ca71c02,
+	0x373dc3,
+	0x304c84,
+	0x304f45,
+	0x3058c7,
+	0x7cf08144,
+	0x20f004,
+	0x7d202b02,
+	0x383b89,
+	0x3096c5,
+	0x212fc5,
+	0x30a245,
+	0x7d619683,
+	0x23ab84,
+	0x23ab8b,
+	0x30af04,
+	0x30b1cb,
+	0x30b785,
+	0x21b30a,
+	0x30bec8,
+	0x30c0ca,
+	0x30c943,
+	0x30c94a,
+	0x7de15cc2,
+	0x7e21a002,
+	0x7e620283,
+	0x7eb0e9c2,
+	0x30e9c3,
+	0x7ef104c2,
+	0x7f340942,
+	0x3115c4,
+	0x21b886,
+	0x22c605,
+	0x3db3c6,
+	0x3c1f05,
+	0x30f784,
+	0x7f600902,
+	0x269484,
+	0x2e228a,
+	0x2c4587,
+	0x3be686,
+	0x237347,
+	0x243143,
+	0x2ce948,
+	0x3ed24b,
+	0x2d61c5,
+	0x21d505,
+	0x21d506,
+	0x3a8084,
+	0x3b7a48,
+	0x214143,
+	0x2a7e84,
+	0x3d8a47,
+	0x300a86,
+	0x3e2106,
+	0x2d34ca,
+	0x23d704,
+	0x23d70a,
+	0x7fb70486,
+	0x370487,
+	0x262c87,
+	0x267784,
+	0x267789,
+	0x229405,
+	0x3e7503,
+	0x20c4c3,
+	0x7fe22b03,
+	0x80200682,
+	0x239ac6,
+	0x806d7105,
+	0x3d2185,
+	0x236746,
+	0x2c7e84,
+	0x80a12482,
+	0x236844,
+	0x81210002,
+	0x3c5745,
+	0x229584,
+	0x82627103,
+	0x82a0b542,
+	0x20b543,
+	0x3b5ec6,
+	0x82e04842,
+	0x39ac48,
+	0x225944,
+	0x225946,
+	0x33ca86,
+	0x83264744,
+	0x20e905,
+	0x2203c8,
+	0x225c47,
+	0x228087,
+	0x22808f,
+	0x2a20c6,
+	0x23ae03,
+	0x23f044,
+	0x227543,
+	0x2254c4,
+	0x382e44,
+	0x8363f602,
+	0x2a0f03,
+	0x33d7c3,
+	0x83a02ec2,
+	0x202ec3,
+	0x269703,
+	0x213dca,
+	0x31bc07,
+	0x3a60cc,
+	0x3a6386,
+	0x251e86,
+	0x259307,
+	0x83e5d447,
+	0x263789,
+	0x84241844,
+	0x84a06ec2,
+	0x84e01042,
+	0x2d3886,
+	0x3543c4,
+	0x2d4746,
+	0x26abc8,
+	0x3a5ec4,
+	0x33da06,
+	0x292485,
+	0x8567e608,
+	0x247843,
+	0x282245,
+	0x285c83,
+	0x2130c3,
+	0x2130c4,
+	0x26b683,
+	0x85a51502,
+	0x85e00e02,
+	0x3e73c9,
+	0x28cb45,
+	0x28cec4,
+	0x298ac5,
+	0x203544,
+	0x2e6f07,
+	0x35ea45,
+	0x8661bc04,
+	0x2f9f48,
+	0x2c9bc6,
+	0x2cf104,
+	0x2cff48,
+	0x86a01a42,
+	0x2e3184,
+	0x31c344,
+	0x351387,
+	0x86e04ac4,
+	0x201cc2,
+	0x87210a82,
+	0x24e583,
+	0x24e584,
+	0x239803,
+	0x38f6c5,
+	0x87655182,
+	0x2f4a85,
+	0x27ccc2,
+	0x317585,
+	0x2e1085,
+	0x87a03d02,
+	0x381844,
+	0x87e03c82,
+	0x3e49c6,
+	0x2d7c06,
+	0x234f48,
+	0x296048,
+	0x37cc84,
+	0x2f8bc5,
+	0x8822a9c9,
+	0x2e90c4,
+	0x3ef104,
+	0x2776c3,
+	0x20e7c3,
+	0x8860e7c5,
+	0x275485,
+	0x2e9f04,
+	0x2b26c2,
+	0x3315c3,
+	0x88a02e82,
+	0x88e01982,
+	0x39a705,
+	0x285b07,
+	0x283d44,
+	0x2caa09,
+	0x2e23c9,
+	0x202183,
+	0x286d88,
+	0x2a8c49,
+	0x222607,
+	0x8933d845,
+	0x359b86,
+	0x35b2c6,
+	0x35c0c5,
+	0x2d93c5,
+	0x89605682,
+	0x259205,
+	0x2d8f88,
+	0x2d5fc6,
+	0x89b0b9c7,
+	0x3a6744,
+	0x371587,
+	0x3b1106,
+	0x89e0de02,
+	0x21bfc6,
+	0x317485,
+	0x8a2429c2,
+	0x8a618b82,
+	0x27aec6,
+	0x8aa99987,
+	0x8ae38742,
+	0x21a043,
+	0x23e186,
+	0x2d8e44,
+	0x269c46,
+	0x341606,
+	0x2fdb0a,
+	0x350145,
+	0x21ef46,
+	0x21f983,
+	0x21f984,
+	0x8b2021c2,
+	0x32a083,
+	0x8b60f782,
+	0x333883,
+	0x8ba0d084,
+	0x2dfbc4,
+	0x8bedfbca,
+	0x206383,
+	0x2096c7,
+	0x366c46,
+	0x3888c4,
+	0x22cec2,
+	0x2298c2,
+	0x8c2007c2,
+	0x30fc43,
+	0x262a47,
+	0x2007c7,
+	0x295284,
+	0x230147,
+	0x3059c6,
+	0x3dac87,
+	0x217c44,
+	0x21c505,
+	0x210785,
+	0x8c60ae42,
+	0x361dc6,
+	0x2309c3,
+	0x231d02,
+	0x231d06,
+	0x8ca20342,
+	0x8ce3d942,
+	0x24a685,
+	0x8d201b42,
+	0x8d60c642,
+	0x8df925c5,
+	0x2e3e85,
+	0x311305,
+	0x8e26bfc3,
+	0x2d9e05,
+	0x2f8247,
+	0x2b6cc5,
+	0x350305,
+	0x273d04,
+	0x245946,
+	0x254f84,
+	0x8e6008c2,
+	0x8f2b5585,
+	0x37b547,
+	0x2f8788,
+	0x28e506,
+	0x28e50d,
+	0x28fa09,
+	0x28fa12,
+	0x387e05,
+	0x391543,
+	0x8f609a02,
+	0x324704,
+	0x230903,
+	0x318785,
+	0x319345,
+	0x8fa24b42,
+	0x26aa43,
+	0x8fe50602,
+	0x90624302,
+	0x90a00082,
+	0x3ee585,
+	0x3a0ec3,
+	0x90e07482,
+	0x91205fc2,
+	0x289986,
+	0x277a0a,
+	0x2056c3,
+	0x23b543,
+	0x2f0ac3,
+	0x92e02642,
+	0xa1641d82,
+	0xa1e18182,
+	0x2046c2,
+	0x330c49,
+	0x2dc8c4,
+	0x3a0208,
+	0xa2221902,
+	0xa2a01102,
+	0x282145,
+	0x236dc8,
+	0x32b148,
+	0x2f0d4c,
+	0x23ba43,
+	0xa2e6f2c2,
+	0xa320c302,
+	0x2d4146,
+	0x31a605,
+	0x2ef943,
+	0x273706,
+	0x31a746,
+	0x2376c3,
+	0x31c283,
+	0x31c946,
+	0x31de04,
+	0x20c306,
+	0x3ec744,
+	0x31e5c4,
+	0x320bca,
+	0xa364c542,
+	0x2563c5,
+	0x3229ca,
+	0x322905,
+	0x3236c4,
+	0x3237c6,
+	0x323944,
+	0x219a06,
+	0xa3a01d82,
+	0x39e8c6,
+	0x302045,
+	0x3bd5c7,
+	0x3c9246,
+	0x259504,
+	0x2efc47,
+	0x21c005,
+	0x25d2c7,
+	0x22b7c7,
+	0x22b7ce,
+	0x288646,
+	0x243885,
+	0x204a07,
+	0x3c2c87,
+	0x20b6c5,
+	0x214404,
+	0x244b82,
+	0x285d07,
+	0x293244,
+	0x24cf44,
+	0x2e78cb,
+	0xa3e20b83,
+	0x326f07,
+	0x220b84,
+	0x327207,
+	0x21c903,
+	0x352b0d,
+	0x326648,
+	0xa424d404,
+	0x24d405,
+	0x3e3e85,
+	0x326e83,
+	0xa4625842,
+	0x32a043,
+	0x32ae03,
+	0x21e044,
+	0x361f45,
+	0x362047,
+	0x21fa06,
+	0x394dc3,
+	0x233e8b,
+	0x3727cb,
+	0x2aeccb,
+	0x2badcb,
+	0x2c78ca,
+	0x2d594b,
+	0x2f8f0b,
+	0x3274cc,
+	0x31e9cb,
+	0x36534a,
+	0x39c74b,
+	0x3b558c,
+	0x3f130b,
+	0x32b74a,
+	0x32c34a,
+	0x32d68e,
+	0x32de0b,
+	0x32e0ca,
+	0x32f191,
+	0x32f5ca,
+	0x32facb,
+	0x33000e,
+	0x33130c,
+	0x33168b,
+	0x33194e,
+	0x331ccc,
+	0x33324a,
+	0x33500c,
+	0xa4b35c0a,
+	0x336448,
+	0x336e49,
+	0x33894a,
+	0x338bca,
+	0x338e4b,
+	0x33cf4e,
+	0x33df11,
+	0x348109,
+	0x34834a,
+	0x348a8b,
+	0x34a04d,
+	0x34aeca,
+	0x34b516,
+	0x34c88b,
+	0x34e18a,
+	0x34e9ca,
+	0x34f8cb,
+	0x350709,
+	0x353489,
+	0x354a4d,
+	0x35520b,
+	0x356b8b,
+	0x357509,
+	0x357b4e,
+	0x35874a,
+	0x35940a,
+	0x35994a,
+	0x35a2cb,
+	0x35ab0b,
+	0x35b8cd,
+	0x35d48d,
+	0x35e110,
+	0x35e5cb,
+	0x35fc4c,
+	0x36160b,
+	0x3639cb,
+	0x367bce,
+	0x3682cb,
+	0x3682cd,
+	0x36e30b,
+	0x36ed8f,
+	0x36f14b,
+	0x36fb0a,
+	0x3724c9,
+	0x374309,
+	0xa4f7468b,
+	0x37494e,
+	0x374cce,
+	0x37638b,
+	0x37708f,
+	0x379b0b,
+	0x379dcb,
+	0x37a08a,
+	0x37ef49,
+	0x38280f,
+	0x386b0c,
+	0x38748c,
+	0x387ace,
+	0x387fcf,
+	0x38838e,
+	0x388b10,
+	0x388f0f,
+	0x38a00e,
+	0x38ab4c,
+	0x38ae51,
+	0x38b292,
+	0x38c611,
+	0x38cc4e,
+	0x38d48b,
+	0x38d48e,
+	0x38d80f,
+	0x38dbce,
+	0x38df50,
+	0x38e353,
+	0x38e811,
+	0x38ec4c,
+	0x38ef4e,
+	0x38f3cc,
+	0x38f813,
+	0x390990,
+	0x390e0c,
+	0x39110c,
+	0x39218b,
+	0x39290e,
+	0x392e0b,
+	0x39354b,
+	0x39564c,
+	0x39b18a,
+	0x39bf4c,
+	0x39c24c,
+	0x39c549,
+	0x39e04b,
+	0x39e308,
+	0x39eec9,
+	0x39eecf,
+	0x3a07cb,
+	0xa53a13ca,
+	0x3a360c,
+	0x3a454b,
+	0xa57a4809,
+	0x3a5008,
+	0x3a53cb,
+	0x3a6c8a,
+	0x3a6f0a,
+	0x3a718b,
+	0x3a784c,
+	0x3a85c9,
+	0x3a8808,
+	0x3ab9cb,
+	0x3ae48b,
+	0x3b230e,
+	0x3b380b,
+	0x3b4f0b,
+	0x3c698b,
+	0x3c6c49,
+	0x3c714d,
+	0x3e264a,
+	0x3e6257,
+	0x3e6a98,
+	0x3e8f09,
+	0x3ea14b,
+	0x3eb314,
+	0x3eb80b,
+	0x3ebd8a,
+	0x3eca0a,
+	0x3ecc8b,
+	0x3ee810,
+	0x3eec11,
+	0x3ef20a,
+	0x3f090d,
+	0x3f100d,
+	0x3f2a0b,
+	0x361ec3,
+	0xa5bd5603,
+	0x27d646,
+	0x286845,
+	0x2eb907,
+	0x2de506,
+	0xa5e3c402,
+	0x2b8a09,
+	0x3db1c4,
+	0x2f64c8,
+	0x222a43,
+	0x324647,
+	0xa62428c2,
+	0x2c1143,
+	0xa6603642,
+	0x2e2ec6,
+	0x2e5184,
+	0x229104,
+	0x3d6b83,
+	0xa6edd842,
+	0xa7201844,
+	0x2676c7,
+	0xa762c082,
+	0x206643,
+	0x2cd03,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x11c748,
+	0x21d783,
+	0x2000c2,
+	0x1b9688,
+	0x202202,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x213dc3,
+	0x343916,
+	0x36c653,
+	0x22ffc9,
+	0x2575c8,
+	0x356f49,
+	0x322b46,
+	0x356090,
+	0x3ed4d3,
+	0x300b48,
+	0x289647,
+	0x293c47,
+	0x2b1dca,
+	0x36b289,
+	0x3d3dc9,
+	0x25364b,
+	0x34d986,
+	0x33218a,
+	0x225106,
+	0x22f843,
+	0x274845,
+	0x3c1748,
+	0x28dacd,
+	0x3c9c4c,
+	0x301d07,
+	0x31ec4d,
+	0x2204c4,
+	0x23218a,
+	0x232d8a,
+	0x23324a,
+	0x31f787,
+	0x23fec7,
+	0x244ac4,
+	0x27cf46,
+	0x2ff884,
+	0x21f608,
+	0x2317c9,
+	0x30d786,
+	0x30d788,
+	0x24848d,
+	0x2e2609,
+	0x31cec8,
+	0x212f47,
+	0x24a8ca,
+	0x2bdd06,
+	0x37cfc4,
+	0x21dc07,
+	0x239cca,
+	0x23f70e,
+	0x286e45,
+	0x29950b,
+	0x30f989,
+	0x26b289,
+	0x20ac07,
+	0x20ac0a,
+	0x31b187,
+	0x2c6649,
+	0x3eaa48,
+	0x37360b,
+	0x2dfa85,
+	0x393e4a,
+	0x21ddc9,
+	0x2fe3ca,
+	0x215e8b,
+	0x21db0b,
+	0x2533d5,
+	0x2f6985,
+	0x212fc5,
+	0x23ab8a,
+	0x2722ca,
+	0x3107c7,
+	0x213003,
+	0x2d3808,
+	0x2ed6ca,
+	0x225946,
+	0x25f809,
+	0x27e608,
+	0x2cf104,
+	0x286b09,
+	0x296048,
+	0x2d8cc7,
+	0x2b5586,
+	0x37b547,
+	0x2ca047,
+	0x243b45,
+	0x2a174c,
+	0x24d405,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x202202,
+	0x206643,
+	0x2109c3,
+	0x21d783,
+	0x21f143,
+	0x206643,
+	0x2109c3,
+	0x243503,
+	0x21f143,
+	0x1e2a03,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x1b9688,
+	0x202202,
+	0x206643,
+	0x22e547,
+	0x2b044,
+	0x2109c3,
+	0x1dadc4,
+	0x21f143,
+	0x1c1f05,
+	0x202202,
+	0x201482,
+	0x300dc2,
+	0x204b02,
+	0x206282,
+	0x2061c2,
+	0x1214a,
+	0x12a185,
+	0x12a18a,
+	0x1528d09,
+	0x14910b,
+	0x54047,
+	0x1b1786,
+	0x9d286,
+	0x5c4c9,
+	0xadfc7,
+	0xf8504,
+	0x15adf8a,
+	0xe44e,
+	0x18150c,
+	0x1ddc89,
+	0x4827103,
+	0x95607,
+	0x1106,
+	0xf83,
+	0xecf05,
+	0xc1,
+	0x221bc3,
+	0x5206643,
+	0x2392c4,
+	0x21f603,
+	0x3d6403,
+	0x205503,
+	0x211e43,
+	0x206543,
+	0x2eeac6,
+	0x29acc6,
+	0x2109c3,
+	0x21f143,
+	0x2b6006,
+	0x236e83,
+	0x1b9688,
+	0x200984,
+	0x25f0c7,
+	0x3d6bc3,
+	0x291904,
+	0x20aa83,
+	0x20ac83,
+	0x205503,
+	0xf08c7,
+	0x1a31c4,
+	0x1d45c3,
+	0x1a2345,
+	0x66000c2,
+	0x50b03,
+	0x6a02202,
+	0x6e92849,
+	0x70988c9,
+	0x98dcd,
+	0x9910d,
+	0x300dc2,
+	0x503c4,
+	0x1a2389,
+	0xf9d4c,
+	0x2003c2,
+	0x76502c8,
+	0x10a904,
+	0x3295c3,
+	0x1b9688,
+	0x93244,
+	0x1412f42,
+	0x14005c2,
+	0x1412f42,
+	0x151e7c6,
+	0x233cc3,
+	0x276803,
+	0x7e06643,
+	0x232184,
+	0x861f603,
+	0x8e05503,
+	0x203042,
+	0x2503c4,
+	0x2109c3,
+	0x21bf83,
+	0x201582,
+	0x21f143,
+	0x219142,
+	0x310f03,
+	0x204842,
+	0x2019c3,
+	0x21a743,
+	0x2059c2,
+	0x1b9688,
+	0x829b1c9,
+	0xf9d4c,
+	0x22403,
+	0x233cc3,
+	0x3f2f08,
+	0x8a1bf83,
+	0x201582,
+	0x310f03,
+	0x204842,
+	0x2019c3,
+	0x21a743,
+	0x2059c2,
+	0x3a6387,
+	0x310f03,
+	0x204842,
+	0x2019c3,
+	0x21a743,
+	0x2059c2,
+	0x206643,
+	0x8a42,
+	0xf543,
+	0x1342,
+	0x4c02,
+	0x6d602,
+	0x2042,
+	0x2642,
+	0x13142,
+	0x250b03,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x211e43,
+	0x206543,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x215c82,
+	0x219683,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x12482,
+	0xab643,
+	0x16282,
+	0x250b03,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x2109c3,
+	0x21f143,
+	0x33d845,
+	0x224b42,
+	0x2000c2,
+	0x1b9688,
+	0xae2a792,
+	0xb3c2588,
+	0xf9d4c,
+	0x147e248,
+	0x16d0a,
+	0x2c45,
+	0x1d54c7,
+	0x205503,
+	0x202701,
+	0x2009c1,
+	0x2026c1,
+	0x202741,
+	0x200a41,
+	0x226181,
+	0x200a01,
+	0x232041,
+	0x202781,
+	0x200001,
+	0x2000c1,
+	0x200201,
+	0x14cb05,
+	0x1b9688,
+	0x200101,
+	0x200cc1,
+	0x200501,
+	0x200bc1,
+	0x200041,
+	0x200801,
+	0x200181,
+	0x200c01,
+	0x200701,
+	0x2004c1,
+	0x200ec1,
+	0x200581,
+	0x2003c1,
+	0x201401,
+	0x207141,
+	0x200401,
+	0x200741,
+	0x2007c1,
+	0x200081,
+	0x201101,
+	0x200f81,
+	0x208f81,
+	0x205381,
+	0x201841,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x2003c2,
+	0x21f143,
+	0xf08c7,
+	0x82b87,
+	0x34106,
+	0x3c80a,
+	0x97d08,
+	0x61f08,
+	0x62947,
+	0xc1e04,
+	0x1ddf06,
+	0xf4245,
+	0x1cf805,
+	0xaec43,
+	0x15d46,
+	0x54146,
+	0x214f04,
+	0x33a247,
+	0x1b9688,
+	0x2e4084,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x2202,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x335e08,
+	0x3c7f44,
+	0x235fc4,
+	0x206204,
+	0x2d4047,
+	0x2ec587,
+	0x206643,
+	0x2392cb,
+	0x3ab74a,
+	0x388787,
+	0x315b08,
+	0x2afec8,
+	0x21f603,
+	0x373887,
+	0x3d6403,
+	0x203a48,
+	0x20b289,
+	0x2503c4,
+	0x211e43,
+	0x25ce88,
+	0x206543,
+	0x2ea58a,
+	0x2eeac6,
+	0x3ac647,
+	0x2109c3,
+	0x3becc6,
+	0x2bea08,
+	0x21f143,
+	0x264506,
+	0x303bcd,
+	0x305608,
+	0x30af0b,
+	0x3121c6,
+	0x33c047,
+	0x217fc5,
+	0x3dcfca,
+	0x233d45,
+	0x27538a,
+	0x224b42,
+	0x200f83,
+	0x24cf44,
+	0x200006,
+	0x3b9283,
+	0x2b4c83,
+	0x38a7c3,
+	0x23c0c3,
+	0x3dd203,
+	0x201c02,
+	0x3a1085,
+	0x2b83c9,
+	0x215c43,
+	0x2441c3,
+	0x2028c3,
+	0x213743,
+	0x200201,
+	0x2e8e87,
+	0x2d9c45,
+	0x3c12c3,
+	0x266483,
+	0x3f1d43,
+	0x206204,
+	0x2fd643,
+	0x2102c8,
+	0x372703,
+	0x31b70d,
+	0x288708,
+	0x3f30c6,
+	0x2fbec3,
+	0x385383,
+	0x3a7403,
+	0xde06643,
+	0x234788,
+	0x2392c4,
+	0x240c03,
+	0x2457c3,
+	0x200106,
+	0x249248,
+	0x2023c3,
+	0x21ce03,
+	0x2be703,
+	0x21a6c3,
+	0x3dd003,
+	0x20f343,
+	0x21f603,
+	0x216503,
+	0x24e0c3,
+	0x2534c3,
+	0x228e03,
+	0x33e443,
+	0x39bac3,
+	0x244bc3,
+	0x3a5b45,
+	0x25c484,
+	0x25db07,
+	0x2596c2,
+	0x260983,
+	0x265506,
+	0x267a83,
+	0x267d83,
+	0x286d43,
+	0x3de7c3,
+	0x219b03,
+	0x33b403,
+	0x2a4e07,
+	0xea05503,
+	0x20ffc3,
+	0x206a43,
+	0x2036c3,
+	0x20fc83,
+	0x34ffc3,
+	0x369d05,
+	0x382b83,
+	0x24dd09,
+	0x200c03,
+	0x319643,
+	0xee4f703,
+	0x266543,
+	0x206243,
+	0x211a08,
+	0x2b8306,
+	0x3de586,
+	0x2c3d46,
+	0x268d87,
+	0x213ac3,
+	0x23ddc3,
+	0x206543,
+	0x297e06,
+	0x2066c2,
+	0x2eddc3,
+	0x3423c5,
+	0x2109c3,
+	0x328fc7,
+	0x161d783,
+	0x23d5c3,
+	0x236a03,
+	0x2364c3,
+	0x23c483,
+	0x21f143,
+	0x23e806,
+	0x3a3286,
+	0x383183,
+	0x3cbd03,
+	0x219683,
+	0x217cc3,
+	0x31c303,
+	0x30e243,
+	0x3118c3,
+	0x3c1f05,
+	0x237343,
+	0x35ddc6,
+	0x20ef83,
+	0x3b98c8,
+	0x20c4c3,
+	0x3b75c9,
+	0x20c4c8,
+	0x21a188,
+	0x21e605,
+	0x22f40a,
+	0x2302ca,
+	0x232acb,
+	0x234448,
+	0x325383,
+	0x217043,
+	0x311903,
+	0x2f2983,
+	0x313948,
+	0x336c83,
+	0x21f984,
+	0x2021c2,
+	0x240b83,
+	0x260e43,
+	0x2007c3,
+	0x23d943,
+	0x2976c3,
+	0x236e83,
+	0x224b42,
+	0x218083,
+	0x23ba43,
+	0x31e943,
+	0x321744,
+	0x24cf44,
+	0x224343,
+	0x1b9688,
+	0xe31d0cc,
+	0xe658b05,
+	0xde305,
+	0x2000c2,
+	0x200b02,
+	0x201c02,
+	0x206182,
+	0x200202,
+	0x2011c2,
+	0x278d02,
+	0x201342,
+	0x200382,
+	0x205e42,
+	0x2c7f42,
+	0x203c42,
+	0x27d202,
+	0x206702,
+	0x2061c2,
+	0x2020c2,
+	0x201402,
+	0x202b02,
+	0x245342,
+	0x203f42,
+	0x200682,
+	0x2039c2,
+	0x212482,
+	0x202ec2,
+	0x201042,
+	0x20e7c2,
+	0x20c642,
+	0xc2,
+	0xb02,
+	0x1c02,
+	0x6182,
+	0x202,
+	0x11c2,
+	0x78d02,
+	0x1342,
+	0x382,
+	0x5e42,
+	0xc7f42,
+	0x3c42,
+	0x7d202,
+	0x6702,
+	0x61c2,
+	0x20c2,
+	0x1402,
+	0x2b02,
+	0x45342,
+	0x3f42,
+	0x682,
+	0x39c2,
+	0x12482,
+	0x2ec2,
+	0x1042,
+	0xe7c2,
+	0xc642,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0xf82,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x99b49,
+	0x2202,
+	0x202202,
+	0x21f143,
+	0x10a06643,
+	0x205503,
+	0xdfa89,
+	0x206543,
+	0xf0847,
+	0x2232c2,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x17003,
+	0x2109c3,
+	0x21f143,
+	0x3642,
+	0x2001c2,
+	0x1421805,
+	0x14cb05,
+	0x2886c2,
+	0x1b9688,
+	0x2202,
+	0x237e02,
+	0x202f82,
+	0xf9d4c,
+	0x2104c2,
+	0x20fcc2,
+	0x212282,
+	0x1cf805,
+	0x200dc2,
+	0x201582,
+	0x203902,
+	0x201542,
+	0x2020c2,
+	0x2413c2,
+	0x210a82,
+	0x242402,
+	0x11a7a6c4,
+	0x142,
+	0xf08c7,
+	0x42983,
+	0xdc40d,
+	0xf42c9,
+	0x1280b,
+	0xf8108,
+	0x66fc9,
+	0x122ece45,
+	0x119e46,
+	0x137d09,
+	0x205503,
+	0x1b9688,
+	0x1a31c4,
+	0x1d45c3,
+	0x1a2345,
+	0x1b9688,
+	0x1dd507,
+	0x13053907,
+	0x1365f684,
+	0x63646,
+	0x1a2389,
+	0xb728e,
+	0xf9d4c,
+	0x144207,
+	0x15b5c83,
+	0x13a01ac2,
+	0x147849,
+	0x1d5004,
+	0x2000c2,
+	0x214f04,
+	0x202202,
+	0x206643,
+	0x201482,
+	0x21f603,
+	0xfd03,
+	0x200382,
+	0x2e4084,
+	0x211e43,
+	0x24e442,
+	0x2109c3,
+	0x12282,
+	0x2003c2,
+	0x21f143,
+	0x212fc6,
+	0x33940f,
+	0x7de983,
+	0x1b9688,
+	0x202202,
+	0x3d6403,
+	0x205503,
+	0x206543,
+	0x14fd3587,
+	0x1572a46,
+	0x1ee286,
+	0xd9c89,
+	0x153c7448,
+	0x1e8684,
+	0x156c3fca,
+	0x7d848,
+	0x16016c07,
+	0x1c2588,
+	0xb7288,
+	0x15dcd8b,
+	0x147abca,
+	0x16467cc3,
+	0xfac49,
+	0x1690a248,
+	0x16e38a47,
+	0x14eb44a,
+	0x1506147,
+	0xb1e8b,
+	0x1729e38c,
+	0x164685,
+	0xe0405,
+	0x1231c9,
+	0x1029c4,
+	0x11c283,
+	0x15ac4105,
+	0x12c843,
+	0x15e2c1c3,
+	0x12c843,
+	0x42982,
+	0x1b42,
+	0x5fc2,
+	0x5fc2,
+	0x1782,
+	0x5fc2,
+	0x2642,
+	0x3402,
+	0x23c2,
+	0x14cb05,
+	0xf08c7,
+	0x1e8684,
+	0x107e04,
+	0x202202,
+	0x206643,
+	0x205503,
+	0x2109c3,
+	0x2000c2,
+	0x2087c2,
+	0x205a42,
+	0x18206643,
+	0x241382,
+	0x21f603,
+	0x200bc2,
+	0x234382,
+	0x205503,
+	0x2062c2,
+	0x2697c2,
+	0x2208c2,
+	0x207002,
+	0x29cfc2,
+	0x200802,
+	0x203582,
+	0x217382,
+	0x20bd82,
+	0x20af02,
+	0x1610cc,
+	0x2c7002,
+	0x27e5c2,
+	0x230a02,
+	0x201f02,
+	0x206543,
+	0x201502,
+	0x2109c3,
+	0x239e02,
+	0x246102,
+	0x21f143,
+	0x244242,
+	0x202ec2,
+	0x206ec2,
+	0x200e02,
+	0x203d02,
+	0x2429c2,
+	0x20ae42,
+	0x250602,
+	0x230a42,
+	0x32e0ca,
+	0x36fb0a,
+	0x3a1a4a,
+	0x3f4442,
+	0x205382,
+	0x369cc2,
+	0x186fc749,
+	0x18b547ca,
+	0x1549207,
+	0x18e00fc2,
+	0x143bfc3,
+	0x4942,
+	0x1547ca,
+	0x1685ce,
+	0x204884,
+	0x105785,
+	0x19606643,
+	0x42dc3,
+	0x21f603,
+	0x2554c4,
+	0x205503,
+	0x2503c4,
+	0x211e43,
+	0x144009,
+	0x1d4086,
+	0x206543,
+	0xf8984,
+	0x146ec3,
+	0x2109c3,
+	0x1f45,
+	0x21d783,
+	0x21f143,
+	0x1445a04,
+	0x237343,
+	0x1994e6c4,
+	0xcbd48,
+	0x200f83,
+	0x1b9688,
+	0x3042,
+	0x1533a43,
+	0x1de8c6,
+	0x15dde84,
+	0x1d6985,
+	0x1027ca,
+	0x134f82,
+	0x1a5dec0d,
+	0x1b32c6,
+	0x6f51,
+	0x1aafc749,
+	0x159c8a,
+	0x1d6a08,
+	0x8c1c8,
+	0x145cce,
+	0x54b13,
+	0x21572d07,
+	0x28c2,
+	0x13a810,
+	0x145acc,
+	0xfc8d4,
+	0xb0407,
+	0x1a50e,
+	0x14cb0b,
+	0x14eecb,
+	0x1bd04a,
+	0x342c7,
+	0x1b9688,
+	0xb4d88,
+	0x8ec7,
+	0x2181ae0b,
+	0x1c446,
+	0x1f4c7,
+	0x2fc2,
+	0x10fa8d,
+	0x149b45,
+	0x69347,
+	0x2ad8a,
+	0x13e30c,
+	0x13e4cf,
+	0x11f64f,
+	0x1547c2,
+	0x2202,
+	0xe9e08,
+	0x21cfbc4c,
+	0x1a8b0a,
+	0x22361b8a,
+	0xf10ca,
+	0x800ca,
+	0x88508,
+	0x26085,
+	0x6b5c8,
+	0xf1588,
+	0x1dd4c8,
+	0x146488,
+	0x23c2,
+	0x11f3cf,
+	0x142188d,
+	0x140e4d2,
+	0x1ccf8b,
+	0xc9a08,
+	0x38107,
+	0x4e48a,
+	0x12bccb,
+	0xa24c9,
+	0x4e387,
+	0x76706,
+	0x25f88,
+	0x3048c,
+	0x1d9d47,
+	0x1caca,
+	0x7908,
+	0x15f00e,
+	0x19028e,
+	0x3410b,
+	0x3e48b,
+	0x3ed0b,
+	0x41a09,
+	0x42e4b,
+	0x4334d,
+	0x44d4b,
+	0x4978d,
+	0x49b0d,
+	0x5250a,
+	0x4cd8b,
+	0x4d24b,
+	0x52185,
+	0x225c7490,
+	0x2c68f,
+	0x7a88f,
+	0x10ff4d,
+	0x57f50,
+	0x4c02,
+	0x22a2fd08,
+	0x1d9bc8,
+	0x80990,
+	0x12ae8e,
+	0x22f726c5,
+	0x5314b,
+	0x143110,
+	0x59bc5,
+	0xa380b,
+	0x1b178c,
+	0x6b6ca,
+	0x3e649,
+	0x6c448,
+	0x72547,
+	0x72887,
+	0x72a47,
+	0x73ac7,
+	0x75207,
+	0x75607,
+	0x77787,
+	0x77c87,
+	0x78187,
+	0x78507,
+	0x789c7,
+	0x78b87,
+	0x78d47,
+	0x78f07,
+	0x79287,
+	0x79747,
+	0x7b047,
+	0x7b507,
+	0x7c107,
+	0x7c407,
+	0x7c5c7,
+	0x7c8c7,
+	0x7d0c7,
+	0x7d2c7,
+	0x7dcc7,
+	0x7de87,
+	0x7e047,
+	0x7e447,
+	0x7ea87,
+	0x7f447,
+	0x7ff07,
+	0x80347,
+	0x81087,
+	0x81247,
+	0x81887,
+	0x81c07,
+	0x82607,
+	0x82a07,
+	0x82d47,
+	0x82f07,
+	0x83347,
+	0x83a47,
+	0x842c7,
+	0x846c7,
+	0x84887,
+	0x84d07,
+	0x85647,
+	0xf168a,
+	0x15b48,
+	0x1ba40c,
+	0x1416c7,
+	0x98385,
+	0x1e1a51,
+	0x14d146,
+	0x12428a,
+	0xe9c8a,
+	0x63646,
+	0x15cdcb,
+	0x642,
+	0x31391,
+	0x168c89,
+	0xd1e49,
+	0xa48c6,
+	0x17382,
+	0x6808a,
+	0xb78c9,
+	0xb800f,
+	0xb860e,
+	0xbac08,
+	0x23345ed2,
+	0x11608,
+	0x2366c647,
+	0xbdacf,
+	0x15fc2,
+	0x1de3c9,
+	0x1ca20a,
+	0x23a14609,
+	0xd4389,
+	0xd438c,
+	0x604b,
+	0x9670e,
+	0x1cdb8c,
+	0xfa94f,
+	0x1c02ce,
+	0x56a4c,
+	0x80789,
+	0x81d91,
+	0x8b988,
+	0x8c392,
+	0x8e20d,
+	0x9198d,
+	0x95d0b,
+	0x18a455,
+	0x1e0b49,
+	0x9a68a,
+	0x9ecc9,
+	0xa3d50,
+	0xae18b,
+	0xb0a0f,
+	0xc054b,
+	0xc0bcc,
+	0x19bb50,
+	0x17094a,
+	0x17a88d,
+	0x197cce,
+	0xc1eca,
+	0x12cd4c,
+	0xc9d14,
+	0xd1ad1,
+	0xd228b,
+	0xd338f,
+	0xd6fcd,
+	0xd7ace,
+	0xd8b8c,
+	0xda10c,
+	0x19b84b,
+	0x1ef70e,
+	0xddad0,
+	0xf218b,
+	0xf728d,
+	0x11290f,
+	0x1090cc,
+	0x10d60e,
+	0x115111,
+	0x1b124c,
+	0x14b107,
+	0x16430d,
+	0x16fd4c,
+	0x17a2d0,
+	0x19510d,
+	0x195f07,
+	0x199490,
+	0x1a9b08,
+	0xc144b,
+	0xc364f,
+	0x1ba688,
+	0x5450d,
+	0x117510,
+	0x17c789,
+	0x23fc7448,
+	0x242c7fc6,
+	0xc8bc3,
+	0x1aa949,
+	0xa5909,
+	0xcd6c5,
+	0x6982,
+	0x1289,
+	0x4e90a,
+	0x2468c846,
+	0x148c84d,
+	0x24b283d1,
+	0x24f04984,
+	0x1e7086,
+	0x2294a,
+	0x1ec4d,
+	0x252e098b,
+	0x1da1c8,
+	0x25460dc9,
+	0x1c943,
+	0x14880a,
+	0xeff11,
+	0xf0349,
+	0xf1047,
+	0xf1ec8,
+	0xf2447,
+	0x6c548,
+	0x70cb,
+	0x1379c9,
+	0xf91d0,
+	0xf968c,
+	0xf9b09,
+	0xf9d4c,
+	0x25afa14d,
+	0xfb588,
+	0xfba85,
+	0x88088,
+	0x19dc8a,
+	0x16ab87,
+	0x1f42,
+	0x25e21e95,
+	0x143e0a,
+	0x149989,
+	0xa5ac8,
+	0x11ef09,
+	0x86905,
+	0x128e4a,
+	0xfdcc7,
+	0x998cf,
+	0x16470b,
+	0x13ba0c,
+	0x28d52,
+	0x126a06,
+	0x14ff548,
+	0x86f45,
+	0x1282c8,
+	0x10154b,
+	0xe32d1,
+	0x100507,
+	0x557ca,
+	0x180f0c,
+	0x2630a105,
+	0x1ae7cc,
+	0x265104ce,
+	0x140943,
+	0x198e46,
+	0x413c2,
+	0x111e8b,
+	0x11370a,
+	0x15144cc,
+	0x1da0c8,
+	0x49948,
+	0x26aa5b46,
+	0x125f07,
+	0x1c58e,
+	0x146307,
+	0x10002,
+	0x4842,
+	0x5a590,
+	0x6aac7,
+	0x6abcf,
+	0x15d46,
+	0xaa4ce,
+	0xbc10b,
+	0x5a3c8,
+	0xa2889,
+	0x15252,
+	0x11cd8d,
+	0x11d908,
+	0x126c9,
+	0x6af4d,
+	0x6b909,
+	0x6cd4b,
+	0x70e88,
+	0x77f88,
+	0x79408,
+	0x7bc89,
+	0x7be8a,
+	0x7ca4c,
+	0x1bc0a,
+	0xe3007,
+	0xe824a,
+	0x11c347,
+	0x3980a,
+	0xf4788,
+	0x1d880d,
+	0xa1411,
+	0x26ed7dc6,
+	0x16cbcb,
+	0x1dafcc,
+	0x1be08,
+	0x1d7589,
+	0x16194d,
+	0x73d10,
+	0x6a28c,
+	0x1e1e4d,
+	0xfb60f,
+	0x5fc2,
+	0x9eecd,
+	0x2642,
+	0x41d82,
+	0x11c28a,
+	0x272948ca,
+	0x2a08a,
+	0x276849c8,
+	0x12418a,
+	0x12454b,
+	0x125507,
+	0x1ab54c,
+	0x19050c,
+	0x1277ca,
+	0x27927a4f,
+	0x127e0c,
+	0x128107,
+	0x12948e,
+	0x27df4305,
+	0x1a20c8,
+	0x3642,
+	0x141a6c3,
+	0x1afc660e,
+	0x1b7d428e,
+	0x1bf47e8a,
+	0x1c7c414e,
+	0x1cf4de0e,
+	0x1d75910c,
+	0x1549207,
+	0x1559d49,
+	0x143bfc3,
+	0x1dfbf54c,
+	0x1e604c09,
+	0x1ef00749,
+	0x1f7025c9,
+	0x4942,
+	0x1d6591,
+	0x1d41d1,
+	0x147dcd,
+	0x1c4091,
+	0x14dd51,
+	0x15904f,
+	0x1bf48f,
+	0x1d06cc,
+	0x10068c,
+	0x10250c,
+	0x106d8d,
+	0x191c55,
+	0x132f4c,
+	0x137f0c,
+	0x149c50,
+	0x15040c,
+	0x1bb70c,
+	0x1c6359,
+	0x1d25d9,
+	0x1eacd9,
+	0x4954,
+	0x7ad4,
+	0x9054,
+	0x9c54,
+	0xa1d4,
+	0x1fe07d89,
+	0x20409309,
+	0x20f37fc9,
+	0x1b28bb89,
+	0x4942,
+	0x1ba8bb89,
+	0x4942,
+	0x494a,
+	0x4942,
+	0x1c28bb89,
+	0x4942,
+	0x494a,
+	0x4942,
+	0x1ca8bb89,
+	0x4942,
+	0x1d28bb89,
+	0x4942,
+	0x1da8bb89,
+	0x4942,
+	0x494a,
+	0x4942,
+	0x1e28bb89,
+	0x4942,
+	0x494a,
+	0x4942,
+	0x1ea8bb89,
+	0x4942,
+	0x1f28bb89,
+	0x4942,
+	0x494a,
+	0x4942,
+	0x1fa8bb89,
+	0x4942,
+	0x494a,
+	0x4942,
+	0x2028bb89,
+	0x4942,
+	0x20a8bb89,
+	0x4942,
+	0x2128bb89,
+	0x4942,
+	0x494a,
+	0x4942,
+	0x1400401,
+	0x6f45,
+	0x1bd044,
+	0x1414fc3,
+	0x141da83,
+	0x1469683,
+	0x8e344,
+	0x137d08,
+	0x1c660e,
+	0x1d428e,
+	0x8b28e,
+	0x147e8a,
+	0x1c414e,
+	0x14de0e,
+	0x15910c,
+	0x1bf54c,
+	0x4c09,
+	0x100749,
+	0x1025c9,
+	0x7d89,
+	0x9309,
+	0x137fc9,
+	0x149d0d,
+	0x9f09,
+	0xa489,
+	0x175544,
+	0x182384,
+	0x192804,
+	0x1a2284,
+	0xb2144,
+	0x16b604,
+	0x1e8e04,
+	0x189f04,
+	0x15c44,
+	0x4ac44,
+	0xff009,
+	0xff00c,
+	0x157f86,
+	0x157f8e,
+	0x8e344,
+	0x1595903,
+	0x2b447,
+	0x148d88c,
+	0x15e42,
+	0x15c43,
+	0x4ac44,
+	0x4c02,
+	0x37507,
+	0xfbc48,
+	0x1ae288,
+	0x46084,
+	0x5746,
+	0x13a4c7,
+	0xe2c44,
+	0x127386,
+	0x19882,
+	0x8f81,
+	0x22504,
+	0x54986,
+	0x27303,
+	0x4c02,
+	0x15c43,
+	0x124403,
+	0x28b43,
+	0xe983,
+	0x1c80c3,
+	0x28d45,
+	0x7e5c2,
+	0x14eb82,
+	0x1a2bc8,
+	0xf3c87,
+	0x56603,
+	0x137a47,
+	0x23c2,
+	0xd9c89,
+	0x2000c2,
+	0x202202,
+	0x201482,
+	0x20fd02,
+	0x200382,
+	0x2003c2,
+	0x204842,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x20fc83,
+	0x2109c3,
+	0x21f143,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x211e43,
+	0x262784,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x2109c3,
+	0x21f143,
+	0xbd03,
+	0x205503,
+	0x503c4,
+	0x2000c2,
+	0x250b03,
+	0x2a206643,
+	0x3a5f47,
+	0x205503,
+	0x20f743,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x3b6f0a,
+	0x212fc5,
+	0x219683,
+	0x23d942,
+	0x1b9688,
+	0x2a6e5b4a,
+	0xc01,
+	0x1b9688,
+	0x2202,
+	0x13e282,
+	0x2ae60b4b,
+	0x2b20f444,
+	0x1048c5,
+	0x1402c45,
+	0xfbc46,
+	0x2b602c45,
+	0x5fb83,
+	0xb2683,
+	0x1a31c4,
+	0x1d45c3,
+	0x1a2345,
+	0x14cb05,
+	0x1b9688,
+	0x1f4c7,
+	0x6643,
+	0x2e70d,
+	0x2be3c647,
+	0xcc6,
+	0x2c14dc45,
+	0x1cb4d2,
+	0xd87,
+	0x26e4a,
+	0x24dc8,
+	0x26d47,
+	0xfe08a,
+	0x1b42c8,
+	0x74a47,
+	0x15c18f,
+	0x4ed47,
+	0x71b06,
+	0x143110,
+	0x1486a46,
+	0x124c8f,
+	0xee89,
+	0x1e7104,
+	0x2c400e4e,
+	0x2ca0d84c,
+	0x37849,
+	0x79046,
+	0x6bb89,
+	0x116a86,
+	0x173cc6,
+	0xbc98c,
+	0x12beca,
+	0xa2647,
+	0x11400a,
+	0x146cc9,
+	0x10368c,
+	0x2410a,
+	0x4deca,
+	0x1a2389,
+	0x1e7086,
+	0xa270a,
+	0x1aae8a,
+	0xad3ca,
+	0x1f06c9,
+	0xef888,
+	0xefb86,
+	0xf4bcd,
+	0xf9d4c,
+	0x55f8b,
+	0xdd585,
+	0x2d322c8c,
+	0x144207,
+	0x1f0189,
+	0xda4c7,
+	0xba714,
+	0x117a8b,
+	0xc984a,
+	0x150ca,
+	0xb500d,
+	0x1524749,
+	0x11cb4c,
+	0x11d70b,
+	0x164c57,
+	0x165ed5,
+	0x7903,
+	0x7903,
+	0x34106,
+	0x7903,
+	0x2ce04b02,
+	0x28d45,
+	0xfbc48,
+	0x15b243,
+	0x49f04,
+	0x17804,
+	0x1780c,
+	0x60483,
+	0x14ad487,
+	0x1702cd,
+	0x15205,
+	0x142a2c3,
+	0x142a2c8,
+	0x5c4c9,
+	0xdfa89,
+	0x28d45,
+	0x10154b,
+	0xd254b,
+	0x1509343,
+	0x1509348,
+	0x1106,
+	0x14526c7,
+	0xa3fc7,
+	0x2e172bc9,
+	0x10886,
+	0x50b03,
+	0x1b9688,
+	0x2202,
+	0x554c4,
+	0xf9d4c,
+	0xff43,
+	0x13d845,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x2028c3,
+	0x206643,
+	0x21f603,
+	0x3d6403,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x2d2003,
+	0x200f83,
+	0x2028c3,
+	0x214f04,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x2330c3,
+	0x214f83,
+	0x23d942,
+	0x2f972cc5,
+	0x142d603,
+	0x206643,
+	0x21f603,
+	0x20fd03,
+	0x3d6403,
+	0x205503,
+	0x2503c4,
+	0x33c683,
+	0x23ddc3,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x219683,
+	0x30623443,
+	0x28c49,
+	0x2202,
+	0x23e1c3,
+	0x31206643,
+	0x21f603,
+	0x24ec43,
+	0x205503,
+	0x21a403,
+	0x23ddc3,
+	0x21f143,
+	0x202b03,
+	0x3eda84,
+	0x1b9688,
+	0x31a06643,
+	0x21f603,
+	0x2bacc3,
+	0x205503,
+	0x206543,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x2210c3,
+	0x1b9688,
+	0x32206643,
+	0x21f603,
+	0x3d6403,
+	0xf9d4c,
+	0x21d783,
+	0x21f143,
+	0x1b9688,
+	0x1549207,
+	0x250b03,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x14cb05,
+	0xf08c7,
+	0xba94b,
+	0x332328c6,
+	0xf0744,
+	0xdd585,
+	0x147e248,
+	0x206cd,
+	0x1c7448,
+	0x33a47285,
+	0x1ecc4,
+	0x2202,
+	0x1c36c3,
+	0x157e85,
+	0x232c2,
+	0x34db45,
+	0x1b9688,
+	0x353ddb4d,
+	0x357d520a,
+	0x7902,
+	0x21483,
+	0xf9d4c,
+	0x16be4f,
+	0xfd02,
+	0x8e344,
+	0x4ac44,
+	0x2202,
+	0x2000c2,
+	0x250b03,
+	0x206643,
+	0x205503,
+	0x2503c4,
+	0x206543,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x219683,
+	0x206643,
+	0x21f603,
+	0x2109c3,
+	0x21f143,
+	0x1c1f05,
+	0x3365c8,
+	0x214f04,
+	0x3c2986,
+	0x3d0586,
+	0x1b9688,
+	0x30f143,
+	0x3be309,
+	0x2b9815,
+	0xb981f,
+	0x206643,
+	0x95a87,
+	0x219d52,
+	0x187746,
+	0x189285,
+	0x6b6ca,
+	0x3e649,
+	0x219b0f,
+	0xefd47,
+	0x2e4084,
+	0x2243c5,
+	0x319410,
+	0x2577c7,
+	0xf9d4c,
+	0x21d783,
+	0x23d5c8,
+	0x4aac6,
+	0x28cc4a,
+	0x229804,
+	0x309b43,
+	0x23d942,
+	0x30468b,
+	0x1b9443,
+	0x21f603,
+	0x205503,
+	0x18fc84,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x30e543,
+	0x202202,
+	0x31983,
+	0x58cc4,
+	0x2109c3,
+	0x21f143,
+	0x3783bf05,
+	0x1d7346,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x20f743,
+	0x21ddc3,
+	0x21f143,
+	0x50b03,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x2109c3,
+	0x21f143,
+	0x31e02,
+	0x2000c2,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x2c45,
+	0x74fc9,
+	0x141eccb,
+	0x15c43,
+	0x214f04,
+	0x206643,
+	0x21f603,
+	0x228f84,
+	0x2109c3,
+	0x21f143,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x132d09,
+	0x6204,
+	0x206643,
+	0x23c2,
+	0x21f603,
+	0x3d6403,
+	0x2036c3,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0xc642,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x36b204,
+	0x2503c4,
+	0x2109c3,
+	0x21f143,
+	0x200f83,
+	0x8a42,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x15d3c3,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x325e03,
+	0x52383,
+	0xf743,
+	0x2109c3,
+	0x21f143,
+	0x2f7c6,
+	0x32e0ca,
+	0x34b2c9,
+	0x36408b,
+	0x3649ca,
+	0x36fb0a,
+	0x38028b,
+	0x394bca,
+	0x39b18a,
+	0x3a1a4a,
+	0x3a1ccb,
+	0x3c7d89,
+	0x3dfe4a,
+	0x3e02cb,
+	0x3ebacb,
+	0x3f274a,
+	0x2dc2,
+	0x206643,
+	0x21f603,
+	0x3d6403,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x2c4b,
+	0x12ae87,
+	0x6c9c8,
+	0x6b084,
+	0x1e8684,
+	0x9b108,
+	0xf2f86,
+	0x7206,
+	0x3bb07,
+	0x128c07,
+	0xf8589,
+	0x1b9688,
+	0x206643,
+	0x3e644,
+	0x272544,
+	0x20b082,
+	0x294744,
+	0x231c05,
+	0x2028c3,
+	0x214f04,
+	0x206643,
+	0x2392c4,
+	0x21f603,
+	0x2554c4,
+	0x2e4084,
+	0x2503c4,
+	0x23ddc3,
+	0x2109c3,
+	0x21f143,
+	0x29f085,
+	0x2330c3,
+	0x219683,
+	0x27b403,
+	0x21bc04,
+	0x3de844,
+	0x23c0c5,
+	0x1b9688,
+	0x3c3704,
+	0x3c1386,
+	0x3a24c4,
+	0x202202,
+	0x229147,
+	0x24c707,
+	0x251604,
+	0x2f3d05,
+	0x395305,
+	0x22f2c5,
+	0x2503c4,
+	0x268e48,
+	0x238646,
+	0x365588,
+	0x276445,
+	0x2dfa85,
+	0x273e04,
+	0x21f143,
+	0x30a904,
+	0x37f286,
+	0x2130c3,
+	0x21bc04,
+	0x275485,
+	0x24e884,
+	0x2adec4,
+	0x23d942,
+	0x257106,
+	0x3b5b46,
+	0x31a605,
+	0x2000c2,
+	0x250b03,
+	0xf3106,
+	0x3ce02202,
+	0x21ce04,
+	0x191384,
+	0x65685,
+	0x200382,
+	0x206543,
+	0x3d2070c2,
+	0x2109c3,
+	0x2003c2,
+	0x3070c6,
+	0x213dc3,
+	0x1e7005,
+	0x200f83,
+	0x1b9688,
+	0x14f8cc3,
+	0x1b9688,
+	0x205503,
+	0xf9d4c,
+	0x2000c2,
+	0x3de02202,
+	0x205503,
+	0x278cc3,
+	0x33c683,
+	0x20f444,
+	0x2109c3,
+	0x21f143,
+	0x1b9688,
+	0x126947,
+	0x5860a,
+	0x2000c2,
+	0x3e602202,
+	0x206643,
+	0x2109c3,
+	0x21f143,
+	0x682,
+	0x209a02,
+	0x224b42,
+	0x20f743,
+	0x303643,
+	0x2000c2,
+	0x14cb05,
+	0x1b9688,
+	0xf08c7,
+	0x202202,
+	0x21f603,
+	0x2554c4,
+	0x203b43,
+	0x205503,
+	0x2036c3,
+	0x206543,
+	0x2109c3,
+	0x20f4c3,
+	0x21f143,
+	0x213003,
+	0xcbd48,
+	0xf83,
+	0x145213,
+	0x148d14,
+	0x14cb05,
+	0xf08c7,
+	0x26e49,
+	0x11b646,
+	0x11090b,
+	0x34106,
+	0x61d47,
+	0x1dbac6,
+	0x649,
+	0x18540a,
+	0x97bcd,
+	0xdc10c,
+	0x11e34a,
+	0xa8ac8,
+	0x1cf805,
+	0x26e88,
+	0x15d46,
+	0x1d1b86,
+	0x54146,
+	0x204c02,
+	0x26c4,
+	0x170cc6,
+	0x14e160e,
+	0x1d5186,
+	0x7440c,
+	0x3fb72a4b,
+	0x14cb05,
+	0x14fb4b,
+	0x3fe8c007,
+	0x4028c00a,
+	0x407d1ac4,
+	0x50c9,
+	0x9548,
+	0x1bd207,
+	0x25791,
+	0x13064a,
+	0x206643,
+	0x40a8d788,
+	0xfe005,
+	0x1896c8,
+	0x1b7344,
+	0x4eb05,
+	0xaeb47,
+	0x1a9d0b,
+	0x40e1f109,
+	0x115c5,
+	0x1702c6,
+	0x163486,
+	0x9d28a,
+	0x10320c,
+	0x1c1303,
+	0x1e8684,
+	0x413ed484,
+	0x5c4c9,
+	0x100ec7,
+	0x588ca,
+	0x14e5a49,
+	0x605,
+	0x10f303,
+	0x41637047,
+	0x1f45,
+	0x156ca86,
+	0x140c406,
+	0x15ce8c,
+	0x10c348,
+	0x41930845,
+	0x41c413c3,
+	0x110fc4,
+	0x6948b,
+	0x121e0b,
+	0x4224f04c,
+	0x1426143,
+	0xcef48,
+	0xd254b,
+	0xaea09,
+	0xd9143,
+	0x124848,
+	0x1422886,
+	0x95607,
+	0x42761949,
+	0x30147,
+	0x43aeba48,
+	0xa19c4,
+	0x1178c7,
+	0xe040a,
+	0x43f65188,
+	0x11d3cd,
+	0x1c6e09,
+	0x1d7808,
+	0x15c43,
+	0x14493c9,
+	0x4ac44,
+	0x97c5,
+	0x3c583,
+	0x34106,
+	0x3042,
+	0x15c44,
+	0x2a385,
+	0x1aa884,
+	0x142db83,
+	0x1a6c7,
+	0x42a1a6c3,
+	0x42fcc386,
+	0x4323ab84,
+	0x436fddc7,
+	0xfbc44,
+	0x125f07,
+	0xfbc44,
+	0x125f07,
+	0xfbc44,
+	0xfbc44,
+	0x125f07,
+	0x1dee09,
+	0x41,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x2000c2,
+	0x202202,
+	0x205503,
+	0x203042,
+	0x2109c3,
+	0x21f143,
+	0x213dc3,
+	0x387fcf,
+	0x38838e,
+	0x1b9688,
+	0x206643,
+	0x49087,
+	0x21f603,
+	0x205503,
+	0x211e43,
+	0x2109c3,
+	0x21f143,
+	0x1d50c4,
+	0x1d4704,
+	0xa04,
+	0x220fc3,
+	0x3d5787,
+	0x204782,
+	0x279f49,
+	0x200b02,
+	0x25a88b,
+	0x2ed3ca,
+	0x3289c9,
+	0x200542,
+	0x3b7706,
+	0x25fd95,
+	0x25a9d5,
+	0x264ed3,
+	0x25af53,
+	0x216302,
+	0x228645,
+	0x3c340c,
+	0x2815cb,
+	0x259e85,
+	0x206182,
+	0x2f45c2,
+	0x2f45c6,
+	0x2028c2,
+	0x296186,
+	0x23e88d,
+	0x258d4c,
+	0x3c7504,
+	0x200882,
+	0x210342,
+	0x28c748,
+	0x200202,
+	0x33d3c6,
+	0x39d54f,
+	0x3d47d0,
+	0x2fd044,
+	0x25ff55,
+	0x265053,
+	0x214ec3,
+	0x35898a,
+	0x38b6c7,
+	0x392409,
+	0x313d87,
+	0x269782,
+	0x200282,
+	0x3caa06,
+	0x206202,
+	0x1b9688,
+	0x20b4c2,
+	0x20b782,
+	0x20b787,
+	0x3aeb47,
+	0x3aeb51,
+	0x21d0c5,
+	0x21d0ce,
+	0x21e8cf,
+	0x202fc2,
+	0x221007,
+	0x2211c8,
+	0x201002,
+	0x220302,
+	0x210506,
+	0x21050f,
+	0x2711d0,
+	0x22d3c2,
+	0x201782,
+	0x229288,
+	0x201783,
+	0x26d748,
+	0x23decd,
+	0x202f03,
+	0x3d03c8,
+	0x26220f,
+	0x2625ce,
+	0x214d8a,
+	0x2eebd1,
+	0x2ef050,
+	0x2deecd,
+	0x2df20c,
+	0x381dc7,
+	0x358b07,
+	0x3c2a49,
+	0x2170c2,
+	0x2011c2,
+	0x263b4c,
+	0x263e4b,
+	0x203402,
+	0x39ba06,
+	0x204102,
+	0x200482,
+	0x3547c2,
+	0x202202,
+	0x22ec04,
+	0x23bcc7,
+	0x22dd42,
+	0x243c87,
+	0x246f47,
+	0x242982,
+	0x211802,
+	0x248f45,
+	0x254302,
+	0x2b52ce,
+	0x37b2cd,
+	0x21f603,
+	0x2936ce,
+	0x2d49cd,
+	0x374243,
+	0x202482,
+	0x240dc4,
+	0x213242,
+	0x202442,
+	0x3aa7c5,
+	0x24c1c7,
+	0x24dc42,
+	0x20fd02,
+	0x253c47,
+	0x25c848,
+	0x2596c2,
+	0x286fc6,
+	0x2639cc,
+	0x263d0b,
+	0x208102,
+	0x26db4f,
+	0x26df10,
+	0x26e30f,
+	0x26e6d5,
+	0x26ec14,
+	0x26f10e,
+	0x26f48e,
+	0x26f80f,
+	0x26fbce,
+	0x26ff54,
+	0x270453,
+	0x27090d,
+	0x285809,
+	0x299443,
+	0x2030c2,
+	0x360605,
+	0x2045c6,
+	0x200382,
+	0x2f7c47,
+	0x205503,
+	0x200642,
+	0x233488,
+	0x2eee11,
+	0x2ef250,
+	0x206a42,
+	0x298707,
+	0x202b82,
+	0x259887,
+	0x206982,
+	0x33a609,
+	0x2f4587,
+	0x298bc8,
+	0x3cf606,
+	0x303543,
+	0x398805,
+	0x22a2c2,
+	0x2004c2,
+	0x3c5ec5,
+	0x3dbd85,
+	0x201282,
+	0x211f83,
+	0x2a1a47,
+	0x3d1e07,
+	0x201702,
+	0x3878c4,
+	0x207783,
+	0x3ee109,
+	0x207788,
+	0x206b42,
+	0x209582,
+	0x22bb07,
+	0x3b6b85,
+	0x258488,
+	0x228347,
+	0x225ac3,
+	0x370b46,
+	0x2ded4d,
+	0x2df0cc,
+	0x3898c6,
+	0x202f82,
+	0x202042,
+	0x200ec2,
+	0x26208f,
+	0x26248e,
+	0x395387,
+	0x201e42,
+	0x23d4c5,
+	0x23d4c6,
+	0x21cf02,
+	0x201502,
+	0x29a0c6,
+	0x245e43,
+	0x3c2346,
+	0x2e2c05,
+	0x2e2c0d,
+	0x2e3915,
+	0x2e4f0c,
+	0x2e528d,
+	0x2e55d2,
+	0x203c42,
+	0x27d202,
+	0xf9d4c,
+	0x201b82,
+	0x300486,
+	0x3cda46,
+	0x45295a04,
+	0x201f42,
+	0x204646,
+	0x203902,
+	0x25f385,
+	0x206282,
+	0x2b5409,
+	0x21634c,
+	0x21668b,
+	0x2003c2,
+	0x25df08,
+	0x205842,
+	0x206702,
+	0x281386,
+	0x28bb05,
+	0x38cf47,
+	0x33e845,
+	0x2746c5,
+	0x207202,
+	0x226f42,
+	0x2020c2,
+	0x2b0d07,
+	0x30718d,
+	0x30750c,
+	0x237447,
+	0x286f42,
+	0x201402,
+	0x3cac08,
+	0x201408,
+	0x2ec9c8,
+	0x3ba644,
+	0x3ef987,
+	0x304a03,
+	0x271c02,
+	0x20bc02,
+	0x307f09,
+	0x35f407,
+	0x202b02,
+	0x2819c5,
+	0x21a002,
+	0x21ec82,
+	0x30dd03,
+	0x30dd06,
+	0x30e242,
+	0x310e82,
+	0x200402,
+	0x204746,
+	0x240d07,
+	0x201182,
+	0x200902,
+	0x26d58f,
+	0x29350d,
+	0x296b0e,
+	0x2d484c,
+	0x208ac2,
+	0x202b42,
+	0x3cf445,
+	0x32c506,
+	0x225402,
+	0x203f42,
+	0x200682,
+	0x2282c4,
+	0x2dfa04,
+	0x35ccc6,
+	0x204842,
+	0x293fc7,
+	0x204843,
+	0x23b6c8,
+	0x23da88,
+	0x2478c7,
+	0x2611c6,
+	0x201a42,
+	0x204083,
+	0x204087,
+	0x282486,
+	0x2d9985,
+	0x283508,
+	0x203c82,
+	0x2f5fc7,
+	0x20e7c2,
+	0x2b26c2,
+	0x202e82,
+	0x21ea49,
+	0x20de02,
+	0x18b88,
+	0x2019c2,
+	0x25b383,
+	0x3501c7,
+	0x202a42,
+	0x2164cc,
+	0x2167cb,
+	0x389946,
+	0x312485,
+	0x45606b83,
+	0x201b42,
+	0x20c642,
+	0x2d0a06,
+	0x2274c3,
+	0x36af87,
+	0x26bac2,
+	0x2008c2,
+	0x25fc15,
+	0x25ab95,
+	0x264d93,
+	0x25b0d3,
+	0x284447,
+	0x2a7e51,
+	0x2c2290,
+	0x396092,
+	0x2c16d1,
+	0x2c4d48,
+	0x2c4d50,
+	0x2c810f,
+	0x2ed193,
+	0x3a8152,
+	0x2e2810,
+	0x2e71cf,
+	0x2e9fd2,
+	0x2eab51,
+	0x2ed913,
+	0x2ee252,
+	0x2f1b0f,
+	0x2f2c0e,
+	0x2f53d2,
+	0x3287d1,
+	0x3063cf,
+	0x30bb4e,
+	0x30c511,
+	0x30e5d0,
+	0x311a12,
+	0x3132d1,
+	0x330f10,
+	0x33db4f,
+	0x37eb11,
+	0x3e2250,
+	0x32a506,
+	0x3385c7,
+	0x20cf47,
+	0x204042,
+	0x290285,
+	0x319187,
+	0x224b42,
+	0x202d02,
+	0x294ac5,
+	0x223683,
+	0x3de2c6,
+	0x30734d,
+	0x30768c,
+	0x2046c2,
+	0x3c328b,
+	0x28148a,
+	0x283b8a,
+	0x230b09,
+	0x2cfa4b,
+	0x305ecd,
+	0x22848c,
+	0x31988a,
+	0x2464cc,
+	0x249fcb,
+	0x259ccc,
+	0x27f5ce,
+	0x284e8b,
+	0x2a45cc,
+	0x2cad83,
+	0x325e86,
+	0x365182,
+	0x221902,
+	0x25eb03,
+	0x201102,
+	0x22fd43,
+	0x3c26c6,
+	0x26e887,
+	0x2d69c6,
+	0x3a8cc8,
+	0x201108,
+	0x214786,
+	0x20c302,
+	0x319fcd,
+	0x31a30c,
+	0x321fc7,
+	0x31e187,
+	0x211202,
+	0x219882,
+	0x204002,
+	0x28b082,
+	0x33d2d6,
+	0x342515,
+	0x344cd6,
+	0x34a393,
+	0x34aa52,
+	0x35add3,
+	0x35b452,
+	0x3b480f,
+	0x3c8b58,
+	0x3ca497,
+	0x3cde99,
+	0x3cfb18,
+	0x3d09d8,
+	0x3d1557,
+	0x3d2c17,
+	0x3d6d16,
+	0x3e2e93,
+	0x3e3595,
+	0x3e3fd2,
+	0x3e4453,
+	0x17082,
+	0x45a2c284,
+	0x45fc7448,
+	0x2c45,
+	0x202202,
+	0x2109c3,
+	0x232c2,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x213dc3,
+	0x2000c2,
+	0x213c82,
+	0x46e9f385,
+	0x4724bf85,
+	0x47669d46,
+	0x1b9688,
+	0x47ac8685,
+	0x202202,
+	0x201482,
+	0x47f69f05,
+	0x4828e105,
+	0x4868ef07,
+	0x48a760c9,
+	0x48fb60c4,
+	0x200382,
+	0x200642,
+	0x4925b745,
+	0x4969ea09,
+	0x49a11008,
+	0x49ec0a45,
+	0x4a355507,
+	0x4a613388,
+	0x4ab1db05,
+	0x4aea6d46,
+	0x4b24c849,
+	0x4b79ecc8,
+	0x4bad8288,
+	0x4bea778a,
+	0x4c3cc904,
+	0x4c6b5cc5,
+	0x4cab3ac8,
+	0x4ce4e685,
+	0x217702,
+	0x4d201e43,
+	0x4d6b41c6,
+	0x4da48908,
+	0x4dfc98c6,
+	0x4e214888,
+	0x4e7d3446,
+	0x4ea52d84,
+	0x4ee018c2,
+	0x4f6e9907,
+	0x4fabbb04,
+	0x4fe88f07,
+	0x503ea507,
+	0x2003c2,
+	0x506abc05,
+	0x50a57504,
+	0x50f70607,
+	0x5123ae07,
+	0x51692306,
+	0x51a8eb05,
+	0x51ea5f87,
+	0x522c8d48,
+	0x5260c647,
+	0x52abdf89,
+	0x52ee3e85,
+	0x53314f87,
+	0x5369e706,
+	0x1eccb,
+	0x53bdcc08,
+	0x231e4d,
+	0x269809,
+	0x28308b,
+	0x29c10b,
+	0x2b7acb,
+	0x3e550b,
+	0x32c70b,
+	0x32c9cb,
+	0x32d349,
+	0x32e34b,
+	0x32e60b,
+	0x32eb8b,
+	0x32f84a,
+	0x32fd8a,
+	0x33038c,
+	0x33434b,
+	0x334d8a,
+	0x3485ca,
+	0x350e8e,
+	0x351f8e,
+	0x35230a,
+	0x354d8a,
+	0x355b0b,
+	0x355dcb,
+	0x3568cb,
+	0x37680b,
+	0x376e0a,
+	0x377acb,
+	0x377d8a,
+	0x37800a,
+	0x37828a,
+	0x395c8b,
+	0x39ca0b,
+	0x39f5ce,
+	0x39f94b,
+	0x3a69cb,
+	0x3a7ccb,
+	0x3abc8a,
+	0x3abf09,
+	0x3ac14a,
+	0x3ada4a,
+	0x3c854b,
+	0x3e058b,
+	0x3e140a,
+	0x3e28cb,
+	0x3e898b,
+	0x3f218b,
+	0x53e90e08,
+	0x54297009,
+	0x546ae889,
+	0x54af64c8,
+	0x35ca45,
+	0x20ba83,
+	0x256884,
+	0x382285,
+	0x3b5e06,
+	0x3537c5,
+	0x295fc4,
+	0x2f7b48,
+	0x326d45,
+	0x2a0a44,
+	0x3cb1c7,
+	0x2ada4a,
+	0x2ffa8a,
+	0x395487,
+	0x241d07,
+	0x2f2007,
+	0x25b8c7,
+	0x3a2fc5,
+	0x275b46,
+	0x2d6e47,
+	0x24cfc4,
+	0x2cd406,
+	0x2fb206,
+	0x3afbc5,
+	0x381a84,
+	0x2ab846,
+	0x2acc87,
+	0x2269c6,
+	0x30ef07,
+	0x2a0303,
+	0x3c4ac6,
+	0x2294c5,
+	0x28f007,
+	0x27990a,
+	0x233584,
+	0x20ec08,
+	0x2bd889,
+	0x2c5787,
+	0x334c06,
+	0x2e9a48,
+	0x3ea889,
+	0x23a704,
+	0x280544,
+	0x213785,
+	0x2d1508,
+	0x2e1247,
+	0x311049,
+	0x2455c8,
+	0x3218c6,
+	0x245946,
+	0x2a84c8,
+	0x375946,
+	0x24bf85,
+	0x2923c6,
+	0x289348,
+	0x25cd86,
+	0x262e0b,
+	0x29b606,
+	0x2aa20d,
+	0x20ab45,
+	0x2bb9c6,
+	0x20e0c5,
+	0x235249,
+	0x371cc7,
+	0x210e08,
+	0x2be906,
+	0x2a9449,
+	0x356e06,
+	0x279885,
+	0x213686,
+	0x2f3f06,
+	0x2e62c9,
+	0x2cde86,
+	0x2c7d47,
+	0x2b1705,
+	0x211d03,
+	0x262f85,
+	0x3c2447,
+	0x375406,
+	0x20aa49,
+	0x269d46,
+	0x2805c6,
+	0x244289,
+	0x291dc9,
+	0x2b1c87,
+	0x366448,
+	0x29d849,
+	0x28ff08,
+	0x2de7c6,
+	0x2ef645,
+	0x287e0a,
+	0x280646,
+	0x3542c6,
+	0x2e9845,
+	0x25bd48,
+	0x351507,
+	0x23118a,
+	0x255cc6,
+	0x24a205,
+	0x311746,
+	0x29fa47,
+	0x334ac7,
+	0x31fb85,
+	0x279a45,
+	0x271046,
+	0x275786,
+	0x27d446,
+	0x2390c4,
+	0x291209,
+	0x2984c6,
+	0x3e58ca,
+	0x21ac08,
+	0x314c88,
+	0x2ffa8a,
+	0x248ac5,
+	0x2acbc5,
+	0x3cc688,
+	0x384008,
+	0x241147,
+	0x39b706,
+	0x340488,
+	0x3f3247,
+	0x28f148,
+	0x2cd306,
+	0x292bc8,
+	0x2a53c6,
+	0x2765c7,
+	0x35f646,
+	0x2ab846,
+	0x22780a,
+	0x22ec86,
+	0x2ef649,
+	0x2fef06,
+	0x20b8ca,
+	0x252d89,
+	0x307b46,
+	0x2ce7c4,
+	0x3606cd,
+	0x28df47,
+	0x3c5386,
+	0x2d8145,
+	0x356e85,
+	0x33ca86,
+	0x2c6a49,
+	0x2da647,
+	0x28a106,
+	0x37ce46,
+	0x278789,
+	0x24bec4,
+	0x307c44,
+	0x3bdc48,
+	0x35fac6,
+	0x2b1188,
+	0x2f6dc8,
+	0x261787,
+	0x2fd349,
+	0x3ce787,
+	0x2c854a,
+	0x3089cf,
+	0x3a4d8a,
+	0x3cf245,
+	0x289585,
+	0x20cb45,
+	0x2fcf87,
+	0x28ae83,
+	0x366648,
+	0x273146,
+	0x273249,
+	0x358446,
+	0x3667c7,
+	0x2a9209,
+	0x210d08,
+	0x235407,
+	0x32b3c3,
+	0x35cac5,
+	0x29f585,
+	0x238f0b,
+	0x24e744,
+	0x315904,
+	0x2875c6,
+	0x32b587,
+	0x39834a,
+	0x280ec7,
+	0x3467c7,
+	0x28e105,
+	0x3d7285,
+	0x28f689,
+	0x2ab846,
+	0x280d4d,
+	0x3ca045,
+	0x2cb083,
+	0x21da03,
+	0x22ff05,
+	0x340d85,
+	0x2e9a48,
+	0x28a8c7,
+	0x2405c6,
+	0x2ae506,
+	0x22bcc5,
+	0x236347,
+	0x36a2c7,
+	0x238507,
+	0x2b5d4a,
+	0x3c4b88,
+	0x2390c4,
+	0x2907c7,
+	0x28d2c7,
+	0x362686,
+	0x2a4a47,
+	0x31ad08,
+	0x3855c8,
+	0x27ed46,
+	0x241f48,
+	0x2cdf04,
+	0x2d6e46,
+	0x267486,
+	0x2fb406,
+	0x335986,
+	0x211cc4,
+	0x25b986,
+	0x2d6b46,
+	0x2a7c86,
+	0x227806,
+	0x3cbf86,
+	0x2fc686,
+	0x2404c8,
+	0x2c92c8,
+	0x2ec248,
+	0x3539c8,
+	0x3cc606,
+	0x2034c5,
+	0x294106,
+	0x2c0ac5,
+	0x39a847,
+	0x245685,
+	0x2114c3,
+	0x3202c5,
+	0x3ec504,
+	0x3cc0c5,
+	0x2200c3,
+	0x3525c7,
+	0x2dd908,
+	0x30efc6,
+	0x2bf20d,
+	0x289546,
+	0x2a7205,
+	0x21ea43,
+	0x2d2c89,
+	0x24c046,
+	0x2a6546,
+	0x2afb84,
+	0x3a4d07,
+	0x347b06,
+	0x2da905,
+	0x261643,
+	0x212584,
+	0x28d486,
+	0x3aae04,
+	0x3bd448,
+	0x208249,
+	0x27f209,
+	0x2b0f8a,
+	0x2b2e8d,
+	0x233907,
+	0x394fc6,
+	0x226f84,
+	0x2760c9,
+	0x295048,
+	0x296e86,
+	0x23cb06,
+	0x2a4a47,
+	0x370046,
+	0x21d946,
+	0x2fe906,
+	0x3ea58a,
+	0x213388,
+	0x22a685,
+	0x2fe709,
+	0x3d92ca,
+	0x318ec8,
+	0x2ac448,
+	0x2a64c8,
+	0x3721cc,
+	0x32cc45,
+	0x2ae788,
+	0x2ce3c6,
+	0x36f986,
+	0x2dec07,
+	0x280dc5,
+	0x25ccc5,
+	0x27f0c9,
+	0x2053c7,
+	0x273205,
+	0x21fd07,
+	0x21da03,
+	0x2e1c05,
+	0x21b548,
+	0x263307,
+	0x2ac309,
+	0x2cf105,
+	0x2fb984,
+	0x329e48,
+	0x3d8147,
+	0x2355c8,
+	0x20e208,
+	0x397bc5,
+	0x273046,
+	0x213a46,
+	0x3af7c9,
+	0x267587,
+	0x2c0f06,
+	0x3bf107,
+	0x203b83,
+	0x3b60c4,
+	0x3cd5c5,
+	0x236484,
+	0x24dc84,
+	0x24bc07,
+	0x278647,
+	0x28a2c4,
+	0x2ac150,
+	0x346947,
+	0x3d7285,
+	0x3dc28c,
+	0x20dfc4,
+	0x2bedc8,
+	0x2764c9,
+	0x2c4ac6,
+	0x324988,
+	0x256584,
+	0x2878c8,
+	0x2e0c46,
+	0x227688,
+	0x2ad246,
+	0x2e93cb,
+	0x3b9a85,
+	0x3cd448,
+	0x208684,
+	0x20868a,
+	0x2ac309,
+	0x290f86,
+	0x3011c8,
+	0x295c05,
+	0x3c27c4,
+	0x2becc6,
+	0x2383c8,
+	0x290e08,
+	0x339746,
+	0x34d704,
+	0x287d86,
+	0x3ce807,
+	0x288e07,
+	0x2a4a4f,
+	0x34ce47,
+	0x3991c7,
+	0x36f845,
+	0x3da505,
+	0x2b1949,
+	0x2e8bc6,
+	0x28ec45,
+	0x2920c7,
+	0x2e6dc8,
+	0x238d45,
+	0x35f646,
+	0x21aa48,
+	0x3c98ca,
+	0x24d6c8,
+	0x299e47,
+	0x308e06,
+	0x2fe6c6,
+	0x2003c3,
+	0x213b83,
+	0x3d9489,
+	0x29d6c9,
+	0x2bde86,
+	0x2cf105,
+	0x23d0c8,
+	0x3011c8,
+	0x2ab488,
+	0x2fe98b,
+	0x2bf447,
+	0x325149,
+	0x2a4cc8,
+	0x2738c4,
+	0x205bc8,
+	0x29c409,
+	0x2c1205,
+	0x20be07,
+	0x3b6145,
+	0x290d08,
+	0x29f20b,
+	0x2a5cd0,
+	0x2bb605,
+	0x21590c,
+	0x240785,
+	0x28e183,
+	0x2d0606,
+	0x2d6144,
+	0x27fd86,
+	0x2acc87,
+	0x20df44,
+	0x2d27c8,
+	0x36650d,
+	0x39b545,
+	0x233944,
+	0x360444,
+	0x398f09,
+	0x2a9f48,
+	0x337047,
+	0x2e0cc8,
+	0x2912c8,
+	0x28a405,
+	0x3d97c7,
+	0x28a387,
+	0x3be0c7,
+	0x279a49,
+	0x373a09,
+	0x24acc6,
+	0x2df406,
+	0x292186,
+	0x32dac5,
+	0x3c4904,
+	0x3d0f86,
+	0x3d3186,
+	0x28a448,
+	0x29f70b,
+	0x23a547,
+	0x226f84,
+	0x347a46,
+	0x3ee387,
+	0x2fc285,
+	0x258805,
+	0x2266c4,
+	0x373986,
+	0x3d1008,
+	0x2760c9,
+	0x251846,
+	0x294e48,
+	0x2da9c6,
+	0x367508,
+	0x37130c,
+	0x28a2c6,
+	0x2a6ecd,
+	0x2a734b,
+	0x2c7e05,
+	0x36a407,
+	0x2cdf86,
+	0x334988,
+	0x24ad49,
+	0x2bf748,
+	0x3d7285,
+	0x2a5647,
+	0x290008,
+	0x25d109,
+	0x2690c6,
+	0x26694a,
+	0x334708,
+	0x2bf58b,
+	0x2dad8c,
+	0x2879c8,
+	0x28b686,
+	0x3dc788,
+	0x3c9547,
+	0x3b6889,
+	0x29e90d,
+	0x2ab746,
+	0x2c9448,
+	0x2c9189,
+	0x2d3e48,
+	0x292cc8,
+	0x2d780c,
+	0x2d8707,
+	0x2d9507,
+	0x279885,
+	0x2d1187,
+	0x2e6c88,
+	0x2bed46,
+	0x2516cc,
+	0x30b848,
+	0x2e7b88,
+	0x353c86,
+	0x3dd907,
+	0x24aec4,
+	0x3539c8,
+	0x2939cc,
+	0x297f0c,
+	0x3cf2c5,
+	0x3afc47,
+	0x34d686,
+	0x3dd886,
+	0x3a1148,
+	0x221444,
+	0x2269cb,
+	0x258fcb,
+	0x308e06,
+	0x366387,
+	0x34d885,
+	0x280485,
+	0x226b06,
+	0x295bc5,
+	0x24e705,
+	0x223247,
+	0x2200c9,
+	0x203284,
+	0x240c45,
+	0x312105,
+	0x3aab88,
+	0x34f385,
+	0x2d5e09,
+	0x2bfe87,
+	0x2bfe8b,
+	0x307886,
+	0x240209,
+	0x3819c8,
+	0x28b885,
+	0x3be1c8,
+	0x373a48,
+	0x28bec7,
+	0x22b247,
+	0x24bc89,
+	0x2275c7,
+	0x29b3c9,
+	0x2bcc4c,
+	0x2bde88,
+	0x2dabc9,
+	0x2ddec7,
+	0x291389,
+	0x221b47,
+	0x2dae88,
+	0x3c9485,
+	0x2d6dc6,
+	0x2d8188,
+	0x246748,
+	0x3d9189,
+	0x24e747,
+	0x3ade05,
+	0x3d8c09,
+	0x387046,
+	0x29e704,
+	0x32a946,
+	0x248788,
+	0x253a87,
+	0x29f908,
+	0x242009,
+	0x2b64c7,
+	0x2ab5c6,
+	0x205f04,
+	0x320349,
+	0x3d9648,
+	0x353b47,
+	0x37b106,
+	0x29f646,
+	0x354244,
+	0x2d17c6,
+	0x23be43,
+	0x3d5bc9,
+	0x3b9a46,
+	0x275dc5,
+	0x2ae506,
+	0x235705,
+	0x290488,
+	0x3b6747,
+	0x240ec6,
+	0x369f46,
+	0x314c88,
+	0x2b1ac7,
+	0x2ab785,
+	0x2abf48,
+	0x3e0988,
+	0x334708,
+	0x240645,
+	0x2d6e46,
+	0x27efc9,
+	0x3af644,
+	0x31260b,
+	0x21d64b,
+	0x22a589,
+	0x21da03,
+	0x264ac5,
+	0x320a46,
+	0x244fc8,
+	0x2b9344,
+	0x30efc6,
+	0x2b5e89,
+	0x37cbc5,
+	0x223186,
+	0x3d8146,
+	0x20cc04,
+	0x2fae0a,
+	0x275d08,
+	0x246746,
+	0x379305,
+	0x2055c7,
+	0x340fc7,
+	0x273044,
+	0x21d887,
+	0x245644,
+	0x245646,
+	0x206503,
+	0x279a45,
+	0x2c3905,
+	0x214b08,
+	0x290985,
+	0x28a009,
+	0x2b3fc7,
+	0x35380b,
+	0x2b3fcc,
+	0x2b45ca,
+	0x355507,
+	0x210cc3,
+	0x288808,
+	0x307c05,
+	0x238dc5,
+	0x35cb84,
+	0x2dad86,
+	0x2764c6,
+	0x2d1807,
+	0x26158b,
+	0x211cc4,
+	0x210f84,
+	0x2e0ec4,
+	0x2e5fc6,
+	0x20df44,
+	0x2d1608,
+	0x35c985,
+	0x28ac85,
+	0x2ab3c7,
+	0x36a509,
+	0x340d85,
+	0x33ca8a,
+	0x2b1609,
+	0x2a88ca,
+	0x3ea6c9,
+	0x318884,
+	0x37cf05,
+	0x370148,
+	0x3706cb,
+	0x213785,
+	0x2d9b46,
+	0x247004,
+	0x28a546,
+	0x2b6349,
+	0x3ee487,
+	0x269f08,
+	0x2b3206,
+	0x3ce787,
+	0x290e08,
+	0x37fd46,
+	0x205f84,
+	0x267ec7,
+	0x38a345,
+	0x399b87,
+	0x256484,
+	0x2cdf06,
+	0x341108,
+	0x2a7508,
+	0x302d47,
+	0x34d3c8,
+	0x2a5485,
+	0x21d784,
+	0x2ff988,
+	0x316684,
+	0x20cac5,
+	0x3a0f44,
+	0x3f3347,
+	0x298587,
+	0x2914c8,
+	0x235746,
+	0x290905,
+	0x289e08,
+	0x24d8c8,
+	0x2b0ec9,
+	0x21d946,
+	0x231208,
+	0x20850a,
+	0x2fc308,
+	0x31db05,
+	0x256906,
+	0x2b14c8,
+	0x2a570a,
+	0x35ec47,
+	0x295485,
+	0x2a1d88,
+	0x2b8e44,
+	0x25bdc6,
+	0x2d9f48,
+	0x3cbf86,
+	0x3c38c8,
+	0x2a6747,
+	0x3cb0c6,
+	0x2ce7c4,
+	0x360e47,
+	0x2ca244,
+	0x2b6307,
+	0x353e8d,
+	0x22a605,
+	0x2c684b,
+	0x298186,
+	0x25e008,
+	0x2d2784,
+	0x2319c6,
+	0x28d486,
+	0x3dcac7,
+	0x2a6b8d,
+	0x30d487,
+	0x2cafc8,
+	0x3adec5,
+	0x302fc8,
+	0x2e11c6,
+	0x2a5508,
+	0x230746,
+	0x3dc007,
+	0x3557c9,
+	0x35e947,
+	0x297148,
+	0x2547c5,
+	0x22bd48,
+	0x22af85,
+	0x35f585,
+	0x373385,
+	0x2136c3,
+	0x21d584,
+	0x2a1f85,
+	0x24c849,
+	0x37b006,
+	0x31ae08,
+	0x3d83c5,
+	0x2cc607,
+	0x371fca,
+	0x2230c9,
+	0x2f3e0a,
+	0x2ec2c8,
+	0x21fb4c,
+	0x29214d,
+	0x3e7703,
+	0x3c37c8,
+	0x212545,
+	0x3c9686,
+	0x210b86,
+	0x360385,
+	0x3bf209,
+	0x2ffd45,
+	0x289e08,
+	0x266186,
+	0x374506,
+	0x2b23c9,
+	0x268887,
+	0x29f4c6,
+	0x371f48,
+	0x2fb308,
+	0x2f66c7,
+	0x2e650e,
+	0x2e1405,
+	0x25d005,
+	0x3cbe88,
+	0x36ad87,
+	0x2084c2,
+	0x2d75c4,
+	0x27fc8a,
+	0x353c08,
+	0x373b86,
+	0x2a9348,
+	0x213a46,
+	0x3da388,
+	0x2c0f08,
+	0x35f544,
+	0x2cca05,
+	0x7a24c4,
+	0x7a24c4,
+	0x7a24c4,
+	0x2149c3,
+	0x2030c6,
+	0x28a2c6,
+	0x2ad64c,
+	0x2085c3,
+	0x256486,
+	0x213604,
+	0x24bfc8,
+	0x2b5cc5,
+	0x27fd86,
+	0x2b3bc8,
+	0x2ed646,
+	0x240e46,
+	0x3d7f48,
+	0x3cd647,
+	0x227389,
+	0x31024a,
+	0x20c684,
+	0x245685,
+	0x311005,
+	0x275ec6,
+	0x233946,
+	0x36a946,
+	0x386dc6,
+	0x2274c4,
+	0x2274cb,
+	0x245444,
+	0x205645,
+	0x2c0445,
+	0x261846,
+	0x20d408,
+	0x292007,
+	0x3d5f84,
+	0x26c2c3,
+	0x2b8945,
+	0x32a807,
+	0x291f0b,
+	0x214a07,
+	0x2b3ac8,
+	0x2d1947,
+	0x291086,
+	0x269ac8,
+	0x2d030b,
+	0x3821c6,
+	0x208c89,
+	0x2d0485,
+	0x32b3c3,
+	0x223186,
+	0x2a6648,
+	0x205fc3,
+	0x2ce043,
+	0x290e06,
+	0x213a46,
+	0x37deca,
+	0x28b6c5,
+	0x28d2cb,
+	0x2ae44b,
+	0x285503,
+	0x212303,
+	0x2c84c4,
+	0x371e07,
+	0x2879c4,
+	0x24bfc4,
+	0x2ce244,
+	0x2fc608,
+	0x379248,
+	0x39e5c9,
+	0x2e3f08,
+	0x3c5607,
+	0x227806,
+	0x31aa4f,
+	0x2e1546,
+	0x2ebc44,
+	0x37908a,
+	0x32a707,
+	0x2ca346,
+	0x29e749,
+	0x39e545,
+	0x275845,
+	0x39e686,
+	0x22be83,
+	0x2b8e89,
+	0x213506,
+	0x241dc9,
+	0x398346,
+	0x279a45,
+	0x3cf6c5,
+	0x202b83,
+	0x213948,
+	0x337207,
+	0x273144,
+	0x24be48,
+	0x23d244,
+	0x316586,
+	0x2d0606,
+	0x242706,
+	0x3cd309,
+	0x238d45,
+	0x2ab846,
+	0x259709,
+	0x2e0686,
+	0x2fc686,
+	0x3a99c6,
+	0x223005,
+	0x3a0f46,
+	0x3dc004,
+	0x3c9485,
+	0x246744,
+	0x2cb886,
+	0x3ca004,
+	0x205643,
+	0x295105,
+	0x236ec8,
+	0x30f687,
+	0x2b93c9,
+	0x295388,
+	0x2a8291,
+	0x3d81ca,
+	0x308d47,
+	0x2a6886,
+	0x213604,
+	0x2d8288,
+	0x365b08,
+	0x2a844a,
+	0x2d5bcd,
+	0x213686,
+	0x3d8046,
+	0x360f06,
+	0x31fa07,
+	0x2cb085,
+	0x301a07,
+	0x24bf05,
+	0x2bffc4,
+	0x2ec0c6,
+	0x23cf87,
+	0x2b8b8d,
+	0x2b1407,
+	0x2f7a48,
+	0x28a109,
+	0x221d46,
+	0x269045,
+	0x238cc4,
+	0x248886,
+	0x2fd246,
+	0x353d86,
+	0x2a9bc8,
+	0x2162c3,
+	0x22b183,
+	0x3329c5,
+	0x290a46,
+	0x2c0ec5,
+	0x2b3408,
+	0x2ace4a,
+	0x34cf84,
+	0x24bfc8,
+	0x2a64c8,
+	0x2bc587,
+	0x22b0c9,
+	0x2d2fc8,
+	0x276147,
+	0x2d6cc6,
+	0x3cbf8a,
+	0x248908,
+	0x329d09,
+	0x2aa008,
+	0x2185c9,
+	0x3857c7,
+	0x3add45,
+	0x2feb86,
+	0x2bebc8,
+	0x224488,
+	0x2ac5c8,
+	0x308f08,
+	0x205645,
+	0x229f04,
+	0x234888,
+	0x246d84,
+	0x3ea4c4,
+	0x279a45,
+	0x2a0a87,
+	0x36a2c9,
+	0x3dc8c7,
+	0x208545,
+	0x2877c6,
+	0x378b06,
+	0x208804,
+	0x2b2d46,
+	0x28d704,
+	0x28d006,
+	0x36a086,
+	0x20b046,
+	0x3d7285,
+	0x2b32c7,
+	0x210cc3,
+	0x32c109,
+	0x314a88,
+	0x24be44,
+	0x275fcd,
+	0x2a7608,
+	0x2fa688,
+	0x329c86,
+	0x3558c9,
+	0x2230c9,
+	0x32bb85,
+	0x2acf4a,
+	0x2b07ca,
+	0x37d1cc,
+	0x37d346,
+	0x288406,
+	0x2e1b46,
+	0x389a49,
+	0x3c98c6,
+	0x2b1b06,
+	0x2ffe06,
+	0x3539c8,
+	0x24d6c6,
+	0x2eb24b,
+	0x2a0c05,
+	0x28ac85,
+	0x288f05,
+	0x3bd9c6,
+	0x21d7c3,
+	0x242686,
+	0x2b1387,
+	0x2d8145,
+	0x3b9805,
+	0x356e85,
+	0x2c6c06,
+	0x2b6104,
+	0x31de86,
+	0x2a3a89,
+	0x3bd84c,
+	0x2bfd08,
+	0x238344,
+	0x39ebc6,
+	0x298286,
+	0x2a6648,
+	0x3011c8,
+	0x3bd749,
+	0x2055c7,
+	0x35f809,
+	0x281a86,
+	0x22d4c4,
+	0x35d904,
+	0x290744,
+	0x290e08,
+	0x36a10a,
+	0x340d06,
+	0x36f707,
+	0x399e07,
+	0x240305,
+	0x2b6c44,
+	0x29c3c6,
+	0x2cb0c6,
+	0x221483,
+	0x3148c7,
+	0x20e108,
+	0x2b618a,
+	0x301348,
+	0x214888,
+	0x3ca045,
+	0x22d285,
+	0x23a645,
+	0x2406c6,
+	0x245bc6,
+	0x214c45,
+	0x3d5e09,
+	0x2b6a4c,
+	0x360987,
+	0x2a84c8,
+	0x29fbc5,
+	0x7a24c4,
+	0x227d44,
+	0x263444,
+	0x20fb46,
+	0x2af34e,
+	0x2758c7,
+	0x31fc05,
+	0x3af5cc,
+	0x2bc447,
+	0x23cf07,
+	0x23fc89,
+	0x20ecc9,
+	0x295485,
+	0x314a88,
+	0x27efc9,
+	0x3345c5,
+	0x2d8088,
+	0x2c8f46,
+	0x2ffc06,
+	0x252d84,
+	0x325308,
+	0x24b983,
+	0x202cc4,
+	0x2b89c5,
+	0x397747,
+	0x22b5c5,
+	0x2083c9,
+	0x29c74d,
+	0x2aa806,
+	0x3f2e04,
+	0x39b688,
+	0x21ff0a,
+	0x205887,
+	0x257385,
+	0x202d03,
+	0x2ae60e,
+	0x213a4c,
+	0x318fc7,
+	0x2af507,
+	0x4f39db87,
+	0x2a446,
+	0x1ecc4,
+	0x20b903,
+	0x3c9905,
+	0x263445,
+	0x2a9708,
+	0x2a6309,
+	0x238246,
+	0x2879c4,
+	0x308c86,
+	0x2445cb,
+	0x36d18c,
+	0x255a87,
+	0x2eb6c5,
+	0x3e0888,
+	0x2f6485,
+	0x379087,
+	0x2e9907,
+	0x24b985,
+	0x21d7c3,
+	0x32bc44,
+	0x27d785,
+	0x203185,
+	0x203186,
+	0x2a3348,
+	0x23cf87,
+	0x210e86,
+	0x354146,
+	0x3732c6,
+	0x2c95c9,
+	0x3d98c7,
+	0x25cc06,
+	0x36d306,
+	0x3cc806,
+	0x2bbac5,
+	0x218146,
+	0x3ae705,
+	0x34f408,
+	0x2a034b,
+	0x29bf46,
+	0x399e44,
+	0x2fce09,
+	0x2b3fc4,
+	0x2c8ec8,
+	0x24a2c7,
+	0x292bc4,
+	0x2d20c8,
+	0x2d8f04,
+	0x2bbb04,
+	0x283685,
+	0x39b586,
+	0x2fc547,
+	0x204803,
+	0x2ab685,
+	0x324c04,
+	0x25d046,
+	0x2b60c8,
+	0x34d2c5,
+	0x2a0009,
+	0x355505,
+	0x256488,
+	0x235107,
+	0x3b9b48,
+	0x2d1347,
+	0x399289,
+	0x25b806,
+	0x3ef5c6,
+	0x29d984,
+	0x312545,
+	0x366d0c,
+	0x288f07,
+	0x289447,
+	0x233588,
+	0x2aa806,
+	0x2b12c4,
+	0x338704,
+	0x24bb09,
+	0x2e1c46,
+	0x28f707,
+	0x3beb84,
+	0x2cd906,
+	0x3d7a85,
+	0x2e9787,
+	0x2eb1c6,
+	0x266809,
+	0x2e8dc7,
+	0x2a4a47,
+	0x2b2246,
+	0x2cd845,
+	0x28eac8,
+	0x213388,
+	0x375c46,
+	0x34d305,
+	0x38c1c6,
+	0x206003,
+	0x2a9589,
+	0x36a6ce,
+	0x2d1008,
+	0x23d348,
+	0x375a4b,
+	0x2a0246,
+	0x399d04,
+	0x240e44,
+	0x36a7ca,
+	0x215807,
+	0x256845,
+	0x208c89,
+	0x2d6c05,
+	0x3ea507,
+	0x236544,
+	0x29a507,
+	0x2f6cc8,
+	0x2c5846,
+	0x2ce089,
+	0x2d30ca,
+	0x215786,
+	0x2a7146,
+	0x2c03c5,
+	0x39ff05,
+	0x3af087,
+	0x24b008,
+	0x3d79c8,
+	0x35f546,
+	0x3cf745,
+	0x2336ce,
+	0x2390c4,
+	0x2a9685,
+	0x287149,
+	0x2e89c8,
+	0x299d86,
+	0x2aba4c,
+	0x2aca50,
+	0x2aef8f,
+	0x2b1848,
+	0x355507,
+	0x3d7285,
+	0x2a1f85,
+	0x2fc3c9,
+	0x2a1f89,
+	0x287e86,
+	0x213807,
+	0x3a1045,
+	0x241149,
+	0x362706,
+	0x3c970d,
+	0x290609,
+	0x24bfc4,
+	0x2d0908,
+	0x234949,
+	0x340ec6,
+	0x288a05,
+	0x3ef5c6,
+	0x269dc9,
+	0x3bea08,
+	0x2034c5,
+	0x208604,
+	0x2abc0b,
+	0x340d85,
+	0x245046,
+	0x256786,
+	0x3a6646,
+	0x24094b,
+	0x2a0109,
+	0x221c85,
+	0x39a747,
+	0x3d8146,
+	0x291846,
+	0x2631c8,
+	0x20cc09,
+	0x2f780c,
+	0x32a608,
+	0x3239c6,
+	0x339743,
+	0x22f586,
+	0x307b85,
+	0x28de08,
+	0x3cf146,
+	0x2354c8,
+	0x280f45,
+	0x235805,
+	0x315f48,
+	0x3c2f47,
+	0x210ac7,
+	0x2d1807,
+	0x324988,
+	0x355648,
+	0x2ca706,
+	0x2cb6c7,
+	0x3b5f87,
+	0x39900a,
+	0x245f03,
+	0x3bd9c6,
+	0x233645,
+	0x257504,
+	0x28a109,
+	0x399204,
+	0x2c5844,
+	0x2ad2c4,
+	0x2af50b,
+	0x337147,
+	0x233905,
+	0x2a5188,
+	0x2877c6,
+	0x2877c8,
+	0x28b606,
+	0x29a905,
+	0x29ae45,
+	0x29d106,
+	0x272ec8,
+	0x29e688,
+	0x28a2c6,
+	0x2a4fcf,
+	0x2a9050,
+	0x20ab45,
+	0x210cc3,
+	0x2583c5,
+	0x325088,
+	0x2a1e89,
+	0x334708,
+	0x213608,
+	0x25ee48,
+	0x337207,
+	0x287489,
+	0x2356c8,
+	0x29dd44,
+	0x2ad148,
+	0x3aac49,
+	0x2cbc07,
+	0x2d32c4,
+	0x3dc988,
+	0x2b308a,
+	0x316d06,
+	0x213686,
+	0x21d809,
+	0x2acc87,
+	0x2e6b08,
+	0x2365c8,
+	0x294748,
+	0x284585,
+	0x3cbac5,
+	0x28ac85,
+	0x263405,
+	0x3baa87,
+	0x21d7c5,
+	0x2d8145,
+	0x22ed86,
+	0x334647,
+	0x370607,
+	0x2b3386,
+	0x2ec805,
+	0x245046,
+	0x2888c5,
+	0x2f7588,
+	0x383f84,
+	0x2e0706,
+	0x3925c4,
+	0x3c27c8,
+	0x21900a,
+	0x28a8cc,
+	0x2adc05,
+	0x31fac6,
+	0x2f79c6,
+	0x3926c6,
+	0x323a44,
+	0x3eda05,
+	0x28aec7,
+	0x2acd09,
+	0x2e63c7,
+	0x7a24c4,
+	0x7a24c4,
+	0x336fc5,
+	0x2ea844,
+	0x2ab20a,
+	0x287646,
+	0x315ec4,
+	0x3afbc5,
+	0x39cc85,
+	0x2cafc4,
+	0x2920c7,
+	0x3d8d87,
+	0x2e5fc8,
+	0x38c2c8,
+	0x2034c9,
+	0x316688,
+	0x29728b,
+	0x275ec4,
+	0x35f745,
+	0x28ecc5,
+	0x2d1789,
+	0x20cc09,
+	0x2fcd08,
+	0x245448,
+	0x261844,
+	0x2982c5,
+	0x20ba83,
+	0x275e85,
+	0x2ab8c6,
+	0x2a614c,
+	0x213406,
+	0x288906,
+	0x29a005,
+	0x2c6c88,
+	0x2e6146,
+	0x2a6a06,
+	0x213686,
+	0x222e4c,
+	0x280044,
+	0x37340a,
+	0x299f48,
+	0x2a5f87,
+	0x324b06,
+	0x238307,
+	0x308885,
+	0x37b106,
+	0x363386,
+	0x37aec7,
+	0x2d2dc4,
+	0x3f3445,
+	0x287144,
+	0x2c0047,
+	0x287388,
+	0x28828a,
+	0x28fe87,
+	0x2bb6c7,
+	0x355487,
+	0x2f65c9,
+	0x2a614a,
+	0x227483,
+	0x30f645,
+	0x20b083,
+	0x2ce289,
+	0x385908,
+	0x36f847,
+	0x334809,
+	0x213486,
+	0x2214c8,
+	0x352545,
+	0x24d9ca,
+	0x2f7089,
+	0x27ec09,
+	0x2dec07,
+	0x365c09,
+	0x20af48,
+	0x205dc6,
+	0x31fc88,
+	0x3d6107,
+	0x2275c7,
+	0x2b1607,
+	0x2c8d48,
+	0x39dec6,
+	0x2b2e45,
+	0x28aec7,
+	0x2a6c48,
+	0x373244,
+	0x3e5784,
+	0x29f3c7,
+	0x2c1287,
+	0x27ee4a,
+	0x205d46,
+	0x3edd0a,
+	0x2d7507,
+	0x238e87,
+	0x3f3504,
+	0x29b484,
+	0x2e9686,
+	0x3d9e44,
+	0x3d9e4c,
+	0x315e05,
+	0x20ca49,
+	0x256604,
+	0x2cb085,
+	0x21fe88,
+	0x29e745,
+	0x33ca86,
+	0x2a20c4,
+	0x2a414a,
+	0x2de406,
+	0x2bbb8a,
+	0x20c647,
+	0x29fa45,
+	0x22be85,
+	0x24034a,
+	0x24ba45,
+	0x2b0f86,
+	0x246d84,
+	0x2c8646,
+	0x3af145,
+	0x3cf206,
+	0x302d4c,
+	0x33e90a,
+	0x2b08c4,
+	0x227806,
+	0x2acc87,
+	0x2eb144,
+	0x3539c8,
+	0x2d9a46,
+	0x399c89,
+	0x37a689,
+	0x2bdf89,
+	0x3127c6,
+	0x3d6206,
+	0x31fdc7,
+	0x3d5d48,
+	0x3d6009,
+	0x337147,
+	0x2a5306,
+	0x3ce807,
+	0x360dc5,
+	0x2390c4,
+	0x31f987,
+	0x3b6145,
+	0x296445,
+	0x38d187,
+	0x24b848,
+	0x3e0806,
+	0x2a7acd,
+	0x2a990f,
+	0x2ae44d,
+	0x208584,
+	0x236fc6,
+	0x2edf08,
+	0x2ffdc5,
+	0x240808,
+	0x28bd8a,
+	0x24bfc4,
+	0x2cb986,
+	0x2d4e47,
+	0x211cc7,
+	0x3cd709,
+	0x31fc45,
+	0x2cafc4,
+	0x2cc94a,
+	0x2d2b89,
+	0x365d07,
+	0x3645c6,
+	0x340ec6,
+	0x298206,
+	0x267f86,
+	0x3657cf,
+	0x2eddc9,
+	0x24d6c6,
+	0x268c86,
+	0x3db209,
+	0x2cb7c7,
+	0x200e83,
+	0x222fc6,
+	0x213b83,
+	0x360248,
+	0x27d507,
+	0x2b1a49,
+	0x2b3948,
+	0x210c08,
+	0x360ac6,
+	0x229ec9,
+	0x25e185,
+	0x22f4c4,
+	0x2f6f47,
+	0x389ac5,
+	0x208584,
+	0x2339c8,
+	0x215ac4,
+	0x2cb507,
+	0x2dd886,
+	0x271105,
+	0x2aa008,
+	0x340d8b,
+	0x314f87,
+	0x2405c6,
+	0x2e15c4,
+	0x3d33c6,
+	0x279a45,
+	0x3b6145,
+	0x28e849,
+	0x291cc9,
+	0x227604,
+	0x227645,
+	0x210cc5,
+	0x24d846,
+	0x314b88,
+	0x2d6546,
+	0x20df4b,
+	0x2c494a,
+	0x2d1445,
+	0x29aec6,
+	0x22f985,
+	0x326885,
+	0x2421c7,
+	0x3bdc48,
+	0x272f44,
+	0x393d46,
+	0x29e706,
+	0x20b107,
+	0x32b384,
+	0x28d486,
+	0x2fd085,
+	0x2fd089,
+	0x3d6404,
+	0x311149,
+	0x28a2c6,
+	0x2d87c8,
+	0x210cc5,
+	0x399f05,
+	0x3cf206,
+	0x2f7709,
+	0x20ecc9,
+	0x288986,
+	0x2e8ac8,
+	0x29c888,
+	0x22f944,
+	0x2cd104,
+	0x2cd108,
+	0x3c5488,
+	0x35f909,
+	0x2ab846,
+	0x213686,
+	0x34034d,
+	0x30efc6,
+	0x3711c9,
+	0x2fd505,
+	0x39e686,
+	0x3dcc08,
+	0x33c9c5,
+	0x3b5fc4,
+	0x279a45,
+	0x2916c8,
+	0x2aafc9,
+	0x287204,
+	0x2cdf06,
+	0x2eb78a,
+	0x318ec8,
+	0x27efc9,
+	0x28ab4a,
+	0x334786,
+	0x2a9ac8,
+	0x378e45,
+	0x29a1c8,
+	0x308905,
+	0x213349,
+	0x3429c9,
+	0x226942,
+	0x2d0485,
+	0x28ed86,
+	0x28a207,
+	0x257505,
+	0x2f6bc6,
+	0x3833c8,
+	0x2aa806,
+	0x370009,
+	0x289546,
+	0x263048,
+	0x2bc805,
+	0x255346,
+	0x3dc108,
+	0x290e08,
+	0x3856c8,
+	0x321948,
+	0x218144,
+	0x22bc83,
+	0x370244,
+	0x290086,
+	0x360e04,
+	0x23d287,
+	0x2a6909,
+	0x2e0ec5,
+	0x2365c6,
+	0x222fc6,
+	0x2a318b,
+	0x2ca286,
+	0x294206,
+	0x2e0808,
+	0x245946,
+	0x29f843,
+	0x213183,
+	0x2390c4,
+	0x231105,
+	0x2da807,
+	0x287388,
+	0x28738f,
+	0x28adcb,
+	0x314988,
+	0x2cdf86,
+	0x314c8e,
+	0x2110c3,
+	0x2da784,
+	0x2ca205,
+	0x2cae46,
+	0x29c4cb,
+	0x2a0b46,
+	0x21aac9,
+	0x271105,
+	0x2612c8,
+	0x3f3c08,
+	0x20eb8c,
+	0x2af546,
+	0x275ec6,
+	0x2cf105,
+	0x296f08,
+	0x28a8c5,
+	0x2738c8,
+	0x2abdca,
+	0x2ae889,
+	0x7a24c4,
+	0x2000c2,
+	0x55202202,
+	0x200382,
+	0x2503c4,
+	0x200ec2,
+	0x228f84,
+	0x2018c2,
+	0x2003c2,
+	0x202ec2,
+	0x1b9688,
+	0x6204,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x5cc2,
+	0x510c2,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x24b42,
+	0x5fc2,
+	0x2642,
+	0x250b03,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x2109c3,
+	0x21f143,
+	0x214f03,
+	0x214f04,
+	0x206643,
+	0x2392c4,
+	0x21f603,
+	0x2e4084,
+	0x205503,
+	0x2577c7,
+	0x206543,
+	0x21d783,
+	0x23d5c8,
+	0x21f143,
+	0x28cc4b,
+	0x309b43,
+	0x212fc6,
+	0x23d942,
+	0x30468b,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x21f143,
+	0x20ef83,
+	0x224cc3,
+	0x2000c2,
+	0x1b9688,
+	0x22c445,
+	0x3b61c8,
+	0x2e41c8,
+	0x202202,
+	0x36b145,
+	0x3ce947,
+	0x201342,
+	0x2d29c7,
+	0x200382,
+	0x2594c7,
+	0x23c3c9,
+	0x27a288,
+	0x2945c9,
+	0x20d842,
+	0x3af9c7,
+	0x38ca04,
+	0x3cea07,
+	0x2c4847,
+	0x2d5782,
+	0x206543,
+	0x203c42,
+	0x2018c2,
+	0x2003c2,
+	0x2020c2,
+	0x200902,
+	0x202ec2,
+	0x39ffc5,
+	0x210545,
+	0x2202,
+	0x1f603,
+	0x206643,
+	0x21f603,
+	0x22b483,
+	0x205503,
+	0x2036c3,
+	0x2109c3,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x157f86,
+	0x57e9df8b,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x157285,
+	0xb4c3,
+	0x101,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x211e43,
+	0x2109c3,
+	0x21f143,
+	0x219dc3,
+	0x58854986,
+	0x1a6c3,
+	0xfdd45,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x5b82,
+	0x1b9688,
+	0x2f843,
+	0x4afc4,
+	0x1484ac4,
+	0xf6885,
+	0x1a5643,
+	0x2000c2,
+	0x39ab04,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x252b83,
+	0x22f2c5,
+	0x211e43,
+	0x20f743,
+	0x2109c3,
+	0x22b643,
+	0x21f143,
+	0x213dc3,
+	0x214f83,
+	0x200f83,
+	0xc7f03,
+	0x5c2,
+	0x232c2,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x2000c2,
+	0x250b03,
+	0x202202,
+	0x23c2,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x2109c3,
+	0x21f143,
+	0x202ec2,
+	0x1b9688,
+	0x205503,
+	0x1b9688,
+	0x276803,
+	0x206643,
+	0x232184,
+	0x21f603,
+	0x205503,
+	0x203042,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x203042,
+	0x23ddc3,
+	0x2109c3,
+	0x21f143,
+	0x303643,
+	0x213dc3,
+	0x2000c2,
+	0x202202,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x212fc5,
+	0x1f0786,
+	0x72544,
+	0xbdc04,
+	0x214f04,
+	0x23d942,
+	0x882,
+	0x1b9688,
+	0x23c2,
+	0x510c2,
+	0xc642,
+	0x2000c2,
+	0x14cb05,
+	0x20e08,
+	0xb2c83,
+	0x202202,
+	0x3fbc4,
+	0x5dd5d986,
+	0x26084,
+	0xba94b,
+	0x3c746,
+	0x82b87,
+	0xa1309,
+	0x21f603,
+	0x4f688,
+	0x4f68b,
+	0x4fb0b,
+	0x5088b,
+	0x50bcb,
+	0x50e8b,
+	0x512cb,
+	0x1c1b46,
+	0x205503,
+	0x1c9f45,
+	0x1a3504,
+	0x21bd03,
+	0x121787,
+	0x165706,
+	0x137585,
+	0x2044,
+	0xf28c4,
+	0x2109c3,
+	0x88a86,
+	0x11ff04,
+	0x21f143,
+	0x30a904,
+	0x137a47,
+	0x1f0389,
+	0xba708,
+	0x1e6785,
+	0x23dc4,
+	0x1ceb44,
+	0x368c3,
+	0x1dea03,
+	0x54146,
+	0x1d7808,
+	0x1aea85,
+	0x1a2c89,
+	0x1e143,
+	0x100a86,
+	0x14cb05,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x21d783,
+	0x21f143,
+	0x309b43,
+	0x23d942,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x20fc83,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x2e4084,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x212fc6,
+	0x21f603,
+	0x205503,
+	0x18903,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x14cb05,
+	0x82b87,
+	0xc043,
+	0x1e143,
+	0x7442,
+	0x1b9688,
+	0x205503,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x6d7c3,
+	0x176608,
+	0x2109c3,
+	0x21f143,
+	0x61606643,
+	0x21f603,
+	0x2109c3,
+	0x21f143,
+	0x1b9688,
+	0x2000c2,
+	0x202202,
+	0x206643,
+	0x205503,
+	0x2109c3,
+	0x2003c2,
+	0x21f143,
+	0x342f07,
+	0x3be44b,
+	0x22c383,
+	0x287b48,
+	0x3d5ac7,
+	0x38bac6,
+	0x20d1c5,
+	0x36b289,
+	0x212d48,
+	0x257bc9,
+	0x257bd0,
+	0x383c0b,
+	0x3a8989,
+	0x20c043,
+	0x223ac9,
+	0x232f46,
+	0x232f4c,
+	0x22c508,
+	0x3ef408,
+	0x3de109,
+	0x2d390e,
+	0x23c18b,
+	0x2c430c,
+	0x2028c3,
+	0x27cdcc,
+	0x2028c9,
+	0x315a07,
+	0x235fcc,
+	0x2c5d0a,
+	0x204884,
+	0x2bfa0d,
+	0x27cc88,
+	0x33244d,
+	0x282386,
+	0x25364b,
+	0x3f0509,
+	0x268f07,
+	0x3c3a86,
+	0x3d3bc9,
+	0x358c8a,
+	0x31ed88,
+	0x309744,
+	0x2c1d07,
+	0x231ac7,
+	0x335b04,
+	0x21a504,
+	0x206ac9,
+	0x301889,
+	0x3ceec8,
+	0x2cbe45,
+	0x20d785,
+	0x208b46,
+	0x2bf8c9,
+	0x325b4d,
+	0x39e788,
+	0x208a47,
+	0x20d248,
+	0x237906,
+	0x232b84,
+	0x266485,
+	0x3ea3c6,
+	0x3ecf04,
+	0x2027c7,
+	0x204e4a,
+	0x20eac4,
+	0x2156c6,
+	0x217509,
+	0x21750f,
+	0x2182cd,
+	0x218806,
+	0x220a10,
+	0x220e06,
+	0x2227c7,
+	0x223407,
+	0x22340f,
+	0x223ec9,
+	0x2270c6,
+	0x227b47,
+	0x227b48,
+	0x227e89,
+	0x3c1988,
+	0x31c607,
+	0x229a03,
+	0x22e3c6,
+	0x336ac8,
+	0x2d3bca,
+	0x202f09,
+	0x212e83,
+	0x36b046,
+	0x393b8a,
+	0x2345c7,
+	0x31584a,
+	0x373e4e,
+	0x224006,
+	0x321d07,
+	0x25e586,
+	0x202986,
+	0x3cb8cb,
+	0x3c1c4a,
+	0x3f384d,
+	0x3d62c7,
+	0x2fff88,
+	0x2fff89,
+	0x2fff8f,
+	0x2b954c,
+	0x381149,
+	0x2bb04e,
+	0x2578ca,
+	0x3796c6,
+	0x2fbb86,
+	0x323e8c,
+	0x3f158c,
+	0x32b988,
+	0x35e847,
+	0x21c285,
+	0x3cebc4,
+	0x20220e,
+	0x21ca44,
+	0x3d3907,
+	0x3b3a8a,
+	0x3ebfd4,
+	0x22d6cf,
+	0x2235c8,
+	0x22e288,
+	0x20f38d,
+	0x20f38e,
+	0x22e709,
+	0x349208,
+	0x34920f,
+	0x235ccc,
+	0x235ccf,
+	0x236d07,
+	0x23a08a,
+	0x23afcb,
+	0x23b988,
+	0x23dc87,
+	0x271d8d,
+	0x3022c6,
+	0x2bfbc6,
+	0x242509,
+	0x272348,
+	0x248248,
+	0x24824e,
+	0x26d447,
+	0x30d045,
+	0x24a485,
+	0x21a384,
+	0x38bd86,
+	0x3cedc8,
+	0x25f1c3,
+	0x2c544e,
+	0x272148,
+	0x21e20b,
+	0x2769c7,
+	0x35f385,
+	0x27cf46,
+	0x2be707,
+	0x34e508,
+	0x375209,
+	0x2329c5,
+	0x295148,
+	0x30f386,
+	0x3b31ca,
+	0x202109,
+	0x236089,
+	0x23608b,
+	0x347308,
+	0x3359c9,
+	0x2c8a46,
+	0x27b28a,
+	0x2853ca,
+	0x23a28c,
+	0x273407,
+	0x27a08a,
+	0x3c4d0b,
+	0x3c4d19,
+	0x2d66c8,
+	0x213045,
+	0x271f46,
+	0x3798c9,
+	0x35df86,
+	0x2e488a,
+	0x2064c6,
+	0x2e2504,
+	0x2e250d,
+	0x33b487,
+	0x35ee09,
+	0x24ec45,
+	0x24ef08,
+	0x24f449,
+	0x251604,
+	0x251cc7,
+	0x251cc8,
+	0x252007,
+	0x277dc8,
+	0x25ca47,
+	0x269285,
+	0x265b8c,
+	0x265f89,
+	0x32920a,
+	0x268709,
+	0x223bc9,
+	0x268a4c,
+	0x26c18b,
+	0x26d008,
+	0x26d948,
+	0x270d04,
+	0x292648,
+	0x293349,
+	0x2c5dc7,
+	0x217746,
+	0x2ad487,
+	0x370d89,
+	0x245dcb,
+	0x3aef07,
+	0x2a0887,
+	0x256687,
+	0x3323c4,
+	0x3323c5,
+	0x3ab045,
+	0x35be4b,
+	0x3e4bc4,
+	0x2dc688,
+	0x2bd0ca,
+	0x30f447,
+	0x3ef007,
+	0x29bad2,
+	0x28cf06,
+	0x231386,
+	0x3da74e,
+	0x298b06,
+	0x2a1c08,
+	0x2a2c8f,
+	0x332808,
+	0x296988,
+	0x312bca,
+	0x312bd1,
+	0x2b360e,
+	0x27b9ca,
+	0x27b9cc,
+	0x25d947,
+	0x349410,
+	0x3d3208,
+	0x2b3805,
+	0x2befca,
+	0x3ecf4c,
+	0x20bf0d,
+	0x3cd906,
+	0x3cd907,
+	0x3cd90c,
+	0x3f3dcc,
+	0x211e4c,
+	0x32cf0b,
+	0x3a5bc4,
+	0x21d984,
+	0x2c3bc9,
+	0x338787,
+	0x22e049,
+	0x285209,
+	0x2c59c7,
+	0x2c5b86,
+	0x2c5b89,
+	0x2c5f83,
+	0x2aa90a,
+	0x336987,
+	0x3dd24b,
+	0x3f36ca,
+	0x259604,
+	0x3ee686,
+	0x290109,
+	0x3bf3c4,
+	0x2ebcca,
+	0x307cc5,
+	0x2d5005,
+	0x2d500d,
+	0x2d534e,
+	0x363545,
+	0x341bc6,
+	0x212bc7,
+	0x23884a,
+	0x21cd46,
+	0x2f46c4,
+	0x2f8c47,
+	0x3e114b,
+	0x2fe247,
+	0x28c284,
+	0x318046,
+	0x31804d,
+	0x2f120c,
+	0x210886,
+	0x39e98a,
+	0x21d406,
+	0x222488,
+	0x23a947,
+	0x2665ca,
+	0x351986,
+	0x28d503,
+	0x3ca106,
+	0x24a6c8,
+	0x375d0a,
+	0x29a347,
+	0x29a348,
+	0x29c044,
+	0x28d107,
+	0x3870c8,
+	0x235848,
+	0x2cc748,
+	0x2ccb4a,
+	0x2dfa85,
+	0x23ddc7,
+	0x27b813,
+	0x286446,
+	0x235ac8,
+	0x225449,
+	0x2d2888,
+	0x360b4b,
+	0x2ce4c8,
+	0x30ce84,
+	0x316046,
+	0x32c586,
+	0x39b3c9,
+	0x2dfe47,
+	0x265c88,
+	0x36aa46,
+	0x38d084,
+	0x336305,
+	0x3d7408,
+	0x20150a,
+	0x2e2188,
+	0x2e7786,
+	0x2a9cca,
+	0x203308,
+	0x3a9dc8,
+	0x2ebf48,
+	0x2ec4c6,
+	0x2ee106,
+	0x3ac9cc,
+	0x2ee6d0,
+	0x2eeac5,
+	0x320688,
+	0x320690,
+	0x332610,
+	0x257a4e,
+	0x3ac64e,
+	0x3ac654,
+	0x3b0b0f,
+	0x3b0ec6,
+	0x3efd91,
+	0x3474d3,
+	0x3c3c08,
+	0x3c3205,
+	0x289788,
+	0x3eabc5,
+	0x34f10c,
+	0x212349,
+	0x21c889,
+	0x229747,
+	0x3b35c9,
+	0x35db47,
+	0x3a3046,
+	0x266287,
+	0x28b345,
+	0x20b503,
+	0x218903,
+	0x27fb84,
+	0x3d228d,
+	0x3f1dcf,
+	0x38d0c5,
+	0x212246,
+	0x3b74c7,
+	0x22c287,
+	0x2d0c46,
+	0x2d0c4b,
+	0x2b4785,
+	0x21e0c6,
+	0x3b1d87,
+	0x25dc49,
+	0x369dc6,
+	0x21e6c5,
+	0x33bccb,
+	0x3cd206,
+	0x222b85,
+	0x252c08,
+	0x29d4c8,
+	0x2b48cc,
+	0x2b48d0,
+	0x2b6f49,
+	0x2c7747,
+	0x2cc28b,
+	0x2f6986,
+	0x31c4ca,
+	0x2b054b,
+	0x34e74a,
+	0x371946,
+	0x303505,
+	0x3366c6,
+	0x293d08,
+	0x29e14a,
+	0x20f01c,
+	0x309c0c,
+	0x309f08,
+	0x212fc5,
+	0x21f807,
+	0x2b2b46,
+	0x2d3fc5,
+	0x21b886,
+	0x2d0e08,
+	0x2d2e07,
+	0x2d3808,
+	0x28650a,
+	0x2f60cc,
+	0x25f449,
+	0x21f247,
+	0x2282c4,
+	0x224606,
+	0x29650a,
+	0x285305,
+	0x21a18c,
+	0x21a848,
+	0x22d0c8,
+	0x22abcc,
+	0x39598c,
+	0x22dc09,
+	0x22de47,
+	0x24744c,
+	0x233dc4,
+	0x24b48a,
+	0x217d0c,
+	0x28274b,
+	0x39450b,
+	0x3a6386,
+	0x25c1c7,
+	0x25d447,
+	0x34964f,
+	0x317051,
+	0x2f37d2,
+	0x25d44d,
+	0x25d44e,
+	0x25d78e,
+	0x3b0cc8,
+	0x3b0cd2,
+	0x241848,
+	0x2501c7,
+	0x256eca,
+	0x24b2c8,
+	0x298ac5,
+	0x3ba8ca,
+	0x221347,
+	0x2e3184,
+	0x24e583,
+	0x38ff05,
+	0x312e47,
+	0x2f9947,
+	0x20c10e,
+	0x31618d,
+	0x317d09,
+	0x20e7c5,
+	0x326403,
+	0x344206,
+	0x26a945,
+	0x21e448,
+	0x33c149,
+	0x271f85,
+	0x271f8f,
+	0x2baa47,
+	0x20d045,
+	0x27738a,
+	0x20ae06,
+	0x2a8c49,
+	0x35964c,
+	0x37e909,
+	0x2125c6,
+	0x2bcecc,
+	0x37f846,
+	0x3e6888,
+	0x315546,
+	0x27aec6,
+	0x2ca404,
+	0x222383,
+	0x2dfbca,
+	0x29cad1,
+	0x38130a,
+	0x265745,
+	0x268287,
+	0x262a47,
+	0x2d0044,
+	0x3871cb,
+	0x294448,
+	0x2d0a06,
+	0x233605,
+	0x273d04,
+	0x275389,
+	0x2008c4,
+	0x3ed887,
+	0x387e05,
+	0x387e07,
+	0x3da985,
+	0x260ac3,
+	0x250088,
+	0x277a0a,
+	0x204803,
+	0x22c48a,
+	0x204806,
+	0x271d0f,
+	0x26d3c9,
+	0x2c53d0,
+	0x3a7648,
+	0x2e7c89,
+	0x2a7907,
+	0x317fcf,
+	0x334bc4,
+	0x2e4104,
+	0x220c86,
+	0x3b6d46,
+	0x34fd4a,
+	0x273706,
+	0x2c28c7,
+	0x31c948,
+	0x31cb47,
+	0x31dc47,
+	0x320bca,
+	0x31e64b,
+	0x302045,
+	0x2f3408,
+	0x21ff83,
+	0x3d118c,
+	0x21c00f,
+	0x23cc0d,
+	0x29ab07,
+	0x22ce09,
+	0x284107,
+	0x2d91c8,
+	0x3ec1cc,
+	0x30cd88,
+	0x24d408,
+	0x33820e,
+	0x34ba94,
+	0x34bfa4,
+	0x3672ca,
+	0x38420b,
+	0x35dc04,
+	0x35dc09,
+	0x2cba08,
+	0x24b745,
+	0x3d58ca,
+	0x296287,
+	0x22ffc4,
+	0x250b03,
+	0x206643,
+	0x2392c4,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x211e43,
+	0x206543,
+	0x2ee6c6,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x219683,
+	0x2000c2,
+	0x250b03,
+	0x202202,
+	0x206643,
+	0x2392c4,
+	0x21f603,
+	0x205503,
+	0x211e43,
+	0x2ee6c6,
+	0x2109c3,
+	0x21f143,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x3d6403,
+	0x2109c3,
+	0x21f143,
+	0x250b03,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x2000c2,
+	0x38a7c3,
+	0x202202,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x201782,
+	0x202dc2,
+	0x202202,
+	0x206643,
+	0x211ac2,
+	0x2005c2,
+	0x2503c4,
+	0x228f84,
+	0x21e002,
+	0x294744,
+	0x2003c2,
+	0x21f143,
+	0x219683,
+	0x3a6386,
+	0x224b42,
+	0x202642,
+	0x225842,
+	0x63e03ec3,
+	0x64255983,
+	0x63586,
+	0x63586,
+	0x214f04,
+	0x21d783,
+	0x1dec0d,
+	0x1cec4a,
+	0x1a1246,
+	0x1d01cc,
+	0x64f1f14d,
+	0x8f28c,
+	0x6545484f,
+	0x1d8f0d,
+	0x79184,
+	0x169044,
+	0xcdc84,
+	0x14cb05,
+	0x95709,
+	0xa0fcc,
+	0x342c7,
+	0x12ac6,
+	0x19288,
+	0x1f4c7,
+	0x24988,
+	0x1bb4ca,
+	0x11b487,
+	0xa1209,
+	0x65ad45c5,
+	0xf48c9,
+	0x65c37e4b,
+	0x1511cb,
+	0x2c4b,
+	0x172bc8,
+	0x16128a,
+	0x17c88e,
+	0x660b74ca,
+	0xe35cd,
+	0x2e70d,
+	0x14d268b,
+	0xf10ca,
+	0x26084,
+	0x8a646,
+	0x1896c8,
+	0xc9a08,
+	0x38107,
+	0x26e45,
+	0x1e3b07,
+	0xa24c9,
+	0x1d9d47,
+	0x7908,
+	0x10f849,
+	0x60a04,
+	0x685c5,
+	0x15440e,
+	0x1455c7,
+	0x666271c6,
+	0xbc84d,
+	0x1d9bc8,
+	0xf3008,
+	0x66a80986,
+	0x674b2788,
+	0x182c0a,
+	0x64348,
+	0x143110,
+	0x6048c,
+	0x72c07,
+	0x74107,
+	0x79c87,
+	0x7fa47,
+	0x8b02,
+	0x12a387,
+	0x1c1e0c,
+	0x14d05,
+	0xcc107,
+	0xb6e06,
+	0xb78c9,
+	0xbac08,
+	0x15fc2,
+	0x5c2,
+	0x116a86,
+	0x194e0b,
+	0x173cc6,
+	0x1de684,
+	0x1cf8c7,
+	0x80789,
+	0x1e0b49,
+	0x1ba688,
+	0x510c2,
+	0x19a989,
+	0x11508,
+	0xf0b8a,
+	0xceb48,
+	0x67ae098b,
+	0x1db9c9,
+	0x4b206,
+	0xe5a49,
+	0xf1047,
+	0xf1909,
+	0xf2a48,
+	0xf4087,
+	0xf5a49,
+	0xf8e05,
+	0xf91d0,
+	0xf9d4c,
+	0x181b86,
+	0x1cf805,
+	0xd9807,
+	0x4350d,
+	0x1b77c9,
+	0x682c88c3,
+	0x47185,
+	0x1cbd46,
+	0x104ac7,
+	0x10a918,
+	0x1da0c8,
+	0x8624a,
+	0x1c58e,
+	0x10002,
+	0x6865228b,
+	0x68ae5b4a,
+	0x1942ca,
+	0x6584d,
+	0x1042,
+	0xdd0c6,
+	0x15d46,
+	0xc20c8,
+	0xba0ca,
+	0x5a3c8,
+	0x1b9549,
+	0x11d908,
+	0x74c8e,
+	0x6308,
+	0x144207,
+	0x68eb26c4,
+	0xcfc4d,
+	0xcbd48,
+	0x113845,
+	0x146f48,
+	0x69381f09,
+	0x371c8,
+	0x6941f74a,
+	0x4042,
+	0x69ab24c8,
+	0x119e46,
+	0x5fc2,
+	0xd0504,
+	0x74b46,
+	0x69d23b48,
+	0x54146,
+	0x6a4de50b,
+	0x3642,
+	0x6523ab84,
+	0x21943,
+	0x16b449,
+	0x1908,
+	0x2547,
+	0x2c0ca,
+	0x71687,
+	0x401,
+	0x81,
+	0x188647,
+	0x117e48,
+	0xc70c8,
+	0xc72c8,
+	0xc74c8,
+	0x6cbc7,
+	0xa8643,
+	0x66e3ab84,
+	0x672d1fc3,
+	0xc1,
+	0xfc986,
+	0xc1,
+	0x201,
+	0xfc986,
+	0xa8643,
+	0x67e4ac44,
+	0x190d04,
+	0xe985,
+	0x39f45,
+	0x1cfa04,
+	0x6784,
+	0x51504,
+	0x1410087,
+	0x144ab87,
+	0x1c7448,
+	0x1c148c,
+	0xc01,
+	0x14f83,
+	0x1ecc4,
+	0x1bd044,
+	0x28d45,
+	0x1c7448,
+	0x6a3c7448,
+	0x68f03,
+	0x7e583,
+	0x12e03,
+	0x22607,
+	0x4a07,
+	0x15e5145,
+	0x56344,
+	0x72d47,
+	0x2202,
+	0x39f04,
+	0x1e0f4a,
+	0x204884,
+	0x206643,
+	0x2554c4,
+	0x2503c4,
+	0x2109c3,
+	0x225305,
+	0x219dc3,
+	0x237343,
+	0x33d845,
+	0x200f83,
+	0x235c3,
+	0x6ba06643,
+	0x21f603,
+	0x554c4,
+	0x3b43,
+	0x205503,
+	0x200181,
+	0xf743,
+	0x206543,
+	0x228f84,
+	0x294744,
+	0x2109c3,
+	0x2b643,
+	0x21f143,
+	0x213dc3,
+	0x1b9688,
+	0x2000c2,
+	0x250b03,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x3d6403,
+	0x2005c2,
+	0x2503c4,
+	0x211e43,
+	0x206543,
+	0x2109c3,
+	0x21d783,
+	0x21f143,
+	0x200f83,
+	0x1b9688,
+	0x10ea47,
+	0x2202,
+	0x136285,
+	0x605cf,
+	0xe3246,
+	0xf9d4c,
+	0x147e248,
+	0x6ca01bc2,
+	0x3dae48,
+	0x3cf386,
+	0x2db106,
+	0x39d947,
+	0x6ce087c2,
+	0x6d2c5248,
+	0x229cca,
+	0x272688,
+	0x200b02,
+	0x3367c9,
+	0x302087,
+	0x2176c6,
+	0x24fdc9,
+	0x23df04,
+	0x38b9c6,
+	0x2db504,
+	0x220044,
+	0x264b09,
+	0x31b946,
+	0x227d45,
+	0x2783c5,
+	0x22f007,
+	0x334087,
+	0x3edf44,
+	0x360406,
+	0x2c6485,
+	0x3f31c5,
+	0x22f8c5,
+	0x237ac7,
+	0x276805,
+	0x24f8c9,
+	0x3dc545,
+	0x34e644,
+	0x21cc87,
+	0x33b00e,
+	0x346ac9,
+	0x3da609,
+	0x3bde06,
+	0x243f48,
+	0x378c0b,
+	0x2fec8c,
+	0x32db46,
+	0x2c41c7,
+	0x2f8385,
+	0x313aca,
+	0x3cefc9,
+	0x200ac9,
+	0x2fbfc6,
+	0x3b1b45,
+	0x24b105,
+	0x375009,
+	0x22fa4b,
+	0x3cc986,
+	0x357686,
+	0x208a44,
+	0x252946,
+	0x30d0c8,
+	0x3d00c6,
+	0x27da46,
+	0x204248,
+	0x205a47,
+	0x206889,
+	0x207405,
+	0x1b9688,
+	0x3e3a84,
+	0x31e2c4,
+	0x20d605,
+	0x34a809,
+	0x20da07,
+	0x20da0b,
+	0x22620a,
+	0x229685,
+	0x6d605182,
+	0x3f3587,
+	0x6da29a08,
+	0x3c5807,
+	0x2df745,
+	0x23b3ca,
+	0x2202,
+	0x28b00b,
+	0x28d58a,
+	0x2778c6,
+	0x35f383,
+	0x20374d,
+	0x3d7ccc,
+	0x20dc8d,
+	0x236505,
+	0x211185,
+	0x25f207,
+	0x218d49,
+	0x229bc6,
+	0x273585,
+	0x32ac08,
+	0x23a783,
+	0x2e44c8,
+	0x252848,
+	0x3c4987,
+	0x23a788,
+	0x23e289,
+	0x37d047,
+	0x3bdfc7,
+	0x3e4fc8,
+	0x211884,
+	0x211887,
+	0x282288,
+	0x367e86,
+	0x3c5fcf,
+	0x244bc7,
+	0x35ff06,
+	0x22df85,
+	0x2259c3,
+	0x24d0c7,
+	0x38f643,
+	0x252fc6,
+	0x256246,
+	0x259a46,
+	0x29fe05,
+	0x277dc3,
+	0x39a608,
+	0x3a3889,
+	0x25a08b,
+	0x25b588,
+	0x25c705,
+	0x25e805,
+	0x6de596c2,
+	0x266349,
+	0x3d1c87,
+	0x21e145,
+	0x264a07,
+	0x266e86,
+	0x267e45,
+	0x26a78b,
+	0x26d004,
+	0x271845,
+	0x271987,
+	0x285a46,
+	0x286785,
+	0x292a87,
+	0x292fc7,
+	0x2c6b84,
+	0x2a0dca,
+	0x2b76c8,
+	0x378ec9,
+	0x320105,
+	0x275a06,
+	0x30d28a,
+	0x2782c6,
+	0x3ec587,
+	0x27a40d,
+	0x2b42c9,
+	0x384545,
+	0x3c3f07,
+	0x3db508,
+	0x3dbec8,
+	0x33abc7,
+	0x3c2e06,
+	0x216107,
+	0x2556c3,
+	0x31b8c4,
+	0x385d45,
+	0x3b0207,
+	0x3ba289,
+	0x225dc8,
+	0x3ec485,
+	0x273844,
+	0x24f305,
+	0x25ea4d,
+	0x207002,
+	0x2d6246,
+	0x2c8946,
+	0x30e2ca,
+	0x3a1606,
+	0x3adc85,
+	0x38c3c5,
+	0x38c3c7,
+	0x3b300c,
+	0x2641ca,
+	0x29b046,
+	0x2e0dc5,
+	0x252786,
+	0x29b907,
+	0x29de46,
+	0x29fd0c,
+	0x24ff09,
+	0x6e244447,
+	0x2a3045,
+	0x2a3046,
+	0x2a3548,
+	0x249685,
+	0x2b4f85,
+	0x2b5708,
+	0x2b590a,
+	0x6e60bd82,
+	0x6ea09b02,
+	0x2afc05,
+	0x31c703,
+	0x31df88,
+	0x285e43,
+	0x2b5b84,
+	0x2a8d8b,
+	0x2b90c8,
+	0x333d88,
+	0x6ef4da49,
+	0x2bbe09,
+	0x2bc746,
+	0x2be388,
+	0x2be589,
+	0x2c0206,
+	0x2c0385,
+	0x24e186,
+	0x2c0809,
+	0x2d7ec7,
+	0x255206,
+	0x358587,
+	0x358e47,
+	0x3a0e04,
+	0x6f3e4e09,
+	0x2d4208,
+	0x2c5148,
+	0x38d2c7,
+	0x2e1e06,
+	0x3cc189,
+	0x2db7c7,
+	0x3af3ca,
+	0x3edb48,
+	0x2775c7,
+	0x2e4d86,
+	0x3e0d4a,
+	0x347c08,
+	0x2e8845,
+	0x2ba485,
+	0x30a547,
+	0x318549,
+	0x318a4b,
+	0x32ee08,
+	0x3dc5c9,
+	0x25bc07,
+	0x2ced4c,
+	0x2cf24c,
+	0x2cf54a,
+	0x2cf7cc,
+	0x2db088,
+	0x2db288,
+	0x2db484,
+	0x2dc889,
+	0x2dcac9,
+	0x2dcd0a,
+	0x2dcf89,
+	0x2dd307,
+	0x3c5bcc,
+	0x3cab06,
+	0x279dc8,
+	0x278386,
+	0x318406,
+	0x384447,
+	0x396bc8,
+	0x38bf8b,
+	0x2fc0c7,
+	0x2647c9,
+	0x2683c9,
+	0x28f507,
+	0x2db744,
+	0x267307,
+	0x2e9246,
+	0x213f86,
+	0x34ff05,
+	0x230e48,
+	0x35da44,
+	0x35da46,
+	0x26408b,
+	0x2aac09,
+	0x2379c6,
+	0x226509,
+	0x20d6c6,
+	0x3878c8,
+	0x207783,
+	0x3b1cc5,
+	0x2140c9,
+	0x205805,
+	0x2fa4c4,
+	0x244946,
+	0x27db85,
+	0x260806,
+	0x323007,
+	0x3beec6,
+	0x234bcb,
+	0x27b187,
+	0x289046,
+	0x292e46,
+	0x22f0c6,
+	0x3edf09,
+	0x2b3d4a,
+	0x36d405,
+	0x24514d,
+	0x2b5a06,
+	0x2d00c6,
+	0x3a7546,
+	0x222405,
+	0x2f94c7,
+	0x27c247,
+	0x31bcce,
+	0x206543,
+	0x2e1dc9,
+	0x3a2949,
+	0x313ec7,
+	0x27c707,
+	0x2359c5,
+	0x37b205,
+	0x6f606c0f,
+	0x2e7ec7,
+	0x2e8088,
+	0x2e84c4,
+	0x2e8706,
+	0x6fa4a502,
+	0x2ec746,
+	0x2ee6c6,
+	0xf9d4c,
+	0x201b8e,
+	0x2e430a,
+	0x203bc6,
+	0x211b8a,
+	0x3cb2c9,
+	0x23b845,
+	0x371b48,
+	0x316446,
+	0x2c3dc8,
+	0x300308,
+	0x294b8b,
+	0x39da45,
+	0x276888,
+	0x20438c,
+	0x2df607,
+	0x256e06,
+	0x2e4ac8,
+	0x38bc48,
+	0x6fe12282,
+	0x3d4dcb,
+	0x34f589,
+	0x38b809,
+	0x207607,
+	0x3cbb88,
+	0x7023eb48,
+	0x332a8b,
+	0x254389,
+	0x266b4d,
+	0x34d4c8,
+	0x2d0708,
+	0x70601582,
+	0x21e7c4,
+	0x70a232c2,
+	0x36cf46,
+	0x70e0b7c2,
+	0x30794a,
+	0x26c006,
+	0x226b88,
+	0x250688,
+	0x261bc6,
+	0x2c46c6,
+	0x30db86,
+	0x21e3c5,
+	0x23bd04,
+	0x71387844,
+	0x35cbc6,
+	0x259ec7,
+	0x71688b47,
+	0x3979cb,
+	0x3c5a09,
+	0x2111ca,
+	0x38c504,
+	0x2dba88,
+	0x254fcd,
+	0x308249,
+	0x308488,
+	0x308709,
+	0x30a904,
+	0x241744,
+	0x283905,
+	0x3b644b,
+	0x2b9046,
+	0x35ca05,
+	0x390089,
+	0x3604c8,
+	0x267e84,
+	0x313c49,
+	0x234b05,
+	0x3340c8,
+	0x3daa07,
+	0x320d88,
+	0x290306,
+	0x3c1847,
+	0x2f2689,
+	0x33be49,
+	0x222c05,
+	0x257445,
+	0x71a1cd02,
+	0x34e404,
+	0x2f6345,
+	0x39d846,
+	0x383305,
+	0x25e8c7,
+	0x2daac5,
+	0x283e04,
+	0x3bdec6,
+	0x273607,
+	0x24a546,
+	0x3b2185,
+	0x20c888,
+	0x3cf585,
+	0x20f6c7,
+	0x21ce89,
+	0x2aad4a,
+	0x226707,
+	0x22670c,
+	0x227d06,
+	0x23f509,
+	0x247cc5,
+	0x2495c8,
+	0x215d43,
+	0x2c8a05,
+	0x2f5e05,
+	0x290b47,
+	0x71e00b82,
+	0x304207,
+	0x2dd686,
+	0x3e3406,
+	0x2e8586,
+	0x38bb86,
+	0x24cbc8,
+	0x2898c5,
+	0x35ffc7,
+	0x35ffcd,
+	0x24e583,
+	0x3cafc5,
+	0x277147,
+	0x304548,
+	0x276d05,
+	0x2198c8,
+	0x228a46,
+	0x316b87,
+	0x2f44c5,
+	0x39dac6,
+	0x39ab85,
+	0x3ccd4a,
+	0x2f6ac6,
+	0x2d7647,
+	0x227a05,
+	0x2f7f47,
+	0x2f8bc4,
+	0x2fa446,
+	0x371a85,
+	0x22c98b,
+	0x2e90c9,
+	0x38a8ca,
+	0x222c88,
+	0x30b588,
+	0x310b8c,
+	0x311407,
+	0x314788,
+	0x35c508,
+	0x36d085,
+	0x329a4a,
+	0x326409,
+	0x72201982,
+	0x2a0686,
+	0x230c84,
+	0x230c89,
+	0x2286c9,
+	0x319a47,
+	0x27f887,
+	0x285089,
+	0x2ccd48,
+	0x2ccd4f,
+	0x216b06,
+	0x2f048b,
+	0x25f9c5,
+	0x25f9c7,
+	0x354fc9,
+	0x224c86,
+	0x313bc7,
+	0x2f3b45,
+	0x2327c4,
+	0x3b6a46,
+	0x20dbc4,
+	0x2cd507,
+	0x339848,
+	0x727b1a48,
+	0x3c7005,
+	0x3e5247,
+	0x2d6849,
+	0x20e204,
+	0x246d48,
+	0x72b0a388,
+	0x2d0044,
+	0x300d08,
+	0x3c3b44,
+	0x3b7149,
+	0x3a7485,
+	0x72e3d942,
+	0x216b45,
+	0x2ea785,
+	0x33b788,
+	0x236b47,
+	0x732008c2,
+	0x3cc545,
+	0x2eafc6,
+	0x267b06,
+	0x34e3c8,
+	0x350c88,
+	0x3832c6,
+	0x383e86,
+	0x30eb09,
+	0x3e3346,
+	0x224b4b,
+	0x2ff3c5,
+	0x3a6586,
+	0x2ac848,
+	0x3023c6,
+	0x2a2346,
+	0x21b00a,
+	0x3a008a,
+	0x25ed45,
+	0x29b747,
+	0x283486,
+	0x736046c2,
+	0x277287,
+	0x3e4905,
+	0x30d204,
+	0x30d205,
+	0x2db986,
+	0x388947,
+	0x220c85,
+	0x228784,
+	0x2c6188,
+	0x2a2405,
+	0x2f5247,
+	0x336d05,
+	0x381785,
+	0x212784,
+	0x346609,
+	0x2c62c8,
+	0x249d86,
+	0x3aaac6,
+	0x33c3c6,
+	0x73b2d148,
+	0x30b407,
+	0x3915cd,
+	0x366a0c,
+	0x3e0089,
+	0x3e9109,
+	0x73f7d942,
+	0x3e8443,
+	0x228183,
+	0x2e9305,
+	0x3b030a,
+	0x344606,
+	0x3ec8c5,
+	0x323404,
+	0x32340b,
+	0x33910c,
+	0x339a4c,
+	0x339d55,
+	0x33c74d,
+	0x33eb8f,
+	0x33ef52,
+	0x33f3cf,
+	0x33f792,
+	0x33fc13,
+	0x3400cd,
+	0x34068d,
+	0x340a0e,
+	0x34130e,
+	0x34198c,
+	0x341d4c,
+	0x34218b,
+	0x342c0e,
+	0x343512,
+	0x3443cc,
+	0x3448d0,
+	0x351b12,
+	0x35278c,
+	0x352e4d,
+	0x35318c,
+	0x356491,
+	0x35780d,
+	0x359f8d,
+	0x35a58a,
+	0x35a80c,
+	0x35bc0c,
+	0x35c70c,
+	0x35d18c,
+	0x362213,
+	0x362c10,
+	0x363010,
+	0x36368d,
+	0x363c8c,
+	0x367009,
+	0x36914d,
+	0x369493,
+	0x36ba11,
+	0x36c213,
+	0x36d54f,
+	0x36d90c,
+	0x36dc0f,
+	0x36dfcd,
+	0x36e5cf,
+	0x36e990,
+	0x36f40e,
+	0x37564e,
+	0x375f90,
+	0x376acd,
+	0x37744e,
+	0x3777cc,
+	0x378693,
+	0x37abce,
+	0x37b710,
+	0x37bb11,
+	0x37bf4f,
+	0x37c313,
+	0x37d4cd,
+	0x37d80f,
+	0x37dbce,
+	0x37e150,
+	0x37e549,
+	0x37f9d0,
+	0x37fecf,
+	0x38054f,
+	0x380912,
+	0x38248e,
+	0x382f4d,
+	0x3835cd,
+	0x38390d,
+	0x38468d,
+	0x3849cd,
+	0x384d10,
+	0x38510b,
+	0x385b0c,
+	0x385e8c,
+	0x38648c,
+	0x38678e,
+	0x3947d0,
+	0x396512,
+	0x39698b,
+	0x396dce,
+	0x39714e,
+	0x39804e,
+	0x3985cb,
+	0x74398956,
+	0x39988d,
+	0x39a154,
+	0x39ae4d,
+	0x39d095,
+	0x39f28d,
+	0x39fc0f,
+	0x3a040f,
+	0x3a3acf,
+	0x3a3e8e,
+	0x3a420d,
+	0x3a5751,
+	0x3a8ecc,
+	0x3a91cc,
+	0x3a94cb,
+	0x3a978c,
+	0x3a9fcf,
+	0x3aa392,
+	0x3ab18d,
+	0x3ac3cc,
+	0x3acccc,
+	0x3acfcd,
+	0x3ad30f,
+	0x3ad6ce,
+	0x3affcc,
+	0x3b058d,
+	0x3b08cb,
+	0x3b154c,
+	0x3b268d,
+	0x3b29ce,
+	0x3b2d49,
+	0x3b3d13,
+	0x3b44cd,
+	0x3b4bcd,
+	0x3b51cc,
+	0x3b588e,
+	0x3b7c4f,
+	0x3b800c,
+	0x3b830d,
+	0x3b864f,
+	0x3b8a0c,
+	0x3b900c,
+	0x3b9d4c,
+	0x3ba04c,
+	0x3bac4d,
+	0x3baf92,
+	0x3bba0c,
+	0x3bbd0c,
+	0x3bc011,
+	0x3bc44f,
+	0x3bc80f,
+	0x3bcbd3,
+	0x3bf84e,
+	0x3bfbcf,
+	0x3bff8c,
+	0x747c064e,
+	0x3c09cf,
+	0x3c0d96,
+	0x3c44d2,
+	0x3c7a8c,
+	0x3c818f,
+	0x3c880d,
+	0x3df10f,
+	0x3df4cc,
+	0x3df7cd,
+	0x3dfb0d,
+	0x3e168e,
+	0x3e2b8c,
+	0x3e5b4c,
+	0x3e5e50,
+	0x3e77d1,
+	0x3e7c0b,
+	0x3e804c,
+	0x3e834e,
+	0x3e9651,
+	0x3e9a8e,
+	0x3e9e0d,
+	0x3efb4b,
+	0x3f0c4f,
+	0x3f1894,
+	0x2062c2,
+	0x2062c2,
+	0x204383,
+	0x2062c2,
+	0x204383,
+	0x2062c2,
+	0x203cc2,
+	0x24e1c5,
+	0x3e934c,
+	0x2062c2,
+	0x2062c2,
+	0x203cc2,
+	0x2062c2,
+	0x2a43c5,
+	0x2aad45,
+	0x2062c2,
+	0x2062c2,
+	0x20b782,
+	0x2a43c5,
+	0x33cd09,
+	0x36b70c,
+	0x2062c2,
+	0x2062c2,
+	0x2062c2,
+	0x2062c2,
+	0x24e1c5,
+	0x2062c2,
+	0x2062c2,
+	0x2062c2,
+	0x2062c2,
+	0x20b782,
+	0x33cd09,
+	0x2062c2,
+	0x2062c2,
+	0x2062c2,
+	0x2aad45,
+	0x2062c2,
+	0x2aad45,
+	0x36b70c,
+	0x3e934c,
+	0x250b03,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x2109c3,
+	0x21f143,
+	0x29cf,
+	0x13b548,
+	0x74dc4,
+	0xe7008,
+	0x2000c2,
+	0x75602202,
+	0x2457c3,
+	0x2f1684,
+	0x203b43,
+	0x205504,
+	0x231386,
+	0x244843,
+	0x244804,
+	0x29ebc5,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x3b6f0a,
+	0x3a6386,
+	0x3974cc,
+	0x1b9688,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x23ddc3,
+	0x2ee6c6,
+	0x2109c3,
+	0x21f143,
+	0x219683,
+	0x1e143,
+	0xb7188,
+	0x761ed1c5,
+	0x7e607,
+	0x50085,
+	0x17947,
+	0x14cb05,
+	0xa2a04,
+	0xa2a0a,
+	0x2d89,
+	0x1ac2,
+	0x1c928a,
+	0x76fdd7c5,
+	0x14cb05,
+	0x342c7,
+	0x6208,
+	0x990e,
+	0x97852,
+	0x13608b,
+	0x11b586,
+	0x772d45c5,
+	0x776d45cc,
+	0x1e4a87,
+	0xf08c7,
+	0xdc24a,
+	0x3f150,
+	0x14dc45,
+	0xba94b,
+	0xc9a08,
+	0x38107,
+	0x12bccb,
+	0xa24c9,
+	0x4e387,
+	0x1d9d47,
+	0x1ccbc7,
+	0x38046,
+	0x7908,
+	0x77c34106,
+	0x5a307,
+	0x28b86,
+	0xbc84d,
+	0xdbc10,
+	0x78004c02,
+	0x1d9bc8,
+	0x193090,
+	0x1937cc,
+	0x787a4a0d,
+	0x6b4c8,
+	0x6bdcb,
+	0x7b6c7,
+	0x1030c9,
+	0x63646,
+	0xa3748,
+	0x17382,
+	0x6808a,
+	0x3eec7,
+	0xcc107,
+	0xb78c9,
+	0xbac08,
+	0x1c9f45,
+	0x6ba47,
+	0x116a86,
+	0x173cc6,
+	0x1097ce,
+	0x48bce,
+	0x5e44f,
+	0x80789,
+	0x1e0b49,
+	0xaf78b,
+	0xde04f,
+	0x19cd8c,
+	0xd844b,
+	0x129148,
+	0x1978c7,
+	0x1a51c8,
+	0xc1b0b,
+	0xc268c,
+	0xc2a8c,
+	0xc2e8c,
+	0xc318d,
+	0x1ba688,
+	0x7e5c2,
+	0x19a989,
+	0xa8ac8,
+	0xde94b,
+	0xe2006,
+	0xea8cb,
+	0x14304b,
+	0xf328a,
+	0xf4245,
+	0xf91d0,
+	0x100986,
+	0x1bf006,
+	0x1cf805,
+	0xd9807,
+	0x101048,
+	0x104ac7,
+	0x104d87,
+	0x172e07,
+	0x20286,
+	0x16cd8a,
+	0xb4c0a,
+	0x15d46,
+	0xcbecd,
+	0x5a3c8,
+	0x11d908,
+	0x126c9,
+	0x86009,
+	0xdd585,
+	0x167fcc,
+	0xc338b,
+	0x1f009,
+	0x118984,
+	0x119c09,
+	0x119e46,
+	0x13206,
+	0x2642,
+	0x54146,
+	0x8618b,
+	0x1260c7,
+	0x126287,
+	0x3642,
+	0xe3dc5,
+	0x6384,
+	0x101,
+	0x5c183,
+	0x77b60fc6,
+	0xd1fc3,
+	0x382,
+	0xe44,
+	0xb02,
+	0x14f04,
+	0x882,
+	0x8b82,
+	0x8a42,
+	0x69782,
+	0x1782,
+	0x21942,
+	0x3402,
+	0x1547c2,
+	0x31982,
+	0x54302,
+	0x23c2,
+	0x56442,
+	0x1f603,
+	0x942,
+	0x1342,
+	0xfd02,
+	0x8102,
+	0x642,
+	0x29602,
+	0x15fc2,
+	0x1442,
+	0x4142,
+	0x5c2,
+	0x11e43,
+	0x2b82,
+	0x4b02,
+	0x510c2,
+	0x6982,
+	0x6b42,
+	0x9582,
+	0x1a202,
+	0x2042,
+	0xec2,
+	0x194cc2,
+	0x7d202,
+	0x70c2,
+	0x109c3,
+	0x602,
+	0x12282,
+	0x1f42,
+	0x16282,
+	0x22b85,
+	0x4f82,
+	0x1a002,
+	0x1dea83,
+	0x682,
+	0x10002,
+	0x1042,
+	0x1a42,
+	0x10a82,
+	0x8c2,
+	0x5fc2,
+	0x2642,
+	0x2c45,
+	0x78a03cc2,
+	0x78f09343,
+	0x15c43,
+	0x79203cc2,
+	0x15c43,
+	0xe18c7,
+	0x20d5c3,
+	0x2000c2,
+	0x206643,
+	0x21f603,
+	0x3d6403,
+	0x2005c3,
+	0x23ddc3,
+	0x2109c3,
+	0x21d783,
+	0x21f143,
+	0x2d2003,
+	0x1a5643,
+	0x1a5644,
+	0x1797c6,
+	0xdd5c4,
+	0x100505,
+	0x10cf85,
+	0x1c36c3,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x3d6403,
+	0x206543,
+	0x2109c3,
+	0x21d783,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x200181,
+	0x206543,
+	0x2109c3,
+	0x22b643,
+	0x21f143,
+	0x1df004,
+	0x250b03,
+	0x206643,
+	0x21f603,
+	0x2064c3,
+	0x3d6403,
+	0x290a43,
+	0x234503,
+	0x2b4843,
+	0x24c8c3,
+	0x205503,
+	0x2503c4,
+	0x2109c3,
+	0x21f143,
+	0x200f83,
+	0x3c7f44,
+	0x211103,
+	0x28c3,
+	0x24a643,
+	0x333648,
+	0x358c84,
+	0x20020a,
+	0x25efc6,
+	0xd6644,
+	0x3b4187,
+	0x22370a,
+	0x2169c9,
+	0x3c9107,
+	0x3ce48a,
+	0x250b03,
+	0x2afc8b,
+	0x379449,
+	0x386fc5,
+	0x3b9307,
+	0x2202,
+	0x206643,
+	0x26a5c7,
+	0x30fec5,
+	0x2db609,
+	0x1b98e,
+	0x21f603,
+	0x23bfc6,
+	0x2d96c3,
+	0xdd703,
+	0x122506,
+	0x1dd686,
+	0x1f4147,
+	0x2142c6,
+	0x21aa05,
+	0x2074c7,
+	0x2ef9c7,
+	0x7be05503,
+	0x3529c7,
+	0x285fc3,
+	0xba349,
+	0x301f85,
+	0x2503c4,
+	0x2c7bc8,
+	0x3e868c,
+	0x2c6ec5,
+	0x2b4446,
+	0x30fd87,
+	0x21f307,
+	0x289187,
+	0x289c08,
+	0x32118f,
+	0x3bec05,
+	0x205247,
+	0x2d4d07,
+	0x3d848a,
+	0x32aa49,
+	0x322645,
+	0x33390a,
+	0x1270c6,
+	0xcdd87,
+	0x2d9745,
+	0x3913c4,
+	0x345786,
+	0x1820c6,
+	0x393a47,
+	0x2dff87,
+	0x33ad48,
+	0x20f845,
+	0x26a4c6,
+	0x20508,
+	0x27d9c5,
+	0x26446,
+	0x271585,
+	0x243004,
+	0x240fc7,
+	0x24ca0a,
+	0x2add88,
+	0x205e46,
+	0x3ddc3,
+	0x2dfa85,
+	0x2b0006,
+	0x3c5e06,
+	0x201e46,
+	0x206543,
+	0x3ab407,
+	0xf9d4c,
+	0x2d4c85,
+	0x2109c3,
+	0x2f354d,
+	0x21d783,
+	0x33ae48,
+	0x27fc04,
+	0x2b0305,
+	0x2b5bc6,
+	0x3d4b46,
+	0x3a6487,
+	0x254247,
+	0x27e945,
+	0x21f143,
+	0x36ac87,
+	0x3a2e09,
+	0x323c89,
+	0x38934a,
+	0x207202,
+	0x301f44,
+	0x324444,
+	0x303f07,
+	0x3040c8,
+	0x305b49,
+	0x3cae89,
+	0x306787,
+	0x111609,
+	0x20bc06,
+	0x109546,
+	0x30a904,
+	0x22e98a,
+	0x30cbc8,
+	0x30da49,
+	0x30de86,
+	0x2cb145,
+	0x2adc48,
+	0x2e228a,
+	0x27b403,
+	0x335846,
+	0x306887,
+	0x35eb45,
+	0x82b48,
+	0x3bd345,
+	0x2130c3,
+	0x21bc04,
+	0x4d509,
+	0x2ba445,
+	0x2930c7,
+	0x2c6405,
+	0x2f0a46,
+	0x1062c5,
+	0x203c83,
+	0x203c89,
+	0x2b00cc,
+	0x2d720c,
+	0x3142c8,
+	0x2a3bc7,
+	0x3156c8,
+	0x115d07,
+	0x31688a,
+	0x316e8b,
+	0x379588,
+	0x3d4c48,
+	0x238746,
+	0x3e1985,
+	0x34710a,
+	0x2298c5,
+	0x23d942,
+	0x2e0f47,
+	0x28e506,
+	0x37f205,
+	0x318d09,
+	0x3be785,
+	0x1d7b08,
+	0x2bc385,
+	0x301b49,
+	0x32bac6,
+	0x3d3a08,
+	0x2b03c3,
+	0x20b586,
+	0x244886,
+	0x3256c5,
+	0x3256c9,
+	0x283f09,
+	0x2699c7,
+	0x129804,
+	0x329807,
+	0x3cad89,
+	0x223905,
+	0x3be08,
+	0x3c2b85,
+	0x3d5685,
+	0x3dbc09,
+	0x206182,
+	0x30f5c4,
+	0x201602,
+	0x202b82,
+	0x2ecd85,
+	0x3258c8,
+	0x2cdb45,
+	0x2dd4c3,
+	0x2dd4c5,
+	0x2ec943,
+	0x20a702,
+	0x22b384,
+	0x203283,
+	0x206702,
+	0x3017c4,
+	0x31dac3,
+	0x20bc02,
+	0x254b83,
+	0x215cc4,
+	0x30e003,
+	0x259444,
+	0x204842,
+	0x219583,
+	0x211c83,
+	0x203c82,
+	0x2b26c2,
+	0x283d49,
+	0x207482,
+	0x298684,
+	0x202002,
+	0x261644,
+	0x20bbc4,
+	0x30ba04,
+	0x202642,
+	0x238382,
+	0x22ddc3,
+	0x31f043,
+	0x2cd7c4,
+	0x306a04,
+	0x329984,
+	0x333804,
+	0x325043,
+	0x3705c3,
+	0x327044,
+	0x32b344,
+	0x32b486,
+	0x3d5502,
+	0x2202,
+	0x47183,
+	0x202202,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x36c5,
+	0x2000c2,
+	0x250b03,
+	0x206643,
+	0x21f603,
+	0x204d03,
+	0x205503,
+	0x2503c4,
+	0x284004,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x219683,
+	0x30af04,
+	0x330b03,
+	0x2375c3,
+	0x383204,
+	0x3c2986,
+	0x207843,
+	0x14cb05,
+	0xf08c7,
+	0x21dac3,
+	0x7da24f08,
+	0x2534c3,
+	0x2c90c3,
+	0x2721c3,
+	0x23ddc3,
+	0x3cc445,
+	0x1b92c3,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x26a483,
+	0x202bc3,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x211e43,
+	0x2109c3,
+	0x262784,
+	0x21f143,
+	0x2b2b44,
+	0x14cb05,
+	0x31af85,
+	0xf08c7,
+	0x202202,
+	0x201482,
+	0x200382,
+	0x2018c2,
+	0x2003c2,
+	0x1d4644,
+	0x206643,
+	0x2392c4,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x213dc3,
+	0x214f04,
+	0x1b9688,
+	0x206643,
+	0x21d783,
+	0x1c36c3,
+	0x12d9c4,
+	0x204884,
+	0x14cb05,
+	0x1b9688,
+	0x2202,
+	0x206643,
+	0x2554c4,
+	0x2503c4,
+	0x21d783,
+	0x201582,
+	0x21f143,
+	0x237343,
+	0x1bc04,
+	0x33d845,
+	0x23d942,
+	0x3de983,
+	0x1a2389,
+	0xf1506,
+	0x84b08,
+	0x2000c2,
+	0x1b9688,
+	0x80fbed87,
+	0x202202,
+	0x21f603,
+	0x205503,
+	0x2005c2,
+	0x21f143,
+	0x8f42,
+	0x82,
+	0x1bc04,
+	0xc2,
+	0x1ce647,
+	0x172c9,
+	0x27c3,
+	0x1b9688,
+	0x69743,
+	0x8172e887,
+	0x6643,
+	0xa0588,
+	0x1f603,
+	0x58287,
+	0x5503,
+	0x3fa46,
+	0x11e43,
+	0x42308,
+	0xd89c8,
+	0x1d1483,
+	0x87f86,
+	0x81937585,
+	0x1db6c5,
+	0x6543,
+	0x9b108,
+	0xe5dc8,
+	0x5e943,
+	0x81cf4f06,
+	0xfa885,
+	0x1a2b04,
+	0x36287,
+	0x109c3,
+	0x4643,
+	0x1f143,
+	0x15c82,
+	0x18fd0a,
+	0x20e43,
+	0x8220ff4c,
+	0xcdc03,
+	0x150c4,
+	0x120f8b,
+	0x121548,
+	0x9cfc2,
+	0x123b43,
+	0x1410087,
+	0x153b287,
+	0x151a888,
+	0x1523b43,
+	0x1c7448,
+	0x14e9e04,
+	0xfd6cb,
+	0xd842,
+	0x137a47,
+	0x14e6c4,
+	0xf0c87,
+	0x2000c2,
+	0x202202,
+	0x2392c4,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x23ddc3,
+	0x2109c3,
+	0x21f143,
+	0x220283,
+	0x213dc3,
+	0x1e143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x1c36c3,
+	0x1f603,
+	0x84405503,
+	0x7e607,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x23ddc3,
+	0x2109c3,
+	0x21f143,
+	0x224b42,
+	0x2000c1,
+	0x2000c2,
+	0x200201,
+	0x33ec82,
+	0x1b9688,
+	0x220a05,
+	0x200101,
+	0x6643,
+	0x32184,
+	0x200cc1,
+	0x200501,
+	0x200bc1,
+	0x24e142,
+	0x38f644,
+	0x24e143,
+	0x200041,
+	0x200801,
+	0x200181,
+	0x2dac6,
+	0x1e3c4c,
+	0x200701,
+	0x368ec7,
+	0x30524f,
+	0x3e53c6,
+	0x2004c1,
+	0x32da06,
+	0x200ec1,
+	0xf9d4c,
+	0x200581,
+	0x3b8c8e,
+	0x2003c1,
+	0x21f143,
+	0x201401,
+	0x852cbdc4,
+	0x241c05,
+	0x215c82,
+	0x212fc5,
+	0x200401,
+	0x200741,
+	0x2007c1,
+	0x23d942,
+	0x200081,
+	0x200f81,
+	0x208f81,
+	0x205381,
+	0x201841,
+	0x5682,
+	0x5c4c9,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x58a88,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x219dc3,
+	0x1f2c83,
+	0x206643,
+	0x205503,
+	0x9cf08,
+	0x206543,
+	0x2109c3,
+	0x3d43,
+	0x21f143,
+	0x863ddc88,
+	0x1f2943,
+	0x1d7808,
+	0x886c2,
+	0x29c3,
+	0x4c02,
+	0x2642,
+	0x14cb05,
+	0x1b9688,
+	0x9da06,
+	0x13b947,
+	0x14cb05,
+	0xfc204,
+	0x1593348,
+	0x4afc4,
+	0x12ae87,
+	0x614c4,
+	0x5044c,
+	0x1e8684,
+	0x66545,
+	0x5c4c9,
+	0x1a7f47,
+	0xd0b08,
+	0x2b6c6,
+	0x1c208a,
+	0x15e71ca,
+	0x130e44,
+	0x1582cc3,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2109c3,
+	0x21f143,
+	0x2028c3,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x2e4084,
+	0x21f143,
+	0x29f085,
+	0x277a04,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x200ec2,
+	0x2109c3,
+	0x21f143,
+	0x13dc3,
+	0x1568c05,
+	0xf2f86,
+	0xc1504,
+	0x12d506,
+	0x250b03,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x200ec2,
+	0x2109c3,
+	0x21f143,
+	0x213dc3,
+	0x202202,
+	0x206643,
+	0x232709,
+	0x21f603,
+	0x2bb789,
+	0x206543,
+	0x2109c3,
+	0x88a84,
+	0x21f143,
+	0x30a708,
+	0x238c07,
+	0x33d845,
+	0xa0cc6,
+	0x133f48,
+	0x13d849,
+	0x1e7e48,
+	0x1ce647,
+	0x10434a,
+	0x76acb,
+	0x12dc47,
+	0x43e08,
+	0x1e4c4a,
+	0xc8748,
+	0x172c9,
+	0x28907,
+	0x1b6307,
+	0x1bda88,
+	0xa0588,
+	0x46a4f,
+	0xadf45,
+	0xa0887,
+	0x3fa46,
+	0x1ec787,
+	0x122786,
+	0x42308,
+	0xfb006,
+	0x1d3807,
+	0x1458c9,
+	0x1b79c7,
+	0x1c7849,
+	0xce6c9,
+	0xd63c6,
+	0xd89c8,
+	0x134205,
+	0x7628a,
+	0xe5dc8,
+	0x5e943,
+	0xecbc8,
+	0x36287,
+	0xfe605,
+	0x162810,
+	0x4643,
+	0x1af247,
+	0x16205,
+	0x105088,
+	0xfff05,
+	0xcdc03,
+	0xfd948,
+	0x1d53c6,
+	0x5e249,
+	0xbe787,
+	0x1a264b,
+	0x118384,
+	0x119804,
+	0x120f8b,
+	0x121548,
+	0x122407,
+	0x14cb05,
+	0x206643,
+	0x21f603,
+	0x3d6403,
+	0x21f143,
+	0x243143,
+	0x205503,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0xaf8cb,
+	0x2000c2,
+	0x202202,
+	0x21f143,
+	0x3402,
+	0xec2,
+	0xf82,
+	0x1b9688,
+	0x132d09,
+	0x1c7448,
+	0x2202,
+	0x2000c2,
+	0x202202,
+	0x200382,
+	0x2005c2,
+	0x201e42,
+	0x2109c3,
+	0x12246,
+	0x2003c2,
+	0x1bc04,
+	0x2000c2,
+	0x250b03,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x200382,
+	0x205503,
+	0x211e43,
+	0x206543,
+	0x294744,
+	0x2109c3,
+	0x20f4c3,
+	0x21f143,
+	0x2150c4,
+	0x200f83,
+	0x205503,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21d783,
+	0x21f143,
+	0x206643,
+	0x214183,
+	0x20fd03,
+	0x205503,
+	0x2036c3,
+	0x2503c4,
+	0x296584,
+	0x321b86,
+	0x241f83,
+	0x2109c3,
+	0x1dd9cb,
+	0x21f143,
+	0x29f085,
+	0x2e0f47,
+	0x1d6c43,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x1bd404,
+	0x21f143,
+	0x19a43,
+	0x8db1300c,
+	0xdb903,
+	0x71bc7,
+	0x862c6,
+	0x1db74c,
+	0xd9807,
+	0x1d3f85,
+	0x210342,
+	0x25a503,
+	0x2d9c43,
+	0x250b03,
+	0x8ea06643,
+	0x211ac2,
+	0x21f603,
+	0x203b43,
+	0x205503,
+	0x2503c4,
+	0x33c683,
+	0x3bec03,
+	0x206543,
+	0x294744,
+	0x8ee024c2,
+	0x2109c3,
+	0x21f143,
+	0x2330c3,
+	0x206383,
+	0x210a43,
+	0x224b42,
+	0x200f83,
+	0x1b9688,
+	0x205503,
+	0x1c36c3,
+	0x22ffc4,
+	0x250b03,
+	0x202202,
+	0x206643,
+	0x2392c4,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x211e43,
+	0x221e44,
+	0x228f84,
+	0x2ee6c6,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x219683,
+	0x28e506,
+	0x3c90b,
+	0x34106,
+	0x436ca,
+	0x126b8a,
+	0x1b9688,
+	0x2204c4,
+	0x90206643,
+	0x34d284,
+	0x21f603,
+	0x212804,
+	0x205503,
+	0x325e03,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x1ccc3,
+	0x34ec4b,
+	0x3dfe4a,
+	0x3f244c,
+	0xf5848,
+	0x2000c2,
+	0x202202,
+	0x200382,
+	0x22f2c5,
+	0x2503c4,
+	0x200ec2,
+	0x206543,
+	0x228f84,
+	0x2018c2,
+	0x2003c2,
+	0x202ec2,
+	0x224b42,
+	0x50b03,
+	0x2dc2,
+	0x2da309,
+	0x27ad48,
+	0x239b49,
+	0x3a0c49,
+	0x203e8a,
+	0x21898a,
+	0x205202,
+	0x3547c2,
+	0x2202,
+	0x206643,
+	0x22dd42,
+	0x246946,
+	0x330c02,
+	0x41402,
+	0x200d82,
+	0x276e4e,
+	0x2195ce,
+	0x210947,
+	0x211742,
+	0x21f603,
+	0x205503,
+	0x20c7c2,
+	0x2005c2,
+	0xfc83,
+	0x2394cf,
+	0x246c82,
+	0x2c6007,
+	0x2cac07,
+	0x32efc7,
+	0x2ca4cc,
+	0x2e010c,
+	0x22fc84,
+	0x28374a,
+	0x219502,
+	0x206982,
+	0x2d0244,
+	0x200702,
+	0x237b42,
+	0x2e0344,
+	0x217702,
+	0x206b42,
+	0xf743,
+	0x2fb087,
+	0x2e4c85,
+	0x21a202,
+	0x31e584,
+	0x394cc2,
+	0x2f5088,
+	0x2109c3,
+	0x37f588,
+	0x201f82,
+	0x22fe45,
+	0x39e446,
+	0x21f143,
+	0x204f82,
+	0x305d87,
+	0x15c82,
+	0x24c4c5,
+	0x34d785,
+	0x2010c2,
+	0x23f602,
+	0x29430a,
+	0x27e7ca,
+	0x27ccc2,
+	0x2ad344,
+	0x202a42,
+	0x301e08,
+	0x218182,
+	0x3d2048,
+	0x1101,
+	0x31b347,
+	0x31c049,
+	0x24c542,
+	0x322f85,
+	0x275c45,
+	0x20f90b,
+	0x32210c,
+	0x22d408,
+	0x337888,
+	0x3d5502,
+	0x29e002,
+	0x2000c2,
+	0x1b9688,
+	0x202202,
+	0x206643,
+	0x200382,
+	0x2018c2,
+	0x2003c2,
+	0x21f143,
+	0x202ec2,
+	0x2000c2,
+	0x14cb05,
+	0x91602202,
+	0x113144,
+	0x3ab05,
+	0x92605503,
+	0xbd504,
+	0x20f743,
+	0x200ec2,
+	0x2109c3,
+	0x381cc3,
+	0x92a1f143,
+	0x303643,
+	0x2e19c6,
+	0x191445,
+	0x1613dc3,
+	0x1a2885,
+	0x14cb05,
+	0x14eecb,
+	0x1b9688,
+	0x91b3c4c8,
+	0x671c7,
+	0x91ed240a,
+	0xf9d4c,
+	0x1b9487,
+	0x1cf805,
+	0x92391889,
+	0x206cd,
+	0x3f842,
+	0x121b42,
+	0xc01,
+	0xfbc44,
+	0xb7d8a,
+	0x7e607,
+	0x13550f,
+	0x16f44,
+	0x16f83,
+	0x16f84,
+	0x6a08b,
+	0xa74d,
+	0x9320bb02,
+	0x93600b02,
+	0x93a028c2,
+	0x93e01942,
+	0x94203602,
+	0x94601782,
+	0xf08c7,
+	0x94a02202,
+	0x94e11802,
+	0x95223fc2,
+	0x956023c2,
+	0x2195c3,
+	0x1b7344,
+	0x95a58a88,
+	0x22df83,
+	0x95e13f42,
+	0x6b4c8,
+	0x96208782,
+	0x55dc7,
+	0x1b5407,
+	0x96600042,
+	0x96a03582,
+	0x96e00182,
+	0x97203042,
+	0x97604142,
+	0x97a005c2,
+	0x186f05,
+	0x2136c3,
+	0x3bf3c4,
+	0x97e00702,
+	0x98239842,
+	0x98604fc2,
+	0x93e0b,
+	0x98a05e42,
+	0x9924e442,
+	0x99600ec2,
+	0x99a01e42,
+	0x9b108,
+	0x99e1cf02,
+	0x9a201502,
+	0x9a603c42,
+	0x9aa7d202,
+	0x9ae024c2,
+	0x9b203702,
+	0x9b6018c2,
+	0x9ba1e342,
+	0x9be0abc2,
+	0x9c239e02,
+	0x11ff04,
+	0x3ccd03,
+	0x9c636d82,
+	0x9ca06782,
+	0x9ce0aec2,
+	0x9d2006c2,
+	0x9d6003c2,
+	0x9da06702,
+	0x102ac8,
+	0xafa47,
+	0x9de02b02,
+	0x9e202b42,
+	0x9e602ec2,
+	0x9ea06ec2,
+	0x167fcc,
+	0x9ee01b42,
+	0x9f2272c2,
+	0x9f616002,
+	0x9fa046c2,
+	0x9fe0c302,
+	0xa0204002,
+	0xa06059c2,
+	0xa0a03dc2,
+	0xa0e84e42,
+	0xa1285782,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x1a403,
+	0xd58c3,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x98f3c683,
+	0x21a403,
+	0x3cc4c4,
+	0x239a46,
+	0x30e543,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x3de009,
+	0x202dc2,
+	0x3dbe43,
+	0x2ce9c3,
+	0x33b705,
+	0x203b43,
+	0x33c683,
+	0x21a403,
+	0x2eddc3,
+	0x240b83,
+	0x221649,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0x202dc2,
+	0x202dc2,
+	0x33c683,
+	0x21a403,
+	0xa1a06643,
+	0x21f603,
+	0x3a0e83,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x1b9688,
+	0x202202,
+	0x206643,
+	0x2109c3,
+	0x21f143,
+	0x14b742,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0xa2500dc2,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0xcc1,
+	0x204884,
+	0x266483,
+	0x202202,
+	0x206643,
+	0x3a3183,
+	0x21f603,
+	0x2554c4,
+	0x3d6403,
+	0x205503,
+	0x2503c4,
+	0x211e43,
+	0x206543,
+	0x2109c3,
+	0x21d783,
+	0x21f143,
+	0x235ec3,
+	0x237343,
+	0x33d845,
+	0x240b83,
+	0x200f83,
+	0x882,
+	0x202202,
+	0x206643,
+	0x33c683,
+	0x2109c3,
+	0x21f143,
+	0x2000c2,
+	0x250b03,
+	0x1b9688,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x231386,
+	0x2503c4,
+	0x211e43,
+	0x294744,
+	0x2109c3,
+	0x21f143,
+	0x219683,
+	0x6204,
+	0x1547c2,
+	0x206643,
+	0x1a6c3,
+	0x21f603,
+	0xec2,
+	0x2109c3,
+	0x21f143,
+	0x72e84,
+	0x72544,
+	0xc642,
+	0x158a7c7,
+	0x7247,
+	0x206643,
+	0x34106,
+	0x21f603,
+	0x205503,
+	0xf7e06,
+	0x2109c3,
+	0x21f143,
+	0x3334c8,
+	0x3376c9,
+	0x348109,
+	0x350ac8,
+	0x3a0a88,
+	0x3a0a89,
+	0x32e0ca,
+	0x3649ca,
+	0x39b18a,
+	0x3a1a4a,
+	0x3dfe4a,
+	0x3ebacb,
+	0x24144d,
+	0x242a0f,
+	0x246150,
+	0x36894d,
+	0x38618c,
+	0x3a178b,
+	0x1784c7,
+	0x13098e,
+	0x13530a,
+	0x1373c9,
+	0x148109,
+	0x167709,
+	0x16794a,
+	0x171749,
+	0x1724c9,
+	0x172fcb,
+	0x6208,
+	0x100c08,
+	0x1709,
+	0x1495607,
+	0xe3dc5,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x1f143,
+	0x2000c2,
+	0x3be445,
+	0x206b03,
+	0xa6a02202,
+	0x21f603,
+	0x205503,
+	0x3907c7,
+	0x2721c3,
+	0x206543,
+	0x2109c3,
+	0x22b643,
+	0x20f4c3,
+	0x2034c3,
+	0x21d783,
+	0x21f143,
+	0x3a6386,
+	0x23d942,
+	0x200f83,
+	0x1b9688,
+	0x2000c2,
+	0x250b03,
+	0x202202,
+	0x206643,
+	0x21f603,
+	0x205503,
+	0x2503c4,
+	0x206543,
+	0x2109c3,
+	0x21f143,
+	0x213dc3,
+	0x7247,
+	0xd842,
+	0x13ad44,
+	0x1544746,
+	0x2000c2,
+	0x202202,
+	0x205503,
+	0x206543,
+	0x21f143,
+}
+
+// children is the list of nodes' children, the parent's wildcard bit and the
+// parent's node type. If a node has no children then their children index
+// will be in the range [0, 6), depending on the wildcard bit and node type.
+//
+// The layout within the uint32, from MSB to LSB, is:
+//	[ 1 bits] unused
+//	[ 1 bits] wildcard bit
+//	[ 2 bits] node type
+//	[14 bits] high nodes index (exclusive) of children
+//	[14 bits] low nodes index (inclusive) of children
+var children = [...]uint32{
+	0x0,
+	0x10000000,
+	0x20000000,
+	0x40000000,
+	0x50000000,
+	0x60000000,
+	0x179c5e0,
+	0x17a05e7,
+	0x17a45e8,
+	0x17c45e9,
+	0x191c5f1,
+	0x1930647,
+	0x194464c,
+	0x1958651,
+	0x1974656,
+	0x199865d,
+	0x19b0666,
+	0x1a0066c,
+	0x1a04680,
+	0x1a3c681,
+	0x1a4068f,
+	0x1a58690,
+	0x1a5c696,
+	0x1a60697,
+	0x1aa4698,
+	0x1aa86a9,
+	0x1aac6aa,
+	0x21ab06ab,
+	0x61ab86ac,
+	0x21ac06ae,
+	0x1b086b0,
+	0x1b146c2,
+	0x21b186c5,
+	0x1b3c6c6,
+	0x1b406cf,
+	0x1b546d0,
+	0x1b586d5,
+	0x1b786d6,
+	0x1ba86de,
+	0x1bc86ea,
+	0x1bd06f2,
+	0x1bf86f4,
+	0x1c146fe,
+	0x21c18705,
+	0x21c1c706,
+	0x1c20707,
+	0x1cb8708,
+	0x1ccc72e,
+	0x1ce0733,
+	0x1d18738,
+	0x1d28746,
+	0x1d3c74a,
+	0x1d5474f,
+	0x1df8755,
+	0x202c77e,
+	0x203480b,
+	0x2203880d,
+	0x2203c80e,
+	0x20a880f,
+	0x211482a,
+	0x212c845,
+	0x214084b,
+	0x2144850,
+	0x2148851,
+	0x2150852,
+	0x2168854,
+	0x216c85a,
+	0x218885b,
+	0x21dc862,
+	0x21e0877,
+	0x221e4878,
+	0x2208879,
+	0x2220c882,
+	0x2210883,
+	0x2214884,
+	0x2244885,
+	0x62248891,
+	0x22250892,
+	0x22254894,
+	0x2298895,
+	0x6229c8a6,
+	0x22b08a7,
+	0x23108ac,
+	0x223148c4,
+	0x223188c5,
+	0x223208c6,
+	0x223248c8,
+	0x223288c9,
+	0x232c8ca,
+	0x23348cb,
+	0x23388cd,
+	0x223448ce,
+	0x2234c8d1,
+	0x235c8d3,
+	0x236c8d7,
+	0x24208db,
+	0x2424908,
+	0x22434909,
+	0x2243890d,
+	0x2244090e,
+	0x249c910,
+	0x24a0927,
+	0x24a4928,
+	0x24a8929,
+	0x2a9c92a,
+	0x2aa0aa7,
+	0x22b48aa8,
+	0x22b4cad2,
+	0x22b50ad3,
+	0x22b5cad4,
+	0x22b60ad7,
+	0x22b6cad8,
+	0x22b70adb,
+	0x22b74adc,
+	0x22b78add,
+	0x22b7cade,
+	0x22b80adf,
+	0x22b8cae0,
+	0x22b90ae3,
+	0x22b9cae4,
+	0x22ba0ae7,
+	0x22ba4ae8,
+	0x22ba8ae9,
+	0x22bb4aea,
+	0x22bb8aed,
+	0x22bc4aee,
+	0x22bc8af1,
+	0x22bccaf2,
+	0x22bd0af3,
+	0x2bd4af4,
+	0x22bd8af5,
+	0x22be4af6,
+	0x22be8af9,
+	0x2becafa,
+	0x2bf4afb,
+	0x62c00afd,
+	0x22c08b00,
+	0x2c4cb02,
+	0x22c6cb13,
+	0x22c70b1b,
+	0x22c74b1c,
+	0x22c7cb1d,
+	0x22c84b1f,
+	0x22c88b21,
+	0x22c8cb22,
+	0x22c94b23,
+	0x22c98b25,
+	0x22c9cb26,
+	0x22ca0b27,
+	0x2ca4b28,
+	0x22cd0b29,
+	0x22cd4b34,
+	0x22cd8b35,
+	0x2cdcb36,
+	0x22ce0b37,
+	0x22ce4b38,
+	0x22cf0b39,
+	0x22cf4b3c,
+	0x2cf8b3d,
+	0x2d00b3e,
+	0x2d0cb40,
+	0x2d14b43,
+	0x2d30b45,
+	0x2d48b4c,
+	0x2d60b52,
+	0x2d70b58,
+	0x2d7cb5c,
+	0x2db0b5f,
+	0x2db8b6c,
+	0x22dbcb6e,
+	0x2dd4b6f,
+	0x22ddcb75,
+	0x22de0b77,
+	0x22de8b78,
+	0x2ef8b7a,
+	0x22efcbbe,
+	0x2f04bbf,
+	0x2f08bc1,
+	0x22f0cbc2,
+	0x22f10bc3,
+	0x22f14bc4,
+	0x2f18bc5,
+	0x2f64bc6,
+	0x2f68bd9,
+	0x2f6cbda,
+	0x2f88bdb,
+	0x2f9cbe2,
+	0x2fc4be7,
+	0x2fecbf1,
+	0x2ff0bfb,
+	0x62ff4bfc,
+	0x3024bfd,
+	0x3028c09,
+	0x2302cc0a,
+	0x3030c0b,
+	0x3058c0c,
+	0x305cc16,
+	0x3080c17,
+	0x3084c20,
+	0x309cc21,
+	0x30a0c27,
+	0x30a4c28,
+	0x30c4c29,
+	0x30e4c31,
+	0x230e8c39,
+	0x30ecc3a,
+	0x230f0c3b,
+	0x30f4c3c,
+	0x30f8c3d,
+	0x30fcc3e,
+	0x3100c3f,
+	0x3120c40,
+	0x23124c48,
+	0x2312cc49,
+	0x3130c4b,
+	0x3158c4c,
+	0x316cc56,
+	0x31ecc5b,
+	0x31f4c7b,
+	0x31f8c7d,
+	0x3214c7e,
+	0x322cc85,
+	0x3230c8b,
+	0x3244c8c,
+	0x325cc91,
+	0x3278c97,
+	0x3290c9e,
+	0x329cca4,
+	0x32b8ca7,
+	0x32d0cae,
+	0x32d4cb4,
+	0x32fccb5,
+	0x331ccbf,
+	0x3338cc7,
+	0x333ccce,
+	0x33a0ccf,
+	0x33bcce8,
+	0x33e4cef,
+	0x33e8cf9,
+	0x3400cfa,
+	0x3444d00,
+	0x34c4d11,
+	0x3504d31,
+	0x3508d41,
+	0x350cd42,
+	0x3518d43,
+	0x3538d46,
+	0x3544d4e,
+	0x3564d51,
+	0x356cd59,
+	0x35b0d5b,
+	0x3604d6c,
+	0x3608d81,
+	0x371cd82,
+	0x23724dc7,
+	0x23728dc9,
+	0x2372cdca,
+	0x23730dcb,
+	0x23734dcc,
+	0x23738dcd,
+	0x2373cdce,
+	0x23740dcf,
+	0x3744dd0,
+	0x3748dd1,
+	0x2374cdd2,
+	0x2375cdd3,
+	0x23764dd7,
+	0x2376cdd9,
+	0x23770ddb,
+	0x23778ddc,
+	0x2377cdde,
+	0x23780ddf,
+	0x3798de0,
+	0x37bcde6,
+	0x37dcdef,
+	0x3e54df7,
+	0x23e58f95,
+	0x23e5cf96,
+	0x23e60f97,
+	0x23e64f98,
+	0x3e74f99,
+	0x3e94f9d,
+	0x4054fa5,
+	0x4125015,
+	0x4195049,
+	0x41ed065,
+	0x42d507b,
+	0x432d0b5,
+	0x43690cb,
+	0x44650da,
+	0x4531119,
+	0x45c914c,
+	0x4659172,
+	0x46bd196,
+	0x48f51af,
+	0x49ad23d,
+	0x4a7926b,
+	0x4ac529e,
+	0x4b4d2b1,
+	0x4b892d3,
+	0x4bd92e2,
+	0x4c512f6,
+	0x64c55314,
+	0x64c59315,
+	0x64c5d316,
+	0x4cd9317,
+	0x4d35336,
+	0x4db134d,
+	0x4e2936c,
+	0x4ea938a,
+	0x4f153aa,
+	0x50413c5,
+	0x5099410,
+	0x6509d426,
+	0x5135427,
+	0x513d44d,
+	0x2514144f,
+	0x51c9450,
+	0x5215472,
+	0x527d485,
+	0x532549f,
+	0x53ed4c9,
+	0x54554fb,
+	0x5569515,
+	0x6556d55a,
+	0x6557155b,
+	0x55cd55c,
+	0x5629573,
+	0x56b958a,
+	0x57355ae,
+	0x57795cd,
+	0x585d5de,
+	0x5891617,
+	0x58f1624,
+	0x596563c,
+	0x59ed659,
+	0x5a2d67b,
+	0x5a9d68b,
+	0x65aa16a7,
+	0x5ac56a8,
+	0x5ac96b1,
+	0x5af96b2,
+	0x5b156be,
+	0x5b596c5,
+	0x5b696d6,
+	0x5b816da,
+	0x5bf96e0,
+	0x5c016fe,
+	0x5c1d700,
+	0x5c31707,
+	0x5c5170c,
+	0x25c55714,
+	0x5c7d715,
+	0x5c8171f,
+	0x5c89720,
+	0x5c9d722,
+	0x5cb9727,
+	0x5cc172e,
+	0x5ccd730,
+	0x5cd1733,
+	0x5d0d734,
+	0x5d11743,
+	0x5d19744,
+	0x5d2d746,
+	0x5d5574b,
+	0x5d5d755,
+	0x5d61757,
+	0x5d85758,
+	0x5da9761,
+	0x5dc176a,
+	0x5dc5770,
+	0x5dcd771,
+	0x5dd5773,
+	0x5de9775,
+	0x5ea177a,
+	0x5ea57a8,
+	0x5ead7a9,
+	0x5eb17ab,
+	0x5ed57ac,
+	0x5ef57b5,
+	0x5f117bd,
+	0x5f217c4,
+	0x5f357c8,
+	0x5f3d7cd,
+	0x5f457cf,
+	0x5f497d1,
+	0x5f517d2,
+	0x5f6d7d4,
+	0x5f7d7db,
+	0x5f817df,
+	0x5f9d7e0,
+	0x68257e7,
+	0x685da09,
+	0x6889a17,
+	0x68a1a22,
+	0x68c5a28,
+	0x68e5a31,
+	0x6929a39,
+	0x6931a4a,
+	0x26935a4c,
+	0x26939a4d,
+	0x6941a4e,
+	0x6b89a50,
+	0x26b8dae2,
+	0x26b91ae3,
+	0x6ba5ae4,
+	0x26ba9ae9,
+	0x6badaea,
+	0x6bb5aeb,
+	0x26bc1aed,
+	0x26bd1af0,
+	0x26bd9af4,
+	0x26be5af6,
+	0x6be9af9,
+	0x26bedafa,
+	0x26c05afb,
+	0x26c0db01,
+	0x26c15b03,
+	0x26c19b05,
+	0x26c21b06,
+	0x26c25b08,
+	0x6c29b09,
+	0x26c2db0a,
+	0x6c31b0b,
+	0x26c3db0c,
+	0x6c45b0f,
+	0x6c59b11,
+	0x6c5db16,
+	0x6c85b17,
+	0x6cc1b21,
+	0x6cc5b30,
+	0x6cfdb31,
+	0x6d1db3f,
+	0x7879b47,
+	0x787de1e,
+	0x7881e1f,
+	0x27885e20,
+	0x7889e21,
+	0x2788de22,
+	0x7891e23,
+	0x2789de24,
+	0x78a1e27,
+	0x78a5e28,
+	0x278a9e29,
+	0x78ade2a,
+	0x278b5e2b,
+	0x78b9e2d,
+	0x78bde2e,
+	0x278cde2f,
+	0x78d1e33,
+	0x78d5e34,
+	0x78d9e35,
+	0x78dde36,
+	0x278e1e37,
+	0x78e5e38,
+	0x78e9e39,
+	0x78ede3a,
+	0x78f1e3b,
+	0x278f9e3c,
+	0x78fde3e,
+	0x7901e3f,
+	0x7905e40,
+	0x27909e41,
+	0x790de42,
+	0x27915e43,
+	0x27919e45,
+	0x7935e46,
+	0x7945e4d,
+	0x7985e51,
+	0x7989e61,
+	0x79ade62,
+	0x79c1e6b,
+	0x79c5e70,
+	0x79d1e71,
+	0x7b99e74,
+	0x27b9dee6,
+	0x27ba5ee7,
+	0x27ba9ee9,
+	0x27badeea,
+	0x7bb5eeb,
+	0x7c91eed,
+	0x27c9df24,
+	0x27ca1f27,
+	0x27ca5f28,
+	0x27ca9f29,
+	0x7cadf2a,
+	0x7cd9f2b,
+	0x7cf1f36,
+	0x7cf5f3c,
+	0x7d15f3d,
+	0x7d21f45,
+	0x7d41f48,
+	0x7d45f50,
+	0x7d7df51,
+	0x8045f5f,
+	0x8102011,
+	0x8106040,
+	0x810a041,
+	0x811e042,
+	0x8122047,
+	0x8156048,
+	0x818e055,
+	0x28192063,
+	0x81ae064,
+	0x81d206b,
+	0x81d6074,
+	0x81f6075,
+	0x821207d,
+	0x8236084,
+	0x824608d,
+	0x824a091,
+	0x824e092,
+	0x828a093,
+	0x82960a2,
+	0x82be0a5,
+	0x282c20af,
+	0x835e0b0,
+	0x283620d7,
+	0x83660d8,
+	0x83760d9,
+	0x2837a0dd,
+	0x83920de,
+	0x83ae0e4,
+	0x83ce0eb,
+	0x83d20f3,
+	0x83e60f4,
+	0x83fa0f9,
+	0x83fe0fe,
+	0x84060ff,
+	0x840a101,
+	0x842a102,
+	0x84e210a,
+	0x284e6138,
+	0x84ea139,
+	0x850a13a,
+	0x8536142,
+	0x2854614d,
+	0x854a151,
+	0x8556152,
+	0x859a155,
+	0x859e166,
+	0x85b2167,
+	0x85d216c,
+	0x85ee174,
+	0x85f217b,
+	0x85fe17c,
+	0x861e17f,
+	0x864e187,
+	0x865a193,
+	0x872a196,
+	0x872e1ca,
+	0x87421cb,
+	0x87461d0,
+	0x875e1d1,
+	0x87621d7,
+	0x876e1d8,
+	0x877a1db,
+	0x877e1de,
+	0x87861df,
+	0x878a1e1,
+	0x87ae1e2,
+	0x87ea1eb,
+	0x87ee1fa,
+	0x880e1fb,
+	0x8846203,
+	0x8876211,
+	0x2887a21d,
+	0x887e21e,
+	0x888621f,
+	0x88de221,
+	0x88e2237,
+	0x88e6238,
+	0x88ea239,
+	0x892e23a,
+	0x893e24b,
+	0x897a24f,
+	0x897e25e,
+	0x89ae25f,
+	0x8afa26b,
+	0x8b1e2be,
+	0x8b5e2c7,
+	0x8b8e2d7,
+	0x28b962e3,
+	0x28b9a2e5,
+	0x28b9e2e6,
+	0x8ba62e7,
+	0x8bbe2e9,
+	0x8ce22ef,
+	0x8cee338,
+	0x8cfa33b,
+	0x8d0633e,
+	0x8d12341,
+	0x8d1e344,
+	0x8d2a347,
+	0x8d3634a,
+	0x8d4234d,
+	0x8d4e350,
+	0x8d5a353,
+	0x28d5e356,
+	0x8d6a357,
+	0x8d7635a,
+	0x8d8235d,
+	0x8d8a360,
+	0x8d96362,
+	0x8da2365,
+	0x8dae368,
+	0x8dba36b,
+	0x8dc636e,
+	0x8dd2371,
+	0x8dde374,
+	0x8dea377,
+	0x8df637a,
+	0x8e0237d,
+	0x8e0e380,
+	0x8e3a383,
+	0x8e4638e,
+	0x8e52391,
+	0x8e5e394,
+	0x8e6a397,
+	0x8e7639a,
+	0x8e7e39d,
+	0x8e8a39f,
+	0x8e963a2,
+	0x8ea23a5,
+	0x8eae3a8,
+	0x8eba3ab,
+	0x8ec63ae,
+	0x8ed23b1,
+	0x8ede3b4,
+	0x8eea3b7,
+	0x8ef63ba,
+	0x8f023bd,
+	0x8f0a3c0,
+	0x8f163c2,
+	0x8f1e3c5,
+	0x8f2a3c7,
+	0x8f363ca,
+	0x8f423cd,
+	0x8f4e3d0,
+	0x8f5a3d3,
+	0x8f663d6,
+	0x8f723d9,
+	0x8f7e3dc,
+	0x8f823df,
+	0x8f8e3e0,
+	0x8fa63e3,
+	0x8faa3e9,
+	0x8fba3ea,
+	0x8fda3ee,
+	0x8fde3f6,
+	0x902e3f7,
+	0x903240b,
+	0x904640c,
+	0x907a411,
+	0x909a41e,
+	0x909e426,
+	0x90a6427,
+	0x90ca429,
+	0x90e2432,
+	0x90fa438,
+	0x911243e,
+	0x913a444,
+	0x914e44e,
+	0x9166453,
+	0x916a459,
+	0x291b245a,
+	0x91b646c,
+	0x91e246d,
+	0x91f2478,
+	0x920647c,
+}
+
+// max children 669 (capacity 1023)
+// max text offset 32017 (capacity 32767)
+// max text length 36 (capacity 63)
+// max hi 9345 (capacity 16383)
+// max lo 9340 (capacity 16383)
diff --git a/vendor/golang.org/x/text/cases/cases.go b/vendor/golang.org/x/text/cases/cases.go
new file mode 100644
index 00000000..752cdf03
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/cases.go
@@ -0,0 +1,162 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run gen.go gen_trieval.go
+
+// Package cases provides general and language-specific case mappers.
+package cases // import "golang.org/x/text/cases"
+
+import (
+	"golang.org/x/text/language"
+	"golang.org/x/text/transform"
+)
+
+// References:
+// - Unicode Reference Manual Chapter 3.13, 4.2, and 5.18.
+// - https://www.unicode.org/reports/tr29/
+// - https://www.unicode.org/Public/6.3.0/ucd/CaseFolding.txt
+// - https://www.unicode.org/Public/6.3.0/ucd/SpecialCasing.txt
+// - https://www.unicode.org/Public/6.3.0/ucd/DerivedCoreProperties.txt
+// - https://www.unicode.org/Public/6.3.0/ucd/auxiliary/WordBreakProperty.txt
+// - https://www.unicode.org/Public/6.3.0/ucd/auxiliary/WordBreakTest.txt
+// - http://userguide.icu-project.org/transforms/casemappings
+
+// TODO:
+// - Case folding
+// - Wide and Narrow?
+// - Segmenter option for title casing.
+// - ASCII fast paths
+// - Encode Soft-Dotted property within trie somehow.
+
+// A Caser transforms given input to a certain case. It implements
+// transform.Transformer.
+//
+// A Caser may be stateful and should therefore not be shared between
+// goroutines.
+type Caser struct {
+	t transform.SpanningTransformer
+}
+
+// Bytes returns a new byte slice with the result of converting b to the case
+// form implemented by c.
+func (c Caser) Bytes(b []byte) []byte {
+	b, _, _ = transform.Bytes(c.t, b)
+	return b
+}
+
+// String returns a string with the result of transforming s to the case form
+// implemented by c.
+func (c Caser) String(s string) string {
+	s, _, _ = transform.String(c.t, s)
+	return s
+}
+
+// Reset resets the Caser to be reused for new input after a previous call to
+// Transform.
+func (c Caser) Reset() { c.t.Reset() }
+
+// Transform implements the transform.Transformer interface and transforms the
+// given input to the case form implemented by c.
+func (c Caser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+	return c.t.Transform(dst, src, atEOF)
+}
+
+// Span implements the transform.SpanningTransformer interface.
+func (c Caser) Span(src []byte, atEOF bool) (n int, err error) {
+	return c.t.Span(src, atEOF)
+}
+
+// Upper returns a Caser for language-specific uppercasing.
+func Upper(t language.Tag, opts ...Option) Caser {
+	return Caser{makeUpper(t, getOpts(opts...))}
+}
+
+// Lower returns a Caser for language-specific lowercasing.
+func Lower(t language.Tag, opts ...Option) Caser {
+	return Caser{makeLower(t, getOpts(opts...))}
+}
+
+// Title returns a Caser for language-specific title casing. It uses an
+// approximation of the default Unicode Word Break algorithm.
+func Title(t language.Tag, opts ...Option) Caser {
+	return Caser{makeTitle(t, getOpts(opts...))}
+}
+
+// Fold returns a Caser that implements Unicode case folding. The returned Caser
+// is stateless and safe to use concurrently by multiple goroutines.
+//
+// Case folding does not normalize the input and may not preserve a normal form.
+// Use the collate or search package for more convenient and linguistically
+// sound comparisons. Use golang.org/x/text/secure/precis for string comparisons
+// where security aspects are a concern.
+func Fold(opts ...Option) Caser {
+	return Caser{makeFold(getOpts(opts...))}
+}
+
+// An Option is used to modify the behavior of a Caser.
+type Option func(o options) options
+
+// TODO: consider these options to take a boolean as well, like FinalSigma.
+// The advantage of using this approach is that other providers of a lower-case
+// algorithm could set different defaults by prefixing a user-provided slice
+// of options with their own. This is handy, for instance, for the precis
+// package which would override the default to not handle the Greek final sigma.
+
+var (
+	// NoLower disables the lowercasing of non-leading letters for a title
+	// caser.
+	NoLower Option = noLower
+
+	// Compact omits mappings in case folding for characters that would grow the
+	// input. (Unimplemented.)
+	Compact Option = compact
+)
+
+// TODO: option to preserve a normal form, if applicable?
+
+type options struct {
+	noLower bool
+	simple  bool
+
+	// TODO: segmenter, max ignorable, alternative versions, etc.
+
+	ignoreFinalSigma bool
+}
+
+func getOpts(o ...Option) (res options) {
+	for _, f := range o {
+		res = f(res)
+	}
+	return
+}
+
+func noLower(o options) options {
+	o.noLower = true
+	return o
+}
+
+func compact(o options) options {
+	o.simple = true
+	return o
+}
+
+// HandleFinalSigma specifies whether the special handling of Greek final sigma
+// should be enabled. Unicode prescribes handling the Greek final sigma for all
+// locales, but standards like IDNA and PRECIS override this default.
+func HandleFinalSigma(enable bool) Option {
+	if enable {
+		return handleFinalSigma
+	}
+	return ignoreFinalSigma
+}
+
+func ignoreFinalSigma(o options) options {
+	o.ignoreFinalSigma = true
+	return o
+}
+
+func handleFinalSigma(o options) options {
+	o.ignoreFinalSigma = false
+	return o
+}
diff --git a/vendor/golang.org/x/text/cases/context.go b/vendor/golang.org/x/text/cases/context.go
new file mode 100644
index 00000000..e9aa9e19
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/context.go
@@ -0,0 +1,376 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cases
+
+import "golang.org/x/text/transform"
+
+// A context is used for iterating over source bytes, fetching case info and
+// writing to a destination buffer.
+//
+// Casing operations may need more than one rune of context to decide how a rune
+// should be cased. Casing implementations should call checkpoint on context
+// whenever it is known to be safe to return the runes processed so far.
+//
+// It is recommended for implementations to not allow for more than 30 case
+// ignorables as lookahead (analogous to the limit in norm) and to use state if
+// unbounded lookahead is needed for cased runes.
+type context struct {
+	dst, src []byte
+	atEOF    bool
+
+	pDst int // pDst points past the last written rune in dst.
+	pSrc int // pSrc points to the start of the currently scanned rune.
+
+	// checkpoints safe to return in Transform, where nDst <= pDst and nSrc <= pSrc.
+	nDst, nSrc int
+	err        error
+
+	sz   int  // size of current rune
+	info info // case information of currently scanned rune
+
+	// State preserved across calls to Transform.
+	isMidWord bool // false if next cased letter needs to be title-cased.
+}
+
+func (c *context) Reset() {
+	c.isMidWord = false
+}
+
+// ret returns the return values for the Transform method. It checks whether
+// there were insufficient bytes in src to complete and introduces an error
+// accordingly, if necessary.
+func (c *context) ret() (nDst, nSrc int, err error) {
+	if c.err != nil || c.nSrc == len(c.src) {
+		return c.nDst, c.nSrc, c.err
+	}
+	// This point is only reached by mappers if there was no short destination
+	// buffer. This means that the source buffer was exhausted and that c.sz was
+	// set to 0 by next.
+	if c.atEOF && c.pSrc == len(c.src) {
+		return c.pDst, c.pSrc, nil
+	}
+	return c.nDst, c.nSrc, transform.ErrShortSrc
+}
+
+// retSpan returns the return values for the Span method. It checks whether
+// there were insufficient bytes in src to complete and introduces an error
+// accordingly, if necessary.
+func (c *context) retSpan() (n int, err error) {
+	_, nSrc, err := c.ret()
+	return nSrc, err
+}
+
+// checkpoint sets the return value buffer points for Transform to the current
+// positions.
+func (c *context) checkpoint() {
+	if c.err == nil {
+		c.nDst, c.nSrc = c.pDst, c.pSrc+c.sz
+	}
+}
+
+// unreadRune causes the last rune read by next to be reread on the next
+// invocation of next. Only one unreadRune may be called after a call to next.
+func (c *context) unreadRune() {
+	c.sz = 0
+}
+
+func (c *context) next() bool {
+	c.pSrc += c.sz
+	if c.pSrc == len(c.src) || c.err != nil {
+		c.info, c.sz = 0, 0
+		return false
+	}
+	v, sz := trie.lookup(c.src[c.pSrc:])
+	c.info, c.sz = info(v), sz
+	if c.sz == 0 {
+		if c.atEOF {
+			// A zero size means we have an incomplete rune. If we are atEOF,
+			// this means it is an illegal rune, which we will consume one
+			// byte at a time.
+			c.sz = 1
+		} else {
+			c.err = transform.ErrShortSrc
+			return false
+		}
+	}
+	return true
+}
+
+// writeBytes adds bytes to dst.
+func (c *context) writeBytes(b []byte) bool {
+	if len(c.dst)-c.pDst < len(b) {
+		c.err = transform.ErrShortDst
+		return false
+	}
+	// This loop is faster than using copy.
+	for _, ch := range b {
+		c.dst[c.pDst] = ch
+		c.pDst++
+	}
+	return true
+}
+
+// writeString writes the given string to dst.
+func (c *context) writeString(s string) bool {
+	if len(c.dst)-c.pDst < len(s) {
+		c.err = transform.ErrShortDst
+		return false
+	}
+	// This loop is faster than using copy.
+	for i := 0; i < len(s); i++ {
+		c.dst[c.pDst] = s[i]
+		c.pDst++
+	}
+	return true
+}
+
+// copy writes the current rune to dst.
+func (c *context) copy() bool {
+	return c.writeBytes(c.src[c.pSrc : c.pSrc+c.sz])
+}
+
+// copyXOR copies the current rune to dst and modifies it by applying the XOR
+// pattern of the case info. It is the responsibility of the caller to ensure
+// that this is a rune with a XOR pattern defined.
+func (c *context) copyXOR() bool {
+	if !c.copy() {
+		return false
+	}
+	if c.info&xorIndexBit == 0 {
+		// Fast path for 6-bit XOR pattern, which covers most cases.
+		c.dst[c.pDst-1] ^= byte(c.info >> xorShift)
+	} else {
+		// Interpret XOR bits as an index.
+		// TODO: test performance for unrolling this loop. Verify that we have
+		// at least two bytes and at most three.
+		idx := c.info >> xorShift
+		for p := c.pDst - 1; ; p-- {
+			c.dst[p] ^= xorData[idx]
+			idx--
+			if xorData[idx] == 0 {
+				break
+			}
+		}
+	}
+	return true
+}
+
+// hasPrefix returns true if src[pSrc:] starts with the given string.
+func (c *context) hasPrefix(s string) bool {
+	b := c.src[c.pSrc:]
+	if len(b) < len(s) {
+		return false
+	}
+	for i, c := range b[:len(s)] {
+		if c != s[i] {
+			return false
+		}
+	}
+	return true
+}
+
+// caseType returns an info with only the case bits, normalized to either
+// cLower, cUpper, cTitle or cUncased.
+func (c *context) caseType() info {
+	cm := c.info & 0x7
+	if cm < 4 {
+		return cm
+	}
+	if cm >= cXORCase {
+		// xor the last bit of the rune with the case type bits.
+		b := c.src[c.pSrc+c.sz-1]
+		return info(b&1) ^ cm&0x3
+	}
+	if cm == cIgnorableCased {
+		return cLower
+	}
+	return cUncased
+}
+
+// lower writes the lowercase version of the current rune to dst.
+func lower(c *context) bool {
+	ct := c.caseType()
+	if c.info&hasMappingMask == 0 || ct == cLower {
+		return c.copy()
+	}
+	if c.info&exceptionBit == 0 {
+		return c.copyXOR()
+	}
+	e := exceptions[c.info>>exceptionShift:]
+	offset := 2 + e[0]&lengthMask // size of header + fold string
+	if nLower := (e[1] >> lengthBits) & lengthMask; nLower != noChange {
+		return c.writeString(e[offset : offset+nLower])
+	}
+	return c.copy()
+}
+
+func isLower(c *context) bool {
+	ct := c.caseType()
+	if c.info&hasMappingMask == 0 || ct == cLower {
+		return true
+	}
+	if c.info&exceptionBit == 0 {
+		c.err = transform.ErrEndOfSpan
+		return false
+	}
+	e := exceptions[c.info>>exceptionShift:]
+	if nLower := (e[1] >> lengthBits) & lengthMask; nLower != noChange {
+		c.err = transform.ErrEndOfSpan
+		return false
+	}
+	return true
+}
+
+// upper writes the uppercase version of the current rune to dst.
+func upper(c *context) bool {
+	ct := c.caseType()
+	if c.info&hasMappingMask == 0 || ct == cUpper {
+		return c.copy()
+	}
+	if c.info&exceptionBit == 0 {
+		return c.copyXOR()
+	}
+	e := exceptions[c.info>>exceptionShift:]
+	offset := 2 + e[0]&lengthMask // size of header + fold string
+	// Get length of first special case mapping.
+	n := (e[1] >> lengthBits) & lengthMask
+	if ct == cTitle {
+		// The first special case mapping is for lower. Set n to the second.
+		if n == noChange {
+			n = 0
+		}
+		n, e = e[1]&lengthMask, e[n:]
+	}
+	if n != noChange {
+		return c.writeString(e[offset : offset+n])
+	}
+	return c.copy()
+}
+
+// isUpper writes the isUppercase version of the current rune to dst.
+func isUpper(c *context) bool {
+	ct := c.caseType()
+	if c.info&hasMappingMask == 0 || ct == cUpper {
+		return true
+	}
+	if c.info&exceptionBit == 0 {
+		c.err = transform.ErrEndOfSpan
+		return false
+	}
+	e := exceptions[c.info>>exceptionShift:]
+	// Get length of first special case mapping.
+	n := (e[1] >> lengthBits) & lengthMask
+	if ct == cTitle {
+		n = e[1] & lengthMask
+	}
+	if n != noChange {
+		c.err = transform.ErrEndOfSpan
+		return false
+	}
+	return true
+}
+
+// title writes the title case version of the current rune to dst.
+func title(c *context) bool {
+	ct := c.caseType()
+	if c.info&hasMappingMask == 0 || ct == cTitle {
+		return c.copy()
+	}
+	if c.info&exceptionBit == 0 {
+		if ct == cLower {
+			return c.copyXOR()
+		}
+		return c.copy()
+	}
+	// Get the exception data.
+	e := exceptions[c.info>>exceptionShift:]
+	offset := 2 + e[0]&lengthMask // size of header + fold string
+
+	nFirst := (e[1] >> lengthBits) & lengthMask
+	if nTitle := e[1] & lengthMask; nTitle != noChange {
+		if nFirst != noChange {
+			e = e[nFirst:]
+		}
+		return c.writeString(e[offset : offset+nTitle])
+	}
+	if ct == cLower && nFirst != noChange {
+		// Use the uppercase version instead.
+		return c.writeString(e[offset : offset+nFirst])
+	}
+	// Already in correct case.
+	return c.copy()
+}
+
+// isTitle reports whether the current rune is in title case.
+func isTitle(c *context) bool {
+	ct := c.caseType()
+	if c.info&hasMappingMask == 0 || ct == cTitle {
+		return true
+	}
+	if c.info&exceptionBit == 0 {
+		if ct == cLower {
+			c.err = transform.ErrEndOfSpan
+			return false
+		}
+		return true
+	}
+	// Get the exception data.
+	e := exceptions[c.info>>exceptionShift:]
+	if nTitle := e[1] & lengthMask; nTitle != noChange {
+		c.err = transform.ErrEndOfSpan
+		return false
+	}
+	nFirst := (e[1] >> lengthBits) & lengthMask
+	if ct == cLower && nFirst != noChange {
+		c.err = transform.ErrEndOfSpan
+		return false
+	}
+	return true
+}
+
+// foldFull writes the foldFull version of the current rune to dst.
+func foldFull(c *context) bool {
+	if c.info&hasMappingMask == 0 {
+		return c.copy()
+	}
+	ct := c.caseType()
+	if c.info&exceptionBit == 0 {
+		if ct != cLower || c.info&inverseFoldBit != 0 {
+			return c.copyXOR()
+		}
+		return c.copy()
+	}
+	e := exceptions[c.info>>exceptionShift:]
+	n := e[0] & lengthMask
+	if n == 0 {
+		if ct == cLower {
+			return c.copy()
+		}
+		n = (e[1] >> lengthBits) & lengthMask
+	}
+	return c.writeString(e[2 : 2+n])
+}
+
+// isFoldFull reports whether the current run is mapped to foldFull
+func isFoldFull(c *context) bool {
+	if c.info&hasMappingMask == 0 {
+		return true
+	}
+	ct := c.caseType()
+	if c.info&exceptionBit == 0 {
+		if ct != cLower || c.info&inverseFoldBit != 0 {
+			c.err = transform.ErrEndOfSpan
+			return false
+		}
+		return true
+	}
+	e := exceptions[c.info>>exceptionShift:]
+	n := e[0] & lengthMask
+	if n == 0 && ct == cLower {
+		return true
+	}
+	c.err = transform.ErrEndOfSpan
+	return false
+}
diff --git a/vendor/golang.org/x/text/cases/fold.go b/vendor/golang.org/x/text/cases/fold.go
new file mode 100644
index 00000000..85cc434f
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/fold.go
@@ -0,0 +1,34 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cases
+
+import "golang.org/x/text/transform"
+
+type caseFolder struct{ transform.NopResetter }
+
+// caseFolder implements the Transformer interface for doing case folding.
+func (t *caseFolder) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+	c := context{dst: dst, src: src, atEOF: atEOF}
+	for c.next() {
+		foldFull(&c)
+		c.checkpoint()
+	}
+	return c.ret()
+}
+
+func (t *caseFolder) Span(src []byte, atEOF bool) (n int, err error) {
+	c := context{src: src, atEOF: atEOF}
+	for c.next() && isFoldFull(&c) {
+		c.checkpoint()
+	}
+	return c.retSpan()
+}
+
+func makeFold(o options) transform.SpanningTransformer {
+	// TODO: Special case folding, through option Language, Special/Turkic, or
+	// both.
+	// TODO: Implement Compact options.
+	return &caseFolder{}
+}
diff --git a/vendor/golang.org/x/text/cases/icu.go b/vendor/golang.org/x/text/cases/icu.go
new file mode 100644
index 00000000..2dc84b39
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/icu.go
@@ -0,0 +1,62 @@
+// Copyright 2016 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build icu
+// +build icu
+
+package cases
+
+// Ideally these functions would be defined in a test file, but go test doesn't
+// allow CGO in tests. The build tag should ensure either way that these
+// functions will not end up in the package.
+
+// TODO: Ensure that the correct ICU version is set.
+
+/*
+#cgo LDFLAGS: -licui18n.57 -licuuc.57
+#include <stdlib.h>
+#include <unicode/ustring.h>
+#include <unicode/utypes.h>
+#include <unicode/localpointer.h>
+#include <unicode/ucasemap.h>
+*/
+import "C"
+
+import "unsafe"
+
+func doICU(tag, caser, input string) string {
+	err := C.UErrorCode(0)
+	loc := C.CString(tag)
+	cm := C.ucasemap_open(loc, C.uint32_t(0), &err)
+
+	buf := make([]byte, len(input)*4)
+	dst := (*C.char)(unsafe.Pointer(&buf[0]))
+	src := C.CString(input)
+
+	cn := C.int32_t(0)
+
+	switch caser {
+	case "fold":
+		cn = C.ucasemap_utf8FoldCase(cm,
+			dst, C.int32_t(len(buf)),
+			src, C.int32_t(len(input)),
+			&err)
+	case "lower":
+		cn = C.ucasemap_utf8ToLower(cm,
+			dst, C.int32_t(len(buf)),
+			src, C.int32_t(len(input)),
+			&err)
+	case "upper":
+		cn = C.ucasemap_utf8ToUpper(cm,
+			dst, C.int32_t(len(buf)),
+			src, C.int32_t(len(input)),
+			&err)
+	case "title":
+		cn = C.ucasemap_utf8ToTitle(cm,
+			dst, C.int32_t(len(buf)),
+			src, C.int32_t(len(input)),
+			&err)
+	}
+	return string(buf[:cn])
+}
diff --git a/vendor/golang.org/x/text/cases/info.go b/vendor/golang.org/x/text/cases/info.go
new file mode 100644
index 00000000..87a7c3e9
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/info.go
@@ -0,0 +1,82 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cases
+
+func (c info) cccVal() info {
+	if c&exceptionBit != 0 {
+		return info(exceptions[c>>exceptionShift]) & cccMask
+	}
+	return c & cccMask
+}
+
+func (c info) cccType() info {
+	ccc := c.cccVal()
+	if ccc <= cccZero {
+		return cccZero
+	}
+	return ccc
+}
+
+// TODO: Implement full Unicode breaking algorithm:
+// 1) Implement breaking in separate package.
+// 2) Use the breaker here.
+// 3) Compare table size and performance of using the more generic breaker.
+//
+// Note that we can extend the current algorithm to be much more accurate. This
+// only makes sense, though, if the performance and/or space penalty of using
+// the generic breaker is big. Extra data will only be needed for non-cased
+// runes, which means there are sufficient bits left in the caseType.
+// ICU prohibits breaking in such cases as well.
+
+// For the purpose of title casing we use an approximation of the Unicode Word
+// Breaking algorithm defined in Annex #29:
+// https://www.unicode.org/reports/tr29/#Default_Grapheme_Cluster_Table.
+//
+// For our approximation, we group the Word Break types into the following
+// categories, with associated rules:
+//
+// 1) Letter:
+//    ALetter, Hebrew_Letter, Numeric, ExtendNumLet, Extend, Format_FE, ZWJ.
+//    Rule: Never break between consecutive runes of this category.
+//
+// 2) Mid:
+//    MidLetter, MidNumLet, Single_Quote.
+//    (Cf. case-ignorable: MidLetter, MidNumLet, Single_Quote or cat is Mn,
+//    Me, Cf, Lm or Sk).
+//    Rule: Don't break between Letter and Mid, but break between two Mids.
+//
+// 3) Break:
+//    Any other category: NewLine, MidNum, CR, LF, Double_Quote, Katakana, and
+//    Other.
+//    These categories should always result in a break between two cased letters.
+//    Rule: Always break.
+//
+// Note 1: the Katakana and MidNum categories can, in esoteric cases, result in
+// preventing a break between two cased letters. For now we will ignore this
+// (e.g. [ALetter] [ExtendNumLet] [Katakana] [ExtendNumLet] [ALetter] and
+// [ALetter] [Numeric] [MidNum] [Numeric] [ALetter].)
+//
+// Note 2: the rule for Mid is very approximate, but works in most cases. To
+// improve, we could store the categories in the trie value and use a FA to
+// manage breaks. See TODO comment above.
+//
+// Note 3: according to the spec, it is possible for the Extend category to
+// introduce breaks between other categories grouped in Letter. However, this
+// is undesirable for our purposes. ICU prevents breaks in such cases as well.
+
+// isBreak returns whether this rune should introduce a break.
+func (c info) isBreak() bool {
+	return c.cccVal() == cccBreak
+}
+
+// isLetter returns whether the rune is of break type ALetter, Hebrew_Letter,
+// Numeric, ExtendNumLet, or Extend.
+func (c info) isLetter() bool {
+	ccc := c.cccVal()
+	if ccc == cccZero {
+		return !c.isCaseIgnorable()
+	}
+	return ccc != cccBreak
+}
diff --git a/vendor/golang.org/x/text/cases/map.go b/vendor/golang.org/x/text/cases/map.go
new file mode 100644
index 00000000..0f7c6a14
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/map.go
@@ -0,0 +1,816 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package cases
+
+// This file contains the definitions of case mappings for all supported
+// languages. The rules for the language-specific tailorings were taken and
+// modified from the CLDR transform definitions in common/transforms.
+
+import (
+	"strings"
+	"unicode"
+	"unicode/utf8"
+
+	"golang.org/x/text/internal"
+	"golang.org/x/text/language"
+	"golang.org/x/text/transform"
+	"golang.org/x/text/unicode/norm"
+)
+
+// A mapFunc takes a context set to the current rune and writes the mapped
+// version to the same context. It may advance the context to the next rune. It
+// returns whether a checkpoint is possible: whether the pDst bytes written to
+// dst so far won't need changing as we see more source bytes.
+type mapFunc func(*context) bool
+
+// A spanFunc takes a context set to the current rune and returns whether this
+// rune would be altered when written to the output. It may advance the context
+// to the next rune. It returns whether a checkpoint is possible.
+type spanFunc func(*context) bool
+
+// maxIgnorable defines the maximum number of ignorables to consider for
+// lookahead operations.
+const maxIgnorable = 30
+
+// supported lists the language tags for which we have tailorings.
+const supported = "und af az el lt nl tr"
+
+func init() {
+	tags := []language.Tag{}
+	for _, s := range strings.Split(supported, " ") {
+		tags = append(tags, language.MustParse(s))
+	}
+	matcher = internal.NewInheritanceMatcher(tags)
+	Supported = language.NewCoverage(tags)
+}
+
+var (
+	matcher *internal.InheritanceMatcher
+
+	Supported language.Coverage
+
+	// We keep the following lists separate, instead of having a single per-
+	// language struct, to give the compiler a chance to remove unused code.
+
+	// Some uppercase mappers are stateless, so we can precompute the
+	// Transformers and save a bit on runtime allocations.
+	upperFunc = []struct {
+		upper mapFunc
+		span  spanFunc
+	}{
+		{nil, nil},                  // und
+		{nil, nil},                  // af
+		{aztrUpper(upper), isUpper}, // az
+		{elUpper, noSpan},           // el
+		{ltUpper(upper), noSpan},    // lt
+		{nil, nil},                  // nl
+		{aztrUpper(upper), isUpper}, // tr
+	}
+
+	undUpper            transform.SpanningTransformer = &undUpperCaser{}
+	undLower            transform.SpanningTransformer = &undLowerCaser{}
+	undLowerIgnoreSigma transform.SpanningTransformer = &undLowerIgnoreSigmaCaser{}
+
+	lowerFunc = []mapFunc{
+		nil,       // und
+		nil,       // af
+		aztrLower, // az
+		nil,       // el
+		ltLower,   // lt
+		nil,       // nl
+		aztrLower, // tr
+	}
+
+	titleInfos = []struct {
+		title     mapFunc
+		lower     mapFunc
+		titleSpan spanFunc
+		rewrite   func(*context)
+	}{
+		{title, lower, isTitle, nil},                // und
+		{title, lower, isTitle, afnlRewrite},        // af
+		{aztrUpper(title), aztrLower, isTitle, nil}, // az
+		{title, lower, isTitle, nil},                // el
+		{ltUpper(title), ltLower, noSpan, nil},      // lt
+		{nlTitle, lower, nlTitleSpan, afnlRewrite},  // nl
+		{aztrUpper(title), aztrLower, isTitle, nil}, // tr
+	}
+)
+
+func makeUpper(t language.Tag, o options) transform.SpanningTransformer {
+	_, i, _ := matcher.Match(t)
+	f := upperFunc[i].upper
+	if f == nil {
+		return undUpper
+	}
+	return &simpleCaser{f: f, span: upperFunc[i].span}
+}
+
+func makeLower(t language.Tag, o options) transform.SpanningTransformer {
+	_, i, _ := matcher.Match(t)
+	f := lowerFunc[i]
+	if f == nil {
+		if o.ignoreFinalSigma {
+			return undLowerIgnoreSigma
+		}
+		return undLower
+	}
+	if o.ignoreFinalSigma {
+		return &simpleCaser{f: f, span: isLower}
+	}
+	return &lowerCaser{
+		first:   f,
+		midWord: finalSigma(f),
+	}
+}
+
+func makeTitle(t language.Tag, o options) transform.SpanningTransformer {
+	_, i, _ := matcher.Match(t)
+	x := &titleInfos[i]
+	lower := x.lower
+	if o.noLower {
+		lower = (*context).copy
+	} else if !o.ignoreFinalSigma {
+		lower = finalSigma(lower)
+	}
+	return &titleCaser{
+		title:     x.title,
+		lower:     lower,
+		titleSpan: x.titleSpan,
+		rewrite:   x.rewrite,
+	}
+}
+
+func noSpan(c *context) bool {
+	c.err = transform.ErrEndOfSpan
+	return false
+}
+
+// TODO: consider a similar special case for the fast majority lower case. This
+// is a bit more involved so will require some more precise benchmarking to
+// justify it.
+
+type undUpperCaser struct{ transform.NopResetter }
+
+// undUpperCaser implements the Transformer interface for doing an upper case
+// mapping for the root locale (und). It eliminates the need for an allocation
+// as it prevents escaping by not using function pointers.
+func (t undUpperCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+	c := context{dst: dst, src: src, atEOF: atEOF}
+	for c.next() {
+		upper(&c)
+		c.checkpoint()
+	}
+	return c.ret()
+}
+
+func (t undUpperCaser) Span(src []byte, atEOF bool) (n int, err error) {
+	c := context{src: src, atEOF: atEOF}
+	for c.next() && isUpper(&c) {
+		c.checkpoint()
+	}
+	return c.retSpan()
+}
+
+// undLowerIgnoreSigmaCaser implements the Transformer interface for doing
+// a lower case mapping for the root locale (und) ignoring final sigma
+// handling. This casing algorithm is used in some performance-critical packages
+// like secure/precis and x/net/http/idna, which warrants its special-casing.
+type undLowerIgnoreSigmaCaser struct{ transform.NopResetter }
+
+func (t undLowerIgnoreSigmaCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+	c := context{dst: dst, src: src, atEOF: atEOF}
+	for c.next() && lower(&c) {
+		c.checkpoint()
+	}
+	return c.ret()
+
+}
+
+// Span implements a generic lower-casing. This is possible as isLower works
+// for all lowercasing variants. All lowercase variants only vary in how they
+// transform a non-lowercase letter. They will never change an already lowercase
+// letter. In addition, there is no state.
+func (t undLowerIgnoreSigmaCaser) Span(src []byte, atEOF bool) (n int, err error) {
+	c := context{src: src, atEOF: atEOF}
+	for c.next() && isLower(&c) {
+		c.checkpoint()
+	}
+	return c.retSpan()
+}
+
+type simpleCaser struct {
+	context
+	f    mapFunc
+	span spanFunc
+}
+
+// simpleCaser implements the Transformer interface for doing a case operation
+// on a rune-by-rune basis.
+func (t *simpleCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+	c := context{dst: dst, src: src, atEOF: atEOF}
+	for c.next() && t.f(&c) {
+		c.checkpoint()
+	}
+	return c.ret()
+}
+
+func (t *simpleCaser) Span(src []byte, atEOF bool) (n int, err error) {
+	c := context{src: src, atEOF: atEOF}
+	for c.next() && t.span(&c) {
+		c.checkpoint()
+	}
+	return c.retSpan()
+}
+
+// undLowerCaser implements the Transformer interface for doing a lower case
+// mapping for the root locale (und) ignoring final sigma handling. This casing
+// algorithm is used in some performance-critical packages like secure/precis
+// and x/net/http/idna, which warrants its special-casing.
+type undLowerCaser struct{ transform.NopResetter }
+
+func (t undLowerCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+	c := context{dst: dst, src: src, atEOF: atEOF}
+
+	for isInterWord := true; c.next(); {
+		if isInterWord {
+			if c.info.isCased() {
+				if !lower(&c) {
+					break
+				}
+				isInterWord = false
+			} else if !c.copy() {
+				break
+			}
+		} else {
+			if c.info.isNotCasedAndNotCaseIgnorable() {
+				if !c.copy() {
+					break
+				}
+				isInterWord = true
+			} else if !c.hasPrefix("Σ") {
+				if !lower(&c) {
+					break
+				}
+			} else if !finalSigmaBody(&c) {
+				break
+			}
+		}
+		c.checkpoint()
+	}
+	return c.ret()
+}
+
+func (t undLowerCaser) Span(src []byte, atEOF bool) (n int, err error) {
+	c := context{src: src, atEOF: atEOF}
+	for c.next() && isLower(&c) {
+		c.checkpoint()
+	}
+	return c.retSpan()
+}
+
+// lowerCaser implements the Transformer interface. The default Unicode lower
+// casing requires different treatment for the first and subsequent characters
+// of a word, most notably to handle the Greek final Sigma.
+type lowerCaser struct {
+	undLowerIgnoreSigmaCaser
+
+	context
+
+	first, midWord mapFunc
+}
+
+func (t *lowerCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+	t.context = context{dst: dst, src: src, atEOF: atEOF}
+	c := &t.context
+
+	for isInterWord := true; c.next(); {
+		if isInterWord {
+			if c.info.isCased() {
+				if !t.first(c) {
+					break
+				}
+				isInterWord = false
+			} else if !c.copy() {
+				break
+			}
+		} else {
+			if c.info.isNotCasedAndNotCaseIgnorable() {
+				if !c.copy() {
+					break
+				}
+				isInterWord = true
+			} else if !t.midWord(c) {
+				break
+			}
+		}
+		c.checkpoint()
+	}
+	return c.ret()
+}
+
+// titleCaser implements the Transformer interface. Title casing algorithms
+// distinguish between the first letter of a word and subsequent letters of the
+// same word. It uses state to avoid requiring a potentially infinite lookahead.
+type titleCaser struct {
+	context
+
+	// rune mappings used by the actual casing algorithms.
+	title     mapFunc
+	lower     mapFunc
+	titleSpan spanFunc
+
+	rewrite func(*context)
+}
+
+// Transform implements the standard Unicode title case algorithm as defined in
+// Chapter 3 of The Unicode Standard:
+// toTitlecase(X): Find the word boundaries in X according to Unicode Standard
+// Annex #29, "Unicode Text Segmentation." For each word boundary, find the
+// first cased character F following the word boundary. If F exists, map F to
+// Titlecase_Mapping(F); then map all characters C between F and the following
+// word boundary to Lowercase_Mapping(C).
+func (t *titleCaser) Transform(dst, src []byte, atEOF bool) (nDst, nSrc int, err error) {
+	t.context = context{dst: dst, src: src, atEOF: atEOF, isMidWord: t.isMidWord}
+	c := &t.context
+
+	if !c.next() {
+		return c.ret()
+	}
+
+	for {
+		p := c.info
+		if t.rewrite != nil {
+			t.rewrite(c)
+		}
+
+		wasMid := p.isMid()
+		// Break out of this loop on failure to ensure we do not modify the
+		// state incorrectly.
+		if p.isCased() {
+			if !c.isMidWord {
+				if !t.title(c) {
+					break
+				}
+				c.isMidWord = true
+			} else if !t.lower(c) {
+				break
+			}
+		} else if !c.copy() {
+			break
+		} else if p.isBreak() {
+			c.isMidWord = false
+		}
+
+		// As we save the state of the transformer, it is safe to call
+		// checkpoint after any successful write.
+		if !(c.isMidWord && wasMid) {
+			c.checkpoint()
+		}
+
+		if !c.next() {
+			break
+		}
+		if wasMid && c.info.isMid() {
+			c.isMidWord = false
+		}
+	}
+	return c.ret()
+}
+
+func (t *titleCaser) Span(src []byte, atEOF bool) (n int, err error) {
+	t.context = context{src: src, atEOF: atEOF, isMidWord: t.isMidWord}
+	c := &t.context
+
+	if !c.next() {
+		return c.retSpan()
+	}
+
+	for {
+		p := c.info
+		if t.rewrite != nil {
+			t.rewrite(c)
+		}
+
+		wasMid := p.isMid()
+		// Break out of this loop on failure to ensure we do not modify the
+		// state incorrectly.
+		if p.isCased() {
+			if !c.isMidWord {
+				if !t.titleSpan(c) {
+					break
+				}
+				c.isMidWord = true
+			} else if !isLower(c) {
+				break
+			}
+		} else if p.isBreak() {
+			c.isMidWord = false
+		}
+		// As we save the state of the transformer, it is safe to call
+		// checkpoint after any successful write.
+		if !(c.isMidWord && wasMid) {
+			c.checkpoint()
+		}
+
+		if !c.next() {
+			break
+		}
+		if wasMid && c.info.isMid() {
+			c.isMidWord = false
+		}
+	}
+	return c.retSpan()
+}
+
+// finalSigma adds Greek final Sigma handing to another casing function. It
+// determines whether a lowercased sigma should be σ or ς, by looking ahead for
+// case-ignorables and a cased letters.
+func finalSigma(f mapFunc) mapFunc {
+	return func(c *context) bool {
+		if !c.hasPrefix("Σ") {
+			return f(c)
+		}
+		return finalSigmaBody(c)
+	}
+}
+
+func finalSigmaBody(c *context) bool {
+	// Current rune must be ∑.
+
+	// ::NFD();
+	// # 03A3; 03C2; 03A3; 03A3; Final_Sigma; # GREEK CAPITAL LETTER SIGMA
+	// Σ } [:case-ignorable:]* [:cased:] → σ;
+	// [:cased:] [:case-ignorable:]* { Σ → ς;
+	// ::Any-Lower;
+	// ::NFC();
+
+	p := c.pDst
+	c.writeString("ς")
+
+	// TODO: we should do this here, but right now this will never have an
+	// effect as this is called when the prefix is Sigma, whereas Dutch and
+	// Afrikaans only test for an apostrophe.
+	//
+	// if t.rewrite != nil {
+	// 	t.rewrite(c)
+	// }
+
+	// We need to do one more iteration after maxIgnorable, as a cased
+	// letter is not an ignorable and may modify the result.
+	wasMid := false
+	for i := 0; i < maxIgnorable+1; i++ {
+		if !c.next() {
+			return false
+		}
+		if !c.info.isCaseIgnorable() {
+			// All Midword runes are also case ignorable, so we are
+			// guaranteed to have a letter or word break here. As we are
+			// unreading the run, there is no need to unset c.isMidWord;
+			// the title caser will handle this.
+			if c.info.isCased() {
+				// p+1 is guaranteed to be in bounds: if writing ς was
+				// successful, p+1 will contain the second byte of ς. If not,
+				// this function will have returned after c.next returned false.
+				c.dst[p+1]++ // ς → σ
+			}
+			c.unreadRune()
+			return true
+		}
+		// A case ignorable may also introduce a word break, so we may need
+		// to continue searching even after detecting a break.
+		isMid := c.info.isMid()
+		if (wasMid && isMid) || c.info.isBreak() {
+			c.isMidWord = false
+		}
+		wasMid = isMid
+		c.copy()
+	}
+	return true
+}
+
+// finalSigmaSpan would be the same as isLower.
+
+// elUpper implements Greek upper casing, which entails removing a predefined
+// set of non-blocked modifiers. Note that these accents should not be removed
+// for title casing!
+// Example: "Οδός" -> "ΟΔΟΣ".
+func elUpper(c *context) bool {
+	// From CLDR:
+	// [:Greek:] [^[:ccc=Not_Reordered:][:ccc=Above:]]*? { [\u0313\u0314\u0301\u0300\u0306\u0342\u0308\u0304] → ;
+	// [:Greek:] [^[:ccc=Not_Reordered:][:ccc=Iota_Subscript:]]*? { \u0345 → ;
+
+	r, _ := utf8.DecodeRune(c.src[c.pSrc:])
+	oldPDst := c.pDst
+	if !upper(c) {
+		return false
+	}
+	if !unicode.Is(unicode.Greek, r) {
+		return true
+	}
+	i := 0
+	// Take the properties of the uppercased rune that is already written to the
+	// destination. This saves us the trouble of having to uppercase the
+	// decomposed rune again.
+	if b := norm.NFD.Properties(c.dst[oldPDst:]).Decomposition(); b != nil {
+		// Restore the destination position and process the decomposed rune.
+		r, sz := utf8.DecodeRune(b)
+		if r <= 0xFF { // See A.6.1
+			return true
+		}
+		c.pDst = oldPDst
+		// Insert the first rune and ignore the modifiers. See A.6.2.
+		c.writeBytes(b[:sz])
+		i = len(b[sz:]) / 2 // Greek modifiers are always of length 2.
+	}
+
+	for ; i < maxIgnorable && c.next(); i++ {
+		switch r, _ := utf8.DecodeRune(c.src[c.pSrc:]); r {
+		// Above and Iota Subscript
+		case 0x0300, // U+0300 COMBINING GRAVE ACCENT
+			0x0301, // U+0301 COMBINING ACUTE ACCENT
+			0x0304, // U+0304 COMBINING MACRON
+			0x0306, // U+0306 COMBINING BREVE
+			0x0308, // U+0308 COMBINING DIAERESIS
+			0x0313, // U+0313 COMBINING COMMA ABOVE
+			0x0314, // U+0314 COMBINING REVERSED COMMA ABOVE
+			0x0342, // U+0342 COMBINING GREEK PERISPOMENI
+			0x0345: // U+0345 COMBINING GREEK YPOGEGRAMMENI
+			// No-op. Gobble the modifier.
+
+		default:
+			switch v, _ := trie.lookup(c.src[c.pSrc:]); info(v).cccType() {
+			case cccZero:
+				c.unreadRune()
+				return true
+
+			// We don't need to test for IotaSubscript as the only rune that
+			// qualifies (U+0345) was already excluded in the switch statement
+			// above. See A.4.
+
+			case cccAbove:
+				return c.copy()
+			default:
+				// Some other modifier. We're still allowed to gobble Greek
+				// modifiers after this.
+				c.copy()
+			}
+		}
+	}
+	return i == maxIgnorable
+}
+
+// TODO: implement elUpperSpan (low-priority: complex and infrequent).
+
+func ltLower(c *context) bool {
+	// From CLDR:
+	// # Introduce an explicit dot above when lowercasing capital I's and J's
+	// # whenever there are more accents above.
+	// # (of the accents used in Lithuanian: grave, acute, tilde above, and ogonek)
+	// # 0049; 0069 0307; 0049; 0049; lt More_Above; # LATIN CAPITAL LETTER I
+	// # 004A; 006A 0307; 004A; 004A; lt More_Above; # LATIN CAPITAL LETTER J
+	// # 012E; 012F 0307; 012E; 012E; lt More_Above; # LATIN CAPITAL LETTER I WITH OGONEK
+	// # 00CC; 0069 0307 0300; 00CC; 00CC; lt; # LATIN CAPITAL LETTER I WITH GRAVE
+	// # 00CD; 0069 0307 0301; 00CD; 00CD; lt; # LATIN CAPITAL LETTER I WITH ACUTE
+	// # 0128; 0069 0307 0303; 0128; 0128; lt; # LATIN CAPITAL LETTER I WITH TILDE
+	// ::NFD();
+	// I } [^[:ccc=Not_Reordered:][:ccc=Above:]]* [:ccc=Above:] → i \u0307;
+	// J } [^[:ccc=Not_Reordered:][:ccc=Above:]]* [:ccc=Above:] → j \u0307;
+	// I \u0328 (Į) } [^[:ccc=Not_Reordered:][:ccc=Above:]]* [:ccc=Above:] → i \u0328 \u0307;
+	// I \u0300 (Ì) → i \u0307 \u0300;
+	// I \u0301 (Í) → i \u0307 \u0301;
+	// I \u0303 (Ĩ) → i \u0307 \u0303;
+	// ::Any-Lower();
+	// ::NFC();
+
+	i := 0
+	if r := c.src[c.pSrc]; r < utf8.RuneSelf {
+		lower(c)
+		if r != 'I' && r != 'J' {
+			return true
+		}
+	} else {
+		p := norm.NFD.Properties(c.src[c.pSrc:])
+		if d := p.Decomposition(); len(d) >= 3 && (d[0] == 'I' || d[0] == 'J') {
+			// UTF-8 optimization: the decomposition will only have an above
+			// modifier if the last rune of the decomposition is in [U+300-U+311].
+			// In all other cases, a decomposition starting with I is always
+			// an I followed by modifiers that are not cased themselves. See A.2.
+			if d[1] == 0xCC && d[2] <= 0x91 { // A.2.4.
+				if !c.writeBytes(d[:1]) {
+					return false
+				}
+				c.dst[c.pDst-1] += 'a' - 'A' // lower
+
+				// Assumption: modifier never changes on lowercase. See A.1.
+				// Assumption: all modifiers added have CCC = Above. See A.2.3.
+				return c.writeString("\u0307") && c.writeBytes(d[1:])
+			}
+			// In all other cases the additional modifiers will have a CCC
+			// that is less than 230 (Above). We will insert the U+0307, if
+			// needed, after these modifiers so that a string in FCD form
+			// will remain so. See A.2.2.
+			lower(c)
+			i = 1
+		} else {
+			return lower(c)
+		}
+	}
+
+	for ; i < maxIgnorable && c.next(); i++ {
+		switch c.info.cccType() {
+		case cccZero:
+			c.unreadRune()
+			return true
+		case cccAbove:
+			return c.writeString("\u0307") && c.copy() // See A.1.
+		default:
+			c.copy() // See A.1.
+		}
+	}
+	return i == maxIgnorable
+}
+
+// ltLowerSpan would be the same as isLower.
+
+func ltUpper(f mapFunc) mapFunc {
+	return func(c *context) bool {
+		// Unicode:
+		// 0307; 0307; ; ; lt After_Soft_Dotted; # COMBINING DOT ABOVE
+		//
+		// From CLDR:
+		// # Remove \u0307 following soft-dotteds (i, j, and the like), with possible
+		// # intervening non-230 marks.
+		// ::NFD();
+		// [:Soft_Dotted:] [^[:ccc=Not_Reordered:][:ccc=Above:]]* { \u0307 → ;
+		// ::Any-Upper();
+		// ::NFC();
+
+		// TODO: See A.5. A soft-dotted rune never has an exception. This would
+		// allow us to overload the exception bit and encode this property in
+		// info. Need to measure performance impact of this.
+		r, _ := utf8.DecodeRune(c.src[c.pSrc:])
+		oldPDst := c.pDst
+		if !f(c) {
+			return false
+		}
+		if !unicode.Is(unicode.Soft_Dotted, r) {
+			return true
+		}
+
+		// We don't need to do an NFD normalization, as a soft-dotted rune never
+		// contains U+0307. See A.3.
+
+		i := 0
+		for ; i < maxIgnorable && c.next(); i++ {
+			switch c.info.cccType() {
+			case cccZero:
+				c.unreadRune()
+				return true
+			case cccAbove:
+				if c.hasPrefix("\u0307") {
+					// We don't do a full NFC, but rather combine runes for
+					// some of the common cases. (Returning NFC or
+					// preserving normal form is neither a requirement nor
+					// a possibility anyway).
+					if !c.next() {
+						return false
+					}
+					if c.dst[oldPDst] == 'I' && c.pDst == oldPDst+1 && c.src[c.pSrc] == 0xcc {
+						s := ""
+						switch c.src[c.pSrc+1] {
+						case 0x80: // U+0300 COMBINING GRAVE ACCENT
+							s = "\u00cc" // U+00CC LATIN CAPITAL LETTER I WITH GRAVE
+						case 0x81: // U+0301 COMBINING ACUTE ACCENT
+							s = "\u00cd" // U+00CD LATIN CAPITAL LETTER I WITH ACUTE
+						case 0x83: // U+0303 COMBINING TILDE
+							s = "\u0128" // U+0128 LATIN CAPITAL LETTER I WITH TILDE
+						case 0x88: // U+0308 COMBINING DIAERESIS
+							s = "\u00cf" // U+00CF LATIN CAPITAL LETTER I WITH DIAERESIS
+						default:
+						}
+						if s != "" {
+							c.pDst = oldPDst
+							return c.writeString(s)
+						}
+					}
+				}
+				return c.copy()
+			default:
+				c.copy()
+			}
+		}
+		return i == maxIgnorable
+	}
+}
+
+// TODO: implement ltUpperSpan (low priority: complex and infrequent).
+
+func aztrUpper(f mapFunc) mapFunc {
+	return func(c *context) bool {
+		// i→İ;
+		if c.src[c.pSrc] == 'i' {
+			return c.writeString("İ")
+		}
+		return f(c)
+	}
+}
+
+func aztrLower(c *context) (done bool) {
+	// From CLDR:
+	// # I and i-dotless; I-dot and i are case pairs in Turkish and Azeri
+	// # 0130; 0069; 0130; 0130; tr; # LATIN CAPITAL LETTER I WITH DOT ABOVE
+	// İ→i;
+	// # When lowercasing, remove dot_above in the sequence I + dot_above, which will turn into i.
+	// # This matches the behavior of the canonically equivalent I-dot_above
+	// # 0307; ; 0307; 0307; tr After_I; # COMBINING DOT ABOVE
+	// # When lowercasing, unless an I is before a dot_above, it turns into a dotless i.
+	// # 0049; 0131; 0049; 0049; tr Not_Before_Dot; # LATIN CAPITAL LETTER I
+	// I([^[:ccc=Not_Reordered:][:ccc=Above:]]*)\u0307 → i$1 ;
+	// I→ı ;
+	// ::Any-Lower();
+	if c.hasPrefix("\u0130") { // İ
+		return c.writeString("i")
+	}
+	if c.src[c.pSrc] != 'I' {
+		return lower(c)
+	}
+
+	// We ignore the lower-case I for now, but insert it later when we know
+	// which form we need.
+	start := c.pSrc + c.sz
+
+	i := 0
+Loop:
+	// We check for up to n ignorables before \u0307. As \u0307 is an
+	// ignorable as well, n is maxIgnorable-1.
+	for ; i < maxIgnorable && c.next(); i++ {
+		switch c.info.cccType() {
+		case cccAbove:
+			if c.hasPrefix("\u0307") {
+				return c.writeString("i") && c.writeBytes(c.src[start:c.pSrc]) // ignore U+0307
+			}
+			done = true
+			break Loop
+		case cccZero:
+			c.unreadRune()
+			done = true
+			break Loop
+		default:
+			// We'll write this rune after we know which starter to use.
+		}
+	}
+	if i == maxIgnorable {
+		done = true
+	}
+	return c.writeString("ı") && c.writeBytes(c.src[start:c.pSrc+c.sz]) && done
+}
+
+// aztrLowerSpan would be the same as isLower.
+
+func nlTitle(c *context) bool {
+	// From CLDR:
+	// # Special titlecasing for Dutch initial "ij".
+	// ::Any-Title();
+	// # Fix up Ij at the beginning of a "word" (per Any-Title, notUAX #29)
+	// [:^WB=ALetter:] [:WB=Extend:]* [[:WB=MidLetter:][:WB=MidNumLet:]]? { Ij } → IJ ;
+	if c.src[c.pSrc] != 'I' && c.src[c.pSrc] != 'i' {
+		return title(c)
+	}
+
+	if !c.writeString("I") || !c.next() {
+		return false
+	}
+	if c.src[c.pSrc] == 'j' || c.src[c.pSrc] == 'J' {
+		return c.writeString("J")
+	}
+	c.unreadRune()
+	return true
+}
+
+func nlTitleSpan(c *context) bool {
+	// From CLDR:
+	// # Special titlecasing for Dutch initial "ij".
+	// ::Any-Title();
+	// # Fix up Ij at the beginning of a "word" (per Any-Title, notUAX #29)
+	// [:^WB=ALetter:] [:WB=Extend:]* [[:WB=MidLetter:][:WB=MidNumLet:]]? { Ij } → IJ ;
+	if c.src[c.pSrc] != 'I' {
+		return isTitle(c)
+	}
+	if !c.next() || c.src[c.pSrc] == 'j' {
+		return false
+	}
+	if c.src[c.pSrc] != 'J' {
+		c.unreadRune()
+	}
+	return true
+}
+
+// Not part of CLDR, but see https://unicode.org/cldr/trac/ticket/7078.
+func afnlRewrite(c *context) {
+	if c.hasPrefix("'") || c.hasPrefix("’") {
+		c.isMidWord = true
+	}
+}
diff --git a/vendor/golang.org/x/text/cases/tables10.0.0.go b/vendor/golang.org/x/text/cases/tables10.0.0.go
new file mode 100644
index 00000000..ca992310
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/tables10.0.0.go
@@ -0,0 +1,2256 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+//go:build go1.10 && !go1.13
+// +build go1.10,!go1.13
+
+package cases
+
+// UnicodeVersion is the Unicode version from which the tables in this package are derived.
+const UnicodeVersion = "10.0.0"
+
+var xorData string = "" + // Size: 185 bytes
+	"\x00\x06\x07\x00\x01?\x00\x0f\x03\x00\x0f\x12\x00\x0f\x1f\x00\x0f\x1d" +
+	"\x00\x01\x13\x00\x0f\x16\x00\x0f\x0b\x00\x0f3\x00\x0f7\x00\x01#\x00\x0f?" +
+	"\x00\x0e'\x00\x0f/\x00\x0e>\x00\x0f*\x00\x0c&\x00\x0c*\x00\x0c;\x00\x0c9" +
+	"\x00\x0c%\x00\x01\x08\x00\x03\x0d\x00\x03\x09\x00\x02\x06\x00\x02\x02" +
+	"\x00\x02\x0c\x00\x01\x00\x00\x01\x03\x00\x01\x01\x00\x01 \x00\x01\x0c" +
+	"\x00\x01\x10\x00\x03\x10\x00\x036 \x00\x037 \x00\x0b#\x10\x00\x0b 0\x00" +
+	"\x0b!\x10\x00\x0b!0\x00\x0b(\x04\x00\x03\x04\x1e\x00\x03\x0a\x00\x02:" +
+	"\x00\x02>\x00\x02,\x00\x02\x00\x00\x02\x10\x00\x01<\x00\x01&\x00\x01*" +
+	"\x00\x01.\x00\x010\x003 \x00\x01\x18\x00\x01(\x00\x01\x1e\x00\x01\x22"
+
+var exceptions string = "" + // Size: 2068 bytes
+	"\x00\x12\x12μΜΜ\x12\x12ssSSSs\x13\x18i̇i̇\x10\x09II\x13\x1bʼnʼNʼN\x11" +
+	"\x09sSS\x12\x12dždžDž\x12\x12dždžDŽ\x10\x12DŽDž\x12\x12ljljLj\x12\x12ljljLJ\x10\x12LJLj" +
+	"\x12\x12njnjNj\x12\x12njnjNJ\x10\x12NJNj\x13\x1bǰJ̌J̌\x12\x12dzdzDz\x12\x12dzdzDZ\x10" +
+	"\x12DZDz\x13\x18ⱥⱥ\x13\x18ⱦⱦ\x10\x1bⱾⱾ\x10\x1bⱿⱿ\x10\x1bⱯⱯ\x10\x1bⱭⱭ\x10" +
+	"\x1bⱰⱰ\x10\x1bꞫꞫ\x10\x1bꞬꞬ\x10\x1bꞍꞍ\x10\x1bꞪꞪ\x10\x1bꞮꞮ\x10\x1bⱢⱢ\x10" +
+	"\x1bꞭꞭ\x10\x1bⱮⱮ\x10\x1bⱤⱤ\x10\x1bꞱꞱ\x10\x1bꞲꞲ\x10\x1bꞰꞰ2\x12ιΙΙ\x166ΐ" +
+	"Ϊ́Ϊ́\x166ΰΫ́Ϋ́\x12\x12σΣΣ\x12\x12βΒΒ\x12\x12θΘΘ\x12\x12φΦΦ\x12" +
+	"\x12πΠΠ\x12\x12κΚΚ\x12\x12ρΡΡ\x12\x12εΕΕ\x14$եւԵՒԵւ\x12\x12вВВ\x12\x12дД" +
+	"Д\x12\x12оОО\x12\x12сСС\x12\x12тТТ\x12\x12тТТ\x12\x12ъЪЪ\x12\x12ѣѢѢ\x13" +
+	"\x1bꙋꙊꙊ\x13\x1bẖH̱H̱\x13\x1bẗT̈T̈\x13\x1bẘW̊W̊\x13\x1bẙY̊Y̊\x13\x1ba" +
+	"ʾAʾAʾ\x13\x1bṡṠṠ\x12\x10ssß\x14$ὐΥ̓Υ̓\x166ὒΥ̓̀Υ̓̀\x166ὔΥ̓́Υ̓́\x166" +
+	"ὖΥ̓͂Υ̓͂\x15+ἀιἈΙᾈ\x15+ἁιἉΙᾉ\x15+ἂιἊΙᾊ\x15+ἃιἋΙᾋ\x15+ἄιἌΙᾌ\x15+ἅιἍΙᾍ" +
+	"\x15+ἆιἎΙᾎ\x15+ἇιἏΙᾏ\x15\x1dἀιᾀἈΙ\x15\x1dἁιᾁἉΙ\x15\x1dἂιᾂἊΙ\x15\x1dἃιᾃἋΙ" +
+	"\x15\x1dἄιᾄἌΙ\x15\x1dἅιᾅἍΙ\x15\x1dἆιᾆἎΙ\x15\x1dἇιᾇἏΙ\x15+ἠιἨΙᾘ\x15+ἡιἩΙᾙ" +
+	"\x15+ἢιἪΙᾚ\x15+ἣιἫΙᾛ\x15+ἤιἬΙᾜ\x15+ἥιἭΙᾝ\x15+ἦιἮΙᾞ\x15+ἧιἯΙᾟ\x15\x1dἠιᾐἨ" +
+	"Ι\x15\x1dἡιᾑἩΙ\x15\x1dἢιᾒἪΙ\x15\x1dἣιᾓἫΙ\x15\x1dἤιᾔἬΙ\x15\x1dἥιᾕἭΙ\x15" +
+	"\x1dἦιᾖἮΙ\x15\x1dἧιᾗἯΙ\x15+ὠιὨΙᾨ\x15+ὡιὩΙᾩ\x15+ὢιὪΙᾪ\x15+ὣιὫΙᾫ\x15+ὤιὬΙᾬ" +
+	"\x15+ὥιὭΙᾭ\x15+ὦιὮΙᾮ\x15+ὧιὯΙᾯ\x15\x1dὠιᾠὨΙ\x15\x1dὡιᾡὩΙ\x15\x1dὢιᾢὪΙ" +
+	"\x15\x1dὣιᾣὫΙ\x15\x1dὤιᾤὬΙ\x15\x1dὥιᾥὭΙ\x15\x1dὦιᾦὮΙ\x15\x1dὧιᾧὯΙ\x15-ὰι" +
+	"ᾺΙᾺͅ\x14#αιΑΙᾼ\x14$άιΆΙΆͅ\x14$ᾶΑ͂Α͂\x166ᾶιΑ͂Ιᾼ͂\x14\x1cαιᾳΑΙ\x12" +
+	"\x12ιΙΙ\x15-ὴιῊΙῊͅ\x14#ηιΗΙῌ\x14$ήιΉΙΉͅ\x14$ῆΗ͂Η͂\x166ῆιΗ͂Ιῌ͂\x14\x1c" +
+	"ηιῃΗΙ\x166ῒΪ̀Ϊ̀\x166ΐΪ́Ϊ́\x14$ῖΙ͂Ι͂\x166ῗΪ͂Ϊ͂\x166ῢΫ̀Ϋ" +
+	"̀\x166ΰΫ́Ϋ́\x14$ῤΡ̓Ρ̓\x14$ῦΥ͂Υ͂\x166ῧΫ͂Ϋ͂\x15-ὼιῺΙῺͅ\x14#ωιΩΙ" +
+	"ῼ\x14$ώιΏΙΏͅ\x14$ῶΩ͂Ω͂\x166ῶιΩ͂Ιῼ͂\x14\x1cωιῳΩΙ\x12\x10ωω\x11\x08kk" +
+	"\x12\x10åå\x12\x10ɫɫ\x12\x10ɽɽ\x10\x12ȺȺ\x10\x12ȾȾ\x12\x10ɑɑ\x12\x10ɱɱ" +
+	"\x12\x10ɐɐ\x12\x10ɒɒ\x12\x10ȿȿ\x12\x10ɀɀ\x12\x10ɥɥ\x12\x10ɦɦ\x12\x10ɜɜ" +
+	"\x12\x10ɡɡ\x12\x10ɬɬ\x12\x10ɪɪ\x12\x10ʞʞ\x12\x10ʇʇ\x12\x10ʝʝ\x12\x12ffFF" +
+	"Ff\x12\x12fiFIFi\x12\x12flFLFl\x13\x1bffiFFIFfi\x13\x1bfflFFLFfl\x12\x12" +
+	"stSTSt\x12\x12stSTSt\x14$մնՄՆՄն\x14$մեՄԵՄե\x14$միՄԻՄի\x14$վնՎՆՎն\x14$մխՄ" +
+	"ԽՄխ"
+
+// 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 *caseTrie) lookup(s []byte) (v uint16, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return caseValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupUnsafe(s []byte) uint16 {
+	c0 := s[0]
+	if c0 < 0x80 { // is ASCII
+		return caseValues[c0]
+	}
+	i := caseIndex[c0]
+	if c0 < 0xE0 { // 2-byte UTF-8
+		return t.lookupValue(uint32(i), s[1])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[1])]
+	if c0 < 0xF0 { // 3-byte UTF-8
+		return t.lookupValue(uint32(i), s[2])
+	}
+	i = caseIndex[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 *caseTrie) lookupString(s string) (v uint16, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return caseValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupStringUnsafe(s string) uint16 {
+	c0 := s[0]
+	if c0 < 0x80 { // is ASCII
+		return caseValues[c0]
+	}
+	i := caseIndex[c0]
+	if c0 < 0xE0 { // 2-byte UTF-8
+		return t.lookupValue(uint32(i), s[1])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[1])]
+	if c0 < 0xF0 { // 3-byte UTF-8
+		return t.lookupValue(uint32(i), s[2])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[2])]
+	if c0 < 0xF8 { // 4-byte UTF-8
+		return t.lookupValue(uint32(i), s[3])
+	}
+	return 0
+}
+
+// caseTrie. Total size: 11892 bytes (11.61 KiB). Checksum: c6f15484b7653775.
+type caseTrie struct{}
+
+func newCaseTrie(i int) *caseTrie {
+	return &caseTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *caseTrie) lookupValue(n uint32, b byte) uint16 {
+	switch {
+	case n < 18:
+		return uint16(caseValues[n<<6+uint32(b)])
+	default:
+		n -= 18
+		return uint16(sparse.lookup(n, b))
+	}
+}
+
+// caseValues: 20 blocks, 1280 entries, 2560 bytes
+// The third block is the zero block.
+var caseValues = [1280]uint16{
+	// Block 0x0, offset 0x0
+	0x27: 0x0054,
+	0x2e: 0x0054,
+	0x30: 0x0010, 0x31: 0x0010, 0x32: 0x0010, 0x33: 0x0010, 0x34: 0x0010, 0x35: 0x0010,
+	0x36: 0x0010, 0x37: 0x0010, 0x38: 0x0010, 0x39: 0x0010, 0x3a: 0x0054,
+	// Block 0x1, offset 0x40
+	0x41: 0x2013, 0x42: 0x2013, 0x43: 0x2013, 0x44: 0x2013, 0x45: 0x2013,
+	0x46: 0x2013, 0x47: 0x2013, 0x48: 0x2013, 0x49: 0x2013, 0x4a: 0x2013, 0x4b: 0x2013,
+	0x4c: 0x2013, 0x4d: 0x2013, 0x4e: 0x2013, 0x4f: 0x2013, 0x50: 0x2013, 0x51: 0x2013,
+	0x52: 0x2013, 0x53: 0x2013, 0x54: 0x2013, 0x55: 0x2013, 0x56: 0x2013, 0x57: 0x2013,
+	0x58: 0x2013, 0x59: 0x2013, 0x5a: 0x2013,
+	0x5e: 0x0004, 0x5f: 0x0010, 0x60: 0x0004, 0x61: 0x2012, 0x62: 0x2012, 0x63: 0x2012,
+	0x64: 0x2012, 0x65: 0x2012, 0x66: 0x2012, 0x67: 0x2012, 0x68: 0x2012, 0x69: 0x2012,
+	0x6a: 0x2012, 0x6b: 0x2012, 0x6c: 0x2012, 0x6d: 0x2012, 0x6e: 0x2012, 0x6f: 0x2012,
+	0x70: 0x2012, 0x71: 0x2012, 0x72: 0x2012, 0x73: 0x2012, 0x74: 0x2012, 0x75: 0x2012,
+	0x76: 0x2012, 0x77: 0x2012, 0x78: 0x2012, 0x79: 0x2012, 0x7a: 0x2012,
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc0: 0x0852, 0xc1: 0x0b53, 0xc2: 0x0113, 0xc3: 0x0112, 0xc4: 0x0113, 0xc5: 0x0112,
+	0xc6: 0x0b53, 0xc7: 0x0f13, 0xc8: 0x0f12, 0xc9: 0x0e53, 0xca: 0x1153, 0xcb: 0x0713,
+	0xcc: 0x0712, 0xcd: 0x0012, 0xce: 0x1453, 0xcf: 0x1753, 0xd0: 0x1a53, 0xd1: 0x0313,
+	0xd2: 0x0312, 0xd3: 0x1d53, 0xd4: 0x2053, 0xd5: 0x2352, 0xd6: 0x2653, 0xd7: 0x2653,
+	0xd8: 0x0113, 0xd9: 0x0112, 0xda: 0x2952, 0xdb: 0x0012, 0xdc: 0x1d53, 0xdd: 0x2c53,
+	0xde: 0x2f52, 0xdf: 0x3253, 0xe0: 0x0113, 0xe1: 0x0112, 0xe2: 0x0113, 0xe3: 0x0112,
+	0xe4: 0x0113, 0xe5: 0x0112, 0xe6: 0x3553, 0xe7: 0x0f13, 0xe8: 0x0f12, 0xe9: 0x3853,
+	0xea: 0x0012, 0xeb: 0x0012, 0xec: 0x0113, 0xed: 0x0112, 0xee: 0x3553, 0xef: 0x1f13,
+	0xf0: 0x1f12, 0xf1: 0x3b53, 0xf2: 0x3e53, 0xf3: 0x0713, 0xf4: 0x0712, 0xf5: 0x0313,
+	0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010,
+	0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452,
+	// Block 0x4, offset 0x100
+	0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x02db, 0x105: 0x0359,
+	0x106: 0x03da, 0x107: 0x043b, 0x108: 0x04b9, 0x109: 0x053a, 0x10a: 0x059b, 0x10b: 0x0619,
+	0x10c: 0x069a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313,
+	0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13,
+	0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452,
+	0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112,
+	0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112,
+	0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112,
+	0x130: 0x06fa, 0x131: 0x07ab, 0x132: 0x0829, 0x133: 0x08aa, 0x134: 0x0113, 0x135: 0x0112,
+	0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112,
+	0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112,
+	// Block 0x5, offset 0x140
+	0x140: 0x0a8a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53,
+	0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112,
+	0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x0b0a, 0x151: 0x0b8a,
+	0x152: 0x0c0a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152,
+	0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x0c8a, 0x15d: 0x0012,
+	0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x0d0a, 0x162: 0x0012, 0x163: 0x2052,
+	0x164: 0x0012, 0x165: 0x0d8a, 0x166: 0x0e0a, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652,
+	0x16a: 0x0e8a, 0x16b: 0x0f0a, 0x16c: 0x0f8a, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52,
+	0x170: 0x0012, 0x171: 0x100a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252,
+	0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012,
+	0x17c: 0x0012, 0x17d: 0x108a, 0x17e: 0x0012, 0x17f: 0x0012,
+	// Block 0x6, offset 0x180
+	0x180: 0x3552, 0x181: 0x0012, 0x182: 0x0012, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012,
+	0x186: 0x0012, 0x187: 0x110a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52,
+	0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012,
+	0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012,
+	0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x118a,
+	0x19e: 0x120a, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012,
+	0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012,
+	0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012,
+	0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015,
+	0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014,
+	0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x128d,
+	0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024,
+	0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024,
+	0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024,
+	0x1d8: 0x0034, 0x1d9: 0x0034, 0x1da: 0x0034, 0x1db: 0x0024, 0x1dc: 0x0034, 0x1dd: 0x0034,
+	0x1de: 0x0034, 0x1df: 0x0034, 0x1e0: 0x0034, 0x1e1: 0x0034, 0x1e2: 0x0034, 0x1e3: 0x0024,
+	0x1e4: 0x0024, 0x1e5: 0x0024, 0x1e6: 0x0024, 0x1e7: 0x0024, 0x1e8: 0x0024, 0x1e9: 0x0024,
+	0x1ea: 0x0024, 0x1eb: 0x0024, 0x1ec: 0x0024, 0x1ed: 0x0024, 0x1ee: 0x0024, 0x1ef: 0x0024,
+	0x1f0: 0x0113, 0x1f1: 0x0112, 0x1f2: 0x0113, 0x1f3: 0x0112, 0x1f4: 0x0014, 0x1f5: 0x0004,
+	0x1f6: 0x0113, 0x1f7: 0x0112, 0x1fa: 0x0015, 0x1fb: 0x4d52,
+	0x1fc: 0x5052, 0x1fd: 0x5052, 0x1ff: 0x5353,
+	// Block 0x8, offset 0x200
+	0x204: 0x0004, 0x205: 0x0004,
+	0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513,
+	0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x130a, 0x211: 0x2013,
+	0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013,
+	0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013,
+	0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53,
+	0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53,
+	0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512,
+	0x230: 0x144a, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012,
+	0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012,
+	0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012,
+	// Block 0x9, offset 0x240
+	0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x158a, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52,
+	0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52,
+	0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x160a, 0x251: 0x168a,
+	0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x170a, 0x256: 0x178a, 0x257: 0x1812,
+	0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112,
+	0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112,
+	0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112,
+	0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112,
+	0x270: 0x180a, 0x271: 0x188a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x190a,
+	0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112,
+	0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053,
+	// Block 0xa, offset 0x280
+	0x280: 0x0812, 0x281: 0x0812, 0x282: 0x0812, 0x283: 0x0812, 0x284: 0x0812, 0x285: 0x0812,
+	0x288: 0x0813, 0x289: 0x0813, 0x28a: 0x0813, 0x28b: 0x0813,
+	0x28c: 0x0813, 0x28d: 0x0813, 0x290: 0x239a, 0x291: 0x0812,
+	0x292: 0x247a, 0x293: 0x0812, 0x294: 0x25ba, 0x295: 0x0812, 0x296: 0x26fa, 0x297: 0x0812,
+	0x299: 0x0813, 0x29b: 0x0813, 0x29d: 0x0813,
+	0x29f: 0x0813, 0x2a0: 0x0812, 0x2a1: 0x0812, 0x2a2: 0x0812, 0x2a3: 0x0812,
+	0x2a4: 0x0812, 0x2a5: 0x0812, 0x2a6: 0x0812, 0x2a7: 0x0812, 0x2a8: 0x0813, 0x2a9: 0x0813,
+	0x2aa: 0x0813, 0x2ab: 0x0813, 0x2ac: 0x0813, 0x2ad: 0x0813, 0x2ae: 0x0813, 0x2af: 0x0813,
+	0x2b0: 0x8b52, 0x2b1: 0x8b52, 0x2b2: 0x8e52, 0x2b3: 0x8e52, 0x2b4: 0x9152, 0x2b5: 0x9152,
+	0x2b6: 0x9452, 0x2b7: 0x9452, 0x2b8: 0x9752, 0x2b9: 0x9752, 0x2ba: 0x9a52, 0x2bb: 0x9a52,
+	0x2bc: 0x4d52, 0x2bd: 0x4d52,
+	// Block 0xb, offset 0x2c0
+	0x2c0: 0x283a, 0x2c1: 0x292a, 0x2c2: 0x2a1a, 0x2c3: 0x2b0a, 0x2c4: 0x2bfa, 0x2c5: 0x2cea,
+	0x2c6: 0x2dda, 0x2c7: 0x2eca, 0x2c8: 0x2fb9, 0x2c9: 0x30a9, 0x2ca: 0x3199, 0x2cb: 0x3289,
+	0x2cc: 0x3379, 0x2cd: 0x3469, 0x2ce: 0x3559, 0x2cf: 0x3649, 0x2d0: 0x373a, 0x2d1: 0x382a,
+	0x2d2: 0x391a, 0x2d3: 0x3a0a, 0x2d4: 0x3afa, 0x2d5: 0x3bea, 0x2d6: 0x3cda, 0x2d7: 0x3dca,
+	0x2d8: 0x3eb9, 0x2d9: 0x3fa9, 0x2da: 0x4099, 0x2db: 0x4189, 0x2dc: 0x4279, 0x2dd: 0x4369,
+	0x2de: 0x4459, 0x2df: 0x4549, 0x2e0: 0x463a, 0x2e1: 0x472a, 0x2e2: 0x481a, 0x2e3: 0x490a,
+	0x2e4: 0x49fa, 0x2e5: 0x4aea, 0x2e6: 0x4bda, 0x2e7: 0x4cca, 0x2e8: 0x4db9, 0x2e9: 0x4ea9,
+	0x2ea: 0x4f99, 0x2eb: 0x5089, 0x2ec: 0x5179, 0x2ed: 0x5269, 0x2ee: 0x5359, 0x2ef: 0x5449,
+	0x2f0: 0x0812, 0x2f1: 0x0812, 0x2f2: 0x553a, 0x2f3: 0x564a, 0x2f4: 0x571a,
+	0x2f6: 0x57fa, 0x2f7: 0x58da, 0x2f8: 0x0813, 0x2f9: 0x0813, 0x2fa: 0x8b53, 0x2fb: 0x8b53,
+	0x2fc: 0x5a19, 0x2fd: 0x0004, 0x2fe: 0x5aea, 0x2ff: 0x0004,
+	// Block 0xc, offset 0x300
+	0x300: 0x0004, 0x301: 0x0004, 0x302: 0x5b6a, 0x303: 0x5c7a, 0x304: 0x5d4a,
+	0x306: 0x5e2a, 0x307: 0x5f0a, 0x308: 0x8e53, 0x309: 0x8e53, 0x30a: 0x9153, 0x30b: 0x9153,
+	0x30c: 0x6049, 0x30d: 0x0004, 0x30e: 0x0004, 0x30f: 0x0004, 0x310: 0x0812, 0x311: 0x0812,
+	0x312: 0x611a, 0x313: 0x625a, 0x316: 0x639a, 0x317: 0x647a,
+	0x318: 0x0813, 0x319: 0x0813, 0x31a: 0x9453, 0x31b: 0x9453, 0x31d: 0x0004,
+	0x31e: 0x0004, 0x31f: 0x0004, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0x65ba, 0x323: 0x66fa,
+	0x324: 0x683a, 0x325: 0x0912, 0x326: 0x691a, 0x327: 0x69fa, 0x328: 0x0813, 0x329: 0x0813,
+	0x32a: 0x9a53, 0x32b: 0x9a53, 0x32c: 0x0913, 0x32d: 0x0004, 0x32e: 0x0004, 0x32f: 0x0004,
+	0x332: 0x6b3a, 0x333: 0x6c4a, 0x334: 0x6d1a,
+	0x336: 0x6dfa, 0x337: 0x6eda, 0x338: 0x9753, 0x339: 0x9753, 0x33a: 0x4d53, 0x33b: 0x4d53,
+	0x33c: 0x7019, 0x33d: 0x0004, 0x33e: 0x0004,
+	// Block 0xd, offset 0x340
+	0x342: 0x0013,
+	0x347: 0x0013, 0x34a: 0x0012, 0x34b: 0x0013,
+	0x34c: 0x0013, 0x34d: 0x0013, 0x34e: 0x0012, 0x34f: 0x0012, 0x350: 0x0013, 0x351: 0x0013,
+	0x352: 0x0013, 0x353: 0x0012, 0x355: 0x0013,
+	0x359: 0x0013, 0x35a: 0x0013, 0x35b: 0x0013, 0x35c: 0x0013, 0x35d: 0x0013,
+	0x364: 0x0013, 0x366: 0x70eb, 0x368: 0x0013,
+	0x36a: 0x714b, 0x36b: 0x718b, 0x36c: 0x0013, 0x36d: 0x0013, 0x36f: 0x0012,
+	0x370: 0x0013, 0x371: 0x0013, 0x372: 0x9d53, 0x373: 0x0013, 0x374: 0x0012, 0x375: 0x0010,
+	0x376: 0x0010, 0x377: 0x0010, 0x378: 0x0010, 0x379: 0x0012,
+	0x37c: 0x0012, 0x37d: 0x0012, 0x37e: 0x0013, 0x37f: 0x0013,
+	// Block 0xe, offset 0x380
+	0x380: 0x1a13, 0x381: 0x1a13, 0x382: 0x1e13, 0x383: 0x1e13, 0x384: 0x1a13, 0x385: 0x1a13,
+	0x386: 0x2613, 0x387: 0x2613, 0x388: 0x2a13, 0x389: 0x2a13, 0x38a: 0x2e13, 0x38b: 0x2e13,
+	0x38c: 0x2a13, 0x38d: 0x2a13, 0x38e: 0x2613, 0x38f: 0x2613, 0x390: 0xa052, 0x391: 0xa052,
+	0x392: 0xa352, 0x393: 0xa352, 0x394: 0xa652, 0x395: 0xa652, 0x396: 0xa352, 0x397: 0xa352,
+	0x398: 0xa052, 0x399: 0xa052, 0x39a: 0x1a12, 0x39b: 0x1a12, 0x39c: 0x1e12, 0x39d: 0x1e12,
+	0x39e: 0x1a12, 0x39f: 0x1a12, 0x3a0: 0x2612, 0x3a1: 0x2612, 0x3a2: 0x2a12, 0x3a3: 0x2a12,
+	0x3a4: 0x2e12, 0x3a5: 0x2e12, 0x3a6: 0x2a12, 0x3a7: 0x2a12, 0x3a8: 0x2612, 0x3a9: 0x2612,
+	// Block 0xf, offset 0x3c0
+	0x3c0: 0x6552, 0x3c1: 0x6552, 0x3c2: 0x6552, 0x3c3: 0x6552, 0x3c4: 0x6552, 0x3c5: 0x6552,
+	0x3c6: 0x6552, 0x3c7: 0x6552, 0x3c8: 0x6552, 0x3c9: 0x6552, 0x3ca: 0x6552, 0x3cb: 0x6552,
+	0x3cc: 0x6552, 0x3cd: 0x6552, 0x3ce: 0x6552, 0x3cf: 0x6552, 0x3d0: 0xa952, 0x3d1: 0xa952,
+	0x3d2: 0xa952, 0x3d3: 0xa952, 0x3d4: 0xa952, 0x3d5: 0xa952, 0x3d6: 0xa952, 0x3d7: 0xa952,
+	0x3d8: 0xa952, 0x3d9: 0xa952, 0x3da: 0xa952, 0x3db: 0xa952, 0x3dc: 0xa952, 0x3dd: 0xa952,
+	0x3de: 0xa952, 0x3e0: 0x0113, 0x3e1: 0x0112, 0x3e2: 0x71eb, 0x3e3: 0x8853,
+	0x3e4: 0x724b, 0x3e5: 0x72aa, 0x3e6: 0x730a, 0x3e7: 0x0f13, 0x3e8: 0x0f12, 0x3e9: 0x0313,
+	0x3ea: 0x0312, 0x3eb: 0x0713, 0x3ec: 0x0712, 0x3ed: 0x736b, 0x3ee: 0x73cb, 0x3ef: 0x742b,
+	0x3f0: 0x748b, 0x3f1: 0x0012, 0x3f2: 0x0113, 0x3f3: 0x0112, 0x3f4: 0x0012, 0x3f5: 0x0313,
+	0x3f6: 0x0312, 0x3f7: 0x0012, 0x3f8: 0x0012, 0x3f9: 0x0012, 0x3fa: 0x0012, 0x3fb: 0x0012,
+	0x3fc: 0x0015, 0x3fd: 0x0015, 0x3fe: 0x74eb, 0x3ff: 0x754b,
+	// Block 0x10, offset 0x400
+	0x400: 0x0113, 0x401: 0x0112, 0x402: 0x0113, 0x403: 0x0112, 0x404: 0x0113, 0x405: 0x0112,
+	0x406: 0x0113, 0x407: 0x0112, 0x408: 0x0014, 0x409: 0x0014, 0x40a: 0x0014, 0x40b: 0x0713,
+	0x40c: 0x0712, 0x40d: 0x75ab, 0x40e: 0x0012, 0x40f: 0x0010, 0x410: 0x0113, 0x411: 0x0112,
+	0x412: 0x0113, 0x413: 0x0112, 0x414: 0x0012, 0x415: 0x0012, 0x416: 0x0113, 0x417: 0x0112,
+	0x418: 0x0113, 0x419: 0x0112, 0x41a: 0x0113, 0x41b: 0x0112, 0x41c: 0x0113, 0x41d: 0x0112,
+	0x41e: 0x0113, 0x41f: 0x0112, 0x420: 0x0113, 0x421: 0x0112, 0x422: 0x0113, 0x423: 0x0112,
+	0x424: 0x0113, 0x425: 0x0112, 0x426: 0x0113, 0x427: 0x0112, 0x428: 0x0113, 0x429: 0x0112,
+	0x42a: 0x760b, 0x42b: 0x766b, 0x42c: 0x76cb, 0x42d: 0x772b, 0x42e: 0x778b,
+	0x430: 0x77eb, 0x431: 0x784b, 0x432: 0x78ab, 0x433: 0xac53, 0x434: 0x0113, 0x435: 0x0112,
+	0x436: 0x0113, 0x437: 0x0112,
+	// Block 0x11, offset 0x440
+	0x440: 0x790a, 0x441: 0x798a, 0x442: 0x7a0a, 0x443: 0x7a8a, 0x444: 0x7b3a, 0x445: 0x7bea,
+	0x446: 0x7c6a,
+	0x453: 0x7cea, 0x454: 0x7dca, 0x455: 0x7eaa, 0x456: 0x7f8a, 0x457: 0x806a,
+	0x45d: 0x0010,
+	0x45e: 0x0034, 0x45f: 0x0010, 0x460: 0x0010, 0x461: 0x0010, 0x462: 0x0010, 0x463: 0x0010,
+	0x464: 0x0010, 0x465: 0x0010, 0x466: 0x0010, 0x467: 0x0010, 0x468: 0x0010,
+	0x46a: 0x0010, 0x46b: 0x0010, 0x46c: 0x0010, 0x46d: 0x0010, 0x46e: 0x0010, 0x46f: 0x0010,
+	0x470: 0x0010, 0x471: 0x0010, 0x472: 0x0010, 0x473: 0x0010, 0x474: 0x0010, 0x475: 0x0010,
+	0x476: 0x0010, 0x478: 0x0010, 0x479: 0x0010, 0x47a: 0x0010, 0x47b: 0x0010,
+	0x47c: 0x0010, 0x47e: 0x0010,
+	// Block 0x12, offset 0x480
+	0x480: 0x2213, 0x481: 0x2213, 0x482: 0x2613, 0x483: 0x2613, 0x484: 0x2213, 0x485: 0x2213,
+	0x486: 0x2e13, 0x487: 0x2e13, 0x488: 0x2213, 0x489: 0x2213, 0x48a: 0x2613, 0x48b: 0x2613,
+	0x48c: 0x2213, 0x48d: 0x2213, 0x48e: 0x3e13, 0x48f: 0x3e13, 0x490: 0x2213, 0x491: 0x2213,
+	0x492: 0x2613, 0x493: 0x2613, 0x494: 0x2213, 0x495: 0x2213, 0x496: 0x2e13, 0x497: 0x2e13,
+	0x498: 0x2213, 0x499: 0x2213, 0x49a: 0x2613, 0x49b: 0x2613, 0x49c: 0x2213, 0x49d: 0x2213,
+	0x49e: 0xb553, 0x49f: 0xb553, 0x4a0: 0xb853, 0x4a1: 0xb853, 0x4a2: 0x2212, 0x4a3: 0x2212,
+	0x4a4: 0x2612, 0x4a5: 0x2612, 0x4a6: 0x2212, 0x4a7: 0x2212, 0x4a8: 0x2e12, 0x4a9: 0x2e12,
+	0x4aa: 0x2212, 0x4ab: 0x2212, 0x4ac: 0x2612, 0x4ad: 0x2612, 0x4ae: 0x2212, 0x4af: 0x2212,
+	0x4b0: 0x3e12, 0x4b1: 0x3e12, 0x4b2: 0x2212, 0x4b3: 0x2212, 0x4b4: 0x2612, 0x4b5: 0x2612,
+	0x4b6: 0x2212, 0x4b7: 0x2212, 0x4b8: 0x2e12, 0x4b9: 0x2e12, 0x4ba: 0x2212, 0x4bb: 0x2212,
+	0x4bc: 0x2612, 0x4bd: 0x2612, 0x4be: 0x2212, 0x4bf: 0x2212,
+	// Block 0x13, offset 0x4c0
+	0x4c2: 0x0010,
+	0x4c7: 0x0010, 0x4c9: 0x0010, 0x4cb: 0x0010,
+	0x4cd: 0x0010, 0x4ce: 0x0010, 0x4cf: 0x0010, 0x4d1: 0x0010,
+	0x4d2: 0x0010, 0x4d4: 0x0010, 0x4d7: 0x0010,
+	0x4d9: 0x0010, 0x4db: 0x0010, 0x4dd: 0x0010,
+	0x4df: 0x0010, 0x4e1: 0x0010, 0x4e2: 0x0010,
+	0x4e4: 0x0010, 0x4e7: 0x0010, 0x4e8: 0x0010, 0x4e9: 0x0010,
+	0x4ea: 0x0010, 0x4ec: 0x0010, 0x4ed: 0x0010, 0x4ee: 0x0010, 0x4ef: 0x0010,
+	0x4f0: 0x0010, 0x4f1: 0x0010, 0x4f2: 0x0010, 0x4f4: 0x0010, 0x4f5: 0x0010,
+	0x4f6: 0x0010, 0x4f7: 0x0010, 0x4f9: 0x0010, 0x4fa: 0x0010, 0x4fb: 0x0010,
+	0x4fc: 0x0010, 0x4fe: 0x0010,
+}
+
+// caseIndex: 25 blocks, 1600 entries, 3200 bytes
+// Block 0 is the zero block.
+var caseIndex = [1600]uint16{
+	// Block 0x0, offset 0x0
+	// Block 0x1, offset 0x40
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc2: 0x12, 0xc3: 0x13, 0xc4: 0x14, 0xc5: 0x15, 0xc6: 0x01, 0xc7: 0x02,
+	0xc8: 0x16, 0xc9: 0x03, 0xca: 0x04, 0xcb: 0x17, 0xcc: 0x18, 0xcd: 0x05, 0xce: 0x06, 0xcf: 0x07,
+	0xd0: 0x19, 0xd1: 0x1a, 0xd2: 0x1b, 0xd3: 0x1c, 0xd4: 0x1d, 0xd5: 0x1e, 0xd6: 0x1f, 0xd7: 0x20,
+	0xd8: 0x21, 0xd9: 0x22, 0xda: 0x23, 0xdb: 0x24, 0xdc: 0x25, 0xdd: 0x26, 0xde: 0x27, 0xdf: 0x28,
+	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
+	0xea: 0x06, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x08, 0xef: 0x09,
+	0xf0: 0x14, 0xf3: 0x16,
+	// Block 0x4, offset 0x100
+	0x120: 0x29, 0x121: 0x2a, 0x122: 0x2b, 0x123: 0x2c, 0x124: 0x2d, 0x125: 0x2e, 0x126: 0x2f, 0x127: 0x30,
+	0x128: 0x31, 0x129: 0x32, 0x12a: 0x33, 0x12b: 0x34, 0x12c: 0x35, 0x12d: 0x36, 0x12e: 0x37, 0x12f: 0x38,
+	0x130: 0x39, 0x131: 0x3a, 0x132: 0x3b, 0x133: 0x3c, 0x134: 0x3d, 0x135: 0x3e, 0x136: 0x3f, 0x137: 0x40,
+	0x138: 0x41, 0x139: 0x42, 0x13a: 0x43, 0x13b: 0x44, 0x13c: 0x45, 0x13d: 0x46, 0x13e: 0x47, 0x13f: 0x48,
+	// Block 0x5, offset 0x140
+	0x140: 0x49, 0x141: 0x4a, 0x142: 0x4b, 0x143: 0x4c, 0x144: 0x23, 0x145: 0x23, 0x146: 0x23, 0x147: 0x23,
+	0x148: 0x23, 0x149: 0x4d, 0x14a: 0x4e, 0x14b: 0x4f, 0x14c: 0x50, 0x14d: 0x51, 0x14e: 0x52, 0x14f: 0x53,
+	0x150: 0x54, 0x151: 0x23, 0x152: 0x23, 0x153: 0x23, 0x154: 0x23, 0x155: 0x23, 0x156: 0x23, 0x157: 0x23,
+	0x158: 0x23, 0x159: 0x55, 0x15a: 0x56, 0x15b: 0x57, 0x15c: 0x58, 0x15d: 0x59, 0x15e: 0x5a, 0x15f: 0x5b,
+	0x160: 0x5c, 0x161: 0x5d, 0x162: 0x5e, 0x163: 0x5f, 0x164: 0x60, 0x165: 0x61, 0x167: 0x62,
+	0x168: 0x63, 0x169: 0x64, 0x16a: 0x65, 0x16c: 0x66, 0x16d: 0x67, 0x16e: 0x68, 0x16f: 0x69,
+	0x170: 0x6a, 0x171: 0x6b, 0x172: 0x6c, 0x173: 0x6d, 0x174: 0x6e, 0x175: 0x6f, 0x176: 0x70, 0x177: 0x71,
+	0x178: 0x72, 0x179: 0x72, 0x17a: 0x73, 0x17b: 0x72, 0x17c: 0x74, 0x17d: 0x08, 0x17e: 0x09, 0x17f: 0x0a,
+	// Block 0x6, offset 0x180
+	0x180: 0x75, 0x181: 0x76, 0x182: 0x77, 0x183: 0x78, 0x184: 0x0b, 0x185: 0x79, 0x186: 0x7a,
+	0x192: 0x7b, 0x193: 0x0c,
+	0x1b0: 0x7c, 0x1b1: 0x0d, 0x1b2: 0x72, 0x1b3: 0x7d, 0x1b4: 0x7e, 0x1b5: 0x7f, 0x1b6: 0x80, 0x1b7: 0x81,
+	0x1b8: 0x82,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x83, 0x1c2: 0x84, 0x1c3: 0x85, 0x1c4: 0x86, 0x1c5: 0x23, 0x1c6: 0x87,
+	// Block 0x8, offset 0x200
+	0x200: 0x88, 0x201: 0x23, 0x202: 0x23, 0x203: 0x23, 0x204: 0x23, 0x205: 0x23, 0x206: 0x23, 0x207: 0x23,
+	0x208: 0x23, 0x209: 0x23, 0x20a: 0x23, 0x20b: 0x23, 0x20c: 0x23, 0x20d: 0x23, 0x20e: 0x23, 0x20f: 0x23,
+	0x210: 0x23, 0x211: 0x23, 0x212: 0x89, 0x213: 0x8a, 0x214: 0x23, 0x215: 0x23, 0x216: 0x23, 0x217: 0x23,
+	0x218: 0x8b, 0x219: 0x8c, 0x21a: 0x8d, 0x21b: 0x8e, 0x21c: 0x8f, 0x21d: 0x90, 0x21e: 0x0e, 0x21f: 0x91,
+	0x220: 0x92, 0x221: 0x93, 0x222: 0x23, 0x223: 0x94, 0x224: 0x95, 0x225: 0x96, 0x226: 0x97, 0x227: 0x98,
+	0x228: 0x99, 0x229: 0x9a, 0x22a: 0x9b, 0x22b: 0x9c, 0x22c: 0x9d, 0x22d: 0x9e, 0x22e: 0x9f, 0x22f: 0xa0,
+	0x230: 0x23, 0x231: 0x23, 0x232: 0x23, 0x233: 0x23, 0x234: 0x23, 0x235: 0x23, 0x236: 0x23, 0x237: 0x23,
+	0x238: 0x23, 0x239: 0x23, 0x23a: 0x23, 0x23b: 0x23, 0x23c: 0x23, 0x23d: 0x23, 0x23e: 0x23, 0x23f: 0x23,
+	// Block 0x9, offset 0x240
+	0x240: 0x23, 0x241: 0x23, 0x242: 0x23, 0x243: 0x23, 0x244: 0x23, 0x245: 0x23, 0x246: 0x23, 0x247: 0x23,
+	0x248: 0x23, 0x249: 0x23, 0x24a: 0x23, 0x24b: 0x23, 0x24c: 0x23, 0x24d: 0x23, 0x24e: 0x23, 0x24f: 0x23,
+	0x250: 0x23, 0x251: 0x23, 0x252: 0x23, 0x253: 0x23, 0x254: 0x23, 0x255: 0x23, 0x256: 0x23, 0x257: 0x23,
+	0x258: 0x23, 0x259: 0x23, 0x25a: 0x23, 0x25b: 0x23, 0x25c: 0x23, 0x25d: 0x23, 0x25e: 0x23, 0x25f: 0x23,
+	0x260: 0x23, 0x261: 0x23, 0x262: 0x23, 0x263: 0x23, 0x264: 0x23, 0x265: 0x23, 0x266: 0x23, 0x267: 0x23,
+	0x268: 0x23, 0x269: 0x23, 0x26a: 0x23, 0x26b: 0x23, 0x26c: 0x23, 0x26d: 0x23, 0x26e: 0x23, 0x26f: 0x23,
+	0x270: 0x23, 0x271: 0x23, 0x272: 0x23, 0x273: 0x23, 0x274: 0x23, 0x275: 0x23, 0x276: 0x23, 0x277: 0x23,
+	0x278: 0x23, 0x279: 0x23, 0x27a: 0x23, 0x27b: 0x23, 0x27c: 0x23, 0x27d: 0x23, 0x27e: 0x23, 0x27f: 0x23,
+	// Block 0xa, offset 0x280
+	0x280: 0x23, 0x281: 0x23, 0x282: 0x23, 0x283: 0x23, 0x284: 0x23, 0x285: 0x23, 0x286: 0x23, 0x287: 0x23,
+	0x288: 0x23, 0x289: 0x23, 0x28a: 0x23, 0x28b: 0x23, 0x28c: 0x23, 0x28d: 0x23, 0x28e: 0x23, 0x28f: 0x23,
+	0x290: 0x23, 0x291: 0x23, 0x292: 0x23, 0x293: 0x23, 0x294: 0x23, 0x295: 0x23, 0x296: 0x23, 0x297: 0x23,
+	0x298: 0x23, 0x299: 0x23, 0x29a: 0x23, 0x29b: 0x23, 0x29c: 0x23, 0x29d: 0x23, 0x29e: 0xa1, 0x29f: 0xa2,
+	// Block 0xb, offset 0x2c0
+	0x2ec: 0x0f, 0x2ed: 0xa3, 0x2ee: 0xa4, 0x2ef: 0xa5,
+	0x2f0: 0x23, 0x2f1: 0x23, 0x2f2: 0x23, 0x2f3: 0x23, 0x2f4: 0xa6, 0x2f5: 0xa7, 0x2f6: 0xa8, 0x2f7: 0xa9,
+	0x2f8: 0xaa, 0x2f9: 0xab, 0x2fa: 0x23, 0x2fb: 0xac, 0x2fc: 0xad, 0x2fd: 0xae, 0x2fe: 0xaf, 0x2ff: 0xb0,
+	// Block 0xc, offset 0x300
+	0x300: 0xb1, 0x301: 0xb2, 0x302: 0x23, 0x303: 0xb3, 0x305: 0xb4, 0x307: 0xb5,
+	0x30a: 0xb6, 0x30b: 0xb7, 0x30c: 0xb8, 0x30d: 0xb9, 0x30e: 0xba, 0x30f: 0xbb,
+	0x310: 0xbc, 0x311: 0xbd, 0x312: 0xbe, 0x313: 0xbf, 0x314: 0xc0, 0x315: 0xc1,
+	0x318: 0x23, 0x319: 0x23, 0x31a: 0x23, 0x31b: 0x23, 0x31c: 0xc2, 0x31d: 0xc3,
+	0x320: 0xc4, 0x321: 0xc5, 0x322: 0xc6, 0x323: 0xc7, 0x324: 0xc8, 0x326: 0xc9,
+	0x328: 0xca, 0x329: 0xcb, 0x32a: 0xcc, 0x32b: 0xcd, 0x32c: 0x5f, 0x32d: 0xce, 0x32e: 0xcf,
+	0x330: 0x23, 0x331: 0xd0, 0x332: 0xd1, 0x333: 0xd2,
+	// Block 0xd, offset 0x340
+	0x340: 0xd3, 0x341: 0xd4, 0x342: 0xd5, 0x343: 0xd6, 0x344: 0xd7, 0x345: 0xd8, 0x346: 0xd9, 0x347: 0xda,
+	0x348: 0xdb, 0x34a: 0xdc, 0x34b: 0xdd, 0x34c: 0xde, 0x34d: 0xdf,
+	0x350: 0xe0, 0x351: 0xe1, 0x352: 0xe2, 0x353: 0xe3, 0x356: 0xe4, 0x357: 0xe5,
+	0x358: 0xe6, 0x359: 0xe7, 0x35a: 0xe8, 0x35b: 0xe9, 0x35c: 0xea,
+	0x362: 0xeb, 0x363: 0xec,
+	0x368: 0xed, 0x369: 0xee, 0x36a: 0xef, 0x36b: 0xf0,
+	0x370: 0xf1, 0x371: 0xf2, 0x372: 0xf3, 0x374: 0xf4, 0x375: 0xf5,
+	// Block 0xe, offset 0x380
+	0x380: 0x23, 0x381: 0x23, 0x382: 0x23, 0x383: 0x23, 0x384: 0x23, 0x385: 0x23, 0x386: 0x23, 0x387: 0x23,
+	0x388: 0x23, 0x389: 0x23, 0x38a: 0x23, 0x38b: 0x23, 0x38c: 0x23, 0x38d: 0x23, 0x38e: 0xf6,
+	0x390: 0x23, 0x391: 0xf7, 0x392: 0x23, 0x393: 0x23, 0x394: 0x23, 0x395: 0xf8,
+	// Block 0xf, offset 0x3c0
+	0x3c0: 0x23, 0x3c1: 0x23, 0x3c2: 0x23, 0x3c3: 0x23, 0x3c4: 0x23, 0x3c5: 0x23, 0x3c6: 0x23, 0x3c7: 0x23,
+	0x3c8: 0x23, 0x3c9: 0x23, 0x3ca: 0x23, 0x3cb: 0x23, 0x3cc: 0x23, 0x3cd: 0x23, 0x3ce: 0x23, 0x3cf: 0x23,
+	0x3d0: 0xf7,
+	// Block 0x10, offset 0x400
+	0x410: 0x23, 0x411: 0x23, 0x412: 0x23, 0x413: 0x23, 0x414: 0x23, 0x415: 0x23, 0x416: 0x23, 0x417: 0x23,
+	0x418: 0x23, 0x419: 0xf9,
+	// Block 0x11, offset 0x440
+	0x460: 0x23, 0x461: 0x23, 0x462: 0x23, 0x463: 0x23, 0x464: 0x23, 0x465: 0x23, 0x466: 0x23, 0x467: 0x23,
+	0x468: 0xf0, 0x469: 0xfa, 0x46b: 0xfb, 0x46c: 0xfc, 0x46d: 0xfd, 0x46e: 0xfe,
+	0x47c: 0x23, 0x47d: 0xff, 0x47e: 0x100, 0x47f: 0x101,
+	// Block 0x12, offset 0x480
+	0x4b0: 0x23, 0x4b1: 0x102, 0x4b2: 0x103,
+	// Block 0x13, offset 0x4c0
+	0x4c5: 0x104, 0x4c6: 0x105,
+	0x4c9: 0x106,
+	0x4d0: 0x107, 0x4d1: 0x108, 0x4d2: 0x109, 0x4d3: 0x10a, 0x4d4: 0x10b, 0x4d5: 0x10c, 0x4d6: 0x10d, 0x4d7: 0x10e,
+	0x4d8: 0x10f, 0x4d9: 0x110, 0x4da: 0x111, 0x4db: 0x112, 0x4dc: 0x113, 0x4dd: 0x114, 0x4de: 0x115, 0x4df: 0x116,
+	0x4e8: 0x117, 0x4e9: 0x118, 0x4ea: 0x119,
+	// Block 0x14, offset 0x500
+	0x500: 0x11a,
+	0x520: 0x23, 0x521: 0x23, 0x522: 0x23, 0x523: 0x11b, 0x524: 0x10, 0x525: 0x11c,
+	0x538: 0x11d, 0x539: 0x11, 0x53a: 0x11e,
+	// Block 0x15, offset 0x540
+	0x544: 0x11f, 0x545: 0x120, 0x546: 0x121,
+	0x54f: 0x122,
+	// Block 0x16, offset 0x580
+	0x590: 0x0a, 0x591: 0x0b, 0x592: 0x0c, 0x593: 0x0d, 0x594: 0x0e, 0x596: 0x0f,
+	0x59b: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13,
+	// Block 0x17, offset 0x5c0
+	0x5c0: 0x123, 0x5c1: 0x124, 0x5c4: 0x124, 0x5c5: 0x124, 0x5c6: 0x124, 0x5c7: 0x125,
+	// Block 0x18, offset 0x600
+	0x620: 0x15,
+}
+
+// sparseOffsets: 277 entries, 554 bytes
+var sparseOffsets = []uint16{0x0, 0x9, 0xf, 0x18, 0x24, 0x2e, 0x35, 0x38, 0x3c, 0x3f, 0x43, 0x4d, 0x4f, 0x54, 0x64, 0x6b, 0x70, 0x7e, 0x7f, 0x8d, 0x9c, 0xa6, 0xa9, 0xaf, 0xb7, 0xba, 0xbc, 0xca, 0xd0, 0xde, 0xe9, 0xf5, 0x100, 0x10c, 0x116, 0x122, 0x12d, 0x139, 0x145, 0x14d, 0x155, 0x15f, 0x16a, 0x176, 0x17d, 0x188, 0x18d, 0x195, 0x198, 0x19d, 0x1a1, 0x1a5, 0x1ac, 0x1b5, 0x1bd, 0x1be, 0x1c7, 0x1ce, 0x1d6, 0x1dc, 0x1e2, 0x1e7, 0x1eb, 0x1ee, 0x1f0, 0x1f3, 0x1f8, 0x1f9, 0x1fb, 0x1fd, 0x1ff, 0x206, 0x20b, 0x20f, 0x218, 0x21b, 0x21e, 0x224, 0x225, 0x230, 0x231, 0x232, 0x237, 0x244, 0x24c, 0x254, 0x25d, 0x266, 0x26f, 0x274, 0x277, 0x280, 0x28d, 0x28f, 0x296, 0x298, 0x2a4, 0x2a5, 0x2b0, 0x2b8, 0x2c0, 0x2c6, 0x2c7, 0x2d5, 0x2da, 0x2dd, 0x2e2, 0x2e6, 0x2ec, 0x2f1, 0x2f4, 0x2f9, 0x2fe, 0x2ff, 0x305, 0x307, 0x308, 0x30a, 0x30c, 0x30f, 0x310, 0x312, 0x315, 0x31b, 0x31f, 0x321, 0x326, 0x32d, 0x331, 0x33a, 0x33b, 0x343, 0x347, 0x34c, 0x354, 0x35a, 0x360, 0x36a, 0x36f, 0x378, 0x37e, 0x385, 0x389, 0x391, 0x393, 0x395, 0x398, 0x39a, 0x39c, 0x39d, 0x39e, 0x3a0, 0x3a2, 0x3a8, 0x3ad, 0x3af, 0x3b5, 0x3b8, 0x3ba, 0x3c0, 0x3c5, 0x3c7, 0x3c8, 0x3c9, 0x3ca, 0x3cc, 0x3ce, 0x3d0, 0x3d3, 0x3d5, 0x3d8, 0x3e0, 0x3e3, 0x3e7, 0x3ef, 0x3f1, 0x3f2, 0x3f3, 0x3f5, 0x3fb, 0x3fd, 0x3fe, 0x400, 0x402, 0x404, 0x411, 0x412, 0x413, 0x417, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x421, 0x425, 0x42b, 0x42d, 0x434, 0x437, 0x43b, 0x441, 0x44a, 0x450, 0x456, 0x460, 0x46a, 0x46c, 0x473, 0x479, 0x47f, 0x485, 0x488, 0x48e, 0x491, 0x499, 0x49a, 0x4a1, 0x4a2, 0x4a5, 0x4af, 0x4b5, 0x4bb, 0x4bc, 0x4c2, 0x4c5, 0x4cd, 0x4d4, 0x4db, 0x4dc, 0x4dd, 0x4de, 0x4df, 0x4e1, 0x4e3, 0x4e5, 0x4e9, 0x4ea, 0x4ec, 0x4ed, 0x4ee, 0x4f0, 0x4f5, 0x4fa, 0x4fe, 0x4ff, 0x502, 0x506, 0x511, 0x515, 0x51d, 0x522, 0x526, 0x529, 0x52d, 0x530, 0x533, 0x538, 0x53c, 0x540, 0x544, 0x548, 0x54a, 0x54c, 0x54f, 0x554, 0x556, 0x55b, 0x564, 0x569, 0x56a, 0x56d, 0x56e, 0x56f, 0x571, 0x572, 0x573}
+
+// sparseValues: 1395 entries, 5580 bytes
+var sparseValues = [1395]valueRange{
+	// Block 0x0, offset 0x0
+	{value: 0x0004, lo: 0xa8, hi: 0xa8},
+	{value: 0x0012, lo: 0xaa, hi: 0xaa},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0004, lo: 0xaf, hi: 0xaf},
+	{value: 0x0004, lo: 0xb4, hi: 0xb4},
+	{value: 0x001a, lo: 0xb5, hi: 0xb5},
+	{value: 0x0054, lo: 0xb7, hi: 0xb7},
+	{value: 0x0004, lo: 0xb8, hi: 0xb8},
+	{value: 0x0012, lo: 0xba, hi: 0xba},
+	// Block 0x1, offset 0x9
+	{value: 0x2013, lo: 0x80, hi: 0x96},
+	{value: 0x2013, lo: 0x98, hi: 0x9e},
+	{value: 0x009a, lo: 0x9f, hi: 0x9f},
+	{value: 0x2012, lo: 0xa0, hi: 0xb6},
+	{value: 0x2012, lo: 0xb8, hi: 0xbe},
+	{value: 0x0252, lo: 0xbf, hi: 0xbf},
+	// Block 0x2, offset 0xf
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x011b, lo: 0xb0, hi: 0xb0},
+	{value: 0x019a, lo: 0xb1, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xb7},
+	{value: 0x0012, lo: 0xb8, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x0316, lo: 0xbd, hi: 0xbe},
+	{value: 0x0553, lo: 0xbf, hi: 0xbf},
+	// Block 0x3, offset 0x18
+	{value: 0x0552, lo: 0x80, hi: 0x80},
+	{value: 0x0316, lo: 0x81, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0316, lo: 0x85, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x01da, lo: 0x89, hi: 0x89},
+	{value: 0x0117, lo: 0x8a, hi: 0xb7},
+	{value: 0x0253, lo: 0xb8, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x0316, lo: 0xbd, hi: 0xbe},
+	{value: 0x028a, lo: 0xbf, hi: 0xbf},
+	// Block 0x4, offset 0x24
+	{value: 0x0117, lo: 0x80, hi: 0x9f},
+	{value: 0x2f53, lo: 0xa0, hi: 0xa0},
+	{value: 0x0012, lo: 0xa1, hi: 0xa1},
+	{value: 0x0117, lo: 0xa2, hi: 0xb3},
+	{value: 0x0012, lo: 0xb4, hi: 0xb9},
+	{value: 0x090b, lo: 0xba, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x2953, lo: 0xbd, hi: 0xbd},
+	{value: 0x098b, lo: 0xbe, hi: 0xbe},
+	{value: 0x0a0a, lo: 0xbf, hi: 0xbf},
+	// Block 0x5, offset 0x2e
+	{value: 0x0015, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x97},
+	{value: 0x0004, lo: 0x98, hi: 0x9d},
+	{value: 0x0014, lo: 0x9e, hi: 0x9f},
+	{value: 0x0015, lo: 0xa0, hi: 0xa4},
+	{value: 0x0004, lo: 0xa5, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xbf},
+	// Block 0x6, offset 0x35
+	{value: 0x0024, lo: 0x80, hi: 0x94},
+	{value: 0x0034, lo: 0x95, hi: 0xbc},
+	{value: 0x0024, lo: 0xbd, hi: 0xbf},
+	// Block 0x7, offset 0x38
+	{value: 0x6553, lo: 0x80, hi: 0x8f},
+	{value: 0x2013, lo: 0x90, hi: 0x9f},
+	{value: 0x5f53, lo: 0xa0, hi: 0xaf},
+	{value: 0x2012, lo: 0xb0, hi: 0xbf},
+	// Block 0x8, offset 0x3c
+	{value: 0x5f52, lo: 0x80, hi: 0x8f},
+	{value: 0x6552, lo: 0x90, hi: 0x9f},
+	{value: 0x0117, lo: 0xa0, hi: 0xbf},
+	// Block 0x9, offset 0x3f
+	{value: 0x0117, lo: 0x80, hi: 0x81},
+	{value: 0x0024, lo: 0x83, hi: 0x87},
+	{value: 0x0014, lo: 0x88, hi: 0x89},
+	{value: 0x0117, lo: 0x8a, hi: 0xbf},
+	// Block 0xa, offset 0x43
+	{value: 0x0f13, lo: 0x80, hi: 0x80},
+	{value: 0x0316, lo: 0x81, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0316, lo: 0x85, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x0316, lo: 0x89, hi: 0x8a},
+	{value: 0x0716, lo: 0x8b, hi: 0x8c},
+	{value: 0x0316, lo: 0x8d, hi: 0x8e},
+	{value: 0x0f12, lo: 0x8f, hi: 0x8f},
+	{value: 0x0117, lo: 0x90, hi: 0xbf},
+	// Block 0xb, offset 0x4d
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x6553, lo: 0xb1, hi: 0xbf},
+	// Block 0xc, offset 0x4f
+	{value: 0x3013, lo: 0x80, hi: 0x8f},
+	{value: 0x6853, lo: 0x90, hi: 0x96},
+	{value: 0x0014, lo: 0x99, hi: 0x99},
+	{value: 0x6552, lo: 0xa1, hi: 0xaf},
+	{value: 0x3012, lo: 0xb0, hi: 0xbf},
+	// Block 0xd, offset 0x54
+	{value: 0x6852, lo: 0x80, hi: 0x86},
+	{value: 0x198a, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x91, hi: 0x91},
+	{value: 0x0024, lo: 0x92, hi: 0x95},
+	{value: 0x0034, lo: 0x96, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x99},
+	{value: 0x0034, lo: 0x9a, hi: 0x9b},
+	{value: 0x0024, lo: 0x9c, hi: 0xa1},
+	{value: 0x0034, lo: 0xa2, hi: 0xa7},
+	{value: 0x0024, lo: 0xa8, hi: 0xa9},
+	{value: 0x0034, lo: 0xaa, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xaf},
+	{value: 0x0034, lo: 0xb0, hi: 0xbd},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xe, offset 0x64
+	{value: 0x0034, lo: 0x81, hi: 0x82},
+	{value: 0x0024, lo: 0x84, hi: 0x84},
+	{value: 0x0034, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xb3},
+	{value: 0x0054, lo: 0xb4, hi: 0xb4},
+	// Block 0xf, offset 0x6b
+	{value: 0x0014, lo: 0x80, hi: 0x85},
+	{value: 0x0024, lo: 0x90, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x9a},
+	{value: 0x0014, lo: 0x9c, hi: 0x9c},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x10, offset 0x70
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x8a},
+	{value: 0x0034, lo: 0x8b, hi: 0x92},
+	{value: 0x0024, lo: 0x93, hi: 0x94},
+	{value: 0x0034, lo: 0x95, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x9b},
+	{value: 0x0034, lo: 0x9c, hi: 0x9c},
+	{value: 0x0024, lo: 0x9d, hi: 0x9e},
+	{value: 0x0034, lo: 0x9f, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0010, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0034, lo: 0xb0, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xbf},
+	// Block 0x11, offset 0x7e
+	{value: 0x0010, lo: 0x80, hi: 0xbf},
+	// Block 0x12, offset 0x7f
+	{value: 0x0010, lo: 0x80, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x95},
+	{value: 0x0024, lo: 0x96, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x0024, lo: 0x9f, hi: 0xa2},
+	{value: 0x0034, lo: 0xa3, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa8},
+	{value: 0x0034, lo: 0xaa, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xbc},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x13, offset 0x8d
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0034, lo: 0x91, hi: 0x91},
+	{value: 0x0010, lo: 0x92, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	{value: 0x0034, lo: 0xb1, hi: 0xb1},
+	{value: 0x0024, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0024, lo: 0xb5, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb9},
+	{value: 0x0024, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0024, lo: 0xbd, hi: 0xbd},
+	{value: 0x0034, lo: 0xbe, hi: 0xbe},
+	{value: 0x0024, lo: 0xbf, hi: 0xbf},
+	// Block 0x14, offset 0x9c
+	{value: 0x0024, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0024, lo: 0x83, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0024, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0024, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x88, hi: 0x88},
+	{value: 0x0024, lo: 0x89, hi: 0x8a},
+	{value: 0x0010, lo: 0x8d, hi: 0xbf},
+	// Block 0x15, offset 0xa6
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0014, lo: 0xa6, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	// Block 0x16, offset 0xa9
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xb1},
+	{value: 0x0034, lo: 0xb2, hi: 0xb2},
+	{value: 0x0024, lo: 0xb3, hi: 0xb3},
+	{value: 0x0014, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	// Block 0x17, offset 0xaf
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0024, lo: 0x96, hi: 0x99},
+	{value: 0x0014, lo: 0x9a, hi: 0x9a},
+	{value: 0x0024, lo: 0x9b, hi: 0xa3},
+	{value: 0x0014, lo: 0xa4, hi: 0xa4},
+	{value: 0x0024, lo: 0xa5, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa8},
+	{value: 0x0024, lo: 0xa9, hi: 0xad},
+	// Block 0x18, offset 0xb7
+	{value: 0x0010, lo: 0x80, hi: 0x98},
+	{value: 0x0034, lo: 0x99, hi: 0x9b},
+	{value: 0x0010, lo: 0xa0, hi: 0xaa},
+	// Block 0x19, offset 0xba
+	{value: 0x0010, lo: 0xa0, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbd},
+	// Block 0x1a, offset 0xbc
+	{value: 0x0024, lo: 0x94, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa2},
+	{value: 0x0034, lo: 0xa3, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xa9},
+	{value: 0x0024, lo: 0xaa, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xb2},
+	{value: 0x0024, lo: 0xb3, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	{value: 0x0024, lo: 0xb7, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0024, lo: 0xbb, hi: 0xbf},
+	// Block 0x1b, offset 0xca
+	{value: 0x0014, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x1c, offset 0xd0
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x88},
+	{value: 0x0010, lo: 0x89, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0024, lo: 0x91, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x92},
+	{value: 0x0024, lo: 0x93, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x97},
+	{value: 0x0010, lo: 0x98, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xbf},
+	// Block 0x1d, offset 0xde
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb2},
+	{value: 0x0010, lo: 0xb6, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x1e, offset 0xe9
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9c, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xb1},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	// Block 0x1f, offset 0xf5
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8a},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb6},
+	{value: 0x0010, lo: 0xb8, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x20, offset 0x100
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0014, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x91, hi: 0x91},
+	{value: 0x0010, lo: 0x99, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb5},
+	// Block 0x21, offset 0x10c
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x22, offset 0x116
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x85},
+	{value: 0x0014, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x89, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xbf},
+	// Block 0x23, offset 0x122
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x24, offset 0x12d
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9c, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	// Block 0x25, offset 0x139
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8a},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0x95},
+	{value: 0x0010, lo: 0x99, hi: 0x9a},
+	{value: 0x0010, lo: 0x9c, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	{value: 0x0010, lo: 0xa8, hi: 0xaa},
+	{value: 0x0010, lo: 0xae, hi: 0xb9},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x26, offset 0x145
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x86, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	// Block 0x27, offset 0x14d
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb9},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbf},
+	// Block 0x28, offset 0x155
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0014, lo: 0x86, hi: 0x88},
+	{value: 0x0014, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0034, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9a},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	// Block 0x29, offset 0x15f
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x2a, offset 0x16a
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0014, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xb2},
+	// Block 0x2b, offset 0x176
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x2c, offset 0x17d
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x86, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x94, hi: 0x97},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xba, hi: 0xbf},
+	// Block 0x2d, offset 0x188
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x96},
+	{value: 0x0010, lo: 0x9a, hi: 0xb1},
+	{value: 0x0010, lo: 0xb3, hi: 0xbb},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x2e, offset 0x18d
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0010, lo: 0x8f, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x94},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9f},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	// Block 0x2f, offset 0x195
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb4, hi: 0xb7},
+	{value: 0x0034, lo: 0xb8, hi: 0xba},
+	// Block 0x30, offset 0x198
+	{value: 0x0004, lo: 0x86, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x88, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x31, offset 0x19d
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb4, hi: 0xb7},
+	{value: 0x0034, lo: 0xb8, hi: 0xb9},
+	{value: 0x0014, lo: 0xbb, hi: 0xbc},
+	// Block 0x32, offset 0x1a1
+	{value: 0x0004, lo: 0x86, hi: 0x86},
+	{value: 0x0034, lo: 0x88, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x33, offset 0x1a5
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0034, lo: 0x98, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0034, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0034, lo: 0xb9, hi: 0xb9},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x34, offset 0x1ac
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0x89, hi: 0xac},
+	{value: 0x0034, lo: 0xb1, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xba, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x35, offset 0x1b5
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0024, lo: 0x82, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0024, lo: 0x86, hi: 0x87},
+	{value: 0x0010, lo: 0x88, hi: 0x8c},
+	{value: 0x0014, lo: 0x8d, hi: 0x97},
+	{value: 0x0014, lo: 0x99, hi: 0xbc},
+	// Block 0x36, offset 0x1bd
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	// Block 0x37, offset 0x1be
+	{value: 0x0010, lo: 0xab, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0010, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbc},
+	{value: 0x0014, lo: 0xbd, hi: 0xbe},
+	// Block 0x38, offset 0x1c7
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x96, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x99},
+	{value: 0x0014, lo: 0x9e, hi: 0xa0},
+	{value: 0x0010, lo: 0xa2, hi: 0xa4},
+	{value: 0x0010, lo: 0xa7, hi: 0xad},
+	{value: 0x0014, lo: 0xb1, hi: 0xb4},
+	// Block 0x39, offset 0x1ce
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x6c53, lo: 0xa0, hi: 0xbf},
+	// Block 0x3a, offset 0x1d6
+	{value: 0x7053, lo: 0x80, hi: 0x85},
+	{value: 0x7053, lo: 0x87, hi: 0x87},
+	{value: 0x7053, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0xba},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x3b, offset 0x1dc
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0x9a, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x3c, offset 0x1e2
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb5},
+	{value: 0x0010, lo: 0xb8, hi: 0xbe},
+	// Block 0x3d, offset 0x1e7
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x82, hi: 0x85},
+	{value: 0x0010, lo: 0x88, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0xbf},
+	// Block 0x3e, offset 0x1eb
+	{value: 0x0010, lo: 0x80, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0x95},
+	{value: 0x0010, lo: 0x98, hi: 0xbf},
+	// Block 0x3f, offset 0x1ee
+	{value: 0x0010, lo: 0x80, hi: 0x9a},
+	{value: 0x0024, lo: 0x9d, hi: 0x9f},
+	// Block 0x40, offset 0x1f0
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x7453, lo: 0xa0, hi: 0xaf},
+	{value: 0x7853, lo: 0xb0, hi: 0xbf},
+	// Block 0x41, offset 0x1f3
+	{value: 0x7c53, lo: 0x80, hi: 0x8f},
+	{value: 0x8053, lo: 0x90, hi: 0x9f},
+	{value: 0x7c53, lo: 0xa0, hi: 0xaf},
+	{value: 0x0813, lo: 0xb0, hi: 0xb5},
+	{value: 0x0892, lo: 0xb8, hi: 0xbd},
+	// Block 0x42, offset 0x1f8
+	{value: 0x0010, lo: 0x81, hi: 0xbf},
+	// Block 0x43, offset 0x1f9
+	{value: 0x0010, lo: 0x80, hi: 0xac},
+	{value: 0x0010, lo: 0xaf, hi: 0xbf},
+	// Block 0x44, offset 0x1fb
+	{value: 0x0010, lo: 0x81, hi: 0x9a},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x45, offset 0x1fd
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0010, lo: 0xae, hi: 0xb8},
+	// Block 0x46, offset 0x1ff
+	{value: 0x0010, lo: 0x80, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x93},
+	{value: 0x0034, lo: 0x94, hi: 0x94},
+	{value: 0x0010, lo: 0xa0, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	// Block 0x47, offset 0x206
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x93},
+	{value: 0x0010, lo: 0xa0, hi: 0xac},
+	{value: 0x0010, lo: 0xae, hi: 0xb0},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	// Block 0x48, offset 0x20b
+	{value: 0x0014, lo: 0xb4, hi: 0xb5},
+	{value: 0x0010, lo: 0xb6, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x49, offset 0x20f
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0014, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x89, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x92},
+	{value: 0x0014, lo: 0x93, hi: 0x93},
+	{value: 0x0004, lo: 0x97, hi: 0x97},
+	{value: 0x0024, lo: 0x9d, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0x4a, offset 0x218
+	{value: 0x0014, lo: 0x8b, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x4b, offset 0x21b
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0xb7},
+	// Block 0x4c, offset 0x21e
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xa9},
+	{value: 0x0010, lo: 0xaa, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x4d, offset 0x224
+	{value: 0x0010, lo: 0x80, hi: 0xb5},
+	// Block 0x4e, offset 0x225
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0014, lo: 0xa0, hi: 0xa2},
+	{value: 0x0010, lo: 0xa3, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xab},
+	{value: 0x0010, lo: 0xb0, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb2},
+	{value: 0x0010, lo: 0xb3, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xb9},
+	{value: 0x0024, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbb},
+	// Block 0x4f, offset 0x230
+	{value: 0x0010, lo: 0x86, hi: 0x8f},
+	// Block 0x50, offset 0x231
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x51, offset 0x232
+	{value: 0x0010, lo: 0x80, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0x99, hi: 0x9a},
+	{value: 0x0014, lo: 0x9b, hi: 0x9b},
+	// Block 0x52, offset 0x237
+	{value: 0x0010, lo: 0x95, hi: 0x95},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x9e},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa2},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xac},
+	{value: 0x0010, lo: 0xad, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0024, lo: 0xb5, hi: 0xbc},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x53, offset 0x244
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0004, lo: 0xa7, hi: 0xa7},
+	{value: 0x0024, lo: 0xb0, hi: 0xb4},
+	{value: 0x0034, lo: 0xb5, hi: 0xba},
+	{value: 0x0024, lo: 0xbb, hi: 0xbc},
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	// Block 0x54, offset 0x24c
+	{value: 0x0014, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x55, offset 0x254
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0030, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x8b},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0xab, hi: 0xab},
+	{value: 0x0034, lo: 0xac, hi: 0xac},
+	{value: 0x0024, lo: 0xad, hi: 0xb3},
+	// Block 0x56, offset 0x25d
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa9},
+	{value: 0x0030, lo: 0xaa, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xbf},
+	// Block 0x57, offset 0x266
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa9},
+	{value: 0x0010, lo: 0xaa, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb1},
+	{value: 0x0030, lo: 0xb2, hi: 0xb3},
+	// Block 0x58, offset 0x26f
+	{value: 0x0010, lo: 0x80, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	// Block 0x59, offset 0x274
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8d, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	// Block 0x5a, offset 0x277
+	{value: 0x1a6a, lo: 0x80, hi: 0x80},
+	{value: 0x1aea, lo: 0x81, hi: 0x81},
+	{value: 0x1b6a, lo: 0x82, hi: 0x82},
+	{value: 0x1bea, lo: 0x83, hi: 0x83},
+	{value: 0x1c6a, lo: 0x84, hi: 0x84},
+	{value: 0x1cea, lo: 0x85, hi: 0x85},
+	{value: 0x1d6a, lo: 0x86, hi: 0x86},
+	{value: 0x1dea, lo: 0x87, hi: 0x87},
+	{value: 0x1e6a, lo: 0x88, hi: 0x88},
+	// Block 0x5b, offset 0x280
+	{value: 0x0024, lo: 0x90, hi: 0x92},
+	{value: 0x0034, lo: 0x94, hi: 0x99},
+	{value: 0x0024, lo: 0x9a, hi: 0x9b},
+	{value: 0x0034, lo: 0x9c, hi: 0x9f},
+	{value: 0x0024, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0034, lo: 0xa2, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xb3},
+	{value: 0x0024, lo: 0xb4, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb7},
+	{value: 0x0024, lo: 0xb8, hi: 0xb9},
+	// Block 0x5c, offset 0x28d
+	{value: 0x0012, lo: 0x80, hi: 0xab},
+	{value: 0x0015, lo: 0xac, hi: 0xbf},
+	// Block 0x5d, offset 0x28f
+	{value: 0x0015, lo: 0x80, hi: 0xaa},
+	{value: 0x0012, lo: 0xab, hi: 0xb7},
+	{value: 0x0015, lo: 0xb8, hi: 0xb8},
+	{value: 0x8452, lo: 0xb9, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xbc},
+	{value: 0x8852, lo: 0xbd, hi: 0xbd},
+	{value: 0x0012, lo: 0xbe, hi: 0xbf},
+	// Block 0x5e, offset 0x296
+	{value: 0x0012, lo: 0x80, hi: 0x9a},
+	{value: 0x0015, lo: 0x9b, hi: 0xbf},
+	// Block 0x5f, offset 0x298
+	{value: 0x0024, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0024, lo: 0x83, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0024, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x90},
+	{value: 0x0024, lo: 0x91, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb9},
+	{value: 0x0024, lo: 0xbb, hi: 0xbb},
+	{value: 0x0034, lo: 0xbc, hi: 0xbd},
+	{value: 0x0024, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x60, offset 0x2a4
+	{value: 0x0117, lo: 0x80, hi: 0xbf},
+	// Block 0x61, offset 0x2a5
+	{value: 0x0117, lo: 0x80, hi: 0x95},
+	{value: 0x1f1a, lo: 0x96, hi: 0x96},
+	{value: 0x1fca, lo: 0x97, hi: 0x97},
+	{value: 0x207a, lo: 0x98, hi: 0x98},
+	{value: 0x212a, lo: 0x99, hi: 0x99},
+	{value: 0x21da, lo: 0x9a, hi: 0x9a},
+	{value: 0x228a, lo: 0x9b, hi: 0x9b},
+	{value: 0x0012, lo: 0x9c, hi: 0x9d},
+	{value: 0x233b, lo: 0x9e, hi: 0x9e},
+	{value: 0x0012, lo: 0x9f, hi: 0x9f},
+	{value: 0x0117, lo: 0xa0, hi: 0xbf},
+	// Block 0x62, offset 0x2b0
+	{value: 0x0812, lo: 0x80, hi: 0x87},
+	{value: 0x0813, lo: 0x88, hi: 0x8f},
+	{value: 0x0812, lo: 0x90, hi: 0x95},
+	{value: 0x0813, lo: 0x98, hi: 0x9d},
+	{value: 0x0812, lo: 0xa0, hi: 0xa7},
+	{value: 0x0813, lo: 0xa8, hi: 0xaf},
+	{value: 0x0812, lo: 0xb0, hi: 0xb7},
+	{value: 0x0813, lo: 0xb8, hi: 0xbf},
+	// Block 0x63, offset 0x2b8
+	{value: 0x0004, lo: 0x8b, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8f},
+	{value: 0x0054, lo: 0x98, hi: 0x99},
+	{value: 0x0054, lo: 0xa4, hi: 0xa4},
+	{value: 0x0054, lo: 0xa7, hi: 0xa7},
+	{value: 0x0014, lo: 0xaa, hi: 0xae},
+	{value: 0x0010, lo: 0xaf, hi: 0xaf},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x64, offset 0x2c0
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x94, hi: 0x94},
+	{value: 0x0014, lo: 0xa0, hi: 0xa4},
+	{value: 0x0014, lo: 0xa6, hi: 0xaf},
+	{value: 0x0015, lo: 0xb1, hi: 0xb1},
+	{value: 0x0015, lo: 0xbf, hi: 0xbf},
+	// Block 0x65, offset 0x2c6
+	{value: 0x0015, lo: 0x90, hi: 0x9c},
+	// Block 0x66, offset 0x2c7
+	{value: 0x0024, lo: 0x90, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x93},
+	{value: 0x0024, lo: 0x94, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x9a},
+	{value: 0x0024, lo: 0x9b, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0xa0},
+	{value: 0x0024, lo: 0xa1, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa4},
+	{value: 0x0034, lo: 0xa5, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa7},
+	{value: 0x0034, lo: 0xa8, hi: 0xa8},
+	{value: 0x0024, lo: 0xa9, hi: 0xa9},
+	{value: 0x0034, lo: 0xaa, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	// Block 0x67, offset 0x2d5
+	{value: 0x0016, lo: 0x85, hi: 0x86},
+	{value: 0x0012, lo: 0x87, hi: 0x89},
+	{value: 0x9d52, lo: 0x8e, hi: 0x8e},
+	{value: 0x1013, lo: 0xa0, hi: 0xaf},
+	{value: 0x1012, lo: 0xb0, hi: 0xbf},
+	// Block 0x68, offset 0x2da
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x88},
+	// Block 0x69, offset 0x2dd
+	{value: 0xa053, lo: 0xb6, hi: 0xb7},
+	{value: 0xa353, lo: 0xb8, hi: 0xb9},
+	{value: 0xa653, lo: 0xba, hi: 0xbb},
+	{value: 0xa353, lo: 0xbc, hi: 0xbd},
+	{value: 0xa053, lo: 0xbe, hi: 0xbf},
+	// Block 0x6a, offset 0x2e2
+	{value: 0x3013, lo: 0x80, hi: 0x8f},
+	{value: 0x6553, lo: 0x90, hi: 0x9f},
+	{value: 0xa953, lo: 0xa0, hi: 0xae},
+	{value: 0x3012, lo: 0xb0, hi: 0xbf},
+	// Block 0x6b, offset 0x2e6
+	{value: 0x0117, lo: 0x80, hi: 0xa3},
+	{value: 0x0012, lo: 0xa4, hi: 0xa4},
+	{value: 0x0716, lo: 0xab, hi: 0xac},
+	{value: 0x0316, lo: 0xad, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xb3},
+	// Block 0x6c, offset 0x2ec
+	{value: 0x6c52, lo: 0x80, hi: 0x9f},
+	{value: 0x7052, lo: 0xa0, hi: 0xa5},
+	{value: 0x7052, lo: 0xa7, hi: 0xa7},
+	{value: 0x7052, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x6d, offset 0x2f1
+	{value: 0x0010, lo: 0x80, hi: 0xa7},
+	{value: 0x0014, lo: 0xaf, hi: 0xaf},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x6e, offset 0x2f4
+	{value: 0x0010, lo: 0x80, hi: 0x96},
+	{value: 0x0010, lo: 0xa0, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xae},
+	{value: 0x0010, lo: 0xb0, hi: 0xb6},
+	{value: 0x0010, lo: 0xb8, hi: 0xbe},
+	// Block 0x6f, offset 0x2f9
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9e},
+	{value: 0x0024, lo: 0xa0, hi: 0xbf},
+	// Block 0x70, offset 0x2fe
+	{value: 0x0014, lo: 0xaf, hi: 0xaf},
+	// Block 0x71, offset 0x2ff
+	{value: 0x0014, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0xaa, hi: 0xad},
+	{value: 0x0030, lo: 0xae, hi: 0xaf},
+	{value: 0x0004, lo: 0xb1, hi: 0xb5},
+	{value: 0x0014, lo: 0xbb, hi: 0xbb},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	// Block 0x72, offset 0x305
+	{value: 0x0034, lo: 0x99, hi: 0x9a},
+	{value: 0x0004, lo: 0x9b, hi: 0x9e},
+	// Block 0x73, offset 0x307
+	{value: 0x0004, lo: 0xbc, hi: 0xbe},
+	// Block 0x74, offset 0x308
+	{value: 0x0010, lo: 0x85, hi: 0xae},
+	{value: 0x0010, lo: 0xb1, hi: 0xbf},
+	// Block 0x75, offset 0x30a
+	{value: 0x0010, lo: 0x80, hi: 0x8e},
+	{value: 0x0010, lo: 0xa0, hi: 0xba},
+	// Block 0x76, offset 0x30c
+	{value: 0x0010, lo: 0x80, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0x96, hi: 0xbf},
+	// Block 0x77, offset 0x30f
+	{value: 0x0010, lo: 0x80, hi: 0x8c},
+	// Block 0x78, offset 0x310
+	{value: 0x0010, lo: 0x90, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	// Block 0x79, offset 0x312
+	{value: 0x0010, lo: 0x80, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0010, lo: 0x90, hi: 0xab},
+	// Block 0x7a, offset 0x315
+	{value: 0x0117, lo: 0x80, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb2},
+	{value: 0x0024, lo: 0xb4, hi: 0xbd},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x7b, offset 0x31b
+	{value: 0x0117, lo: 0x80, hi: 0x9b},
+	{value: 0x0015, lo: 0x9c, hi: 0x9d},
+	{value: 0x0024, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x7c, offset 0x31f
+	{value: 0x0010, lo: 0x80, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb1},
+	// Block 0x7d, offset 0x321
+	{value: 0x0004, lo: 0x80, hi: 0x96},
+	{value: 0x0014, lo: 0x97, hi: 0xa1},
+	{value: 0x0117, lo: 0xa2, hi: 0xaf},
+	{value: 0x0012, lo: 0xb0, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xbf},
+	// Block 0x7e, offset 0x326
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x0015, lo: 0xb0, hi: 0xb0},
+	{value: 0x0012, lo: 0xb1, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x8453, lo: 0xbd, hi: 0xbd},
+	{value: 0x0117, lo: 0xbe, hi: 0xbf},
+	// Block 0x7f, offset 0x32d
+	{value: 0x0010, lo: 0xb7, hi: 0xb7},
+	{value: 0x0015, lo: 0xb8, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbf},
+	// Block 0x80, offset 0x331
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8b},
+	{value: 0x0010, lo: 0x8c, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa6},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	// Block 0x81, offset 0x33a
+	{value: 0x0010, lo: 0x80, hi: 0xb3},
+	// Block 0x82, offset 0x33b
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x85},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0xa0, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb7},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x83, offset 0x343
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0014, lo: 0xa6, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x84, offset 0x347
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x91},
+	{value: 0x0010, lo: 0x92, hi: 0x92},
+	{value: 0x0030, lo: 0x93, hi: 0x93},
+	{value: 0x0010, lo: 0xa0, hi: 0xbc},
+	// Block 0x85, offset 0x34c
+	{value: 0x0014, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xb9},
+	{value: 0x0010, lo: 0xba, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x86, offset 0x354
+	{value: 0x0030, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0014, lo: 0xa5, hi: 0xa5},
+	{value: 0x0004, lo: 0xa6, hi: 0xa6},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x87, offset 0x35a
+	{value: 0x0010, lo: 0x80, hi: 0xa8},
+	{value: 0x0014, lo: 0xa9, hi: 0xae},
+	{value: 0x0010, lo: 0xaf, hi: 0xb0},
+	{value: 0x0014, lo: 0xb1, hi: 0xb2},
+	{value: 0x0010, lo: 0xb3, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb6},
+	// Block 0x88, offset 0x360
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0010, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0004, lo: 0xb0, hi: 0xb0},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x89, offset 0x36a
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	{value: 0x0024, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0024, lo: 0xb7, hi: 0xb8},
+	{value: 0x0024, lo: 0xbe, hi: 0xbf},
+	// Block 0x8a, offset 0x36f
+	{value: 0x0024, lo: 0x81, hi: 0x81},
+	{value: 0x0004, lo: 0x9d, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0010, lo: 0xb2, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	// Block 0x8b, offset 0x378
+	{value: 0x0010, lo: 0x81, hi: 0x86},
+	{value: 0x0010, lo: 0x89, hi: 0x8e},
+	{value: 0x0010, lo: 0x91, hi: 0x96},
+	{value: 0x0010, lo: 0xa0, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xae},
+	{value: 0x0012, lo: 0xb0, hi: 0xbf},
+	// Block 0x8c, offset 0x37e
+	{value: 0x0012, lo: 0x80, hi: 0x92},
+	{value: 0xac52, lo: 0x93, hi: 0x93},
+	{value: 0x0012, lo: 0x94, hi: 0x9a},
+	{value: 0x0014, lo: 0x9b, hi: 0x9b},
+	{value: 0x0015, lo: 0x9c, hi: 0x9f},
+	{value: 0x0012, lo: 0xa0, hi: 0xa5},
+	{value: 0x74d2, lo: 0xb0, hi: 0xbf},
+	// Block 0x8d, offset 0x385
+	{value: 0x78d2, lo: 0x80, hi: 0x8f},
+	{value: 0x7cd2, lo: 0x90, hi: 0x9f},
+	{value: 0x80d2, lo: 0xa0, hi: 0xaf},
+	{value: 0x7cd2, lo: 0xb0, hi: 0xbf},
+	// Block 0x8e, offset 0x389
+	{value: 0x0010, lo: 0x80, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xaa},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x8f, offset 0x391
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x90, offset 0x393
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x8b, hi: 0xbb},
+	// Block 0x91, offset 0x395
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x86, hi: 0xbf},
+	// Block 0x92, offset 0x398
+	{value: 0x0010, lo: 0x80, hi: 0xb1},
+	{value: 0x0004, lo: 0xb2, hi: 0xbf},
+	// Block 0x93, offset 0x39a
+	{value: 0x0004, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x93, hi: 0xbf},
+	// Block 0x94, offset 0x39c
+	{value: 0x0010, lo: 0x80, hi: 0xbd},
+	// Block 0x95, offset 0x39d
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0x96, offset 0x39e
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x0010, lo: 0x92, hi: 0xbf},
+	// Block 0x97, offset 0x3a0
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0xb0, hi: 0xbb},
+	// Block 0x98, offset 0x3a2
+	{value: 0x0014, lo: 0x80, hi: 0x8f},
+	{value: 0x0054, lo: 0x93, hi: 0x93},
+	{value: 0x0024, lo: 0xa0, hi: 0xa6},
+	{value: 0x0034, lo: 0xa7, hi: 0xad},
+	{value: 0x0024, lo: 0xae, hi: 0xaf},
+	{value: 0x0010, lo: 0xb3, hi: 0xb4},
+	// Block 0x99, offset 0x3a8
+	{value: 0x0010, lo: 0x8d, hi: 0x8f},
+	{value: 0x0054, lo: 0x92, hi: 0x92},
+	{value: 0x0054, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0xb0, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0x9a, offset 0x3ad
+	{value: 0x0010, lo: 0x80, hi: 0xbc},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x9b, offset 0x3af
+	{value: 0x0054, lo: 0x87, hi: 0x87},
+	{value: 0x0054, lo: 0x8e, hi: 0x8e},
+	{value: 0x0054, lo: 0x9a, hi: 0x9a},
+	{value: 0x5f53, lo: 0xa1, hi: 0xba},
+	{value: 0x0004, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x9c, offset 0x3b5
+	{value: 0x0004, lo: 0x80, hi: 0x80},
+	{value: 0x5f52, lo: 0x81, hi: 0x9a},
+	{value: 0x0004, lo: 0xb0, hi: 0xb0},
+	// Block 0x9d, offset 0x3b8
+	{value: 0x0014, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xbe},
+	// Block 0x9e, offset 0x3ba
+	{value: 0x0010, lo: 0x82, hi: 0x87},
+	{value: 0x0010, lo: 0x8a, hi: 0x8f},
+	{value: 0x0010, lo: 0x92, hi: 0x97},
+	{value: 0x0010, lo: 0x9a, hi: 0x9c},
+	{value: 0x0004, lo: 0xa3, hi: 0xa3},
+	{value: 0x0014, lo: 0xb9, hi: 0xbb},
+	// Block 0x9f, offset 0x3c0
+	{value: 0x0010, lo: 0x80, hi: 0x8b},
+	{value: 0x0010, lo: 0x8d, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xba},
+	{value: 0x0010, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xa0, offset 0x3c5
+	{value: 0x0010, lo: 0x80, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x9d},
+	// Block 0xa1, offset 0x3c7
+	{value: 0x0010, lo: 0x80, hi: 0xba},
+	// Block 0xa2, offset 0x3c8
+	{value: 0x0010, lo: 0x80, hi: 0xb4},
+	// Block 0xa3, offset 0x3c9
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	// Block 0xa4, offset 0x3ca
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xa5, offset 0x3cc
+	{value: 0x0010, lo: 0x80, hi: 0x90},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	// Block 0xa6, offset 0x3ce
+	{value: 0x0010, lo: 0x80, hi: 0x9f},
+	{value: 0x0010, lo: 0xad, hi: 0xbf},
+	// Block 0xa7, offset 0x3d0
+	{value: 0x0010, lo: 0x80, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0xb5},
+	{value: 0x0024, lo: 0xb6, hi: 0xba},
+	// Block 0xa8, offset 0x3d3
+	{value: 0x0010, lo: 0x80, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xa9, offset 0x3d5
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x88, hi: 0x8f},
+	{value: 0x0010, lo: 0x91, hi: 0x95},
+	// Block 0xaa, offset 0x3d8
+	{value: 0x2813, lo: 0x80, hi: 0x87},
+	{value: 0x3813, lo: 0x88, hi: 0x8f},
+	{value: 0x2813, lo: 0x90, hi: 0x97},
+	{value: 0xaf53, lo: 0x98, hi: 0x9f},
+	{value: 0xb253, lo: 0xa0, hi: 0xa7},
+	{value: 0x2812, lo: 0xa8, hi: 0xaf},
+	{value: 0x3812, lo: 0xb0, hi: 0xb7},
+	{value: 0x2812, lo: 0xb8, hi: 0xbf},
+	// Block 0xab, offset 0x3e0
+	{value: 0xaf52, lo: 0x80, hi: 0x87},
+	{value: 0xb252, lo: 0x88, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0xac, offset 0x3e3
+	{value: 0x0010, lo: 0x80, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0xb253, lo: 0xb0, hi: 0xb7},
+	{value: 0xaf53, lo: 0xb8, hi: 0xbf},
+	// Block 0xad, offset 0x3e7
+	{value: 0x2813, lo: 0x80, hi: 0x87},
+	{value: 0x3813, lo: 0x88, hi: 0x8f},
+	{value: 0x2813, lo: 0x90, hi: 0x93},
+	{value: 0xb252, lo: 0x98, hi: 0x9f},
+	{value: 0xaf52, lo: 0xa0, hi: 0xa7},
+	{value: 0x2812, lo: 0xa8, hi: 0xaf},
+	{value: 0x3812, lo: 0xb0, hi: 0xb7},
+	{value: 0x2812, lo: 0xb8, hi: 0xbb},
+	// Block 0xae, offset 0x3ef
+	{value: 0x0010, lo: 0x80, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xaf, offset 0x3f1
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	// Block 0xb0, offset 0x3f2
+	{value: 0x0010, lo: 0x80, hi: 0xb6},
+	// Block 0xb1, offset 0x3f3
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xa7},
+	// Block 0xb2, offset 0x3f5
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0010, lo: 0x88, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0xb5},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xb3, offset 0x3fb
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb6},
+	// Block 0xb4, offset 0x3fd
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	// Block 0xb5, offset 0x3fe
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	// Block 0xb6, offset 0x400
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb9},
+	// Block 0xb7, offset 0x402
+	{value: 0x0010, lo: 0x80, hi: 0xb7},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0xb8, offset 0x404
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x83},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x8e, hi: 0x8e},
+	{value: 0x0024, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x97},
+	{value: 0x0010, lo: 0x99, hi: 0xb3},
+	{value: 0x0024, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xb9, offset 0x411
+	{value: 0x0010, lo: 0xa0, hi: 0xbc},
+	// Block 0xba, offset 0x412
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	// Block 0xbb, offset 0x413
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0x89, hi: 0xa4},
+	{value: 0x0024, lo: 0xa5, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	// Block 0xbc, offset 0x417
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	// Block 0xbd, offset 0x419
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	// Block 0xbe, offset 0x41a
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	// Block 0xbf, offset 0x41b
+	{value: 0x5653, lo: 0x80, hi: 0xb2},
+	// Block 0xc0, offset 0x41c
+	{value: 0x5652, lo: 0x80, hi: 0xb2},
+	// Block 0xc1, offset 0x41d
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbf},
+	// Block 0xc2, offset 0x421
+	{value: 0x0014, lo: 0x80, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xc3, offset 0x425
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb6},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0014, lo: 0xbd, hi: 0xbd},
+	// Block 0xc4, offset 0x42b
+	{value: 0x0010, lo: 0x90, hi: 0xa8},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xc5, offset 0x42d
+	{value: 0x0024, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xab},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0xc6, offset 0x434
+	{value: 0x0010, lo: 0x90, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb3},
+	{value: 0x0010, lo: 0xb6, hi: 0xb6},
+	// Block 0xc7, offset 0x437
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xc8, offset 0x43b
+	{value: 0x0030, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8c},
+	{value: 0x0010, lo: 0x90, hi: 0x9a},
+	{value: 0x0010, lo: 0x9c, hi: 0x9c},
+	// Block 0xc9, offset 0x441
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0014, lo: 0xb4, hi: 0xb4},
+	{value: 0x0030, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xb7},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	// Block 0xca, offset 0x44a
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa8},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xcb, offset 0x450
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0014, lo: 0x9f, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa2},
+	{value: 0x0014, lo: 0xa3, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xcc, offset 0x456
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0xcd, offset 0x460
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0030, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9d, hi: 0xa3},
+	{value: 0x0024, lo: 0xa6, hi: 0xac},
+	{value: 0x0024, lo: 0xb0, hi: 0xb4},
+	// Block 0xce, offset 0x46a
+	{value: 0x0010, lo: 0x80, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbf},
+	// Block 0xcf, offset 0x46c
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd0, offset 0x473
+	{value: 0x0010, lo: 0x80, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb8},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0xd1, offset 0x479
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0x85},
+	{value: 0x0010, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd2, offset 0x47f
+	{value: 0x0010, lo: 0x80, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb5},
+	{value: 0x0010, lo: 0xb8, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xd3, offset 0x485
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x98, hi: 0x9b},
+	{value: 0x0014, lo: 0x9c, hi: 0x9d},
+	// Block 0xd4, offset 0x488
+	{value: 0x0010, lo: 0x80, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbc},
+	{value: 0x0014, lo: 0xbd, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xd5, offset 0x48e
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd6, offset 0x491
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0014, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb5},
+	{value: 0x0030, lo: 0xb6, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	// Block 0xd7, offset 0x499
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	// Block 0xd8, offset 0x49a
+	{value: 0x0014, lo: 0x9d, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xd9, offset 0x4a1
+	{value: 0x5f53, lo: 0xa0, hi: 0xbf},
+	// Block 0xda, offset 0x4a2
+	{value: 0x5f52, lo: 0x80, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xdb, offset 0x4a5
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x89, hi: 0x8a},
+	{value: 0x0010, lo: 0x8b, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb8},
+	{value: 0x0010, lo: 0xb9, hi: 0xba},
+	{value: 0x0014, lo: 0xbb, hi: 0xbe},
+	// Block 0xdc, offset 0x4af
+	{value: 0x0034, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0014, lo: 0x91, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x98},
+	{value: 0x0014, lo: 0x99, hi: 0x9b},
+	{value: 0x0010, lo: 0x9c, hi: 0xbf},
+	// Block 0xdd, offset 0x4b5
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x86, hi: 0x89},
+	{value: 0x0014, lo: 0x8a, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x98},
+	{value: 0x0034, lo: 0x99, hi: 0x99},
+	// Block 0xde, offset 0x4bb
+	{value: 0x0010, lo: 0x80, hi: 0xb8},
+	// Block 0xdf, offset 0x4bc
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb6},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xe0, offset 0x4c2
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xb2, hi: 0xbf},
+	// Block 0xe1, offset 0x4c5
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x0014, lo: 0x92, hi: 0xa7},
+	{value: 0x0010, lo: 0xa9, hi: 0xa9},
+	{value: 0x0014, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb6},
+	// Block 0xe2, offset 0x4cd
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0xb0},
+	{value: 0x0014, lo: 0xb1, hi: 0xb6},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0xe3, offset 0x4d4
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x85},
+	{value: 0x0010, lo: 0x86, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xe4, offset 0x4db
+	{value: 0x0010, lo: 0x80, hi: 0x99},
+	// Block 0xe5, offset 0x4dc
+	{value: 0x0010, lo: 0x80, hi: 0xae},
+	// Block 0xe6, offset 0x4dd
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	// Block 0xe7, offset 0x4de
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	// Block 0xe8, offset 0x4df
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0xe9, offset 0x4e1
+	{value: 0x0010, lo: 0x90, hi: 0xad},
+	{value: 0x0034, lo: 0xb0, hi: 0xb4},
+	// Block 0xea, offset 0x4e3
+	{value: 0x0010, lo: 0x80, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb6},
+	// Block 0xeb, offset 0x4e5
+	{value: 0x0014, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa3, hi: 0xb7},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0xec, offset 0x4e9
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	// Block 0xed, offset 0x4ea
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0010, lo: 0x90, hi: 0xbe},
+	// Block 0xee, offset 0x4ec
+	{value: 0x0014, lo: 0x8f, hi: 0x9f},
+	// Block 0xef, offset 0x4ed
+	{value: 0x0014, lo: 0xa0, hi: 0xa1},
+	// Block 0xf0, offset 0x4ee
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xbc},
+	// Block 0xf1, offset 0x4f0
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x0034, lo: 0x9e, hi: 0x9e},
+	{value: 0x0014, lo: 0xa0, hi: 0xa3},
+	// Block 0xf2, offset 0x4f5
+	{value: 0x0030, lo: 0xa5, hi: 0xa6},
+	{value: 0x0034, lo: 0xa7, hi: 0xa9},
+	{value: 0x0030, lo: 0xad, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbf},
+	// Block 0xf3, offset 0x4fa
+	{value: 0x0034, lo: 0x80, hi: 0x82},
+	{value: 0x0024, lo: 0x85, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8b},
+	{value: 0x0024, lo: 0xaa, hi: 0xad},
+	// Block 0xf4, offset 0x4fe
+	{value: 0x0024, lo: 0x82, hi: 0x84},
+	// Block 0xf5, offset 0x4ff
+	{value: 0x0013, lo: 0x80, hi: 0x99},
+	{value: 0x0012, lo: 0x9a, hi: 0xb3},
+	{value: 0x0013, lo: 0xb4, hi: 0xbf},
+	// Block 0xf6, offset 0x502
+	{value: 0x0013, lo: 0x80, hi: 0x8d},
+	{value: 0x0012, lo: 0x8e, hi: 0x94},
+	{value: 0x0012, lo: 0x96, hi: 0xa7},
+	{value: 0x0013, lo: 0xa8, hi: 0xbf},
+	// Block 0xf7, offset 0x506
+	{value: 0x0013, lo: 0x80, hi: 0x81},
+	{value: 0x0012, lo: 0x82, hi: 0x9b},
+	{value: 0x0013, lo: 0x9c, hi: 0x9c},
+	{value: 0x0013, lo: 0x9e, hi: 0x9f},
+	{value: 0x0013, lo: 0xa2, hi: 0xa2},
+	{value: 0x0013, lo: 0xa5, hi: 0xa6},
+	{value: 0x0013, lo: 0xa9, hi: 0xac},
+	{value: 0x0013, lo: 0xae, hi: 0xb5},
+	{value: 0x0012, lo: 0xb6, hi: 0xb9},
+	{value: 0x0012, lo: 0xbb, hi: 0xbb},
+	{value: 0x0012, lo: 0xbd, hi: 0xbf},
+	// Block 0xf8, offset 0x511
+	{value: 0x0012, lo: 0x80, hi: 0x83},
+	{value: 0x0012, lo: 0x85, hi: 0x8f},
+	{value: 0x0013, lo: 0x90, hi: 0xa9},
+	{value: 0x0012, lo: 0xaa, hi: 0xbf},
+	// Block 0xf9, offset 0x515
+	{value: 0x0012, lo: 0x80, hi: 0x83},
+	{value: 0x0013, lo: 0x84, hi: 0x85},
+	{value: 0x0013, lo: 0x87, hi: 0x8a},
+	{value: 0x0013, lo: 0x8d, hi: 0x94},
+	{value: 0x0013, lo: 0x96, hi: 0x9c},
+	{value: 0x0012, lo: 0x9e, hi: 0xb7},
+	{value: 0x0013, lo: 0xb8, hi: 0xb9},
+	{value: 0x0013, lo: 0xbb, hi: 0xbe},
+	// Block 0xfa, offset 0x51d
+	{value: 0x0013, lo: 0x80, hi: 0x84},
+	{value: 0x0013, lo: 0x86, hi: 0x86},
+	{value: 0x0013, lo: 0x8a, hi: 0x90},
+	{value: 0x0012, lo: 0x92, hi: 0xab},
+	{value: 0x0013, lo: 0xac, hi: 0xbf},
+	// Block 0xfb, offset 0x522
+	{value: 0x0013, lo: 0x80, hi: 0x85},
+	{value: 0x0012, lo: 0x86, hi: 0x9f},
+	{value: 0x0013, lo: 0xa0, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xbf},
+	// Block 0xfc, offset 0x526
+	{value: 0x0012, lo: 0x80, hi: 0x93},
+	{value: 0x0013, lo: 0x94, hi: 0xad},
+	{value: 0x0012, lo: 0xae, hi: 0xbf},
+	// Block 0xfd, offset 0x529
+	{value: 0x0012, lo: 0x80, hi: 0x87},
+	{value: 0x0013, lo: 0x88, hi: 0xa1},
+	{value: 0x0012, lo: 0xa2, hi: 0xbb},
+	{value: 0x0013, lo: 0xbc, hi: 0xbf},
+	// Block 0xfe, offset 0x52d
+	{value: 0x0013, lo: 0x80, hi: 0x95},
+	{value: 0x0012, lo: 0x96, hi: 0xaf},
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0xff, offset 0x530
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	{value: 0x0012, lo: 0x8a, hi: 0xa5},
+	{value: 0x0013, lo: 0xa8, hi: 0xbf},
+	// Block 0x100, offset 0x533
+	{value: 0x0013, lo: 0x80, hi: 0x80},
+	{value: 0x0012, lo: 0x82, hi: 0x9a},
+	{value: 0x0012, lo: 0x9c, hi: 0xa1},
+	{value: 0x0013, lo: 0xa2, hi: 0xba},
+	{value: 0x0012, lo: 0xbc, hi: 0xbf},
+	// Block 0x101, offset 0x538
+	{value: 0x0012, lo: 0x80, hi: 0x94},
+	{value: 0x0012, lo: 0x96, hi: 0x9b},
+	{value: 0x0013, lo: 0x9c, hi: 0xb4},
+	{value: 0x0012, lo: 0xb6, hi: 0xbf},
+	// Block 0x102, offset 0x53c
+	{value: 0x0012, lo: 0x80, hi: 0x8e},
+	{value: 0x0012, lo: 0x90, hi: 0x95},
+	{value: 0x0013, lo: 0x96, hi: 0xae},
+	{value: 0x0012, lo: 0xb0, hi: 0xbf},
+	// Block 0x103, offset 0x540
+	{value: 0x0012, lo: 0x80, hi: 0x88},
+	{value: 0x0012, lo: 0x8a, hi: 0x8f},
+	{value: 0x0013, lo: 0x90, hi: 0xa8},
+	{value: 0x0012, lo: 0xaa, hi: 0xbf},
+	// Block 0x104, offset 0x544
+	{value: 0x0012, lo: 0x80, hi: 0x82},
+	{value: 0x0012, lo: 0x84, hi: 0x89},
+	{value: 0x0017, lo: 0x8a, hi: 0x8b},
+	{value: 0x0010, lo: 0x8e, hi: 0xbf},
+	// Block 0x105, offset 0x548
+	{value: 0x0014, lo: 0x80, hi: 0xb6},
+	{value: 0x0014, lo: 0xbb, hi: 0xbf},
+	// Block 0x106, offset 0x54a
+	{value: 0x0014, lo: 0x80, hi: 0xac},
+	{value: 0x0014, lo: 0xb5, hi: 0xb5},
+	// Block 0x107, offset 0x54c
+	{value: 0x0014, lo: 0x84, hi: 0x84},
+	{value: 0x0014, lo: 0x9b, hi: 0x9f},
+	{value: 0x0014, lo: 0xa1, hi: 0xaf},
+	// Block 0x108, offset 0x54f
+	{value: 0x0024, lo: 0x80, hi: 0x86},
+	{value: 0x0024, lo: 0x88, hi: 0x98},
+	{value: 0x0024, lo: 0x9b, hi: 0xa1},
+	{value: 0x0024, lo: 0xa3, hi: 0xa4},
+	{value: 0x0024, lo: 0xa6, hi: 0xaa},
+	// Block 0x109, offset 0x554
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0034, lo: 0x90, hi: 0x96},
+	// Block 0x10a, offset 0x556
+	{value: 0xb552, lo: 0x80, hi: 0x81},
+	{value: 0xb852, lo: 0x82, hi: 0x83},
+	{value: 0x0024, lo: 0x84, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x10b, offset 0x55b
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x9f},
+	{value: 0x0010, lo: 0xa1, hi: 0xa2},
+	{value: 0x0010, lo: 0xa4, hi: 0xa4},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0010, lo: 0xa9, hi: 0xb2},
+	{value: 0x0010, lo: 0xb4, hi: 0xb7},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	// Block 0x10c, offset 0x564
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0x9b},
+	{value: 0x0010, lo: 0xa1, hi: 0xa3},
+	{value: 0x0010, lo: 0xa5, hi: 0xa9},
+	{value: 0x0010, lo: 0xab, hi: 0xbb},
+	// Block 0x10d, offset 0x569
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x10e, offset 0x56a
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	{value: 0x0013, lo: 0x90, hi: 0xa9},
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x10f, offset 0x56d
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	// Block 0x110, offset 0x56e
+	{value: 0x0004, lo: 0xbb, hi: 0xbf},
+	// Block 0x111, offset 0x56f
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0014, lo: 0xa0, hi: 0xbf},
+	// Block 0x112, offset 0x571
+	{value: 0x0014, lo: 0x80, hi: 0xbf},
+	// Block 0x113, offset 0x572
+	{value: 0x0014, lo: 0x80, hi: 0xaf},
+}
+
+// Total table size 14177 bytes (13KiB); checksum: F17D40E8
diff --git a/vendor/golang.org/x/text/cases/tables11.0.0.go b/vendor/golang.org/x/text/cases/tables11.0.0.go
new file mode 100644
index 00000000..b1106b41
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/tables11.0.0.go
@@ -0,0 +1,2317 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+//go:build go1.13 && !go1.14
+// +build go1.13,!go1.14
+
+package cases
+
+// UnicodeVersion is the Unicode version from which the tables in this package are derived.
+const UnicodeVersion = "11.0.0"
+
+var xorData string = "" + // Size: 188 bytes
+	"\x00\x06\x07\x00\x01?\x00\x0f\x03\x00\x0f\x12\x00\x0f\x1f\x00\x0f\x1d" +
+	"\x00\x01\x13\x00\x0f\x16\x00\x0f\x0b\x00\x0f3\x00\x0f7\x00\x01#\x00\x0f?" +
+	"\x00\x0e'\x00\x0f/\x00\x0e>\x00\x0f*\x00\x0c&\x00\x0c*\x00\x0c;\x00\x0c9" +
+	"\x00\x0c%\x00\x01\x08\x00\x03\x0d\x00\x03\x09\x00\x02\x06\x00\x02\x02" +
+	"\x00\x02\x0c\x00\x01\x00\x00\x01\x03\x00\x01\x01\x00\x01 \x00\x01\x0c" +
+	"\x00\x01\x10\x00\x03\x10\x00\x036 \x00\x037 \x00\x0b#\x10\x00\x0b 0\x00" +
+	"\x0b!\x10\x00\x0b!0\x001\x00\x00\x0b(\x04\x00\x03\x04\x1e\x00\x03\x0a" +
+	"\x00\x02:\x00\x02>\x00\x02,\x00\x02\x00\x00\x02\x10\x00\x01<\x00\x01&" +
+	"\x00\x01*\x00\x01.\x00\x010\x003 \x00\x01\x18\x00\x01(\x00\x01\x1e\x00" +
+	"\x01\x22"
+
+var exceptions string = "" + // Size: 2436 bytes
+	"\x00\x12\x12μΜΜ\x12\x12ssSSSs\x13\x18i̇i̇\x10\x09II\x13\x1bʼnʼNʼN\x11" +
+	"\x09sSS\x12\x12dždžDž\x12\x12dždžDŽ\x10\x12DŽDž\x12\x12ljljLj\x12\x12ljljLJ\x10\x12LJLj" +
+	"\x12\x12njnjNj\x12\x12njnjNJ\x10\x12NJNj\x13\x1bǰJ̌J̌\x12\x12dzdzDz\x12\x12dzdzDZ\x10" +
+	"\x12DZDz\x13\x18ⱥⱥ\x13\x18ⱦⱦ\x10\x1bⱾⱾ\x10\x1bⱿⱿ\x10\x1bⱯⱯ\x10\x1bⱭⱭ\x10" +
+	"\x1bⱰⱰ\x10\x1bꞫꞫ\x10\x1bꞬꞬ\x10\x1bꞍꞍ\x10\x1bꞪꞪ\x10\x1bꞮꞮ\x10\x1bⱢⱢ\x10" +
+	"\x1bꞭꞭ\x10\x1bⱮⱮ\x10\x1bⱤⱤ\x10\x1bꞱꞱ\x10\x1bꞲꞲ\x10\x1bꞰꞰ2\x12ιΙΙ\x166ΐ" +
+	"Ϊ́Ϊ́\x166ΰΫ́Ϋ́\x12\x12σΣΣ\x12\x12βΒΒ\x12\x12θΘΘ\x12\x12φΦΦ\x12" +
+	"\x12πΠΠ\x12\x12κΚΚ\x12\x12ρΡΡ\x12\x12εΕΕ\x14$եւԵՒԵւ\x10\x1bᲐა\x10\x1bᲑბ" +
+	"\x10\x1bᲒგ\x10\x1bᲓდ\x10\x1bᲔე\x10\x1bᲕვ\x10\x1bᲖზ\x10\x1bᲗთ\x10\x1bᲘი" +
+	"\x10\x1bᲙკ\x10\x1bᲚლ\x10\x1bᲛმ\x10\x1bᲜნ\x10\x1bᲝო\x10\x1bᲞპ\x10\x1bᲟჟ" +
+	"\x10\x1bᲠრ\x10\x1bᲡს\x10\x1bᲢტ\x10\x1bᲣუ\x10\x1bᲤფ\x10\x1bᲥქ\x10\x1bᲦღ" +
+	"\x10\x1bᲧყ\x10\x1bᲨშ\x10\x1bᲩჩ\x10\x1bᲪც\x10\x1bᲫძ\x10\x1bᲬწ\x10\x1bᲭჭ" +
+	"\x10\x1bᲮხ\x10\x1bᲯჯ\x10\x1bᲰჰ\x10\x1bᲱჱ\x10\x1bᲲჲ\x10\x1bᲳჳ\x10\x1bᲴჴ" +
+	"\x10\x1bᲵჵ\x10\x1bᲶჶ\x10\x1bᲷჷ\x10\x1bᲸჸ\x10\x1bᲹჹ\x10\x1bᲺჺ\x10\x1bᲽჽ" +
+	"\x10\x1bᲾჾ\x10\x1bᲿჿ\x12\x12вВВ\x12\x12дДД\x12\x12оОО\x12\x12сСС\x12\x12" +
+	"тТТ\x12\x12тТТ\x12\x12ъЪЪ\x12\x12ѣѢѢ\x13\x1bꙋꙊꙊ\x13\x1bẖH̱H̱\x13\x1bẗ" +
+	"T̈T̈\x13\x1bẘW̊W̊\x13\x1bẙY̊Y̊\x13\x1baʾAʾAʾ\x13\x1bṡṠṠ\x12\x10ssß\x14" +
+	"$ὐΥ̓Υ̓\x166ὒΥ̓̀Υ̓̀\x166ὔΥ̓́Υ̓́\x166ὖΥ̓͂Υ̓͂\x15+ἀιἈΙᾈ\x15+ἁιἉΙᾉ" +
+	"\x15+ἂιἊΙᾊ\x15+ἃιἋΙᾋ\x15+ἄιἌΙᾌ\x15+ἅιἍΙᾍ\x15+ἆιἎΙᾎ\x15+ἇιἏΙᾏ\x15\x1dἀιᾀἈ" +
+	"Ι\x15\x1dἁιᾁἉΙ\x15\x1dἂιᾂἊΙ\x15\x1dἃιᾃἋΙ\x15\x1dἄιᾄἌΙ\x15\x1dἅιᾅἍΙ\x15" +
+	"\x1dἆιᾆἎΙ\x15\x1dἇιᾇἏΙ\x15+ἠιἨΙᾘ\x15+ἡιἩΙᾙ\x15+ἢιἪΙᾚ\x15+ἣιἫΙᾛ\x15+ἤιἬΙᾜ" +
+	"\x15+ἥιἭΙᾝ\x15+ἦιἮΙᾞ\x15+ἧιἯΙᾟ\x15\x1dἠιᾐἨΙ\x15\x1dἡιᾑἩΙ\x15\x1dἢιᾒἪΙ" +
+	"\x15\x1dἣιᾓἫΙ\x15\x1dἤιᾔἬΙ\x15\x1dἥιᾕἭΙ\x15\x1dἦιᾖἮΙ\x15\x1dἧιᾗἯΙ\x15+ὠι" +
+	"ὨΙᾨ\x15+ὡιὩΙᾩ\x15+ὢιὪΙᾪ\x15+ὣιὫΙᾫ\x15+ὤιὬΙᾬ\x15+ὥιὭΙᾭ\x15+ὦιὮΙᾮ\x15+ὧι" +
+	"ὯΙᾯ\x15\x1dὠιᾠὨΙ\x15\x1dὡιᾡὩΙ\x15\x1dὢιᾢὪΙ\x15\x1dὣιᾣὫΙ\x15\x1dὤιᾤὬΙ" +
+	"\x15\x1dὥιᾥὭΙ\x15\x1dὦιᾦὮΙ\x15\x1dὧιᾧὯΙ\x15-ὰιᾺΙᾺͅ\x14#αιΑΙᾼ\x14$άιΆΙΆͅ" +
+	"\x14$ᾶΑ͂Α͂\x166ᾶιΑ͂Ιᾼ͂\x14\x1cαιᾳΑΙ\x12\x12ιΙΙ\x15-ὴιῊΙῊͅ\x14#ηιΗΙῌ" +
+	"\x14$ήιΉΙΉͅ\x14$ῆΗ͂Η͂\x166ῆιΗ͂Ιῌ͂\x14\x1cηιῃΗΙ\x166ῒΪ̀Ϊ̀\x166ΐΙ" +
+	"̈́Ϊ́\x14$ῖΙ͂Ι͂\x166ῗΪ͂Ϊ͂\x166ῢΫ̀Ϋ̀\x166ΰΫ́Ϋ́\x14$ῤΡ̓Ρ̓" +
+	"\x14$ῦΥ͂Υ͂\x166ῧΫ͂Ϋ͂\x15-ὼιῺΙῺͅ\x14#ωιΩΙῼ\x14$ώιΏΙΏͅ\x14$ῶΩ͂Ω͂\x16" +
+	"6ῶιΩ͂Ιῼ͂\x14\x1cωιῳΩΙ\x12\x10ωω\x11\x08kk\x12\x10åå\x12\x10ɫɫ\x12\x10ɽ" +
+	"ɽ\x10\x12ȺȺ\x10\x12ȾȾ\x12\x10ɑɑ\x12\x10ɱɱ\x12\x10ɐɐ\x12\x10ɒɒ\x12\x10ȿȿ" +
+	"\x12\x10ɀɀ\x12\x10ɥɥ\x12\x10ɦɦ\x12\x10ɜɜ\x12\x10ɡɡ\x12\x10ɬɬ\x12\x10ɪɪ" +
+	"\x12\x10ʞʞ\x12\x10ʇʇ\x12\x10ʝʝ\x12\x12ffFFFf\x12\x12fiFIFi\x12\x12flFLFl" +
+	"\x13\x1bffiFFIFfi\x13\x1bfflFFLFfl\x12\x12stSTSt\x12\x12stSTSt\x14$մնՄՆՄ" +
+	"ն\x14$մեՄԵՄե\x14$միՄԻՄի\x14$վնՎՆՎն\x14$մխՄԽՄխ"
+
+// 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 *caseTrie) lookup(s []byte) (v uint16, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return caseValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupUnsafe(s []byte) uint16 {
+	c0 := s[0]
+	if c0 < 0x80 { // is ASCII
+		return caseValues[c0]
+	}
+	i := caseIndex[c0]
+	if c0 < 0xE0 { // 2-byte UTF-8
+		return t.lookupValue(uint32(i), s[1])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[1])]
+	if c0 < 0xF0 { // 3-byte UTF-8
+		return t.lookupValue(uint32(i), s[2])
+	}
+	i = caseIndex[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 *caseTrie) lookupString(s string) (v uint16, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return caseValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupStringUnsafe(s string) uint16 {
+	c0 := s[0]
+	if c0 < 0x80 { // is ASCII
+		return caseValues[c0]
+	}
+	i := caseIndex[c0]
+	if c0 < 0xE0 { // 2-byte UTF-8
+		return t.lookupValue(uint32(i), s[1])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[1])]
+	if c0 < 0xF0 { // 3-byte UTF-8
+		return t.lookupValue(uint32(i), s[2])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[2])]
+	if c0 < 0xF8 { // 4-byte UTF-8
+		return t.lookupValue(uint32(i), s[3])
+	}
+	return 0
+}
+
+// caseTrie. Total size: 12250 bytes (11.96 KiB). Checksum: 53ff6cb7321675e1.
+type caseTrie struct{}
+
+func newCaseTrie(i int) *caseTrie {
+	return &caseTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *caseTrie) lookupValue(n uint32, b byte) uint16 {
+	switch {
+	case n < 20:
+		return uint16(caseValues[n<<6+uint32(b)])
+	default:
+		n -= 20
+		return uint16(sparse.lookup(n, b))
+	}
+}
+
+// caseValues: 22 blocks, 1408 entries, 2816 bytes
+// The third block is the zero block.
+var caseValues = [1408]uint16{
+	// Block 0x0, offset 0x0
+	0x27: 0x0054,
+	0x2e: 0x0054,
+	0x30: 0x0010, 0x31: 0x0010, 0x32: 0x0010, 0x33: 0x0010, 0x34: 0x0010, 0x35: 0x0010,
+	0x36: 0x0010, 0x37: 0x0010, 0x38: 0x0010, 0x39: 0x0010, 0x3a: 0x0054,
+	// Block 0x1, offset 0x40
+	0x41: 0x2013, 0x42: 0x2013, 0x43: 0x2013, 0x44: 0x2013, 0x45: 0x2013,
+	0x46: 0x2013, 0x47: 0x2013, 0x48: 0x2013, 0x49: 0x2013, 0x4a: 0x2013, 0x4b: 0x2013,
+	0x4c: 0x2013, 0x4d: 0x2013, 0x4e: 0x2013, 0x4f: 0x2013, 0x50: 0x2013, 0x51: 0x2013,
+	0x52: 0x2013, 0x53: 0x2013, 0x54: 0x2013, 0x55: 0x2013, 0x56: 0x2013, 0x57: 0x2013,
+	0x58: 0x2013, 0x59: 0x2013, 0x5a: 0x2013,
+	0x5e: 0x0004, 0x5f: 0x0010, 0x60: 0x0004, 0x61: 0x2012, 0x62: 0x2012, 0x63: 0x2012,
+	0x64: 0x2012, 0x65: 0x2012, 0x66: 0x2012, 0x67: 0x2012, 0x68: 0x2012, 0x69: 0x2012,
+	0x6a: 0x2012, 0x6b: 0x2012, 0x6c: 0x2012, 0x6d: 0x2012, 0x6e: 0x2012, 0x6f: 0x2012,
+	0x70: 0x2012, 0x71: 0x2012, 0x72: 0x2012, 0x73: 0x2012, 0x74: 0x2012, 0x75: 0x2012,
+	0x76: 0x2012, 0x77: 0x2012, 0x78: 0x2012, 0x79: 0x2012, 0x7a: 0x2012,
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc0: 0x0852, 0xc1: 0x0b53, 0xc2: 0x0113, 0xc3: 0x0112, 0xc4: 0x0113, 0xc5: 0x0112,
+	0xc6: 0x0b53, 0xc7: 0x0f13, 0xc8: 0x0f12, 0xc9: 0x0e53, 0xca: 0x1153, 0xcb: 0x0713,
+	0xcc: 0x0712, 0xcd: 0x0012, 0xce: 0x1453, 0xcf: 0x1753, 0xd0: 0x1a53, 0xd1: 0x0313,
+	0xd2: 0x0312, 0xd3: 0x1d53, 0xd4: 0x2053, 0xd5: 0x2352, 0xd6: 0x2653, 0xd7: 0x2653,
+	0xd8: 0x0113, 0xd9: 0x0112, 0xda: 0x2952, 0xdb: 0x0012, 0xdc: 0x1d53, 0xdd: 0x2c53,
+	0xde: 0x2f52, 0xdf: 0x3253, 0xe0: 0x0113, 0xe1: 0x0112, 0xe2: 0x0113, 0xe3: 0x0112,
+	0xe4: 0x0113, 0xe5: 0x0112, 0xe6: 0x3553, 0xe7: 0x0f13, 0xe8: 0x0f12, 0xe9: 0x3853,
+	0xea: 0x0012, 0xeb: 0x0012, 0xec: 0x0113, 0xed: 0x0112, 0xee: 0x3553, 0xef: 0x1f13,
+	0xf0: 0x1f12, 0xf1: 0x3b53, 0xf2: 0x3e53, 0xf3: 0x0713, 0xf4: 0x0712, 0xf5: 0x0313,
+	0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010,
+	0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452,
+	// Block 0x4, offset 0x100
+	0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x02db, 0x105: 0x0359,
+	0x106: 0x03da, 0x107: 0x043b, 0x108: 0x04b9, 0x109: 0x053a, 0x10a: 0x059b, 0x10b: 0x0619,
+	0x10c: 0x069a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313,
+	0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13,
+	0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452,
+	0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112,
+	0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112,
+	0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112,
+	0x130: 0x06fa, 0x131: 0x07ab, 0x132: 0x0829, 0x133: 0x08aa, 0x134: 0x0113, 0x135: 0x0112,
+	0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112,
+	0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112,
+	// Block 0x5, offset 0x140
+	0x140: 0x0a8a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53,
+	0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112,
+	0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x0b0a, 0x151: 0x0b8a,
+	0x152: 0x0c0a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152,
+	0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x0c8a, 0x15d: 0x0012,
+	0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x0d0a, 0x162: 0x0012, 0x163: 0x2052,
+	0x164: 0x0012, 0x165: 0x0d8a, 0x166: 0x0e0a, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652,
+	0x16a: 0x0e8a, 0x16b: 0x0f0a, 0x16c: 0x0f8a, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52,
+	0x170: 0x0012, 0x171: 0x100a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252,
+	0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012,
+	0x17c: 0x0012, 0x17d: 0x108a, 0x17e: 0x0012, 0x17f: 0x0012,
+	// Block 0x6, offset 0x180
+	0x180: 0x3552, 0x181: 0x0012, 0x182: 0x0012, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012,
+	0x186: 0x0012, 0x187: 0x110a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52,
+	0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012,
+	0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012,
+	0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x118a,
+	0x19e: 0x120a, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012,
+	0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012,
+	0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012,
+	0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015,
+	0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014,
+	0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x128d,
+	0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024,
+	0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024,
+	0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024,
+	0x1d8: 0x0034, 0x1d9: 0x0034, 0x1da: 0x0034, 0x1db: 0x0024, 0x1dc: 0x0034, 0x1dd: 0x0034,
+	0x1de: 0x0034, 0x1df: 0x0034, 0x1e0: 0x0034, 0x1e1: 0x0034, 0x1e2: 0x0034, 0x1e3: 0x0024,
+	0x1e4: 0x0024, 0x1e5: 0x0024, 0x1e6: 0x0024, 0x1e7: 0x0024, 0x1e8: 0x0024, 0x1e9: 0x0024,
+	0x1ea: 0x0024, 0x1eb: 0x0024, 0x1ec: 0x0024, 0x1ed: 0x0024, 0x1ee: 0x0024, 0x1ef: 0x0024,
+	0x1f0: 0x0113, 0x1f1: 0x0112, 0x1f2: 0x0113, 0x1f3: 0x0112, 0x1f4: 0x0014, 0x1f5: 0x0004,
+	0x1f6: 0x0113, 0x1f7: 0x0112, 0x1fa: 0x0015, 0x1fb: 0x4d52,
+	0x1fc: 0x5052, 0x1fd: 0x5052, 0x1ff: 0x5353,
+	// Block 0x8, offset 0x200
+	0x204: 0x0004, 0x205: 0x0004,
+	0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513,
+	0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x130a, 0x211: 0x2013,
+	0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013,
+	0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013,
+	0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53,
+	0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53,
+	0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512,
+	0x230: 0x144a, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012,
+	0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012,
+	0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012,
+	// Block 0x9, offset 0x240
+	0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x158a, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52,
+	0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52,
+	0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x160a, 0x251: 0x168a,
+	0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x170a, 0x256: 0x178a, 0x257: 0x1812,
+	0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112,
+	0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112,
+	0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112,
+	0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112,
+	0x270: 0x180a, 0x271: 0x188a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x190a,
+	0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112,
+	0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053,
+	// Block 0xa, offset 0x280
+	0x280: 0x6852, 0x281: 0x6852, 0x282: 0x6852, 0x283: 0x6852, 0x284: 0x6852, 0x285: 0x6852,
+	0x286: 0x6852, 0x287: 0x198a, 0x288: 0x0012,
+	0x291: 0x0034,
+	0x292: 0x0024, 0x293: 0x0024, 0x294: 0x0024, 0x295: 0x0024, 0x296: 0x0034, 0x297: 0x0024,
+	0x298: 0x0024, 0x299: 0x0024, 0x29a: 0x0034, 0x29b: 0x0034, 0x29c: 0x0024, 0x29d: 0x0024,
+	0x29e: 0x0024, 0x29f: 0x0024, 0x2a0: 0x0024, 0x2a1: 0x0024, 0x2a2: 0x0034, 0x2a3: 0x0034,
+	0x2a4: 0x0034, 0x2a5: 0x0034, 0x2a6: 0x0034, 0x2a7: 0x0034, 0x2a8: 0x0024, 0x2a9: 0x0024,
+	0x2aa: 0x0034, 0x2ab: 0x0024, 0x2ac: 0x0024, 0x2ad: 0x0034, 0x2ae: 0x0034, 0x2af: 0x0024,
+	0x2b0: 0x0034, 0x2b1: 0x0034, 0x2b2: 0x0034, 0x2b3: 0x0034, 0x2b4: 0x0034, 0x2b5: 0x0034,
+	0x2b6: 0x0034, 0x2b7: 0x0034, 0x2b8: 0x0034, 0x2b9: 0x0034, 0x2ba: 0x0034, 0x2bb: 0x0034,
+	0x2bc: 0x0034, 0x2bd: 0x0034, 0x2bf: 0x0034,
+	// Block 0xb, offset 0x2c0
+	0x2c0: 0x7053, 0x2c1: 0x7053, 0x2c2: 0x7053, 0x2c3: 0x7053, 0x2c4: 0x7053, 0x2c5: 0x7053,
+	0x2c7: 0x7053,
+	0x2cd: 0x7053, 0x2d0: 0x1a6a, 0x2d1: 0x1aea,
+	0x2d2: 0x1b6a, 0x2d3: 0x1bea, 0x2d4: 0x1c6a, 0x2d5: 0x1cea, 0x2d6: 0x1d6a, 0x2d7: 0x1dea,
+	0x2d8: 0x1e6a, 0x2d9: 0x1eea, 0x2da: 0x1f6a, 0x2db: 0x1fea, 0x2dc: 0x206a, 0x2dd: 0x20ea,
+	0x2de: 0x216a, 0x2df: 0x21ea, 0x2e0: 0x226a, 0x2e1: 0x22ea, 0x2e2: 0x236a, 0x2e3: 0x23ea,
+	0x2e4: 0x246a, 0x2e5: 0x24ea, 0x2e6: 0x256a, 0x2e7: 0x25ea, 0x2e8: 0x266a, 0x2e9: 0x26ea,
+	0x2ea: 0x276a, 0x2eb: 0x27ea, 0x2ec: 0x286a, 0x2ed: 0x28ea, 0x2ee: 0x296a, 0x2ef: 0x29ea,
+	0x2f0: 0x2a6a, 0x2f1: 0x2aea, 0x2f2: 0x2b6a, 0x2f3: 0x2bea, 0x2f4: 0x2c6a, 0x2f5: 0x2cea,
+	0x2f6: 0x2d6a, 0x2f7: 0x2dea, 0x2f8: 0x2e6a, 0x2f9: 0x2eea, 0x2fa: 0x2f6a,
+	0x2fc: 0x0014, 0x2fd: 0x2fea, 0x2fe: 0x306a, 0x2ff: 0x30ea,
+	// Block 0xc, offset 0x300
+	0x300: 0x0812, 0x301: 0x0812, 0x302: 0x0812, 0x303: 0x0812, 0x304: 0x0812, 0x305: 0x0812,
+	0x308: 0x0813, 0x309: 0x0813, 0x30a: 0x0813, 0x30b: 0x0813,
+	0x30c: 0x0813, 0x30d: 0x0813, 0x310: 0x3a9a, 0x311: 0x0812,
+	0x312: 0x3b7a, 0x313: 0x0812, 0x314: 0x3cba, 0x315: 0x0812, 0x316: 0x3dfa, 0x317: 0x0812,
+	0x319: 0x0813, 0x31b: 0x0813, 0x31d: 0x0813,
+	0x31f: 0x0813, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0x0812, 0x323: 0x0812,
+	0x324: 0x0812, 0x325: 0x0812, 0x326: 0x0812, 0x327: 0x0812, 0x328: 0x0813, 0x329: 0x0813,
+	0x32a: 0x0813, 0x32b: 0x0813, 0x32c: 0x0813, 0x32d: 0x0813, 0x32e: 0x0813, 0x32f: 0x0813,
+	0x330: 0x8e52, 0x331: 0x8e52, 0x332: 0x9152, 0x333: 0x9152, 0x334: 0x9452, 0x335: 0x9452,
+	0x336: 0x9752, 0x337: 0x9752, 0x338: 0x9a52, 0x339: 0x9a52, 0x33a: 0x9d52, 0x33b: 0x9d52,
+	0x33c: 0x4d52, 0x33d: 0x4d52,
+	// Block 0xd, offset 0x340
+	0x340: 0x3f3a, 0x341: 0x402a, 0x342: 0x411a, 0x343: 0x420a, 0x344: 0x42fa, 0x345: 0x43ea,
+	0x346: 0x44da, 0x347: 0x45ca, 0x348: 0x46b9, 0x349: 0x47a9, 0x34a: 0x4899, 0x34b: 0x4989,
+	0x34c: 0x4a79, 0x34d: 0x4b69, 0x34e: 0x4c59, 0x34f: 0x4d49, 0x350: 0x4e3a, 0x351: 0x4f2a,
+	0x352: 0x501a, 0x353: 0x510a, 0x354: 0x51fa, 0x355: 0x52ea, 0x356: 0x53da, 0x357: 0x54ca,
+	0x358: 0x55b9, 0x359: 0x56a9, 0x35a: 0x5799, 0x35b: 0x5889, 0x35c: 0x5979, 0x35d: 0x5a69,
+	0x35e: 0x5b59, 0x35f: 0x5c49, 0x360: 0x5d3a, 0x361: 0x5e2a, 0x362: 0x5f1a, 0x363: 0x600a,
+	0x364: 0x60fa, 0x365: 0x61ea, 0x366: 0x62da, 0x367: 0x63ca, 0x368: 0x64b9, 0x369: 0x65a9,
+	0x36a: 0x6699, 0x36b: 0x6789, 0x36c: 0x6879, 0x36d: 0x6969, 0x36e: 0x6a59, 0x36f: 0x6b49,
+	0x370: 0x0812, 0x371: 0x0812, 0x372: 0x6c3a, 0x373: 0x6d4a, 0x374: 0x6e1a,
+	0x376: 0x6efa, 0x377: 0x6fda, 0x378: 0x0813, 0x379: 0x0813, 0x37a: 0x8e53, 0x37b: 0x8e53,
+	0x37c: 0x7119, 0x37d: 0x0004, 0x37e: 0x71ea, 0x37f: 0x0004,
+	// Block 0xe, offset 0x380
+	0x380: 0x0004, 0x381: 0x0004, 0x382: 0x726a, 0x383: 0x737a, 0x384: 0x744a,
+	0x386: 0x752a, 0x387: 0x760a, 0x388: 0x9153, 0x389: 0x9153, 0x38a: 0x9453, 0x38b: 0x9453,
+	0x38c: 0x7749, 0x38d: 0x0004, 0x38e: 0x0004, 0x38f: 0x0004, 0x390: 0x0812, 0x391: 0x0812,
+	0x392: 0x781a, 0x393: 0x795a, 0x396: 0x7a9a, 0x397: 0x7b7a,
+	0x398: 0x0813, 0x399: 0x0813, 0x39a: 0x9753, 0x39b: 0x9753, 0x39d: 0x0004,
+	0x39e: 0x0004, 0x39f: 0x0004, 0x3a0: 0x0812, 0x3a1: 0x0812, 0x3a2: 0x7cba, 0x3a3: 0x7dfa,
+	0x3a4: 0x7f3a, 0x3a5: 0x0912, 0x3a6: 0x801a, 0x3a7: 0x80fa, 0x3a8: 0x0813, 0x3a9: 0x0813,
+	0x3aa: 0x9d53, 0x3ab: 0x9d53, 0x3ac: 0x0913, 0x3ad: 0x0004, 0x3ae: 0x0004, 0x3af: 0x0004,
+	0x3b2: 0x823a, 0x3b3: 0x834a, 0x3b4: 0x841a,
+	0x3b6: 0x84fa, 0x3b7: 0x85da, 0x3b8: 0x9a53, 0x3b9: 0x9a53, 0x3ba: 0x4d53, 0x3bb: 0x4d53,
+	0x3bc: 0x8719, 0x3bd: 0x0004, 0x3be: 0x0004,
+	// Block 0xf, offset 0x3c0
+	0x3c2: 0x0013,
+	0x3c7: 0x0013, 0x3ca: 0x0012, 0x3cb: 0x0013,
+	0x3cc: 0x0013, 0x3cd: 0x0013, 0x3ce: 0x0012, 0x3cf: 0x0012, 0x3d0: 0x0013, 0x3d1: 0x0013,
+	0x3d2: 0x0013, 0x3d3: 0x0012, 0x3d5: 0x0013,
+	0x3d9: 0x0013, 0x3da: 0x0013, 0x3db: 0x0013, 0x3dc: 0x0013, 0x3dd: 0x0013,
+	0x3e4: 0x0013, 0x3e6: 0x87eb, 0x3e8: 0x0013,
+	0x3ea: 0x884b, 0x3eb: 0x888b, 0x3ec: 0x0013, 0x3ed: 0x0013, 0x3ef: 0x0012,
+	0x3f0: 0x0013, 0x3f1: 0x0013, 0x3f2: 0xa053, 0x3f3: 0x0013, 0x3f4: 0x0012, 0x3f5: 0x0010,
+	0x3f6: 0x0010, 0x3f7: 0x0010, 0x3f8: 0x0010, 0x3f9: 0x0012,
+	0x3fc: 0x0012, 0x3fd: 0x0012, 0x3fe: 0x0013, 0x3ff: 0x0013,
+	// Block 0x10, offset 0x400
+	0x400: 0x1a13, 0x401: 0x1a13, 0x402: 0x1e13, 0x403: 0x1e13, 0x404: 0x1a13, 0x405: 0x1a13,
+	0x406: 0x2613, 0x407: 0x2613, 0x408: 0x2a13, 0x409: 0x2a13, 0x40a: 0x2e13, 0x40b: 0x2e13,
+	0x40c: 0x2a13, 0x40d: 0x2a13, 0x40e: 0x2613, 0x40f: 0x2613, 0x410: 0xa352, 0x411: 0xa352,
+	0x412: 0xa652, 0x413: 0xa652, 0x414: 0xa952, 0x415: 0xa952, 0x416: 0xa652, 0x417: 0xa652,
+	0x418: 0xa352, 0x419: 0xa352, 0x41a: 0x1a12, 0x41b: 0x1a12, 0x41c: 0x1e12, 0x41d: 0x1e12,
+	0x41e: 0x1a12, 0x41f: 0x1a12, 0x420: 0x2612, 0x421: 0x2612, 0x422: 0x2a12, 0x423: 0x2a12,
+	0x424: 0x2e12, 0x425: 0x2e12, 0x426: 0x2a12, 0x427: 0x2a12, 0x428: 0x2612, 0x429: 0x2612,
+	// Block 0x11, offset 0x440
+	0x440: 0x6552, 0x441: 0x6552, 0x442: 0x6552, 0x443: 0x6552, 0x444: 0x6552, 0x445: 0x6552,
+	0x446: 0x6552, 0x447: 0x6552, 0x448: 0x6552, 0x449: 0x6552, 0x44a: 0x6552, 0x44b: 0x6552,
+	0x44c: 0x6552, 0x44d: 0x6552, 0x44e: 0x6552, 0x44f: 0x6552, 0x450: 0xac52, 0x451: 0xac52,
+	0x452: 0xac52, 0x453: 0xac52, 0x454: 0xac52, 0x455: 0xac52, 0x456: 0xac52, 0x457: 0xac52,
+	0x458: 0xac52, 0x459: 0xac52, 0x45a: 0xac52, 0x45b: 0xac52, 0x45c: 0xac52, 0x45d: 0xac52,
+	0x45e: 0xac52, 0x460: 0x0113, 0x461: 0x0112, 0x462: 0x88eb, 0x463: 0x8b53,
+	0x464: 0x894b, 0x465: 0x89aa, 0x466: 0x8a0a, 0x467: 0x0f13, 0x468: 0x0f12, 0x469: 0x0313,
+	0x46a: 0x0312, 0x46b: 0x0713, 0x46c: 0x0712, 0x46d: 0x8a6b, 0x46e: 0x8acb, 0x46f: 0x8b2b,
+	0x470: 0x8b8b, 0x471: 0x0012, 0x472: 0x0113, 0x473: 0x0112, 0x474: 0x0012, 0x475: 0x0313,
+	0x476: 0x0312, 0x477: 0x0012, 0x478: 0x0012, 0x479: 0x0012, 0x47a: 0x0012, 0x47b: 0x0012,
+	0x47c: 0x0015, 0x47d: 0x0015, 0x47e: 0x8beb, 0x47f: 0x8c4b,
+	// Block 0x12, offset 0x480
+	0x480: 0x0113, 0x481: 0x0112, 0x482: 0x0113, 0x483: 0x0112, 0x484: 0x0113, 0x485: 0x0112,
+	0x486: 0x0113, 0x487: 0x0112, 0x488: 0x0014, 0x489: 0x0014, 0x48a: 0x0014, 0x48b: 0x0713,
+	0x48c: 0x0712, 0x48d: 0x8cab, 0x48e: 0x0012, 0x48f: 0x0010, 0x490: 0x0113, 0x491: 0x0112,
+	0x492: 0x0113, 0x493: 0x0112, 0x494: 0x0012, 0x495: 0x0012, 0x496: 0x0113, 0x497: 0x0112,
+	0x498: 0x0113, 0x499: 0x0112, 0x49a: 0x0113, 0x49b: 0x0112, 0x49c: 0x0113, 0x49d: 0x0112,
+	0x49e: 0x0113, 0x49f: 0x0112, 0x4a0: 0x0113, 0x4a1: 0x0112, 0x4a2: 0x0113, 0x4a3: 0x0112,
+	0x4a4: 0x0113, 0x4a5: 0x0112, 0x4a6: 0x0113, 0x4a7: 0x0112, 0x4a8: 0x0113, 0x4a9: 0x0112,
+	0x4aa: 0x8d0b, 0x4ab: 0x8d6b, 0x4ac: 0x8dcb, 0x4ad: 0x8e2b, 0x4ae: 0x8e8b, 0x4af: 0x0012,
+	0x4b0: 0x8eeb, 0x4b1: 0x8f4b, 0x4b2: 0x8fab, 0x4b3: 0xaf53, 0x4b4: 0x0113, 0x4b5: 0x0112,
+	0x4b6: 0x0113, 0x4b7: 0x0112, 0x4b8: 0x0113, 0x4b9: 0x0112,
+	// Block 0x13, offset 0x4c0
+	0x4c0: 0x900a, 0x4c1: 0x908a, 0x4c2: 0x910a, 0x4c3: 0x918a, 0x4c4: 0x923a, 0x4c5: 0x92ea,
+	0x4c6: 0x936a,
+	0x4d3: 0x93ea, 0x4d4: 0x94ca, 0x4d5: 0x95aa, 0x4d6: 0x968a, 0x4d7: 0x976a,
+	0x4dd: 0x0010,
+	0x4de: 0x0034, 0x4df: 0x0010, 0x4e0: 0x0010, 0x4e1: 0x0010, 0x4e2: 0x0010, 0x4e3: 0x0010,
+	0x4e4: 0x0010, 0x4e5: 0x0010, 0x4e6: 0x0010, 0x4e7: 0x0010, 0x4e8: 0x0010,
+	0x4ea: 0x0010, 0x4eb: 0x0010, 0x4ec: 0x0010, 0x4ed: 0x0010, 0x4ee: 0x0010, 0x4ef: 0x0010,
+	0x4f0: 0x0010, 0x4f1: 0x0010, 0x4f2: 0x0010, 0x4f3: 0x0010, 0x4f4: 0x0010, 0x4f5: 0x0010,
+	0x4f6: 0x0010, 0x4f8: 0x0010, 0x4f9: 0x0010, 0x4fa: 0x0010, 0x4fb: 0x0010,
+	0x4fc: 0x0010, 0x4fe: 0x0010,
+	// Block 0x14, offset 0x500
+	0x500: 0x2213, 0x501: 0x2213, 0x502: 0x2613, 0x503: 0x2613, 0x504: 0x2213, 0x505: 0x2213,
+	0x506: 0x2e13, 0x507: 0x2e13, 0x508: 0x2213, 0x509: 0x2213, 0x50a: 0x2613, 0x50b: 0x2613,
+	0x50c: 0x2213, 0x50d: 0x2213, 0x50e: 0x3e13, 0x50f: 0x3e13, 0x510: 0x2213, 0x511: 0x2213,
+	0x512: 0x2613, 0x513: 0x2613, 0x514: 0x2213, 0x515: 0x2213, 0x516: 0x2e13, 0x517: 0x2e13,
+	0x518: 0x2213, 0x519: 0x2213, 0x51a: 0x2613, 0x51b: 0x2613, 0x51c: 0x2213, 0x51d: 0x2213,
+	0x51e: 0xb853, 0x51f: 0xb853, 0x520: 0xbb53, 0x521: 0xbb53, 0x522: 0x2212, 0x523: 0x2212,
+	0x524: 0x2612, 0x525: 0x2612, 0x526: 0x2212, 0x527: 0x2212, 0x528: 0x2e12, 0x529: 0x2e12,
+	0x52a: 0x2212, 0x52b: 0x2212, 0x52c: 0x2612, 0x52d: 0x2612, 0x52e: 0x2212, 0x52f: 0x2212,
+	0x530: 0x3e12, 0x531: 0x3e12, 0x532: 0x2212, 0x533: 0x2212, 0x534: 0x2612, 0x535: 0x2612,
+	0x536: 0x2212, 0x537: 0x2212, 0x538: 0x2e12, 0x539: 0x2e12, 0x53a: 0x2212, 0x53b: 0x2212,
+	0x53c: 0x2612, 0x53d: 0x2612, 0x53e: 0x2212, 0x53f: 0x2212,
+	// Block 0x15, offset 0x540
+	0x542: 0x0010,
+	0x547: 0x0010, 0x549: 0x0010, 0x54b: 0x0010,
+	0x54d: 0x0010, 0x54e: 0x0010, 0x54f: 0x0010, 0x551: 0x0010,
+	0x552: 0x0010, 0x554: 0x0010, 0x557: 0x0010,
+	0x559: 0x0010, 0x55b: 0x0010, 0x55d: 0x0010,
+	0x55f: 0x0010, 0x561: 0x0010, 0x562: 0x0010,
+	0x564: 0x0010, 0x567: 0x0010, 0x568: 0x0010, 0x569: 0x0010,
+	0x56a: 0x0010, 0x56c: 0x0010, 0x56d: 0x0010, 0x56e: 0x0010, 0x56f: 0x0010,
+	0x570: 0x0010, 0x571: 0x0010, 0x572: 0x0010, 0x574: 0x0010, 0x575: 0x0010,
+	0x576: 0x0010, 0x577: 0x0010, 0x579: 0x0010, 0x57a: 0x0010, 0x57b: 0x0010,
+	0x57c: 0x0010, 0x57e: 0x0010,
+}
+
+// caseIndex: 25 blocks, 1600 entries, 3200 bytes
+// Block 0 is the zero block.
+var caseIndex = [1600]uint16{
+	// Block 0x0, offset 0x0
+	// Block 0x1, offset 0x40
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc2: 0x14, 0xc3: 0x15, 0xc4: 0x16, 0xc5: 0x17, 0xc6: 0x01, 0xc7: 0x02,
+	0xc8: 0x18, 0xc9: 0x03, 0xca: 0x04, 0xcb: 0x19, 0xcc: 0x1a, 0xcd: 0x05, 0xce: 0x06, 0xcf: 0x07,
+	0xd0: 0x1b, 0xd1: 0x1c, 0xd2: 0x1d, 0xd3: 0x1e, 0xd4: 0x1f, 0xd5: 0x20, 0xd6: 0x08, 0xd7: 0x21,
+	0xd8: 0x22, 0xd9: 0x23, 0xda: 0x24, 0xdb: 0x25, 0xdc: 0x26, 0xdd: 0x27, 0xde: 0x28, 0xdf: 0x29,
+	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
+	0xea: 0x06, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x08, 0xef: 0x09,
+	0xf0: 0x14, 0xf3: 0x16,
+	// Block 0x4, offset 0x100
+	0x120: 0x2a, 0x121: 0x2b, 0x122: 0x2c, 0x123: 0x2d, 0x124: 0x2e, 0x125: 0x2f, 0x126: 0x30, 0x127: 0x31,
+	0x128: 0x32, 0x129: 0x33, 0x12a: 0x34, 0x12b: 0x35, 0x12c: 0x36, 0x12d: 0x37, 0x12e: 0x38, 0x12f: 0x39,
+	0x130: 0x3a, 0x131: 0x3b, 0x132: 0x3c, 0x133: 0x3d, 0x134: 0x3e, 0x135: 0x3f, 0x136: 0x40, 0x137: 0x41,
+	0x138: 0x42, 0x139: 0x43, 0x13a: 0x44, 0x13b: 0x45, 0x13c: 0x46, 0x13d: 0x47, 0x13e: 0x48, 0x13f: 0x49,
+	// Block 0x5, offset 0x140
+	0x140: 0x4a, 0x141: 0x4b, 0x142: 0x4c, 0x143: 0x09, 0x144: 0x24, 0x145: 0x24, 0x146: 0x24, 0x147: 0x24,
+	0x148: 0x24, 0x149: 0x4d, 0x14a: 0x4e, 0x14b: 0x4f, 0x14c: 0x50, 0x14d: 0x51, 0x14e: 0x52, 0x14f: 0x53,
+	0x150: 0x54, 0x151: 0x24, 0x152: 0x24, 0x153: 0x24, 0x154: 0x24, 0x155: 0x24, 0x156: 0x24, 0x157: 0x24,
+	0x158: 0x24, 0x159: 0x55, 0x15a: 0x56, 0x15b: 0x57, 0x15c: 0x58, 0x15d: 0x59, 0x15e: 0x5a, 0x15f: 0x5b,
+	0x160: 0x5c, 0x161: 0x5d, 0x162: 0x5e, 0x163: 0x5f, 0x164: 0x60, 0x165: 0x61, 0x167: 0x62,
+	0x168: 0x63, 0x169: 0x64, 0x16a: 0x65, 0x16c: 0x66, 0x16d: 0x67, 0x16e: 0x68, 0x16f: 0x69,
+	0x170: 0x6a, 0x171: 0x6b, 0x172: 0x6c, 0x173: 0x6d, 0x174: 0x6e, 0x175: 0x6f, 0x176: 0x70, 0x177: 0x71,
+	0x178: 0x72, 0x179: 0x72, 0x17a: 0x73, 0x17b: 0x72, 0x17c: 0x74, 0x17d: 0x0a, 0x17e: 0x0b, 0x17f: 0x0c,
+	// Block 0x6, offset 0x180
+	0x180: 0x75, 0x181: 0x76, 0x182: 0x77, 0x183: 0x78, 0x184: 0x0d, 0x185: 0x79, 0x186: 0x7a,
+	0x192: 0x7b, 0x193: 0x0e,
+	0x1b0: 0x7c, 0x1b1: 0x0f, 0x1b2: 0x72, 0x1b3: 0x7d, 0x1b4: 0x7e, 0x1b5: 0x7f, 0x1b6: 0x80, 0x1b7: 0x81,
+	0x1b8: 0x82,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x83, 0x1c2: 0x84, 0x1c3: 0x85, 0x1c4: 0x86, 0x1c5: 0x24, 0x1c6: 0x87,
+	// Block 0x8, offset 0x200
+	0x200: 0x88, 0x201: 0x24, 0x202: 0x24, 0x203: 0x24, 0x204: 0x24, 0x205: 0x24, 0x206: 0x24, 0x207: 0x24,
+	0x208: 0x24, 0x209: 0x24, 0x20a: 0x24, 0x20b: 0x24, 0x20c: 0x24, 0x20d: 0x24, 0x20e: 0x24, 0x20f: 0x24,
+	0x210: 0x24, 0x211: 0x24, 0x212: 0x89, 0x213: 0x8a, 0x214: 0x24, 0x215: 0x24, 0x216: 0x24, 0x217: 0x24,
+	0x218: 0x8b, 0x219: 0x8c, 0x21a: 0x8d, 0x21b: 0x8e, 0x21c: 0x8f, 0x21d: 0x90, 0x21e: 0x10, 0x21f: 0x91,
+	0x220: 0x92, 0x221: 0x93, 0x222: 0x24, 0x223: 0x94, 0x224: 0x95, 0x225: 0x96, 0x226: 0x97, 0x227: 0x98,
+	0x228: 0x99, 0x229: 0x9a, 0x22a: 0x9b, 0x22b: 0x9c, 0x22c: 0x9d, 0x22d: 0x9e, 0x22e: 0x9f, 0x22f: 0xa0,
+	0x230: 0x24, 0x231: 0x24, 0x232: 0x24, 0x233: 0x24, 0x234: 0x24, 0x235: 0x24, 0x236: 0x24, 0x237: 0x24,
+	0x238: 0x24, 0x239: 0x24, 0x23a: 0x24, 0x23b: 0x24, 0x23c: 0x24, 0x23d: 0x24, 0x23e: 0x24, 0x23f: 0x24,
+	// Block 0x9, offset 0x240
+	0x240: 0x24, 0x241: 0x24, 0x242: 0x24, 0x243: 0x24, 0x244: 0x24, 0x245: 0x24, 0x246: 0x24, 0x247: 0x24,
+	0x248: 0x24, 0x249: 0x24, 0x24a: 0x24, 0x24b: 0x24, 0x24c: 0x24, 0x24d: 0x24, 0x24e: 0x24, 0x24f: 0x24,
+	0x250: 0x24, 0x251: 0x24, 0x252: 0x24, 0x253: 0x24, 0x254: 0x24, 0x255: 0x24, 0x256: 0x24, 0x257: 0x24,
+	0x258: 0x24, 0x259: 0x24, 0x25a: 0x24, 0x25b: 0x24, 0x25c: 0x24, 0x25d: 0x24, 0x25e: 0x24, 0x25f: 0x24,
+	0x260: 0x24, 0x261: 0x24, 0x262: 0x24, 0x263: 0x24, 0x264: 0x24, 0x265: 0x24, 0x266: 0x24, 0x267: 0x24,
+	0x268: 0x24, 0x269: 0x24, 0x26a: 0x24, 0x26b: 0x24, 0x26c: 0x24, 0x26d: 0x24, 0x26e: 0x24, 0x26f: 0x24,
+	0x270: 0x24, 0x271: 0x24, 0x272: 0x24, 0x273: 0x24, 0x274: 0x24, 0x275: 0x24, 0x276: 0x24, 0x277: 0x24,
+	0x278: 0x24, 0x279: 0x24, 0x27a: 0x24, 0x27b: 0x24, 0x27c: 0x24, 0x27d: 0x24, 0x27e: 0x24, 0x27f: 0x24,
+	// Block 0xa, offset 0x280
+	0x280: 0x24, 0x281: 0x24, 0x282: 0x24, 0x283: 0x24, 0x284: 0x24, 0x285: 0x24, 0x286: 0x24, 0x287: 0x24,
+	0x288: 0x24, 0x289: 0x24, 0x28a: 0x24, 0x28b: 0x24, 0x28c: 0x24, 0x28d: 0x24, 0x28e: 0x24, 0x28f: 0x24,
+	0x290: 0x24, 0x291: 0x24, 0x292: 0x24, 0x293: 0x24, 0x294: 0x24, 0x295: 0x24, 0x296: 0x24, 0x297: 0x24,
+	0x298: 0x24, 0x299: 0x24, 0x29a: 0x24, 0x29b: 0x24, 0x29c: 0x24, 0x29d: 0x24, 0x29e: 0xa1, 0x29f: 0xa2,
+	// Block 0xb, offset 0x2c0
+	0x2ec: 0x11, 0x2ed: 0xa3, 0x2ee: 0xa4, 0x2ef: 0xa5,
+	0x2f0: 0x24, 0x2f1: 0x24, 0x2f2: 0x24, 0x2f3: 0x24, 0x2f4: 0xa6, 0x2f5: 0xa7, 0x2f6: 0xa8, 0x2f7: 0xa9,
+	0x2f8: 0xaa, 0x2f9: 0xab, 0x2fa: 0x24, 0x2fb: 0xac, 0x2fc: 0xad, 0x2fd: 0xae, 0x2fe: 0xaf, 0x2ff: 0xb0,
+	// Block 0xc, offset 0x300
+	0x300: 0xb1, 0x301: 0xb2, 0x302: 0x24, 0x303: 0xb3, 0x305: 0xb4, 0x307: 0xb5,
+	0x30a: 0xb6, 0x30b: 0xb7, 0x30c: 0xb8, 0x30d: 0xb9, 0x30e: 0xba, 0x30f: 0xbb,
+	0x310: 0xbc, 0x311: 0xbd, 0x312: 0xbe, 0x313: 0xbf, 0x314: 0xc0, 0x315: 0xc1,
+	0x318: 0x24, 0x319: 0x24, 0x31a: 0x24, 0x31b: 0x24, 0x31c: 0xc2, 0x31d: 0xc3,
+	0x320: 0xc4, 0x321: 0xc5, 0x322: 0xc6, 0x323: 0xc7, 0x324: 0xc8, 0x326: 0xc9,
+	0x328: 0xca, 0x329: 0xcb, 0x32a: 0xcc, 0x32b: 0xcd, 0x32c: 0x5f, 0x32d: 0xce, 0x32e: 0xcf,
+	0x330: 0x24, 0x331: 0xd0, 0x332: 0xd1, 0x333: 0xd2, 0x334: 0xd3,
+	0x33c: 0xd4, 0x33d: 0xd5,
+	// Block 0xd, offset 0x340
+	0x340: 0xd6, 0x341: 0xd7, 0x342: 0xd8, 0x343: 0xd9, 0x344: 0xda, 0x345: 0xdb, 0x346: 0xdc, 0x347: 0xdd,
+	0x348: 0xde, 0x34a: 0xdf, 0x34b: 0xe0, 0x34c: 0xe1, 0x34d: 0xe2,
+	0x350: 0xe3, 0x351: 0xe4, 0x352: 0xe5, 0x353: 0xe6, 0x356: 0xe7, 0x357: 0xe8,
+	0x358: 0xe9, 0x359: 0xea, 0x35a: 0xeb, 0x35b: 0xec, 0x35c: 0xed,
+	0x360: 0xee, 0x362: 0xef, 0x363: 0xf0,
+	0x368: 0xf1, 0x369: 0xf2, 0x36a: 0xf3, 0x36b: 0xf4,
+	0x370: 0xf5, 0x371: 0xf6, 0x372: 0xf7, 0x374: 0xf8, 0x375: 0xf9, 0x376: 0xfa,
+	0x37b: 0xfb,
+	// Block 0xe, offset 0x380
+	0x380: 0x24, 0x381: 0x24, 0x382: 0x24, 0x383: 0x24, 0x384: 0x24, 0x385: 0x24, 0x386: 0x24, 0x387: 0x24,
+	0x388: 0x24, 0x389: 0x24, 0x38a: 0x24, 0x38b: 0x24, 0x38c: 0x24, 0x38d: 0x24, 0x38e: 0xfc,
+	0x390: 0x24, 0x391: 0xfd, 0x392: 0x24, 0x393: 0x24, 0x394: 0x24, 0x395: 0xfe,
+	// Block 0xf, offset 0x3c0
+	0x3c0: 0x24, 0x3c1: 0x24, 0x3c2: 0x24, 0x3c3: 0x24, 0x3c4: 0x24, 0x3c5: 0x24, 0x3c6: 0x24, 0x3c7: 0x24,
+	0x3c8: 0x24, 0x3c9: 0x24, 0x3ca: 0x24, 0x3cb: 0x24, 0x3cc: 0x24, 0x3cd: 0x24, 0x3ce: 0x24, 0x3cf: 0x24,
+	0x3d0: 0xfd,
+	// Block 0x10, offset 0x400
+	0x410: 0x24, 0x411: 0x24, 0x412: 0x24, 0x413: 0x24, 0x414: 0x24, 0x415: 0x24, 0x416: 0x24, 0x417: 0x24,
+	0x418: 0x24, 0x419: 0xff,
+	// Block 0x11, offset 0x440
+	0x460: 0x24, 0x461: 0x24, 0x462: 0x24, 0x463: 0x24, 0x464: 0x24, 0x465: 0x24, 0x466: 0x24, 0x467: 0x24,
+	0x468: 0xf4, 0x469: 0x100, 0x46b: 0x101, 0x46c: 0x102, 0x46d: 0x103, 0x46e: 0x104,
+	0x479: 0x105, 0x47c: 0x24, 0x47d: 0x106, 0x47e: 0x107, 0x47f: 0x108,
+	// Block 0x12, offset 0x480
+	0x4b0: 0x24, 0x4b1: 0x109, 0x4b2: 0x10a,
+	// Block 0x13, offset 0x4c0
+	0x4c5: 0x10b, 0x4c6: 0x10c,
+	0x4c9: 0x10d,
+	0x4d0: 0x10e, 0x4d1: 0x10f, 0x4d2: 0x110, 0x4d3: 0x111, 0x4d4: 0x112, 0x4d5: 0x113, 0x4d6: 0x114, 0x4d7: 0x115,
+	0x4d8: 0x116, 0x4d9: 0x117, 0x4da: 0x118, 0x4db: 0x119, 0x4dc: 0x11a, 0x4dd: 0x11b, 0x4de: 0x11c, 0x4df: 0x11d,
+	0x4e8: 0x11e, 0x4e9: 0x11f, 0x4ea: 0x120,
+	// Block 0x14, offset 0x500
+	0x500: 0x121,
+	0x520: 0x24, 0x521: 0x24, 0x522: 0x24, 0x523: 0x122, 0x524: 0x12, 0x525: 0x123,
+	0x538: 0x124, 0x539: 0x13, 0x53a: 0x125,
+	// Block 0x15, offset 0x540
+	0x544: 0x126, 0x545: 0x127, 0x546: 0x128,
+	0x54f: 0x129,
+	// Block 0x16, offset 0x580
+	0x590: 0x0a, 0x591: 0x0b, 0x592: 0x0c, 0x593: 0x0d, 0x594: 0x0e, 0x596: 0x0f,
+	0x59b: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13,
+	// Block 0x17, offset 0x5c0
+	0x5c0: 0x12a, 0x5c1: 0x12b, 0x5c4: 0x12b, 0x5c5: 0x12b, 0x5c6: 0x12b, 0x5c7: 0x12c,
+	// Block 0x18, offset 0x600
+	0x620: 0x15,
+}
+
+// sparseOffsets: 282 entries, 564 bytes
+var sparseOffsets = []uint16{0x0, 0x9, 0xf, 0x18, 0x24, 0x2e, 0x35, 0x38, 0x3c, 0x3f, 0x43, 0x4d, 0x4f, 0x57, 0x5e, 0x63, 0x71, 0x72, 0x80, 0x8f, 0x99, 0x9c, 0xa3, 0xab, 0xae, 0xb0, 0xbf, 0xc5, 0xd3, 0xde, 0xeb, 0xf6, 0x102, 0x10c, 0x118, 0x123, 0x12f, 0x13b, 0x143, 0x14c, 0x156, 0x161, 0x16d, 0x174, 0x17f, 0x184, 0x18c, 0x18f, 0x194, 0x198, 0x19c, 0x1a3, 0x1ac, 0x1b4, 0x1b5, 0x1be, 0x1c5, 0x1cd, 0x1d3, 0x1d8, 0x1dc, 0x1df, 0x1e1, 0x1e4, 0x1e9, 0x1ea, 0x1ec, 0x1ee, 0x1f0, 0x1f7, 0x1fc, 0x200, 0x209, 0x20c, 0x20f, 0x215, 0x216, 0x221, 0x222, 0x223, 0x228, 0x235, 0x23d, 0x245, 0x24e, 0x257, 0x260, 0x265, 0x268, 0x273, 0x280, 0x282, 0x289, 0x28b, 0x297, 0x298, 0x2a3, 0x2ab, 0x2b3, 0x2b9, 0x2ba, 0x2c8, 0x2cd, 0x2d0, 0x2d5, 0x2d9, 0x2df, 0x2e4, 0x2e7, 0x2ec, 0x2f1, 0x2f2, 0x2f8, 0x2fa, 0x2fb, 0x2fd, 0x2ff, 0x302, 0x303, 0x305, 0x308, 0x30e, 0x312, 0x314, 0x319, 0x320, 0x324, 0x32d, 0x32e, 0x337, 0x33b, 0x340, 0x348, 0x34e, 0x354, 0x35e, 0x363, 0x36c, 0x372, 0x379, 0x37d, 0x385, 0x387, 0x389, 0x38c, 0x38e, 0x390, 0x391, 0x392, 0x394, 0x396, 0x39c, 0x3a1, 0x3a3, 0x3a9, 0x3ac, 0x3ae, 0x3b4, 0x3b9, 0x3bb, 0x3bc, 0x3bd, 0x3be, 0x3c0, 0x3c2, 0x3c4, 0x3c7, 0x3c9, 0x3cc, 0x3d4, 0x3d7, 0x3db, 0x3e3, 0x3e5, 0x3e6, 0x3e7, 0x3e9, 0x3ef, 0x3f1, 0x3f2, 0x3f4, 0x3f6, 0x3f8, 0x405, 0x406, 0x407, 0x40b, 0x40d, 0x40e, 0x40f, 0x410, 0x411, 0x414, 0x417, 0x41d, 0x421, 0x425, 0x42b, 0x42e, 0x435, 0x439, 0x43d, 0x444, 0x44d, 0x453, 0x459, 0x463, 0x46d, 0x46f, 0x477, 0x47d, 0x483, 0x489, 0x48c, 0x492, 0x495, 0x49d, 0x49e, 0x4a5, 0x4a9, 0x4aa, 0x4ad, 0x4b5, 0x4bb, 0x4c2, 0x4c3, 0x4c9, 0x4cc, 0x4d4, 0x4db, 0x4e5, 0x4ed, 0x4f0, 0x4f1, 0x4f2, 0x4f3, 0x4f4, 0x4f6, 0x4f8, 0x4fa, 0x4fe, 0x4ff, 0x501, 0x503, 0x504, 0x505, 0x507, 0x50c, 0x511, 0x515, 0x516, 0x519, 0x51d, 0x528, 0x52c, 0x534, 0x539, 0x53d, 0x540, 0x544, 0x547, 0x54a, 0x54f, 0x553, 0x557, 0x55b, 0x55f, 0x561, 0x563, 0x566, 0x56b, 0x56d, 0x572, 0x57b, 0x580, 0x581, 0x584, 0x585, 0x586, 0x588, 0x589, 0x58a}
+
+// sparseValues: 1418 entries, 5672 bytes
+var sparseValues = [1418]valueRange{
+	// Block 0x0, offset 0x0
+	{value: 0x0004, lo: 0xa8, hi: 0xa8},
+	{value: 0x0012, lo: 0xaa, hi: 0xaa},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0004, lo: 0xaf, hi: 0xaf},
+	{value: 0x0004, lo: 0xb4, hi: 0xb4},
+	{value: 0x001a, lo: 0xb5, hi: 0xb5},
+	{value: 0x0054, lo: 0xb7, hi: 0xb7},
+	{value: 0x0004, lo: 0xb8, hi: 0xb8},
+	{value: 0x0012, lo: 0xba, hi: 0xba},
+	// Block 0x1, offset 0x9
+	{value: 0x2013, lo: 0x80, hi: 0x96},
+	{value: 0x2013, lo: 0x98, hi: 0x9e},
+	{value: 0x009a, lo: 0x9f, hi: 0x9f},
+	{value: 0x2012, lo: 0xa0, hi: 0xb6},
+	{value: 0x2012, lo: 0xb8, hi: 0xbe},
+	{value: 0x0252, lo: 0xbf, hi: 0xbf},
+	// Block 0x2, offset 0xf
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x011b, lo: 0xb0, hi: 0xb0},
+	{value: 0x019a, lo: 0xb1, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xb7},
+	{value: 0x0012, lo: 0xb8, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x0316, lo: 0xbd, hi: 0xbe},
+	{value: 0x0553, lo: 0xbf, hi: 0xbf},
+	// Block 0x3, offset 0x18
+	{value: 0x0552, lo: 0x80, hi: 0x80},
+	{value: 0x0316, lo: 0x81, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0316, lo: 0x85, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x01da, lo: 0x89, hi: 0x89},
+	{value: 0x0117, lo: 0x8a, hi: 0xb7},
+	{value: 0x0253, lo: 0xb8, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x0316, lo: 0xbd, hi: 0xbe},
+	{value: 0x028a, lo: 0xbf, hi: 0xbf},
+	// Block 0x4, offset 0x24
+	{value: 0x0117, lo: 0x80, hi: 0x9f},
+	{value: 0x2f53, lo: 0xa0, hi: 0xa0},
+	{value: 0x0012, lo: 0xa1, hi: 0xa1},
+	{value: 0x0117, lo: 0xa2, hi: 0xb3},
+	{value: 0x0012, lo: 0xb4, hi: 0xb9},
+	{value: 0x090b, lo: 0xba, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x2953, lo: 0xbd, hi: 0xbd},
+	{value: 0x098b, lo: 0xbe, hi: 0xbe},
+	{value: 0x0a0a, lo: 0xbf, hi: 0xbf},
+	// Block 0x5, offset 0x2e
+	{value: 0x0015, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x97},
+	{value: 0x0004, lo: 0x98, hi: 0x9d},
+	{value: 0x0014, lo: 0x9e, hi: 0x9f},
+	{value: 0x0015, lo: 0xa0, hi: 0xa4},
+	{value: 0x0004, lo: 0xa5, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xbf},
+	// Block 0x6, offset 0x35
+	{value: 0x0024, lo: 0x80, hi: 0x94},
+	{value: 0x0034, lo: 0x95, hi: 0xbc},
+	{value: 0x0024, lo: 0xbd, hi: 0xbf},
+	// Block 0x7, offset 0x38
+	{value: 0x6553, lo: 0x80, hi: 0x8f},
+	{value: 0x2013, lo: 0x90, hi: 0x9f},
+	{value: 0x5f53, lo: 0xa0, hi: 0xaf},
+	{value: 0x2012, lo: 0xb0, hi: 0xbf},
+	// Block 0x8, offset 0x3c
+	{value: 0x5f52, lo: 0x80, hi: 0x8f},
+	{value: 0x6552, lo: 0x90, hi: 0x9f},
+	{value: 0x0117, lo: 0xa0, hi: 0xbf},
+	// Block 0x9, offset 0x3f
+	{value: 0x0117, lo: 0x80, hi: 0x81},
+	{value: 0x0024, lo: 0x83, hi: 0x87},
+	{value: 0x0014, lo: 0x88, hi: 0x89},
+	{value: 0x0117, lo: 0x8a, hi: 0xbf},
+	// Block 0xa, offset 0x43
+	{value: 0x0f13, lo: 0x80, hi: 0x80},
+	{value: 0x0316, lo: 0x81, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0316, lo: 0x85, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x0316, lo: 0x89, hi: 0x8a},
+	{value: 0x0716, lo: 0x8b, hi: 0x8c},
+	{value: 0x0316, lo: 0x8d, hi: 0x8e},
+	{value: 0x0f12, lo: 0x8f, hi: 0x8f},
+	{value: 0x0117, lo: 0x90, hi: 0xbf},
+	// Block 0xb, offset 0x4d
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x6553, lo: 0xb1, hi: 0xbf},
+	// Block 0xc, offset 0x4f
+	{value: 0x3013, lo: 0x80, hi: 0x8f},
+	{value: 0x6853, lo: 0x90, hi: 0x96},
+	{value: 0x0014, lo: 0x99, hi: 0x99},
+	{value: 0x0010, lo: 0x9b, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0012, lo: 0xa0, hi: 0xa0},
+	{value: 0x6552, lo: 0xa1, hi: 0xaf},
+	{value: 0x3012, lo: 0xb0, hi: 0xbf},
+	// Block 0xd, offset 0x57
+	{value: 0x0034, lo: 0x81, hi: 0x82},
+	{value: 0x0024, lo: 0x84, hi: 0x84},
+	{value: 0x0034, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0xaa},
+	{value: 0x0010, lo: 0xaf, hi: 0xb3},
+	{value: 0x0054, lo: 0xb4, hi: 0xb4},
+	// Block 0xe, offset 0x5e
+	{value: 0x0014, lo: 0x80, hi: 0x85},
+	{value: 0x0024, lo: 0x90, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x9a},
+	{value: 0x0014, lo: 0x9c, hi: 0x9c},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xf, offset 0x63
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x8a},
+	{value: 0x0034, lo: 0x8b, hi: 0x92},
+	{value: 0x0024, lo: 0x93, hi: 0x94},
+	{value: 0x0034, lo: 0x95, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x9b},
+	{value: 0x0034, lo: 0x9c, hi: 0x9c},
+	{value: 0x0024, lo: 0x9d, hi: 0x9e},
+	{value: 0x0034, lo: 0x9f, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0010, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0034, lo: 0xb0, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xbf},
+	// Block 0x10, offset 0x71
+	{value: 0x0010, lo: 0x80, hi: 0xbf},
+	// Block 0x11, offset 0x72
+	{value: 0x0010, lo: 0x80, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x95},
+	{value: 0x0024, lo: 0x96, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x0024, lo: 0x9f, hi: 0xa2},
+	{value: 0x0034, lo: 0xa3, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa8},
+	{value: 0x0034, lo: 0xaa, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xbc},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x12, offset 0x80
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0034, lo: 0x91, hi: 0x91},
+	{value: 0x0010, lo: 0x92, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	{value: 0x0034, lo: 0xb1, hi: 0xb1},
+	{value: 0x0024, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0024, lo: 0xb5, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb9},
+	{value: 0x0024, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0024, lo: 0xbd, hi: 0xbd},
+	{value: 0x0034, lo: 0xbe, hi: 0xbe},
+	{value: 0x0024, lo: 0xbf, hi: 0xbf},
+	// Block 0x13, offset 0x8f
+	{value: 0x0024, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0024, lo: 0x83, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0024, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0024, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x88, hi: 0x88},
+	{value: 0x0024, lo: 0x89, hi: 0x8a},
+	{value: 0x0010, lo: 0x8d, hi: 0xbf},
+	// Block 0x14, offset 0x99
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0014, lo: 0xa6, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	// Block 0x15, offset 0x9c
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xb1},
+	{value: 0x0034, lo: 0xb2, hi: 0xb2},
+	{value: 0x0024, lo: 0xb3, hi: 0xb3},
+	{value: 0x0014, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	// Block 0x16, offset 0xa3
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0024, lo: 0x96, hi: 0x99},
+	{value: 0x0014, lo: 0x9a, hi: 0x9a},
+	{value: 0x0024, lo: 0x9b, hi: 0xa3},
+	{value: 0x0014, lo: 0xa4, hi: 0xa4},
+	{value: 0x0024, lo: 0xa5, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa8},
+	{value: 0x0024, lo: 0xa9, hi: 0xad},
+	// Block 0x17, offset 0xab
+	{value: 0x0010, lo: 0x80, hi: 0x98},
+	{value: 0x0034, lo: 0x99, hi: 0x9b},
+	{value: 0x0010, lo: 0xa0, hi: 0xaa},
+	// Block 0x18, offset 0xae
+	{value: 0x0010, lo: 0xa0, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbd},
+	// Block 0x19, offset 0xb0
+	{value: 0x0034, lo: 0x93, hi: 0x93},
+	{value: 0x0024, lo: 0x94, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa2},
+	{value: 0x0034, lo: 0xa3, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xa9},
+	{value: 0x0024, lo: 0xaa, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xb2},
+	{value: 0x0024, lo: 0xb3, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	{value: 0x0024, lo: 0xb7, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0024, lo: 0xbb, hi: 0xbf},
+	// Block 0x1a, offset 0xbf
+	{value: 0x0014, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x1b, offset 0xc5
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x88},
+	{value: 0x0010, lo: 0x89, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0024, lo: 0x91, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x92},
+	{value: 0x0024, lo: 0x93, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x97},
+	{value: 0x0010, lo: 0x98, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xbf},
+	// Block 0x1c, offset 0xd3
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb2},
+	{value: 0x0010, lo: 0xb6, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x1d, offset 0xde
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9c, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xb1},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	{value: 0x0024, lo: 0xbe, hi: 0xbe},
+	// Block 0x1e, offset 0xeb
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8a},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb6},
+	{value: 0x0010, lo: 0xb8, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x1f, offset 0xf6
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0014, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x91, hi: 0x91},
+	{value: 0x0010, lo: 0x99, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb5},
+	// Block 0x20, offset 0x102
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x21, offset 0x10c
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x85},
+	{value: 0x0014, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x89, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xbf},
+	// Block 0x22, offset 0x118
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x23, offset 0x123
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9c, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	// Block 0x24, offset 0x12f
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8a},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0x95},
+	{value: 0x0010, lo: 0x99, hi: 0x9a},
+	{value: 0x0010, lo: 0x9c, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	{value: 0x0010, lo: 0xa8, hi: 0xaa},
+	{value: 0x0010, lo: 0xae, hi: 0xb9},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x25, offset 0x13b
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x86, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	// Block 0x26, offset 0x143
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x83},
+	{value: 0x0014, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb9},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbf},
+	// Block 0x27, offset 0x14c
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0014, lo: 0x86, hi: 0x88},
+	{value: 0x0014, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0034, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9a},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	// Block 0x28, offset 0x156
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x29, offset 0x161
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0014, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xb2},
+	// Block 0x2a, offset 0x16d
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x2b, offset 0x174
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x86, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x94, hi: 0x97},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xba, hi: 0xbf},
+	// Block 0x2c, offset 0x17f
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x96},
+	{value: 0x0010, lo: 0x9a, hi: 0xb1},
+	{value: 0x0010, lo: 0xb3, hi: 0xbb},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x2d, offset 0x184
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0010, lo: 0x8f, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x94},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9f},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	// Block 0x2e, offset 0x18c
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb4, hi: 0xb7},
+	{value: 0x0034, lo: 0xb8, hi: 0xba},
+	// Block 0x2f, offset 0x18f
+	{value: 0x0004, lo: 0x86, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x88, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x30, offset 0x194
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb4, hi: 0xb7},
+	{value: 0x0034, lo: 0xb8, hi: 0xb9},
+	{value: 0x0014, lo: 0xbb, hi: 0xbc},
+	// Block 0x31, offset 0x198
+	{value: 0x0004, lo: 0x86, hi: 0x86},
+	{value: 0x0034, lo: 0x88, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x32, offset 0x19c
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0034, lo: 0x98, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0034, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0034, lo: 0xb9, hi: 0xb9},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x33, offset 0x1a3
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0x89, hi: 0xac},
+	{value: 0x0034, lo: 0xb1, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xba, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x34, offset 0x1ac
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0024, lo: 0x82, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0024, lo: 0x86, hi: 0x87},
+	{value: 0x0010, lo: 0x88, hi: 0x8c},
+	{value: 0x0014, lo: 0x8d, hi: 0x97},
+	{value: 0x0014, lo: 0x99, hi: 0xbc},
+	// Block 0x35, offset 0x1b4
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	// Block 0x36, offset 0x1b5
+	{value: 0x0010, lo: 0xab, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0010, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbc},
+	{value: 0x0014, lo: 0xbd, hi: 0xbe},
+	// Block 0x37, offset 0x1be
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x96, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x99},
+	{value: 0x0014, lo: 0x9e, hi: 0xa0},
+	{value: 0x0010, lo: 0xa2, hi: 0xa4},
+	{value: 0x0010, lo: 0xa7, hi: 0xad},
+	{value: 0x0014, lo: 0xb1, hi: 0xb4},
+	// Block 0x38, offset 0x1c5
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x6c53, lo: 0xa0, hi: 0xbf},
+	// Block 0x39, offset 0x1cd
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0x9a, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x3a, offset 0x1d3
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb5},
+	{value: 0x0010, lo: 0xb8, hi: 0xbe},
+	// Block 0x3b, offset 0x1d8
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x82, hi: 0x85},
+	{value: 0x0010, lo: 0x88, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0xbf},
+	// Block 0x3c, offset 0x1dc
+	{value: 0x0010, lo: 0x80, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0x95},
+	{value: 0x0010, lo: 0x98, hi: 0xbf},
+	// Block 0x3d, offset 0x1df
+	{value: 0x0010, lo: 0x80, hi: 0x9a},
+	{value: 0x0024, lo: 0x9d, hi: 0x9f},
+	// Block 0x3e, offset 0x1e1
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x7453, lo: 0xa0, hi: 0xaf},
+	{value: 0x7853, lo: 0xb0, hi: 0xbf},
+	// Block 0x3f, offset 0x1e4
+	{value: 0x7c53, lo: 0x80, hi: 0x8f},
+	{value: 0x8053, lo: 0x90, hi: 0x9f},
+	{value: 0x7c53, lo: 0xa0, hi: 0xaf},
+	{value: 0x0813, lo: 0xb0, hi: 0xb5},
+	{value: 0x0892, lo: 0xb8, hi: 0xbd},
+	// Block 0x40, offset 0x1e9
+	{value: 0x0010, lo: 0x81, hi: 0xbf},
+	// Block 0x41, offset 0x1ea
+	{value: 0x0010, lo: 0x80, hi: 0xac},
+	{value: 0x0010, lo: 0xaf, hi: 0xbf},
+	// Block 0x42, offset 0x1ec
+	{value: 0x0010, lo: 0x81, hi: 0x9a},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x43, offset 0x1ee
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0010, lo: 0xae, hi: 0xb8},
+	// Block 0x44, offset 0x1f0
+	{value: 0x0010, lo: 0x80, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x93},
+	{value: 0x0034, lo: 0x94, hi: 0x94},
+	{value: 0x0010, lo: 0xa0, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	// Block 0x45, offset 0x1f7
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x93},
+	{value: 0x0010, lo: 0xa0, hi: 0xac},
+	{value: 0x0010, lo: 0xae, hi: 0xb0},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	// Block 0x46, offset 0x1fc
+	{value: 0x0014, lo: 0xb4, hi: 0xb5},
+	{value: 0x0010, lo: 0xb6, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x47, offset 0x200
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0014, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x89, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x92},
+	{value: 0x0014, lo: 0x93, hi: 0x93},
+	{value: 0x0004, lo: 0x97, hi: 0x97},
+	{value: 0x0024, lo: 0x9d, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0x48, offset 0x209
+	{value: 0x0014, lo: 0x8b, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x49, offset 0x20c
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0xb8},
+	// Block 0x4a, offset 0x20f
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xa9},
+	{value: 0x0010, lo: 0xaa, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x4b, offset 0x215
+	{value: 0x0010, lo: 0x80, hi: 0xb5},
+	// Block 0x4c, offset 0x216
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0014, lo: 0xa0, hi: 0xa2},
+	{value: 0x0010, lo: 0xa3, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xab},
+	{value: 0x0010, lo: 0xb0, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb2},
+	{value: 0x0010, lo: 0xb3, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xb9},
+	{value: 0x0024, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbb},
+	// Block 0x4d, offset 0x221
+	{value: 0x0010, lo: 0x86, hi: 0x8f},
+	// Block 0x4e, offset 0x222
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x4f, offset 0x223
+	{value: 0x0010, lo: 0x80, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0x99, hi: 0x9a},
+	{value: 0x0014, lo: 0x9b, hi: 0x9b},
+	// Block 0x50, offset 0x228
+	{value: 0x0010, lo: 0x95, hi: 0x95},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x9e},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa2},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xac},
+	{value: 0x0010, lo: 0xad, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0024, lo: 0xb5, hi: 0xbc},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x51, offset 0x235
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0004, lo: 0xa7, hi: 0xa7},
+	{value: 0x0024, lo: 0xb0, hi: 0xb4},
+	{value: 0x0034, lo: 0xb5, hi: 0xba},
+	{value: 0x0024, lo: 0xbb, hi: 0xbc},
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	// Block 0x52, offset 0x23d
+	{value: 0x0014, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x53, offset 0x245
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0030, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x8b},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0xab, hi: 0xab},
+	{value: 0x0034, lo: 0xac, hi: 0xac},
+	{value: 0x0024, lo: 0xad, hi: 0xb3},
+	// Block 0x54, offset 0x24e
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa9},
+	{value: 0x0030, lo: 0xaa, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xbf},
+	// Block 0x55, offset 0x257
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa9},
+	{value: 0x0010, lo: 0xaa, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb1},
+	{value: 0x0030, lo: 0xb2, hi: 0xb3},
+	// Block 0x56, offset 0x260
+	{value: 0x0010, lo: 0x80, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	// Block 0x57, offset 0x265
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8d, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	// Block 0x58, offset 0x268
+	{value: 0x316a, lo: 0x80, hi: 0x80},
+	{value: 0x31ea, lo: 0x81, hi: 0x81},
+	{value: 0x326a, lo: 0x82, hi: 0x82},
+	{value: 0x32ea, lo: 0x83, hi: 0x83},
+	{value: 0x336a, lo: 0x84, hi: 0x84},
+	{value: 0x33ea, lo: 0x85, hi: 0x85},
+	{value: 0x346a, lo: 0x86, hi: 0x86},
+	{value: 0x34ea, lo: 0x87, hi: 0x87},
+	{value: 0x356a, lo: 0x88, hi: 0x88},
+	{value: 0x8353, lo: 0x90, hi: 0xba},
+	{value: 0x8353, lo: 0xbd, hi: 0xbf},
+	// Block 0x59, offset 0x273
+	{value: 0x0024, lo: 0x90, hi: 0x92},
+	{value: 0x0034, lo: 0x94, hi: 0x99},
+	{value: 0x0024, lo: 0x9a, hi: 0x9b},
+	{value: 0x0034, lo: 0x9c, hi: 0x9f},
+	{value: 0x0024, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0034, lo: 0xa2, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xb3},
+	{value: 0x0024, lo: 0xb4, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb7},
+	{value: 0x0024, lo: 0xb8, hi: 0xb9},
+	// Block 0x5a, offset 0x280
+	{value: 0x0012, lo: 0x80, hi: 0xab},
+	{value: 0x0015, lo: 0xac, hi: 0xbf},
+	// Block 0x5b, offset 0x282
+	{value: 0x0015, lo: 0x80, hi: 0xaa},
+	{value: 0x0012, lo: 0xab, hi: 0xb7},
+	{value: 0x0015, lo: 0xb8, hi: 0xb8},
+	{value: 0x8752, lo: 0xb9, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xbc},
+	{value: 0x8b52, lo: 0xbd, hi: 0xbd},
+	{value: 0x0012, lo: 0xbe, hi: 0xbf},
+	// Block 0x5c, offset 0x289
+	{value: 0x0012, lo: 0x80, hi: 0x9a},
+	{value: 0x0015, lo: 0x9b, hi: 0xbf},
+	// Block 0x5d, offset 0x28b
+	{value: 0x0024, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0024, lo: 0x83, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0024, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x90},
+	{value: 0x0024, lo: 0x91, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb9},
+	{value: 0x0024, lo: 0xbb, hi: 0xbb},
+	{value: 0x0034, lo: 0xbc, hi: 0xbd},
+	{value: 0x0024, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x5e, offset 0x297
+	{value: 0x0117, lo: 0x80, hi: 0xbf},
+	// Block 0x5f, offset 0x298
+	{value: 0x0117, lo: 0x80, hi: 0x95},
+	{value: 0x361a, lo: 0x96, hi: 0x96},
+	{value: 0x36ca, lo: 0x97, hi: 0x97},
+	{value: 0x377a, lo: 0x98, hi: 0x98},
+	{value: 0x382a, lo: 0x99, hi: 0x99},
+	{value: 0x38da, lo: 0x9a, hi: 0x9a},
+	{value: 0x398a, lo: 0x9b, hi: 0x9b},
+	{value: 0x0012, lo: 0x9c, hi: 0x9d},
+	{value: 0x3a3b, lo: 0x9e, hi: 0x9e},
+	{value: 0x0012, lo: 0x9f, hi: 0x9f},
+	{value: 0x0117, lo: 0xa0, hi: 0xbf},
+	// Block 0x60, offset 0x2a3
+	{value: 0x0812, lo: 0x80, hi: 0x87},
+	{value: 0x0813, lo: 0x88, hi: 0x8f},
+	{value: 0x0812, lo: 0x90, hi: 0x95},
+	{value: 0x0813, lo: 0x98, hi: 0x9d},
+	{value: 0x0812, lo: 0xa0, hi: 0xa7},
+	{value: 0x0813, lo: 0xa8, hi: 0xaf},
+	{value: 0x0812, lo: 0xb0, hi: 0xb7},
+	{value: 0x0813, lo: 0xb8, hi: 0xbf},
+	// Block 0x61, offset 0x2ab
+	{value: 0x0004, lo: 0x8b, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8f},
+	{value: 0x0054, lo: 0x98, hi: 0x99},
+	{value: 0x0054, lo: 0xa4, hi: 0xa4},
+	{value: 0x0054, lo: 0xa7, hi: 0xa7},
+	{value: 0x0014, lo: 0xaa, hi: 0xae},
+	{value: 0x0010, lo: 0xaf, hi: 0xaf},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x62, offset 0x2b3
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x94, hi: 0x94},
+	{value: 0x0014, lo: 0xa0, hi: 0xa4},
+	{value: 0x0014, lo: 0xa6, hi: 0xaf},
+	{value: 0x0015, lo: 0xb1, hi: 0xb1},
+	{value: 0x0015, lo: 0xbf, hi: 0xbf},
+	// Block 0x63, offset 0x2b9
+	{value: 0x0015, lo: 0x90, hi: 0x9c},
+	// Block 0x64, offset 0x2ba
+	{value: 0x0024, lo: 0x90, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x93},
+	{value: 0x0024, lo: 0x94, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x9a},
+	{value: 0x0024, lo: 0x9b, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0xa0},
+	{value: 0x0024, lo: 0xa1, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa4},
+	{value: 0x0034, lo: 0xa5, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa7},
+	{value: 0x0034, lo: 0xa8, hi: 0xa8},
+	{value: 0x0024, lo: 0xa9, hi: 0xa9},
+	{value: 0x0034, lo: 0xaa, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	// Block 0x65, offset 0x2c8
+	{value: 0x0016, lo: 0x85, hi: 0x86},
+	{value: 0x0012, lo: 0x87, hi: 0x89},
+	{value: 0xa052, lo: 0x8e, hi: 0x8e},
+	{value: 0x1013, lo: 0xa0, hi: 0xaf},
+	{value: 0x1012, lo: 0xb0, hi: 0xbf},
+	// Block 0x66, offset 0x2cd
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x88},
+	// Block 0x67, offset 0x2d0
+	{value: 0xa353, lo: 0xb6, hi: 0xb7},
+	{value: 0xa653, lo: 0xb8, hi: 0xb9},
+	{value: 0xa953, lo: 0xba, hi: 0xbb},
+	{value: 0xa653, lo: 0xbc, hi: 0xbd},
+	{value: 0xa353, lo: 0xbe, hi: 0xbf},
+	// Block 0x68, offset 0x2d5
+	{value: 0x3013, lo: 0x80, hi: 0x8f},
+	{value: 0x6553, lo: 0x90, hi: 0x9f},
+	{value: 0xac53, lo: 0xa0, hi: 0xae},
+	{value: 0x3012, lo: 0xb0, hi: 0xbf},
+	// Block 0x69, offset 0x2d9
+	{value: 0x0117, lo: 0x80, hi: 0xa3},
+	{value: 0x0012, lo: 0xa4, hi: 0xa4},
+	{value: 0x0716, lo: 0xab, hi: 0xac},
+	{value: 0x0316, lo: 0xad, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xb3},
+	// Block 0x6a, offset 0x2df
+	{value: 0x6c52, lo: 0x80, hi: 0x9f},
+	{value: 0x7052, lo: 0xa0, hi: 0xa5},
+	{value: 0x7052, lo: 0xa7, hi: 0xa7},
+	{value: 0x7052, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x6b, offset 0x2e4
+	{value: 0x0010, lo: 0x80, hi: 0xa7},
+	{value: 0x0014, lo: 0xaf, hi: 0xaf},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x6c, offset 0x2e7
+	{value: 0x0010, lo: 0x80, hi: 0x96},
+	{value: 0x0010, lo: 0xa0, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xae},
+	{value: 0x0010, lo: 0xb0, hi: 0xb6},
+	{value: 0x0010, lo: 0xb8, hi: 0xbe},
+	// Block 0x6d, offset 0x2ec
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9e},
+	{value: 0x0024, lo: 0xa0, hi: 0xbf},
+	// Block 0x6e, offset 0x2f1
+	{value: 0x0014, lo: 0xaf, hi: 0xaf},
+	// Block 0x6f, offset 0x2f2
+	{value: 0x0014, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0xaa, hi: 0xad},
+	{value: 0x0030, lo: 0xae, hi: 0xaf},
+	{value: 0x0004, lo: 0xb1, hi: 0xb5},
+	{value: 0x0014, lo: 0xbb, hi: 0xbb},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	// Block 0x70, offset 0x2f8
+	{value: 0x0034, lo: 0x99, hi: 0x9a},
+	{value: 0x0004, lo: 0x9b, hi: 0x9e},
+	// Block 0x71, offset 0x2fa
+	{value: 0x0004, lo: 0xbc, hi: 0xbe},
+	// Block 0x72, offset 0x2fb
+	{value: 0x0010, lo: 0x85, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xbf},
+	// Block 0x73, offset 0x2fd
+	{value: 0x0010, lo: 0x80, hi: 0x8e},
+	{value: 0x0010, lo: 0xa0, hi: 0xba},
+	// Block 0x74, offset 0x2ff
+	{value: 0x0010, lo: 0x80, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0x96, hi: 0xbf},
+	// Block 0x75, offset 0x302
+	{value: 0x0010, lo: 0x80, hi: 0x8c},
+	// Block 0x76, offset 0x303
+	{value: 0x0010, lo: 0x90, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	// Block 0x77, offset 0x305
+	{value: 0x0010, lo: 0x80, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0010, lo: 0x90, hi: 0xab},
+	// Block 0x78, offset 0x308
+	{value: 0x0117, lo: 0x80, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb2},
+	{value: 0x0024, lo: 0xb4, hi: 0xbd},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x79, offset 0x30e
+	{value: 0x0117, lo: 0x80, hi: 0x9b},
+	{value: 0x0015, lo: 0x9c, hi: 0x9d},
+	{value: 0x0024, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x7a, offset 0x312
+	{value: 0x0010, lo: 0x80, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb1},
+	// Block 0x7b, offset 0x314
+	{value: 0x0004, lo: 0x80, hi: 0x96},
+	{value: 0x0014, lo: 0x97, hi: 0xa1},
+	{value: 0x0117, lo: 0xa2, hi: 0xaf},
+	{value: 0x0012, lo: 0xb0, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xbf},
+	// Block 0x7c, offset 0x319
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x0015, lo: 0xb0, hi: 0xb0},
+	{value: 0x0012, lo: 0xb1, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x8753, lo: 0xbd, hi: 0xbd},
+	{value: 0x0117, lo: 0xbe, hi: 0xbf},
+	// Block 0x7d, offset 0x320
+	{value: 0x0010, lo: 0xb7, hi: 0xb7},
+	{value: 0x0015, lo: 0xb8, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbf},
+	// Block 0x7e, offset 0x324
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8b},
+	{value: 0x0010, lo: 0x8c, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa6},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	// Block 0x7f, offset 0x32d
+	{value: 0x0010, lo: 0x80, hi: 0xb3},
+	// Block 0x80, offset 0x32e
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x85},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0xa0, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb7},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x81, offset 0x337
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0014, lo: 0xa6, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x82, offset 0x33b
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x91},
+	{value: 0x0010, lo: 0x92, hi: 0x92},
+	{value: 0x0030, lo: 0x93, hi: 0x93},
+	{value: 0x0010, lo: 0xa0, hi: 0xbc},
+	// Block 0x83, offset 0x340
+	{value: 0x0014, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xb9},
+	{value: 0x0010, lo: 0xba, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x84, offset 0x348
+	{value: 0x0030, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0014, lo: 0xa5, hi: 0xa5},
+	{value: 0x0004, lo: 0xa6, hi: 0xa6},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x85, offset 0x34e
+	{value: 0x0010, lo: 0x80, hi: 0xa8},
+	{value: 0x0014, lo: 0xa9, hi: 0xae},
+	{value: 0x0010, lo: 0xaf, hi: 0xb0},
+	{value: 0x0014, lo: 0xb1, hi: 0xb2},
+	{value: 0x0010, lo: 0xb3, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb6},
+	// Block 0x86, offset 0x354
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0010, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0004, lo: 0xb0, hi: 0xb0},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x87, offset 0x35e
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	{value: 0x0024, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0024, lo: 0xb7, hi: 0xb8},
+	{value: 0x0024, lo: 0xbe, hi: 0xbf},
+	// Block 0x88, offset 0x363
+	{value: 0x0024, lo: 0x81, hi: 0x81},
+	{value: 0x0004, lo: 0x9d, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0010, lo: 0xb2, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	// Block 0x89, offset 0x36c
+	{value: 0x0010, lo: 0x81, hi: 0x86},
+	{value: 0x0010, lo: 0x89, hi: 0x8e},
+	{value: 0x0010, lo: 0x91, hi: 0x96},
+	{value: 0x0010, lo: 0xa0, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xae},
+	{value: 0x0012, lo: 0xb0, hi: 0xbf},
+	// Block 0x8a, offset 0x372
+	{value: 0x0012, lo: 0x80, hi: 0x92},
+	{value: 0xaf52, lo: 0x93, hi: 0x93},
+	{value: 0x0012, lo: 0x94, hi: 0x9a},
+	{value: 0x0014, lo: 0x9b, hi: 0x9b},
+	{value: 0x0015, lo: 0x9c, hi: 0x9f},
+	{value: 0x0012, lo: 0xa0, hi: 0xa5},
+	{value: 0x74d2, lo: 0xb0, hi: 0xbf},
+	// Block 0x8b, offset 0x379
+	{value: 0x78d2, lo: 0x80, hi: 0x8f},
+	{value: 0x7cd2, lo: 0x90, hi: 0x9f},
+	{value: 0x80d2, lo: 0xa0, hi: 0xaf},
+	{value: 0x7cd2, lo: 0xb0, hi: 0xbf},
+	// Block 0x8c, offset 0x37d
+	{value: 0x0010, lo: 0x80, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xaa},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x8d, offset 0x385
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x8e, offset 0x387
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x8b, hi: 0xbb},
+	// Block 0x8f, offset 0x389
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x86, hi: 0xbf},
+	// Block 0x90, offset 0x38c
+	{value: 0x0010, lo: 0x80, hi: 0xb1},
+	{value: 0x0004, lo: 0xb2, hi: 0xbf},
+	// Block 0x91, offset 0x38e
+	{value: 0x0004, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x93, hi: 0xbf},
+	// Block 0x92, offset 0x390
+	{value: 0x0010, lo: 0x80, hi: 0xbd},
+	// Block 0x93, offset 0x391
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0x94, offset 0x392
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x0010, lo: 0x92, hi: 0xbf},
+	// Block 0x95, offset 0x394
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0xb0, hi: 0xbb},
+	// Block 0x96, offset 0x396
+	{value: 0x0014, lo: 0x80, hi: 0x8f},
+	{value: 0x0054, lo: 0x93, hi: 0x93},
+	{value: 0x0024, lo: 0xa0, hi: 0xa6},
+	{value: 0x0034, lo: 0xa7, hi: 0xad},
+	{value: 0x0024, lo: 0xae, hi: 0xaf},
+	{value: 0x0010, lo: 0xb3, hi: 0xb4},
+	// Block 0x97, offset 0x39c
+	{value: 0x0010, lo: 0x8d, hi: 0x8f},
+	{value: 0x0054, lo: 0x92, hi: 0x92},
+	{value: 0x0054, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0xb0, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0x98, offset 0x3a1
+	{value: 0x0010, lo: 0x80, hi: 0xbc},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x99, offset 0x3a3
+	{value: 0x0054, lo: 0x87, hi: 0x87},
+	{value: 0x0054, lo: 0x8e, hi: 0x8e},
+	{value: 0x0054, lo: 0x9a, hi: 0x9a},
+	{value: 0x5f53, lo: 0xa1, hi: 0xba},
+	{value: 0x0004, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x9a, offset 0x3a9
+	{value: 0x0004, lo: 0x80, hi: 0x80},
+	{value: 0x5f52, lo: 0x81, hi: 0x9a},
+	{value: 0x0004, lo: 0xb0, hi: 0xb0},
+	// Block 0x9b, offset 0x3ac
+	{value: 0x0014, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xbe},
+	// Block 0x9c, offset 0x3ae
+	{value: 0x0010, lo: 0x82, hi: 0x87},
+	{value: 0x0010, lo: 0x8a, hi: 0x8f},
+	{value: 0x0010, lo: 0x92, hi: 0x97},
+	{value: 0x0010, lo: 0x9a, hi: 0x9c},
+	{value: 0x0004, lo: 0xa3, hi: 0xa3},
+	{value: 0x0014, lo: 0xb9, hi: 0xbb},
+	// Block 0x9d, offset 0x3b4
+	{value: 0x0010, lo: 0x80, hi: 0x8b},
+	{value: 0x0010, lo: 0x8d, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xba},
+	{value: 0x0010, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x9e, offset 0x3b9
+	{value: 0x0010, lo: 0x80, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x9d},
+	// Block 0x9f, offset 0x3bb
+	{value: 0x0010, lo: 0x80, hi: 0xba},
+	// Block 0xa0, offset 0x3bc
+	{value: 0x0010, lo: 0x80, hi: 0xb4},
+	// Block 0xa1, offset 0x3bd
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	// Block 0xa2, offset 0x3be
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xa3, offset 0x3c0
+	{value: 0x0010, lo: 0x80, hi: 0x90},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	// Block 0xa4, offset 0x3c2
+	{value: 0x0010, lo: 0x80, hi: 0x9f},
+	{value: 0x0010, lo: 0xad, hi: 0xbf},
+	// Block 0xa5, offset 0x3c4
+	{value: 0x0010, lo: 0x80, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0xb5},
+	{value: 0x0024, lo: 0xb6, hi: 0xba},
+	// Block 0xa6, offset 0x3c7
+	{value: 0x0010, lo: 0x80, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xa7, offset 0x3c9
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x88, hi: 0x8f},
+	{value: 0x0010, lo: 0x91, hi: 0x95},
+	// Block 0xa8, offset 0x3cc
+	{value: 0x2813, lo: 0x80, hi: 0x87},
+	{value: 0x3813, lo: 0x88, hi: 0x8f},
+	{value: 0x2813, lo: 0x90, hi: 0x97},
+	{value: 0xb253, lo: 0x98, hi: 0x9f},
+	{value: 0xb553, lo: 0xa0, hi: 0xa7},
+	{value: 0x2812, lo: 0xa8, hi: 0xaf},
+	{value: 0x3812, lo: 0xb0, hi: 0xb7},
+	{value: 0x2812, lo: 0xb8, hi: 0xbf},
+	// Block 0xa9, offset 0x3d4
+	{value: 0xb252, lo: 0x80, hi: 0x87},
+	{value: 0xb552, lo: 0x88, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0xaa, offset 0x3d7
+	{value: 0x0010, lo: 0x80, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0xb553, lo: 0xb0, hi: 0xb7},
+	{value: 0xb253, lo: 0xb8, hi: 0xbf},
+	// Block 0xab, offset 0x3db
+	{value: 0x2813, lo: 0x80, hi: 0x87},
+	{value: 0x3813, lo: 0x88, hi: 0x8f},
+	{value: 0x2813, lo: 0x90, hi: 0x93},
+	{value: 0xb552, lo: 0x98, hi: 0x9f},
+	{value: 0xb252, lo: 0xa0, hi: 0xa7},
+	{value: 0x2812, lo: 0xa8, hi: 0xaf},
+	{value: 0x3812, lo: 0xb0, hi: 0xb7},
+	{value: 0x2812, lo: 0xb8, hi: 0xbb},
+	// Block 0xac, offset 0x3e3
+	{value: 0x0010, lo: 0x80, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xad, offset 0x3e5
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	// Block 0xae, offset 0x3e6
+	{value: 0x0010, lo: 0x80, hi: 0xb6},
+	// Block 0xaf, offset 0x3e7
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xa7},
+	// Block 0xb0, offset 0x3e9
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0010, lo: 0x88, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0xb5},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xb1, offset 0x3ef
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb6},
+	// Block 0xb2, offset 0x3f1
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	// Block 0xb3, offset 0x3f2
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	// Block 0xb4, offset 0x3f4
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb9},
+	// Block 0xb5, offset 0x3f6
+	{value: 0x0010, lo: 0x80, hi: 0xb7},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0xb6, offset 0x3f8
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x83},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x8e, hi: 0x8e},
+	{value: 0x0024, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x97},
+	{value: 0x0010, lo: 0x99, hi: 0xb5},
+	{value: 0x0024, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xb7, offset 0x405
+	{value: 0x0010, lo: 0xa0, hi: 0xbc},
+	// Block 0xb8, offset 0x406
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	// Block 0xb9, offset 0x407
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0x89, hi: 0xa4},
+	{value: 0x0024, lo: 0xa5, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	// Block 0xba, offset 0x40b
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	// Block 0xbb, offset 0x40d
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	// Block 0xbc, offset 0x40e
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	// Block 0xbd, offset 0x40f
+	{value: 0x5653, lo: 0x80, hi: 0xb2},
+	// Block 0xbe, offset 0x410
+	{value: 0x5652, lo: 0x80, hi: 0xb2},
+	// Block 0xbf, offset 0x411
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xc0, offset 0x414
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xc1, offset 0x417
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x87},
+	{value: 0x0024, lo: 0x88, hi: 0x8a},
+	{value: 0x0034, lo: 0x8b, hi: 0x8b},
+	{value: 0x0024, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x90},
+	// Block 0xc2, offset 0x41d
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbf},
+	// Block 0xc3, offset 0x421
+	{value: 0x0014, lo: 0x80, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xc4, offset 0x425
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb6},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0014, lo: 0xbd, hi: 0xbd},
+	// Block 0xc5, offset 0x42b
+	{value: 0x0014, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0xa8},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xc6, offset 0x42e
+	{value: 0x0024, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xab},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0xc7, offset 0x435
+	{value: 0x0010, lo: 0x84, hi: 0x86},
+	{value: 0x0010, lo: 0x90, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb3},
+	{value: 0x0010, lo: 0xb6, hi: 0xb6},
+	// Block 0xc8, offset 0x439
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xc9, offset 0x43d
+	{value: 0x0030, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0014, lo: 0x89, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8c},
+	{value: 0x0010, lo: 0x90, hi: 0x9a},
+	{value: 0x0010, lo: 0x9c, hi: 0x9c},
+	// Block 0xca, offset 0x444
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0014, lo: 0xb4, hi: 0xb4},
+	{value: 0x0030, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xb7},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	// Block 0xcb, offset 0x44d
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa8},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xcc, offset 0x453
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0014, lo: 0x9f, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa2},
+	{value: 0x0014, lo: 0xa3, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xcd, offset 0x459
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0xce, offset 0x463
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0030, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9d, hi: 0xa3},
+	{value: 0x0024, lo: 0xa6, hi: 0xac},
+	{value: 0x0024, lo: 0xb0, hi: 0xb4},
+	// Block 0xcf, offset 0x46d
+	{value: 0x0010, lo: 0x80, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbf},
+	// Block 0xd0, offset 0x46f
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0x9e, hi: 0x9e},
+	// Block 0xd1, offset 0x477
+	{value: 0x0010, lo: 0x80, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb8},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0xd2, offset 0x47d
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0x85},
+	{value: 0x0010, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd3, offset 0x483
+	{value: 0x0010, lo: 0x80, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb5},
+	{value: 0x0010, lo: 0xb8, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xd4, offset 0x489
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x98, hi: 0x9b},
+	{value: 0x0014, lo: 0x9c, hi: 0x9d},
+	// Block 0xd5, offset 0x48c
+	{value: 0x0010, lo: 0x80, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbc},
+	{value: 0x0014, lo: 0xbd, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xd6, offset 0x492
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd7, offset 0x495
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0014, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb5},
+	{value: 0x0030, lo: 0xb6, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	// Block 0xd8, offset 0x49d
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	// Block 0xd9, offset 0x49e
+	{value: 0x0014, lo: 0x9d, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xda, offset 0x4a5
+	{value: 0x0010, lo: 0x80, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb7},
+	{value: 0x0010, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	// Block 0xdb, offset 0x4a9
+	{value: 0x5f53, lo: 0xa0, hi: 0xbf},
+	// Block 0xdc, offset 0x4aa
+	{value: 0x5f52, lo: 0x80, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xdd, offset 0x4ad
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x8a},
+	{value: 0x0010, lo: 0x8b, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb8},
+	{value: 0x0010, lo: 0xb9, hi: 0xba},
+	{value: 0x0014, lo: 0xbb, hi: 0xbe},
+	// Block 0xde, offset 0x4b5
+	{value: 0x0034, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0014, lo: 0x91, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x98},
+	{value: 0x0014, lo: 0x99, hi: 0x9b},
+	{value: 0x0010, lo: 0x9c, hi: 0xbf},
+	// Block 0xdf, offset 0x4bb
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x86, hi: 0x89},
+	{value: 0x0014, lo: 0x8a, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x98},
+	{value: 0x0034, lo: 0x99, hi: 0x99},
+	{value: 0x0010, lo: 0x9d, hi: 0x9d},
+	// Block 0xe0, offset 0x4c2
+	{value: 0x0010, lo: 0x80, hi: 0xb8},
+	// Block 0xe1, offset 0x4c3
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb6},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xe2, offset 0x4c9
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xb2, hi: 0xbf},
+	// Block 0xe3, offset 0x4cc
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x0014, lo: 0x92, hi: 0xa7},
+	{value: 0x0010, lo: 0xa9, hi: 0xa9},
+	{value: 0x0014, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb6},
+	// Block 0xe4, offset 0x4d4
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0xb0},
+	{value: 0x0014, lo: 0xb1, hi: 0xb6},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0xe5, offset 0x4db
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x85},
+	{value: 0x0010, lo: 0x86, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xa5},
+	{value: 0x0010, lo: 0xa7, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xbf},
+	// Block 0xe6, offset 0x4e5
+	{value: 0x0010, lo: 0x80, hi: 0x8e},
+	{value: 0x0014, lo: 0x90, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0x96, hi: 0x96},
+	{value: 0x0034, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0xe7, offset 0x4ed
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb6},
+	// Block 0xe8, offset 0x4f0
+	{value: 0x0010, lo: 0x80, hi: 0x99},
+	// Block 0xe9, offset 0x4f1
+	{value: 0x0010, lo: 0x80, hi: 0xae},
+	// Block 0xea, offset 0x4f2
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	// Block 0xeb, offset 0x4f3
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	// Block 0xec, offset 0x4f4
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0xed, offset 0x4f6
+	{value: 0x0010, lo: 0x90, hi: 0xad},
+	{value: 0x0034, lo: 0xb0, hi: 0xb4},
+	// Block 0xee, offset 0x4f8
+	{value: 0x0010, lo: 0x80, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb6},
+	// Block 0xef, offset 0x4fa
+	{value: 0x0014, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa3, hi: 0xb7},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0xf0, offset 0x4fe
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	// Block 0xf1, offset 0x4ff
+	{value: 0x2013, lo: 0x80, hi: 0x9f},
+	{value: 0x2012, lo: 0xa0, hi: 0xbf},
+	// Block 0xf2, offset 0x501
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0010, lo: 0x90, hi: 0xbe},
+	// Block 0xf3, offset 0x503
+	{value: 0x0014, lo: 0x8f, hi: 0x9f},
+	// Block 0xf4, offset 0x504
+	{value: 0x0014, lo: 0xa0, hi: 0xa1},
+	// Block 0xf5, offset 0x505
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xbc},
+	// Block 0xf6, offset 0x507
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x0034, lo: 0x9e, hi: 0x9e},
+	{value: 0x0014, lo: 0xa0, hi: 0xa3},
+	// Block 0xf7, offset 0x50c
+	{value: 0x0030, lo: 0xa5, hi: 0xa6},
+	{value: 0x0034, lo: 0xa7, hi: 0xa9},
+	{value: 0x0030, lo: 0xad, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbf},
+	// Block 0xf8, offset 0x511
+	{value: 0x0034, lo: 0x80, hi: 0x82},
+	{value: 0x0024, lo: 0x85, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8b},
+	{value: 0x0024, lo: 0xaa, hi: 0xad},
+	// Block 0xf9, offset 0x515
+	{value: 0x0024, lo: 0x82, hi: 0x84},
+	// Block 0xfa, offset 0x516
+	{value: 0x0013, lo: 0x80, hi: 0x99},
+	{value: 0x0012, lo: 0x9a, hi: 0xb3},
+	{value: 0x0013, lo: 0xb4, hi: 0xbf},
+	// Block 0xfb, offset 0x519
+	{value: 0x0013, lo: 0x80, hi: 0x8d},
+	{value: 0x0012, lo: 0x8e, hi: 0x94},
+	{value: 0x0012, lo: 0x96, hi: 0xa7},
+	{value: 0x0013, lo: 0xa8, hi: 0xbf},
+	// Block 0xfc, offset 0x51d
+	{value: 0x0013, lo: 0x80, hi: 0x81},
+	{value: 0x0012, lo: 0x82, hi: 0x9b},
+	{value: 0x0013, lo: 0x9c, hi: 0x9c},
+	{value: 0x0013, lo: 0x9e, hi: 0x9f},
+	{value: 0x0013, lo: 0xa2, hi: 0xa2},
+	{value: 0x0013, lo: 0xa5, hi: 0xa6},
+	{value: 0x0013, lo: 0xa9, hi: 0xac},
+	{value: 0x0013, lo: 0xae, hi: 0xb5},
+	{value: 0x0012, lo: 0xb6, hi: 0xb9},
+	{value: 0x0012, lo: 0xbb, hi: 0xbb},
+	{value: 0x0012, lo: 0xbd, hi: 0xbf},
+	// Block 0xfd, offset 0x528
+	{value: 0x0012, lo: 0x80, hi: 0x83},
+	{value: 0x0012, lo: 0x85, hi: 0x8f},
+	{value: 0x0013, lo: 0x90, hi: 0xa9},
+	{value: 0x0012, lo: 0xaa, hi: 0xbf},
+	// Block 0xfe, offset 0x52c
+	{value: 0x0012, lo: 0x80, hi: 0x83},
+	{value: 0x0013, lo: 0x84, hi: 0x85},
+	{value: 0x0013, lo: 0x87, hi: 0x8a},
+	{value: 0x0013, lo: 0x8d, hi: 0x94},
+	{value: 0x0013, lo: 0x96, hi: 0x9c},
+	{value: 0x0012, lo: 0x9e, hi: 0xb7},
+	{value: 0x0013, lo: 0xb8, hi: 0xb9},
+	{value: 0x0013, lo: 0xbb, hi: 0xbe},
+	// Block 0xff, offset 0x534
+	{value: 0x0013, lo: 0x80, hi: 0x84},
+	{value: 0x0013, lo: 0x86, hi: 0x86},
+	{value: 0x0013, lo: 0x8a, hi: 0x90},
+	{value: 0x0012, lo: 0x92, hi: 0xab},
+	{value: 0x0013, lo: 0xac, hi: 0xbf},
+	// Block 0x100, offset 0x539
+	{value: 0x0013, lo: 0x80, hi: 0x85},
+	{value: 0x0012, lo: 0x86, hi: 0x9f},
+	{value: 0x0013, lo: 0xa0, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xbf},
+	// Block 0x101, offset 0x53d
+	{value: 0x0012, lo: 0x80, hi: 0x93},
+	{value: 0x0013, lo: 0x94, hi: 0xad},
+	{value: 0x0012, lo: 0xae, hi: 0xbf},
+	// Block 0x102, offset 0x540
+	{value: 0x0012, lo: 0x80, hi: 0x87},
+	{value: 0x0013, lo: 0x88, hi: 0xa1},
+	{value: 0x0012, lo: 0xa2, hi: 0xbb},
+	{value: 0x0013, lo: 0xbc, hi: 0xbf},
+	// Block 0x103, offset 0x544
+	{value: 0x0013, lo: 0x80, hi: 0x95},
+	{value: 0x0012, lo: 0x96, hi: 0xaf},
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x104, offset 0x547
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	{value: 0x0012, lo: 0x8a, hi: 0xa5},
+	{value: 0x0013, lo: 0xa8, hi: 0xbf},
+	// Block 0x105, offset 0x54a
+	{value: 0x0013, lo: 0x80, hi: 0x80},
+	{value: 0x0012, lo: 0x82, hi: 0x9a},
+	{value: 0x0012, lo: 0x9c, hi: 0xa1},
+	{value: 0x0013, lo: 0xa2, hi: 0xba},
+	{value: 0x0012, lo: 0xbc, hi: 0xbf},
+	// Block 0x106, offset 0x54f
+	{value: 0x0012, lo: 0x80, hi: 0x94},
+	{value: 0x0012, lo: 0x96, hi: 0x9b},
+	{value: 0x0013, lo: 0x9c, hi: 0xb4},
+	{value: 0x0012, lo: 0xb6, hi: 0xbf},
+	// Block 0x107, offset 0x553
+	{value: 0x0012, lo: 0x80, hi: 0x8e},
+	{value: 0x0012, lo: 0x90, hi: 0x95},
+	{value: 0x0013, lo: 0x96, hi: 0xae},
+	{value: 0x0012, lo: 0xb0, hi: 0xbf},
+	// Block 0x108, offset 0x557
+	{value: 0x0012, lo: 0x80, hi: 0x88},
+	{value: 0x0012, lo: 0x8a, hi: 0x8f},
+	{value: 0x0013, lo: 0x90, hi: 0xa8},
+	{value: 0x0012, lo: 0xaa, hi: 0xbf},
+	// Block 0x109, offset 0x55b
+	{value: 0x0012, lo: 0x80, hi: 0x82},
+	{value: 0x0012, lo: 0x84, hi: 0x89},
+	{value: 0x0017, lo: 0x8a, hi: 0x8b},
+	{value: 0x0010, lo: 0x8e, hi: 0xbf},
+	// Block 0x10a, offset 0x55f
+	{value: 0x0014, lo: 0x80, hi: 0xb6},
+	{value: 0x0014, lo: 0xbb, hi: 0xbf},
+	// Block 0x10b, offset 0x561
+	{value: 0x0014, lo: 0x80, hi: 0xac},
+	{value: 0x0014, lo: 0xb5, hi: 0xb5},
+	// Block 0x10c, offset 0x563
+	{value: 0x0014, lo: 0x84, hi: 0x84},
+	{value: 0x0014, lo: 0x9b, hi: 0x9f},
+	{value: 0x0014, lo: 0xa1, hi: 0xaf},
+	// Block 0x10d, offset 0x566
+	{value: 0x0024, lo: 0x80, hi: 0x86},
+	{value: 0x0024, lo: 0x88, hi: 0x98},
+	{value: 0x0024, lo: 0x9b, hi: 0xa1},
+	{value: 0x0024, lo: 0xa3, hi: 0xa4},
+	{value: 0x0024, lo: 0xa6, hi: 0xaa},
+	// Block 0x10e, offset 0x56b
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0034, lo: 0x90, hi: 0x96},
+	// Block 0x10f, offset 0x56d
+	{value: 0xb852, lo: 0x80, hi: 0x81},
+	{value: 0xbb52, lo: 0x82, hi: 0x83},
+	{value: 0x0024, lo: 0x84, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x110, offset 0x572
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x9f},
+	{value: 0x0010, lo: 0xa1, hi: 0xa2},
+	{value: 0x0010, lo: 0xa4, hi: 0xa4},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0010, lo: 0xa9, hi: 0xb2},
+	{value: 0x0010, lo: 0xb4, hi: 0xb7},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	// Block 0x111, offset 0x57b
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0x9b},
+	{value: 0x0010, lo: 0xa1, hi: 0xa3},
+	{value: 0x0010, lo: 0xa5, hi: 0xa9},
+	{value: 0x0010, lo: 0xab, hi: 0xbb},
+	// Block 0x112, offset 0x580
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x113, offset 0x581
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	{value: 0x0013, lo: 0x90, hi: 0xa9},
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x114, offset 0x584
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	// Block 0x115, offset 0x585
+	{value: 0x0014, lo: 0xbb, hi: 0xbf},
+	// Block 0x116, offset 0x586
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0014, lo: 0xa0, hi: 0xbf},
+	// Block 0x117, offset 0x588
+	{value: 0x0014, lo: 0x80, hi: 0xbf},
+	// Block 0x118, offset 0x589
+	{value: 0x0014, lo: 0x80, hi: 0xaf},
+}
+
+// Total table size 14906 bytes (14KiB); checksum: 362795C7
diff --git a/vendor/golang.org/x/text/cases/tables12.0.0.go b/vendor/golang.org/x/text/cases/tables12.0.0.go
new file mode 100644
index 00000000..ae7dc240
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/tables12.0.0.go
@@ -0,0 +1,2360 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+//go:build go1.14 && !go1.16
+// +build go1.14,!go1.16
+
+package cases
+
+// UnicodeVersion is the Unicode version from which the tables in this package are derived.
+const UnicodeVersion = "12.0.0"
+
+var xorData string = "" + // Size: 192 bytes
+	"\x00\x06\x07\x00\x01?\x00\x0f\x03\x00\x0f\x12\x00\x0f\x1f\x00\x0f\x1d" +
+	"\x00\x01\x13\x00\x0f\x16\x00\x0f\x0b\x00\x0f3\x00\x0f7\x00\x01#\x00\x0f?" +
+	"\x00\x0e'\x00\x0f/\x00\x0e>\x00\x0f*\x00\x0c&\x00\x0c*\x00\x0c;\x00\x0c9" +
+	"\x00\x0c%\x00\x01\x08\x00\x03\x0d\x00\x03\x09\x00\x02\x06\x00\x02\x02" +
+	"\x00\x02\x0c\x00\x01\x00\x00\x01\x03\x00\x01\x01\x00\x01 \x00\x01\x0c" +
+	"\x00\x01\x10\x00\x03\x10\x00\x036 \x00\x037 \x00\x0b#\x10\x00\x0b 0\x00" +
+	"\x0b!\x10\x00\x0b!0\x001\x00\x00\x0b(\x04\x00\x03\x04\x1e\x00\x0b)\x08" +
+	"\x00\x03\x0a\x00\x02:\x00\x02>\x00\x02,\x00\x02\x00\x00\x02\x10\x00\x01<" +
+	"\x00\x01&\x00\x01*\x00\x01.\x00\x010\x003 \x00\x01\x18\x00\x01(\x00\x01" +
+	"\x1e\x00\x01\x22"
+
+var exceptions string = "" + // Size: 2450 bytes
+	"\x00\x12\x12μΜΜ\x12\x12ssSSSs\x13\x18i̇i̇\x10\x09II\x13\x1bʼnʼNʼN\x11" +
+	"\x09sSS\x12\x12dždžDž\x12\x12dždžDŽ\x10\x12DŽDž\x12\x12ljljLj\x12\x12ljljLJ\x10\x12LJLj" +
+	"\x12\x12njnjNj\x12\x12njnjNJ\x10\x12NJNj\x13\x1bǰJ̌J̌\x12\x12dzdzDz\x12\x12dzdzDZ\x10" +
+	"\x12DZDz\x13\x18ⱥⱥ\x13\x18ⱦⱦ\x10\x1bⱾⱾ\x10\x1bⱿⱿ\x10\x1bⱯⱯ\x10\x1bⱭⱭ\x10" +
+	"\x1bⱰⱰ\x10\x1bꞫꞫ\x10\x1bꞬꞬ\x10\x1bꞍꞍ\x10\x1bꞪꞪ\x10\x1bꞮꞮ\x10\x1bⱢⱢ\x10" +
+	"\x1bꞭꞭ\x10\x1bⱮⱮ\x10\x1bⱤⱤ\x10\x1bꟅꟅ\x10\x1bꞱꞱ\x10\x1bꞲꞲ\x10\x1bꞰꞰ2\x12ι" +
+	"ΙΙ\x166ΐΪ́Ϊ́\x166ΰΫ́Ϋ́\x12\x12σΣΣ\x12\x12βΒΒ\x12\x12θΘΘ\x12\x12" +
+	"φΦΦ\x12\x12πΠΠ\x12\x12κΚΚ\x12\x12ρΡΡ\x12\x12εΕΕ\x14$եւԵՒԵւ\x10\x1bᲐა" +
+	"\x10\x1bᲑბ\x10\x1bᲒგ\x10\x1bᲓდ\x10\x1bᲔე\x10\x1bᲕვ\x10\x1bᲖზ\x10\x1bᲗთ" +
+	"\x10\x1bᲘი\x10\x1bᲙკ\x10\x1bᲚლ\x10\x1bᲛმ\x10\x1bᲜნ\x10\x1bᲝო\x10\x1bᲞპ" +
+	"\x10\x1bᲟჟ\x10\x1bᲠრ\x10\x1bᲡს\x10\x1bᲢტ\x10\x1bᲣუ\x10\x1bᲤფ\x10\x1bᲥქ" +
+	"\x10\x1bᲦღ\x10\x1bᲧყ\x10\x1bᲨშ\x10\x1bᲩჩ\x10\x1bᲪც\x10\x1bᲫძ\x10\x1bᲬწ" +
+	"\x10\x1bᲭჭ\x10\x1bᲮხ\x10\x1bᲯჯ\x10\x1bᲰჰ\x10\x1bᲱჱ\x10\x1bᲲჲ\x10\x1bᲳჳ" +
+	"\x10\x1bᲴჴ\x10\x1bᲵჵ\x10\x1bᲶჶ\x10\x1bᲷჷ\x10\x1bᲸჸ\x10\x1bᲹჹ\x10\x1bᲺჺ" +
+	"\x10\x1bᲽჽ\x10\x1bᲾჾ\x10\x1bᲿჿ\x12\x12вВВ\x12\x12дДД\x12\x12оОО\x12\x12с" +
+	"СС\x12\x12тТТ\x12\x12тТТ\x12\x12ъЪЪ\x12\x12ѣѢѢ\x13\x1bꙋꙊꙊ\x13\x1bẖH̱H̱" +
+	"\x13\x1bẗT̈T̈\x13\x1bẘW̊W̊\x13\x1bẙY̊Y̊\x13\x1baʾAʾAʾ\x13\x1bṡṠṠ\x12" +
+	"\x10ssß\x14$ὐΥ̓Υ̓\x166ὒΥ̓̀Υ̓̀\x166ὔΥ̓́Υ̓́\x166ὖΥ̓͂Υ̓͂\x15+ἀιἈΙᾈ" +
+	"\x15+ἁιἉΙᾉ\x15+ἂιἊΙᾊ\x15+ἃιἋΙᾋ\x15+ἄιἌΙᾌ\x15+ἅιἍΙᾍ\x15+ἆιἎΙᾎ\x15+ἇιἏΙᾏ" +
+	"\x15\x1dἀιᾀἈΙ\x15\x1dἁιᾁἉΙ\x15\x1dἂιᾂἊΙ\x15\x1dἃιᾃἋΙ\x15\x1dἄιᾄἌΙ\x15" +
+	"\x1dἅιᾅἍΙ\x15\x1dἆιᾆἎΙ\x15\x1dἇιᾇἏΙ\x15+ἠιἨΙᾘ\x15+ἡιἩΙᾙ\x15+ἢιἪΙᾚ\x15+ἣι" +
+	"ἫΙᾛ\x15+ἤιἬΙᾜ\x15+ἥιἭΙᾝ\x15+ἦιἮΙᾞ\x15+ἧιἯΙᾟ\x15\x1dἠιᾐἨΙ\x15\x1dἡιᾑἩΙ" +
+	"\x15\x1dἢιᾒἪΙ\x15\x1dἣιᾓἫΙ\x15\x1dἤιᾔἬΙ\x15\x1dἥιᾕἭΙ\x15\x1dἦιᾖἮΙ\x15" +
+	"\x1dἧιᾗἯΙ\x15+ὠιὨΙᾨ\x15+ὡιὩΙᾩ\x15+ὢιὪΙᾪ\x15+ὣιὫΙᾫ\x15+ὤιὬΙᾬ\x15+ὥιὭΙᾭ" +
+	"\x15+ὦιὮΙᾮ\x15+ὧιὯΙᾯ\x15\x1dὠιᾠὨΙ\x15\x1dὡιᾡὩΙ\x15\x1dὢιᾢὪΙ\x15\x1dὣιᾣὫΙ" +
+	"\x15\x1dὤιᾤὬΙ\x15\x1dὥιᾥὭΙ\x15\x1dὦιᾦὮΙ\x15\x1dὧιᾧὯΙ\x15-ὰιᾺΙᾺͅ\x14#αιΑΙ" +
+	"ᾼ\x14$άιΆΙΆͅ\x14$ᾶΑ͂Α͂\x166ᾶιΑ͂Ιᾼ͂\x14\x1cαιᾳΑΙ\x12\x12ιΙΙ\x15-ὴιῊΙ" +
+	"Ὴͅ\x14#ηιΗΙῌ\x14$ήιΉΙΉͅ\x14$ῆΗ͂Η͂\x166ῆιΗ͂Ιῌ͂\x14\x1cηιῃΗΙ\x166ῒΙ" +
+	"̈̀Ϊ̀\x166ΐΪ́Ϊ́\x14$ῖΙ͂Ι͂\x166ῗΪ͂Ϊ͂\x166ῢΫ̀Ϋ̀\x166ΰΫ́Ϋ" +
+	"́\x14$ῤΡ̓Ρ̓\x14$ῦΥ͂Υ͂\x166ῧΫ͂Ϋ͂\x15-ὼιῺΙῺͅ\x14#ωιΩΙῼ\x14$ώιΏΙΏͅ" +
+	"\x14$ῶΩ͂Ω͂\x166ῶιΩ͂Ιῼ͂\x14\x1cωιῳΩΙ\x12\x10ωω\x11\x08kk\x12\x10åå\x12" +
+	"\x10ɫɫ\x12\x10ɽɽ\x10\x12ȺȺ\x10\x12ȾȾ\x12\x10ɑɑ\x12\x10ɱɱ\x12\x10ɐɐ\x12" +
+	"\x10ɒɒ\x12\x10ȿȿ\x12\x10ɀɀ\x12\x10ɥɥ\x12\x10ɦɦ\x12\x10ɜɜ\x12\x10ɡɡ\x12" +
+	"\x10ɬɬ\x12\x10ɪɪ\x12\x10ʞʞ\x12\x10ʇʇ\x12\x10ʝʝ\x12\x10ʂʂ\x12\x12ffFFFf" +
+	"\x12\x12fiFIFi\x12\x12flFLFl\x13\x1bffiFFIFfi\x13\x1bfflFFLFfl\x12\x12st" +
+	"STSt\x12\x12stSTSt\x14$մնՄՆՄն\x14$մեՄԵՄե\x14$միՄԻՄի\x14$վնՎՆՎն\x14$մխՄԽՄ" +
+	"խ"
+
+// 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 *caseTrie) lookup(s []byte) (v uint16, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return caseValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupUnsafe(s []byte) uint16 {
+	c0 := s[0]
+	if c0 < 0x80 { // is ASCII
+		return caseValues[c0]
+	}
+	i := caseIndex[c0]
+	if c0 < 0xE0 { // 2-byte UTF-8
+		return t.lookupValue(uint32(i), s[1])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[1])]
+	if c0 < 0xF0 { // 3-byte UTF-8
+		return t.lookupValue(uint32(i), s[2])
+	}
+	i = caseIndex[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 *caseTrie) lookupString(s string) (v uint16, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return caseValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupStringUnsafe(s string) uint16 {
+	c0 := s[0]
+	if c0 < 0x80 { // is ASCII
+		return caseValues[c0]
+	}
+	i := caseIndex[c0]
+	if c0 < 0xE0 { // 2-byte UTF-8
+		return t.lookupValue(uint32(i), s[1])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[1])]
+	if c0 < 0xF0 { // 3-byte UTF-8
+		return t.lookupValue(uint32(i), s[2])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[2])]
+	if c0 < 0xF8 { // 4-byte UTF-8
+		return t.lookupValue(uint32(i), s[3])
+	}
+	return 0
+}
+
+// caseTrie. Total size: 12396 bytes (12.11 KiB). Checksum: c0656238384c3da1.
+type caseTrie struct{}
+
+func newCaseTrie(i int) *caseTrie {
+	return &caseTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *caseTrie) lookupValue(n uint32, b byte) uint16 {
+	switch {
+	case n < 20:
+		return uint16(caseValues[n<<6+uint32(b)])
+	default:
+		n -= 20
+		return uint16(sparse.lookup(n, b))
+	}
+}
+
+// caseValues: 22 blocks, 1408 entries, 2816 bytes
+// The third block is the zero block.
+var caseValues = [1408]uint16{
+	// Block 0x0, offset 0x0
+	0x27: 0x0054,
+	0x2e: 0x0054,
+	0x30: 0x0010, 0x31: 0x0010, 0x32: 0x0010, 0x33: 0x0010, 0x34: 0x0010, 0x35: 0x0010,
+	0x36: 0x0010, 0x37: 0x0010, 0x38: 0x0010, 0x39: 0x0010, 0x3a: 0x0054,
+	// Block 0x1, offset 0x40
+	0x41: 0x2013, 0x42: 0x2013, 0x43: 0x2013, 0x44: 0x2013, 0x45: 0x2013,
+	0x46: 0x2013, 0x47: 0x2013, 0x48: 0x2013, 0x49: 0x2013, 0x4a: 0x2013, 0x4b: 0x2013,
+	0x4c: 0x2013, 0x4d: 0x2013, 0x4e: 0x2013, 0x4f: 0x2013, 0x50: 0x2013, 0x51: 0x2013,
+	0x52: 0x2013, 0x53: 0x2013, 0x54: 0x2013, 0x55: 0x2013, 0x56: 0x2013, 0x57: 0x2013,
+	0x58: 0x2013, 0x59: 0x2013, 0x5a: 0x2013,
+	0x5e: 0x0004, 0x5f: 0x0010, 0x60: 0x0004, 0x61: 0x2012, 0x62: 0x2012, 0x63: 0x2012,
+	0x64: 0x2012, 0x65: 0x2012, 0x66: 0x2012, 0x67: 0x2012, 0x68: 0x2012, 0x69: 0x2012,
+	0x6a: 0x2012, 0x6b: 0x2012, 0x6c: 0x2012, 0x6d: 0x2012, 0x6e: 0x2012, 0x6f: 0x2012,
+	0x70: 0x2012, 0x71: 0x2012, 0x72: 0x2012, 0x73: 0x2012, 0x74: 0x2012, 0x75: 0x2012,
+	0x76: 0x2012, 0x77: 0x2012, 0x78: 0x2012, 0x79: 0x2012, 0x7a: 0x2012,
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc0: 0x0852, 0xc1: 0x0b53, 0xc2: 0x0113, 0xc3: 0x0112, 0xc4: 0x0113, 0xc5: 0x0112,
+	0xc6: 0x0b53, 0xc7: 0x0f13, 0xc8: 0x0f12, 0xc9: 0x0e53, 0xca: 0x1153, 0xcb: 0x0713,
+	0xcc: 0x0712, 0xcd: 0x0012, 0xce: 0x1453, 0xcf: 0x1753, 0xd0: 0x1a53, 0xd1: 0x0313,
+	0xd2: 0x0312, 0xd3: 0x1d53, 0xd4: 0x2053, 0xd5: 0x2352, 0xd6: 0x2653, 0xd7: 0x2653,
+	0xd8: 0x0113, 0xd9: 0x0112, 0xda: 0x2952, 0xdb: 0x0012, 0xdc: 0x1d53, 0xdd: 0x2c53,
+	0xde: 0x2f52, 0xdf: 0x3253, 0xe0: 0x0113, 0xe1: 0x0112, 0xe2: 0x0113, 0xe3: 0x0112,
+	0xe4: 0x0113, 0xe5: 0x0112, 0xe6: 0x3553, 0xe7: 0x0f13, 0xe8: 0x0f12, 0xe9: 0x3853,
+	0xea: 0x0012, 0xeb: 0x0012, 0xec: 0x0113, 0xed: 0x0112, 0xee: 0x3553, 0xef: 0x1f13,
+	0xf0: 0x1f12, 0xf1: 0x3b53, 0xf2: 0x3e53, 0xf3: 0x0713, 0xf4: 0x0712, 0xf5: 0x0313,
+	0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010,
+	0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452,
+	// Block 0x4, offset 0x100
+	0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x02db, 0x105: 0x0359,
+	0x106: 0x03da, 0x107: 0x043b, 0x108: 0x04b9, 0x109: 0x053a, 0x10a: 0x059b, 0x10b: 0x0619,
+	0x10c: 0x069a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313,
+	0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13,
+	0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452,
+	0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112,
+	0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112,
+	0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112,
+	0x130: 0x06fa, 0x131: 0x07ab, 0x132: 0x0829, 0x133: 0x08aa, 0x134: 0x0113, 0x135: 0x0112,
+	0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112,
+	0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112,
+	// Block 0x5, offset 0x140
+	0x140: 0x0a8a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53,
+	0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112,
+	0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x0b0a, 0x151: 0x0b8a,
+	0x152: 0x0c0a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152,
+	0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x0c8a, 0x15d: 0x0012,
+	0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x0d0a, 0x162: 0x0012, 0x163: 0x2052,
+	0x164: 0x0012, 0x165: 0x0d8a, 0x166: 0x0e0a, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652,
+	0x16a: 0x0e8a, 0x16b: 0x0f0a, 0x16c: 0x0f8a, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52,
+	0x170: 0x0012, 0x171: 0x100a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252,
+	0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012,
+	0x17c: 0x0012, 0x17d: 0x108a, 0x17e: 0x0012, 0x17f: 0x0012,
+	// Block 0x6, offset 0x180
+	0x180: 0x3552, 0x181: 0x0012, 0x182: 0x110a, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012,
+	0x186: 0x0012, 0x187: 0x118a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52,
+	0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012,
+	0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012,
+	0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x120a,
+	0x19e: 0x128a, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012,
+	0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012,
+	0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012,
+	0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015,
+	0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014,
+	0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x130d,
+	0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024,
+	0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024,
+	0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024,
+	0x1d8: 0x0034, 0x1d9: 0x0034, 0x1da: 0x0034, 0x1db: 0x0024, 0x1dc: 0x0034, 0x1dd: 0x0034,
+	0x1de: 0x0034, 0x1df: 0x0034, 0x1e0: 0x0034, 0x1e1: 0x0034, 0x1e2: 0x0034, 0x1e3: 0x0024,
+	0x1e4: 0x0024, 0x1e5: 0x0024, 0x1e6: 0x0024, 0x1e7: 0x0024, 0x1e8: 0x0024, 0x1e9: 0x0024,
+	0x1ea: 0x0024, 0x1eb: 0x0024, 0x1ec: 0x0024, 0x1ed: 0x0024, 0x1ee: 0x0024, 0x1ef: 0x0024,
+	0x1f0: 0x0113, 0x1f1: 0x0112, 0x1f2: 0x0113, 0x1f3: 0x0112, 0x1f4: 0x0014, 0x1f5: 0x0004,
+	0x1f6: 0x0113, 0x1f7: 0x0112, 0x1fa: 0x0015, 0x1fb: 0x4d52,
+	0x1fc: 0x5052, 0x1fd: 0x5052, 0x1ff: 0x5353,
+	// Block 0x8, offset 0x200
+	0x204: 0x0004, 0x205: 0x0004,
+	0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513,
+	0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x138a, 0x211: 0x2013,
+	0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013,
+	0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013,
+	0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53,
+	0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53,
+	0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512,
+	0x230: 0x14ca, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012,
+	0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012,
+	0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012,
+	// Block 0x9, offset 0x240
+	0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x160a, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52,
+	0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52,
+	0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x168a, 0x251: 0x170a,
+	0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x178a, 0x256: 0x180a, 0x257: 0x1812,
+	0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112,
+	0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112,
+	0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112,
+	0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112,
+	0x270: 0x188a, 0x271: 0x190a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x198a,
+	0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112,
+	0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053,
+	// Block 0xa, offset 0x280
+	0x280: 0x6852, 0x281: 0x6852, 0x282: 0x6852, 0x283: 0x6852, 0x284: 0x6852, 0x285: 0x6852,
+	0x286: 0x6852, 0x287: 0x1a0a, 0x288: 0x0012,
+	0x291: 0x0034,
+	0x292: 0x0024, 0x293: 0x0024, 0x294: 0x0024, 0x295: 0x0024, 0x296: 0x0034, 0x297: 0x0024,
+	0x298: 0x0024, 0x299: 0x0024, 0x29a: 0x0034, 0x29b: 0x0034, 0x29c: 0x0024, 0x29d: 0x0024,
+	0x29e: 0x0024, 0x29f: 0x0024, 0x2a0: 0x0024, 0x2a1: 0x0024, 0x2a2: 0x0034, 0x2a3: 0x0034,
+	0x2a4: 0x0034, 0x2a5: 0x0034, 0x2a6: 0x0034, 0x2a7: 0x0034, 0x2a8: 0x0024, 0x2a9: 0x0024,
+	0x2aa: 0x0034, 0x2ab: 0x0024, 0x2ac: 0x0024, 0x2ad: 0x0034, 0x2ae: 0x0034, 0x2af: 0x0024,
+	0x2b0: 0x0034, 0x2b1: 0x0034, 0x2b2: 0x0034, 0x2b3: 0x0034, 0x2b4: 0x0034, 0x2b5: 0x0034,
+	0x2b6: 0x0034, 0x2b7: 0x0034, 0x2b8: 0x0034, 0x2b9: 0x0034, 0x2ba: 0x0034, 0x2bb: 0x0034,
+	0x2bc: 0x0034, 0x2bd: 0x0034, 0x2bf: 0x0034,
+	// Block 0xb, offset 0x2c0
+	0x2c0: 0x7053, 0x2c1: 0x7053, 0x2c2: 0x7053, 0x2c3: 0x7053, 0x2c4: 0x7053, 0x2c5: 0x7053,
+	0x2c7: 0x7053,
+	0x2cd: 0x7053, 0x2d0: 0x1aea, 0x2d1: 0x1b6a,
+	0x2d2: 0x1bea, 0x2d3: 0x1c6a, 0x2d4: 0x1cea, 0x2d5: 0x1d6a, 0x2d6: 0x1dea, 0x2d7: 0x1e6a,
+	0x2d8: 0x1eea, 0x2d9: 0x1f6a, 0x2da: 0x1fea, 0x2db: 0x206a, 0x2dc: 0x20ea, 0x2dd: 0x216a,
+	0x2de: 0x21ea, 0x2df: 0x226a, 0x2e0: 0x22ea, 0x2e1: 0x236a, 0x2e2: 0x23ea, 0x2e3: 0x246a,
+	0x2e4: 0x24ea, 0x2e5: 0x256a, 0x2e6: 0x25ea, 0x2e7: 0x266a, 0x2e8: 0x26ea, 0x2e9: 0x276a,
+	0x2ea: 0x27ea, 0x2eb: 0x286a, 0x2ec: 0x28ea, 0x2ed: 0x296a, 0x2ee: 0x29ea, 0x2ef: 0x2a6a,
+	0x2f0: 0x2aea, 0x2f1: 0x2b6a, 0x2f2: 0x2bea, 0x2f3: 0x2c6a, 0x2f4: 0x2cea, 0x2f5: 0x2d6a,
+	0x2f6: 0x2dea, 0x2f7: 0x2e6a, 0x2f8: 0x2eea, 0x2f9: 0x2f6a, 0x2fa: 0x2fea,
+	0x2fc: 0x0014, 0x2fd: 0x306a, 0x2fe: 0x30ea, 0x2ff: 0x316a,
+	// Block 0xc, offset 0x300
+	0x300: 0x0812, 0x301: 0x0812, 0x302: 0x0812, 0x303: 0x0812, 0x304: 0x0812, 0x305: 0x0812,
+	0x308: 0x0813, 0x309: 0x0813, 0x30a: 0x0813, 0x30b: 0x0813,
+	0x30c: 0x0813, 0x30d: 0x0813, 0x310: 0x3b1a, 0x311: 0x0812,
+	0x312: 0x3bfa, 0x313: 0x0812, 0x314: 0x3d3a, 0x315: 0x0812, 0x316: 0x3e7a, 0x317: 0x0812,
+	0x319: 0x0813, 0x31b: 0x0813, 0x31d: 0x0813,
+	0x31f: 0x0813, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0x0812, 0x323: 0x0812,
+	0x324: 0x0812, 0x325: 0x0812, 0x326: 0x0812, 0x327: 0x0812, 0x328: 0x0813, 0x329: 0x0813,
+	0x32a: 0x0813, 0x32b: 0x0813, 0x32c: 0x0813, 0x32d: 0x0813, 0x32e: 0x0813, 0x32f: 0x0813,
+	0x330: 0x9252, 0x331: 0x9252, 0x332: 0x9552, 0x333: 0x9552, 0x334: 0x9852, 0x335: 0x9852,
+	0x336: 0x9b52, 0x337: 0x9b52, 0x338: 0x9e52, 0x339: 0x9e52, 0x33a: 0xa152, 0x33b: 0xa152,
+	0x33c: 0x4d52, 0x33d: 0x4d52,
+	// Block 0xd, offset 0x340
+	0x340: 0x3fba, 0x341: 0x40aa, 0x342: 0x419a, 0x343: 0x428a, 0x344: 0x437a, 0x345: 0x446a,
+	0x346: 0x455a, 0x347: 0x464a, 0x348: 0x4739, 0x349: 0x4829, 0x34a: 0x4919, 0x34b: 0x4a09,
+	0x34c: 0x4af9, 0x34d: 0x4be9, 0x34e: 0x4cd9, 0x34f: 0x4dc9, 0x350: 0x4eba, 0x351: 0x4faa,
+	0x352: 0x509a, 0x353: 0x518a, 0x354: 0x527a, 0x355: 0x536a, 0x356: 0x545a, 0x357: 0x554a,
+	0x358: 0x5639, 0x359: 0x5729, 0x35a: 0x5819, 0x35b: 0x5909, 0x35c: 0x59f9, 0x35d: 0x5ae9,
+	0x35e: 0x5bd9, 0x35f: 0x5cc9, 0x360: 0x5dba, 0x361: 0x5eaa, 0x362: 0x5f9a, 0x363: 0x608a,
+	0x364: 0x617a, 0x365: 0x626a, 0x366: 0x635a, 0x367: 0x644a, 0x368: 0x6539, 0x369: 0x6629,
+	0x36a: 0x6719, 0x36b: 0x6809, 0x36c: 0x68f9, 0x36d: 0x69e9, 0x36e: 0x6ad9, 0x36f: 0x6bc9,
+	0x370: 0x0812, 0x371: 0x0812, 0x372: 0x6cba, 0x373: 0x6dca, 0x374: 0x6e9a,
+	0x376: 0x6f7a, 0x377: 0x705a, 0x378: 0x0813, 0x379: 0x0813, 0x37a: 0x9253, 0x37b: 0x9253,
+	0x37c: 0x7199, 0x37d: 0x0004, 0x37e: 0x726a, 0x37f: 0x0004,
+	// Block 0xe, offset 0x380
+	0x380: 0x0004, 0x381: 0x0004, 0x382: 0x72ea, 0x383: 0x73fa, 0x384: 0x74ca,
+	0x386: 0x75aa, 0x387: 0x768a, 0x388: 0x9553, 0x389: 0x9553, 0x38a: 0x9853, 0x38b: 0x9853,
+	0x38c: 0x77c9, 0x38d: 0x0004, 0x38e: 0x0004, 0x38f: 0x0004, 0x390: 0x0812, 0x391: 0x0812,
+	0x392: 0x789a, 0x393: 0x79da, 0x396: 0x7b1a, 0x397: 0x7bfa,
+	0x398: 0x0813, 0x399: 0x0813, 0x39a: 0x9b53, 0x39b: 0x9b53, 0x39d: 0x0004,
+	0x39e: 0x0004, 0x39f: 0x0004, 0x3a0: 0x0812, 0x3a1: 0x0812, 0x3a2: 0x7d3a, 0x3a3: 0x7e7a,
+	0x3a4: 0x7fba, 0x3a5: 0x0912, 0x3a6: 0x809a, 0x3a7: 0x817a, 0x3a8: 0x0813, 0x3a9: 0x0813,
+	0x3aa: 0xa153, 0x3ab: 0xa153, 0x3ac: 0x0913, 0x3ad: 0x0004, 0x3ae: 0x0004, 0x3af: 0x0004,
+	0x3b2: 0x82ba, 0x3b3: 0x83ca, 0x3b4: 0x849a,
+	0x3b6: 0x857a, 0x3b7: 0x865a, 0x3b8: 0x9e53, 0x3b9: 0x9e53, 0x3ba: 0x4d53, 0x3bb: 0x4d53,
+	0x3bc: 0x8799, 0x3bd: 0x0004, 0x3be: 0x0004,
+	// Block 0xf, offset 0x3c0
+	0x3c2: 0x0013,
+	0x3c7: 0x0013, 0x3ca: 0x0012, 0x3cb: 0x0013,
+	0x3cc: 0x0013, 0x3cd: 0x0013, 0x3ce: 0x0012, 0x3cf: 0x0012, 0x3d0: 0x0013, 0x3d1: 0x0013,
+	0x3d2: 0x0013, 0x3d3: 0x0012, 0x3d5: 0x0013,
+	0x3d9: 0x0013, 0x3da: 0x0013, 0x3db: 0x0013, 0x3dc: 0x0013, 0x3dd: 0x0013,
+	0x3e4: 0x0013, 0x3e6: 0x886b, 0x3e8: 0x0013,
+	0x3ea: 0x88cb, 0x3eb: 0x890b, 0x3ec: 0x0013, 0x3ed: 0x0013, 0x3ef: 0x0012,
+	0x3f0: 0x0013, 0x3f1: 0x0013, 0x3f2: 0xa453, 0x3f3: 0x0013, 0x3f4: 0x0012, 0x3f5: 0x0010,
+	0x3f6: 0x0010, 0x3f7: 0x0010, 0x3f8: 0x0010, 0x3f9: 0x0012,
+	0x3fc: 0x0012, 0x3fd: 0x0012, 0x3fe: 0x0013, 0x3ff: 0x0013,
+	// Block 0x10, offset 0x400
+	0x400: 0x1a13, 0x401: 0x1a13, 0x402: 0x1e13, 0x403: 0x1e13, 0x404: 0x1a13, 0x405: 0x1a13,
+	0x406: 0x2613, 0x407: 0x2613, 0x408: 0x2a13, 0x409: 0x2a13, 0x40a: 0x2e13, 0x40b: 0x2e13,
+	0x40c: 0x2a13, 0x40d: 0x2a13, 0x40e: 0x2613, 0x40f: 0x2613, 0x410: 0xa752, 0x411: 0xa752,
+	0x412: 0xaa52, 0x413: 0xaa52, 0x414: 0xad52, 0x415: 0xad52, 0x416: 0xaa52, 0x417: 0xaa52,
+	0x418: 0xa752, 0x419: 0xa752, 0x41a: 0x1a12, 0x41b: 0x1a12, 0x41c: 0x1e12, 0x41d: 0x1e12,
+	0x41e: 0x1a12, 0x41f: 0x1a12, 0x420: 0x2612, 0x421: 0x2612, 0x422: 0x2a12, 0x423: 0x2a12,
+	0x424: 0x2e12, 0x425: 0x2e12, 0x426: 0x2a12, 0x427: 0x2a12, 0x428: 0x2612, 0x429: 0x2612,
+	// Block 0x11, offset 0x440
+	0x440: 0x6552, 0x441: 0x6552, 0x442: 0x6552, 0x443: 0x6552, 0x444: 0x6552, 0x445: 0x6552,
+	0x446: 0x6552, 0x447: 0x6552, 0x448: 0x6552, 0x449: 0x6552, 0x44a: 0x6552, 0x44b: 0x6552,
+	0x44c: 0x6552, 0x44d: 0x6552, 0x44e: 0x6552, 0x44f: 0x6552, 0x450: 0xb052, 0x451: 0xb052,
+	0x452: 0xb052, 0x453: 0xb052, 0x454: 0xb052, 0x455: 0xb052, 0x456: 0xb052, 0x457: 0xb052,
+	0x458: 0xb052, 0x459: 0xb052, 0x45a: 0xb052, 0x45b: 0xb052, 0x45c: 0xb052, 0x45d: 0xb052,
+	0x45e: 0xb052, 0x460: 0x0113, 0x461: 0x0112, 0x462: 0x896b, 0x463: 0x8b53,
+	0x464: 0x89cb, 0x465: 0x8a2a, 0x466: 0x8a8a, 0x467: 0x0f13, 0x468: 0x0f12, 0x469: 0x0313,
+	0x46a: 0x0312, 0x46b: 0x0713, 0x46c: 0x0712, 0x46d: 0x8aeb, 0x46e: 0x8b4b, 0x46f: 0x8bab,
+	0x470: 0x8c0b, 0x471: 0x0012, 0x472: 0x0113, 0x473: 0x0112, 0x474: 0x0012, 0x475: 0x0313,
+	0x476: 0x0312, 0x477: 0x0012, 0x478: 0x0012, 0x479: 0x0012, 0x47a: 0x0012, 0x47b: 0x0012,
+	0x47c: 0x0015, 0x47d: 0x0015, 0x47e: 0x8c6b, 0x47f: 0x8ccb,
+	// Block 0x12, offset 0x480
+	0x480: 0x0113, 0x481: 0x0112, 0x482: 0x0113, 0x483: 0x0112, 0x484: 0x0113, 0x485: 0x0112,
+	0x486: 0x0113, 0x487: 0x0112, 0x488: 0x0014, 0x489: 0x0014, 0x48a: 0x0014, 0x48b: 0x0713,
+	0x48c: 0x0712, 0x48d: 0x8d2b, 0x48e: 0x0012, 0x48f: 0x0010, 0x490: 0x0113, 0x491: 0x0112,
+	0x492: 0x0113, 0x493: 0x0112, 0x494: 0x6552, 0x495: 0x0012, 0x496: 0x0113, 0x497: 0x0112,
+	0x498: 0x0113, 0x499: 0x0112, 0x49a: 0x0113, 0x49b: 0x0112, 0x49c: 0x0113, 0x49d: 0x0112,
+	0x49e: 0x0113, 0x49f: 0x0112, 0x4a0: 0x0113, 0x4a1: 0x0112, 0x4a2: 0x0113, 0x4a3: 0x0112,
+	0x4a4: 0x0113, 0x4a5: 0x0112, 0x4a6: 0x0113, 0x4a7: 0x0112, 0x4a8: 0x0113, 0x4a9: 0x0112,
+	0x4aa: 0x8d8b, 0x4ab: 0x8deb, 0x4ac: 0x8e4b, 0x4ad: 0x8eab, 0x4ae: 0x8f0b, 0x4af: 0x0012,
+	0x4b0: 0x8f6b, 0x4b1: 0x8fcb, 0x4b2: 0x902b, 0x4b3: 0xb353, 0x4b4: 0x0113, 0x4b5: 0x0112,
+	0x4b6: 0x0113, 0x4b7: 0x0112, 0x4b8: 0x0113, 0x4b9: 0x0112, 0x4ba: 0x0113, 0x4bb: 0x0112,
+	0x4bc: 0x0113, 0x4bd: 0x0112, 0x4be: 0x0113, 0x4bf: 0x0112,
+	// Block 0x13, offset 0x4c0
+	0x4c0: 0x90ea, 0x4c1: 0x916a, 0x4c2: 0x91ea, 0x4c3: 0x926a, 0x4c4: 0x931a, 0x4c5: 0x93ca,
+	0x4c6: 0x944a,
+	0x4d3: 0x94ca, 0x4d4: 0x95aa, 0x4d5: 0x968a, 0x4d6: 0x976a, 0x4d7: 0x984a,
+	0x4dd: 0x0010,
+	0x4de: 0x0034, 0x4df: 0x0010, 0x4e0: 0x0010, 0x4e1: 0x0010, 0x4e2: 0x0010, 0x4e3: 0x0010,
+	0x4e4: 0x0010, 0x4e5: 0x0010, 0x4e6: 0x0010, 0x4e7: 0x0010, 0x4e8: 0x0010,
+	0x4ea: 0x0010, 0x4eb: 0x0010, 0x4ec: 0x0010, 0x4ed: 0x0010, 0x4ee: 0x0010, 0x4ef: 0x0010,
+	0x4f0: 0x0010, 0x4f1: 0x0010, 0x4f2: 0x0010, 0x4f3: 0x0010, 0x4f4: 0x0010, 0x4f5: 0x0010,
+	0x4f6: 0x0010, 0x4f8: 0x0010, 0x4f9: 0x0010, 0x4fa: 0x0010, 0x4fb: 0x0010,
+	0x4fc: 0x0010, 0x4fe: 0x0010,
+	// Block 0x14, offset 0x500
+	0x500: 0x2213, 0x501: 0x2213, 0x502: 0x2613, 0x503: 0x2613, 0x504: 0x2213, 0x505: 0x2213,
+	0x506: 0x2e13, 0x507: 0x2e13, 0x508: 0x2213, 0x509: 0x2213, 0x50a: 0x2613, 0x50b: 0x2613,
+	0x50c: 0x2213, 0x50d: 0x2213, 0x50e: 0x3e13, 0x50f: 0x3e13, 0x510: 0x2213, 0x511: 0x2213,
+	0x512: 0x2613, 0x513: 0x2613, 0x514: 0x2213, 0x515: 0x2213, 0x516: 0x2e13, 0x517: 0x2e13,
+	0x518: 0x2213, 0x519: 0x2213, 0x51a: 0x2613, 0x51b: 0x2613, 0x51c: 0x2213, 0x51d: 0x2213,
+	0x51e: 0xbc53, 0x51f: 0xbc53, 0x520: 0xbf53, 0x521: 0xbf53, 0x522: 0x2212, 0x523: 0x2212,
+	0x524: 0x2612, 0x525: 0x2612, 0x526: 0x2212, 0x527: 0x2212, 0x528: 0x2e12, 0x529: 0x2e12,
+	0x52a: 0x2212, 0x52b: 0x2212, 0x52c: 0x2612, 0x52d: 0x2612, 0x52e: 0x2212, 0x52f: 0x2212,
+	0x530: 0x3e12, 0x531: 0x3e12, 0x532: 0x2212, 0x533: 0x2212, 0x534: 0x2612, 0x535: 0x2612,
+	0x536: 0x2212, 0x537: 0x2212, 0x538: 0x2e12, 0x539: 0x2e12, 0x53a: 0x2212, 0x53b: 0x2212,
+	0x53c: 0x2612, 0x53d: 0x2612, 0x53e: 0x2212, 0x53f: 0x2212,
+	// Block 0x15, offset 0x540
+	0x542: 0x0010,
+	0x547: 0x0010, 0x549: 0x0010, 0x54b: 0x0010,
+	0x54d: 0x0010, 0x54e: 0x0010, 0x54f: 0x0010, 0x551: 0x0010,
+	0x552: 0x0010, 0x554: 0x0010, 0x557: 0x0010,
+	0x559: 0x0010, 0x55b: 0x0010, 0x55d: 0x0010,
+	0x55f: 0x0010, 0x561: 0x0010, 0x562: 0x0010,
+	0x564: 0x0010, 0x567: 0x0010, 0x568: 0x0010, 0x569: 0x0010,
+	0x56a: 0x0010, 0x56c: 0x0010, 0x56d: 0x0010, 0x56e: 0x0010, 0x56f: 0x0010,
+	0x570: 0x0010, 0x571: 0x0010, 0x572: 0x0010, 0x574: 0x0010, 0x575: 0x0010,
+	0x576: 0x0010, 0x577: 0x0010, 0x579: 0x0010, 0x57a: 0x0010, 0x57b: 0x0010,
+	0x57c: 0x0010, 0x57e: 0x0010,
+}
+
+// caseIndex: 25 blocks, 1600 entries, 3200 bytes
+// Block 0 is the zero block.
+var caseIndex = [1600]uint16{
+	// Block 0x0, offset 0x0
+	// Block 0x1, offset 0x40
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc2: 0x14, 0xc3: 0x15, 0xc4: 0x16, 0xc5: 0x17, 0xc6: 0x01, 0xc7: 0x02,
+	0xc8: 0x18, 0xc9: 0x03, 0xca: 0x04, 0xcb: 0x19, 0xcc: 0x1a, 0xcd: 0x05, 0xce: 0x06, 0xcf: 0x07,
+	0xd0: 0x1b, 0xd1: 0x1c, 0xd2: 0x1d, 0xd3: 0x1e, 0xd4: 0x1f, 0xd5: 0x20, 0xd6: 0x08, 0xd7: 0x21,
+	0xd8: 0x22, 0xd9: 0x23, 0xda: 0x24, 0xdb: 0x25, 0xdc: 0x26, 0xdd: 0x27, 0xde: 0x28, 0xdf: 0x29,
+	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
+	0xea: 0x06, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x08, 0xef: 0x09,
+	0xf0: 0x14, 0xf3: 0x16,
+	// Block 0x4, offset 0x100
+	0x120: 0x2a, 0x121: 0x2b, 0x122: 0x2c, 0x123: 0x2d, 0x124: 0x2e, 0x125: 0x2f, 0x126: 0x30, 0x127: 0x31,
+	0x128: 0x32, 0x129: 0x33, 0x12a: 0x34, 0x12b: 0x35, 0x12c: 0x36, 0x12d: 0x37, 0x12e: 0x38, 0x12f: 0x39,
+	0x130: 0x3a, 0x131: 0x3b, 0x132: 0x3c, 0x133: 0x3d, 0x134: 0x3e, 0x135: 0x3f, 0x136: 0x40, 0x137: 0x41,
+	0x138: 0x42, 0x139: 0x43, 0x13a: 0x44, 0x13b: 0x45, 0x13c: 0x46, 0x13d: 0x47, 0x13e: 0x48, 0x13f: 0x49,
+	// Block 0x5, offset 0x140
+	0x140: 0x4a, 0x141: 0x4b, 0x142: 0x4c, 0x143: 0x09, 0x144: 0x24, 0x145: 0x24, 0x146: 0x24, 0x147: 0x24,
+	0x148: 0x24, 0x149: 0x4d, 0x14a: 0x4e, 0x14b: 0x4f, 0x14c: 0x50, 0x14d: 0x51, 0x14e: 0x52, 0x14f: 0x53,
+	0x150: 0x54, 0x151: 0x24, 0x152: 0x24, 0x153: 0x24, 0x154: 0x24, 0x155: 0x24, 0x156: 0x24, 0x157: 0x24,
+	0x158: 0x24, 0x159: 0x55, 0x15a: 0x56, 0x15b: 0x57, 0x15c: 0x58, 0x15d: 0x59, 0x15e: 0x5a, 0x15f: 0x5b,
+	0x160: 0x5c, 0x161: 0x5d, 0x162: 0x5e, 0x163: 0x5f, 0x164: 0x60, 0x165: 0x61, 0x167: 0x62,
+	0x168: 0x63, 0x169: 0x64, 0x16a: 0x65, 0x16c: 0x66, 0x16d: 0x67, 0x16e: 0x68, 0x16f: 0x69,
+	0x170: 0x6a, 0x171: 0x6b, 0x172: 0x6c, 0x173: 0x6d, 0x174: 0x6e, 0x175: 0x6f, 0x176: 0x70, 0x177: 0x71,
+	0x178: 0x72, 0x179: 0x72, 0x17a: 0x73, 0x17b: 0x72, 0x17c: 0x74, 0x17d: 0x0a, 0x17e: 0x0b, 0x17f: 0x0c,
+	// Block 0x6, offset 0x180
+	0x180: 0x75, 0x181: 0x76, 0x182: 0x77, 0x183: 0x78, 0x184: 0x0d, 0x185: 0x79, 0x186: 0x7a,
+	0x192: 0x7b, 0x193: 0x0e,
+	0x1b0: 0x7c, 0x1b1: 0x0f, 0x1b2: 0x72, 0x1b3: 0x7d, 0x1b4: 0x7e, 0x1b5: 0x7f, 0x1b6: 0x80, 0x1b7: 0x81,
+	0x1b8: 0x82,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x83, 0x1c2: 0x84, 0x1c3: 0x85, 0x1c4: 0x86, 0x1c5: 0x24, 0x1c6: 0x87,
+	// Block 0x8, offset 0x200
+	0x200: 0x88, 0x201: 0x24, 0x202: 0x24, 0x203: 0x24, 0x204: 0x24, 0x205: 0x24, 0x206: 0x24, 0x207: 0x24,
+	0x208: 0x24, 0x209: 0x24, 0x20a: 0x24, 0x20b: 0x24, 0x20c: 0x24, 0x20d: 0x24, 0x20e: 0x24, 0x20f: 0x24,
+	0x210: 0x24, 0x211: 0x24, 0x212: 0x89, 0x213: 0x8a, 0x214: 0x24, 0x215: 0x24, 0x216: 0x24, 0x217: 0x24,
+	0x218: 0x8b, 0x219: 0x8c, 0x21a: 0x8d, 0x21b: 0x8e, 0x21c: 0x8f, 0x21d: 0x90, 0x21e: 0x10, 0x21f: 0x91,
+	0x220: 0x92, 0x221: 0x93, 0x222: 0x24, 0x223: 0x94, 0x224: 0x95, 0x225: 0x96, 0x226: 0x97, 0x227: 0x98,
+	0x228: 0x99, 0x229: 0x9a, 0x22a: 0x9b, 0x22b: 0x9c, 0x22c: 0x9d, 0x22d: 0x9e, 0x22e: 0x9f, 0x22f: 0xa0,
+	0x230: 0x24, 0x231: 0x24, 0x232: 0x24, 0x233: 0x24, 0x234: 0x24, 0x235: 0x24, 0x236: 0x24, 0x237: 0x24,
+	0x238: 0x24, 0x239: 0x24, 0x23a: 0x24, 0x23b: 0x24, 0x23c: 0x24, 0x23d: 0x24, 0x23e: 0x24, 0x23f: 0x24,
+	// Block 0x9, offset 0x240
+	0x240: 0x24, 0x241: 0x24, 0x242: 0x24, 0x243: 0x24, 0x244: 0x24, 0x245: 0x24, 0x246: 0x24, 0x247: 0x24,
+	0x248: 0x24, 0x249: 0x24, 0x24a: 0x24, 0x24b: 0x24, 0x24c: 0x24, 0x24d: 0x24, 0x24e: 0x24, 0x24f: 0x24,
+	0x250: 0x24, 0x251: 0x24, 0x252: 0x24, 0x253: 0x24, 0x254: 0x24, 0x255: 0x24, 0x256: 0x24, 0x257: 0x24,
+	0x258: 0x24, 0x259: 0x24, 0x25a: 0x24, 0x25b: 0x24, 0x25c: 0x24, 0x25d: 0x24, 0x25e: 0x24, 0x25f: 0x24,
+	0x260: 0x24, 0x261: 0x24, 0x262: 0x24, 0x263: 0x24, 0x264: 0x24, 0x265: 0x24, 0x266: 0x24, 0x267: 0x24,
+	0x268: 0x24, 0x269: 0x24, 0x26a: 0x24, 0x26b: 0x24, 0x26c: 0x24, 0x26d: 0x24, 0x26e: 0x24, 0x26f: 0x24,
+	0x270: 0x24, 0x271: 0x24, 0x272: 0x24, 0x273: 0x24, 0x274: 0x24, 0x275: 0x24, 0x276: 0x24, 0x277: 0x24,
+	0x278: 0x24, 0x279: 0x24, 0x27a: 0x24, 0x27b: 0x24, 0x27c: 0x24, 0x27d: 0x24, 0x27e: 0x24, 0x27f: 0x24,
+	// Block 0xa, offset 0x280
+	0x280: 0x24, 0x281: 0x24, 0x282: 0x24, 0x283: 0x24, 0x284: 0x24, 0x285: 0x24, 0x286: 0x24, 0x287: 0x24,
+	0x288: 0x24, 0x289: 0x24, 0x28a: 0x24, 0x28b: 0x24, 0x28c: 0x24, 0x28d: 0x24, 0x28e: 0x24, 0x28f: 0x24,
+	0x290: 0x24, 0x291: 0x24, 0x292: 0x24, 0x293: 0x24, 0x294: 0x24, 0x295: 0x24, 0x296: 0x24, 0x297: 0x24,
+	0x298: 0x24, 0x299: 0x24, 0x29a: 0x24, 0x29b: 0x24, 0x29c: 0x24, 0x29d: 0x24, 0x29e: 0xa1, 0x29f: 0xa2,
+	// Block 0xb, offset 0x2c0
+	0x2ec: 0x11, 0x2ed: 0xa3, 0x2ee: 0xa4, 0x2ef: 0xa5,
+	0x2f0: 0x24, 0x2f1: 0x24, 0x2f2: 0x24, 0x2f3: 0x24, 0x2f4: 0xa6, 0x2f5: 0xa7, 0x2f6: 0xa8, 0x2f7: 0xa9,
+	0x2f8: 0xaa, 0x2f9: 0xab, 0x2fa: 0x24, 0x2fb: 0xac, 0x2fc: 0xad, 0x2fd: 0xae, 0x2fe: 0xaf, 0x2ff: 0xb0,
+	// Block 0xc, offset 0x300
+	0x300: 0xb1, 0x301: 0xb2, 0x302: 0x24, 0x303: 0xb3, 0x305: 0xb4, 0x307: 0xb5,
+	0x30a: 0xb6, 0x30b: 0xb7, 0x30c: 0xb8, 0x30d: 0xb9, 0x30e: 0xba, 0x30f: 0xbb,
+	0x310: 0xbc, 0x311: 0xbd, 0x312: 0xbe, 0x313: 0xbf, 0x314: 0xc0, 0x315: 0xc1,
+	0x318: 0x24, 0x319: 0x24, 0x31a: 0x24, 0x31b: 0x24, 0x31c: 0xc2, 0x31d: 0xc3,
+	0x320: 0xc4, 0x321: 0xc5, 0x322: 0xc6, 0x323: 0xc7, 0x324: 0xc8, 0x326: 0xc9,
+	0x328: 0xca, 0x329: 0xcb, 0x32a: 0xcc, 0x32b: 0xcd, 0x32c: 0x5f, 0x32d: 0xce, 0x32e: 0xcf,
+	0x330: 0x24, 0x331: 0xd0, 0x332: 0xd1, 0x333: 0xd2, 0x334: 0xd3,
+	0x33c: 0xd4, 0x33d: 0xd5, 0x33f: 0xd6,
+	// Block 0xd, offset 0x340
+	0x340: 0xd7, 0x341: 0xd8, 0x342: 0xd9, 0x343: 0xda, 0x344: 0xdb, 0x345: 0xdc, 0x346: 0xdd, 0x347: 0xde,
+	0x348: 0xdf, 0x34a: 0xe0, 0x34b: 0xe1, 0x34c: 0xe2, 0x34d: 0xe3,
+	0x350: 0xe4, 0x351: 0xe5, 0x352: 0xe6, 0x353: 0xe7, 0x356: 0xe8, 0x357: 0xe9,
+	0x358: 0xea, 0x359: 0xeb, 0x35a: 0xec, 0x35b: 0xed, 0x35c: 0xee,
+	0x360: 0xef, 0x362: 0xf0, 0x363: 0xf1, 0x366: 0xf2, 0x367: 0xf3,
+	0x368: 0xf4, 0x369: 0xf5, 0x36a: 0xf6, 0x36b: 0xf7,
+	0x370: 0xf8, 0x371: 0xf9, 0x372: 0xfa, 0x374: 0xfb, 0x375: 0xfc, 0x376: 0xfd,
+	0x37b: 0xfe,
+	// Block 0xe, offset 0x380
+	0x380: 0x24, 0x381: 0x24, 0x382: 0x24, 0x383: 0x24, 0x384: 0x24, 0x385: 0x24, 0x386: 0x24, 0x387: 0x24,
+	0x388: 0x24, 0x389: 0x24, 0x38a: 0x24, 0x38b: 0x24, 0x38c: 0x24, 0x38d: 0x24, 0x38e: 0xff,
+	0x390: 0x24, 0x391: 0x100, 0x392: 0x24, 0x393: 0x24, 0x394: 0x24, 0x395: 0x101,
+	// Block 0xf, offset 0x3c0
+	0x3c0: 0x24, 0x3c1: 0x24, 0x3c2: 0x24, 0x3c3: 0x24, 0x3c4: 0x24, 0x3c5: 0x24, 0x3c6: 0x24, 0x3c7: 0x24,
+	0x3c8: 0x24, 0x3c9: 0x24, 0x3ca: 0x24, 0x3cb: 0x24, 0x3cc: 0x24, 0x3cd: 0x24, 0x3ce: 0x24, 0x3cf: 0x24,
+	0x3d0: 0x102,
+	// Block 0x10, offset 0x400
+	0x410: 0x24, 0x411: 0x24, 0x412: 0x24, 0x413: 0x24, 0x414: 0x24, 0x415: 0x24, 0x416: 0x24, 0x417: 0x24,
+	0x418: 0x24, 0x419: 0x103,
+	// Block 0x11, offset 0x440
+	0x460: 0x24, 0x461: 0x24, 0x462: 0x24, 0x463: 0x24, 0x464: 0x24, 0x465: 0x24, 0x466: 0x24, 0x467: 0x24,
+	0x468: 0xf7, 0x469: 0x104, 0x46b: 0x105, 0x46c: 0x106, 0x46d: 0x107, 0x46e: 0x108,
+	0x479: 0x109, 0x47c: 0x24, 0x47d: 0x10a, 0x47e: 0x10b, 0x47f: 0x10c,
+	// Block 0x12, offset 0x480
+	0x4b0: 0x24, 0x4b1: 0x10d, 0x4b2: 0x10e,
+	// Block 0x13, offset 0x4c0
+	0x4c5: 0x10f, 0x4c6: 0x110,
+	0x4c9: 0x111,
+	0x4d0: 0x112, 0x4d1: 0x113, 0x4d2: 0x114, 0x4d3: 0x115, 0x4d4: 0x116, 0x4d5: 0x117, 0x4d6: 0x118, 0x4d7: 0x119,
+	0x4d8: 0x11a, 0x4d9: 0x11b, 0x4da: 0x11c, 0x4db: 0x11d, 0x4dc: 0x11e, 0x4dd: 0x11f, 0x4de: 0x120, 0x4df: 0x121,
+	0x4e8: 0x122, 0x4e9: 0x123, 0x4ea: 0x124,
+	// Block 0x14, offset 0x500
+	0x500: 0x125, 0x504: 0x126, 0x505: 0x127,
+	0x50b: 0x128,
+	0x520: 0x24, 0x521: 0x24, 0x522: 0x24, 0x523: 0x129, 0x524: 0x12, 0x525: 0x12a,
+	0x538: 0x12b, 0x539: 0x13, 0x53a: 0x12c,
+	// Block 0x15, offset 0x540
+	0x544: 0x12d, 0x545: 0x12e, 0x546: 0x12f,
+	0x54f: 0x130,
+	// Block 0x16, offset 0x580
+	0x590: 0x0a, 0x591: 0x0b, 0x592: 0x0c, 0x593: 0x0d, 0x594: 0x0e, 0x596: 0x0f,
+	0x59b: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13,
+	// Block 0x17, offset 0x5c0
+	0x5c0: 0x131, 0x5c1: 0x132, 0x5c4: 0x132, 0x5c5: 0x132, 0x5c6: 0x132, 0x5c7: 0x133,
+	// Block 0x18, offset 0x600
+	0x620: 0x15,
+}
+
+// sparseOffsets: 289 entries, 578 bytes
+var sparseOffsets = []uint16{0x0, 0x9, 0xf, 0x18, 0x24, 0x2e, 0x35, 0x38, 0x3c, 0x3f, 0x43, 0x4d, 0x4f, 0x57, 0x5e, 0x63, 0x71, 0x72, 0x80, 0x8f, 0x99, 0x9c, 0xa3, 0xab, 0xae, 0xb0, 0xbf, 0xc5, 0xd3, 0xde, 0xeb, 0xf6, 0x102, 0x10c, 0x118, 0x123, 0x12f, 0x13b, 0x143, 0x14c, 0x156, 0x161, 0x16d, 0x174, 0x17f, 0x184, 0x18c, 0x18f, 0x194, 0x198, 0x19c, 0x1a3, 0x1ac, 0x1b4, 0x1b5, 0x1be, 0x1c5, 0x1cd, 0x1d3, 0x1d8, 0x1dc, 0x1df, 0x1e1, 0x1e4, 0x1e9, 0x1ea, 0x1ec, 0x1ee, 0x1f0, 0x1f7, 0x1fc, 0x200, 0x209, 0x20c, 0x20f, 0x215, 0x216, 0x221, 0x222, 0x223, 0x228, 0x235, 0x23d, 0x245, 0x24e, 0x257, 0x260, 0x265, 0x268, 0x273, 0x281, 0x283, 0x28a, 0x28e, 0x29a, 0x29b, 0x2a6, 0x2ae, 0x2b6, 0x2bc, 0x2bd, 0x2cb, 0x2d0, 0x2d3, 0x2d8, 0x2dc, 0x2e2, 0x2e7, 0x2ea, 0x2ef, 0x2f4, 0x2f5, 0x2fb, 0x2fd, 0x2fe, 0x300, 0x302, 0x305, 0x306, 0x308, 0x30b, 0x311, 0x315, 0x317, 0x31c, 0x323, 0x32b, 0x334, 0x335, 0x33e, 0x342, 0x347, 0x34f, 0x355, 0x35b, 0x365, 0x36a, 0x373, 0x379, 0x380, 0x384, 0x38c, 0x38e, 0x390, 0x393, 0x395, 0x397, 0x398, 0x399, 0x39b, 0x39d, 0x3a3, 0x3a8, 0x3aa, 0x3b1, 0x3b4, 0x3b6, 0x3bc, 0x3c1, 0x3c3, 0x3c4, 0x3c5, 0x3c6, 0x3c8, 0x3ca, 0x3cc, 0x3cf, 0x3d1, 0x3d4, 0x3dc, 0x3df, 0x3e3, 0x3eb, 0x3ed, 0x3ee, 0x3ef, 0x3f1, 0x3f7, 0x3f9, 0x3fa, 0x3fc, 0x3fe, 0x400, 0x40d, 0x40e, 0x40f, 0x413, 0x415, 0x416, 0x417, 0x418, 0x419, 0x41c, 0x41f, 0x425, 0x426, 0x42a, 0x42e, 0x434, 0x437, 0x43e, 0x442, 0x446, 0x44d, 0x456, 0x45c, 0x462, 0x46c, 0x476, 0x478, 0x481, 0x487, 0x48d, 0x493, 0x496, 0x49c, 0x49f, 0x4a8, 0x4a9, 0x4b0, 0x4b4, 0x4b5, 0x4b8, 0x4ba, 0x4c1, 0x4c9, 0x4cf, 0x4d5, 0x4d6, 0x4dc, 0x4df, 0x4e7, 0x4ee, 0x4f8, 0x500, 0x503, 0x504, 0x505, 0x506, 0x508, 0x509, 0x50b, 0x50d, 0x50f, 0x513, 0x514, 0x516, 0x519, 0x51b, 0x51d, 0x51f, 0x524, 0x529, 0x52d, 0x52e, 0x531, 0x535, 0x540, 0x544, 0x54c, 0x551, 0x555, 0x558, 0x55c, 0x55f, 0x562, 0x567, 0x56b, 0x56f, 0x573, 0x577, 0x579, 0x57b, 0x57e, 0x583, 0x586, 0x588, 0x58b, 0x58d, 0x593, 0x59c, 0x5a1, 0x5a2, 0x5a5, 0x5a6, 0x5a7, 0x5a9, 0x5aa, 0x5ab}
+
+// sparseValues: 1451 entries, 5804 bytes
+var sparseValues = [1451]valueRange{
+	// Block 0x0, offset 0x0
+	{value: 0x0004, lo: 0xa8, hi: 0xa8},
+	{value: 0x0012, lo: 0xaa, hi: 0xaa},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0004, lo: 0xaf, hi: 0xaf},
+	{value: 0x0004, lo: 0xb4, hi: 0xb4},
+	{value: 0x001a, lo: 0xb5, hi: 0xb5},
+	{value: 0x0054, lo: 0xb7, hi: 0xb7},
+	{value: 0x0004, lo: 0xb8, hi: 0xb8},
+	{value: 0x0012, lo: 0xba, hi: 0xba},
+	// Block 0x1, offset 0x9
+	{value: 0x2013, lo: 0x80, hi: 0x96},
+	{value: 0x2013, lo: 0x98, hi: 0x9e},
+	{value: 0x009a, lo: 0x9f, hi: 0x9f},
+	{value: 0x2012, lo: 0xa0, hi: 0xb6},
+	{value: 0x2012, lo: 0xb8, hi: 0xbe},
+	{value: 0x0252, lo: 0xbf, hi: 0xbf},
+	// Block 0x2, offset 0xf
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x011b, lo: 0xb0, hi: 0xb0},
+	{value: 0x019a, lo: 0xb1, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xb7},
+	{value: 0x0012, lo: 0xb8, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x0316, lo: 0xbd, hi: 0xbe},
+	{value: 0x0553, lo: 0xbf, hi: 0xbf},
+	// Block 0x3, offset 0x18
+	{value: 0x0552, lo: 0x80, hi: 0x80},
+	{value: 0x0316, lo: 0x81, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0316, lo: 0x85, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x01da, lo: 0x89, hi: 0x89},
+	{value: 0x0117, lo: 0x8a, hi: 0xb7},
+	{value: 0x0253, lo: 0xb8, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x0316, lo: 0xbd, hi: 0xbe},
+	{value: 0x028a, lo: 0xbf, hi: 0xbf},
+	// Block 0x4, offset 0x24
+	{value: 0x0117, lo: 0x80, hi: 0x9f},
+	{value: 0x2f53, lo: 0xa0, hi: 0xa0},
+	{value: 0x0012, lo: 0xa1, hi: 0xa1},
+	{value: 0x0117, lo: 0xa2, hi: 0xb3},
+	{value: 0x0012, lo: 0xb4, hi: 0xb9},
+	{value: 0x090b, lo: 0xba, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x2953, lo: 0xbd, hi: 0xbd},
+	{value: 0x098b, lo: 0xbe, hi: 0xbe},
+	{value: 0x0a0a, lo: 0xbf, hi: 0xbf},
+	// Block 0x5, offset 0x2e
+	{value: 0x0015, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x97},
+	{value: 0x0004, lo: 0x98, hi: 0x9d},
+	{value: 0x0014, lo: 0x9e, hi: 0x9f},
+	{value: 0x0015, lo: 0xa0, hi: 0xa4},
+	{value: 0x0004, lo: 0xa5, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xbf},
+	// Block 0x6, offset 0x35
+	{value: 0x0024, lo: 0x80, hi: 0x94},
+	{value: 0x0034, lo: 0x95, hi: 0xbc},
+	{value: 0x0024, lo: 0xbd, hi: 0xbf},
+	// Block 0x7, offset 0x38
+	{value: 0x6553, lo: 0x80, hi: 0x8f},
+	{value: 0x2013, lo: 0x90, hi: 0x9f},
+	{value: 0x5f53, lo: 0xa0, hi: 0xaf},
+	{value: 0x2012, lo: 0xb0, hi: 0xbf},
+	// Block 0x8, offset 0x3c
+	{value: 0x5f52, lo: 0x80, hi: 0x8f},
+	{value: 0x6552, lo: 0x90, hi: 0x9f},
+	{value: 0x0117, lo: 0xa0, hi: 0xbf},
+	// Block 0x9, offset 0x3f
+	{value: 0x0117, lo: 0x80, hi: 0x81},
+	{value: 0x0024, lo: 0x83, hi: 0x87},
+	{value: 0x0014, lo: 0x88, hi: 0x89},
+	{value: 0x0117, lo: 0x8a, hi: 0xbf},
+	// Block 0xa, offset 0x43
+	{value: 0x0f13, lo: 0x80, hi: 0x80},
+	{value: 0x0316, lo: 0x81, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0316, lo: 0x85, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x0316, lo: 0x89, hi: 0x8a},
+	{value: 0x0716, lo: 0x8b, hi: 0x8c},
+	{value: 0x0316, lo: 0x8d, hi: 0x8e},
+	{value: 0x0f12, lo: 0x8f, hi: 0x8f},
+	{value: 0x0117, lo: 0x90, hi: 0xbf},
+	// Block 0xb, offset 0x4d
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x6553, lo: 0xb1, hi: 0xbf},
+	// Block 0xc, offset 0x4f
+	{value: 0x3013, lo: 0x80, hi: 0x8f},
+	{value: 0x6853, lo: 0x90, hi: 0x96},
+	{value: 0x0014, lo: 0x99, hi: 0x99},
+	{value: 0x0010, lo: 0x9b, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0012, lo: 0xa0, hi: 0xa0},
+	{value: 0x6552, lo: 0xa1, hi: 0xaf},
+	{value: 0x3012, lo: 0xb0, hi: 0xbf},
+	// Block 0xd, offset 0x57
+	{value: 0x0034, lo: 0x81, hi: 0x82},
+	{value: 0x0024, lo: 0x84, hi: 0x84},
+	{value: 0x0034, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0xaa},
+	{value: 0x0010, lo: 0xaf, hi: 0xb3},
+	{value: 0x0054, lo: 0xb4, hi: 0xb4},
+	// Block 0xe, offset 0x5e
+	{value: 0x0014, lo: 0x80, hi: 0x85},
+	{value: 0x0024, lo: 0x90, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x9a},
+	{value: 0x0014, lo: 0x9c, hi: 0x9c},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xf, offset 0x63
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x8a},
+	{value: 0x0034, lo: 0x8b, hi: 0x92},
+	{value: 0x0024, lo: 0x93, hi: 0x94},
+	{value: 0x0034, lo: 0x95, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x9b},
+	{value: 0x0034, lo: 0x9c, hi: 0x9c},
+	{value: 0x0024, lo: 0x9d, hi: 0x9e},
+	{value: 0x0034, lo: 0x9f, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0010, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0034, lo: 0xb0, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xbf},
+	// Block 0x10, offset 0x71
+	{value: 0x0010, lo: 0x80, hi: 0xbf},
+	// Block 0x11, offset 0x72
+	{value: 0x0010, lo: 0x80, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x95},
+	{value: 0x0024, lo: 0x96, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x0024, lo: 0x9f, hi: 0xa2},
+	{value: 0x0034, lo: 0xa3, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa8},
+	{value: 0x0034, lo: 0xaa, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xbc},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x12, offset 0x80
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0034, lo: 0x91, hi: 0x91},
+	{value: 0x0010, lo: 0x92, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	{value: 0x0034, lo: 0xb1, hi: 0xb1},
+	{value: 0x0024, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0024, lo: 0xb5, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb9},
+	{value: 0x0024, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0024, lo: 0xbd, hi: 0xbd},
+	{value: 0x0034, lo: 0xbe, hi: 0xbe},
+	{value: 0x0024, lo: 0xbf, hi: 0xbf},
+	// Block 0x13, offset 0x8f
+	{value: 0x0024, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0024, lo: 0x83, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0024, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0024, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x88, hi: 0x88},
+	{value: 0x0024, lo: 0x89, hi: 0x8a},
+	{value: 0x0010, lo: 0x8d, hi: 0xbf},
+	// Block 0x14, offset 0x99
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0014, lo: 0xa6, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	// Block 0x15, offset 0x9c
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xb1},
+	{value: 0x0034, lo: 0xb2, hi: 0xb2},
+	{value: 0x0024, lo: 0xb3, hi: 0xb3},
+	{value: 0x0014, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	// Block 0x16, offset 0xa3
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0024, lo: 0x96, hi: 0x99},
+	{value: 0x0014, lo: 0x9a, hi: 0x9a},
+	{value: 0x0024, lo: 0x9b, hi: 0xa3},
+	{value: 0x0014, lo: 0xa4, hi: 0xa4},
+	{value: 0x0024, lo: 0xa5, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa8},
+	{value: 0x0024, lo: 0xa9, hi: 0xad},
+	// Block 0x17, offset 0xab
+	{value: 0x0010, lo: 0x80, hi: 0x98},
+	{value: 0x0034, lo: 0x99, hi: 0x9b},
+	{value: 0x0010, lo: 0xa0, hi: 0xaa},
+	// Block 0x18, offset 0xae
+	{value: 0x0010, lo: 0xa0, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbd},
+	// Block 0x19, offset 0xb0
+	{value: 0x0034, lo: 0x93, hi: 0x93},
+	{value: 0x0024, lo: 0x94, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa2},
+	{value: 0x0034, lo: 0xa3, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xa9},
+	{value: 0x0024, lo: 0xaa, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xb2},
+	{value: 0x0024, lo: 0xb3, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	{value: 0x0024, lo: 0xb7, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0024, lo: 0xbb, hi: 0xbf},
+	// Block 0x1a, offset 0xbf
+	{value: 0x0014, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x1b, offset 0xc5
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x88},
+	{value: 0x0010, lo: 0x89, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0024, lo: 0x91, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x92},
+	{value: 0x0024, lo: 0x93, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x97},
+	{value: 0x0010, lo: 0x98, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xbf},
+	// Block 0x1c, offset 0xd3
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb2},
+	{value: 0x0010, lo: 0xb6, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x1d, offset 0xde
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9c, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xb1},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	{value: 0x0024, lo: 0xbe, hi: 0xbe},
+	// Block 0x1e, offset 0xeb
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8a},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb6},
+	{value: 0x0010, lo: 0xb8, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x1f, offset 0xf6
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0014, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x91, hi: 0x91},
+	{value: 0x0010, lo: 0x99, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb5},
+	// Block 0x20, offset 0x102
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x21, offset 0x10c
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x85},
+	{value: 0x0014, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x89, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xbf},
+	// Block 0x22, offset 0x118
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x23, offset 0x123
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9c, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	// Block 0x24, offset 0x12f
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8a},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0x95},
+	{value: 0x0010, lo: 0x99, hi: 0x9a},
+	{value: 0x0010, lo: 0x9c, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	{value: 0x0010, lo: 0xa8, hi: 0xaa},
+	{value: 0x0010, lo: 0xae, hi: 0xb9},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x25, offset 0x13b
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x86, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	// Block 0x26, offset 0x143
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x83},
+	{value: 0x0014, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb9},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbf},
+	// Block 0x27, offset 0x14c
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0014, lo: 0x86, hi: 0x88},
+	{value: 0x0014, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0034, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9a},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	// Block 0x28, offset 0x156
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x29, offset 0x161
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0014, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xb2},
+	// Block 0x2a, offset 0x16d
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x2b, offset 0x174
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x86, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x94, hi: 0x97},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xba, hi: 0xbf},
+	// Block 0x2c, offset 0x17f
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x96},
+	{value: 0x0010, lo: 0x9a, hi: 0xb1},
+	{value: 0x0010, lo: 0xb3, hi: 0xbb},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x2d, offset 0x184
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0010, lo: 0x8f, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x94},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9f},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	// Block 0x2e, offset 0x18c
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb4, hi: 0xb7},
+	{value: 0x0034, lo: 0xb8, hi: 0xba},
+	// Block 0x2f, offset 0x18f
+	{value: 0x0004, lo: 0x86, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x88, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x30, offset 0x194
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb4, hi: 0xb7},
+	{value: 0x0034, lo: 0xb8, hi: 0xba},
+	{value: 0x0014, lo: 0xbb, hi: 0xbc},
+	// Block 0x31, offset 0x198
+	{value: 0x0004, lo: 0x86, hi: 0x86},
+	{value: 0x0034, lo: 0x88, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x32, offset 0x19c
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0034, lo: 0x98, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0034, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0034, lo: 0xb9, hi: 0xb9},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x33, offset 0x1a3
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0x89, hi: 0xac},
+	{value: 0x0034, lo: 0xb1, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xba, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x34, offset 0x1ac
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0024, lo: 0x82, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0024, lo: 0x86, hi: 0x87},
+	{value: 0x0010, lo: 0x88, hi: 0x8c},
+	{value: 0x0014, lo: 0x8d, hi: 0x97},
+	{value: 0x0014, lo: 0x99, hi: 0xbc},
+	// Block 0x35, offset 0x1b4
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	// Block 0x36, offset 0x1b5
+	{value: 0x0010, lo: 0xab, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0010, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbc},
+	{value: 0x0014, lo: 0xbd, hi: 0xbe},
+	// Block 0x37, offset 0x1be
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x96, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x99},
+	{value: 0x0014, lo: 0x9e, hi: 0xa0},
+	{value: 0x0010, lo: 0xa2, hi: 0xa4},
+	{value: 0x0010, lo: 0xa7, hi: 0xad},
+	{value: 0x0014, lo: 0xb1, hi: 0xb4},
+	// Block 0x38, offset 0x1c5
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x6c53, lo: 0xa0, hi: 0xbf},
+	// Block 0x39, offset 0x1cd
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0x9a, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x3a, offset 0x1d3
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb5},
+	{value: 0x0010, lo: 0xb8, hi: 0xbe},
+	// Block 0x3b, offset 0x1d8
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x82, hi: 0x85},
+	{value: 0x0010, lo: 0x88, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0xbf},
+	// Block 0x3c, offset 0x1dc
+	{value: 0x0010, lo: 0x80, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0x95},
+	{value: 0x0010, lo: 0x98, hi: 0xbf},
+	// Block 0x3d, offset 0x1df
+	{value: 0x0010, lo: 0x80, hi: 0x9a},
+	{value: 0x0024, lo: 0x9d, hi: 0x9f},
+	// Block 0x3e, offset 0x1e1
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x7453, lo: 0xa0, hi: 0xaf},
+	{value: 0x7853, lo: 0xb0, hi: 0xbf},
+	// Block 0x3f, offset 0x1e4
+	{value: 0x7c53, lo: 0x80, hi: 0x8f},
+	{value: 0x8053, lo: 0x90, hi: 0x9f},
+	{value: 0x7c53, lo: 0xa0, hi: 0xaf},
+	{value: 0x0813, lo: 0xb0, hi: 0xb5},
+	{value: 0x0892, lo: 0xb8, hi: 0xbd},
+	// Block 0x40, offset 0x1e9
+	{value: 0x0010, lo: 0x81, hi: 0xbf},
+	// Block 0x41, offset 0x1ea
+	{value: 0x0010, lo: 0x80, hi: 0xac},
+	{value: 0x0010, lo: 0xaf, hi: 0xbf},
+	// Block 0x42, offset 0x1ec
+	{value: 0x0010, lo: 0x81, hi: 0x9a},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x43, offset 0x1ee
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0010, lo: 0xae, hi: 0xb8},
+	// Block 0x44, offset 0x1f0
+	{value: 0x0010, lo: 0x80, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x93},
+	{value: 0x0034, lo: 0x94, hi: 0x94},
+	{value: 0x0010, lo: 0xa0, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	// Block 0x45, offset 0x1f7
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x93},
+	{value: 0x0010, lo: 0xa0, hi: 0xac},
+	{value: 0x0010, lo: 0xae, hi: 0xb0},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	// Block 0x46, offset 0x1fc
+	{value: 0x0014, lo: 0xb4, hi: 0xb5},
+	{value: 0x0010, lo: 0xb6, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x47, offset 0x200
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0014, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x89, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x92},
+	{value: 0x0014, lo: 0x93, hi: 0x93},
+	{value: 0x0004, lo: 0x97, hi: 0x97},
+	{value: 0x0024, lo: 0x9d, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0x48, offset 0x209
+	{value: 0x0014, lo: 0x8b, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x49, offset 0x20c
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0xb8},
+	// Block 0x4a, offset 0x20f
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xa9},
+	{value: 0x0010, lo: 0xaa, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x4b, offset 0x215
+	{value: 0x0010, lo: 0x80, hi: 0xb5},
+	// Block 0x4c, offset 0x216
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0014, lo: 0xa0, hi: 0xa2},
+	{value: 0x0010, lo: 0xa3, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xab},
+	{value: 0x0010, lo: 0xb0, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb2},
+	{value: 0x0010, lo: 0xb3, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xb9},
+	{value: 0x0024, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbb},
+	// Block 0x4d, offset 0x221
+	{value: 0x0010, lo: 0x86, hi: 0x8f},
+	// Block 0x4e, offset 0x222
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x4f, offset 0x223
+	{value: 0x0010, lo: 0x80, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0x99, hi: 0x9a},
+	{value: 0x0014, lo: 0x9b, hi: 0x9b},
+	// Block 0x50, offset 0x228
+	{value: 0x0010, lo: 0x95, hi: 0x95},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x9e},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa2},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xac},
+	{value: 0x0010, lo: 0xad, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0024, lo: 0xb5, hi: 0xbc},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x51, offset 0x235
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0004, lo: 0xa7, hi: 0xa7},
+	{value: 0x0024, lo: 0xb0, hi: 0xb4},
+	{value: 0x0034, lo: 0xb5, hi: 0xba},
+	{value: 0x0024, lo: 0xbb, hi: 0xbc},
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	// Block 0x52, offset 0x23d
+	{value: 0x0014, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x53, offset 0x245
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0030, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x8b},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0xab, hi: 0xab},
+	{value: 0x0034, lo: 0xac, hi: 0xac},
+	{value: 0x0024, lo: 0xad, hi: 0xb3},
+	// Block 0x54, offset 0x24e
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa9},
+	{value: 0x0030, lo: 0xaa, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xbf},
+	// Block 0x55, offset 0x257
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa9},
+	{value: 0x0010, lo: 0xaa, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb1},
+	{value: 0x0030, lo: 0xb2, hi: 0xb3},
+	// Block 0x56, offset 0x260
+	{value: 0x0010, lo: 0x80, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	// Block 0x57, offset 0x265
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8d, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	// Block 0x58, offset 0x268
+	{value: 0x31ea, lo: 0x80, hi: 0x80},
+	{value: 0x326a, lo: 0x81, hi: 0x81},
+	{value: 0x32ea, lo: 0x82, hi: 0x82},
+	{value: 0x336a, lo: 0x83, hi: 0x83},
+	{value: 0x33ea, lo: 0x84, hi: 0x84},
+	{value: 0x346a, lo: 0x85, hi: 0x85},
+	{value: 0x34ea, lo: 0x86, hi: 0x86},
+	{value: 0x356a, lo: 0x87, hi: 0x87},
+	{value: 0x35ea, lo: 0x88, hi: 0x88},
+	{value: 0x8353, lo: 0x90, hi: 0xba},
+	{value: 0x8353, lo: 0xbd, hi: 0xbf},
+	// Block 0x59, offset 0x273
+	{value: 0x0024, lo: 0x90, hi: 0x92},
+	{value: 0x0034, lo: 0x94, hi: 0x99},
+	{value: 0x0024, lo: 0x9a, hi: 0x9b},
+	{value: 0x0034, lo: 0x9c, hi: 0x9f},
+	{value: 0x0024, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0034, lo: 0xa2, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xb3},
+	{value: 0x0024, lo: 0xb4, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb7},
+	{value: 0x0024, lo: 0xb8, hi: 0xb9},
+	{value: 0x0010, lo: 0xba, hi: 0xba},
+	// Block 0x5a, offset 0x281
+	{value: 0x0012, lo: 0x80, hi: 0xab},
+	{value: 0x0015, lo: 0xac, hi: 0xbf},
+	// Block 0x5b, offset 0x283
+	{value: 0x0015, lo: 0x80, hi: 0xaa},
+	{value: 0x0012, lo: 0xab, hi: 0xb7},
+	{value: 0x0015, lo: 0xb8, hi: 0xb8},
+	{value: 0x8752, lo: 0xb9, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xbc},
+	{value: 0x8b52, lo: 0xbd, hi: 0xbd},
+	{value: 0x0012, lo: 0xbe, hi: 0xbf},
+	// Block 0x5c, offset 0x28a
+	{value: 0x0012, lo: 0x80, hi: 0x8d},
+	{value: 0x8f52, lo: 0x8e, hi: 0x8e},
+	{value: 0x0012, lo: 0x8f, hi: 0x9a},
+	{value: 0x0015, lo: 0x9b, hi: 0xbf},
+	// Block 0x5d, offset 0x28e
+	{value: 0x0024, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0024, lo: 0x83, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0024, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x90},
+	{value: 0x0024, lo: 0x91, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb9},
+	{value: 0x0024, lo: 0xbb, hi: 0xbb},
+	{value: 0x0034, lo: 0xbc, hi: 0xbd},
+	{value: 0x0024, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x5e, offset 0x29a
+	{value: 0x0117, lo: 0x80, hi: 0xbf},
+	// Block 0x5f, offset 0x29b
+	{value: 0x0117, lo: 0x80, hi: 0x95},
+	{value: 0x369a, lo: 0x96, hi: 0x96},
+	{value: 0x374a, lo: 0x97, hi: 0x97},
+	{value: 0x37fa, lo: 0x98, hi: 0x98},
+	{value: 0x38aa, lo: 0x99, hi: 0x99},
+	{value: 0x395a, lo: 0x9a, hi: 0x9a},
+	{value: 0x3a0a, lo: 0x9b, hi: 0x9b},
+	{value: 0x0012, lo: 0x9c, hi: 0x9d},
+	{value: 0x3abb, lo: 0x9e, hi: 0x9e},
+	{value: 0x0012, lo: 0x9f, hi: 0x9f},
+	{value: 0x0117, lo: 0xa0, hi: 0xbf},
+	// Block 0x60, offset 0x2a6
+	{value: 0x0812, lo: 0x80, hi: 0x87},
+	{value: 0x0813, lo: 0x88, hi: 0x8f},
+	{value: 0x0812, lo: 0x90, hi: 0x95},
+	{value: 0x0813, lo: 0x98, hi: 0x9d},
+	{value: 0x0812, lo: 0xa0, hi: 0xa7},
+	{value: 0x0813, lo: 0xa8, hi: 0xaf},
+	{value: 0x0812, lo: 0xb0, hi: 0xb7},
+	{value: 0x0813, lo: 0xb8, hi: 0xbf},
+	// Block 0x61, offset 0x2ae
+	{value: 0x0004, lo: 0x8b, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8f},
+	{value: 0x0054, lo: 0x98, hi: 0x99},
+	{value: 0x0054, lo: 0xa4, hi: 0xa4},
+	{value: 0x0054, lo: 0xa7, hi: 0xa7},
+	{value: 0x0014, lo: 0xaa, hi: 0xae},
+	{value: 0x0010, lo: 0xaf, hi: 0xaf},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x62, offset 0x2b6
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x94, hi: 0x94},
+	{value: 0x0014, lo: 0xa0, hi: 0xa4},
+	{value: 0x0014, lo: 0xa6, hi: 0xaf},
+	{value: 0x0015, lo: 0xb1, hi: 0xb1},
+	{value: 0x0015, lo: 0xbf, hi: 0xbf},
+	// Block 0x63, offset 0x2bc
+	{value: 0x0015, lo: 0x90, hi: 0x9c},
+	// Block 0x64, offset 0x2bd
+	{value: 0x0024, lo: 0x90, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x93},
+	{value: 0x0024, lo: 0x94, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x9a},
+	{value: 0x0024, lo: 0x9b, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0xa0},
+	{value: 0x0024, lo: 0xa1, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa4},
+	{value: 0x0034, lo: 0xa5, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa7},
+	{value: 0x0034, lo: 0xa8, hi: 0xa8},
+	{value: 0x0024, lo: 0xa9, hi: 0xa9},
+	{value: 0x0034, lo: 0xaa, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	// Block 0x65, offset 0x2cb
+	{value: 0x0016, lo: 0x85, hi: 0x86},
+	{value: 0x0012, lo: 0x87, hi: 0x89},
+	{value: 0xa452, lo: 0x8e, hi: 0x8e},
+	{value: 0x1013, lo: 0xa0, hi: 0xaf},
+	{value: 0x1012, lo: 0xb0, hi: 0xbf},
+	// Block 0x66, offset 0x2d0
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x88},
+	// Block 0x67, offset 0x2d3
+	{value: 0xa753, lo: 0xb6, hi: 0xb7},
+	{value: 0xaa53, lo: 0xb8, hi: 0xb9},
+	{value: 0xad53, lo: 0xba, hi: 0xbb},
+	{value: 0xaa53, lo: 0xbc, hi: 0xbd},
+	{value: 0xa753, lo: 0xbe, hi: 0xbf},
+	// Block 0x68, offset 0x2d8
+	{value: 0x3013, lo: 0x80, hi: 0x8f},
+	{value: 0x6553, lo: 0x90, hi: 0x9f},
+	{value: 0xb053, lo: 0xa0, hi: 0xae},
+	{value: 0x3012, lo: 0xb0, hi: 0xbf},
+	// Block 0x69, offset 0x2dc
+	{value: 0x0117, lo: 0x80, hi: 0xa3},
+	{value: 0x0012, lo: 0xa4, hi: 0xa4},
+	{value: 0x0716, lo: 0xab, hi: 0xac},
+	{value: 0x0316, lo: 0xad, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xb3},
+	// Block 0x6a, offset 0x2e2
+	{value: 0x6c52, lo: 0x80, hi: 0x9f},
+	{value: 0x7052, lo: 0xa0, hi: 0xa5},
+	{value: 0x7052, lo: 0xa7, hi: 0xa7},
+	{value: 0x7052, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x6b, offset 0x2e7
+	{value: 0x0010, lo: 0x80, hi: 0xa7},
+	{value: 0x0014, lo: 0xaf, hi: 0xaf},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x6c, offset 0x2ea
+	{value: 0x0010, lo: 0x80, hi: 0x96},
+	{value: 0x0010, lo: 0xa0, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xae},
+	{value: 0x0010, lo: 0xb0, hi: 0xb6},
+	{value: 0x0010, lo: 0xb8, hi: 0xbe},
+	// Block 0x6d, offset 0x2ef
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9e},
+	{value: 0x0024, lo: 0xa0, hi: 0xbf},
+	// Block 0x6e, offset 0x2f4
+	{value: 0x0014, lo: 0xaf, hi: 0xaf},
+	// Block 0x6f, offset 0x2f5
+	{value: 0x0014, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0xaa, hi: 0xad},
+	{value: 0x0030, lo: 0xae, hi: 0xaf},
+	{value: 0x0004, lo: 0xb1, hi: 0xb5},
+	{value: 0x0014, lo: 0xbb, hi: 0xbb},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	// Block 0x70, offset 0x2fb
+	{value: 0x0034, lo: 0x99, hi: 0x9a},
+	{value: 0x0004, lo: 0x9b, hi: 0x9e},
+	// Block 0x71, offset 0x2fd
+	{value: 0x0004, lo: 0xbc, hi: 0xbe},
+	// Block 0x72, offset 0x2fe
+	{value: 0x0010, lo: 0x85, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xbf},
+	// Block 0x73, offset 0x300
+	{value: 0x0010, lo: 0x80, hi: 0x8e},
+	{value: 0x0010, lo: 0xa0, hi: 0xba},
+	// Block 0x74, offset 0x302
+	{value: 0x0010, lo: 0x80, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0x96, hi: 0xbf},
+	// Block 0x75, offset 0x305
+	{value: 0x0010, lo: 0x80, hi: 0x8c},
+	// Block 0x76, offset 0x306
+	{value: 0x0010, lo: 0x90, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	// Block 0x77, offset 0x308
+	{value: 0x0010, lo: 0x80, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0010, lo: 0x90, hi: 0xab},
+	// Block 0x78, offset 0x30b
+	{value: 0x0117, lo: 0x80, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb2},
+	{value: 0x0024, lo: 0xb4, hi: 0xbd},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x79, offset 0x311
+	{value: 0x0117, lo: 0x80, hi: 0x9b},
+	{value: 0x0015, lo: 0x9c, hi: 0x9d},
+	{value: 0x0024, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x7a, offset 0x315
+	{value: 0x0010, lo: 0x80, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb1},
+	// Block 0x7b, offset 0x317
+	{value: 0x0004, lo: 0x80, hi: 0x96},
+	{value: 0x0014, lo: 0x97, hi: 0xa1},
+	{value: 0x0117, lo: 0xa2, hi: 0xaf},
+	{value: 0x0012, lo: 0xb0, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xbf},
+	// Block 0x7c, offset 0x31c
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x0015, lo: 0xb0, hi: 0xb0},
+	{value: 0x0012, lo: 0xb1, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x8753, lo: 0xbd, hi: 0xbd},
+	{value: 0x0117, lo: 0xbe, hi: 0xbf},
+	// Block 0x7d, offset 0x323
+	{value: 0x0117, lo: 0x82, hi: 0x83},
+	{value: 0x6553, lo: 0x84, hi: 0x84},
+	{value: 0x908b, lo: 0x85, hi: 0x85},
+	{value: 0x8f53, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0xb7, hi: 0xb7},
+	{value: 0x0015, lo: 0xb8, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbf},
+	// Block 0x7e, offset 0x32b
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8b},
+	{value: 0x0010, lo: 0x8c, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa6},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	// Block 0x7f, offset 0x334
+	{value: 0x0010, lo: 0x80, hi: 0xb3},
+	// Block 0x80, offset 0x335
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x85},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0xa0, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb7},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x81, offset 0x33e
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0014, lo: 0xa6, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x82, offset 0x342
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x91},
+	{value: 0x0010, lo: 0x92, hi: 0x92},
+	{value: 0x0030, lo: 0x93, hi: 0x93},
+	{value: 0x0010, lo: 0xa0, hi: 0xbc},
+	// Block 0x83, offset 0x347
+	{value: 0x0014, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xb9},
+	{value: 0x0010, lo: 0xba, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x84, offset 0x34f
+	{value: 0x0030, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0014, lo: 0xa5, hi: 0xa5},
+	{value: 0x0004, lo: 0xa6, hi: 0xa6},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x85, offset 0x355
+	{value: 0x0010, lo: 0x80, hi: 0xa8},
+	{value: 0x0014, lo: 0xa9, hi: 0xae},
+	{value: 0x0010, lo: 0xaf, hi: 0xb0},
+	{value: 0x0014, lo: 0xb1, hi: 0xb2},
+	{value: 0x0010, lo: 0xb3, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb6},
+	// Block 0x86, offset 0x35b
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0010, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0004, lo: 0xb0, hi: 0xb0},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x87, offset 0x365
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	{value: 0x0024, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0024, lo: 0xb7, hi: 0xb8},
+	{value: 0x0024, lo: 0xbe, hi: 0xbf},
+	// Block 0x88, offset 0x36a
+	{value: 0x0024, lo: 0x81, hi: 0x81},
+	{value: 0x0004, lo: 0x9d, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0010, lo: 0xb2, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	// Block 0x89, offset 0x373
+	{value: 0x0010, lo: 0x81, hi: 0x86},
+	{value: 0x0010, lo: 0x89, hi: 0x8e},
+	{value: 0x0010, lo: 0x91, hi: 0x96},
+	{value: 0x0010, lo: 0xa0, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xae},
+	{value: 0x0012, lo: 0xb0, hi: 0xbf},
+	// Block 0x8a, offset 0x379
+	{value: 0x0012, lo: 0x80, hi: 0x92},
+	{value: 0xb352, lo: 0x93, hi: 0x93},
+	{value: 0x0012, lo: 0x94, hi: 0x9a},
+	{value: 0x0014, lo: 0x9b, hi: 0x9b},
+	{value: 0x0015, lo: 0x9c, hi: 0x9f},
+	{value: 0x0012, lo: 0xa0, hi: 0xa7},
+	{value: 0x74d2, lo: 0xb0, hi: 0xbf},
+	// Block 0x8b, offset 0x380
+	{value: 0x78d2, lo: 0x80, hi: 0x8f},
+	{value: 0x7cd2, lo: 0x90, hi: 0x9f},
+	{value: 0x80d2, lo: 0xa0, hi: 0xaf},
+	{value: 0x7cd2, lo: 0xb0, hi: 0xbf},
+	// Block 0x8c, offset 0x384
+	{value: 0x0010, lo: 0x80, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xaa},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x8d, offset 0x38c
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x8e, offset 0x38e
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x8b, hi: 0xbb},
+	// Block 0x8f, offset 0x390
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x86, hi: 0xbf},
+	// Block 0x90, offset 0x393
+	{value: 0x0010, lo: 0x80, hi: 0xb1},
+	{value: 0x0004, lo: 0xb2, hi: 0xbf},
+	// Block 0x91, offset 0x395
+	{value: 0x0004, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x93, hi: 0xbf},
+	// Block 0x92, offset 0x397
+	{value: 0x0010, lo: 0x80, hi: 0xbd},
+	// Block 0x93, offset 0x398
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0x94, offset 0x399
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x0010, lo: 0x92, hi: 0xbf},
+	// Block 0x95, offset 0x39b
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0xb0, hi: 0xbb},
+	// Block 0x96, offset 0x39d
+	{value: 0x0014, lo: 0x80, hi: 0x8f},
+	{value: 0x0054, lo: 0x93, hi: 0x93},
+	{value: 0x0024, lo: 0xa0, hi: 0xa6},
+	{value: 0x0034, lo: 0xa7, hi: 0xad},
+	{value: 0x0024, lo: 0xae, hi: 0xaf},
+	{value: 0x0010, lo: 0xb3, hi: 0xb4},
+	// Block 0x97, offset 0x3a3
+	{value: 0x0010, lo: 0x8d, hi: 0x8f},
+	{value: 0x0054, lo: 0x92, hi: 0x92},
+	{value: 0x0054, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0xb0, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0x98, offset 0x3a8
+	{value: 0x0010, lo: 0x80, hi: 0xbc},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x99, offset 0x3aa
+	{value: 0x0054, lo: 0x87, hi: 0x87},
+	{value: 0x0054, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0054, lo: 0x9a, hi: 0x9a},
+	{value: 0x5f53, lo: 0xa1, hi: 0xba},
+	{value: 0x0004, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x9a, offset 0x3b1
+	{value: 0x0004, lo: 0x80, hi: 0x80},
+	{value: 0x5f52, lo: 0x81, hi: 0x9a},
+	{value: 0x0004, lo: 0xb0, hi: 0xb0},
+	// Block 0x9b, offset 0x3b4
+	{value: 0x0014, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xbe},
+	// Block 0x9c, offset 0x3b6
+	{value: 0x0010, lo: 0x82, hi: 0x87},
+	{value: 0x0010, lo: 0x8a, hi: 0x8f},
+	{value: 0x0010, lo: 0x92, hi: 0x97},
+	{value: 0x0010, lo: 0x9a, hi: 0x9c},
+	{value: 0x0004, lo: 0xa3, hi: 0xa3},
+	{value: 0x0014, lo: 0xb9, hi: 0xbb},
+	// Block 0x9d, offset 0x3bc
+	{value: 0x0010, lo: 0x80, hi: 0x8b},
+	{value: 0x0010, lo: 0x8d, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xba},
+	{value: 0x0010, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x9e, offset 0x3c1
+	{value: 0x0010, lo: 0x80, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x9d},
+	// Block 0x9f, offset 0x3c3
+	{value: 0x0010, lo: 0x80, hi: 0xba},
+	// Block 0xa0, offset 0x3c4
+	{value: 0x0010, lo: 0x80, hi: 0xb4},
+	// Block 0xa1, offset 0x3c5
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	// Block 0xa2, offset 0x3c6
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xa3, offset 0x3c8
+	{value: 0x0010, lo: 0x80, hi: 0x90},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	// Block 0xa4, offset 0x3ca
+	{value: 0x0010, lo: 0x80, hi: 0x9f},
+	{value: 0x0010, lo: 0xad, hi: 0xbf},
+	// Block 0xa5, offset 0x3cc
+	{value: 0x0010, lo: 0x80, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0xb5},
+	{value: 0x0024, lo: 0xb6, hi: 0xba},
+	// Block 0xa6, offset 0x3cf
+	{value: 0x0010, lo: 0x80, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xa7, offset 0x3d1
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x88, hi: 0x8f},
+	{value: 0x0010, lo: 0x91, hi: 0x95},
+	// Block 0xa8, offset 0x3d4
+	{value: 0x2813, lo: 0x80, hi: 0x87},
+	{value: 0x3813, lo: 0x88, hi: 0x8f},
+	{value: 0x2813, lo: 0x90, hi: 0x97},
+	{value: 0xb653, lo: 0x98, hi: 0x9f},
+	{value: 0xb953, lo: 0xa0, hi: 0xa7},
+	{value: 0x2812, lo: 0xa8, hi: 0xaf},
+	{value: 0x3812, lo: 0xb0, hi: 0xb7},
+	{value: 0x2812, lo: 0xb8, hi: 0xbf},
+	// Block 0xa9, offset 0x3dc
+	{value: 0xb652, lo: 0x80, hi: 0x87},
+	{value: 0xb952, lo: 0x88, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0xaa, offset 0x3df
+	{value: 0x0010, lo: 0x80, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0xb953, lo: 0xb0, hi: 0xb7},
+	{value: 0xb653, lo: 0xb8, hi: 0xbf},
+	// Block 0xab, offset 0x3e3
+	{value: 0x2813, lo: 0x80, hi: 0x87},
+	{value: 0x3813, lo: 0x88, hi: 0x8f},
+	{value: 0x2813, lo: 0x90, hi: 0x93},
+	{value: 0xb952, lo: 0x98, hi: 0x9f},
+	{value: 0xb652, lo: 0xa0, hi: 0xa7},
+	{value: 0x2812, lo: 0xa8, hi: 0xaf},
+	{value: 0x3812, lo: 0xb0, hi: 0xb7},
+	{value: 0x2812, lo: 0xb8, hi: 0xbb},
+	// Block 0xac, offset 0x3eb
+	{value: 0x0010, lo: 0x80, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xad, offset 0x3ed
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	// Block 0xae, offset 0x3ee
+	{value: 0x0010, lo: 0x80, hi: 0xb6},
+	// Block 0xaf, offset 0x3ef
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xa7},
+	// Block 0xb0, offset 0x3f1
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0010, lo: 0x88, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0xb5},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xb1, offset 0x3f7
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb6},
+	// Block 0xb2, offset 0x3f9
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	// Block 0xb3, offset 0x3fa
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	// Block 0xb4, offset 0x3fc
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb9},
+	// Block 0xb5, offset 0x3fe
+	{value: 0x0010, lo: 0x80, hi: 0xb7},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0xb6, offset 0x400
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x83},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x8e, hi: 0x8e},
+	{value: 0x0024, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x97},
+	{value: 0x0010, lo: 0x99, hi: 0xb5},
+	{value: 0x0024, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xb7, offset 0x40d
+	{value: 0x0010, lo: 0xa0, hi: 0xbc},
+	// Block 0xb8, offset 0x40e
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	// Block 0xb9, offset 0x40f
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0x89, hi: 0xa4},
+	{value: 0x0024, lo: 0xa5, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	// Block 0xba, offset 0x413
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	// Block 0xbb, offset 0x415
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	// Block 0xbc, offset 0x416
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	// Block 0xbd, offset 0x417
+	{value: 0x5653, lo: 0x80, hi: 0xb2},
+	// Block 0xbe, offset 0x418
+	{value: 0x5652, lo: 0x80, hi: 0xb2},
+	// Block 0xbf, offset 0x419
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xc0, offset 0x41c
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xc1, offset 0x41f
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x87},
+	{value: 0x0024, lo: 0x88, hi: 0x8a},
+	{value: 0x0034, lo: 0x8b, hi: 0x8b},
+	{value: 0x0024, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x90},
+	// Block 0xc2, offset 0x425
+	{value: 0x0010, lo: 0xa0, hi: 0xb6},
+	// Block 0xc3, offset 0x426
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbf},
+	// Block 0xc4, offset 0x42a
+	{value: 0x0014, lo: 0x80, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xc5, offset 0x42e
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb6},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0014, lo: 0xbd, hi: 0xbd},
+	// Block 0xc6, offset 0x434
+	{value: 0x0014, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0xa8},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xc7, offset 0x437
+	{value: 0x0024, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xab},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0xc8, offset 0x43e
+	{value: 0x0010, lo: 0x84, hi: 0x86},
+	{value: 0x0010, lo: 0x90, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb3},
+	{value: 0x0010, lo: 0xb6, hi: 0xb6},
+	// Block 0xc9, offset 0x442
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xca, offset 0x446
+	{value: 0x0030, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0014, lo: 0x89, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8c},
+	{value: 0x0010, lo: 0x90, hi: 0x9a},
+	{value: 0x0010, lo: 0x9c, hi: 0x9c},
+	// Block 0xcb, offset 0x44d
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0014, lo: 0xb4, hi: 0xb4},
+	{value: 0x0030, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xb7},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	// Block 0xcc, offset 0x456
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa8},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xcd, offset 0x45c
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0014, lo: 0x9f, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa2},
+	{value: 0x0014, lo: 0xa3, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xce, offset 0x462
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0xcf, offset 0x46c
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0030, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9d, hi: 0xa3},
+	{value: 0x0024, lo: 0xa6, hi: 0xac},
+	{value: 0x0024, lo: 0xb0, hi: 0xb4},
+	// Block 0xd0, offset 0x476
+	{value: 0x0010, lo: 0x80, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbf},
+	// Block 0xd1, offset 0x478
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0x9f, hi: 0x9f},
+	// Block 0xd2, offset 0x481
+	{value: 0x0010, lo: 0x80, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb8},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0xd3, offset 0x487
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0x85},
+	{value: 0x0010, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd4, offset 0x48d
+	{value: 0x0010, lo: 0x80, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb5},
+	{value: 0x0010, lo: 0xb8, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xd5, offset 0x493
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x98, hi: 0x9b},
+	{value: 0x0014, lo: 0x9c, hi: 0x9d},
+	// Block 0xd6, offset 0x496
+	{value: 0x0010, lo: 0x80, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbc},
+	{value: 0x0014, lo: 0xbd, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xd7, offset 0x49c
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd8, offset 0x49f
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0014, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb5},
+	{value: 0x0030, lo: 0xb6, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0010, lo: 0xb8, hi: 0xb8},
+	// Block 0xd9, offset 0x4a8
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	// Block 0xda, offset 0x4a9
+	{value: 0x0014, lo: 0x9d, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xdb, offset 0x4b0
+	{value: 0x0010, lo: 0x80, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb7},
+	{value: 0x0010, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	// Block 0xdc, offset 0x4b4
+	{value: 0x5f53, lo: 0xa0, hi: 0xbf},
+	// Block 0xdd, offset 0x4b5
+	{value: 0x5f52, lo: 0x80, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xde, offset 0x4b8
+	{value: 0x0010, lo: 0xa0, hi: 0xa7},
+	{value: 0x0010, lo: 0xaa, hi: 0xbf},
+	// Block 0xdf, offset 0x4ba
+	{value: 0x0010, lo: 0x80, hi: 0x93},
+	{value: 0x0014, lo: 0x94, hi: 0x97},
+	{value: 0x0014, lo: 0x9a, hi: 0x9b},
+	{value: 0x0010, lo: 0x9c, hi: 0x9f},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	// Block 0xe0, offset 0x4c1
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x8a},
+	{value: 0x0010, lo: 0x8b, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb8},
+	{value: 0x0010, lo: 0xb9, hi: 0xba},
+	{value: 0x0014, lo: 0xbb, hi: 0xbe},
+	// Block 0xe1, offset 0x4c9
+	{value: 0x0034, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0014, lo: 0x91, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x98},
+	{value: 0x0014, lo: 0x99, hi: 0x9b},
+	{value: 0x0010, lo: 0x9c, hi: 0xbf},
+	// Block 0xe2, offset 0x4cf
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0014, lo: 0x8a, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x98},
+	{value: 0x0034, lo: 0x99, hi: 0x99},
+	{value: 0x0010, lo: 0x9d, hi: 0x9d},
+	// Block 0xe3, offset 0x4d5
+	{value: 0x0010, lo: 0x80, hi: 0xb8},
+	// Block 0xe4, offset 0x4d6
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb6},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xe5, offset 0x4dc
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xb2, hi: 0xbf},
+	// Block 0xe6, offset 0x4df
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x0014, lo: 0x92, hi: 0xa7},
+	{value: 0x0010, lo: 0xa9, hi: 0xa9},
+	{value: 0x0014, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb6},
+	// Block 0xe7, offset 0x4e7
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0xb0},
+	{value: 0x0014, lo: 0xb1, hi: 0xb6},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0xe8, offset 0x4ee
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x85},
+	{value: 0x0010, lo: 0x86, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xa5},
+	{value: 0x0010, lo: 0xa7, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xbf},
+	// Block 0xe9, offset 0x4f8
+	{value: 0x0010, lo: 0x80, hi: 0x8e},
+	{value: 0x0014, lo: 0x90, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0x96, hi: 0x96},
+	{value: 0x0034, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0xea, offset 0x500
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb6},
+	// Block 0xeb, offset 0x503
+	{value: 0x0010, lo: 0x80, hi: 0x99},
+	// Block 0xec, offset 0x504
+	{value: 0x0010, lo: 0x80, hi: 0xae},
+	// Block 0xed, offset 0x505
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	// Block 0xee, offset 0x506
+	{value: 0x0010, lo: 0x80, hi: 0xae},
+	{value: 0x0014, lo: 0xb0, hi: 0xb8},
+	// Block 0xef, offset 0x508
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	// Block 0xf0, offset 0x509
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0xf1, offset 0x50b
+	{value: 0x0010, lo: 0x90, hi: 0xad},
+	{value: 0x0034, lo: 0xb0, hi: 0xb4},
+	// Block 0xf2, offset 0x50d
+	{value: 0x0010, lo: 0x80, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb6},
+	// Block 0xf3, offset 0x50f
+	{value: 0x0014, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa3, hi: 0xb7},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0xf4, offset 0x513
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	// Block 0xf5, offset 0x514
+	{value: 0x2013, lo: 0x80, hi: 0x9f},
+	{value: 0x2012, lo: 0xa0, hi: 0xbf},
+	// Block 0xf6, offset 0x516
+	{value: 0x0010, lo: 0x80, hi: 0x8a},
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0xf7, offset 0x519
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0014, lo: 0x8f, hi: 0x9f},
+	// Block 0xf8, offset 0x51b
+	{value: 0x0014, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa3, hi: 0xa3},
+	// Block 0xf9, offset 0x51d
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xbc},
+	// Block 0xfa, offset 0x51f
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x0034, lo: 0x9e, hi: 0x9e},
+	{value: 0x0014, lo: 0xa0, hi: 0xa3},
+	// Block 0xfb, offset 0x524
+	{value: 0x0030, lo: 0xa5, hi: 0xa6},
+	{value: 0x0034, lo: 0xa7, hi: 0xa9},
+	{value: 0x0030, lo: 0xad, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbf},
+	// Block 0xfc, offset 0x529
+	{value: 0x0034, lo: 0x80, hi: 0x82},
+	{value: 0x0024, lo: 0x85, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8b},
+	{value: 0x0024, lo: 0xaa, hi: 0xad},
+	// Block 0xfd, offset 0x52d
+	{value: 0x0024, lo: 0x82, hi: 0x84},
+	// Block 0xfe, offset 0x52e
+	{value: 0x0013, lo: 0x80, hi: 0x99},
+	{value: 0x0012, lo: 0x9a, hi: 0xb3},
+	{value: 0x0013, lo: 0xb4, hi: 0xbf},
+	// Block 0xff, offset 0x531
+	{value: 0x0013, lo: 0x80, hi: 0x8d},
+	{value: 0x0012, lo: 0x8e, hi: 0x94},
+	{value: 0x0012, lo: 0x96, hi: 0xa7},
+	{value: 0x0013, lo: 0xa8, hi: 0xbf},
+	// Block 0x100, offset 0x535
+	{value: 0x0013, lo: 0x80, hi: 0x81},
+	{value: 0x0012, lo: 0x82, hi: 0x9b},
+	{value: 0x0013, lo: 0x9c, hi: 0x9c},
+	{value: 0x0013, lo: 0x9e, hi: 0x9f},
+	{value: 0x0013, lo: 0xa2, hi: 0xa2},
+	{value: 0x0013, lo: 0xa5, hi: 0xa6},
+	{value: 0x0013, lo: 0xa9, hi: 0xac},
+	{value: 0x0013, lo: 0xae, hi: 0xb5},
+	{value: 0x0012, lo: 0xb6, hi: 0xb9},
+	{value: 0x0012, lo: 0xbb, hi: 0xbb},
+	{value: 0x0012, lo: 0xbd, hi: 0xbf},
+	// Block 0x101, offset 0x540
+	{value: 0x0012, lo: 0x80, hi: 0x83},
+	{value: 0x0012, lo: 0x85, hi: 0x8f},
+	{value: 0x0013, lo: 0x90, hi: 0xa9},
+	{value: 0x0012, lo: 0xaa, hi: 0xbf},
+	// Block 0x102, offset 0x544
+	{value: 0x0012, lo: 0x80, hi: 0x83},
+	{value: 0x0013, lo: 0x84, hi: 0x85},
+	{value: 0x0013, lo: 0x87, hi: 0x8a},
+	{value: 0x0013, lo: 0x8d, hi: 0x94},
+	{value: 0x0013, lo: 0x96, hi: 0x9c},
+	{value: 0x0012, lo: 0x9e, hi: 0xb7},
+	{value: 0x0013, lo: 0xb8, hi: 0xb9},
+	{value: 0x0013, lo: 0xbb, hi: 0xbe},
+	// Block 0x103, offset 0x54c
+	{value: 0x0013, lo: 0x80, hi: 0x84},
+	{value: 0x0013, lo: 0x86, hi: 0x86},
+	{value: 0x0013, lo: 0x8a, hi: 0x90},
+	{value: 0x0012, lo: 0x92, hi: 0xab},
+	{value: 0x0013, lo: 0xac, hi: 0xbf},
+	// Block 0x104, offset 0x551
+	{value: 0x0013, lo: 0x80, hi: 0x85},
+	{value: 0x0012, lo: 0x86, hi: 0x9f},
+	{value: 0x0013, lo: 0xa0, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xbf},
+	// Block 0x105, offset 0x555
+	{value: 0x0012, lo: 0x80, hi: 0x93},
+	{value: 0x0013, lo: 0x94, hi: 0xad},
+	{value: 0x0012, lo: 0xae, hi: 0xbf},
+	// Block 0x106, offset 0x558
+	{value: 0x0012, lo: 0x80, hi: 0x87},
+	{value: 0x0013, lo: 0x88, hi: 0xa1},
+	{value: 0x0012, lo: 0xa2, hi: 0xbb},
+	{value: 0x0013, lo: 0xbc, hi: 0xbf},
+	// Block 0x107, offset 0x55c
+	{value: 0x0013, lo: 0x80, hi: 0x95},
+	{value: 0x0012, lo: 0x96, hi: 0xaf},
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x108, offset 0x55f
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	{value: 0x0012, lo: 0x8a, hi: 0xa5},
+	{value: 0x0013, lo: 0xa8, hi: 0xbf},
+	// Block 0x109, offset 0x562
+	{value: 0x0013, lo: 0x80, hi: 0x80},
+	{value: 0x0012, lo: 0x82, hi: 0x9a},
+	{value: 0x0012, lo: 0x9c, hi: 0xa1},
+	{value: 0x0013, lo: 0xa2, hi: 0xba},
+	{value: 0x0012, lo: 0xbc, hi: 0xbf},
+	// Block 0x10a, offset 0x567
+	{value: 0x0012, lo: 0x80, hi: 0x94},
+	{value: 0x0012, lo: 0x96, hi: 0x9b},
+	{value: 0x0013, lo: 0x9c, hi: 0xb4},
+	{value: 0x0012, lo: 0xb6, hi: 0xbf},
+	// Block 0x10b, offset 0x56b
+	{value: 0x0012, lo: 0x80, hi: 0x8e},
+	{value: 0x0012, lo: 0x90, hi: 0x95},
+	{value: 0x0013, lo: 0x96, hi: 0xae},
+	{value: 0x0012, lo: 0xb0, hi: 0xbf},
+	// Block 0x10c, offset 0x56f
+	{value: 0x0012, lo: 0x80, hi: 0x88},
+	{value: 0x0012, lo: 0x8a, hi: 0x8f},
+	{value: 0x0013, lo: 0x90, hi: 0xa8},
+	{value: 0x0012, lo: 0xaa, hi: 0xbf},
+	// Block 0x10d, offset 0x573
+	{value: 0x0012, lo: 0x80, hi: 0x82},
+	{value: 0x0012, lo: 0x84, hi: 0x89},
+	{value: 0x0017, lo: 0x8a, hi: 0x8b},
+	{value: 0x0010, lo: 0x8e, hi: 0xbf},
+	// Block 0x10e, offset 0x577
+	{value: 0x0014, lo: 0x80, hi: 0xb6},
+	{value: 0x0014, lo: 0xbb, hi: 0xbf},
+	// Block 0x10f, offset 0x579
+	{value: 0x0014, lo: 0x80, hi: 0xac},
+	{value: 0x0014, lo: 0xb5, hi: 0xb5},
+	// Block 0x110, offset 0x57b
+	{value: 0x0014, lo: 0x84, hi: 0x84},
+	{value: 0x0014, lo: 0x9b, hi: 0x9f},
+	{value: 0x0014, lo: 0xa1, hi: 0xaf},
+	// Block 0x111, offset 0x57e
+	{value: 0x0024, lo: 0x80, hi: 0x86},
+	{value: 0x0024, lo: 0x88, hi: 0x98},
+	{value: 0x0024, lo: 0x9b, hi: 0xa1},
+	{value: 0x0024, lo: 0xa3, hi: 0xa4},
+	{value: 0x0024, lo: 0xa6, hi: 0xaa},
+	// Block 0x112, offset 0x583
+	{value: 0x0010, lo: 0x80, hi: 0xac},
+	{value: 0x0024, lo: 0xb0, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xbd},
+	// Block 0x113, offset 0x586
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	// Block 0x114, offset 0x588
+	{value: 0x0010, lo: 0x80, hi: 0xab},
+	{value: 0x0024, lo: 0xac, hi: 0xaf},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x115, offset 0x58b
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0034, lo: 0x90, hi: 0x96},
+	// Block 0x116, offset 0x58d
+	{value: 0xbc52, lo: 0x80, hi: 0x81},
+	{value: 0xbf52, lo: 0x82, hi: 0x83},
+	{value: 0x0024, lo: 0x84, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8b},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x117, offset 0x593
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x9f},
+	{value: 0x0010, lo: 0xa1, hi: 0xa2},
+	{value: 0x0010, lo: 0xa4, hi: 0xa4},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0010, lo: 0xa9, hi: 0xb2},
+	{value: 0x0010, lo: 0xb4, hi: 0xb7},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	// Block 0x118, offset 0x59c
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0x9b},
+	{value: 0x0010, lo: 0xa1, hi: 0xa3},
+	{value: 0x0010, lo: 0xa5, hi: 0xa9},
+	{value: 0x0010, lo: 0xab, hi: 0xbb},
+	// Block 0x119, offset 0x5a1
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x11a, offset 0x5a2
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	{value: 0x0013, lo: 0x90, hi: 0xa9},
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x11b, offset 0x5a5
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	// Block 0x11c, offset 0x5a6
+	{value: 0x0014, lo: 0xbb, hi: 0xbf},
+	// Block 0x11d, offset 0x5a7
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0014, lo: 0xa0, hi: 0xbf},
+	// Block 0x11e, offset 0x5a9
+	{value: 0x0014, lo: 0x80, hi: 0xbf},
+	// Block 0x11f, offset 0x5aa
+	{value: 0x0014, lo: 0x80, hi: 0xaf},
+}
+
+// Total table size 15070 bytes (14KiB); checksum: 1EB13752
diff --git a/vendor/golang.org/x/text/cases/tables13.0.0.go b/vendor/golang.org/x/text/cases/tables13.0.0.go
new file mode 100644
index 00000000..cd874775
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/tables13.0.0.go
@@ -0,0 +1,2400 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+//go:build go1.16
+// +build go1.16
+
+package cases
+
+// UnicodeVersion is the Unicode version from which the tables in this package are derived.
+const UnicodeVersion = "13.0.0"
+
+var xorData string = "" + // Size: 192 bytes
+	"\x00\x06\x07\x00\x01?\x00\x0f\x03\x00\x0f\x12\x00\x0f\x1f\x00\x0f\x1d" +
+	"\x00\x01\x13\x00\x0f\x16\x00\x0f\x0b\x00\x0f3\x00\x0f7\x00\x01#\x00\x0f?" +
+	"\x00\x0e'\x00\x0f/\x00\x0e>\x00\x0f*\x00\x0c&\x00\x0c*\x00\x0c;\x00\x0c9" +
+	"\x00\x0c%\x00\x01\x08\x00\x03\x0d\x00\x03\x09\x00\x02\x06\x00\x02\x02" +
+	"\x00\x02\x0c\x00\x01\x00\x00\x01\x03\x00\x01\x01\x00\x01 \x00\x01\x0c" +
+	"\x00\x01\x10\x00\x03\x10\x00\x036 \x00\x037 \x00\x0b#\x10\x00\x0b 0\x00" +
+	"\x0b!\x10\x00\x0b!0\x001\x00\x00\x0b(\x04\x00\x03\x04\x1e\x00\x0b)\x08" +
+	"\x00\x03\x0a\x00\x02:\x00\x02>\x00\x02,\x00\x02\x00\x00\x02\x10\x00\x01<" +
+	"\x00\x01&\x00\x01*\x00\x01.\x00\x010\x003 \x00\x01\x18\x00\x01(\x00\x01" +
+	"\x1e\x00\x01\x22"
+
+var exceptions string = "" + // Size: 2450 bytes
+	"\x00\x12\x12μΜΜ\x12\x12ssSSSs\x13\x18i̇i̇\x10\x09II\x13\x1bʼnʼNʼN\x11" +
+	"\x09sSS\x12\x12dždžDž\x12\x12dždžDŽ\x10\x12DŽDž\x12\x12ljljLj\x12\x12ljljLJ\x10\x12LJLj" +
+	"\x12\x12njnjNj\x12\x12njnjNJ\x10\x12NJNj\x13\x1bǰJ̌J̌\x12\x12dzdzDz\x12\x12dzdzDZ\x10" +
+	"\x12DZDz\x13\x18ⱥⱥ\x13\x18ⱦⱦ\x10\x1bⱾⱾ\x10\x1bⱿⱿ\x10\x1bⱯⱯ\x10\x1bⱭⱭ\x10" +
+	"\x1bⱰⱰ\x10\x1bꞫꞫ\x10\x1bꞬꞬ\x10\x1bꞍꞍ\x10\x1bꞪꞪ\x10\x1bꞮꞮ\x10\x1bⱢⱢ\x10" +
+	"\x1bꞭꞭ\x10\x1bⱮⱮ\x10\x1bⱤⱤ\x10\x1bꟅꟅ\x10\x1bꞱꞱ\x10\x1bꞲꞲ\x10\x1bꞰꞰ2\x12ι" +
+	"ΙΙ\x166ΐΪ́Ϊ́\x166ΰΫ́Ϋ́\x12\x12σΣΣ\x12\x12βΒΒ\x12\x12θΘΘ\x12\x12" +
+	"φΦΦ\x12\x12πΠΠ\x12\x12κΚΚ\x12\x12ρΡΡ\x12\x12εΕΕ\x14$եւԵՒԵւ\x10\x1bᲐა" +
+	"\x10\x1bᲑბ\x10\x1bᲒგ\x10\x1bᲓდ\x10\x1bᲔე\x10\x1bᲕვ\x10\x1bᲖზ\x10\x1bᲗთ" +
+	"\x10\x1bᲘი\x10\x1bᲙკ\x10\x1bᲚლ\x10\x1bᲛმ\x10\x1bᲜნ\x10\x1bᲝო\x10\x1bᲞპ" +
+	"\x10\x1bᲟჟ\x10\x1bᲠრ\x10\x1bᲡს\x10\x1bᲢტ\x10\x1bᲣუ\x10\x1bᲤფ\x10\x1bᲥქ" +
+	"\x10\x1bᲦღ\x10\x1bᲧყ\x10\x1bᲨშ\x10\x1bᲩჩ\x10\x1bᲪც\x10\x1bᲫძ\x10\x1bᲬწ" +
+	"\x10\x1bᲭჭ\x10\x1bᲮხ\x10\x1bᲯჯ\x10\x1bᲰჰ\x10\x1bᲱჱ\x10\x1bᲲჲ\x10\x1bᲳჳ" +
+	"\x10\x1bᲴჴ\x10\x1bᲵჵ\x10\x1bᲶჶ\x10\x1bᲷჷ\x10\x1bᲸჸ\x10\x1bᲹჹ\x10\x1bᲺჺ" +
+	"\x10\x1bᲽჽ\x10\x1bᲾჾ\x10\x1bᲿჿ\x12\x12вВВ\x12\x12дДД\x12\x12оОО\x12\x12с" +
+	"СС\x12\x12тТТ\x12\x12тТТ\x12\x12ъЪЪ\x12\x12ѣѢѢ\x13\x1bꙋꙊꙊ\x13\x1bẖH̱H̱" +
+	"\x13\x1bẗT̈T̈\x13\x1bẘW̊W̊\x13\x1bẙY̊Y̊\x13\x1baʾAʾAʾ\x13\x1bṡṠṠ\x12" +
+	"\x10ssß\x14$ὐΥ̓Υ̓\x166ὒΥ̓̀Υ̓̀\x166ὔΥ̓́Υ̓́\x166ὖΥ̓͂Υ̓͂\x15+ἀιἈΙᾈ" +
+	"\x15+ἁιἉΙᾉ\x15+ἂιἊΙᾊ\x15+ἃιἋΙᾋ\x15+ἄιἌΙᾌ\x15+ἅιἍΙᾍ\x15+ἆιἎΙᾎ\x15+ἇιἏΙᾏ" +
+	"\x15\x1dἀιᾀἈΙ\x15\x1dἁιᾁἉΙ\x15\x1dἂιᾂἊΙ\x15\x1dἃιᾃἋΙ\x15\x1dἄιᾄἌΙ\x15" +
+	"\x1dἅιᾅἍΙ\x15\x1dἆιᾆἎΙ\x15\x1dἇιᾇἏΙ\x15+ἠιἨΙᾘ\x15+ἡιἩΙᾙ\x15+ἢιἪΙᾚ\x15+ἣι" +
+	"ἫΙᾛ\x15+ἤιἬΙᾜ\x15+ἥιἭΙᾝ\x15+ἦιἮΙᾞ\x15+ἧιἯΙᾟ\x15\x1dἠιᾐἨΙ\x15\x1dἡιᾑἩΙ" +
+	"\x15\x1dἢιᾒἪΙ\x15\x1dἣιᾓἫΙ\x15\x1dἤιᾔἬΙ\x15\x1dἥιᾕἭΙ\x15\x1dἦιᾖἮΙ\x15" +
+	"\x1dἧιᾗἯΙ\x15+ὠιὨΙᾨ\x15+ὡιὩΙᾩ\x15+ὢιὪΙᾪ\x15+ὣιὫΙᾫ\x15+ὤιὬΙᾬ\x15+ὥιὭΙᾭ" +
+	"\x15+ὦιὮΙᾮ\x15+ὧιὯΙᾯ\x15\x1dὠιᾠὨΙ\x15\x1dὡιᾡὩΙ\x15\x1dὢιᾢὪΙ\x15\x1dὣιᾣὫΙ" +
+	"\x15\x1dὤιᾤὬΙ\x15\x1dὥιᾥὭΙ\x15\x1dὦιᾦὮΙ\x15\x1dὧιᾧὯΙ\x15-ὰιᾺΙᾺͅ\x14#αιΑΙ" +
+	"ᾼ\x14$άιΆΙΆͅ\x14$ᾶΑ͂Α͂\x166ᾶιΑ͂Ιᾼ͂\x14\x1cαιᾳΑΙ\x12\x12ιΙΙ\x15-ὴιῊΙ" +
+	"Ὴͅ\x14#ηιΗΙῌ\x14$ήιΉΙΉͅ\x14$ῆΗ͂Η͂\x166ῆιΗ͂Ιῌ͂\x14\x1cηιῃΗΙ\x166ῒΙ" +
+	"̈̀Ϊ̀\x166ΐΪ́Ϊ́\x14$ῖΙ͂Ι͂\x166ῗΪ͂Ϊ͂\x166ῢΫ̀Ϋ̀\x166ΰΫ́Ϋ" +
+	"́\x14$ῤΡ̓Ρ̓\x14$ῦΥ͂Υ͂\x166ῧΫ͂Ϋ͂\x15-ὼιῺΙῺͅ\x14#ωιΩΙῼ\x14$ώιΏΙΏͅ" +
+	"\x14$ῶΩ͂Ω͂\x166ῶιΩ͂Ιῼ͂\x14\x1cωιῳΩΙ\x12\x10ωω\x11\x08kk\x12\x10åå\x12" +
+	"\x10ɫɫ\x12\x10ɽɽ\x10\x12ȺȺ\x10\x12ȾȾ\x12\x10ɑɑ\x12\x10ɱɱ\x12\x10ɐɐ\x12" +
+	"\x10ɒɒ\x12\x10ȿȿ\x12\x10ɀɀ\x12\x10ɥɥ\x12\x10ɦɦ\x12\x10ɜɜ\x12\x10ɡɡ\x12" +
+	"\x10ɬɬ\x12\x10ɪɪ\x12\x10ʞʞ\x12\x10ʇʇ\x12\x10ʝʝ\x12\x10ʂʂ\x12\x12ffFFFf" +
+	"\x12\x12fiFIFi\x12\x12flFLFl\x13\x1bffiFFIFfi\x13\x1bfflFFLFfl\x12\x12st" +
+	"STSt\x12\x12stSTSt\x14$մնՄՆՄն\x14$մեՄԵՄե\x14$միՄԻՄի\x14$վնՎՆՎն\x14$մխՄԽՄ" +
+	"խ"
+
+// 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 *caseTrie) lookup(s []byte) (v uint16, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return caseValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupUnsafe(s []byte) uint16 {
+	c0 := s[0]
+	if c0 < 0x80 { // is ASCII
+		return caseValues[c0]
+	}
+	i := caseIndex[c0]
+	if c0 < 0xE0 { // 2-byte UTF-8
+		return t.lookupValue(uint32(i), s[1])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[1])]
+	if c0 < 0xF0 { // 3-byte UTF-8
+		return t.lookupValue(uint32(i), s[2])
+	}
+	i = caseIndex[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 *caseTrie) lookupString(s string) (v uint16, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return caseValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupStringUnsafe(s string) uint16 {
+	c0 := s[0]
+	if c0 < 0x80 { // is ASCII
+		return caseValues[c0]
+	}
+	i := caseIndex[c0]
+	if c0 < 0xE0 { // 2-byte UTF-8
+		return t.lookupValue(uint32(i), s[1])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[1])]
+	if c0 < 0xF0 { // 3-byte UTF-8
+		return t.lookupValue(uint32(i), s[2])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[2])]
+	if c0 < 0xF8 { // 4-byte UTF-8
+		return t.lookupValue(uint32(i), s[3])
+	}
+	return 0
+}
+
+// caseTrie. Total size: 12538 bytes (12.24 KiB). Checksum: af4dfa7d60c71d4c.
+type caseTrie struct{}
+
+func newCaseTrie(i int) *caseTrie {
+	return &caseTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *caseTrie) lookupValue(n uint32, b byte) uint16 {
+	switch {
+	case n < 20:
+		return uint16(caseValues[n<<6+uint32(b)])
+	default:
+		n -= 20
+		return uint16(sparse.lookup(n, b))
+	}
+}
+
+// caseValues: 22 blocks, 1408 entries, 2816 bytes
+// The third block is the zero block.
+var caseValues = [1408]uint16{
+	// Block 0x0, offset 0x0
+	0x27: 0x0054,
+	0x2e: 0x0054,
+	0x30: 0x0010, 0x31: 0x0010, 0x32: 0x0010, 0x33: 0x0010, 0x34: 0x0010, 0x35: 0x0010,
+	0x36: 0x0010, 0x37: 0x0010, 0x38: 0x0010, 0x39: 0x0010, 0x3a: 0x0054,
+	// Block 0x1, offset 0x40
+	0x41: 0x2013, 0x42: 0x2013, 0x43: 0x2013, 0x44: 0x2013, 0x45: 0x2013,
+	0x46: 0x2013, 0x47: 0x2013, 0x48: 0x2013, 0x49: 0x2013, 0x4a: 0x2013, 0x4b: 0x2013,
+	0x4c: 0x2013, 0x4d: 0x2013, 0x4e: 0x2013, 0x4f: 0x2013, 0x50: 0x2013, 0x51: 0x2013,
+	0x52: 0x2013, 0x53: 0x2013, 0x54: 0x2013, 0x55: 0x2013, 0x56: 0x2013, 0x57: 0x2013,
+	0x58: 0x2013, 0x59: 0x2013, 0x5a: 0x2013,
+	0x5e: 0x0004, 0x5f: 0x0010, 0x60: 0x0004, 0x61: 0x2012, 0x62: 0x2012, 0x63: 0x2012,
+	0x64: 0x2012, 0x65: 0x2012, 0x66: 0x2012, 0x67: 0x2012, 0x68: 0x2012, 0x69: 0x2012,
+	0x6a: 0x2012, 0x6b: 0x2012, 0x6c: 0x2012, 0x6d: 0x2012, 0x6e: 0x2012, 0x6f: 0x2012,
+	0x70: 0x2012, 0x71: 0x2012, 0x72: 0x2012, 0x73: 0x2012, 0x74: 0x2012, 0x75: 0x2012,
+	0x76: 0x2012, 0x77: 0x2012, 0x78: 0x2012, 0x79: 0x2012, 0x7a: 0x2012,
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc0: 0x0852, 0xc1: 0x0b53, 0xc2: 0x0113, 0xc3: 0x0112, 0xc4: 0x0113, 0xc5: 0x0112,
+	0xc6: 0x0b53, 0xc7: 0x0f13, 0xc8: 0x0f12, 0xc9: 0x0e53, 0xca: 0x1153, 0xcb: 0x0713,
+	0xcc: 0x0712, 0xcd: 0x0012, 0xce: 0x1453, 0xcf: 0x1753, 0xd0: 0x1a53, 0xd1: 0x0313,
+	0xd2: 0x0312, 0xd3: 0x1d53, 0xd4: 0x2053, 0xd5: 0x2352, 0xd6: 0x2653, 0xd7: 0x2653,
+	0xd8: 0x0113, 0xd9: 0x0112, 0xda: 0x2952, 0xdb: 0x0012, 0xdc: 0x1d53, 0xdd: 0x2c53,
+	0xde: 0x2f52, 0xdf: 0x3253, 0xe0: 0x0113, 0xe1: 0x0112, 0xe2: 0x0113, 0xe3: 0x0112,
+	0xe4: 0x0113, 0xe5: 0x0112, 0xe6: 0x3553, 0xe7: 0x0f13, 0xe8: 0x0f12, 0xe9: 0x3853,
+	0xea: 0x0012, 0xeb: 0x0012, 0xec: 0x0113, 0xed: 0x0112, 0xee: 0x3553, 0xef: 0x1f13,
+	0xf0: 0x1f12, 0xf1: 0x3b53, 0xf2: 0x3e53, 0xf3: 0x0713, 0xf4: 0x0712, 0xf5: 0x0313,
+	0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010,
+	0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452,
+	// Block 0x4, offset 0x100
+	0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x02db, 0x105: 0x0359,
+	0x106: 0x03da, 0x107: 0x043b, 0x108: 0x04b9, 0x109: 0x053a, 0x10a: 0x059b, 0x10b: 0x0619,
+	0x10c: 0x069a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313,
+	0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13,
+	0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452,
+	0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112,
+	0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112,
+	0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112,
+	0x130: 0x06fa, 0x131: 0x07ab, 0x132: 0x0829, 0x133: 0x08aa, 0x134: 0x0113, 0x135: 0x0112,
+	0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112,
+	0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112,
+	// Block 0x5, offset 0x140
+	0x140: 0x0a8a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53,
+	0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112,
+	0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x0b0a, 0x151: 0x0b8a,
+	0x152: 0x0c0a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152,
+	0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x0c8a, 0x15d: 0x0012,
+	0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x0d0a, 0x162: 0x0012, 0x163: 0x2052,
+	0x164: 0x0012, 0x165: 0x0d8a, 0x166: 0x0e0a, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652,
+	0x16a: 0x0e8a, 0x16b: 0x0f0a, 0x16c: 0x0f8a, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52,
+	0x170: 0x0012, 0x171: 0x100a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252,
+	0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012,
+	0x17c: 0x0012, 0x17d: 0x108a, 0x17e: 0x0012, 0x17f: 0x0012,
+	// Block 0x6, offset 0x180
+	0x180: 0x3552, 0x181: 0x0012, 0x182: 0x110a, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012,
+	0x186: 0x0012, 0x187: 0x118a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52,
+	0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012,
+	0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012,
+	0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x120a,
+	0x19e: 0x128a, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012,
+	0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012,
+	0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012,
+	0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015,
+	0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014,
+	0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x130d,
+	0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024,
+	0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024,
+	0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024,
+	0x1d8: 0x0034, 0x1d9: 0x0034, 0x1da: 0x0034, 0x1db: 0x0024, 0x1dc: 0x0034, 0x1dd: 0x0034,
+	0x1de: 0x0034, 0x1df: 0x0034, 0x1e0: 0x0034, 0x1e1: 0x0034, 0x1e2: 0x0034, 0x1e3: 0x0024,
+	0x1e4: 0x0024, 0x1e5: 0x0024, 0x1e6: 0x0024, 0x1e7: 0x0024, 0x1e8: 0x0024, 0x1e9: 0x0024,
+	0x1ea: 0x0024, 0x1eb: 0x0024, 0x1ec: 0x0024, 0x1ed: 0x0024, 0x1ee: 0x0024, 0x1ef: 0x0024,
+	0x1f0: 0x0113, 0x1f1: 0x0112, 0x1f2: 0x0113, 0x1f3: 0x0112, 0x1f4: 0x0014, 0x1f5: 0x0004,
+	0x1f6: 0x0113, 0x1f7: 0x0112, 0x1fa: 0x0015, 0x1fb: 0x4d52,
+	0x1fc: 0x5052, 0x1fd: 0x5052, 0x1ff: 0x5353,
+	// Block 0x8, offset 0x200
+	0x204: 0x0004, 0x205: 0x0004,
+	0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513,
+	0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x138a, 0x211: 0x2013,
+	0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013,
+	0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013,
+	0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53,
+	0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53,
+	0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512,
+	0x230: 0x14ca, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012,
+	0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012,
+	0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012,
+	// Block 0x9, offset 0x240
+	0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x160a, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52,
+	0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52,
+	0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x168a, 0x251: 0x170a,
+	0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x178a, 0x256: 0x180a, 0x257: 0x1812,
+	0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112,
+	0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112,
+	0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112,
+	0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112,
+	0x270: 0x188a, 0x271: 0x190a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x198a,
+	0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112,
+	0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053,
+	// Block 0xa, offset 0x280
+	0x280: 0x6852, 0x281: 0x6852, 0x282: 0x6852, 0x283: 0x6852, 0x284: 0x6852, 0x285: 0x6852,
+	0x286: 0x6852, 0x287: 0x1a0a, 0x288: 0x0012, 0x28a: 0x0010,
+	0x291: 0x0034,
+	0x292: 0x0024, 0x293: 0x0024, 0x294: 0x0024, 0x295: 0x0024, 0x296: 0x0034, 0x297: 0x0024,
+	0x298: 0x0024, 0x299: 0x0024, 0x29a: 0x0034, 0x29b: 0x0034, 0x29c: 0x0024, 0x29d: 0x0024,
+	0x29e: 0x0024, 0x29f: 0x0024, 0x2a0: 0x0024, 0x2a1: 0x0024, 0x2a2: 0x0034, 0x2a3: 0x0034,
+	0x2a4: 0x0034, 0x2a5: 0x0034, 0x2a6: 0x0034, 0x2a7: 0x0034, 0x2a8: 0x0024, 0x2a9: 0x0024,
+	0x2aa: 0x0034, 0x2ab: 0x0024, 0x2ac: 0x0024, 0x2ad: 0x0034, 0x2ae: 0x0034, 0x2af: 0x0024,
+	0x2b0: 0x0034, 0x2b1: 0x0034, 0x2b2: 0x0034, 0x2b3: 0x0034, 0x2b4: 0x0034, 0x2b5: 0x0034,
+	0x2b6: 0x0034, 0x2b7: 0x0034, 0x2b8: 0x0034, 0x2b9: 0x0034, 0x2ba: 0x0034, 0x2bb: 0x0034,
+	0x2bc: 0x0034, 0x2bd: 0x0034, 0x2bf: 0x0034,
+	// Block 0xb, offset 0x2c0
+	0x2c0: 0x7053, 0x2c1: 0x7053, 0x2c2: 0x7053, 0x2c3: 0x7053, 0x2c4: 0x7053, 0x2c5: 0x7053,
+	0x2c7: 0x7053,
+	0x2cd: 0x7053, 0x2d0: 0x1aea, 0x2d1: 0x1b6a,
+	0x2d2: 0x1bea, 0x2d3: 0x1c6a, 0x2d4: 0x1cea, 0x2d5: 0x1d6a, 0x2d6: 0x1dea, 0x2d7: 0x1e6a,
+	0x2d8: 0x1eea, 0x2d9: 0x1f6a, 0x2da: 0x1fea, 0x2db: 0x206a, 0x2dc: 0x20ea, 0x2dd: 0x216a,
+	0x2de: 0x21ea, 0x2df: 0x226a, 0x2e0: 0x22ea, 0x2e1: 0x236a, 0x2e2: 0x23ea, 0x2e3: 0x246a,
+	0x2e4: 0x24ea, 0x2e5: 0x256a, 0x2e6: 0x25ea, 0x2e7: 0x266a, 0x2e8: 0x26ea, 0x2e9: 0x276a,
+	0x2ea: 0x27ea, 0x2eb: 0x286a, 0x2ec: 0x28ea, 0x2ed: 0x296a, 0x2ee: 0x29ea, 0x2ef: 0x2a6a,
+	0x2f0: 0x2aea, 0x2f1: 0x2b6a, 0x2f2: 0x2bea, 0x2f3: 0x2c6a, 0x2f4: 0x2cea, 0x2f5: 0x2d6a,
+	0x2f6: 0x2dea, 0x2f7: 0x2e6a, 0x2f8: 0x2eea, 0x2f9: 0x2f6a, 0x2fa: 0x2fea,
+	0x2fc: 0x0014, 0x2fd: 0x306a, 0x2fe: 0x30ea, 0x2ff: 0x316a,
+	// Block 0xc, offset 0x300
+	0x300: 0x0812, 0x301: 0x0812, 0x302: 0x0812, 0x303: 0x0812, 0x304: 0x0812, 0x305: 0x0812,
+	0x308: 0x0813, 0x309: 0x0813, 0x30a: 0x0813, 0x30b: 0x0813,
+	0x30c: 0x0813, 0x30d: 0x0813, 0x310: 0x3b1a, 0x311: 0x0812,
+	0x312: 0x3bfa, 0x313: 0x0812, 0x314: 0x3d3a, 0x315: 0x0812, 0x316: 0x3e7a, 0x317: 0x0812,
+	0x319: 0x0813, 0x31b: 0x0813, 0x31d: 0x0813,
+	0x31f: 0x0813, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0x0812, 0x323: 0x0812,
+	0x324: 0x0812, 0x325: 0x0812, 0x326: 0x0812, 0x327: 0x0812, 0x328: 0x0813, 0x329: 0x0813,
+	0x32a: 0x0813, 0x32b: 0x0813, 0x32c: 0x0813, 0x32d: 0x0813, 0x32e: 0x0813, 0x32f: 0x0813,
+	0x330: 0x9252, 0x331: 0x9252, 0x332: 0x9552, 0x333: 0x9552, 0x334: 0x9852, 0x335: 0x9852,
+	0x336: 0x9b52, 0x337: 0x9b52, 0x338: 0x9e52, 0x339: 0x9e52, 0x33a: 0xa152, 0x33b: 0xa152,
+	0x33c: 0x4d52, 0x33d: 0x4d52,
+	// Block 0xd, offset 0x340
+	0x340: 0x3fba, 0x341: 0x40aa, 0x342: 0x419a, 0x343: 0x428a, 0x344: 0x437a, 0x345: 0x446a,
+	0x346: 0x455a, 0x347: 0x464a, 0x348: 0x4739, 0x349: 0x4829, 0x34a: 0x4919, 0x34b: 0x4a09,
+	0x34c: 0x4af9, 0x34d: 0x4be9, 0x34e: 0x4cd9, 0x34f: 0x4dc9, 0x350: 0x4eba, 0x351: 0x4faa,
+	0x352: 0x509a, 0x353: 0x518a, 0x354: 0x527a, 0x355: 0x536a, 0x356: 0x545a, 0x357: 0x554a,
+	0x358: 0x5639, 0x359: 0x5729, 0x35a: 0x5819, 0x35b: 0x5909, 0x35c: 0x59f9, 0x35d: 0x5ae9,
+	0x35e: 0x5bd9, 0x35f: 0x5cc9, 0x360: 0x5dba, 0x361: 0x5eaa, 0x362: 0x5f9a, 0x363: 0x608a,
+	0x364: 0x617a, 0x365: 0x626a, 0x366: 0x635a, 0x367: 0x644a, 0x368: 0x6539, 0x369: 0x6629,
+	0x36a: 0x6719, 0x36b: 0x6809, 0x36c: 0x68f9, 0x36d: 0x69e9, 0x36e: 0x6ad9, 0x36f: 0x6bc9,
+	0x370: 0x0812, 0x371: 0x0812, 0x372: 0x6cba, 0x373: 0x6dca, 0x374: 0x6e9a,
+	0x376: 0x6f7a, 0x377: 0x705a, 0x378: 0x0813, 0x379: 0x0813, 0x37a: 0x9253, 0x37b: 0x9253,
+	0x37c: 0x7199, 0x37d: 0x0004, 0x37e: 0x726a, 0x37f: 0x0004,
+	// Block 0xe, offset 0x380
+	0x380: 0x0004, 0x381: 0x0004, 0x382: 0x72ea, 0x383: 0x73fa, 0x384: 0x74ca,
+	0x386: 0x75aa, 0x387: 0x768a, 0x388: 0x9553, 0x389: 0x9553, 0x38a: 0x9853, 0x38b: 0x9853,
+	0x38c: 0x77c9, 0x38d: 0x0004, 0x38e: 0x0004, 0x38f: 0x0004, 0x390: 0x0812, 0x391: 0x0812,
+	0x392: 0x789a, 0x393: 0x79da, 0x396: 0x7b1a, 0x397: 0x7bfa,
+	0x398: 0x0813, 0x399: 0x0813, 0x39a: 0x9b53, 0x39b: 0x9b53, 0x39d: 0x0004,
+	0x39e: 0x0004, 0x39f: 0x0004, 0x3a0: 0x0812, 0x3a1: 0x0812, 0x3a2: 0x7d3a, 0x3a3: 0x7e7a,
+	0x3a4: 0x7fba, 0x3a5: 0x0912, 0x3a6: 0x809a, 0x3a7: 0x817a, 0x3a8: 0x0813, 0x3a9: 0x0813,
+	0x3aa: 0xa153, 0x3ab: 0xa153, 0x3ac: 0x0913, 0x3ad: 0x0004, 0x3ae: 0x0004, 0x3af: 0x0004,
+	0x3b2: 0x82ba, 0x3b3: 0x83ca, 0x3b4: 0x849a,
+	0x3b6: 0x857a, 0x3b7: 0x865a, 0x3b8: 0x9e53, 0x3b9: 0x9e53, 0x3ba: 0x4d53, 0x3bb: 0x4d53,
+	0x3bc: 0x8799, 0x3bd: 0x0004, 0x3be: 0x0004,
+	// Block 0xf, offset 0x3c0
+	0x3c2: 0x0013,
+	0x3c7: 0x0013, 0x3ca: 0x0012, 0x3cb: 0x0013,
+	0x3cc: 0x0013, 0x3cd: 0x0013, 0x3ce: 0x0012, 0x3cf: 0x0012, 0x3d0: 0x0013, 0x3d1: 0x0013,
+	0x3d2: 0x0013, 0x3d3: 0x0012, 0x3d5: 0x0013,
+	0x3d9: 0x0013, 0x3da: 0x0013, 0x3db: 0x0013, 0x3dc: 0x0013, 0x3dd: 0x0013,
+	0x3e4: 0x0013, 0x3e6: 0x886b, 0x3e8: 0x0013,
+	0x3ea: 0x88cb, 0x3eb: 0x890b, 0x3ec: 0x0013, 0x3ed: 0x0013, 0x3ef: 0x0012,
+	0x3f0: 0x0013, 0x3f1: 0x0013, 0x3f2: 0xa453, 0x3f3: 0x0013, 0x3f4: 0x0012, 0x3f5: 0x0010,
+	0x3f6: 0x0010, 0x3f7: 0x0010, 0x3f8: 0x0010, 0x3f9: 0x0012,
+	0x3fc: 0x0012, 0x3fd: 0x0012, 0x3fe: 0x0013, 0x3ff: 0x0013,
+	// Block 0x10, offset 0x400
+	0x400: 0x1a13, 0x401: 0x1a13, 0x402: 0x1e13, 0x403: 0x1e13, 0x404: 0x1a13, 0x405: 0x1a13,
+	0x406: 0x2613, 0x407: 0x2613, 0x408: 0x2a13, 0x409: 0x2a13, 0x40a: 0x2e13, 0x40b: 0x2e13,
+	0x40c: 0x2a13, 0x40d: 0x2a13, 0x40e: 0x2613, 0x40f: 0x2613, 0x410: 0xa752, 0x411: 0xa752,
+	0x412: 0xaa52, 0x413: 0xaa52, 0x414: 0xad52, 0x415: 0xad52, 0x416: 0xaa52, 0x417: 0xaa52,
+	0x418: 0xa752, 0x419: 0xa752, 0x41a: 0x1a12, 0x41b: 0x1a12, 0x41c: 0x1e12, 0x41d: 0x1e12,
+	0x41e: 0x1a12, 0x41f: 0x1a12, 0x420: 0x2612, 0x421: 0x2612, 0x422: 0x2a12, 0x423: 0x2a12,
+	0x424: 0x2e12, 0x425: 0x2e12, 0x426: 0x2a12, 0x427: 0x2a12, 0x428: 0x2612, 0x429: 0x2612,
+	// Block 0x11, offset 0x440
+	0x440: 0x6552, 0x441: 0x6552, 0x442: 0x6552, 0x443: 0x6552, 0x444: 0x6552, 0x445: 0x6552,
+	0x446: 0x6552, 0x447: 0x6552, 0x448: 0x6552, 0x449: 0x6552, 0x44a: 0x6552, 0x44b: 0x6552,
+	0x44c: 0x6552, 0x44d: 0x6552, 0x44e: 0x6552, 0x44f: 0x6552, 0x450: 0xb052, 0x451: 0xb052,
+	0x452: 0xb052, 0x453: 0xb052, 0x454: 0xb052, 0x455: 0xb052, 0x456: 0xb052, 0x457: 0xb052,
+	0x458: 0xb052, 0x459: 0xb052, 0x45a: 0xb052, 0x45b: 0xb052, 0x45c: 0xb052, 0x45d: 0xb052,
+	0x45e: 0xb052, 0x460: 0x0113, 0x461: 0x0112, 0x462: 0x896b, 0x463: 0x8b53,
+	0x464: 0x89cb, 0x465: 0x8a2a, 0x466: 0x8a8a, 0x467: 0x0f13, 0x468: 0x0f12, 0x469: 0x0313,
+	0x46a: 0x0312, 0x46b: 0x0713, 0x46c: 0x0712, 0x46d: 0x8aeb, 0x46e: 0x8b4b, 0x46f: 0x8bab,
+	0x470: 0x8c0b, 0x471: 0x0012, 0x472: 0x0113, 0x473: 0x0112, 0x474: 0x0012, 0x475: 0x0313,
+	0x476: 0x0312, 0x477: 0x0012, 0x478: 0x0012, 0x479: 0x0012, 0x47a: 0x0012, 0x47b: 0x0012,
+	0x47c: 0x0015, 0x47d: 0x0015, 0x47e: 0x8c6b, 0x47f: 0x8ccb,
+	// Block 0x12, offset 0x480
+	0x480: 0x0113, 0x481: 0x0112, 0x482: 0x0113, 0x483: 0x0112, 0x484: 0x0113, 0x485: 0x0112,
+	0x486: 0x0113, 0x487: 0x0112, 0x488: 0x0014, 0x489: 0x0014, 0x48a: 0x0014, 0x48b: 0x0713,
+	0x48c: 0x0712, 0x48d: 0x8d2b, 0x48e: 0x0012, 0x48f: 0x0010, 0x490: 0x0113, 0x491: 0x0112,
+	0x492: 0x0113, 0x493: 0x0112, 0x494: 0x6552, 0x495: 0x0012, 0x496: 0x0113, 0x497: 0x0112,
+	0x498: 0x0113, 0x499: 0x0112, 0x49a: 0x0113, 0x49b: 0x0112, 0x49c: 0x0113, 0x49d: 0x0112,
+	0x49e: 0x0113, 0x49f: 0x0112, 0x4a0: 0x0113, 0x4a1: 0x0112, 0x4a2: 0x0113, 0x4a3: 0x0112,
+	0x4a4: 0x0113, 0x4a5: 0x0112, 0x4a6: 0x0113, 0x4a7: 0x0112, 0x4a8: 0x0113, 0x4a9: 0x0112,
+	0x4aa: 0x8d8b, 0x4ab: 0x8deb, 0x4ac: 0x8e4b, 0x4ad: 0x8eab, 0x4ae: 0x8f0b, 0x4af: 0x0012,
+	0x4b0: 0x8f6b, 0x4b1: 0x8fcb, 0x4b2: 0x902b, 0x4b3: 0xb353, 0x4b4: 0x0113, 0x4b5: 0x0112,
+	0x4b6: 0x0113, 0x4b7: 0x0112, 0x4b8: 0x0113, 0x4b9: 0x0112, 0x4ba: 0x0113, 0x4bb: 0x0112,
+	0x4bc: 0x0113, 0x4bd: 0x0112, 0x4be: 0x0113, 0x4bf: 0x0112,
+	// Block 0x13, offset 0x4c0
+	0x4c0: 0x90ea, 0x4c1: 0x916a, 0x4c2: 0x91ea, 0x4c3: 0x926a, 0x4c4: 0x931a, 0x4c5: 0x93ca,
+	0x4c6: 0x944a,
+	0x4d3: 0x94ca, 0x4d4: 0x95aa, 0x4d5: 0x968a, 0x4d6: 0x976a, 0x4d7: 0x984a,
+	0x4dd: 0x0010,
+	0x4de: 0x0034, 0x4df: 0x0010, 0x4e0: 0x0010, 0x4e1: 0x0010, 0x4e2: 0x0010, 0x4e3: 0x0010,
+	0x4e4: 0x0010, 0x4e5: 0x0010, 0x4e6: 0x0010, 0x4e7: 0x0010, 0x4e8: 0x0010,
+	0x4ea: 0x0010, 0x4eb: 0x0010, 0x4ec: 0x0010, 0x4ed: 0x0010, 0x4ee: 0x0010, 0x4ef: 0x0010,
+	0x4f0: 0x0010, 0x4f1: 0x0010, 0x4f2: 0x0010, 0x4f3: 0x0010, 0x4f4: 0x0010, 0x4f5: 0x0010,
+	0x4f6: 0x0010, 0x4f8: 0x0010, 0x4f9: 0x0010, 0x4fa: 0x0010, 0x4fb: 0x0010,
+	0x4fc: 0x0010, 0x4fe: 0x0010,
+	// Block 0x14, offset 0x500
+	0x500: 0x2213, 0x501: 0x2213, 0x502: 0x2613, 0x503: 0x2613, 0x504: 0x2213, 0x505: 0x2213,
+	0x506: 0x2e13, 0x507: 0x2e13, 0x508: 0x2213, 0x509: 0x2213, 0x50a: 0x2613, 0x50b: 0x2613,
+	0x50c: 0x2213, 0x50d: 0x2213, 0x50e: 0x3e13, 0x50f: 0x3e13, 0x510: 0x2213, 0x511: 0x2213,
+	0x512: 0x2613, 0x513: 0x2613, 0x514: 0x2213, 0x515: 0x2213, 0x516: 0x2e13, 0x517: 0x2e13,
+	0x518: 0x2213, 0x519: 0x2213, 0x51a: 0x2613, 0x51b: 0x2613, 0x51c: 0x2213, 0x51d: 0x2213,
+	0x51e: 0xbc53, 0x51f: 0xbc53, 0x520: 0xbf53, 0x521: 0xbf53, 0x522: 0x2212, 0x523: 0x2212,
+	0x524: 0x2612, 0x525: 0x2612, 0x526: 0x2212, 0x527: 0x2212, 0x528: 0x2e12, 0x529: 0x2e12,
+	0x52a: 0x2212, 0x52b: 0x2212, 0x52c: 0x2612, 0x52d: 0x2612, 0x52e: 0x2212, 0x52f: 0x2212,
+	0x530: 0x3e12, 0x531: 0x3e12, 0x532: 0x2212, 0x533: 0x2212, 0x534: 0x2612, 0x535: 0x2612,
+	0x536: 0x2212, 0x537: 0x2212, 0x538: 0x2e12, 0x539: 0x2e12, 0x53a: 0x2212, 0x53b: 0x2212,
+	0x53c: 0x2612, 0x53d: 0x2612, 0x53e: 0x2212, 0x53f: 0x2212,
+	// Block 0x15, offset 0x540
+	0x542: 0x0010,
+	0x547: 0x0010, 0x549: 0x0010, 0x54b: 0x0010,
+	0x54d: 0x0010, 0x54e: 0x0010, 0x54f: 0x0010, 0x551: 0x0010,
+	0x552: 0x0010, 0x554: 0x0010, 0x557: 0x0010,
+	0x559: 0x0010, 0x55b: 0x0010, 0x55d: 0x0010,
+	0x55f: 0x0010, 0x561: 0x0010, 0x562: 0x0010,
+	0x564: 0x0010, 0x567: 0x0010, 0x568: 0x0010, 0x569: 0x0010,
+	0x56a: 0x0010, 0x56c: 0x0010, 0x56d: 0x0010, 0x56e: 0x0010, 0x56f: 0x0010,
+	0x570: 0x0010, 0x571: 0x0010, 0x572: 0x0010, 0x574: 0x0010, 0x575: 0x0010,
+	0x576: 0x0010, 0x577: 0x0010, 0x579: 0x0010, 0x57a: 0x0010, 0x57b: 0x0010,
+	0x57c: 0x0010, 0x57e: 0x0010,
+}
+
+// caseIndex: 25 blocks, 1600 entries, 3200 bytes
+// Block 0 is the zero block.
+var caseIndex = [1600]uint16{
+	// Block 0x0, offset 0x0
+	// Block 0x1, offset 0x40
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc2: 0x14, 0xc3: 0x15, 0xc4: 0x16, 0xc5: 0x17, 0xc6: 0x01, 0xc7: 0x02,
+	0xc8: 0x18, 0xc9: 0x03, 0xca: 0x04, 0xcb: 0x19, 0xcc: 0x1a, 0xcd: 0x05, 0xce: 0x06, 0xcf: 0x07,
+	0xd0: 0x1b, 0xd1: 0x1c, 0xd2: 0x1d, 0xd3: 0x1e, 0xd4: 0x1f, 0xd5: 0x20, 0xd6: 0x08, 0xd7: 0x21,
+	0xd8: 0x22, 0xd9: 0x23, 0xda: 0x24, 0xdb: 0x25, 0xdc: 0x26, 0xdd: 0x27, 0xde: 0x28, 0xdf: 0x29,
+	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
+	0xea: 0x06, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x08, 0xef: 0x09,
+	0xf0: 0x14, 0xf3: 0x16,
+	// Block 0x4, offset 0x100
+	0x120: 0x2a, 0x121: 0x2b, 0x122: 0x2c, 0x123: 0x2d, 0x124: 0x2e, 0x125: 0x2f, 0x126: 0x30, 0x127: 0x31,
+	0x128: 0x32, 0x129: 0x33, 0x12a: 0x34, 0x12b: 0x35, 0x12c: 0x36, 0x12d: 0x37, 0x12e: 0x38, 0x12f: 0x39,
+	0x130: 0x3a, 0x131: 0x3b, 0x132: 0x3c, 0x133: 0x3d, 0x134: 0x3e, 0x135: 0x3f, 0x136: 0x40, 0x137: 0x41,
+	0x138: 0x42, 0x139: 0x43, 0x13a: 0x44, 0x13b: 0x45, 0x13c: 0x46, 0x13d: 0x47, 0x13e: 0x48, 0x13f: 0x49,
+	// Block 0x5, offset 0x140
+	0x140: 0x4a, 0x141: 0x4b, 0x142: 0x4c, 0x143: 0x09, 0x144: 0x24, 0x145: 0x24, 0x146: 0x24, 0x147: 0x24,
+	0x148: 0x24, 0x149: 0x4d, 0x14a: 0x4e, 0x14b: 0x4f, 0x14c: 0x50, 0x14d: 0x51, 0x14e: 0x52, 0x14f: 0x53,
+	0x150: 0x54, 0x151: 0x24, 0x152: 0x24, 0x153: 0x24, 0x154: 0x24, 0x155: 0x24, 0x156: 0x24, 0x157: 0x24,
+	0x158: 0x24, 0x159: 0x55, 0x15a: 0x56, 0x15b: 0x57, 0x15c: 0x58, 0x15d: 0x59, 0x15e: 0x5a, 0x15f: 0x5b,
+	0x160: 0x5c, 0x161: 0x5d, 0x162: 0x5e, 0x163: 0x5f, 0x164: 0x60, 0x165: 0x61, 0x167: 0x62,
+	0x168: 0x63, 0x169: 0x64, 0x16a: 0x65, 0x16b: 0x66, 0x16c: 0x67, 0x16d: 0x68, 0x16e: 0x69, 0x16f: 0x6a,
+	0x170: 0x6b, 0x171: 0x6c, 0x172: 0x6d, 0x173: 0x6e, 0x174: 0x6f, 0x175: 0x70, 0x176: 0x71, 0x177: 0x72,
+	0x178: 0x73, 0x179: 0x73, 0x17a: 0x74, 0x17b: 0x73, 0x17c: 0x75, 0x17d: 0x0a, 0x17e: 0x0b, 0x17f: 0x0c,
+	// Block 0x6, offset 0x180
+	0x180: 0x76, 0x181: 0x77, 0x182: 0x78, 0x183: 0x79, 0x184: 0x0d, 0x185: 0x7a, 0x186: 0x7b,
+	0x192: 0x7c, 0x193: 0x0e,
+	0x1b0: 0x7d, 0x1b1: 0x0f, 0x1b2: 0x73, 0x1b3: 0x7e, 0x1b4: 0x7f, 0x1b5: 0x80, 0x1b6: 0x81, 0x1b7: 0x82,
+	0x1b8: 0x83,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x84, 0x1c2: 0x85, 0x1c3: 0x86, 0x1c4: 0x87, 0x1c5: 0x24, 0x1c6: 0x88,
+	// Block 0x8, offset 0x200
+	0x200: 0x89, 0x201: 0x24, 0x202: 0x24, 0x203: 0x24, 0x204: 0x24, 0x205: 0x24, 0x206: 0x24, 0x207: 0x24,
+	0x208: 0x24, 0x209: 0x24, 0x20a: 0x24, 0x20b: 0x24, 0x20c: 0x24, 0x20d: 0x24, 0x20e: 0x24, 0x20f: 0x24,
+	0x210: 0x24, 0x211: 0x24, 0x212: 0x8a, 0x213: 0x8b, 0x214: 0x24, 0x215: 0x24, 0x216: 0x24, 0x217: 0x24,
+	0x218: 0x8c, 0x219: 0x8d, 0x21a: 0x8e, 0x21b: 0x8f, 0x21c: 0x90, 0x21d: 0x91, 0x21e: 0x10, 0x21f: 0x92,
+	0x220: 0x93, 0x221: 0x94, 0x222: 0x24, 0x223: 0x95, 0x224: 0x96, 0x225: 0x97, 0x226: 0x98, 0x227: 0x99,
+	0x228: 0x9a, 0x229: 0x9b, 0x22a: 0x9c, 0x22b: 0x9d, 0x22c: 0x9e, 0x22d: 0x9f, 0x22e: 0xa0, 0x22f: 0xa1,
+	0x230: 0x24, 0x231: 0x24, 0x232: 0x24, 0x233: 0x24, 0x234: 0x24, 0x235: 0x24, 0x236: 0x24, 0x237: 0x24,
+	0x238: 0x24, 0x239: 0x24, 0x23a: 0x24, 0x23b: 0x24, 0x23c: 0x24, 0x23d: 0x24, 0x23e: 0x24, 0x23f: 0x24,
+	// Block 0x9, offset 0x240
+	0x240: 0x24, 0x241: 0x24, 0x242: 0x24, 0x243: 0x24, 0x244: 0x24, 0x245: 0x24, 0x246: 0x24, 0x247: 0x24,
+	0x248: 0x24, 0x249: 0x24, 0x24a: 0x24, 0x24b: 0x24, 0x24c: 0x24, 0x24d: 0x24, 0x24e: 0x24, 0x24f: 0x24,
+	0x250: 0x24, 0x251: 0x24, 0x252: 0x24, 0x253: 0x24, 0x254: 0x24, 0x255: 0x24, 0x256: 0x24, 0x257: 0x24,
+	0x258: 0x24, 0x259: 0x24, 0x25a: 0x24, 0x25b: 0x24, 0x25c: 0x24, 0x25d: 0x24, 0x25e: 0x24, 0x25f: 0x24,
+	0x260: 0x24, 0x261: 0x24, 0x262: 0x24, 0x263: 0x24, 0x264: 0x24, 0x265: 0x24, 0x266: 0x24, 0x267: 0x24,
+	0x268: 0x24, 0x269: 0x24, 0x26a: 0x24, 0x26b: 0x24, 0x26c: 0x24, 0x26d: 0x24, 0x26e: 0x24, 0x26f: 0x24,
+	0x270: 0x24, 0x271: 0x24, 0x272: 0x24, 0x273: 0x24, 0x274: 0x24, 0x275: 0x24, 0x276: 0x24, 0x277: 0x24,
+	0x278: 0x24, 0x279: 0x24, 0x27a: 0x24, 0x27b: 0x24, 0x27c: 0x24, 0x27d: 0x24, 0x27e: 0x24, 0x27f: 0x24,
+	// Block 0xa, offset 0x280
+	0x280: 0x24, 0x281: 0x24, 0x282: 0x24, 0x283: 0x24, 0x284: 0x24, 0x285: 0x24, 0x286: 0x24, 0x287: 0x24,
+	0x288: 0x24, 0x289: 0x24, 0x28a: 0x24, 0x28b: 0x24, 0x28c: 0x24, 0x28d: 0x24, 0x28e: 0x24, 0x28f: 0x24,
+	0x290: 0x24, 0x291: 0x24, 0x292: 0x24, 0x293: 0x24, 0x294: 0x24, 0x295: 0x24, 0x296: 0x24, 0x297: 0x24,
+	0x298: 0x24, 0x299: 0x24, 0x29a: 0x24, 0x29b: 0x24, 0x29c: 0x24, 0x29d: 0x24, 0x29e: 0xa2, 0x29f: 0xa3,
+	// Block 0xb, offset 0x2c0
+	0x2ec: 0x11, 0x2ed: 0xa4, 0x2ee: 0xa5, 0x2ef: 0xa6,
+	0x2f0: 0x24, 0x2f1: 0x24, 0x2f2: 0x24, 0x2f3: 0x24, 0x2f4: 0xa7, 0x2f5: 0xa8, 0x2f6: 0xa9, 0x2f7: 0xaa,
+	0x2f8: 0xab, 0x2f9: 0xac, 0x2fa: 0x24, 0x2fb: 0xad, 0x2fc: 0xae, 0x2fd: 0xaf, 0x2fe: 0xb0, 0x2ff: 0xb1,
+	// Block 0xc, offset 0x300
+	0x300: 0xb2, 0x301: 0xb3, 0x302: 0x24, 0x303: 0xb4, 0x305: 0xb5, 0x307: 0xb6,
+	0x30a: 0xb7, 0x30b: 0xb8, 0x30c: 0xb9, 0x30d: 0xba, 0x30e: 0xbb, 0x30f: 0xbc,
+	0x310: 0xbd, 0x311: 0xbe, 0x312: 0xbf, 0x313: 0xc0, 0x314: 0xc1, 0x315: 0xc2,
+	0x318: 0x24, 0x319: 0x24, 0x31a: 0x24, 0x31b: 0x24, 0x31c: 0xc3, 0x31d: 0xc4,
+	0x320: 0xc5, 0x321: 0xc6, 0x322: 0xc7, 0x323: 0xc8, 0x324: 0xc9, 0x326: 0xca,
+	0x328: 0xcb, 0x329: 0xcc, 0x32a: 0xcd, 0x32b: 0xce, 0x32c: 0x5f, 0x32d: 0xcf, 0x32e: 0xd0,
+	0x330: 0x24, 0x331: 0xd1, 0x332: 0xd2, 0x333: 0xd3, 0x334: 0xd4,
+	0x33a: 0xd5, 0x33c: 0xd6, 0x33d: 0xd7, 0x33e: 0xd8, 0x33f: 0xd9,
+	// Block 0xd, offset 0x340
+	0x340: 0xda, 0x341: 0xdb, 0x342: 0xdc, 0x343: 0xdd, 0x344: 0xde, 0x345: 0xdf, 0x346: 0xe0, 0x347: 0xe1,
+	0x348: 0xe2, 0x34a: 0xe3, 0x34b: 0xe4, 0x34c: 0xe5, 0x34d: 0xe6,
+	0x350: 0xe7, 0x351: 0xe8, 0x352: 0xe9, 0x353: 0xea, 0x356: 0xeb, 0x357: 0xec,
+	0x358: 0xed, 0x359: 0xee, 0x35a: 0xef, 0x35b: 0xf0, 0x35c: 0xf1,
+	0x360: 0xf2, 0x362: 0xf3, 0x363: 0xf4, 0x364: 0xf5, 0x365: 0xf6, 0x366: 0xf7, 0x367: 0xf8,
+	0x368: 0xf9, 0x369: 0xfa, 0x36a: 0xfb, 0x36b: 0xfc,
+	0x370: 0xfd, 0x371: 0xfe, 0x372: 0xff, 0x374: 0x100, 0x375: 0x101, 0x376: 0x102,
+	0x37b: 0x103, 0x37e: 0x104,
+	// Block 0xe, offset 0x380
+	0x380: 0x24, 0x381: 0x24, 0x382: 0x24, 0x383: 0x24, 0x384: 0x24, 0x385: 0x24, 0x386: 0x24, 0x387: 0x24,
+	0x388: 0x24, 0x389: 0x24, 0x38a: 0x24, 0x38b: 0x24, 0x38c: 0x24, 0x38d: 0x24, 0x38e: 0x105,
+	0x390: 0x24, 0x391: 0x106, 0x392: 0x24, 0x393: 0x24, 0x394: 0x24, 0x395: 0x107,
+	// Block 0xf, offset 0x3c0
+	0x3c0: 0x24, 0x3c1: 0x24, 0x3c2: 0x24, 0x3c3: 0x24, 0x3c4: 0x24, 0x3c5: 0x24, 0x3c6: 0x24, 0x3c7: 0x24,
+	0x3c8: 0x24, 0x3c9: 0x24, 0x3ca: 0x24, 0x3cb: 0x24, 0x3cc: 0x24, 0x3cd: 0x24, 0x3ce: 0x24, 0x3cf: 0x24,
+	0x3d0: 0x108,
+	// Block 0x10, offset 0x400
+	0x410: 0x24, 0x411: 0x24, 0x412: 0x24, 0x413: 0x24, 0x414: 0x24, 0x415: 0x24, 0x416: 0x24, 0x417: 0x24,
+	0x418: 0x24, 0x419: 0x109,
+	// Block 0x11, offset 0x440
+	0x460: 0x24, 0x461: 0x24, 0x462: 0x24, 0x463: 0x24, 0x464: 0x24, 0x465: 0x24, 0x466: 0x24, 0x467: 0x24,
+	0x468: 0xfc, 0x469: 0x10a, 0x46b: 0x10b, 0x46c: 0x10c, 0x46d: 0x10d, 0x46e: 0x10e,
+	0x479: 0x10f, 0x47c: 0x24, 0x47d: 0x110, 0x47e: 0x111, 0x47f: 0x112,
+	// Block 0x12, offset 0x480
+	0x4b0: 0x24, 0x4b1: 0x113, 0x4b2: 0x114,
+	// Block 0x13, offset 0x4c0
+	0x4c5: 0x115, 0x4c6: 0x116,
+	0x4c9: 0x117,
+	0x4d0: 0x118, 0x4d1: 0x119, 0x4d2: 0x11a, 0x4d3: 0x11b, 0x4d4: 0x11c, 0x4d5: 0x11d, 0x4d6: 0x11e, 0x4d7: 0x11f,
+	0x4d8: 0x120, 0x4d9: 0x121, 0x4da: 0x122, 0x4db: 0x123, 0x4dc: 0x124, 0x4dd: 0x125, 0x4de: 0x126, 0x4df: 0x127,
+	0x4e8: 0x128, 0x4e9: 0x129, 0x4ea: 0x12a,
+	// Block 0x14, offset 0x500
+	0x500: 0x12b, 0x504: 0x12c, 0x505: 0x12d,
+	0x50b: 0x12e,
+	0x520: 0x24, 0x521: 0x24, 0x522: 0x24, 0x523: 0x12f, 0x524: 0x12, 0x525: 0x130,
+	0x538: 0x131, 0x539: 0x13, 0x53a: 0x132,
+	// Block 0x15, offset 0x540
+	0x544: 0x133, 0x545: 0x134, 0x546: 0x135,
+	0x54f: 0x136,
+	0x56f: 0x137,
+	// Block 0x16, offset 0x580
+	0x590: 0x0a, 0x591: 0x0b, 0x592: 0x0c, 0x593: 0x0d, 0x594: 0x0e, 0x596: 0x0f,
+	0x59b: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13,
+	// Block 0x17, offset 0x5c0
+	0x5c0: 0x138, 0x5c1: 0x139, 0x5c4: 0x139, 0x5c5: 0x139, 0x5c6: 0x139, 0x5c7: 0x13a,
+	// Block 0x18, offset 0x600
+	0x620: 0x15,
+}
+
+// sparseOffsets: 296 entries, 592 bytes
+var sparseOffsets = []uint16{0x0, 0x9, 0xf, 0x18, 0x24, 0x2e, 0x34, 0x37, 0x3b, 0x3e, 0x42, 0x4c, 0x4e, 0x57, 0x5e, 0x63, 0x71, 0x72, 0x80, 0x8f, 0x99, 0x9c, 0xa3, 0xab, 0xae, 0xb0, 0xc0, 0xc6, 0xd4, 0xdf, 0xec, 0xf7, 0x103, 0x10d, 0x119, 0x124, 0x130, 0x13c, 0x144, 0x14d, 0x157, 0x162, 0x16e, 0x174, 0x17f, 0x185, 0x18d, 0x190, 0x195, 0x199, 0x19d, 0x1a4, 0x1ad, 0x1b5, 0x1b6, 0x1bf, 0x1c6, 0x1ce, 0x1d4, 0x1d9, 0x1dd, 0x1e0, 0x1e2, 0x1e5, 0x1ea, 0x1eb, 0x1ed, 0x1ef, 0x1f1, 0x1f8, 0x1fd, 0x201, 0x20a, 0x20d, 0x210, 0x216, 0x217, 0x222, 0x223, 0x224, 0x229, 0x236, 0x23f, 0x240, 0x248, 0x251, 0x25a, 0x263, 0x268, 0x26b, 0x276, 0x284, 0x286, 0x28d, 0x291, 0x29d, 0x29e, 0x2a9, 0x2b1, 0x2b9, 0x2bf, 0x2c0, 0x2ce, 0x2d3, 0x2d6, 0x2db, 0x2df, 0x2e5, 0x2ea, 0x2ed, 0x2f2, 0x2f7, 0x2f8, 0x2fe, 0x300, 0x301, 0x303, 0x305, 0x308, 0x309, 0x30b, 0x30e, 0x314, 0x318, 0x31a, 0x31f, 0x326, 0x331, 0x33b, 0x33c, 0x345, 0x349, 0x34e, 0x356, 0x35c, 0x362, 0x36c, 0x371, 0x37a, 0x380, 0x389, 0x38d, 0x395, 0x397, 0x399, 0x39c, 0x39e, 0x3a0, 0x3a1, 0x3a2, 0x3a4, 0x3a6, 0x3ac, 0x3b1, 0x3b3, 0x3ba, 0x3bd, 0x3bf, 0x3c5, 0x3ca, 0x3cc, 0x3cd, 0x3ce, 0x3cf, 0x3d1, 0x3d3, 0x3d5, 0x3d8, 0x3da, 0x3dd, 0x3e5, 0x3e8, 0x3ec, 0x3f4, 0x3f6, 0x3f7, 0x3f8, 0x3fa, 0x400, 0x402, 0x403, 0x405, 0x407, 0x409, 0x416, 0x417, 0x418, 0x41c, 0x41e, 0x41f, 0x420, 0x421, 0x422, 0x425, 0x428, 0x42b, 0x431, 0x432, 0x434, 0x438, 0x43c, 0x442, 0x445, 0x44c, 0x450, 0x454, 0x45d, 0x466, 0x46c, 0x472, 0x47c, 0x486, 0x488, 0x491, 0x497, 0x49d, 0x4a3, 0x4a6, 0x4ac, 0x4af, 0x4b8, 0x4b9, 0x4c0, 0x4c4, 0x4c5, 0x4c8, 0x4d2, 0x4d5, 0x4d7, 0x4de, 0x4e6, 0x4ec, 0x4f2, 0x4f3, 0x4f9, 0x4fc, 0x504, 0x50b, 0x515, 0x51d, 0x520, 0x521, 0x522, 0x523, 0x524, 0x526, 0x527, 0x529, 0x52b, 0x52d, 0x531, 0x532, 0x534, 0x537, 0x539, 0x53c, 0x53e, 0x543, 0x548, 0x54c, 0x54d, 0x550, 0x554, 0x55f, 0x563, 0x56b, 0x570, 0x574, 0x577, 0x57b, 0x57e, 0x581, 0x586, 0x58a, 0x58e, 0x592, 0x596, 0x598, 0x59a, 0x59d, 0x5a2, 0x5a5, 0x5a7, 0x5aa, 0x5ac, 0x5b2, 0x5bb, 0x5c0, 0x5c1, 0x5c4, 0x5c5, 0x5c6, 0x5c7, 0x5c9, 0x5ca, 0x5cb}
+
+// sparseValues: 1483 entries, 5932 bytes
+var sparseValues = [1483]valueRange{
+	// Block 0x0, offset 0x0
+	{value: 0x0004, lo: 0xa8, hi: 0xa8},
+	{value: 0x0012, lo: 0xaa, hi: 0xaa},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0004, lo: 0xaf, hi: 0xaf},
+	{value: 0x0004, lo: 0xb4, hi: 0xb4},
+	{value: 0x001a, lo: 0xb5, hi: 0xb5},
+	{value: 0x0054, lo: 0xb7, hi: 0xb7},
+	{value: 0x0004, lo: 0xb8, hi: 0xb8},
+	{value: 0x0012, lo: 0xba, hi: 0xba},
+	// Block 0x1, offset 0x9
+	{value: 0x2013, lo: 0x80, hi: 0x96},
+	{value: 0x2013, lo: 0x98, hi: 0x9e},
+	{value: 0x009a, lo: 0x9f, hi: 0x9f},
+	{value: 0x2012, lo: 0xa0, hi: 0xb6},
+	{value: 0x2012, lo: 0xb8, hi: 0xbe},
+	{value: 0x0252, lo: 0xbf, hi: 0xbf},
+	// Block 0x2, offset 0xf
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x011b, lo: 0xb0, hi: 0xb0},
+	{value: 0x019a, lo: 0xb1, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xb7},
+	{value: 0x0012, lo: 0xb8, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x0316, lo: 0xbd, hi: 0xbe},
+	{value: 0x0553, lo: 0xbf, hi: 0xbf},
+	// Block 0x3, offset 0x18
+	{value: 0x0552, lo: 0x80, hi: 0x80},
+	{value: 0x0316, lo: 0x81, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0316, lo: 0x85, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x01da, lo: 0x89, hi: 0x89},
+	{value: 0x0117, lo: 0x8a, hi: 0xb7},
+	{value: 0x0253, lo: 0xb8, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x0316, lo: 0xbd, hi: 0xbe},
+	{value: 0x028a, lo: 0xbf, hi: 0xbf},
+	// Block 0x4, offset 0x24
+	{value: 0x0117, lo: 0x80, hi: 0x9f},
+	{value: 0x2f53, lo: 0xa0, hi: 0xa0},
+	{value: 0x0012, lo: 0xa1, hi: 0xa1},
+	{value: 0x0117, lo: 0xa2, hi: 0xb3},
+	{value: 0x0012, lo: 0xb4, hi: 0xb9},
+	{value: 0x090b, lo: 0xba, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x2953, lo: 0xbd, hi: 0xbd},
+	{value: 0x098b, lo: 0xbe, hi: 0xbe},
+	{value: 0x0a0a, lo: 0xbf, hi: 0xbf},
+	// Block 0x5, offset 0x2e
+	{value: 0x0015, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x97},
+	{value: 0x0004, lo: 0x98, hi: 0x9d},
+	{value: 0x0014, lo: 0x9e, hi: 0x9f},
+	{value: 0x0015, lo: 0xa0, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xbf},
+	// Block 0x6, offset 0x34
+	{value: 0x0024, lo: 0x80, hi: 0x94},
+	{value: 0x0034, lo: 0x95, hi: 0xbc},
+	{value: 0x0024, lo: 0xbd, hi: 0xbf},
+	// Block 0x7, offset 0x37
+	{value: 0x6553, lo: 0x80, hi: 0x8f},
+	{value: 0x2013, lo: 0x90, hi: 0x9f},
+	{value: 0x5f53, lo: 0xa0, hi: 0xaf},
+	{value: 0x2012, lo: 0xb0, hi: 0xbf},
+	// Block 0x8, offset 0x3b
+	{value: 0x5f52, lo: 0x80, hi: 0x8f},
+	{value: 0x6552, lo: 0x90, hi: 0x9f},
+	{value: 0x0117, lo: 0xa0, hi: 0xbf},
+	// Block 0x9, offset 0x3e
+	{value: 0x0117, lo: 0x80, hi: 0x81},
+	{value: 0x0024, lo: 0x83, hi: 0x87},
+	{value: 0x0014, lo: 0x88, hi: 0x89},
+	{value: 0x0117, lo: 0x8a, hi: 0xbf},
+	// Block 0xa, offset 0x42
+	{value: 0x0f13, lo: 0x80, hi: 0x80},
+	{value: 0x0316, lo: 0x81, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0316, lo: 0x85, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x0316, lo: 0x89, hi: 0x8a},
+	{value: 0x0716, lo: 0x8b, hi: 0x8c},
+	{value: 0x0316, lo: 0x8d, hi: 0x8e},
+	{value: 0x0f12, lo: 0x8f, hi: 0x8f},
+	{value: 0x0117, lo: 0x90, hi: 0xbf},
+	// Block 0xb, offset 0x4c
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x6553, lo: 0xb1, hi: 0xbf},
+	// Block 0xc, offset 0x4e
+	{value: 0x3013, lo: 0x80, hi: 0x8f},
+	{value: 0x6853, lo: 0x90, hi: 0x96},
+	{value: 0x0014, lo: 0x99, hi: 0x99},
+	{value: 0x0010, lo: 0x9a, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0054, lo: 0x9f, hi: 0x9f},
+	{value: 0x0012, lo: 0xa0, hi: 0xa0},
+	{value: 0x6552, lo: 0xa1, hi: 0xaf},
+	{value: 0x3012, lo: 0xb0, hi: 0xbf},
+	// Block 0xd, offset 0x57
+	{value: 0x0034, lo: 0x81, hi: 0x82},
+	{value: 0x0024, lo: 0x84, hi: 0x84},
+	{value: 0x0034, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0xaa},
+	{value: 0x0010, lo: 0xaf, hi: 0xb3},
+	{value: 0x0054, lo: 0xb4, hi: 0xb4},
+	// Block 0xe, offset 0x5e
+	{value: 0x0014, lo: 0x80, hi: 0x85},
+	{value: 0x0024, lo: 0x90, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x9a},
+	{value: 0x0014, lo: 0x9c, hi: 0x9c},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xf, offset 0x63
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x8a},
+	{value: 0x0034, lo: 0x8b, hi: 0x92},
+	{value: 0x0024, lo: 0x93, hi: 0x94},
+	{value: 0x0034, lo: 0x95, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x9b},
+	{value: 0x0034, lo: 0x9c, hi: 0x9c},
+	{value: 0x0024, lo: 0x9d, hi: 0x9e},
+	{value: 0x0034, lo: 0x9f, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0010, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0034, lo: 0xb0, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xbf},
+	// Block 0x10, offset 0x71
+	{value: 0x0010, lo: 0x80, hi: 0xbf},
+	// Block 0x11, offset 0x72
+	{value: 0x0010, lo: 0x80, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x95},
+	{value: 0x0024, lo: 0x96, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x0024, lo: 0x9f, hi: 0xa2},
+	{value: 0x0034, lo: 0xa3, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa8},
+	{value: 0x0034, lo: 0xaa, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xbc},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x12, offset 0x80
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0034, lo: 0x91, hi: 0x91},
+	{value: 0x0010, lo: 0x92, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	{value: 0x0034, lo: 0xb1, hi: 0xb1},
+	{value: 0x0024, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0024, lo: 0xb5, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb9},
+	{value: 0x0024, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0024, lo: 0xbd, hi: 0xbd},
+	{value: 0x0034, lo: 0xbe, hi: 0xbe},
+	{value: 0x0024, lo: 0xbf, hi: 0xbf},
+	// Block 0x13, offset 0x8f
+	{value: 0x0024, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0024, lo: 0x83, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0024, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0024, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x88, hi: 0x88},
+	{value: 0x0024, lo: 0x89, hi: 0x8a},
+	{value: 0x0010, lo: 0x8d, hi: 0xbf},
+	// Block 0x14, offset 0x99
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0014, lo: 0xa6, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	// Block 0x15, offset 0x9c
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xb1},
+	{value: 0x0034, lo: 0xb2, hi: 0xb2},
+	{value: 0x0024, lo: 0xb3, hi: 0xb3},
+	{value: 0x0014, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	// Block 0x16, offset 0xa3
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0024, lo: 0x96, hi: 0x99},
+	{value: 0x0014, lo: 0x9a, hi: 0x9a},
+	{value: 0x0024, lo: 0x9b, hi: 0xa3},
+	{value: 0x0014, lo: 0xa4, hi: 0xa4},
+	{value: 0x0024, lo: 0xa5, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa8},
+	{value: 0x0024, lo: 0xa9, hi: 0xad},
+	// Block 0x17, offset 0xab
+	{value: 0x0010, lo: 0x80, hi: 0x98},
+	{value: 0x0034, lo: 0x99, hi: 0x9b},
+	{value: 0x0010, lo: 0xa0, hi: 0xaa},
+	// Block 0x18, offset 0xae
+	{value: 0x0010, lo: 0xa0, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0x19, offset 0xb0
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0034, lo: 0x93, hi: 0x93},
+	{value: 0x0024, lo: 0x94, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa2},
+	{value: 0x0034, lo: 0xa3, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xa9},
+	{value: 0x0024, lo: 0xaa, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xb2},
+	{value: 0x0024, lo: 0xb3, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	{value: 0x0024, lo: 0xb7, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0024, lo: 0xbb, hi: 0xbf},
+	// Block 0x1a, offset 0xc0
+	{value: 0x0014, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x1b, offset 0xc6
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x88},
+	{value: 0x0010, lo: 0x89, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0024, lo: 0x91, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x92},
+	{value: 0x0024, lo: 0x93, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x97},
+	{value: 0x0010, lo: 0x98, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xbf},
+	// Block 0x1c, offset 0xd4
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb2},
+	{value: 0x0010, lo: 0xb6, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x1d, offset 0xdf
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9c, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xb1},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	{value: 0x0024, lo: 0xbe, hi: 0xbe},
+	// Block 0x1e, offset 0xec
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8a},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb6},
+	{value: 0x0010, lo: 0xb8, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x1f, offset 0xf7
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0014, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x91, hi: 0x91},
+	{value: 0x0010, lo: 0x99, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb5},
+	// Block 0x20, offset 0x103
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x21, offset 0x10d
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x85},
+	{value: 0x0014, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x89, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xbf},
+	// Block 0x22, offset 0x119
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x23, offset 0x124
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9c, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	// Block 0x24, offset 0x130
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8a},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0x95},
+	{value: 0x0010, lo: 0x99, hi: 0x9a},
+	{value: 0x0010, lo: 0x9c, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	{value: 0x0010, lo: 0xa8, hi: 0xaa},
+	{value: 0x0010, lo: 0xae, hi: 0xb9},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x25, offset 0x13c
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x86, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	// Block 0x26, offset 0x144
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x83},
+	{value: 0x0014, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb9},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbf},
+	// Block 0x27, offset 0x14d
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0014, lo: 0x86, hi: 0x88},
+	{value: 0x0014, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0034, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9a},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	// Block 0x28, offset 0x157
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x29, offset 0x162
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0014, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xb2},
+	// Block 0x2a, offset 0x16e
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x2b, offset 0x174
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x86, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x94, hi: 0x97},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xba, hi: 0xbf},
+	// Block 0x2c, offset 0x17f
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x96},
+	{value: 0x0010, lo: 0x9a, hi: 0xb1},
+	{value: 0x0010, lo: 0xb3, hi: 0xbb},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x2d, offset 0x185
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0010, lo: 0x8f, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x94},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9f},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	// Block 0x2e, offset 0x18d
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb4, hi: 0xb7},
+	{value: 0x0034, lo: 0xb8, hi: 0xba},
+	// Block 0x2f, offset 0x190
+	{value: 0x0004, lo: 0x86, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x88, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x30, offset 0x195
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb4, hi: 0xb7},
+	{value: 0x0034, lo: 0xb8, hi: 0xba},
+	{value: 0x0014, lo: 0xbb, hi: 0xbc},
+	// Block 0x31, offset 0x199
+	{value: 0x0004, lo: 0x86, hi: 0x86},
+	{value: 0x0034, lo: 0x88, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x32, offset 0x19d
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0034, lo: 0x98, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0034, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0034, lo: 0xb9, hi: 0xb9},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x33, offset 0x1a4
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0x89, hi: 0xac},
+	{value: 0x0034, lo: 0xb1, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xba, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x34, offset 0x1ad
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0024, lo: 0x82, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0024, lo: 0x86, hi: 0x87},
+	{value: 0x0010, lo: 0x88, hi: 0x8c},
+	{value: 0x0014, lo: 0x8d, hi: 0x97},
+	{value: 0x0014, lo: 0x99, hi: 0xbc},
+	// Block 0x35, offset 0x1b5
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	// Block 0x36, offset 0x1b6
+	{value: 0x0010, lo: 0xab, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0010, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbc},
+	{value: 0x0014, lo: 0xbd, hi: 0xbe},
+	// Block 0x37, offset 0x1bf
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x96, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x99},
+	{value: 0x0014, lo: 0x9e, hi: 0xa0},
+	{value: 0x0010, lo: 0xa2, hi: 0xa4},
+	{value: 0x0010, lo: 0xa7, hi: 0xad},
+	{value: 0x0014, lo: 0xb1, hi: 0xb4},
+	// Block 0x38, offset 0x1c6
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x6c53, lo: 0xa0, hi: 0xbf},
+	// Block 0x39, offset 0x1ce
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0x9a, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x3a, offset 0x1d4
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb5},
+	{value: 0x0010, lo: 0xb8, hi: 0xbe},
+	// Block 0x3b, offset 0x1d9
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x82, hi: 0x85},
+	{value: 0x0010, lo: 0x88, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0xbf},
+	// Block 0x3c, offset 0x1dd
+	{value: 0x0010, lo: 0x80, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0x95},
+	{value: 0x0010, lo: 0x98, hi: 0xbf},
+	// Block 0x3d, offset 0x1e0
+	{value: 0x0010, lo: 0x80, hi: 0x9a},
+	{value: 0x0024, lo: 0x9d, hi: 0x9f},
+	// Block 0x3e, offset 0x1e2
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x7453, lo: 0xa0, hi: 0xaf},
+	{value: 0x7853, lo: 0xb0, hi: 0xbf},
+	// Block 0x3f, offset 0x1e5
+	{value: 0x7c53, lo: 0x80, hi: 0x8f},
+	{value: 0x8053, lo: 0x90, hi: 0x9f},
+	{value: 0x7c53, lo: 0xa0, hi: 0xaf},
+	{value: 0x0813, lo: 0xb0, hi: 0xb5},
+	{value: 0x0892, lo: 0xb8, hi: 0xbd},
+	// Block 0x40, offset 0x1ea
+	{value: 0x0010, lo: 0x81, hi: 0xbf},
+	// Block 0x41, offset 0x1eb
+	{value: 0x0010, lo: 0x80, hi: 0xac},
+	{value: 0x0010, lo: 0xaf, hi: 0xbf},
+	// Block 0x42, offset 0x1ed
+	{value: 0x0010, lo: 0x81, hi: 0x9a},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x43, offset 0x1ef
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0010, lo: 0xae, hi: 0xb8},
+	// Block 0x44, offset 0x1f1
+	{value: 0x0010, lo: 0x80, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x93},
+	{value: 0x0034, lo: 0x94, hi: 0x94},
+	{value: 0x0010, lo: 0xa0, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	// Block 0x45, offset 0x1f8
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x93},
+	{value: 0x0010, lo: 0xa0, hi: 0xac},
+	{value: 0x0010, lo: 0xae, hi: 0xb0},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	// Block 0x46, offset 0x1fd
+	{value: 0x0014, lo: 0xb4, hi: 0xb5},
+	{value: 0x0010, lo: 0xb6, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x47, offset 0x201
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0014, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x89, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x92},
+	{value: 0x0014, lo: 0x93, hi: 0x93},
+	{value: 0x0004, lo: 0x97, hi: 0x97},
+	{value: 0x0024, lo: 0x9d, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0x48, offset 0x20a
+	{value: 0x0014, lo: 0x8b, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x49, offset 0x20d
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0xb8},
+	// Block 0x4a, offset 0x210
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xa9},
+	{value: 0x0010, lo: 0xaa, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x4b, offset 0x216
+	{value: 0x0010, lo: 0x80, hi: 0xb5},
+	// Block 0x4c, offset 0x217
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0014, lo: 0xa0, hi: 0xa2},
+	{value: 0x0010, lo: 0xa3, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xab},
+	{value: 0x0010, lo: 0xb0, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb2},
+	{value: 0x0010, lo: 0xb3, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xb9},
+	{value: 0x0024, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbb},
+	// Block 0x4d, offset 0x222
+	{value: 0x0010, lo: 0x86, hi: 0x8f},
+	// Block 0x4e, offset 0x223
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x4f, offset 0x224
+	{value: 0x0010, lo: 0x80, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0x99, hi: 0x9a},
+	{value: 0x0014, lo: 0x9b, hi: 0x9b},
+	// Block 0x50, offset 0x229
+	{value: 0x0010, lo: 0x95, hi: 0x95},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x9e},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa2},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xac},
+	{value: 0x0010, lo: 0xad, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0024, lo: 0xb5, hi: 0xbc},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x51, offset 0x236
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0004, lo: 0xa7, hi: 0xa7},
+	{value: 0x0024, lo: 0xb0, hi: 0xb4},
+	{value: 0x0034, lo: 0xb5, hi: 0xba},
+	{value: 0x0024, lo: 0xbb, hi: 0xbc},
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x52, offset 0x23f
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	// Block 0x53, offset 0x240
+	{value: 0x0014, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x54, offset 0x248
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0030, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x8b},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0xab, hi: 0xab},
+	{value: 0x0034, lo: 0xac, hi: 0xac},
+	{value: 0x0024, lo: 0xad, hi: 0xb3},
+	// Block 0x55, offset 0x251
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa9},
+	{value: 0x0030, lo: 0xaa, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xbf},
+	// Block 0x56, offset 0x25a
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa9},
+	{value: 0x0010, lo: 0xaa, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb1},
+	{value: 0x0030, lo: 0xb2, hi: 0xb3},
+	// Block 0x57, offset 0x263
+	{value: 0x0010, lo: 0x80, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	// Block 0x58, offset 0x268
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8d, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	// Block 0x59, offset 0x26b
+	{value: 0x31ea, lo: 0x80, hi: 0x80},
+	{value: 0x326a, lo: 0x81, hi: 0x81},
+	{value: 0x32ea, lo: 0x82, hi: 0x82},
+	{value: 0x336a, lo: 0x83, hi: 0x83},
+	{value: 0x33ea, lo: 0x84, hi: 0x84},
+	{value: 0x346a, lo: 0x85, hi: 0x85},
+	{value: 0x34ea, lo: 0x86, hi: 0x86},
+	{value: 0x356a, lo: 0x87, hi: 0x87},
+	{value: 0x35ea, lo: 0x88, hi: 0x88},
+	{value: 0x8353, lo: 0x90, hi: 0xba},
+	{value: 0x8353, lo: 0xbd, hi: 0xbf},
+	// Block 0x5a, offset 0x276
+	{value: 0x0024, lo: 0x90, hi: 0x92},
+	{value: 0x0034, lo: 0x94, hi: 0x99},
+	{value: 0x0024, lo: 0x9a, hi: 0x9b},
+	{value: 0x0034, lo: 0x9c, hi: 0x9f},
+	{value: 0x0024, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0034, lo: 0xa2, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xb3},
+	{value: 0x0024, lo: 0xb4, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb7},
+	{value: 0x0024, lo: 0xb8, hi: 0xb9},
+	{value: 0x0010, lo: 0xba, hi: 0xba},
+	// Block 0x5b, offset 0x284
+	{value: 0x0012, lo: 0x80, hi: 0xab},
+	{value: 0x0015, lo: 0xac, hi: 0xbf},
+	// Block 0x5c, offset 0x286
+	{value: 0x0015, lo: 0x80, hi: 0xaa},
+	{value: 0x0012, lo: 0xab, hi: 0xb7},
+	{value: 0x0015, lo: 0xb8, hi: 0xb8},
+	{value: 0x8752, lo: 0xb9, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xbc},
+	{value: 0x8b52, lo: 0xbd, hi: 0xbd},
+	{value: 0x0012, lo: 0xbe, hi: 0xbf},
+	// Block 0x5d, offset 0x28d
+	{value: 0x0012, lo: 0x80, hi: 0x8d},
+	{value: 0x8f52, lo: 0x8e, hi: 0x8e},
+	{value: 0x0012, lo: 0x8f, hi: 0x9a},
+	{value: 0x0015, lo: 0x9b, hi: 0xbf},
+	// Block 0x5e, offset 0x291
+	{value: 0x0024, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0024, lo: 0x83, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0024, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x90},
+	{value: 0x0024, lo: 0x91, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb9},
+	{value: 0x0024, lo: 0xbb, hi: 0xbb},
+	{value: 0x0034, lo: 0xbc, hi: 0xbd},
+	{value: 0x0024, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x5f, offset 0x29d
+	{value: 0x0117, lo: 0x80, hi: 0xbf},
+	// Block 0x60, offset 0x29e
+	{value: 0x0117, lo: 0x80, hi: 0x95},
+	{value: 0x369a, lo: 0x96, hi: 0x96},
+	{value: 0x374a, lo: 0x97, hi: 0x97},
+	{value: 0x37fa, lo: 0x98, hi: 0x98},
+	{value: 0x38aa, lo: 0x99, hi: 0x99},
+	{value: 0x395a, lo: 0x9a, hi: 0x9a},
+	{value: 0x3a0a, lo: 0x9b, hi: 0x9b},
+	{value: 0x0012, lo: 0x9c, hi: 0x9d},
+	{value: 0x3abb, lo: 0x9e, hi: 0x9e},
+	{value: 0x0012, lo: 0x9f, hi: 0x9f},
+	{value: 0x0117, lo: 0xa0, hi: 0xbf},
+	// Block 0x61, offset 0x2a9
+	{value: 0x0812, lo: 0x80, hi: 0x87},
+	{value: 0x0813, lo: 0x88, hi: 0x8f},
+	{value: 0x0812, lo: 0x90, hi: 0x95},
+	{value: 0x0813, lo: 0x98, hi: 0x9d},
+	{value: 0x0812, lo: 0xa0, hi: 0xa7},
+	{value: 0x0813, lo: 0xa8, hi: 0xaf},
+	{value: 0x0812, lo: 0xb0, hi: 0xb7},
+	{value: 0x0813, lo: 0xb8, hi: 0xbf},
+	// Block 0x62, offset 0x2b1
+	{value: 0x0004, lo: 0x8b, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8f},
+	{value: 0x0054, lo: 0x98, hi: 0x99},
+	{value: 0x0054, lo: 0xa4, hi: 0xa4},
+	{value: 0x0054, lo: 0xa7, hi: 0xa7},
+	{value: 0x0014, lo: 0xaa, hi: 0xae},
+	{value: 0x0010, lo: 0xaf, hi: 0xaf},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x63, offset 0x2b9
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x94, hi: 0x94},
+	{value: 0x0014, lo: 0xa0, hi: 0xa4},
+	{value: 0x0014, lo: 0xa6, hi: 0xaf},
+	{value: 0x0015, lo: 0xb1, hi: 0xb1},
+	{value: 0x0015, lo: 0xbf, hi: 0xbf},
+	// Block 0x64, offset 0x2bf
+	{value: 0x0015, lo: 0x90, hi: 0x9c},
+	// Block 0x65, offset 0x2c0
+	{value: 0x0024, lo: 0x90, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x93},
+	{value: 0x0024, lo: 0x94, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x9a},
+	{value: 0x0024, lo: 0x9b, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0xa0},
+	{value: 0x0024, lo: 0xa1, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa4},
+	{value: 0x0034, lo: 0xa5, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa7},
+	{value: 0x0034, lo: 0xa8, hi: 0xa8},
+	{value: 0x0024, lo: 0xa9, hi: 0xa9},
+	{value: 0x0034, lo: 0xaa, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	// Block 0x66, offset 0x2ce
+	{value: 0x0016, lo: 0x85, hi: 0x86},
+	{value: 0x0012, lo: 0x87, hi: 0x89},
+	{value: 0xa452, lo: 0x8e, hi: 0x8e},
+	{value: 0x1013, lo: 0xa0, hi: 0xaf},
+	{value: 0x1012, lo: 0xb0, hi: 0xbf},
+	// Block 0x67, offset 0x2d3
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x88},
+	// Block 0x68, offset 0x2d6
+	{value: 0xa753, lo: 0xb6, hi: 0xb7},
+	{value: 0xaa53, lo: 0xb8, hi: 0xb9},
+	{value: 0xad53, lo: 0xba, hi: 0xbb},
+	{value: 0xaa53, lo: 0xbc, hi: 0xbd},
+	{value: 0xa753, lo: 0xbe, hi: 0xbf},
+	// Block 0x69, offset 0x2db
+	{value: 0x3013, lo: 0x80, hi: 0x8f},
+	{value: 0x6553, lo: 0x90, hi: 0x9f},
+	{value: 0xb053, lo: 0xa0, hi: 0xae},
+	{value: 0x3012, lo: 0xb0, hi: 0xbf},
+	// Block 0x6a, offset 0x2df
+	{value: 0x0117, lo: 0x80, hi: 0xa3},
+	{value: 0x0012, lo: 0xa4, hi: 0xa4},
+	{value: 0x0716, lo: 0xab, hi: 0xac},
+	{value: 0x0316, lo: 0xad, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xb3},
+	// Block 0x6b, offset 0x2e5
+	{value: 0x6c52, lo: 0x80, hi: 0x9f},
+	{value: 0x7052, lo: 0xa0, hi: 0xa5},
+	{value: 0x7052, lo: 0xa7, hi: 0xa7},
+	{value: 0x7052, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x6c, offset 0x2ea
+	{value: 0x0010, lo: 0x80, hi: 0xa7},
+	{value: 0x0014, lo: 0xaf, hi: 0xaf},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x6d, offset 0x2ed
+	{value: 0x0010, lo: 0x80, hi: 0x96},
+	{value: 0x0010, lo: 0xa0, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xae},
+	{value: 0x0010, lo: 0xb0, hi: 0xb6},
+	{value: 0x0010, lo: 0xb8, hi: 0xbe},
+	// Block 0x6e, offset 0x2f2
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9e},
+	{value: 0x0024, lo: 0xa0, hi: 0xbf},
+	// Block 0x6f, offset 0x2f7
+	{value: 0x0014, lo: 0xaf, hi: 0xaf},
+	// Block 0x70, offset 0x2f8
+	{value: 0x0014, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0xaa, hi: 0xad},
+	{value: 0x0030, lo: 0xae, hi: 0xaf},
+	{value: 0x0004, lo: 0xb1, hi: 0xb5},
+	{value: 0x0014, lo: 0xbb, hi: 0xbb},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	// Block 0x71, offset 0x2fe
+	{value: 0x0034, lo: 0x99, hi: 0x9a},
+	{value: 0x0004, lo: 0x9b, hi: 0x9e},
+	// Block 0x72, offset 0x300
+	{value: 0x0004, lo: 0xbc, hi: 0xbe},
+	// Block 0x73, offset 0x301
+	{value: 0x0010, lo: 0x85, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xbf},
+	// Block 0x74, offset 0x303
+	{value: 0x0010, lo: 0x80, hi: 0x8e},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x75, offset 0x305
+	{value: 0x0010, lo: 0x80, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0x96, hi: 0xbf},
+	// Block 0x76, offset 0x308
+	{value: 0x0010, lo: 0x80, hi: 0x8c},
+	// Block 0x77, offset 0x309
+	{value: 0x0010, lo: 0x90, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	// Block 0x78, offset 0x30b
+	{value: 0x0010, lo: 0x80, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0010, lo: 0x90, hi: 0xab},
+	// Block 0x79, offset 0x30e
+	{value: 0x0117, lo: 0x80, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb2},
+	{value: 0x0024, lo: 0xb4, hi: 0xbd},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x7a, offset 0x314
+	{value: 0x0117, lo: 0x80, hi: 0x9b},
+	{value: 0x0015, lo: 0x9c, hi: 0x9d},
+	{value: 0x0024, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x7b, offset 0x318
+	{value: 0x0010, lo: 0x80, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb1},
+	// Block 0x7c, offset 0x31a
+	{value: 0x0004, lo: 0x80, hi: 0x87},
+	{value: 0x0014, lo: 0x88, hi: 0xa1},
+	{value: 0x0117, lo: 0xa2, hi: 0xaf},
+	{value: 0x0012, lo: 0xb0, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xbf},
+	// Block 0x7d, offset 0x31f
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x0015, lo: 0xb0, hi: 0xb0},
+	{value: 0x0012, lo: 0xb1, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x8753, lo: 0xbd, hi: 0xbd},
+	{value: 0x0117, lo: 0xbe, hi: 0xbf},
+	// Block 0x7e, offset 0x326
+	{value: 0x0117, lo: 0x82, hi: 0x83},
+	{value: 0x6553, lo: 0x84, hi: 0x84},
+	{value: 0x908b, lo: 0x85, hi: 0x85},
+	{value: 0x8f53, lo: 0x86, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x0316, lo: 0x89, hi: 0x8a},
+	{value: 0x0316, lo: 0xb5, hi: 0xb6},
+	{value: 0x0010, lo: 0xb7, hi: 0xb7},
+	{value: 0x0015, lo: 0xb8, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbf},
+	// Block 0x7f, offset 0x331
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8b},
+	{value: 0x0010, lo: 0x8c, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa6},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0034, lo: 0xac, hi: 0xac},
+	// Block 0x80, offset 0x33b
+	{value: 0x0010, lo: 0x80, hi: 0xb3},
+	// Block 0x81, offset 0x33c
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x85},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0xa0, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb7},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x82, offset 0x345
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0014, lo: 0xa6, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x83, offset 0x349
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x91},
+	{value: 0x0010, lo: 0x92, hi: 0x92},
+	{value: 0x0030, lo: 0x93, hi: 0x93},
+	{value: 0x0010, lo: 0xa0, hi: 0xbc},
+	// Block 0x84, offset 0x34e
+	{value: 0x0014, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xb9},
+	{value: 0x0010, lo: 0xba, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x85, offset 0x356
+	{value: 0x0030, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0014, lo: 0xa5, hi: 0xa5},
+	{value: 0x0004, lo: 0xa6, hi: 0xa6},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x86, offset 0x35c
+	{value: 0x0010, lo: 0x80, hi: 0xa8},
+	{value: 0x0014, lo: 0xa9, hi: 0xae},
+	{value: 0x0010, lo: 0xaf, hi: 0xb0},
+	{value: 0x0014, lo: 0xb1, hi: 0xb2},
+	{value: 0x0010, lo: 0xb3, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb6},
+	// Block 0x87, offset 0x362
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0010, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0004, lo: 0xb0, hi: 0xb0},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x88, offset 0x36c
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	{value: 0x0024, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0024, lo: 0xb7, hi: 0xb8},
+	{value: 0x0024, lo: 0xbe, hi: 0xbf},
+	// Block 0x89, offset 0x371
+	{value: 0x0024, lo: 0x81, hi: 0x81},
+	{value: 0x0004, lo: 0x9d, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0010, lo: 0xb2, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	// Block 0x8a, offset 0x37a
+	{value: 0x0010, lo: 0x81, hi: 0x86},
+	{value: 0x0010, lo: 0x89, hi: 0x8e},
+	{value: 0x0010, lo: 0x91, hi: 0x96},
+	{value: 0x0010, lo: 0xa0, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xae},
+	{value: 0x0012, lo: 0xb0, hi: 0xbf},
+	// Block 0x8b, offset 0x380
+	{value: 0x0012, lo: 0x80, hi: 0x92},
+	{value: 0xb352, lo: 0x93, hi: 0x93},
+	{value: 0x0012, lo: 0x94, hi: 0x9a},
+	{value: 0x0014, lo: 0x9b, hi: 0x9b},
+	{value: 0x0015, lo: 0x9c, hi: 0x9f},
+	{value: 0x0012, lo: 0xa0, hi: 0xa8},
+	{value: 0x0014, lo: 0xa9, hi: 0xa9},
+	{value: 0x0004, lo: 0xaa, hi: 0xab},
+	{value: 0x74d2, lo: 0xb0, hi: 0xbf},
+	// Block 0x8c, offset 0x389
+	{value: 0x78d2, lo: 0x80, hi: 0x8f},
+	{value: 0x7cd2, lo: 0x90, hi: 0x9f},
+	{value: 0x80d2, lo: 0xa0, hi: 0xaf},
+	{value: 0x7cd2, lo: 0xb0, hi: 0xbf},
+	// Block 0x8d, offset 0x38d
+	{value: 0x0010, lo: 0x80, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xaa},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x8e, offset 0x395
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x8f, offset 0x397
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x8b, hi: 0xbb},
+	// Block 0x90, offset 0x399
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x86, hi: 0xbf},
+	// Block 0x91, offset 0x39c
+	{value: 0x0010, lo: 0x80, hi: 0xb1},
+	{value: 0x0004, lo: 0xb2, hi: 0xbf},
+	// Block 0x92, offset 0x39e
+	{value: 0x0004, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x93, hi: 0xbf},
+	// Block 0x93, offset 0x3a0
+	{value: 0x0010, lo: 0x80, hi: 0xbd},
+	// Block 0x94, offset 0x3a1
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0x95, offset 0x3a2
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x0010, lo: 0x92, hi: 0xbf},
+	// Block 0x96, offset 0x3a4
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0xb0, hi: 0xbb},
+	// Block 0x97, offset 0x3a6
+	{value: 0x0014, lo: 0x80, hi: 0x8f},
+	{value: 0x0054, lo: 0x93, hi: 0x93},
+	{value: 0x0024, lo: 0xa0, hi: 0xa6},
+	{value: 0x0034, lo: 0xa7, hi: 0xad},
+	{value: 0x0024, lo: 0xae, hi: 0xaf},
+	{value: 0x0010, lo: 0xb3, hi: 0xb4},
+	// Block 0x98, offset 0x3ac
+	{value: 0x0010, lo: 0x8d, hi: 0x8f},
+	{value: 0x0054, lo: 0x92, hi: 0x92},
+	{value: 0x0054, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0xb0, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0x99, offset 0x3b1
+	{value: 0x0010, lo: 0x80, hi: 0xbc},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x9a, offset 0x3b3
+	{value: 0x0054, lo: 0x87, hi: 0x87},
+	{value: 0x0054, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0054, lo: 0x9a, hi: 0x9a},
+	{value: 0x5f53, lo: 0xa1, hi: 0xba},
+	{value: 0x0004, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x9b, offset 0x3ba
+	{value: 0x0004, lo: 0x80, hi: 0x80},
+	{value: 0x5f52, lo: 0x81, hi: 0x9a},
+	{value: 0x0004, lo: 0xb0, hi: 0xb0},
+	// Block 0x9c, offset 0x3bd
+	{value: 0x0014, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xbe},
+	// Block 0x9d, offset 0x3bf
+	{value: 0x0010, lo: 0x82, hi: 0x87},
+	{value: 0x0010, lo: 0x8a, hi: 0x8f},
+	{value: 0x0010, lo: 0x92, hi: 0x97},
+	{value: 0x0010, lo: 0x9a, hi: 0x9c},
+	{value: 0x0004, lo: 0xa3, hi: 0xa3},
+	{value: 0x0014, lo: 0xb9, hi: 0xbb},
+	// Block 0x9e, offset 0x3c5
+	{value: 0x0010, lo: 0x80, hi: 0x8b},
+	{value: 0x0010, lo: 0x8d, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xba},
+	{value: 0x0010, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x9f, offset 0x3ca
+	{value: 0x0010, lo: 0x80, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x9d},
+	// Block 0xa0, offset 0x3cc
+	{value: 0x0010, lo: 0x80, hi: 0xba},
+	// Block 0xa1, offset 0x3cd
+	{value: 0x0010, lo: 0x80, hi: 0xb4},
+	// Block 0xa2, offset 0x3ce
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	// Block 0xa3, offset 0x3cf
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xa4, offset 0x3d1
+	{value: 0x0010, lo: 0x80, hi: 0x90},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	// Block 0xa5, offset 0x3d3
+	{value: 0x0010, lo: 0x80, hi: 0x9f},
+	{value: 0x0010, lo: 0xad, hi: 0xbf},
+	// Block 0xa6, offset 0x3d5
+	{value: 0x0010, lo: 0x80, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0xb5},
+	{value: 0x0024, lo: 0xb6, hi: 0xba},
+	// Block 0xa7, offset 0x3d8
+	{value: 0x0010, lo: 0x80, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xa8, offset 0x3da
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x88, hi: 0x8f},
+	{value: 0x0010, lo: 0x91, hi: 0x95},
+	// Block 0xa9, offset 0x3dd
+	{value: 0x2813, lo: 0x80, hi: 0x87},
+	{value: 0x3813, lo: 0x88, hi: 0x8f},
+	{value: 0x2813, lo: 0x90, hi: 0x97},
+	{value: 0xb653, lo: 0x98, hi: 0x9f},
+	{value: 0xb953, lo: 0xa0, hi: 0xa7},
+	{value: 0x2812, lo: 0xa8, hi: 0xaf},
+	{value: 0x3812, lo: 0xb0, hi: 0xb7},
+	{value: 0x2812, lo: 0xb8, hi: 0xbf},
+	// Block 0xaa, offset 0x3e5
+	{value: 0xb652, lo: 0x80, hi: 0x87},
+	{value: 0xb952, lo: 0x88, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0xab, offset 0x3e8
+	{value: 0x0010, lo: 0x80, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0xb953, lo: 0xb0, hi: 0xb7},
+	{value: 0xb653, lo: 0xb8, hi: 0xbf},
+	// Block 0xac, offset 0x3ec
+	{value: 0x2813, lo: 0x80, hi: 0x87},
+	{value: 0x3813, lo: 0x88, hi: 0x8f},
+	{value: 0x2813, lo: 0x90, hi: 0x93},
+	{value: 0xb952, lo: 0x98, hi: 0x9f},
+	{value: 0xb652, lo: 0xa0, hi: 0xa7},
+	{value: 0x2812, lo: 0xa8, hi: 0xaf},
+	{value: 0x3812, lo: 0xb0, hi: 0xb7},
+	{value: 0x2812, lo: 0xb8, hi: 0xbb},
+	// Block 0xad, offset 0x3f4
+	{value: 0x0010, lo: 0x80, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xae, offset 0x3f6
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	// Block 0xaf, offset 0x3f7
+	{value: 0x0010, lo: 0x80, hi: 0xb6},
+	// Block 0xb0, offset 0x3f8
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xa7},
+	// Block 0xb1, offset 0x3fa
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0010, lo: 0x88, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0xb5},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xb2, offset 0x400
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb6},
+	// Block 0xb3, offset 0x402
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	// Block 0xb4, offset 0x403
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	// Block 0xb5, offset 0x405
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb9},
+	// Block 0xb6, offset 0x407
+	{value: 0x0010, lo: 0x80, hi: 0xb7},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0xb7, offset 0x409
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x83},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x8e, hi: 0x8e},
+	{value: 0x0024, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x97},
+	{value: 0x0010, lo: 0x99, hi: 0xb5},
+	{value: 0x0024, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xb8, offset 0x416
+	{value: 0x0010, lo: 0xa0, hi: 0xbc},
+	// Block 0xb9, offset 0x417
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	// Block 0xba, offset 0x418
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0x89, hi: 0xa4},
+	{value: 0x0024, lo: 0xa5, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	// Block 0xbb, offset 0x41c
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	// Block 0xbc, offset 0x41e
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	// Block 0xbd, offset 0x41f
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	// Block 0xbe, offset 0x420
+	{value: 0x5653, lo: 0x80, hi: 0xb2},
+	// Block 0xbf, offset 0x421
+	{value: 0x5652, lo: 0x80, hi: 0xb2},
+	// Block 0xc0, offset 0x422
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xc1, offset 0x425
+	{value: 0x0010, lo: 0x80, hi: 0xa9},
+	{value: 0x0024, lo: 0xab, hi: 0xac},
+	{value: 0x0010, lo: 0xb0, hi: 0xb1},
+	// Block 0xc2, offset 0x428
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xc3, offset 0x42b
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x87},
+	{value: 0x0024, lo: 0x88, hi: 0x8a},
+	{value: 0x0034, lo: 0x8b, hi: 0x8b},
+	{value: 0x0024, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x90},
+	// Block 0xc4, offset 0x431
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xc5, offset 0x432
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0010, lo: 0xa0, hi: 0xb6},
+	// Block 0xc6, offset 0x434
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbf},
+	// Block 0xc7, offset 0x438
+	{value: 0x0014, lo: 0x80, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xc8, offset 0x43c
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb6},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0014, lo: 0xbd, hi: 0xbd},
+	// Block 0xc9, offset 0x442
+	{value: 0x0014, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0xa8},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xca, offset 0x445
+	{value: 0x0024, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xab},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0xcb, offset 0x44c
+	{value: 0x0010, lo: 0x84, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb3},
+	{value: 0x0010, lo: 0xb6, hi: 0xb6},
+	// Block 0xcc, offset 0x450
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xcd, offset 0x454
+	{value: 0x0030, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0014, lo: 0x89, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x9a},
+	{value: 0x0010, lo: 0x9c, hi: 0x9c},
+	// Block 0xce, offset 0x45d
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0014, lo: 0xb4, hi: 0xb4},
+	{value: 0x0030, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xb7},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	// Block 0xcf, offset 0x466
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa8},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xd0, offset 0x46c
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0014, lo: 0x9f, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa2},
+	{value: 0x0014, lo: 0xa3, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xd1, offset 0x472
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0xd2, offset 0x47c
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0030, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9d, hi: 0xa3},
+	{value: 0x0024, lo: 0xa6, hi: 0xac},
+	{value: 0x0024, lo: 0xb0, hi: 0xb4},
+	// Block 0xd3, offset 0x486
+	{value: 0x0010, lo: 0x80, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbf},
+	// Block 0xd4, offset 0x488
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	// Block 0xd5, offset 0x491
+	{value: 0x0010, lo: 0x80, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb8},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0xd6, offset 0x497
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0x85},
+	{value: 0x0010, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd7, offset 0x49d
+	{value: 0x0010, lo: 0x80, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb5},
+	{value: 0x0010, lo: 0xb8, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xd8, offset 0x4a3
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x98, hi: 0x9b},
+	{value: 0x0014, lo: 0x9c, hi: 0x9d},
+	// Block 0xd9, offset 0x4a6
+	{value: 0x0010, lo: 0x80, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbc},
+	{value: 0x0014, lo: 0xbd, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xda, offset 0x4ac
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xdb, offset 0x4af
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0014, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb5},
+	{value: 0x0030, lo: 0xb6, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0010, lo: 0xb8, hi: 0xb8},
+	// Block 0xdc, offset 0x4b8
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	// Block 0xdd, offset 0x4b9
+	{value: 0x0014, lo: 0x9d, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xde, offset 0x4c0
+	{value: 0x0010, lo: 0x80, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb7},
+	{value: 0x0010, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	// Block 0xdf, offset 0x4c4
+	{value: 0x5f53, lo: 0xa0, hi: 0xbf},
+	// Block 0xe0, offset 0x4c5
+	{value: 0x5f52, lo: 0x80, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xe1, offset 0x4c8
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x89, hi: 0x89},
+	{value: 0x0010, lo: 0x8c, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0xb5},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0014, lo: 0xbb, hi: 0xbc},
+	{value: 0x0030, lo: 0xbd, hi: 0xbd},
+	{value: 0x0034, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xe2, offset 0x4d2
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0034, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xe3, offset 0x4d5
+	{value: 0x0010, lo: 0xa0, hi: 0xa7},
+	{value: 0x0010, lo: 0xaa, hi: 0xbf},
+	// Block 0xe4, offset 0x4d7
+	{value: 0x0010, lo: 0x80, hi: 0x93},
+	{value: 0x0014, lo: 0x94, hi: 0x97},
+	{value: 0x0014, lo: 0x9a, hi: 0x9b},
+	{value: 0x0010, lo: 0x9c, hi: 0x9f},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	// Block 0xe5, offset 0x4de
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x8a},
+	{value: 0x0010, lo: 0x8b, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb8},
+	{value: 0x0010, lo: 0xb9, hi: 0xba},
+	{value: 0x0014, lo: 0xbb, hi: 0xbe},
+	// Block 0xe6, offset 0x4e6
+	{value: 0x0034, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0014, lo: 0x91, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x98},
+	{value: 0x0014, lo: 0x99, hi: 0x9b},
+	{value: 0x0010, lo: 0x9c, hi: 0xbf},
+	// Block 0xe7, offset 0x4ec
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0014, lo: 0x8a, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x98},
+	{value: 0x0034, lo: 0x99, hi: 0x99},
+	{value: 0x0010, lo: 0x9d, hi: 0x9d},
+	// Block 0xe8, offset 0x4f2
+	{value: 0x0010, lo: 0x80, hi: 0xb8},
+	// Block 0xe9, offset 0x4f3
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb6},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xea, offset 0x4f9
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xb2, hi: 0xbf},
+	// Block 0xeb, offset 0x4fc
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x0014, lo: 0x92, hi: 0xa7},
+	{value: 0x0010, lo: 0xa9, hi: 0xa9},
+	{value: 0x0014, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb6},
+	// Block 0xec, offset 0x504
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0xb0},
+	{value: 0x0014, lo: 0xb1, hi: 0xb6},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0xed, offset 0x50b
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x85},
+	{value: 0x0010, lo: 0x86, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xa5},
+	{value: 0x0010, lo: 0xa7, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xbf},
+	// Block 0xee, offset 0x515
+	{value: 0x0010, lo: 0x80, hi: 0x8e},
+	{value: 0x0014, lo: 0x90, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0x96, hi: 0x96},
+	{value: 0x0034, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0xef, offset 0x51d
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb6},
+	// Block 0xf0, offset 0x520
+	{value: 0x0010, lo: 0xb0, hi: 0xb0},
+	// Block 0xf1, offset 0x521
+	{value: 0x0010, lo: 0x80, hi: 0x99},
+	// Block 0xf2, offset 0x522
+	{value: 0x0010, lo: 0x80, hi: 0xae},
+	// Block 0xf3, offset 0x523
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	// Block 0xf4, offset 0x524
+	{value: 0x0010, lo: 0x80, hi: 0xae},
+	{value: 0x0014, lo: 0xb0, hi: 0xb8},
+	// Block 0xf5, offset 0x526
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	// Block 0xf6, offset 0x527
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0xf7, offset 0x529
+	{value: 0x0010, lo: 0x90, hi: 0xad},
+	{value: 0x0034, lo: 0xb0, hi: 0xb4},
+	// Block 0xf8, offset 0x52b
+	{value: 0x0010, lo: 0x80, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb6},
+	// Block 0xf9, offset 0x52d
+	{value: 0x0014, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa3, hi: 0xb7},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0xfa, offset 0x531
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	// Block 0xfb, offset 0x532
+	{value: 0x2013, lo: 0x80, hi: 0x9f},
+	{value: 0x2012, lo: 0xa0, hi: 0xbf},
+	// Block 0xfc, offset 0x534
+	{value: 0x0010, lo: 0x80, hi: 0x8a},
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0xfd, offset 0x537
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0014, lo: 0x8f, hi: 0x9f},
+	// Block 0xfe, offset 0x539
+	{value: 0x0014, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa3, hi: 0xa4},
+	{value: 0x0030, lo: 0xb0, hi: 0xb1},
+	// Block 0xff, offset 0x53c
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xbc},
+	// Block 0x100, offset 0x53e
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x0034, lo: 0x9e, hi: 0x9e},
+	{value: 0x0014, lo: 0xa0, hi: 0xa3},
+	// Block 0x101, offset 0x543
+	{value: 0x0030, lo: 0xa5, hi: 0xa6},
+	{value: 0x0034, lo: 0xa7, hi: 0xa9},
+	{value: 0x0030, lo: 0xad, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbf},
+	// Block 0x102, offset 0x548
+	{value: 0x0034, lo: 0x80, hi: 0x82},
+	{value: 0x0024, lo: 0x85, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8b},
+	{value: 0x0024, lo: 0xaa, hi: 0xad},
+	// Block 0x103, offset 0x54c
+	{value: 0x0024, lo: 0x82, hi: 0x84},
+	// Block 0x104, offset 0x54d
+	{value: 0x0013, lo: 0x80, hi: 0x99},
+	{value: 0x0012, lo: 0x9a, hi: 0xb3},
+	{value: 0x0013, lo: 0xb4, hi: 0xbf},
+	// Block 0x105, offset 0x550
+	{value: 0x0013, lo: 0x80, hi: 0x8d},
+	{value: 0x0012, lo: 0x8e, hi: 0x94},
+	{value: 0x0012, lo: 0x96, hi: 0xa7},
+	{value: 0x0013, lo: 0xa8, hi: 0xbf},
+	// Block 0x106, offset 0x554
+	{value: 0x0013, lo: 0x80, hi: 0x81},
+	{value: 0x0012, lo: 0x82, hi: 0x9b},
+	{value: 0x0013, lo: 0x9c, hi: 0x9c},
+	{value: 0x0013, lo: 0x9e, hi: 0x9f},
+	{value: 0x0013, lo: 0xa2, hi: 0xa2},
+	{value: 0x0013, lo: 0xa5, hi: 0xa6},
+	{value: 0x0013, lo: 0xa9, hi: 0xac},
+	{value: 0x0013, lo: 0xae, hi: 0xb5},
+	{value: 0x0012, lo: 0xb6, hi: 0xb9},
+	{value: 0x0012, lo: 0xbb, hi: 0xbb},
+	{value: 0x0012, lo: 0xbd, hi: 0xbf},
+	// Block 0x107, offset 0x55f
+	{value: 0x0012, lo: 0x80, hi: 0x83},
+	{value: 0x0012, lo: 0x85, hi: 0x8f},
+	{value: 0x0013, lo: 0x90, hi: 0xa9},
+	{value: 0x0012, lo: 0xaa, hi: 0xbf},
+	// Block 0x108, offset 0x563
+	{value: 0x0012, lo: 0x80, hi: 0x83},
+	{value: 0x0013, lo: 0x84, hi: 0x85},
+	{value: 0x0013, lo: 0x87, hi: 0x8a},
+	{value: 0x0013, lo: 0x8d, hi: 0x94},
+	{value: 0x0013, lo: 0x96, hi: 0x9c},
+	{value: 0x0012, lo: 0x9e, hi: 0xb7},
+	{value: 0x0013, lo: 0xb8, hi: 0xb9},
+	{value: 0x0013, lo: 0xbb, hi: 0xbe},
+	// Block 0x109, offset 0x56b
+	{value: 0x0013, lo: 0x80, hi: 0x84},
+	{value: 0x0013, lo: 0x86, hi: 0x86},
+	{value: 0x0013, lo: 0x8a, hi: 0x90},
+	{value: 0x0012, lo: 0x92, hi: 0xab},
+	{value: 0x0013, lo: 0xac, hi: 0xbf},
+	// Block 0x10a, offset 0x570
+	{value: 0x0013, lo: 0x80, hi: 0x85},
+	{value: 0x0012, lo: 0x86, hi: 0x9f},
+	{value: 0x0013, lo: 0xa0, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xbf},
+	// Block 0x10b, offset 0x574
+	{value: 0x0012, lo: 0x80, hi: 0x93},
+	{value: 0x0013, lo: 0x94, hi: 0xad},
+	{value: 0x0012, lo: 0xae, hi: 0xbf},
+	// Block 0x10c, offset 0x577
+	{value: 0x0012, lo: 0x80, hi: 0x87},
+	{value: 0x0013, lo: 0x88, hi: 0xa1},
+	{value: 0x0012, lo: 0xa2, hi: 0xbb},
+	{value: 0x0013, lo: 0xbc, hi: 0xbf},
+	// Block 0x10d, offset 0x57b
+	{value: 0x0013, lo: 0x80, hi: 0x95},
+	{value: 0x0012, lo: 0x96, hi: 0xaf},
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x10e, offset 0x57e
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	{value: 0x0012, lo: 0x8a, hi: 0xa5},
+	{value: 0x0013, lo: 0xa8, hi: 0xbf},
+	// Block 0x10f, offset 0x581
+	{value: 0x0013, lo: 0x80, hi: 0x80},
+	{value: 0x0012, lo: 0x82, hi: 0x9a},
+	{value: 0x0012, lo: 0x9c, hi: 0xa1},
+	{value: 0x0013, lo: 0xa2, hi: 0xba},
+	{value: 0x0012, lo: 0xbc, hi: 0xbf},
+	// Block 0x110, offset 0x586
+	{value: 0x0012, lo: 0x80, hi: 0x94},
+	{value: 0x0012, lo: 0x96, hi: 0x9b},
+	{value: 0x0013, lo: 0x9c, hi: 0xb4},
+	{value: 0x0012, lo: 0xb6, hi: 0xbf},
+	// Block 0x111, offset 0x58a
+	{value: 0x0012, lo: 0x80, hi: 0x8e},
+	{value: 0x0012, lo: 0x90, hi: 0x95},
+	{value: 0x0013, lo: 0x96, hi: 0xae},
+	{value: 0x0012, lo: 0xb0, hi: 0xbf},
+	// Block 0x112, offset 0x58e
+	{value: 0x0012, lo: 0x80, hi: 0x88},
+	{value: 0x0012, lo: 0x8a, hi: 0x8f},
+	{value: 0x0013, lo: 0x90, hi: 0xa8},
+	{value: 0x0012, lo: 0xaa, hi: 0xbf},
+	// Block 0x113, offset 0x592
+	{value: 0x0012, lo: 0x80, hi: 0x82},
+	{value: 0x0012, lo: 0x84, hi: 0x89},
+	{value: 0x0017, lo: 0x8a, hi: 0x8b},
+	{value: 0x0010, lo: 0x8e, hi: 0xbf},
+	// Block 0x114, offset 0x596
+	{value: 0x0014, lo: 0x80, hi: 0xb6},
+	{value: 0x0014, lo: 0xbb, hi: 0xbf},
+	// Block 0x115, offset 0x598
+	{value: 0x0014, lo: 0x80, hi: 0xac},
+	{value: 0x0014, lo: 0xb5, hi: 0xb5},
+	// Block 0x116, offset 0x59a
+	{value: 0x0014, lo: 0x84, hi: 0x84},
+	{value: 0x0014, lo: 0x9b, hi: 0x9f},
+	{value: 0x0014, lo: 0xa1, hi: 0xaf},
+	// Block 0x117, offset 0x59d
+	{value: 0x0024, lo: 0x80, hi: 0x86},
+	{value: 0x0024, lo: 0x88, hi: 0x98},
+	{value: 0x0024, lo: 0x9b, hi: 0xa1},
+	{value: 0x0024, lo: 0xa3, hi: 0xa4},
+	{value: 0x0024, lo: 0xa6, hi: 0xaa},
+	// Block 0x118, offset 0x5a2
+	{value: 0x0010, lo: 0x80, hi: 0xac},
+	{value: 0x0024, lo: 0xb0, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xbd},
+	// Block 0x119, offset 0x5a5
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	// Block 0x11a, offset 0x5a7
+	{value: 0x0010, lo: 0x80, hi: 0xab},
+	{value: 0x0024, lo: 0xac, hi: 0xaf},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x11b, offset 0x5aa
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0034, lo: 0x90, hi: 0x96},
+	// Block 0x11c, offset 0x5ac
+	{value: 0xbc52, lo: 0x80, hi: 0x81},
+	{value: 0xbf52, lo: 0x82, hi: 0x83},
+	{value: 0x0024, lo: 0x84, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8b},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x11d, offset 0x5b2
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x9f},
+	{value: 0x0010, lo: 0xa1, hi: 0xa2},
+	{value: 0x0010, lo: 0xa4, hi: 0xa4},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0010, lo: 0xa9, hi: 0xb2},
+	{value: 0x0010, lo: 0xb4, hi: 0xb7},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	// Block 0x11e, offset 0x5bb
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0x9b},
+	{value: 0x0010, lo: 0xa1, hi: 0xa3},
+	{value: 0x0010, lo: 0xa5, hi: 0xa9},
+	{value: 0x0010, lo: 0xab, hi: 0xbb},
+	// Block 0x11f, offset 0x5c0
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x120, offset 0x5c1
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	{value: 0x0013, lo: 0x90, hi: 0xa9},
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x121, offset 0x5c4
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	// Block 0x122, offset 0x5c5
+	{value: 0x0014, lo: 0xbb, hi: 0xbf},
+	// Block 0x123, offset 0x5c6
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x124, offset 0x5c7
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0014, lo: 0xa0, hi: 0xbf},
+	// Block 0x125, offset 0x5c9
+	{value: 0x0014, lo: 0x80, hi: 0xbf},
+	// Block 0x126, offset 0x5ca
+	{value: 0x0014, lo: 0x80, hi: 0xaf},
+}
+
+// Total table size 15212 bytes (14KiB); checksum: 1EB13752
diff --git a/vendor/golang.org/x/text/cases/tables9.0.0.go b/vendor/golang.org/x/text/cases/tables9.0.0.go
new file mode 100644
index 00000000..636d5d14
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/tables9.0.0.go
@@ -0,0 +1,2216 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+//go:build !go1.10
+// +build !go1.10
+
+package cases
+
+// UnicodeVersion is the Unicode version from which the tables in this package are derived.
+const UnicodeVersion = "9.0.0"
+
+var xorData string = "" + // Size: 185 bytes
+	"\x00\x06\x07\x00\x01?\x00\x0f\x03\x00\x0f\x12\x00\x0f\x1f\x00\x0f\x1d" +
+	"\x00\x01\x13\x00\x0f\x16\x00\x0f\x0b\x00\x0f3\x00\x0f7\x00\x01#\x00\x0f?" +
+	"\x00\x0e'\x00\x0f/\x00\x0e>\x00\x0f*\x00\x0c&\x00\x0c*\x00\x0c;\x00\x0c9" +
+	"\x00\x0c%\x00\x01\x08\x00\x03\x0d\x00\x03\x09\x00\x02\x06\x00\x02\x02" +
+	"\x00\x02\x0c\x00\x01\x00\x00\x01\x03\x00\x01\x01\x00\x01 \x00\x01\x0c" +
+	"\x00\x01\x10\x00\x03\x10\x00\x036 \x00\x037 \x00\x0b#\x10\x00\x0b 0\x00" +
+	"\x0b!\x10\x00\x0b!0\x00\x0b(\x04\x00\x03\x04\x1e\x00\x03\x0a\x00\x02:" +
+	"\x00\x02>\x00\x02,\x00\x02\x00\x00\x02\x10\x00\x01<\x00\x01&\x00\x01*" +
+	"\x00\x01.\x00\x010\x003 \x00\x01\x18\x00\x01(\x00\x01\x1e\x00\x01\x22"
+
+var exceptions string = "" + // Size: 2068 bytes
+	"\x00\x12\x12μΜΜ\x12\x12ssSSSs\x13\x18i̇i̇\x10\x09II\x13\x1bʼnʼNʼN\x11" +
+	"\x09sSS\x12\x12dždžDž\x12\x12dždžDŽ\x10\x12DŽDž\x12\x12ljljLj\x12\x12ljljLJ\x10\x12LJLj" +
+	"\x12\x12njnjNj\x12\x12njnjNJ\x10\x12NJNj\x13\x1bǰJ̌J̌\x12\x12dzdzDz\x12\x12dzdzDZ\x10" +
+	"\x12DZDz\x13\x18ⱥⱥ\x13\x18ⱦⱦ\x10\x1bⱾⱾ\x10\x1bⱿⱿ\x10\x1bⱯⱯ\x10\x1bⱭⱭ\x10" +
+	"\x1bⱰⱰ\x10\x1bꞫꞫ\x10\x1bꞬꞬ\x10\x1bꞍꞍ\x10\x1bꞪꞪ\x10\x1bꞮꞮ\x10\x1bⱢⱢ\x10" +
+	"\x1bꞭꞭ\x10\x1bⱮⱮ\x10\x1bⱤⱤ\x10\x1bꞱꞱ\x10\x1bꞲꞲ\x10\x1bꞰꞰ2\x12ιΙΙ\x166ΐ" +
+	"Ϊ́Ϊ́\x166ΰΫ́Ϋ́\x12\x12σΣΣ\x12\x12βΒΒ\x12\x12θΘΘ\x12\x12φΦΦ\x12" +
+	"\x12πΠΠ\x12\x12κΚΚ\x12\x12ρΡΡ\x12\x12εΕΕ\x14$եւԵՒԵւ\x12\x12вВВ\x12\x12дД" +
+	"Д\x12\x12оОО\x12\x12сСС\x12\x12тТТ\x12\x12тТТ\x12\x12ъЪЪ\x12\x12ѣѢѢ\x13" +
+	"\x1bꙋꙊꙊ\x13\x1bẖH̱H̱\x13\x1bẗT̈T̈\x13\x1bẘW̊W̊\x13\x1bẙY̊Y̊\x13\x1ba" +
+	"ʾAʾAʾ\x13\x1bṡṠṠ\x12\x10ssß\x14$ὐΥ̓Υ̓\x166ὒΥ̓̀Υ̓̀\x166ὔΥ̓́Υ̓́\x166" +
+	"ὖΥ̓͂Υ̓͂\x15+ἀιἈΙᾈ\x15+ἁιἉΙᾉ\x15+ἂιἊΙᾊ\x15+ἃιἋΙᾋ\x15+ἄιἌΙᾌ\x15+ἅιἍΙᾍ" +
+	"\x15+ἆιἎΙᾎ\x15+ἇιἏΙᾏ\x15\x1dἀιᾀἈΙ\x15\x1dἁιᾁἉΙ\x15\x1dἂιᾂἊΙ\x15\x1dἃιᾃἋΙ" +
+	"\x15\x1dἄιᾄἌΙ\x15\x1dἅιᾅἍΙ\x15\x1dἆιᾆἎΙ\x15\x1dἇιᾇἏΙ\x15+ἠιἨΙᾘ\x15+ἡιἩΙᾙ" +
+	"\x15+ἢιἪΙᾚ\x15+ἣιἫΙᾛ\x15+ἤιἬΙᾜ\x15+ἥιἭΙᾝ\x15+ἦιἮΙᾞ\x15+ἧιἯΙᾟ\x15\x1dἠιᾐἨ" +
+	"Ι\x15\x1dἡιᾑἩΙ\x15\x1dἢιᾒἪΙ\x15\x1dἣιᾓἫΙ\x15\x1dἤιᾔἬΙ\x15\x1dἥιᾕἭΙ\x15" +
+	"\x1dἦιᾖἮΙ\x15\x1dἧιᾗἯΙ\x15+ὠιὨΙᾨ\x15+ὡιὩΙᾩ\x15+ὢιὪΙᾪ\x15+ὣιὫΙᾫ\x15+ὤιὬΙᾬ" +
+	"\x15+ὥιὭΙᾭ\x15+ὦιὮΙᾮ\x15+ὧιὯΙᾯ\x15\x1dὠιᾠὨΙ\x15\x1dὡιᾡὩΙ\x15\x1dὢιᾢὪΙ" +
+	"\x15\x1dὣιᾣὫΙ\x15\x1dὤιᾤὬΙ\x15\x1dὥιᾥὭΙ\x15\x1dὦιᾦὮΙ\x15\x1dὧιᾧὯΙ\x15-ὰι" +
+	"ᾺΙᾺͅ\x14#αιΑΙᾼ\x14$άιΆΙΆͅ\x14$ᾶΑ͂Α͂\x166ᾶιΑ͂Ιᾼ͂\x14\x1cαιᾳΑΙ\x12" +
+	"\x12ιΙΙ\x15-ὴιῊΙῊͅ\x14#ηιΗΙῌ\x14$ήιΉΙΉͅ\x14$ῆΗ͂Η͂\x166ῆιΗ͂Ιῌ͂\x14\x1c" +
+	"ηιῃΗΙ\x166ῒΪ̀Ϊ̀\x166ΐΪ́Ϊ́\x14$ῖΙ͂Ι͂\x166ῗΪ͂Ϊ͂\x166ῢΫ̀Ϋ" +
+	"̀\x166ΰΫ́Ϋ́\x14$ῤΡ̓Ρ̓\x14$ῦΥ͂Υ͂\x166ῧΫ͂Ϋ͂\x15-ὼιῺΙῺͅ\x14#ωιΩΙ" +
+	"ῼ\x14$ώιΏΙΏͅ\x14$ῶΩ͂Ω͂\x166ῶιΩ͂Ιῼ͂\x14\x1cωιῳΩΙ\x12\x10ωω\x11\x08kk" +
+	"\x12\x10åå\x12\x10ɫɫ\x12\x10ɽɽ\x10\x12ȺȺ\x10\x12ȾȾ\x12\x10ɑɑ\x12\x10ɱɱ" +
+	"\x12\x10ɐɐ\x12\x10ɒɒ\x12\x10ȿȿ\x12\x10ɀɀ\x12\x10ɥɥ\x12\x10ɦɦ\x12\x10ɜɜ" +
+	"\x12\x10ɡɡ\x12\x10ɬɬ\x12\x10ɪɪ\x12\x10ʞʞ\x12\x10ʇʇ\x12\x10ʝʝ\x12\x12ffFF" +
+	"Ff\x12\x12fiFIFi\x12\x12flFLFl\x13\x1bffiFFIFfi\x13\x1bfflFFLFfl\x12\x12" +
+	"stSTSt\x12\x12stSTSt\x14$մնՄՆՄն\x14$մեՄԵՄե\x14$միՄԻՄի\x14$վնՎՆՎն\x14$մխՄ" +
+	"ԽՄխ"
+
+// 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 *caseTrie) lookup(s []byte) (v uint16, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return caseValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupUnsafe(s []byte) uint16 {
+	c0 := s[0]
+	if c0 < 0x80 { // is ASCII
+		return caseValues[c0]
+	}
+	i := caseIndex[c0]
+	if c0 < 0xE0 { // 2-byte UTF-8
+		return t.lookupValue(uint32(i), s[1])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[1])]
+	if c0 < 0xF0 { // 3-byte UTF-8
+		return t.lookupValue(uint32(i), s[2])
+	}
+	i = caseIndex[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 *caseTrie) lookupString(s string) (v uint16, sz int) {
+	c0 := s[0]
+	switch {
+	case c0 < 0x80: // is ASCII
+		return caseValues[c0], 1
+	case c0 < 0xC2:
+		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
+	case c0 < 0xE0: // 2-byte UTF-8
+		if len(s) < 2 {
+			return 0, 0
+		}
+		i := caseIndex[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 := caseIndex[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 = caseIndex[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 := caseIndex[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 = caseIndex[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 = caseIndex[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 *caseTrie) lookupStringUnsafe(s string) uint16 {
+	c0 := s[0]
+	if c0 < 0x80 { // is ASCII
+		return caseValues[c0]
+	}
+	i := caseIndex[c0]
+	if c0 < 0xE0 { // 2-byte UTF-8
+		return t.lookupValue(uint32(i), s[1])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[1])]
+	if c0 < 0xF0 { // 3-byte UTF-8
+		return t.lookupValue(uint32(i), s[2])
+	}
+	i = caseIndex[uint32(i)<<6+uint32(s[2])]
+	if c0 < 0xF8 { // 4-byte UTF-8
+		return t.lookupValue(uint32(i), s[3])
+	}
+	return 0
+}
+
+// caseTrie. Total size: 11742 bytes (11.47 KiB). Checksum: 795fe57ee5135873.
+type caseTrie struct{}
+
+func newCaseTrie(i int) *caseTrie {
+	return &caseTrie{}
+}
+
+// lookupValue determines the type of block n and looks up the value for b.
+func (t *caseTrie) lookupValue(n uint32, b byte) uint16 {
+	switch {
+	case n < 18:
+		return uint16(caseValues[n<<6+uint32(b)])
+	default:
+		n -= 18
+		return uint16(sparse.lookup(n, b))
+	}
+}
+
+// caseValues: 20 blocks, 1280 entries, 2560 bytes
+// The third block is the zero block.
+var caseValues = [1280]uint16{
+	// Block 0x0, offset 0x0
+	0x27: 0x0054,
+	0x2e: 0x0054,
+	0x30: 0x0010, 0x31: 0x0010, 0x32: 0x0010, 0x33: 0x0010, 0x34: 0x0010, 0x35: 0x0010,
+	0x36: 0x0010, 0x37: 0x0010, 0x38: 0x0010, 0x39: 0x0010, 0x3a: 0x0054,
+	// Block 0x1, offset 0x40
+	0x41: 0x2013, 0x42: 0x2013, 0x43: 0x2013, 0x44: 0x2013, 0x45: 0x2013,
+	0x46: 0x2013, 0x47: 0x2013, 0x48: 0x2013, 0x49: 0x2013, 0x4a: 0x2013, 0x4b: 0x2013,
+	0x4c: 0x2013, 0x4d: 0x2013, 0x4e: 0x2013, 0x4f: 0x2013, 0x50: 0x2013, 0x51: 0x2013,
+	0x52: 0x2013, 0x53: 0x2013, 0x54: 0x2013, 0x55: 0x2013, 0x56: 0x2013, 0x57: 0x2013,
+	0x58: 0x2013, 0x59: 0x2013, 0x5a: 0x2013,
+	0x5e: 0x0004, 0x5f: 0x0010, 0x60: 0x0004, 0x61: 0x2012, 0x62: 0x2012, 0x63: 0x2012,
+	0x64: 0x2012, 0x65: 0x2012, 0x66: 0x2012, 0x67: 0x2012, 0x68: 0x2012, 0x69: 0x2012,
+	0x6a: 0x2012, 0x6b: 0x2012, 0x6c: 0x2012, 0x6d: 0x2012, 0x6e: 0x2012, 0x6f: 0x2012,
+	0x70: 0x2012, 0x71: 0x2012, 0x72: 0x2012, 0x73: 0x2012, 0x74: 0x2012, 0x75: 0x2012,
+	0x76: 0x2012, 0x77: 0x2012, 0x78: 0x2012, 0x79: 0x2012, 0x7a: 0x2012,
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc0: 0x0852, 0xc1: 0x0b53, 0xc2: 0x0113, 0xc3: 0x0112, 0xc4: 0x0113, 0xc5: 0x0112,
+	0xc6: 0x0b53, 0xc7: 0x0f13, 0xc8: 0x0f12, 0xc9: 0x0e53, 0xca: 0x1153, 0xcb: 0x0713,
+	0xcc: 0x0712, 0xcd: 0x0012, 0xce: 0x1453, 0xcf: 0x1753, 0xd0: 0x1a53, 0xd1: 0x0313,
+	0xd2: 0x0312, 0xd3: 0x1d53, 0xd4: 0x2053, 0xd5: 0x2352, 0xd6: 0x2653, 0xd7: 0x2653,
+	0xd8: 0x0113, 0xd9: 0x0112, 0xda: 0x2952, 0xdb: 0x0012, 0xdc: 0x1d53, 0xdd: 0x2c53,
+	0xde: 0x2f52, 0xdf: 0x3253, 0xe0: 0x0113, 0xe1: 0x0112, 0xe2: 0x0113, 0xe3: 0x0112,
+	0xe4: 0x0113, 0xe5: 0x0112, 0xe6: 0x3553, 0xe7: 0x0f13, 0xe8: 0x0f12, 0xe9: 0x3853,
+	0xea: 0x0012, 0xeb: 0x0012, 0xec: 0x0113, 0xed: 0x0112, 0xee: 0x3553, 0xef: 0x1f13,
+	0xf0: 0x1f12, 0xf1: 0x3b53, 0xf2: 0x3e53, 0xf3: 0x0713, 0xf4: 0x0712, 0xf5: 0x0313,
+	0xf6: 0x0312, 0xf7: 0x4153, 0xf8: 0x0113, 0xf9: 0x0112, 0xfa: 0x0012, 0xfb: 0x0010,
+	0xfc: 0x0113, 0xfd: 0x0112, 0xfe: 0x0012, 0xff: 0x4452,
+	// Block 0x4, offset 0x100
+	0x100: 0x0010, 0x101: 0x0010, 0x102: 0x0010, 0x103: 0x0010, 0x104: 0x02db, 0x105: 0x0359,
+	0x106: 0x03da, 0x107: 0x043b, 0x108: 0x04b9, 0x109: 0x053a, 0x10a: 0x059b, 0x10b: 0x0619,
+	0x10c: 0x069a, 0x10d: 0x0313, 0x10e: 0x0312, 0x10f: 0x1f13, 0x110: 0x1f12, 0x111: 0x0313,
+	0x112: 0x0312, 0x113: 0x0713, 0x114: 0x0712, 0x115: 0x0313, 0x116: 0x0312, 0x117: 0x0f13,
+	0x118: 0x0f12, 0x119: 0x0313, 0x11a: 0x0312, 0x11b: 0x0713, 0x11c: 0x0712, 0x11d: 0x1452,
+	0x11e: 0x0113, 0x11f: 0x0112, 0x120: 0x0113, 0x121: 0x0112, 0x122: 0x0113, 0x123: 0x0112,
+	0x124: 0x0113, 0x125: 0x0112, 0x126: 0x0113, 0x127: 0x0112, 0x128: 0x0113, 0x129: 0x0112,
+	0x12a: 0x0113, 0x12b: 0x0112, 0x12c: 0x0113, 0x12d: 0x0112, 0x12e: 0x0113, 0x12f: 0x0112,
+	0x130: 0x06fa, 0x131: 0x07ab, 0x132: 0x0829, 0x133: 0x08aa, 0x134: 0x0113, 0x135: 0x0112,
+	0x136: 0x2353, 0x137: 0x4453, 0x138: 0x0113, 0x139: 0x0112, 0x13a: 0x0113, 0x13b: 0x0112,
+	0x13c: 0x0113, 0x13d: 0x0112, 0x13e: 0x0113, 0x13f: 0x0112,
+	// Block 0x5, offset 0x140
+	0x140: 0x0a8a, 0x141: 0x0313, 0x142: 0x0312, 0x143: 0x0853, 0x144: 0x4753, 0x145: 0x4a53,
+	0x146: 0x0113, 0x147: 0x0112, 0x148: 0x0113, 0x149: 0x0112, 0x14a: 0x0113, 0x14b: 0x0112,
+	0x14c: 0x0113, 0x14d: 0x0112, 0x14e: 0x0113, 0x14f: 0x0112, 0x150: 0x0b0a, 0x151: 0x0b8a,
+	0x152: 0x0c0a, 0x153: 0x0b52, 0x154: 0x0b52, 0x155: 0x0012, 0x156: 0x0e52, 0x157: 0x1152,
+	0x158: 0x0012, 0x159: 0x1752, 0x15a: 0x0012, 0x15b: 0x1a52, 0x15c: 0x0c8a, 0x15d: 0x0012,
+	0x15e: 0x0012, 0x15f: 0x0012, 0x160: 0x1d52, 0x161: 0x0d0a, 0x162: 0x0012, 0x163: 0x2052,
+	0x164: 0x0012, 0x165: 0x0d8a, 0x166: 0x0e0a, 0x167: 0x0012, 0x168: 0x2652, 0x169: 0x2652,
+	0x16a: 0x0e8a, 0x16b: 0x0f0a, 0x16c: 0x0f8a, 0x16d: 0x0012, 0x16e: 0x0012, 0x16f: 0x1d52,
+	0x170: 0x0012, 0x171: 0x100a, 0x172: 0x2c52, 0x173: 0x0012, 0x174: 0x0012, 0x175: 0x3252,
+	0x176: 0x0012, 0x177: 0x0012, 0x178: 0x0012, 0x179: 0x0012, 0x17a: 0x0012, 0x17b: 0x0012,
+	0x17c: 0x0012, 0x17d: 0x108a, 0x17e: 0x0012, 0x17f: 0x0012,
+	// Block 0x6, offset 0x180
+	0x180: 0x3552, 0x181: 0x0012, 0x182: 0x0012, 0x183: 0x3852, 0x184: 0x0012, 0x185: 0x0012,
+	0x186: 0x0012, 0x187: 0x110a, 0x188: 0x3552, 0x189: 0x4752, 0x18a: 0x3b52, 0x18b: 0x3e52,
+	0x18c: 0x4a52, 0x18d: 0x0012, 0x18e: 0x0012, 0x18f: 0x0012, 0x190: 0x0012, 0x191: 0x0012,
+	0x192: 0x4152, 0x193: 0x0012, 0x194: 0x0010, 0x195: 0x0012, 0x196: 0x0012, 0x197: 0x0012,
+	0x198: 0x0012, 0x199: 0x0012, 0x19a: 0x0012, 0x19b: 0x0012, 0x19c: 0x0012, 0x19d: 0x118a,
+	0x19e: 0x120a, 0x19f: 0x0012, 0x1a0: 0x0012, 0x1a1: 0x0012, 0x1a2: 0x0012, 0x1a3: 0x0012,
+	0x1a4: 0x0012, 0x1a5: 0x0012, 0x1a6: 0x0012, 0x1a7: 0x0012, 0x1a8: 0x0012, 0x1a9: 0x0012,
+	0x1aa: 0x0012, 0x1ab: 0x0012, 0x1ac: 0x0012, 0x1ad: 0x0012, 0x1ae: 0x0012, 0x1af: 0x0012,
+	0x1b0: 0x0015, 0x1b1: 0x0015, 0x1b2: 0x0015, 0x1b3: 0x0015, 0x1b4: 0x0015, 0x1b5: 0x0015,
+	0x1b6: 0x0015, 0x1b7: 0x0015, 0x1b8: 0x0015, 0x1b9: 0x0014, 0x1ba: 0x0014, 0x1bb: 0x0014,
+	0x1bc: 0x0014, 0x1bd: 0x0014, 0x1be: 0x0014, 0x1bf: 0x0014,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x0024, 0x1c1: 0x0024, 0x1c2: 0x0024, 0x1c3: 0x0024, 0x1c4: 0x0024, 0x1c5: 0x128d,
+	0x1c6: 0x0024, 0x1c7: 0x0034, 0x1c8: 0x0034, 0x1c9: 0x0034, 0x1ca: 0x0024, 0x1cb: 0x0024,
+	0x1cc: 0x0024, 0x1cd: 0x0034, 0x1ce: 0x0034, 0x1cf: 0x0014, 0x1d0: 0x0024, 0x1d1: 0x0024,
+	0x1d2: 0x0024, 0x1d3: 0x0034, 0x1d4: 0x0034, 0x1d5: 0x0034, 0x1d6: 0x0034, 0x1d7: 0x0024,
+	0x1d8: 0x0034, 0x1d9: 0x0034, 0x1da: 0x0034, 0x1db: 0x0024, 0x1dc: 0x0034, 0x1dd: 0x0034,
+	0x1de: 0x0034, 0x1df: 0x0034, 0x1e0: 0x0034, 0x1e1: 0x0034, 0x1e2: 0x0034, 0x1e3: 0x0024,
+	0x1e4: 0x0024, 0x1e5: 0x0024, 0x1e6: 0x0024, 0x1e7: 0x0024, 0x1e8: 0x0024, 0x1e9: 0x0024,
+	0x1ea: 0x0024, 0x1eb: 0x0024, 0x1ec: 0x0024, 0x1ed: 0x0024, 0x1ee: 0x0024, 0x1ef: 0x0024,
+	0x1f0: 0x0113, 0x1f1: 0x0112, 0x1f2: 0x0113, 0x1f3: 0x0112, 0x1f4: 0x0014, 0x1f5: 0x0004,
+	0x1f6: 0x0113, 0x1f7: 0x0112, 0x1fa: 0x0015, 0x1fb: 0x4d52,
+	0x1fc: 0x5052, 0x1fd: 0x5052, 0x1ff: 0x5353,
+	// Block 0x8, offset 0x200
+	0x204: 0x0004, 0x205: 0x0004,
+	0x206: 0x2a13, 0x207: 0x0054, 0x208: 0x2513, 0x209: 0x2713, 0x20a: 0x2513,
+	0x20c: 0x5653, 0x20e: 0x5953, 0x20f: 0x5c53, 0x210: 0x130a, 0x211: 0x2013,
+	0x212: 0x2013, 0x213: 0x2013, 0x214: 0x2013, 0x215: 0x2013, 0x216: 0x2013, 0x217: 0x2013,
+	0x218: 0x2013, 0x219: 0x2013, 0x21a: 0x2013, 0x21b: 0x2013, 0x21c: 0x2013, 0x21d: 0x2013,
+	0x21e: 0x2013, 0x21f: 0x2013, 0x220: 0x5f53, 0x221: 0x5f53, 0x223: 0x5f53,
+	0x224: 0x5f53, 0x225: 0x5f53, 0x226: 0x5f53, 0x227: 0x5f53, 0x228: 0x5f53, 0x229: 0x5f53,
+	0x22a: 0x5f53, 0x22b: 0x5f53, 0x22c: 0x2a12, 0x22d: 0x2512, 0x22e: 0x2712, 0x22f: 0x2512,
+	0x230: 0x144a, 0x231: 0x2012, 0x232: 0x2012, 0x233: 0x2012, 0x234: 0x2012, 0x235: 0x2012,
+	0x236: 0x2012, 0x237: 0x2012, 0x238: 0x2012, 0x239: 0x2012, 0x23a: 0x2012, 0x23b: 0x2012,
+	0x23c: 0x2012, 0x23d: 0x2012, 0x23e: 0x2012, 0x23f: 0x2012,
+	// Block 0x9, offset 0x240
+	0x240: 0x5f52, 0x241: 0x5f52, 0x242: 0x158a, 0x243: 0x5f52, 0x244: 0x5f52, 0x245: 0x5f52,
+	0x246: 0x5f52, 0x247: 0x5f52, 0x248: 0x5f52, 0x249: 0x5f52, 0x24a: 0x5f52, 0x24b: 0x5f52,
+	0x24c: 0x5652, 0x24d: 0x5952, 0x24e: 0x5c52, 0x24f: 0x1813, 0x250: 0x160a, 0x251: 0x168a,
+	0x252: 0x0013, 0x253: 0x0013, 0x254: 0x0013, 0x255: 0x170a, 0x256: 0x178a, 0x257: 0x1812,
+	0x258: 0x0113, 0x259: 0x0112, 0x25a: 0x0113, 0x25b: 0x0112, 0x25c: 0x0113, 0x25d: 0x0112,
+	0x25e: 0x0113, 0x25f: 0x0112, 0x260: 0x0113, 0x261: 0x0112, 0x262: 0x0113, 0x263: 0x0112,
+	0x264: 0x0113, 0x265: 0x0112, 0x266: 0x0113, 0x267: 0x0112, 0x268: 0x0113, 0x269: 0x0112,
+	0x26a: 0x0113, 0x26b: 0x0112, 0x26c: 0x0113, 0x26d: 0x0112, 0x26e: 0x0113, 0x26f: 0x0112,
+	0x270: 0x180a, 0x271: 0x188a, 0x272: 0x0b12, 0x273: 0x5352, 0x274: 0x6253, 0x275: 0x190a,
+	0x277: 0x0f13, 0x278: 0x0f12, 0x279: 0x0b13, 0x27a: 0x0113, 0x27b: 0x0112,
+	0x27c: 0x0012, 0x27d: 0x4d53, 0x27e: 0x5053, 0x27f: 0x5053,
+	// Block 0xa, offset 0x280
+	0x280: 0x0812, 0x281: 0x0812, 0x282: 0x0812, 0x283: 0x0812, 0x284: 0x0812, 0x285: 0x0812,
+	0x288: 0x0813, 0x289: 0x0813, 0x28a: 0x0813, 0x28b: 0x0813,
+	0x28c: 0x0813, 0x28d: 0x0813, 0x290: 0x239a, 0x291: 0x0812,
+	0x292: 0x247a, 0x293: 0x0812, 0x294: 0x25ba, 0x295: 0x0812, 0x296: 0x26fa, 0x297: 0x0812,
+	0x299: 0x0813, 0x29b: 0x0813, 0x29d: 0x0813,
+	0x29f: 0x0813, 0x2a0: 0x0812, 0x2a1: 0x0812, 0x2a2: 0x0812, 0x2a3: 0x0812,
+	0x2a4: 0x0812, 0x2a5: 0x0812, 0x2a6: 0x0812, 0x2a7: 0x0812, 0x2a8: 0x0813, 0x2a9: 0x0813,
+	0x2aa: 0x0813, 0x2ab: 0x0813, 0x2ac: 0x0813, 0x2ad: 0x0813, 0x2ae: 0x0813, 0x2af: 0x0813,
+	0x2b0: 0x8b52, 0x2b1: 0x8b52, 0x2b2: 0x8e52, 0x2b3: 0x8e52, 0x2b4: 0x9152, 0x2b5: 0x9152,
+	0x2b6: 0x9452, 0x2b7: 0x9452, 0x2b8: 0x9752, 0x2b9: 0x9752, 0x2ba: 0x9a52, 0x2bb: 0x9a52,
+	0x2bc: 0x4d52, 0x2bd: 0x4d52,
+	// Block 0xb, offset 0x2c0
+	0x2c0: 0x283a, 0x2c1: 0x292a, 0x2c2: 0x2a1a, 0x2c3: 0x2b0a, 0x2c4: 0x2bfa, 0x2c5: 0x2cea,
+	0x2c6: 0x2dda, 0x2c7: 0x2eca, 0x2c8: 0x2fb9, 0x2c9: 0x30a9, 0x2ca: 0x3199, 0x2cb: 0x3289,
+	0x2cc: 0x3379, 0x2cd: 0x3469, 0x2ce: 0x3559, 0x2cf: 0x3649, 0x2d0: 0x373a, 0x2d1: 0x382a,
+	0x2d2: 0x391a, 0x2d3: 0x3a0a, 0x2d4: 0x3afa, 0x2d5: 0x3bea, 0x2d6: 0x3cda, 0x2d7: 0x3dca,
+	0x2d8: 0x3eb9, 0x2d9: 0x3fa9, 0x2da: 0x4099, 0x2db: 0x4189, 0x2dc: 0x4279, 0x2dd: 0x4369,
+	0x2de: 0x4459, 0x2df: 0x4549, 0x2e0: 0x463a, 0x2e1: 0x472a, 0x2e2: 0x481a, 0x2e3: 0x490a,
+	0x2e4: 0x49fa, 0x2e5: 0x4aea, 0x2e6: 0x4bda, 0x2e7: 0x4cca, 0x2e8: 0x4db9, 0x2e9: 0x4ea9,
+	0x2ea: 0x4f99, 0x2eb: 0x5089, 0x2ec: 0x5179, 0x2ed: 0x5269, 0x2ee: 0x5359, 0x2ef: 0x5449,
+	0x2f0: 0x0812, 0x2f1: 0x0812, 0x2f2: 0x553a, 0x2f3: 0x564a, 0x2f4: 0x571a,
+	0x2f6: 0x57fa, 0x2f7: 0x58da, 0x2f8: 0x0813, 0x2f9: 0x0813, 0x2fa: 0x8b53, 0x2fb: 0x8b53,
+	0x2fc: 0x5a19, 0x2fd: 0x0004, 0x2fe: 0x5aea, 0x2ff: 0x0004,
+	// Block 0xc, offset 0x300
+	0x300: 0x0004, 0x301: 0x0004, 0x302: 0x5b6a, 0x303: 0x5c7a, 0x304: 0x5d4a,
+	0x306: 0x5e2a, 0x307: 0x5f0a, 0x308: 0x8e53, 0x309: 0x8e53, 0x30a: 0x9153, 0x30b: 0x9153,
+	0x30c: 0x6049, 0x30d: 0x0004, 0x30e: 0x0004, 0x30f: 0x0004, 0x310: 0x0812, 0x311: 0x0812,
+	0x312: 0x611a, 0x313: 0x625a, 0x316: 0x639a, 0x317: 0x647a,
+	0x318: 0x0813, 0x319: 0x0813, 0x31a: 0x9453, 0x31b: 0x9453, 0x31d: 0x0004,
+	0x31e: 0x0004, 0x31f: 0x0004, 0x320: 0x0812, 0x321: 0x0812, 0x322: 0x65ba, 0x323: 0x66fa,
+	0x324: 0x683a, 0x325: 0x0912, 0x326: 0x691a, 0x327: 0x69fa, 0x328: 0x0813, 0x329: 0x0813,
+	0x32a: 0x9a53, 0x32b: 0x9a53, 0x32c: 0x0913, 0x32d: 0x0004, 0x32e: 0x0004, 0x32f: 0x0004,
+	0x332: 0x6b3a, 0x333: 0x6c4a, 0x334: 0x6d1a,
+	0x336: 0x6dfa, 0x337: 0x6eda, 0x338: 0x9753, 0x339: 0x9753, 0x33a: 0x4d53, 0x33b: 0x4d53,
+	0x33c: 0x7019, 0x33d: 0x0004, 0x33e: 0x0004,
+	// Block 0xd, offset 0x340
+	0x342: 0x0013,
+	0x347: 0x0013, 0x34a: 0x0012, 0x34b: 0x0013,
+	0x34c: 0x0013, 0x34d: 0x0013, 0x34e: 0x0012, 0x34f: 0x0012, 0x350: 0x0013, 0x351: 0x0013,
+	0x352: 0x0013, 0x353: 0x0012, 0x355: 0x0013,
+	0x359: 0x0013, 0x35a: 0x0013, 0x35b: 0x0013, 0x35c: 0x0013, 0x35d: 0x0013,
+	0x364: 0x0013, 0x366: 0x70eb, 0x368: 0x0013,
+	0x36a: 0x714b, 0x36b: 0x718b, 0x36c: 0x0013, 0x36d: 0x0013, 0x36f: 0x0012,
+	0x370: 0x0013, 0x371: 0x0013, 0x372: 0x9d53, 0x373: 0x0013, 0x374: 0x0012, 0x375: 0x0010,
+	0x376: 0x0010, 0x377: 0x0010, 0x378: 0x0010, 0x379: 0x0012,
+	0x37c: 0x0012, 0x37d: 0x0012, 0x37e: 0x0013, 0x37f: 0x0013,
+	// Block 0xe, offset 0x380
+	0x380: 0x1a13, 0x381: 0x1a13, 0x382: 0x1e13, 0x383: 0x1e13, 0x384: 0x1a13, 0x385: 0x1a13,
+	0x386: 0x2613, 0x387: 0x2613, 0x388: 0x2a13, 0x389: 0x2a13, 0x38a: 0x2e13, 0x38b: 0x2e13,
+	0x38c: 0x2a13, 0x38d: 0x2a13, 0x38e: 0x2613, 0x38f: 0x2613, 0x390: 0xa052, 0x391: 0xa052,
+	0x392: 0xa352, 0x393: 0xa352, 0x394: 0xa652, 0x395: 0xa652, 0x396: 0xa352, 0x397: 0xa352,
+	0x398: 0xa052, 0x399: 0xa052, 0x39a: 0x1a12, 0x39b: 0x1a12, 0x39c: 0x1e12, 0x39d: 0x1e12,
+	0x39e: 0x1a12, 0x39f: 0x1a12, 0x3a0: 0x2612, 0x3a1: 0x2612, 0x3a2: 0x2a12, 0x3a3: 0x2a12,
+	0x3a4: 0x2e12, 0x3a5: 0x2e12, 0x3a6: 0x2a12, 0x3a7: 0x2a12, 0x3a8: 0x2612, 0x3a9: 0x2612,
+	// Block 0xf, offset 0x3c0
+	0x3c0: 0x6552, 0x3c1: 0x6552, 0x3c2: 0x6552, 0x3c3: 0x6552, 0x3c4: 0x6552, 0x3c5: 0x6552,
+	0x3c6: 0x6552, 0x3c7: 0x6552, 0x3c8: 0x6552, 0x3c9: 0x6552, 0x3ca: 0x6552, 0x3cb: 0x6552,
+	0x3cc: 0x6552, 0x3cd: 0x6552, 0x3ce: 0x6552, 0x3cf: 0x6552, 0x3d0: 0xa952, 0x3d1: 0xa952,
+	0x3d2: 0xa952, 0x3d3: 0xa952, 0x3d4: 0xa952, 0x3d5: 0xa952, 0x3d6: 0xa952, 0x3d7: 0xa952,
+	0x3d8: 0xa952, 0x3d9: 0xa952, 0x3da: 0xa952, 0x3db: 0xa952, 0x3dc: 0xa952, 0x3dd: 0xa952,
+	0x3de: 0xa952, 0x3e0: 0x0113, 0x3e1: 0x0112, 0x3e2: 0x71eb, 0x3e3: 0x8853,
+	0x3e4: 0x724b, 0x3e5: 0x72aa, 0x3e6: 0x730a, 0x3e7: 0x0f13, 0x3e8: 0x0f12, 0x3e9: 0x0313,
+	0x3ea: 0x0312, 0x3eb: 0x0713, 0x3ec: 0x0712, 0x3ed: 0x736b, 0x3ee: 0x73cb, 0x3ef: 0x742b,
+	0x3f0: 0x748b, 0x3f1: 0x0012, 0x3f2: 0x0113, 0x3f3: 0x0112, 0x3f4: 0x0012, 0x3f5: 0x0313,
+	0x3f6: 0x0312, 0x3f7: 0x0012, 0x3f8: 0x0012, 0x3f9: 0x0012, 0x3fa: 0x0012, 0x3fb: 0x0012,
+	0x3fc: 0x0015, 0x3fd: 0x0015, 0x3fe: 0x74eb, 0x3ff: 0x754b,
+	// Block 0x10, offset 0x400
+	0x400: 0x0113, 0x401: 0x0112, 0x402: 0x0113, 0x403: 0x0112, 0x404: 0x0113, 0x405: 0x0112,
+	0x406: 0x0113, 0x407: 0x0112, 0x408: 0x0014, 0x409: 0x0004, 0x40a: 0x0004, 0x40b: 0x0713,
+	0x40c: 0x0712, 0x40d: 0x75ab, 0x40e: 0x0012, 0x40f: 0x0010, 0x410: 0x0113, 0x411: 0x0112,
+	0x412: 0x0113, 0x413: 0x0112, 0x414: 0x0012, 0x415: 0x0012, 0x416: 0x0113, 0x417: 0x0112,
+	0x418: 0x0113, 0x419: 0x0112, 0x41a: 0x0113, 0x41b: 0x0112, 0x41c: 0x0113, 0x41d: 0x0112,
+	0x41e: 0x0113, 0x41f: 0x0112, 0x420: 0x0113, 0x421: 0x0112, 0x422: 0x0113, 0x423: 0x0112,
+	0x424: 0x0113, 0x425: 0x0112, 0x426: 0x0113, 0x427: 0x0112, 0x428: 0x0113, 0x429: 0x0112,
+	0x42a: 0x760b, 0x42b: 0x766b, 0x42c: 0x76cb, 0x42d: 0x772b, 0x42e: 0x778b,
+	0x430: 0x77eb, 0x431: 0x784b, 0x432: 0x78ab, 0x433: 0xac53, 0x434: 0x0113, 0x435: 0x0112,
+	0x436: 0x0113, 0x437: 0x0112,
+	// Block 0x11, offset 0x440
+	0x440: 0x790a, 0x441: 0x798a, 0x442: 0x7a0a, 0x443: 0x7a8a, 0x444: 0x7b3a, 0x445: 0x7bea,
+	0x446: 0x7c6a,
+	0x453: 0x7cea, 0x454: 0x7dca, 0x455: 0x7eaa, 0x456: 0x7f8a, 0x457: 0x806a,
+	0x45d: 0x0010,
+	0x45e: 0x0034, 0x45f: 0x0010, 0x460: 0x0010, 0x461: 0x0010, 0x462: 0x0010, 0x463: 0x0010,
+	0x464: 0x0010, 0x465: 0x0010, 0x466: 0x0010, 0x467: 0x0010, 0x468: 0x0010,
+	0x46a: 0x0010, 0x46b: 0x0010, 0x46c: 0x0010, 0x46d: 0x0010, 0x46e: 0x0010, 0x46f: 0x0010,
+	0x470: 0x0010, 0x471: 0x0010, 0x472: 0x0010, 0x473: 0x0010, 0x474: 0x0010, 0x475: 0x0010,
+	0x476: 0x0010, 0x478: 0x0010, 0x479: 0x0010, 0x47a: 0x0010, 0x47b: 0x0010,
+	0x47c: 0x0010, 0x47e: 0x0010,
+	// Block 0x12, offset 0x480
+	0x480: 0x2213, 0x481: 0x2213, 0x482: 0x2613, 0x483: 0x2613, 0x484: 0x2213, 0x485: 0x2213,
+	0x486: 0x2e13, 0x487: 0x2e13, 0x488: 0x2213, 0x489: 0x2213, 0x48a: 0x2613, 0x48b: 0x2613,
+	0x48c: 0x2213, 0x48d: 0x2213, 0x48e: 0x3e13, 0x48f: 0x3e13, 0x490: 0x2213, 0x491: 0x2213,
+	0x492: 0x2613, 0x493: 0x2613, 0x494: 0x2213, 0x495: 0x2213, 0x496: 0x2e13, 0x497: 0x2e13,
+	0x498: 0x2213, 0x499: 0x2213, 0x49a: 0x2613, 0x49b: 0x2613, 0x49c: 0x2213, 0x49d: 0x2213,
+	0x49e: 0xb553, 0x49f: 0xb553, 0x4a0: 0xb853, 0x4a1: 0xb853, 0x4a2: 0x2212, 0x4a3: 0x2212,
+	0x4a4: 0x2612, 0x4a5: 0x2612, 0x4a6: 0x2212, 0x4a7: 0x2212, 0x4a8: 0x2e12, 0x4a9: 0x2e12,
+	0x4aa: 0x2212, 0x4ab: 0x2212, 0x4ac: 0x2612, 0x4ad: 0x2612, 0x4ae: 0x2212, 0x4af: 0x2212,
+	0x4b0: 0x3e12, 0x4b1: 0x3e12, 0x4b2: 0x2212, 0x4b3: 0x2212, 0x4b4: 0x2612, 0x4b5: 0x2612,
+	0x4b6: 0x2212, 0x4b7: 0x2212, 0x4b8: 0x2e12, 0x4b9: 0x2e12, 0x4ba: 0x2212, 0x4bb: 0x2212,
+	0x4bc: 0x2612, 0x4bd: 0x2612, 0x4be: 0x2212, 0x4bf: 0x2212,
+	// Block 0x13, offset 0x4c0
+	0x4c2: 0x0010,
+	0x4c7: 0x0010, 0x4c9: 0x0010, 0x4cb: 0x0010,
+	0x4cd: 0x0010, 0x4ce: 0x0010, 0x4cf: 0x0010, 0x4d1: 0x0010,
+	0x4d2: 0x0010, 0x4d4: 0x0010, 0x4d7: 0x0010,
+	0x4d9: 0x0010, 0x4db: 0x0010, 0x4dd: 0x0010,
+	0x4df: 0x0010, 0x4e1: 0x0010, 0x4e2: 0x0010,
+	0x4e4: 0x0010, 0x4e7: 0x0010, 0x4e8: 0x0010, 0x4e9: 0x0010,
+	0x4ea: 0x0010, 0x4ec: 0x0010, 0x4ed: 0x0010, 0x4ee: 0x0010, 0x4ef: 0x0010,
+	0x4f0: 0x0010, 0x4f1: 0x0010, 0x4f2: 0x0010, 0x4f4: 0x0010, 0x4f5: 0x0010,
+	0x4f6: 0x0010, 0x4f7: 0x0010, 0x4f9: 0x0010, 0x4fa: 0x0010, 0x4fb: 0x0010,
+	0x4fc: 0x0010, 0x4fe: 0x0010,
+}
+
+// caseIndex: 25 blocks, 1600 entries, 3200 bytes
+// Block 0 is the zero block.
+var caseIndex = [1600]uint16{
+	// Block 0x0, offset 0x0
+	// Block 0x1, offset 0x40
+	// Block 0x2, offset 0x80
+	// Block 0x3, offset 0xc0
+	0xc2: 0x12, 0xc3: 0x13, 0xc4: 0x14, 0xc5: 0x15, 0xc6: 0x01, 0xc7: 0x02,
+	0xc8: 0x16, 0xc9: 0x03, 0xca: 0x04, 0xcb: 0x17, 0xcc: 0x18, 0xcd: 0x05, 0xce: 0x06, 0xcf: 0x07,
+	0xd0: 0x19, 0xd1: 0x1a, 0xd2: 0x1b, 0xd3: 0x1c, 0xd4: 0x1d, 0xd5: 0x1e, 0xd6: 0x1f, 0xd7: 0x20,
+	0xd8: 0x21, 0xd9: 0x22, 0xda: 0x23, 0xdb: 0x24, 0xdc: 0x25, 0xdd: 0x26, 0xde: 0x27, 0xdf: 0x28,
+	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05,
+	0xea: 0x06, 0xeb: 0x07, 0xec: 0x07, 0xed: 0x08, 0xef: 0x09,
+	0xf0: 0x14, 0xf3: 0x16,
+	// Block 0x4, offset 0x100
+	0x120: 0x29, 0x121: 0x2a, 0x122: 0x2b, 0x123: 0x2c, 0x124: 0x2d, 0x125: 0x2e, 0x126: 0x2f, 0x127: 0x30,
+	0x128: 0x31, 0x129: 0x32, 0x12a: 0x33, 0x12b: 0x34, 0x12c: 0x35, 0x12d: 0x36, 0x12e: 0x37, 0x12f: 0x38,
+	0x130: 0x39, 0x131: 0x3a, 0x132: 0x3b, 0x133: 0x3c, 0x134: 0x3d, 0x135: 0x3e, 0x136: 0x3f, 0x137: 0x40,
+	0x138: 0x41, 0x139: 0x42, 0x13a: 0x43, 0x13b: 0x44, 0x13c: 0x45, 0x13d: 0x46, 0x13e: 0x47, 0x13f: 0x48,
+	// Block 0x5, offset 0x140
+	0x140: 0x49, 0x141: 0x4a, 0x142: 0x4b, 0x143: 0x4c, 0x144: 0x23, 0x145: 0x23, 0x146: 0x23, 0x147: 0x23,
+	0x148: 0x23, 0x149: 0x4d, 0x14a: 0x4e, 0x14b: 0x4f, 0x14c: 0x50, 0x14d: 0x51, 0x14e: 0x52, 0x14f: 0x53,
+	0x150: 0x54, 0x151: 0x23, 0x152: 0x23, 0x153: 0x23, 0x154: 0x23, 0x155: 0x23, 0x156: 0x23, 0x157: 0x23,
+	0x158: 0x23, 0x159: 0x55, 0x15a: 0x56, 0x15b: 0x57, 0x15c: 0x58, 0x15d: 0x59, 0x15e: 0x5a, 0x15f: 0x5b,
+	0x160: 0x5c, 0x161: 0x5d, 0x162: 0x5e, 0x163: 0x5f, 0x164: 0x60, 0x165: 0x61, 0x167: 0x62,
+	0x168: 0x63, 0x169: 0x64, 0x16a: 0x65, 0x16c: 0x66, 0x16d: 0x67, 0x16e: 0x68, 0x16f: 0x69,
+	0x170: 0x6a, 0x171: 0x6b, 0x172: 0x6c, 0x173: 0x6d, 0x174: 0x6e, 0x175: 0x6f, 0x176: 0x70, 0x177: 0x71,
+	0x178: 0x72, 0x179: 0x72, 0x17a: 0x73, 0x17b: 0x72, 0x17c: 0x74, 0x17d: 0x08, 0x17e: 0x09, 0x17f: 0x0a,
+	// Block 0x6, offset 0x180
+	0x180: 0x75, 0x181: 0x76, 0x182: 0x77, 0x183: 0x78, 0x184: 0x0b, 0x185: 0x79, 0x186: 0x7a,
+	0x192: 0x7b, 0x193: 0x0c,
+	0x1b0: 0x7c, 0x1b1: 0x0d, 0x1b2: 0x72, 0x1b3: 0x7d, 0x1b4: 0x7e, 0x1b5: 0x7f, 0x1b6: 0x80, 0x1b7: 0x81,
+	0x1b8: 0x82,
+	// Block 0x7, offset 0x1c0
+	0x1c0: 0x83, 0x1c2: 0x84, 0x1c3: 0x85, 0x1c4: 0x86, 0x1c5: 0x23, 0x1c6: 0x87,
+	// Block 0x8, offset 0x200
+	0x200: 0x88, 0x201: 0x23, 0x202: 0x23, 0x203: 0x23, 0x204: 0x23, 0x205: 0x23, 0x206: 0x23, 0x207: 0x23,
+	0x208: 0x23, 0x209: 0x23, 0x20a: 0x23, 0x20b: 0x23, 0x20c: 0x23, 0x20d: 0x23, 0x20e: 0x23, 0x20f: 0x23,
+	0x210: 0x23, 0x211: 0x23, 0x212: 0x89, 0x213: 0x8a, 0x214: 0x23, 0x215: 0x23, 0x216: 0x23, 0x217: 0x23,
+	0x218: 0x8b, 0x219: 0x8c, 0x21a: 0x8d, 0x21b: 0x8e, 0x21c: 0x8f, 0x21d: 0x90, 0x21e: 0x0e, 0x21f: 0x91,
+	0x220: 0x92, 0x221: 0x93, 0x222: 0x23, 0x223: 0x94, 0x224: 0x95, 0x225: 0x96, 0x226: 0x97, 0x227: 0x98,
+	0x228: 0x99, 0x229: 0x9a, 0x22a: 0x9b, 0x22b: 0x9c, 0x22c: 0x9d, 0x22d: 0x9e, 0x22e: 0x9f, 0x22f: 0xa0,
+	0x230: 0x23, 0x231: 0x23, 0x232: 0x23, 0x233: 0x23, 0x234: 0x23, 0x235: 0x23, 0x236: 0x23, 0x237: 0x23,
+	0x238: 0x23, 0x239: 0x23, 0x23a: 0x23, 0x23b: 0x23, 0x23c: 0x23, 0x23d: 0x23, 0x23e: 0x23, 0x23f: 0x23,
+	// Block 0x9, offset 0x240
+	0x240: 0x23, 0x241: 0x23, 0x242: 0x23, 0x243: 0x23, 0x244: 0x23, 0x245: 0x23, 0x246: 0x23, 0x247: 0x23,
+	0x248: 0x23, 0x249: 0x23, 0x24a: 0x23, 0x24b: 0x23, 0x24c: 0x23, 0x24d: 0x23, 0x24e: 0x23, 0x24f: 0x23,
+	0x250: 0x23, 0x251: 0x23, 0x252: 0x23, 0x253: 0x23, 0x254: 0x23, 0x255: 0x23, 0x256: 0x23, 0x257: 0x23,
+	0x258: 0x23, 0x259: 0x23, 0x25a: 0x23, 0x25b: 0x23, 0x25c: 0x23, 0x25d: 0x23, 0x25e: 0x23, 0x25f: 0x23,
+	0x260: 0x23, 0x261: 0x23, 0x262: 0x23, 0x263: 0x23, 0x264: 0x23, 0x265: 0x23, 0x266: 0x23, 0x267: 0x23,
+	0x268: 0x23, 0x269: 0x23, 0x26a: 0x23, 0x26b: 0x23, 0x26c: 0x23, 0x26d: 0x23, 0x26e: 0x23, 0x26f: 0x23,
+	0x270: 0x23, 0x271: 0x23, 0x272: 0x23, 0x273: 0x23, 0x274: 0x23, 0x275: 0x23, 0x276: 0x23, 0x277: 0x23,
+	0x278: 0x23, 0x279: 0x23, 0x27a: 0x23, 0x27b: 0x23, 0x27c: 0x23, 0x27d: 0x23, 0x27e: 0x23, 0x27f: 0x23,
+	// Block 0xa, offset 0x280
+	0x280: 0x23, 0x281: 0x23, 0x282: 0x23, 0x283: 0x23, 0x284: 0x23, 0x285: 0x23, 0x286: 0x23, 0x287: 0x23,
+	0x288: 0x23, 0x289: 0x23, 0x28a: 0x23, 0x28b: 0x23, 0x28c: 0x23, 0x28d: 0x23, 0x28e: 0x23, 0x28f: 0x23,
+	0x290: 0x23, 0x291: 0x23, 0x292: 0x23, 0x293: 0x23, 0x294: 0x23, 0x295: 0x23, 0x296: 0x23, 0x297: 0x23,
+	0x298: 0x23, 0x299: 0x23, 0x29a: 0x23, 0x29b: 0x23, 0x29c: 0x23, 0x29d: 0x23, 0x29e: 0xa1, 0x29f: 0xa2,
+	// Block 0xb, offset 0x2c0
+	0x2ec: 0x0f, 0x2ed: 0xa3, 0x2ee: 0xa4, 0x2ef: 0xa5,
+	0x2f0: 0x23, 0x2f1: 0x23, 0x2f2: 0x23, 0x2f3: 0x23, 0x2f4: 0xa6, 0x2f5: 0xa7, 0x2f6: 0xa8, 0x2f7: 0xa9,
+	0x2f8: 0xaa, 0x2f9: 0xab, 0x2fa: 0x23, 0x2fb: 0xac, 0x2fc: 0xad, 0x2fd: 0xae, 0x2fe: 0xaf, 0x2ff: 0xb0,
+	// Block 0xc, offset 0x300
+	0x300: 0xb1, 0x301: 0xb2, 0x302: 0x23, 0x303: 0xb3, 0x305: 0xb4, 0x307: 0xb5,
+	0x30a: 0xb6, 0x30b: 0xb7, 0x30c: 0xb8, 0x30d: 0xb9, 0x30e: 0xba, 0x30f: 0xbb,
+	0x310: 0xbc, 0x311: 0xbd, 0x312: 0xbe, 0x313: 0xbf, 0x314: 0xc0, 0x315: 0xc1,
+	0x318: 0x23, 0x319: 0x23, 0x31a: 0x23, 0x31b: 0x23, 0x31c: 0xc2, 0x31d: 0xc3,
+	0x320: 0xc4, 0x321: 0xc5, 0x322: 0xc6, 0x323: 0xc7, 0x324: 0xc8, 0x326: 0xc9,
+	0x328: 0xca, 0x329: 0xcb, 0x32a: 0xcc, 0x32b: 0xcd, 0x32c: 0x5f, 0x32d: 0xce, 0x32e: 0xcf,
+	0x330: 0x23, 0x331: 0xd0, 0x332: 0xd1, 0x333: 0xd2,
+	// Block 0xd, offset 0x340
+	0x340: 0xd3, 0x341: 0xd4, 0x342: 0xd5, 0x343: 0xd6, 0x344: 0xd7, 0x345: 0xd8, 0x346: 0xd9, 0x347: 0xda,
+	0x348: 0xdb, 0x34a: 0xdc, 0x34b: 0xdd, 0x34c: 0xde, 0x34d: 0xdf,
+	0x350: 0xe0, 0x351: 0xe1, 0x352: 0xe2, 0x353: 0xe3, 0x356: 0xe4, 0x357: 0xe5,
+	0x358: 0xe6, 0x359: 0xe7, 0x35a: 0xe8, 0x35b: 0xe9, 0x35c: 0xea,
+	0x362: 0xeb, 0x363: 0xec,
+	0x36b: 0xed,
+	0x370: 0xee, 0x371: 0xef, 0x372: 0xf0,
+	// Block 0xe, offset 0x380
+	0x380: 0x23, 0x381: 0x23, 0x382: 0x23, 0x383: 0x23, 0x384: 0x23, 0x385: 0x23, 0x386: 0x23, 0x387: 0x23,
+	0x388: 0x23, 0x389: 0x23, 0x38a: 0x23, 0x38b: 0x23, 0x38c: 0x23, 0x38d: 0x23, 0x38e: 0xf1,
+	0x390: 0x23, 0x391: 0xf2, 0x392: 0x23, 0x393: 0x23, 0x394: 0x23, 0x395: 0xf3,
+	// Block 0xf, offset 0x3c0
+	0x3c0: 0x23, 0x3c1: 0x23, 0x3c2: 0x23, 0x3c3: 0x23, 0x3c4: 0x23, 0x3c5: 0x23, 0x3c6: 0x23, 0x3c7: 0x23,
+	0x3c8: 0x23, 0x3c9: 0x23, 0x3ca: 0x23, 0x3cb: 0x23, 0x3cc: 0x23, 0x3cd: 0x23, 0x3ce: 0x23, 0x3cf: 0x23,
+	0x3d0: 0xf2,
+	// Block 0x10, offset 0x400
+	0x410: 0x23, 0x411: 0x23, 0x412: 0x23, 0x413: 0x23, 0x414: 0x23, 0x415: 0x23, 0x416: 0x23, 0x417: 0x23,
+	0x418: 0x23, 0x419: 0xf4,
+	// Block 0x11, offset 0x440
+	0x460: 0x23, 0x461: 0x23, 0x462: 0x23, 0x463: 0x23, 0x464: 0x23, 0x465: 0x23, 0x466: 0x23, 0x467: 0x23,
+	0x468: 0xed, 0x469: 0xf5, 0x46b: 0xf6, 0x46c: 0xf7, 0x46d: 0xf8, 0x46e: 0xf9,
+	0x47c: 0x23, 0x47d: 0xfa, 0x47e: 0xfb, 0x47f: 0xfc,
+	// Block 0x12, offset 0x480
+	0x4b0: 0x23, 0x4b1: 0xfd, 0x4b2: 0xfe,
+	// Block 0x13, offset 0x4c0
+	0x4c5: 0xff, 0x4c6: 0x100,
+	0x4c9: 0x101,
+	0x4d0: 0x102, 0x4d1: 0x103, 0x4d2: 0x104, 0x4d3: 0x105, 0x4d4: 0x106, 0x4d5: 0x107, 0x4d6: 0x108, 0x4d7: 0x109,
+	0x4d8: 0x10a, 0x4d9: 0x10b, 0x4da: 0x10c, 0x4db: 0x10d, 0x4dc: 0x10e, 0x4dd: 0x10f, 0x4de: 0x110, 0x4df: 0x111,
+	0x4e8: 0x112, 0x4e9: 0x113, 0x4ea: 0x114,
+	// Block 0x14, offset 0x500
+	0x500: 0x115,
+	0x520: 0x23, 0x521: 0x23, 0x522: 0x23, 0x523: 0x116, 0x524: 0x10, 0x525: 0x117,
+	0x538: 0x118, 0x539: 0x11, 0x53a: 0x119,
+	// Block 0x15, offset 0x540
+	0x544: 0x11a, 0x545: 0x11b, 0x546: 0x11c,
+	0x54f: 0x11d,
+	// Block 0x16, offset 0x580
+	0x590: 0x0a, 0x591: 0x0b, 0x592: 0x0c, 0x593: 0x0d, 0x594: 0x0e, 0x596: 0x0f,
+	0x59b: 0x10, 0x59d: 0x11, 0x59e: 0x12, 0x59f: 0x13,
+	// Block 0x17, offset 0x5c0
+	0x5c0: 0x11e, 0x5c1: 0x11f, 0x5c4: 0x11f, 0x5c5: 0x11f, 0x5c6: 0x11f, 0x5c7: 0x120,
+	// Block 0x18, offset 0x600
+	0x620: 0x15,
+}
+
+// sparseOffsets: 272 entries, 544 bytes
+var sparseOffsets = []uint16{0x0, 0x9, 0xf, 0x18, 0x24, 0x2e, 0x3a, 0x3d, 0x41, 0x44, 0x48, 0x52, 0x54, 0x59, 0x69, 0x70, 0x75, 0x83, 0x84, 0x92, 0xa1, 0xab, 0xae, 0xb4, 0xbc, 0xbe, 0xc0, 0xce, 0xd4, 0xe2, 0xed, 0xf8, 0x103, 0x10f, 0x119, 0x124, 0x12f, 0x13b, 0x147, 0x14f, 0x157, 0x161, 0x16c, 0x178, 0x17e, 0x189, 0x18e, 0x196, 0x199, 0x19e, 0x1a2, 0x1a6, 0x1ad, 0x1b6, 0x1be, 0x1bf, 0x1c8, 0x1cf, 0x1d7, 0x1dd, 0x1e3, 0x1e8, 0x1ec, 0x1ef, 0x1f1, 0x1f4, 0x1f9, 0x1fa, 0x1fc, 0x1fe, 0x200, 0x207, 0x20c, 0x210, 0x219, 0x21c, 0x21f, 0x225, 0x226, 0x231, 0x232, 0x233, 0x238, 0x245, 0x24d, 0x255, 0x25e, 0x267, 0x270, 0x275, 0x278, 0x281, 0x28e, 0x290, 0x297, 0x299, 0x2a4, 0x2a5, 0x2b0, 0x2b8, 0x2c0, 0x2c6, 0x2c7, 0x2d5, 0x2da, 0x2dd, 0x2e2, 0x2e6, 0x2ec, 0x2f1, 0x2f4, 0x2f9, 0x2fe, 0x2ff, 0x305, 0x307, 0x308, 0x30a, 0x30c, 0x30f, 0x310, 0x312, 0x315, 0x31b, 0x31f, 0x321, 0x327, 0x32e, 0x332, 0x33b, 0x33c, 0x344, 0x348, 0x34d, 0x355, 0x35b, 0x361, 0x36b, 0x370, 0x379, 0x37f, 0x386, 0x38a, 0x392, 0x394, 0x396, 0x399, 0x39b, 0x39d, 0x39e, 0x39f, 0x3a1, 0x3a3, 0x3a9, 0x3ae, 0x3b0, 0x3b6, 0x3b9, 0x3bb, 0x3c1, 0x3c6, 0x3c8, 0x3c9, 0x3ca, 0x3cb, 0x3cd, 0x3cf, 0x3d1, 0x3d4, 0x3d6, 0x3d9, 0x3e1, 0x3e4, 0x3e8, 0x3f0, 0x3f2, 0x3f3, 0x3f4, 0x3f6, 0x3fc, 0x3fe, 0x3ff, 0x401, 0x403, 0x405, 0x412, 0x413, 0x414, 0x418, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x422, 0x426, 0x42c, 0x42e, 0x435, 0x438, 0x43c, 0x442, 0x44b, 0x451, 0x457, 0x461, 0x46b, 0x46d, 0x474, 0x47a, 0x480, 0x486, 0x489, 0x48f, 0x492, 0x49a, 0x49b, 0x4a2, 0x4a3, 0x4a6, 0x4a7, 0x4ad, 0x4b0, 0x4b8, 0x4b9, 0x4ba, 0x4bb, 0x4bc, 0x4be, 0x4c0, 0x4c2, 0x4c6, 0x4c7, 0x4c9, 0x4ca, 0x4cb, 0x4cd, 0x4d2, 0x4d7, 0x4db, 0x4dc, 0x4df, 0x4e3, 0x4ee, 0x4f2, 0x4fa, 0x4ff, 0x503, 0x506, 0x50a, 0x50d, 0x510, 0x515, 0x519, 0x51d, 0x521, 0x525, 0x527, 0x529, 0x52c, 0x531, 0x533, 0x538, 0x541, 0x546, 0x547, 0x54a, 0x54b, 0x54c, 0x54e, 0x54f, 0x550}
+
+// sparseValues: 1360 entries, 5440 bytes
+var sparseValues = [1360]valueRange{
+	// Block 0x0, offset 0x0
+	{value: 0x0004, lo: 0xa8, hi: 0xa8},
+	{value: 0x0012, lo: 0xaa, hi: 0xaa},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0004, lo: 0xaf, hi: 0xaf},
+	{value: 0x0004, lo: 0xb4, hi: 0xb4},
+	{value: 0x001a, lo: 0xb5, hi: 0xb5},
+	{value: 0x0054, lo: 0xb7, hi: 0xb7},
+	{value: 0x0004, lo: 0xb8, hi: 0xb8},
+	{value: 0x0012, lo: 0xba, hi: 0xba},
+	// Block 0x1, offset 0x9
+	{value: 0x2013, lo: 0x80, hi: 0x96},
+	{value: 0x2013, lo: 0x98, hi: 0x9e},
+	{value: 0x009a, lo: 0x9f, hi: 0x9f},
+	{value: 0x2012, lo: 0xa0, hi: 0xb6},
+	{value: 0x2012, lo: 0xb8, hi: 0xbe},
+	{value: 0x0252, lo: 0xbf, hi: 0xbf},
+	// Block 0x2, offset 0xf
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x011b, lo: 0xb0, hi: 0xb0},
+	{value: 0x019a, lo: 0xb1, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xb7},
+	{value: 0x0012, lo: 0xb8, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x0316, lo: 0xbd, hi: 0xbe},
+	{value: 0x0553, lo: 0xbf, hi: 0xbf},
+	// Block 0x3, offset 0x18
+	{value: 0x0552, lo: 0x80, hi: 0x80},
+	{value: 0x0316, lo: 0x81, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0316, lo: 0x85, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x01da, lo: 0x89, hi: 0x89},
+	{value: 0x0117, lo: 0x8a, hi: 0xb7},
+	{value: 0x0253, lo: 0xb8, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x0316, lo: 0xbd, hi: 0xbe},
+	{value: 0x028a, lo: 0xbf, hi: 0xbf},
+	// Block 0x4, offset 0x24
+	{value: 0x0117, lo: 0x80, hi: 0x9f},
+	{value: 0x2f53, lo: 0xa0, hi: 0xa0},
+	{value: 0x0012, lo: 0xa1, hi: 0xa1},
+	{value: 0x0117, lo: 0xa2, hi: 0xb3},
+	{value: 0x0012, lo: 0xb4, hi: 0xb9},
+	{value: 0x090b, lo: 0xba, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x2953, lo: 0xbd, hi: 0xbd},
+	{value: 0x098b, lo: 0xbe, hi: 0xbe},
+	{value: 0x0a0a, lo: 0xbf, hi: 0xbf},
+	// Block 0x5, offset 0x2e
+	{value: 0x0015, lo: 0x80, hi: 0x81},
+	{value: 0x0004, lo: 0x82, hi: 0x85},
+	{value: 0x0014, lo: 0x86, hi: 0x91},
+	{value: 0x0004, lo: 0x92, hi: 0x96},
+	{value: 0x0054, lo: 0x97, hi: 0x97},
+	{value: 0x0004, lo: 0x98, hi: 0x9f},
+	{value: 0x0015, lo: 0xa0, hi: 0xa4},
+	{value: 0x0004, lo: 0xa5, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xac},
+	{value: 0x0004, lo: 0xad, hi: 0xad},
+	{value: 0x0014, lo: 0xae, hi: 0xae},
+	{value: 0x0004, lo: 0xaf, hi: 0xbf},
+	// Block 0x6, offset 0x3a
+	{value: 0x0024, lo: 0x80, hi: 0x94},
+	{value: 0x0034, lo: 0x95, hi: 0xbc},
+	{value: 0x0024, lo: 0xbd, hi: 0xbf},
+	// Block 0x7, offset 0x3d
+	{value: 0x6553, lo: 0x80, hi: 0x8f},
+	{value: 0x2013, lo: 0x90, hi: 0x9f},
+	{value: 0x5f53, lo: 0xa0, hi: 0xaf},
+	{value: 0x2012, lo: 0xb0, hi: 0xbf},
+	// Block 0x8, offset 0x41
+	{value: 0x5f52, lo: 0x80, hi: 0x8f},
+	{value: 0x6552, lo: 0x90, hi: 0x9f},
+	{value: 0x0117, lo: 0xa0, hi: 0xbf},
+	// Block 0x9, offset 0x44
+	{value: 0x0117, lo: 0x80, hi: 0x81},
+	{value: 0x0024, lo: 0x83, hi: 0x87},
+	{value: 0x0014, lo: 0x88, hi: 0x89},
+	{value: 0x0117, lo: 0x8a, hi: 0xbf},
+	// Block 0xa, offset 0x48
+	{value: 0x0f13, lo: 0x80, hi: 0x80},
+	{value: 0x0316, lo: 0x81, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0316, lo: 0x85, hi: 0x86},
+	{value: 0x0f16, lo: 0x87, hi: 0x88},
+	{value: 0x0316, lo: 0x89, hi: 0x8a},
+	{value: 0x0716, lo: 0x8b, hi: 0x8c},
+	{value: 0x0316, lo: 0x8d, hi: 0x8e},
+	{value: 0x0f12, lo: 0x8f, hi: 0x8f},
+	{value: 0x0117, lo: 0x90, hi: 0xbf},
+	// Block 0xb, offset 0x52
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x6553, lo: 0xb1, hi: 0xbf},
+	// Block 0xc, offset 0x54
+	{value: 0x3013, lo: 0x80, hi: 0x8f},
+	{value: 0x6853, lo: 0x90, hi: 0x96},
+	{value: 0x0014, lo: 0x99, hi: 0x99},
+	{value: 0x6552, lo: 0xa1, hi: 0xaf},
+	{value: 0x3012, lo: 0xb0, hi: 0xbf},
+	// Block 0xd, offset 0x59
+	{value: 0x6852, lo: 0x80, hi: 0x86},
+	{value: 0x198a, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x91, hi: 0x91},
+	{value: 0x0024, lo: 0x92, hi: 0x95},
+	{value: 0x0034, lo: 0x96, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x99},
+	{value: 0x0034, lo: 0x9a, hi: 0x9b},
+	{value: 0x0024, lo: 0x9c, hi: 0xa1},
+	{value: 0x0034, lo: 0xa2, hi: 0xa7},
+	{value: 0x0024, lo: 0xa8, hi: 0xa9},
+	{value: 0x0034, lo: 0xaa, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xaf},
+	{value: 0x0034, lo: 0xb0, hi: 0xbd},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xe, offset 0x69
+	{value: 0x0034, lo: 0x81, hi: 0x82},
+	{value: 0x0024, lo: 0x84, hi: 0x84},
+	{value: 0x0034, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xb3},
+	{value: 0x0054, lo: 0xb4, hi: 0xb4},
+	// Block 0xf, offset 0x70
+	{value: 0x0014, lo: 0x80, hi: 0x85},
+	{value: 0x0024, lo: 0x90, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x9a},
+	{value: 0x0014, lo: 0x9c, hi: 0x9c},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x10, offset 0x75
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x8a},
+	{value: 0x0034, lo: 0x8b, hi: 0x92},
+	{value: 0x0024, lo: 0x93, hi: 0x94},
+	{value: 0x0034, lo: 0x95, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x9b},
+	{value: 0x0034, lo: 0x9c, hi: 0x9c},
+	{value: 0x0024, lo: 0x9d, hi: 0x9e},
+	{value: 0x0034, lo: 0x9f, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0010, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0034, lo: 0xb0, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xbf},
+	// Block 0x11, offset 0x83
+	{value: 0x0010, lo: 0x80, hi: 0xbf},
+	// Block 0x12, offset 0x84
+	{value: 0x0010, lo: 0x80, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x95},
+	{value: 0x0024, lo: 0x96, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x0024, lo: 0x9f, hi: 0xa2},
+	{value: 0x0034, lo: 0xa3, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa8},
+	{value: 0x0034, lo: 0xaa, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xbc},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x13, offset 0x92
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0034, lo: 0x91, hi: 0x91},
+	{value: 0x0010, lo: 0x92, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	{value: 0x0034, lo: 0xb1, hi: 0xb1},
+	{value: 0x0024, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0024, lo: 0xb5, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb9},
+	{value: 0x0024, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbc},
+	{value: 0x0024, lo: 0xbd, hi: 0xbd},
+	{value: 0x0034, lo: 0xbe, hi: 0xbe},
+	{value: 0x0024, lo: 0xbf, hi: 0xbf},
+	// Block 0x14, offset 0xa1
+	{value: 0x0024, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0024, lo: 0x83, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0024, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0024, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x88, hi: 0x88},
+	{value: 0x0024, lo: 0x89, hi: 0x8a},
+	{value: 0x0010, lo: 0x8d, hi: 0xbf},
+	// Block 0x15, offset 0xab
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0014, lo: 0xa6, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	// Block 0x16, offset 0xae
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0024, lo: 0xab, hi: 0xb1},
+	{value: 0x0034, lo: 0xb2, hi: 0xb2},
+	{value: 0x0024, lo: 0xb3, hi: 0xb3},
+	{value: 0x0014, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	// Block 0x17, offset 0xb4
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0024, lo: 0x96, hi: 0x99},
+	{value: 0x0014, lo: 0x9a, hi: 0x9a},
+	{value: 0x0024, lo: 0x9b, hi: 0xa3},
+	{value: 0x0014, lo: 0xa4, hi: 0xa4},
+	{value: 0x0024, lo: 0xa5, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa8},
+	{value: 0x0024, lo: 0xa9, hi: 0xad},
+	// Block 0x18, offset 0xbc
+	{value: 0x0010, lo: 0x80, hi: 0x98},
+	{value: 0x0034, lo: 0x99, hi: 0x9b},
+	// Block 0x19, offset 0xbe
+	{value: 0x0010, lo: 0xa0, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbd},
+	// Block 0x1a, offset 0xc0
+	{value: 0x0024, lo: 0x94, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa2},
+	{value: 0x0034, lo: 0xa3, hi: 0xa3},
+	{value: 0x0024, lo: 0xa4, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xa9},
+	{value: 0x0024, lo: 0xaa, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xb2},
+	{value: 0x0024, lo: 0xb3, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	{value: 0x0024, lo: 0xb7, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0024, lo: 0xbb, hi: 0xbf},
+	// Block 0x1b, offset 0xce
+	{value: 0x0014, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x1c, offset 0xd4
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x88},
+	{value: 0x0010, lo: 0x89, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0024, lo: 0x91, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x92},
+	{value: 0x0024, lo: 0x93, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x97},
+	{value: 0x0010, lo: 0x98, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xbf},
+	// Block 0x1d, offset 0xe2
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb2},
+	{value: 0x0010, lo: 0xb6, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x1e, offset 0xed
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9c, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xb1},
+	// Block 0x1f, offset 0xf8
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8a},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb6},
+	{value: 0x0010, lo: 0xb8, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x20, offset 0x103
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0014, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x91, hi: 0x91},
+	{value: 0x0010, lo: 0x99, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb5},
+	// Block 0x21, offset 0x10f
+	{value: 0x0014, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x22, offset 0x119
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x85},
+	{value: 0x0014, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x89, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	// Block 0x23, offset 0x124
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x24, offset 0x12f
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9c, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	// Block 0x25, offset 0x13b
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8a},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0x95},
+	{value: 0x0010, lo: 0x99, hi: 0x9a},
+	{value: 0x0010, lo: 0x9c, hi: 0x9c},
+	{value: 0x0010, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	{value: 0x0010, lo: 0xa8, hi: 0xaa},
+	{value: 0x0010, lo: 0xae, hi: 0xb9},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x26, offset 0x147
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x82},
+	{value: 0x0010, lo: 0x86, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	// Block 0x27, offset 0x14f
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb9},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbf},
+	// Block 0x28, offset 0x157
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0014, lo: 0x86, hi: 0x88},
+	{value: 0x0014, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0034, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9a},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	// Block 0x29, offset 0x161
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x2a, offset 0x16c
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0014, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x95, hi: 0x96},
+	{value: 0x0010, lo: 0x9e, hi: 0x9e},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb1, hi: 0xb2},
+	// Block 0x2b, offset 0x178
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0xba},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x2c, offset 0x17e
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x86, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8e, hi: 0x8e},
+	{value: 0x0010, lo: 0x94, hi: 0x97},
+	{value: 0x0010, lo: 0x9f, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa3},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xba, hi: 0xbf},
+	// Block 0x2d, offset 0x189
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x96},
+	{value: 0x0010, lo: 0x9a, hi: 0xb1},
+	{value: 0x0010, lo: 0xb3, hi: 0xbb},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x2e, offset 0x18e
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0010, lo: 0x8f, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x94},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9f},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	// Block 0x2f, offset 0x196
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb4, hi: 0xb7},
+	{value: 0x0034, lo: 0xb8, hi: 0xba},
+	// Block 0x30, offset 0x199
+	{value: 0x0004, lo: 0x86, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x87},
+	{value: 0x0034, lo: 0x88, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x31, offset 0x19e
+	{value: 0x0014, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb4, hi: 0xb7},
+	{value: 0x0034, lo: 0xb8, hi: 0xb9},
+	{value: 0x0014, lo: 0xbb, hi: 0xbc},
+	// Block 0x32, offset 0x1a2
+	{value: 0x0004, lo: 0x86, hi: 0x86},
+	{value: 0x0034, lo: 0x88, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x33, offset 0x1a6
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0034, lo: 0x98, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0034, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0034, lo: 0xb9, hi: 0xb9},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x34, offset 0x1ad
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0x89, hi: 0xac},
+	{value: 0x0034, lo: 0xb1, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xba, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x35, offset 0x1b6
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0024, lo: 0x82, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0024, lo: 0x86, hi: 0x87},
+	{value: 0x0010, lo: 0x88, hi: 0x8c},
+	{value: 0x0014, lo: 0x8d, hi: 0x97},
+	{value: 0x0014, lo: 0x99, hi: 0xbc},
+	// Block 0x36, offset 0x1be
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	// Block 0x37, offset 0x1bf
+	{value: 0x0010, lo: 0xab, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	{value: 0x0010, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbc},
+	{value: 0x0014, lo: 0xbd, hi: 0xbe},
+	// Block 0x38, offset 0x1c8
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x96, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x99},
+	{value: 0x0014, lo: 0x9e, hi: 0xa0},
+	{value: 0x0010, lo: 0xa2, hi: 0xa4},
+	{value: 0x0010, lo: 0xa7, hi: 0xad},
+	{value: 0x0014, lo: 0xb1, hi: 0xb4},
+	// Block 0x39, offset 0x1cf
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x6c53, lo: 0xa0, hi: 0xbf},
+	// Block 0x3a, offset 0x1d7
+	{value: 0x7053, lo: 0x80, hi: 0x85},
+	{value: 0x7053, lo: 0x87, hi: 0x87},
+	{value: 0x7053, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0xba},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x3b, offset 0x1dd
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0x9a, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x3c, offset 0x1e3
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb5},
+	{value: 0x0010, lo: 0xb8, hi: 0xbe},
+	// Block 0x3d, offset 0x1e8
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x82, hi: 0x85},
+	{value: 0x0010, lo: 0x88, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0xbf},
+	// Block 0x3e, offset 0x1ec
+	{value: 0x0010, lo: 0x80, hi: 0x90},
+	{value: 0x0010, lo: 0x92, hi: 0x95},
+	{value: 0x0010, lo: 0x98, hi: 0xbf},
+	// Block 0x3f, offset 0x1ef
+	{value: 0x0010, lo: 0x80, hi: 0x9a},
+	{value: 0x0024, lo: 0x9d, hi: 0x9f},
+	// Block 0x40, offset 0x1f1
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x7453, lo: 0xa0, hi: 0xaf},
+	{value: 0x7853, lo: 0xb0, hi: 0xbf},
+	// Block 0x41, offset 0x1f4
+	{value: 0x7c53, lo: 0x80, hi: 0x8f},
+	{value: 0x8053, lo: 0x90, hi: 0x9f},
+	{value: 0x7c53, lo: 0xa0, hi: 0xaf},
+	{value: 0x0813, lo: 0xb0, hi: 0xb5},
+	{value: 0x0892, lo: 0xb8, hi: 0xbd},
+	// Block 0x42, offset 0x1f9
+	{value: 0x0010, lo: 0x81, hi: 0xbf},
+	// Block 0x43, offset 0x1fa
+	{value: 0x0010, lo: 0x80, hi: 0xac},
+	{value: 0x0010, lo: 0xaf, hi: 0xbf},
+	// Block 0x44, offset 0x1fc
+	{value: 0x0010, lo: 0x81, hi: 0x9a},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x45, offset 0x1fe
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0010, lo: 0xae, hi: 0xb8},
+	// Block 0x46, offset 0x200
+	{value: 0x0010, lo: 0x80, hi: 0x8c},
+	{value: 0x0010, lo: 0x8e, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x93},
+	{value: 0x0034, lo: 0x94, hi: 0x94},
+	{value: 0x0010, lo: 0xa0, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	// Block 0x47, offset 0x207
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	{value: 0x0014, lo: 0x92, hi: 0x93},
+	{value: 0x0010, lo: 0xa0, hi: 0xac},
+	{value: 0x0010, lo: 0xae, hi: 0xb0},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	// Block 0x48, offset 0x20c
+	{value: 0x0014, lo: 0xb4, hi: 0xb5},
+	{value: 0x0010, lo: 0xb6, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0x49, offset 0x210
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0014, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0014, lo: 0x89, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x92},
+	{value: 0x0014, lo: 0x93, hi: 0x93},
+	{value: 0x0004, lo: 0x97, hi: 0x97},
+	{value: 0x0024, lo: 0x9d, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0x4a, offset 0x219
+	{value: 0x0014, lo: 0x8b, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x4b, offset 0x21c
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0xb7},
+	// Block 0x4c, offset 0x21f
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xa9},
+	{value: 0x0010, lo: 0xaa, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x4d, offset 0x225
+	{value: 0x0010, lo: 0x80, hi: 0xb5},
+	// Block 0x4e, offset 0x226
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0014, lo: 0xa0, hi: 0xa2},
+	{value: 0x0010, lo: 0xa3, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xab},
+	{value: 0x0010, lo: 0xb0, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb2},
+	{value: 0x0010, lo: 0xb3, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xb9},
+	{value: 0x0024, lo: 0xba, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbb},
+	// Block 0x4f, offset 0x231
+	{value: 0x0010, lo: 0x86, hi: 0x8f},
+	// Block 0x50, offset 0x232
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x51, offset 0x233
+	{value: 0x0010, lo: 0x80, hi: 0x96},
+	{value: 0x0024, lo: 0x97, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x98},
+	{value: 0x0010, lo: 0x99, hi: 0x9a},
+	{value: 0x0014, lo: 0x9b, hi: 0x9b},
+	// Block 0x52, offset 0x238
+	{value: 0x0010, lo: 0x95, hi: 0x95},
+	{value: 0x0014, lo: 0x96, hi: 0x96},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0014, lo: 0x98, hi: 0x9e},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa2},
+	{value: 0x0010, lo: 0xa3, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xac},
+	{value: 0x0010, lo: 0xad, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0024, lo: 0xb5, hi: 0xbc},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x53, offset 0x245
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0004, lo: 0xa7, hi: 0xa7},
+	{value: 0x0024, lo: 0xb0, hi: 0xb4},
+	{value: 0x0034, lo: 0xb5, hi: 0xba},
+	{value: 0x0024, lo: 0xbb, hi: 0xbc},
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	// Block 0x54, offset 0x24d
+	{value: 0x0014, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x55, offset 0x255
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x83},
+	{value: 0x0030, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x8b},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0xab, hi: 0xab},
+	{value: 0x0034, lo: 0xac, hi: 0xac},
+	{value: 0x0024, lo: 0xad, hi: 0xb3},
+	// Block 0x56, offset 0x25e
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa9},
+	{value: 0x0030, lo: 0xaa, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xbf},
+	// Block 0x57, offset 0x267
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa9},
+	{value: 0x0010, lo: 0xaa, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb1},
+	{value: 0x0030, lo: 0xb2, hi: 0xb3},
+	// Block 0x58, offset 0x270
+	{value: 0x0010, lo: 0x80, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	// Block 0x59, offset 0x275
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8d, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	// Block 0x5a, offset 0x278
+	{value: 0x1a6a, lo: 0x80, hi: 0x80},
+	{value: 0x1aea, lo: 0x81, hi: 0x81},
+	{value: 0x1b6a, lo: 0x82, hi: 0x82},
+	{value: 0x1bea, lo: 0x83, hi: 0x83},
+	{value: 0x1c6a, lo: 0x84, hi: 0x84},
+	{value: 0x1cea, lo: 0x85, hi: 0x85},
+	{value: 0x1d6a, lo: 0x86, hi: 0x86},
+	{value: 0x1dea, lo: 0x87, hi: 0x87},
+	{value: 0x1e6a, lo: 0x88, hi: 0x88},
+	// Block 0x5b, offset 0x281
+	{value: 0x0024, lo: 0x90, hi: 0x92},
+	{value: 0x0034, lo: 0x94, hi: 0x99},
+	{value: 0x0024, lo: 0x9a, hi: 0x9b},
+	{value: 0x0034, lo: 0x9c, hi: 0x9f},
+	{value: 0x0024, lo: 0xa0, hi: 0xa0},
+	{value: 0x0010, lo: 0xa1, hi: 0xa1},
+	{value: 0x0034, lo: 0xa2, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xb3},
+	{value: 0x0024, lo: 0xb4, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb6},
+	{value: 0x0024, lo: 0xb8, hi: 0xb9},
+	// Block 0x5c, offset 0x28e
+	{value: 0x0012, lo: 0x80, hi: 0xab},
+	{value: 0x0015, lo: 0xac, hi: 0xbf},
+	// Block 0x5d, offset 0x290
+	{value: 0x0015, lo: 0x80, hi: 0xaa},
+	{value: 0x0012, lo: 0xab, hi: 0xb7},
+	{value: 0x0015, lo: 0xb8, hi: 0xb8},
+	{value: 0x8452, lo: 0xb9, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xbc},
+	{value: 0x8852, lo: 0xbd, hi: 0xbd},
+	{value: 0x0012, lo: 0xbe, hi: 0xbf},
+	// Block 0x5e, offset 0x297
+	{value: 0x0012, lo: 0x80, hi: 0x9a},
+	{value: 0x0015, lo: 0x9b, hi: 0xbf},
+	// Block 0x5f, offset 0x299
+	{value: 0x0024, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0024, lo: 0x83, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0024, lo: 0x8b, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x90},
+	{value: 0x0024, lo: 0x91, hi: 0xb5},
+	{value: 0x0024, lo: 0xbb, hi: 0xbb},
+	{value: 0x0034, lo: 0xbc, hi: 0xbd},
+	{value: 0x0024, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x60, offset 0x2a4
+	{value: 0x0117, lo: 0x80, hi: 0xbf},
+	// Block 0x61, offset 0x2a5
+	{value: 0x0117, lo: 0x80, hi: 0x95},
+	{value: 0x1f1a, lo: 0x96, hi: 0x96},
+	{value: 0x1fca, lo: 0x97, hi: 0x97},
+	{value: 0x207a, lo: 0x98, hi: 0x98},
+	{value: 0x212a, lo: 0x99, hi: 0x99},
+	{value: 0x21da, lo: 0x9a, hi: 0x9a},
+	{value: 0x228a, lo: 0x9b, hi: 0x9b},
+	{value: 0x0012, lo: 0x9c, hi: 0x9d},
+	{value: 0x233b, lo: 0x9e, hi: 0x9e},
+	{value: 0x0012, lo: 0x9f, hi: 0x9f},
+	{value: 0x0117, lo: 0xa0, hi: 0xbf},
+	// Block 0x62, offset 0x2b0
+	{value: 0x0812, lo: 0x80, hi: 0x87},
+	{value: 0x0813, lo: 0x88, hi: 0x8f},
+	{value: 0x0812, lo: 0x90, hi: 0x95},
+	{value: 0x0813, lo: 0x98, hi: 0x9d},
+	{value: 0x0812, lo: 0xa0, hi: 0xa7},
+	{value: 0x0813, lo: 0xa8, hi: 0xaf},
+	{value: 0x0812, lo: 0xb0, hi: 0xb7},
+	{value: 0x0813, lo: 0xb8, hi: 0xbf},
+	// Block 0x63, offset 0x2b8
+	{value: 0x0004, lo: 0x8b, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8f},
+	{value: 0x0054, lo: 0x98, hi: 0x99},
+	{value: 0x0054, lo: 0xa4, hi: 0xa4},
+	{value: 0x0054, lo: 0xa7, hi: 0xa7},
+	{value: 0x0014, lo: 0xaa, hi: 0xae},
+	{value: 0x0010, lo: 0xaf, hi: 0xaf},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x64, offset 0x2c0
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x94, hi: 0x94},
+	{value: 0x0014, lo: 0xa0, hi: 0xa4},
+	{value: 0x0014, lo: 0xa6, hi: 0xaf},
+	{value: 0x0015, lo: 0xb1, hi: 0xb1},
+	{value: 0x0015, lo: 0xbf, hi: 0xbf},
+	// Block 0x65, offset 0x2c6
+	{value: 0x0015, lo: 0x90, hi: 0x9c},
+	// Block 0x66, offset 0x2c7
+	{value: 0x0024, lo: 0x90, hi: 0x91},
+	{value: 0x0034, lo: 0x92, hi: 0x93},
+	{value: 0x0024, lo: 0x94, hi: 0x97},
+	{value: 0x0034, lo: 0x98, hi: 0x9a},
+	{value: 0x0024, lo: 0x9b, hi: 0x9c},
+	{value: 0x0014, lo: 0x9d, hi: 0xa0},
+	{value: 0x0024, lo: 0xa1, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa4},
+	{value: 0x0034, lo: 0xa5, hi: 0xa6},
+	{value: 0x0024, lo: 0xa7, hi: 0xa7},
+	{value: 0x0034, lo: 0xa8, hi: 0xa8},
+	{value: 0x0024, lo: 0xa9, hi: 0xa9},
+	{value: 0x0034, lo: 0xaa, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	// Block 0x67, offset 0x2d5
+	{value: 0x0016, lo: 0x85, hi: 0x86},
+	{value: 0x0012, lo: 0x87, hi: 0x89},
+	{value: 0x9d52, lo: 0x8e, hi: 0x8e},
+	{value: 0x1013, lo: 0xa0, hi: 0xaf},
+	{value: 0x1012, lo: 0xb0, hi: 0xbf},
+	// Block 0x68, offset 0x2da
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0716, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x88},
+	// Block 0x69, offset 0x2dd
+	{value: 0xa053, lo: 0xb6, hi: 0xb7},
+	{value: 0xa353, lo: 0xb8, hi: 0xb9},
+	{value: 0xa653, lo: 0xba, hi: 0xbb},
+	{value: 0xa353, lo: 0xbc, hi: 0xbd},
+	{value: 0xa053, lo: 0xbe, hi: 0xbf},
+	// Block 0x6a, offset 0x2e2
+	{value: 0x3013, lo: 0x80, hi: 0x8f},
+	{value: 0x6553, lo: 0x90, hi: 0x9f},
+	{value: 0xa953, lo: 0xa0, hi: 0xae},
+	{value: 0x3012, lo: 0xb0, hi: 0xbf},
+	// Block 0x6b, offset 0x2e6
+	{value: 0x0117, lo: 0x80, hi: 0xa3},
+	{value: 0x0012, lo: 0xa4, hi: 0xa4},
+	{value: 0x0716, lo: 0xab, hi: 0xac},
+	{value: 0x0316, lo: 0xad, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xb3},
+	// Block 0x6c, offset 0x2ec
+	{value: 0x6c52, lo: 0x80, hi: 0x9f},
+	{value: 0x7052, lo: 0xa0, hi: 0xa5},
+	{value: 0x7052, lo: 0xa7, hi: 0xa7},
+	{value: 0x7052, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x6d, offset 0x2f1
+	{value: 0x0010, lo: 0x80, hi: 0xa7},
+	{value: 0x0014, lo: 0xaf, hi: 0xaf},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0x6e, offset 0x2f4
+	{value: 0x0010, lo: 0x80, hi: 0x96},
+	{value: 0x0010, lo: 0xa0, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xae},
+	{value: 0x0010, lo: 0xb0, hi: 0xb6},
+	{value: 0x0010, lo: 0xb8, hi: 0xbe},
+	// Block 0x6f, offset 0x2f9
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x8e},
+	{value: 0x0010, lo: 0x90, hi: 0x96},
+	{value: 0x0010, lo: 0x98, hi: 0x9e},
+	{value: 0x0024, lo: 0xa0, hi: 0xbf},
+	// Block 0x70, offset 0x2fe
+	{value: 0x0014, lo: 0xaf, hi: 0xaf},
+	// Block 0x71, offset 0x2ff
+	{value: 0x0014, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0xaa, hi: 0xad},
+	{value: 0x0030, lo: 0xae, hi: 0xaf},
+	{value: 0x0004, lo: 0xb1, hi: 0xb5},
+	{value: 0x0014, lo: 0xbb, hi: 0xbb},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	// Block 0x72, offset 0x305
+	{value: 0x0034, lo: 0x99, hi: 0x9a},
+	{value: 0x0004, lo: 0x9b, hi: 0x9e},
+	// Block 0x73, offset 0x307
+	{value: 0x0004, lo: 0xbc, hi: 0xbe},
+	// Block 0x74, offset 0x308
+	{value: 0x0010, lo: 0x85, hi: 0xad},
+	{value: 0x0010, lo: 0xb1, hi: 0xbf},
+	// Block 0x75, offset 0x30a
+	{value: 0x0010, lo: 0x80, hi: 0x8e},
+	{value: 0x0010, lo: 0xa0, hi: 0xba},
+	// Block 0x76, offset 0x30c
+	{value: 0x0010, lo: 0x80, hi: 0x94},
+	{value: 0x0014, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0x96, hi: 0xbf},
+	// Block 0x77, offset 0x30f
+	{value: 0x0010, lo: 0x80, hi: 0x8c},
+	// Block 0x78, offset 0x310
+	{value: 0x0010, lo: 0x90, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	// Block 0x79, offset 0x312
+	{value: 0x0010, lo: 0x80, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0010, lo: 0x90, hi: 0xab},
+	// Block 0x7a, offset 0x315
+	{value: 0x0117, lo: 0x80, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xae},
+	{value: 0x0024, lo: 0xaf, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb2},
+	{value: 0x0024, lo: 0xb4, hi: 0xbd},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x7b, offset 0x31b
+	{value: 0x0117, lo: 0x80, hi: 0x9b},
+	{value: 0x0015, lo: 0x9c, hi: 0x9d},
+	{value: 0x0024, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0x7c, offset 0x31f
+	{value: 0x0010, lo: 0x80, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb1},
+	// Block 0x7d, offset 0x321
+	{value: 0x0004, lo: 0x80, hi: 0x96},
+	{value: 0x0014, lo: 0x97, hi: 0x9f},
+	{value: 0x0004, lo: 0xa0, hi: 0xa1},
+	{value: 0x0117, lo: 0xa2, hi: 0xaf},
+	{value: 0x0012, lo: 0xb0, hi: 0xb1},
+	{value: 0x0117, lo: 0xb2, hi: 0xbf},
+	// Block 0x7e, offset 0x327
+	{value: 0x0117, lo: 0x80, hi: 0xaf},
+	{value: 0x0015, lo: 0xb0, hi: 0xb0},
+	{value: 0x0012, lo: 0xb1, hi: 0xb8},
+	{value: 0x0316, lo: 0xb9, hi: 0xba},
+	{value: 0x0716, lo: 0xbb, hi: 0xbc},
+	{value: 0x8453, lo: 0xbd, hi: 0xbd},
+	{value: 0x0117, lo: 0xbe, hi: 0xbf},
+	// Block 0x7f, offset 0x32e
+	{value: 0x0010, lo: 0xb7, hi: 0xb7},
+	{value: 0x0015, lo: 0xb8, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbf},
+	// Block 0x80, offset 0x332
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0014, lo: 0x82, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8b},
+	{value: 0x0010, lo: 0x8c, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa6},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	// Block 0x81, offset 0x33b
+	{value: 0x0010, lo: 0x80, hi: 0xb3},
+	// Block 0x82, offset 0x33c
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0034, lo: 0x84, hi: 0x84},
+	{value: 0x0014, lo: 0x85, hi: 0x85},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0024, lo: 0xa0, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb7},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x83, offset 0x344
+	{value: 0x0010, lo: 0x80, hi: 0xa5},
+	{value: 0x0014, lo: 0xa6, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x84, offset 0x348
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0014, lo: 0x87, hi: 0x91},
+	{value: 0x0010, lo: 0x92, hi: 0x92},
+	{value: 0x0030, lo: 0x93, hi: 0x93},
+	{value: 0x0010, lo: 0xa0, hi: 0xbc},
+	// Block 0x85, offset 0x34d
+	{value: 0x0014, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xb9},
+	{value: 0x0010, lo: 0xba, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0x86, offset 0x355
+	{value: 0x0030, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0014, lo: 0xa5, hi: 0xa5},
+	{value: 0x0004, lo: 0xa6, hi: 0xa6},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x87, offset 0x35b
+	{value: 0x0010, lo: 0x80, hi: 0xa8},
+	{value: 0x0014, lo: 0xa9, hi: 0xae},
+	{value: 0x0010, lo: 0xaf, hi: 0xb0},
+	{value: 0x0014, lo: 0xb1, hi: 0xb2},
+	{value: 0x0010, lo: 0xb3, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb6},
+	// Block 0x88, offset 0x361
+	{value: 0x0010, lo: 0x80, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0x8b},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0010, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0004, lo: 0xb0, hi: 0xb0},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbd},
+	// Block 0x89, offset 0x36b
+	{value: 0x0024, lo: 0xb0, hi: 0xb0},
+	{value: 0x0024, lo: 0xb2, hi: 0xb3},
+	{value: 0x0034, lo: 0xb4, hi: 0xb4},
+	{value: 0x0024, lo: 0xb7, hi: 0xb8},
+	{value: 0x0024, lo: 0xbe, hi: 0xbf},
+	// Block 0x8a, offset 0x370
+	{value: 0x0024, lo: 0x81, hi: 0x81},
+	{value: 0x0004, lo: 0x9d, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xab},
+	{value: 0x0014, lo: 0xac, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0010, lo: 0xb2, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	// Block 0x8b, offset 0x379
+	{value: 0x0010, lo: 0x81, hi: 0x86},
+	{value: 0x0010, lo: 0x89, hi: 0x8e},
+	{value: 0x0010, lo: 0x91, hi: 0x96},
+	{value: 0x0010, lo: 0xa0, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xae},
+	{value: 0x0012, lo: 0xb0, hi: 0xbf},
+	// Block 0x8c, offset 0x37f
+	{value: 0x0012, lo: 0x80, hi: 0x92},
+	{value: 0xac52, lo: 0x93, hi: 0x93},
+	{value: 0x0012, lo: 0x94, hi: 0x9a},
+	{value: 0x0004, lo: 0x9b, hi: 0x9b},
+	{value: 0x0015, lo: 0x9c, hi: 0x9f},
+	{value: 0x0012, lo: 0xa0, hi: 0xa5},
+	{value: 0x74d2, lo: 0xb0, hi: 0xbf},
+	// Block 0x8d, offset 0x386
+	{value: 0x78d2, lo: 0x80, hi: 0x8f},
+	{value: 0x7cd2, lo: 0x90, hi: 0x9f},
+	{value: 0x80d2, lo: 0xa0, hi: 0xaf},
+	{value: 0x7cd2, lo: 0xb0, hi: 0xbf},
+	// Block 0x8e, offset 0x38a
+	{value: 0x0010, lo: 0x80, hi: 0xa4},
+	{value: 0x0014, lo: 0xa5, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa7},
+	{value: 0x0014, lo: 0xa8, hi: 0xa8},
+	{value: 0x0010, lo: 0xa9, hi: 0xaa},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0034, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0x8f, offset 0x392
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0x90, offset 0x394
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x8b, hi: 0xbb},
+	// Block 0x91, offset 0x396
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x86, hi: 0xbf},
+	// Block 0x92, offset 0x399
+	{value: 0x0010, lo: 0x80, hi: 0xb1},
+	{value: 0x0004, lo: 0xb2, hi: 0xbf},
+	// Block 0x93, offset 0x39b
+	{value: 0x0004, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x93, hi: 0xbf},
+	// Block 0x94, offset 0x39d
+	{value: 0x0010, lo: 0x80, hi: 0xbd},
+	// Block 0x95, offset 0x39e
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0x96, offset 0x39f
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x0010, lo: 0x92, hi: 0xbf},
+	// Block 0x97, offset 0x3a1
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0xb0, hi: 0xbb},
+	// Block 0x98, offset 0x3a3
+	{value: 0x0014, lo: 0x80, hi: 0x8f},
+	{value: 0x0054, lo: 0x93, hi: 0x93},
+	{value: 0x0024, lo: 0xa0, hi: 0xa6},
+	{value: 0x0034, lo: 0xa7, hi: 0xad},
+	{value: 0x0024, lo: 0xae, hi: 0xaf},
+	{value: 0x0010, lo: 0xb3, hi: 0xb4},
+	// Block 0x99, offset 0x3a9
+	{value: 0x0010, lo: 0x8d, hi: 0x8f},
+	{value: 0x0054, lo: 0x92, hi: 0x92},
+	{value: 0x0054, lo: 0x95, hi: 0x95},
+	{value: 0x0010, lo: 0xb0, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0x9a, offset 0x3ae
+	{value: 0x0010, lo: 0x80, hi: 0xbc},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0x9b, offset 0x3b0
+	{value: 0x0054, lo: 0x87, hi: 0x87},
+	{value: 0x0054, lo: 0x8e, hi: 0x8e},
+	{value: 0x0054, lo: 0x9a, hi: 0x9a},
+	{value: 0x5f53, lo: 0xa1, hi: 0xba},
+	{value: 0x0004, lo: 0xbe, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0x9c, offset 0x3b6
+	{value: 0x0004, lo: 0x80, hi: 0x80},
+	{value: 0x5f52, lo: 0x81, hi: 0x9a},
+	{value: 0x0004, lo: 0xb0, hi: 0xb0},
+	// Block 0x9d, offset 0x3b9
+	{value: 0x0014, lo: 0x9e, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xbe},
+	// Block 0x9e, offset 0x3bb
+	{value: 0x0010, lo: 0x82, hi: 0x87},
+	{value: 0x0010, lo: 0x8a, hi: 0x8f},
+	{value: 0x0010, lo: 0x92, hi: 0x97},
+	{value: 0x0010, lo: 0x9a, hi: 0x9c},
+	{value: 0x0004, lo: 0xa3, hi: 0xa3},
+	{value: 0x0014, lo: 0xb9, hi: 0xbb},
+	// Block 0x9f, offset 0x3c1
+	{value: 0x0010, lo: 0x80, hi: 0x8b},
+	{value: 0x0010, lo: 0x8d, hi: 0xa6},
+	{value: 0x0010, lo: 0xa8, hi: 0xba},
+	{value: 0x0010, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xa0, offset 0x3c6
+	{value: 0x0010, lo: 0x80, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x9d},
+	// Block 0xa1, offset 0x3c8
+	{value: 0x0010, lo: 0x80, hi: 0xba},
+	// Block 0xa2, offset 0x3c9
+	{value: 0x0010, lo: 0x80, hi: 0xb4},
+	// Block 0xa3, offset 0x3ca
+	{value: 0x0034, lo: 0xbd, hi: 0xbd},
+	// Block 0xa4, offset 0x3cb
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xa5, offset 0x3cd
+	{value: 0x0010, lo: 0x80, hi: 0x90},
+	{value: 0x0034, lo: 0xa0, hi: 0xa0},
+	// Block 0xa6, offset 0x3cf
+	{value: 0x0010, lo: 0x80, hi: 0x9f},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xa7, offset 0x3d1
+	{value: 0x0010, lo: 0x80, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0xb5},
+	{value: 0x0024, lo: 0xb6, hi: 0xba},
+	// Block 0xa8, offset 0x3d4
+	{value: 0x0010, lo: 0x80, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xbf},
+	// Block 0xa9, offset 0x3d6
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x88, hi: 0x8f},
+	{value: 0x0010, lo: 0x91, hi: 0x95},
+	// Block 0xaa, offset 0x3d9
+	{value: 0x2813, lo: 0x80, hi: 0x87},
+	{value: 0x3813, lo: 0x88, hi: 0x8f},
+	{value: 0x2813, lo: 0x90, hi: 0x97},
+	{value: 0xaf53, lo: 0x98, hi: 0x9f},
+	{value: 0xb253, lo: 0xa0, hi: 0xa7},
+	{value: 0x2812, lo: 0xa8, hi: 0xaf},
+	{value: 0x3812, lo: 0xb0, hi: 0xb7},
+	{value: 0x2812, lo: 0xb8, hi: 0xbf},
+	// Block 0xab, offset 0x3e1
+	{value: 0xaf52, lo: 0x80, hi: 0x87},
+	{value: 0xb252, lo: 0x88, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0xbf},
+	// Block 0xac, offset 0x3e4
+	{value: 0x0010, lo: 0x80, hi: 0x9d},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0xb253, lo: 0xb0, hi: 0xb7},
+	{value: 0xaf53, lo: 0xb8, hi: 0xbf},
+	// Block 0xad, offset 0x3e8
+	{value: 0x2813, lo: 0x80, hi: 0x87},
+	{value: 0x3813, lo: 0x88, hi: 0x8f},
+	{value: 0x2813, lo: 0x90, hi: 0x93},
+	{value: 0xb252, lo: 0x98, hi: 0x9f},
+	{value: 0xaf52, lo: 0xa0, hi: 0xa7},
+	{value: 0x2812, lo: 0xa8, hi: 0xaf},
+	{value: 0x3812, lo: 0xb0, hi: 0xb7},
+	{value: 0x2812, lo: 0xb8, hi: 0xbb},
+	// Block 0xae, offset 0x3f0
+	{value: 0x0010, lo: 0x80, hi: 0xa7},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xaf, offset 0x3f2
+	{value: 0x0010, lo: 0x80, hi: 0xa3},
+	// Block 0xb0, offset 0x3f3
+	{value: 0x0010, lo: 0x80, hi: 0xb6},
+	// Block 0xb1, offset 0x3f4
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xa7},
+	// Block 0xb2, offset 0x3f6
+	{value: 0x0010, lo: 0x80, hi: 0x85},
+	{value: 0x0010, lo: 0x88, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0xb5},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0010, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xb3, offset 0x3fc
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb6},
+	// Block 0xb4, offset 0x3fe
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	// Block 0xb5, offset 0x3ff
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	{value: 0x0010, lo: 0xb4, hi: 0xb5},
+	// Block 0xb6, offset 0x401
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb9},
+	// Block 0xb7, offset 0x403
+	{value: 0x0010, lo: 0x80, hi: 0xb7},
+	{value: 0x0010, lo: 0xbe, hi: 0xbf},
+	// Block 0xb8, offset 0x405
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x83},
+	{value: 0x0014, lo: 0x85, hi: 0x86},
+	{value: 0x0014, lo: 0x8c, hi: 0x8c},
+	{value: 0x0034, lo: 0x8d, hi: 0x8d},
+	{value: 0x0014, lo: 0x8e, hi: 0x8e},
+	{value: 0x0024, lo: 0x8f, hi: 0x8f},
+	{value: 0x0010, lo: 0x90, hi: 0x93},
+	{value: 0x0010, lo: 0x95, hi: 0x97},
+	{value: 0x0010, lo: 0x99, hi: 0xb3},
+	{value: 0x0024, lo: 0xb8, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xb9, offset 0x412
+	{value: 0x0010, lo: 0xa0, hi: 0xbc},
+	// Block 0xba, offset 0x413
+	{value: 0x0010, lo: 0x80, hi: 0x9c},
+	// Block 0xbb, offset 0x414
+	{value: 0x0010, lo: 0x80, hi: 0x87},
+	{value: 0x0010, lo: 0x89, hi: 0xa4},
+	{value: 0x0024, lo: 0xa5, hi: 0xa5},
+	{value: 0x0034, lo: 0xa6, hi: 0xa6},
+	// Block 0xbc, offset 0x418
+	{value: 0x0010, lo: 0x80, hi: 0x95},
+	{value: 0x0010, lo: 0xa0, hi: 0xb2},
+	// Block 0xbd, offset 0x41a
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	// Block 0xbe, offset 0x41b
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	// Block 0xbf, offset 0x41c
+	{value: 0x5653, lo: 0x80, hi: 0xb2},
+	// Block 0xc0, offset 0x41d
+	{value: 0x5652, lo: 0x80, hi: 0xb2},
+	// Block 0xc1, offset 0x41e
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbf},
+	// Block 0xc2, offset 0x422
+	{value: 0x0014, lo: 0x80, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0xa6, hi: 0xaf},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xc3, offset 0x426
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb6},
+	{value: 0x0010, lo: 0xb7, hi: 0xb8},
+	{value: 0x0034, lo: 0xb9, hi: 0xba},
+	{value: 0x0014, lo: 0xbd, hi: 0xbd},
+	// Block 0xc4, offset 0x42c
+	{value: 0x0010, lo: 0x90, hi: 0xa8},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xc5, offset 0x42e
+	{value: 0x0024, lo: 0x80, hi: 0x82},
+	{value: 0x0010, lo: 0x83, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xab},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb4},
+	{value: 0x0010, lo: 0xb6, hi: 0xbf},
+	// Block 0xc6, offset 0x435
+	{value: 0x0010, lo: 0x90, hi: 0xb2},
+	{value: 0x0034, lo: 0xb3, hi: 0xb3},
+	{value: 0x0010, lo: 0xb6, hi: 0xb6},
+	// Block 0xc7, offset 0x438
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0xb5},
+	{value: 0x0014, lo: 0xb6, hi: 0xbe},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xc8, offset 0x43c
+	{value: 0x0030, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0014, lo: 0x8b, hi: 0x8c},
+	{value: 0x0010, lo: 0x90, hi: 0x9a},
+	{value: 0x0010, lo: 0x9c, hi: 0x9c},
+	// Block 0xc9, offset 0x442
+	{value: 0x0010, lo: 0x80, hi: 0x91},
+	{value: 0x0010, lo: 0x93, hi: 0xae},
+	{value: 0x0014, lo: 0xaf, hi: 0xb1},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0014, lo: 0xb4, hi: 0xb4},
+	{value: 0x0030, lo: 0xb5, hi: 0xb5},
+	{value: 0x0034, lo: 0xb6, hi: 0xb6},
+	{value: 0x0014, lo: 0xb7, hi: 0xb7},
+	{value: 0x0014, lo: 0xbe, hi: 0xbe},
+	// Block 0xca, offset 0x44b
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	{value: 0x0010, lo: 0x88, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0x8d},
+	{value: 0x0010, lo: 0x8f, hi: 0x9d},
+	{value: 0x0010, lo: 0x9f, hi: 0xa8},
+	{value: 0x0010, lo: 0xb0, hi: 0xbf},
+	// Block 0xcb, offset 0x451
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0014, lo: 0x9f, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa2},
+	{value: 0x0014, lo: 0xa3, hi: 0xa8},
+	{value: 0x0034, lo: 0xa9, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xcc, offset 0x457
+	{value: 0x0014, lo: 0x80, hi: 0x81},
+	{value: 0x0010, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x8c},
+	{value: 0x0010, lo: 0x8f, hi: 0x90},
+	{value: 0x0010, lo: 0x93, hi: 0xa8},
+	{value: 0x0010, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb5, hi: 0xb9},
+	{value: 0x0034, lo: 0xbc, hi: 0xbc},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0xcd, offset 0x461
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x84},
+	{value: 0x0010, lo: 0x87, hi: 0x88},
+	{value: 0x0010, lo: 0x8b, hi: 0x8c},
+	{value: 0x0030, lo: 0x8d, hi: 0x8d},
+	{value: 0x0010, lo: 0x90, hi: 0x90},
+	{value: 0x0010, lo: 0x97, hi: 0x97},
+	{value: 0x0010, lo: 0x9d, hi: 0xa3},
+	{value: 0x0024, lo: 0xa6, hi: 0xac},
+	{value: 0x0024, lo: 0xb0, hi: 0xb4},
+	// Block 0xce, offset 0x46b
+	{value: 0x0010, lo: 0x80, hi: 0xb7},
+	{value: 0x0014, lo: 0xb8, hi: 0xbf},
+	// Block 0xcf, offset 0x46d
+	{value: 0x0010, lo: 0x80, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x82},
+	{value: 0x0014, lo: 0x83, hi: 0x84},
+	{value: 0x0010, lo: 0x85, hi: 0x85},
+	{value: 0x0034, lo: 0x86, hi: 0x86},
+	{value: 0x0010, lo: 0x87, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd0, offset 0x474
+	{value: 0x0010, lo: 0x80, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xb8},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0014, lo: 0xba, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbe},
+	{value: 0x0014, lo: 0xbf, hi: 0xbf},
+	// Block 0xd1, offset 0x47a
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x81, hi: 0x81},
+	{value: 0x0034, lo: 0x82, hi: 0x83},
+	{value: 0x0010, lo: 0x84, hi: 0x85},
+	{value: 0x0010, lo: 0x87, hi: 0x87},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd2, offset 0x480
+	{value: 0x0010, lo: 0x80, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb5},
+	{value: 0x0010, lo: 0xb8, hi: 0xbb},
+	{value: 0x0014, lo: 0xbc, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xd3, offset 0x486
+	{value: 0x0034, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x98, hi: 0x9b},
+	{value: 0x0014, lo: 0x9c, hi: 0x9d},
+	// Block 0xd4, offset 0x489
+	{value: 0x0010, lo: 0x80, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xba},
+	{value: 0x0010, lo: 0xbb, hi: 0xbc},
+	{value: 0x0014, lo: 0xbd, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xd5, offset 0x48f
+	{value: 0x0014, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x84, hi: 0x84},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0xd6, offset 0x492
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0014, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xac, hi: 0xac},
+	{value: 0x0014, lo: 0xad, hi: 0xad},
+	{value: 0x0010, lo: 0xae, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb5},
+	{value: 0x0030, lo: 0xb6, hi: 0xb6},
+	{value: 0x0034, lo: 0xb7, hi: 0xb7},
+	// Block 0xd7, offset 0x49a
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	// Block 0xd8, offset 0x49b
+	{value: 0x0014, lo: 0x9d, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa1},
+	{value: 0x0014, lo: 0xa2, hi: 0xa5},
+	{value: 0x0010, lo: 0xa6, hi: 0xa6},
+	{value: 0x0014, lo: 0xa7, hi: 0xaa},
+	{value: 0x0034, lo: 0xab, hi: 0xab},
+	{value: 0x0010, lo: 0xb0, hi: 0xb9},
+	// Block 0xd9, offset 0x4a2
+	{value: 0x5f53, lo: 0xa0, hi: 0xbf},
+	// Block 0xda, offset 0x4a3
+	{value: 0x5f52, lo: 0x80, hi: 0x9f},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	{value: 0x0010, lo: 0xbf, hi: 0xbf},
+	// Block 0xdb, offset 0x4a6
+	{value: 0x0010, lo: 0x80, hi: 0xb8},
+	// Block 0xdc, offset 0x4a7
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x8a, hi: 0xaf},
+	{value: 0x0014, lo: 0xb0, hi: 0xb6},
+	{value: 0x0014, lo: 0xb8, hi: 0xbd},
+	{value: 0x0010, lo: 0xbe, hi: 0xbe},
+	{value: 0x0034, lo: 0xbf, hi: 0xbf},
+	// Block 0xdd, offset 0x4ad
+	{value: 0x0010, lo: 0x80, hi: 0x80},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xb2, hi: 0xbf},
+	// Block 0xde, offset 0x4b0
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	{value: 0x0014, lo: 0x92, hi: 0xa7},
+	{value: 0x0010, lo: 0xa9, hi: 0xa9},
+	{value: 0x0014, lo: 0xaa, hi: 0xb0},
+	{value: 0x0010, lo: 0xb1, hi: 0xb1},
+	{value: 0x0014, lo: 0xb2, hi: 0xb3},
+	{value: 0x0010, lo: 0xb4, hi: 0xb4},
+	{value: 0x0014, lo: 0xb5, hi: 0xb6},
+	// Block 0xdf, offset 0x4b8
+	{value: 0x0010, lo: 0x80, hi: 0x99},
+	// Block 0xe0, offset 0x4b9
+	{value: 0x0010, lo: 0x80, hi: 0xae},
+	// Block 0xe1, offset 0x4ba
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	// Block 0xe2, offset 0x4bb
+	{value: 0x0010, lo: 0x80, hi: 0x86},
+	// Block 0xe3, offset 0x4bc
+	{value: 0x0010, lo: 0x80, hi: 0x9e},
+	{value: 0x0010, lo: 0xa0, hi: 0xa9},
+	// Block 0xe4, offset 0x4be
+	{value: 0x0010, lo: 0x90, hi: 0xad},
+	{value: 0x0034, lo: 0xb0, hi: 0xb4},
+	// Block 0xe5, offset 0x4c0
+	{value: 0x0010, lo: 0x80, hi: 0xaf},
+	{value: 0x0024, lo: 0xb0, hi: 0xb6},
+	// Block 0xe6, offset 0x4c2
+	{value: 0x0014, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0010, lo: 0xa3, hi: 0xb7},
+	{value: 0x0010, lo: 0xbd, hi: 0xbf},
+	// Block 0xe7, offset 0x4c6
+	{value: 0x0010, lo: 0x80, hi: 0x8f},
+	// Block 0xe8, offset 0x4c7
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0010, lo: 0x90, hi: 0xbe},
+	// Block 0xe9, offset 0x4c9
+	{value: 0x0014, lo: 0x8f, hi: 0x9f},
+	// Block 0xea, offset 0x4ca
+	{value: 0x0014, lo: 0xa0, hi: 0xa0},
+	// Block 0xeb, offset 0x4cb
+	{value: 0x0010, lo: 0x80, hi: 0xaa},
+	{value: 0x0010, lo: 0xb0, hi: 0xbc},
+	// Block 0xec, offset 0x4cd
+	{value: 0x0010, lo: 0x80, hi: 0x88},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	{value: 0x0014, lo: 0x9d, hi: 0x9d},
+	{value: 0x0034, lo: 0x9e, hi: 0x9e},
+	{value: 0x0014, lo: 0xa0, hi: 0xa3},
+	// Block 0xed, offset 0x4d2
+	{value: 0x0030, lo: 0xa5, hi: 0xa6},
+	{value: 0x0034, lo: 0xa7, hi: 0xa9},
+	{value: 0x0030, lo: 0xad, hi: 0xb2},
+	{value: 0x0014, lo: 0xb3, hi: 0xba},
+	{value: 0x0034, lo: 0xbb, hi: 0xbf},
+	// Block 0xee, offset 0x4d7
+	{value: 0x0034, lo: 0x80, hi: 0x82},
+	{value: 0x0024, lo: 0x85, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8b},
+	{value: 0x0024, lo: 0xaa, hi: 0xad},
+	// Block 0xef, offset 0x4db
+	{value: 0x0024, lo: 0x82, hi: 0x84},
+	// Block 0xf0, offset 0x4dc
+	{value: 0x0013, lo: 0x80, hi: 0x99},
+	{value: 0x0012, lo: 0x9a, hi: 0xb3},
+	{value: 0x0013, lo: 0xb4, hi: 0xbf},
+	// Block 0xf1, offset 0x4df
+	{value: 0x0013, lo: 0x80, hi: 0x8d},
+	{value: 0x0012, lo: 0x8e, hi: 0x94},
+	{value: 0x0012, lo: 0x96, hi: 0xa7},
+	{value: 0x0013, lo: 0xa8, hi: 0xbf},
+	// Block 0xf2, offset 0x4e3
+	{value: 0x0013, lo: 0x80, hi: 0x81},
+	{value: 0x0012, lo: 0x82, hi: 0x9b},
+	{value: 0x0013, lo: 0x9c, hi: 0x9c},
+	{value: 0x0013, lo: 0x9e, hi: 0x9f},
+	{value: 0x0013, lo: 0xa2, hi: 0xa2},
+	{value: 0x0013, lo: 0xa5, hi: 0xa6},
+	{value: 0x0013, lo: 0xa9, hi: 0xac},
+	{value: 0x0013, lo: 0xae, hi: 0xb5},
+	{value: 0x0012, lo: 0xb6, hi: 0xb9},
+	{value: 0x0012, lo: 0xbb, hi: 0xbb},
+	{value: 0x0012, lo: 0xbd, hi: 0xbf},
+	// Block 0xf3, offset 0x4ee
+	{value: 0x0012, lo: 0x80, hi: 0x83},
+	{value: 0x0012, lo: 0x85, hi: 0x8f},
+	{value: 0x0013, lo: 0x90, hi: 0xa9},
+	{value: 0x0012, lo: 0xaa, hi: 0xbf},
+	// Block 0xf4, offset 0x4f2
+	{value: 0x0012, lo: 0x80, hi: 0x83},
+	{value: 0x0013, lo: 0x84, hi: 0x85},
+	{value: 0x0013, lo: 0x87, hi: 0x8a},
+	{value: 0x0013, lo: 0x8d, hi: 0x94},
+	{value: 0x0013, lo: 0x96, hi: 0x9c},
+	{value: 0x0012, lo: 0x9e, hi: 0xb7},
+	{value: 0x0013, lo: 0xb8, hi: 0xb9},
+	{value: 0x0013, lo: 0xbb, hi: 0xbe},
+	// Block 0xf5, offset 0x4fa
+	{value: 0x0013, lo: 0x80, hi: 0x84},
+	{value: 0x0013, lo: 0x86, hi: 0x86},
+	{value: 0x0013, lo: 0x8a, hi: 0x90},
+	{value: 0x0012, lo: 0x92, hi: 0xab},
+	{value: 0x0013, lo: 0xac, hi: 0xbf},
+	// Block 0xf6, offset 0x4ff
+	{value: 0x0013, lo: 0x80, hi: 0x85},
+	{value: 0x0012, lo: 0x86, hi: 0x9f},
+	{value: 0x0013, lo: 0xa0, hi: 0xb9},
+	{value: 0x0012, lo: 0xba, hi: 0xbf},
+	// Block 0xf7, offset 0x503
+	{value: 0x0012, lo: 0x80, hi: 0x93},
+	{value: 0x0013, lo: 0x94, hi: 0xad},
+	{value: 0x0012, lo: 0xae, hi: 0xbf},
+	// Block 0xf8, offset 0x506
+	{value: 0x0012, lo: 0x80, hi: 0x87},
+	{value: 0x0013, lo: 0x88, hi: 0xa1},
+	{value: 0x0012, lo: 0xa2, hi: 0xbb},
+	{value: 0x0013, lo: 0xbc, hi: 0xbf},
+	// Block 0xf9, offset 0x50a
+	{value: 0x0013, lo: 0x80, hi: 0x95},
+	{value: 0x0012, lo: 0x96, hi: 0xaf},
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0xfa, offset 0x50d
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	{value: 0x0012, lo: 0x8a, hi: 0xa5},
+	{value: 0x0013, lo: 0xa8, hi: 0xbf},
+	// Block 0xfb, offset 0x510
+	{value: 0x0013, lo: 0x80, hi: 0x80},
+	{value: 0x0012, lo: 0x82, hi: 0x9a},
+	{value: 0x0012, lo: 0x9c, hi: 0xa1},
+	{value: 0x0013, lo: 0xa2, hi: 0xba},
+	{value: 0x0012, lo: 0xbc, hi: 0xbf},
+	// Block 0xfc, offset 0x515
+	{value: 0x0012, lo: 0x80, hi: 0x94},
+	{value: 0x0012, lo: 0x96, hi: 0x9b},
+	{value: 0x0013, lo: 0x9c, hi: 0xb4},
+	{value: 0x0012, lo: 0xb6, hi: 0xbf},
+	// Block 0xfd, offset 0x519
+	{value: 0x0012, lo: 0x80, hi: 0x8e},
+	{value: 0x0012, lo: 0x90, hi: 0x95},
+	{value: 0x0013, lo: 0x96, hi: 0xae},
+	{value: 0x0012, lo: 0xb0, hi: 0xbf},
+	// Block 0xfe, offset 0x51d
+	{value: 0x0012, lo: 0x80, hi: 0x88},
+	{value: 0x0012, lo: 0x8a, hi: 0x8f},
+	{value: 0x0013, lo: 0x90, hi: 0xa8},
+	{value: 0x0012, lo: 0xaa, hi: 0xbf},
+	// Block 0xff, offset 0x521
+	{value: 0x0012, lo: 0x80, hi: 0x82},
+	{value: 0x0012, lo: 0x84, hi: 0x89},
+	{value: 0x0017, lo: 0x8a, hi: 0x8b},
+	{value: 0x0010, lo: 0x8e, hi: 0xbf},
+	// Block 0x100, offset 0x525
+	{value: 0x0014, lo: 0x80, hi: 0xb6},
+	{value: 0x0014, lo: 0xbb, hi: 0xbf},
+	// Block 0x101, offset 0x527
+	{value: 0x0014, lo: 0x80, hi: 0xac},
+	{value: 0x0014, lo: 0xb5, hi: 0xb5},
+	// Block 0x102, offset 0x529
+	{value: 0x0014, lo: 0x84, hi: 0x84},
+	{value: 0x0014, lo: 0x9b, hi: 0x9f},
+	{value: 0x0014, lo: 0xa1, hi: 0xaf},
+	// Block 0x103, offset 0x52c
+	{value: 0x0024, lo: 0x80, hi: 0x86},
+	{value: 0x0024, lo: 0x88, hi: 0x98},
+	{value: 0x0024, lo: 0x9b, hi: 0xa1},
+	{value: 0x0024, lo: 0xa3, hi: 0xa4},
+	{value: 0x0024, lo: 0xa6, hi: 0xaa},
+	// Block 0x104, offset 0x531
+	{value: 0x0010, lo: 0x80, hi: 0x84},
+	{value: 0x0034, lo: 0x90, hi: 0x96},
+	// Block 0x105, offset 0x533
+	{value: 0xb552, lo: 0x80, hi: 0x81},
+	{value: 0xb852, lo: 0x82, hi: 0x83},
+	{value: 0x0024, lo: 0x84, hi: 0x89},
+	{value: 0x0034, lo: 0x8a, hi: 0x8a},
+	{value: 0x0010, lo: 0x90, hi: 0x99},
+	// Block 0x106, offset 0x538
+	{value: 0x0010, lo: 0x80, hi: 0x83},
+	{value: 0x0010, lo: 0x85, hi: 0x9f},
+	{value: 0x0010, lo: 0xa1, hi: 0xa2},
+	{value: 0x0010, lo: 0xa4, hi: 0xa4},
+	{value: 0x0010, lo: 0xa7, hi: 0xa7},
+	{value: 0x0010, lo: 0xa9, hi: 0xb2},
+	{value: 0x0010, lo: 0xb4, hi: 0xb7},
+	{value: 0x0010, lo: 0xb9, hi: 0xb9},
+	{value: 0x0010, lo: 0xbb, hi: 0xbb},
+	// Block 0x107, offset 0x541
+	{value: 0x0010, lo: 0x80, hi: 0x89},
+	{value: 0x0010, lo: 0x8b, hi: 0x9b},
+	{value: 0x0010, lo: 0xa1, hi: 0xa3},
+	{value: 0x0010, lo: 0xa5, hi: 0xa9},
+	{value: 0x0010, lo: 0xab, hi: 0xbb},
+	// Block 0x108, offset 0x546
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x109, offset 0x547
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	{value: 0x0013, lo: 0x90, hi: 0xa9},
+	{value: 0x0013, lo: 0xb0, hi: 0xbf},
+	// Block 0x10a, offset 0x54a
+	{value: 0x0013, lo: 0x80, hi: 0x89},
+	// Block 0x10b, offset 0x54b
+	{value: 0x0004, lo: 0xbb, hi: 0xbf},
+	// Block 0x10c, offset 0x54c
+	{value: 0x0014, lo: 0x81, hi: 0x81},
+	{value: 0x0014, lo: 0xa0, hi: 0xbf},
+	// Block 0x10d, offset 0x54e
+	{value: 0x0014, lo: 0x80, hi: 0xbf},
+	// Block 0x10e, offset 0x54f
+	{value: 0x0014, lo: 0x80, hi: 0xaf},
+}
+
+// Total table size 14027 bytes (13KiB); checksum: F17D40E8
diff --git a/vendor/golang.org/x/text/cases/trieval.go b/vendor/golang.org/x/text/cases/trieval.go
new file mode 100644
index 00000000..99e03962
--- /dev/null
+++ b/vendor/golang.org/x/text/cases/trieval.go
@@ -0,0 +1,214 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package cases
+
+// This file contains definitions for interpreting the trie value of the case
+// trie generated by "go run gen*.go". It is shared by both the generator
+// program and the resultant package. Sharing is achieved by the generator
+// copying gen_trieval.go to trieval.go and changing what's above this comment.
+
+// info holds case information for a single rune. It is the value returned
+// by a trie lookup. Most mapping information can be stored in a single 16-bit
+// value. If not, for example when a rune is mapped to multiple runes, the value
+// stores some basic case data and an index into an array with additional data.
+//
+// The per-rune values have the following format:
+//
+//   if (exception) {
+//     15..4  unsigned exception index
+//   } else {
+//     15..8  XOR pattern or index to XOR pattern for case mapping
+//            Only 13..8 are used for XOR patterns.
+//         7  inverseFold (fold to upper, not to lower)
+//         6  index: interpret the XOR pattern as an index
+//            or isMid if case mode is cIgnorableUncased.
+//      5..4  CCC: zero (normal or break), above or other
+//   }
+//      3  exception: interpret this value as an exception index
+//         (TODO: is this bit necessary? Probably implied from case mode.)
+//   2..0  case mode
+//
+// For the non-exceptional cases, a rune must be either uncased, lowercase or
+// uppercase. If the rune is cased, the XOR pattern maps either a lowercase
+// rune to uppercase or an uppercase rune to lowercase (applied to the 10
+// least-significant bits of the rune).
+//
+// See the definitions below for a more detailed description of the various
+// bits.
+type info uint16
+
+const (
+	casedMask      = 0x0003
+	fullCasedMask  = 0x0007
+	ignorableMask  = 0x0006
+	ignorableValue = 0x0004
+
+	inverseFoldBit = 1 << 7
+	isMidBit       = 1 << 6
+
+	exceptionBit     = 1 << 3
+	exceptionShift   = 4
+	numExceptionBits = 12
+
+	xorIndexBit = 1 << 6
+	xorShift    = 8
+
+	// There is no mapping if all xor bits and the exception bit are zero.
+	hasMappingMask = 0xff80 | exceptionBit
+)
+
+// The case mode bits encodes the case type of a rune. This includes uncased,
+// title, upper and lower case and case ignorable. (For a definition of these
+// terms see Chapter 3 of The Unicode Standard Core Specification.) In some rare
+// cases, a rune can be both cased and case-ignorable. This is encoded by
+// cIgnorableCased. A rune of this type is always lower case. Some runes are
+// cased while not having a mapping.
+//
+// A common pattern for scripts in the Unicode standard is for upper and lower
+// case runes to alternate for increasing rune values (e.g. the accented Latin
+// ranges starting from U+0100 and U+1E00 among others and some Cyrillic
+// characters). We use this property by defining a cXORCase mode, where the case
+// mode (always upper or lower case) is derived from the rune value. As the XOR
+// pattern for case mappings is often identical for successive runes, using
+// cXORCase can result in large series of identical trie values. This, in turn,
+// allows us to better compress the trie blocks.
+const (
+	cUncased          info = iota // 000
+	cTitle                        // 001
+	cLower                        // 010
+	cUpper                        // 011
+	cIgnorableUncased             // 100
+	cIgnorableCased               // 101 // lower case if mappings exist
+	cXORCase                      // 11x // case is cLower | ((rune&1) ^ x)
+
+	maxCaseMode = cUpper
+)
+
+func (c info) isCased() bool {
+	return c&casedMask != 0
+}
+
+func (c info) isCaseIgnorable() bool {
+	return c&ignorableMask == ignorableValue
+}
+
+func (c info) isNotCasedAndNotCaseIgnorable() bool {
+	return c&fullCasedMask == 0
+}
+
+func (c info) isCaseIgnorableAndNotCased() bool {
+	return c&fullCasedMask == cIgnorableUncased
+}
+
+func (c info) isMid() bool {
+	return c&(fullCasedMask|isMidBit) == isMidBit|cIgnorableUncased
+}
+
+// The case mapping implementation will need to know about various Canonical
+// Combining Class (CCC) values. We encode two of these in the trie value:
+// cccZero (0) and cccAbove (230). If the value is cccOther, it means that
+// CCC(r) > 0, but not 230. A value of cccBreak means that CCC(r) == 0 and that
+// the rune also has the break category Break (see below).
+const (
+	cccBreak info = iota << 4
+	cccZero
+	cccAbove
+	cccOther
+
+	cccMask = cccBreak | cccZero | cccAbove | cccOther
+)
+
+const (
+	starter       = 0
+	above         = 230
+	iotaSubscript = 240
+)
+
+// The exceptions slice holds data that does not fit in a normal info entry.
+// The entry is pointed to by the exception index in an entry. It has the
+// following format:
+//
+// Header
+// byte 0:
+//  7..6  unused
+//  5..4  CCC type (same bits as entry)
+//     3  unused
+//  2..0  length of fold
+//
+// byte 1:
+//   7..6  unused
+//   5..3  length of 1st mapping of case type
+//   2..0  length of 2nd mapping of case type
+//
+//   case     1st    2nd
+//   lower -> upper, title
+//   upper -> lower, title
+//   title -> lower, upper
+//
+// Lengths with the value 0x7 indicate no value and implies no change.
+// A length of 0 indicates a mapping to zero-length string.
+//
+// Body bytes:
+//   case folding bytes
+//   lowercase mapping bytes
+//   uppercase mapping bytes
+//   titlecase mapping bytes
+//   closure mapping bytes (for NFKC_Casefold). (TODO)
+//
+// Fallbacks:
+//   missing fold  -> lower
+//   missing title -> upper
+//   all missing   -> original rune
+//
+// exceptions starts with a dummy byte to enforce that there is no zero index
+// value.
+const (
+	lengthMask = 0x07
+	lengthBits = 3
+	noChange   = 0
+)
+
+// References to generated trie.
+
+var trie = newCaseTrie(0)
+
+var sparse = sparseBlocks{
+	values:  sparseValues[:],
+	offsets: sparseOffsets[:],
+}
+
+// Sparse block lookup code.
+
+// valueRange is an entry in a sparse block.
+type valueRange struct {
+	value  uint16
+	lo, hi byte
+}
+
+type sparseBlocks struct {
+	values  []valueRange
+	offsets []uint16
+}
+
+// lookup returns the value from values block n for byte b using binary search.
+func (s *sparseBlocks) lookup(n uint32, b byte) uint16 {
+	lo := s.offsets[n]
+	hi := s.offsets[n+1]
+	for lo < hi {
+		m := lo + (hi-lo)/2
+		r := s.values[m]
+		if r.lo <= b && b <= r.hi {
+			return r.value
+		}
+		if b < r.lo {
+			hi = m
+		} else {
+			lo = m + 1
+		}
+	}
+	return 0
+}
+
+// lastRuneForTesting is the last rune used for testing. Everything after this
+// is boring.
+const lastRuneForTesting = rune(0x1FFFF)
diff --git a/vendor/golang.org/x/text/internal/internal.go b/vendor/golang.org/x/text/internal/internal.go
new file mode 100644
index 00000000..3cddbbdd
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/internal.go
@@ -0,0 +1,49 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package internal contains non-exported functionality that are used by
+// packages in the text repository.
+package internal // import "golang.org/x/text/internal"
+
+import (
+	"sort"
+
+	"golang.org/x/text/language"
+)
+
+// SortTags sorts tags in place.
+func SortTags(tags []language.Tag) {
+	sort.Sort(sorter(tags))
+}
+
+type sorter []language.Tag
+
+func (s sorter) Len() int {
+	return len(s)
+}
+
+func (s sorter) Swap(i, j int) {
+	s[i], s[j] = s[j], s[i]
+}
+
+func (s sorter) Less(i, j int) bool {
+	return s[i].String() < s[j].String()
+}
+
+// UniqueTags sorts and filters duplicate tags in place and returns a slice with
+// only unique tags.
+func UniqueTags(tags []language.Tag) []language.Tag {
+	if len(tags) <= 1 {
+		return tags
+	}
+	SortTags(tags)
+	k := 0
+	for i := 1; i < len(tags); i++ {
+		if tags[k].String() < tags[i].String() {
+			k++
+			tags[k] = tags[i]
+		}
+	}
+	return tags[:k+1]
+}
diff --git a/vendor/golang.org/x/text/internal/language/common.go b/vendor/golang.org/x/text/internal/language/common.go
new file mode 100644
index 00000000..cdfdb749
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/common.go
@@ -0,0 +1,16 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package language
+
+// This file contains code common to the maketables.go and the package code.
+
+// AliasType is the type of an alias in AliasMap.
+type AliasType int8
+
+const (
+	Deprecated AliasType = iota
+	Macro
+	Legacy
+
+	AliasTypeUnknown AliasType = -1
+)
diff --git a/vendor/golang.org/x/text/internal/language/compact.go b/vendor/golang.org/x/text/internal/language/compact.go
new file mode 100644
index 00000000..46a00150
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact.go
@@ -0,0 +1,29 @@
+// Copyright 2018 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 language
+
+// CompactCoreInfo is a compact integer with the three core tags encoded.
+type CompactCoreInfo uint32
+
+// GetCompactCore generates a uint32 value that is guaranteed to be unique for
+// different language, region, and script values.
+func GetCompactCore(t Tag) (cci CompactCoreInfo, ok bool) {
+	if t.LangID > langNoIndexOffset {
+		return 0, false
+	}
+	cci |= CompactCoreInfo(t.LangID) << (8 + 12)
+	cci |= CompactCoreInfo(t.ScriptID) << 12
+	cci |= CompactCoreInfo(t.RegionID)
+	return cci, true
+}
+
+// Tag generates a tag from c.
+func (c CompactCoreInfo) Tag() Tag {
+	return Tag{
+		LangID:   Language(c >> 20),
+		RegionID: Region(c & 0x3ff),
+		ScriptID: Script(c>>12) & 0xff,
+	}
+}
diff --git a/vendor/golang.org/x/text/internal/language/compact/compact.go b/vendor/golang.org/x/text/internal/language/compact/compact.go
new file mode 100644
index 00000000..1b36935e
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact/compact.go
@@ -0,0 +1,61 @@
+// Copyright 2018 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 compact defines a compact representation of language tags.
+//
+// Common language tags (at least all for which locale information is defined
+// in CLDR) are assigned a unique index. Each Tag is associated with such an
+// ID for selecting language-related resources (such as translations) as well
+// as one for selecting regional defaults (currency, number formatting, etc.)
+//
+// It may want to export this functionality at some point, but at this point
+// this is only available for use within x/text.
+package compact // import "golang.org/x/text/internal/language/compact"
+
+import (
+	"sort"
+	"strings"
+
+	"golang.org/x/text/internal/language"
+)
+
+// ID is an integer identifying a single tag.
+type ID uint16
+
+func getCoreIndex(t language.Tag) (id ID, ok bool) {
+	cci, ok := language.GetCompactCore(t)
+	if !ok {
+		return 0, false
+	}
+	i := sort.Search(len(coreTags), func(i int) bool {
+		return cci <= coreTags[i]
+	})
+	if i == len(coreTags) || coreTags[i] != cci {
+		return 0, false
+	}
+	return ID(i), true
+}
+
+// Parent returns the ID of the parent or the root ID if id is already the root.
+func (id ID) Parent() ID {
+	return parents[id]
+}
+
+// Tag converts id to an internal language Tag.
+func (id ID) Tag() language.Tag {
+	if int(id) >= len(coreTags) {
+		return specialTags[int(id)-len(coreTags)]
+	}
+	return coreTags[id].Tag()
+}
+
+var specialTags []language.Tag
+
+func init() {
+	tags := strings.Split(specialTagsStr, " ")
+	specialTags = make([]language.Tag, len(tags))
+	for i, t := range tags {
+		specialTags[i] = language.MustParse(t)
+	}
+}
diff --git a/vendor/golang.org/x/text/internal/language/compact/language.go b/vendor/golang.org/x/text/internal/language/compact/language.go
new file mode 100644
index 00000000..83816a72
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact/language.go
@@ -0,0 +1,260 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run gen.go gen_index.go -output tables.go
+//go:generate go run gen_parents.go
+
+package compact
+
+// TODO: Remove above NOTE after:
+// - verifying that tables are dropped correctly (most notably matcher tables).
+
+import (
+	"strings"
+
+	"golang.org/x/text/internal/language"
+)
+
+// Tag represents a BCP 47 language tag. It is used to specify an instance of a
+// specific language or locale. All language tag values are guaranteed to be
+// well-formed.
+type Tag struct {
+	// NOTE: exported tags will become part of the public API.
+	language ID
+	locale   ID
+	full     fullTag // always a language.Tag for now.
+}
+
+const _und = 0
+
+type fullTag interface {
+	IsRoot() bool
+	Parent() language.Tag
+}
+
+// Make a compact Tag from a fully specified internal language Tag.
+func Make(t language.Tag) (tag Tag) {
+	if region := t.TypeForKey("rg"); len(region) == 6 && region[2:] == "zzzz" {
+		if r, err := language.ParseRegion(region[:2]); err == nil {
+			tFull := t
+			t, _ = t.SetTypeForKey("rg", "")
+			// TODO: should we not consider "va" for the language tag?
+			var exact1, exact2 bool
+			tag.language, exact1 = FromTag(t)
+			t.RegionID = r
+			tag.locale, exact2 = FromTag(t)
+			if !exact1 || !exact2 {
+				tag.full = tFull
+			}
+			return tag
+		}
+	}
+	lang, ok := FromTag(t)
+	tag.language = lang
+	tag.locale = lang
+	if !ok {
+		tag.full = t
+	}
+	return tag
+}
+
+// Tag returns an internal language Tag version of this tag.
+func (t Tag) Tag() language.Tag {
+	if t.full != nil {
+		return t.full.(language.Tag)
+	}
+	tag := t.language.Tag()
+	if t.language != t.locale {
+		loc := t.locale.Tag()
+		tag, _ = tag.SetTypeForKey("rg", strings.ToLower(loc.RegionID.String())+"zzzz")
+	}
+	return tag
+}
+
+// IsCompact reports whether this tag is fully defined in terms of ID.
+func (t *Tag) IsCompact() bool {
+	return t.full == nil
+}
+
+// MayHaveVariants reports whether a tag may have variants. If it returns false
+// it is guaranteed the tag does not have variants.
+func (t Tag) MayHaveVariants() bool {
+	return t.full != nil || int(t.language) >= len(coreTags)
+}
+
+// MayHaveExtensions reports whether a tag may have extensions. If it returns
+// false it is guaranteed the tag does not have them.
+func (t Tag) MayHaveExtensions() bool {
+	return t.full != nil ||
+		int(t.language) >= len(coreTags) ||
+		t.language != t.locale
+}
+
+// IsRoot returns true if t is equal to language "und".
+func (t Tag) IsRoot() bool {
+	if t.full != nil {
+		return t.full.IsRoot()
+	}
+	return t.language == _und
+}
+
+// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a
+// specific language are substituted with fields from the parent language.
+// The parent for a language may change for newer versions of CLDR.
+func (t Tag) Parent() Tag {
+	if t.full != nil {
+		return Make(t.full.Parent())
+	}
+	if t.language != t.locale {
+		// Simulate stripping -u-rg-xxxxxx
+		return Tag{language: t.language, locale: t.language}
+	}
+	// TODO: use parent lookup table once cycle from internal package is
+	// removed. Probably by internalizing the table and declaring this fast
+	// enough.
+	// lang := compactID(internal.Parent(uint16(t.language)))
+	lang, _ := FromTag(t.language.Tag().Parent())
+	return Tag{language: lang, locale: lang}
+}
+
+// returns token t and the rest of the string.
+func nextToken(s string) (t, tail string) {
+	p := strings.Index(s[1:], "-")
+	if p == -1 {
+		return s[1:], ""
+	}
+	p++
+	return s[1:p], s[p:]
+}
+
+// LanguageID returns an index, where 0 <= index < NumCompactTags, for tags
+// for which data exists in the text repository.The index will change over time
+// and should not be stored in persistent storage. If t does not match a compact
+// index, exact will be false and the compact index will be returned for the
+// first match after repeatedly taking the Parent of t.
+func LanguageID(t Tag) (id ID, exact bool) {
+	return t.language, t.full == nil
+}
+
+// RegionalID returns the ID for the regional variant of this tag. This index is
+// used to indicate region-specific overrides, such as default currency, default
+// calendar and week data, default time cycle, and default measurement system
+// and unit preferences.
+//
+// For instance, the tag en-GB-u-rg-uszzzz specifies British English with US
+// settings for currency, number formatting, etc. The CompactIndex for this tag
+// will be that for en-GB, while the RegionalID will be the one corresponding to
+// en-US.
+func RegionalID(t Tag) (id ID, exact bool) {
+	return t.locale, t.full == nil
+}
+
+// LanguageTag returns t stripped of regional variant indicators.
+//
+// At the moment this means it is stripped of a regional and variant subtag "rg"
+// and "va" in the "u" extension.
+func (t Tag) LanguageTag() Tag {
+	if t.full == nil {
+		return Tag{language: t.language, locale: t.language}
+	}
+	tt := t.Tag()
+	tt.SetTypeForKey("rg", "")
+	tt.SetTypeForKey("va", "")
+	return Make(tt)
+}
+
+// RegionalTag returns the regional variant of the tag.
+//
+// At the moment this means that the region is set from the regional subtag
+// "rg" in the "u" extension.
+func (t Tag) RegionalTag() Tag {
+	rt := Tag{language: t.locale, locale: t.locale}
+	if t.full == nil {
+		return rt
+	}
+	b := language.Builder{}
+	tag := t.Tag()
+	// tag, _ = tag.SetTypeForKey("rg", "")
+	b.SetTag(t.locale.Tag())
+	if v := tag.Variants(); v != "" {
+		for _, v := range strings.Split(v, "-") {
+			b.AddVariant(v)
+		}
+	}
+	for _, e := range tag.Extensions() {
+		b.AddExt(e)
+	}
+	return t
+}
+
+// FromTag reports closest matching ID for an internal language Tag.
+func FromTag(t language.Tag) (id ID, exact bool) {
+	// TODO: perhaps give more frequent tags a lower index.
+	// TODO: we could make the indexes stable. This will excluded some
+	//       possibilities for optimization, so don't do this quite yet.
+	exact = true
+
+	b, s, r := t.Raw()
+	if t.HasString() {
+		if t.IsPrivateUse() {
+			// We have no entries for user-defined tags.
+			return 0, false
+		}
+		hasExtra := false
+		if t.HasVariants() {
+			if t.HasExtensions() {
+				build := language.Builder{}
+				build.SetTag(language.Tag{LangID: b, ScriptID: s, RegionID: r})
+				build.AddVariant(t.Variants())
+				exact = false
+				t = build.Make()
+			}
+			hasExtra = true
+		} else if _, ok := t.Extension('u'); ok {
+			// TODO: va may mean something else. Consider not considering it.
+			// Strip all but the 'va' entry.
+			old := t
+			variant := t.TypeForKey("va")
+			t = language.Tag{LangID: b, ScriptID: s, RegionID: r}
+			if variant != "" {
+				t, _ = t.SetTypeForKey("va", variant)
+				hasExtra = true
+			}
+			exact = old == t
+		} else {
+			exact = false
+		}
+		if hasExtra {
+			// We have some variants.
+			for i, s := range specialTags {
+				if s == t {
+					return ID(i + len(coreTags)), exact
+				}
+			}
+			exact = false
+		}
+	}
+	if x, ok := getCoreIndex(t); ok {
+		return x, exact
+	}
+	exact = false
+	if r != 0 && s == 0 {
+		// Deal with cases where an extra script is inserted for the region.
+		t, _ := t.Maximize()
+		if x, ok := getCoreIndex(t); ok {
+			return x, exact
+		}
+	}
+	for t = t.Parent(); t != root; t = t.Parent() {
+		// No variants specified: just compare core components.
+		// The key has the form lllssrrr, where l, s, and r are nibbles for
+		// respectively the langID, scriptID, and regionID.
+		if x, ok := getCoreIndex(t); ok {
+			return x, exact
+		}
+	}
+	return 0, exact
+}
+
+var root = language.Tag{}
diff --git a/vendor/golang.org/x/text/internal/language/compact/parents.go b/vendor/golang.org/x/text/internal/language/compact/parents.go
new file mode 100644
index 00000000..8d810723
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact/parents.go
@@ -0,0 +1,120 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package compact
+
+// parents maps a compact index of a tag to the compact index of the parent of
+// this tag.
+var parents = []ID{ // 775 elements
+	// Entry 0 - 3F
+	0x0000, 0x0000, 0x0001, 0x0001, 0x0000, 0x0004, 0x0000, 0x0006,
+	0x0000, 0x0008, 0x0000, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
+	0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
+	0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a,
+	0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x000a, 0x0000,
+	0x0000, 0x0028, 0x0000, 0x002a, 0x0000, 0x002c, 0x0000, 0x0000,
+	0x002f, 0x002e, 0x002e, 0x0000, 0x0033, 0x0000, 0x0035, 0x0000,
+	0x0037, 0x0000, 0x0039, 0x0000, 0x003b, 0x0000, 0x0000, 0x003e,
+	// Entry 40 - 7F
+	0x0000, 0x0040, 0x0040, 0x0000, 0x0043, 0x0043, 0x0000, 0x0046,
+	0x0000, 0x0048, 0x0000, 0x0000, 0x004b, 0x004a, 0x004a, 0x0000,
+	0x004f, 0x004f, 0x004f, 0x004f, 0x0000, 0x0054, 0x0054, 0x0000,
+	0x0057, 0x0000, 0x0059, 0x0000, 0x005b, 0x0000, 0x005d, 0x005d,
+	0x0000, 0x0060, 0x0000, 0x0062, 0x0000, 0x0064, 0x0000, 0x0066,
+	0x0066, 0x0000, 0x0069, 0x0000, 0x006b, 0x006b, 0x006b, 0x006b,
+	0x006b, 0x006b, 0x006b, 0x0000, 0x0073, 0x0000, 0x0075, 0x0000,
+	0x0077, 0x0000, 0x0000, 0x007a, 0x0000, 0x007c, 0x0000, 0x007e,
+	// Entry 80 - BF
+	0x0000, 0x0080, 0x0080, 0x0000, 0x0083, 0x0083, 0x0000, 0x0086,
+	0x0087, 0x0087, 0x0087, 0x0086, 0x0088, 0x0087, 0x0087, 0x0087,
+	0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0088,
+	0x0087, 0x0087, 0x0087, 0x0087, 0x0088, 0x0087, 0x0088, 0x0087,
+	0x0087, 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
+	0x0087, 0x0087, 0x0087, 0x0086, 0x0087, 0x0087, 0x0087, 0x0087,
+	0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
+	0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0086, 0x0087, 0x0086,
+	// Entry C0 - FF
+	0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
+	0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
+	0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0088, 0x0087,
+	0x0087, 0x0088, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087,
+	0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0086, 0x0086, 0x0087,
+	0x0087, 0x0086, 0x0087, 0x0087, 0x0087, 0x0087, 0x0087, 0x0000,
+	0x00ef, 0x0000, 0x00f1, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2,
+	0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f1, 0x00f2, 0x00f1, 0x00f1,
+	// Entry 100 - 13F
+	0x00f2, 0x00f2, 0x00f1, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f1,
+	0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x00f2, 0x0000, 0x010e,
+	0x0000, 0x0110, 0x0000, 0x0112, 0x0000, 0x0114, 0x0114, 0x0000,
+	0x0117, 0x0117, 0x0117, 0x0117, 0x0000, 0x011c, 0x0000, 0x011e,
+	0x0000, 0x0120, 0x0120, 0x0000, 0x0123, 0x0123, 0x0123, 0x0123,
+	0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
+	0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
+	0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
+	// Entry 140 - 17F
+	0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
+	0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123, 0x0123,
+	0x0123, 0x0123, 0x0000, 0x0152, 0x0000, 0x0154, 0x0000, 0x0156,
+	0x0000, 0x0158, 0x0000, 0x015a, 0x0000, 0x015c, 0x015c, 0x015c,
+	0x0000, 0x0160, 0x0000, 0x0000, 0x0163, 0x0000, 0x0165, 0x0000,
+	0x0167, 0x0167, 0x0167, 0x0000, 0x016b, 0x0000, 0x016d, 0x0000,
+	0x016f, 0x0000, 0x0171, 0x0171, 0x0000, 0x0174, 0x0000, 0x0176,
+	0x0000, 0x0178, 0x0000, 0x017a, 0x0000, 0x017c, 0x0000, 0x017e,
+	// Entry 180 - 1BF
+	0x0000, 0x0000, 0x0000, 0x0182, 0x0000, 0x0184, 0x0184, 0x0184,
+	0x0184, 0x0000, 0x0000, 0x0000, 0x018b, 0x0000, 0x0000, 0x018e,
+	0x0000, 0x0000, 0x0191, 0x0000, 0x0000, 0x0000, 0x0195, 0x0000,
+	0x0197, 0x0000, 0x0000, 0x019a, 0x0000, 0x0000, 0x019d, 0x0000,
+	0x019f, 0x0000, 0x01a1, 0x0000, 0x01a3, 0x0000, 0x01a5, 0x0000,
+	0x01a7, 0x0000, 0x01a9, 0x0000, 0x01ab, 0x0000, 0x01ad, 0x0000,
+	0x01af, 0x0000, 0x01b1, 0x01b1, 0x0000, 0x01b4, 0x0000, 0x01b6,
+	0x0000, 0x01b8, 0x0000, 0x01ba, 0x0000, 0x01bc, 0x0000, 0x0000,
+	// Entry 1C0 - 1FF
+	0x01bf, 0x0000, 0x01c1, 0x0000, 0x01c3, 0x0000, 0x01c5, 0x0000,
+	0x01c7, 0x0000, 0x01c9, 0x0000, 0x01cb, 0x01cb, 0x01cb, 0x01cb,
+	0x0000, 0x01d0, 0x0000, 0x01d2, 0x01d2, 0x0000, 0x01d5, 0x0000,
+	0x01d7, 0x0000, 0x01d9, 0x0000, 0x01db, 0x0000, 0x01dd, 0x0000,
+	0x01df, 0x01df, 0x0000, 0x01e2, 0x0000, 0x01e4, 0x0000, 0x01e6,
+	0x0000, 0x01e8, 0x0000, 0x01ea, 0x0000, 0x01ec, 0x0000, 0x01ee,
+	0x0000, 0x01f0, 0x0000, 0x0000, 0x01f3, 0x0000, 0x01f5, 0x01f5,
+	0x01f5, 0x0000, 0x01f9, 0x0000, 0x01fb, 0x0000, 0x01fd, 0x0000,
+	// Entry 200 - 23F
+	0x01ff, 0x0000, 0x0000, 0x0202, 0x0000, 0x0204, 0x0204, 0x0000,
+	0x0207, 0x0000, 0x0209, 0x0209, 0x0000, 0x020c, 0x020c, 0x0000,
+	0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x020f, 0x0000,
+	0x0217, 0x0000, 0x0219, 0x0000, 0x021b, 0x0000, 0x0000, 0x0000,
+	0x0000, 0x0000, 0x0221, 0x0000, 0x0000, 0x0224, 0x0000, 0x0226,
+	0x0226, 0x0000, 0x0229, 0x0000, 0x022b, 0x022b, 0x0000, 0x0000,
+	0x022f, 0x022e, 0x022e, 0x0000, 0x0000, 0x0234, 0x0000, 0x0236,
+	0x0000, 0x0238, 0x0000, 0x0244, 0x023a, 0x0244, 0x0244, 0x0244,
+	// Entry 240 - 27F
+	0x0244, 0x0244, 0x0244, 0x0244, 0x023a, 0x0244, 0x0244, 0x0000,
+	0x0247, 0x0247, 0x0247, 0x0000, 0x024b, 0x0000, 0x024d, 0x0000,
+	0x024f, 0x024f, 0x0000, 0x0252, 0x0000, 0x0254, 0x0254, 0x0254,
+	0x0254, 0x0254, 0x0254, 0x0000, 0x025b, 0x0000, 0x025d, 0x0000,
+	0x025f, 0x0000, 0x0261, 0x0000, 0x0263, 0x0000, 0x0265, 0x0000,
+	0x0000, 0x0268, 0x0268, 0x0268, 0x0000, 0x026c, 0x0000, 0x026e,
+	0x0000, 0x0270, 0x0000, 0x0000, 0x0000, 0x0274, 0x0273, 0x0273,
+	0x0000, 0x0278, 0x0000, 0x027a, 0x0000, 0x027c, 0x0000, 0x0000,
+	// Entry 280 - 2BF
+	0x0000, 0x0000, 0x0281, 0x0000, 0x0000, 0x0284, 0x0000, 0x0286,
+	0x0286, 0x0286, 0x0286, 0x0000, 0x028b, 0x028b, 0x028b, 0x0000,
+	0x028f, 0x028f, 0x028f, 0x028f, 0x028f, 0x0000, 0x0295, 0x0295,
+	0x0295, 0x0295, 0x0000, 0x0000, 0x0000, 0x0000, 0x029d, 0x029d,
+	0x029d, 0x0000, 0x02a1, 0x02a1, 0x02a1, 0x02a1, 0x0000, 0x0000,
+	0x02a7, 0x02a7, 0x02a7, 0x02a7, 0x0000, 0x02ac, 0x0000, 0x02ae,
+	0x02ae, 0x0000, 0x02b1, 0x0000, 0x02b3, 0x0000, 0x02b5, 0x02b5,
+	0x0000, 0x0000, 0x02b9, 0x0000, 0x0000, 0x0000, 0x02bd, 0x0000,
+	// Entry 2C0 - 2FF
+	0x02bf, 0x02bf, 0x0000, 0x0000, 0x02c3, 0x0000, 0x02c5, 0x0000,
+	0x02c7, 0x0000, 0x02c9, 0x0000, 0x02cb, 0x0000, 0x02cd, 0x02cd,
+	0x0000, 0x0000, 0x02d1, 0x0000, 0x02d3, 0x02d0, 0x02d0, 0x0000,
+	0x0000, 0x02d8, 0x02d7, 0x02d7, 0x0000, 0x0000, 0x02dd, 0x0000,
+	0x02df, 0x0000, 0x02e1, 0x0000, 0x0000, 0x02e4, 0x0000, 0x02e6,
+	0x0000, 0x0000, 0x02e9, 0x0000, 0x02eb, 0x0000, 0x02ed, 0x0000,
+	0x02ef, 0x02ef, 0x0000, 0x0000, 0x02f3, 0x02f2, 0x02f2, 0x0000,
+	0x02f7, 0x0000, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x02f9, 0x0000,
+	// Entry 300 - 33F
+	0x02ff, 0x0300, 0x02ff, 0x0000, 0x0303, 0x0051, 0x00e6,
+} // Size: 1574 bytes
+
+// Total table size 1574 bytes (1KiB); checksum: 895AAF0B
diff --git a/vendor/golang.org/x/text/internal/language/compact/tables.go b/vendor/golang.org/x/text/internal/language/compact/tables.go
new file mode 100644
index 00000000..fe7ad9ea
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact/tables.go
@@ -0,0 +1,1015 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package compact
+
+import "golang.org/x/text/internal/language"
+
+// CLDRVersion is the CLDR version from which the tables in this package are derived.
+const CLDRVersion = "32"
+
+// NumCompactTags is the number of common tags. The maximum tag is
+// NumCompactTags-1.
+const NumCompactTags = 775
+const (
+	undIndex          ID = 0
+	afIndex           ID = 1
+	afNAIndex         ID = 2
+	afZAIndex         ID = 3
+	agqIndex          ID = 4
+	agqCMIndex        ID = 5
+	akIndex           ID = 6
+	akGHIndex         ID = 7
+	amIndex           ID = 8
+	amETIndex         ID = 9
+	arIndex           ID = 10
+	ar001Index        ID = 11
+	arAEIndex         ID = 12
+	arBHIndex         ID = 13
+	arDJIndex         ID = 14
+	arDZIndex         ID = 15
+	arEGIndex         ID = 16
+	arEHIndex         ID = 17
+	arERIndex         ID = 18
+	arILIndex         ID = 19
+	arIQIndex         ID = 20
+	arJOIndex         ID = 21
+	arKMIndex         ID = 22
+	arKWIndex         ID = 23
+	arLBIndex         ID = 24
+	arLYIndex         ID = 25
+	arMAIndex         ID = 26
+	arMRIndex         ID = 27
+	arOMIndex         ID = 28
+	arPSIndex         ID = 29
+	arQAIndex         ID = 30
+	arSAIndex         ID = 31
+	arSDIndex         ID = 32
+	arSOIndex         ID = 33
+	arSSIndex         ID = 34
+	arSYIndex         ID = 35
+	arTDIndex         ID = 36
+	arTNIndex         ID = 37
+	arYEIndex         ID = 38
+	arsIndex          ID = 39
+	asIndex           ID = 40
+	asINIndex         ID = 41
+	asaIndex          ID = 42
+	asaTZIndex        ID = 43
+	astIndex          ID = 44
+	astESIndex        ID = 45
+	azIndex           ID = 46
+	azCyrlIndex       ID = 47
+	azCyrlAZIndex     ID = 48
+	azLatnIndex       ID = 49
+	azLatnAZIndex     ID = 50
+	basIndex          ID = 51
+	basCMIndex        ID = 52
+	beIndex           ID = 53
+	beBYIndex         ID = 54
+	bemIndex          ID = 55
+	bemZMIndex        ID = 56
+	bezIndex          ID = 57
+	bezTZIndex        ID = 58
+	bgIndex           ID = 59
+	bgBGIndex         ID = 60
+	bhIndex           ID = 61
+	bmIndex           ID = 62
+	bmMLIndex         ID = 63
+	bnIndex           ID = 64
+	bnBDIndex         ID = 65
+	bnINIndex         ID = 66
+	boIndex           ID = 67
+	boCNIndex         ID = 68
+	boINIndex         ID = 69
+	brIndex           ID = 70
+	brFRIndex         ID = 71
+	brxIndex          ID = 72
+	brxINIndex        ID = 73
+	bsIndex           ID = 74
+	bsCyrlIndex       ID = 75
+	bsCyrlBAIndex     ID = 76
+	bsLatnIndex       ID = 77
+	bsLatnBAIndex     ID = 78
+	caIndex           ID = 79
+	caADIndex         ID = 80
+	caESIndex         ID = 81
+	caFRIndex         ID = 82
+	caITIndex         ID = 83
+	ccpIndex          ID = 84
+	ccpBDIndex        ID = 85
+	ccpINIndex        ID = 86
+	ceIndex           ID = 87
+	ceRUIndex         ID = 88
+	cggIndex          ID = 89
+	cggUGIndex        ID = 90
+	chrIndex          ID = 91
+	chrUSIndex        ID = 92
+	ckbIndex          ID = 93
+	ckbIQIndex        ID = 94
+	ckbIRIndex        ID = 95
+	csIndex           ID = 96
+	csCZIndex         ID = 97
+	cuIndex           ID = 98
+	cuRUIndex         ID = 99
+	cyIndex           ID = 100
+	cyGBIndex         ID = 101
+	daIndex           ID = 102
+	daDKIndex         ID = 103
+	daGLIndex         ID = 104
+	davIndex          ID = 105
+	davKEIndex        ID = 106
+	deIndex           ID = 107
+	deATIndex         ID = 108
+	deBEIndex         ID = 109
+	deCHIndex         ID = 110
+	deDEIndex         ID = 111
+	deITIndex         ID = 112
+	deLIIndex         ID = 113
+	deLUIndex         ID = 114
+	djeIndex          ID = 115
+	djeNEIndex        ID = 116
+	dsbIndex          ID = 117
+	dsbDEIndex        ID = 118
+	duaIndex          ID = 119
+	duaCMIndex        ID = 120
+	dvIndex           ID = 121
+	dyoIndex          ID = 122
+	dyoSNIndex        ID = 123
+	dzIndex           ID = 124
+	dzBTIndex         ID = 125
+	ebuIndex          ID = 126
+	ebuKEIndex        ID = 127
+	eeIndex           ID = 128
+	eeGHIndex         ID = 129
+	eeTGIndex         ID = 130
+	elIndex           ID = 131
+	elCYIndex         ID = 132
+	elGRIndex         ID = 133
+	enIndex           ID = 134
+	en001Index        ID = 135
+	en150Index        ID = 136
+	enAGIndex         ID = 137
+	enAIIndex         ID = 138
+	enASIndex         ID = 139
+	enATIndex         ID = 140
+	enAUIndex         ID = 141
+	enBBIndex         ID = 142
+	enBEIndex         ID = 143
+	enBIIndex         ID = 144
+	enBMIndex         ID = 145
+	enBSIndex         ID = 146
+	enBWIndex         ID = 147
+	enBZIndex         ID = 148
+	enCAIndex         ID = 149
+	enCCIndex         ID = 150
+	enCHIndex         ID = 151
+	enCKIndex         ID = 152
+	enCMIndex         ID = 153
+	enCXIndex         ID = 154
+	enCYIndex         ID = 155
+	enDEIndex         ID = 156
+	enDGIndex         ID = 157
+	enDKIndex         ID = 158
+	enDMIndex         ID = 159
+	enERIndex         ID = 160
+	enFIIndex         ID = 161
+	enFJIndex         ID = 162
+	enFKIndex         ID = 163
+	enFMIndex         ID = 164
+	enGBIndex         ID = 165
+	enGDIndex         ID = 166
+	enGGIndex         ID = 167
+	enGHIndex         ID = 168
+	enGIIndex         ID = 169
+	enGMIndex         ID = 170
+	enGUIndex         ID = 171
+	enGYIndex         ID = 172
+	enHKIndex         ID = 173
+	enIEIndex         ID = 174
+	enILIndex         ID = 175
+	enIMIndex         ID = 176
+	enINIndex         ID = 177
+	enIOIndex         ID = 178
+	enJEIndex         ID = 179
+	enJMIndex         ID = 180
+	enKEIndex         ID = 181
+	enKIIndex         ID = 182
+	enKNIndex         ID = 183
+	enKYIndex         ID = 184
+	enLCIndex         ID = 185
+	enLRIndex         ID = 186
+	enLSIndex         ID = 187
+	enMGIndex         ID = 188
+	enMHIndex         ID = 189
+	enMOIndex         ID = 190
+	enMPIndex         ID = 191
+	enMSIndex         ID = 192
+	enMTIndex         ID = 193
+	enMUIndex         ID = 194
+	enMWIndex         ID = 195
+	enMYIndex         ID = 196
+	enNAIndex         ID = 197
+	enNFIndex         ID = 198
+	enNGIndex         ID = 199
+	enNLIndex         ID = 200
+	enNRIndex         ID = 201
+	enNUIndex         ID = 202
+	enNZIndex         ID = 203
+	enPGIndex         ID = 204
+	enPHIndex         ID = 205
+	enPKIndex         ID = 206
+	enPNIndex         ID = 207
+	enPRIndex         ID = 208
+	enPWIndex         ID = 209
+	enRWIndex         ID = 210
+	enSBIndex         ID = 211
+	enSCIndex         ID = 212
+	enSDIndex         ID = 213
+	enSEIndex         ID = 214
+	enSGIndex         ID = 215
+	enSHIndex         ID = 216
+	enSIIndex         ID = 217
+	enSLIndex         ID = 218
+	enSSIndex         ID = 219
+	enSXIndex         ID = 220
+	enSZIndex         ID = 221
+	enTCIndex         ID = 222
+	enTKIndex         ID = 223
+	enTOIndex         ID = 224
+	enTTIndex         ID = 225
+	enTVIndex         ID = 226
+	enTZIndex         ID = 227
+	enUGIndex         ID = 228
+	enUMIndex         ID = 229
+	enUSIndex         ID = 230
+	enVCIndex         ID = 231
+	enVGIndex         ID = 232
+	enVIIndex         ID = 233
+	enVUIndex         ID = 234
+	enWSIndex         ID = 235
+	enZAIndex         ID = 236
+	enZMIndex         ID = 237
+	enZWIndex         ID = 238
+	eoIndex           ID = 239
+	eo001Index        ID = 240
+	esIndex           ID = 241
+	es419Index        ID = 242
+	esARIndex         ID = 243
+	esBOIndex         ID = 244
+	esBRIndex         ID = 245
+	esBZIndex         ID = 246
+	esCLIndex         ID = 247
+	esCOIndex         ID = 248
+	esCRIndex         ID = 249
+	esCUIndex         ID = 250
+	esDOIndex         ID = 251
+	esEAIndex         ID = 252
+	esECIndex         ID = 253
+	esESIndex         ID = 254
+	esGQIndex         ID = 255
+	esGTIndex         ID = 256
+	esHNIndex         ID = 257
+	esICIndex         ID = 258
+	esMXIndex         ID = 259
+	esNIIndex         ID = 260
+	esPAIndex         ID = 261
+	esPEIndex         ID = 262
+	esPHIndex         ID = 263
+	esPRIndex         ID = 264
+	esPYIndex         ID = 265
+	esSVIndex         ID = 266
+	esUSIndex         ID = 267
+	esUYIndex         ID = 268
+	esVEIndex         ID = 269
+	etIndex           ID = 270
+	etEEIndex         ID = 271
+	euIndex           ID = 272
+	euESIndex         ID = 273
+	ewoIndex          ID = 274
+	ewoCMIndex        ID = 275
+	faIndex           ID = 276
+	faAFIndex         ID = 277
+	faIRIndex         ID = 278
+	ffIndex           ID = 279
+	ffCMIndex         ID = 280
+	ffGNIndex         ID = 281
+	ffMRIndex         ID = 282
+	ffSNIndex         ID = 283
+	fiIndex           ID = 284
+	fiFIIndex         ID = 285
+	filIndex          ID = 286
+	filPHIndex        ID = 287
+	foIndex           ID = 288
+	foDKIndex         ID = 289
+	foFOIndex         ID = 290
+	frIndex           ID = 291
+	frBEIndex         ID = 292
+	frBFIndex         ID = 293
+	frBIIndex         ID = 294
+	frBJIndex         ID = 295
+	frBLIndex         ID = 296
+	frCAIndex         ID = 297
+	frCDIndex         ID = 298
+	frCFIndex         ID = 299
+	frCGIndex         ID = 300
+	frCHIndex         ID = 301
+	frCIIndex         ID = 302
+	frCMIndex         ID = 303
+	frDJIndex         ID = 304
+	frDZIndex         ID = 305
+	frFRIndex         ID = 306
+	frGAIndex         ID = 307
+	frGFIndex         ID = 308
+	frGNIndex         ID = 309
+	frGPIndex         ID = 310
+	frGQIndex         ID = 311
+	frHTIndex         ID = 312
+	frKMIndex         ID = 313
+	frLUIndex         ID = 314
+	frMAIndex         ID = 315
+	frMCIndex         ID = 316
+	frMFIndex         ID = 317
+	frMGIndex         ID = 318
+	frMLIndex         ID = 319
+	frMQIndex         ID = 320
+	frMRIndex         ID = 321
+	frMUIndex         ID = 322
+	frNCIndex         ID = 323
+	frNEIndex         ID = 324
+	frPFIndex         ID = 325
+	frPMIndex         ID = 326
+	frREIndex         ID = 327
+	frRWIndex         ID = 328
+	frSCIndex         ID = 329
+	frSNIndex         ID = 330
+	frSYIndex         ID = 331
+	frTDIndex         ID = 332
+	frTGIndex         ID = 333
+	frTNIndex         ID = 334
+	frVUIndex         ID = 335
+	frWFIndex         ID = 336
+	frYTIndex         ID = 337
+	furIndex          ID = 338
+	furITIndex        ID = 339
+	fyIndex           ID = 340
+	fyNLIndex         ID = 341
+	gaIndex           ID = 342
+	gaIEIndex         ID = 343
+	gdIndex           ID = 344
+	gdGBIndex         ID = 345
+	glIndex           ID = 346
+	glESIndex         ID = 347
+	gswIndex          ID = 348
+	gswCHIndex        ID = 349
+	gswFRIndex        ID = 350
+	gswLIIndex        ID = 351
+	guIndex           ID = 352
+	guINIndex         ID = 353
+	guwIndex          ID = 354
+	guzIndex          ID = 355
+	guzKEIndex        ID = 356
+	gvIndex           ID = 357
+	gvIMIndex         ID = 358
+	haIndex           ID = 359
+	haGHIndex         ID = 360
+	haNEIndex         ID = 361
+	haNGIndex         ID = 362
+	hawIndex          ID = 363
+	hawUSIndex        ID = 364
+	heIndex           ID = 365
+	heILIndex         ID = 366
+	hiIndex           ID = 367
+	hiINIndex         ID = 368
+	hrIndex           ID = 369
+	hrBAIndex         ID = 370
+	hrHRIndex         ID = 371
+	hsbIndex          ID = 372
+	hsbDEIndex        ID = 373
+	huIndex           ID = 374
+	huHUIndex         ID = 375
+	hyIndex           ID = 376
+	hyAMIndex         ID = 377
+	idIndex           ID = 378
+	idIDIndex         ID = 379
+	igIndex           ID = 380
+	igNGIndex         ID = 381
+	iiIndex           ID = 382
+	iiCNIndex         ID = 383
+	inIndex           ID = 384
+	ioIndex           ID = 385
+	isIndex           ID = 386
+	isISIndex         ID = 387
+	itIndex           ID = 388
+	itCHIndex         ID = 389
+	itITIndex         ID = 390
+	itSMIndex         ID = 391
+	itVAIndex         ID = 392
+	iuIndex           ID = 393
+	iwIndex           ID = 394
+	jaIndex           ID = 395
+	jaJPIndex         ID = 396
+	jboIndex          ID = 397
+	jgoIndex          ID = 398
+	jgoCMIndex        ID = 399
+	jiIndex           ID = 400
+	jmcIndex          ID = 401
+	jmcTZIndex        ID = 402
+	jvIndex           ID = 403
+	jwIndex           ID = 404
+	kaIndex           ID = 405
+	kaGEIndex         ID = 406
+	kabIndex          ID = 407
+	kabDZIndex        ID = 408
+	kajIndex          ID = 409
+	kamIndex          ID = 410
+	kamKEIndex        ID = 411
+	kcgIndex          ID = 412
+	kdeIndex          ID = 413
+	kdeTZIndex        ID = 414
+	keaIndex          ID = 415
+	keaCVIndex        ID = 416
+	khqIndex          ID = 417
+	khqMLIndex        ID = 418
+	kiIndex           ID = 419
+	kiKEIndex         ID = 420
+	kkIndex           ID = 421
+	kkKZIndex         ID = 422
+	kkjIndex          ID = 423
+	kkjCMIndex        ID = 424
+	klIndex           ID = 425
+	klGLIndex         ID = 426
+	klnIndex          ID = 427
+	klnKEIndex        ID = 428
+	kmIndex           ID = 429
+	kmKHIndex         ID = 430
+	knIndex           ID = 431
+	knINIndex         ID = 432
+	koIndex           ID = 433
+	koKPIndex         ID = 434
+	koKRIndex         ID = 435
+	kokIndex          ID = 436
+	kokINIndex        ID = 437
+	ksIndex           ID = 438
+	ksINIndex         ID = 439
+	ksbIndex          ID = 440
+	ksbTZIndex        ID = 441
+	ksfIndex          ID = 442
+	ksfCMIndex        ID = 443
+	kshIndex          ID = 444
+	kshDEIndex        ID = 445
+	kuIndex           ID = 446
+	kwIndex           ID = 447
+	kwGBIndex         ID = 448
+	kyIndex           ID = 449
+	kyKGIndex         ID = 450
+	lagIndex          ID = 451
+	lagTZIndex        ID = 452
+	lbIndex           ID = 453
+	lbLUIndex         ID = 454
+	lgIndex           ID = 455
+	lgUGIndex         ID = 456
+	lktIndex          ID = 457
+	lktUSIndex        ID = 458
+	lnIndex           ID = 459
+	lnAOIndex         ID = 460
+	lnCDIndex         ID = 461
+	lnCFIndex         ID = 462
+	lnCGIndex         ID = 463
+	loIndex           ID = 464
+	loLAIndex         ID = 465
+	lrcIndex          ID = 466
+	lrcIQIndex        ID = 467
+	lrcIRIndex        ID = 468
+	ltIndex           ID = 469
+	ltLTIndex         ID = 470
+	luIndex           ID = 471
+	luCDIndex         ID = 472
+	luoIndex          ID = 473
+	luoKEIndex        ID = 474
+	luyIndex          ID = 475
+	luyKEIndex        ID = 476
+	lvIndex           ID = 477
+	lvLVIndex         ID = 478
+	masIndex          ID = 479
+	masKEIndex        ID = 480
+	masTZIndex        ID = 481
+	merIndex          ID = 482
+	merKEIndex        ID = 483
+	mfeIndex          ID = 484
+	mfeMUIndex        ID = 485
+	mgIndex           ID = 486
+	mgMGIndex         ID = 487
+	mghIndex          ID = 488
+	mghMZIndex        ID = 489
+	mgoIndex          ID = 490
+	mgoCMIndex        ID = 491
+	mkIndex           ID = 492
+	mkMKIndex         ID = 493
+	mlIndex           ID = 494
+	mlINIndex         ID = 495
+	mnIndex           ID = 496
+	mnMNIndex         ID = 497
+	moIndex           ID = 498
+	mrIndex           ID = 499
+	mrINIndex         ID = 500
+	msIndex           ID = 501
+	msBNIndex         ID = 502
+	msMYIndex         ID = 503
+	msSGIndex         ID = 504
+	mtIndex           ID = 505
+	mtMTIndex         ID = 506
+	muaIndex          ID = 507
+	muaCMIndex        ID = 508
+	myIndex           ID = 509
+	myMMIndex         ID = 510
+	mznIndex          ID = 511
+	mznIRIndex        ID = 512
+	nahIndex          ID = 513
+	naqIndex          ID = 514
+	naqNAIndex        ID = 515
+	nbIndex           ID = 516
+	nbNOIndex         ID = 517
+	nbSJIndex         ID = 518
+	ndIndex           ID = 519
+	ndZWIndex         ID = 520
+	ndsIndex          ID = 521
+	ndsDEIndex        ID = 522
+	ndsNLIndex        ID = 523
+	neIndex           ID = 524
+	neINIndex         ID = 525
+	neNPIndex         ID = 526
+	nlIndex           ID = 527
+	nlAWIndex         ID = 528
+	nlBEIndex         ID = 529
+	nlBQIndex         ID = 530
+	nlCWIndex         ID = 531
+	nlNLIndex         ID = 532
+	nlSRIndex         ID = 533
+	nlSXIndex         ID = 534
+	nmgIndex          ID = 535
+	nmgCMIndex        ID = 536
+	nnIndex           ID = 537
+	nnNOIndex         ID = 538
+	nnhIndex          ID = 539
+	nnhCMIndex        ID = 540
+	noIndex           ID = 541
+	nqoIndex          ID = 542
+	nrIndex           ID = 543
+	nsoIndex          ID = 544
+	nusIndex          ID = 545
+	nusSSIndex        ID = 546
+	nyIndex           ID = 547
+	nynIndex          ID = 548
+	nynUGIndex        ID = 549
+	omIndex           ID = 550
+	omETIndex         ID = 551
+	omKEIndex         ID = 552
+	orIndex           ID = 553
+	orINIndex         ID = 554
+	osIndex           ID = 555
+	osGEIndex         ID = 556
+	osRUIndex         ID = 557
+	paIndex           ID = 558
+	paArabIndex       ID = 559
+	paArabPKIndex     ID = 560
+	paGuruIndex       ID = 561
+	paGuruINIndex     ID = 562
+	papIndex          ID = 563
+	plIndex           ID = 564
+	plPLIndex         ID = 565
+	prgIndex          ID = 566
+	prg001Index       ID = 567
+	psIndex           ID = 568
+	psAFIndex         ID = 569
+	ptIndex           ID = 570
+	ptAOIndex         ID = 571
+	ptBRIndex         ID = 572
+	ptCHIndex         ID = 573
+	ptCVIndex         ID = 574
+	ptGQIndex         ID = 575
+	ptGWIndex         ID = 576
+	ptLUIndex         ID = 577
+	ptMOIndex         ID = 578
+	ptMZIndex         ID = 579
+	ptPTIndex         ID = 580
+	ptSTIndex         ID = 581
+	ptTLIndex         ID = 582
+	quIndex           ID = 583
+	quBOIndex         ID = 584
+	quECIndex         ID = 585
+	quPEIndex         ID = 586
+	rmIndex           ID = 587
+	rmCHIndex         ID = 588
+	rnIndex           ID = 589
+	rnBIIndex         ID = 590
+	roIndex           ID = 591
+	roMDIndex         ID = 592
+	roROIndex         ID = 593
+	rofIndex          ID = 594
+	rofTZIndex        ID = 595
+	ruIndex           ID = 596
+	ruBYIndex         ID = 597
+	ruKGIndex         ID = 598
+	ruKZIndex         ID = 599
+	ruMDIndex         ID = 600
+	ruRUIndex         ID = 601
+	ruUAIndex         ID = 602
+	rwIndex           ID = 603
+	rwRWIndex         ID = 604
+	rwkIndex          ID = 605
+	rwkTZIndex        ID = 606
+	sahIndex          ID = 607
+	sahRUIndex        ID = 608
+	saqIndex          ID = 609
+	saqKEIndex        ID = 610
+	sbpIndex          ID = 611
+	sbpTZIndex        ID = 612
+	sdIndex           ID = 613
+	sdPKIndex         ID = 614
+	sdhIndex          ID = 615
+	seIndex           ID = 616
+	seFIIndex         ID = 617
+	seNOIndex         ID = 618
+	seSEIndex         ID = 619
+	sehIndex          ID = 620
+	sehMZIndex        ID = 621
+	sesIndex          ID = 622
+	sesMLIndex        ID = 623
+	sgIndex           ID = 624
+	sgCFIndex         ID = 625
+	shIndex           ID = 626
+	shiIndex          ID = 627
+	shiLatnIndex      ID = 628
+	shiLatnMAIndex    ID = 629
+	shiTfngIndex      ID = 630
+	shiTfngMAIndex    ID = 631
+	siIndex           ID = 632
+	siLKIndex         ID = 633
+	skIndex           ID = 634
+	skSKIndex         ID = 635
+	slIndex           ID = 636
+	slSIIndex         ID = 637
+	smaIndex          ID = 638
+	smiIndex          ID = 639
+	smjIndex          ID = 640
+	smnIndex          ID = 641
+	smnFIIndex        ID = 642
+	smsIndex          ID = 643
+	snIndex           ID = 644
+	snZWIndex         ID = 645
+	soIndex           ID = 646
+	soDJIndex         ID = 647
+	soETIndex         ID = 648
+	soKEIndex         ID = 649
+	soSOIndex         ID = 650
+	sqIndex           ID = 651
+	sqALIndex         ID = 652
+	sqMKIndex         ID = 653
+	sqXKIndex         ID = 654
+	srIndex           ID = 655
+	srCyrlIndex       ID = 656
+	srCyrlBAIndex     ID = 657
+	srCyrlMEIndex     ID = 658
+	srCyrlRSIndex     ID = 659
+	srCyrlXKIndex     ID = 660
+	srLatnIndex       ID = 661
+	srLatnBAIndex     ID = 662
+	srLatnMEIndex     ID = 663
+	srLatnRSIndex     ID = 664
+	srLatnXKIndex     ID = 665
+	ssIndex           ID = 666
+	ssyIndex          ID = 667
+	stIndex           ID = 668
+	svIndex           ID = 669
+	svAXIndex         ID = 670
+	svFIIndex         ID = 671
+	svSEIndex         ID = 672
+	swIndex           ID = 673
+	swCDIndex         ID = 674
+	swKEIndex         ID = 675
+	swTZIndex         ID = 676
+	swUGIndex         ID = 677
+	syrIndex          ID = 678
+	taIndex           ID = 679
+	taINIndex         ID = 680
+	taLKIndex         ID = 681
+	taMYIndex         ID = 682
+	taSGIndex         ID = 683
+	teIndex           ID = 684
+	teINIndex         ID = 685
+	teoIndex          ID = 686
+	teoKEIndex        ID = 687
+	teoUGIndex        ID = 688
+	tgIndex           ID = 689
+	tgTJIndex         ID = 690
+	thIndex           ID = 691
+	thTHIndex         ID = 692
+	tiIndex           ID = 693
+	tiERIndex         ID = 694
+	tiETIndex         ID = 695
+	tigIndex          ID = 696
+	tkIndex           ID = 697
+	tkTMIndex         ID = 698
+	tlIndex           ID = 699
+	tnIndex           ID = 700
+	toIndex           ID = 701
+	toTOIndex         ID = 702
+	trIndex           ID = 703
+	trCYIndex         ID = 704
+	trTRIndex         ID = 705
+	tsIndex           ID = 706
+	ttIndex           ID = 707
+	ttRUIndex         ID = 708
+	twqIndex          ID = 709
+	twqNEIndex        ID = 710
+	tzmIndex          ID = 711
+	tzmMAIndex        ID = 712
+	ugIndex           ID = 713
+	ugCNIndex         ID = 714
+	ukIndex           ID = 715
+	ukUAIndex         ID = 716
+	urIndex           ID = 717
+	urINIndex         ID = 718
+	urPKIndex         ID = 719
+	uzIndex           ID = 720
+	uzArabIndex       ID = 721
+	uzArabAFIndex     ID = 722
+	uzCyrlIndex       ID = 723
+	uzCyrlUZIndex     ID = 724
+	uzLatnIndex       ID = 725
+	uzLatnUZIndex     ID = 726
+	vaiIndex          ID = 727
+	vaiLatnIndex      ID = 728
+	vaiLatnLRIndex    ID = 729
+	vaiVaiiIndex      ID = 730
+	vaiVaiiLRIndex    ID = 731
+	veIndex           ID = 732
+	viIndex           ID = 733
+	viVNIndex         ID = 734
+	voIndex           ID = 735
+	vo001Index        ID = 736
+	vunIndex          ID = 737
+	vunTZIndex        ID = 738
+	waIndex           ID = 739
+	waeIndex          ID = 740
+	waeCHIndex        ID = 741
+	woIndex           ID = 742
+	woSNIndex         ID = 743
+	xhIndex           ID = 744
+	xogIndex          ID = 745
+	xogUGIndex        ID = 746
+	yavIndex          ID = 747
+	yavCMIndex        ID = 748
+	yiIndex           ID = 749
+	yi001Index        ID = 750
+	yoIndex           ID = 751
+	yoBJIndex         ID = 752
+	yoNGIndex         ID = 753
+	yueIndex          ID = 754
+	yueHansIndex      ID = 755
+	yueHansCNIndex    ID = 756
+	yueHantIndex      ID = 757
+	yueHantHKIndex    ID = 758
+	zghIndex          ID = 759
+	zghMAIndex        ID = 760
+	zhIndex           ID = 761
+	zhHansIndex       ID = 762
+	zhHansCNIndex     ID = 763
+	zhHansHKIndex     ID = 764
+	zhHansMOIndex     ID = 765
+	zhHansSGIndex     ID = 766
+	zhHantIndex       ID = 767
+	zhHantHKIndex     ID = 768
+	zhHantMOIndex     ID = 769
+	zhHantTWIndex     ID = 770
+	zuIndex           ID = 771
+	zuZAIndex         ID = 772
+	caESvalenciaIndex ID = 773
+	enUSuvaposixIndex ID = 774
+)
+
+var coreTags = []language.CompactCoreInfo{ // 773 elements
+	// Entry 0 - 1F
+	0x00000000, 0x01600000, 0x016000d2, 0x01600161,
+	0x01c00000, 0x01c00052, 0x02100000, 0x02100080,
+	0x02700000, 0x0270006f, 0x03a00000, 0x03a00001,
+	0x03a00023, 0x03a00039, 0x03a00062, 0x03a00067,
+	0x03a0006b, 0x03a0006c, 0x03a0006d, 0x03a00097,
+	0x03a0009b, 0x03a000a1, 0x03a000a8, 0x03a000ac,
+	0x03a000b0, 0x03a000b9, 0x03a000ba, 0x03a000c9,
+	0x03a000e1, 0x03a000ed, 0x03a000f3, 0x03a00108,
+	// Entry 20 - 3F
+	0x03a0010b, 0x03a00115, 0x03a00117, 0x03a0011c,
+	0x03a00120, 0x03a00128, 0x03a0015e, 0x04000000,
+	0x04300000, 0x04300099, 0x04400000, 0x0440012f,
+	0x04800000, 0x0480006e, 0x05800000, 0x05820000,
+	0x05820032, 0x0585a000, 0x0585a032, 0x05e00000,
+	0x05e00052, 0x07100000, 0x07100047, 0x07500000,
+	0x07500162, 0x07900000, 0x0790012f, 0x07e00000,
+	0x07e00038, 0x08200000, 0x0a000000, 0x0a0000c3,
+	// Entry 40 - 5F
+	0x0a500000, 0x0a500035, 0x0a500099, 0x0a900000,
+	0x0a900053, 0x0a900099, 0x0b200000, 0x0b200078,
+	0x0b500000, 0x0b500099, 0x0b700000, 0x0b720000,
+	0x0b720033, 0x0b75a000, 0x0b75a033, 0x0d700000,
+	0x0d700022, 0x0d70006e, 0x0d700078, 0x0d70009e,
+	0x0db00000, 0x0db00035, 0x0db00099, 0x0dc00000,
+	0x0dc00106, 0x0df00000, 0x0df00131, 0x0e500000,
+	0x0e500135, 0x0e900000, 0x0e90009b, 0x0e90009c,
+	// Entry 60 - 7F
+	0x0fa00000, 0x0fa0005e, 0x0fe00000, 0x0fe00106,
+	0x10000000, 0x1000007b, 0x10100000, 0x10100063,
+	0x10100082, 0x10800000, 0x108000a4, 0x10d00000,
+	0x10d0002e, 0x10d00036, 0x10d0004e, 0x10d00060,
+	0x10d0009e, 0x10d000b2, 0x10d000b7, 0x11700000,
+	0x117000d4, 0x11f00000, 0x11f00060, 0x12400000,
+	0x12400052, 0x12800000, 0x12b00000, 0x12b00114,
+	0x12d00000, 0x12d00043, 0x12f00000, 0x12f000a4,
+	// Entry 80 - 9F
+	0x13000000, 0x13000080, 0x13000122, 0x13600000,
+	0x1360005d, 0x13600087, 0x13900000, 0x13900001,
+	0x1390001a, 0x13900025, 0x13900026, 0x1390002d,
+	0x1390002e, 0x1390002f, 0x13900034, 0x13900036,
+	0x1390003a, 0x1390003d, 0x13900042, 0x13900046,
+	0x13900048, 0x13900049, 0x1390004a, 0x1390004e,
+	0x13900050, 0x13900052, 0x1390005c, 0x1390005d,
+	0x13900060, 0x13900061, 0x13900063, 0x13900064,
+	// Entry A0 - BF
+	0x1390006d, 0x13900072, 0x13900073, 0x13900074,
+	0x13900075, 0x1390007b, 0x1390007c, 0x1390007f,
+	0x13900080, 0x13900081, 0x13900083, 0x1390008a,
+	0x1390008c, 0x1390008d, 0x13900096, 0x13900097,
+	0x13900098, 0x13900099, 0x1390009a, 0x1390009f,
+	0x139000a0, 0x139000a4, 0x139000a7, 0x139000a9,
+	0x139000ad, 0x139000b1, 0x139000b4, 0x139000b5,
+	0x139000bf, 0x139000c0, 0x139000c6, 0x139000c7,
+	// Entry C0 - DF
+	0x139000ca, 0x139000cb, 0x139000cc, 0x139000ce,
+	0x139000d0, 0x139000d2, 0x139000d5, 0x139000d6,
+	0x139000d9, 0x139000dd, 0x139000df, 0x139000e0,
+	0x139000e6, 0x139000e7, 0x139000e8, 0x139000eb,
+	0x139000ec, 0x139000f0, 0x13900107, 0x13900109,
+	0x1390010a, 0x1390010b, 0x1390010c, 0x1390010d,
+	0x1390010e, 0x1390010f, 0x13900112, 0x13900117,
+	0x1390011b, 0x1390011d, 0x1390011f, 0x13900125,
+	// Entry E0 - FF
+	0x13900129, 0x1390012c, 0x1390012d, 0x1390012f,
+	0x13900131, 0x13900133, 0x13900135, 0x13900139,
+	0x1390013c, 0x1390013d, 0x1390013f, 0x13900142,
+	0x13900161, 0x13900162, 0x13900164, 0x13c00000,
+	0x13c00001, 0x13e00000, 0x13e0001f, 0x13e0002c,
+	0x13e0003f, 0x13e00041, 0x13e00048, 0x13e00051,
+	0x13e00054, 0x13e00056, 0x13e00059, 0x13e00065,
+	0x13e00068, 0x13e00069, 0x13e0006e, 0x13e00086,
+	// Entry 100 - 11F
+	0x13e00089, 0x13e0008f, 0x13e00094, 0x13e000cf,
+	0x13e000d8, 0x13e000e2, 0x13e000e4, 0x13e000e7,
+	0x13e000ec, 0x13e000f1, 0x13e0011a, 0x13e00135,
+	0x13e00136, 0x13e0013b, 0x14000000, 0x1400006a,
+	0x14500000, 0x1450006e, 0x14600000, 0x14600052,
+	0x14800000, 0x14800024, 0x1480009c, 0x14e00000,
+	0x14e00052, 0x14e00084, 0x14e000c9, 0x14e00114,
+	0x15100000, 0x15100072, 0x15300000, 0x153000e7,
+	// Entry 120 - 13F
+	0x15800000, 0x15800063, 0x15800076, 0x15e00000,
+	0x15e00036, 0x15e00037, 0x15e0003a, 0x15e0003b,
+	0x15e0003c, 0x15e00049, 0x15e0004b, 0x15e0004c,
+	0x15e0004d, 0x15e0004e, 0x15e0004f, 0x15e00052,
+	0x15e00062, 0x15e00067, 0x15e00078, 0x15e0007a,
+	0x15e0007e, 0x15e00084, 0x15e00085, 0x15e00086,
+	0x15e00091, 0x15e000a8, 0x15e000b7, 0x15e000ba,
+	0x15e000bb, 0x15e000be, 0x15e000bf, 0x15e000c3,
+	// Entry 140 - 15F
+	0x15e000c8, 0x15e000c9, 0x15e000cc, 0x15e000d3,
+	0x15e000d4, 0x15e000e5, 0x15e000ea, 0x15e00102,
+	0x15e00107, 0x15e0010a, 0x15e00114, 0x15e0011c,
+	0x15e00120, 0x15e00122, 0x15e00128, 0x15e0013f,
+	0x15e00140, 0x15e0015f, 0x16900000, 0x1690009e,
+	0x16d00000, 0x16d000d9, 0x16e00000, 0x16e00096,
+	0x17e00000, 0x17e0007b, 0x19000000, 0x1900006e,
+	0x1a300000, 0x1a30004e, 0x1a300078, 0x1a3000b2,
+	// Entry 160 - 17F
+	0x1a400000, 0x1a400099, 0x1a900000, 0x1ab00000,
+	0x1ab000a4, 0x1ac00000, 0x1ac00098, 0x1b400000,
+	0x1b400080, 0x1b4000d4, 0x1b4000d6, 0x1b800000,
+	0x1b800135, 0x1bc00000, 0x1bc00097, 0x1be00000,
+	0x1be00099, 0x1d100000, 0x1d100033, 0x1d100090,
+	0x1d200000, 0x1d200060, 0x1d500000, 0x1d500092,
+	0x1d700000, 0x1d700028, 0x1e100000, 0x1e100095,
+	0x1e700000, 0x1e7000d6, 0x1ea00000, 0x1ea00053,
+	// Entry 180 - 19F
+	0x1f300000, 0x1f500000, 0x1f800000, 0x1f80009d,
+	0x1f900000, 0x1f90004e, 0x1f90009e, 0x1f900113,
+	0x1f900138, 0x1fa00000, 0x1fb00000, 0x20000000,
+	0x200000a2, 0x20300000, 0x20700000, 0x20700052,
+	0x20800000, 0x20a00000, 0x20a0012f, 0x20e00000,
+	0x20f00000, 0x21000000, 0x2100007d, 0x21200000,
+	0x21200067, 0x21600000, 0x21700000, 0x217000a4,
+	0x21f00000, 0x22300000, 0x2230012f, 0x22700000,
+	// Entry 1A0 - 1BF
+	0x2270005a, 0x23400000, 0x234000c3, 0x23900000,
+	0x239000a4, 0x24200000, 0x242000ae, 0x24400000,
+	0x24400052, 0x24500000, 0x24500082, 0x24600000,
+	0x246000a4, 0x24a00000, 0x24a000a6, 0x25100000,
+	0x25100099, 0x25400000, 0x254000aa, 0x254000ab,
+	0x25600000, 0x25600099, 0x26a00000, 0x26a00099,
+	0x26b00000, 0x26b0012f, 0x26d00000, 0x26d00052,
+	0x26e00000, 0x26e00060, 0x27400000, 0x28100000,
+	// Entry 1C0 - 1DF
+	0x2810007b, 0x28a00000, 0x28a000a5, 0x29100000,
+	0x2910012f, 0x29500000, 0x295000b7, 0x2a300000,
+	0x2a300131, 0x2af00000, 0x2af00135, 0x2b500000,
+	0x2b50002a, 0x2b50004b, 0x2b50004c, 0x2b50004d,
+	0x2b800000, 0x2b8000af, 0x2bf00000, 0x2bf0009b,
+	0x2bf0009c, 0x2c000000, 0x2c0000b6, 0x2c200000,
+	0x2c20004b, 0x2c400000, 0x2c4000a4, 0x2c500000,
+	0x2c5000a4, 0x2c700000, 0x2c7000b8, 0x2d100000,
+	// Entry 1E0 - 1FF
+	0x2d1000a4, 0x2d10012f, 0x2e900000, 0x2e9000a4,
+	0x2ed00000, 0x2ed000cc, 0x2f100000, 0x2f1000bf,
+	0x2f200000, 0x2f2000d1, 0x2f400000, 0x2f400052,
+	0x2ff00000, 0x2ff000c2, 0x30400000, 0x30400099,
+	0x30b00000, 0x30b000c5, 0x31000000, 0x31b00000,
+	0x31b00099, 0x31f00000, 0x31f0003e, 0x31f000d0,
+	0x31f0010d, 0x32000000, 0x320000cb, 0x32500000,
+	0x32500052, 0x33100000, 0x331000c4, 0x33a00000,
+	// Entry 200 - 21F
+	0x33a0009c, 0x34100000, 0x34500000, 0x345000d2,
+	0x34700000, 0x347000da, 0x34700110, 0x34e00000,
+	0x34e00164, 0x35000000, 0x35000060, 0x350000d9,
+	0x35100000, 0x35100099, 0x351000db, 0x36700000,
+	0x36700030, 0x36700036, 0x36700040, 0x3670005b,
+	0x367000d9, 0x36700116, 0x3670011b, 0x36800000,
+	0x36800052, 0x36a00000, 0x36a000da, 0x36c00000,
+	0x36c00052, 0x36f00000, 0x37500000, 0x37600000,
+	// Entry 220 - 23F
+	0x37a00000, 0x38000000, 0x38000117, 0x38700000,
+	0x38900000, 0x38900131, 0x39000000, 0x3900006f,
+	0x390000a4, 0x39500000, 0x39500099, 0x39800000,
+	0x3980007d, 0x39800106, 0x39d00000, 0x39d05000,
+	0x39d050e8, 0x39d36000, 0x39d36099, 0x3a100000,
+	0x3b300000, 0x3b3000e9, 0x3bd00000, 0x3bd00001,
+	0x3be00000, 0x3be00024, 0x3c000000, 0x3c00002a,
+	0x3c000041, 0x3c00004e, 0x3c00005a, 0x3c000086,
+	// Entry 240 - 25F
+	0x3c00008b, 0x3c0000b7, 0x3c0000c6, 0x3c0000d1,
+	0x3c0000ee, 0x3c000118, 0x3c000126, 0x3c400000,
+	0x3c40003f, 0x3c400069, 0x3c4000e4, 0x3d400000,
+	0x3d40004e, 0x3d900000, 0x3d90003a, 0x3dc00000,
+	0x3dc000bc, 0x3dc00104, 0x3de00000, 0x3de0012f,
+	0x3e200000, 0x3e200047, 0x3e2000a5, 0x3e2000ae,
+	0x3e2000bc, 0x3e200106, 0x3e200130, 0x3e500000,
+	0x3e500107, 0x3e600000, 0x3e60012f, 0x3eb00000,
+	// Entry 260 - 27F
+	0x3eb00106, 0x3ec00000, 0x3ec000a4, 0x3f300000,
+	0x3f30012f, 0x3fa00000, 0x3fa000e8, 0x3fc00000,
+	0x3fd00000, 0x3fd00072, 0x3fd000da, 0x3fd0010c,
+	0x3ff00000, 0x3ff000d1, 0x40100000, 0x401000c3,
+	0x40200000, 0x4020004c, 0x40700000, 0x40800000,
+	0x4085a000, 0x4085a0ba, 0x408e3000, 0x408e30ba,
+	0x40c00000, 0x40c000b3, 0x41200000, 0x41200111,
+	0x41600000, 0x4160010f, 0x41c00000, 0x41d00000,
+	// Entry 280 - 29F
+	0x41e00000, 0x41f00000, 0x41f00072, 0x42200000,
+	0x42300000, 0x42300164, 0x42900000, 0x42900062,
+	0x4290006f, 0x429000a4, 0x42900115, 0x43100000,
+	0x43100027, 0x431000c2, 0x4310014d, 0x43200000,
+	0x43220000, 0x43220033, 0x432200bd, 0x43220105,
+	0x4322014d, 0x4325a000, 0x4325a033, 0x4325a0bd,
+	0x4325a105, 0x4325a14d, 0x43700000, 0x43a00000,
+	0x43b00000, 0x44400000, 0x44400031, 0x44400072,
+	// Entry 2A0 - 2BF
+	0x4440010c, 0x44500000, 0x4450004b, 0x445000a4,
+	0x4450012f, 0x44500131, 0x44e00000, 0x45000000,
+	0x45000099, 0x450000b3, 0x450000d0, 0x4500010d,
+	0x46100000, 0x46100099, 0x46400000, 0x464000a4,
+	0x46400131, 0x46700000, 0x46700124, 0x46b00000,
+	0x46b00123, 0x46f00000, 0x46f0006d, 0x46f0006f,
+	0x47100000, 0x47600000, 0x47600127, 0x47a00000,
+	0x48000000, 0x48200000, 0x48200129, 0x48a00000,
+	// Entry 2C0 - 2DF
+	0x48a0005d, 0x48a0012b, 0x48e00000, 0x49400000,
+	0x49400106, 0x4a400000, 0x4a4000d4, 0x4a900000,
+	0x4a9000ba, 0x4ac00000, 0x4ac00053, 0x4ae00000,
+	0x4ae00130, 0x4b400000, 0x4b400099, 0x4b4000e8,
+	0x4bc00000, 0x4bc05000, 0x4bc05024, 0x4bc20000,
+	0x4bc20137, 0x4bc5a000, 0x4bc5a137, 0x4be00000,
+	0x4be5a000, 0x4be5a0b4, 0x4beeb000, 0x4beeb0b4,
+	0x4c000000, 0x4c300000, 0x4c30013e, 0x4c900000,
+	// Entry 2E0 - 2FF
+	0x4c900001, 0x4cc00000, 0x4cc0012f, 0x4ce00000,
+	0x4cf00000, 0x4cf0004e, 0x4e500000, 0x4e500114,
+	0x4f200000, 0x4fb00000, 0x4fb00131, 0x50900000,
+	0x50900052, 0x51200000, 0x51200001, 0x51800000,
+	0x5180003b, 0x518000d6, 0x51f00000, 0x51f3b000,
+	0x51f3b053, 0x51f3c000, 0x51f3c08d, 0x52800000,
+	0x528000ba, 0x52900000, 0x5293b000, 0x5293b053,
+	0x5293b08d, 0x5293b0c6, 0x5293b10d, 0x5293c000,
+	// Entry 300 - 31F
+	0x5293c08d, 0x5293c0c6, 0x5293c12e, 0x52f00000,
+	0x52f00161,
+} // Size: 3116 bytes
+
+const specialTagsStr string = "ca-ES-valencia en-US-u-va-posix"
+
+// Total table size 3147 bytes (3KiB); checksum: BE816D44
diff --git a/vendor/golang.org/x/text/internal/language/compact/tags.go b/vendor/golang.org/x/text/internal/language/compact/tags.go
new file mode 100644
index 00000000..ca135d29
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compact/tags.go
@@ -0,0 +1,91 @@
+// 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 compact
+
+var (
+	und = Tag{}
+
+	Und Tag = Tag{}
+
+	Afrikaans            Tag = Tag{language: afIndex, locale: afIndex}
+	Amharic              Tag = Tag{language: amIndex, locale: amIndex}
+	Arabic               Tag = Tag{language: arIndex, locale: arIndex}
+	ModernStandardArabic Tag = Tag{language: ar001Index, locale: ar001Index}
+	Azerbaijani          Tag = Tag{language: azIndex, locale: azIndex}
+	Bulgarian            Tag = Tag{language: bgIndex, locale: bgIndex}
+	Bengali              Tag = Tag{language: bnIndex, locale: bnIndex}
+	Catalan              Tag = Tag{language: caIndex, locale: caIndex}
+	Czech                Tag = Tag{language: csIndex, locale: csIndex}
+	Danish               Tag = Tag{language: daIndex, locale: daIndex}
+	German               Tag = Tag{language: deIndex, locale: deIndex}
+	Greek                Tag = Tag{language: elIndex, locale: elIndex}
+	English              Tag = Tag{language: enIndex, locale: enIndex}
+	AmericanEnglish      Tag = Tag{language: enUSIndex, locale: enUSIndex}
+	BritishEnglish       Tag = Tag{language: enGBIndex, locale: enGBIndex}
+	Spanish              Tag = Tag{language: esIndex, locale: esIndex}
+	EuropeanSpanish      Tag = Tag{language: esESIndex, locale: esESIndex}
+	LatinAmericanSpanish Tag = Tag{language: es419Index, locale: es419Index}
+	Estonian             Tag = Tag{language: etIndex, locale: etIndex}
+	Persian              Tag = Tag{language: faIndex, locale: faIndex}
+	Finnish              Tag = Tag{language: fiIndex, locale: fiIndex}
+	Filipino             Tag = Tag{language: filIndex, locale: filIndex}
+	French               Tag = Tag{language: frIndex, locale: frIndex}
+	CanadianFrench       Tag = Tag{language: frCAIndex, locale: frCAIndex}
+	Gujarati             Tag = Tag{language: guIndex, locale: guIndex}
+	Hebrew               Tag = Tag{language: heIndex, locale: heIndex}
+	Hindi                Tag = Tag{language: hiIndex, locale: hiIndex}
+	Croatian             Tag = Tag{language: hrIndex, locale: hrIndex}
+	Hungarian            Tag = Tag{language: huIndex, locale: huIndex}
+	Armenian             Tag = Tag{language: hyIndex, locale: hyIndex}
+	Indonesian           Tag = Tag{language: idIndex, locale: idIndex}
+	Icelandic            Tag = Tag{language: isIndex, locale: isIndex}
+	Italian              Tag = Tag{language: itIndex, locale: itIndex}
+	Japanese             Tag = Tag{language: jaIndex, locale: jaIndex}
+	Georgian             Tag = Tag{language: kaIndex, locale: kaIndex}
+	Kazakh               Tag = Tag{language: kkIndex, locale: kkIndex}
+	Khmer                Tag = Tag{language: kmIndex, locale: kmIndex}
+	Kannada              Tag = Tag{language: knIndex, locale: knIndex}
+	Korean               Tag = Tag{language: koIndex, locale: koIndex}
+	Kirghiz              Tag = Tag{language: kyIndex, locale: kyIndex}
+	Lao                  Tag = Tag{language: loIndex, locale: loIndex}
+	Lithuanian           Tag = Tag{language: ltIndex, locale: ltIndex}
+	Latvian              Tag = Tag{language: lvIndex, locale: lvIndex}
+	Macedonian           Tag = Tag{language: mkIndex, locale: mkIndex}
+	Malayalam            Tag = Tag{language: mlIndex, locale: mlIndex}
+	Mongolian            Tag = Tag{language: mnIndex, locale: mnIndex}
+	Marathi              Tag = Tag{language: mrIndex, locale: mrIndex}
+	Malay                Tag = Tag{language: msIndex, locale: msIndex}
+	Burmese              Tag = Tag{language: myIndex, locale: myIndex}
+	Nepali               Tag = Tag{language: neIndex, locale: neIndex}
+	Dutch                Tag = Tag{language: nlIndex, locale: nlIndex}
+	Norwegian            Tag = Tag{language: noIndex, locale: noIndex}
+	Punjabi              Tag = Tag{language: paIndex, locale: paIndex}
+	Polish               Tag = Tag{language: plIndex, locale: plIndex}
+	Portuguese           Tag = Tag{language: ptIndex, locale: ptIndex}
+	BrazilianPortuguese  Tag = Tag{language: ptBRIndex, locale: ptBRIndex}
+	EuropeanPortuguese   Tag = Tag{language: ptPTIndex, locale: ptPTIndex}
+	Romanian             Tag = Tag{language: roIndex, locale: roIndex}
+	Russian              Tag = Tag{language: ruIndex, locale: ruIndex}
+	Sinhala              Tag = Tag{language: siIndex, locale: siIndex}
+	Slovak               Tag = Tag{language: skIndex, locale: skIndex}
+	Slovenian            Tag = Tag{language: slIndex, locale: slIndex}
+	Albanian             Tag = Tag{language: sqIndex, locale: sqIndex}
+	Serbian              Tag = Tag{language: srIndex, locale: srIndex}
+	SerbianLatin         Tag = Tag{language: srLatnIndex, locale: srLatnIndex}
+	Swedish              Tag = Tag{language: svIndex, locale: svIndex}
+	Swahili              Tag = Tag{language: swIndex, locale: swIndex}
+	Tamil                Tag = Tag{language: taIndex, locale: taIndex}
+	Telugu               Tag = Tag{language: teIndex, locale: teIndex}
+	Thai                 Tag = Tag{language: thIndex, locale: thIndex}
+	Turkish              Tag = Tag{language: trIndex, locale: trIndex}
+	Ukrainian            Tag = Tag{language: ukIndex, locale: ukIndex}
+	Urdu                 Tag = Tag{language: urIndex, locale: urIndex}
+	Uzbek                Tag = Tag{language: uzIndex, locale: uzIndex}
+	Vietnamese           Tag = Tag{language: viIndex, locale: viIndex}
+	Chinese              Tag = Tag{language: zhIndex, locale: zhIndex}
+	SimplifiedChinese    Tag = Tag{language: zhHansIndex, locale: zhHansIndex}
+	TraditionalChinese   Tag = Tag{language: zhHantIndex, locale: zhHantIndex}
+	Zulu                 Tag = Tag{language: zuIndex, locale: zuIndex}
+)
diff --git a/vendor/golang.org/x/text/internal/language/compose.go b/vendor/golang.org/x/text/internal/language/compose.go
new file mode 100644
index 00000000..4ae78e0f
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/compose.go
@@ -0,0 +1,167 @@
+// Copyright 2018 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 language
+
+import (
+	"sort"
+	"strings"
+)
+
+// A Builder allows constructing a Tag from individual components.
+// Its main user is Compose in the top-level language package.
+type Builder struct {
+	Tag Tag
+
+	private    string // the x extension
+	variants   []string
+	extensions []string
+}
+
+// Make returns a new Tag from the current settings.
+func (b *Builder) Make() Tag {
+	t := b.Tag
+
+	if len(b.extensions) > 0 || len(b.variants) > 0 {
+		sort.Sort(sortVariants(b.variants))
+		sort.Strings(b.extensions)
+
+		if b.private != "" {
+			b.extensions = append(b.extensions, b.private)
+		}
+		n := maxCoreSize + tokenLen(b.variants...) + tokenLen(b.extensions...)
+		buf := make([]byte, n)
+		p := t.genCoreBytes(buf)
+		t.pVariant = byte(p)
+		p += appendTokens(buf[p:], b.variants...)
+		t.pExt = uint16(p)
+		p += appendTokens(buf[p:], b.extensions...)
+		t.str = string(buf[:p])
+		// We may not always need to remake the string, but when or when not
+		// to do so is rather tricky.
+		scan := makeScanner(buf[:p])
+		t, _ = parse(&scan, "")
+		return t
+
+	} else if b.private != "" {
+		t.str = b.private
+		t.RemakeString()
+	}
+	return t
+}
+
+// SetTag copies all the settings from a given Tag. Any previously set values
+// are discarded.
+func (b *Builder) SetTag(t Tag) {
+	b.Tag.LangID = t.LangID
+	b.Tag.RegionID = t.RegionID
+	b.Tag.ScriptID = t.ScriptID
+	// TODO: optimize
+	b.variants = b.variants[:0]
+	if variants := t.Variants(); variants != "" {
+		for _, vr := range strings.Split(variants[1:], "-") {
+			b.variants = append(b.variants, vr)
+		}
+	}
+	b.extensions, b.private = b.extensions[:0], ""
+	for _, e := range t.Extensions() {
+		b.AddExt(e)
+	}
+}
+
+// AddExt adds extension e to the tag. e must be a valid extension as returned
+// by Tag.Extension. If the extension already exists, it will be discarded,
+// except for a -u extension, where non-existing key-type pairs will added.
+func (b *Builder) AddExt(e string) {
+	if e[0] == 'x' {
+		if b.private == "" {
+			b.private = e
+		}
+		return
+	}
+	for i, s := range b.extensions {
+		if s[0] == e[0] {
+			if e[0] == 'u' {
+				b.extensions[i] += e[1:]
+			}
+			return
+		}
+	}
+	b.extensions = append(b.extensions, e)
+}
+
+// SetExt sets the extension e to the tag. e must be a valid extension as
+// returned by Tag.Extension. If the extension already exists, it will be
+// overwritten, except for a -u extension, where the individual key-type pairs
+// will be set.
+func (b *Builder) SetExt(e string) {
+	if e[0] == 'x' {
+		b.private = e
+		return
+	}
+	for i, s := range b.extensions {
+		if s[0] == e[0] {
+			if e[0] == 'u' {
+				b.extensions[i] = e + s[1:]
+			} else {
+				b.extensions[i] = e
+			}
+			return
+		}
+	}
+	b.extensions = append(b.extensions, e)
+}
+
+// AddVariant adds any number of variants.
+func (b *Builder) AddVariant(v ...string) {
+	for _, v := range v {
+		if v != "" {
+			b.variants = append(b.variants, v)
+		}
+	}
+}
+
+// ClearVariants removes any variants previously added, including those
+// copied from a Tag in SetTag.
+func (b *Builder) ClearVariants() {
+	b.variants = b.variants[:0]
+}
+
+// ClearExtensions removes any extensions previously added, including those
+// copied from a Tag in SetTag.
+func (b *Builder) ClearExtensions() {
+	b.private = ""
+	b.extensions = b.extensions[:0]
+}
+
+func tokenLen(token ...string) (n int) {
+	for _, t := range token {
+		n += len(t) + 1
+	}
+	return
+}
+
+func appendTokens(b []byte, token ...string) int {
+	p := 0
+	for _, t := range token {
+		b[p] = '-'
+		copy(b[p+1:], t)
+		p += 1 + len(t)
+	}
+	return p
+}
+
+type sortVariants []string
+
+func (s sortVariants) Len() int {
+	return len(s)
+}
+
+func (s sortVariants) Swap(i, j int) {
+	s[j], s[i] = s[i], s[j]
+}
+
+func (s sortVariants) Less(i, j int) bool {
+	return variantIndex[s[i]] < variantIndex[s[j]]
+}
diff --git a/vendor/golang.org/x/text/internal/language/coverage.go b/vendor/golang.org/x/text/internal/language/coverage.go
new file mode 100644
index 00000000..9b20b88f
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/coverage.go
@@ -0,0 +1,28 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package language
+
+// BaseLanguages returns the list of all supported base languages. It generates
+// the list by traversing the internal structures.
+func BaseLanguages() []Language {
+	base := make([]Language, 0, NumLanguages)
+	for i := 0; i < langNoIndexOffset; i++ {
+		// We included "und" already for the value 0.
+		if i != nonCanonicalUnd {
+			base = append(base, Language(i))
+		}
+	}
+	i := langNoIndexOffset
+	for _, v := range langNoIndex {
+		for k := 0; k < 8; k++ {
+			if v&1 == 1 {
+				base = append(base, Language(i))
+			}
+			v >>= 1
+			i++
+		}
+	}
+	return base
+}
diff --git a/vendor/golang.org/x/text/internal/language/language.go b/vendor/golang.org/x/text/internal/language/language.go
new file mode 100644
index 00000000..f41aedcf
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/language.go
@@ -0,0 +1,592 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run gen.go gen_common.go -output tables.go
+
+package language // import "golang.org/x/text/internal/language"
+
+// TODO: Remove above NOTE after:
+// - verifying that tables are dropped correctly (most notably matcher tables).
+
+import (
+	"errors"
+	"fmt"
+	"strings"
+)
+
+const (
+	// maxCoreSize is the maximum size of a BCP 47 tag without variants and
+	// extensions. Equals max lang (3) + script (4) + max reg (3) + 2 dashes.
+	maxCoreSize = 12
+
+	// max99thPercentileSize is a somewhat arbitrary buffer size that presumably
+	// is large enough to hold at least 99% of the BCP 47 tags.
+	max99thPercentileSize = 32
+
+	// maxSimpleUExtensionSize is the maximum size of a -u extension with one
+	// key-type pair. Equals len("-u-") + key (2) + dash + max value (8).
+	maxSimpleUExtensionSize = 14
+)
+
+// Tag represents a BCP 47 language tag. It is used to specify an instance of a
+// specific language or locale. All language tag values are guaranteed to be
+// well-formed. The zero value of Tag is Und.
+type Tag struct {
+	// TODO: the following fields have the form TagTypeID. This name is chosen
+	// to allow refactoring the public package without conflicting with its
+	// Base, Script, and Region methods. Once the transition is fully completed
+	// the ID can be stripped from the name.
+
+	LangID   Language
+	RegionID Region
+	// TODO: we will soon run out of positions for ScriptID. Idea: instead of
+	// storing lang, region, and ScriptID codes, store only the compact index and
+	// have a lookup table from this code to its expansion. This greatly speeds
+	// up table lookup, speed up common variant cases.
+	// This will also immediately free up 3 extra bytes. Also, the pVariant
+	// field can now be moved to the lookup table, as the compact index uniquely
+	// determines the offset of a possible variant.
+	ScriptID Script
+	pVariant byte   // offset in str, includes preceding '-'
+	pExt     uint16 // offset of first extension, includes preceding '-'
+
+	// str is the string representation of the Tag. It will only be used if the
+	// tag has variants or extensions.
+	str string
+}
+
+// Make is a convenience wrapper for Parse that omits the error.
+// In case of an error, a sensible default is returned.
+func Make(s string) Tag {
+	t, _ := Parse(s)
+	return t
+}
+
+// Raw returns the raw base language, script and region, without making an
+// attempt to infer their values.
+// TODO: consider removing
+func (t Tag) Raw() (b Language, s Script, r Region) {
+	return t.LangID, t.ScriptID, t.RegionID
+}
+
+// equalTags compares language, script and region subtags only.
+func (t Tag) equalTags(a Tag) bool {
+	return t.LangID == a.LangID && t.ScriptID == a.ScriptID && t.RegionID == a.RegionID
+}
+
+// IsRoot returns true if t is equal to language "und".
+func (t Tag) IsRoot() bool {
+	if int(t.pVariant) < len(t.str) {
+		return false
+	}
+	return t.equalTags(Und)
+}
+
+// IsPrivateUse reports whether the Tag consists solely of an IsPrivateUse use
+// tag.
+func (t Tag) IsPrivateUse() bool {
+	return t.str != "" && t.pVariant == 0
+}
+
+// RemakeString is used to update t.str in case lang, script or region changed.
+// It is assumed that pExt and pVariant still point to the start of the
+// respective parts.
+func (t *Tag) RemakeString() {
+	if t.str == "" {
+		return
+	}
+	extra := t.str[t.pVariant:]
+	if t.pVariant > 0 {
+		extra = extra[1:]
+	}
+	if t.equalTags(Und) && strings.HasPrefix(extra, "x-") {
+		t.str = extra
+		t.pVariant = 0
+		t.pExt = 0
+		return
+	}
+	var buf [max99thPercentileSize]byte // avoid extra memory allocation in most cases.
+	b := buf[:t.genCoreBytes(buf[:])]
+	if extra != "" {
+		diff := len(b) - int(t.pVariant)
+		b = append(b, '-')
+		b = append(b, extra...)
+		t.pVariant = uint8(int(t.pVariant) + diff)
+		t.pExt = uint16(int(t.pExt) + diff)
+	} else {
+		t.pVariant = uint8(len(b))
+		t.pExt = uint16(len(b))
+	}
+	t.str = string(b)
+}
+
+// genCoreBytes writes a string for the base languages, script and region tags
+// to the given buffer and returns the number of bytes written. It will never
+// write more than maxCoreSize bytes.
+func (t *Tag) genCoreBytes(buf []byte) int {
+	n := t.LangID.StringToBuf(buf[:])
+	if t.ScriptID != 0 {
+		n += copy(buf[n:], "-")
+		n += copy(buf[n:], t.ScriptID.String())
+	}
+	if t.RegionID != 0 {
+		n += copy(buf[n:], "-")
+		n += copy(buf[n:], t.RegionID.String())
+	}
+	return n
+}
+
+// String returns the canonical string representation of the language tag.
+func (t Tag) String() string {
+	if t.str != "" {
+		return t.str
+	}
+	if t.ScriptID == 0 && t.RegionID == 0 {
+		return t.LangID.String()
+	}
+	buf := [maxCoreSize]byte{}
+	return string(buf[:t.genCoreBytes(buf[:])])
+}
+
+// MarshalText implements encoding.TextMarshaler.
+func (t Tag) MarshalText() (text []byte, err error) {
+	if t.str != "" {
+		text = append(text, t.str...)
+	} else if t.ScriptID == 0 && t.RegionID == 0 {
+		text = append(text, t.LangID.String()...)
+	} else {
+		buf := [maxCoreSize]byte{}
+		text = buf[:t.genCoreBytes(buf[:])]
+	}
+	return text, nil
+}
+
+// UnmarshalText implements encoding.TextUnmarshaler.
+func (t *Tag) UnmarshalText(text []byte) error {
+	tag, err := Parse(string(text))
+	*t = tag
+	return err
+}
+
+// Variants returns the part of the tag holding all variants or the empty string
+// if there are no variants defined.
+func (t Tag) Variants() string {
+	if t.pVariant == 0 {
+		return ""
+	}
+	return t.str[t.pVariant:t.pExt]
+}
+
+// VariantOrPrivateUseTags returns variants or private use tags.
+func (t Tag) VariantOrPrivateUseTags() string {
+	if t.pExt > 0 {
+		return t.str[t.pVariant:t.pExt]
+	}
+	return t.str[t.pVariant:]
+}
+
+// HasString reports whether this tag defines more than just the raw
+// components.
+func (t Tag) HasString() bool {
+	return t.str != ""
+}
+
+// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a
+// specific language are substituted with fields from the parent language.
+// The parent for a language may change for newer versions of CLDR.
+func (t Tag) Parent() Tag {
+	if t.str != "" {
+		// Strip the variants and extensions.
+		b, s, r := t.Raw()
+		t = Tag{LangID: b, ScriptID: s, RegionID: r}
+		if t.RegionID == 0 && t.ScriptID != 0 && t.LangID != 0 {
+			base, _ := addTags(Tag{LangID: t.LangID})
+			if base.ScriptID == t.ScriptID {
+				return Tag{LangID: t.LangID}
+			}
+		}
+		return t
+	}
+	if t.LangID != 0 {
+		if t.RegionID != 0 {
+			maxScript := t.ScriptID
+			if maxScript == 0 {
+				max, _ := addTags(t)
+				maxScript = max.ScriptID
+			}
+
+			for i := range parents {
+				if Language(parents[i].lang) == t.LangID && Script(parents[i].maxScript) == maxScript {
+					for _, r := range parents[i].fromRegion {
+						if Region(r) == t.RegionID {
+							return Tag{
+								LangID:   t.LangID,
+								ScriptID: Script(parents[i].script),
+								RegionID: Region(parents[i].toRegion),
+							}
+						}
+					}
+				}
+			}
+
+			// Strip the script if it is the default one.
+			base, _ := addTags(Tag{LangID: t.LangID})
+			if base.ScriptID != maxScript {
+				return Tag{LangID: t.LangID, ScriptID: maxScript}
+			}
+			return Tag{LangID: t.LangID}
+		} else if t.ScriptID != 0 {
+			// The parent for an base-script pair with a non-default script is
+			// "und" instead of the base language.
+			base, _ := addTags(Tag{LangID: t.LangID})
+			if base.ScriptID != t.ScriptID {
+				return Und
+			}
+			return Tag{LangID: t.LangID}
+		}
+	}
+	return Und
+}
+
+// ParseExtension parses s as an extension and returns it on success.
+func ParseExtension(s string) (ext string, err error) {
+	scan := makeScannerString(s)
+	var end int
+	if n := len(scan.token); n != 1 {
+		return "", ErrSyntax
+	}
+	scan.toLower(0, len(scan.b))
+	end = parseExtension(&scan)
+	if end != len(s) {
+		return "", ErrSyntax
+	}
+	return string(scan.b), nil
+}
+
+// HasVariants reports whether t has variants.
+func (t Tag) HasVariants() bool {
+	return uint16(t.pVariant) < t.pExt
+}
+
+// HasExtensions reports whether t has extensions.
+func (t Tag) HasExtensions() bool {
+	return int(t.pExt) < len(t.str)
+}
+
+// Extension returns the extension of type x for tag t. It will return
+// false for ok if t does not have the requested extension. The returned
+// extension will be invalid in this case.
+func (t Tag) Extension(x byte) (ext string, ok bool) {
+	for i := int(t.pExt); i < len(t.str)-1; {
+		var ext string
+		i, ext = getExtension(t.str, i)
+		if ext[0] == x {
+			return ext, true
+		}
+	}
+	return "", false
+}
+
+// Extensions returns all extensions of t.
+func (t Tag) Extensions() []string {
+	e := []string{}
+	for i := int(t.pExt); i < len(t.str)-1; {
+		var ext string
+		i, ext = getExtension(t.str, i)
+		e = append(e, ext)
+	}
+	return e
+}
+
+// TypeForKey returns the type associated with the given key, where key and type
+// are of the allowed values defined for the Unicode locale extension ('u') in
+// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
+// TypeForKey will traverse the inheritance chain to get the correct value.
+//
+// If there are multiple types associated with a key, only the first will be
+// returned. If there is no type associated with a key, it returns the empty
+// string.
+func (t Tag) TypeForKey(key string) string {
+	if _, start, end, _ := t.findTypeForKey(key); end != start {
+		s := t.str[start:end]
+		if p := strings.IndexByte(s, '-'); p >= 0 {
+			s = s[:p]
+		}
+		return s
+	}
+	return ""
+}
+
+var (
+	errPrivateUse       = errors.New("cannot set a key on a private use tag")
+	errInvalidArguments = errors.New("invalid key or type")
+)
+
+// SetTypeForKey returns a new Tag with the key set to type, where key and type
+// are of the allowed values defined for the Unicode locale extension ('u') in
+// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
+// An empty value removes an existing pair with the same key.
+func (t Tag) SetTypeForKey(key, value string) (Tag, error) {
+	if t.IsPrivateUse() {
+		return t, errPrivateUse
+	}
+	if len(key) != 2 {
+		return t, errInvalidArguments
+	}
+
+	// Remove the setting if value is "".
+	if value == "" {
+		start, sep, end, _ := t.findTypeForKey(key)
+		if start != sep {
+			// Remove a possible empty extension.
+			switch {
+			case t.str[start-2] != '-': // has previous elements.
+			case end == len(t.str), // end of string
+				end+2 < len(t.str) && t.str[end+2] == '-': // end of extension
+				start -= 2
+			}
+			if start == int(t.pVariant) && end == len(t.str) {
+				t.str = ""
+				t.pVariant, t.pExt = 0, 0
+			} else {
+				t.str = fmt.Sprintf("%s%s", t.str[:start], t.str[end:])
+			}
+		}
+		return t, nil
+	}
+
+	if len(value) < 3 || len(value) > 8 {
+		return t, errInvalidArguments
+	}
+
+	var (
+		buf    [maxCoreSize + maxSimpleUExtensionSize]byte
+		uStart int // start of the -u extension.
+	)
+
+	// Generate the tag string if needed.
+	if t.str == "" {
+		uStart = t.genCoreBytes(buf[:])
+		buf[uStart] = '-'
+		uStart++
+	}
+
+	// Create new key-type pair and parse it to verify.
+	b := buf[uStart:]
+	copy(b, "u-")
+	copy(b[2:], key)
+	b[4] = '-'
+	b = b[:5+copy(b[5:], value)]
+	scan := makeScanner(b)
+	if parseExtensions(&scan); scan.err != nil {
+		return t, scan.err
+	}
+
+	// Assemble the replacement string.
+	if t.str == "" {
+		t.pVariant, t.pExt = byte(uStart-1), uint16(uStart-1)
+		t.str = string(buf[:uStart+len(b)])
+	} else {
+		s := t.str
+		start, sep, end, hasExt := t.findTypeForKey(key)
+		if start == sep {
+			if hasExt {
+				b = b[2:]
+			}
+			t.str = fmt.Sprintf("%s-%s%s", s[:sep], b, s[end:])
+		} else {
+			t.str = fmt.Sprintf("%s-%s%s", s[:start+3], value, s[end:])
+		}
+	}
+	return t, nil
+}
+
+// findKeyAndType returns the start and end position for the type corresponding
+// to key or the point at which to insert the key-value pair if the type
+// wasn't found. The hasExt return value reports whether an -u extension was present.
+// Note: the extensions are typically very small and are likely to contain
+// only one key-type pair.
+func (t Tag) findTypeForKey(key string) (start, sep, end int, hasExt bool) {
+	p := int(t.pExt)
+	if len(key) != 2 || p == len(t.str) || p == 0 {
+		return p, p, p, false
+	}
+	s := t.str
+
+	// Find the correct extension.
+	for p++; s[p] != 'u'; p++ {
+		if s[p] > 'u' {
+			p--
+			return p, p, p, false
+		}
+		if p = nextExtension(s, p); p == len(s) {
+			return len(s), len(s), len(s), false
+		}
+	}
+	// Proceed to the hyphen following the extension name.
+	p++
+
+	// curKey is the key currently being processed.
+	curKey := ""
+
+	// Iterate over keys until we get the end of a section.
+	for {
+		end = p
+		for p++; p < len(s) && s[p] != '-'; p++ {
+		}
+		n := p - end - 1
+		if n <= 2 && curKey == key {
+			if sep < end {
+				sep++
+			}
+			return start, sep, end, true
+		}
+		switch n {
+		case 0, // invalid string
+			1: // next extension
+			return end, end, end, true
+		case 2:
+			// next key
+			curKey = s[end+1 : p]
+			if curKey > key {
+				return end, end, end, true
+			}
+			start = end
+			sep = p
+		}
+	}
+}
+
+// ParseBase parses a 2- or 3-letter ISO 639 code.
+// It returns a ValueError if s is a well-formed but unknown language identifier
+// or another error if another error occurred.
+func ParseBase(s string) (Language, error) {
+	if n := len(s); n < 2 || 3 < n {
+		return 0, ErrSyntax
+	}
+	var buf [3]byte
+	return getLangID(buf[:copy(buf[:], s)])
+}
+
+// ParseScript parses a 4-letter ISO 15924 code.
+// It returns a ValueError if s is a well-formed but unknown script identifier
+// or another error if another error occurred.
+func ParseScript(s string) (Script, error) {
+	if len(s) != 4 {
+		return 0, ErrSyntax
+	}
+	var buf [4]byte
+	return getScriptID(script, buf[:copy(buf[:], s)])
+}
+
+// EncodeM49 returns the Region for the given UN M.49 code.
+// It returns an error if r is not a valid code.
+func EncodeM49(r int) (Region, error) {
+	return getRegionM49(r)
+}
+
+// ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code.
+// It returns a ValueError if s is a well-formed but unknown region identifier
+// or another error if another error occurred.
+func ParseRegion(s string) (Region, error) {
+	if n := len(s); n < 2 || 3 < n {
+		return 0, ErrSyntax
+	}
+	var buf [3]byte
+	return getRegionID(buf[:copy(buf[:], s)])
+}
+
+// IsCountry returns whether this region is a country or autonomous area. This
+// includes non-standard definitions from CLDR.
+func (r Region) IsCountry() bool {
+	if r == 0 || r.IsGroup() || r.IsPrivateUse() && r != _XK {
+		return false
+	}
+	return true
+}
+
+// IsGroup returns whether this region defines a collection of regions. This
+// includes non-standard definitions from CLDR.
+func (r Region) IsGroup() bool {
+	if r == 0 {
+		return false
+	}
+	return int(regionInclusion[r]) < len(regionContainment)
+}
+
+// Contains returns whether Region c is contained by Region r. It returns true
+// if c == r.
+func (r Region) Contains(c Region) bool {
+	if r == c {
+		return true
+	}
+	g := regionInclusion[r]
+	if g >= nRegionGroups {
+		return false
+	}
+	m := regionContainment[g]
+
+	d := regionInclusion[c]
+	b := regionInclusionBits[d]
+
+	// A contained country may belong to multiple disjoint groups. Matching any
+	// of these indicates containment. If the contained region is a group, it
+	// must strictly be a subset.
+	if d >= nRegionGroups {
+		return b&m != 0
+	}
+	return b&^m == 0
+}
+
+var errNoTLD = errors.New("language: region is not a valid ccTLD")
+
+// TLD returns the country code top-level domain (ccTLD). UK is returned for GB.
+// In all other cases it returns either the region itself or an error.
+//
+// This method may return an error for a region for which there exists a
+// canonical form with a ccTLD. To get that ccTLD canonicalize r first. The
+// region will already be canonicalized it was obtained from a Tag that was
+// obtained using any of the default methods.
+func (r Region) TLD() (Region, error) {
+	// See http://en.wikipedia.org/wiki/Country_code_top-level_domain for the
+	// difference between ISO 3166-1 and IANA ccTLD.
+	if r == _GB {
+		r = _UK
+	}
+	if (r.typ() & ccTLD) == 0 {
+		return 0, errNoTLD
+	}
+	return r, nil
+}
+
+// Canonicalize returns the region or a possible replacement if the region is
+// deprecated. It will not return a replacement for deprecated regions that
+// are split into multiple regions.
+func (r Region) Canonicalize() Region {
+	if cr := normRegion(r); cr != 0 {
+		return cr
+	}
+	return r
+}
+
+// Variant represents a registered variant of a language as defined by BCP 47.
+type Variant struct {
+	ID  uint8
+	str string
+}
+
+// ParseVariant parses and returns a Variant. An error is returned if s is not
+// a valid variant.
+func ParseVariant(s string) (Variant, error) {
+	s = strings.ToLower(s)
+	if id, ok := variantIndex[s]; ok {
+		return Variant{id, s}, nil
+	}
+	return Variant{}, NewValueError([]byte(s))
+}
+
+// String returns the string representation of the variant.
+func (v Variant) String() string {
+	return v.str
+}
diff --git a/vendor/golang.org/x/text/internal/language/lookup.go b/vendor/golang.org/x/text/internal/language/lookup.go
new file mode 100644
index 00000000..6294b815
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/lookup.go
@@ -0,0 +1,412 @@
+// 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 language
+
+import (
+	"bytes"
+	"fmt"
+	"sort"
+	"strconv"
+
+	"golang.org/x/text/internal/tag"
+)
+
+// findIndex tries to find the given tag in idx and returns a standardized error
+// if it could not be found.
+func findIndex(idx tag.Index, key []byte, form string) (index int, err error) {
+	if !tag.FixCase(form, key) {
+		return 0, ErrSyntax
+	}
+	i := idx.Index(key)
+	if i == -1 {
+		return 0, NewValueError(key)
+	}
+	return i, nil
+}
+
+func searchUint(imap []uint16, key uint16) int {
+	return sort.Search(len(imap), func(i int) bool {
+		return imap[i] >= key
+	})
+}
+
+type Language uint16
+
+// getLangID returns the langID of s if s is a canonical subtag
+// or langUnknown if s is not a canonical subtag.
+func getLangID(s []byte) (Language, error) {
+	if len(s) == 2 {
+		return getLangISO2(s)
+	}
+	return getLangISO3(s)
+}
+
+// TODO language normalization as well as the AliasMaps could be moved to the
+// higher level package, but it is a bit tricky to separate the generation.
+
+func (id Language) Canonicalize() (Language, AliasType) {
+	return normLang(id)
+}
+
+// mapLang returns the mapped langID of id according to mapping m.
+func normLang(id Language) (Language, AliasType) {
+	k := sort.Search(len(AliasMap), func(i int) bool {
+		return AliasMap[i].From >= uint16(id)
+	})
+	if k < len(AliasMap) && AliasMap[k].From == uint16(id) {
+		return Language(AliasMap[k].To), AliasTypes[k]
+	}
+	return id, AliasTypeUnknown
+}
+
+// getLangISO2 returns the langID for the given 2-letter ISO language code
+// or unknownLang if this does not exist.
+func getLangISO2(s []byte) (Language, error) {
+	if !tag.FixCase("zz", s) {
+		return 0, ErrSyntax
+	}
+	if i := lang.Index(s); i != -1 && lang.Elem(i)[3] != 0 {
+		return Language(i), nil
+	}
+	return 0, NewValueError(s)
+}
+
+const base = 'z' - 'a' + 1
+
+func strToInt(s []byte) uint {
+	v := uint(0)
+	for i := 0; i < len(s); i++ {
+		v *= base
+		v += uint(s[i] - 'a')
+	}
+	return v
+}
+
+// converts the given integer to the original ASCII string passed to strToInt.
+// len(s) must match the number of characters obtained.
+func intToStr(v uint, s []byte) {
+	for i := len(s) - 1; i >= 0; i-- {
+		s[i] = byte(v%base) + 'a'
+		v /= base
+	}
+}
+
+// getLangISO3 returns the langID for the given 3-letter ISO language code
+// or unknownLang if this does not exist.
+func getLangISO3(s []byte) (Language, error) {
+	if tag.FixCase("und", s) {
+		// first try to match canonical 3-letter entries
+		for i := lang.Index(s[:2]); i != -1; i = lang.Next(s[:2], i) {
+			if e := lang.Elem(i); e[3] == 0 && e[2] == s[2] {
+				// We treat "und" as special and always translate it to "unspecified".
+				// Note that ZZ and Zzzz are private use and are not treated as
+				// unspecified by default.
+				id := Language(i)
+				if id == nonCanonicalUnd {
+					return 0, nil
+				}
+				return id, nil
+			}
+		}
+		if i := altLangISO3.Index(s); i != -1 {
+			return Language(altLangIndex[altLangISO3.Elem(i)[3]]), nil
+		}
+		n := strToInt(s)
+		if langNoIndex[n/8]&(1<<(n%8)) != 0 {
+			return Language(n) + langNoIndexOffset, nil
+		}
+		// Check for non-canonical uses of ISO3.
+		for i := lang.Index(s[:1]); i != -1; i = lang.Next(s[:1], i) {
+			if e := lang.Elem(i); e[2] == s[1] && e[3] == s[2] {
+				return Language(i), nil
+			}
+		}
+		return 0, NewValueError(s)
+	}
+	return 0, ErrSyntax
+}
+
+// StringToBuf writes the string to b and returns the number of bytes
+// written.  cap(b) must be >= 3.
+func (id Language) StringToBuf(b []byte) int {
+	if id >= langNoIndexOffset {
+		intToStr(uint(id)-langNoIndexOffset, b[:3])
+		return 3
+	} else if id == 0 {
+		return copy(b, "und")
+	}
+	l := lang[id<<2:]
+	if l[3] == 0 {
+		return copy(b, l[:3])
+	}
+	return copy(b, l[:2])
+}
+
+// String returns the BCP 47 representation of the langID.
+// Use b as variable name, instead of id, to ensure the variable
+// used is consistent with that of Base in which this type is embedded.
+func (b Language) String() string {
+	if b == 0 {
+		return "und"
+	} else if b >= langNoIndexOffset {
+		b -= langNoIndexOffset
+		buf := [3]byte{}
+		intToStr(uint(b), buf[:])
+		return string(buf[:])
+	}
+	l := lang.Elem(int(b))
+	if l[3] == 0 {
+		return l[:3]
+	}
+	return l[:2]
+}
+
+// ISO3 returns the ISO 639-3 language code.
+func (b Language) ISO3() string {
+	if b == 0 || b >= langNoIndexOffset {
+		return b.String()
+	}
+	l := lang.Elem(int(b))
+	if l[3] == 0 {
+		return l[:3]
+	} else if l[2] == 0 {
+		return altLangISO3.Elem(int(l[3]))[:3]
+	}
+	// This allocation will only happen for 3-letter ISO codes
+	// that are non-canonical BCP 47 language identifiers.
+	return l[0:1] + l[2:4]
+}
+
+// IsPrivateUse reports whether this language code is reserved for private use.
+func (b Language) IsPrivateUse() bool {
+	return langPrivateStart <= b && b <= langPrivateEnd
+}
+
+// SuppressScript returns the script marked as SuppressScript in the IANA
+// language tag repository, or 0 if there is no such script.
+func (b Language) SuppressScript() Script {
+	if b < langNoIndexOffset {
+		return Script(suppressScript[b])
+	}
+	return 0
+}
+
+type Region uint16
+
+// getRegionID returns the region id for s if s is a valid 2-letter region code
+// or unknownRegion.
+func getRegionID(s []byte) (Region, error) {
+	if len(s) == 3 {
+		if isAlpha(s[0]) {
+			return getRegionISO3(s)
+		}
+		if i, err := strconv.ParseUint(string(s), 10, 10); err == nil {
+			return getRegionM49(int(i))
+		}
+	}
+	return getRegionISO2(s)
+}
+
+// getRegionISO2 returns the regionID for the given 2-letter ISO country code
+// or unknownRegion if this does not exist.
+func getRegionISO2(s []byte) (Region, error) {
+	i, err := findIndex(regionISO, s, "ZZ")
+	if err != nil {
+		return 0, err
+	}
+	return Region(i) + isoRegionOffset, nil
+}
+
+// getRegionISO3 returns the regionID for the given 3-letter ISO country code
+// or unknownRegion if this does not exist.
+func getRegionISO3(s []byte) (Region, error) {
+	if tag.FixCase("ZZZ", s) {
+		for i := regionISO.Index(s[:1]); i != -1; i = regionISO.Next(s[:1], i) {
+			if e := regionISO.Elem(i); e[2] == s[1] && e[3] == s[2] {
+				return Region(i) + isoRegionOffset, nil
+			}
+		}
+		for i := 0; i < len(altRegionISO3); i += 3 {
+			if tag.Compare(altRegionISO3[i:i+3], s) == 0 {
+				return Region(altRegionIDs[i/3]), nil
+			}
+		}
+		return 0, NewValueError(s)
+	}
+	return 0, ErrSyntax
+}
+
+func getRegionM49(n int) (Region, error) {
+	if 0 < n && n <= 999 {
+		const (
+			searchBits = 7
+			regionBits = 9
+			regionMask = 1<<regionBits - 1
+		)
+		idx := n >> searchBits
+		buf := fromM49[m49Index[idx]:m49Index[idx+1]]
+		val := uint16(n) << regionBits // we rely on bits shifting out
+		i := sort.Search(len(buf), func(i int) bool {
+			return buf[i] >= val
+		})
+		if r := fromM49[int(m49Index[idx])+i]; r&^regionMask == val {
+			return Region(r & regionMask), nil
+		}
+	}
+	var e ValueError
+	fmt.Fprint(bytes.NewBuffer([]byte(e.v[:])), n)
+	return 0, e
+}
+
+// normRegion returns a region if r is deprecated or 0 otherwise.
+// TODO: consider supporting BYS (-> BLR), CSK (-> 200 or CZ), PHI (-> PHL) and AFI (-> DJ).
+// TODO: consider mapping split up regions to new most populous one (like CLDR).
+func normRegion(r Region) Region {
+	m := regionOldMap
+	k := sort.Search(len(m), func(i int) bool {
+		return m[i].From >= uint16(r)
+	})
+	if k < len(m) && m[k].From == uint16(r) {
+		return Region(m[k].To)
+	}
+	return 0
+}
+
+const (
+	iso3166UserAssigned = 1 << iota
+	ccTLD
+	bcp47Region
+)
+
+func (r Region) typ() byte {
+	return regionTypes[r]
+}
+
+// String returns the BCP 47 representation for the region.
+// It returns "ZZ" for an unspecified region.
+func (r Region) String() string {
+	if r < isoRegionOffset {
+		if r == 0 {
+			return "ZZ"
+		}
+		return fmt.Sprintf("%03d", r.M49())
+	}
+	r -= isoRegionOffset
+	return regionISO.Elem(int(r))[:2]
+}
+
+// ISO3 returns the 3-letter ISO code of r.
+// Note that not all regions have a 3-letter ISO code.
+// In such cases this method returns "ZZZ".
+func (r Region) ISO3() string {
+	if r < isoRegionOffset {
+		return "ZZZ"
+	}
+	r -= isoRegionOffset
+	reg := regionISO.Elem(int(r))
+	switch reg[2] {
+	case 0:
+		return altRegionISO3[reg[3]:][:3]
+	case ' ':
+		return "ZZZ"
+	}
+	return reg[0:1] + reg[2:4]
+}
+
+// M49 returns the UN M.49 encoding of r, or 0 if this encoding
+// is not defined for r.
+func (r Region) M49() int {
+	return int(m49[r])
+}
+
+// IsPrivateUse reports whether r has the ISO 3166 User-assigned status. This
+// may include private-use tags that are assigned by CLDR and used in this
+// implementation. So IsPrivateUse and IsCountry can be simultaneously true.
+func (r Region) IsPrivateUse() bool {
+	return r.typ()&iso3166UserAssigned != 0
+}
+
+type Script uint8
+
+// getScriptID returns the script id for string s. It assumes that s
+// is of the format [A-Z][a-z]{3}.
+func getScriptID(idx tag.Index, s []byte) (Script, error) {
+	i, err := findIndex(idx, s, "Zzzz")
+	return Script(i), err
+}
+
+// String returns the script code in title case.
+// It returns "Zzzz" for an unspecified script.
+func (s Script) String() string {
+	if s == 0 {
+		return "Zzzz"
+	}
+	return script.Elem(int(s))
+}
+
+// IsPrivateUse reports whether this script code is reserved for private use.
+func (s Script) IsPrivateUse() bool {
+	return _Qaaa <= s && s <= _Qabx
+}
+
+const (
+	maxAltTaglen = len("en-US-POSIX")
+	maxLen       = maxAltTaglen
+)
+
+var (
+	// grandfatheredMap holds a mapping from legacy and grandfathered tags to
+	// their base language or index to more elaborate tag.
+	grandfatheredMap = map[[maxLen]byte]int16{
+		[maxLen]byte{'a', 'r', 't', '-', 'l', 'o', 'j', 'b', 'a', 'n'}: _jbo, // art-lojban
+		[maxLen]byte{'i', '-', 'a', 'm', 'i'}:                          _ami, // i-ami
+		[maxLen]byte{'i', '-', 'b', 'n', 'n'}:                          _bnn, // i-bnn
+		[maxLen]byte{'i', '-', 'h', 'a', 'k'}:                          _hak, // i-hak
+		[maxLen]byte{'i', '-', 'k', 'l', 'i', 'n', 'g', 'o', 'n'}:      _tlh, // i-klingon
+		[maxLen]byte{'i', '-', 'l', 'u', 'x'}:                          _lb,  // i-lux
+		[maxLen]byte{'i', '-', 'n', 'a', 'v', 'a', 'j', 'o'}:           _nv,  // i-navajo
+		[maxLen]byte{'i', '-', 'p', 'w', 'n'}:                          _pwn, // i-pwn
+		[maxLen]byte{'i', '-', 't', 'a', 'o'}:                          _tao, // i-tao
+		[maxLen]byte{'i', '-', 't', 'a', 'y'}:                          _tay, // i-tay
+		[maxLen]byte{'i', '-', 't', 's', 'u'}:                          _tsu, // i-tsu
+		[maxLen]byte{'n', 'o', '-', 'b', 'o', 'k'}:                     _nb,  // no-bok
+		[maxLen]byte{'n', 'o', '-', 'n', 'y', 'n'}:                     _nn,  // no-nyn
+		[maxLen]byte{'s', 'g', 'n', '-', 'b', 'e', '-', 'f', 'r'}:      _sfb, // sgn-BE-FR
+		[maxLen]byte{'s', 'g', 'n', '-', 'b', 'e', '-', 'n', 'l'}:      _vgt, // sgn-BE-NL
+		[maxLen]byte{'s', 'g', 'n', '-', 'c', 'h', '-', 'd', 'e'}:      _sgg, // sgn-CH-DE
+		[maxLen]byte{'z', 'h', '-', 'g', 'u', 'o', 'y', 'u'}:           _cmn, // zh-guoyu
+		[maxLen]byte{'z', 'h', '-', 'h', 'a', 'k', 'k', 'a'}:           _hak, // zh-hakka
+		[maxLen]byte{'z', 'h', '-', 'm', 'i', 'n', '-', 'n', 'a', 'n'}: _nan, // zh-min-nan
+		[maxLen]byte{'z', 'h', '-', 'x', 'i', 'a', 'n', 'g'}:           _hsn, // zh-xiang
+
+		// Grandfathered tags with no modern replacement will be converted as
+		// follows:
+		[maxLen]byte{'c', 'e', 'l', '-', 'g', 'a', 'u', 'l', 'i', 's', 'h'}: -1, // cel-gaulish
+		[maxLen]byte{'e', 'n', '-', 'g', 'b', '-', 'o', 'e', 'd'}:           -2, // en-GB-oed
+		[maxLen]byte{'i', '-', 'd', 'e', 'f', 'a', 'u', 'l', 't'}:           -3, // i-default
+		[maxLen]byte{'i', '-', 'e', 'n', 'o', 'c', 'h', 'i', 'a', 'n'}:      -4, // i-enochian
+		[maxLen]byte{'i', '-', 'm', 'i', 'n', 'g', 'o'}:                     -5, // i-mingo
+		[maxLen]byte{'z', 'h', '-', 'm', 'i', 'n'}:                          -6, // zh-min
+
+		// CLDR-specific tag.
+		[maxLen]byte{'r', 'o', 'o', 't'}:                                    0,  // root
+		[maxLen]byte{'e', 'n', '-', 'u', 's', '-', 'p', 'o', 's', 'i', 'x'}: -7, // en_US_POSIX"
+	}
+
+	altTagIndex = [...]uint8{0, 17, 31, 45, 61, 74, 86, 102}
+
+	altTags = "xtg-x-cel-gaulishen-GB-oxendicten-x-i-defaultund-x-i-enochiansee-x-i-mingonan-x-zh-minen-US-u-va-posix"
+)
+
+func grandfathered(s [maxAltTaglen]byte) (t Tag, ok bool) {
+	if v, ok := grandfatheredMap[s]; ok {
+		if v < 0 {
+			return Make(altTags[altTagIndex[-v-1]:altTagIndex[-v]]), true
+		}
+		t.LangID = Language(v)
+		return t, true
+	}
+	return t, false
+}
diff --git a/vendor/golang.org/x/text/internal/language/match.go b/vendor/golang.org/x/text/internal/language/match.go
new file mode 100644
index 00000000..75a2dbca
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/match.go
@@ -0,0 +1,226 @@
+// 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 language
+
+import "errors"
+
+type scriptRegionFlags uint8
+
+const (
+	isList = 1 << iota
+	scriptInFrom
+	regionInFrom
+)
+
+func (t *Tag) setUndefinedLang(id Language) {
+	if t.LangID == 0 {
+		t.LangID = id
+	}
+}
+
+func (t *Tag) setUndefinedScript(id Script) {
+	if t.ScriptID == 0 {
+		t.ScriptID = id
+	}
+}
+
+func (t *Tag) setUndefinedRegion(id Region) {
+	if t.RegionID == 0 || t.RegionID.Contains(id) {
+		t.RegionID = id
+	}
+}
+
+// ErrMissingLikelyTagsData indicates no information was available
+// to compute likely values of missing tags.
+var ErrMissingLikelyTagsData = errors.New("missing likely tags data")
+
+// addLikelySubtags sets subtags to their most likely value, given the locale.
+// In most cases this means setting fields for unknown values, but in some
+// cases it may alter a value.  It returns an ErrMissingLikelyTagsData error
+// if the given locale cannot be expanded.
+func (t Tag) addLikelySubtags() (Tag, error) {
+	id, err := addTags(t)
+	if err != nil {
+		return t, err
+	} else if id.equalTags(t) {
+		return t, nil
+	}
+	id.RemakeString()
+	return id, nil
+}
+
+// specializeRegion attempts to specialize a group region.
+func specializeRegion(t *Tag) bool {
+	if i := regionInclusion[t.RegionID]; i < nRegionGroups {
+		x := likelyRegionGroup[i]
+		if Language(x.lang) == t.LangID && Script(x.script) == t.ScriptID {
+			t.RegionID = Region(x.region)
+		}
+		return true
+	}
+	return false
+}
+
+// Maximize returns a new tag with missing tags filled in.
+func (t Tag) Maximize() (Tag, error) {
+	return addTags(t)
+}
+
+func addTags(t Tag) (Tag, error) {
+	// We leave private use identifiers alone.
+	if t.IsPrivateUse() {
+		return t, nil
+	}
+	if t.ScriptID != 0 && t.RegionID != 0 {
+		if t.LangID != 0 {
+			// already fully specified
+			specializeRegion(&t)
+			return t, nil
+		}
+		// Search matches for und-script-region. Note that for these cases
+		// region will never be a group so there is no need to check for this.
+		list := likelyRegion[t.RegionID : t.RegionID+1]
+		if x := list[0]; x.flags&isList != 0 {
+			list = likelyRegionList[x.lang : x.lang+uint16(x.script)]
+		}
+		for _, x := range list {
+			// Deviating from the spec. See match_test.go for details.
+			if Script(x.script) == t.ScriptID {
+				t.setUndefinedLang(Language(x.lang))
+				return t, nil
+			}
+		}
+	}
+	if t.LangID != 0 {
+		// Search matches for lang-script and lang-region, where lang != und.
+		if t.LangID < langNoIndexOffset {
+			x := likelyLang[t.LangID]
+			if x.flags&isList != 0 {
+				list := likelyLangList[x.region : x.region+uint16(x.script)]
+				if t.ScriptID != 0 {
+					for _, x := range list {
+						if Script(x.script) == t.ScriptID && x.flags&scriptInFrom != 0 {
+							t.setUndefinedRegion(Region(x.region))
+							return t, nil
+						}
+					}
+				} else if t.RegionID != 0 {
+					count := 0
+					goodScript := true
+					tt := t
+					for _, x := range list {
+						// We visit all entries for which the script was not
+						// defined, including the ones where the region was not
+						// defined. This allows for proper disambiguation within
+						// regions.
+						if x.flags&scriptInFrom == 0 && t.RegionID.Contains(Region(x.region)) {
+							tt.RegionID = Region(x.region)
+							tt.setUndefinedScript(Script(x.script))
+							goodScript = goodScript && tt.ScriptID == Script(x.script)
+							count++
+						}
+					}
+					if count == 1 {
+						return tt, nil
+					}
+					// Even if we fail to find a unique Region, we might have
+					// an unambiguous script.
+					if goodScript {
+						t.ScriptID = tt.ScriptID
+					}
+				}
+			}
+		}
+	} else {
+		// Search matches for und-script.
+		if t.ScriptID != 0 {
+			x := likelyScript[t.ScriptID]
+			if x.region != 0 {
+				t.setUndefinedRegion(Region(x.region))
+				t.setUndefinedLang(Language(x.lang))
+				return t, nil
+			}
+		}
+		// Search matches for und-region. If und-script-region exists, it would
+		// have been found earlier.
+		if t.RegionID != 0 {
+			if i := regionInclusion[t.RegionID]; i < nRegionGroups {
+				x := likelyRegionGroup[i]
+				if x.region != 0 {
+					t.setUndefinedLang(Language(x.lang))
+					t.setUndefinedScript(Script(x.script))
+					t.RegionID = Region(x.region)
+				}
+			} else {
+				x := likelyRegion[t.RegionID]
+				if x.flags&isList != 0 {
+					x = likelyRegionList[x.lang]
+				}
+				if x.script != 0 && x.flags != scriptInFrom {
+					t.setUndefinedLang(Language(x.lang))
+					t.setUndefinedScript(Script(x.script))
+					return t, nil
+				}
+			}
+		}
+	}
+
+	// Search matches for lang.
+	if t.LangID < langNoIndexOffset {
+		x := likelyLang[t.LangID]
+		if x.flags&isList != 0 {
+			x = likelyLangList[x.region]
+		}
+		if x.region != 0 {
+			t.setUndefinedScript(Script(x.script))
+			t.setUndefinedRegion(Region(x.region))
+		}
+		specializeRegion(&t)
+		if t.LangID == 0 {
+			t.LangID = _en // default language
+		}
+		return t, nil
+	}
+	return t, ErrMissingLikelyTagsData
+}
+
+func (t *Tag) setTagsFrom(id Tag) {
+	t.LangID = id.LangID
+	t.ScriptID = id.ScriptID
+	t.RegionID = id.RegionID
+}
+
+// minimize removes the region or script subtags from t such that
+// t.addLikelySubtags() == t.minimize().addLikelySubtags().
+func (t Tag) minimize() (Tag, error) {
+	t, err := minimizeTags(t)
+	if err != nil {
+		return t, err
+	}
+	t.RemakeString()
+	return t, nil
+}
+
+// minimizeTags mimics the behavior of the ICU 51 C implementation.
+func minimizeTags(t Tag) (Tag, error) {
+	if t.equalTags(Und) {
+		return t, nil
+	}
+	max, err := addTags(t)
+	if err != nil {
+		return t, err
+	}
+	for _, id := range [...]Tag{
+		{LangID: t.LangID},
+		{LangID: t.LangID, RegionID: t.RegionID},
+		{LangID: t.LangID, ScriptID: t.ScriptID},
+	} {
+		if x, err := addTags(id); err == nil && max.equalTags(x) {
+			t.setTagsFrom(id)
+			break
+		}
+	}
+	return t, nil
+}
diff --git a/vendor/golang.org/x/text/internal/language/parse.go b/vendor/golang.org/x/text/internal/language/parse.go
new file mode 100644
index 00000000..c696fd0b
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/parse.go
@@ -0,0 +1,597 @@
+// 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 language
+
+import (
+	"bytes"
+	"errors"
+	"fmt"
+	"sort"
+
+	"golang.org/x/text/internal/tag"
+)
+
+// isAlpha returns true if the byte is not a digit.
+// b must be an ASCII letter or digit.
+func isAlpha(b byte) bool {
+	return b > '9'
+}
+
+// isAlphaNum returns true if the string contains only ASCII letters or digits.
+func isAlphaNum(s []byte) bool {
+	for _, c := range s {
+		if !('a' <= c && c <= 'z' || 'A' <= c && c <= 'Z' || '0' <= c && c <= '9') {
+			return false
+		}
+	}
+	return true
+}
+
+// ErrSyntax is returned by any of the parsing functions when the
+// input is not well-formed, according to BCP 47.
+// TODO: return the position at which the syntax error occurred?
+var ErrSyntax = errors.New("language: tag is not well-formed")
+
+// ErrDuplicateKey is returned when a tag contains the same key twice with
+// different values in the -u section.
+var ErrDuplicateKey = errors.New("language: different values for same key in -u extension")
+
+// ValueError is returned by any of the parsing functions when the
+// input is well-formed but the respective subtag is not recognized
+// as a valid value.
+type ValueError struct {
+	v [8]byte
+}
+
+// NewValueError creates a new ValueError.
+func NewValueError(tag []byte) ValueError {
+	var e ValueError
+	copy(e.v[:], tag)
+	return e
+}
+
+func (e ValueError) tag() []byte {
+	n := bytes.IndexByte(e.v[:], 0)
+	if n == -1 {
+		n = 8
+	}
+	return e.v[:n]
+}
+
+// Error implements the error interface.
+func (e ValueError) Error() string {
+	return fmt.Sprintf("language: subtag %q is well-formed but unknown", e.tag())
+}
+
+// Subtag returns the subtag for which the error occurred.
+func (e ValueError) Subtag() string {
+	return string(e.tag())
+}
+
+// scanner is used to scan BCP 47 tokens, which are separated by _ or -.
+type scanner struct {
+	b     []byte
+	bytes [max99thPercentileSize]byte
+	token []byte
+	start int // start position of the current token
+	end   int // end position of the current token
+	next  int // next point for scan
+	err   error
+	done  bool
+}
+
+func makeScannerString(s string) scanner {
+	scan := scanner{}
+	if len(s) <= len(scan.bytes) {
+		scan.b = scan.bytes[:copy(scan.bytes[:], s)]
+	} else {
+		scan.b = []byte(s)
+	}
+	scan.init()
+	return scan
+}
+
+// makeScanner returns a scanner using b as the input buffer.
+// b is not copied and may be modified by the scanner routines.
+func makeScanner(b []byte) scanner {
+	scan := scanner{b: b}
+	scan.init()
+	return scan
+}
+
+func (s *scanner) init() {
+	for i, c := range s.b {
+		if c == '_' {
+			s.b[i] = '-'
+		}
+	}
+	s.scan()
+}
+
+// restToLower converts the string between start and end to lower case.
+func (s *scanner) toLower(start, end int) {
+	for i := start; i < end; i++ {
+		c := s.b[i]
+		if 'A' <= c && c <= 'Z' {
+			s.b[i] += 'a' - 'A'
+		}
+	}
+}
+
+func (s *scanner) setError(e error) {
+	if s.err == nil || (e == ErrSyntax && s.err != ErrSyntax) {
+		s.err = e
+	}
+}
+
+// resizeRange shrinks or grows the array at position oldStart such that
+// a new string of size newSize can fit between oldStart and oldEnd.
+// Sets the scan point to after the resized range.
+func (s *scanner) resizeRange(oldStart, oldEnd, newSize int) {
+	s.start = oldStart
+	if end := oldStart + newSize; end != oldEnd {
+		diff := end - oldEnd
+		var b []byte
+		if n := len(s.b) + diff; n > cap(s.b) {
+			b = make([]byte, n)
+			copy(b, s.b[:oldStart])
+		} else {
+			b = s.b[:n]
+		}
+		copy(b[end:], s.b[oldEnd:])
+		s.b = b
+		s.next = end + (s.next - s.end)
+		s.end = end
+	}
+}
+
+// replace replaces the current token with repl.
+func (s *scanner) replace(repl string) {
+	s.resizeRange(s.start, s.end, len(repl))
+	copy(s.b[s.start:], repl)
+}
+
+// gobble removes the current token from the input.
+// Caller must call scan after calling gobble.
+func (s *scanner) gobble(e error) {
+	s.setError(e)
+	if s.start == 0 {
+		s.b = s.b[:+copy(s.b, s.b[s.next:])]
+		s.end = 0
+	} else {
+		s.b = s.b[:s.start-1+copy(s.b[s.start-1:], s.b[s.end:])]
+		s.end = s.start - 1
+	}
+	s.next = s.start
+}
+
+// deleteRange removes the given range from s.b before the current token.
+func (s *scanner) deleteRange(start, end int) {
+	s.b = s.b[:start+copy(s.b[start:], s.b[end:])]
+	diff := end - start
+	s.next -= diff
+	s.start -= diff
+	s.end -= diff
+}
+
+// scan parses the next token of a BCP 47 string.  Tokens that are larger
+// than 8 characters or include non-alphanumeric characters result in an error
+// and are gobbled and removed from the output.
+// It returns the end position of the last token consumed.
+func (s *scanner) scan() (end int) {
+	end = s.end
+	s.token = nil
+	for s.start = s.next; s.next < len(s.b); {
+		i := bytes.IndexByte(s.b[s.next:], '-')
+		if i == -1 {
+			s.end = len(s.b)
+			s.next = len(s.b)
+			i = s.end - s.start
+		} else {
+			s.end = s.next + i
+			s.next = s.end + 1
+		}
+		token := s.b[s.start:s.end]
+		if i < 1 || i > 8 || !isAlphaNum(token) {
+			s.gobble(ErrSyntax)
+			continue
+		}
+		s.token = token
+		return end
+	}
+	if n := len(s.b); n > 0 && s.b[n-1] == '-' {
+		s.setError(ErrSyntax)
+		s.b = s.b[:len(s.b)-1]
+	}
+	s.done = true
+	return end
+}
+
+// acceptMinSize parses multiple tokens of the given size or greater.
+// It returns the end position of the last token consumed.
+func (s *scanner) acceptMinSize(min int) (end int) {
+	end = s.end
+	s.scan()
+	for ; len(s.token) >= min; s.scan() {
+		end = s.end
+	}
+	return end
+}
+
+// Parse parses the given BCP 47 string and returns a valid Tag. If parsing
+// failed it returns an error and any part of the tag that could be parsed.
+// If parsing succeeded but an unknown value was found, it returns
+// ValueError. The Tag returned in this case is just stripped of the unknown
+// value. All other values are preserved. It accepts tags in the BCP 47 format
+// and extensions to this standard defined in
+// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
+func Parse(s string) (t Tag, err error) {
+	// TODO: consider supporting old-style locale key-value pairs.
+	if s == "" {
+		return Und, ErrSyntax
+	}
+	if len(s) <= maxAltTaglen {
+		b := [maxAltTaglen]byte{}
+		for i, c := range s {
+			// Generating invalid UTF-8 is okay as it won't match.
+			if 'A' <= c && c <= 'Z' {
+				c += 'a' - 'A'
+			} else if c == '_' {
+				c = '-'
+			}
+			b[i] = byte(c)
+		}
+		if t, ok := grandfathered(b); ok {
+			return t, nil
+		}
+	}
+	scan := makeScannerString(s)
+	return parse(&scan, s)
+}
+
+func parse(scan *scanner, s string) (t Tag, err error) {
+	t = Und
+	var end int
+	if n := len(scan.token); n <= 1 {
+		scan.toLower(0, len(scan.b))
+		if n == 0 || scan.token[0] != 'x' {
+			return t, ErrSyntax
+		}
+		end = parseExtensions(scan)
+	} else if n >= 4 {
+		return Und, ErrSyntax
+	} else { // the usual case
+		t, end = parseTag(scan)
+		if n := len(scan.token); n == 1 {
+			t.pExt = uint16(end)
+			end = parseExtensions(scan)
+		} else if end < len(scan.b) {
+			scan.setError(ErrSyntax)
+			scan.b = scan.b[:end]
+		}
+	}
+	if int(t.pVariant) < len(scan.b) {
+		if end < len(s) {
+			s = s[:end]
+		}
+		if len(s) > 0 && tag.Compare(s, scan.b) == 0 {
+			t.str = s
+		} else {
+			t.str = string(scan.b)
+		}
+	} else {
+		t.pVariant, t.pExt = 0, 0
+	}
+	return t, scan.err
+}
+
+// parseTag parses language, script, region and variants.
+// It returns a Tag and the end position in the input that was parsed.
+func parseTag(scan *scanner) (t Tag, end int) {
+	var e error
+	// TODO: set an error if an unknown lang, script or region is encountered.
+	t.LangID, e = getLangID(scan.token)
+	scan.setError(e)
+	scan.replace(t.LangID.String())
+	langStart := scan.start
+	end = scan.scan()
+	for len(scan.token) == 3 && isAlpha(scan.token[0]) {
+		// From http://tools.ietf.org/html/bcp47, <lang>-<extlang> tags are equivalent
+		// to a tag of the form <extlang>.
+		lang, e := getLangID(scan.token)
+		if lang != 0 {
+			t.LangID = lang
+			copy(scan.b[langStart:], lang.String())
+			scan.b[langStart+3] = '-'
+			scan.start = langStart + 4
+		}
+		scan.gobble(e)
+		end = scan.scan()
+	}
+	if len(scan.token) == 4 && isAlpha(scan.token[0]) {
+		t.ScriptID, e = getScriptID(script, scan.token)
+		if t.ScriptID == 0 {
+			scan.gobble(e)
+		}
+		end = scan.scan()
+	}
+	if n := len(scan.token); n >= 2 && n <= 3 {
+		t.RegionID, e = getRegionID(scan.token)
+		if t.RegionID == 0 {
+			scan.gobble(e)
+		} else {
+			scan.replace(t.RegionID.String())
+		}
+		end = scan.scan()
+	}
+	scan.toLower(scan.start, len(scan.b))
+	t.pVariant = byte(end)
+	end = parseVariants(scan, end, t)
+	t.pExt = uint16(end)
+	return t, end
+}
+
+var separator = []byte{'-'}
+
+// parseVariants scans tokens as long as each token is a valid variant string.
+// Duplicate variants are removed.
+func parseVariants(scan *scanner, end int, t Tag) int {
+	start := scan.start
+	varIDBuf := [4]uint8{}
+	variantBuf := [4][]byte{}
+	varID := varIDBuf[:0]
+	variant := variantBuf[:0]
+	last := -1
+	needSort := false
+	for ; len(scan.token) >= 4; scan.scan() {
+		// TODO: measure the impact of needing this conversion and redesign
+		// the data structure if there is an issue.
+		v, ok := variantIndex[string(scan.token)]
+		if !ok {
+			// unknown variant
+			// TODO: allow user-defined variants?
+			scan.gobble(NewValueError(scan.token))
+			continue
+		}
+		varID = append(varID, v)
+		variant = append(variant, scan.token)
+		if !needSort {
+			if last < int(v) {
+				last = int(v)
+			} else {
+				needSort = true
+				// There is no legal combinations of more than 7 variants
+				// (and this is by no means a useful sequence).
+				const maxVariants = 8
+				if len(varID) > maxVariants {
+					break
+				}
+			}
+		}
+		end = scan.end
+	}
+	if needSort {
+		sort.Sort(variantsSort{varID, variant})
+		k, l := 0, -1
+		for i, v := range varID {
+			w := int(v)
+			if l == w {
+				// Remove duplicates.
+				continue
+			}
+			varID[k] = varID[i]
+			variant[k] = variant[i]
+			k++
+			l = w
+		}
+		if str := bytes.Join(variant[:k], separator); len(str) == 0 {
+			end = start - 1
+		} else {
+			scan.resizeRange(start, end, len(str))
+			copy(scan.b[scan.start:], str)
+			end = scan.end
+		}
+	}
+	return end
+}
+
+type variantsSort struct {
+	i []uint8
+	v [][]byte
+}
+
+func (s variantsSort) Len() int {
+	return len(s.i)
+}
+
+func (s variantsSort) Swap(i, j int) {
+	s.i[i], s.i[j] = s.i[j], s.i[i]
+	s.v[i], s.v[j] = s.v[j], s.v[i]
+}
+
+func (s variantsSort) Less(i, j int) bool {
+	return s.i[i] < s.i[j]
+}
+
+type bytesSort struct {
+	b [][]byte
+	n int // first n bytes to compare
+}
+
+func (b bytesSort) Len() int {
+	return len(b.b)
+}
+
+func (b bytesSort) Swap(i, j int) {
+	b.b[i], b.b[j] = b.b[j], b.b[i]
+}
+
+func (b bytesSort) Less(i, j int) bool {
+	for k := 0; k < b.n; k++ {
+		if b.b[i][k] == b.b[j][k] {
+			continue
+		}
+		return b.b[i][k] < b.b[j][k]
+	}
+	return false
+}
+
+// parseExtensions parses and normalizes the extensions in the buffer.
+// It returns the last position of scan.b that is part of any extension.
+// It also trims scan.b to remove excess parts accordingly.
+func parseExtensions(scan *scanner) int {
+	start := scan.start
+	exts := [][]byte{}
+	private := []byte{}
+	end := scan.end
+	for len(scan.token) == 1 {
+		extStart := scan.start
+		ext := scan.token[0]
+		end = parseExtension(scan)
+		extension := scan.b[extStart:end]
+		if len(extension) < 3 || (ext != 'x' && len(extension) < 4) {
+			scan.setError(ErrSyntax)
+			end = extStart
+			continue
+		} else if start == extStart && (ext == 'x' || scan.start == len(scan.b)) {
+			scan.b = scan.b[:end]
+			return end
+		} else if ext == 'x' {
+			private = extension
+			break
+		}
+		exts = append(exts, extension)
+	}
+	sort.Sort(bytesSort{exts, 1})
+	if len(private) > 0 {
+		exts = append(exts, private)
+	}
+	scan.b = scan.b[:start]
+	if len(exts) > 0 {
+		scan.b = append(scan.b, bytes.Join(exts, separator)...)
+	} else if start > 0 {
+		// Strip trailing '-'.
+		scan.b = scan.b[:start-1]
+	}
+	return end
+}
+
+// parseExtension parses a single extension and returns the position of
+// the extension end.
+func parseExtension(scan *scanner) int {
+	start, end := scan.start, scan.end
+	switch scan.token[0] {
+	case 'u': // https://www.ietf.org/rfc/rfc6067.txt
+		attrStart := end
+		scan.scan()
+		for last := []byte{}; len(scan.token) > 2; scan.scan() {
+			if bytes.Compare(scan.token, last) != -1 {
+				// Attributes are unsorted. Start over from scratch.
+				p := attrStart + 1
+				scan.next = p
+				attrs := [][]byte{}
+				for scan.scan(); len(scan.token) > 2; scan.scan() {
+					attrs = append(attrs, scan.token)
+					end = scan.end
+				}
+				sort.Sort(bytesSort{attrs, 3})
+				copy(scan.b[p:], bytes.Join(attrs, separator))
+				break
+			}
+			last = scan.token
+			end = scan.end
+		}
+		// Scan key-type sequences. A key is of length 2 and may be followed
+		// by 0 or more "type" subtags from 3 to the maximum of 8 letters.
+		var last, key []byte
+		for attrEnd := end; len(scan.token) == 2; last = key {
+			key = scan.token
+			end = scan.end
+			for scan.scan(); end < scan.end && len(scan.token) > 2; scan.scan() {
+				end = scan.end
+			}
+			// TODO: check key value validity
+			if bytes.Compare(key, last) != 1 || scan.err != nil {
+				// We have an invalid key or the keys are not sorted.
+				// Start scanning keys from scratch and reorder.
+				p := attrEnd + 1
+				scan.next = p
+				keys := [][]byte{}
+				for scan.scan(); len(scan.token) == 2; {
+					keyStart := scan.start
+					end = scan.end
+					for scan.scan(); end < scan.end && len(scan.token) > 2; scan.scan() {
+						end = scan.end
+					}
+					keys = append(keys, scan.b[keyStart:end])
+				}
+				sort.Stable(bytesSort{keys, 2})
+				if n := len(keys); n > 0 {
+					k := 0
+					for i := 1; i < n; i++ {
+						if !bytes.Equal(keys[k][:2], keys[i][:2]) {
+							k++
+							keys[k] = keys[i]
+						} else if !bytes.Equal(keys[k], keys[i]) {
+							scan.setError(ErrDuplicateKey)
+						}
+					}
+					keys = keys[:k+1]
+				}
+				reordered := bytes.Join(keys, separator)
+				if e := p + len(reordered); e < end {
+					scan.deleteRange(e, end)
+					end = e
+				}
+				copy(scan.b[p:], reordered)
+				break
+			}
+		}
+	case 't': // https://www.ietf.org/rfc/rfc6497.txt
+		scan.scan()
+		if n := len(scan.token); n >= 2 && n <= 3 && isAlpha(scan.token[1]) {
+			_, end = parseTag(scan)
+			scan.toLower(start, end)
+		}
+		for len(scan.token) == 2 && !isAlpha(scan.token[1]) {
+			end = scan.acceptMinSize(3)
+		}
+	case 'x':
+		end = scan.acceptMinSize(1)
+	default:
+		end = scan.acceptMinSize(2)
+	}
+	return end
+}
+
+// getExtension returns the name, body and end position of the extension.
+func getExtension(s string, p int) (end int, ext string) {
+	if s[p] == '-' {
+		p++
+	}
+	if s[p] == 'x' {
+		return len(s), s[p:]
+	}
+	end = nextExtension(s, p)
+	return end, s[p:end]
+}
+
+// nextExtension finds the next extension within the string, searching
+// for the -<char>- pattern from position p.
+// In the fast majority of cases, language tags will have at most
+// one extension and extensions tend to be small.
+func nextExtension(s string, p int) int {
+	for n := len(s) - 3; p < n; {
+		if s[p] == '-' {
+			if s[p+2] == '-' {
+				return p
+			}
+			p += 3
+		} else {
+			p++
+		}
+	}
+	return len(s)
+}
diff --git a/vendor/golang.org/x/text/internal/language/tables.go b/vendor/golang.org/x/text/internal/language/tables.go
new file mode 100644
index 00000000..a19480c5
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/tables.go
@@ -0,0 +1,3464 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package language
+
+import "golang.org/x/text/internal/tag"
+
+// CLDRVersion is the CLDR version from which the tables in this package are derived.
+const CLDRVersion = "32"
+
+const NumLanguages = 8717
+
+const NumScripts = 251
+
+const NumRegions = 357
+
+type FromTo struct {
+	From uint16
+	To   uint16
+}
+
+const nonCanonicalUnd = 1201
+const (
+	_af  = 22
+	_am  = 39
+	_ar  = 58
+	_az  = 88
+	_bg  = 126
+	_bn  = 165
+	_ca  = 215
+	_cs  = 250
+	_da  = 257
+	_de  = 269
+	_el  = 310
+	_en  = 313
+	_es  = 318
+	_et  = 320
+	_fa  = 328
+	_fi  = 337
+	_fil = 339
+	_fr  = 350
+	_gu  = 420
+	_he  = 444
+	_hi  = 446
+	_hr  = 465
+	_hu  = 469
+	_hy  = 471
+	_id  = 481
+	_is  = 504
+	_it  = 505
+	_ja  = 512
+	_ka  = 528
+	_kk  = 578
+	_km  = 586
+	_kn  = 593
+	_ko  = 596
+	_ky  = 650
+	_lo  = 696
+	_lt  = 704
+	_lv  = 711
+	_mk  = 767
+	_ml  = 772
+	_mn  = 779
+	_mo  = 784
+	_mr  = 795
+	_ms  = 799
+	_mul = 806
+	_my  = 817
+	_nb  = 839
+	_ne  = 849
+	_nl  = 871
+	_no  = 879
+	_pa  = 925
+	_pl  = 947
+	_pt  = 960
+	_ro  = 988
+	_ru  = 994
+	_sh  = 1031
+	_si  = 1036
+	_sk  = 1042
+	_sl  = 1046
+	_sq  = 1073
+	_sr  = 1074
+	_sv  = 1092
+	_sw  = 1093
+	_ta  = 1104
+	_te  = 1121
+	_th  = 1131
+	_tl  = 1146
+	_tn  = 1152
+	_tr  = 1162
+	_uk  = 1198
+	_ur  = 1204
+	_uz  = 1212
+	_vi  = 1219
+	_zh  = 1321
+	_zu  = 1327
+	_jbo = 515
+	_ami = 1650
+	_bnn = 2357
+	_hak = 438
+	_tlh = 14467
+	_lb  = 661
+	_nv  = 899
+	_pwn = 12055
+	_tao = 14188
+	_tay = 14198
+	_tsu = 14662
+	_nn  = 874
+	_sfb = 13629
+	_vgt = 15701
+	_sgg = 13660
+	_cmn = 3007
+	_nan = 835
+	_hsn = 467
+)
+
+const langPrivateStart = 0x2f72
+
+const langPrivateEnd = 0x3179
+
+// lang holds an alphabetically sorted list of ISO-639 language identifiers.
+// All entries are 4 bytes. The index of the identifier (divided by 4) is the language tag.
+// For 2-byte language identifiers, the two successive bytes have the following meaning:
+//     - if the first letter of the 2- and 3-letter ISO codes are the same:
+//       the second and third letter of the 3-letter ISO code.
+//     - otherwise: a 0 and a by 2 bits right-shifted index into altLangISO3.
+// For 3-byte language identifiers the 4th byte is 0.
+const lang tag.Index = "" + // Size: 5324 bytes
+	"---\x00aaaraai\x00aak\x00aau\x00abbkabi\x00abq\x00abr\x00abt\x00aby\x00a" +
+	"cd\x00ace\x00ach\x00ada\x00ade\x00adj\x00ady\x00adz\x00aeveaeb\x00aey" +
+	"\x00affragc\x00agd\x00agg\x00agm\x00ago\x00agq\x00aha\x00ahl\x00aho\x00a" +
+	"jg\x00akkaakk\x00ala\x00ali\x00aln\x00alt\x00ammhamm\x00amn\x00amo\x00am" +
+	"p\x00anrganc\x00ank\x00ann\x00any\x00aoj\x00aom\x00aoz\x00apc\x00apd\x00" +
+	"ape\x00apr\x00aps\x00apz\x00arraarc\x00arh\x00arn\x00aro\x00arq\x00ars" +
+	"\x00ary\x00arz\x00assmasa\x00ase\x00asg\x00aso\x00ast\x00ata\x00atg\x00a" +
+	"tj\x00auy\x00avvaavl\x00avn\x00avt\x00avu\x00awa\x00awb\x00awo\x00awx" +
+	"\x00ayymayb\x00azzebaakbal\x00ban\x00bap\x00bar\x00bas\x00bav\x00bax\x00" +
+	"bba\x00bbb\x00bbc\x00bbd\x00bbj\x00bbp\x00bbr\x00bcf\x00bch\x00bci\x00bc" +
+	"m\x00bcn\x00bco\x00bcq\x00bcu\x00bdd\x00beelbef\x00beh\x00bej\x00bem\x00" +
+	"bet\x00bew\x00bex\x00bez\x00bfd\x00bfq\x00bft\x00bfy\x00bgulbgc\x00bgn" +
+	"\x00bgx\x00bhihbhb\x00bhg\x00bhi\x00bhk\x00bhl\x00bho\x00bhy\x00biisbib" +
+	"\x00big\x00bik\x00bim\x00bin\x00bio\x00biq\x00bjh\x00bji\x00bjj\x00bjn" +
+	"\x00bjo\x00bjr\x00bjt\x00bjz\x00bkc\x00bkm\x00bkq\x00bku\x00bkv\x00blt" +
+	"\x00bmambmh\x00bmk\x00bmq\x00bmu\x00bnenbng\x00bnm\x00bnp\x00boodboj\x00" +
+	"bom\x00bon\x00bpy\x00bqc\x00bqi\x00bqp\x00bqv\x00brrebra\x00brh\x00brx" +
+	"\x00brz\x00bsosbsj\x00bsq\x00bss\x00bst\x00bto\x00btt\x00btv\x00bua\x00b" +
+	"uc\x00bud\x00bug\x00buk\x00bum\x00buo\x00bus\x00buu\x00bvb\x00bwd\x00bwr" +
+	"\x00bxh\x00bye\x00byn\x00byr\x00bys\x00byv\x00byx\x00bza\x00bze\x00bzf" +
+	"\x00bzh\x00bzw\x00caatcan\x00cbj\x00cch\x00ccp\x00ceheceb\x00cfa\x00cgg" +
+	"\x00chhachk\x00chm\x00cho\x00chp\x00chr\x00cja\x00cjm\x00cjv\x00ckb\x00c" +
+	"kl\x00cko\x00cky\x00cla\x00cme\x00cmg\x00cooscop\x00cps\x00crrecrh\x00cr" +
+	"j\x00crk\x00crl\x00crm\x00crs\x00csescsb\x00csw\x00ctd\x00cuhucvhvcyymda" +
+	"andad\x00daf\x00dag\x00dah\x00dak\x00dar\x00dav\x00dbd\x00dbq\x00dcc\x00" +
+	"ddn\x00deeuded\x00den\x00dga\x00dgh\x00dgi\x00dgl\x00dgr\x00dgz\x00dia" +
+	"\x00dje\x00dnj\x00dob\x00doi\x00dop\x00dow\x00dri\x00drs\x00dsb\x00dtm" +
+	"\x00dtp\x00dts\x00dty\x00dua\x00duc\x00dud\x00dug\x00dvivdva\x00dww\x00d" +
+	"yo\x00dyu\x00dzzodzg\x00ebu\x00eeweefi\x00egl\x00egy\x00eka\x00eky\x00el" +
+	"llema\x00emi\x00enngenn\x00enq\x00eopoeri\x00es\x00\x05esu\x00etstetr" +
+	"\x00ett\x00etu\x00etx\x00euusewo\x00ext\x00faasfaa\x00fab\x00fag\x00fai" +
+	"\x00fan\x00ffulffi\x00ffm\x00fiinfia\x00fil\x00fit\x00fjijflr\x00fmp\x00" +
+	"foaofod\x00fon\x00for\x00fpe\x00fqs\x00frrafrc\x00frp\x00frr\x00frs\x00f" +
+	"ub\x00fud\x00fue\x00fuf\x00fuh\x00fuq\x00fur\x00fuv\x00fuy\x00fvr\x00fyr" +
+	"ygalegaa\x00gaf\x00gag\x00gah\x00gaj\x00gam\x00gan\x00gaw\x00gay\x00gba" +
+	"\x00gbf\x00gbm\x00gby\x00gbz\x00gcr\x00gdlagde\x00gdn\x00gdr\x00geb\x00g" +
+	"ej\x00gel\x00gez\x00gfk\x00ggn\x00ghs\x00gil\x00gim\x00gjk\x00gjn\x00gju" +
+	"\x00gkn\x00gkp\x00gllgglk\x00gmm\x00gmv\x00gnrngnd\x00gng\x00god\x00gof" +
+	"\x00goi\x00gom\x00gon\x00gor\x00gos\x00got\x00grb\x00grc\x00grt\x00grw" +
+	"\x00gsw\x00guujgub\x00guc\x00gud\x00gur\x00guw\x00gux\x00guz\x00gvlvgvf" +
+	"\x00gvr\x00gvs\x00gwc\x00gwi\x00gwt\x00gyi\x00haauhag\x00hak\x00ham\x00h" +
+	"aw\x00haz\x00hbb\x00hdy\x00heebhhy\x00hiinhia\x00hif\x00hig\x00hih\x00hi" +
+	"l\x00hla\x00hlu\x00hmd\x00hmt\x00hnd\x00hne\x00hnj\x00hnn\x00hno\x00homo" +
+	"hoc\x00hoj\x00hot\x00hrrvhsb\x00hsn\x00htathuunhui\x00hyyehzerianaian" +
+	"\x00iar\x00iba\x00ibb\x00iby\x00ica\x00ich\x00idndidd\x00idi\x00idu\x00i" +
+	"eleife\x00igboigb\x00ige\x00iiiiijj\x00ikpkikk\x00ikt\x00ikw\x00ikx\x00i" +
+	"lo\x00imo\x00inndinh\x00iodoiou\x00iri\x00isslittaiukuiw\x00\x03iwm\x00i" +
+	"ws\x00izh\x00izi\x00japnjab\x00jam\x00jbo\x00jbu\x00jen\x00jgk\x00jgo" +
+	"\x00ji\x00\x06jib\x00jmc\x00jml\x00jra\x00jut\x00jvavjwavkaatkaa\x00kab" +
+	"\x00kac\x00kad\x00kai\x00kaj\x00kam\x00kao\x00kbd\x00kbm\x00kbp\x00kbq" +
+	"\x00kbx\x00kby\x00kcg\x00kck\x00kcl\x00kct\x00kde\x00kdh\x00kdl\x00kdt" +
+	"\x00kea\x00ken\x00kez\x00kfo\x00kfr\x00kfy\x00kgonkge\x00kgf\x00kgp\x00k" +
+	"ha\x00khb\x00khn\x00khq\x00khs\x00kht\x00khw\x00khz\x00kiikkij\x00kiu" +
+	"\x00kiw\x00kjuakjd\x00kjg\x00kjs\x00kjy\x00kkazkkc\x00kkj\x00klalkln\x00" +
+	"klq\x00klt\x00klx\x00kmhmkmb\x00kmh\x00kmo\x00kms\x00kmu\x00kmw\x00knank" +
+	"nf\x00knp\x00koorkoi\x00kok\x00kol\x00kos\x00koz\x00kpe\x00kpf\x00kpo" +
+	"\x00kpr\x00kpx\x00kqb\x00kqf\x00kqs\x00kqy\x00kraukrc\x00kri\x00krj\x00k" +
+	"rl\x00krs\x00kru\x00ksasksb\x00ksd\x00ksf\x00ksh\x00ksj\x00ksr\x00ktb" +
+	"\x00ktm\x00kto\x00kuurkub\x00kud\x00kue\x00kuj\x00kum\x00kun\x00kup\x00k" +
+	"us\x00kvomkvg\x00kvr\x00kvx\x00kw\x00\x01kwj\x00kwo\x00kxa\x00kxc\x00kxm" +
+	"\x00kxp\x00kxw\x00kxz\x00kyirkye\x00kyx\x00kzr\x00laatlab\x00lad\x00lag" +
+	"\x00lah\x00laj\x00las\x00lbtzlbe\x00lbu\x00lbw\x00lcm\x00lcp\x00ldb\x00l" +
+	"ed\x00lee\x00lem\x00lep\x00leq\x00leu\x00lez\x00lguglgg\x00liimlia\x00li" +
+	"d\x00lif\x00lig\x00lih\x00lij\x00lis\x00ljp\x00lki\x00lkt\x00lle\x00lln" +
+	"\x00lmn\x00lmo\x00lmp\x00lninlns\x00lnu\x00loaoloj\x00lok\x00lol\x00lor" +
+	"\x00los\x00loz\x00lrc\x00ltitltg\x00luublua\x00luo\x00luy\x00luz\x00lvav" +
+	"lwl\x00lzh\x00lzz\x00mad\x00maf\x00mag\x00mai\x00mak\x00man\x00mas\x00ma" +
+	"w\x00maz\x00mbh\x00mbo\x00mbq\x00mbu\x00mbw\x00mci\x00mcp\x00mcq\x00mcr" +
+	"\x00mcu\x00mda\x00mde\x00mdf\x00mdh\x00mdj\x00mdr\x00mdx\x00med\x00mee" +
+	"\x00mek\x00men\x00mer\x00met\x00meu\x00mfa\x00mfe\x00mfn\x00mfo\x00mfq" +
+	"\x00mglgmgh\x00mgl\x00mgo\x00mgp\x00mgy\x00mhahmhi\x00mhl\x00mirimif\x00" +
+	"min\x00mis\x00miw\x00mkkdmki\x00mkl\x00mkp\x00mkw\x00mlalmle\x00mlp\x00m" +
+	"ls\x00mmo\x00mmu\x00mmx\x00mnonmna\x00mnf\x00mni\x00mnw\x00moolmoa\x00mo" +
+	"e\x00moh\x00mos\x00mox\x00mpp\x00mps\x00mpt\x00mpx\x00mql\x00mrarmrd\x00" +
+	"mrj\x00mro\x00mssamtltmtc\x00mtf\x00mti\x00mtr\x00mua\x00mul\x00mur\x00m" +
+	"us\x00mva\x00mvn\x00mvy\x00mwk\x00mwr\x00mwv\x00mxc\x00mxm\x00myyamyk" +
+	"\x00mym\x00myv\x00myw\x00myx\x00myz\x00mzk\x00mzm\x00mzn\x00mzp\x00mzw" +
+	"\x00mzz\x00naaunac\x00naf\x00nah\x00nak\x00nan\x00nap\x00naq\x00nas\x00n" +
+	"bobnca\x00nce\x00ncf\x00nch\x00nco\x00ncu\x00nddendc\x00nds\x00neepneb" +
+	"\x00new\x00nex\x00nfr\x00ngdonga\x00ngb\x00ngl\x00nhb\x00nhe\x00nhw\x00n" +
+	"if\x00nii\x00nij\x00nin\x00niu\x00niy\x00niz\x00njo\x00nkg\x00nko\x00nll" +
+	"dnmg\x00nmz\x00nnnonnf\x00nnh\x00nnk\x00nnm\x00noornod\x00noe\x00non\x00" +
+	"nop\x00nou\x00nqo\x00nrblnrb\x00nsk\x00nsn\x00nso\x00nss\x00ntm\x00ntr" +
+	"\x00nui\x00nup\x00nus\x00nuv\x00nux\x00nvavnwb\x00nxq\x00nxr\x00nyyanym" +
+	"\x00nyn\x00nzi\x00occiogc\x00ojjiokr\x00okv\x00omrmong\x00onn\x00ons\x00" +
+	"opm\x00orrioro\x00oru\x00osssosa\x00ota\x00otk\x00ozm\x00paanpag\x00pal" +
+	"\x00pam\x00pap\x00pau\x00pbi\x00pcd\x00pcm\x00pdc\x00pdt\x00ped\x00peo" +
+	"\x00pex\x00pfl\x00phl\x00phn\x00pilipil\x00pip\x00pka\x00pko\x00plolpla" +
+	"\x00pms\x00png\x00pnn\x00pnt\x00pon\x00ppo\x00pra\x00prd\x00prg\x00psusp" +
+	"ss\x00ptorptp\x00puu\x00pwa\x00quuequc\x00qug\x00rai\x00raj\x00rao\x00rc" +
+	"f\x00rej\x00rel\x00res\x00rgn\x00rhg\x00ria\x00rif\x00rjs\x00rkt\x00rmoh" +
+	"rmf\x00rmo\x00rmt\x00rmu\x00rnunrna\x00rng\x00roonrob\x00rof\x00roo\x00r" +
+	"ro\x00rtm\x00ruusrue\x00rug\x00rw\x00\x04rwk\x00rwo\x00ryu\x00saansaf" +
+	"\x00sah\x00saq\x00sas\x00sat\x00sav\x00saz\x00sba\x00sbe\x00sbp\x00scrds" +
+	"ck\x00scl\x00scn\x00sco\x00scs\x00sdndsdc\x00sdh\x00semesef\x00seh\x00se" +
+	"i\x00ses\x00sgagsga\x00sgs\x00sgw\x00sgz\x00sh\x00\x02shi\x00shk\x00shn" +
+	"\x00shu\x00siinsid\x00sig\x00sil\x00sim\x00sjr\x00sklkskc\x00skr\x00sks" +
+	"\x00sllvsld\x00sli\x00sll\x00sly\x00smmosma\x00smi\x00smj\x00smn\x00smp" +
+	"\x00smq\x00sms\x00snnasnc\x00snk\x00snp\x00snx\x00sny\x00soomsok\x00soq" +
+	"\x00sou\x00soy\x00spd\x00spl\x00sps\x00sqqisrrpsrb\x00srn\x00srr\x00srx" +
+	"\x00ssswssd\x00ssg\x00ssy\x00stotstk\x00stq\x00suunsua\x00sue\x00suk\x00" +
+	"sur\x00sus\x00svweswwaswb\x00swc\x00swg\x00swp\x00swv\x00sxn\x00sxw\x00s" +
+	"yl\x00syr\x00szl\x00taamtaj\x00tal\x00tan\x00taq\x00tbc\x00tbd\x00tbf" +
+	"\x00tbg\x00tbo\x00tbw\x00tbz\x00tci\x00tcy\x00tdd\x00tdg\x00tdh\x00teelt" +
+	"ed\x00tem\x00teo\x00tet\x00tfi\x00tggktgc\x00tgo\x00tgu\x00thhathl\x00th" +
+	"q\x00thr\x00tiirtif\x00tig\x00tik\x00tim\x00tio\x00tiv\x00tkuktkl\x00tkr" +
+	"\x00tkt\x00tlgltlf\x00tlx\x00tly\x00tmh\x00tmy\x00tnsntnh\x00toontof\x00" +
+	"tog\x00toq\x00tpi\x00tpm\x00tpz\x00tqo\x00trurtru\x00trv\x00trw\x00tssot" +
+	"sd\x00tsf\x00tsg\x00tsj\x00tsw\x00ttatttd\x00tte\x00ttj\x00ttr\x00tts" +
+	"\x00ttt\x00tuh\x00tul\x00tum\x00tuq\x00tvd\x00tvl\x00tvu\x00twwitwh\x00t" +
+	"wq\x00txg\x00tyahtya\x00tyv\x00tzm\x00ubu\x00udm\x00ugiguga\x00ukkruli" +
+	"\x00umb\x00und\x00unr\x00unx\x00urrduri\x00urt\x00urw\x00usa\x00utr\x00u" +
+	"vh\x00uvl\x00uzzbvag\x00vai\x00van\x00veenvec\x00vep\x00viievic\x00viv" +
+	"\x00vls\x00vmf\x00vmw\x00voolvot\x00vro\x00vun\x00vut\x00walnwae\x00waj" +
+	"\x00wal\x00wan\x00war\x00wbp\x00wbq\x00wbr\x00wci\x00wer\x00wgi\x00whg" +
+	"\x00wib\x00wiu\x00wiv\x00wja\x00wji\x00wls\x00wmo\x00wnc\x00wni\x00wnu" +
+	"\x00woolwob\x00wos\x00wrs\x00wsk\x00wtm\x00wuu\x00wuv\x00wwa\x00xav\x00x" +
+	"bi\x00xcr\x00xes\x00xhhoxla\x00xlc\x00xld\x00xmf\x00xmn\x00xmr\x00xna" +
+	"\x00xnr\x00xog\x00xon\x00xpr\x00xrb\x00xsa\x00xsi\x00xsm\x00xsr\x00xwe" +
+	"\x00yam\x00yao\x00yap\x00yas\x00yat\x00yav\x00yay\x00yaz\x00yba\x00ybb" +
+	"\x00yby\x00yer\x00ygr\x00ygw\x00yiidyko\x00yle\x00ylg\x00yll\x00yml\x00y" +
+	"ooryon\x00yrb\x00yre\x00yrl\x00yss\x00yua\x00yue\x00yuj\x00yut\x00yuw" +
+	"\x00zahazag\x00zbl\x00zdj\x00zea\x00zgh\x00zhhozhx\x00zia\x00zlm\x00zmi" +
+	"\x00zne\x00zuulzxx\x00zza\x00\xff\xff\xff\xff"
+
+const langNoIndexOffset = 1330
+
+// langNoIndex is a bit vector of all 3-letter language codes that are not used as an index
+// in lookup tables. The language ids for these language codes are derived directly
+// from the letters and are not consecutive.
+// Size: 2197 bytes, 2197 elements
+var langNoIndex = [2197]uint8{
+	// Entry 0 - 3F
+	0xff, 0xf8, 0xed, 0xfe, 0xeb, 0xd3, 0x3b, 0xd2,
+	0xfb, 0xbf, 0x7a, 0xfa, 0x37, 0x1d, 0x3c, 0x57,
+	0x6e, 0x97, 0x73, 0x38, 0xfb, 0xea, 0xbf, 0x70,
+	0xad, 0x03, 0xff, 0xff, 0xcf, 0x05, 0x84, 0x62,
+	0xe9, 0xbf, 0xfd, 0xbf, 0xbf, 0xf7, 0xfd, 0x77,
+	0x0f, 0xff, 0xef, 0x6f, 0xff, 0xfb, 0xdf, 0xe2,
+	0xc9, 0xf8, 0x7f, 0x7e, 0x4d, 0xb8, 0x0a, 0x6a,
+	0x7c, 0xea, 0xe3, 0xfa, 0x7a, 0xbf, 0x67, 0xff,
+	// Entry 40 - 7F
+	0xff, 0xff, 0xff, 0xdf, 0x2a, 0x54, 0x91, 0xc0,
+	0x5d, 0xe3, 0x97, 0x14, 0x07, 0x20, 0xdd, 0xed,
+	0x9f, 0x3f, 0xc9, 0x21, 0xf8, 0x3f, 0x94, 0x35,
+	0x7c, 0x5f, 0xff, 0x5f, 0x8e, 0x6e, 0xdf, 0xff,
+	0xff, 0xff, 0x55, 0x7c, 0xd3, 0xfd, 0xbf, 0xb5,
+	0x7b, 0xdf, 0x7f, 0xf7, 0xca, 0xfe, 0xdb, 0xa3,
+	0xa8, 0xff, 0x1f, 0x67, 0x7d, 0xeb, 0xef, 0xce,
+	0xff, 0xff, 0x9f, 0xff, 0xb7, 0xef, 0xfe, 0xcf,
+	// Entry 80 - BF
+	0xdb, 0xff, 0xf3, 0xcd, 0xfb, 0x2f, 0xff, 0xff,
+	0xbb, 0xee, 0xf7, 0xbd, 0xdb, 0xff, 0x5f, 0xf7,
+	0xfd, 0xf2, 0xfd, 0xff, 0x5e, 0x2f, 0x3b, 0xba,
+	0x7e, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xdd, 0xff,
+	0xfd, 0xdf, 0xfb, 0xfe, 0x9d, 0xb4, 0xd3, 0xff,
+	0xef, 0xff, 0xdf, 0xf7, 0x7f, 0xb7, 0xfd, 0xd5,
+	0xa5, 0x77, 0x40, 0xff, 0x9c, 0xc1, 0x41, 0x2c,
+	0x08, 0x21, 0x41, 0x00, 0x50, 0x40, 0x00, 0x80,
+	// Entry C0 - FF
+	0xfb, 0x4a, 0xf2, 0x9f, 0xb4, 0x42, 0x41, 0x96,
+	0x1b, 0x14, 0x08, 0xf3, 0x2b, 0xe7, 0x17, 0x56,
+	0x05, 0x7d, 0x0e, 0x1c, 0x37, 0x7b, 0xf3, 0xef,
+	0x97, 0xff, 0x5d, 0x38, 0x64, 0x08, 0x00, 0x10,
+	0xbc, 0x85, 0xaf, 0xdf, 0xff, 0xff, 0x73, 0x35,
+	0x3e, 0x87, 0xc7, 0xdf, 0xff, 0x01, 0x81, 0x00,
+	0xb0, 0x05, 0x80, 0x00, 0x00, 0x00, 0x00, 0x03,
+	0x40, 0x00, 0x40, 0x92, 0x21, 0x50, 0xb1, 0x5d,
+	// Entry 100 - 13F
+	0xfd, 0xdc, 0xbe, 0x5e, 0x00, 0x00, 0x02, 0x64,
+	0x0d, 0x19, 0x41, 0xdf, 0x79, 0x22, 0x00, 0x00,
+	0x00, 0x5e, 0x64, 0xdc, 0x24, 0xe5, 0xd9, 0xe3,
+	0xfe, 0xff, 0xfd, 0xcb, 0x9f, 0x14, 0x01, 0x0c,
+	0x86, 0x00, 0xd1, 0x00, 0xf0, 0xc7, 0x67, 0x5f,
+	0x56, 0x99, 0x5e, 0xb5, 0x6c, 0xaf, 0x03, 0x00,
+	0x02, 0x00, 0x00, 0x00, 0xc0, 0x37, 0xda, 0x56,
+	0x90, 0x69, 0x01, 0x2c, 0x96, 0x69, 0x20, 0xfb,
+	// Entry 140 - 17F
+	0xff, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x0c, 0x16,
+	0x03, 0x00, 0x00, 0xb0, 0x14, 0x03, 0x50, 0x06,
+	0x0a, 0x00, 0x01, 0x00, 0x00, 0x10, 0x11, 0x09,
+	0x00, 0x00, 0x60, 0x10, 0x00, 0x00, 0x00, 0x10,
+	0x00, 0x00, 0x44, 0x00, 0x00, 0x10, 0x00, 0x04,
+	0x08, 0x00, 0x00, 0x04, 0x00, 0x80, 0x28, 0x04,
+	0x00, 0x00, 0x40, 0xd5, 0x2d, 0x00, 0x64, 0x35,
+	0x24, 0x52, 0xf4, 0xd4, 0xbd, 0x62, 0xc9, 0x03,
+	// Entry 180 - 1BF
+	0x00, 0x80, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x04, 0x13, 0x39, 0x01, 0xdd, 0x57, 0x98,
+	0x21, 0x18, 0x81, 0x00, 0x00, 0x01, 0x40, 0x82,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x01, 0x40, 0x00, 0x44, 0x00, 0x00, 0x80, 0xea,
+	0xa9, 0x39, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+	// Entry 1C0 - 1FF
+	0x00, 0x03, 0x28, 0x05, 0x00, 0x00, 0x00, 0x00,
+	0x04, 0x20, 0x04, 0xa6, 0x00, 0x04, 0x00, 0x00,
+	0x81, 0x50, 0x00, 0x00, 0x00, 0x11, 0x84, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x55,
+	0x02, 0x10, 0x08, 0x04, 0x00, 0x00, 0x00, 0x40,
+	0x30, 0x83, 0x01, 0x00, 0x00, 0x00, 0x11, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x1e, 0xcd, 0xbf, 0x7a, 0xbf,
+	// Entry 200 - 23F
+	0xdf, 0xc3, 0x83, 0x82, 0xc0, 0xfb, 0x57, 0x27,
+	0xed, 0x55, 0xe7, 0x01, 0x00, 0x20, 0xb2, 0xc5,
+	0xa4, 0x45, 0x25, 0x9b, 0x02, 0xdf, 0xe0, 0xdf,
+	0x03, 0x44, 0x08, 0x90, 0x01, 0x04, 0x01, 0xe3,
+	0x92, 0x54, 0xdb, 0x28, 0xd3, 0x5f, 0xfe, 0x6d,
+	0x79, 0xed, 0x1c, 0x7d, 0x04, 0x08, 0x00, 0x01,
+	0x21, 0x12, 0x64, 0x5f, 0xdd, 0x0e, 0x85, 0x4f,
+	0x40, 0x40, 0x00, 0x04, 0xf1, 0xfd, 0x3d, 0x54,
+	// Entry 240 - 27F
+	0xe8, 0x03, 0xb4, 0x27, 0x23, 0x0d, 0x00, 0x00,
+	0x20, 0x7b, 0x78, 0x02, 0x05, 0x84, 0x00, 0xf0,
+	0xbb, 0x7e, 0x5a, 0x00, 0x18, 0x04, 0x81, 0x00,
+	0x00, 0x00, 0x80, 0x10, 0x90, 0x1c, 0x01, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x10, 0x40, 0x00, 0x04,
+	0x08, 0xa0, 0x70, 0xa5, 0x0c, 0x40, 0x00, 0x00,
+	0x11, 0x24, 0x04, 0x68, 0x00, 0x20, 0x70, 0xff,
+	0x7b, 0x7f, 0x70, 0x00, 0x05, 0x9b, 0xdd, 0x66,
+	// Entry 280 - 2BF
+	0x03, 0x00, 0x11, 0x00, 0x00, 0x00, 0x40, 0x05,
+	0xb5, 0xb6, 0x80, 0x08, 0x04, 0x00, 0x04, 0x51,
+	0xe2, 0xef, 0xfd, 0x3f, 0x05, 0x09, 0x08, 0x05,
+	0x40, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+	0x0c, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x60,
+	0xe7, 0x48, 0x00, 0x81, 0x20, 0xc0, 0x05, 0x80,
+	0x03, 0x00, 0x00, 0x00, 0x8c, 0x50, 0x40, 0x04,
+	0x84, 0x47, 0x84, 0x40, 0x20, 0x10, 0x00, 0x20,
+	// Entry 2C0 - 2FF
+	0x02, 0x50, 0x80, 0x11, 0x00, 0x91, 0x6c, 0xe2,
+	0x50, 0x27, 0x1d, 0x11, 0x29, 0x06, 0x59, 0xe9,
+	0x33, 0x08, 0x00, 0x20, 0x04, 0x40, 0x10, 0x00,
+	0x00, 0x00, 0x50, 0x44, 0x92, 0x49, 0xd6, 0x5d,
+	0xa7, 0x81, 0x47, 0x97, 0xfb, 0x00, 0x10, 0x00,
+	0x08, 0x00, 0x80, 0x00, 0x40, 0x04, 0x00, 0x01,
+	0x02, 0x00, 0x01, 0x40, 0x80, 0x00, 0x00, 0x08,
+	0xd8, 0xeb, 0xf6, 0x39, 0xc4, 0x89, 0x12, 0x00,
+	// Entry 300 - 33F
+	0x00, 0x0c, 0x04, 0x01, 0x20, 0x20, 0xdd, 0xa0,
+	0x01, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00,
+	0x04, 0x10, 0xd0, 0x9d, 0x95, 0x13, 0x04, 0x80,
+	0x00, 0x01, 0xd0, 0x12, 0x40, 0x00, 0x10, 0xb0,
+	0x10, 0x62, 0x4c, 0xd2, 0x02, 0x01, 0x4a, 0x00,
+	0x46, 0x04, 0x00, 0x08, 0x02, 0x00, 0x20, 0x80,
+	0x00, 0x80, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00,
+	0x00, 0xf0, 0xd8, 0x6f, 0x15, 0x02, 0x08, 0x00,
+	// Entry 340 - 37F
+	0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x10, 0x01,
+	0x00, 0x10, 0x00, 0x00, 0x00, 0xf0, 0x84, 0xe3,
+	0xdd, 0xbf, 0xf9, 0xf9, 0x3b, 0x7f, 0x7f, 0xdb,
+	0xfd, 0xfc, 0xfe, 0xdf, 0xff, 0xfd, 0xff, 0xf6,
+	0xfb, 0xfc, 0xf7, 0x1f, 0xff, 0xb3, 0x6c, 0xff,
+	0xd9, 0xad, 0xdf, 0xfe, 0xef, 0xba, 0xdf, 0xff,
+	0xff, 0xff, 0xb7, 0xdd, 0x7d, 0xbf, 0xab, 0x7f,
+	0xfd, 0xfd, 0xdf, 0x2f, 0x9c, 0xdf, 0xf3, 0x6f,
+	// Entry 380 - 3BF
+	0xdf, 0xdd, 0xff, 0xfb, 0xee, 0xd2, 0xab, 0x5f,
+	0xd5, 0xdf, 0x7f, 0xff, 0xeb, 0xff, 0xe4, 0x4d,
+	0xf9, 0xff, 0xfe, 0xf7, 0xfd, 0xdf, 0xfb, 0xbf,
+	0xee, 0xdb, 0x6f, 0xef, 0xff, 0x7f, 0xff, 0xff,
+	0xf7, 0x5f, 0xd3, 0x3b, 0xfd, 0xd9, 0xdf, 0xeb,
+	0xbc, 0x08, 0x05, 0x24, 0xff, 0x07, 0x70, 0xfe,
+	0xe6, 0x5e, 0x00, 0x08, 0x00, 0x83, 0x3d, 0x1b,
+	0x06, 0xe6, 0x72, 0x60, 0xd1, 0x3c, 0x7f, 0x44,
+	// Entry 3C0 - 3FF
+	0x02, 0x30, 0x9f, 0x7a, 0x16, 0xbd, 0x7f, 0x57,
+	0xf2, 0xff, 0x31, 0xff, 0xf2, 0x1e, 0x90, 0xf7,
+	0xf1, 0xf9, 0x45, 0x80, 0x01, 0x02, 0x00, 0x00,
+	0x40, 0x54, 0x9f, 0x8a, 0xd9, 0xf9, 0x2e, 0x11,
+	0x86, 0x51, 0xc0, 0xf3, 0xfb, 0x47, 0x40, 0x01,
+	0x05, 0xd1, 0x50, 0x5c, 0x00, 0x00, 0x00, 0x10,
+	0x04, 0x02, 0x00, 0x00, 0x0a, 0x00, 0x17, 0xd2,
+	0xb9, 0xfd, 0xfc, 0xba, 0xfe, 0xef, 0xc7, 0xbe,
+	// Entry 400 - 43F
+	0x53, 0x6f, 0xdf, 0xe7, 0xdb, 0x65, 0xbb, 0x7f,
+	0xfa, 0xff, 0x77, 0xf3, 0xef, 0xbf, 0xfd, 0xf7,
+	0xdf, 0xdf, 0x9b, 0x7f, 0xff, 0xff, 0x7f, 0x6f,
+	0xf7, 0xfb, 0xeb, 0xdf, 0xbc, 0xff, 0xbf, 0x6b,
+	0x7b, 0xfb, 0xff, 0xce, 0x76, 0xbd, 0xf7, 0xf7,
+	0xdf, 0xdc, 0xf7, 0xf7, 0xff, 0xdf, 0xf3, 0xfe,
+	0xef, 0xff, 0xff, 0xff, 0xb6, 0x7f, 0x7f, 0xde,
+	0xf7, 0xb9, 0xeb, 0x77, 0xff, 0xfb, 0xbf, 0xdf,
+	// Entry 440 - 47F
+	0xfd, 0xfe, 0xfb, 0xff, 0xfe, 0xeb, 0x1f, 0x7d,
+	0x2f, 0xfd, 0xb6, 0xb5, 0xa5, 0xfc, 0xff, 0xfd,
+	0x7f, 0x4e, 0xbf, 0x8f, 0xae, 0xff, 0xee, 0xdf,
+	0x7f, 0xf7, 0x73, 0x02, 0x02, 0x04, 0xfc, 0xf7,
+	0xff, 0xb7, 0xd7, 0xef, 0xfe, 0xcd, 0xf5, 0xce,
+	0xe2, 0x8e, 0xe7, 0xbf, 0xb7, 0xff, 0x56, 0xfd,
+	0xcd, 0xff, 0xfb, 0xff, 0xdf, 0xd7, 0xea, 0xff,
+	0xe5, 0x5f, 0x6d, 0x0f, 0xa7, 0x51, 0x06, 0xc4,
+	// Entry 480 - 4BF
+	0x13, 0x50, 0x5d, 0xaf, 0xa6, 0xff, 0x99, 0xfb,
+	0x63, 0x1d, 0x53, 0xff, 0xef, 0xb7, 0x35, 0x20,
+	0x14, 0x00, 0x55, 0x51, 0x82, 0x65, 0xf5, 0x41,
+	0xe2, 0xff, 0xfc, 0xdf, 0x02, 0x05, 0xc5, 0x05,
+	0x00, 0x22, 0x00, 0x74, 0x69, 0x10, 0x08, 0x04,
+	0x41, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x51, 0x20, 0x05, 0x04, 0x01, 0x00, 0x00,
+	0x06, 0x01, 0x20, 0x00, 0x18, 0x01, 0x92, 0xb1,
+	// Entry 4C0 - 4FF
+	0xfd, 0x47, 0x49, 0x06, 0x95, 0x06, 0x57, 0xed,
+	0xfb, 0x4c, 0x1c, 0x6b, 0x83, 0x04, 0x62, 0x40,
+	0x00, 0x11, 0x42, 0x00, 0x00, 0x00, 0x54, 0x83,
+	0xb8, 0x4f, 0x10, 0x8c, 0x89, 0x46, 0xde, 0xf7,
+	0x13, 0x31, 0x00, 0x20, 0x00, 0x00, 0x00, 0x90,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x10, 0x00,
+	0x01, 0x00, 0x00, 0xf0, 0x5b, 0xf4, 0xbe, 0x3d,
+	0xbe, 0xcf, 0xf7, 0xaf, 0x42, 0x04, 0x84, 0x41,
+	// Entry 500 - 53F
+	0x30, 0xff, 0x79, 0x72, 0x04, 0x00, 0x00, 0x49,
+	0x2d, 0x14, 0x27, 0x57, 0xed, 0xf1, 0x3f, 0xe7,
+	0x3f, 0x00, 0x00, 0x02, 0xc6, 0xa0, 0x1e, 0xf8,
+	0xbb, 0xff, 0xfd, 0xfb, 0xb7, 0xfd, 0xe7, 0xf7,
+	0xfd, 0xfc, 0xd5, 0xed, 0x47, 0xf4, 0x7e, 0x10,
+	0x01, 0x01, 0x84, 0x6d, 0xff, 0xf7, 0xdd, 0xf9,
+	0x5b, 0x05, 0x86, 0xed, 0xf5, 0x77, 0xbd, 0x3c,
+	0x00, 0x00, 0x00, 0x42, 0x71, 0x42, 0x00, 0x40,
+	// Entry 540 - 57F
+	0x00, 0x00, 0x01, 0x43, 0x19, 0x00, 0x08, 0x00,
+	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,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	// Entry 580 - 5BF
+	0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+	0xff, 0xab, 0xbd, 0xe7, 0x57, 0xee, 0x13, 0x5d,
+	0x09, 0xc1, 0x40, 0x21, 0xfa, 0x17, 0x01, 0x80,
+	0x00, 0x00, 0x00, 0x00, 0xf0, 0xce, 0xfb, 0xbf,
+	0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00,
+	0x00, 0x30, 0x15, 0xa3, 0x10, 0x00, 0x00, 0x00,
+	0x11, 0x04, 0x16, 0x00, 0x00, 0x02, 0x00, 0x81,
+	0xa3, 0x01, 0x50, 0x00, 0x00, 0x83, 0x11, 0x40,
+	// Entry 5C0 - 5FF
+	0x00, 0x00, 0x00, 0xf0, 0xdd, 0x7b, 0x3e, 0x02,
+	0xaa, 0x10, 0x5d, 0x98, 0x52, 0x00, 0x80, 0x20,
+	0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x02,
+	0x19, 0x00, 0x10, 0x02, 0x10, 0x61, 0x5a, 0x9d,
+	0x31, 0x00, 0x00, 0x00, 0x01, 0x10, 0x02, 0x20,
+	0x00, 0x00, 0x01, 0x00, 0x42, 0x00, 0x20, 0x00,
+	0x00, 0x1f, 0xdf, 0xd2, 0xb9, 0xff, 0xfd, 0x3f,
+	0x1f, 0x98, 0xcf, 0x9c, 0xff, 0xaf, 0x5f, 0xfe,
+	// Entry 600 - 63F
+	0x7b, 0x4b, 0x40, 0x10, 0xe1, 0xfd, 0xaf, 0xd9,
+	0xb7, 0xf6, 0xfb, 0xb3, 0xc7, 0xff, 0x6f, 0xf1,
+	0x73, 0xb1, 0x7f, 0x9f, 0x7f, 0xbd, 0xfc, 0xb7,
+	0xee, 0x1c, 0xfa, 0xcb, 0xef, 0xdd, 0xf9, 0xbd,
+	0x6e, 0xae, 0x55, 0xfd, 0x6e, 0x81, 0x76, 0x1f,
+	0xd4, 0x77, 0xf5, 0x7d, 0xfb, 0xff, 0xeb, 0xfe,
+	0xbe, 0x5f, 0x46, 0x1b, 0xe9, 0x5f, 0x50, 0x18,
+	0x02, 0xfa, 0xf7, 0x9d, 0x15, 0x97, 0x05, 0x0f,
+	// Entry 640 - 67F
+	0x75, 0xc4, 0x7d, 0x81, 0x92, 0xf5, 0x57, 0x6c,
+	0xff, 0xe4, 0xef, 0x6f, 0xff, 0xfc, 0xdd, 0xde,
+	0xfc, 0xfd, 0x76, 0x5f, 0x7a, 0x3f, 0x00, 0x98,
+	0x02, 0xfb, 0xa3, 0xef, 0xf3, 0xd6, 0xf2, 0xff,
+	0xb9, 0xda, 0x7d, 0xd0, 0x3e, 0x15, 0x7b, 0xb4,
+	0xf5, 0x3e, 0xff, 0xff, 0xf1, 0xf7, 0xff, 0xe7,
+	0x5f, 0xff, 0xff, 0x9e, 0xdb, 0xf6, 0xd7, 0xb9,
+	0xef, 0x27, 0x80, 0xbb, 0xc5, 0xff, 0xff, 0xe3,
+	// Entry 680 - 6BF
+	0x97, 0x9d, 0xbf, 0x9f, 0xf7, 0xc7, 0xfd, 0x37,
+	0xce, 0x7f, 0x04, 0x1d, 0x73, 0x7f, 0xf8, 0xda,
+	0x5d, 0xce, 0x7d, 0x06, 0xb9, 0xea, 0x69, 0xa0,
+	0x1a, 0x20, 0x00, 0x30, 0x02, 0x04, 0x24, 0x08,
+	0x04, 0x00, 0x00, 0x40, 0xd4, 0x02, 0x04, 0x00,
+	0x00, 0x04, 0x00, 0x04, 0x00, 0x20, 0x01, 0x06,
+	0x50, 0x00, 0x08, 0x00, 0x00, 0x00, 0x24, 0x00,
+	0x04, 0x00, 0x10, 0xdc, 0x58, 0xd7, 0x0d, 0x0f,
+	// Entry 6C0 - 6FF
+	0x14, 0x4d, 0xf1, 0x16, 0x44, 0xd1, 0x42, 0x08,
+	0x40, 0x00, 0x00, 0x40, 0x00, 0x08, 0x00, 0x00,
+	0x00, 0xdc, 0xfb, 0xcb, 0x0e, 0x58, 0x48, 0x41,
+	0x24, 0x20, 0x04, 0x00, 0x30, 0x12, 0x40, 0x00,
+	0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x01, 0x00, 0x00, 0x00, 0x80, 0x10, 0x10, 0xab,
+	0x6d, 0x93, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x80, 0x80, 0x25, 0x00, 0x00,
+	// Entry 700 - 73F
+	0x00, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
+	0x80, 0x86, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x01,
+	0xdf, 0x18, 0x00, 0x00, 0x02, 0xf0, 0xfd, 0x79,
+	0x3b, 0x00, 0x25, 0x00, 0x00, 0x00, 0x02, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00,
+	0x03, 0x00, 0x09, 0x20, 0x00, 0x00, 0x01, 0x00,
+	0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 740 - 77F
+	0x00, 0x00, 0x00, 0xef, 0xd5, 0xfd, 0xcf, 0x7e,
+	0xb0, 0x11, 0x00, 0x00, 0x00, 0x92, 0x01, 0x44,
+	0xcd, 0xf9, 0x5c, 0x00, 0x01, 0x00, 0x30, 0x04,
+	0x04, 0x55, 0x00, 0x01, 0x04, 0xf4, 0x3f, 0x4a,
+	0x01, 0x00, 0x00, 0xb0, 0x80, 0x20, 0x55, 0x75,
+	0x97, 0x7c, 0x9f, 0x31, 0xcc, 0x68, 0xd1, 0x03,
+	0xd5, 0x57, 0x27, 0x14, 0x01, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x2c, 0xf7, 0xcb, 0x1f, 0x14, 0x60,
+	// Entry 780 - 7BF
+	0x03, 0x68, 0x01, 0x10, 0x8b, 0x38, 0x8a, 0x01,
+	0x00, 0x00, 0x20, 0x00, 0x24, 0x44, 0x00, 0x00,
+	0x10, 0x03, 0x11, 0x02, 0x01, 0x00, 0x00, 0xf0,
+	0xf5, 0xff, 0xd5, 0x97, 0xbc, 0x70, 0xd6, 0x78,
+	0x78, 0x15, 0x50, 0x01, 0xa4, 0x84, 0xa9, 0x41,
+	0x00, 0x00, 0x00, 0x6b, 0x39, 0x52, 0x74, 0x00,
+	0xe8, 0x30, 0x90, 0x6a, 0x92, 0x00, 0x00, 0x02,
+	0xff, 0xef, 0xff, 0x4b, 0x85, 0x53, 0xf4, 0xed,
+	// Entry 7C0 - 7FF
+	0xdd, 0xbf, 0x72, 0x1d, 0xc7, 0x0c, 0xd5, 0x42,
+	0xfc, 0xff, 0xf7, 0x1f, 0x00, 0x80, 0x40, 0x56,
+	0xcc, 0x16, 0x9e, 0xea, 0x35, 0x7d, 0xef, 0xff,
+	0xbd, 0xa4, 0xaf, 0x01, 0x44, 0x18, 0x01, 0x4d,
+	0x4e, 0x4a, 0x08, 0x50, 0x28, 0x30, 0xe0, 0x80,
+	0x10, 0x20, 0x24, 0x00, 0xff, 0x2f, 0xd3, 0x60,
+	0xfe, 0x01, 0x02, 0x88, 0x0a, 0x40, 0x16, 0x01,
+	0x01, 0x15, 0x2b, 0x3c, 0x01, 0x00, 0x00, 0x10,
+	// Entry 800 - 83F
+	0x90, 0x49, 0x41, 0x02, 0x02, 0x01, 0xe1, 0xbf,
+	0xbf, 0x03, 0x00, 0x00, 0x10, 0xd4, 0xa3, 0xd1,
+	0x40, 0x9c, 0x44, 0xdf, 0xf5, 0x8f, 0x66, 0xb3,
+	0x55, 0x20, 0xd4, 0xc1, 0xd8, 0x30, 0x3d, 0x80,
+	0x00, 0x00, 0x00, 0x04, 0xd4, 0x11, 0xc5, 0x84,
+	0x2e, 0x50, 0x00, 0x22, 0x50, 0x6e, 0xbd, 0x93,
+	0x07, 0x00, 0x20, 0x10, 0x84, 0xb2, 0x45, 0x10,
+	0x06, 0x44, 0x00, 0x00, 0x12, 0x02, 0x11, 0x00,
+	// Entry 840 - 87F
+	0xf0, 0xfb, 0xfd, 0x7f, 0x05, 0x00, 0x12, 0x81,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x02,
+	0x00, 0x00, 0x00, 0x00, 0x03, 0x30, 0x02, 0x28,
+	0x84, 0x00, 0x21, 0xc0, 0x23, 0x24, 0x00, 0x00,
+	0x00, 0xcb, 0xe4, 0x3a, 0x42, 0x88, 0x14, 0xf1,
+	0xef, 0xff, 0x7f, 0x12, 0x01, 0x01, 0x84, 0x50,
+	0x07, 0xfc, 0xff, 0xff, 0x0f, 0x01, 0x00, 0x40,
+	0x10, 0x38, 0x01, 0x01, 0x1c, 0x12, 0x40, 0xe1,
+	// Entry 880 - 8BF
+	0x76, 0x16, 0x08, 0x03, 0x10, 0x00, 0x00, 0x00,
+	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x24,
+	0x0a, 0x00, 0x80, 0x00, 0x00,
+}
+
+// altLangISO3 holds an alphabetically sorted list of 3-letter language code alternatives
+// to 2-letter language codes that cannot be derived using the method described above.
+// Each 3-letter code is followed by its 1-byte langID.
+const altLangISO3 tag.Index = "---\x00cor\x00hbs\x01heb\x02kin\x03spa\x04yid\x05\xff\xff\xff\xff"
+
+// altLangIndex is used to convert indexes in altLangISO3 to langIDs.
+// Size: 12 bytes, 6 elements
+var altLangIndex = [6]uint16{
+	0x0281, 0x0407, 0x01fb, 0x03e5, 0x013e, 0x0208,
+}
+
+// AliasMap maps langIDs to their suggested replacements.
+// Size: 704 bytes, 176 elements
+var AliasMap = [176]FromTo{
+	0:   {From: 0x82, To: 0x88},
+	1:   {From: 0x187, To: 0x1ae},
+	2:   {From: 0x1f3, To: 0x1e1},
+	3:   {From: 0x1fb, To: 0x1bc},
+	4:   {From: 0x208, To: 0x512},
+	5:   {From: 0x20f, To: 0x20e},
+	6:   {From: 0x310, To: 0x3dc},
+	7:   {From: 0x347, To: 0x36f},
+	8:   {From: 0x407, To: 0x432},
+	9:   {From: 0x47a, To: 0x153},
+	10:  {From: 0x490, To: 0x451},
+	11:  {From: 0x4a2, To: 0x21},
+	12:  {From: 0x53e, To: 0x544},
+	13:  {From: 0x58f, To: 0x12d},
+	14:  {From: 0x630, To: 0x1eb1},
+	15:  {From: 0x651, To: 0x431},
+	16:  {From: 0x662, To: 0x431},
+	17:  {From: 0x6ed, To: 0x3a},
+	18:  {From: 0x6f8, To: 0x1d7},
+	19:  {From: 0x709, To: 0x3625},
+	20:  {From: 0x73e, To: 0x21a1},
+	21:  {From: 0x7b3, To: 0x56},
+	22:  {From: 0x7b9, To: 0x299b},
+	23:  {From: 0x7c5, To: 0x58},
+	24:  {From: 0x7e6, To: 0x145},
+	25:  {From: 0x80c, To: 0x5a},
+	26:  {From: 0x815, To: 0x8d},
+	27:  {From: 0x87e, To: 0x810},
+	28:  {From: 0x8c3, To: 0xee3},
+	29:  {From: 0x9ef, To: 0x331},
+	30:  {From: 0xa36, To: 0x2c5},
+	31:  {From: 0xa3d, To: 0xbf},
+	32:  {From: 0xabe, To: 0x3322},
+	33:  {From: 0xb38, To: 0x529},
+	34:  {From: 0xb75, To: 0x265a},
+	35:  {From: 0xb7e, To: 0xbc3},
+	36:  {From: 0xb9b, To: 0x44e},
+	37:  {From: 0xbbc, To: 0x4229},
+	38:  {From: 0xbbf, To: 0x529},
+	39:  {From: 0xbfe, To: 0x2da7},
+	40:  {From: 0xc2e, To: 0x3181},
+	41:  {From: 0xcb9, To: 0xf3},
+	42:  {From: 0xd08, To: 0xfa},
+	43:  {From: 0xdc8, To: 0x11a},
+	44:  {From: 0xdd7, To: 0x32d},
+	45:  {From: 0xdf8, To: 0xdfb},
+	46:  {From: 0xdfe, To: 0x531},
+	47:  {From: 0xe01, To: 0xdf3},
+	48:  {From: 0xedf, To: 0x205a},
+	49:  {From: 0xee9, To: 0x222e},
+	50:  {From: 0xeee, To: 0x2e9a},
+	51:  {From: 0xf39, To: 0x367},
+	52:  {From: 0x10d0, To: 0x140},
+	53:  {From: 0x1104, To: 0x2d0},
+	54:  {From: 0x11a0, To: 0x1ec},
+	55:  {From: 0x1279, To: 0x21},
+	56:  {From: 0x1424, To: 0x15e},
+	57:  {From: 0x1470, To: 0x14e},
+	58:  {From: 0x151f, To: 0xd9b},
+	59:  {From: 0x1523, To: 0x390},
+	60:  {From: 0x1532, To: 0x19f},
+	61:  {From: 0x1580, To: 0x210},
+	62:  {From: 0x1583, To: 0x10d},
+	63:  {From: 0x15a3, To: 0x3caf},
+	64:  {From: 0x1630, To: 0x222e},
+	65:  {From: 0x166a, To: 0x19b},
+	66:  {From: 0x16c8, To: 0x136},
+	67:  {From: 0x1700, To: 0x29f8},
+	68:  {From: 0x1718, To: 0x194},
+	69:  {From: 0x1727, To: 0xf3f},
+	70:  {From: 0x177a, To: 0x178},
+	71:  {From: 0x1809, To: 0x17b6},
+	72:  {From: 0x1816, To: 0x18f3},
+	73:  {From: 0x188a, To: 0x436},
+	74:  {From: 0x1979, To: 0x1d01},
+	75:  {From: 0x1a74, To: 0x2bb0},
+	76:  {From: 0x1a8a, To: 0x1f8},
+	77:  {From: 0x1b5a, To: 0x1fa},
+	78:  {From: 0x1b86, To: 0x1515},
+	79:  {From: 0x1d64, To: 0x2c9b},
+	80:  {From: 0x2038, To: 0x37b1},
+	81:  {From: 0x203d, To: 0x20dd},
+	82:  {From: 0x205a, To: 0x30b},
+	83:  {From: 0x20e3, To: 0x274},
+	84:  {From: 0x20ee, To: 0x263},
+	85:  {From: 0x20f2, To: 0x22d},
+	86:  {From: 0x20f9, To: 0x256},
+	87:  {From: 0x210f, To: 0x21eb},
+	88:  {From: 0x2135, To: 0x27d},
+	89:  {From: 0x2160, To: 0x913},
+	90:  {From: 0x2199, To: 0x121},
+	91:  {From: 0x21ce, To: 0x1561},
+	92:  {From: 0x21e6, To: 0x504},
+	93:  {From: 0x21f4, To: 0x49f},
+	94:  {From: 0x21fb, To: 0x269},
+	95:  {From: 0x222d, To: 0x121},
+	96:  {From: 0x2237, To: 0x121},
+	97:  {From: 0x2262, To: 0x92a},
+	98:  {From: 0x2316, To: 0x3226},
+	99:  {From: 0x236a, To: 0x2835},
+	100: {From: 0x2382, To: 0x3365},
+	101: {From: 0x2472, To: 0x2c7},
+	102: {From: 0x24e4, To: 0x2ff},
+	103: {From: 0x24f0, To: 0x2fa},
+	104: {From: 0x24fa, To: 0x31f},
+	105: {From: 0x2550, To: 0xb5b},
+	106: {From: 0x25a9, To: 0xe2},
+	107: {From: 0x263e, To: 0x2d0},
+	108: {From: 0x26c9, To: 0x26b4},
+	109: {From: 0x26f9, To: 0x3c8},
+	110: {From: 0x2727, To: 0x3caf},
+	111: {From: 0x2755, To: 0x6a4},
+	112: {From: 0x2765, To: 0x26b4},
+	113: {From: 0x2789, To: 0x4358},
+	114: {From: 0x27c9, To: 0x2001},
+	115: {From: 0x28ea, To: 0x27b1},
+	116: {From: 0x28ef, To: 0x2837},
+	117: {From: 0x2914, To: 0x351},
+	118: {From: 0x2986, To: 0x2da7},
+	119: {From: 0x29f0, To: 0x96b},
+	120: {From: 0x2b1a, To: 0x38d},
+	121: {From: 0x2bfc, To: 0x395},
+	122: {From: 0x2c3f, To: 0x3caf},
+	123: {From: 0x2cfc, To: 0x3be},
+	124: {From: 0x2d13, To: 0x597},
+	125: {From: 0x2d47, To: 0x148},
+	126: {From: 0x2d48, To: 0x148},
+	127: {From: 0x2dff, To: 0x2f1},
+	128: {From: 0x2e08, To: 0x19cc},
+	129: {From: 0x2e1a, To: 0x2d95},
+	130: {From: 0x2e21, To: 0x292},
+	131: {From: 0x2e54, To: 0x7d},
+	132: {From: 0x2e65, To: 0x2282},
+	133: {From: 0x2ea0, To: 0x2e9b},
+	134: {From: 0x2eef, To: 0x2ed7},
+	135: {From: 0x3193, To: 0x3c4},
+	136: {From: 0x3366, To: 0x338e},
+	137: {From: 0x342a, To: 0x3dc},
+	138: {From: 0x34ee, To: 0x18d0},
+	139: {From: 0x35c8, To: 0x2c9b},
+	140: {From: 0x35e6, To: 0x412},
+	141: {From: 0x3658, To: 0x246},
+	142: {From: 0x3676, To: 0x3f4},
+	143: {From: 0x36fd, To: 0x445},
+	144: {From: 0x37c0, To: 0x121},
+	145: {From: 0x3816, To: 0x38f2},
+	146: {From: 0x382a, To: 0x2b48},
+	147: {From: 0x382b, To: 0x2c9b},
+	148: {From: 0x382f, To: 0xa9},
+	149: {From: 0x3832, To: 0x3228},
+	150: {From: 0x386c, To: 0x39a6},
+	151: {From: 0x3892, To: 0x3fc0},
+	152: {From: 0x38a5, To: 0x39d7},
+	153: {From: 0x38b4, To: 0x1fa4},
+	154: {From: 0x38b5, To: 0x2e9a},
+	155: {From: 0x395c, To: 0x47e},
+	156: {From: 0x3b4e, To: 0xd91},
+	157: {From: 0x3b78, To: 0x137},
+	158: {From: 0x3c99, To: 0x4bc},
+	159: {From: 0x3fbd, To: 0x100},
+	160: {From: 0x4208, To: 0xa91},
+	161: {From: 0x42be, To: 0x573},
+	162: {From: 0x42f9, To: 0x3f60},
+	163: {From: 0x4378, To: 0x25a},
+	164: {From: 0x43b8, To: 0xe6c},
+	165: {From: 0x43cd, To: 0x10f},
+	166: {From: 0x44af, To: 0x3322},
+	167: {From: 0x44e3, To: 0x512},
+	168: {From: 0x45ca, To: 0x2409},
+	169: {From: 0x45dd, To: 0x26dc},
+	170: {From: 0x4610, To: 0x48ae},
+	171: {From: 0x46ae, To: 0x46a0},
+	172: {From: 0x473e, To: 0x4745},
+	173: {From: 0x4817, To: 0x3503},
+	174: {From: 0x4916, To: 0x31f},
+	175: {From: 0x49a7, To: 0x523},
+}
+
+// Size: 176 bytes, 176 elements
+var AliasTypes = [176]AliasType{
+	// Entry 0 - 3F
+	1, 0, 0, 0, 0, 0, 0, 1, 2, 2, 0, 1, 0, 0, 1, 2,
+	1, 1, 2, 0, 0, 1, 0, 1, 2, 1, 1, 0, 0, 2, 1, 1,
+	0, 2, 0, 0, 1, 0, 1, 0, 0, 1, 2, 1, 1, 1, 1, 0,
+	0, 0, 0, 2, 1, 1, 1, 1, 2, 1, 0, 1, 1, 2, 2, 0,
+	// Entry 40 - 7F
+	0, 1, 2, 0, 1, 0, 1, 1, 1, 1, 0, 0, 2, 1, 0, 0,
+	0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0,
+	0, 1, 0, 0, 0, 1, 2, 2, 2, 0, 1, 1, 0, 1, 0, 0,
+	0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 2, 1, 1,
+	// Entry 80 - BF
+	0, 0, 1, 0, 0, 0, 0, 1, 1, 2, 0, 0, 2, 1, 1, 1,
+	0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 2,
+	0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 0, 1, 1,
+}
+
+const (
+	_Latn = 90
+	_Hani = 57
+	_Hans = 59
+	_Hant = 60
+	_Qaaa = 143
+	_Qaai = 151
+	_Qabx = 192
+	_Zinh = 245
+	_Zyyy = 250
+	_Zzzz = 251
+)
+
+// script is an alphabetically sorted list of ISO 15924 codes. The index
+// of the script in the string, divided by 4, is the internal scriptID.
+const script tag.Index = "" + // Size: 1012 bytes
+	"----AdlmAfakAghbAhomArabAranArmiArmnAvstBaliBamuBassBatkBengBhksBlisBopo" +
+	"BrahBraiBugiBuhdCakmCansCariChamCherChrsCirtCoptCpmnCprtCyrlCyrsDevaDiak" +
+	"DogrDsrtDuplEgydEgyhEgypElbaElymEthiGeokGeorGlagGongGonmGothGranGrekGujr" +
+	"GuruHanbHangHaniHanoHansHantHatrHebrHiraHluwHmngHmnpHrktHungIndsItalJamo" +
+	"JavaJpanJurcKaliKanaKharKhmrKhojKitlKitsKndaKoreKpelKthiLanaLaooLatfLatg" +
+	"LatnLekeLepcLimbLinaLinbLisuLomaLyciLydiMahjMakaMandManiMarcMayaMedfMend" +
+	"MercMeroMlymModiMongMoonMrooMteiMultMymrNandNarbNbatNewaNkdbNkgbNkooNshu" +
+	"OgamOlckOrkhOryaOsgeOsmaPalmPaucPermPhagPhliPhlpPhlvPhnxPiqdPlrdPrtiQaaa" +
+	"QaabQaacQaadQaaeQaafQaagQaahQaaiQaajQaakQaalQaamQaanQaaoQaapQaaqQaarQaas" +
+	"QaatQaauQaavQaawQaaxQaayQaazQabaQabbQabcQabdQabeQabfQabgQabhQabiQabjQabk" +
+	"QablQabmQabnQaboQabpQabqQabrQabsQabtQabuQabvQabwQabxRjngRohgRoroRunrSamr" +
+	"SaraSarbSaurSgnwShawShrdShuiSiddSindSinhSogdSogoSoraSoyoSundSyloSyrcSyre" +
+	"SyrjSyrnTagbTakrTaleTaluTamlTangTavtTeluTengTfngTglgThaaThaiTibtTirhToto" +
+	"UgarVaiiVispWaraWchoWoleXpeoXsuxYeziYiiiZanbZinhZmthZsyeZsymZxxxZyyyZzzz" +
+	"\xff\xff\xff\xff"
+
+// suppressScript is an index from langID to the dominant script for that language,
+// if it exists.  If a script is given, it should be suppressed from the language tag.
+// Size: 1330 bytes, 1330 elements
+var suppressScript = [1330]uint8{
+	// Entry 0 - 3F
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 40 - 7F
+	0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
+	// Entry 80 - BF
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry C0 - FF
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 100 - 13F
+	0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0xe5, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00,
+	0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x5a, 0x00,
+	// Entry 140 - 17F
+	0x5a, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
+	0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
+	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
+	0x00, 0x5a, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x5a, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 180 - 1BF
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x5a, 0x35, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x22, 0x00,
+	// Entry 1C0 - 1FF
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x5a, 0x5a, 0x00, 0x5a, 0x5a, 0x00, 0x08,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
+	0x5a, 0x5a, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00,
+	// Entry 200 - 23F
+	0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x2e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 240 - 27F
+	0x00, 0x00, 0x20, 0x00, 0x00, 0x5a, 0x00, 0x00,
+	0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x52, 0x00, 0x00, 0x53, 0x00, 0x22, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 280 - 2BF
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00,
+	0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 2C0 - 2FF
+	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x22, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20,
+	// Entry 300 - 33F
+	0x00, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x5a,
+	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x75, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
+	// Entry 340 - 37F
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00,
+	0x5a, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x5a, 0x00,
+	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 380 - 3BF
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x5a, 0x00, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00,
+	// Entry 3C0 - 3FF
+	0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
+	0x00, 0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x20, 0x00, 0x00, 0x5a, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 400 - 43F
+	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00,
+	0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
+	// Entry 440 - 47F
+	0x00, 0x00, 0x00, 0x00, 0x5a, 0x5a, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0xde, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0xe1, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0xe6, 0x00, 0x00, 0x00, 0x2c,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00,
+	// Entry 480 - 4BF
+	0x5a, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00,
+	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5a, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 4C0 - 4FF
+	0x5a, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 500 - 53F
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a,
+	0x00, 0x00,
+}
+
+const (
+	_001 = 1
+	_419 = 31
+	_BR  = 65
+	_CA  = 73
+	_ES  = 110
+	_GB  = 123
+	_MD  = 188
+	_PT  = 238
+	_UK  = 306
+	_US  = 309
+	_ZZ  = 357
+	_XA  = 323
+	_XC  = 325
+	_XK  = 333
+)
+
+// isoRegionOffset needs to be added to the index of regionISO to obtain the regionID
+// for 2-letter ISO codes. (The first isoRegionOffset regionIDs are reserved for
+// the UN.M49 codes used for groups.)
+const isoRegionOffset = 32
+
+// regionTypes defines the status of a region for various standards.
+// Size: 358 bytes, 358 elements
+var regionTypes = [358]uint8{
+	// Entry 0 - 3F
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	// Entry 40 - 7F
+	0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06, 0x04,
+	0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04,
+	0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x00, 0x06,
+	0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
+	0x06, 0x04, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	// Entry 80 - BF
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x00, 0x04, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	// Entry C0 - FF
+	0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
+	0x06, 0x06, 0x06, 0x06, 0x00, 0x06, 0x04, 0x06,
+	0x06, 0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00,
+	0x06, 0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05,
+	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+	// Entry 100 - 13F
+	0x05, 0x05, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x04, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x02, 0x06, 0x04, 0x06, 0x06, 0x06,
+	0x06, 0x06, 0x00, 0x06, 0x06, 0x06, 0x06, 0x06,
+	// Entry 140 - 17F
+	0x06, 0x00, 0x06, 0x05, 0x05, 0x05, 0x05, 0x05,
+	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+	0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05, 0x05,
+	0x05, 0x05, 0x05, 0x05, 0x05, 0x04, 0x06, 0x06,
+	0x04, 0x06, 0x06, 0x04, 0x06, 0x05,
+}
+
+// regionISO holds a list of alphabetically sorted 2-letter ISO region codes.
+// Each 2-letter codes is followed by two bytes with the following meaning:
+//     - [A-Z}{2}: the first letter of the 2-letter code plus these two
+//                 letters form the 3-letter ISO code.
+//     - 0, n:     index into altRegionISO3.
+const regionISO tag.Index = "" + // Size: 1308 bytes
+	"AAAAACSCADNDAEREAFFGAGTGAIIAALLBAMRMANNTAOGOAQTAARRGASSMATUTAUUSAWBWAXLA" +
+	"AZZEBAIHBBRBBDGDBEELBFFABGGRBHHRBIDIBJENBLLMBMMUBNRNBOOLBQESBRRABSHSBTTN" +
+	"BUURBVVTBWWABYLRBZLZCAANCCCKCDODCFAFCGOGCHHECIIVCKOKCLHLCMMRCNHNCOOLCPPT" +
+	"CRRICS\x00\x00CTTECUUBCVPVCWUWCXXRCYYPCZZEDDDRDEEUDGGADJJIDKNKDMMADOOMDY" +
+	"HYDZZAEA  ECCUEESTEGGYEHSHERRIESSPETTHEU\x00\x03EZ  FIINFJJIFKLKFMSMFORO" +
+	"FQ\x00\x18FRRAFXXXGAABGBBRGDRDGEEOGFUFGGGYGHHAGIIBGLRLGMMBGNINGPLPGQNQGR" +
+	"RCGS\x00\x06GTTMGUUMGWNBGYUYHKKGHMMDHNNDHRRVHTTIHUUNHVVOIC  IDDNIERLILSR" +
+	"IMMNINNDIOOTIQRQIRRNISSLITTAJEEYJMAMJOORJPPNJTTNKEENKGGZKHHMKIIRKM\x00" +
+	"\x09KNNAKP\x00\x0cKRORKWWTKY\x00\x0fKZAZLAAOLBBNLCCALIIELKKALRBRLSSOLTTU" +
+	"LUUXLVVALYBYMAARMCCOMDDAMENEMFAFMGDGMHHLMIIDMKKDMLLIMMMRMNNGMOACMPNPMQTQ" +
+	"MRRTMSSRMTLTMUUSMVDVMWWIMXEXMYYSMZOZNAAMNCCLNEERNFFKNGGANHHBNIICNLLDNOOR" +
+	"NPPLNQ\x00\x1eNRRUNTTZNUIUNZZLOMMNPAANPCCIPEERPFYFPGNGPHHLPKAKPLOLPM\x00" +
+	"\x12PNCNPRRIPSSEPTRTPUUSPWLWPYRYPZCZQAATQMMMQNNNQOOOQPPPQQQQQRRRQSSSQTTT" +
+	"QU\x00\x03QVVVQWWWQXXXQYYYQZZZREEURHHOROOURS\x00\x15RUUSRWWASAAUSBLBSCYC" +
+	"SDDNSEWESGGPSHHNSIVNSJJMSKVKSLLESMMRSNENSOOMSRURSSSDSTTPSUUNSVLVSXXMSYYR" +
+	"SZWZTAAATCCATDCDTF\x00\x18TGGOTHHATJJKTKKLTLLSTMKMTNUNTOONTPMPTRURTTTOTV" +
+	"UVTWWNTZZAUAKRUGGAUK  UMMIUN  USSAUYRYUZZBVAATVCCTVDDRVEENVGGBVIIRVNNMVU" +
+	"UTWFLFWKAKWSSMXAAAXBBBXCCCXDDDXEEEXFFFXGGGXHHHXIIIXJJJXKKKXLLLXMMMXNNNXO" +
+	"OOXPPPXQQQXRRRXSSSXTTTXUUUXVVVXWWWXXXXXYYYXZZZYDMDYEEMYT\x00\x1bYUUGZAAF" +
+	"ZMMBZRARZWWEZZZZ\xff\xff\xff\xff"
+
+// altRegionISO3 holds a list of 3-letter region codes that cannot be
+// mapped to 2-letter codes using the default algorithm. This is a short list.
+const altRegionISO3 string = "SCGQUUSGSCOMPRKCYMSPMSRBATFMYTATN"
+
+// altRegionIDs holds a list of regionIDs the positions of which match those
+// of the 3-letter ISO codes in altRegionISO3.
+// Size: 22 bytes, 11 elements
+var altRegionIDs = [11]uint16{
+	0x0057, 0x0070, 0x0088, 0x00a8, 0x00aa, 0x00ad, 0x00ea, 0x0105,
+	0x0121, 0x015f, 0x00dc,
+}
+
+// Size: 80 bytes, 20 elements
+var regionOldMap = [20]FromTo{
+	0:  {From: 0x44, To: 0xc4},
+	1:  {From: 0x58, To: 0xa7},
+	2:  {From: 0x5f, To: 0x60},
+	3:  {From: 0x66, To: 0x3b},
+	4:  {From: 0x79, To: 0x78},
+	5:  {From: 0x93, To: 0x37},
+	6:  {From: 0xa3, To: 0x133},
+	7:  {From: 0xc1, To: 0x133},
+	8:  {From: 0xd7, To: 0x13f},
+	9:  {From: 0xdc, To: 0x2b},
+	10: {From: 0xef, To: 0x133},
+	11: {From: 0xf2, To: 0xe2},
+	12: {From: 0xfc, To: 0x70},
+	13: {From: 0x103, To: 0x164},
+	14: {From: 0x12a, To: 0x126},
+	15: {From: 0x132, To: 0x7b},
+	16: {From: 0x13a, To: 0x13e},
+	17: {From: 0x141, To: 0x133},
+	18: {From: 0x15d, To: 0x15e},
+	19: {From: 0x163, To: 0x4b},
+}
+
+// m49 maps regionIDs to UN.M49 codes. The first isoRegionOffset entries are
+// codes indicating collections of regions.
+// Size: 716 bytes, 358 elements
+var m49 = [358]int16{
+	// Entry 0 - 3F
+	0, 1, 2, 3, 5, 9, 11, 13,
+	14, 15, 17, 18, 19, 21, 29, 30,
+	34, 35, 39, 53, 54, 57, 61, 142,
+	143, 145, 150, 151, 154, 155, 202, 419,
+	958, 0, 20, 784, 4, 28, 660, 8,
+	51, 530, 24, 10, 32, 16, 40, 36,
+	533, 248, 31, 70, 52, 50, 56, 854,
+	100, 48, 108, 204, 652, 60, 96, 68,
+	// Entry 40 - 7F
+	535, 76, 44, 64, 104, 74, 72, 112,
+	84, 124, 166, 180, 140, 178, 756, 384,
+	184, 152, 120, 156, 170, 0, 188, 891,
+	296, 192, 132, 531, 162, 196, 203, 278,
+	276, 0, 262, 208, 212, 214, 204, 12,
+	0, 218, 233, 818, 732, 232, 724, 231,
+	967, 0, 246, 242, 238, 583, 234, 0,
+	250, 249, 266, 826, 308, 268, 254, 831,
+	// Entry 80 - BF
+	288, 292, 304, 270, 324, 312, 226, 300,
+	239, 320, 316, 624, 328, 344, 334, 340,
+	191, 332, 348, 854, 0, 360, 372, 376,
+	833, 356, 86, 368, 364, 352, 380, 832,
+	388, 400, 392, 581, 404, 417, 116, 296,
+	174, 659, 408, 410, 414, 136, 398, 418,
+	422, 662, 438, 144, 430, 426, 440, 442,
+	428, 434, 504, 492, 498, 499, 663, 450,
+	// Entry C0 - FF
+	584, 581, 807, 466, 104, 496, 446, 580,
+	474, 478, 500, 470, 480, 462, 454, 484,
+	458, 508, 516, 540, 562, 574, 566, 548,
+	558, 528, 578, 524, 10, 520, 536, 570,
+	554, 512, 591, 0, 604, 258, 598, 608,
+	586, 616, 666, 612, 630, 275, 620, 581,
+	585, 600, 591, 634, 959, 960, 961, 962,
+	963, 964, 965, 966, 967, 968, 969, 970,
+	// Entry 100 - 13F
+	971, 972, 638, 716, 642, 688, 643, 646,
+	682, 90, 690, 729, 752, 702, 654, 705,
+	744, 703, 694, 674, 686, 706, 740, 728,
+	678, 810, 222, 534, 760, 748, 0, 796,
+	148, 260, 768, 764, 762, 772, 626, 795,
+	788, 776, 626, 792, 780, 798, 158, 834,
+	804, 800, 826, 581, 0, 840, 858, 860,
+	336, 670, 704, 862, 92, 850, 704, 548,
+	// Entry 140 - 17F
+	876, 581, 882, 973, 974, 975, 976, 977,
+	978, 979, 980, 981, 982, 983, 984, 985,
+	986, 987, 988, 989, 990, 991, 992, 993,
+	994, 995, 996, 997, 998, 720, 887, 175,
+	891, 710, 894, 180, 716, 999,
+}
+
+// m49Index gives indexes into fromM49 based on the three most significant bits
+// of a 10-bit UN.M49 code. To search an UN.M49 code in fromM49, search in
+//    fromM49[m49Index[msb39(code)]:m49Index[msb3(code)+1]]
+// for an entry where the first 7 bits match the 7 lsb of the UN.M49 code.
+// The region code is stored in the 9 lsb of the indexed value.
+// Size: 18 bytes, 9 elements
+var m49Index = [9]int16{
+	0, 59, 108, 143, 181, 220, 259, 291,
+	333,
+}
+
+// fromM49 contains entries to map UN.M49 codes to regions. See m49Index for details.
+// Size: 666 bytes, 333 elements
+var fromM49 = [333]uint16{
+	// Entry 0 - 3F
+	0x0201, 0x0402, 0x0603, 0x0824, 0x0a04, 0x1027, 0x1205, 0x142b,
+	0x1606, 0x1867, 0x1a07, 0x1c08, 0x1e09, 0x202d, 0x220a, 0x240b,
+	0x260c, 0x2822, 0x2a0d, 0x302a, 0x3825, 0x3a0e, 0x3c0f, 0x3e32,
+	0x402c, 0x4410, 0x4611, 0x482f, 0x4e12, 0x502e, 0x5842, 0x6039,
+	0x6435, 0x6628, 0x6834, 0x6a13, 0x6c14, 0x7036, 0x7215, 0x783d,
+	0x7a16, 0x8043, 0x883f, 0x8c33, 0x9046, 0x9445, 0x9841, 0xa848,
+	0xac9a, 0xb509, 0xb93c, 0xc03e, 0xc838, 0xd0c4, 0xd83a, 0xe047,
+	0xe8a6, 0xf052, 0xf849, 0x085a, 0x10ad, 0x184c, 0x1c17, 0x1e18,
+	// Entry 40 - 7F
+	0x20b3, 0x2219, 0x2920, 0x2c1a, 0x2e1b, 0x3051, 0x341c, 0x361d,
+	0x3853, 0x3d2e, 0x445c, 0x4c4a, 0x5454, 0x5ca8, 0x5f5f, 0x644d,
+	0x684b, 0x7050, 0x7856, 0x7e90, 0x8059, 0x885d, 0x941e, 0x965e,
+	0x983b, 0xa063, 0xa864, 0xac65, 0xb469, 0xbd1a, 0xc486, 0xcc6f,
+	0xce6f, 0xd06d, 0xd26a, 0xd476, 0xdc74, 0xde88, 0xe473, 0xec72,
+	0xf031, 0xf279, 0xf478, 0xfc7e, 0x04e5, 0x0921, 0x0c62, 0x147a,
+	0x187d, 0x1c83, 0x26ed, 0x2860, 0x2c5f, 0x3060, 0x4080, 0x4881,
+	0x50a7, 0x5887, 0x6082, 0x687c, 0x7085, 0x788a, 0x8089, 0x8884,
+	// Entry 80 - BF
+	0x908c, 0x9891, 0x9c8e, 0xa138, 0xa88f, 0xb08d, 0xb892, 0xc09d,
+	0xc899, 0xd095, 0xd89c, 0xe09b, 0xe896, 0xf097, 0xf89e, 0x004f,
+	0x08a0, 0x10a2, 0x1cae, 0x20a1, 0x28a4, 0x30aa, 0x34ab, 0x3cac,
+	0x42a5, 0x44af, 0x461f, 0x4cb0, 0x54b5, 0x58b8, 0x5cb4, 0x64b9,
+	0x6cb2, 0x70b6, 0x74b7, 0x7cc6, 0x84bf, 0x8cce, 0x94d0, 0x9ccd,
+	0xa4c3, 0xaccb, 0xb4c8, 0xbcc9, 0xc0cc, 0xc8cf, 0xd8bb, 0xe0c5,
+	0xe4bc, 0xe6bd, 0xe8ca, 0xf0ba, 0xf8d1, 0x00e1, 0x08d2, 0x10dd,
+	0x18db, 0x20d9, 0x2429, 0x265b, 0x2a30, 0x2d1b, 0x2e40, 0x30de,
+	// Entry C0 - FF
+	0x38d3, 0x493f, 0x54e0, 0x5cd8, 0x64d4, 0x6cd6, 0x74df, 0x7cd5,
+	0x84da, 0x88c7, 0x8b33, 0x8e75, 0x90c0, 0x92f0, 0x94e8, 0x9ee2,
+	0xace6, 0xb0f1, 0xb8e4, 0xc0e7, 0xc8eb, 0xd0e9, 0xd8ee, 0xe08b,
+	0xe526, 0xecec, 0xf4f3, 0xfd02, 0x0504, 0x0706, 0x0d07, 0x183c,
+	0x1d0e, 0x26a9, 0x2826, 0x2cb1, 0x2ebe, 0x34ea, 0x3d39, 0x4513,
+	0x4d18, 0x5508, 0x5d14, 0x6105, 0x650a, 0x6d12, 0x7d0d, 0x7f11,
+	0x813e, 0x830f, 0x8515, 0x8d61, 0x9964, 0xa15d, 0xa86e, 0xb117,
+	0xb30b, 0xb86c, 0xc10b, 0xc916, 0xd110, 0xd91d, 0xe10c, 0xe84e,
+	// Entry 100 - 13F
+	0xf11c, 0xf524, 0xf923, 0x0122, 0x0925, 0x1129, 0x192c, 0x2023,
+	0x2928, 0x312b, 0x3727, 0x391f, 0x3d2d, 0x4131, 0x4930, 0x4ec2,
+	0x5519, 0x646b, 0x747b, 0x7e7f, 0x809f, 0x8298, 0x852f, 0x9135,
+	0xa53d, 0xac37, 0xb536, 0xb937, 0xbd3b, 0xd940, 0xe542, 0xed5e,
+	0xef5e, 0xf657, 0xfd62, 0x7c20, 0x7ef4, 0x80f5, 0x82f6, 0x84f7,
+	0x86f8, 0x88f9, 0x8afa, 0x8cfb, 0x8e70, 0x90fd, 0x92fe, 0x94ff,
+	0x9700, 0x9901, 0x9b43, 0x9d44, 0x9f45, 0xa146, 0xa347, 0xa548,
+	0xa749, 0xa94a, 0xab4b, 0xad4c, 0xaf4d, 0xb14e, 0xb34f, 0xb550,
+	// Entry 140 - 17F
+	0xb751, 0xb952, 0xbb53, 0xbd54, 0xbf55, 0xc156, 0xc357, 0xc558,
+	0xc759, 0xc95a, 0xcb5b, 0xcd5c, 0xcf65,
+}
+
+// Size: 1995 bytes
+var variantIndex = map[string]uint8{
+	"1606nict": 0x0,
+	"1694acad": 0x1,
+	"1901":     0x2,
+	"1959acad": 0x3,
+	"1994":     0x60,
+	"1996":     0x4,
+	"abl1943":  0x5,
+	"akuapem":  0x6,
+	"alalc97":  0x62,
+	"aluku":    0x7,
+	"ao1990":   0x8,
+	"aranes":   0x9,
+	"arevela":  0xa,
+	"arevmda":  0xb,
+	"asante":   0xc,
+	"auvern":   0xd,
+	"baku1926": 0xe,
+	"balanka":  0xf,
+	"barla":    0x10,
+	"basiceng": 0x11,
+	"bauddha":  0x12,
+	"biscayan": 0x13,
+	"biske":    0x5b,
+	"bohoric":  0x14,
+	"boont":    0x15,
+	"bornholm": 0x16,
+	"cisaup":   0x17,
+	"colb1945": 0x18,
+	"cornu":    0x19,
+	"creiss":   0x1a,
+	"dajnko":   0x1b,
+	"ekavsk":   0x1c,
+	"emodeng":  0x1d,
+	"fonipa":   0x63,
+	"fonkirsh": 0x64,
+	"fonnapa":  0x65,
+	"fonupa":   0x66,
+	"fonxsamp": 0x67,
+	"gascon":   0x1e,
+	"grclass":  0x1f,
+	"grital":   0x20,
+	"grmistr":  0x21,
+	"hepburn":  0x22,
+	"heploc":   0x61,
+	"hognorsk": 0x23,
+	"hsistemo": 0x24,
+	"ijekavsk": 0x25,
+	"itihasa":  0x26,
+	"ivanchov": 0x27,
+	"jauer":    0x28,
+	"jyutping": 0x29,
+	"kkcor":    0x2a,
+	"kociewie": 0x2b,
+	"kscor":    0x2c,
+	"laukika":  0x2d,
+	"lemosin":  0x2e,
+	"lengadoc": 0x2f,
+	"lipaw":    0x5c,
+	"luna1918": 0x30,
+	"metelko":  0x31,
+	"monoton":  0x32,
+	"ndyuka":   0x33,
+	"nedis":    0x34,
+	"newfound": 0x35,
+	"nicard":   0x36,
+	"njiva":    0x5d,
+	"nulik":    0x37,
+	"osojs":    0x5e,
+	"oxendict": 0x38,
+	"pahawh2":  0x39,
+	"pahawh3":  0x3a,
+	"pahawh4":  0x3b,
+	"pamaka":   0x3c,
+	"peano":    0x3d,
+	"petr1708": 0x3e,
+	"pinyin":   0x3f,
+	"polyton":  0x40,
+	"provenc":  0x41,
+	"puter":    0x42,
+	"rigik":    0x43,
+	"rozaj":    0x44,
+	"rumgr":    0x45,
+	"scotland": 0x46,
+	"scouse":   0x47,
+	"simple":   0x68,
+	"solba":    0x5f,
+	"sotav":    0x48,
+	"spanglis": 0x49,
+	"surmiran": 0x4a,
+	"sursilv":  0x4b,
+	"sutsilv":  0x4c,
+	"tarask":   0x4d,
+	"tongyong": 0x4e,
+	"tunumiit": 0x4f,
+	"uccor":    0x50,
+	"ucrcor":   0x51,
+	"ulster":   0x52,
+	"unifon":   0x53,
+	"vaidika":  0x54,
+	"valencia": 0x55,
+	"vallader": 0x56,
+	"vecdruka": 0x57,
+	"vivaraup": 0x58,
+	"wadegile": 0x59,
+	"xsistemo": 0x5a,
+}
+
+// variantNumSpecialized is the number of specialized variants in variants.
+const variantNumSpecialized = 98
+
+// nRegionGroups is the number of region groups.
+const nRegionGroups = 33
+
+type likelyLangRegion struct {
+	lang   uint16
+	region uint16
+}
+
+// likelyScript is a lookup table, indexed by scriptID, for the most likely
+// languages and regions given a script.
+// Size: 1012 bytes, 253 elements
+var likelyScript = [253]likelyLangRegion{
+	1:   {lang: 0x14e, region: 0x84},
+	3:   {lang: 0x2a2, region: 0x106},
+	4:   {lang: 0x1f, region: 0x99},
+	5:   {lang: 0x3a, region: 0x6b},
+	7:   {lang: 0x3b, region: 0x9c},
+	8:   {lang: 0x1d7, region: 0x28},
+	9:   {lang: 0x13, region: 0x9c},
+	10:  {lang: 0x5b, region: 0x95},
+	11:  {lang: 0x60, region: 0x52},
+	12:  {lang: 0xb9, region: 0xb4},
+	13:  {lang: 0x63, region: 0x95},
+	14:  {lang: 0xa5, region: 0x35},
+	15:  {lang: 0x3e9, region: 0x99},
+	17:  {lang: 0x529, region: 0x12e},
+	18:  {lang: 0x3b1, region: 0x99},
+	19:  {lang: 0x15e, region: 0x78},
+	20:  {lang: 0xc2, region: 0x95},
+	21:  {lang: 0x9d, region: 0xe7},
+	22:  {lang: 0xdb, region: 0x35},
+	23:  {lang: 0xf3, region: 0x49},
+	24:  {lang: 0x4f0, region: 0x12b},
+	25:  {lang: 0xe7, region: 0x13e},
+	26:  {lang: 0xe5, region: 0x135},
+	29:  {lang: 0xf1, region: 0x6b},
+	31:  {lang: 0x1a0, region: 0x5d},
+	32:  {lang: 0x3e2, region: 0x106},
+	34:  {lang: 0x1be, region: 0x99},
+	38:  {lang: 0x15e, region: 0x78},
+	41:  {lang: 0x133, region: 0x6b},
+	42:  {lang: 0x431, region: 0x27},
+	44:  {lang: 0x27, region: 0x6f},
+	46:  {lang: 0x210, region: 0x7d},
+	47:  {lang: 0xfe, region: 0x38},
+	49:  {lang: 0x19b, region: 0x99},
+	50:  {lang: 0x19e, region: 0x130},
+	51:  {lang: 0x3e9, region: 0x99},
+	52:  {lang: 0x136, region: 0x87},
+	53:  {lang: 0x1a4, region: 0x99},
+	54:  {lang: 0x39d, region: 0x99},
+	55:  {lang: 0x529, region: 0x12e},
+	56:  {lang: 0x254, region: 0xab},
+	57:  {lang: 0x529, region: 0x53},
+	58:  {lang: 0x1cb, region: 0xe7},
+	59:  {lang: 0x529, region: 0x53},
+	60:  {lang: 0x529, region: 0x12e},
+	61:  {lang: 0x2fd, region: 0x9b},
+	62:  {lang: 0x1bc, region: 0x97},
+	63:  {lang: 0x200, region: 0xa2},
+	64:  {lang: 0x1c5, region: 0x12b},
+	65:  {lang: 0x1ca, region: 0xaf},
+	68:  {lang: 0x1d5, region: 0x92},
+	70:  {lang: 0x142, region: 0x9e},
+	71:  {lang: 0x254, region: 0xab},
+	72:  {lang: 0x20e, region: 0x95},
+	73:  {lang: 0x200, region: 0xa2},
+	75:  {lang: 0x135, region: 0xc4},
+	76:  {lang: 0x200, region: 0xa2},
+	77:  {lang: 0x3bb, region: 0xe8},
+	78:  {lang: 0x24a, region: 0xa6},
+	79:  {lang: 0x3fa, region: 0x99},
+	82:  {lang: 0x251, region: 0x99},
+	83:  {lang: 0x254, region: 0xab},
+	85:  {lang: 0x88, region: 0x99},
+	86:  {lang: 0x370, region: 0x123},
+	87:  {lang: 0x2b8, region: 0xaf},
+	92:  {lang: 0x29f, region: 0x99},
+	93:  {lang: 0x2a8, region: 0x99},
+	94:  {lang: 0x28f, region: 0x87},
+	95:  {lang: 0x1a0, region: 0x87},
+	96:  {lang: 0x2ac, region: 0x53},
+	98:  {lang: 0x4f4, region: 0x12b},
+	99:  {lang: 0x4f5, region: 0x12b},
+	100: {lang: 0x1be, region: 0x99},
+	102: {lang: 0x337, region: 0x9c},
+	103: {lang: 0x4f7, region: 0x53},
+	104: {lang: 0xa9, region: 0x53},
+	107: {lang: 0x2e8, region: 0x112},
+	108: {lang: 0x4f8, region: 0x10b},
+	109: {lang: 0x4f8, region: 0x10b},
+	110: {lang: 0x304, region: 0x99},
+	111: {lang: 0x31b, region: 0x99},
+	112: {lang: 0x30b, region: 0x53},
+	114: {lang: 0x31e, region: 0x35},
+	115: {lang: 0x30e, region: 0x99},
+	116: {lang: 0x414, region: 0xe8},
+	117: {lang: 0x331, region: 0xc4},
+	119: {lang: 0x4f9, region: 0x108},
+	120: {lang: 0x3b, region: 0xa1},
+	121: {lang: 0x353, region: 0xdb},
+	124: {lang: 0x2d0, region: 0x84},
+	125: {lang: 0x52a, region: 0x53},
+	126: {lang: 0x403, region: 0x96},
+	127: {lang: 0x3ee, region: 0x99},
+	128: {lang: 0x39b, region: 0xc5},
+	129: {lang: 0x395, region: 0x99},
+	130: {lang: 0x399, region: 0x135},
+	131: {lang: 0x429, region: 0x115},
+	132: {lang: 0x3b, region: 0x11c},
+	133: {lang: 0xfd, region: 0xc4},
+	134: {lang: 0x27d, region: 0x106},
+	135: {lang: 0x2c9, region: 0x53},
+	136: {lang: 0x39f, region: 0x9c},
+	137: {lang: 0x39f, region: 0x53},
+	139: {lang: 0x3ad, region: 0xb0},
+	141: {lang: 0x1c6, region: 0x53},
+	142: {lang: 0x4fd, region: 0x9c},
+	193: {lang: 0x3cb, region: 0x95},
+	196: {lang: 0x372, region: 0x10c},
+	197: {lang: 0x420, region: 0x97},
+	199: {lang: 0x4ff, region: 0x15e},
+	200: {lang: 0x3f0, region: 0x99},
+	201: {lang: 0x45, region: 0x135},
+	202: {lang: 0x139, region: 0x7b},
+	203: {lang: 0x3e9, region: 0x99},
+	205: {lang: 0x3e9, region: 0x99},
+	206: {lang: 0x3fa, region: 0x99},
+	207: {lang: 0x40c, region: 0xb3},
+	210: {lang: 0x433, region: 0x99},
+	211: {lang: 0xef, region: 0xc5},
+	212: {lang: 0x43e, region: 0x95},
+	213: {lang: 0x44d, region: 0x35},
+	214: {lang: 0x44e, region: 0x9b},
+	218: {lang: 0x45a, region: 0xe7},
+	219: {lang: 0x11a, region: 0x99},
+	220: {lang: 0x45e, region: 0x53},
+	221: {lang: 0x232, region: 0x53},
+	222: {lang: 0x450, region: 0x99},
+	223: {lang: 0x4a5, region: 0x53},
+	224: {lang: 0x9f, region: 0x13e},
+	225: {lang: 0x461, region: 0x99},
+	227: {lang: 0x528, region: 0xba},
+	228: {lang: 0x153, region: 0xe7},
+	229: {lang: 0x128, region: 0xcd},
+	230: {lang: 0x46b, region: 0x123},
+	231: {lang: 0xa9, region: 0x53},
+	232: {lang: 0x2ce, region: 0x99},
+	234: {lang: 0x4ad, region: 0x11c},
+	235: {lang: 0x4be, region: 0xb4},
+	237: {lang: 0x1ce, region: 0x99},
+	240: {lang: 0x3a9, region: 0x9c},
+	241: {lang: 0x22, region: 0x9b},
+	243: {lang: 0x1ea, region: 0x53},
+	244: {lang: 0xef, region: 0xc5},
+}
+
+type likelyScriptRegion struct {
+	region uint16
+	script uint8
+	flags  uint8
+}
+
+// likelyLang is a lookup table, indexed by langID, for the most likely
+// scripts and regions given incomplete information. If more entries exist for a
+// given language, region and script are the index and size respectively
+// of the list in likelyLangList.
+// Size: 5320 bytes, 1330 elements
+var likelyLang = [1330]likelyScriptRegion{
+	0:    {region: 0x135, script: 0x5a, flags: 0x0},
+	1:    {region: 0x6f, script: 0x5a, flags: 0x0},
+	2:    {region: 0x165, script: 0x5a, flags: 0x0},
+	3:    {region: 0x165, script: 0x5a, flags: 0x0},
+	4:    {region: 0x165, script: 0x5a, flags: 0x0},
+	5:    {region: 0x7d, script: 0x20, flags: 0x0},
+	6:    {region: 0x165, script: 0x5a, flags: 0x0},
+	7:    {region: 0x165, script: 0x20, flags: 0x0},
+	8:    {region: 0x80, script: 0x5a, flags: 0x0},
+	9:    {region: 0x165, script: 0x5a, flags: 0x0},
+	10:   {region: 0x165, script: 0x5a, flags: 0x0},
+	11:   {region: 0x165, script: 0x5a, flags: 0x0},
+	12:   {region: 0x95, script: 0x5a, flags: 0x0},
+	13:   {region: 0x131, script: 0x5a, flags: 0x0},
+	14:   {region: 0x80, script: 0x5a, flags: 0x0},
+	15:   {region: 0x165, script: 0x5a, flags: 0x0},
+	16:   {region: 0x165, script: 0x5a, flags: 0x0},
+	17:   {region: 0x106, script: 0x20, flags: 0x0},
+	18:   {region: 0x165, script: 0x5a, flags: 0x0},
+	19:   {region: 0x9c, script: 0x9, flags: 0x0},
+	20:   {region: 0x128, script: 0x5, flags: 0x0},
+	21:   {region: 0x165, script: 0x5a, flags: 0x0},
+	22:   {region: 0x161, script: 0x5a, flags: 0x0},
+	23:   {region: 0x165, script: 0x5a, flags: 0x0},
+	24:   {region: 0x165, script: 0x5a, flags: 0x0},
+	25:   {region: 0x165, script: 0x5a, flags: 0x0},
+	26:   {region: 0x165, script: 0x5a, flags: 0x0},
+	27:   {region: 0x165, script: 0x5a, flags: 0x0},
+	28:   {region: 0x52, script: 0x5a, flags: 0x0},
+	29:   {region: 0x165, script: 0x5a, flags: 0x0},
+	30:   {region: 0x165, script: 0x5a, flags: 0x0},
+	31:   {region: 0x99, script: 0x4, flags: 0x0},
+	32:   {region: 0x165, script: 0x5a, flags: 0x0},
+	33:   {region: 0x80, script: 0x5a, flags: 0x0},
+	34:   {region: 0x9b, script: 0xf1, flags: 0x0},
+	35:   {region: 0x165, script: 0x5a, flags: 0x0},
+	36:   {region: 0x165, script: 0x5a, flags: 0x0},
+	37:   {region: 0x14d, script: 0x5a, flags: 0x0},
+	38:   {region: 0x106, script: 0x20, flags: 0x0},
+	39:   {region: 0x6f, script: 0x2c, flags: 0x0},
+	40:   {region: 0x165, script: 0x5a, flags: 0x0},
+	41:   {region: 0x165, script: 0x5a, flags: 0x0},
+	42:   {region: 0xd6, script: 0x5a, flags: 0x0},
+	43:   {region: 0x165, script: 0x5a, flags: 0x0},
+	45:   {region: 0x165, script: 0x5a, flags: 0x0},
+	46:   {region: 0x165, script: 0x5a, flags: 0x0},
+	47:   {region: 0x165, script: 0x5a, flags: 0x0},
+	48:   {region: 0x165, script: 0x5a, flags: 0x0},
+	49:   {region: 0x165, script: 0x5a, flags: 0x0},
+	50:   {region: 0x165, script: 0x5a, flags: 0x0},
+	51:   {region: 0x95, script: 0x5a, flags: 0x0},
+	52:   {region: 0x165, script: 0x5, flags: 0x0},
+	53:   {region: 0x122, script: 0x5, flags: 0x0},
+	54:   {region: 0x165, script: 0x5a, flags: 0x0},
+	55:   {region: 0x165, script: 0x5a, flags: 0x0},
+	56:   {region: 0x165, script: 0x5a, flags: 0x0},
+	57:   {region: 0x165, script: 0x5a, flags: 0x0},
+	58:   {region: 0x6b, script: 0x5, flags: 0x0},
+	59:   {region: 0x0, script: 0x3, flags: 0x1},
+	60:   {region: 0x165, script: 0x5a, flags: 0x0},
+	61:   {region: 0x51, script: 0x5a, flags: 0x0},
+	62:   {region: 0x3f, script: 0x5a, flags: 0x0},
+	63:   {region: 0x67, script: 0x5, flags: 0x0},
+	65:   {region: 0xba, script: 0x5, flags: 0x0},
+	66:   {region: 0x6b, script: 0x5, flags: 0x0},
+	67:   {region: 0x99, script: 0xe, flags: 0x0},
+	68:   {region: 0x12f, script: 0x5a, flags: 0x0},
+	69:   {region: 0x135, script: 0xc9, flags: 0x0},
+	70:   {region: 0x165, script: 0x5a, flags: 0x0},
+	71:   {region: 0x165, script: 0x5a, flags: 0x0},
+	72:   {region: 0x6e, script: 0x5a, flags: 0x0},
+	73:   {region: 0x165, script: 0x5a, flags: 0x0},
+	74:   {region: 0x165, script: 0x5a, flags: 0x0},
+	75:   {region: 0x49, script: 0x5a, flags: 0x0},
+	76:   {region: 0x165, script: 0x5a, flags: 0x0},
+	77:   {region: 0x106, script: 0x20, flags: 0x0},
+	78:   {region: 0x165, script: 0x5, flags: 0x0},
+	79:   {region: 0x165, script: 0x5a, flags: 0x0},
+	80:   {region: 0x165, script: 0x5a, flags: 0x0},
+	81:   {region: 0x165, script: 0x5a, flags: 0x0},
+	82:   {region: 0x99, script: 0x22, flags: 0x0},
+	83:   {region: 0x165, script: 0x5a, flags: 0x0},
+	84:   {region: 0x165, script: 0x5a, flags: 0x0},
+	85:   {region: 0x165, script: 0x5a, flags: 0x0},
+	86:   {region: 0x3f, script: 0x5a, flags: 0x0},
+	87:   {region: 0x165, script: 0x5a, flags: 0x0},
+	88:   {region: 0x3, script: 0x5, flags: 0x1},
+	89:   {region: 0x106, script: 0x20, flags: 0x0},
+	90:   {region: 0xe8, script: 0x5, flags: 0x0},
+	91:   {region: 0x95, script: 0x5a, flags: 0x0},
+	92:   {region: 0xdb, script: 0x22, flags: 0x0},
+	93:   {region: 0x2e, script: 0x5a, flags: 0x0},
+	94:   {region: 0x52, script: 0x5a, flags: 0x0},
+	95:   {region: 0x165, script: 0x5a, flags: 0x0},
+	96:   {region: 0x52, script: 0xb, flags: 0x0},
+	97:   {region: 0x165, script: 0x5a, flags: 0x0},
+	98:   {region: 0x165, script: 0x5a, flags: 0x0},
+	99:   {region: 0x95, script: 0x5a, flags: 0x0},
+	100:  {region: 0x165, script: 0x5a, flags: 0x0},
+	101:  {region: 0x52, script: 0x5a, flags: 0x0},
+	102:  {region: 0x165, script: 0x5a, flags: 0x0},
+	103:  {region: 0x165, script: 0x5a, flags: 0x0},
+	104:  {region: 0x165, script: 0x5a, flags: 0x0},
+	105:  {region: 0x165, script: 0x5a, flags: 0x0},
+	106:  {region: 0x4f, script: 0x5a, flags: 0x0},
+	107:  {region: 0x165, script: 0x5a, flags: 0x0},
+	108:  {region: 0x165, script: 0x5a, flags: 0x0},
+	109:  {region: 0x165, script: 0x5a, flags: 0x0},
+	110:  {region: 0x165, script: 0x2c, flags: 0x0},
+	111:  {region: 0x165, script: 0x5a, flags: 0x0},
+	112:  {region: 0x165, script: 0x5a, flags: 0x0},
+	113:  {region: 0x47, script: 0x20, flags: 0x0},
+	114:  {region: 0x165, script: 0x5a, flags: 0x0},
+	115:  {region: 0x165, script: 0x5a, flags: 0x0},
+	116:  {region: 0x10b, script: 0x5, flags: 0x0},
+	117:  {region: 0x162, script: 0x5a, flags: 0x0},
+	118:  {region: 0x165, script: 0x5a, flags: 0x0},
+	119:  {region: 0x95, script: 0x5a, flags: 0x0},
+	120:  {region: 0x165, script: 0x5a, flags: 0x0},
+	121:  {region: 0x12f, script: 0x5a, flags: 0x0},
+	122:  {region: 0x52, script: 0x5a, flags: 0x0},
+	123:  {region: 0x99, script: 0xde, flags: 0x0},
+	124:  {region: 0xe8, script: 0x5, flags: 0x0},
+	125:  {region: 0x99, script: 0x22, flags: 0x0},
+	126:  {region: 0x38, script: 0x20, flags: 0x0},
+	127:  {region: 0x99, script: 0x22, flags: 0x0},
+	128:  {region: 0xe8, script: 0x5, flags: 0x0},
+	129:  {region: 0x12b, script: 0x34, flags: 0x0},
+	131:  {region: 0x99, script: 0x22, flags: 0x0},
+	132:  {region: 0x165, script: 0x5a, flags: 0x0},
+	133:  {region: 0x99, script: 0x22, flags: 0x0},
+	134:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	135:  {region: 0x165, script: 0x5a, flags: 0x0},
+	136:  {region: 0x99, script: 0x22, flags: 0x0},
+	137:  {region: 0x165, script: 0x5a, flags: 0x0},
+	138:  {region: 0x13f, script: 0x5a, flags: 0x0},
+	139:  {region: 0x165, script: 0x5a, flags: 0x0},
+	140:  {region: 0x165, script: 0x5a, flags: 0x0},
+	141:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	142:  {region: 0x165, script: 0x5a, flags: 0x0},
+	143:  {region: 0xd6, script: 0x5a, flags: 0x0},
+	144:  {region: 0x165, script: 0x5a, flags: 0x0},
+	145:  {region: 0x165, script: 0x5a, flags: 0x0},
+	146:  {region: 0x165, script: 0x5a, flags: 0x0},
+	147:  {region: 0x165, script: 0x2c, flags: 0x0},
+	148:  {region: 0x99, script: 0x22, flags: 0x0},
+	149:  {region: 0x95, script: 0x5a, flags: 0x0},
+	150:  {region: 0x165, script: 0x5a, flags: 0x0},
+	151:  {region: 0x165, script: 0x5a, flags: 0x0},
+	152:  {region: 0x114, script: 0x5a, flags: 0x0},
+	153:  {region: 0x165, script: 0x5a, flags: 0x0},
+	154:  {region: 0x165, script: 0x5a, flags: 0x0},
+	155:  {region: 0x52, script: 0x5a, flags: 0x0},
+	156:  {region: 0x165, script: 0x5a, flags: 0x0},
+	157:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	158:  {region: 0x165, script: 0x5a, flags: 0x0},
+	159:  {region: 0x13e, script: 0xe0, flags: 0x0},
+	160:  {region: 0xc3, script: 0x5a, flags: 0x0},
+	161:  {region: 0x165, script: 0x5a, flags: 0x0},
+	162:  {region: 0x165, script: 0x5a, flags: 0x0},
+	163:  {region: 0xc3, script: 0x5a, flags: 0x0},
+	164:  {region: 0x165, script: 0x5a, flags: 0x0},
+	165:  {region: 0x35, script: 0xe, flags: 0x0},
+	166:  {region: 0x165, script: 0x5a, flags: 0x0},
+	167:  {region: 0x165, script: 0x5a, flags: 0x0},
+	168:  {region: 0x165, script: 0x5a, flags: 0x0},
+	169:  {region: 0x53, script: 0xe7, flags: 0x0},
+	170:  {region: 0x165, script: 0x5a, flags: 0x0},
+	171:  {region: 0x165, script: 0x5a, flags: 0x0},
+	172:  {region: 0x165, script: 0x5a, flags: 0x0},
+	173:  {region: 0x99, script: 0xe, flags: 0x0},
+	174:  {region: 0x165, script: 0x5a, flags: 0x0},
+	175:  {region: 0x9c, script: 0x5, flags: 0x0},
+	176:  {region: 0x165, script: 0x5a, flags: 0x0},
+	177:  {region: 0x4f, script: 0x5a, flags: 0x0},
+	178:  {region: 0x78, script: 0x5a, flags: 0x0},
+	179:  {region: 0x99, script: 0x22, flags: 0x0},
+	180:  {region: 0xe8, script: 0x5, flags: 0x0},
+	181:  {region: 0x99, script: 0x22, flags: 0x0},
+	182:  {region: 0x165, script: 0x5a, flags: 0x0},
+	183:  {region: 0x33, script: 0x5a, flags: 0x0},
+	184:  {region: 0x165, script: 0x5a, flags: 0x0},
+	185:  {region: 0xb4, script: 0xc, flags: 0x0},
+	186:  {region: 0x52, script: 0x5a, flags: 0x0},
+	187:  {region: 0x165, script: 0x2c, flags: 0x0},
+	188:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	189:  {region: 0x165, script: 0x5a, flags: 0x0},
+	190:  {region: 0xe8, script: 0x22, flags: 0x0},
+	191:  {region: 0x106, script: 0x20, flags: 0x0},
+	192:  {region: 0x15f, script: 0x5a, flags: 0x0},
+	193:  {region: 0x165, script: 0x5a, flags: 0x0},
+	194:  {region: 0x95, script: 0x5a, flags: 0x0},
+	195:  {region: 0x165, script: 0x5a, flags: 0x0},
+	196:  {region: 0x52, script: 0x5a, flags: 0x0},
+	197:  {region: 0x165, script: 0x5a, flags: 0x0},
+	198:  {region: 0x165, script: 0x5a, flags: 0x0},
+	199:  {region: 0x165, script: 0x5a, flags: 0x0},
+	200:  {region: 0x86, script: 0x5a, flags: 0x0},
+	201:  {region: 0x165, script: 0x5a, flags: 0x0},
+	202:  {region: 0x165, script: 0x5a, flags: 0x0},
+	203:  {region: 0x165, script: 0x5a, flags: 0x0},
+	204:  {region: 0x165, script: 0x5a, flags: 0x0},
+	205:  {region: 0x6d, script: 0x2c, flags: 0x0},
+	206:  {region: 0x165, script: 0x5a, flags: 0x0},
+	207:  {region: 0x165, script: 0x5a, flags: 0x0},
+	208:  {region: 0x52, script: 0x5a, flags: 0x0},
+	209:  {region: 0x165, script: 0x5a, flags: 0x0},
+	210:  {region: 0x165, script: 0x5a, flags: 0x0},
+	211:  {region: 0xc3, script: 0x5a, flags: 0x0},
+	212:  {region: 0x165, script: 0x5a, flags: 0x0},
+	213:  {region: 0x165, script: 0x5a, flags: 0x0},
+	214:  {region: 0x165, script: 0x5a, flags: 0x0},
+	215:  {region: 0x6e, script: 0x5a, flags: 0x0},
+	216:  {region: 0x165, script: 0x5a, flags: 0x0},
+	217:  {region: 0x165, script: 0x5a, flags: 0x0},
+	218:  {region: 0xd6, script: 0x5a, flags: 0x0},
+	219:  {region: 0x35, script: 0x16, flags: 0x0},
+	220:  {region: 0x106, script: 0x20, flags: 0x0},
+	221:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	222:  {region: 0x165, script: 0x5a, flags: 0x0},
+	223:  {region: 0x131, script: 0x5a, flags: 0x0},
+	224:  {region: 0x8a, script: 0x5a, flags: 0x0},
+	225:  {region: 0x75, script: 0x5a, flags: 0x0},
+	226:  {region: 0x106, script: 0x20, flags: 0x0},
+	227:  {region: 0x135, script: 0x5a, flags: 0x0},
+	228:  {region: 0x49, script: 0x5a, flags: 0x0},
+	229:  {region: 0x135, script: 0x1a, flags: 0x0},
+	230:  {region: 0xa6, script: 0x5, flags: 0x0},
+	231:  {region: 0x13e, script: 0x19, flags: 0x0},
+	232:  {region: 0x165, script: 0x5a, flags: 0x0},
+	233:  {region: 0x9b, script: 0x5, flags: 0x0},
+	234:  {region: 0x165, script: 0x5a, flags: 0x0},
+	235:  {region: 0x165, script: 0x5a, flags: 0x0},
+	236:  {region: 0x165, script: 0x5a, flags: 0x0},
+	237:  {region: 0x165, script: 0x5a, flags: 0x0},
+	238:  {region: 0x165, script: 0x5a, flags: 0x0},
+	239:  {region: 0xc5, script: 0xd3, flags: 0x0},
+	240:  {region: 0x78, script: 0x5a, flags: 0x0},
+	241:  {region: 0x6b, script: 0x1d, flags: 0x0},
+	242:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	243:  {region: 0x49, script: 0x17, flags: 0x0},
+	244:  {region: 0x130, script: 0x20, flags: 0x0},
+	245:  {region: 0x49, script: 0x17, flags: 0x0},
+	246:  {region: 0x49, script: 0x17, flags: 0x0},
+	247:  {region: 0x49, script: 0x17, flags: 0x0},
+	248:  {region: 0x49, script: 0x17, flags: 0x0},
+	249:  {region: 0x10a, script: 0x5a, flags: 0x0},
+	250:  {region: 0x5e, script: 0x5a, flags: 0x0},
+	251:  {region: 0xe9, script: 0x5a, flags: 0x0},
+	252:  {region: 0x49, script: 0x17, flags: 0x0},
+	253:  {region: 0xc4, script: 0x85, flags: 0x0},
+	254:  {region: 0x8, script: 0x2, flags: 0x1},
+	255:  {region: 0x106, script: 0x20, flags: 0x0},
+	256:  {region: 0x7b, script: 0x5a, flags: 0x0},
+	257:  {region: 0x63, script: 0x5a, flags: 0x0},
+	258:  {region: 0x165, script: 0x5a, flags: 0x0},
+	259:  {region: 0x165, script: 0x5a, flags: 0x0},
+	260:  {region: 0x165, script: 0x5a, flags: 0x0},
+	261:  {region: 0x165, script: 0x5a, flags: 0x0},
+	262:  {region: 0x135, script: 0x5a, flags: 0x0},
+	263:  {region: 0x106, script: 0x20, flags: 0x0},
+	264:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	265:  {region: 0x165, script: 0x5a, flags: 0x0},
+	266:  {region: 0x165, script: 0x5a, flags: 0x0},
+	267:  {region: 0x99, script: 0x5, flags: 0x0},
+	268:  {region: 0x165, script: 0x5a, flags: 0x0},
+	269:  {region: 0x60, script: 0x5a, flags: 0x0},
+	270:  {region: 0x165, script: 0x5a, flags: 0x0},
+	271:  {region: 0x49, script: 0x5a, flags: 0x0},
+	272:  {region: 0x165, script: 0x5a, flags: 0x0},
+	273:  {region: 0x165, script: 0x5a, flags: 0x0},
+	274:  {region: 0x165, script: 0x5a, flags: 0x0},
+	275:  {region: 0x165, script: 0x5, flags: 0x0},
+	276:  {region: 0x49, script: 0x5a, flags: 0x0},
+	277:  {region: 0x165, script: 0x5a, flags: 0x0},
+	278:  {region: 0x165, script: 0x5a, flags: 0x0},
+	279:  {region: 0xd4, script: 0x5a, flags: 0x0},
+	280:  {region: 0x4f, script: 0x5a, flags: 0x0},
+	281:  {region: 0x165, script: 0x5a, flags: 0x0},
+	282:  {region: 0x99, script: 0x5, flags: 0x0},
+	283:  {region: 0x165, script: 0x5a, flags: 0x0},
+	284:  {region: 0x165, script: 0x5a, flags: 0x0},
+	285:  {region: 0x165, script: 0x5a, flags: 0x0},
+	286:  {region: 0x165, script: 0x2c, flags: 0x0},
+	287:  {region: 0x60, script: 0x5a, flags: 0x0},
+	288:  {region: 0xc3, script: 0x5a, flags: 0x0},
+	289:  {region: 0xd0, script: 0x5a, flags: 0x0},
+	290:  {region: 0x165, script: 0x5a, flags: 0x0},
+	291:  {region: 0xdb, script: 0x22, flags: 0x0},
+	292:  {region: 0x52, script: 0x5a, flags: 0x0},
+	293:  {region: 0x165, script: 0x5a, flags: 0x0},
+	294:  {region: 0x165, script: 0x5a, flags: 0x0},
+	295:  {region: 0x165, script: 0x5a, flags: 0x0},
+	296:  {region: 0xcd, script: 0xe5, flags: 0x0},
+	297:  {region: 0x165, script: 0x5a, flags: 0x0},
+	298:  {region: 0x165, script: 0x5a, flags: 0x0},
+	299:  {region: 0x114, script: 0x5a, flags: 0x0},
+	300:  {region: 0x37, script: 0x5a, flags: 0x0},
+	301:  {region: 0x43, script: 0xe7, flags: 0x0},
+	302:  {region: 0x165, script: 0x5a, flags: 0x0},
+	303:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	304:  {region: 0x80, script: 0x5a, flags: 0x0},
+	305:  {region: 0xd6, script: 0x5a, flags: 0x0},
+	306:  {region: 0x9e, script: 0x5a, flags: 0x0},
+	307:  {region: 0x6b, script: 0x29, flags: 0x0},
+	308:  {region: 0x165, script: 0x5a, flags: 0x0},
+	309:  {region: 0xc4, script: 0x4b, flags: 0x0},
+	310:  {region: 0x87, script: 0x34, flags: 0x0},
+	311:  {region: 0x165, script: 0x5a, flags: 0x0},
+	312:  {region: 0x165, script: 0x5a, flags: 0x0},
+	313:  {region: 0xa, script: 0x2, flags: 0x1},
+	314:  {region: 0x165, script: 0x5a, flags: 0x0},
+	315:  {region: 0x165, script: 0x5a, flags: 0x0},
+	316:  {region: 0x1, script: 0x5a, flags: 0x0},
+	317:  {region: 0x165, script: 0x5a, flags: 0x0},
+	318:  {region: 0x6e, script: 0x5a, flags: 0x0},
+	319:  {region: 0x135, script: 0x5a, flags: 0x0},
+	320:  {region: 0x6a, script: 0x5a, flags: 0x0},
+	321:  {region: 0x165, script: 0x5a, flags: 0x0},
+	322:  {region: 0x9e, script: 0x46, flags: 0x0},
+	323:  {region: 0x165, script: 0x5a, flags: 0x0},
+	324:  {region: 0x165, script: 0x5a, flags: 0x0},
+	325:  {region: 0x6e, script: 0x5a, flags: 0x0},
+	326:  {region: 0x52, script: 0x5a, flags: 0x0},
+	327:  {region: 0x6e, script: 0x5a, flags: 0x0},
+	328:  {region: 0x9c, script: 0x5, flags: 0x0},
+	329:  {region: 0x165, script: 0x5a, flags: 0x0},
+	330:  {region: 0x165, script: 0x5a, flags: 0x0},
+	331:  {region: 0x165, script: 0x5a, flags: 0x0},
+	332:  {region: 0x165, script: 0x5a, flags: 0x0},
+	333:  {region: 0x86, script: 0x5a, flags: 0x0},
+	334:  {region: 0xc, script: 0x2, flags: 0x1},
+	335:  {region: 0x165, script: 0x5a, flags: 0x0},
+	336:  {region: 0xc3, script: 0x5a, flags: 0x0},
+	337:  {region: 0x72, script: 0x5a, flags: 0x0},
+	338:  {region: 0x10b, script: 0x5, flags: 0x0},
+	339:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	340:  {region: 0x10c, script: 0x5a, flags: 0x0},
+	341:  {region: 0x73, script: 0x5a, flags: 0x0},
+	342:  {region: 0x165, script: 0x5a, flags: 0x0},
+	343:  {region: 0x165, script: 0x5a, flags: 0x0},
+	344:  {region: 0x76, script: 0x5a, flags: 0x0},
+	345:  {region: 0x165, script: 0x5a, flags: 0x0},
+	346:  {region: 0x3b, script: 0x5a, flags: 0x0},
+	347:  {region: 0x165, script: 0x5a, flags: 0x0},
+	348:  {region: 0x165, script: 0x5a, flags: 0x0},
+	349:  {region: 0x165, script: 0x5a, flags: 0x0},
+	350:  {region: 0x78, script: 0x5a, flags: 0x0},
+	351:  {region: 0x135, script: 0x5a, flags: 0x0},
+	352:  {region: 0x78, script: 0x5a, flags: 0x0},
+	353:  {region: 0x60, script: 0x5a, flags: 0x0},
+	354:  {region: 0x60, script: 0x5a, flags: 0x0},
+	355:  {region: 0x52, script: 0x5, flags: 0x0},
+	356:  {region: 0x140, script: 0x5a, flags: 0x0},
+	357:  {region: 0x165, script: 0x5a, flags: 0x0},
+	358:  {region: 0x84, script: 0x5a, flags: 0x0},
+	359:  {region: 0x165, script: 0x5a, flags: 0x0},
+	360:  {region: 0xd4, script: 0x5a, flags: 0x0},
+	361:  {region: 0x9e, script: 0x5a, flags: 0x0},
+	362:  {region: 0xd6, script: 0x5a, flags: 0x0},
+	363:  {region: 0x165, script: 0x5a, flags: 0x0},
+	364:  {region: 0x10b, script: 0x5a, flags: 0x0},
+	365:  {region: 0xd9, script: 0x5a, flags: 0x0},
+	366:  {region: 0x96, script: 0x5a, flags: 0x0},
+	367:  {region: 0x80, script: 0x5a, flags: 0x0},
+	368:  {region: 0x165, script: 0x5a, flags: 0x0},
+	369:  {region: 0xbc, script: 0x5a, flags: 0x0},
+	370:  {region: 0x165, script: 0x5a, flags: 0x0},
+	371:  {region: 0x165, script: 0x5a, flags: 0x0},
+	372:  {region: 0x165, script: 0x5a, flags: 0x0},
+	373:  {region: 0x53, script: 0x3b, flags: 0x0},
+	374:  {region: 0x165, script: 0x5a, flags: 0x0},
+	375:  {region: 0x95, script: 0x5a, flags: 0x0},
+	376:  {region: 0x165, script: 0x5a, flags: 0x0},
+	377:  {region: 0x165, script: 0x5a, flags: 0x0},
+	378:  {region: 0x99, script: 0x22, flags: 0x0},
+	379:  {region: 0x165, script: 0x5a, flags: 0x0},
+	380:  {region: 0x9c, script: 0x5, flags: 0x0},
+	381:  {region: 0x7e, script: 0x5a, flags: 0x0},
+	382:  {region: 0x7b, script: 0x5a, flags: 0x0},
+	383:  {region: 0x165, script: 0x5a, flags: 0x0},
+	384:  {region: 0x165, script: 0x5a, flags: 0x0},
+	385:  {region: 0x165, script: 0x5a, flags: 0x0},
+	386:  {region: 0x165, script: 0x5a, flags: 0x0},
+	387:  {region: 0x165, script: 0x5a, flags: 0x0},
+	388:  {region: 0x165, script: 0x5a, flags: 0x0},
+	389:  {region: 0x6f, script: 0x2c, flags: 0x0},
+	390:  {region: 0x165, script: 0x5a, flags: 0x0},
+	391:  {region: 0xdb, script: 0x22, flags: 0x0},
+	392:  {region: 0x165, script: 0x5a, flags: 0x0},
+	393:  {region: 0xa7, script: 0x5a, flags: 0x0},
+	394:  {region: 0x165, script: 0x5a, flags: 0x0},
+	395:  {region: 0xe8, script: 0x5, flags: 0x0},
+	396:  {region: 0x165, script: 0x5a, flags: 0x0},
+	397:  {region: 0xe8, script: 0x5, flags: 0x0},
+	398:  {region: 0x165, script: 0x5a, flags: 0x0},
+	399:  {region: 0x165, script: 0x5a, flags: 0x0},
+	400:  {region: 0x6e, script: 0x5a, flags: 0x0},
+	401:  {region: 0x9c, script: 0x5, flags: 0x0},
+	402:  {region: 0x165, script: 0x5a, flags: 0x0},
+	403:  {region: 0x165, script: 0x2c, flags: 0x0},
+	404:  {region: 0xf1, script: 0x5a, flags: 0x0},
+	405:  {region: 0x165, script: 0x5a, flags: 0x0},
+	406:  {region: 0x165, script: 0x5a, flags: 0x0},
+	407:  {region: 0x165, script: 0x5a, flags: 0x0},
+	408:  {region: 0x165, script: 0x2c, flags: 0x0},
+	409:  {region: 0x165, script: 0x5a, flags: 0x0},
+	410:  {region: 0x99, script: 0x22, flags: 0x0},
+	411:  {region: 0x99, script: 0xe1, flags: 0x0},
+	412:  {region: 0x95, script: 0x5a, flags: 0x0},
+	413:  {region: 0xd9, script: 0x5a, flags: 0x0},
+	414:  {region: 0x130, script: 0x32, flags: 0x0},
+	415:  {region: 0x165, script: 0x5a, flags: 0x0},
+	416:  {region: 0xe, script: 0x2, flags: 0x1},
+	417:  {region: 0x99, script: 0xe, flags: 0x0},
+	418:  {region: 0x165, script: 0x5a, flags: 0x0},
+	419:  {region: 0x4e, script: 0x5a, flags: 0x0},
+	420:  {region: 0x99, script: 0x35, flags: 0x0},
+	421:  {region: 0x41, script: 0x5a, flags: 0x0},
+	422:  {region: 0x54, script: 0x5a, flags: 0x0},
+	423:  {region: 0x165, script: 0x5a, flags: 0x0},
+	424:  {region: 0x80, script: 0x5a, flags: 0x0},
+	425:  {region: 0x165, script: 0x5a, flags: 0x0},
+	426:  {region: 0x165, script: 0x5a, flags: 0x0},
+	427:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	428:  {region: 0x98, script: 0x5a, flags: 0x0},
+	429:  {region: 0x165, script: 0x5a, flags: 0x0},
+	430:  {region: 0xdb, script: 0x22, flags: 0x0},
+	431:  {region: 0x165, script: 0x5a, flags: 0x0},
+	432:  {region: 0x165, script: 0x5, flags: 0x0},
+	433:  {region: 0x49, script: 0x5a, flags: 0x0},
+	434:  {region: 0x165, script: 0x5, flags: 0x0},
+	435:  {region: 0x165, script: 0x5a, flags: 0x0},
+	436:  {region: 0x10, script: 0x3, flags: 0x1},
+	437:  {region: 0x165, script: 0x5a, flags: 0x0},
+	438:  {region: 0x53, script: 0x3b, flags: 0x0},
+	439:  {region: 0x165, script: 0x5a, flags: 0x0},
+	440:  {region: 0x135, script: 0x5a, flags: 0x0},
+	441:  {region: 0x24, script: 0x5, flags: 0x0},
+	442:  {region: 0x165, script: 0x5a, flags: 0x0},
+	443:  {region: 0x165, script: 0x2c, flags: 0x0},
+	444:  {region: 0x97, script: 0x3e, flags: 0x0},
+	445:  {region: 0x165, script: 0x5a, flags: 0x0},
+	446:  {region: 0x99, script: 0x22, flags: 0x0},
+	447:  {region: 0x165, script: 0x5a, flags: 0x0},
+	448:  {region: 0x73, script: 0x5a, flags: 0x0},
+	449:  {region: 0x165, script: 0x5a, flags: 0x0},
+	450:  {region: 0x165, script: 0x5a, flags: 0x0},
+	451:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	452:  {region: 0x165, script: 0x5a, flags: 0x0},
+	453:  {region: 0x12b, script: 0x40, flags: 0x0},
+	454:  {region: 0x53, script: 0x8d, flags: 0x0},
+	455:  {region: 0x165, script: 0x5a, flags: 0x0},
+	456:  {region: 0xe8, script: 0x5, flags: 0x0},
+	457:  {region: 0x99, script: 0x22, flags: 0x0},
+	458:  {region: 0xaf, script: 0x41, flags: 0x0},
+	459:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	460:  {region: 0xe8, script: 0x5, flags: 0x0},
+	461:  {region: 0xe6, script: 0x5a, flags: 0x0},
+	462:  {region: 0x99, script: 0x22, flags: 0x0},
+	463:  {region: 0x99, script: 0x22, flags: 0x0},
+	464:  {region: 0x165, script: 0x5a, flags: 0x0},
+	465:  {region: 0x90, script: 0x5a, flags: 0x0},
+	466:  {region: 0x60, script: 0x5a, flags: 0x0},
+	467:  {region: 0x53, script: 0x3b, flags: 0x0},
+	468:  {region: 0x91, script: 0x5a, flags: 0x0},
+	469:  {region: 0x92, script: 0x5a, flags: 0x0},
+	470:  {region: 0x165, script: 0x5a, flags: 0x0},
+	471:  {region: 0x28, script: 0x8, flags: 0x0},
+	472:  {region: 0xd2, script: 0x5a, flags: 0x0},
+	473:  {region: 0x78, script: 0x5a, flags: 0x0},
+	474:  {region: 0x165, script: 0x5a, flags: 0x0},
+	475:  {region: 0x165, script: 0x5a, flags: 0x0},
+	476:  {region: 0xd0, script: 0x5a, flags: 0x0},
+	477:  {region: 0xd6, script: 0x5a, flags: 0x0},
+	478:  {region: 0x165, script: 0x5a, flags: 0x0},
+	479:  {region: 0x165, script: 0x5a, flags: 0x0},
+	480:  {region: 0x165, script: 0x5a, flags: 0x0},
+	481:  {region: 0x95, script: 0x5a, flags: 0x0},
+	482:  {region: 0x165, script: 0x5a, flags: 0x0},
+	483:  {region: 0x165, script: 0x5a, flags: 0x0},
+	484:  {region: 0x165, script: 0x5a, flags: 0x0},
+	486:  {region: 0x122, script: 0x5a, flags: 0x0},
+	487:  {region: 0xd6, script: 0x5a, flags: 0x0},
+	488:  {region: 0x165, script: 0x5a, flags: 0x0},
+	489:  {region: 0x165, script: 0x5a, flags: 0x0},
+	490:  {region: 0x53, script: 0xf3, flags: 0x0},
+	491:  {region: 0x165, script: 0x5a, flags: 0x0},
+	492:  {region: 0x135, script: 0x5a, flags: 0x0},
+	493:  {region: 0x165, script: 0x5a, flags: 0x0},
+	494:  {region: 0x49, script: 0x5a, flags: 0x0},
+	495:  {region: 0x165, script: 0x5a, flags: 0x0},
+	496:  {region: 0x165, script: 0x5a, flags: 0x0},
+	497:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	498:  {region: 0x165, script: 0x5a, flags: 0x0},
+	499:  {region: 0x95, script: 0x5a, flags: 0x0},
+	500:  {region: 0x106, script: 0x20, flags: 0x0},
+	501:  {region: 0x1, script: 0x5a, flags: 0x0},
+	502:  {region: 0x165, script: 0x5a, flags: 0x0},
+	503:  {region: 0x165, script: 0x5a, flags: 0x0},
+	504:  {region: 0x9d, script: 0x5a, flags: 0x0},
+	505:  {region: 0x9e, script: 0x5a, flags: 0x0},
+	506:  {region: 0x49, script: 0x17, flags: 0x0},
+	507:  {region: 0x97, script: 0x3e, flags: 0x0},
+	508:  {region: 0x165, script: 0x5a, flags: 0x0},
+	509:  {region: 0x165, script: 0x5a, flags: 0x0},
+	510:  {region: 0x106, script: 0x5a, flags: 0x0},
+	511:  {region: 0x165, script: 0x5a, flags: 0x0},
+	512:  {region: 0xa2, script: 0x49, flags: 0x0},
+	513:  {region: 0x165, script: 0x5a, flags: 0x0},
+	514:  {region: 0xa0, script: 0x5a, flags: 0x0},
+	515:  {region: 0x1, script: 0x5a, flags: 0x0},
+	516:  {region: 0x165, script: 0x5a, flags: 0x0},
+	517:  {region: 0x165, script: 0x5a, flags: 0x0},
+	518:  {region: 0x165, script: 0x5a, flags: 0x0},
+	519:  {region: 0x52, script: 0x5a, flags: 0x0},
+	520:  {region: 0x130, script: 0x3e, flags: 0x0},
+	521:  {region: 0x165, script: 0x5a, flags: 0x0},
+	522:  {region: 0x12f, script: 0x5a, flags: 0x0},
+	523:  {region: 0xdb, script: 0x22, flags: 0x0},
+	524:  {region: 0x165, script: 0x5a, flags: 0x0},
+	525:  {region: 0x63, script: 0x5a, flags: 0x0},
+	526:  {region: 0x95, script: 0x5a, flags: 0x0},
+	527:  {region: 0x95, script: 0x5a, flags: 0x0},
+	528:  {region: 0x7d, script: 0x2e, flags: 0x0},
+	529:  {region: 0x137, script: 0x20, flags: 0x0},
+	530:  {region: 0x67, script: 0x5a, flags: 0x0},
+	531:  {region: 0xc4, script: 0x5a, flags: 0x0},
+	532:  {region: 0x165, script: 0x5a, flags: 0x0},
+	533:  {region: 0x165, script: 0x5a, flags: 0x0},
+	534:  {region: 0xd6, script: 0x5a, flags: 0x0},
+	535:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	536:  {region: 0xc3, script: 0x5a, flags: 0x0},
+	537:  {region: 0x106, script: 0x20, flags: 0x0},
+	538:  {region: 0x165, script: 0x5a, flags: 0x0},
+	539:  {region: 0x165, script: 0x5a, flags: 0x0},
+	540:  {region: 0x165, script: 0x5a, flags: 0x0},
+	541:  {region: 0x165, script: 0x5a, flags: 0x0},
+	542:  {region: 0xd4, script: 0x5, flags: 0x0},
+	543:  {region: 0xd6, script: 0x5a, flags: 0x0},
+	544:  {region: 0x164, script: 0x5a, flags: 0x0},
+	545:  {region: 0x165, script: 0x5a, flags: 0x0},
+	546:  {region: 0x165, script: 0x5a, flags: 0x0},
+	547:  {region: 0x12f, script: 0x5a, flags: 0x0},
+	548:  {region: 0x122, script: 0x5, flags: 0x0},
+	549:  {region: 0x165, script: 0x5a, flags: 0x0},
+	550:  {region: 0x123, script: 0xe6, flags: 0x0},
+	551:  {region: 0x5a, script: 0x5a, flags: 0x0},
+	552:  {region: 0x52, script: 0x5a, flags: 0x0},
+	553:  {region: 0x165, script: 0x5a, flags: 0x0},
+	554:  {region: 0x4f, script: 0x5a, flags: 0x0},
+	555:  {region: 0x99, script: 0x22, flags: 0x0},
+	556:  {region: 0x99, script: 0x22, flags: 0x0},
+	557:  {region: 0x4b, script: 0x5a, flags: 0x0},
+	558:  {region: 0x95, script: 0x5a, flags: 0x0},
+	559:  {region: 0x165, script: 0x5a, flags: 0x0},
+	560:  {region: 0x41, script: 0x5a, flags: 0x0},
+	561:  {region: 0x99, script: 0x5a, flags: 0x0},
+	562:  {region: 0x53, script: 0xdd, flags: 0x0},
+	563:  {region: 0x99, script: 0x22, flags: 0x0},
+	564:  {region: 0xc3, script: 0x5a, flags: 0x0},
+	565:  {region: 0x165, script: 0x5a, flags: 0x0},
+	566:  {region: 0x99, script: 0x75, flags: 0x0},
+	567:  {region: 0xe8, script: 0x5, flags: 0x0},
+	568:  {region: 0x165, script: 0x5a, flags: 0x0},
+	569:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	570:  {region: 0x165, script: 0x5a, flags: 0x0},
+	571:  {region: 0x12b, script: 0x5a, flags: 0x0},
+	572:  {region: 0x165, script: 0x5a, flags: 0x0},
+	573:  {region: 0xd2, script: 0x5a, flags: 0x0},
+	574:  {region: 0x165, script: 0x5a, flags: 0x0},
+	575:  {region: 0xaf, script: 0x57, flags: 0x0},
+	576:  {region: 0x165, script: 0x5a, flags: 0x0},
+	577:  {region: 0x165, script: 0x5a, flags: 0x0},
+	578:  {region: 0x13, script: 0x6, flags: 0x1},
+	579:  {region: 0x165, script: 0x5a, flags: 0x0},
+	580:  {region: 0x52, script: 0x5a, flags: 0x0},
+	581:  {region: 0x82, script: 0x5a, flags: 0x0},
+	582:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	583:  {region: 0x165, script: 0x5a, flags: 0x0},
+	584:  {region: 0x165, script: 0x5a, flags: 0x0},
+	585:  {region: 0x165, script: 0x5a, flags: 0x0},
+	586:  {region: 0xa6, script: 0x4e, flags: 0x0},
+	587:  {region: 0x2a, script: 0x5a, flags: 0x0},
+	588:  {region: 0x165, script: 0x5a, flags: 0x0},
+	589:  {region: 0x165, script: 0x5a, flags: 0x0},
+	590:  {region: 0x165, script: 0x5a, flags: 0x0},
+	591:  {region: 0x165, script: 0x5a, flags: 0x0},
+	592:  {region: 0x165, script: 0x5a, flags: 0x0},
+	593:  {region: 0x99, script: 0x52, flags: 0x0},
+	594:  {region: 0x8b, script: 0x5a, flags: 0x0},
+	595:  {region: 0x165, script: 0x5a, flags: 0x0},
+	596:  {region: 0xab, script: 0x53, flags: 0x0},
+	597:  {region: 0x106, script: 0x20, flags: 0x0},
+	598:  {region: 0x99, script: 0x22, flags: 0x0},
+	599:  {region: 0x165, script: 0x5a, flags: 0x0},
+	600:  {region: 0x75, script: 0x5a, flags: 0x0},
+	601:  {region: 0x165, script: 0x5a, flags: 0x0},
+	602:  {region: 0xb4, script: 0x5a, flags: 0x0},
+	603:  {region: 0x165, script: 0x5a, flags: 0x0},
+	604:  {region: 0x165, script: 0x5a, flags: 0x0},
+	605:  {region: 0x165, script: 0x5a, flags: 0x0},
+	606:  {region: 0x165, script: 0x5a, flags: 0x0},
+	607:  {region: 0x165, script: 0x5a, flags: 0x0},
+	608:  {region: 0x165, script: 0x5a, flags: 0x0},
+	609:  {region: 0x165, script: 0x5a, flags: 0x0},
+	610:  {region: 0x165, script: 0x2c, flags: 0x0},
+	611:  {region: 0x165, script: 0x5a, flags: 0x0},
+	612:  {region: 0x106, script: 0x20, flags: 0x0},
+	613:  {region: 0x112, script: 0x5a, flags: 0x0},
+	614:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	615:  {region: 0x106, script: 0x5a, flags: 0x0},
+	616:  {region: 0x165, script: 0x5a, flags: 0x0},
+	617:  {region: 0x99, script: 0x22, flags: 0x0},
+	618:  {region: 0x99, script: 0x5, flags: 0x0},
+	619:  {region: 0x12f, script: 0x5a, flags: 0x0},
+	620:  {region: 0x165, script: 0x5a, flags: 0x0},
+	621:  {region: 0x52, script: 0x5a, flags: 0x0},
+	622:  {region: 0x60, script: 0x5a, flags: 0x0},
+	623:  {region: 0x165, script: 0x5a, flags: 0x0},
+	624:  {region: 0x165, script: 0x5a, flags: 0x0},
+	625:  {region: 0x165, script: 0x2c, flags: 0x0},
+	626:  {region: 0x165, script: 0x5a, flags: 0x0},
+	627:  {region: 0x165, script: 0x5a, flags: 0x0},
+	628:  {region: 0x19, script: 0x3, flags: 0x1},
+	629:  {region: 0x165, script: 0x5a, flags: 0x0},
+	630:  {region: 0x165, script: 0x5a, flags: 0x0},
+	631:  {region: 0x165, script: 0x5a, flags: 0x0},
+	632:  {region: 0x165, script: 0x5a, flags: 0x0},
+	633:  {region: 0x106, script: 0x20, flags: 0x0},
+	634:  {region: 0x165, script: 0x5a, flags: 0x0},
+	635:  {region: 0x165, script: 0x5a, flags: 0x0},
+	636:  {region: 0x165, script: 0x5a, flags: 0x0},
+	637:  {region: 0x106, script: 0x20, flags: 0x0},
+	638:  {region: 0x165, script: 0x5a, flags: 0x0},
+	639:  {region: 0x95, script: 0x5a, flags: 0x0},
+	640:  {region: 0xe8, script: 0x5, flags: 0x0},
+	641:  {region: 0x7b, script: 0x5a, flags: 0x0},
+	642:  {region: 0x165, script: 0x5a, flags: 0x0},
+	643:  {region: 0x165, script: 0x5a, flags: 0x0},
+	644:  {region: 0x165, script: 0x5a, flags: 0x0},
+	645:  {region: 0x165, script: 0x2c, flags: 0x0},
+	646:  {region: 0x123, script: 0xe6, flags: 0x0},
+	647:  {region: 0xe8, script: 0x5, flags: 0x0},
+	648:  {region: 0x165, script: 0x5a, flags: 0x0},
+	649:  {region: 0x165, script: 0x5a, flags: 0x0},
+	650:  {region: 0x1c, script: 0x5, flags: 0x1},
+	651:  {region: 0x165, script: 0x5a, flags: 0x0},
+	652:  {region: 0x165, script: 0x5a, flags: 0x0},
+	653:  {region: 0x165, script: 0x5a, flags: 0x0},
+	654:  {region: 0x138, script: 0x5a, flags: 0x0},
+	655:  {region: 0x87, script: 0x5e, flags: 0x0},
+	656:  {region: 0x97, script: 0x3e, flags: 0x0},
+	657:  {region: 0x12f, script: 0x5a, flags: 0x0},
+	658:  {region: 0xe8, script: 0x5, flags: 0x0},
+	659:  {region: 0x131, script: 0x5a, flags: 0x0},
+	660:  {region: 0x165, script: 0x5a, flags: 0x0},
+	661:  {region: 0xb7, script: 0x5a, flags: 0x0},
+	662:  {region: 0x106, script: 0x20, flags: 0x0},
+	663:  {region: 0x165, script: 0x5a, flags: 0x0},
+	664:  {region: 0x95, script: 0x5a, flags: 0x0},
+	665:  {region: 0x165, script: 0x5a, flags: 0x0},
+	666:  {region: 0x53, script: 0xe6, flags: 0x0},
+	667:  {region: 0x165, script: 0x5a, flags: 0x0},
+	668:  {region: 0x165, script: 0x5a, flags: 0x0},
+	669:  {region: 0x165, script: 0x5a, flags: 0x0},
+	670:  {region: 0x165, script: 0x5a, flags: 0x0},
+	671:  {region: 0x99, script: 0x5c, flags: 0x0},
+	672:  {region: 0x165, script: 0x5a, flags: 0x0},
+	673:  {region: 0x165, script: 0x5a, flags: 0x0},
+	674:  {region: 0x106, script: 0x20, flags: 0x0},
+	675:  {region: 0x131, script: 0x5a, flags: 0x0},
+	676:  {region: 0x165, script: 0x5a, flags: 0x0},
+	677:  {region: 0xd9, script: 0x5a, flags: 0x0},
+	678:  {region: 0x165, script: 0x5a, flags: 0x0},
+	679:  {region: 0x165, script: 0x5a, flags: 0x0},
+	680:  {region: 0x21, script: 0x2, flags: 0x1},
+	681:  {region: 0x165, script: 0x5a, flags: 0x0},
+	682:  {region: 0x165, script: 0x5a, flags: 0x0},
+	683:  {region: 0x9e, script: 0x5a, flags: 0x0},
+	684:  {region: 0x53, script: 0x60, flags: 0x0},
+	685:  {region: 0x95, script: 0x5a, flags: 0x0},
+	686:  {region: 0x9c, script: 0x5, flags: 0x0},
+	687:  {region: 0x135, script: 0x5a, flags: 0x0},
+	688:  {region: 0x165, script: 0x5a, flags: 0x0},
+	689:  {region: 0x165, script: 0x5a, flags: 0x0},
+	690:  {region: 0x99, script: 0xe1, flags: 0x0},
+	691:  {region: 0x9e, script: 0x5a, flags: 0x0},
+	692:  {region: 0x165, script: 0x5a, flags: 0x0},
+	693:  {region: 0x4b, script: 0x5a, flags: 0x0},
+	694:  {region: 0x165, script: 0x5a, flags: 0x0},
+	695:  {region: 0x165, script: 0x5a, flags: 0x0},
+	696:  {region: 0xaf, script: 0x57, flags: 0x0},
+	697:  {region: 0x165, script: 0x5a, flags: 0x0},
+	698:  {region: 0x165, script: 0x5a, flags: 0x0},
+	699:  {region: 0x4b, script: 0x5a, flags: 0x0},
+	700:  {region: 0x165, script: 0x5a, flags: 0x0},
+	701:  {region: 0x165, script: 0x5a, flags: 0x0},
+	702:  {region: 0x162, script: 0x5a, flags: 0x0},
+	703:  {region: 0x9c, script: 0x5, flags: 0x0},
+	704:  {region: 0xb6, script: 0x5a, flags: 0x0},
+	705:  {region: 0xb8, script: 0x5a, flags: 0x0},
+	706:  {region: 0x4b, script: 0x5a, flags: 0x0},
+	707:  {region: 0x4b, script: 0x5a, flags: 0x0},
+	708:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	709:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	710:  {region: 0x9c, script: 0x5, flags: 0x0},
+	711:  {region: 0xb8, script: 0x5a, flags: 0x0},
+	712:  {region: 0x123, script: 0xe6, flags: 0x0},
+	713:  {region: 0x53, script: 0x3b, flags: 0x0},
+	714:  {region: 0x12b, script: 0x5a, flags: 0x0},
+	715:  {region: 0x95, script: 0x5a, flags: 0x0},
+	716:  {region: 0x52, script: 0x5a, flags: 0x0},
+	717:  {region: 0x99, script: 0x22, flags: 0x0},
+	718:  {region: 0x99, script: 0x22, flags: 0x0},
+	719:  {region: 0x95, script: 0x5a, flags: 0x0},
+	720:  {region: 0x23, script: 0x3, flags: 0x1},
+	721:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	722:  {region: 0x165, script: 0x5a, flags: 0x0},
+	723:  {region: 0xcf, script: 0x5a, flags: 0x0},
+	724:  {region: 0x165, script: 0x5a, flags: 0x0},
+	725:  {region: 0x165, script: 0x5a, flags: 0x0},
+	726:  {region: 0x165, script: 0x5a, flags: 0x0},
+	727:  {region: 0x165, script: 0x5a, flags: 0x0},
+	728:  {region: 0x165, script: 0x5a, flags: 0x0},
+	729:  {region: 0x165, script: 0x5a, flags: 0x0},
+	730:  {region: 0x165, script: 0x5a, flags: 0x0},
+	731:  {region: 0x165, script: 0x5a, flags: 0x0},
+	732:  {region: 0x165, script: 0x5a, flags: 0x0},
+	733:  {region: 0x165, script: 0x5a, flags: 0x0},
+	734:  {region: 0x165, script: 0x5a, flags: 0x0},
+	735:  {region: 0x165, script: 0x5, flags: 0x0},
+	736:  {region: 0x106, script: 0x20, flags: 0x0},
+	737:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	738:  {region: 0x165, script: 0x5a, flags: 0x0},
+	739:  {region: 0x95, script: 0x5a, flags: 0x0},
+	740:  {region: 0x165, script: 0x2c, flags: 0x0},
+	741:  {region: 0x165, script: 0x5a, flags: 0x0},
+	742:  {region: 0x165, script: 0x5a, flags: 0x0},
+	743:  {region: 0x165, script: 0x5a, flags: 0x0},
+	744:  {region: 0x112, script: 0x5a, flags: 0x0},
+	745:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	746:  {region: 0x165, script: 0x5a, flags: 0x0},
+	747:  {region: 0x165, script: 0x5a, flags: 0x0},
+	748:  {region: 0x123, script: 0x5, flags: 0x0},
+	749:  {region: 0xcc, script: 0x5a, flags: 0x0},
+	750:  {region: 0x165, script: 0x5a, flags: 0x0},
+	751:  {region: 0x165, script: 0x5a, flags: 0x0},
+	752:  {region: 0x165, script: 0x5a, flags: 0x0},
+	753:  {region: 0xbf, script: 0x5a, flags: 0x0},
+	754:  {region: 0xd1, script: 0x5a, flags: 0x0},
+	755:  {region: 0x165, script: 0x5a, flags: 0x0},
+	756:  {region: 0x52, script: 0x5a, flags: 0x0},
+	757:  {region: 0xdb, script: 0x22, flags: 0x0},
+	758:  {region: 0x12f, script: 0x5a, flags: 0x0},
+	759:  {region: 0xc0, script: 0x5a, flags: 0x0},
+	760:  {region: 0x165, script: 0x5a, flags: 0x0},
+	761:  {region: 0x165, script: 0x5a, flags: 0x0},
+	762:  {region: 0xe0, script: 0x5a, flags: 0x0},
+	763:  {region: 0x165, script: 0x5a, flags: 0x0},
+	764:  {region: 0x95, script: 0x5a, flags: 0x0},
+	765:  {region: 0x9b, script: 0x3d, flags: 0x0},
+	766:  {region: 0x165, script: 0x5a, flags: 0x0},
+	767:  {region: 0xc2, script: 0x20, flags: 0x0},
+	768:  {region: 0x165, script: 0x5, flags: 0x0},
+	769:  {region: 0x165, script: 0x5a, flags: 0x0},
+	770:  {region: 0x165, script: 0x5a, flags: 0x0},
+	771:  {region: 0x165, script: 0x5a, flags: 0x0},
+	772:  {region: 0x99, script: 0x6e, flags: 0x0},
+	773:  {region: 0x165, script: 0x5a, flags: 0x0},
+	774:  {region: 0x165, script: 0x5a, flags: 0x0},
+	775:  {region: 0x10b, script: 0x5a, flags: 0x0},
+	776:  {region: 0x165, script: 0x5a, flags: 0x0},
+	777:  {region: 0x165, script: 0x5a, flags: 0x0},
+	778:  {region: 0x165, script: 0x5a, flags: 0x0},
+	779:  {region: 0x26, script: 0x3, flags: 0x1},
+	780:  {region: 0x165, script: 0x5a, flags: 0x0},
+	781:  {region: 0x165, script: 0x5a, flags: 0x0},
+	782:  {region: 0x99, script: 0xe, flags: 0x0},
+	783:  {region: 0xc4, script: 0x75, flags: 0x0},
+	785:  {region: 0x165, script: 0x5a, flags: 0x0},
+	786:  {region: 0x49, script: 0x5a, flags: 0x0},
+	787:  {region: 0x49, script: 0x5a, flags: 0x0},
+	788:  {region: 0x37, script: 0x5a, flags: 0x0},
+	789:  {region: 0x165, script: 0x5a, flags: 0x0},
+	790:  {region: 0x165, script: 0x5a, flags: 0x0},
+	791:  {region: 0x165, script: 0x5a, flags: 0x0},
+	792:  {region: 0x165, script: 0x5a, flags: 0x0},
+	793:  {region: 0x165, script: 0x5a, flags: 0x0},
+	794:  {region: 0x165, script: 0x5a, flags: 0x0},
+	795:  {region: 0x99, script: 0x22, flags: 0x0},
+	796:  {region: 0xdb, script: 0x22, flags: 0x0},
+	797:  {region: 0x106, script: 0x20, flags: 0x0},
+	798:  {region: 0x35, script: 0x72, flags: 0x0},
+	799:  {region: 0x29, script: 0x3, flags: 0x1},
+	800:  {region: 0xcb, script: 0x5a, flags: 0x0},
+	801:  {region: 0x165, script: 0x5a, flags: 0x0},
+	802:  {region: 0x165, script: 0x5a, flags: 0x0},
+	803:  {region: 0x165, script: 0x5a, flags: 0x0},
+	804:  {region: 0x99, script: 0x22, flags: 0x0},
+	805:  {region: 0x52, script: 0x5a, flags: 0x0},
+	807:  {region: 0x165, script: 0x5a, flags: 0x0},
+	808:  {region: 0x135, script: 0x5a, flags: 0x0},
+	809:  {region: 0x165, script: 0x5a, flags: 0x0},
+	810:  {region: 0x165, script: 0x5a, flags: 0x0},
+	811:  {region: 0xe8, script: 0x5, flags: 0x0},
+	812:  {region: 0xc3, script: 0x5a, flags: 0x0},
+	813:  {region: 0x99, script: 0x22, flags: 0x0},
+	814:  {region: 0x95, script: 0x5a, flags: 0x0},
+	815:  {region: 0x164, script: 0x5a, flags: 0x0},
+	816:  {region: 0x165, script: 0x5a, flags: 0x0},
+	817:  {region: 0xc4, script: 0x75, flags: 0x0},
+	818:  {region: 0x165, script: 0x5a, flags: 0x0},
+	819:  {region: 0x165, script: 0x2c, flags: 0x0},
+	820:  {region: 0x106, script: 0x20, flags: 0x0},
+	821:  {region: 0x165, script: 0x5a, flags: 0x0},
+	822:  {region: 0x131, script: 0x5a, flags: 0x0},
+	823:  {region: 0x9c, script: 0x66, flags: 0x0},
+	824:  {region: 0x165, script: 0x5a, flags: 0x0},
+	825:  {region: 0x165, script: 0x5a, flags: 0x0},
+	826:  {region: 0x9c, script: 0x5, flags: 0x0},
+	827:  {region: 0x165, script: 0x5a, flags: 0x0},
+	828:  {region: 0x165, script: 0x5a, flags: 0x0},
+	829:  {region: 0x165, script: 0x5a, flags: 0x0},
+	830:  {region: 0xdd, script: 0x5a, flags: 0x0},
+	831:  {region: 0x165, script: 0x5a, flags: 0x0},
+	832:  {region: 0x165, script: 0x5a, flags: 0x0},
+	834:  {region: 0x165, script: 0x5a, flags: 0x0},
+	835:  {region: 0x53, script: 0x3b, flags: 0x0},
+	836:  {region: 0x9e, script: 0x5a, flags: 0x0},
+	837:  {region: 0xd2, script: 0x5a, flags: 0x0},
+	838:  {region: 0x165, script: 0x5a, flags: 0x0},
+	839:  {region: 0xda, script: 0x5a, flags: 0x0},
+	840:  {region: 0x165, script: 0x5a, flags: 0x0},
+	841:  {region: 0x165, script: 0x5a, flags: 0x0},
+	842:  {region: 0x165, script: 0x5a, flags: 0x0},
+	843:  {region: 0xcf, script: 0x5a, flags: 0x0},
+	844:  {region: 0x165, script: 0x5a, flags: 0x0},
+	845:  {region: 0x165, script: 0x5a, flags: 0x0},
+	846:  {region: 0x164, script: 0x5a, flags: 0x0},
+	847:  {region: 0xd1, script: 0x5a, flags: 0x0},
+	848:  {region: 0x60, script: 0x5a, flags: 0x0},
+	849:  {region: 0xdb, script: 0x22, flags: 0x0},
+	850:  {region: 0x165, script: 0x5a, flags: 0x0},
+	851:  {region: 0xdb, script: 0x22, flags: 0x0},
+	852:  {region: 0x165, script: 0x5a, flags: 0x0},
+	853:  {region: 0x165, script: 0x5a, flags: 0x0},
+	854:  {region: 0xd2, script: 0x5a, flags: 0x0},
+	855:  {region: 0x165, script: 0x5a, flags: 0x0},
+	856:  {region: 0x165, script: 0x5a, flags: 0x0},
+	857:  {region: 0xd1, script: 0x5a, flags: 0x0},
+	858:  {region: 0x165, script: 0x5a, flags: 0x0},
+	859:  {region: 0xcf, script: 0x5a, flags: 0x0},
+	860:  {region: 0xcf, script: 0x5a, flags: 0x0},
+	861:  {region: 0x165, script: 0x5a, flags: 0x0},
+	862:  {region: 0x165, script: 0x5a, flags: 0x0},
+	863:  {region: 0x95, script: 0x5a, flags: 0x0},
+	864:  {region: 0x165, script: 0x5a, flags: 0x0},
+	865:  {region: 0xdf, script: 0x5a, flags: 0x0},
+	866:  {region: 0x165, script: 0x5a, flags: 0x0},
+	867:  {region: 0x165, script: 0x5a, flags: 0x0},
+	868:  {region: 0x99, script: 0x5a, flags: 0x0},
+	869:  {region: 0x165, script: 0x5a, flags: 0x0},
+	870:  {region: 0x165, script: 0x5a, flags: 0x0},
+	871:  {region: 0xd9, script: 0x5a, flags: 0x0},
+	872:  {region: 0x52, script: 0x5a, flags: 0x0},
+	873:  {region: 0x165, script: 0x5a, flags: 0x0},
+	874:  {region: 0xda, script: 0x5a, flags: 0x0},
+	875:  {region: 0x165, script: 0x5a, flags: 0x0},
+	876:  {region: 0x52, script: 0x5a, flags: 0x0},
+	877:  {region: 0x165, script: 0x5a, flags: 0x0},
+	878:  {region: 0x165, script: 0x5a, flags: 0x0},
+	879:  {region: 0xda, script: 0x5a, flags: 0x0},
+	880:  {region: 0x123, script: 0x56, flags: 0x0},
+	881:  {region: 0x99, script: 0x22, flags: 0x0},
+	882:  {region: 0x10c, script: 0xc4, flags: 0x0},
+	883:  {region: 0x165, script: 0x5a, flags: 0x0},
+	884:  {region: 0x165, script: 0x5a, flags: 0x0},
+	885:  {region: 0x84, script: 0x7c, flags: 0x0},
+	886:  {region: 0x161, script: 0x5a, flags: 0x0},
+	887:  {region: 0x165, script: 0x5a, flags: 0x0},
+	888:  {region: 0x49, script: 0x17, flags: 0x0},
+	889:  {region: 0x165, script: 0x5a, flags: 0x0},
+	890:  {region: 0x161, script: 0x5a, flags: 0x0},
+	891:  {region: 0x165, script: 0x5a, flags: 0x0},
+	892:  {region: 0x165, script: 0x5a, flags: 0x0},
+	893:  {region: 0x165, script: 0x5a, flags: 0x0},
+	894:  {region: 0x165, script: 0x5a, flags: 0x0},
+	895:  {region: 0x165, script: 0x5a, flags: 0x0},
+	896:  {region: 0x117, script: 0x5a, flags: 0x0},
+	897:  {region: 0x165, script: 0x5a, flags: 0x0},
+	898:  {region: 0x165, script: 0x5a, flags: 0x0},
+	899:  {region: 0x135, script: 0x5a, flags: 0x0},
+	900:  {region: 0x165, script: 0x5a, flags: 0x0},
+	901:  {region: 0x53, script: 0x5a, flags: 0x0},
+	902:  {region: 0x165, script: 0x5a, flags: 0x0},
+	903:  {region: 0xce, script: 0x5a, flags: 0x0},
+	904:  {region: 0x12f, script: 0x5a, flags: 0x0},
+	905:  {region: 0x131, script: 0x5a, flags: 0x0},
+	906:  {region: 0x80, script: 0x5a, flags: 0x0},
+	907:  {region: 0x78, script: 0x5a, flags: 0x0},
+	908:  {region: 0x165, script: 0x5a, flags: 0x0},
+	910:  {region: 0x165, script: 0x5a, flags: 0x0},
+	911:  {region: 0x165, script: 0x5a, flags: 0x0},
+	912:  {region: 0x6f, script: 0x5a, flags: 0x0},
+	913:  {region: 0x165, script: 0x5a, flags: 0x0},
+	914:  {region: 0x165, script: 0x5a, flags: 0x0},
+	915:  {region: 0x165, script: 0x5a, flags: 0x0},
+	916:  {region: 0x165, script: 0x5a, flags: 0x0},
+	917:  {region: 0x99, script: 0x81, flags: 0x0},
+	918:  {region: 0x165, script: 0x5a, flags: 0x0},
+	919:  {region: 0x165, script: 0x5, flags: 0x0},
+	920:  {region: 0x7d, script: 0x20, flags: 0x0},
+	921:  {region: 0x135, script: 0x82, flags: 0x0},
+	922:  {region: 0x165, script: 0x5, flags: 0x0},
+	923:  {region: 0xc5, script: 0x80, flags: 0x0},
+	924:  {region: 0x165, script: 0x5a, flags: 0x0},
+	925:  {region: 0x2c, script: 0x3, flags: 0x1},
+	926:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	927:  {region: 0x2f, script: 0x2, flags: 0x1},
+	928:  {region: 0xe7, script: 0x5a, flags: 0x0},
+	929:  {region: 0x30, script: 0x5a, flags: 0x0},
+	930:  {region: 0xf0, script: 0x5a, flags: 0x0},
+	931:  {region: 0x165, script: 0x5a, flags: 0x0},
+	932:  {region: 0x78, script: 0x5a, flags: 0x0},
+	933:  {region: 0xd6, script: 0x5a, flags: 0x0},
+	934:  {region: 0x135, script: 0x5a, flags: 0x0},
+	935:  {region: 0x49, script: 0x5a, flags: 0x0},
+	936:  {region: 0x165, script: 0x5a, flags: 0x0},
+	937:  {region: 0x9c, script: 0xf0, flags: 0x0},
+	938:  {region: 0x165, script: 0x5a, flags: 0x0},
+	939:  {region: 0x60, script: 0x5a, flags: 0x0},
+	940:  {region: 0x165, script: 0x5, flags: 0x0},
+	941:  {region: 0xb0, script: 0x8b, flags: 0x0},
+	943:  {region: 0x165, script: 0x5a, flags: 0x0},
+	944:  {region: 0x165, script: 0x5a, flags: 0x0},
+	945:  {region: 0x99, script: 0x12, flags: 0x0},
+	946:  {region: 0xa4, script: 0x5a, flags: 0x0},
+	947:  {region: 0xe9, script: 0x5a, flags: 0x0},
+	948:  {region: 0x165, script: 0x5a, flags: 0x0},
+	949:  {region: 0x9e, script: 0x5a, flags: 0x0},
+	950:  {region: 0x165, script: 0x5a, flags: 0x0},
+	951:  {region: 0x165, script: 0x5a, flags: 0x0},
+	952:  {region: 0x87, script: 0x34, flags: 0x0},
+	953:  {region: 0x75, script: 0x5a, flags: 0x0},
+	954:  {region: 0x165, script: 0x5a, flags: 0x0},
+	955:  {region: 0xe8, script: 0x4d, flags: 0x0},
+	956:  {region: 0x9c, script: 0x5, flags: 0x0},
+	957:  {region: 0x1, script: 0x5a, flags: 0x0},
+	958:  {region: 0x24, script: 0x5, flags: 0x0},
+	959:  {region: 0x165, script: 0x5a, flags: 0x0},
+	960:  {region: 0x41, script: 0x5a, flags: 0x0},
+	961:  {region: 0x165, script: 0x5a, flags: 0x0},
+	962:  {region: 0x7a, script: 0x5a, flags: 0x0},
+	963:  {region: 0x165, script: 0x5a, flags: 0x0},
+	964:  {region: 0xe4, script: 0x5a, flags: 0x0},
+	965:  {region: 0x89, script: 0x5a, flags: 0x0},
+	966:  {region: 0x69, script: 0x5a, flags: 0x0},
+	967:  {region: 0x165, script: 0x5a, flags: 0x0},
+	968:  {region: 0x99, script: 0x22, flags: 0x0},
+	969:  {region: 0x165, script: 0x5a, flags: 0x0},
+	970:  {region: 0x102, script: 0x5a, flags: 0x0},
+	971:  {region: 0x95, script: 0x5a, flags: 0x0},
+	972:  {region: 0x165, script: 0x5a, flags: 0x0},
+	973:  {region: 0x165, script: 0x5a, flags: 0x0},
+	974:  {region: 0x9e, script: 0x5a, flags: 0x0},
+	975:  {region: 0x165, script: 0x5, flags: 0x0},
+	976:  {region: 0x99, script: 0x5a, flags: 0x0},
+	977:  {region: 0x31, script: 0x2, flags: 0x1},
+	978:  {region: 0xdb, script: 0x22, flags: 0x0},
+	979:  {region: 0x35, script: 0xe, flags: 0x0},
+	980:  {region: 0x4e, script: 0x5a, flags: 0x0},
+	981:  {region: 0x72, script: 0x5a, flags: 0x0},
+	982:  {region: 0x4e, script: 0x5a, flags: 0x0},
+	983:  {region: 0x9c, script: 0x5, flags: 0x0},
+	984:  {region: 0x10c, script: 0x5a, flags: 0x0},
+	985:  {region: 0x3a, script: 0x5a, flags: 0x0},
+	986:  {region: 0x165, script: 0x5a, flags: 0x0},
+	987:  {region: 0xd1, script: 0x5a, flags: 0x0},
+	988:  {region: 0x104, script: 0x5a, flags: 0x0},
+	989:  {region: 0x95, script: 0x5a, flags: 0x0},
+	990:  {region: 0x12f, script: 0x5a, flags: 0x0},
+	991:  {region: 0x165, script: 0x5a, flags: 0x0},
+	992:  {region: 0x165, script: 0x5a, flags: 0x0},
+	993:  {region: 0x73, script: 0x5a, flags: 0x0},
+	994:  {region: 0x106, script: 0x20, flags: 0x0},
+	995:  {region: 0x130, script: 0x20, flags: 0x0},
+	996:  {region: 0x109, script: 0x5a, flags: 0x0},
+	997:  {region: 0x107, script: 0x5a, flags: 0x0},
+	998:  {region: 0x12f, script: 0x5a, flags: 0x0},
+	999:  {region: 0x165, script: 0x5a, flags: 0x0},
+	1000: {region: 0xa2, script: 0x4c, flags: 0x0},
+	1001: {region: 0x99, script: 0x22, flags: 0x0},
+	1002: {region: 0x80, script: 0x5a, flags: 0x0},
+	1003: {region: 0x106, script: 0x20, flags: 0x0},
+	1004: {region: 0xa4, script: 0x5a, flags: 0x0},
+	1005: {region: 0x95, script: 0x5a, flags: 0x0},
+	1006: {region: 0x99, script: 0x5a, flags: 0x0},
+	1007: {region: 0x114, script: 0x5a, flags: 0x0},
+	1008: {region: 0x99, script: 0xc8, flags: 0x0},
+	1009: {region: 0x165, script: 0x5a, flags: 0x0},
+	1010: {region: 0x165, script: 0x5a, flags: 0x0},
+	1011: {region: 0x12f, script: 0x5a, flags: 0x0},
+	1012: {region: 0x9e, script: 0x5a, flags: 0x0},
+	1013: {region: 0x99, script: 0x22, flags: 0x0},
+	1014: {region: 0x165, script: 0x5, flags: 0x0},
+	1015: {region: 0x9e, script: 0x5a, flags: 0x0},
+	1016: {region: 0x7b, script: 0x5a, flags: 0x0},
+	1017: {region: 0x49, script: 0x5a, flags: 0x0},
+	1018: {region: 0x33, script: 0x4, flags: 0x1},
+	1019: {region: 0x9e, script: 0x5a, flags: 0x0},
+	1020: {region: 0x9c, script: 0x5, flags: 0x0},
+	1021: {region: 0xda, script: 0x5a, flags: 0x0},
+	1022: {region: 0x4f, script: 0x5a, flags: 0x0},
+	1023: {region: 0xd1, script: 0x5a, flags: 0x0},
+	1024: {region: 0xcf, script: 0x5a, flags: 0x0},
+	1025: {region: 0xc3, script: 0x5a, flags: 0x0},
+	1026: {region: 0x4c, script: 0x5a, flags: 0x0},
+	1027: {region: 0x96, script: 0x7e, flags: 0x0},
+	1028: {region: 0xb6, script: 0x5a, flags: 0x0},
+	1029: {region: 0x165, script: 0x2c, flags: 0x0},
+	1030: {region: 0x165, script: 0x5a, flags: 0x0},
+	1032: {region: 0xba, script: 0xe3, flags: 0x0},
+	1033: {region: 0x165, script: 0x5a, flags: 0x0},
+	1034: {region: 0xc4, script: 0x75, flags: 0x0},
+	1035: {region: 0x165, script: 0x5, flags: 0x0},
+	1036: {region: 0xb3, script: 0xcf, flags: 0x0},
+	1037: {region: 0x6f, script: 0x5a, flags: 0x0},
+	1038: {region: 0x165, script: 0x5a, flags: 0x0},
+	1039: {region: 0x165, script: 0x5a, flags: 0x0},
+	1040: {region: 0x165, script: 0x5a, flags: 0x0},
+	1041: {region: 0x165, script: 0x5a, flags: 0x0},
+	1042: {region: 0x111, script: 0x5a, flags: 0x0},
+	1043: {region: 0x165, script: 0x5a, flags: 0x0},
+	1044: {region: 0xe8, script: 0x5, flags: 0x0},
+	1045: {region: 0x165, script: 0x5a, flags: 0x0},
+	1046: {region: 0x10f, script: 0x5a, flags: 0x0},
+	1047: {region: 0x165, script: 0x5a, flags: 0x0},
+	1048: {region: 0xe9, script: 0x5a, flags: 0x0},
+	1049: {region: 0x165, script: 0x5a, flags: 0x0},
+	1050: {region: 0x95, script: 0x5a, flags: 0x0},
+	1051: {region: 0x142, script: 0x5a, flags: 0x0},
+	1052: {region: 0x10c, script: 0x5a, flags: 0x0},
+	1054: {region: 0x10c, script: 0x5a, flags: 0x0},
+	1055: {region: 0x72, script: 0x5a, flags: 0x0},
+	1056: {region: 0x97, script: 0xc5, flags: 0x0},
+	1057: {region: 0x165, script: 0x5a, flags: 0x0},
+	1058: {region: 0x72, script: 0x5a, flags: 0x0},
+	1059: {region: 0x164, script: 0x5a, flags: 0x0},
+	1060: {region: 0x165, script: 0x5a, flags: 0x0},
+	1061: {region: 0xc3, script: 0x5a, flags: 0x0},
+	1062: {region: 0x165, script: 0x5a, flags: 0x0},
+	1063: {region: 0x165, script: 0x5a, flags: 0x0},
+	1064: {region: 0x165, script: 0x5a, flags: 0x0},
+	1065: {region: 0x115, script: 0x5a, flags: 0x0},
+	1066: {region: 0x165, script: 0x5a, flags: 0x0},
+	1067: {region: 0x165, script: 0x5a, flags: 0x0},
+	1068: {region: 0x123, script: 0xe6, flags: 0x0},
+	1069: {region: 0x165, script: 0x5a, flags: 0x0},
+	1070: {region: 0x165, script: 0x5a, flags: 0x0},
+	1071: {region: 0x165, script: 0x5a, flags: 0x0},
+	1072: {region: 0x165, script: 0x5a, flags: 0x0},
+	1073: {region: 0x27, script: 0x5a, flags: 0x0},
+	1074: {region: 0x37, script: 0x5, flags: 0x1},
+	1075: {region: 0x99, script: 0xd2, flags: 0x0},
+	1076: {region: 0x116, script: 0x5a, flags: 0x0},
+	1077: {region: 0x114, script: 0x5a, flags: 0x0},
+	1078: {region: 0x99, script: 0x22, flags: 0x0},
+	1079: {region: 0x161, script: 0x5a, flags: 0x0},
+	1080: {region: 0x165, script: 0x5a, flags: 0x0},
+	1081: {region: 0x165, script: 0x5a, flags: 0x0},
+	1082: {region: 0x6d, script: 0x5a, flags: 0x0},
+	1083: {region: 0x161, script: 0x5a, flags: 0x0},
+	1084: {region: 0x165, script: 0x5a, flags: 0x0},
+	1085: {region: 0x60, script: 0x5a, flags: 0x0},
+	1086: {region: 0x95, script: 0x5a, flags: 0x0},
+	1087: {region: 0x165, script: 0x5a, flags: 0x0},
+	1088: {region: 0x165, script: 0x5a, flags: 0x0},
+	1089: {region: 0x12f, script: 0x5a, flags: 0x0},
+	1090: {region: 0x165, script: 0x5a, flags: 0x0},
+	1091: {region: 0x84, script: 0x5a, flags: 0x0},
+	1092: {region: 0x10c, script: 0x5a, flags: 0x0},
+	1093: {region: 0x12f, script: 0x5a, flags: 0x0},
+	1094: {region: 0x15f, script: 0x5, flags: 0x0},
+	1095: {region: 0x4b, script: 0x5a, flags: 0x0},
+	1096: {region: 0x60, script: 0x5a, flags: 0x0},
+	1097: {region: 0x165, script: 0x5a, flags: 0x0},
+	1098: {region: 0x99, script: 0x22, flags: 0x0},
+	1099: {region: 0x95, script: 0x5a, flags: 0x0},
+	1100: {region: 0x165, script: 0x5a, flags: 0x0},
+	1101: {region: 0x35, script: 0xe, flags: 0x0},
+	1102: {region: 0x9b, script: 0xd6, flags: 0x0},
+	1103: {region: 0xe9, script: 0x5a, flags: 0x0},
+	1104: {region: 0x99, script: 0xde, flags: 0x0},
+	1105: {region: 0xdb, script: 0x22, flags: 0x0},
+	1106: {region: 0x165, script: 0x5a, flags: 0x0},
+	1107: {region: 0x165, script: 0x5a, flags: 0x0},
+	1108: {region: 0x165, script: 0x5a, flags: 0x0},
+	1109: {region: 0x165, script: 0x5a, flags: 0x0},
+	1110: {region: 0x165, script: 0x5a, flags: 0x0},
+	1111: {region: 0x165, script: 0x5a, flags: 0x0},
+	1112: {region: 0x165, script: 0x5a, flags: 0x0},
+	1113: {region: 0x165, script: 0x5a, flags: 0x0},
+	1114: {region: 0xe7, script: 0x5a, flags: 0x0},
+	1115: {region: 0x165, script: 0x5a, flags: 0x0},
+	1116: {region: 0x165, script: 0x5a, flags: 0x0},
+	1117: {region: 0x99, script: 0x52, flags: 0x0},
+	1118: {region: 0x53, script: 0xdc, flags: 0x0},
+	1119: {region: 0xdb, script: 0x22, flags: 0x0},
+	1120: {region: 0xdb, script: 0x22, flags: 0x0},
+	1121: {region: 0x99, script: 0xe1, flags: 0x0},
+	1122: {region: 0x165, script: 0x5a, flags: 0x0},
+	1123: {region: 0x112, script: 0x5a, flags: 0x0},
+	1124: {region: 0x131, script: 0x5a, flags: 0x0},
+	1125: {region: 0x126, script: 0x5a, flags: 0x0},
+	1126: {region: 0x165, script: 0x5a, flags: 0x0},
+	1127: {region: 0x3c, script: 0x3, flags: 0x1},
+	1128: {region: 0x165, script: 0x5a, flags: 0x0},
+	1129: {region: 0x165, script: 0x5a, flags: 0x0},
+	1130: {region: 0x165, script: 0x5a, flags: 0x0},
+	1131: {region: 0x123, script: 0xe6, flags: 0x0},
+	1132: {region: 0xdb, script: 0x22, flags: 0x0},
+	1133: {region: 0xdb, script: 0x22, flags: 0x0},
+	1134: {region: 0xdb, script: 0x22, flags: 0x0},
+	1135: {region: 0x6f, script: 0x2c, flags: 0x0},
+	1136: {region: 0x165, script: 0x5a, flags: 0x0},
+	1137: {region: 0x6d, script: 0x2c, flags: 0x0},
+	1138: {region: 0x165, script: 0x5a, flags: 0x0},
+	1139: {region: 0x165, script: 0x5a, flags: 0x0},
+	1140: {region: 0x165, script: 0x5a, flags: 0x0},
+	1141: {region: 0xd6, script: 0x5a, flags: 0x0},
+	1142: {region: 0x127, script: 0x5a, flags: 0x0},
+	1143: {region: 0x125, script: 0x5a, flags: 0x0},
+	1144: {region: 0x32, script: 0x5a, flags: 0x0},
+	1145: {region: 0xdb, script: 0x22, flags: 0x0},
+	1146: {region: 0xe7, script: 0x5a, flags: 0x0},
+	1147: {region: 0x165, script: 0x5a, flags: 0x0},
+	1148: {region: 0x165, script: 0x5a, flags: 0x0},
+	1149: {region: 0x32, script: 0x5a, flags: 0x0},
+	1150: {region: 0xd4, script: 0x5a, flags: 0x0},
+	1151: {region: 0x165, script: 0x5a, flags: 0x0},
+	1152: {region: 0x161, script: 0x5a, flags: 0x0},
+	1153: {region: 0x165, script: 0x5a, flags: 0x0},
+	1154: {region: 0x129, script: 0x5a, flags: 0x0},
+	1155: {region: 0x165, script: 0x5a, flags: 0x0},
+	1156: {region: 0xce, script: 0x5a, flags: 0x0},
+	1157: {region: 0x165, script: 0x5a, flags: 0x0},
+	1158: {region: 0xe6, script: 0x5a, flags: 0x0},
+	1159: {region: 0x165, script: 0x5a, flags: 0x0},
+	1160: {region: 0x165, script: 0x5a, flags: 0x0},
+	1161: {region: 0x165, script: 0x5a, flags: 0x0},
+	1162: {region: 0x12b, script: 0x5a, flags: 0x0},
+	1163: {region: 0x12b, script: 0x5a, flags: 0x0},
+	1164: {region: 0x12e, script: 0x5a, flags: 0x0},
+	1165: {region: 0x165, script: 0x5, flags: 0x0},
+	1166: {region: 0x161, script: 0x5a, flags: 0x0},
+	1167: {region: 0x87, script: 0x34, flags: 0x0},
+	1168: {region: 0xdb, script: 0x22, flags: 0x0},
+	1169: {region: 0xe7, script: 0x5a, flags: 0x0},
+	1170: {region: 0x43, script: 0xe7, flags: 0x0},
+	1171: {region: 0x165, script: 0x5a, flags: 0x0},
+	1172: {region: 0x106, script: 0x20, flags: 0x0},
+	1173: {region: 0x165, script: 0x5a, flags: 0x0},
+	1174: {region: 0x165, script: 0x5a, flags: 0x0},
+	1175: {region: 0x131, script: 0x5a, flags: 0x0},
+	1176: {region: 0x165, script: 0x5a, flags: 0x0},
+	1177: {region: 0x123, script: 0xe6, flags: 0x0},
+	1178: {region: 0x32, script: 0x5a, flags: 0x0},
+	1179: {region: 0x165, script: 0x5a, flags: 0x0},
+	1180: {region: 0x165, script: 0x5a, flags: 0x0},
+	1181: {region: 0xce, script: 0x5a, flags: 0x0},
+	1182: {region: 0x165, script: 0x5a, flags: 0x0},
+	1183: {region: 0x165, script: 0x5a, flags: 0x0},
+	1184: {region: 0x12d, script: 0x5a, flags: 0x0},
+	1185: {region: 0x165, script: 0x5a, flags: 0x0},
+	1187: {region: 0x165, script: 0x5a, flags: 0x0},
+	1188: {region: 0xd4, script: 0x5a, flags: 0x0},
+	1189: {region: 0x53, script: 0xdf, flags: 0x0},
+	1190: {region: 0xe5, script: 0x5a, flags: 0x0},
+	1191: {region: 0x165, script: 0x5a, flags: 0x0},
+	1192: {region: 0x106, script: 0x20, flags: 0x0},
+	1193: {region: 0xba, script: 0x5a, flags: 0x0},
+	1194: {region: 0x165, script: 0x5a, flags: 0x0},
+	1195: {region: 0x106, script: 0x20, flags: 0x0},
+	1196: {region: 0x3f, script: 0x4, flags: 0x1},
+	1197: {region: 0x11c, script: 0xea, flags: 0x0},
+	1198: {region: 0x130, script: 0x20, flags: 0x0},
+	1199: {region: 0x75, script: 0x5a, flags: 0x0},
+	1200: {region: 0x2a, script: 0x5a, flags: 0x0},
+	1202: {region: 0x43, script: 0x3, flags: 0x1},
+	1203: {region: 0x99, script: 0xe, flags: 0x0},
+	1204: {region: 0xe8, script: 0x5, flags: 0x0},
+	1205: {region: 0x165, script: 0x5a, flags: 0x0},
+	1206: {region: 0x165, script: 0x5a, flags: 0x0},
+	1207: {region: 0x165, script: 0x5a, flags: 0x0},
+	1208: {region: 0x165, script: 0x5a, flags: 0x0},
+	1209: {region: 0x165, script: 0x5a, flags: 0x0},
+	1210: {region: 0x165, script: 0x5a, flags: 0x0},
+	1211: {region: 0x165, script: 0x5a, flags: 0x0},
+	1212: {region: 0x46, script: 0x4, flags: 0x1},
+	1213: {region: 0x165, script: 0x5a, flags: 0x0},
+	1214: {region: 0xb4, script: 0xeb, flags: 0x0},
+	1215: {region: 0x165, script: 0x5a, flags: 0x0},
+	1216: {region: 0x161, script: 0x5a, flags: 0x0},
+	1217: {region: 0x9e, script: 0x5a, flags: 0x0},
+	1218: {region: 0x106, script: 0x5a, flags: 0x0},
+	1219: {region: 0x13e, script: 0x5a, flags: 0x0},
+	1220: {region: 0x11b, script: 0x5a, flags: 0x0},
+	1221: {region: 0x165, script: 0x5a, flags: 0x0},
+	1222: {region: 0x36, script: 0x5a, flags: 0x0},
+	1223: {region: 0x60, script: 0x5a, flags: 0x0},
+	1224: {region: 0xd1, script: 0x5a, flags: 0x0},
+	1225: {region: 0x1, script: 0x5a, flags: 0x0},
+	1226: {region: 0x106, script: 0x5a, flags: 0x0},
+	1227: {region: 0x6a, script: 0x5a, flags: 0x0},
+	1228: {region: 0x12f, script: 0x5a, flags: 0x0},
+	1229: {region: 0x165, script: 0x5a, flags: 0x0},
+	1230: {region: 0x36, script: 0x5a, flags: 0x0},
+	1231: {region: 0x4e, script: 0x5a, flags: 0x0},
+	1232: {region: 0x165, script: 0x5a, flags: 0x0},
+	1233: {region: 0x6f, script: 0x2c, flags: 0x0},
+	1234: {region: 0x165, script: 0x5a, flags: 0x0},
+	1235: {region: 0xe7, script: 0x5a, flags: 0x0},
+	1236: {region: 0x2f, script: 0x5a, flags: 0x0},
+	1237: {region: 0x99, script: 0xe1, flags: 0x0},
+	1238: {region: 0x99, script: 0x22, flags: 0x0},
+	1239: {region: 0x165, script: 0x5a, flags: 0x0},
+	1240: {region: 0x165, script: 0x5a, flags: 0x0},
+	1241: {region: 0x165, script: 0x5a, flags: 0x0},
+	1242: {region: 0x165, script: 0x5a, flags: 0x0},
+	1243: {region: 0x165, script: 0x5a, flags: 0x0},
+	1244: {region: 0x165, script: 0x5a, flags: 0x0},
+	1245: {region: 0x165, script: 0x5a, flags: 0x0},
+	1246: {region: 0x165, script: 0x5a, flags: 0x0},
+	1247: {region: 0x165, script: 0x5a, flags: 0x0},
+	1248: {region: 0x140, script: 0x5a, flags: 0x0},
+	1249: {region: 0x165, script: 0x5a, flags: 0x0},
+	1250: {region: 0x165, script: 0x5a, flags: 0x0},
+	1251: {region: 0xa8, script: 0x5, flags: 0x0},
+	1252: {region: 0x165, script: 0x5a, flags: 0x0},
+	1253: {region: 0x114, script: 0x5a, flags: 0x0},
+	1254: {region: 0x165, script: 0x5a, flags: 0x0},
+	1255: {region: 0x165, script: 0x5a, flags: 0x0},
+	1256: {region: 0x165, script: 0x5a, flags: 0x0},
+	1257: {region: 0x165, script: 0x5a, flags: 0x0},
+	1258: {region: 0x99, script: 0x22, flags: 0x0},
+	1259: {region: 0x53, script: 0x3b, flags: 0x0},
+	1260: {region: 0x165, script: 0x5a, flags: 0x0},
+	1261: {region: 0x165, script: 0x5a, flags: 0x0},
+	1262: {region: 0x41, script: 0x5a, flags: 0x0},
+	1263: {region: 0x165, script: 0x5a, flags: 0x0},
+	1264: {region: 0x12b, script: 0x18, flags: 0x0},
+	1265: {region: 0x165, script: 0x5a, flags: 0x0},
+	1266: {region: 0x161, script: 0x5a, flags: 0x0},
+	1267: {region: 0x165, script: 0x5a, flags: 0x0},
+	1268: {region: 0x12b, script: 0x62, flags: 0x0},
+	1269: {region: 0x12b, script: 0x63, flags: 0x0},
+	1270: {region: 0x7d, script: 0x2e, flags: 0x0},
+	1271: {region: 0x53, script: 0x67, flags: 0x0},
+	1272: {region: 0x10b, script: 0x6c, flags: 0x0},
+	1273: {region: 0x108, script: 0x77, flags: 0x0},
+	1274: {region: 0x99, script: 0x22, flags: 0x0},
+	1275: {region: 0x131, script: 0x5a, flags: 0x0},
+	1276: {region: 0x165, script: 0x5a, flags: 0x0},
+	1277: {region: 0x9c, script: 0x8e, flags: 0x0},
+	1278: {region: 0x165, script: 0x5a, flags: 0x0},
+	1279: {region: 0x15e, script: 0xc7, flags: 0x0},
+	1280: {region: 0x165, script: 0x5a, flags: 0x0},
+	1281: {region: 0x165, script: 0x5a, flags: 0x0},
+	1282: {region: 0xdb, script: 0x22, flags: 0x0},
+	1283: {region: 0x165, script: 0x5a, flags: 0x0},
+	1284: {region: 0x165, script: 0x5a, flags: 0x0},
+	1285: {region: 0xd1, script: 0x5a, flags: 0x0},
+	1286: {region: 0x75, script: 0x5a, flags: 0x0},
+	1287: {region: 0x165, script: 0x5a, flags: 0x0},
+	1288: {region: 0x165, script: 0x5a, flags: 0x0},
+	1289: {region: 0x52, script: 0x5a, flags: 0x0},
+	1290: {region: 0x165, script: 0x5a, flags: 0x0},
+	1291: {region: 0x165, script: 0x5a, flags: 0x0},
+	1292: {region: 0x165, script: 0x5a, flags: 0x0},
+	1293: {region: 0x52, script: 0x5a, flags: 0x0},
+	1294: {region: 0x165, script: 0x5a, flags: 0x0},
+	1295: {region: 0x165, script: 0x5a, flags: 0x0},
+	1296: {region: 0x165, script: 0x5a, flags: 0x0},
+	1297: {region: 0x165, script: 0x5a, flags: 0x0},
+	1298: {region: 0x1, script: 0x3e, flags: 0x0},
+	1299: {region: 0x165, script: 0x5a, flags: 0x0},
+	1300: {region: 0x165, script: 0x5a, flags: 0x0},
+	1301: {region: 0x165, script: 0x5a, flags: 0x0},
+	1302: {region: 0x165, script: 0x5a, flags: 0x0},
+	1303: {region: 0x165, script: 0x5a, flags: 0x0},
+	1304: {region: 0xd6, script: 0x5a, flags: 0x0},
+	1305: {region: 0x165, script: 0x5a, flags: 0x0},
+	1306: {region: 0x165, script: 0x5a, flags: 0x0},
+	1307: {region: 0x165, script: 0x5a, flags: 0x0},
+	1308: {region: 0x41, script: 0x5a, flags: 0x0},
+	1309: {region: 0x165, script: 0x5a, flags: 0x0},
+	1310: {region: 0xcf, script: 0x5a, flags: 0x0},
+	1311: {region: 0x4a, script: 0x3, flags: 0x1},
+	1312: {region: 0x165, script: 0x5a, flags: 0x0},
+	1313: {region: 0x165, script: 0x5a, flags: 0x0},
+	1314: {region: 0x165, script: 0x5a, flags: 0x0},
+	1315: {region: 0x53, script: 0x5a, flags: 0x0},
+	1316: {region: 0x10b, script: 0x5a, flags: 0x0},
+	1318: {region: 0xa8, script: 0x5, flags: 0x0},
+	1319: {region: 0xd9, script: 0x5a, flags: 0x0},
+	1320: {region: 0xba, script: 0xe3, flags: 0x0},
+	1321: {region: 0x4d, script: 0x14, flags: 0x1},
+	1322: {region: 0x53, script: 0x7d, flags: 0x0},
+	1323: {region: 0x165, script: 0x5a, flags: 0x0},
+	1324: {region: 0x122, script: 0x5a, flags: 0x0},
+	1325: {region: 0xd0, script: 0x5a, flags: 0x0},
+	1326: {region: 0x165, script: 0x5a, flags: 0x0},
+	1327: {region: 0x161, script: 0x5a, flags: 0x0},
+	1329: {region: 0x12b, script: 0x5a, flags: 0x0},
+}
+
+// likelyLangList holds lists info associated with likelyLang.
+// Size: 388 bytes, 97 elements
+var likelyLangList = [97]likelyScriptRegion{
+	0:  {region: 0x9c, script: 0x7, flags: 0x0},
+	1:  {region: 0xa1, script: 0x78, flags: 0x2},
+	2:  {region: 0x11c, script: 0x84, flags: 0x2},
+	3:  {region: 0x32, script: 0x5a, flags: 0x0},
+	4:  {region: 0x9b, script: 0x5, flags: 0x4},
+	5:  {region: 0x9c, script: 0x5, flags: 0x4},
+	6:  {region: 0x106, script: 0x20, flags: 0x4},
+	7:  {region: 0x9c, script: 0x5, flags: 0x2},
+	8:  {region: 0x106, script: 0x20, flags: 0x0},
+	9:  {region: 0x38, script: 0x2f, flags: 0x2},
+	10: {region: 0x135, script: 0x5a, flags: 0x0},
+	11: {region: 0x7b, script: 0xca, flags: 0x2},
+	12: {region: 0x114, script: 0x5a, flags: 0x0},
+	13: {region: 0x84, script: 0x1, flags: 0x2},
+	14: {region: 0x5d, script: 0x1f, flags: 0x0},
+	15: {region: 0x87, script: 0x5f, flags: 0x2},
+	16: {region: 0xd6, script: 0x5a, flags: 0x0},
+	17: {region: 0x52, script: 0x5, flags: 0x4},
+	18: {region: 0x10b, script: 0x5, flags: 0x4},
+	19: {region: 0xae, script: 0x20, flags: 0x0},
+	20: {region: 0x24, script: 0x5, flags: 0x4},
+	21: {region: 0x53, script: 0x5, flags: 0x4},
+	22: {region: 0x9c, script: 0x5, flags: 0x4},
+	23: {region: 0xc5, script: 0x5, flags: 0x4},
+	24: {region: 0x53, script: 0x5, flags: 0x2},
+	25: {region: 0x12b, script: 0x5a, flags: 0x0},
+	26: {region: 0xb0, script: 0x5, flags: 0x4},
+	27: {region: 0x9b, script: 0x5, flags: 0x2},
+	28: {region: 0xa5, script: 0x20, flags: 0x0},
+	29: {region: 0x53, script: 0x5, flags: 0x4},
+	30: {region: 0x12b, script: 0x5a, flags: 0x4},
+	31: {region: 0x53, script: 0x5, flags: 0x2},
+	32: {region: 0x12b, script: 0x5a, flags: 0x2},
+	33: {region: 0xdb, script: 0x22, flags: 0x0},
+	34: {region: 0x99, script: 0x5d, flags: 0x2},
+	35: {region: 0x83, script: 0x5a, flags: 0x0},
+	36: {region: 0x84, script: 0x7c, flags: 0x4},
+	37: {region: 0x84, script: 0x7c, flags: 0x2},
+	38: {region: 0xc5, script: 0x20, flags: 0x0},
+	39: {region: 0x53, script: 0x70, flags: 0x4},
+	40: {region: 0x53, script: 0x70, flags: 0x2},
+	41: {region: 0xd0, script: 0x5a, flags: 0x0},
+	42: {region: 0x4a, script: 0x5, flags: 0x4},
+	43: {region: 0x95, script: 0x5, flags: 0x4},
+	44: {region: 0x99, script: 0x36, flags: 0x0},
+	45: {region: 0xe8, script: 0x5, flags: 0x4},
+	46: {region: 0xe8, script: 0x5, flags: 0x2},
+	47: {region: 0x9c, script: 0x88, flags: 0x0},
+	48: {region: 0x53, script: 0x89, flags: 0x2},
+	49: {region: 0xba, script: 0xe3, flags: 0x0},
+	50: {region: 0xd9, script: 0x5a, flags: 0x4},
+	51: {region: 0xe8, script: 0x5, flags: 0x0},
+	52: {region: 0x99, script: 0x22, flags: 0x2},
+	53: {region: 0x99, script: 0x4f, flags: 0x2},
+	54: {region: 0x99, script: 0xce, flags: 0x2},
+	55: {region: 0x105, script: 0x20, flags: 0x0},
+	56: {region: 0xbd, script: 0x5a, flags: 0x4},
+	57: {region: 0x104, script: 0x5a, flags: 0x4},
+	58: {region: 0x106, script: 0x5a, flags: 0x4},
+	59: {region: 0x12b, script: 0x5a, flags: 0x4},
+	60: {region: 0x124, script: 0x20, flags: 0x0},
+	61: {region: 0xe8, script: 0x5, flags: 0x4},
+	62: {region: 0xe8, script: 0x5, flags: 0x2},
+	63: {region: 0x53, script: 0x5, flags: 0x0},
+	64: {region: 0xae, script: 0x20, flags: 0x4},
+	65: {region: 0xc5, script: 0x20, flags: 0x4},
+	66: {region: 0xae, script: 0x20, flags: 0x2},
+	67: {region: 0x99, script: 0xe, flags: 0x0},
+	68: {region: 0xdb, script: 0x22, flags: 0x4},
+	69: {region: 0xdb, script: 0x22, flags: 0x2},
+	70: {region: 0x137, script: 0x5a, flags: 0x0},
+	71: {region: 0x24, script: 0x5, flags: 0x4},
+	72: {region: 0x53, script: 0x20, flags: 0x4},
+	73: {region: 0x24, script: 0x5, flags: 0x2},
+	74: {region: 0x8d, script: 0x3c, flags: 0x0},
+	75: {region: 0x53, script: 0x3b, flags: 0x4},
+	76: {region: 0x53, script: 0x3b, flags: 0x2},
+	77: {region: 0x53, script: 0x3b, flags: 0x0},
+	78: {region: 0x2f, script: 0x3c, flags: 0x4},
+	79: {region: 0x3e, script: 0x3c, flags: 0x4},
+	80: {region: 0x7b, script: 0x3c, flags: 0x4},
+	81: {region: 0x7e, script: 0x3c, flags: 0x4},
+	82: {region: 0x8d, script: 0x3c, flags: 0x4},
+	83: {region: 0x95, script: 0x3c, flags: 0x4},
+	84: {region: 0xc6, script: 0x3c, flags: 0x4},
+	85: {region: 0xd0, script: 0x3c, flags: 0x4},
+	86: {region: 0xe2, script: 0x3c, flags: 0x4},
+	87: {region: 0xe5, script: 0x3c, flags: 0x4},
+	88: {region: 0xe7, script: 0x3c, flags: 0x4},
+	89: {region: 0x116, script: 0x3c, flags: 0x4},
+	90: {region: 0x123, script: 0x3c, flags: 0x4},
+	91: {region: 0x12e, script: 0x3c, flags: 0x4},
+	92: {region: 0x135, script: 0x3c, flags: 0x4},
+	93: {region: 0x13e, script: 0x3c, flags: 0x4},
+	94: {region: 0x12e, script: 0x11, flags: 0x2},
+	95: {region: 0x12e, script: 0x37, flags: 0x2},
+	96: {region: 0x12e, script: 0x3c, flags: 0x2},
+}
+
+type likelyLangScript struct {
+	lang   uint16
+	script uint8
+	flags  uint8
+}
+
+// likelyRegion is a lookup table, indexed by regionID, for the most likely
+// languages and scripts given incomplete information. If more entries exist
+// for a given regionID, lang and script are the index and size respectively
+// of the list in likelyRegionList.
+// TODO: exclude containers and user-definable regions from the list.
+// Size: 1432 bytes, 358 elements
+var likelyRegion = [358]likelyLangScript{
+	34:  {lang: 0xd7, script: 0x5a, flags: 0x0},
+	35:  {lang: 0x3a, script: 0x5, flags: 0x0},
+	36:  {lang: 0x0, script: 0x2, flags: 0x1},
+	39:  {lang: 0x2, script: 0x2, flags: 0x1},
+	40:  {lang: 0x4, script: 0x2, flags: 0x1},
+	42:  {lang: 0x3c0, script: 0x5a, flags: 0x0},
+	43:  {lang: 0x0, script: 0x5a, flags: 0x0},
+	44:  {lang: 0x13e, script: 0x5a, flags: 0x0},
+	45:  {lang: 0x41b, script: 0x5a, flags: 0x0},
+	46:  {lang: 0x10d, script: 0x5a, flags: 0x0},
+	48:  {lang: 0x367, script: 0x5a, flags: 0x0},
+	49:  {lang: 0x444, script: 0x5a, flags: 0x0},
+	50:  {lang: 0x58, script: 0x5a, flags: 0x0},
+	51:  {lang: 0x6, script: 0x2, flags: 0x1},
+	53:  {lang: 0xa5, script: 0xe, flags: 0x0},
+	54:  {lang: 0x367, script: 0x5a, flags: 0x0},
+	55:  {lang: 0x15e, script: 0x5a, flags: 0x0},
+	56:  {lang: 0x7e, script: 0x20, flags: 0x0},
+	57:  {lang: 0x3a, script: 0x5, flags: 0x0},
+	58:  {lang: 0x3d9, script: 0x5a, flags: 0x0},
+	59:  {lang: 0x15e, script: 0x5a, flags: 0x0},
+	60:  {lang: 0x15e, script: 0x5a, flags: 0x0},
+	62:  {lang: 0x31f, script: 0x5a, flags: 0x0},
+	63:  {lang: 0x13e, script: 0x5a, flags: 0x0},
+	64:  {lang: 0x3a1, script: 0x5a, flags: 0x0},
+	65:  {lang: 0x3c0, script: 0x5a, flags: 0x0},
+	67:  {lang: 0x8, script: 0x2, flags: 0x1},
+	69:  {lang: 0x0, script: 0x5a, flags: 0x0},
+	71:  {lang: 0x71, script: 0x20, flags: 0x0},
+	73:  {lang: 0x512, script: 0x3e, flags: 0x2},
+	74:  {lang: 0x31f, script: 0x5, flags: 0x2},
+	75:  {lang: 0x445, script: 0x5a, flags: 0x0},
+	76:  {lang: 0x15e, script: 0x5a, flags: 0x0},
+	77:  {lang: 0x15e, script: 0x5a, flags: 0x0},
+	78:  {lang: 0x10d, script: 0x5a, flags: 0x0},
+	79:  {lang: 0x15e, script: 0x5a, flags: 0x0},
+	81:  {lang: 0x13e, script: 0x5a, flags: 0x0},
+	82:  {lang: 0x15e, script: 0x5a, flags: 0x0},
+	83:  {lang: 0xa, script: 0x4, flags: 0x1},
+	84:  {lang: 0x13e, script: 0x5a, flags: 0x0},
+	85:  {lang: 0x0, script: 0x5a, flags: 0x0},
+	86:  {lang: 0x13e, script: 0x5a, flags: 0x0},
+	89:  {lang: 0x13e, script: 0x5a, flags: 0x0},
+	90:  {lang: 0x3c0, script: 0x5a, flags: 0x0},
+	91:  {lang: 0x3a1, script: 0x5a, flags: 0x0},
+	93:  {lang: 0xe, script: 0x2, flags: 0x1},
+	94:  {lang: 0xfa, script: 0x5a, flags: 0x0},
+	96:  {lang: 0x10d, script: 0x5a, flags: 0x0},
+	98:  {lang: 0x1, script: 0x5a, flags: 0x0},
+	99:  {lang: 0x101, script: 0x5a, flags: 0x0},
+	101: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	103: {lang: 0x10, script: 0x2, flags: 0x1},
+	104: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	105: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	106: {lang: 0x140, script: 0x5a, flags: 0x0},
+	107: {lang: 0x3a, script: 0x5, flags: 0x0},
+	108: {lang: 0x3a, script: 0x5, flags: 0x0},
+	109: {lang: 0x46f, script: 0x2c, flags: 0x0},
+	110: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	111: {lang: 0x12, script: 0x2, flags: 0x1},
+	113: {lang: 0x10d, script: 0x5a, flags: 0x0},
+	114: {lang: 0x151, script: 0x5a, flags: 0x0},
+	115: {lang: 0x1c0, script: 0x22, flags: 0x2},
+	118: {lang: 0x158, script: 0x5a, flags: 0x0},
+	120: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	122: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	123: {lang: 0x14, script: 0x2, flags: 0x1},
+	125: {lang: 0x16, script: 0x3, flags: 0x1},
+	126: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	128: {lang: 0x21, script: 0x5a, flags: 0x0},
+	130: {lang: 0x245, script: 0x5a, flags: 0x0},
+	132: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	133: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	134: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	135: {lang: 0x19, script: 0x2, flags: 0x1},
+	136: {lang: 0x0, script: 0x5a, flags: 0x0},
+	137: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	139: {lang: 0x3c0, script: 0x5a, flags: 0x0},
+	141: {lang: 0x529, script: 0x3c, flags: 0x0},
+	142: {lang: 0x0, script: 0x5a, flags: 0x0},
+	143: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	144: {lang: 0x1d1, script: 0x5a, flags: 0x0},
+	145: {lang: 0x1d4, script: 0x5a, flags: 0x0},
+	146: {lang: 0x1d5, script: 0x5a, flags: 0x0},
+	148: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	149: {lang: 0x1b, script: 0x2, flags: 0x1},
+	151: {lang: 0x1bc, script: 0x3e, flags: 0x0},
+	153: {lang: 0x1d, script: 0x3, flags: 0x1},
+	155: {lang: 0x3a, script: 0x5, flags: 0x0},
+	156: {lang: 0x20, script: 0x2, flags: 0x1},
+	157: {lang: 0x1f8, script: 0x5a, flags: 0x0},
+	158: {lang: 0x1f9, script: 0x5a, flags: 0x0},
+	161: {lang: 0x3a, script: 0x5, flags: 0x0},
+	162: {lang: 0x200, script: 0x49, flags: 0x0},
+	164: {lang: 0x445, script: 0x5a, flags: 0x0},
+	165: {lang: 0x28a, script: 0x20, flags: 0x0},
+	166: {lang: 0x22, script: 0x3, flags: 0x1},
+	168: {lang: 0x25, script: 0x2, flags: 0x1},
+	170: {lang: 0x254, script: 0x53, flags: 0x0},
+	171: {lang: 0x254, script: 0x53, flags: 0x0},
+	172: {lang: 0x3a, script: 0x5, flags: 0x0},
+	174: {lang: 0x3e2, script: 0x20, flags: 0x0},
+	175: {lang: 0x27, script: 0x2, flags: 0x1},
+	176: {lang: 0x3a, script: 0x5, flags: 0x0},
+	178: {lang: 0x10d, script: 0x5a, flags: 0x0},
+	179: {lang: 0x40c, script: 0xcf, flags: 0x0},
+	181: {lang: 0x43b, script: 0x5a, flags: 0x0},
+	182: {lang: 0x2c0, script: 0x5a, flags: 0x0},
+	183: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	184: {lang: 0x2c7, script: 0x5a, flags: 0x0},
+	185: {lang: 0x3a, script: 0x5, flags: 0x0},
+	186: {lang: 0x29, script: 0x2, flags: 0x1},
+	187: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	188: {lang: 0x2b, script: 0x2, flags: 0x1},
+	189: {lang: 0x432, script: 0x5a, flags: 0x0},
+	190: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	191: {lang: 0x2f1, script: 0x5a, flags: 0x0},
+	194: {lang: 0x2d, script: 0x2, flags: 0x1},
+	195: {lang: 0xa0, script: 0x5a, flags: 0x0},
+	196: {lang: 0x2f, script: 0x2, flags: 0x1},
+	197: {lang: 0x31, script: 0x2, flags: 0x1},
+	198: {lang: 0x33, script: 0x2, flags: 0x1},
+	200: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	201: {lang: 0x35, script: 0x2, flags: 0x1},
+	203: {lang: 0x320, script: 0x5a, flags: 0x0},
+	204: {lang: 0x37, script: 0x3, flags: 0x1},
+	205: {lang: 0x128, script: 0xe5, flags: 0x0},
+	207: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	208: {lang: 0x31f, script: 0x5a, flags: 0x0},
+	209: {lang: 0x3c0, script: 0x5a, flags: 0x0},
+	210: {lang: 0x16, script: 0x5a, flags: 0x0},
+	211: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	212: {lang: 0x1b4, script: 0x5a, flags: 0x0},
+	214: {lang: 0x1b4, script: 0x5, flags: 0x2},
+	216: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	217: {lang: 0x367, script: 0x5a, flags: 0x0},
+	218: {lang: 0x347, script: 0x5a, flags: 0x0},
+	219: {lang: 0x351, script: 0x22, flags: 0x0},
+	225: {lang: 0x3a, script: 0x5, flags: 0x0},
+	226: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	228: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	229: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	230: {lang: 0x486, script: 0x5a, flags: 0x0},
+	231: {lang: 0x153, script: 0x5a, flags: 0x0},
+	232: {lang: 0x3a, script: 0x3, flags: 0x1},
+	233: {lang: 0x3b3, script: 0x5a, flags: 0x0},
+	234: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	236: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	237: {lang: 0x3a, script: 0x5, flags: 0x0},
+	238: {lang: 0x3c0, script: 0x5a, flags: 0x0},
+	240: {lang: 0x3a2, script: 0x5a, flags: 0x0},
+	241: {lang: 0x194, script: 0x5a, flags: 0x0},
+	243: {lang: 0x3a, script: 0x5, flags: 0x0},
+	258: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	260: {lang: 0x3d, script: 0x2, flags: 0x1},
+	261: {lang: 0x432, script: 0x20, flags: 0x0},
+	262: {lang: 0x3f, script: 0x2, flags: 0x1},
+	263: {lang: 0x3e5, script: 0x5a, flags: 0x0},
+	264: {lang: 0x3a, script: 0x5, flags: 0x0},
+	266: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	267: {lang: 0x3a, script: 0x5, flags: 0x0},
+	268: {lang: 0x41, script: 0x2, flags: 0x1},
+	271: {lang: 0x416, script: 0x5a, flags: 0x0},
+	272: {lang: 0x347, script: 0x5a, flags: 0x0},
+	273: {lang: 0x43, script: 0x2, flags: 0x1},
+	275: {lang: 0x1f9, script: 0x5a, flags: 0x0},
+	276: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	277: {lang: 0x429, script: 0x5a, flags: 0x0},
+	278: {lang: 0x367, script: 0x5a, flags: 0x0},
+	280: {lang: 0x3c0, script: 0x5a, flags: 0x0},
+	282: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	284: {lang: 0x45, script: 0x2, flags: 0x1},
+	288: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	289: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	290: {lang: 0x47, script: 0x2, flags: 0x1},
+	291: {lang: 0x49, script: 0x3, flags: 0x1},
+	292: {lang: 0x4c, script: 0x2, flags: 0x1},
+	293: {lang: 0x477, script: 0x5a, flags: 0x0},
+	294: {lang: 0x3c0, script: 0x5a, flags: 0x0},
+	295: {lang: 0x476, script: 0x5a, flags: 0x0},
+	296: {lang: 0x4e, script: 0x2, flags: 0x1},
+	297: {lang: 0x482, script: 0x5a, flags: 0x0},
+	299: {lang: 0x50, script: 0x4, flags: 0x1},
+	301: {lang: 0x4a0, script: 0x5a, flags: 0x0},
+	302: {lang: 0x54, script: 0x2, flags: 0x1},
+	303: {lang: 0x445, script: 0x5a, flags: 0x0},
+	304: {lang: 0x56, script: 0x3, flags: 0x1},
+	305: {lang: 0x445, script: 0x5a, flags: 0x0},
+	309: {lang: 0x512, script: 0x3e, flags: 0x2},
+	310: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	311: {lang: 0x4bc, script: 0x5a, flags: 0x0},
+	312: {lang: 0x1f9, script: 0x5a, flags: 0x0},
+	315: {lang: 0x13e, script: 0x5a, flags: 0x0},
+	318: {lang: 0x4c3, script: 0x5a, flags: 0x0},
+	319: {lang: 0x8a, script: 0x5a, flags: 0x0},
+	320: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	322: {lang: 0x41b, script: 0x5a, flags: 0x0},
+	333: {lang: 0x59, script: 0x2, flags: 0x1},
+	350: {lang: 0x3a, script: 0x5, flags: 0x0},
+	351: {lang: 0x5b, script: 0x2, flags: 0x1},
+	356: {lang: 0x423, script: 0x5a, flags: 0x0},
+}
+
+// likelyRegionList holds lists info associated with likelyRegion.
+// Size: 372 bytes, 93 elements
+var likelyRegionList = [93]likelyLangScript{
+	0:  {lang: 0x148, script: 0x5, flags: 0x0},
+	1:  {lang: 0x476, script: 0x5a, flags: 0x0},
+	2:  {lang: 0x431, script: 0x5a, flags: 0x0},
+	3:  {lang: 0x2ff, script: 0x20, flags: 0x0},
+	4:  {lang: 0x1d7, script: 0x8, flags: 0x0},
+	5:  {lang: 0x274, script: 0x5a, flags: 0x0},
+	6:  {lang: 0xb7, script: 0x5a, flags: 0x0},
+	7:  {lang: 0x432, script: 0x20, flags: 0x0},
+	8:  {lang: 0x12d, script: 0xe7, flags: 0x0},
+	9:  {lang: 0x351, script: 0x22, flags: 0x0},
+	10: {lang: 0x529, script: 0x3b, flags: 0x0},
+	11: {lang: 0x4ac, script: 0x5, flags: 0x0},
+	12: {lang: 0x523, script: 0x5a, flags: 0x0},
+	13: {lang: 0x29a, script: 0xe6, flags: 0x0},
+	14: {lang: 0x136, script: 0x34, flags: 0x0},
+	15: {lang: 0x48a, script: 0x5a, flags: 0x0},
+	16: {lang: 0x3a, script: 0x5, flags: 0x0},
+	17: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	18: {lang: 0x27, script: 0x2c, flags: 0x0},
+	19: {lang: 0x139, script: 0x5a, flags: 0x0},
+	20: {lang: 0x26a, script: 0x5, flags: 0x2},
+	21: {lang: 0x512, script: 0x3e, flags: 0x2},
+	22: {lang: 0x210, script: 0x2e, flags: 0x0},
+	23: {lang: 0x5, script: 0x20, flags: 0x0},
+	24: {lang: 0x274, script: 0x5a, flags: 0x0},
+	25: {lang: 0x136, script: 0x34, flags: 0x0},
+	26: {lang: 0x2ff, script: 0x20, flags: 0x0},
+	27: {lang: 0x1e1, script: 0x5a, flags: 0x0},
+	28: {lang: 0x31f, script: 0x5, flags: 0x0},
+	29: {lang: 0x1be, script: 0x22, flags: 0x0},
+	30: {lang: 0x4b4, script: 0x5, flags: 0x0},
+	31: {lang: 0x236, script: 0x75, flags: 0x0},
+	32: {lang: 0x148, script: 0x5, flags: 0x0},
+	33: {lang: 0x476, script: 0x5a, flags: 0x0},
+	34: {lang: 0x24a, script: 0x4e, flags: 0x0},
+	35: {lang: 0xe6, script: 0x5, flags: 0x0},
+	36: {lang: 0x226, script: 0xe6, flags: 0x0},
+	37: {lang: 0x3a, script: 0x5, flags: 0x0},
+	38: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	39: {lang: 0x2b8, script: 0x57, flags: 0x0},
+	40: {lang: 0x226, script: 0xe6, flags: 0x0},
+	41: {lang: 0x3a, script: 0x5, flags: 0x0},
+	42: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	43: {lang: 0x3dc, script: 0x5a, flags: 0x0},
+	44: {lang: 0x4ae, script: 0x20, flags: 0x0},
+	45: {lang: 0x2ff, script: 0x20, flags: 0x0},
+	46: {lang: 0x431, script: 0x5a, flags: 0x0},
+	47: {lang: 0x331, script: 0x75, flags: 0x0},
+	48: {lang: 0x213, script: 0x5a, flags: 0x0},
+	49: {lang: 0x30b, script: 0x20, flags: 0x0},
+	50: {lang: 0x242, script: 0x5, flags: 0x0},
+	51: {lang: 0x529, script: 0x3c, flags: 0x0},
+	52: {lang: 0x3c0, script: 0x5a, flags: 0x0},
+	53: {lang: 0x3a, script: 0x5, flags: 0x0},
+	54: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	55: {lang: 0x2ed, script: 0x5a, flags: 0x0},
+	56: {lang: 0x4b4, script: 0x5, flags: 0x0},
+	57: {lang: 0x88, script: 0x22, flags: 0x0},
+	58: {lang: 0x4b4, script: 0x5, flags: 0x0},
+	59: {lang: 0x4b4, script: 0x5, flags: 0x0},
+	60: {lang: 0xbe, script: 0x22, flags: 0x0},
+	61: {lang: 0x3dc, script: 0x5a, flags: 0x0},
+	62: {lang: 0x7e, script: 0x20, flags: 0x0},
+	63: {lang: 0x3e2, script: 0x20, flags: 0x0},
+	64: {lang: 0x267, script: 0x5a, flags: 0x0},
+	65: {lang: 0x444, script: 0x5a, flags: 0x0},
+	66: {lang: 0x512, script: 0x3e, flags: 0x0},
+	67: {lang: 0x412, script: 0x5a, flags: 0x0},
+	68: {lang: 0x4ae, script: 0x20, flags: 0x0},
+	69: {lang: 0x3a, script: 0x5, flags: 0x0},
+	70: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	71: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	72: {lang: 0x35, script: 0x5, flags: 0x0},
+	73: {lang: 0x46b, script: 0xe6, flags: 0x0},
+	74: {lang: 0x2ec, script: 0x5, flags: 0x0},
+	75: {lang: 0x30f, script: 0x75, flags: 0x0},
+	76: {lang: 0x467, script: 0x20, flags: 0x0},
+	77: {lang: 0x148, script: 0x5, flags: 0x0},
+	78: {lang: 0x3a, script: 0x5, flags: 0x0},
+	79: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	80: {lang: 0x48a, script: 0x5a, flags: 0x0},
+	81: {lang: 0x58, script: 0x5, flags: 0x0},
+	82: {lang: 0x219, script: 0x20, flags: 0x0},
+	83: {lang: 0x81, script: 0x34, flags: 0x0},
+	84: {lang: 0x529, script: 0x3c, flags: 0x0},
+	85: {lang: 0x48c, script: 0x5a, flags: 0x0},
+	86: {lang: 0x4ae, script: 0x20, flags: 0x0},
+	87: {lang: 0x512, script: 0x3e, flags: 0x0},
+	88: {lang: 0x3b3, script: 0x5a, flags: 0x0},
+	89: {lang: 0x431, script: 0x5a, flags: 0x0},
+	90: {lang: 0x432, script: 0x20, flags: 0x0},
+	91: {lang: 0x15e, script: 0x5a, flags: 0x0},
+	92: {lang: 0x446, script: 0x5, flags: 0x0},
+}
+
+type likelyTag struct {
+	lang   uint16
+	region uint16
+	script uint8
+}
+
+// Size: 198 bytes, 33 elements
+var likelyRegionGroup = [33]likelyTag{
+	1:  {lang: 0x139, region: 0xd6, script: 0x5a},
+	2:  {lang: 0x139, region: 0x135, script: 0x5a},
+	3:  {lang: 0x3c0, region: 0x41, script: 0x5a},
+	4:  {lang: 0x139, region: 0x2f, script: 0x5a},
+	5:  {lang: 0x139, region: 0xd6, script: 0x5a},
+	6:  {lang: 0x13e, region: 0xcf, script: 0x5a},
+	7:  {lang: 0x445, region: 0x12f, script: 0x5a},
+	8:  {lang: 0x3a, region: 0x6b, script: 0x5},
+	9:  {lang: 0x445, region: 0x4b, script: 0x5a},
+	10: {lang: 0x139, region: 0x161, script: 0x5a},
+	11: {lang: 0x139, region: 0x135, script: 0x5a},
+	12: {lang: 0x139, region: 0x135, script: 0x5a},
+	13: {lang: 0x13e, region: 0x59, script: 0x5a},
+	14: {lang: 0x529, region: 0x53, script: 0x3b},
+	15: {lang: 0x1be, region: 0x99, script: 0x22},
+	16: {lang: 0x1e1, region: 0x95, script: 0x5a},
+	17: {lang: 0x1f9, region: 0x9e, script: 0x5a},
+	18: {lang: 0x139, region: 0x2f, script: 0x5a},
+	19: {lang: 0x139, region: 0xe6, script: 0x5a},
+	20: {lang: 0x139, region: 0x8a, script: 0x5a},
+	21: {lang: 0x41b, region: 0x142, script: 0x5a},
+	22: {lang: 0x529, region: 0x53, script: 0x3b},
+	23: {lang: 0x4bc, region: 0x137, script: 0x5a},
+	24: {lang: 0x3a, region: 0x108, script: 0x5},
+	25: {lang: 0x3e2, region: 0x106, script: 0x20},
+	26: {lang: 0x3e2, region: 0x106, script: 0x20},
+	27: {lang: 0x139, region: 0x7b, script: 0x5a},
+	28: {lang: 0x10d, region: 0x60, script: 0x5a},
+	29: {lang: 0x139, region: 0xd6, script: 0x5a},
+	30: {lang: 0x13e, region: 0x1f, script: 0x5a},
+	31: {lang: 0x139, region: 0x9a, script: 0x5a},
+	32: {lang: 0x139, region: 0x7b, script: 0x5a},
+}
+
+// Size: 264 bytes, 33 elements
+var regionContainment = [33]uint64{
+	// Entry 0 - 1F
+	0x00000001ffffffff, 0x00000000200007a2, 0x0000000000003044, 0x0000000000000008,
+	0x00000000803c0010, 0x0000000000000020, 0x0000000000000040, 0x0000000000000080,
+	0x0000000000000100, 0x0000000000000200, 0x0000000000000400, 0x000000004000384c,
+	0x0000000000001000, 0x0000000000002000, 0x0000000000004000, 0x0000000000008000,
+	0x0000000000010000, 0x0000000000020000, 0x0000000000040000, 0x0000000000080000,
+	0x0000000000100000, 0x0000000000200000, 0x0000000001c1c000, 0x0000000000800000,
+	0x0000000001000000, 0x000000001e020000, 0x0000000004000000, 0x0000000008000000,
+	0x0000000010000000, 0x00000000200006a0, 0x0000000040002048, 0x0000000080000000,
+	// Entry 20 - 3F
+	0x0000000100000000,
+}
+
+// regionInclusion maps region identifiers to sets of regions in regionInclusionBits,
+// where each set holds all groupings that are directly connected in a region
+// containment graph.
+// Size: 358 bytes, 358 elements
+var regionInclusion = [358]uint8{
+	// Entry 0 - 3F
+	0x00, 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06,
+	0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
+	0x0f, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16,
+	0x17, 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e,
+	0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x26, 0x23,
+	0x24, 0x26, 0x27, 0x22, 0x28, 0x29, 0x2a, 0x2b,
+	0x26, 0x2c, 0x24, 0x23, 0x26, 0x25, 0x2a, 0x2d,
+	0x2e, 0x24, 0x2f, 0x2d, 0x26, 0x30, 0x31, 0x28,
+	// Entry 40 - 7F
+	0x26, 0x28, 0x26, 0x25, 0x31, 0x22, 0x32, 0x33,
+	0x34, 0x30, 0x22, 0x27, 0x27, 0x27, 0x35, 0x2d,
+	0x29, 0x28, 0x27, 0x36, 0x28, 0x22, 0x34, 0x23,
+	0x21, 0x26, 0x2d, 0x26, 0x22, 0x37, 0x2e, 0x35,
+	0x2a, 0x22, 0x2f, 0x38, 0x26, 0x26, 0x21, 0x39,
+	0x39, 0x28, 0x38, 0x39, 0x39, 0x2f, 0x3a, 0x2f,
+	0x20, 0x21, 0x38, 0x3b, 0x28, 0x3c, 0x2c, 0x21,
+	0x2a, 0x35, 0x27, 0x38, 0x26, 0x24, 0x28, 0x2c,
+	// Entry 80 - BF
+	0x2d, 0x23, 0x30, 0x2d, 0x2d, 0x26, 0x27, 0x3a,
+	0x22, 0x34, 0x3c, 0x2d, 0x28, 0x36, 0x22, 0x34,
+	0x3a, 0x26, 0x2e, 0x21, 0x39, 0x31, 0x38, 0x24,
+	0x2c, 0x25, 0x22, 0x24, 0x25, 0x2c, 0x3a, 0x2c,
+	0x26, 0x24, 0x36, 0x21, 0x2f, 0x3d, 0x31, 0x3c,
+	0x2f, 0x26, 0x36, 0x36, 0x24, 0x26, 0x3d, 0x31,
+	0x24, 0x26, 0x35, 0x25, 0x2d, 0x32, 0x38, 0x2a,
+	0x38, 0x39, 0x39, 0x35, 0x33, 0x23, 0x26, 0x2f,
+	// Entry C0 - FF
+	0x3c, 0x21, 0x23, 0x2d, 0x31, 0x36, 0x36, 0x3c,
+	0x26, 0x2d, 0x26, 0x3a, 0x2f, 0x25, 0x2f, 0x34,
+	0x31, 0x2f, 0x32, 0x3b, 0x2d, 0x2b, 0x2d, 0x21,
+	0x34, 0x2a, 0x2c, 0x25, 0x21, 0x3c, 0x24, 0x29,
+	0x2b, 0x24, 0x34, 0x21, 0x28, 0x29, 0x3b, 0x31,
+	0x25, 0x2e, 0x30, 0x29, 0x26, 0x24, 0x3a, 0x21,
+	0x3c, 0x28, 0x21, 0x24, 0x21, 0x21, 0x1f, 0x21,
+	0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
+	// Entry 100 - 13F
+	0x21, 0x21, 0x2f, 0x21, 0x2e, 0x23, 0x33, 0x2f,
+	0x24, 0x3b, 0x2f, 0x39, 0x38, 0x31, 0x2d, 0x3a,
+	0x2c, 0x2e, 0x2d, 0x23, 0x2d, 0x2f, 0x28, 0x2f,
+	0x27, 0x33, 0x34, 0x26, 0x24, 0x32, 0x22, 0x26,
+	0x27, 0x22, 0x2d, 0x31, 0x3d, 0x29, 0x31, 0x3d,
+	0x39, 0x29, 0x31, 0x24, 0x26, 0x29, 0x36, 0x2f,
+	0x33, 0x2f, 0x21, 0x22, 0x21, 0x30, 0x28, 0x3d,
+	0x23, 0x26, 0x21, 0x28, 0x26, 0x26, 0x31, 0x3b,
+	// Entry 140 - 17F
+	0x29, 0x21, 0x29, 0x21, 0x21, 0x21, 0x21, 0x21,
+	0x21, 0x21, 0x21, 0x21, 0x21, 0x23, 0x21, 0x21,
+	0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21, 0x21,
+	0x21, 0x21, 0x21, 0x21, 0x21, 0x24, 0x24, 0x2f,
+	0x23, 0x32, 0x2f, 0x27, 0x2f, 0x21,
+}
+
+// regionInclusionBits is an array of bit vectors where every vector represents
+// a set of region groupings.  These sets are used to compute the distance
+// between two regions for the purpose of language matching.
+// Size: 584 bytes, 73 elements
+var regionInclusionBits = [73]uint64{
+	// Entry 0 - 1F
+	0x0000000102400813, 0x00000000200007a3, 0x0000000000003844, 0x0000000040000808,
+	0x00000000803c0011, 0x0000000020000022, 0x0000000040000844, 0x0000000020000082,
+	0x0000000000000102, 0x0000000020000202, 0x0000000020000402, 0x000000004000384d,
+	0x0000000000001804, 0x0000000040002804, 0x0000000000404000, 0x0000000000408000,
+	0x0000000000410000, 0x0000000002020000, 0x0000000000040010, 0x0000000000080010,
+	0x0000000000100010, 0x0000000000200010, 0x0000000001c1c001, 0x0000000000c00000,
+	0x0000000001400000, 0x000000001e020001, 0x0000000006000000, 0x000000000a000000,
+	0x0000000012000000, 0x00000000200006a2, 0x0000000040002848, 0x0000000080000010,
+	// Entry 20 - 3F
+	0x0000000100000001, 0x0000000000000001, 0x0000000080000000, 0x0000000000020000,
+	0x0000000001000000, 0x0000000000008000, 0x0000000000002000, 0x0000000000000200,
+	0x0000000000000008, 0x0000000000200000, 0x0000000110000000, 0x0000000000040000,
+	0x0000000008000000, 0x0000000000000020, 0x0000000104000000, 0x0000000000000080,
+	0x0000000000001000, 0x0000000000010000, 0x0000000000000400, 0x0000000004000000,
+	0x0000000000000040, 0x0000000010000000, 0x0000000000004000, 0x0000000101000000,
+	0x0000000108000000, 0x0000000000000100, 0x0000000100020000, 0x0000000000080000,
+	0x0000000000100000, 0x0000000000800000, 0x00000001ffffffff, 0x0000000122400fb3,
+	// Entry 40 - 5F
+	0x00000001827c0813, 0x000000014240385f, 0x0000000103c1c813, 0x000000011e420813,
+	0x0000000112000001, 0x0000000106000001, 0x0000000101400001, 0x000000010a000001,
+	0x0000000102020001,
+}
+
+// regionInclusionNext marks, for each entry in regionInclusionBits, the set of
+// all groups that are reachable from the groups set in the respective entry.
+// Size: 73 bytes, 73 elements
+var regionInclusionNext = [73]uint8{
+	// Entry 0 - 3F
+	0x3e, 0x3f, 0x0b, 0x0b, 0x40, 0x01, 0x0b, 0x01,
+	0x01, 0x01, 0x01, 0x41, 0x0b, 0x0b, 0x16, 0x16,
+	0x16, 0x19, 0x04, 0x04, 0x04, 0x04, 0x42, 0x16,
+	0x16, 0x43, 0x19, 0x19, 0x19, 0x01, 0x0b, 0x04,
+	0x00, 0x00, 0x1f, 0x11, 0x18, 0x0f, 0x0d, 0x09,
+	0x03, 0x15, 0x44, 0x12, 0x1b, 0x05, 0x45, 0x07,
+	0x0c, 0x10, 0x0a, 0x1a, 0x06, 0x1c, 0x0e, 0x46,
+	0x47, 0x08, 0x48, 0x13, 0x14, 0x17, 0x3e, 0x3e,
+	// Entry 40 - 7F
+	0x3e, 0x3e, 0x3e, 0x3e, 0x43, 0x43, 0x42, 0x43,
+	0x43,
+}
+
+type parentRel struct {
+	lang       uint16
+	script     uint8
+	maxScript  uint8
+	toRegion   uint16
+	fromRegion []uint16
+}
+
+// Size: 414 bytes, 5 elements
+var parents = [5]parentRel{
+	0: {lang: 0x139, script: 0x0, maxScript: 0x5a, toRegion: 0x1, fromRegion: []uint16{0x1a, 0x25, 0x26, 0x2f, 0x34, 0x36, 0x3d, 0x42, 0x46, 0x48, 0x49, 0x4a, 0x50, 0x52, 0x5c, 0x5d, 0x61, 0x64, 0x6d, 0x73, 0x74, 0x75, 0x7b, 0x7c, 0x7f, 0x80, 0x81, 0x83, 0x8c, 0x8d, 0x96, 0x97, 0x98, 0x99, 0x9a, 0x9f, 0xa0, 0xa4, 0xa7, 0xa9, 0xad, 0xb1, 0xb4, 0xb5, 0xbf, 0xc6, 0xca, 0xcb, 0xcc, 0xce, 0xd0, 0xd2, 0xd5, 0xd6, 0xdd, 0xdf, 0xe0, 0xe6, 0xe7, 0xe8, 0xeb, 0xf0, 0x107, 0x109, 0x10a, 0x10b, 0x10d, 0x10e, 0x112, 0x117, 0x11b, 0x11d, 0x11f, 0x125, 0x129, 0x12c, 0x12d, 0x12f, 0x131, 0x139, 0x13c, 0x13f, 0x142, 0x161, 0x162, 0x164}},
+	1: {lang: 0x139, script: 0x0, maxScript: 0x5a, toRegion: 0x1a, fromRegion: []uint16{0x2e, 0x4e, 0x60, 0x63, 0x72, 0xd9, 0x10c, 0x10f}},
+	2: {lang: 0x13e, script: 0x0, maxScript: 0x5a, toRegion: 0x1f, fromRegion: []uint16{0x2c, 0x3f, 0x41, 0x48, 0x51, 0x54, 0x56, 0x59, 0x65, 0x69, 0x89, 0x8f, 0xcf, 0xd8, 0xe2, 0xe4, 0xec, 0xf1, 0x11a, 0x135, 0x136, 0x13b}},
+	3: {lang: 0x3c0, script: 0x0, maxScript: 0x5a, toRegion: 0xee, fromRegion: []uint16{0x2a, 0x4e, 0x5a, 0x86, 0x8b, 0xb7, 0xc6, 0xd1, 0x118, 0x126}},
+	4: {lang: 0x529, script: 0x3c, maxScript: 0x3c, toRegion: 0x8d, fromRegion: []uint16{0xc6}},
+}
+
+// Total table size 26398 bytes (25KiB); checksum: 1C859EA7
diff --git a/vendor/golang.org/x/text/internal/language/tags.go b/vendor/golang.org/x/text/internal/language/tags.go
new file mode 100644
index 00000000..e7afd318
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/language/tags.go
@@ -0,0 +1,48 @@
+// 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 language
+
+// MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed.
+// It simplifies safe initialization of Tag values.
+func MustParse(s string) Tag {
+	t, err := Parse(s)
+	if err != nil {
+		panic(err)
+	}
+	return t
+}
+
+// MustParseBase is like ParseBase, but panics if the given base cannot be parsed.
+// It simplifies safe initialization of Base values.
+func MustParseBase(s string) Language {
+	b, err := ParseBase(s)
+	if err != nil {
+		panic(err)
+	}
+	return b
+}
+
+// MustParseScript is like ParseScript, but panics if the given script cannot be
+// parsed. It simplifies safe initialization of Script values.
+func MustParseScript(s string) Script {
+	scr, err := ParseScript(s)
+	if err != nil {
+		panic(err)
+	}
+	return scr
+}
+
+// MustParseRegion is like ParseRegion, but panics if the given region cannot be
+// parsed. It simplifies safe initialization of Region values.
+func MustParseRegion(s string) Region {
+	r, err := ParseRegion(s)
+	if err != nil {
+		panic(err)
+	}
+	return r
+}
+
+// Und is the root language.
+var Und Tag
diff --git a/vendor/golang.org/x/text/internal/match.go b/vendor/golang.org/x/text/internal/match.go
new file mode 100644
index 00000000..1cc004a6
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/match.go
@@ -0,0 +1,67 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package internal
+
+// This file contains matchers that implement CLDR inheritance.
+//
+//     See https://unicode.org/reports/tr35/#Locale_Inheritance.
+//
+// Some of the inheritance described in this document is already handled by
+// the cldr package.
+
+import (
+	"golang.org/x/text/language"
+)
+
+// TODO: consider if (some of the) matching algorithm needs to be public after
+// getting some feel about what is generic and what is specific.
+
+// NewInheritanceMatcher returns a matcher that matches based on the inheritance
+// chain.
+//
+// The matcher uses canonicalization and the parent relationship to find a
+// match. The resulting match will always be either Und or a language with the
+// same language and script as the requested language. It will not match
+// languages for which there is understood to be mutual or one-directional
+// intelligibility.
+//
+// A Match will indicate an Exact match if the language matches after
+// canonicalization and High if the matched tag is a parent.
+func NewInheritanceMatcher(t []language.Tag) *InheritanceMatcher {
+	tags := &InheritanceMatcher{make(map[language.Tag]int)}
+	for i, tag := range t {
+		ct, err := language.All.Canonicalize(tag)
+		if err != nil {
+			ct = tag
+		}
+		tags.index[ct] = i
+	}
+	return tags
+}
+
+type InheritanceMatcher struct {
+	index map[language.Tag]int
+}
+
+func (m InheritanceMatcher) Match(want ...language.Tag) (language.Tag, int, language.Confidence) {
+	for _, t := range want {
+		ct, err := language.All.Canonicalize(t)
+		if err != nil {
+			ct = t
+		}
+		conf := language.Exact
+		for {
+			if index, ok := m.index[ct]; ok {
+				return ct, index, conf
+			}
+			if ct == language.Und {
+				break
+			}
+			ct = ct.Parent()
+			conf = language.High
+		}
+	}
+	return language.Und, 0, language.No
+}
diff --git a/vendor/golang.org/x/text/internal/tag/tag.go b/vendor/golang.org/x/text/internal/tag/tag.go
new file mode 100644
index 00000000..b5d34889
--- /dev/null
+++ b/vendor/golang.org/x/text/internal/tag/tag.go
@@ -0,0 +1,100 @@
+// Copyright 2015 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+// Package tag contains functionality handling tags and related data.
+package tag // import "golang.org/x/text/internal/tag"
+
+import "sort"
+
+// An Index converts tags to a compact numeric value.
+//
+// All elements are of size 4. Tags may be up to 4 bytes long. Excess bytes can
+// be used to store additional information about the tag.
+type Index string
+
+// Elem returns the element data at the given index.
+func (s Index) Elem(x int) string {
+	return string(s[x*4 : x*4+4])
+}
+
+// Index reports the index of the given key or -1 if it could not be found.
+// Only the first len(key) bytes from the start of the 4-byte entries will be
+// considered for the search and the first match in Index will be returned.
+func (s Index) Index(key []byte) int {
+	n := len(key)
+	// search the index of the first entry with an equal or higher value than
+	// key in s.
+	index := sort.Search(len(s)/4, func(i int) bool {
+		return cmp(s[i*4:i*4+n], key) != -1
+	})
+	i := index * 4
+	if cmp(s[i:i+len(key)], key) != 0 {
+		return -1
+	}
+	return index
+}
+
+// Next finds the next occurrence of key after index x, which must have been
+// obtained from a call to Index using the same key. It returns x+1 or -1.
+func (s Index) Next(key []byte, x int) int {
+	if x++; x*4 < len(s) && cmp(s[x*4:x*4+len(key)], key) == 0 {
+		return x
+	}
+	return -1
+}
+
+// cmp returns an integer comparing a and b lexicographically.
+func cmp(a Index, b []byte) int {
+	n := len(a)
+	if len(b) < n {
+		n = len(b)
+	}
+	for i, c := range b[:n] {
+		switch {
+		case a[i] > c:
+			return 1
+		case a[i] < c:
+			return -1
+		}
+	}
+	switch {
+	case len(a) < len(b):
+		return -1
+	case len(a) > len(b):
+		return 1
+	}
+	return 0
+}
+
+// Compare returns an integer comparing a and b lexicographically.
+func Compare(a string, b []byte) int {
+	return cmp(Index(a), b)
+}
+
+// FixCase reformats b to the same pattern of cases as form.
+// If returns false if string b is malformed.
+func FixCase(form string, b []byte) bool {
+	if len(form) != len(b) {
+		return false
+	}
+	for i, c := range b {
+		if form[i] <= 'Z' {
+			if c >= 'a' {
+				c -= 'z' - 'Z'
+			}
+			if c < 'A' || 'Z' < c {
+				return false
+			}
+		} else {
+			if c <= 'Z' {
+				c += 'z' - 'Z'
+			}
+			if c < 'a' || 'z' < c {
+				return false
+			}
+		}
+		b[i] = c
+	}
+	return true
+}
diff --git a/vendor/golang.org/x/text/language/coverage.go b/vendor/golang.org/x/text/language/coverage.go
new file mode 100644
index 00000000..a24fd1a4
--- /dev/null
+++ b/vendor/golang.org/x/text/language/coverage.go
@@ -0,0 +1,187 @@
+// Copyright 2014 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package language
+
+import (
+	"fmt"
+	"sort"
+
+	"golang.org/x/text/internal/language"
+)
+
+// The Coverage interface is used to define the level of coverage of an
+// internationalization service. Note that not all types are supported by all
+// services. As lists may be generated on the fly, it is recommended that users
+// of a Coverage cache the results.
+type Coverage interface {
+	// Tags returns the list of supported tags.
+	Tags() []Tag
+
+	// BaseLanguages returns the list of supported base languages.
+	BaseLanguages() []Base
+
+	// Scripts returns the list of supported scripts.
+	Scripts() []Script
+
+	// Regions returns the list of supported regions.
+	Regions() []Region
+}
+
+var (
+	// Supported defines a Coverage that lists all supported subtags. Tags
+	// always returns nil.
+	Supported Coverage = allSubtags{}
+)
+
+// TODO:
+// - Support Variants, numbering systems.
+// - CLDR coverage levels.
+// - Set of common tags defined in this package.
+
+type allSubtags struct{}
+
+// Regions returns the list of supported regions. As all regions are in a
+// consecutive range, it simply returns a slice of numbers in increasing order.
+// The "undefined" region is not returned.
+func (s allSubtags) Regions() []Region {
+	reg := make([]Region, language.NumRegions)
+	for i := range reg {
+		reg[i] = Region{language.Region(i + 1)}
+	}
+	return reg
+}
+
+// Scripts returns the list of supported scripts. As all scripts are in a
+// consecutive range, it simply returns a slice of numbers in increasing order.
+// The "undefined" script is not returned.
+func (s allSubtags) Scripts() []Script {
+	scr := make([]Script, language.NumScripts)
+	for i := range scr {
+		scr[i] = Script{language.Script(i + 1)}
+	}
+	return scr
+}
+
+// BaseLanguages returns the list of all supported base languages. It generates
+// the list by traversing the internal structures.
+func (s allSubtags) BaseLanguages() []Base {
+	bs := language.BaseLanguages()
+	base := make([]Base, len(bs))
+	for i, b := range bs {
+		base[i] = Base{b}
+	}
+	return base
+}
+
+// Tags always returns nil.
+func (s allSubtags) Tags() []Tag {
+	return nil
+}
+
+// coverage is used by NewCoverage which is used as a convenient way for
+// creating Coverage implementations for partially defined data. Very often a
+// package will only need to define a subset of slices. coverage provides a
+// convenient way to do this. Moreover, packages using NewCoverage, instead of
+// their own implementation, will not break if later new slice types are added.
+type coverage struct {
+	tags    func() []Tag
+	bases   func() []Base
+	scripts func() []Script
+	regions func() []Region
+}
+
+func (s *coverage) Tags() []Tag {
+	if s.tags == nil {
+		return nil
+	}
+	return s.tags()
+}
+
+// bases implements sort.Interface and is used to sort base languages.
+type bases []Base
+
+func (b bases) Len() int {
+	return len(b)
+}
+
+func (b bases) Swap(i, j int) {
+	b[i], b[j] = b[j], b[i]
+}
+
+func (b bases) Less(i, j int) bool {
+	return b[i].langID < b[j].langID
+}
+
+// BaseLanguages returns the result from calling s.bases if it is specified or
+// otherwise derives the set of supported base languages from tags.
+func (s *coverage) BaseLanguages() []Base {
+	if s.bases == nil {
+		tags := s.Tags()
+		if len(tags) == 0 {
+			return nil
+		}
+		a := make([]Base, len(tags))
+		for i, t := range tags {
+			a[i] = Base{language.Language(t.lang())}
+		}
+		sort.Sort(bases(a))
+		k := 0
+		for i := 1; i < len(a); i++ {
+			if a[k] != a[i] {
+				k++
+				a[k] = a[i]
+			}
+		}
+		return a[:k+1]
+	}
+	return s.bases()
+}
+
+func (s *coverage) Scripts() []Script {
+	if s.scripts == nil {
+		return nil
+	}
+	return s.scripts()
+}
+
+func (s *coverage) Regions() []Region {
+	if s.regions == nil {
+		return nil
+	}
+	return s.regions()
+}
+
+// NewCoverage returns a Coverage for the given lists. It is typically used by
+// packages providing internationalization services to define their level of
+// coverage. A list may be of type []T or func() []T, where T is either Tag,
+// Base, Script or Region. The returned Coverage derives the value for Bases
+// from Tags if no func or slice for []Base is specified. For other unspecified
+// types the returned Coverage will return nil for the respective methods.
+func NewCoverage(list ...interface{}) Coverage {
+	s := &coverage{}
+	for _, x := range list {
+		switch v := x.(type) {
+		case func() []Base:
+			s.bases = v
+		case func() []Script:
+			s.scripts = v
+		case func() []Region:
+			s.regions = v
+		case func() []Tag:
+			s.tags = v
+		case []Base:
+			s.bases = func() []Base { return v }
+		case []Script:
+			s.scripts = func() []Script { return v }
+		case []Region:
+			s.regions = func() []Region { return v }
+		case []Tag:
+			s.tags = func() []Tag { return v }
+		default:
+			panic(fmt.Sprintf("language: unsupported set type %T", v))
+		}
+	}
+	return s
+}
diff --git a/vendor/golang.org/x/text/language/doc.go b/vendor/golang.org/x/text/language/doc.go
new file mode 100644
index 00000000..8afecd50
--- /dev/null
+++ b/vendor/golang.org/x/text/language/doc.go
@@ -0,0 +1,102 @@
+// Copyright 2017 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 language implements BCP 47 language tags and related functionality.
+//
+// The most important function of package language is to match a list of
+// user-preferred languages to a list of supported languages.
+// It alleviates the developer of dealing with the complexity of this process
+// and provides the user with the best experience
+// (see https://blog.golang.org/matchlang).
+//
+//
+// Matching preferred against supported languages
+//
+// A Matcher for an application that supports English, Australian English,
+// Danish, and standard Mandarin can be created as follows:
+//
+//    var matcher = language.NewMatcher([]language.Tag{
+//        language.English,   // The first language is used as fallback.
+//        language.MustParse("en-AU"),
+//        language.Danish,
+//        language.Chinese,
+//    })
+//
+// This list of supported languages is typically implied by the languages for
+// which there exists translations of the user interface.
+//
+// User-preferred languages usually come as a comma-separated list of BCP 47
+// language tags.
+// The MatchString finds best matches for such strings:
+//
+//    handler(w http.ResponseWriter, r *http.Request) {
+//        lang, _ := r.Cookie("lang")
+//        accept := r.Header.Get("Accept-Language")
+//        tag, _ := language.MatchStrings(matcher, lang.String(), accept)
+//
+//        // tag should now be used for the initialization of any
+//        // locale-specific service.
+//    }
+//
+// The Matcher's Match method can be used to match Tags directly.
+//
+// Matchers are aware of the intricacies of equivalence between languages, such
+// as deprecated subtags, legacy tags, macro languages, mutual
+// intelligibility between scripts and languages, and transparently passing
+// BCP 47 user configuration.
+// For instance, it will know that a reader of Bokmål Danish can read Norwegian
+// and will know that Cantonese ("yue") is a good match for "zh-HK".
+//
+//
+// Using match results
+//
+// To guarantee a consistent user experience to the user it is important to
+// use the same language tag for the selection of any locale-specific services.
+// For example, it is utterly confusing to substitute spelled-out numbers
+// or dates in one language in text of another language.
+// More subtly confusing is using the wrong sorting order or casing
+// algorithm for a certain language.
+//
+//    All the packages in x/text that provide locale-specific services
+//    (e.g. collate, cases) should be initialized with the tag that was
+//    obtained at the start of an interaction with the user.
+//
+// Note that Tag that is returned by Match and MatchString may differ from any
+// of the supported languages, as it may contain carried over settings from
+// the user tags.
+// This may be inconvenient when your application has some additional
+// locale-specific data for your supported languages.
+// Match and MatchString both return the index of the matched supported tag
+// to simplify associating such data with the matched tag.
+//
+//
+// Canonicalization
+//
+// If one uses the Matcher to compare languages one does not need to
+// worry about canonicalization.
+//
+// The meaning of a Tag varies per application. The language package
+// therefore delays canonicalization and preserves information as much
+// as possible. The Matcher, however, will always take into account that
+// two different tags may represent the same language.
+//
+// By default, only legacy and deprecated tags are converted into their
+// canonical equivalent. All other information is preserved. This approach makes
+// the confidence scores more accurate and allows matchers to distinguish
+// between variants that are otherwise lost.
+//
+// As a consequence, two tags that should be treated as identical according to
+// BCP 47 or CLDR, like "en-Latn" and "en", will be represented differently. The
+// Matcher handles such distinctions, though, and is aware of the
+// equivalence relations. The CanonType type can be used to alter the
+// canonicalization form.
+//
+// References
+//
+// BCP 47 - Tags for Identifying Languages http://tools.ietf.org/html/bcp47
+//
+package language // import "golang.org/x/text/language"
+
+// TODO: explanation on how to match languages for your own locale-specific
+// service.
diff --git a/vendor/golang.org/x/text/language/go1_1.go b/vendor/golang.org/x/text/language/go1_1.go
new file mode 100644
index 00000000..c7435583
--- /dev/null
+++ b/vendor/golang.org/x/text/language/go1_1.go
@@ -0,0 +1,39 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build !go1.2
+// +build !go1.2
+
+package language
+
+import "sort"
+
+func sortStable(s sort.Interface) {
+	ss := stableSort{
+		s:   s,
+		pos: make([]int, s.Len()),
+	}
+	for i := range ss.pos {
+		ss.pos[i] = i
+	}
+	sort.Sort(&ss)
+}
+
+type stableSort struct {
+	s   sort.Interface
+	pos []int
+}
+
+func (s *stableSort) Len() int {
+	return len(s.pos)
+}
+
+func (s *stableSort) Less(i, j int) bool {
+	return s.s.Less(i, j) || !s.s.Less(j, i) && s.pos[i] < s.pos[j]
+}
+
+func (s *stableSort) Swap(i, j int) {
+	s.s.Swap(i, j)
+	s.pos[i], s.pos[j] = s.pos[j], s.pos[i]
+}
diff --git a/vendor/golang.org/x/text/language/go1_2.go b/vendor/golang.org/x/text/language/go1_2.go
new file mode 100644
index 00000000..77aaaa29
--- /dev/null
+++ b/vendor/golang.org/x/text/language/go1_2.go
@@ -0,0 +1,12 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:build go1.2
+// +build go1.2
+
+package language
+
+import "sort"
+
+var sortStable = sort.Stable
diff --git a/vendor/golang.org/x/text/language/language.go b/vendor/golang.org/x/text/language/language.go
new file mode 100644
index 00000000..289b3a36
--- /dev/null
+++ b/vendor/golang.org/x/text/language/language.go
@@ -0,0 +1,605 @@
+// Copyright 2013 The Go Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+//go:generate go run gen.go -output tables.go
+
+package language
+
+// TODO: Remove above NOTE after:
+// - verifying that tables are dropped correctly (most notably matcher tables).
+
+import (
+	"strings"
+
+	"golang.org/x/text/internal/language"
+	"golang.org/x/text/internal/language/compact"
+)
+
+// Tag represents a BCP 47 language tag. It is used to specify an instance of a
+// specific language or locale. All language tag values are guaranteed to be
+// well-formed.
+type Tag compact.Tag
+
+func makeTag(t language.Tag) (tag Tag) {
+	return Tag(compact.Make(t))
+}
+
+func (t *Tag) tag() language.Tag {
+	return (*compact.Tag)(t).Tag()
+}
+
+func (t *Tag) isCompact() bool {
+	return (*compact.Tag)(t).IsCompact()
+}
+
+// TODO: improve performance.
+func (t *Tag) lang() language.Language { return t.tag().LangID }
+func (t *Tag) region() language.Region { return t.tag().RegionID }
+func (t *Tag) script() language.Script { return t.tag().ScriptID }
+
+// Make is a convenience wrapper for Parse that omits the error.
+// In case of an error, a sensible default is returned.
+func Make(s string) Tag {
+	return Default.Make(s)
+}
+
+// Make is a convenience wrapper for c.Parse that omits the error.
+// In case of an error, a sensible default is returned.
+func (c CanonType) Make(s string) Tag {
+	t, _ := c.Parse(s)
+	return t
+}
+
+// Raw returns the raw base language, script and region, without making an
+// attempt to infer their values.
+func (t Tag) Raw() (b Base, s Script, r Region) {
+	tt := t.tag()
+	return Base{tt.LangID}, Script{tt.ScriptID}, Region{tt.RegionID}
+}
+
+// IsRoot returns true if t is equal to language "und".
+func (t Tag) IsRoot() bool {
+	return compact.Tag(t).IsRoot()
+}
+
+// CanonType can be used to enable or disable various types of canonicalization.
+type CanonType int
+
+const (
+	// Replace deprecated base languages with their preferred replacements.
+	DeprecatedBase CanonType = 1 << iota
+	// Replace deprecated scripts with their preferred replacements.
+	DeprecatedScript
+	// Replace deprecated regions with their preferred replacements.
+	DeprecatedRegion
+	// Remove redundant scripts.
+	SuppressScript
+	// Normalize legacy encodings. This includes legacy languages defined in
+	// CLDR as well as bibliographic codes defined in ISO-639.
+	Legacy
+	// Map the dominant language of a macro language group to the macro language
+	// subtag. For example cmn -> zh.
+	Macro
+	// The CLDR flag should be used if full compatibility with CLDR is required.
+	// There are a few cases where language.Tag may differ from CLDR. To follow all
+	// of CLDR's suggestions, use All|CLDR.
+	CLDR
+
+	// Raw can be used to Compose or Parse without Canonicalization.
+	Raw CanonType = 0
+
+	// Replace all deprecated tags with their preferred replacements.
+	Deprecated = DeprecatedBase | DeprecatedScript | DeprecatedRegion
+
+	// All canonicalizations recommended by BCP 47.
+	BCP47 = Deprecated | SuppressScript
+
+	// All canonicalizations.
+	All = BCP47 | Legacy | Macro
+
+	// Default is the canonicalization used by Parse, Make and Compose. To
+	// preserve as much information as possible, canonicalizations that remove
+	// potentially valuable information are not included. The Matcher is
+	// designed to recognize similar tags that would be the same if
+	// they were canonicalized using All.
+	Default = Deprecated | Legacy
+
+	canonLang = DeprecatedBase | Legacy | Macro
+
+	// TODO: LikelyScript, LikelyRegion: suppress similar to ICU.
+)
+
+// canonicalize returns the canonicalized equivalent of the tag and
+// whether there was any change.
+func canonicalize(c CanonType, t language.Tag) (language.Tag, bool) {
+	if c == Raw {
+		return t, false
+	}
+	changed := false
+	if c&SuppressScript != 0 {
+		if t.LangID.SuppressScript() == t.ScriptID {
+			t.ScriptID = 0
+			changed = true
+		}
+	}
+	if c&canonLang != 0 {
+		for {
+			if l, aliasType := t.LangID.Canonicalize(); l != t.LangID {
+				switch aliasType {
+				case language.Legacy:
+					if c&Legacy != 0 {
+						if t.LangID == _sh && t.ScriptID == 0 {
+							t.ScriptID = _Latn
+						}
+						t.LangID = l
+						changed = true
+					}
+				case language.Macro:
+					if c&Macro != 0 {
+						// We deviate here from CLDR. The mapping "nb" -> "no"
+						// qualifies as a typical Macro language mapping.  However,
+						// for legacy reasons, CLDR maps "no", the macro language
+						// code for Norwegian, to the dominant variant "nb". This
+						// change is currently under consideration for CLDR as well.
+						// See https://unicode.org/cldr/trac/ticket/2698 and also
+						// https://unicode.org/cldr/trac/ticket/1790 for some of the
+						// practical implications. TODO: this check could be removed
+						// if CLDR adopts this change.
+						if c&CLDR == 0 || t.LangID != _nb {
+							changed = true
+							t.LangID = l
+						}
+					}
+				case language.Deprecated:
+					if c&DeprecatedBase != 0 {
+						if t.LangID == _mo && t.RegionID == 0 {
+							t.RegionID = _MD
+						}
+						t.LangID = l
+						changed = true
+						// Other canonicalization types may still apply.
+						continue
+					}
+				}
+			} else if c&Legacy != 0 && t.LangID == _no && c&CLDR != 0 {
+				t.LangID = _nb
+				changed = true
+			}
+			break
+		}
+	}
+	if c&DeprecatedScript != 0 {
+		if t.ScriptID == _Qaai {
+			changed = true
+			t.ScriptID = _Zinh
+		}
+	}
+	if c&DeprecatedRegion != 0 {
+		if r := t.RegionID.Canonicalize(); r != t.RegionID {
+			changed = true
+			t.RegionID = r
+		}
+	}
+	return t, changed
+}
+
+// Canonicalize returns the canonicalized equivalent of the tag.
+func (c CanonType) Canonicalize(t Tag) (Tag, error) {
+	// First try fast path.
+	if t.isCompact() {
+		if _, changed := canonicalize(c, compact.Tag(t).Tag()); !changed {
+			return t, nil
+		}
+	}
+	// It is unlikely that one will canonicalize a tag after matching. So do
+	// a slow but simple approach here.
+	if tag, changed := canonicalize(c, t.tag()); changed {
+		tag.RemakeString()
+		return makeTag(tag), nil
+	}
+	return t, nil
+
+}
+
+// Confidence indicates the level of certainty for a given return value.
+// For example, Serbian may be written in Cyrillic or Latin script.
+// The confidence level indicates whether a value was explicitly specified,
+// whether it is typically the only possible value, or whether there is
+// an ambiguity.
+type Confidence int
+
+const (
+	No    Confidence = iota // full confidence that there was no match
+	Low                     // most likely value picked out of a set of alternatives
+	High                    // value is generally assumed to be the correct match
+	Exact                   // exact match or explicitly specified value
+)
+
+var confName = []string{"No", "Low", "High", "Exact"}
+
+func (c Confidence) String() string {
+	return confName[c]
+}
+
+// String returns the canonical string representation of the language tag.
+func (t Tag) String() string {
+	return t.tag().String()
+}
+
+// MarshalText implements encoding.TextMarshaler.
+func (t Tag) MarshalText() (text []byte, err error) {
+	return t.tag().MarshalText()
+}
+
+// UnmarshalText implements encoding.TextUnmarshaler.
+func (t *Tag) UnmarshalText(text []byte) error {
+	var tag language.Tag
+	err := tag.UnmarshalText(text)
+	*t = makeTag(tag)
+	return err
+}
+
+// Base returns the base language of the language tag. If the base language is
+// unspecified, an attempt will be made to infer it from the context.
+// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change.
+func (t Tag) Base() (Base, Confidence) {
+	if b := t.lang(); b != 0 {
+		return Base{b}, Exact
+	}
+	tt := t.tag()
+	c := High
+	if tt.ScriptID == 0 && !tt.RegionID.IsCountry() {
+		c = Low
+	}
+	if tag, err := tt.Maximize(); err == nil && tag.LangID != 0 {
+		return Base{tag.LangID}, c
+	}
+	return Base{0}, No
+}
+
+// Script infers the script for the language tag. If it was not explicitly given, it will infer
+// a most likely candidate.
+// If more than one script is commonly used for a language, the most likely one
+// is returned with a low confidence indication. For example, it returns (Cyrl, Low)
+// for Serbian.
+// If a script cannot be inferred (Zzzz, No) is returned. We do not use Zyyy (undetermined)
+// as one would suspect from the IANA registry for BCP 47. In a Unicode context Zyyy marks
+// common characters (like 1, 2, 3, '.', etc.) and is therefore more like multiple scripts.
+// See https://www.unicode.org/reports/tr24/#Values for more details. Zzzz is also used for
+// unknown value in CLDR.  (Zzzz, Exact) is returned if Zzzz was explicitly specified.
+// Note that an inferred script is never guaranteed to be the correct one. Latin is
+// almost exclusively used for Afrikaans, but Arabic has been used for some texts
+// in the past.  Also, the script that is commonly used may change over time.
+// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change.
+func (t Tag) Script() (Script, Confidence) {
+	if scr := t.script(); scr != 0 {
+		return Script{scr}, Exact
+	}
+	tt := t.tag()
+	sc, c := language.Script(_Zzzz), No
+	if scr := tt.LangID.SuppressScript(); scr != 0 {
+		// Note: it is not always the case that a language with a suppress
+		// script value is only written in one script (e.g. kk, ms, pa).
+		if tt.RegionID == 0 {
+			return Script{scr}, High
+		}
+		sc, c = scr, High
+	}
+	if tag, err := tt.Maximize(); err == nil {
+		if tag.ScriptID != sc {
+			sc, c = tag.ScriptID, Low
+		}
+	} else {
+		tt, _ = canonicalize(Deprecated|Macro, tt)
+		if tag, err := tt.Maximize(); err == nil && tag.ScriptID != sc {
+			sc, c = tag.ScriptID, Low
+		}
+	}
+	return Script{sc}, c
+}
+
+// Region returns the region for the language tag. If it was not explicitly given, it will
+// infer a most likely candidate from the context.
+// It uses a variant of CLDR's Add Likely Subtags algorithm. This is subject to change.
+func (t Tag) Region() (Region, Confidence) {
+	if r := t.region(); r != 0 {
+		return Region{r}, Exact
+	}
+	tt := t.tag()
+	if tt, err := tt.Maximize(); err == nil {
+		return Region{tt.RegionID}, Low // TODO: differentiate between high and low.
+	}
+	tt, _ = canonicalize(Deprecated|Macro, tt)
+	if tag, err := tt.Maximize(); err == nil {
+		return Region{tag.RegionID}, Low
+	}
+	return Region{_ZZ}, No // TODO: return world instead of undetermined?
+}
+
+// Variants returns the variants specified explicitly for this language tag.
+// or nil if no variant was specified.
+func (t Tag) Variants() []Variant {
+	if !compact.Tag(t).MayHaveVariants() {
+		return nil
+	}
+	v := []Variant{}
+	x, str := "", t.tag().Variants()
+	for str != "" {
+		x, str = nextToken(str)
+		v = append(v, Variant{x})
+	}
+	return v
+}
+
+// Parent returns the CLDR parent of t. In CLDR, missing fields in data for a
+// specific language are substituted with fields from the parent language.
+// The parent for a language may change for newer versions of CLDR.
+//
+// Parent returns a tag for a less specific language that is mutually
+// intelligible or Und if there is no such language. This may not be the same as
+// simply stripping the last BCP 47 subtag. For instance, the parent of "zh-TW"
+// is "zh-Hant", and the parent of "zh-Hant" is "und".
+func (t Tag) Parent() Tag {
+	return Tag(compact.Tag(t).Parent())
+}
+
+// returns token t and the rest of the string.
+func nextToken(s string) (t, tail string) {
+	p := strings.Index(s[1:], "-")
+	if p == -1 {
+		return s[1:], ""
+	}
+	p++
+	return s[1:p], s[p:]
+}
+
+// Extension is a single BCP 47 extension.
+type Extension struct {
+	s string
+}
+
+// String returns the string representation of the extension, including the
+// type tag.
+func (e Extension) String() string {
+	return e.s
+}
+
+// ParseExtension parses s as an extension and returns it on success.
+func ParseExtension(s string) (e Extension, err error) {
+	ext, err := language.ParseExtension(s)
+	return Extension{ext}, err
+}
+
+// Type returns the one-byte extension type of e. It returns 0 for the zero
+// exception.
+func (e Extension) Type() byte {
+	if e.s == "" {
+		return 0
+	}
+	return e.s[0]
+}
+
+// Tokens returns the list of tokens of e.
+func (e Extension) Tokens() []string {
+	return strings.Split(e.s, "-")
+}
+
+// Extension returns the extension of type x for tag t. It will return
+// false for ok if t does not have the requested extension. The returned
+// extension will be invalid in this case.
+func (t Tag) Extension(x byte) (ext Extension, ok bool) {
+	if !compact.Tag(t).MayHaveExtensions() {
+		return Extension{}, false
+	}
+	e, ok := t.tag().Extension(x)
+	return Extension{e}, ok
+}
+
+// Extensions returns all extensions of t.
+func (t Tag) Extensions() []Extension {
+	if !compact.Tag(t).MayHaveExtensions() {
+		return nil
+	}
+	e := []Extension{}
+	for _, ext := range t.tag().Extensions() {
+		e = append(e, Extension{ext})
+	}
+	return e
+}
+
+// TypeForKey returns the type associated with the given key, where key and type
+// are of the allowed values defined for the Unicode locale extension ('u') in
+// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
+// TypeForKey will traverse the inheritance chain to get the correct value.
+//
+// If there are multiple types associated with a key, only the first will be
+// returned. If there is no type associated with a key, it returns the empty
+// string.
+func (t Tag) TypeForKey(key string) string {
+	if !compact.Tag(t).MayHaveExtensions() {
+		if key != "rg" && key != "va" {
+			return ""
+		}
+	}
+	return t.tag().TypeForKey(key)
+}
+
+// SetTypeForKey returns a new Tag with the key set to type, where key and type
+// are of the allowed values defined for the Unicode locale extension ('u') in
+// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
+// An empty value removes an existing pair with the same key.
+func (t Tag) SetTypeForKey(key, value string) (Tag, error) {
+	tt, err := t.tag().SetTypeForKey(key, value)
+	return makeTag(tt), err
+}
+
+// NumCompactTags is the number of compact tags. The maximum tag is
+// NumCompactTags-1.
+const NumCompactTags = compact.NumCompactTags
+
+// CompactIndex returns an index, where 0 <= index < NumCompactTags, for tags
+// for which data exists in the text repository.The index will change over time
+// and should not be stored in persistent storage. If t does not match a compact
+// index, exact will be false and the compact index will be returned for the
+// first match after repeatedly taking the Parent of t.
+func CompactIndex(t Tag) (index int, exact bool) {
+	id, exact := compact.LanguageID(compact.Tag(t))
+	return int(id), exact
+}
+
+var root = language.Tag{}
+
+// Base is an ISO 639 language code, used for encoding the base language
+// of a language tag.
+type Base struct {
+	langID language.Language
+}
+
+// ParseBase parses a 2- or 3-letter ISO 639 code.
+// It returns a ValueError if s is a well-formed but unknown language identifier
+// or another error if another error occurred.
+func ParseBase(s string) (Base, error) {
+	l, err := language.ParseBase(s)
+	return Base{l}, err
+}
+
+// String returns the BCP 47 representation of the base language.
+func (b Base) String() string {
+	return b.langID.String()
+}
+
+// ISO3 returns the ISO 639-3 language code.
+func (b Base) ISO3() string {
+	return b.langID.ISO3()
+}
+
+// IsPrivateUse reports whether this language code is reserved for private use.
+func (b Base) IsPrivateUse() bool {
+	return b.langID.IsPrivateUse()
+}
+
+// Script is a 4-letter ISO 15924 code for representing scripts.
+// It is idiomatically represented in title case.
+type Script struct {
+	scriptID language.Script
+}
+
+// ParseScript parses a 4-letter ISO 15924 code.
+// It returns a ValueError if s is a well-formed but unknown script identifier
+// or another error if another error occurred.
+func ParseScript(s string) (Script, error) {
+	sc, err := language.ParseScript(s)
+	return Script{sc}, err
+}
+
+// String returns the script code in title case.
+// It returns "Zzzz" for an unspecified script.
+func (s Script) String() string {
+	return s.scriptID.String()
+}
+
+// IsPrivateUse reports whether this script code is reserved for private use.
+func (s Script) IsPrivateUse() bool {
+	return s.scriptID.IsPrivateUse()
+}
+
+// Region is an ISO 3166-1 or UN M.49 code for representing countries and regions.
+type Region struct {
+	regionID language.Region
+}
+
+// EncodeM49 returns the Region for the given UN M.49 code.
+// It returns an error if r is not a valid code.
+func EncodeM49(r int) (Region, error) {
+	rid, err := language.EncodeM49(r)
+	return Region{rid}, err
+}
+
+// ParseRegion parses a 2- or 3-letter ISO 3166-1 or a UN M.49 code.
+// It returns a ValueError if s is a well-formed but unknown region identifier
+// or another error if another error occurred.
+func ParseRegion(s string) (Region, error) {
+	r, err := language.ParseRegion(s)
+	return Region{r}, err
+}
+
+// String returns the BCP 47 representation for the region.
+// It returns "ZZ" for an unspecified region.
+func (r Region) String() string {
+	return r.regionID.String()
+}
+
+// ISO3 returns the 3-letter ISO code of r.
+// Note that not all regions have a 3-letter ISO code.
+// In such cases this method returns "ZZZ".
+func (r Region) ISO3() string {
+	return r.regionID.ISO3()
+}
+
+// M49 returns the UN M.49 encoding of r, or 0 if this encoding
+// is not defined for r.
+func (r Region) M49() int {
+	return r.regionID.M49()
+}
+
+// IsPrivateUse reports whether r has the ISO 3166 User-assigned status. This
+// may include private-use tags that are assigned by CLDR and used in this
+// implementation. So IsPrivateUse and IsCountry can be simultaneously true.
+func (r Region) IsPrivateUse() bool {
+	return r.regionID.IsPrivateUse()
+}
+
+// IsCountry returns whether this region is a country or autonomous area. This
+// includes non-standard definitions from CLDR.
+func (r Region) IsCountry() bool {
+	return r.regionID.IsCountry()
+}
+
+// IsGroup returns whether this region defines a collection of regions. This
+// includes non-standard definitions from CLDR.
+func (r Region) IsGroup() bool {
+	return r.regionID.IsGroup()
+}
+
+// Contains returns whether Region c is contained by Region r. It returns true
+// if c == r.
+func (r Region) Contains(c Region) bool {
+	return r.regionID.Contains(c.regionID)
+}
+
+// TLD returns the country code top-level domain (ccTLD). UK is returned for GB.
+// In all other cases it returns either the region itself or an error.
+//
+// This method may return an error for a region for which there exists a
+// canonical form with a ccTLD. To get that ccTLD canonicalize r first. The
+// region will already be canonicalized it was obtained from a Tag that was
+// obtained using any of the default methods.
+func (r Region) TLD() (Region, error) {
+	tld, err := r.regionID.TLD()
+	return Region{tld}, err
+}
+
+// Canonicalize returns the region or a possible replacement if the region is
+// deprecated. It will not return a replacement for deprecated regions that
+// are split into multiple regions.
+func (r Region) Canonicalize() Region {
+	return Region{r.regionID.Canonicalize()}
+}
+
+// Variant represents a registered variant of a language as defined by BCP 47.
+type Variant struct {
+	variant string
+}
+
+// ParseVariant parses and returns a Variant. An error is returned if s is not
+// a valid variant.
+func ParseVariant(s string) (Variant, error) {
+	v, err := language.ParseVariant(s)
+	return Variant{v.String()}, err
+}
+
+// String returns the string representation of the variant.
+func (v Variant) String() string {
+	return v.variant
+}
diff --git a/vendor/golang.org/x/text/language/match.go b/vendor/golang.org/x/text/language/match.go
new file mode 100644
index 00000000..f7349213
--- /dev/null
+++ b/vendor/golang.org/x/text/language/match.go
@@ -0,0 +1,735 @@
+// 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 language
+
+import (
+	"errors"
+	"strings"
+
+	"golang.org/x/text/internal/language"
+)
+
+// A MatchOption configures a Matcher.
+type MatchOption func(*matcher)
+
+// PreferSameScript will, in the absence of a match, result in the first
+// preferred tag with the same script as a supported tag to match this supported
+// tag. The default is currently true, but this may change in the future.
+func PreferSameScript(preferSame bool) MatchOption {
+	return func(m *matcher) { m.preferSameScript = preferSame }
+}
+
+// TODO(v1.0.0): consider making Matcher a concrete type, instead of interface.
+// There doesn't seem to be too much need for multiple types.
+// Making it a concrete type allows MatchStrings to be a method, which will
+// improve its discoverability.
+
+// MatchStrings parses and matches the given strings until one of them matches
+// the language in the Matcher. A string may be an Accept-Language header as
+// handled by ParseAcceptLanguage. The default language is returned if no
+// other language matched.
+func MatchStrings(m Matcher, lang ...string) (tag Tag, index int) {
+	for _, accept := range lang {
+		desired, _, err := ParseAcceptLanguage(accept)
+		if err != nil {
+			continue
+		}
+		if tag, index, conf := m.Match(desired...); conf != No {
+			return tag, index
+		}
+	}
+	tag, index, _ = m.Match()
+	return
+}
+
+// Matcher is the interface that wraps the Match method.
+//
+// Match returns the best match for any of the given tags, along with
+// a unique index associated with the returned tag and a confidence
+// score.
+type Matcher interface {
+	Match(t ...Tag) (tag Tag, index int, c Confidence)
+}
+
+// Comprehends reports the confidence score for a speaker of a given language
+// to being able to comprehend the written form of an alternative language.
+func Comprehends(speaker, alternative Tag) Confidence {
+	_, _, c := NewMatcher([]Tag{alternative}).Match(speaker)
+	return c
+}
+
+// NewMatcher returns a Matcher that matches an ordered list of preferred tags
+// against a list of supported tags based on written intelligibility, closeness
+// of dialect, equivalence of subtags and various other rules. It is initialized
+// with the list of supported tags. The first element is used as the default
+// value in case no match is found.
+//
+// Its Match method matches the first of the given Tags to reach a certain
+// confidence threshold. The tags passed to Match should therefore be specified
+// in order of preference. Extensions are ignored for matching.
+//
+// The index returned by the Match method corresponds to the index of the
+// matched tag in t, but is augmented with the Unicode extension ('u')of the
+// corresponding preferred tag. This allows user locale options to be passed
+// transparently.
+func NewMatcher(t []Tag, options ...MatchOption) Matcher {
+	return newMatcher(t, options)
+}
+
+func (m *matcher) Match(want ...Tag) (t Tag, index int, c Confidence) {
+	var tt language.Tag
+	match, w, c := m.getBest(want...)
+	if match != nil {
+		tt, index = match.tag, match.index
+	} else {
+		// TODO: this should be an option
+		tt = m.default_.tag
+		if m.preferSameScript {
+		outer:
+			for _, w := range want {
+				script, _ := w.Script()
+				if script.scriptID == 0 {
+					// Don't do anything if there is no script, such as with
+					// private subtags.
+					continue
+				}
+				for i, h := range m.supported {
+					if script.scriptID == h.maxScript {
+						tt, index = h.tag, i
+						break outer
+					}
+				}
+			}
+		}
+		// TODO: select first language tag based on script.
+	}
+	if w.RegionID != tt.RegionID && w.RegionID != 0 {
+		if w.RegionID != 0 && tt.RegionID != 0 && tt.RegionID.Contains(w.RegionID) {
+			tt.RegionID = w.RegionID
+			tt.RemakeString()
+		} else if r := w.RegionID.String(); len(r) == 2 {
+			// TODO: also filter macro and deprecated.
+			tt, _ = tt.SetTypeForKey("rg", strings.ToLower(r)+"zzzz")
+		}
+	}
+	// Copy options from the user-provided tag into the result tag. This is hard
+	// to do after the fact, so we do it here.
+	// TODO: add in alternative variants to -u-va-.
+	// TODO: add preferred region to -u-rg-.
+	if e := w.Extensions(); len(e) > 0 {
+		b := language.Builder{}
+		b.SetTag(tt)
+		for _, e := range e {
+			b.AddExt(e)
+		}
+		tt = b.Make()
+	}
+	return makeTag(tt), index, c
+}
+
+// ErrMissingLikelyTagsData indicates no information was available
+// to compute likely values of missing tags.
+var ErrMissingLikelyTagsData = errors.New("missing likely tags data")
+
+// func (t *Tag) setTagsFrom(id Tag) {
+// 	t.LangID = id.LangID
+// 	t.ScriptID = id.ScriptID
+// 	t.RegionID = id.RegionID
+// }
+
+// Tag Matching
+// CLDR defines an algorithm for finding the best match between two sets of language
+// tags. The basic algorithm defines how to score a possible match and then find
+// the match with the best score
+// (see https://www.unicode.org/reports/tr35/#LanguageMatching).
+// Using scoring has several disadvantages. The scoring obfuscates the importance of
+// the various factors considered, making the algorithm harder to understand. Using
+// scoring also requires the full score to be computed for each pair of tags.
+//
+// We will use a different algorithm which aims to have the following properties:
+// - clarity on the precedence of the various selection factors, and
+// - improved performance by allowing early termination of a comparison.
+//
+// Matching algorithm (overview)
+// Input:
+//   - supported: a set of supported tags
+//   - default:   the default tag to return in case there is no match
+//   - desired:   list of desired tags, ordered by preference, starting with
+//                the most-preferred.
+//
+// Algorithm:
+//   1) Set the best match to the lowest confidence level
+//   2) For each tag in "desired":
+//     a) For each tag in "supported":
+//        1) compute the match between the two tags.
+//        2) if the match is better than the previous best match, replace it
+//           with the new match. (see next section)
+//     b) if the current best match is Exact and pin is true the result will be
+//        frozen to the language found thusfar, although better matches may
+//        still be found for the same language.
+//   3) If the best match so far is below a certain threshold, return "default".
+//
+// Ranking:
+// We use two phases to determine whether one pair of tags are a better match
+// than another pair of tags. First, we determine a rough confidence level. If the
+// levels are different, the one with the highest confidence wins.
+// Second, if the rough confidence levels are identical, we use a set of tie-breaker
+// rules.
+//
+// The confidence level of matching a pair of tags is determined by finding the
+// lowest confidence level of any matches of the corresponding subtags (the
+// result is deemed as good as its weakest link).
+// We define the following levels:
+//   Exact    - An exact match of a subtag, before adding likely subtags.
+//   MaxExact - An exact match of a subtag, after adding likely subtags.
+//              [See Note 2].
+//   High     - High level of mutual intelligibility between different subtag
+//              variants.
+//   Low      - Low level of mutual intelligibility between different subtag
+//              variants.
+//   No       - No mutual intelligibility.
+//
+// The following levels can occur for each type of subtag:
+//   Base:    Exact, MaxExact, High, Low, No
+//   Script:  Exact, MaxExact [see Note 3], Low, No
+//   Region:  Exact, MaxExact, High
+//   Variant: Exact, High
+//   Private: Exact, No
+//
+// Any result with a confidence level of Low or higher is deemed a possible match.
+// Once a desired tag matches any of the supported tags with a level of MaxExact
+// or higher, the next desired tag is not considered (see Step 2.b).
+// Note that CLDR provides languageMatching data that defines close equivalence
+// classes for base languages, scripts and regions.
+//
+// Tie-breaking
+// If we get the same confidence level for two matches, we apply a sequence of
+// tie-breaking rules. The first that succeeds defines the result. The rules are
+// applied in the following order.
+//   1) Original language was defined and was identical.
+//   2) Original region was defined and was identical.
+//   3) Distance between two maximized regions was the smallest.
+//   4) Original script was defined and was identical.
+//   5) Distance from want tag to have tag using the parent relation [see Note 5.]
+// If there is still no winner after these rules are applied, the first match
+// found wins.
+//
+// Notes:
+// [2] In practice, as matching of Exact is done in a separate phase from
+//     matching the other levels, we reuse the Exact level to mean MaxExact in
+//     the second phase. As a consequence, we only need the levels defined by
+//     the Confidence type. The MaxExact confidence level is mapped to High in
+//     the public API.
+// [3] We do not differentiate between maximized script values that were derived
+//     from suppressScript versus most likely tag data. We determined that in
+//     ranking the two, one ranks just after the other. Moreover, the two cannot
+//     occur concurrently. As a consequence, they are identical for practical
+//     purposes.
+// [4] In case of deprecated, macro-equivalents and legacy mappings, we assign
+//     the MaxExact level to allow iw vs he to still be a closer match than
+//     en-AU vs en-US, for example.
+// [5] In CLDR a locale inherits fields that are unspecified for this locale
+//     from its parent. Therefore, if a locale is a parent of another locale,
+//     it is a strong measure for closeness, especially when no other tie
+//     breaker rule applies. One could also argue it is inconsistent, for
+//     example, when pt-AO matches pt (which CLDR equates with pt-BR), even
+//     though its parent is pt-PT according to the inheritance rules.
+//
+// Implementation Details:
+// There are several performance considerations worth pointing out. Most notably,
+// we preprocess as much as possible (within reason) at the time of creation of a
+// matcher. This includes:
+//   - creating a per-language map, which includes data for the raw base language
+//     and its canonicalized variant (if applicable),
+//   - expanding entries for the equivalence classes defined in CLDR's
+//     languageMatch data.
+// The per-language map ensures that typically only a very small number of tags
+// need to be considered. The pre-expansion of canonicalized subtags and
+// equivalence classes reduces the amount of map lookups that need to be done at
+// runtime.
+
+// matcher keeps a set of supported language tags, indexed by language.
+type matcher struct {
+	default_         *haveTag
+	supported        []*haveTag
+	index            map[language.Language]*matchHeader
+	passSettings     bool
+	preferSameScript bool
+}
+
+// matchHeader has the lists of tags for exact matches and matches based on
+// maximized and canonicalized tags for a given language.
+type matchHeader struct {
+	haveTags []*haveTag
+	original bool
+}
+
+// haveTag holds a supported Tag and its maximized script and region. The maximized
+// or canonicalized language is not stored as it is not needed during matching.
+type haveTag struct {
+	tag language.Tag
+
+	// index of this tag in the original list of supported tags.
+	index int
+
+	// conf is the maximum confidence that can result from matching this haveTag.
+	// When conf < Exact this means it was inserted after applying a CLDR equivalence rule.
+	conf Confidence
+
+	// Maximized region and script.
+	maxRegion language.Region
+	maxScript language.Script
+
+	// altScript may be checked as an alternative match to maxScript. If altScript
+	// matches, the confidence level for this match is Low. Theoretically there
+	// could be multiple alternative scripts. This does not occur in practice.
+	altScript language.Script
+
+	// nextMax is the index of the next haveTag with the same maximized tags.
+	nextMax uint16
+}
+
+func makeHaveTag(tag language.Tag, index int) (haveTag, language.Language) {
+	max := tag
+	if tag.LangID != 0 || tag.RegionID != 0 || tag.ScriptID != 0 {
+		max, _ = canonicalize(All, max)
+		max, _ = max.Maximize()
+		max.RemakeString()
+	}
+	return haveTag{tag, index, Exact, max.RegionID, max.ScriptID, altScript(max.LangID, max.ScriptID), 0}, max.LangID
+}
+
+// altScript returns an alternative script that may match the given script with
+// a low confidence.  At the moment, the langMatch data allows for at most one
+// script to map to another and we rely on this to keep the code simple.
+func altScript(l language.Language, s language.Script) language.Script {
+	for _, alt := range matchScript {
+		// TODO: also match cases where language is not the same.
+		if (language.Language(alt.wantLang) == l || language.Language(alt.haveLang) == l) &&
+			language.Script(alt.haveScript) == s {
+			return language.Script(alt.wantScript)
+		}
+	}
+	return 0
+}
+
+// addIfNew adds a haveTag to the list of tags only if it is a unique tag.
+// Tags that have the same maximized values are linked by index.
+func (h *matchHeader) addIfNew(n haveTag, exact bool) {
+	h.original = h.original || exact
+	// Don't add new exact matches.
+	for _, v := range h.haveTags {
+		if equalsRest(v.tag, n.tag) {
+			return
+		}
+	}
+	// Allow duplicate maximized tags, but create a linked list to allow quickly
+	// comparing the equivalents and bail out.
+	for i, v := range h.haveTags {
+		if v.maxScript == n.maxScript &&
+			v.maxRegion == n.maxRegion &&
+			v.tag.VariantOrPrivateUseTags() == n.tag.VariantOrPrivateUseTags() {
+			for h.haveTags[i].nextMax != 0 {
+				i = int(h.haveTags[i].nextMax)
+			}
+			h.haveTags[i].nextMax = uint16(len(h.haveTags))
+			break
+		}
+	}
+	h.haveTags = append(h.haveTags, &n)
+}
+
+// header returns the matchHeader for the given language. It creates one if
+// it doesn't already exist.
+func (m *matcher) header(l language.Language) *matchHeader {
+	if h := m.index[l]; h != nil {
+		return h
+	}
+	h := &matchHeader{}
+	m.index[l] = h
+	return h
+}
+
+func toConf(d uint8) Confidence {
+	if d <= 10 {
+		return High
+	}
+	if d < 30 {
+		return Low
+	}
+	return No
+}
+
+// newMatcher builds an index for the given supported tags and returns it as
+// a matcher. It also expands the index by considering various equivalence classes
+// for a given tag.
+func newMatcher(supported []Tag, options []MatchOption) *matcher {
+	m := &matcher{
+		index:            make(map[language.Language]*matchHeader),
+		preferSameScript: true,
+	}
+	for _, o := range options {
+		o(m)
+	}
+	if len(supported) == 0 {
+		m.default_ = &haveTag{}
+		return m
+	}
+	// Add supported languages to the index. Add exact matches first to give
+	// them precedence.
+	for i, tag := range supported {
+		tt := tag.tag()
+		pair, _ := makeHaveTag(tt, i)
+		m.header(tt.LangID).addIfNew(pair, true)
+		m.supported = append(m.supported, &pair)
+	}
+	m.default_ = m.header(supported[0].lang()).haveTags[0]
+	// Keep these in two different loops to support the case that two equivalent
+	// languages are distinguished, such as iw and he.
+	for i, tag := range supported {
+		tt := tag.tag()
+		pair, max := makeHaveTag(tt, i)
+		if max != tt.LangID {
+			m.header(max).addIfNew(pair, true)
+		}
+	}
+
+	// update is used to add indexes in the map for equivalent languages.
+	// update will only add entries to original indexes, thus not computing any
+	// transitive relations.
+	update := func(want, have uint16, conf Confidence) {
+		if hh := m.index[language.Language(have)]; hh != nil {
+			if !hh.original {
+				return
+			}
+			hw := m.header(language.Language(want))
+			for _, ht := range hh.haveTags {
+				v := *ht
+				if conf < v.conf {
+					v.conf = conf
+				}
+				v.nextMax = 0 // this value needs to be recomputed
+				if v.altScript != 0 {
+					v.altScript = altScript(language.Language(want), v.maxScript)
+				}
+				hw.addIfNew(v, conf == Exact && hh.original)
+			}
+		}
+	}
+
+	// Add entries for languages with mutual intelligibility as defined by CLDR's
+	// languageMatch data.
+	for _, ml := range matchLang {
+		update(ml.want, ml.have, toConf(ml.distance))
+		if !ml.oneway {
+			update(ml.have, ml.want, toConf(ml.distance))
+		}
+	}
+
+	// Add entries for possible canonicalizations. This is an optimization to
+	// ensure that only one map lookup needs to be done at runtime per desired tag.
+	// First we match deprecated equivalents. If they are perfect equivalents
+	// (their canonicalization simply substitutes a different language code, but
+	// nothing else), the match confidence is Exact, otherwise it is High.
+	for i, lm := range language.AliasMap {
+		// If deprecated codes match and there is no fiddling with the script or
+		// or region, we consider it an exact match.
+		conf := Exact
+		if language.AliasTypes[i] != language.Macro {
+			if !isExactEquivalent(language.Language(lm.From)) {
+				conf = High
+			}
+			update(lm.To, lm.From, conf)
+		}
+		update(lm.From, lm.To, conf)
+	}
+	return m
+}
+
+// getBest gets the best matching tag in m for any of the given tags, taking into
+// account the order of preference of the given tags.
+func (m *matcher) getBest(want ...Tag) (got *haveTag, orig language.Tag, c Confidence) {
+	best := bestMatch{}
+	for i, ww := range want {
+		w := ww.tag()
+		var max language.Tag
+		// Check for exact match first.
+		h := m.index[w.LangID]
+		if w.LangID != 0 {
+			if h == nil {
+				continue
+			}
+			// Base language is defined.
+			max, _ = canonicalize(Legacy|Deprecated|Macro, w)
+			// A region that is added through canonicalization is stronger than
+			// a maximized region: set it in the original (e.g. mo -> ro-MD).
+			if w.RegionID != max.RegionID {
+				w.RegionID = max.RegionID
+			}
+			// TODO: should we do the same for scripts?
+			// See test case: en, sr, nl ; sh ; sr
+			max, _ = max.Maximize()
+		} else {
+			// Base language is not defined.
+			if h != nil {
+				for i := range h.haveTags {
+					have := h.haveTags[i]
+					if equalsRest(have.tag, w) {
+						return have, w, Exact
+					}
+				}
+			}
+			if w.ScriptID == 0 && w.RegionID == 0 {
+				// We skip all tags matching und for approximate matching, including
+				// private tags.
+				continue
+			}
+			max, _ = w.Maximize()
+			if h = m.index[max.LangID]; h == nil {
+				continue
+			}
+		}
+		pin := true
+		for _, t := range want[i+1:] {
+			if w.LangID == t.lang() {
+				pin = false
+				break
+			}
+		}
+		// Check for match based on maximized tag.
+		for i := range h.haveTags {
+			have := h.haveTags[i]
+			best.update(have, w, max.ScriptID, max.RegionID, pin)
+			if best.conf == Exact {
+				for have.nextMax != 0 {
+					have = h.haveTags[have.nextMax]
+					best.update(have, w, max.ScriptID, max.RegionID, pin)
+				}
+				return best.have, best.want, best.conf
+			}
+		}
+	}
+	if best.conf <= No {
+		if len(want) != 0 {
+			return nil, want[0].tag(), No
+		}
+		return nil, language.Tag{}, No
+	}
+	return best.have, best.want, best.conf
+}
+
+// bestMatch accumulates the best match so far.
+type bestMatch struct {
+	have            *haveTag
+	want            language.Tag
+	conf            Confidence
+	pinnedRegion    language.Region
+	pinLanguage     bool
+	sameRegionGroup bool
+	// Cached results from applying tie-breaking rules.
+	origLang     bool
+	origReg      bool
+	paradigmReg  bool
+	regGroupDist uint8
+	origScript   bool
+}
+
+// update updates the existing best match if the new pair is considered to be a
+// better match. To determine if the given pair is a better match, it first
+// computes the rough confidence level. If this surpasses the current match, it
+// will replace it and update the tie-breaker rule cache. If there is a tie, it
+// proceeds with applying a series of tie-breaker rules. If there is no
+// conclusive winner after applying the tie-breaker rules, it leaves the current
+// match as the preferred match.
+//
+// If pin is true and have and tag are a strong match, it will henceforth only
+// consider matches for this language. This corresponds to the nothing that most
+// users have a strong preference for the first defined language. A user can
+// still prefer a second language over a dialect of the preferred language by
+// explicitly specifying dialects, e.g. "en, nl, en-GB". In this case pin should
+// be false.
+func (m *bestMatch) update(have *haveTag, tag language.Tag, maxScript language.Script, maxRegion language.Region, pin bool) {
+	// Bail if the maximum attainable confidence is below that of the current best match.
+	c := have.conf
+	if c < m.conf {
+		return
+	}
+	// Don't change the language once we already have found an exact match.
+	if m.pinLanguage && tag.LangID != m.want.LangID {
+		return
+	}
+	// Pin the region group if we are comparing tags for the same language.
+	if tag.LangID == m.want.LangID && m.sameRegionGroup {
+		_, sameGroup := regionGroupDist(m.pinnedRegion, have.maxRegion, have.maxScript, m.want.LangID)
+		if !sameGroup {
+			return
+		}
+	}
+	if c == Exact && have.maxScript == maxScript {
+		// If there is another language and then another entry of this language,
+		// don't pin anything, otherwise pin the language.
+		m.pinLanguage = pin
+	}
+	if equalsRest(have.tag, tag) {
+	} else if have.maxScript != maxScript {
+		// There is usually very little comprehension between different scripts.
+		// In a few cases there may still be Low comprehension. This possibility
+		// is pre-computed and stored in have.altScript.
+		if Low < m.conf || have.altScript != maxScript {
+			return
+		}
+		c = Low
+	} else if have.maxRegion != maxRegion {
+		if High < c {
+			// There is usually a small difference between languages across regions.
+			c = High
+		}
+	}
+
+	// We store the results of the computations of the tie-breaker rules along
+	// with the best match. There is no need to do the checks once we determine
+	// we have a winner, but we do still need to do the tie-breaker computations.
+	// We use "beaten" to keep track if we still need to do the checks.
+	beaten := false // true if the new pair defeats the current one.
+	if c != m.conf {
+		if c < m.conf {
+			return
+		}
+		beaten = true
+	}
+
+	// Tie-breaker rules:
+	// We prefer if the pre-maximized language was specified and identical.
+	origLang := have.tag.LangID == tag.LangID && tag.LangID != 0
+	if !beaten && m.origLang != origLang {
+		if m.origLang {
+			return
+		}
+		beaten = true
+	}
+
+	// We prefer if the pre-maximized region was specified and identical.
+	origReg := have.tag.RegionID == tag.RegionID && tag.RegionID != 0
+	if !beaten && m.origReg != origReg {
+		if m.origReg {
+			return
+		}
+		beaten = true
+	}
+
+	regGroupDist, sameGroup := regionGroupDist(have.maxRegion, maxRegion, maxScript, tag.LangID)
+	if !beaten && m.regGroupDist != regGroupDist {
+		if regGroupDist > m.regGroupDist {
+			return
+		}
+		beaten = true
+	}
+
+	paradigmReg := isParadigmLocale(tag.LangID, have.maxRegion)
+	if !beaten && m.paradigmReg != paradigmReg {
+		if !paradigmReg {
+			return
+		}
+		beaten = true
+	}
+
+	// Next we prefer if the pre-maximized script was specified and identical.
+	origScript := have.tag.ScriptID == tag.ScriptID && tag.ScriptID != 0
+	if !beaten && m.origScript != origScript {
+		if m.origScript {
+			return
+		}
+		beaten = true
+	}
+
+	// Update m to the newly found best match.
+	if beaten {
+		m.have = have
+		m.want = tag
+		m.conf = c
+		m.pinnedRegion = maxRegion
+		m.sameRegionGroup = sameGroup
+		m.origLang = origLang
+		m.origReg = origReg
+		m.paradigmReg = paradigmReg
+		m.origScript = origScript
+		m.regGroupDist = regGroupDist
+	}
+}
+
+func isParadigmLocale(lang language.Language, r language.Region) bool {
+	for _, e := range paradigmLocales {
+		if language.Language(e[0]) == lang && (r == language.Region(e[1]) || r == language.Region(e[2])) {
+			return true
+		}
+	}
+	return false
+}
+
+// regionGroupDist computes the distance between two regions based on their
+// CLDR grouping.
+func regionGroupDist(a, b language.Region, script language.Script, lang language.Language) (dist uint8, same bool) {
+	const defaultDistance = 4
+
+	aGroup := uint(regionToGroups[a]) << 1
+	bGroup := uint(regionToGroups[b]) << 1
+	for _, ri := range matchRegion {
+		if language.Language(ri.lang) == lang && (ri.script == 0 || language.Script(ri.script) == script) {
+			group := uint(1 << (ri.group &^ 0x80))
+			if 0x80&ri.group == 0 {
+				if aGroup&bGroup&group != 0 { // Both regions are in the group.
+					return ri.distance, ri.distance == defaultDistance
+				}
+			} else {
+				if (aGroup|bGroup)&group == 0 { // Both regions are not in the group.
+					return ri.distance, ri.distance == defaultDistance
+				}
+			}
+		}
+	}
+	return defaultDistance, true
+}
+
+// equalsRest compares everything except the language.
+func equalsRest(a, b language.Tag) bool {
+	// TODO: don't include extensions in this comparison. To do this efficiently,
+	// though, we should handle private tags separately.
+	return a.ScriptID == b.ScriptID && a.RegionID == b.RegionID && a.VariantOrPrivateUseTags() == b.VariantOrPrivateUseTags()
+}
+
+// isExactEquivalent returns true if canonicalizing the language will not alter
+// the script or region of a tag.
+func isExactEquivalent(l language.Language) bool {
+	for _, o := range notEquivalent {
+		if o == l {
+			return false
+		}
+	}
+	return true
+}
+
+var notEquivalent []language.Language
+
+func init() {
+	// Create a list of all languages for which canonicalization may alter the
+	// script or region.
+	for _, lm := range language.AliasMap {
+		tag := language.Tag{LangID: language.Language(lm.From)}
+		if tag, _ = canonicalize(All, tag); tag.ScriptID != 0 || tag.RegionID != 0 {
+			notEquivalent = append(notEquivalent, language.Language(lm.From))
+		}
+	}
+	// Maximize undefined regions of paradigm locales.
+	for i, v := range paradigmLocales {
+		t := language.Tag{LangID: language.Language(v[0])}
+		max, _ := t.Maximize()
+		if v[1] == 0 {
+			paradigmLocales[i][1] = uint16(max.RegionID)
+		}
+		if v[2] == 0 {
+			paradigmLocales[i][2] = uint16(max.RegionID)
+		}
+	}
+}
diff --git a/vendor/golang.org/x/text/language/parse.go b/vendor/golang.org/x/text/language/parse.go
new file mode 100644
index 00000000..11acfd88
--- /dev/null
+++ b/vendor/golang.org/x/text/language/parse.go
@@ -0,0 +1,228 @@
+// 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 language
+
+import (
+	"errors"
+	"strconv"
+	"strings"
+
+	"golang.org/x/text/internal/language"
+)
+
+// ValueError is returned by any of the parsing functions when the
+// input is well-formed but the respective subtag is not recognized
+// as a valid value.
+type ValueError interface {
+	error
+
+	// Subtag returns the subtag for which the error occurred.
+	Subtag() string
+}
+
+// Parse parses the given BCP 47 string and returns a valid Tag. If parsing
+// failed it returns an error and any part of the tag that could be parsed.
+// If parsing succeeded but an unknown value was found, it returns
+// ValueError. The Tag returned in this case is just stripped of the unknown
+// value. All other values are preserved. It accepts tags in the BCP 47 format
+// and extensions to this standard defined in
+// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
+// The resulting tag is canonicalized using the default canonicalization type.
+func Parse(s string) (t Tag, err error) {
+	return Default.Parse(s)
+}
+
+// Parse parses the given BCP 47 string and returns a valid Tag. If parsing
+// failed it returns an error and any part of the tag that could be parsed.
+// If parsing succeeded but an unknown value was found, it returns
+// ValueError. The Tag returned in this case is just stripped of the unknown
+// value. All other values are preserved. It accepts tags in the BCP 47 format
+// and extensions to this standard defined in
+// https://www.unicode.org/reports/tr35/#Unicode_Language_and_Locale_Identifiers.
+// The resulting tag is canonicalized using the canonicalization type c.
+func (c CanonType) Parse(s string) (t Tag, err error) {
+	tt, err := language.Parse(s)
+	if err != nil {
+		return makeTag(tt), err
+	}
+	tt, changed := canonicalize(c, tt)
+	if changed {
+		tt.RemakeString()
+	}
+	return makeTag(tt), err
+}
+
+// Compose creates a Tag from individual parts, which may be of type Tag, Base,
+// Script, Region, Variant, []Variant, Extension, []Extension or error. If a
+// Base, Script or Region or slice of type Variant or Extension is passed more
+// than once, the latter will overwrite the former. Variants and Extensions are
+// accumulated, but if two extensions of the same type are passed, the latter
+// will replace the former. For -u extensions, though, the key-type pairs are
+// added, where later values overwrite older ones. A Tag overwrites all former
+// values and typically only makes sense as the first argument. The resulting
+// tag is returned after canonicalizing using the Default CanonType. If one or
+// more errors are encountered, one of the errors is returned.
+func Compose(part ...interface{}) (t Tag, err error) {
+	return Default.Compose(part...)
+}
+
+// Compose creates a Tag from individual parts, which may be of type Tag, Base,
+// Script, Region, Variant, []Variant, Extension, []Extension or error. If a
+// Base, Script or Region or slice of type Variant or Extension is passed more
+// than once, the latter will overwrite the former. Variants and Extensions are
+// accumulated, but if two extensions of the same type are passed, the latter
+// will replace the former. For -u extensions, though, the key-type pairs are
+// added, where later values overwrite older ones. A Tag overwrites all former
+// values and typically only makes sense as the first argument. The resulting
+// tag is returned after canonicalizing using CanonType c. If one or more errors
+// are encountered, one of the errors is returned.
+func (c CanonType) Compose(part ...interface{}) (t Tag, err error) {
+	var b language.Builder
+	if err = update(&b, part...); err != nil {
+		return und, err
+	}
+	b.Tag, _ = canonicalize(c, b.Tag)
+	return makeTag(b.Make()), err
+}
+
+var errInvalidArgument = errors.New("invalid Extension or Variant")
+
+func update(b *language.Builder, part ...interface{}) (err error) {
+	for _, x := range part {
+		switch v := x.(type) {
+		case Tag:
+			b.SetTag(v.tag())
+		case Base:
+			b.Tag.LangID = v.langID
+		case Script:
+			b.Tag.ScriptID = v.scriptID
+		case Region:
+			b.Tag.RegionID = v.regionID
+		case Variant:
+			if v.variant == "" {
+				err = errInvalidArgument
+				break
+			}
+			b.AddVariant(v.variant)
+		case Extension:
+			if v.s == "" {
+				err = errInvalidArgument
+				break
+			}
+			b.SetExt(v.s)
+		case []Variant:
+			b.ClearVariants()
+			for _, v := range v {
+				b.AddVariant(v.variant)
+			}
+		case []Extension:
+			b.ClearExtensions()
+			for _, e := range v {
+				b.SetExt(e.s)
+			}
+		// TODO: support parsing of raw strings based on morphology or just extensions?
+		case error:
+			if v != nil {
+				err = v
+			}
+		}
+	}
+	return
+}
+
+var errInvalidWeight = errors.New("ParseAcceptLanguage: invalid weight")
+
+// ParseAcceptLanguage parses the contents of an Accept-Language header as
+// defined in http://www.ietf.org/rfc/rfc2616.txt and returns a list of Tags and
+// a list of corresponding quality weights. It is more permissive than RFC 2616
+// and may return non-nil slices even if the input is not valid.
+// The Tags will be sorted by highest weight first and then by first occurrence.
+// Tags with a weight of zero will be dropped. An error will be returned if the
+// input could not be parsed.
+func ParseAcceptLanguage(s string) (tag []Tag, q []float32, err error) {
+	var entry string
+	for s != "" {
+		if entry, s = split(s, ','); entry == "" {
+			continue
+		}
+
+		entry, weight := split(entry, ';')
+
+		// Scan the language.
+		t, err := Parse(entry)
+		if err != nil {
+			id, ok := acceptFallback[entry]
+			if !ok {
+				return nil, nil, err
+			}
+			t = makeTag(language.Tag{LangID: id})
+		}
+
+		// Scan the optional weight.
+		w := 1.0
+		if weight != "" {
+			weight = consume(weight, 'q')
+			weight = consume(weight, '=')
+			// consume returns the empty string when a token could not be
+			// consumed, resulting in an error for ParseFloat.
+			if w, err = strconv.ParseFloat(weight, 32); err != nil {
+				return nil, nil, errInvalidWeight
+			}
+			// Drop tags with a quality weight of 0.
+			if w <= 0 {
+				continue
+			}
+		}
+
+		tag = append(tag, t)
+		q = append(q, float32(w))
+	}
+	sortStable(&tagSort{tag, q})
+	return tag, q, nil
+}
+
+// consume removes a leading token c from s and returns the result or the empty
+// string if there is no such token.
+func consume(s string, c byte) string {
+	if s == "" || s[0] != c {
+		return ""
+	}
+	return strings.TrimSpace(s[1:])
+}
+
+func split(s string, c byte) (head, tail string) {
+	if i := strings.IndexByte(s, c); i >= 0 {
+		return strings.TrimSpace(s[:i]), strings.TrimSpace(s[i+1:])
+	}
+	return strings.TrimSpace(s), ""
+}
+
+// Add hack mapping to deal with a small number of cases that occur
+// in Accept-Language (with reasonable frequency).
+var acceptFallback = map[string]language.Language{
+	"english": _en,
+	"deutsch": _de,
+	"italian": _it,
+	"french":  _fr,
+	"*":       _mul, // defined in the spec to match all languages.
+}
+
+type tagSort struct {
+	tag []Tag
+	q   []float32
+}
+
+func (s *tagSort) Len() int {
+	return len(s.q)
+}
+
+func (s *tagSort) Less(i, j int) bool {
+	return s.q[i] > s.q[j]
+}
+
+func (s *tagSort) Swap(i, j int) {
+	s.tag[i], s.tag[j] = s.tag[j], s.tag[i]
+	s.q[i], s.q[j] = s.q[j], s.q[i]
+}
diff --git a/vendor/golang.org/x/text/language/tables.go b/vendor/golang.org/x/text/language/tables.go
new file mode 100644
index 00000000..96b57f61
--- /dev/null
+++ b/vendor/golang.org/x/text/language/tables.go
@@ -0,0 +1,298 @@
+// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT.
+
+package language
+
+// CLDRVersion is the CLDR version from which the tables in this package are derived.
+const CLDRVersion = "32"
+
+const (
+	_de  = 269
+	_en  = 313
+	_fr  = 350
+	_it  = 505
+	_mo  = 784
+	_no  = 879
+	_nb  = 839
+	_pt  = 960
+	_sh  = 1031
+	_mul = 806
+	_und = 0
+)
+const (
+	_001 = 1
+	_419 = 31
+	_BR  = 65
+	_CA  = 73
+	_ES  = 110
+	_GB  = 123
+	_MD  = 188
+	_PT  = 238
+	_UK  = 306
+	_US  = 309
+	_ZZ  = 357
+	_XA  = 323
+	_XC  = 325
+	_XK  = 333
+)
+const (
+	_Latn = 90
+	_Hani = 57
+	_Hans = 59
+	_Hant = 60
+	_Qaaa = 143
+	_Qaai = 151
+	_Qabx = 192
+	_Zinh = 245
+	_Zyyy = 250
+	_Zzzz = 251
+)
+
+var regionToGroups = []uint8{ // 358 elements
+	// Entry 0 - 3F
+	0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x04,
+	0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00,
+	0x00, 0x04, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00,
+	0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x04,
+	// Entry 40 - 7F
+	0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00,
+	0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x08,
+	0x00, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00,
+	// Entry 80 - BF
+	0x00, 0x00, 0x04, 0x00, 0x00, 0x04, 0x00, 0x00,
+	0x00, 0x04, 0x01, 0x00, 0x04, 0x02, 0x00, 0x04,
+	0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00,
+	0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x08, 0x08, 0x00, 0x00, 0x00, 0x04, 0x00,
+	// Entry C0 - FF
+	0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01,
+	0x04, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x04,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x04, 0x00, 0x05, 0x00, 0x00, 0x00,
+	0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	// Entry 100 - 13F
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00,
+	0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x04,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x08, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x04, 0x00,
+	0x00, 0x04, 0x00, 0x04, 0x04, 0x05, 0x00, 0x00,
+	// Entry 140 - 17F
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+	0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+} // Size: 382 bytes
+
+var paradigmLocales = [][3]uint16{ // 3 elements
+	0: [3]uint16{0x139, 0x0, 0x7b},
+	1: [3]uint16{0x13e, 0x0, 0x1f},
+	2: [3]uint16{0x3c0, 0x41, 0xee},
+} // Size: 42 bytes
+
+type mutualIntelligibility struct {
+	want     uint16
+	have     uint16
+	distance uint8
+	oneway   bool
+}
+type scriptIntelligibility struct {
+	wantLang   uint16
+	haveLang   uint16
+	wantScript uint8
+	haveScript uint8
+	distance   uint8
+}
+type regionIntelligibility struct {
+	lang     uint16
+	script   uint8
+	group    uint8
+	distance uint8
+}
+
+// matchLang holds pairs of langIDs of base languages that are typically
+// mutually intelligible. Each pair is associated with a confidence and
+// whether the intelligibility goes one or both ways.
+var matchLang = []mutualIntelligibility{ // 113 elements
+	0:   {want: 0x1d1, have: 0xb7, distance: 0x4, oneway: false},
+	1:   {want: 0x407, have: 0xb7, distance: 0x4, oneway: false},
+	2:   {want: 0x407, have: 0x1d1, distance: 0x4, oneway: false},
+	3:   {want: 0x407, have: 0x432, distance: 0x4, oneway: false},
+	4:   {want: 0x43a, have: 0x1, distance: 0x4, oneway: false},
+	5:   {want: 0x1a3, have: 0x10d, distance: 0x4, oneway: true},
+	6:   {want: 0x295, have: 0x10d, distance: 0x4, oneway: true},
+	7:   {want: 0x101, have: 0x36f, distance: 0x8, oneway: false},
+	8:   {want: 0x101, have: 0x347, distance: 0x8, oneway: false},
+	9:   {want: 0x5, have: 0x3e2, distance: 0xa, oneway: true},
+	10:  {want: 0xd, have: 0x139, distance: 0xa, oneway: true},
+	11:  {want: 0x16, have: 0x367, distance: 0xa, oneway: true},
+	12:  {want: 0x21, have: 0x139, distance: 0xa, oneway: true},
+	13:  {want: 0x56, have: 0x13e, distance: 0xa, oneway: true},
+	14:  {want: 0x58, have: 0x3e2, distance: 0xa, oneway: true},
+	15:  {want: 0x71, have: 0x3e2, distance: 0xa, oneway: true},
+	16:  {want: 0x75, have: 0x139, distance: 0xa, oneway: true},
+	17:  {want: 0x82, have: 0x1be, distance: 0xa, oneway: true},
+	18:  {want: 0xa5, have: 0x139, distance: 0xa, oneway: true},
+	19:  {want: 0xb2, have: 0x15e, distance: 0xa, oneway: true},
+	20:  {want: 0xdd, have: 0x153, distance: 0xa, oneway: true},
+	21:  {want: 0xe5, have: 0x139, distance: 0xa, oneway: true},
+	22:  {want: 0xe9, have: 0x3a, distance: 0xa, oneway: true},
+	23:  {want: 0xf0, have: 0x15e, distance: 0xa, oneway: true},
+	24:  {want: 0xf9, have: 0x15e, distance: 0xa, oneway: true},
+	25:  {want: 0x100, have: 0x139, distance: 0xa, oneway: true},
+	26:  {want: 0x130, have: 0x139, distance: 0xa, oneway: true},
+	27:  {want: 0x13c, have: 0x139, distance: 0xa, oneway: true},
+	28:  {want: 0x140, have: 0x151, distance: 0xa, oneway: true},
+	29:  {want: 0x145, have: 0x13e, distance: 0xa, oneway: true},
+	30:  {want: 0x158, have: 0x101, distance: 0xa, oneway: true},
+	31:  {want: 0x16d, have: 0x367, distance: 0xa, oneway: true},
+	32:  {want: 0x16e, have: 0x139, distance: 0xa, oneway: true},
+	33:  {want: 0x16f, have: 0x139, distance: 0xa, oneway: true},
+	34:  {want: 0x17e, have: 0x139, distance: 0xa, oneway: true},
+	35:  {want: 0x190, have: 0x13e, distance: 0xa, oneway: true},
+	36:  {want: 0x194, have: 0x13e, distance: 0xa, oneway: true},
+	37:  {want: 0x1a4, have: 0x1be, distance: 0xa, oneway: true},
+	38:  {want: 0x1b4, have: 0x139, distance: 0xa, oneway: true},
+	39:  {want: 0x1b8, have: 0x139, distance: 0xa, oneway: true},
+	40:  {want: 0x1d4, have: 0x15e, distance: 0xa, oneway: true},
+	41:  {want: 0x1d7, have: 0x3e2, distance: 0xa, oneway: true},
+	42:  {want: 0x1d9, have: 0x139, distance: 0xa, oneway: true},
+	43:  {want: 0x1e7, have: 0x139, distance: 0xa, oneway: true},
+	44:  {want: 0x1f8, have: 0x139, distance: 0xa, oneway: true},
+	45:  {want: 0x20e, have: 0x1e1, distance: 0xa, oneway: true},
+	46:  {want: 0x210, have: 0x139, distance: 0xa, oneway: true},
+	47:  {want: 0x22d, have: 0x15e, distance: 0xa, oneway: true},
+	48:  {want: 0x242, have: 0x3e2, distance: 0xa, oneway: true},
+	49:  {want: 0x24a, have: 0x139, distance: 0xa, oneway: true},
+	50:  {want: 0x251, have: 0x139, distance: 0xa, oneway: true},
+	51:  {want: 0x265, have: 0x139, distance: 0xa, oneway: true},
+	52:  {want: 0x274, have: 0x48a, distance: 0xa, oneway: true},
+	53:  {want: 0x28a, have: 0x3e2, distance: 0xa, oneway: true},
+	54:  {want: 0x28e, have: 0x1f9, distance: 0xa, oneway: true},
+	55:  {want: 0x2a3, have: 0x139, distance: 0xa, oneway: true},
+	56:  {want: 0x2b5, have: 0x15e, distance: 0xa, oneway: true},
+	57:  {want: 0x2b8, have: 0x139, distance: 0xa, oneway: true},
+	58:  {want: 0x2be, have: 0x139, distance: 0xa, oneway: true},
+	59:  {want: 0x2c3, have: 0x15e, distance: 0xa, oneway: true},
+	60:  {want: 0x2ed, have: 0x139, distance: 0xa, oneway: true},
+	61:  {want: 0x2f1, have: 0x15e, distance: 0xa, oneway: true},
+	62:  {want: 0x2fa, have: 0x139, distance: 0xa, oneway: true},
+	63:  {want: 0x2ff, have: 0x7e, distance: 0xa, oneway: true},
+	64:  {want: 0x304, have: 0x139, distance: 0xa, oneway: true},
+	65:  {want: 0x30b, have: 0x3e2, distance: 0xa, oneway: true},
+	66:  {want: 0x31b, have: 0x1be, distance: 0xa, oneway: true},
+	67:  {want: 0x31f, have: 0x1e1, distance: 0xa, oneway: true},
+	68:  {want: 0x320, have: 0x139, distance: 0xa, oneway: true},
+	69:  {want: 0x331, have: 0x139, distance: 0xa, oneway: true},
+	70:  {want: 0x351, have: 0x139, distance: 0xa, oneway: true},
+	71:  {want: 0x36a, have: 0x347, distance: 0xa, oneway: false},
+	72:  {want: 0x36a, have: 0x36f, distance: 0xa, oneway: true},
+	73:  {want: 0x37a, have: 0x139, distance: 0xa, oneway: true},
+	74:  {want: 0x387, have: 0x139, distance: 0xa, oneway: true},
+	75:  {want: 0x389, have: 0x139, distance: 0xa, oneway: true},
+	76:  {want: 0x38b, have: 0x15e, distance: 0xa, oneway: true},
+	77:  {want: 0x390, have: 0x139, distance: 0xa, oneway: true},
+	78:  {want: 0x395, have: 0x139, distance: 0xa, oneway: true},
+	79:  {want: 0x39d, have: 0x139, distance: 0xa, oneway: true},
+	80:  {want: 0x3a5, have: 0x139, distance: 0xa, oneway: true},
+	81:  {want: 0x3be, have: 0x139, distance: 0xa, oneway: true},
+	82:  {want: 0x3c4, have: 0x13e, distance: 0xa, oneway: true},
+	83:  {want: 0x3d4, have: 0x10d, distance: 0xa, oneway: true},
+	84:  {want: 0x3d9, have: 0x139, distance: 0xa, oneway: true},
+	85:  {want: 0x3e5, have: 0x15e, distance: 0xa, oneway: true},
+	86:  {want: 0x3e9, have: 0x1be, distance: 0xa, oneway: true},
+	87:  {want: 0x3fa, have: 0x139, distance: 0xa, oneway: true},
+	88:  {want: 0x40c, have: 0x139, distance: 0xa, oneway: true},
+	89:  {want: 0x423, have: 0x139, distance: 0xa, oneway: true},
+	90:  {want: 0x429, have: 0x139, distance: 0xa, oneway: true},
+	91:  {want: 0x431, have: 0x139, distance: 0xa, oneway: true},
+	92:  {want: 0x43b, have: 0x139, distance: 0xa, oneway: true},
+	93:  {want: 0x43e, have: 0x1e1, distance: 0xa, oneway: true},
+	94:  {want: 0x445, have: 0x139, distance: 0xa, oneway: true},
+	95:  {want: 0x450, have: 0x139, distance: 0xa, oneway: true},
+	96:  {want: 0x461, have: 0x139, distance: 0xa, oneway: true},
+	97:  {want: 0x467, have: 0x3e2, distance: 0xa, oneway: true},
+	98:  {want: 0x46f, have: 0x139, distance: 0xa, oneway: true},
+	99:  {want: 0x476, have: 0x3e2, distance: 0xa, oneway: true},
+	100: {want: 0x3883, have: 0x139, distance: 0xa, oneway: true},
+	101: {want: 0x480, have: 0x139, distance: 0xa, oneway: true},
+	102: {want: 0x482, have: 0x139, distance: 0xa, oneway: true},
+	103: {want: 0x494, have: 0x3e2, distance: 0xa, oneway: true},
+	104: {want: 0x49d, have: 0x139, distance: 0xa, oneway: true},
+	105: {want: 0x4ac, have: 0x529, distance: 0xa, oneway: true},
+	106: {want: 0x4b4, have: 0x139, distance: 0xa, oneway: true},
+	107: {want: 0x4bc, have: 0x3e2, distance: 0xa, oneway: true},
+	108: {want: 0x4e5, have: 0x15e, distance: 0xa, oneway: true},
+	109: {want: 0x4f2, have: 0x139, distance: 0xa, oneway: true},
+	110: {want: 0x512, have: 0x139, distance: 0xa, oneway: true},
+	111: {want: 0x518, have: 0x139, distance: 0xa, oneway: true},
+	112: {want: 0x52f, have: 0x139, distance: 0xa, oneway: true},
+} // Size: 702 bytes
+
+// matchScript holds pairs of scriptIDs where readers of one script
+// can typically also read the other. Each is associated with a confidence.
+var matchScript = []scriptIntelligibility{ // 26 elements
+	0:  {wantLang: 0x432, haveLang: 0x432, wantScript: 0x5a, haveScript: 0x20, distance: 0x5},
+	1:  {wantLang: 0x432, haveLang: 0x432, wantScript: 0x20, haveScript: 0x5a, distance: 0x5},
+	2:  {wantLang: 0x58, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa},
+	3:  {wantLang: 0xa5, haveLang: 0x139, wantScript: 0xe, haveScript: 0x5a, distance: 0xa},
+	4:  {wantLang: 0x1d7, haveLang: 0x3e2, wantScript: 0x8, haveScript: 0x20, distance: 0xa},
+	5:  {wantLang: 0x210, haveLang: 0x139, wantScript: 0x2e, haveScript: 0x5a, distance: 0xa},
+	6:  {wantLang: 0x24a, haveLang: 0x139, wantScript: 0x4e, haveScript: 0x5a, distance: 0xa},
+	7:  {wantLang: 0x251, haveLang: 0x139, wantScript: 0x52, haveScript: 0x5a, distance: 0xa},
+	8:  {wantLang: 0x2b8, haveLang: 0x139, wantScript: 0x57, haveScript: 0x5a, distance: 0xa},
+	9:  {wantLang: 0x304, haveLang: 0x139, wantScript: 0x6e, haveScript: 0x5a, distance: 0xa},
+	10: {wantLang: 0x331, haveLang: 0x139, wantScript: 0x75, haveScript: 0x5a, distance: 0xa},
+	11: {wantLang: 0x351, haveLang: 0x139, wantScript: 0x22, haveScript: 0x5a, distance: 0xa},
+	12: {wantLang: 0x395, haveLang: 0x139, wantScript: 0x81, haveScript: 0x5a, distance: 0xa},
+	13: {wantLang: 0x39d, haveLang: 0x139, wantScript: 0x36, haveScript: 0x5a, distance: 0xa},
+	14: {wantLang: 0x3be, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
+	15: {wantLang: 0x3fa, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
+	16: {wantLang: 0x40c, haveLang: 0x139, wantScript: 0xcf, haveScript: 0x5a, distance: 0xa},
+	17: {wantLang: 0x450, haveLang: 0x139, wantScript: 0xde, haveScript: 0x5a, distance: 0xa},
+	18: {wantLang: 0x461, haveLang: 0x139, wantScript: 0xe1, haveScript: 0x5a, distance: 0xa},
+	19: {wantLang: 0x46f, haveLang: 0x139, wantScript: 0x2c, haveScript: 0x5a, distance: 0xa},
+	20: {wantLang: 0x476, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa},
+	21: {wantLang: 0x4b4, haveLang: 0x139, wantScript: 0x5, haveScript: 0x5a, distance: 0xa},
+	22: {wantLang: 0x4bc, haveLang: 0x3e2, wantScript: 0x5a, haveScript: 0x20, distance: 0xa},
+	23: {wantLang: 0x512, haveLang: 0x139, wantScript: 0x3e, haveScript: 0x5a, distance: 0xa},
+	24: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x3b, haveScript: 0x3c, distance: 0xf},
+	25: {wantLang: 0x529, haveLang: 0x529, wantScript: 0x3c, haveScript: 0x3b, distance: 0x13},
+} // Size: 232 bytes
+
+var matchRegion = []regionIntelligibility{ // 15 elements
+	0:  {lang: 0x3a, script: 0x0, group: 0x4, distance: 0x4},
+	1:  {lang: 0x3a, script: 0x0, group: 0x84, distance: 0x4},
+	2:  {lang: 0x139, script: 0x0, group: 0x1, distance: 0x4},
+	3:  {lang: 0x139, script: 0x0, group: 0x81, distance: 0x4},
+	4:  {lang: 0x13e, script: 0x0, group: 0x3, distance: 0x4},
+	5:  {lang: 0x13e, script: 0x0, group: 0x83, distance: 0x4},
+	6:  {lang: 0x3c0, script: 0x0, group: 0x3, distance: 0x4},
+	7:  {lang: 0x3c0, script: 0x0, group: 0x83, distance: 0x4},
+	8:  {lang: 0x529, script: 0x3c, group: 0x2, distance: 0x4},
+	9:  {lang: 0x529, script: 0x3c, group: 0x82, distance: 0x4},
+	10: {lang: 0x3a, script: 0x0, group: 0x80, distance: 0x5},
+	11: {lang: 0x139, script: 0x0, group: 0x80, distance: 0x5},
+	12: {lang: 0x13e, script: 0x0, group: 0x80, distance: 0x5},
+	13: {lang: 0x3c0, script: 0x0, group: 0x80, distance: 0x5},
+	14: {lang: 0x529, script: 0x3c, group: 0x80, distance: 0x5},
+} // Size: 114 bytes
+
+// Total table size 1472 bytes (1KiB); checksum: F86C669
diff --git a/vendor/golang.org/x/text/language/tags.go b/vendor/golang.org/x/text/language/tags.go
new file mode 100644
index 00000000..42ea7926
--- /dev/null
+++ b/vendor/golang.org/x/text/language/tags.go
@@ -0,0 +1,145 @@
+// 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 language
+
+import "golang.org/x/text/internal/language/compact"
+
+// TODO: Various sets of commonly use tags and regions.
+
+// MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed.
+// It simplifies safe initialization of Tag values.
+func MustParse(s string) Tag {
+	t, err := Parse(s)
+	if err != nil {
+		panic(err)
+	}
+	return t
+}
+
+// MustParse is like Parse, but panics if the given BCP 47 tag cannot be parsed.
+// It simplifies safe initialization of Tag values.
+func (c CanonType) MustParse(s string) Tag {
+	t, err := c.Parse(s)
+	if err != nil {
+		panic(err)
+	}
+	return t
+}
+
+// MustParseBase is like ParseBase, but panics if the given base cannot be parsed.
+// It simplifies safe initialization of Base values.
+func MustParseBase(s string) Base {
+	b, err := ParseBase(s)
+	if err != nil {
+		panic(err)
+	}
+	return b
+}
+
+// MustParseScript is like ParseScript, but panics if the given script cannot be
+// parsed. It simplifies safe initialization of Script values.
+func MustParseScript(s string) Script {
+	scr, err := ParseScript(s)
+	if err != nil {
+		panic(err)
+	}
+	return scr
+}
+
+// MustParseRegion is like ParseRegion, but panics if the given region cannot be
+// parsed. It simplifies safe initialization of Region values.
+func MustParseRegion(s string) Region {
+	r, err := ParseRegion(s)
+	if err != nil {
+		panic(err)
+	}
+	return r
+}
+
+var (
+	und = Tag{}
+
+	Und Tag = Tag{}
+
+	Afrikaans            Tag = Tag(compact.Afrikaans)
+	Amharic              Tag = Tag(compact.Amharic)
+	Arabic               Tag = Tag(compact.Arabic)
+	ModernStandardArabic Tag = Tag(compact.ModernStandardArabic)
+	Azerbaijani          Tag = Tag(compact.Azerbaijani)
+	Bulgarian            Tag = Tag(compact.Bulgarian)
+	Bengali              Tag = Tag(compact.Bengali)
+	Catalan              Tag = Tag(compact.Catalan)
+	Czech                Tag = Tag(compact.Czech)
+	Danish               Tag = Tag(compact.Danish)
+	German               Tag = Tag(compact.German)
+	Greek                Tag = Tag(compact.Greek)
+	English              Tag = Tag(compact.English)
+	AmericanEnglish      Tag = Tag(compact.AmericanEnglish)
+	BritishEnglish       Tag = Tag(compact.BritishEnglish)
+	Spanish              Tag = Tag(compact.Spanish)
+	EuropeanSpanish      Tag = Tag(compact.EuropeanSpanish)
+	LatinAmericanSpanish Tag = Tag(compact.LatinAmericanSpanish)
+	Estonian             Tag = Tag(compact.Estonian)
+	Persian              Tag = Tag(compact.Persian)
+	Finnish              Tag = Tag(compact.Finnish)
+	Filipino             Tag = Tag(compact.Filipino)
+	French               Tag = Tag(compact.French)
+	CanadianFrench       Tag = Tag(compact.CanadianFrench)
+	Gujarati             Tag = Tag(compact.Gujarati)
+	Hebrew               Tag = Tag(compact.Hebrew)
+	Hindi                Tag = Tag(compact.Hindi)
+	Croatian             Tag = Tag(compact.Croatian)
+	Hungarian            Tag = Tag(compact.Hungarian)
+	Armenian             Tag = Tag(compact.Armenian)
+	Indonesian           Tag = Tag(compact.Indonesian)
+	Icelandic            Tag = Tag(compact.Icelandic)
+	Italian              Tag = Tag(compact.Italian)
+	Japanese             Tag = Tag(compact.Japanese)
+	Georgian             Tag = Tag(compact.Georgian)
+	Kazakh               Tag = Tag(compact.Kazakh)
+	Khmer                Tag = Tag(compact.Khmer)
+	Kannada              Tag = Tag(compact.Kannada)
+	Korean               Tag = Tag(compact.Korean)
+	Kirghiz              Tag = Tag(compact.Kirghiz)
+	Lao                  Tag = Tag(compact.Lao)
+	Lithuanian           Tag = Tag(compact.Lithuanian)
+	Latvian              Tag = Tag(compact.Latvian)
+	Macedonian           Tag = Tag(compact.Macedonian)
+	Malayalam            Tag = Tag(compact.Malayalam)
+	Mongolian            Tag = Tag(compact.Mongolian)
+	Marathi              Tag = Tag(compact.Marathi)
+	Malay                Tag = Tag(compact.Malay)
+	Burmese              Tag = Tag(compact.Burmese)
+	Nepali               Tag = Tag(compact.Nepali)
+	Dutch                Tag = Tag(compact.Dutch)
+	Norwegian            Tag = Tag(compact.Norwegian)
+	Punjabi              Tag = Tag(compact.Punjabi)
+	Polish               Tag = Tag(compact.Polish)
+	Portuguese           Tag = Tag(compact.Portuguese)
+	BrazilianPortuguese  Tag = Tag(compact.BrazilianPortuguese)
+	EuropeanPortuguese   Tag = Tag(compact.EuropeanPortuguese)
+	Romanian             Tag = Tag(compact.Romanian)
+	Russian              Tag = Tag(compact.Russian)
+	Sinhala              Tag = Tag(compact.Sinhala)
+	Slovak               Tag = Tag(compact.Slovak)
+	Slovenian            Tag = Tag(compact.Slovenian)
+	Albanian             Tag = Tag(compact.Albanian)
+	Serbian              Tag = Tag(compact.Serbian)
+	SerbianLatin         Tag = Tag(compact.SerbianLatin)
+	Swedish              Tag = Tag(compact.Swedish)
+	Swahili              Tag = Tag(compact.Swahili)
+	Tamil                Tag = Tag(compact.Tamil)
+	Telugu               Tag = Tag(compact.Telugu)
+	Thai                 Tag = Tag(compact.Thai)
+	Turkish              Tag = Tag(compact.Turkish)
+	Ukrainian            Tag = Tag(compact.Ukrainian)
+	Urdu                 Tag = Tag(compact.Urdu)
+	Uzbek                Tag = Tag(compact.Uzbek)
+	Vietnamese           Tag = Tag(compact.Vietnamese)
+	Chinese              Tag = Tag(compact.Chinese)
+	SimplifiedChinese    Tag = Tag(compact.SimplifiedChinese)
+	TraditionalChinese   Tag = Tag(compact.TraditionalChinese)
+	Zulu                 Tag = Tag(compact.Zulu)
+)
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 394c762a..145c6497 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -268,6 +268,19 @@ github.com/posener/complete/match
 ## explicit
 github.com/spf13/afero
 github.com/spf13/afero/mem
+# github.com/splunk/go-splunk-client v0.0.1
+## explicit; go 1.18
+github.com/splunk/go-splunk-client/pkg/attributes
+github.com/splunk/go-splunk-client/pkg/authenticators
+github.com/splunk/go-splunk-client/pkg/client
+github.com/splunk/go-splunk-client/pkg/deepset
+github.com/splunk/go-splunk-client/pkg/entry
+github.com/splunk/go-splunk-client/pkg/internal/checks
+github.com/splunk/go-splunk-client/pkg/internal/paths
+github.com/splunk/go-splunk-client/pkg/messages
+github.com/splunk/go-splunk-client/pkg/selective
+github.com/splunk/go-splunk-client/pkg/service
+github.com/splunk/go-splunk-client/pkg/values
 # github.com/ulikunitz/xz v0.5.5
 ## explicit
 github.com/ulikunitz/xz
@@ -329,6 +342,7 @@ golang.org/x/net/http2
 golang.org/x/net/http2/hpack
 golang.org/x/net/idna
 golang.org/x/net/internal/timeseries
+golang.org/x/net/publicsuffix
 golang.org/x/net/trace
 # golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
 ## explicit; go 1.11
@@ -343,6 +357,12 @@ golang.org/x/sys/internal/unsafeheader
 golang.org/x/sys/unix
 # golang.org/x/text v0.3.6
 ## explicit; go 1.11
+golang.org/x/text/cases
+golang.org/x/text/internal
+golang.org/x/text/internal/language
+golang.org/x/text/internal/language/compact
+golang.org/x/text/internal/tag
+golang.org/x/text/language
 golang.org/x/text/secure/bidirule
 golang.org/x/text/transform
 golang.org/x/text/unicode/bidi